Cache(高速缓冲存储器)工作原理

什么是cache?

cache的中文译名为高速缓冲存储器(快取记忆体),高速缓冲存储器(Cache)其原始意义,是指存取速度比一般随机存取记忆体(ram)来得快的一种ram,一般而言它不像系统主记忆体那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。

cache的存在意义?

CPU发展速度大大快于主存,CPU性能每年增长大约增长50%,符合CPU摩尔定律,而主存每十年提升50%,cache的存在弥补了CPU与主存间的速度不匹配问题。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

地址映射:

在这里插入图片描述
如何映射:
主存中的某一块可以随意放到cache有空位的某一块。

在这里插入图片描述
Q:怎么判断此时要存储的cache行内是否存在数据呢?(命中与未命中)

A:可以通过设置有效位来判断cache行内是否有数据存在。
在这里插入图片描述

Q:还有一个问题,因为我们是在cache内随机存储的,那么该怎么判断这一行数据是代表主存里的哪行数据?

A:数据存储到cache时顺便把蓝色框框里面的主存字块标记也存到cache里面对应的位置,由于整块地址传过去的时候块中间的地址顺序是没有打乱的,所以不需要传输字块内地址(就是图中黑色的部分)。
在这里插入图片描述
在这里插入图片描述
如何映射:
主存当中某一块通过一定的计算方法固定放到cache中固定的某一块。
在这里插入图片描述

但是如图中,连续放到cache第7块后就放满了,假如想要继续放第8块数据,就需要用8这个在主存中的行号除以cache的总行数8,得到的余数0就是接下来主存中的块准备放在cache的行号。

这是也会出现与全相联映射同样的问题,需要在cache中标记这是代表主存中哪一块的数据。

在全相联映射中所选取的标记项包括绿色和蓝色的部分,这是因为全相联映射在cache中只保证了每一行内部的地址顺序,行之间的顺序是乱的。

但是在直接映射中,不仅保证了行内地址的顺序,还保证了8行(图中的例子为8行)为一组之间行的顺序。
在这里插入图片描述

所以,代表cache字块地址的蓝色部分是不需要保存的,只需要保存高位的主存字块标记(绿色部分)即可,如图所示,0行~7行的绿色部分都是000……0,直到主存第8行需要再次保存到cache中第0行的时候,绿色部分才发生了变化。

全相联映射和直接映射的优缺点:

全相联映射因为是有空位就随意放,所以空位的利用率是非常高的;

直接映射利用率就差了些,比如,放置了第0行后,而且后面7行都还没有存放数据,如果现在想要存放的是主存内第8块数据,由于直接映射的特性,第8块只能被限制存放在cache中第0行,所以,即使后面还有空位也无法存放,只能替换掉cache中第0行的数据。

但是直接映射的优点就是需要额外存放的标记项比较少,同时cache是需要硬件来帮助识别这些对应的位置的,在需要识别的信息比较多的时候电路也是比较复杂的,所以从这两个方面来看,直接映射相比全相联映射是有优势的。

而接下来的第三种方法则综合了前面两种方法的优势。

在这里插入图片描述

如何映射:
先按照编号分组,分完组后再到组内随意存放。

假设:
在这里插入图片描述
也可以说成二路组相联(每组有两块)。
在这里插入图片描述
主存紫色二进制代表cache的组号,蓝色框框作为标记项。

地址映射的总结:

在这里插入图片描述
在这里插入图片描述

cache满了或者准备要存放的位置被占用了该怎么办?

这就需要考虑替换方法了,而替换的方式是根据一定的替换算法来实现的。

替换算法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用例题来解析:

一、
在这里插入图片描述
在这里插入图片描述

那么计算机是怎么知道此时有没有命中呢?

内置有相联存储器这个物理器件。
在这里插入图片描述

在放入主存的第5号块后,还需要放置第2号块内存,但是cache内已经放满了,那接下来就需要用到替换算法了,而且不同的替换算法会对cache产生不同的结果。

在这里插入图片描述
在这里插入图片描述
LRU的手动算法:
从后往前看,如果这块号以往出现过,就划掉以往出现的,没有出现过就不用管,然后再从前往后看,第一块没被划掉的就是最近最少使用的块。

二、

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因为直接映射是相当于对号入座的,所以在映射的时候一旦有冲突就会直接替换掉,不涉及替换策略。

三、

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

写策略:

cache工作原理小结:

简图:
在这里插入图片描述
详细化:
在这里插入图片描述

cache除了有存储体之外,还会有一个cache主存地址映射变换机构,作用就是为了完成上述的地址映射功能,CPU在传送地址的时候可以通过总线把地址同时传送给主存和cache主存地址映射变换机构。
在命中的情况下,地址通过这个映射机构之后就会被翻译成相对应的cache地址,然后cache就能通过这个地址获取到数据,通过数据总线把数据传送给CPU;
在没有命中的情况下,就会用到一个cache替换机构,作用就是完成上述的替换策略,在这个机构的控制下,主存和cache之间会通过一个直接通路进行快速的替换,替换成功后再由cache和CPU之间进行交流,或者也可以直接由主存在替换的过程中把数据传送给CPU。

假设:

现在CPU发出一个地址,想要访问的是主存的3号块,那么根据cache主存地址映射变换机构判断,如果命中,CPU就能直接从cache中获取数据并处理数据,如果是读操作,cache和主存中的数据是不发生变化的,如果是写操作,就涉及到了写策略的问题。

写策略有两种情况:

①写回法: 因为CPU可能会多次修改准备改写的数据,这样的话每次改写都通知主存就会增加工作量,所以可以让cache中的数据被改写不用及时反馈给主存,等全部改写完成再反馈给主存,类似之前的有效位,这样的操作也需要通过设置一个脏位来完成,作用是来表示cache中某一块数据是否被修改,当某一块数据不被需要了,就可以通过脏位来判断这一块数据是被直接覆盖掉还是写回主存。
在这里插入图片描述

②全写法: 当cache中的数据被修改时,对应的把主存的数据也修改了,这样的策略不需要设置脏位,但是由于改写cache数据和改写主存数据的速度差距是很大的,所以一般会增加一个写缓冲,写缓冲的作用就是用来暂存一系列的写回操作,暂存的速度是非常快的,暂存完之后CPU就可以去做其他事情,之后就可以由写缓冲缓慢地写回主存,但是写缓冲也会面临着在写操作的频率过高时发生溢出的情况。
在这里插入图片描述

如果没有命中, 对于写操作,与命中情况一样,对应着两种写策略。

①写分配法: CPU就会发现想要改写的数据不在cache中,会从主存中调入cache,此时调入后再次访问就命中了,由于改写cache数据的速度比直接改写主存数据的速度块,所以就直接改写cache数据,之后与写回法一样,设置一个脏位判断是否写回主存。
在这里插入图片描述

②非写分配法: 直接在主存改写数据,不调入cache。
在这里插入图片描述

写策略小结:
在这里插入图片描述
结合两种写策略的优缺点,可以采用多级cache
在这里插入图片描述

  • 8
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值