Appearance
题目
下列事件中,可能引起进程调度程序执行的是( )。
Ⅰ. 中断处理结束 Ⅱ. 进程阻塞 Ⅲ. 进程执行结束 Ⅳ. 进程的时间片用完
错因
A
只挑了"进程主动 / 被动让出 CPU"的两种(Ⅰ 中断结束、Ⅲ 执行结束),漏了 Ⅱ 阻塞和 Ⅳ 时间片到期。但 Ⅱ 阻塞实际上是最经典的调度时机——进程一阻塞,CPU 立马空出来,必须重新调度;Ⅳ 时间片到期则是抢占式调度的标志事件,必须重新选下一个进程。
B
挑了 Ⅱ + Ⅳ,看到这两个最直接的"让出 CPU"事件就锁定了,对 Ⅰ 和 Ⅲ 想不通。但 Ⅲ 执行结束后 CPU 显然空了得选下一个跑(最直观),Ⅰ 中断结束时也常常发生重新调度——比如 I/O 完成中断让某个高优先级进程从阻塞态变为就绪态,OS 在中断返回前会检查是否需要切换。
C
漏选 Ⅰ 和 Ⅱ,只看到了"明显的让出 CPU"事件。Ⅰ 中断处理结束是隐式的高频调度时机:每次时钟中断、I/O 完成中断、缺页中断处理结束时,OS 都会顺便检查"现在跑这个进程合不合适"。Ⅱ 进程阻塞更是必然引发调度——CPU 都空了不调度还能干啥?
总解析
进程调度的时机分两类:主动放弃 CPU 和 被动让出 CPU。题里四个选项覆盖了这两类的几乎全部典型场景:
| 事件 | 类型 | 为什么会触发调度 |
|---|---|---|
| Ⅰ 中断处理结束 | 被动 | OS 在中断返回前检查"中断里改变了进程状态没"——比如 I/O 完成中断让某进程从阻塞回到就绪,可能要抢占 |
| Ⅱ 进程阻塞 | 主动 | 进程因 I/O / 信号量 / sleep 自己挂起,CPU 立即空出来,必须挑下一个进程 |
| Ⅲ 进程执行结束 | 主动 | 进程跑完退出,CPU 空,必须挑下一个 |
| Ⅳ 进程时间片用完 | 被动 | RR 等抢占式算法的标志事件,必须重新挑下一个进程 |
四个事件全是调度时机——所以全选。注意题面问"可能引起"——只要这个事件下有可能触发一次调度,就算数。Ⅰ 和 Ⅳ 在不同算法 / 不同场景下会发生调度的概率不同,但都属于"调度有可能在这里发生"的事件。
补充几个题里没提但同样是调度时机的:
- 进程从内核态返回用户态时(检查抢占)
- 创建一个高优先级新进程(可能立即抢占当前进程)
- 进程切换优先级(如果策略允许)
最终答案是 D。