注:参考课本《计算机组成原理》(第二版)唐朔飞编著
注:下文部分图片摘自哈尔滨工业大学《计算机组成原理(上)》慕课
注:学的不好,博文可能有雾(欢迎指正~
目录
一、直接映射
计算方法:
- 主存地址长度:主存中存储单元个数为,则主存地址长度就是10
- Cache地址长度:Cache中存储单元个数为,则Cache地址长度就是10
- t:主存地址长度 - Cache地址长度
- c:Cache可以被分为块
- m:主存可以被分为块
- b:块长为(按访存地址计算)
- m = t + c
- m=主存地址长度 - b
- 主存地址长度 = t + c + b
二、全相联映射
计算方法:
全相联中的t,c,b,m和直接映射中的都一样,所以计算方法同上。
三、组相联映射
计算方法:
- 表示Cache的总块数
- 表示Cache分组个数(分组个数=分块个数/组内块数)
- 表示组内包含的块数(r=1,每组包含2块,叫做二路组相联)
- s = t + r
- q = c - r
例题1(课本P120页例4.8):
假设主存容量为512KB,Cache容量为4KB,每个字块为16个字,每个字为32位。问:
(1).Cache地址为多少位?可容纳多少块?
(2).主存地址为多少位?可容纳多少块?
(3).在直接映射方式下,主存的第几块映射到Cache中的第五块(设起始字块号为1)
(4).画出直接映射方式下主存地址字段中各段的位数。
(1)题上没有说是按字访问还是按字节访问,并且题上给出的容量是4KB,那么我们默认是按字节访问,那么根据存储容量的公式:存储容量=存储单元个数*存储字长(课本P17),那么Cache容量为4KB,即有个数据单元,每个数据单元为8位。所以,Cache地址长度为12。每个字块有16*32位,则4KB的Cache可容纳的块数为:4KB/(16*32位)=(*8) / (16*32)=64块。
(2)同理,主存地址为19位(512K=),可容纳(*8)/(16*32)=8192块.
(3)Cache共有64块,则按照主存块号按照64取模为5的主存块都会映射到Cache中的第5块,则满足要求的主存块号为5,64+5,2∗64+5.....2^13-64+5。
(4)第四个就是求t、c、b。t=主存地址长度 - Cache地址长度=19-12=7。Cache共有64块,c=6。
默认其是按字节访问,那么块长就是6位,每个字为32/8=4字节,每个字块就有16x4=64字节(就是),所以b=6。
当然,计算方法不止一种,也可以通过关系式推导得出。
例题2(课本P120页例4.9)
假设主存容量为512K*16位,Cache容量为4096*16位,块长为4个16位的字,访存地址为字。
(1).在直接映射下,设计主存的地址格式。
(2).在全相联映射下,设计主存的地址格式。
(3).在二路组相联映射方式下,设计主存的地址格式。
(4).若主存容量为512K*32位,块长不变,在四路组相联映射下,设计主存的地址格式。
(1)直接映射下,求t、c、b。注意,访存地址为字,每个字是16位,所以块长是4,所以b=2。
主存地址长度是19(512K=),Cache地址长度为12(4096=),则t=19-12=7。
Cache能分1024块,就是块(4096/4=1024块),所以c=10。
(2)根据第一问,则b=2,m=19 - 2 = 17
(3)因为是二路组相联,所以r=1。s = t + r = 8。q = c - r = 9。b = 2。
(4)注意,块长没变,主存容量改为512K*32位,访存地址是字地址,所以主存容量可以改写为1024K*16位,主存地址长度为20。Cache没变,所以Cache长度仍然是12位,所以t=20-12=8。c也没变还是10,(Cache能分1024块),四路组相联,所以r=2。s = t + r = 10。q = c - r = 8。块长没变,所以b也没变,还是2。
(也可以用另一种方法:Cache能分1024块,每组是=4块,那么就能分1024/4=256个组,256=,所以q=8)
按照字节编址和按字编址的区别:
补充1:
课本P73页讲主存中存储单元地址的分配的时候,介绍了计算机系统可以按字寻址,也可以按字节寻址
- 按字节寻址,指的是存储空间的最小寻址单位是字节
- 按字寻址,是指存储空间的最小寻址单位是字
在上面两道例题中:
“假设主存容量为512KB,Cache容量为4KB,每个字块为16个字,每个字为32位”(课本P120页例4.8),那么这里没说访存地址,我们按照其给的容量的格式,默认其是按字节访问,那么块长就是6位,每个字为32/8=4字节,每个字块就有16x4=64字节(就是),所以b=6。
“假设主存容量为512K*16位,Cache容量为4096*16位,块长为4个16位的字,访存地址为字”(课本P120页例4.9),那就是按字寻址,块长为4个字,那么块长就是4(),那么b就等于2
总结:一般来说,题目上没有明确指定按字编址,那么就默认是按字节编址(一字节8位),如果题目给出的容量是xxxK*xx位,并且说了访存地址为字,那就是按字访问的。
补充2:
- 例4.8中,主存容量为512KB,我们计算主存地址为19位,512K=
- 例4.8中,Cache容量为4KB,我们计算Cache地址为12位,4K=
- 例4.9中,主存容量为512K*16位,我们计算主存地址为19位,512K=
看上面这三个计算,因为512KB也可以换成512K*8位,那么有的同学就会觉得,是不是我们计算地址长度的时候,就是把存储容量换成xxxK*xx位,然后不管后边的位,只看前边的是2的多少次方就行。是这样吗?
其实不是的,我们看例4.9第四问,主存容量变为512K*32位,如果按照刚才错误的方法,那么主存地址还是19位,512K=。而这里,主存地址是20位,以为按字访存,一个字是16位,所以我们容量可以改写为1024K*16位,1024K=。所以,计算存储地址长度,我们要看是按字访存还是按字节访存。
练习题
课后题4.8
设主存容量为256K字,Cache容量为2K字,块长为4。
(1)设计Cache地址格式,Cache中可装入多少块数据?
(2)在直接映射方式下,设计主存地址格式。
(3)在四路组相联映射方式下,设计主存地址格式。
(4)在全相联映射方式下,设计主存地址格式。
(5)若存储字长为32位,存储器按字节寻址,写出上述三种映射方式下主存的地址格式
答案解析:戳一戳---看解析