1. 用户层软件

用户层软件实现了与用户交互的接口,用户可直接使用该层提供的、与 I/O 操作相关的库函数对设备进行操作

用户层软件将用户请求翻译成格式化的 I/O 请求,并通过“系统调用”请求操作系统内核的服务

printf(“hello, world!”);会被翻译成等价的 write 系统调用,当然,用户层软件也会在系统调用时填入相应参数。

Windows 操作系统向外提供的一系列系统调用,但是由于系统调用的格式严格,使用麻顺,因此在用户层上封装了一系列更方便的库函数按口供用户使用(Windows Api)

2. 设备独立性软件

设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现

  1. 向上层提供统一的调用接口(如 read/write 系统调用)

  2. 设备的保护

    原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权
    限也不一样。

  3. 差错处理

    设备独立性软件需要对一些设备的错误进行处理

  4. 设备的分配与回收

  5. 数据缓冲区管理

    可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异

  6. 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序

    用户或用户层软件发出 I/O 操作相关系统调用的系统调用时,需要指明比次要操作的 I/O 设备的逻辑设备名(eg:去学校打印店打印时,需要选择打印机1/打印机2/打印机3,其实这些都是逻辑设备名)
    设备独立性软件需要通过“逻辑设备表(LUT, Logical Unit
    Table)”
    来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序

    操作系统系统可以采用两种方式管理逻辑设备表(LUT)

    • 整个系统只设置一个 LUT,意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。
    • 为每个用户设置一张 LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为用户建立一个用户管理进程,而 LUT 就存放在用户管理进程的 PCB 中。

3. 设备驱动程序

主要负责对硬件设备的具体控制,将上层发出的一系列命令(如 read/write )转化成特定设备“能听得僅”的一系列操作。包括设置设备寄存器;检查设备状态等

不同设备的内部硬件特性也不同,这些特性具有厂家才知道,因此厂家须提供与设备相对应的驱动序,CPU 执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作

4. 中断处理程序

当 I/O 任务完成时,I/O 控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。

5. 总结

直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的,没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的