Skip to content

2019年 408 操作系统 第 27 题

操作系统2019年选择题2分

题目

系统采用二级反馈队列调度算法进行进程调度。就绪队列 Q1 采用时间片轮转调度算法,时间片为 10ms;就绪队列 Q2 采用短进程优先调度算法;系统优先调度 Q1 队列中的进程,当 Q1 为空时系统才会调度 Q2 中的进程;新创建的进程首先进入 Q1;Q1 中的进程执行一个时间片后,若未结束,则转入 Q2。若当前 Q1,Q2 为空,系统依次创建进程 P1,P2 后即开始进程调度,P1,P2 需要的 CPU 时间分别为 30ms 和 20ms,则进程 P1,P2 在系统中的平均等待时间为( )。

错因

A

把"等待时间"算成了"周转时间"再凑除法:(50+30)/2 = 40 不对,再调成 25。等待时间和周转时间是两个量:周转 = 完成时刻 − 到达时刻等待 = 周转 − CPU 时间。混用就会得到 25 这种"差不多但不对"的数。

B

把 P1 的等待时间(20ms)当成两人的平均了,没有把 P2 那一段(10ms)拉低进去——实际平均是 (20+10)/2 = 15。也可能是把"等待 Q2 期间的时间段"重复算或者算错了——P2 在 Q2 里只等了 0ms(Q1 一空它就被 SJF 选中跑),漏了这点会高估。

D

把"P2 的等待时间 10ms"直接当成平均,忽略 P1 等待 20ms。或者反过来:只算 Q1 阶段每人各等 10ms,把 Q2 阶段的等待忘了——其实 P1 在 Q2 里还要再等 P2 跑完 10ms 才轮到自己,光算 Q1 一段不够。

总解析

二级反馈队列规则:Q1 RR 时间片 10ms,Q2 SJF;Q1 优先;新进程进 Q1,跑一个时间片没结束就降级到 Q2。P1 P2 同时刻 (T=0) 到达,P1 先创建排在 P2 前

逐时段推演调度:

时段谁在跑行为Q1 状态Q2 状态
0 ~ 10P1(Q1 队首)跑完 10ms 时间片,剩 20ms → 降级到 Q2[P2][P1(20)]
10 ~ 20P2(Q1 队首)跑完 10ms 时间片,剩 10ms → 降级到 Q2[][P1(20), P2(10)]
Q1 空 → 调度 Q2 SJFP2 剩 10 < P1 剩 20 → 选 P2
20 ~ 30P2跑 10ms 完成[][P1(20)]
30 ~ 50P1跑 20ms 完成[][]

算等待时间(等待 = 周转 − 服务):

进程完成时刻周转服务(CPU 时间)等待
P15050 − 0 = 503050 − 30 = 20
P23030 − 0 = 302030 − 20 = 10

平均等待时间:

P2 看似"运气好"——它先在 Q1 跑了 10ms,然后 Q2 一空就被 SJF 选中(剩余短)继续跑——所以它从 T=0 到 T=30 只等了 10ms。P1 等的更久:在 Q2 又被 SJF 排在后面。

最终答案是 C

最后更新:

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

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