Files
final-exam/计算机系统结构/复习文档/存储系统与Cache.md
T

6.1 KiB
Raw Blame History

tags, create time
tags create time
计算机系统结构
复习
Cache
2026-06-15 10:00

存储系统与 Cache

概述

本文档系统讲解存储层次结构、Cache 的工作原理(映像方式、替换策略、写策略)、命中率计算以及 17 种 Cache 优化技术。Cache 是计算机系统结构的核心考点,几乎每年都有大分值的计算和分析题。

[!tip] 考试重点 Cache 命中率计算、平均访存时间计算、分离 Cache vs 混合 Cache 的性能对比是必考内容。17 种优化技术的分类和代表性技术需熟记。

正文

一、存储层次结构

graph TD
    A["Register"] --> B["L1 Cache"]
    B --> C["L2 Cache"]
    C --> D["Main Memory"]
    D --> E["Disk/SSD"]

    style A fill:#ff8a80
    style B fill:#ff80ab
    style C fill:#ea80fc
    style D fill:#82b1ff
    style E fill:#80d8ff
层次 容量 速度 价格/位 管理方式
寄存器 KB 最快 最贵 编译器
L1 Cache 32~64 KB ~1 ns 较贵 硬件
L2 Cache 256 KB~1 MB ~5 ns 中等 硬件
主存 4~64 GB ~100 ns 便宜 OS+硬件
磁盘 TB 级 ~10 ms 最便宜 OS

[!question] 为什么存储系统要分层? 单一存储器无法同时满足"大容量、高速度、低价格"的要求。分层设计利用局部性原理,将频繁访问的数据放在快速但小的上层,不常用的放在慢速但大的下层,以较低成本获得接近最快速度的平均性能。

二、Cache 基本原理

2.1 映像方式

映像方式 原理 优点 缺点
直接映像 主存块只能映射到 Cache 的固定位置 简单、命中时间短 冲突不命中率高
全相联 主存块可映射到 Cache 任意位置 冲突不命中率最低 硬件开销大、查找慢
组相联 折中方案,分为 2^n 组,组内全相联 平衡性能和开销 复杂度适中

[!note] 组相联 Cache 的命名 "n 路组相联"表示每组有 n 个 Cache 行。2 路组相联 = 每组 2 行,4 路组相联 = 每组 4 行。

2.2 替换策略

策略 原理 特点
LRU(最近最少使用) 替换最久未被访问的块 最常用,效果好
FIFO 替换最早进入的块 简单,但可能替换活跃块
随机 随机选择替换块 实现简单,效果尚可

2.3 写策略

策略 命中时 不命中时 一致性
写直达 同时写 Cache 和主存 Write-Allocate 或 No-Write-Allocate 简单但总线流量大
写回 只写 Cache,标记为脏 Write-Allocate 复杂但总线流量小

三、Cache 性能计算

3.1 命中率与不命中率

\text{不命中率} = w_I \times mr_I + w_D \times mr_D

其中 $w_I$、w_D 分别为指令和数据的访问占比,$mr_I$、mr_D 为各自的不命中率。

3.2 平均访存时间

\text{平均访存时间} = \text{命中时间} + \text{不命中率} \times \text{不命中开销}

[!example] 分离 Cache vs 混合 Cache

分离 Cache(指令 16KB + 数据 16KB):

  • 指令不命中率 1%,数据不命中率 5%
  • 命中时间均为 1 周期,不命中开销 40 周期
  • 平均访存时间 = 78\% \times (1 + 1\% \times 40) + 22\% \times (1 + 5\% \times 40) = 1.752 周期

混合 Cache(32KB):

  • 不命中率 1.5%,但 load/store 命中时间 +1 周期
  • 平均访存时间 = 78\% \times (1 + 1.5\% \times 40) + 22\% \times (2 + 1.5\% \times 40) = 1.782 周期

结论:分离 Cache 更优(1.752 < 1.782)

3.3 CPU 时间与 Cache 的关系

CPU 时间 = IC \times (CPI_{exe} + \frac{\text{访存次数}}{指令} \times mr) \times \tau

四、17 种 Cache 优化技术

分类 技术 基本思想 影响
降低不命中率(8种) 增大块大小 利用空间局部性 块过大会增加不命中开销
增大 Cache 容量 利用时间局部性 增加命中时间
提高相联度 减少冲突不命中 增加命中时间
伪相联 Cache 降低冲突不命中 复杂度适中
硬件预取 提前调入数据 增加总线流量
编译器控制预取 编译器插入预取指令 增加指令开销
编译优化 优化访问模式 依赖编译器能力
Victim Cache 小全相联 Cache 保存替换出的块 减少冲突不命中
减少不命中开销(5种) 非阻塞 Cache 不命中时允许后续请求 提高流水线效率
写合并 合并多次写操作 减少写缓冲区占用
请求字优先 优先传输请求的字 减少等待时间
写缓冲 写操作进入缓冲区异步执行 减少写延迟
早重启 不命中时尽早返回请求字 减少等待时间
减少命中时间(4种) 小容量简单 Cache 降低命中时间 适用于 L1 Cache
虚拟 Cache 用虚拟地址直接索引 增加别名问题
流水化 Cache 访问 Cache 访问分段流水化 提高时钟频率
路预测 预测 Cache 行所在路 预测错误时需重取

[!warning] 优化技术的权衡 几乎每种优化技术都存在"收益-代价"权衡。例如增大块大小降低了强制性不命中,但增加了不命中开销;提高相联度降低了冲突不命中,但增加了命中时间。设计时需要根据具体场景权衡。

五、不命中的三种类型

类型 原因 解决方法
强制性不命中(Compulsory) 首次访问某块 增大块大小、预取
容量不命中(Capacity) Cache 容量不足 增大 Cache 容量
冲突不命中(Conflict) 映射冲突 提高相联度、Victim Cache

关联笔记