计算机组成原理——cache映射计算

直接映射计算方法:

根据存储体与cache存储体的大小,把主存主体划分为若干个与cache存储体大小相等的区,每个区的大小和

缓存体的大小相同,每个区中包含的字块数和cache存储体中包含的字块数相等。在映射中,任何一个区的第

零块只能放到cache的字块0中,把区号写入标题中.

缺点开始利用率低,冲突概率大

计算机组成原理——cache映射计算

  • 主存地址长度:主存中存储单元个数为,则主存地址长度就是10
  • Cache地址长度:Cache中存储单元个数为,则Cache地址长度就是10
  • t:主存地址长度 - Cache地址长度
  • c:Cache可以被分为块
  • m:主存可以被分为块
  • b:块长为(按访存地址计算)
  • m = t + c
  • m=主存地址长度 - b
  • 主存地址长度 = t + c + b

全相联映射

为了解决直接相联映射不灵活的问题,出现了全相联映射。全相联映射不是通过字块号来寻找字块,而是将

主存地址中的标记与缓存中每个字块的标记进行比较,如果找到与之相同标记的缓存块,则表明所访问的主

存地址在缓存中,之后在Cache中找到缓存块后,再根据主存地址的低b位找到快内地址,这样就找到对应的

字,也就是需要的数据。因而在这种映射方式下,主存地址中只需要主存字块标记和字块内地址就行。
全相连问题参加比较数字长速度慢
计算机组成原理——cache映射计算

  • .全相联映射中的t,c,b,m和直接映射中的都一样,所以计算方法一样

组相联映射

计算机组成原理——cache映射计算
表示Cache的总块数

  • 2的q次方表示Cache分组个数(分组个数=分块个数/组内块数)

  • 2^r表示组内包含的块数(r=1,每组包含2块,叫做二路组相联)

  • s = t + r

  • q = c - r

由于我是小白,为了方便我理解以下题目,尽量把t,c,m,b,r算出来

1.某计算机的Cache共有16块,采用2路组相联映射方式(即每组2块)。每个主存块大小为32字节,按字节编址。主存129号单元所在的主存块应装入到的Cache组号是:4

解:采用2路组相连的方式,所以r=1

又因为,主存的块大小与cache的块大小相同

129/32=4…1=5,所以在第5组,组号为4

2.一个四路组相连的缓存共有64块,主存共有8192块,每块32个字,访问地址按字。则主存地址中的主存字标块记为几位?组地址为几位,字块内地址为几 位

解:因为四路组,r=2
每块32字所以块内地址为5位,2的5次方等于32,c=5

因为cache有64块,所以64/4=16组,2的4次方等于16,所以组地址为4位,(如果是直接相连的话,那么就是2的6

次方等于64,块地址©就为6位了,但是这里是4路组相连,所以是组地址,而不是块地址)

然后主存一共有8192*32个字,取LOG,也就是18位,

所以字块标记为18-5-4=9位.

3.假设主存容量为512KB,Cache容量为4KB,每个字块为16个(字,每个字为32位。问:
(1)Cache地址为多少位?可容纳多少块?
(2).主存地址为多少位?可容纳多少块?
(3).在直接映射方式下,主存的第几块映射到Cache中的第五块(设起始字块号为1)
(4).画出直接映射方式下主存地址字段中各段的位数。

解:
(1).
这里没有说按照字还是字节编址,那么按照其给的容量的格式,可以得出其默认按照字节编址。那么根据容

量的计算方法:地址数*字长,则Cache的4KB可得地址数为4K,即2^12个数据单元,每个数据单元为8位,即一

个字节B,那么就可以得到地址为12位,每块有16x32位,则4KB的Cache可容纳的块数为:

(4KB8)/(1632位)=64块。

(2).同一理可得到主存地址为19位,可容纳(2^198)/(1632)=8192块.

(3).Cache共有64块,则按照主存块号按照64取模为5的主存块都会映射到Cache中的第5块,则满足要求的主

存块号为5,64+5,2∗64+5,…2∗64+5,…,2^19−64+5

(4)主存:512KB=2^19---->主存地址长度为19
cache:4KB=2^12----cache地址长度为12
所以:t=19-12=7
因为cache可以被分为64块=2^6,所以c=6
m=t+c=13
b:块长为2^b,这里默认按照字节编址,因为cache每个字块是16个字,(1x32)/8*16=64=2 ^6,b=6(或者用公式:主存地址长度=t+c+b)

假设主存容量为512K16位,Cache容量为409616位,块长为4个16位的字,访存地址为字。
(1).在直接映射下,设计主存的地址格式。
(2).在全相联映射下,设计主存的地址格式。
(3).在二路组相联映射方式下,设计主存的地址格式。
(4).若主存容量为512K*32位,块长不变,在四路组相联映射下,设计主存的地址格式。

(1)主存:512KB=2^19---->主存地址长度为19
cache:4096=2^12----cache地址长度为12
所以:t=19-12=7
块长为4个16位的字这句话的意思是: 4字块,每个字16bit——>2^2=4,所以b=2
计算机组成原理——cache映射计算
计算机组成原理——cache映射计算
用容量除以块大小得到块的个数 c=(2^12x16)/(4x16)=2 ^10块,c=10
m=17
计算机组成原理——cache映射计算
(2)在全相联映射下,主存地址仅由字块内地址和主存字块标记构成,而字块内地址在(1)中求得为2位,所以这里的字块内地址为19-2=17位。
计算机组成原理——cache映射计算
(3)r=1 cache总块数不变,c=10,q=c-1=9
s=m-q=17-9=8
由于每个字块到这里都是没有变化的,所以字块内地址仍为2位,即b=2,b并没有发生改变
计算机组成原理——cache映射计算
(4)主存容量为512K*32位,即双字宽存储器,即每次可以访问两个字(最小访存单元),这里的访存地址单元

仍为字没有变,并且块长仍为4个16位的字,所以字块内地址仍为2位,而主存容量可以转为512K*32位

=1024K*16位,这样就可以得到共有1024K个字,即2^20个数据单元,所以主存地址有20位。同时,这里改为

四路相联组映射,即每个Cache组内有4个Cache块,所以共有2 ^10/4=2 ^8 组,所以组地址为8位,即q=8,

得到主存字块标记有20-8-2=10位,得到如下主存字块地址格式:
计算机组成原理——cache映射计算

设主存容量为256K字,Cache容量为2K字,块长为4,若存储字长为32位,存储器按字节寻址,写出上述三种映射方式下主存的地址格式。
存储字长为32位,存储器按字节寻址

那么主存地址容量为256K字32位,按字节寻址 ,故主存地址长度为20 ((256K32)/8=2^20)

同理,cache容量为2K32位,故cache地址长度为13((2K32)/8=2^13)

20 - 13 = 7 故 t = 7

块长之前是4个字,也就是4*32位=128=16个字节 也就是块长为16,故b=4(16=2^4)

cache可以被分为(213/16=29)块,故 c = 9

然后m=16(可以用 t + c 得到,也可以用 主存地址长度 - b 得到)

t、c、b、m都算出来了,剩下的就直接写