Appearance
题目
某文件占 10 个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析,假设一个缓冲区与一个磁盘块大小相同,把一个磁盘块读入缓冲区的时间为 100μs,将缓冲区的数据传送到用户区的时间是 50μs,CPU 对一块数据进行分析的时间为 50μs。在单缓冲区和双缓冲区结构下,读入并分析完该文件的时间分别是( )。
错因
A
可能用 算双缓冲,但漏了首块装入和末块分析的边界——双缓冲稳态时一块周期 100μs,但首块要先把缓冲填满(100μs)、最后一块分析也要单独算(M+C=100μs),总额是 100 + 9×100 + 100 = 1100。1000 是稳态部分忘加边界。
C
把双缓冲也算成 1550——双缓冲下 T 和 (M+C) 完全并行,不可能等于单缓冲时间。把双缓冲当成"也是串行"是没看出双缓冲的价值。
D
把所有阶段全串行加:10 × (T + M + C) = 10 × 200 = 2000——这是完全串行没有任何重叠的时间。但即使单缓冲都允许 T 与 C 并行(不同资源),不可能 2000。
总解析
设 T = 读盘到缓冲 = 100,M = 缓冲到用户区 = 50,C = 分析 = 50。10 块。
单缓冲(系统缓冲只 1 个):
资源约束:T 期间缓冲被磁盘写入,M 期间缓冲被用户区读取——T 和 M 不能并行;T 和 C 可以并行(缓冲和用户区不同),M 和 C 不能并行(用户区被占)。
每块的工作链:T → M → C,但下一块的 T 可在当前块的 C 期间开始(缓冲已被 M 倒空)。
稳态周期:每块 = max(T, C) + M = max(100, 50) + 50 = 150(如果 T > C,C 完全被 T 覆盖;周期 = T + M)
实际分析公式法:
推导:首块开始 → 第 1 块 T (100) → M (50) → 第 2 块 T 开始(150 起)+ 第 1 块 C (150~200,与 T 并行) → 第 2 块 M (250 起) → ……每块周期 (T+M)=150,n 块占 n×150 = 1500,最后再加最末块的 C (50) = 1550。
| n 块单缓冲 | 1 × T1 + 1 × M1 + 9 × (T+M) + C(末) |
|---|---|
| 计算 | 100 + 50 + 9 × 150 + 50 = 1550 ✓ |
| 简化公式 | = 10×150 + 50 = 1550 μs |
双缓冲(两个缓冲交替):
T 和 (M+C) 可完全并行——一个缓冲在被磁盘填,另一个在被 M+C 处理。
| n 块双缓冲 | T₁ + 9 × max(T, M+C) + (M+C)末 |
|---|---|
| 计算 | T = 100, M+C = 100,max(100, 100) = 100 |
| 公式 | |
| 数值 | 100 + 9 × 100 + 100 = 1100 μs |
对比:
| 结构 | 公式 | 时间 |
|---|---|---|
| 单缓冲 | ||
| 双缓冲 |
关键差异:单缓冲 M 占用关键路径(每块 T+M 串联),双缓冲 M+C 完全和 T 并行(不阻塞下一块的 T)。
最终答案是 B。