Cache 存储体系功能操作的实现
物理地址 Cache 地址变换
这里首先要说明的是:主要是记住各个映像规则关系和变化方法
同时根据映像规则需要能够写出 主存地址,Cache地址,映像表的格式
《全相联》
从图中我们可以看出相联度为Cb
所谓相联度即是主存储器中的任意一块可以映射到Cache存储器中多少块上
这里主存储器的任意一块可以映射到Cache存取器上的任意一块,所以为Cb
同时我们应该还能得到
主存地址:主存块号+块内地址
Cache地址:Cache块号+块内地址
映像表存储字:主存块号+Cache块号+有效位(1位)
这里需要说明一下如何理解这个映像表:
我们知道设置映像表的目的是为了查看主存储器中的哪些块已经在Cache中了
为此,不同的映像规则,映像表中需要保存的字段也不一样
这里因为主存块号与Cache块号是直接对应的关系,所以这里的映像表字段表示: 主存块号A已经在Cache里了,其保存在Cache中的B块号中
这里的有效位是为了检测Cache缓存是否有效
整个主存地址 变换到 Cache地址的过程为:
当 CPU 发送来一个主存地址时,地址映像电路以主存地址块号 B 为相联查找的关键字
如果查找到一行存储字的主存块号字段与主存地址块号相同,而且有效位为1 则 Cache 命中且有效,取存储字的 Cache 块号 b 与主存地址的块内地址 拼接在一起,形成 Cache 地址访问 Cache 存储器
注意主存地址中的块内地址与Cache地址中国的块内地址是一样的
《直接相联》
注意直接相联的如下特点:
1.主存储器按照Cache存储器的大小进行分区
2.上图中主存储器中块是连续编号下来的,但是在主存地址中,各个区的块是0,1...Cb-1循环编址即:
3.Cache存储器中的i块对应着主存储器中的各个i块(来着不同的区)
同理根据上图我们可以得出:
主存地址:区号+区内块号+块内地址
Cache地址:块号+块内地址
映像表存储字:主存区号+有效位(1位)
主存地址变化到Cache地址的过程:
首先我要说明的是这里映像表的每一行与Cache中的每一行一一对应,即映像表的i行记录了Cache中i行保存的是主存中哪一个块
首先地址映像电路由 主存地址区内块号 按地址读取区表(即上映像表)中的一个存储字
(注意 主存地址区内块号 == Cache块号,这里是根据这个块号,直接去查询区表中对应的块号(即行号))
只要映像表中这个块号处记录的 主存区号 == 主存地址区号,而且有效位为1,Cache命中且有效
(思考一下,这里为何只要记录区号,而且区号对上了就能说明命中呢?为何不要记录块号呢?
因为Cache块号保存的是 主存中各个不同的区号
只要区号 不同块号一定不同(在主存块号连续编号的情况下)
)
《组相联》
组相联依旧是按照Cache存储器的大小进行分区
但是区中规定一个块数,主存和Cache都按照这个块数进行分组
组相联映像规定主存各区的组到Cache 的组之间采用直接相联映像,二个对应组的块之间采用全相联映像
主存地址:区号+区内组号+组内块号+块内地址
Cache地址: 组号+组内块号+块内地址
对应映像表存储字中是什么我们要想以下,要记录什么才能使 主存地址->Cache地址
首先面对到来的一个主存地址,我们想知道这个主存地址对应的块是否在Cache中
那么首先我们需要分清楚这个主存地址是哪个的区,Cache中是否有这个区中的块
所以我们需要记录主存区号
这里映像表中的行数 == Cache存储器的行数 (块数),而且Cache存储器中的组 来着 主存中不同分区的相同组,这说明了只要知道了主存中的区号 和 Cache组号就能知道 这是主存中哪个区的哪个组
所以我们并不需要记录主存组号
因为组与组之间是全相联,所以我们需要记录主存组内块号,以及Cache组内块号
综上:主存区号+主存组内块号+Cache组内块号+有效位(1位)
主存地址->Cache地址:
地址映像电路由主存地址区内组号 按地址读取块表中连续存储的组块容量 Gb个存储字
对读取 Gb个存储字的 主存区号 和 主存组内块号字段 与 主存地址中相应的区号 和 块号 进行相联比较 如果 Gb个存储字有一存储字比较相同,且有效位为 1,则 Cache 命中且有效,从该字中取出 Cache 块号 b′与主存地址中的区内组号 G 和块内地址 W 拼接起来形成 Cache 地址,访问 Cache 存储器
《Cache 块替换算法》
需要注意以下LRU算法中计数器的实现方式:
在映像表中每行存储字增设一个替换计数器字段
Cache 块
装入(含空闲装入和替换装入)时,将该块所属计数器置零,同组其它块所属计数器
均加 1; Cache 块命中时,将该块所属计数器置零,同组其它块所属计数器的值, 若小于命中块所属计数器的原值,则加 1, 否则计数器值不变; 需要 Cache 块被替换时,在同组 Cache 块中选择计数器值最大(一般为全 1)的对应块被替换出去
注意这个变化的过程
标签:存储,主存,层次,Cache,并行,映像,地址,相联 From: https://www.cnblogs.com/cilinmengye/p/17497624.html