主存与cache的地址映射 |
您所在的位置:网站首页 › 计算cache命中率 › 主存与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是读主存的次数,别带错了。 完结,好累 如果文章中有什么错误,大哥们就告诉我吧,小弟立马去更正 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |