Appearance
题目
设系统缓冲区和用户工作区均采用单缓冲,从外设读入 1 个数据块到系统缓冲区的时间为 100,从系统缓冲区读入 1 个数据块到用户工作区的时间为 5,对用户工作区中的 1 个数据块进行分析的时间为 90。三阶段流水如下:
外设 ──T(100)──▶ 系统缓冲区 ──M(5)──▶ 用户工作区 ──C(90)──▶ (循环)
(独占外设) (独占两个缓冲) (独占用户工作区)进程从外设读入并分析 2 个数据块的最短时间是( )。
错因
A
把 2 个数据块的总时间算成 2 × T = 200——只考虑了"外设读入"这一段,忽略了 M(系统缓冲→用户工作区)和 C(分析)也要时间。即使 M 和 C 能与下一块的 T 部分并行,整个流程不可能 200ms 完成(光分析两块就要 180ms)。
B
最常见错算路径:T₁ + M₁ + max(T₂, C₁) + C₂ = 100 + 5 + 100 + 90 = 295——把"T₂ 和 C₁ 并行"算对了,但漏掉了第二次 M。错觉是"T₂ 完成时 C₁ 早就结束了,工作区已经空,所以 C₂ 接着就能开始"。但是 C₂ 处理的是第二块数据,第二块数据要从系统缓冲区搬到用户工作区,必须经历 M₂ 这 5ms——M 是单缓冲下绕不开的同步壁垒,每块数据进工作区都得占用一次,不能因为时间紧凑就消失。
D
把所有阶段都串行加:T + M + C + T + M + C = 100 + 5 + 90 + 100 + 5 + 90 = 390——这是完全串行没有任何并行的时间。但题目允许 T 和 C 并行(外设和 CPU 是不同资源),可以重叠,所以 390 是上界不是最短。
总解析
资源约束(单缓冲 = 系统缓冲区只 1 个、用户工作区也只 1 个):
| 资源 | 一次只能容纳 |
|---|---|
| 外设 → 系统缓冲(T = 100) | 系统缓冲非空时不能再读入 |
| 系统缓冲 → 用户工作区(M = 5) | 用户工作区非空时不能再写入 |
| 分析(C = 90) | 用户工作区数据被分析期间不能被覆盖 |
关键并行关系:
- T(外设读入到系统缓冲)和 C(分析用户工作区)可以并行——两个工作区独立、占用资源不同
- M 操作不能与任一相邻阶段并行——它要同时占用系统缓冲(源)和用户工作区(目的),所以 M 期间 T 和 C 都得让位
两块流水时间表:
| 时段 | 外设→系统缓冲 (T) | 系统缓冲→工作区 (M) | 分析 (C) |
|---|---|---|---|
| 0 ~ 100 | T₁ | ||
| 100 ~ 105 | M₁ | ||
| 105 ~ 195 | T₂ | C₁(与 T₂ 并行) | |
| 195 ~ 205 | T₂ 仍在进行(持续到 205) | C₁ 已完成 | |
| 205 ~ 210 | M₂(T₂ 已完成、工作区已空闲) | ||
| 210 ~ 300 | C₂ |
逐段时刻:
- t=0~100:T₁ 读入第 1 块
- t=100~105:M₁ 转入用户工作区
- t=105~205:T₂ 读入第 2 块(与 C₁ 并行);同时 t=105~195:C₁ 分析第 1 块
- t=205~210:M₂ 转入用户工作区(C₁ 已结束于 195、工作区空闲)
- t=210~300:C₂ 分析第 2 块
总时间 = 300。
关键点:M 是同步壁垒——M₁ 必须等 T₁ 完且工作区空,M₂ 必须等 T₂ 完且 C₁ 完。两个 M 各用 5ms,绝不可省。最长链路是 T₁(100) + M₁(5) + T₂(100) + M₂(5) + C₂(90) = 300,正好。
最终答案是 C。