计算机系统基础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(一):从块到缓存结构,以及逐步推出映射策略

相关推荐
aaajj2 小时前
【Android】appops学习
android·学习
山川行2 小时前
Git学习笔记:Git进阶操作
笔记·git·vscode·学习·编辑器·visual studio code
nqqcat~2 小时前
hlist哈希链表学习笔记
学习·链表·哈希算法
林鸿群2 小时前
Cocos2d-x 官方仓库学习总结
学习·游戏引擎·cocos2d
橘bird2 小时前
LangChain1.2 学习笔记(自用)(未完结)
笔记·python·学习·langchain
吃着火锅x唱着歌2 小时前
PHP7内核剖析 学习笔记 第十章 扩展开发(3)
java·笔记·学习
for_ever_love__2 小时前
Objective-C 学习 NSString 和 NSMutableString的基本功能详解
学习·ios·objective-c
正经人_x3 小时前
学习日记33:Autoformer
学习