三个进程P1、P2、P3的到达时间和运行时间分别为(0ms,5ms)、(2ms,4ms)、(3ms,1ms),采用最短作业优先调度时,平均等待时间为()A 2.0msB 1.67msC 3.0msD 2.33ms
三个进程P1、P2、P3的到达时间和运行时间分别为(0ms,5ms)、(2ms,4ms)、(3ms,1ms),采用最短作业优先调度时,平均等待时间为() A 2.0ms B 1.67ms C 3.0ms D 2.33ms
题目解答
答案
我们来逐步分析这道关于进程调度的题目,使用的是最短作业优先(SJF, Shortest Job First)调度算法,目标是计算平均等待时间。
题目信息:
三个进程的到达时间和运行时间如下:
进程 | 到达时间 | 运行时间 |
---|---|---|
P1 | 0 ms | 5 ms |
P2 | 2 ms | 4 ms |
P3 | 3 ms | 1 ms |
调度算法:非抢占式 SJF(题目未说明是抢占式,通常默认非抢占式,但 SJF 有时也考虑抢占式版本即 SRTF。我们需要判断)
但注意:题目写的是“最短作业优先调度”,没有特别说明“抢占式”,所以一般理解为非抢占式 SJF。
但为了准确,我们先分析两种情况,再判断哪种更合理。
情况一:非抢占式 SJF
非抢占式的意思是:一旦进程开始运行,就不能被打断。选择下一个要运行的进程时,从已经到达且尚未运行的进程中选择运行时间最短的。
我们按时间线来模拟。
时间线模拟(非抢占式 SJF)
-
t = 0ms:P1 到达,系统开始运行 P1(唯一可选)
- P1 开始运行,运行 5ms,将在 t = 5ms 完成。
-
t = 2ms:P2 到达,进入就绪队列。
- 但 P1 正在运行,非抢占,所以 P2 等待。
-
t = 3ms:P3 到达,进入就绪队列。
- 此时就绪队列中有 P2(4ms)、P3(1ms)
-
t = 5ms:P1 完成。
- 现在从已到达的未运行进程(P2 和 P3)中选择运行时间最短的。
- P3(1ms) < P2(4ms),所以运行 P3。
-
t = 5ms ~ 6ms:运行 P3,6ms 完成。
-
t = 6ms ~ 10ms:运行 P2(4ms),10ms 完成。
计算每个进程的等待时间
> 等待时间 = 开始运行时间 - 到达时间
- P1:开始时间 = 0,到达时间 = 0 → 等待时间 = 0 - 0 = 0ms
- P2:到达时间 = 2ms,开始运行时间 = 6ms → 等待时间 = 6 - 2 = 4ms
- P3:到达时间 = 3ms,开始运行时间 = 5ms → 等待时间 = 5 - 3 = 2ms
平均等待时间
$(0 + 4 + 2) / 3 = 6 / 3 = 2.0 \text{ms}$
情况二:抢占式 SJF(SRTF)
我们也可以考虑抢占式,即最短剩余时间优先。
-
t = 0ms:P1 到达,开始运行(剩余时间 5ms)
-
t = 2ms:P2 到达(运行时间 4ms),P1 剩余 3ms,P2 是 4ms,P1 更短,继续运行
-
t = 3ms:P3 到达(运行时间 1ms),P1 剩余 2ms,P3 是 1ms < 2ms,所以抢占
- P1 被中断,P3 开始运行
-
t = 3~4ms:运行 P3(1ms),在 t=4ms 完成
- P3 等待时间 = 3 - 3 = 0ms
-
t = 4ms:P3 完成,现在就绪队列中有 P1(剩余 2ms)、P2(4ms)
- 选最短的:P1(2ms) < P2(4ms),运行 P1
-
t = 4~6ms:运行 P1 剩余 2ms,完成
-
P1 等待时间 = (0~2ms 运行) + (3~4ms 被中断) → 实际开始运行时间是 0,中间被中断,但“等待时间”是总的等待时间
- P1 到达 0ms,运行了 0~2ms,然后被中断,等了 3~4ms,然后 4~6ms 继续运行
- 所以 P1 等待时间 = 被中断的时间 = 1ms(t=3~4ms)
更准确:等待时间 = 完成前未运行的时间段
- P1 运行时间:0~2,4~6 → 总共 4ms?不对,P1 需要 5ms!
错误!我们重新计算。
-
P1 总运行时间是 5ms:
- 0~2ms:运行了 2ms
- 剩余 3ms
- 在 t=3ms 被 P3 抢占
- t=4ms P3 完成
- 现在比较 P1(剩余 3ms)和 P2(4ms)→ P1 更短,运行 P1
- t=4~7ms:运行 P1 剩余 3ms,完成
然后运行 P2:t=7~11ms
重新模拟 SRTF
- t=0:P1 到达,运行(剩余 5)
- t=2:P2 到达(运行时间 4),P1 剩余 3 > P2 的 4?不,3 < 4,所以 P1 继续
- t=3:P3 到达(运行时间 1),P1 剩余 2,P3 剩余 1 < 2 → P3 抢占 P1
- t=3~4:运行 P3,完成
- t=4:P3 完成,就绪:P1(剩余 2ms)、P2(4ms)→ 选 P1
- t=4~6:运行 P1,剩余时间还剩 3?不对,P1 从 0~2 运行了 2ms,总需 5ms,还剩 3ms!
纠正:
- P1:0~2ms:运行 2ms,剩余 3ms
- t=3ms:P3 到达,剩余时间 1 < 3 → 抢占
- t=3~4:P3 运行,完成
- t=4:比较 P1(剩余 3)、P2(4)→ 选 P1
- t=4~7:P1 运行 3ms,完成
- t=7:运行 P2(4ms),7~11 完成
等待时间(SRTF)
- P1:到达 0,开始 0,中间被中断 3~4ms,所以等待时间 = 1ms
- P2:到达 2,开始运行 7 → 等待 = 7 - 2 = 5ms
- P3:到达 3,开始 3 → 等待 = 0ms
平均等待时间 = (1 + 5 + 0)/3 = 6/3 = 2.0ms
咦,结果一样?
再核对:
- P1 等待:只在 t=3~4ms 等待了 1ms
- P2 等待:t=2~7ms,共 5ms
- P3 等待:0ms
- 总和:6ms,平均 2.0ms
但注意:在非抢占式 SJF 中:
- P1:0ms 等待
- P2:6 - 2 = 4ms
- P3:5 - 3 = 2ms
- 总和:6ms,平均 2.0ms
两种调度方式下,平均等待时间都为 2.0ms
结论
无论采用非抢占式 SJF还是抢占式 SJF(SRTF),本题的平均等待时间都是 2.0ms
所以答案是:
$\boxed{A\ 2.0ms}$
✅ 最终答案:
A 2.0ms