Skip to content

2013年 408 操作系统 第 25 题

操作系统2013年选择题2分

题目

用户程序发出磁盘 I/O 请求后,系统的处理流程是:用户程序→系统调用处理程序→设备驱动程序→中断处理程序。其中,计算数据所在磁盘的柱面号、磁头号、扇区号的程序是( )。

错因

A

用户程序看到的是逻辑视图——open、read、write 操作的是文件名 + 字节偏移,根本不知道磁盘有几个柱面、磁头、扇区。把"柱面/磁头/扇区"这种物理参数当成用户程序能算的,是把抽象层级搞反了:用户层之上是 OS 屏蔽硬件细节、不是用户去管硬件。

B

系统调用处理程序处于用户态和内核态交界——它的工作是接收参数、做合法性检查(fd 是否有效、buf 指针是否在用户空间)、再把请求转发给下层。它不关心具体硬件参数,那是更下层(设备驱动)的事。

D

中断处理程序在数据传输完成之后才执行——它做的是善后工作(清状态、唤醒等待进程、更新缓冲区指针)。它不计算"数据在哪",因为数据已经传完了;这一步在驱动启动 I/O 之前就要算好,不可能放到事后。

总解析

I/O 软件分层:

用户程序          ← 给文件名 + 字节偏移

系统调用处理     ← 切到内核态、参数校验、分发

设备无关 I/O 层   ← 缓冲管理、通用错误处理

设备驱动程序     ← 把"逻辑参数"翻译成"物理参数",启动具体硬件

硬件 → 中断处理 ← 传完后回调

每层只管自己抽象级别上的事:

职责是否计算物理参数?
用户程序给文件名 + 偏移
系统调用处理切态 + 参数校验 + 分发
设备驱动程序把逻辑请求翻译成具体硬件参数(柱面/磁头/扇区),构造控制器命令
中断处理传输完毕的善后✗(事情已经做完)

关键判定:柱面/磁头/扇区是磁盘特定的物理参数——只有"知道目标设备是磁盘"的层才会算它。这一层就是设备驱动:它和具体硬件型号绑定,写驱动的人才能根据磁盘几何(柱面数、扇区数)把"第 N 块"翻译成"哪个柱面、哪个磁头、哪个扇区"。

更上层(用户、系统调用处理)不知道是不是磁盘,不能算磁盘特定参数;更下层(中断)已经在硬件之后,没机会算。

最终答案是 C

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题