主存与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-rrw

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

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

到这里如果还不太明白那就再去看遍书吧(我无能为力了)
在这里插入图片描述
(嘘,偷图小能手)

(1)全相连映射方式

标记字块内地址
sw

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

标记字块内地址
15位5位

在这里插入图片描述
(3)组相连映射方式
先看图
在这里插入图片描述
我认为组相连映射其实是直接映射的一种延伸,组相连映射(2路组相连)其实就是把直接映射的字块0和字块1拼接成一个新的字块0,我们把这个新的字块叫做组。

标记组地址字块内地址
s-ddw

字块内地址不变,我们不用管。组地址呢就是我上面所说的(其实就是由直接映射的一列字块变成了组相连映射的两列映射 、、、可能不太严谨管他呢会做题就行了)所以我们把直接映射的字块地址直接除以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是读主存的次数,别带错了。

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值