主存与cache的地址映射---习题

有一个处理器,主存容量1MB,字长1B,Cache容量16KB,块大小32B。
1.采用全相连映射方式,写出内存的地址格式。
2.采用直接映射方式,请写出内存的地址格式
3.采用组相连映射方式(每组有4行),请写出内存的地址格式
4.设Cache初态为空,CPU依次从内存第1000,1001,1002,…,1499号单元读出500个字(主存一次读出一个字),并重复按此次序读8次,问命中率

话不多说,看题干可以知道
主存:1MB = 2^20字
缓存:16KB = 2^14字
前三问都是写出地址格式
已经知道一共有20位

一共20位

(2)直接映射方式(先说第二问,别问为啥懂的都懂)

标记 字块地址 字块内地址
s-r r w

块大小=行大小=2^w字
2^w = 32B =2^5 得出 w=5
标记 = 主存 - 缓存
s-r=20-14=6,这样就只剩字块地址r,一共20位,已经知道5+6位,所以r=9(当然你也可以通过计算来求出r)

标记 字块地址 字块内地址
6位 9位 5位

到这里如果还不太明白那就再去看遍书吧(我无能为力了)
主存与cache的地址映射---习题_第1张图片
(嘘,偷图小能手)

(1)全相连映射方式

标记 字块内地址
s w

首先介绍一下全相连映射方式
在全相连映射中,将主存的一个块的地址与块的内容一起存于cache的行中,其中块地址存于cache行的标记部分。也就是说在全相连映射中的标记等于直接映射的标记加字块地址(懂了吧)
所以这就好办了

标记 字块内地址
15位 5位

主存与cache的地址映射---习题_第2张图片
(3)组相连映射方式
先看图
主存与cache的地址映射---习题_第3张图片
我认为组相连映射其实是直接映射的一种延伸,组相连映射(2路组相连)其实就是把直接映射的字块0和字块1拼接成一个新的字块0,我们把这个新的字块叫做组。

标记 组地址 字块内地址
s-d d w

字块内地址不变,我们不用管。组地址呢就是我上面所说的(其实就是由直接映射的一列字块变成了组相连映射的两列映射 、、、可能不太严谨管他呢会做题就行了)所以我们把直接映射的字块地址直接除以2就行了(四路组相连就除以4)标记也就出来了

标记 组地址 字块内地址
8位 7位 5位

(4)可算是到第四问了
命中率 = 命中cache的次数/(命中cache次数+命中主存的次数)
咳咳补充一下:CPU与cache之间的数据交换是以字为单位的,cache与主存之间的数据交换是以块为单位的,当CPU读取内存中的一个字时,便发出此字的内存地址到cache和主存,若此字在cache中,则cache命中,若不在则用主存读周期把此字从主存中读出来送到CPU,(重点来了)与此同时,把含有此字的整个数据块送到cache中
进入正题,题目说一开始cache为空,而且要读8次,所以说我们只要算出第一次cache命中的次数就行了,后面7次的数据已经在cache中,必中。
第一次:CPU读1000,去cache找,没有,再去主存中去找,好的找到1000了,这时候就要用到补充的重点了,我们要把1000所在的整个数据块送到cache中,块大小32B(题目给出了),所以从1000、1001、1002…1031都被送到cache中,当CPU读1001时,1001已经在cache中了,一直到1032,cache中没有了,再重复之前的步骤。从1000、1001、1002…1499共500字一共需要去主存16次(500/32大于15小于16 我们要取16)再套用给出的公式就OK了,等等这个16是读主存的次数,别带错了。

完结,好累
如果文章中有什么错误,大哥们就告诉我吧,小弟立马去更正

你可能感兴趣的:(杂七杂八,cpu,缓存)