Appearance
题目
用户程序发出磁盘 I/O 请求后,系统的正确处理流程是操作系统的 I/O 子系统通常由四个层次组成,每一层明确定义了与邻近层次的接口。其合理的层次组织排列顺序是( )。
错因
B
把中断处理放在驱动之上了。但层次结构里驱动在中断之上——驱动启动 I/O 后等待中断;中断到来时由中断处理程序响应,再回到驱动继续后续工作。中断处理是最底层(紧贴硬件),不能凌驾于驱动。
C
把驱动放在设备无关软件之上——倒置了。设备无关软件提供通用接口(缓冲管理、错误处理、命名等),它不依赖具体设备;驱动是设备特定的,更靠下。逻辑上:通用先(上层),特定后(下层)。
D
中断处理放第二位——同 B 的错,把中断当成"早期阶段"了。其实 I/O 软件层次是自顶向下处理请求 → 自底向上响应,中断响应一定在最底(硬件就在它之下)。
总解析
I/O 软件分层(自顶向下):
| 层 | 职责 | 例子 |
|---|---|---|
| ① 用户级 I/O 软件 | 用户态库函数、格式化 I/O | printf、scanf、C 标准 I/O 库 |
| ② 设备无关 I/O 软件 | 统一接口:缓冲管理、命名、错误处理、设备分配 | read/write 内核处理、设备命名空间 |
| ③ 设备驱动程序 | 设备相关:把通用请求翻译成具体硬件操作 | 磁盘驱动、网卡驱动、键盘驱动 |
| ④ 中断处理程序 | 响应硬件中断、唤醒等 I/O 的进程 | 磁盘 I/O 完成中断 |
自顶向下处理一次 I/O:
用户调用 printf
↓ 转换为 read/write
设备无关层处理(缓冲、错误检查)
↓ 调用驱动接口
设备驱动构造硬件命令、启动磁盘
↓ 等待
(硬件操作)
↑ 完成发中断
中断处理程序响应、唤醒等待进程
↑ 驱动收尾
↑ 设备无关层返回数据
↑ 用户得到结果排序判定原则:越上层越接近用户、越通用;越下层越接近硬件、越特定。中断处理紧贴硬件,必在最底;驱动设备特定,在中断之上但低于设备无关层;设备无关层提供通用接口,最靠上(在用户库之下)。
正确顺序:用户级 → 设备无关 → 驱动 → 中断处理。
最终答案是 A。