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
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 程序局部性是指在程序执行过程中,相同或相邻的指令和数据往往会被反复访问并多次使用的特性。其原理主要包括时间局部性和空间局部性。 时间局部性指的是在执行过程中,程序的某个指令或者数据项在一段时间内被反复多次使用。这是由于计算机执行时,指令和数据往往以顺序的方式被取出和执行,因此当前执行的指令和数据有较大的概率在近期内再次使用。 空间局部性指的是在执行过程中,程序相邻的指令和数据在存储器中相对位置较近,因此在访问某个指令或数据时,往往会连续地访问其相邻的指令和数据。这是因为计算机在执行指令时,往往以块的方式从内存中读取数据,因此在读取一个数据时,很可能连续地读取其相邻的数据。 高速缓冲存储器cache)是位于中央处理器(CPU)和主内存之间的一层存储器,用来加快计算机的数据访问速度。其原理是通过提前将CPU需要访问的数据和指令缓存在高速缓存中,以满足CPU持续快速访问数据的需求。 高速缓存存储器采用了多级存储结构,通常包括L1、L2和L3三级缓存。L1缓存是与CPU核心直接相连的缓存,速度最快,容量较小;L2缓存是位于L1缓存和主内存之间的缓存,速度相对较慢但容量较大;L3缓存是当前多核处理器中常见的共享缓存,用于多个核心之间的数据共享。 高速缓存采用了缓存替换策略和缓存写策略来管理缓存中的数据。常见的缓存替换策略有最近不经常使用(LRU)、先进先出(FIFO)等,用来确定替换哪些数据;而缓存写策略主要有写回(Write Back)和写直达(Write Through),用来决定何时将数据写回主内存。其中,写回策略可以减少对主内存的写入次数,提高效率。 高速缓存的主要技术指标包括缓存容量、缓存关联度和缓存块大小。缓存容量表示缓存可以存储的数据量,一般以字节或字来衡量;缓存关联度表示CPU访问缓存时,需要比较的地址数量,常见的关联度有直接映射、全相联和组相联三种;缓存块大小则是指一次从主存中读取的连续数据的大小。这些指标的选择需要在缓存成本和命中率之间进行权衡。 ### 回答2: 程序局部性是指在程序执行过程中,程序具有空间局部性和时间局部性的特点。空间局部性指程序在一段时间内往往只访问某一部分数据,而时间局部性指程序在某一时刻访问的数据,很可能在未来的几个时刻仍然需要被访问。 程序局部性的原理是基于程序的运行特点。在程序执行过程中,通常会存在循环结构和函数调用等,导致代码的局部执行次数较高。而在循环结构中,往往会反复访问相同的内存位置,这样就形成了空间局部性。同时,程序的执行也会遵循顺序性,即执行的指令往往是紧邻着的,这就形成了时间局部性。 高速缓冲存储器cache)是位于CPU和主存之间的一级缓存,其主要目的是加快CPU对数据的访问速度。cache的原理是通过存储最常用的数据,将其快速提供给CPU,从而减少了对主存的访问次数,提高了程序的执行效率。 cache的主要技术指标包括容量、速度和命中率。容量是指cache能够存储的数据量大小,容量越大可以存储更多的数据,但相应的访问速度可能降低。速度是指从cache中获取数据的时间,速度越快,就可以更快地满足CPU的需求。命中率是指CPU请求的数据在cache中的比例,命中率越高,表示cache中存储的数据满足CPU需求的概率越高。 为了提高cache的效率,可以采用多级缓存、使用更快的存储介质、采用更高效的替换算法等。同时,还可以根据程序的局部性原理,设计合理的访问策略,例如预取技术和写策略等,来进一步提高cache的性能。 ### 回答3: 程序局部性是指在程序的执行过程中,存在着指令局部性和数据局部性。指令局部性是指程序在一段时间内,执行的指令往往是同一部分代码附近的指令。数据局部性是指程序在一段时间内,使用的数据往往是同一部分内存附近的数据。 程序局部性的原理主要是基于计算机的存储结构和程序的执行特点。首先,由于计算机的主存和CPU的速度差异很大,为了提高程序的执行效率,计算机将一部分经常被访问的指令和数据存放在高速缓冲存储器cache)中。其次,程序的执行往往有顺序性和循环性,即程序的指令和数据往往存在较好的局部性。因此,通过合理的缓存算法和数据替换策略,将程序中高频访问的指令和数据放入高速缓存中,可以大大减少主存和CPU之间的数据传输次数,从而提高程序的执行效率。 高速缓存存储器(cache)是位于CPU与主存之间的一级缓存,其主要目的是缓解CPU对主存的访问速度和处理器运算速度之间的矛盾。高速缓存存储器的原理是基于程序局部性原理。当CPU需要访问指令或数据时,首先在高速缓存中进行查找,如果找到则命中,直接从高速缓存中读取;如果没有找到,则访问主存并将所需要的指令或数据加载到高速缓存中,并将原有的数据替换掉。 高速缓存存储器的主要技术指标包括容量、关联度和替换策略。容量指的是高速缓存能够存放的指令和数据的数量,容量越大,命中率越高;关联度指的是高速缓存中存放指令和数据的方式,可以采用直接映射、组相联或全相联等方式;替换策略则是指当高速缓存已满时,该如何选择被替换的指令或数据,常见的替换策略有先进先出(FIFO)、最近最少使用(LRU)等。这些技术指标的选择要根据计算机的架构和应用需求进行权衡和调整,以达到最佳的性能和效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值