Appearance
Cache地址映射
考情分析
三种映射方式的地址结构和各字段位数计算是 408 必考内容,常以大题出现。组相联是实际使用最广泛的方案,也是出题重点。
地址结构基础
访问 Cache 时,主存地址被分为三个字段:
- offset:由块大小决定,块大小为
字节,则 offset 占 位 - index:由 Cache 行数/组数决定
- tag:剩余高位,存在 Cache 标记字段中用于命中判断
直接映射
规则:主存块
地址结构:
特点:
- 实现简单,比较快(只需检查一行)
- 冲突严重:主存中间隔
个块距离的不同块,都映射到同一行,会相互驱逐(抖动) - 命中率相对较低
例:Cache 8 行,块大小 64 B,主存地址 32 位。
- offset:
位 - index:
位 - tag:
位
全相联映射
规则:主存块可以放到 Cache 中任意一行。
地址结构:
没有 index 字段(没有行号约束)。
特点:
- 灵活,冲突率最低,命中率最高
- 查找时需要与所有行的 tag 同时比较(全相联比较),硬件开销大
- Cache 较大时,比较器数量很多,通常只在小型 Cache(如 TLB)中使用
组相联映射
规则:Cache 被分为
地址结构:
特点:
- 比直接映射冲突少(同一组内有
个位置可选) - 比全相联硬件开销小(只需
路比较器) 时退化为直接映射, (组数 )时退化为全相联 - 实际 CPU 中最常用(2路、4路、8路组相联)
例:4 路组相联,Cache 共 16 行(4 组),块大小 64 B,主存地址 32 位。
- offset:
位 - index(组号):
位( 组) - tag:
位
查找时:用 index 定位到组,再在组内 4 行中并行比较 tag。
三种映射对比
| 特性 | 直接映射 | 全相联 | 组相联( |
|---|---|---|---|
| 映射规则 | 固定行 | 任意行 | 固定组内任意行 |
| index 字段 | 行号 | 无 | 组号 |
| tag 位数 | 最少 | 最多 | 居中 |
| 冲突率 | 高 | 最低 | 低 |
| 硬件复杂度 | 简单 | 复杂 | 中等 |
| 命中率 | 低 | 最高 | 高 |
| 典型用途 | 早期设计 | TLB | 现代 CPU Cache |
交互可视化
地址字段位数计算步骤
- 写出主存总地址位数
(按字节寻址时, ) - 计算 offset:
- 计算 index:
- 直接映射:
- 组相联:
,组数 = Cache 行数 / - 全相联:0
- 直接映射:
- tag =
- index - offset
考点清单
- 直接映射 index = 行号,组相联 index = 组号,全相联无 index
- tag 是地址的高位,存储在 Cache 中用于命中判断
- 块大小决定 offset 位数,Cache 行数/组数决定 index 位数
路组相联: 是直接映射, 行数是全相联 - 全相联命中率最高,但比较器数量最多,硬件开销最大
- 实际 CPU 多用 4 路或 8 路组相联