| 定义 | 举例 |
用户层软件 |
- 用户层软件实现了与用户交互的接口
- 用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务
- 用户可直接使用该层提供的、与I/0操作相关的库函数对设备进行操作
|
- 如发送read命令
- 如讲二进制整数转换为ascii码的格式打印
- Eg: prinftf("hello, world!");会被翻译成等价的write系统调用,当然,用户层软件也会在系统调用时填入相应参数。
|
设备独立性软件 |
- 设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。
- 主要实现的功能:
- 向上层提供统一的调用接口( 如read/write系统调用)
- 设备的保护:原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。
- 差错处理:设备独立性软件需要对一些设备的错误进行处理
- 设备的分配与回收
- 数据缓冲区管理:可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异
- 建立逻辑设备名到物理设备名的映射关系;
- 根据设备类型选择调用相应的驱动程序;
- 用户或用户层软件发出I/O操作相关系统调用的系统调用时,需要指明此次要操作的I/O设备的逻辑设备名(eg:去学校打印店打印时,需要选择打印机1/打印机2/打印机3 ,其实这些都是逻辑设备名)设备独立性软件需要通过“逻辑设备表(LUT,Logical UnitTable)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序
|
- 如解析read命令
- 如检查用户是否有权使用设备(即设备保护)
- 如进行缓冲管理
|
设备驱动程序 |
- 负责检查用户I/O的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式,执行OS发出的I/O命令,启动I/O设备,完成I/O操作。
- 若更换物理设备,只需要修改设备驱动程序不需要修改应用程序
- 将收到的抽象要求转换为具体要求【主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等】
- 响应通道发来的中断请求,根据中断类型调用响应的中断处理程序
- 驱动程序一般会以一个独立进程的方式存在。
|
- 如将解析好的read命令转换为指令
- 如计算磁盘的柱面号,磁头号,扇区号
- 如设备寄存器写命令
- 如将逻辑块号转换为物理地址
|
中断处理程序 |
- 当I/0任务完成时,I/O控制器会发送一个中断信号, 系统会根据中断信号类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下:
|
|