Skip to content

2013年 408 操作系统 第 27 题

操作系统2013年选择题2分

题目

设系统缓冲区和用户工作区均采用单缓冲,从外设读入 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 ~ 100T₁
100 ~ 105M₁
105 ~ 195T₂C₁(与 T₂ 并行)
195 ~ 205T₂ 仍在进行(持续到 205)C₁ 已完成
205 ~ 210M₂(T₂ 已完成、工作区已空闲)
210 ~ 300C₂

逐段时刻

  • 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

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数