Cache 与主存的三种映射方式速记总结如下

📅 2026/7/26 8:24:36 👁️ 阅读次数 📝 编程学习
Cache 与主存的三种映射方式速记总结如下

Cache 与主存的三种映射方式速记总结如下:

  • 直接映射

    • 映射规则:主存块号 mod Cache 总块数 = Cache 块号(即每个主存块有唯一对应 Cache 行)
    • 特点:地址结构含「标记(Tag)+ 组索引(Index,即块号)+ 块内偏移(Offset)」;硬件实现最简单,成本低。
    • 缺点:冲突率高(不同主存块竞争同一 Cache 行),Cache 利用率低。
  • 全相联映射

    • 映射规则:主存块可映射到 Cache 中任意空闲行(或替换某行)
    • 特点:需对所有 Cache 行的 Tag 并行比较,查找速度慢、功耗高、电路复杂(需全比较器阵列)。
    • 优点:零冲突,Cache 空间利用率最高,命中率通常最优。
  • 组相联映射(最常用)

    • 映射规则:Cache 分为若干组(如每组 2/4/8 行),主存块映射到固定组(由块号 mod 组数决定),组内自由选择行(类似全相联)
    • 特点:折中设计——组索引定位组,Tag 在组内比对;兼顾速度、成本与命中率。
    • 例如:128 行 Cache,每组 4 行 → 共 32 组 → 主存块映射到 (块号 mod 32) 所在组,再在该组 4 行中匹配 Tag。

✅ 速记口诀:
“直映快但易撞,全联准但太忙,组联平衡是王道。”

直接映射中,主存块映射到 Cache 的行号计算公式为:
Cache 行号 = 主存块号 mod Cache 总行数

已知:

  • 主存块号 = 200
  • Cache 总行数 = 64

计算:
200 ÷ 64 = 3 × 64 = 192,余数 = 200 − 192 =8
即:200 mod 64 =8

✅ 所以,主存块号为 200 的块应映射到Cache 第 8 行(行号从 0 开始计数,即第 0 行、第 1 行……第 8 行是第 9 个物理行)。

⚠️ 注意:Cache 行号范围是 0 ~ 63(共 64 行),余数 8 合法且唯一对应。

在直接映射中,主存块号到 Cache 行号的映射公式为:
Cache 行号 = 主存块号 mod Cache 总行数

已知:

  • 主存块号 = 1000
  • Cache 行数 = 128

计算:
1000 ÷ 128 = 7 × 128 = 896,余数 = 1000 − 896 =104
即:1000 mod 128 =104

✅ 因此,主存块号 1000 映射到Cache 第 104 行(行号从 0 开始,范围 0 ~ 127,104 在有效范围内)。

验证:128 × 7 = 896,896 + 104 = 1000 ✔️