Cache 映射方式详解

Cache 映射方式详解

一、直接映射(Direct Mapping)

原理:每个主存块只能映射到 唯一的一个 Cache 块,映射公式为:Cache 块号=主存块号modCache 块数

示例

  • Cache 大小:8 块(块号 0-7)
  • 主存块号:20 → 20mod8=4,映射到 Cache 块 4。

示意图

主存块 ────┬─── 0 → Cache 0  
          │   1 → Cache 1  
          │   ...  
主存块 20 ──→ Cache 4 (唯一映射)  
          │   ...  
          └─── 23 → Cache 7 (23 mod 8=7)  

优点:硬件简单,访问速度快。
缺点:冲突率高(不同主存块可能争夺同一 Cache 块)。
应用:早期 CPU 缓存(如 Intel 80486)。

二、全相联映射(Fully Associative Mapping)

原理:每个主存块可映射到 任意一个 Cache 块,通过标签(Tag)匹配查找。

示例

  • Cache 大小:8 块
  • 主存块号:10 → 可存入 Cache 0-7 任意块(需记录标签)。

示意图

主存块 0 ────▶ Cache 0(或任意块)  
主存块 1 ────▶ Cache 1(或任意块)  
...  
主存块 10 ───▶ Cache 3(示例)  
...  

优点:无冲突(灵活选择空闲块)。
缺点:查找需遍历所有 Cache 块,硬件复杂。
应用:小容量 Cache(如寄存器堆)。

三、组相联映射(Set Associative Mapping)

原理:Cache 分 “组”,每组内为全相联映射。映射公式:Cache 组号=主存块号modCache 组数
组内块号:任意(全相联)。

示例(2 路组相联)

  • Cache 大小:8 块 → 4 组(每组 2 块)。
  • 主存块号:12 → 12mod4=3 组,可存入组 3 的 2 个块之一。

示意图

组 0:块 0、块 1  
组 1:块 2、块 3  
组 2:块 4、块 5  
组 3:块 6、块 7(主存块 12 映射到组 3,可选块 6 或 7)  

优点:平衡冲突率与硬件复杂度(常用 2/4/8 路)。
缺点:比直接映射复杂,比全相联简单。
应用:现代 CPU 缓存(如 Intel Core i7 的 L1/L2 缓存)。

对比与总结

映射方式 冲突率 硬件复杂度 查找速度 典型应用
直接映射 早期缓存
全相联映射 小容量缓存(如 TLB)
组相联映射 现代 CPU 缓存(L1/L2/L3)

示意图总结

主存块 ────┬─── 直接映射:1:1 固定映射  
          │  
          ├─── 全相联映射:1:N 任意映射  
          │  
          └─── 组相联映射:分组后每组 N:1 全相联(例:2 路组相联)  
关键概念:
  • 标签(Tag):主存块的高位地址,用于匹配 Cache 块。
  • 块偏移(Offset):块内字节地址(所有映射方式均需)。
  • 组索引(Set Index):组相联映射中确定组的中间地址。
示例扩展(地址结构):

假设主存地址 32 位,块大小 4KB(12 位偏移):

  • 直接映射
    Tag(高位) + Cache 块号(中间) + 偏移(低位)
  • 组相联(2 路)
    Tag(高位) + 组号(中间) + 块号(组内) + 偏移
  • 全相联
    Tag(全部高位) + 偏移

通过合理设计映射方式,CPU 可在速度(直接映射)、灵活性(全相联)和成本(组相联)之间取得平衡。现代系统普遍采用组相联映射(如 8 路组相联的 L3 缓存),以优化性能。

你可能感兴趣的:(软考知识点,学习,软考)