软件设计师 · 高频练习

等待 I/O 的进程,在 I/O 完成后为什么先进入就绪态?

中级 单选题 第 857 题 中等 软件设计师操作系统进程状态阻塞态就绪态I/O完成
题目

某进程因等待磁盘 I/O 从运行态进入阻塞态。当该 I/O 操作完成后,在尚未获得 CPU 的情况下,该进程通常转入()。

A 运行态
B 终止态
C 就绪态
D 仍保持阻塞态,直到下一次发生I/O
题目类型:原创高频练习题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
正确答案
C
答案解析

I/O 完成意味着进程等待的事件已经满足,它具备继续运行的条件,因此从阻塞态进入就绪队列。但 CPU 可能正被其他进程占用,只有调度程序选中它并分配处理器后,才从就绪态进入运行态。

选项分析

A

错误。I/O完成后还需经过调度获得CPU,不能一般性地直接进入运行态。

B

错误。完成一次I/O不表示进程执行结束。

C

正确。等待事件满足后具备运行条件,但未占用CPU,属于就绪态。

D

错误。原等待事件已经完成,阻塞原因消失,应离开阻塞队列。

本题为什么容易错

“条件满足”和“正在执行”是两件事。就绪态拥有除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后,它才进一步进入运行态。