Appearance
题目
某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为 1us。在 T 时刻就绪队列中有 3 个进程 P1、P2 和 P3,其在就绪队列中的等待时间、需要的 CPU 时间和优先权如下表所示。若优先权值大的进程优先获得 CPU,从 T 时刻起系统开始进程调度,则系统的平均周转时间为()。
| 进程 | 等待时间 | 需要的 CPU 时间 | 优先级 |
|---|---|---|---|
| P1 | 30us | 12us | 10 |
| P2 | 15us | 24us | 30 |
| P3 | 18us | 36us | 20 |
若优先权值大的进程优先获得 CPU,从 T 时刻起系统开始进程调度,则系统的平均周转时间为( )。
错因
A
直接把三个 CPU 时间加起来除以 3:,再凑了几下凑出 54——本质是把"周转"理解成了 CPU 时间或某种"运行时长"。但周转 = 完成时刻 − 到达时刻,每个进程从到达到完成期间被前面的进程挡住的时间也要算进去,光算 CPU 跑了多久远远不够。
B
注意到要算到达 → 完成的整段时间,但忘了把 T 之前已等的那一段算进周转。从 T 时刻起算每人的"驻留时间"(1+24+1+36+1+12 拆给三人)只是 T 之后的部分,而题给的 30/15/18us 是 T 之前已经等过的——按周转的定义这部分必须叠加,漏了就少 (30+15+18)/3 = 21 左右,正好凑到 73。
C
记得加 T 前等待,但只算了 2 次调度开销而漏了 1 次——比如以为"第一个进程不需要调度选它",把开头那 1us 抹了;或者末尾切换的 1us 没算。结果比正确值少 1us,平均后就是 74。题目说得很清楚:"完成一次进程调度和进程切换的开销为 1us",三次调度(包括第一次)三次都得算。
总解析
非抢占式优先级调度,优先级值大者先:P2 (30) > P3 (20) > P1 (10)。每次调度切换有 1us 系统开销,从 T 时刻开始第一次调度也要算。
第 1 步:排时间轴(T 记作 0)
| 时段 | 内容 | 时长 |
|---|---|---|
| 0 ~ 1 | 第 1 次调度切换 | 1 |
| 1 ~ 25 | P2 执行(CPU 24us) | 24 |
| 25 ~ 26 | 第 2 次调度切换 | 1 |
| 26 ~ 62 | P3 执行(CPU 36us) | 36 |
| 62 ~ 63 | 第 3 次调度切换 | 1 |
| 63 ~ 75 | P1 执行(CPU 12us) | 12 |
第 2 步:算各自周转时间
周转时间 = 完成时刻 − 到达时刻 = (T 后到完成的时长) + (T 前已等待时长)
| 进程 | T 后完成时刻 | T 前已等 | 周转 |
|---|---|---|---|
| P2 | 25 | 15 | 25 + 15 = 40 |
| P3 | 62 | 18 | 62 + 18 = 80 |
| P1 | 75 | 30 | 75 + 30 = 105 |
第 3 步:求平均
最终答案是 D。