全相联映射、直接映射、组相连映射

1、主存中的块放到cache(高速缓冲存储器)中哪个位置?

全相联映射:主存中的块在cache中随意放(就是想放cache中的哪一行就放哪一行)

直接映射:主存块号%cache有多少行,通过这样计算出来的结果,就是主存块在cache中存放的位置。

组相连映射:主存块号%cache中有多少组,通过这样计算出来的结果,就是主存块在cache中存放的组,至于在组中可以随意放。

2、标记位、有效位、命中是什么?

2.1 标记位

标记位=主存块号,当主存块中的东西放到cache中后,会将相应的主存块号设置为标记位。这样做的话,下次CPU要访问这个位置的主存时,就不用直接去访问主存了,只要在cache中就可以找到。

比如:CPU要访问主存中地址A,首先会去看看cache中有没有A,由于这里A地址放到了cache中,那么就直接找cache就行,就不用专门跑去主存中了。
而这期间具体是这样子的,CPU先找到cache中的标记位,找到标记位后,也就是找到了相应的cache行,再通过块内地址在相应的cache行中找到相应的位置。
(主存地址A = 主存块号+块内地址)

2.2 有效位

cache中没有放东西的行会默认置0,这时候可能就会出现很多个0的情况,而且如果主存块号0放入cache中还会与之混淆,所以就引入了有效位这个概念。在放入后,有效位就设置为1,没有放入就设置为0,这样就算放入的是主存块号0,也不会混淆了。

2.3 命中

命中是什么意思呢?我个人理解是:CPU在cache中找到了它想要在主存中找到的东西。如果在cache中没有找到,就是未命中。未命中的话,CPU就需要去访问主存,虽然这样会慢一点,但是没办法,毕竟cache中没有,就只能去主存找了。

3、全相联映射

请添加图片描述

这是王道考研中的一个截图,感兴趣的可以看看王道的讲解。
链接: https://pan.baidu.com/s/1dkDtZxbSP0OHvJDaoKR5rg 提取码: ngc1

这里需要注意:1MB = 210 KB = 220 B
所以256MB = 228 B
又因为每行长64B = 26B
所以cache的块内地址为26
因为cache块的大小是和主存块的大小是相等的,也就是cache和主存的每一行大小相等,所以主存的块内地址是6位

228/26 = 222

所以主存块号为22位

4、直接映射

请添加图片描述
直接映射有一个很大的缺点就是,只能放在固定位置,灵活性差,会使大片内存无法得到充分利用。
比如图中所示一样,主存块号8的那个要放到cache中,对应的是0的那一行,但是其他地方明显空了很多,却不用,而且放到0的那里,还会覆盖掉原来的


4.1优化标记位

请添加图片描述

主存块号的后三位与cache中行数的二进制数相对应


请添加图片描述

这里通过优化后,标记位的位数可以少3位,其实就是将主存块号进行细分,细分出了标记位和行号。

5、组相连映射

请添加图片描述

请添加图片描述

6、课后习题

设某计算机主存容量位4MB,Cache容量为16KB,每块包含8个字,每字32位,设计一个4路组相连映像(即Cache每组内共有4个块)的Cache组织,要求:
(1)画出主存地址字段中各字段的位数
(2)设Cache的初态为空,CPU依次从主存第0,1,2,……,99号单元读出100个字(主存依次读出一个字),并重复按此次序读8次,问命中率是多少?
(3)若Cache的速度是主存的6倍,试问有Cache和无Cache相比,速度提高多少倍?

关于主存地址的例题
关于主存地址的详细讲解
这两篇文章看了之后,来做第一小问应该会比较轻松。

(1)主存地址 = 区号+组号+组内块号+块内地址号

因为Cache容量位16KB,即214 B,每个B(字节)里面有8位
Cache的容量 = 16KB/(8*32)位 =( 214*8)/28 = 29
又因为每4块一组,所以共有29/4 = 27组,通过二进制来表示27 组,所以需要7位,故组号是7。(21组的话,就是需要1位二进制数,0和1;22组=4组,就需要2位二进制数,00 = 0,01 = 1,10 = 3,11 = 4)

组内块号就是指有多少块一组,这里是4块一组,是22 组,所以转换成二进制需要两位,所以组内块号 = 2

如果没有明确指明的话,默认是按字节编址,那么每个字就是32位/8 = 4字节,又因为每块包含8个字,所以一个块有8*4 = 32字节 = 25 字节
故块内地址号 = 5

因为主存容量是4MB = 222 B,所以主存地址共有22位
最后,区号 = 22 - 7 - 2 - 5 = 8

主存地址格式如下:

区号组号组内块号块内地址
8位7位2位5位

(2)由于每个字块有8个字,所以主存第0,1,2,……,99号单元分别在0~12中,采用四路组相连分别映像到第0组至12组中,但由于Cache起始为空,所以第一次读取的时候,读每一块的第一个单元都是为空,都没命中,但后7次每个单元都能命中。

命中率 = (100-13 + 7x100) / 8x100 = 98.4%

(3)设Cache的存取周期为T,则主存的存取周期为6T。
有Cache的访存时间 = H × Tc + (1 - H) × (Tm + Tc)= Tc + (1 - H) × Tm = T + (1 - 98.4%) × 6T= 1.096T

  • 47
    点赞
  • 268
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值