基本含义
- 主存–Cache地址映射(mapping)
把存放在主存中的信息按某种规则装入Cache中,并依此建立主存地址与
Cache地址的对应关系。
- 主存–Cache地址变换(Cache检索)
程序运行时,根据地址映射把主存地址即MAR内容变换成Cache地址即
CAR内容。
- 映射与检索的关系
不同的映射规则对应不同的地址变换过程。
- 主要的三种主存映射方式:
- 全相联映射。格式:主存字块标志,块内地址
- 直接映射。格式:主存字块标志,cache字块标记,块内地址
- 组相联映射。格式:主存字块标志,组号,块内地址
全相联映射
全相联映射允许主存中的任一字块映射到Cache中的任何一块的位置上
优点: 十分灵活、命中率高,减少了块冲突率
缺点: 所需逻辑电路多且复杂,成本高
形式如下

- 标记与主存中块数的二进制位数相等,是因为我们要通过主存地址格式中的主存字块标记与cache中的标记位来进行比较来知道当前cache快中的数据是否是需要取的。
直接映射
先将主存按Cache大小分区,而后每个主存区某块只能放到Cache中与之
块号相同的位置;
映射过程:
主存地址高m位被分成了两部分:低c位指代Cache的字块地址,高t位指代主存字块标记。当缓存接到CPU送来的主存地址后,只需根据中间c位字段找到对应的Cache块,然后根据Cache块中的“标记”是否与主存地址的高t位相符来判断,若符合且有效位为1,表明Cache块已和主存的某块建立了对应关系,可根据b位地址从Cache中获取信息;若不符合或有效位为0,则从主存读入新的字块来代替旧的字块,同时修改Cache标记。
形式如下

有一个公式来通过主存的字块号来对应cache中的字块号:
每个主存块只与一个缓存块相对应,映射关系式为:$i = j \mod C $
其中,i为缓存块号,j为主存块号,C为缓冲块数。
这里解释一下为什么m = t + c:
- 首先c是如果来的呢,其实就是cache快数的二进制表示下的位数,意思就是我们将主存映射到cache中采用的是mod的运算来进行的,通常我们会把缓存块的数量设置成 2 的 N 次方。这样在计算取模的时候,可以直接取地址的低 N 位,也就是二进制里面的后几位。比如这里的 8个缓存块,就是 2 的 3 次方。那么,在对 21 取模的时候,可以对 21 的 2 进制表示10101 取地址的低三位,也就是 101,对应的 5,就是对应的缓存块地址

- t:取Block地址的低位,就能得到对应的Cache Line地址,除了21号内存块之外,13号、5号等很多内存块的数据,都对应着5号缓存块。既然如此,假如现在 CPU 想要读取 21号内存块,在读取到 5 号缓存块的时候,我们怎么知道里面的数据,究竟是不是 21 号对应的数据呢?
这个时候,在对应的缓存块中,我们会存储一个组标记(Tag)。这个组标记会记录,当前缓存块内存储的数据对应的内存块,而缓存块本身的地址表示访问地址的低N位。就像上面的例子,21 的低 3 位 101,缓存块本身的地址已经涵盖了对应的信息、对应的组标记,我们只需要记录 21 剩余的高 2 位的信息,也就是 10 就可以了。
直接映射的练习

- 首先我们根据寻址方式算出主存和cache的地址位数,如主存1MB就是以字节为基础的 2 20 2^{20} 2

本文详细介绍了主存-Cache地址映射的三种方式:全相联映射、直接映射和组相联映射。全相联映射灵活性高但实现复杂;直接映射简单但可能导致块冲突;组相联映射是两者的折中方案。每种映射方式的地址转换规则、优缺点及实例解析使得读者能深入理解这些概念。此外,还提供了相关习题以巩固理解。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



