某进程因等待磁盘 I/O 从运行态进入阻塞态。当该 I/O 操作完成后,在尚未获得 CPU 的情况下,该进程通常转入()。
I/O 完成意味着进程等待的事件已经满足,它具备继续运行的条件,因此从阻塞态进入就绪队列。但 CPU 可能正被其他进程占用,只有调度程序选中它并分配处理器后,才从就绪态进入运行态。
选项分析
错误。I/O完成后还需经过调度获得CPU,不能一般性地直接进入运行态。
错误。完成一次I/O不表示进程执行结束。
正确。等待事件满足后具备运行条件,但未占用CPU,属于就绪态。
错误。原等待事件已经完成,阻塞原因消失,应离开阻塞队列。
本题为什么容易错
“条件满足”和“正在执行”是两件事。就绪态拥有除CPU以外的运行条件,阻塞态则仍在等事件;这条边界是进程状态题的核心。
简短答案
等待 I/O 的进程,在 I/O 完成后为什么先进入就绪态,正确答案是 C(就绪态)。I/O 完成意味着进程等待的事件已经满足,它具备继续运行的条件,因此从阻塞态进入就绪队列。但 CPU 可能正被其他进程占用,只有调度程序选中它并分配处理器后,才从就绪态进入运行态。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 运行态 | 本题干扰项 | 错误。I/O完成后还需经过调度获得CPU,不能一般性地直接进入运行态。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 终止态 | 本题干扰项 | 错误。完成一次I/O不表示进程执行结束。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 就绪态 | 本题正确答案 | 正确。等待事件满足后具备运行条件,但未占用CPU,属于就绪态。 | 看到题干核心场景时优先联想到它 |
| 仍保持阻塞态,直到下一次发生I/O | 本题干扰项 | 错误。原等待事件已经完成,阻塞原因消失,应离开阻塞队列。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 运行态:错误。I/O完成后还需经过调度获得CPU,不能一般性地直接进入运行态。
- 终止态:错误。完成一次I/O不表示进程执行结束。
- 仍保持阻塞态,直到下一次发生I/O:错误。原等待事件已经完成,阻塞原因消失,应离开阻塞队列。
知识点详解
就绪进程已经具备执行所需的资源,只等待CPU;阻塞进程则因I/O、信号量或其他事件未完成而暂时不能执行。设备中断通知操作系统I/O完成后,内核把相关进程移入就绪队列,是否立即抢占当前进程取决于调度策略,但状态语义上仍要先具备就绪条件。
备考速记
事件完成只管解阻塞,真正运行还要等调度。
I/O完成 在I/O完成场景中的作用
I/O完成在本题中的核心价值,是解决“某进程因等待磁盘 I/O 从运行态进入阻塞态。当该 I/O 操作完成后,在尚未获得 CPU 的情况下,该进程通常转入()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 根据时间片用完、请求I/O、I/O完成判断状态转换。
- 判断某些状态之间是否存在直接转换,例如阻塞到运行通常不直接发生。
- 结合进程调度和中断处理分析就绪队列变化。
I/O完成 在软件设计师软考中的考法
软考选择题通常不会只考概念定义,还会把I/O完成放到I/O完成场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
I/O完成只是把“不能跑”的原因消除了,并不等于CPU立刻空出来。进程先回候车区,也就是就绪队列;等调度器叫到它,才真正进入运行态。题干特意写“尚未获得CPU”,就是在提醒不要跳过就绪态。
考点定位
阻塞→就绪由等待事件完成触发;就绪→运行由处理机调度触发;运行→就绪常由时间片用完或被更高优先级进程抢占触发。
易错提醒
- 把I/O设备完成中断理解为操作系统立即切换到该进程。
- 混淆运行→就绪与运行→阻塞:前者仍能运行但暂时失去CPU,后者缺少事件条件。
- 认为阻塞进程可以自己主动变为运行态,忽略调度程序。
备考提示
- 画三态模型,并在每条箭头旁写触发事件:调度、时间片、等待、事件完成。
- 判断状态时分两问:运行条件是否齐全?当前是否占有CPU?
你可能还想了解
- 阻塞态为什么不能直接变成运行态?
- 时间片用完后进程进入什么状态?
- 运行态转阻塞态通常由什么事件触发?
- 就绪态与阻塞态的本质区别是什么?
本文小结
I/O完成后,进程等待的事件已经满足,但尚未获得CPU,因此从阻塞态转入就绪态。只有调度程序分配CPU后,它才进一步进入运行态。