信息存储的层次与并行技术

发布时间 2023-06-22 15:11:34作者: 次林梦叶

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 存储器