Appearance
题目
一个进程的读磁盘操作完成后,操作系统针对该进程必做的是( )。
错因
B
把 I/O 完成误以为是"惩罚信号"——觉得这进程刚刚阻塞过、占了等待时间,应该降低优先级。实际上 I/O 完成是好事:等待这条数据的进程现在可以继续干活了,OS 没理由因此降它的优先级。在多数 OS 里 I/O 密集型进程的优先级反而会被提(响应性优化),不是降。
C
读磁盘是把数据从磁盘读进进程已经分配好的内存缓冲区——内存早在 read 系统调用时就准备好了,I/O 完成时数据填进去就行,不会触发新的内存分配。把"完成 I/O"和"分配内存"挂钩混淆了 I/O 流程。
D
时间片是调度器的概念,跟 I/O 完成没关系。时间片大小要么是固定的(RR 配置),要么按调度策略调整(多级反馈队列里降到下一级队列时变长),都不是因为某次 I/O 结束触发的。把"奖励 I/O 进程"误推成了"加大时间片"。
总解析
进程发起读磁盘时,发生过这串状态:
运行 → (read 系统调用,等 I/O) → 阻塞(在 I/O 等待队列)I/O 完成后这个进程不能再睡——OS 必须把它叫醒,让调度器有机会再选它。具体做法:
- 把进程从 I/O 等待队列里拿出来
- 状态从阻塞改成就绪
- 把它挂到就绪队列,等调度器选
这一整套动作就是 OS 在 I/O 中断处理程序里的"唤醒"操作。题问"必做",A 修改状态为就绪正是其中最核心的一步,没有它进程永远醒不过来。
| 选项 | 是否必做 | 为什么 |
|---|---|---|
| A 改为就绪态 | 必做 ✓ | 唤醒进程的核心动作 |
| B 降低优先级 | 不做 | I/O 完成不是惩罚,多数 OS 反而会奖励 |
| C 分配内存 | 不做 | 内存早在 read 调用时备好,不重新分 |
| D 增加时间片 | 不做 | 时间片大小由调度策略管,跟 I/O 无关 |
最终答案是 A。