I/O 完成后,为什么不直接运行?
进程状态转换的一道经典思考题
I/O 完成:中断唤醒进程
就绪
万事俱备,只欠 CPU
运行
正在 CPU 上执行
阻塞
等待 I/O 等事件
调度选中
等待事件
事件完成(如 I/O 中断)
进程A
中断 ≠ 调度:唤醒 ≠ 上CPU
调度器视角:谁能上 CPU
就绪
万事俱备,只欠 CPU
运行
正在 CPU 上执行
阻塞
等待 I/O 等事件
调度选中
等待事件
事件完成(如 I/O 中断)
时间片用完
进程B
进程A
总结
阻塞 → 就绪
钥匙在事件手里:I/O 等事件完成,中断唤醒进程,放进就绪队列,获得被调度的资格
就绪 → 运行
钥匙在调度器手里:调度器从就绪队列选中进程,它才能真正上 CPU 执行