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

相关推荐
caimouse39 分钟前
MM 学习笔记 10:页面文件与系统加载器
笔记·学习·reactos
一只小菜鸡..44 分钟前
南京大学 操作系统 (JYY) 学习笔记:Hello, OS World! (程序的机器视角)
java·笔记·学习
lazy H2 小时前
从入门到日常开发,一篇文章掌握 Git 核心操作
git·后端·学习·github
a11177613 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao13 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
你想知道什么?15 小时前
线性回归-学习笔记
笔记·学习·线性回归
鱼毓屿御15 小时前
从「只会聊」到「边想边做」的跃迁
前端·学习·react.js
AOwhisky16 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
minglie118 小时前
zynq中linux系统的自动登录和免密登录
学习
茯苓gao18 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习