CPU Core → L1 指令 Cache(I-Cache)与 L1 数据 Cache(D-Cache)分离 → 统一的 L2 Cache → 共享的 L3 Cache → 主存(Main Memory),各层级之间通过系统总线(Bus)进行数据交互。
这种结构的设计目的是缓解 CPU 处理速度远高于主存访问速度所带来的性能瓶颈。Cache 利用程序的局部性原理(时间局部性和空间局部性),将频繁使用的指令和数据缓存在靠近 CPU 的高速存储器中。其中:
- L1 Cache:速度最快、容量最小,通常集成在 CPU 核心内部,分为指令和数据两个独立部分以支持并行访问。
- L2 Cache:速度次之、容量较大,可能每个核心独享或多个核心共享。
- L3 Cache:速度较慢但容量更大,通常被多个核心共享,是最后的共享缓存层。
- 主存(DRAM):速度最慢、容量最大,存放所有运行中的程序和数据。
关于高速缓存的地址映像方法中的直接映像(Direct Mapping):
这是一种最简单的地址映射方式。其实现机制如下:
- 主存与 Cache 分块:主存和 Cache 都被划分为固定大小的数据块(block 或 line),例如每块 64 字节。
- 分区对应关系:整个主存被逻辑上划分为若干“区”(regions),每个区包含的块数与 Cache 中的总块数相同。
- 映射规则:主存中任意一个块只能映射到 Cache 中唯一固定的块位置。具体来说,若某个主存块的“区内块号”为
i,则它只能放入 Cache 的第i号块中。- 即:Cache 块号 = 主存块号 mod Cache 总块数
因此,主存地址可分解为三部分:
- 主存区号(高位,决定属于哪个区)
- 区内块号(中位,决定映射到 Cache 的哪个块)
- 块内地址(低位,指向块内的具体字节)
示例:假设 Cache 有 64 个块,主存块号为 130,则 130 mod 64 = 2,该块只能映射到 Cache 第 2 号块。
✅ 优点:硬件实现简单,地址转换速度快,只需一次取模运算即可定位 Cache 位置。
❌ 缺点:容易发生冲突失配——即使 Cache 其他块空闲,只要两个不同区的块映射到同一位置,就会互相覆盖,导致命中率下降。
为此,实际处理器多采用更灵活的映像方式:
- 全相联映像(Fully Associative Mapping):主存任一块可装入 Cache 任意位置,命中率高,但查找需比较所有块,速度慢、成本高。
- 组相联映像(Set-Associative Mapping):折中方案,将 Cache 分为若干组,每组包含多个块(如 4 路组相联),主存块根据块号映射到特定组,但在组内可自由放置。兼顾速度与命中率,是现代 CPU 广泛采用的方式。
组相联映像(Set-Associative Mapping) 是一种介于直接映像和全相联映像之间的高速缓存地址映射方式。它将 Cache 划分为多个“组”(Set),每个组包含多个块(称为“路”,way)。主存中的每一个块根据其地址被映射到某个特定的组中,但在该组内可以自由地放置在任意一个空闲块中。
工作原理:
- Cache 分组:假设 Cache 共有 $ S $ 个组,每个组有 $ W $ 个块(即 $ W $ 路组相联),则总块数为 $ S \times W $。
- 映射规则:主存块号按模运算确定应放入的组号:
组号=主存块号mod S \text{组号} = \text{主存块号} \mod S 组号=主存块号modS - 在目标组内,只要有任何一路(block)空闲或可替换(如 LRU 策略),就可以存放该主存块。
- 主存地址划分为三部分:
- 标记(Tag):用于区分映射到同一组的不同主存块;
- 组索引(Index):决定映射到哪个组;
- 块内偏移(Offset):定位块内的具体字节。
例如:8 路组相联 Cache 有 64 个组,则每组可容纳 8 个块,总共 512 个块。主存块号对 64 取模得组号,在对应组中最多可同时保存来自不同主存区但同组号的 8 个块。
相比直接映像的优势:
| 对比项 | 直接映像 | 组相联映像 | 优势说明 |
|---|---|---|---|
| 命中率 | 较低 | 较高 | 多个主存块可映射到同一组的不同“路”,减少因位置冲突导致的频繁替换。 |
| 灵活性 | 固定一对一映射 | 一组多选一 | 同一组号下允许多个块共存,提升缓存利用率。 |
| 冲突失效率 | 高(易发生抖动) | 显著降低 | 即使两个块映射到同一组,只要组内有空间,就不会立即冲突。 |
| 硬件复杂度与速度平衡 | 最简单最快 | 稍复杂但仍高效 | 比全相联简单(只需比较一组内的标记),又比直接映像更灵活。 |
✅ 典型应用:现代 CPU 广泛采用 4 路、8 路甚至 12 路组相联 的 L1/L2/L3 Cache 设计,在性能、功耗和成本之间取得良好平衡。


2906

被折叠的 条评论
为什么被折叠?



