Skip to content

Cache地址映射

考情分析

三种映射方式的地址结构和各字段位数计算是 408 必考内容,常以大题出现。组相联是实际使用最广泛的方案,也是出题重点。

地址结构基础

访问 Cache 时,主存地址被分为三个字段:

[tag(标记) | index(组/行号) | offset(块内偏移)]
  • offset:由块大小决定,块大小为 2b 字节,则 offset 占 b
  • index:由 Cache 行数/组数决定
  • tag:剩余高位,存在 Cache 标记字段中用于命中判断

直接映射

规则:主存块 i 只能映射到 Cache 行 imodNN 为 Cache 总行数)。

Cache 行号=主存块号modN

地址结构

[tag | index(行号)log2N  | offsetlog2块大小 ]

特点

  • 实现简单,比较快(只需检查一行)
  • 冲突严重:主存中间隔 N 个块距离的不同块,都映射到同一行,会相互驱逐(抖动)
  • 命中率相对较低

:Cache 8 行,块大小 64 B,主存地址 32 位。

  • offset:log264=6
  • index:log28=3
  • tag:3263=23

全相联映射

规则:主存块可以放到 Cache 中任意一行。

地址结构

[tag(主存块号) | offsetlog2块大小 ]

没有 index 字段(没有行号约束)。

特点

  • 灵活,冲突率最低,命中率最高
  • 查找时需要与所有行的 tag 同时比较(全相联比较),硬件开销大
  • Cache 较大时,比较器数量很多,通常只在小型 Cache(如 TLB)中使用

组相联映射

规则:Cache 被分为 S 组,每组 k 行(k 路组相联)。主存块 i 映射到组 imodS,在该组内可以放任意一行。

Cache 组号=主存块号modS

地址结构

[tag | index(组号)log2S  | offsetlog2块大小 ]

特点

  • 比直接映射冲突少(同一组内有 k 个位置可选)
  • 比全相联硬件开销小(只需 k 路比较器)
  • k=1 时退化为直接映射,k=N(组数 S=1)时退化为全相联
  • 实际 CPU 中最常用(2路、4路、8路组相联)

:4 路组相联,Cache 共 16 行(4 组),块大小 64 B,主存地址 32 位。

  • offset:log264=6
  • index(组号):log24=2 位(S=16/4=4 组)
  • tag:3262=24

查找时:用 index 定位到组,再在组内 4 行中并行比较 tag。

三种映射对比

特性直接映射全相联组相联(k 路)
映射规则固定行任意行固定组内任意行
index 字段行号组号
tag 位数最少最多居中
冲突率最低
硬件复杂度简单复杂中等
命中率最高
典型用途早期设计TLB现代 CPU Cache

交互可视化

加载可视化中...
加载可视化中...
加载可视化中...

地址字段位数计算步骤

  1. 写出主存总地址位数 m(按字节寻址时,m=log2(主存容量/字节)
  2. 计算 offset:log2(块大小(字节))
  3. 计算 index:
    • 直接映射:log2(Cache 行数)
    • 组相联:log2(组数),组数 = Cache 行数 / k
    • 全相联:0
  4. tag = m - index - offset

考点清单

  • 直接映射 index = 行号,组相联 index = 组号,全相联无 index
  • tag 是地址的高位,存储在 Cache 中用于命中判断
  • 块大小决定 offset 位数,Cache 行数/组数决定 index 位数
  • k 路组相联:k=1 是直接映射,k= 行数是全相联
  • 全相联命中率最高,但比较器数量最多,硬件开销最大
  • 实际 CPU 多用 4 路或 8 路组相联

真题练习

相关真题(3题)

2026Q18选择题2分

组相联映射中主存地址到Cache组号的计算

2022Q16选择题2分

组相联Cache比较器数量与标记位数计算

2009Q14选择题2分

组相联映射中主存单元对应的Cache组号