Appearance
存储层次结构综述
考情分析
存储层次结构的综合分析是 408 大题素材。常以"给定各级参数,计算整体平均访问时间"的形式出现,也会考查两个层次的对比与联系。
层次结构的核心矛盾
计算机对存储系统有三个互相矛盾的需求:
没有任何单一存储技术能同时满足这三点。SRAM 快但贵且小,DRAM 便宜但慢,磁盘容量大但更慢。
层次结构的解决方案:利用程序的局部性原理,将不同速度-容量-成本的存储器组成多级体系,让 CPU"看到"的是一个速度接近最快层、容量接近最大层、成本接近最低层的存储系统。
两个核心层次
整个存储体系可以拆分为两个独立的"缓存"层次:
Cache-主存层次
| 项目 | 说明 |
|---|---|
| 目的 | 弥补 CPU 与主存的速度差距 |
| 上层 | Cache(SRAM) |
| 下层 | 主存(DRAM) |
| 管理方式 | 硬件自动管理,对所有软件透明 |
| 传输单位 | Cache 行/块(通常 64 B) |
| 缺失处理 | 硬件自动从主存调入 |
| 典型命中率 | 95%~99% |
主存-辅存层次
| 项目 | 说明 |
|---|---|
| 目的 | 弥补主存容量不足 |
| 上层 | 主存(DRAM) |
| 下层 | 辅存(磁盘/SSD) |
| 管理方式 | **操作系统(软件)**管理,硬件提供支持(MMU、TLB) |
| 传输单位 | 页(通常 4 KB) |
| 缺失处理 | 缺页中断,OS 从磁盘调入页面 |
| 典型命中率 | 99.9%+ |
两个层次的统一对比
| 对比项 | Cache-主存 | 主存-辅存 |
|---|---|---|
| 速度比 | 约 10:1 | 约 |
| 传输单位 | 块(64 B) | 页(4 KB) |
| 管理者 | 硬件 | OS(软件+硬件) |
| 替换算法 | LRU/FIFO(硬件实现) | LRU 近似(软件实现) |
| 写策略 | 写直达/写回 | 类似写回(修改页在替换时写回磁盘) |
| 缺失代价 | 几十~百 ns | 几 ms |
| 对程序员 | 完全透明 | 虚拟地址空间 |
两个层次遵循相同的原理(局部性 + 缓存),区别在于管理者和参数规模。
全局平均访问时间
将 TLB、Cache、主存、辅存串联分析时,实际计算通常简化为两级:
Cache-主存级别(忽略缺页):
加入缺页因素:
其中
由于
局部性原理与层次结构的对应
| 局部性类型 | 利用方式 | 对应机制 |
|---|---|---|
| 时间局部性 | 刚访问的数据保留在快速层 | Cache 保留最近使用的块 |
| 空间局部性 | 以块/页为单位调入,包含周围数据 | Cache Line 64 B、页 4 KB |
块大小和页大小的选取本质上是在平衡空间局部性的利用程度和缺失代价。Cache 块较小(64 B)因为缺失代价低;页较大(4 KB)因为磁盘访问的延迟主要是寻道和旋转,多传一些数据的边际成本低。
存储系统设计的权衡
Cache 设计参数
| 参数 | 增大的好处 | 增大的代价 |
|---|---|---|
| 容量 | 命中率提高 | 成本增加、访问延迟增大 |
| 块大小 | 空间局部性利用好 | 冲突增加、缺失代价增大 |
| 相联度 | 冲突缺失减少 | 比较器增多、延迟增大 |
页大小的权衡
| 页大小 | 好处 | 代价 |
|---|---|---|
| 大 | 页表小、TLB 覆盖范围大、磁盘传输效率高 | 内部碎片大 |
| 小 | 内部碎片小 | 页表大、TLB 缺失率高 |
综合解题框架
408 存储系统综合题的一般解题步骤:
- 画出地址结构:虚拟地址(VPN + offset)、物理地址(PFN + offset)、Cache 地址(tag + index + block offset)
- 计算各字段位数:offset 由块大小/页大小决定,index 由行数/组数决定,tag 为剩余位
- 走完访问链路:TLB 查找 -> 页表查找 -> Cache 查找 -> 主存访问
- 统计访存次数和时间:根据各级命中情况计算
例题
例1:两级存储系统综合计算
Cache 命中率
Cache-主存级:
加入缺页:
即使缺页率只有万分之二,磁盘访问的巨大代价仍然将平均时间拉高到微秒级。缺页率的控制至关重要。
例2:去掉 Cache 的影响
去掉 Cache 后,CPU 每次访问都直接访问主存(50 ns)。原来平均 4.4 ns,去掉后性能下降为
例3:TLB + Cache 联合访存次数
32 位虚拟地址,4 KB 页,直接映射 Cache 1024 行,块大小 16 B,16 位物理地址。
虚拟地址字段:VPN = 20 位,offset = 12 位。
物理地址字段:block offset = 4 位,Cache index = 10 位,tag = 16 - 10 - 4 = 2 位。
| 情况 | TLB | Cache | 访主存次数 |
|---|---|---|---|
| 最好 | Hit | Hit | 0 |
| Hit | Miss | 1(取数据块) | |
| Miss | Hit | 1(取页表项) | |
| 最坏 | Miss | Miss | 2(页表+数据) |
两级页表 TLB Miss 时访主存次数变为 2(查两级页表)+ 1(取数据)= 3。
考点清单
- Cache-主存层次由硬件管理,主存-辅存层次由 OS 管理
- 两个层次都利用局部性原理,传输单位不同(块 vs 页)
- Cache 缺失代价小(百 ns),缺页代价大(ms 级)
- 缺页率虽低(0.01%~0.02%),但对平均访问时间影响显著
- 块大小和页大小的选取是空间局部性利用与缺失代价之间的权衡
- 存储层次结构的目标:速度接近 Cache,容量接近磁盘,成本接近磁盘
- 综合题解题:先画地址结构,再走完 TLB -> 页表 -> Cache -> 主存的完整链路