目录
直接映射中Cache地址和主存地址对比(重点注意)
一、直接映射
- 定义:主存中任一给定的块,只能映射/装载到某一个指定的Cache块中
- 构成:根据cache存储体和主存储体的大小,将主存划分为若干个与cache存储体相等的区,每个区的大小与cache大小相同
- 映射规则:主存各区的字块数=cache内的字块数。进行映射时,各个区的 第零块 只能放在cache存储体的 第零块 当中,第n块只能放在cache的第n块中
-
特点
- 结构简单,速度较快
- 可以通过cache块的地址直接找到cache块
- cache空间利用率最低,cache块调入时最容易冲突
-
直接映射工作图
-
地址构成
- 区号——主存字块标记;与Cache地址内Tag相比较,用于判断Cache是否被命中
- 块号——Cache字块地址;用于寻找对应的Cache块,找到后通过比较器与块前的标记作对比判断是否命中
- 块内偏移地址——字块内地址
-
工作流程
- ①CPU发出读指令 → 根据字块地址找到对应块 → 对比块前标记通过比较器判断是否命中(主存标记位相等且Cache地址内的有效位 = 1)
②命中:将Cache内信息送往CPU → 结束
③未命中:访问主存将信息送往CPU 同时 判断Cache是否满
1)未满 → 将新存储块调入Cache中 → 结束
2)已满 → 原来的块被无条件替换(不执行替换算法) → 新存储块调入Cache(主存字块标记位写入Tag,有效位 置为1) → 结束
-
直接映射中Cache地址和主存地址对比
- Cache地址 = 存储容量+标记阵列容量 (由多个标记项组成,容量即为单个标记项长度)
- 标记阵列容量 = 有效位+标记为(Tag)+一致性维护位(脏位)+替换算法控制位
- 一般只考虑 有效位+标记位 ,使用写回法时一定包含一致性维护位
- Cache地址图示
二、全相联映射
- 定义:主存中任意一个块可以被放到cache的任意一个块中
- 特点
- cache利用率较高、冲突概率低、命中率高
- 主存字块标记要和cache内所有字块标记相比较,判断是否命中
- 电路比较复杂,地址变换速度较慢
- 参加比较的主存字块标记过长
- 成本高,一般用按内容寻址的相联存储器进行地址映射
-
全相连映射工作图
-
地址构成
- 区号+块号——主存字块标记;需要和cache地址内字块标记的Tag位相比较,判断是否命中
- 块内偏移地址——字块内地址
三、组相连映射
- 定义:主存中任意一个块可以被放到cache内对应组的任意一个块中
- 映射规则:先将cache分成块,将块分组,每组包含多个快;将主存储器分区,每个区的大小和cache中的组数相同(组数 = 区内块数)。映像时,每个区的 第零块 可以放到cache中 第零组 的任何一个位置
- 是全相联和直接映射的结合体——组间直接映射,组内全相联映射
-
组相连映射工作图
-
地址构成
- 组地址:通过主存块号找到对应的组号
- 主存字块标记:与对应组内的字块标记进行比较
- 字块内地址
-
工作流程
- ①CPU发出读指令 → 根据组地址找到对应组 → 对比块前标记通过比较器判断是否命中(主存标记位相等且Cache地址内的有效位 = 1)
②命中:将Cache内信息送往CPU → 结束
③未命中:访问主存将信息送往CPU 同时 判断Cache是否满
1)未满 → 将新存储块调入Cache中 → 结束
2)已满 → 执行替换算法,将信息删除或写回主存 →新存储块调入Cache(主存字块标记位写入Tag,有效位置 为1)→ 结束