Appearance
题目
一个多道批处理系统中仅有 P1 和 P2 两个作业, P2 比 P1 晚 5ms 到达,它们的计算和 I/O 操作顺序如下:
P1 :计算 60ms,I/O 80ms,计算 20ms
P2 :计算 120ms,I/O 40ms,计算 40ms
若不考虑调度和切换时间,则完成两个作业需要的时间最少是( )。
错因
A
可能算了某种"全并行"假设——但 P1 P2 共享 CPU(CPU 只 1 个),两个作业的计算阶段不能并行;只有"P1 计算 + P2 I/O"或"P2 计算 + P1 I/O"才能并行。240ms 估得过低,没把 CPU 互斥用算进去。
C
把 I/O 和计算之间的等待算多了——一种典型错法是漏了"P2 在 P1 第一段计算时已经在等"。P2 在 t=5 就到,本可在 P1 进入 I/O(t=60)后立即开始它的计算 120ms;如果误以为要等 P1 全部 80ms I/O 走完,P2 的开始时刻会被推迟。
D
把所有阶段串行加:P1 全程 160 + P2 全程 200 = 360ms——这是单道顺序执行的总时间。多道环境下两个作业的 CPU 和 I/O 能交错并行,必然 < 360。
总解析
资源:CPU 1、I/O 设备(假设 1 台,但题面只说 I/O 操作,不要求 P1 P2 用同一个 I/O 设备——本题按经典做法假设 I/O 设备各自独立可用)。
作业阶段:
| 作业 | 阶段 1 | 阶段 2 | 阶段 3 |
|---|---|---|---|
| P1 (t=0 到达) | 计算 60 | I/O 80 | 计算 20 |
| P2 (t=5 到达) | 计算 120 | I/O 40 | 计算 40 |
调度策略:抢占规则——P1 先到,先占 CPU;P1 进入 I/O 时 CPU 让给 P2;P1 I/O 完成时 P2 还在跑,P1 等到 P2 进入 I/O 才接手剩余计算。
逐时段排表(时间从 t=0 开始):
| 时段 | CPU | I/O 设备 |
|---|---|---|
| 0 ~ 60 | P1.计算 (60ms) | — |
| 60 ~ 140 | P2.计算(P1 让 CPU 给 P2,从 t=5 已等 55ms) | P1.I/O (80ms, t=60~140) |
| 140 ~ 180 | P2.计算续(P2 总计算 120ms,从 60 跑到 180) | — |
| 180 ~ 200 | P1.计算 20ms(剩余阶段 3) | P2.I/O (40ms, t=180~220) |
| 200 | P1 完成(总用 200ms) | P2.I/O 仍在 |
| 220 | — | P2.I/O 完成 |
| 220 ~ 260 | P2.计算 40ms(阶段 3) | — |
| 260 | P2 完成(总用 260ms) |
关键时刻验证:
- t=60:P1 计算完 60ms,进入 I/O;CPU 立刻给 P2
- t=140:P1 I/O 完(80ms 后),但 P2 还在 CPU 上跑(t=60+120 = 180 才完);P1 进就绪态等 CPU
- t=180:P2 计算完,进入 I/O;CPU 立刻给 P1 跑剩下 20ms
- t=200:P1 完成;P2 还在 I/O
- t=220:P2 I/O 完,回到 CPU 跑最后 40ms
- t=260:P2 完成
总时间 = 260ms。
关键观察:P2 第三阶段 (40ms 计算) 是"压轴"——必须等 P2.I/O 完才能跑。完成时刻 = P2.I/O 结束 (220) + 40 = 260。
最终答案是 B。