根据存储体与cache存储体的大小,把主存主体划分为若干个与cache存储体大小相等的区,每个区的大小和
缓存体的大小相同,每个区中包含的字块数和cache存储体中包含的字块数相等。在映射中,任何一个区的第
零块只能放到cache的字块0中,把区号写入标题中.
缺点开始利用率低,冲突概率大
为了解决直接相联映射不灵活的问题,出现了全相联映射。全相联映射不是通过字块号来寻找字块,而是将
主存地址中的标记与缓存中每个字块的标记进行比较,如果找到与之相同标记的缓存块,则表明所访问的主
存地址在缓存中,之后在Cache中找到缓存块后,再根据主存地址的低b位找到快内地址,这样就找到对应的
字,也就是需要的数据。因而在这种映射方式下,主存地址中只需要主存字块标记和字块内地址就行。
全相连问题参加比较数字长速度慢
2的q次方表示Cache分组个数(分组个数=分块个数/组内块数)
2^r表示组内包含的块数(r=1,每组包含2块,叫做二路组相联)
s = t + r
q = c - 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^19x8)/(16x32)=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
用容量除以块大小得到块的个数 c=(2^12x16)/(4x16)=2 ^10块,c=10
m=17
(2)在全相联映射下,主存地址仅由字块内地址和主存字块标记构成,而字块内地址在(1)中求得为2位,所以这里的字块内地址为19-2=17位。
(3)r=1 cache总块数不变,c=10,q=c-1=9
s=m-q=17-9=8
由于每个字块到这里都是没有变化的,所以字块内地址仍为2位,即b=2,b并没有发生改变
(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位,得到如下主存字块地址格式:
设主存容量为256K字,Cache容量为2K字,块长为4,若存储字长为32位,存储器按字节寻址,写出上述三种映射方式下主存的地址格式。
存储字长为32位,存储器按字节寻址
那么主存地址容量为256K字32位,按字节寻址 ,故主存地址长度为20 ((256K32)/8=2^20)
同理,cache容量为2K*32位,故cache地址长度为13((2Kx32)/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都算出来了,剩下的就直接写