Skip to content

2022年 408 操作系统 第 25 题

操作系统2022年选择题2分

题目

进程 P0、P1、P2 和 P3 进入就绪队列的时刻、优先级(值越小优先权越高)及 CPU 执行时间如下表所示。

进程进入就绪队列的时刻优先级CPU 执行时间
P00 ms15100 ms
P110 ms2060 ms
P210 ms1020 ms
P315 ms610 ms

若系统采用基于优先权的抢占式进程调度算法,则从 0ms 时刻开始调度,到 4 个进程都运行结束为止,发生进程调度的总次数为( )。

错因

A

只数了"运行进程发生变化"的几次(P0→P2、P2→P3、P3→P2、P2→P0),4 次切换。漏掉了 t=0 启动 P0 也算一次调度,以及 P0 结束后切到 P1 同样要从就绪队列里挑——只要"重新决定 CPU 给谁"就是一次调度。

B

漏了一次。常见漏法是把 t=0 启动 P0 默认成"开机自动跑"不计入;或者觉得 P0 跑完只剩 P1 一个候选"没得选了"——但 OS 还是要走一次调度流程从就绪队列里把 P1 拎出来。

D

把 t=10 时 P1、P2 同时到达数成了两次调度。但 P1 的优先级 20 比当前正在跑的 P0(15)还低,根本上不了 CPU——进入就绪队列不等于发生调度。同一时刻多个进程到达,至多触发一次调度(看最高优先级那个是否抢占)。

总解析

题面有两个关键约束要扣紧:优先级值越小越高 + 抢占式。每次"有事件发生"都要重新看一眼当前队列里的最高优先级是不是仍然在跑——只要"重新选了一次",调度次数就 +1。

事件来源就三类:进程到达、进程结束、(抢占式独有的)新到的优先级比当前高。逐事件推:

时刻事件当前进程就绪队列最高优先级决定计数
0P0 到达空闲P0(15)启动 P0① 调度
10P1(20)、P2(10) 到达P0 跑了 10ms 剩 90P2(10) < P0(15)P2 抢占② 调度
15P3(6) 到达P2 跑了 5ms 剩 15P3(6) < P2(10)P3 抢占③ 调度
25P3 跑完结束P2(10) 最高继续 P2④ 调度
40P2 跑完结束P0(15) 最高切到 P0⑤ 调度
130P0 跑完结束P1(20) 唯一切到 P1⑥ 调度
190P1 结束队列空全部完成

合计 6 次

注意 t=10 时 P1 也到达,但它的优先级 20 比正在跑的 P0(15) 还低,连"被考虑"的资格都没有,不增加调度次数。

最终答案是 C

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数