Cache存储器
一、引入背景:为何需要Cache?
主存(通常为DRAM)虽已通过双端口RAM、多模块存储等方式提高访问速度,但与CPU高达数GHz的执行速度相比仍存在巨大差距。
若全部采用速度更快的SRAM芯片替代DRAM,虽然能提升主存性能,但成本高、容量低,芯片集成度限制也不允许Cache做得太大。因此,为缓解CPU与主存之间的速度矛盾,引入一种**“容量小、速度快”的中间缓存层——Cache**是更现实的解决方案。
二、程序的局部性原理:Cache高效运作的理论基础
Cache 的设计依据是程序运行中存在 局部性原理,包括:
1. 空间局部性(Spatial Locality)
最近会被访问的数据,通常位于当前正在访问数据的附近地址。
-
实例1:数组按行访问
如二维数组按行访问,访问a[0][0]
后大概率会访问a[0][1]
、a[0][2]
等相邻元素。 -
实例2:顺序执行的机器指令
程序的机器指令通常按顺序存储,访问一条指令后,下一条指令往往也会被执行。
2. 时间局部性(Temporal Locality)
最近被访问的数据或指令在短时间内可能再次被访问。
- 实例:循环结构中的变量和操作
如sum += a[i][j]
中的sum
、i
、j
会在每次循环中被多次使用。
三、Cache的工作机制:高速缓存如何提升性能
1. 基本流程
-
CPU访问数据 → 先查Cache
- 命中(Hit):直接从Cache中读取
- 未命中(Miss):从主存中读取,并将数据块复制到Cache中
2. 两种访问策略比较
策略 | 命中处理时间 | 未命中处理时间 | 平均访问时间公式 |
---|---|---|---|
先查Cache,再查主存 | t c t_c tc | t c + t m t_c + t_m tc+tm | t = H ⋅ t c + ( 1 − H ) ⋅ ( t c + t m ) t = H \cdot t_c + (1-H) \cdot (t_c + t_m) t=H⋅tc+(1−H)⋅(tc+tm) |
同时查Cache与主存 | t c t_c tc | t m t_m tm | t = H ⋅ t c + ( 1 − H ) ⋅ t m t = H \cdot t_c + (1-H) \cdot t_m t=H⋅tc+(1−H)⋅tm |
其中,
- t c t_c tc:访问Cache的时间
- t m t_m tm:访问主存的时间
- H H H:命中率(Hit Ratio)
3. 性能对比示例
若:
- Cache速度为主存5倍,即 t c = t t_c = t tc=t, t m = 5 t t_m = 5t tm=5t
- 命中率 H = 0.95 H = 0.95 H=0.95
则:
- 同时访问策略下:
t = 0.95 t + 0.05 × 5 t = 1.2 t t = 0.95t + 0.05 \times 5t = 1.2t t=0.95t+0.05×5t=1.2t,性能提升 ≈ 4.17 × \approx 4.17 \times ≈4.17× - 先查Cache策略下:
t = 0.95 t + 0.05 × 6 t = 1.25 t t = 0.95t + 0.05 \times 6t = 1.25t t=0.95t+0.05×6t=1.25t,性能提升 4.0 × 4.0 \times 4.0×
四、主存与Cache的分块机制
为实现局部性的数据批量加载,Cache 和主存都采用 按块划分的存储结构:
1. 分块原理
- 主存块(Page):也称页框、页面,单位为1KB(示例)
- Cache块(Cache Line):也称行为行号,单位也为1KB
2. 地址拆解
若主存为 4 M B = 2 22 4MB = 2^{22} 4MB=222 字节,块大小为 1 K B = 2 10 1KB = 2^{10} 1KB=210,则:
-
主存划分为 2 12 = 4096 2^{12} = 4096 212=4096 个块
-
地址拆分为:
- 前12位为块号
- 后10位为块内偏移
3. 数据调入规则
每当CPU访问主存某地址,会将该地址所在的整个主存块复制一份到Cache,以便后续快速访问。
五、待解决的关键问题
Cache虽可提高访问效率,但为确保数据一致性与替换合理性,还需深入研究以下三大问题:
-
映射方式:
- 如何将主存块映射到有限的Cache块中?
- 如何在Cache中定位某块是否是目标数据?
-
替换算法:
- 当Cache满时,若要加载新数据,应该替换哪一块?
- 常见策略如LRU(最近最少使用)、FIFO(先进先出)等
-
写策略:
- CPU修改Cache中的数据后,主存中的数据如何保持同步?
- 写直达(Write Through)或写回(Write Back)机制如何选择?
这些问题将在后续探讨。
六、总结
Cache是连接主存与CPU的高效桥梁,虽然容量小,但速度快,借助程序运行中的局部性原理,在不显著增加硬件成本的前提下大幅提升系统整体性能。理解Cache的基本机制与存在问题,是掌握存储系统结构和优化的核心基础。