Cache 的映像与变换方法主要用于解决主存数据如何映射到 Cache 及地址转换问题,其核心分类如下:
一、全相联映像(Fully Associative Mapping)
- 定义
主存的任意数据块可映射到 Cache 的任意位置,无固定对应关系。 - 地址变换规则
- 主存地址分为 块号(Tag) 和 块内地址(Offset)。
- Cache 维护 目录表(Tag表),通过并行比较所有 Tag 判断是否命中。
- 优点
- 灵活性强,块冲突概率最低,Cache 利用率高。
- 缺点
- 硬件实现复杂(需多路并行比较器),成本高,速度较慢。
- 适用场景
小容量 Cache 或对命中率要求高的场景。
二、直接映像(Direct Mapping)
- 定义
主存数据块只能映射到 Cache 的 固定位置,规则为:
[
\text{Cache 块号} = \text{主存块号} \mod \text{Cache 总块数}
]。 - 地址变换规则
主存地址划分为 区号(Tag)、块号(Index) 和 块内地址,通过直接取模定位 Cache 块。 - 优点
- 硬件实现简单(无需复杂比较器),访问速度快。
- 缺点
- 块冲突率高,Cache 利用率低(同一 Cache 块可能被不同主存区块竞争)。
- 适用场景
大容量 Cache 或对成本敏感的系统。
三、组相联映像(Set Associative Mapping)
- 定义
主存与 Cache 均分组,组间采用 直接映像,组内采用 全相联映像,平衡灵活性与复杂度。 - 地址变换规则
- 主存地址分为 Tag、组号(Set Index) 和 块内地址。
- 主存块映射到对应 Cache 组,并在组内任意位置存放。
- 优点
- 冲突率低于直接映像,硬件复杂度低于全相联,综合性能较优。
- 缺点
- 组内需比较多个 Tag,实现成本仍高于直接映像。
- 适用场景
中等规模 Cache,广泛用于现代 CPU(如 4 路或 8 路组相联)。
四、段相联映像(Segment Associative Mapping)
- 定义
组间全相联、组内直接映像的变种,进一步优化组相联的目录表容量。 - 地址变换规则
- 主存按段划分,段内采用直接映像,段间全相联。
- 优点
- 降低相联比较次数,提升地址变换速度。
- 缺点
- 灵活性略低于传统组相联,需额外管理段号。
- 适用场景
对目录表容量敏感的嵌入式系统。
地址变换方法对比
方法 | 冲突率 | 硬件复杂度 | 适用性 | 典型引用来源 |
---|---|---|---|---|
全相联 | 最低 | 最高 | 小容量高命中率 | |
直接映像 | 最高 | 最低 | 大容量低成本 | |
组相联 | 中等 | 中等 | 通用场景 | |
段相联 | 中等 | 较低 | 嵌入式优化 |
关键补充说明
- 替换策略:
当 Cache 满时需替换旧块,常用算法包括 LRU(近期最少使用)、FIFO(先进先出) 和 随机替换,其中 LRU 在组相联中广泛使用。 - 写策略:
- 写直达(Write Through):数据同时写入 Cache 和主存,一致性高但速度慢。
- 写回(Write Back):仅写入 Cache,替换时回写主存,速度快但需维护脏位(Dirty Bit)。
通过合理选择映像方式与替换策略,可显著提升 Cache 命中率及系统性能。实际应用中,组相联因平衡性优势成为主流方案。
评论区