Files
final-exam/计算机系统结构/重点复习/小题6-组相联映射与标识存储器.md
T

5.8 KiB
Raw Blame History

tags, create time
tags create time
计算机系统结构
重点复习
Cache
组相联
标识存储器
2026-06-16 21:21

小题 6 — 组相联映射与标识存储器

概述

本题考查组相联映射方式下标识存储器(Tag Memory)的两种实现方法——相联存储器(Content-Addressable Memory, CAM)和单体多字存储器,以及所需的比较器个数。这是理解 Cache 硬件实现的关键知识点。

[!tip] 考试重点 重点掌握组相联映射中两种标识存储器实现方案的比较器个数计算。相联存储器方案用 n 个比较器(n 为相联度),单体多字存储器方案用 1 个比较器但需要多体并行读取。

正文

一、组相联映射回顾

n 路组相联($n$-way Set Associative)是直接映像和全相联的折中:

特征 直接映像 n 路组相联 全相联
映射关系 一块对一行 一块对一组(组内 n 行) 一块对任意行
查找范围 1 个位置 n 个位置 所有位置
比较次数 1 n 全部行数

[!question] 为什么组相联需要标识存储器? 组相联映射中,一个主存块可以映射到一组内的任意一行。处理器发出的地址需要与该组内所有行的 Tag进行比较,才能确定是否命中。存储这些 Tag 并进行比较的硬件就是标识存储器。

二、标识存储器的两种实现方法

2.1 方法一:相联存储器(CAM)

相联存储器是一种特殊的存储器,它不是通过地址访问,而是通过内容匹配来查找。每个存储单元都内置了一个比较器。

graph LR
    subgraph CAM["CAM Implementation"]
        T1["Tag Entry 1"] --> C1["Comparator 1"]
        T2["Tag Entry 2"] --> C2["Comparator 2"]
        T3["Tag Entry 3"] --> C3["Comparator 3"]
        T4["Tag Entry n"] --> C4["Comparator n"]
    end
    ADDR["Input Tag"] --> C1
    ADDR --> C2
    ADDR --> C3
    ADDR --> C4
    C1 --> M["Match Logic"]
    C2 --> M
    C3 --> M
    C4 --> M
项目 说明
存储结构 每个 Tag 条目自带比较器,并行比较
比较器个数 n 个(n = 相联度/路数)
速度 快——所有路同时比较,一个时钟周期完成
硬件开销 大——每个条目都需要一个比较器

[!example] 示例:4 路组相联的 CAM 实现

每组有 4 个 Tag 条目,每个条目配一个比较器:

组内行号 Tag 存储 比较器 输出
行 0 Tag₀ CMP₀ Hit₀
行 1 Tag₁ CMP₁ Hit₁
行 2 Tag₂ CMP₂ Hit₂
行 3 Tag₃ CMP₃ Hit₃

比较器个数 = 4 个(每个时钟周期 4 路同时比较)

2.2 方法二:单体多字存储器

将一组内所有行的 Tag 存在一个单体多字存储器中。每次读出该组所有行的 Tag,再用一个比较器逐个比较(或用一个多位比较器一次比较)。

graph LR
    SET["Set Index"] --> MEM["Multi-Word Memory"]
    MEM --> T["All n Tags in the Set"]
    T --> CMP["1 Comparator (or sequential)"]
    ADDR["Input Tag"] --> CMP
    CMP --> HIT["Hit Signal"]
项目 说明
存储结构 一个存储器存所有 Tag,一次读出一组的所有 Tag
比较器个数 1 个(但位宽较大,需比较 Tag 的全部位)
速度 较慢——需要先读出再比较,可能需要多拍
硬件开销 小——只需 1 个比较器

[!question] 单体多字存储器方案真的只用 1 个比较器吗? 严格来说,如果要用一拍完成比较,需要用 n 个比较器(读出 n 个 Tag 同时比较)。如果允许多拍完成,可以只用 1 个比较器逐个比较。实际设计中通常在面积和速度之间折中。考试中需要根据题意判断。

三、两种方案的比较器个数总结

[!abstract]- 答案

实现方案 比较器个数 速度 硬件开销
相联存储器(CAM) n 个(n = 相联度) 快(并行比较) 大
单体多字存储器 1 个(逐个比较)或 n 个(并行比较) 较慢 小

[!note] 关键计算

n 路组相联标识存储器实现方案对比:

参数 CAM 方案 单体多字方案
存储器数量 n 个独立存储体 1 个多字存储体
每个存储体宽度 Tag 位宽 n \times Tag 位宽
比较器个数 n 个 1 个(串行)或 n 个(并行)
比较延迟 1 拍 1 拍(并行)或 n 拍(串行)
适用场景 高速 L1 Cache 面积受限的场景

四、数值化示例

[!example] 完整示例

已知:32 位地址,Cache 容量 16KB,块大小 64B,4 路组相联。

  • Offset = \log_2(64) = 6 位
  • 组数 = (16\text{KB} / 64\text{B}) / 4 = 64 组
  • Set Index = \log_2(64) = 6 位
  • Tag = 32 - 6 - 6 = 20 位
方案 存储器数量 每个体位宽 比较器个数 比较器位宽
CAM 4 20 位 4 20 位
单体多字 1 80 位(4×20) 1 20 位

[!warning] 考试注意 题目问"比较器个数"时要明确是哪种方案。如果是 CAM 方案,答案是相联度 $n$;如果是单体多字方案串行比较,答案是 1。考试中如果题目没明确说明方案,通常默认是 CAM 方案(因为这是 Cache 最常用的高速实现)。

关联笔记