Appearance
题目
下列方法中能够有效降低系统平均访存时间的是( )。
Ⅰ. TLB Ⅱ. 多级页表 Ⅲ. 工作集概念 Ⅳ. 页表缓冲队列
错因
A
漏选了 Ⅳ。可能对"页表缓冲队列"(被换出的页面先入空闲/修改队列、未被覆盖前可"反悔"取回)这个机制不熟,于是不敢选。这个机制的核心收益是减少缺页时的磁盘 I/O,而磁盘 I/O 是几个数量级最慢的开销,所以它对平均访存时间的优化作用相当显著。
B
误以为"多级页表"也能降低访存时间。这是把多级页表的目的搞反了:多级页表是为了节省页表自身的内存占用(无需为整个虚拟地址空间一次性分配大块连续页表),代价反而是访存次数从"1 次查页表 + 1 次取数据"变成" 次查页表 + 1 次取数据"——每多一级页表,就多一次访存。它抬高了平均访存时间,与降低相反。同时漏选了 Ⅰ 和 Ⅳ。
D
把多级页表当成了访存优化手段,再加上漏掉了"工作集"对降低缺页率的贡献。工作集的思想是:只把进程当前活跃使用的页面留在内存里,避免无谓的换页——缺页率一降,由缺页带来的高昂磁盘 I/O 成本就大幅减少,平均访存时间随之下降。把"工作集"理解成只是个抽象概念、看不到性能影响,是这道选项的常见误区。
总解析
判定原则:把每种方法对"平均访存时间公式"的贡献位置看清楚。
简化模型:
降低任一项就能降低整体——重点是这两项:地址转换时间、缺页率/缺页处理代价。
逐项分析:
| 项 | 机制 | 影响公式哪一项 | 是否降低访存时间 |
|---|---|---|---|
| Ⅰ. TLB | 缓存最近访问的页表项 | 命中时 从一次完整查表降到 1 个 cache 周期 | ✓ 显著降低 |
| Ⅱ. 多级页表 | 把大页表拆成树状多层 | 把 从 1 次查表变成 次查表 | ✗ 反而升高(节省的是空间不是时间) |
| Ⅲ. 工作集 | 只保留进程"近期常用"页面在内存 | 大幅下降 | ✓ 降低(缺页处理是几毫秒级,省一次差好几个数量级) |
| Ⅳ. 页缓冲队列 | 被换出的页先入空闲队列,未被覆盖前可零成本取回 | 即便发生缺页, 也可能不需走磁盘 | ✓ 降低 |
关键辨析:
- TLB 是硬件 cache,命中率通常 95%+,对访存时间是数量级的改善
- 多级页表是空间-时间权衡:用更多次访存换更省的页表内存;想抵消它带来的延迟开销正是 TLB 的作用
- 工作集理论的实际收益体现在缺页率上——缺页一次几毫秒,普通访存几纳秒,省一次缺页相当于省百万次普通访存
- 页缓冲队列(如 Linux 的 buddy + LRU 页面回收链)是 OS 层的"软 cache",缺页时先查它再考虑读盘
只有 Ⅰ、Ⅲ、Ⅳ 真正降低访存时间;Ⅱ 是节省空间、反而增加单次访存时延。
最终答案是 C(Ⅰ、Ⅲ、Ⅳ)。