Appearance
题目
某单 CPU 系统中有输入和输出设备各 1 台,现有 3 个并发执行的作业,每个作业的输入、计算和输出时间均分别为 2ms,3ms 和 4ms,且都按输入、计算和输出的顺序执行,则执行完 3 个作业需要的时间最少是( )。
错因
A
凭"全并行无开销"算了一个最理想下界——3 个作业全在 9ms 内完成不太可能。但资源数有限:输入设备只有 1 台,3 个作业的输入阶段(共 6ms)必须串行;输出设备只有 1 台,3 个输出(共 12ms)也必须串行。9ms 完不成。
C
可能算了"半并发":J1 走完一段后 J2 才能跟上,没把"上一作业的下一阶段"和"下一作业的上一阶段"在不同设备上并行起来。结果就像两两串接的接力赛而不是流水线,多算了不该串行的等待。
D
完全把作业当成顺序执行:3 × (2+3+4) = 27ms——这是单道顺序执行的总时间,不是并发执行的最少时间。题问"最少"且明确"3 个并发执行的作业",必须考虑多道并行。
总解析
资源:CPU 1、输入设备 In 1、输出设备 Out 1。每作业三阶段:In 2 → CPU 3 → Out 4,严格按顺序走。
关键约束:
- 三种资源各自只 1 台 → 同种资源同一时刻只能服务一个作业
- 同一作业内三阶段必须顺序
手工排时间表(追求每种资源都尽早被使用、阶段间无浪费):
| 时刻 | In 设备 | CPU | Out 设备 |
|---|---|---|---|
| 0–2 | J1.In | – | – |
| 2–4 | J2.In | J1.CPU (2-5) | – |
| 4–5 | J3.In (4-6) | (continued) | – |
| 5–6 | (J3.In 中) | J2.CPU (5-8) | J1.Out (5-9) |
| 6–8 | – | (J2.CPU 续) | (J1.Out 续) |
| 8–9 | – | J3.CPU (8-11) | (J1.Out 续) |
| 9–11 | – | (J3.CPU 续) | – |
| 11–13 | – | – | J2.Out (??) |
让我重新画一遍清晰版本:
| 作业 | In | CPU | Out |
|---|---|---|---|
| J1 | [0, 2] | [2, 5] | [5, 9] |
| J2 | [2, 4] | [5, 8](CPU 在 5 才空) | [9, 13](Out 在 9 才空) |
| J3 | [4, 6] | [8, 11](CPU 在 8 才空) | [13, 17](Out 在 13 才空) |
完成时刻 = J3.Out 结束时刻 = 17ms。
关键看哪条资源最"挤"——本题输出设备最忙(共 12ms),加上前置时间,输出阶段链是关键路径。
公式式验证(输出设备成为瓶颈):第一个作业的输出在 t = (In + CPU) = 5 才能开始,输出阶段共 3 × 4 = 12ms 串行 → 完成时刻 = 5 + 12 = 17 ✓
最终答案是 B。