Skip to content

2012年 408 操作系统 第 29 题

操作系统2012年选择题2分

题目

一个多道批处理系统中仅有 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 到达)计算 60I/O 80计算 20
P2 (t=5 到达)计算 120I/O 40计算 40

调度策略:抢占规则——P1 先到,先占 CPU;P1 进入 I/O 时 CPU 让给 P2;P1 I/O 完成时 P2 还在跑,P1 等到 P2 进入 I/O 才接手剩余计算。

逐时段排表(时间从 t=0 开始):

时段CPUI/O 设备
0 ~ 60P1.计算 (60ms)
60 ~ 140P2.计算(P1 让 CPU 给 P2,从 t=5 已等 55ms)P1.I/O (80ms, t=60~140)
140 ~ 180P2.计算续(P2 总计算 120ms,从 60 跑到 180)
180 ~ 200P1.计算 20ms(剩余阶段 3)P2.I/O (40ms, t=180~220)
200P1 完成(总用 200ms)P2.I/O 仍在
220P2.I/O 完成
220 ~ 260P2.计算 40ms(阶段 3)
260P2 完成(总用 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

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题