计算机组成原理-高速缓存器 cache , 相连映射 ,学习经验

【菜狗前言】emm…就是上课没认真听讲,然后刷了波课程,写写来自我总结一下…欢迎各位大佬批评指正…

一、概述

1.为什么用cache

emm…因为cpu的处理速度发展的很快,cpu在执行程序时,数据、指令、结果都要取自或保存到存储器中,但访问的速度跟不上cpu的运算速度,会造成cpu“空等”的问题。所以cache被提出来用于解决cpu空等的问题。

2.cache的工作原理

cache就是在cpu与主存之间加入一块容量小,速度高的缓存。尽可能地使cpu需要的数据都能在cache中找到,来提高速度。

在这里插入图片描述

主存与缓存的编址

在这里插入图片描述
将主存与cache分为大小相同的块,并进行标号,主存分M块,cache分C块。

在这里插入图片描述
1.主存的容量要远远大于缓存的容量。即,M>>C
2.编址时,块内地址的位数决定了块的大小。当内存的编址单位是字节,块内地址为4位是,一个块的大小就是16个字节。
3.内存地址的块内地址部分与cache部分的块内地址部分完全是相同的。4.cache中的标号保存的是主存的块号,用来判断某一个主存块是否存入cache中。

命中与未命中

【前提】:由于主存容量远大于缓存,cache中只有主存的一部分。
【定义】:在cpu访问主存的时候,如果要访问的主存块已经被放入缓存中,可直接在缓存中取到数据或指令,这就叫命中。如果没被存入缓存中,就叫未命中,此时必须在主存中取到数据与指令。
1.当命中时,可以说是,主存块已经存在缓存块中,对应的主存块与缓存块建立了相应联系,缓存块中的标记存储了对应主存的主存块号。

cache的命中率

【定义】:cpu与访问信息在cache中的比率
n1:命中的次数
n2:未命中的次数
命中率:n1/(n1+n2)
1.命中率与cache的容量与块长有关。
容量越大命中率有可能就越高、
块长过大或过小都会影响命中率,过小时,cache中保存的信息就少,程序未执行几步就将cache中的信息执行完了,就要替换存储块,影响命中率。块过大时,cache中存储的块数就会减少,那么一旦块中有用的信息很少,那么cahce中无用的信息就过多,命中率就会降低。
2.一般每块可取4~8个字,一般是一个存取周期内从主存调出的信息长度。

cache-主存系统的效率

1.访问效率e与命中率有关
e = 访问cache的时间 / 平均访问时间 x 100%
设:cache的命中率为h,访问cache的时间为 tc,访问主存的时间为tm
则: e = tc/[h*tc + (1-h)*tm]
2.由公式知,这种情况下,cpu在取信息时,是同时访问cache与主存。当先访问cache时,公式会发生改变。

3.cache的读写操作

读操作

读操作:CPU发出访问的地址,先进行判断是否命中,若命中直接访问cache取出信息送入CPU,若未命中访问主存来取出信息送入CPU,同时判断cache所允许相应的内存块存入的地方是否满了,没满的话就将新的主存块调入cache中,满了的话就执行替换运算,腾出空间再将主存块调入cache中。

读操作不会影响cache与主存的一直性,但写操作会影响,所以在写操作中一定要注意一致性的问题。

写操作

写操作:写操作有两种方法,写直达法与写回法。

写直达法(写通过):写操作时同时将数据写入cache与主存中。可以时刻保持cache与主存的一致性,但可能会造成对某一内存的多次修改。

写回法:写操作时只将数据写入cache,不写入主存。当cache块被替换出去时才写入主存。无法时刻保持cache与主存的一致性,在多处理器时,每个处理器都有自己的cache,内存的一个块在各个cache中都有副本,这种方法无法保证各个副本中的cache一致性。

4.cache的改进

增加cache级数

实现片载(片内)cache:在cpu中加一个cache
,对多核处理器,每个核都有自己的cache,而在多个核有一个公用cache。

统一缓存和分立缓存

将指令与数据分别存入不同的cache中

二、cache-主存存储映射(重点)

1.直接映射

【定义】:主存中的任意一个块,只能存入cache中的某一指定的块。

【自己理解】:某个主存块,就往指定的一个cache块里存,别的cache块,看都不看。

例:将主存与cache分块,主存M块,cache有C块,那么将主存的块分区,C个主存块分为1区。每个去的第0块只能存入cache的第0块,区的第一块只能存入cache的第一块中。

cache标记里保存的是主存块对应的区。cpu给出的地址分为3部分,依次是主存字块标记、cache子块地址、字块内地址。

主存字块标记:存入cache块时存入标记的值。记录着是哪个区的数据
cache字块地址:记录存入cache中时,存入cache的哪个块内。
字块内地址:是偏移地址。

问题:cache的利用率很低,在调用时cache冲突的概率特别大。

2.全相联映射

【定义】:主存中任何一个块,可以被放入cache中的任何一个块。

【自己理解】:只要cache中有地方,就能往里放。

现在cpu给出的主存地址被分为两部分:主存字块标记、字块内地址。

主存字块标记:存入cache块时存入标记的值。
字块内地址:偏移地址

当判断一个主存块是否在cache中时,要对cache的所有块的标记进行比较。速度会慢。

3.组相联映射

【定义】:没找到

【自己理解】:就是将cache块分组,任意一个主存块可以放入指定组的任意一个cache块中。

这时主存按照cache的组数进行分区,每个区中的主存块与cache的组数相等。

每个区的第n块,可以放入cache中第n组的任何一个位置。

现在cpu给出的主存地址被分为三部分:主存字块标记、组地址、字块内地址。

主存字块标记:存入cache块时存入标记的值。
组地址:记录着对应的主存块要存入哪个组。
字块内地址:偏移地址。

三、替换算法

当某个主存块要调入cache中时,该主存块可以被调入的位置全部都已经被存入主存块了,那么就必须有一个cache块被替换掉,来让新的主存块存入cache中。

书中有两种替换算法:先进先出(FIFO)算法、近期最少使用(LRU)算法。

先进先出(FIFO)算法:认为最先被调入的块,块内的信息已经被用完,或者块内的信息在短时间内不会再被使用。

近期最少使用(LRU)算法:认为近期最少使用的cache块,我们将不会再使用,或者在短时间内不会再被使用。应用比较广泛。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

染指13

能不能混点money呢?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值