Appearance
408
计算机组成原理
CO-03-09 Cache映射方式(直接映射/全相联/组相联)
一、定位信息
| 项目 | 内容 |
|---|---|
| 所属圈层 | 核心层 |
| 前置知识回顾 | 需了解Cache的基本工作原理(CO-03-08),了解主存地址由若干位组成,了解"块"(Block/Line)是Cache与主存之间数据传输的最小单位 |
| 知识网络定位 | 本单元是Cache核心机制的关键——决定了主存块如何放入Cache。映射方式直接影响命中率和硬件复杂度,是替换算法(CO-03-10)和地址转换(CO-03-12)的基础 |
| 考点热度等级 | H级 — Cache映射方式是每年必考的核心考点,三种映射方式的对比和地址划分是高频选择题和计算题,近5年出现≥5次 |
二、知识点讲解
2.1 基本概念
Cache行(Cache Line/Cache Block):Cache中存放数据的基本单位。每个Cache行包含:
- 有效位(Valid Bit):标记该行是否存有有效数据
- 标签(Tag):记录该行数据对应的主存地址的高位部分
- 数据块(Data Block):实际存放的从主存调入的数据
- 脏位(Dirty Bit):写回策略下标记数据是否被修改(见CO-03-10)
主存地址的划分:在Cache系统中,主存地址通常被划分为三个部分:
- Offset(块内偏移):在数据块内的字节偏移,位数 = (块大小)
- Index(索引):决定该主存块可以放在Cache的哪个位置(哪个组),位数取决于映射方式
- Tag(标签):区分映射到同一位置的不同主存块
2.2 直接映射(Direct Mapped)
映射规则:每个主存块只能放在Cache中唯一确定的一个位置。
地址划分:
查找过程:
- 用Index找到对应的Cache行
- 比较该行的Tag与地址中的Tag
- 如果Tag匹配且有效位=1,则命中,用Offset取出数据
- 否则未命中,访问主存
优点:硬件最简单,只需比较一个Tag 缺点:冲突率高——多个主存块映射到同一Cache行时,即使Cache其他行空闲也会发生冲突
2.3 全相联映射(Fully Associative)
映射规则:每个主存块可以放在Cache中任意一个行。
地址划分:
没有Index字段,因为不需要索引来定位——要和所有行比较。
查找过程:
- 将地址中的Tag与Cache中所有行的Tag同时比较
- 如果某一行匹配且有效位=1,则命中
- 否则未命中
优点:冲突率最低,主存块可以放在任何空闲行 缺点:硬件最复杂——需要 个比较器同时比较( 为Cache行数),成本高
2.4 组相联映射(Set Associative)
映射规则:Cache被分为若干组(Set),每个组包含若干行。主存块被映射到一个确定的组(类似直接映射),但在组内可以放在任意行(类似全相联映射)。
地址划分:
路组相联:每组有 个行。
- 1路组相联 = 直接映射
- 路组相联( = Cache总行数,即只有1组)= 全相联映射
查找过程:
- 用Index找到对应的组
- 将Tag与该组内所有行的Tag比较( 个比较器)
- 如果匹配且有效位=1,则命中
优点:在硬件复杂度和命中率之间取得平衡 缺点:比直接映射复杂,比全相联命中率略低
2.5 主存块号的计算
主存块号 = 主存地址 ÷ 块大小(字节数)= 地址的高位部分(去掉Offset位)
例如:主存地址为20位,块大小为16字节(4位Offset),则主存块号 = 地址的高16位。
2.6 地址划分的完整计算
设:
- 主存容量 字节,地址线 位
- Cache有 行,每块大小 字节
- 路组相联
则:
- Offset位数 =
- 组数 =
- Index位数 =
- Tag位数 =
三、记忆与理解辅助
3.1 口诀记忆
口诀:"直接一对一,全联随便放,组联折中取"
- 直接映射:每个主存块对应唯一Cache行
- 全相联映射:每个主存块可以放任何Cache行
- 组相联映射:映射到确定的组,组内随便放
口诀:"地址三分Tag索引偏移"
3.2 对比表:三种映射方式
| 对比项 | 直接映射 | 全相联映射 | 组相联映射 |
|---|---|---|---|
| 映射规则 | 主存块 mod Cache行数 | 可放任意行 | 主存块 mod 组数,组内任意 |
| Index字段 | 有(行号) | 无 | 有(组号) |
| 比较器数量 | 1个 | Cache行数个 | 每组行数个(个) |
| 冲突率 | 最高 | 最低 | 居中 |
| 硬件复杂度 | 最简单 | 最复杂 | 居中 |
| 命中率 | 最低 | 最高 | 居中 |
| 适用场景 | 低成本系统 | 小容量Cache | 实际系统最常用 |
| 极端情况 | — | 路组相联(=总行数) | 时为直接映射 |
3.3 地址划分速算表
| 参数 | 公式 | 说明 |
|---|---|---|
| Offset位数 | 块内字节偏移 | |
| Index位数 | (直接映射)或 (组相联) | 定位Cache行/组 |
| Tag位数 | 地址总位数 - Index位数 - Offset位数 | 区分不同主存块 |
3.4 类比理解
- 直接映射:像固定座位的火车——你的座位号是确定的,别人也可能被分到同一个座位
- 全相联映射:像自助餐——任何盘子可以放在任何位置,但服务员需要逐个检查每个位置
- 组相联映射:像分区域的自助餐——你的盘子必须放在指定区域,但区域内可以随便选位置
四、例题与精解
例题1(基础)
题目:某计算机主存地址为16位,Cache有8行,每行(块)大小为16字节。采用直接映射方式。 (1)主存地址如何划分? (2)主存地址 1A3CH 对应的Cache行号是多少?
命题意图:考查直接映射的地址划分和行号计算。
审题分析:地址16位,Cache 8行,块大小16字节。
解题思路:先确定Offset、Index、Tag的位数,再划分地址。
完整步骤:
(1)地址划分:
- Offset位数 = 位(低4位)
- Index位数 = 位(中间3位)
- Tag位数 = 位(高9位)
(2)地址 1A3CH 的Cache行号:
1A3CH = 0001 1010 0011 1100(二进制)
- Tag = 0001 1010 0(高9位)
- Index = 011(中间3位)= 3
- Offset = 1100(低4位)
Cache行号 = 3
方法反思:十六进制地址转二进制后,按位数划分即可。注意从低位开始数Offset,然后是Index,最后是Tag。
例题2(中等)
题目:某计算机主存地址为32位,Cache容量为64KB,块大小为64字节,采用4路组相联映射。 (1)Cache有多少行?多少组? (2)主存地址如何划分(Tag、Index、Offset各多少位)? (3)主存地址 002001A8H 对应的组号是多少?
命题意图:考查组相联映射的地址划分和组号计算。
审题分析:地址32位,Cache 64KB,块大小64B,4路组相联。
解题思路:先算Cache行数和组数,再划分地址。
完整步骤:
(1)Cache行数和组数:
(2)地址划分:
- Offset位数 = 位
- Index位数 = 位
- Tag位数 = 位
(3)地址 002001A8H 的组号:
002001A8H = 0000 0000 0010 0000 0000 0001 1010 1000(二进制)
- Offset(低6位)= 101000
- Index(接下来8位)= 00000110 = 6
- Tag(高18位)= 0000 0000 0010 0000 00
组号 = 6
方法反思:
- 组相联中,Cache行数 ÷ 路数 = 组数。
- 地址划分时,先确定Offset(由块大小决定),再确定Index(由组数决定),最后Tag占剩余位。
- 4路组相联需要4个比较器同时比较组内4行的Tag。
五、考情分析
| 项目 | 内容 |
|---|---|
| 近5年考查频次 | ≥5次 |
| 常见题型 | 选择题(三种映射方式的对比)、计算题(地址划分、组号/行号计算) |
| 分值占比 | 选择题2分,计算题5–8分 |
| 命题趋势 | Cache映射方式是每年必考内容。近年趋势是将映射方式与替换算法、写策略结合出综合题,要求考生完成完整的Cache访问过程分析 |
六、易错点提醒
易错点1
- 错误表现:计算组号时用"主存块号 mod Cache行数"而非"mod 组数"
- 错误原因:混淆直接映射和组相联的映射公式
- 正确做法:直接映射用行数,组相联用组数。组数 = 行数 ÷ 路数
易错点2
- 错误表现:地址划分时,将Tag和Index的位数算反
- 错误原因:不确定哪部分在高位、哪部分在低位
- 正确做法:地址从低到高依次是Offset → Index → Tag。Offset在最低位,Tag在最高位
易错点3
- 错误表现:认为全相联映射也有Index字段
- 错误原因:没有理解全相联的"全"——没有固定位置,不需要索引
- 正确做法:全相联映射的地址只有Tag + Offset。Tag = 整个主存块号,需要与Cache所有行比较
易错点4
- 错误表现:计算Tag位数时忘记减去Offset位数
- 错误原因:误以为地址 = Tag + Index
- 正确做法:地址 = Tag + Index + Offset,Tag位数 = 总地址位数 - Index位数 - Offset位数
七、来源标注
- 依据2026考研统考大纲(408-计算机组成原理-第三章"存储器层次结构")
- 依据大学本科经典教材共识:唐朔飞《计算机组成原理》、白中英《计算机组成原理》、Patterson & Hennessy《计算机组成与设计》