敞开生长之旅!这是我参与「日新方案 12 月更文应战」的第15天,点击查看活动详情

@TOC

基本意义

  • 主存–Cache地址映射(mapping)

把存放在主存中的信息按某种规则装入Cache中,并依此树立主存地址与 Cache地址的对应联系。

  • 主存–Cache地址改换(Cache检索)

程序运行时,根据地址映射把主存地址即MAR内容改换成Cache地址即 CAR内容。

  • 映射与检索的联系

不同的映射规则对应不同的地址改换进程。

  • 首要的三种主存映射方法:
    1. 全相联映射。格局:主存字块标志,块内地址
    2. 直接映射。格局:主存字块标志,cache字块符号,块内地址
    3. 组相联映射。格局:主存字块标志,组号,块内地址

全相联映射

全相联映射答应主存中的任一字块映射到Cache中的任何一块的方位上

优点: 非常灵敏、命中率高,减少了块冲突率

缺点: 所需逻辑电路多且杂乱,本钱高

方法如下

计算机组成原理存储体系 ------------ 主存与Cache的地址映射

  1. 符号与主存中块数的二进制位数持平,是因为咱们要经过主存地址格局中的主存字块符号与cache中的符号位来进行比较来知道当时cache快中的数据是否是需要取的。

直接映射

先将主存按Cache巨细分区,然后每个主存区某块只能放到Cache中与之 块号相同的方位;

映射进程:

主存地址高m位被分红了两部分:低c位指代Cache的字块地址,高t位指代主存字块符号。当缓存接到CPU送来的主存地址后,只需根据中心c位字段找到对应的Cache块,然后根据Cache块中的“符号”是否与主存地址的高t位相符来判别,若符合且有用位为1,标明Cache块已和主存的某块树立了对应联系,可根据b位地址从Cache中获取信息;若不符合或有用位为0,则从主存读入新的字块来替代旧的字块,一起修改Cache符号。

方法如下

计算机组成原理存储体系 ------------ 主存与Cache的地址映射
有一个公式来经过主存的字块号来对应cache中的字块号: 每个主存块只与一个缓存块相对应,映射联系式为:i=jmod  Ci = j \mod C 其间,i为缓存块号,j为主存块号,C为缓冲块数。

这儿解释一下为什么m = t + c:

  1. 首要c是假定来的呢,其实便是cache快数的二进制表明下的位数,意思便是咱们将主存映射到cache中选用的是mod的运算来进行的,通常咱们会把缓存块的数量设置成 2 的 N 次方。这样在计算取模的时分,能够直接取地址的低 N 位,也便是二进制里面的后几位。比如这儿的 8个缓存块,便是 2 的 3 次方。那么,在对 21 取模的时分,能够对 21 的 2 进制表明10101 取地址的低三位,也便是 101,对应的 5,便是对应的缓存块地址
    计算机组成原理存储体系 ------------ 主存与Cache的地址映射
  2. t:取Block地址的低位,就能得到对应的Cache Line地址,除了21号内存块之外,13号、5号等很多内存块的数据,都对应着5号缓存块。既然如此,假定现在 CPU 想要读取 21号内存块,在读取到 5 号缓存块的时分,咱们怎么知道里面的数据,究竟是不是 21 号对应的数据呢? 这个时分,在对应的缓存块中,咱们会存储一个组符号(Tag)。这个组符号会记录,当时缓存块内存储的数据对应的内存块,而缓存块本身的地址表明访问地址的低N位。就像上面的比如,21 的低 3 位 101,缓存块本身的地址现已涵盖了对应的信息、对应的组符号,咱们只需要记录 21 剩余的高 2 位的信息,也便是 10 就能够了。

直接映射的操练

计算机组成原理存储体系 ------------ 主存与Cache的地址映射

  1. 首要咱们根据寻址方法算出主存和cache的地址位数,如主存1MB便是以字节为基础的2202^{20}的巨细,所以寻址空间为 20位,而cache现已指明晰是字,根据题目一字 = 4 字节,所以cache有 11 位。
  2. 咱们根据cache块长计算出cache中块的个数和主存中块的个数,这儿cache 有 512=29512 =2^9块,主存则是 220/22=2182^{20} / 2^2 = 2^{18}块。
  3. 根据上边我所描绘的,咱们知道主存地址格局前边的标志的位数与主存的块数的二进制位数相同 ,所以总的为 18位,其间c = cache中块数的二进制位数,所以是 9,那么t = m – c = 9.
  4. 至于块内地址位数,便是块长与寻址长度的联系,这儿块长为1字,寻址为一个字节,由1字 = 4 字节,所以需要两位。故最后主存格局如下
    计算机组成原理存储体系 ------------ 主存与Cache的地址映射

这儿所给的区号,其实便是我上边所描绘的主存m为地址以cache块数的二进制位数c为分界线的高位,区内块号便是低位。

组相联映射

是全相联与直接映射的折中— 先将主存按Cache巨细分区,然后各区(Cache相当于只要一个区)分组(组内有若干块);之后:

  • 组的映射依照直接映射规则进行;
  • 组内各块则依照全相联规则映射。

组相联映射是对直接映射和全相联映射的一种折中。它将Cache分红Q组,每组有R块,并有以下联系:i=jmod  Qi = j \mod Qi为缓存的组号,j为主存的块号。某一主存块按模Q将其映射到缓存的第i组内。假定现在c = 5,q = 4,r = c – q = 1,它表明的意思是:缓存共有2 5 = 32个块,总共分红了2 4 = 16个组,每个组包括2 1 = 2个块,主存中的某一字块能够按模16映射到Cache某组中的任一字块。

上边联系式子对比直接映射的式子咱们能够将cache分组后的每一个组当成一个新的块,咱们需要将主存中的块经过mod 运算映射到cache的组号上来。

对于上边经过主存块号映射到cache中的组号

规则示意图

计算机组成原理存储体系 ------------ 主存与Cache的地址映射

  1. 标志位数 + 组号位数 = 主存块数二进制位数。

归纳习题

计算机组成原理存储体系 ------------ 主存与Cache的地址映射

  1. 写出主存和cache的地址线位数分别为219和2122^{19} 和2^{12}
  2. 根据块长,计算出主存和cache中的块数: 217和2102^{17} 和2^{10},这儿因为块长是4个16位字,而主存和cache存储单元都是16位,因此地址位数除以 4=224 = 2^2就得到块数。
  3. 对于直接映射,cache字块地址位数=cache块数二进制的位数,这儿便是10,根据m = t + c,所以主存字块符号位数是 17 – 10 = 7 位,一起块内地址位数看,块中有4个存储单元,因此为2位。
  4. 全相联的话,只要两个部分,主存字块标志 = 17 ,后边的块内地址位数同上。
  5. 对于二路组相联映射,这个二路表明一组有2块,那么咱们先求出组数 = 210/21=292^{10}/ 2 ^ 1 =2^9,所以组地址位数 = 9 ,主存字块标志位数 = 17 – 9 = 8位。三者成果如下图
    计算机组成原理存储体系 ------------ 主存与Cache的地址映射