计算机系统基础21---计算机的基本组成---Cache的地址映射方式

文章目录

不同的映射方式决定了CPU访问内存时,如何查找数据,以及Cache的利用率和命中率。在计算机体系结构中,Cache的映射方式主要有三种经典情况。

1. 直接映射

这是最简单、最直接的映射方式。

原理

主存被划分为许多页(Page),Cache也被划分为同样大小的行(Line)。

主存中的每一块只能固定映射到Cache中的唯一特定行。

映射关系通常由地址计算得出:Cache行号 = 主存块地址 % Cache总行数。

地址结构

CPU地址被划分为三部分:标记(Tag) + 行号(Line Index) + 块内偏移(Offset)。

特点

优点:硬件实现非常简单(比较器少,控制部分逻辑简单),查找速度快。

缺点:冲突率极高。如果程序反复访问两个映射到同一Cache行的不同主存块,就会导致频繁的Cache缺失和替换(即使别的Cache行是空的,也不能用),这种情况称为"抖动"。

类比

就像图书馆里每本书只有一个固定的书架位置(按书名的字母顺序固定摆放)。如果连续借两本都需要放在同一个格子的书,管理员就得来回替换。

2. 全相联映射

这是最灵活、最聪明的映射方式,但硬件代价最大。

原理

主存中的任何一个块,可以映射到Cache中的任何一个行位置。

当需要加载数据时,只要Cache中有空位,就可以放;当需要替换时,可以从所有Cache行中选择一个进行替换。

地址结构

地址被划分为两部分:标记(Tag) + 块内偏移(Offset)。这里没有了"行号"字段,因为数据可以放在任何地方。

特点

优点:空间利用率最高,冲突率最低。只有当Cache完全满时才会发生替换。

缺点:硬件实现极其复杂。每次查找数据时,控制部分需要将地址中的Tag与Cache中所有行的Tag同时进行比较(并行比较),这需要大量的比较器电路,成本高,功耗大,速度也会因此受影响(不适合做大容量的Cache)。

类比

图书馆里没有固定的书架,新书来了可以随便找个空位放。但要找书时,管理员必须翻遍整个图书馆的每一个角落才能找到。

3. 组相联映射

这是前两种方式的折中方案,也是现代CPU(如Intel/AMD)实际采用的主流方式。

原理

将Cache分为若干组(Set),每组包含多个行(称为路,Way)。

主存中的一个块可以映射到某一个特定组中的任意一行(但不能跨组)。

映射关系:Cache组号 = 主存块地址 % 组数。这其实是"直接映射"确定组,然后在组内采用"全相联"放置。

地址结构

地址被划分为三部分:标记(Tag) + 组号(Set Index) + 块内偏移(Offset)。

常用术语

常用术语:通常称为 n路组相联(n-Way Set Associative)。

例如:

2路组相联:每组有2个Cache行。

8路组相联:每组有8个Cache行。

特点

优点:兼具直接映射的快速定位(通过组号直接找到组)和全相联的灵活性(组内任意放)。冲突率比直接映射低,硬件复杂度比全相联低。

缺点:比直接映射复杂一些,且组数决定了冲突的上限。

类比

图书馆分成多个区域(组),每本书按类别只能去某个固定区域,但在该区域内,可以随便放在任何一个书架上。

推荐文章

理解计算机Cache(一):从块到缓存结构,以及逐步推出映射策略

相关推荐
知识分享小能手1 小时前
MongoDB入门学习教程,从入门到精通,MongoDB的选择片键 - 完整知识点(16)
数据库·学习·mongodb
知识分享小能手1 小时前
MongoDB入门学习教程,从入门到精通,MongoDB分片配置完全指南(15)
数据库·学习·mongodb
Dyanic1 小时前
AMSFusion:一种基于注意力机制的自适应多尺度红外与可见光图像融合网络
图像处理·人工智能·学习
少许极端2 小时前
算法奇妙屋(四十三)-贪心算法学习之路10
学习·算法·贪心算法
南境十里·墨染春水2 小时前
Linux学习进展 进程管理命令 及文件压缩解压
linux·运维·笔记·学习
航Hang*2 小时前
第2章:进阶Linux系统——第4节:配置与管理NFS服务器
linux·运维·服务器·笔记·学习·vmware
ZhiqianXia2 小时前
Pytorch 学习笔记(8): PyTorch FX
pytorch·笔记·学习
xuhaoyu_cpp_java3 小时前
Boyer-Moore 投票算法
java·经验分享·笔记·学习·算法
沪漂阿龙3 小时前
深度剖析神经网络学习:从损失函数到SGD,手写数字识别完整实战
人工智能·神经网络·学习
迷路爸爸1803 小时前
Docker 入门学习笔记 06:用一个可复现的 Python 项目真正理解 Dockerfile
笔记·学习·docker