3.6.4 Cache中主存块的替换算法

 

 

 

 

 

 

 

hhhhh~加油哦

一个是cash的替换算法,在现在小结中我们留下了这样的三个问题,上一个小节我们解决了第1个问题,而第2个问题就是说,啊,我们的看是很小的储存是很大的,但是我没有说过每一次被访问的主存款一定会被立即掉入开始当中,那这就意味着cash很容易被装满,那么当cash装满之后我们应该怎么办呢?这就是替换算法要解决的问题,我们结合上一小节学习的这些地址映射方式来进行考虑,首先看第1种全相联映射,这种映射方式意味着每一个储存块有可能会被放到cash的任何一个位置,所以如果采用这种映射方式,那么就意味着只有整个touch全部被装满之后,我们才需要在呃整个cash当中选择一个开始,快把它进行计划再来看直接映射模式,对于任何一个组成块,我们只能把它放到一个指定的特定的位置原来。放到一个指定的特定的位置,那么这个意味着如果这个位置原来已经有数据了,那么我们直接把原来的这份数据给替换掉,淘汰掉就可以了,所以如果采用直接应收方式,那其实我们不需要考虑替换算法到底要替换哪一块,这样的一个问题我们毫无选择,只能放到固定的这个位置好再来看第3种走向类零售,那么呃,每一个主存款会被放到指定分组当中的任何一个位置,所以如果采用这种方式就意味着只有这个内存块,它所属的cash分组整个组都被装满之后,我们才需要选择到底要替换哪一块,然后所以替换算法就会被用到全乡的颜色还有组相连映射,这两种方式直接映射的时候,不需要考虑一句话算法那这些题的讲解中,我们会以全乡的演艺社为例,那我们会学习4种情况算法,第1种是随机算法,这种先进先出,第三我们近期最少使用,第4种叫最近不经常使用策勋。就是说如果开始忙的话,那我们随机选择一块进行计划,非常Free好来看这样一个例子假设啊,有一个系统当中它的cash back总共有4个。大家看第1种随便算法啊,固定C,也就是说如果开始满了的话,那我们随机选择一块进行计算,非常对好,来看这样一个例子假设啊,有一个系统当中它的差10块,总共有4个初始的时候,所有的开始快都是空的,然后采用全相应的应收方式,接下来我们访问的组成块啊编号分别是这样的一个区别,也就是说先访问1号组成换再访问2号3号4号,然后再访问1号馆,好好 this is.都是公的,然后接下来我们访问的组成块啊编号分别是这样的一个序列,也就是说先访问1号文本,再访问2号3号4号,然后再访问。开始搞完1234这几个守城的时候,我们都需要把这些种情况把它依次调入到他是当中那1号组成话,我们把它放到0号开始,这意味着2号主存块,我们把它放到以后开始这个位置好,接下来3号和4号主存块也是类似把它放到开始的相应位置那刚开始访问的这几个储存块我们都是没有命中的,没访问一个储存块,就是要把这一块的数据从储存标注到差时,那由于前面的这4次访问啊看一直都没被装满,所以我们不需要进行开始计算出来,好继续往后接下,我们要发布的结果1号咨询快,那么由于此时。呃看是一直都没被抓嘛,所以我们不需要进行开始替换算法好继续往后接下,我们要访问的是1号储存块,那么由于此时1号轴承块已经存放在茶室当中,所以这一次的访问是可以名称的,接下来2号也是一样也可以命中在接下来5号那源于此时,4个tx块当中存放的储存块分别是1234号,那么5号储存块此时没有被标注开始,而我们之前说过没访问到一个主题。接下来5号那由于此时4个开始块当中存放的主存块分别是1234号,那么5号组成块此时没有被调动开始,而我们之前说过,没访问到一个组成块,就一定需要把这个组织块立即调入开始好,所以此时我们就需要根据这个case块的替换算法来决定要替换哪块呐,根据随机算法的规则,我们可以随便选择一个块进行替换,比如说我们把3号很快给换出去,然后换入5号组织块没有任何规矩,我们就是随便选择一个位置,好,接下来1号和2号的访问都可以命中,再接下来访问到3号块,那此时3号主存款没有放到开始当中,所以同样的我们随机选择一个块进行计划,那我们把4号组成块把它换出去,然后把3号组成块换到它原先存放的这个位置,也就是3号开始行这个地方好,接下来又需要访问4号组成块,那么我们随机挑了一个,把1号主的话给换出去,把4号换进来,接下来访问5号组成块那5号此时是在开始当中的,所以可以直接命中不闻。或者是坏那么随机挑一个,把1号车损坏给换出去,把4号换进来,接下来访问5号组成块那5号此时是在开始当中的,所以可以直接命中不需要发生替换好,所以这就是随机算法毫无规律啊,我们并没有考虑到什么程序的局部性之类的啊这些因素,所以这种算法它实际的运行效果会很不稳定,cash的立柱率可能会很低,接下来是第2个先进先出算法,那不明思议,就是我们会优先把最先被调入开始的快给他替换出去,还是用刚才那个例子那刚开始访问1234这几个组存快的时候,由于这个看是初十是空荡,所以我们就需要把这些种子快分别吊入到菜时的相应位置就可以好,接下来访问1和2娜,这两个显然是可以明确地在接下来访问5号主存块,那么5号主存块,此时并没有在开示当中根据先进先出的微博此时我们放在这些存款最先被调入的应该是。暗示当中那根据先进先出的规则,此时我们放在cash里的这些储存块,最先被调入的应该是1号储存块对吧?所以我们会优先淘汰一号组成块,然后把5号组成块放到开始零这个位置,好,接下来我们又要访问1号那1号刚才被我们淘汰了,所以现在又需要把1号调入开始,那此时我们放在cash里的这几个块当中,最先被调入的应该是2号开始快了,所以我们会淘汰2号,穿21号那淘汰2号之后紧接着又会访问2号,那类似的原理,在剩下的这几个主存块当中,最先被调入的应该是3号块,所以淘汰3号放入2号接下来黄河3号,那么应该淘汰4号掉入3号,再接下来访问扫帚怎么快,那么剩下的这些块当中最先被标注的应该是5号对吧,啊,所以淘汰五放入四接下来又访问5,那么此时剩余的这一块最先被调入的应该是1号的,所以换初一调入五。太武康路4阶下来又访问我,那么此时剩余的这一块最先被调入的应该是1号,所以换出一调入伍啊,那这就是先进先出算法很好理解,并且用硬件实现也很简单可以这么做,刚开始开始的所有行都是空的,那么我们可以按照行号递增的秩序,0123啊这样的秩序来依次放入最初始的几个内存块,然后接下来我们就只需要按照01230123这样的资质来替换各个块就可以了,因为按照刚才这种策略,我们最先放入的就是啊0这个位置,所以我们最先应该淘汰的也是您这个位置,那您这个位置被替换之后,接下来最先掉落的应该就是处于一这个位置的这一块对吧,所以接下来还需要替换的话,我们替换一那一替换之后再往后强调替换就是替换二就可以了,好所以先进先出算法,用硬件实现起来也会很简单,只需要轮流的替换,各个开始行就可以袁莉也会很低最先被。好所以先进先出算法,用硬件实现起来也会很简单,只需要轮流的计划都有开始行就可以但是显然先进先出,也没有考虑到局部性原理,因此cash的命中率也会很低,最先被调入阐释的快也有可能在之后会被频繁的访问到,这个应该不难理解,比如大家写的C语言程序,很有可能在刚开始的时候,这地方到了put in F这个函数那这个函数你是最开始就使用到的,那这并不意味着再往后这个函数你就用不到了,对吧,好所以我们把最先被调入cash的啊这个块给淘汰,这种处理策略是不科学的,因此先进先出这种计划算法,实际的运行效果也不太理想。另外刚才我们分析到后面呃这个部分的时候,大家会发现我们出现了这样的一个有意思的现象,就是在这个地方我们换出了一换入了51刚被换出,紧接着又访问了一,所以我们不得不换出2,然后再换入1而2刚被换出,接下来又访问到了2这种平凡。所以就出现了这种频繁的换入换出的现象,那这种现象被称为抖动现象,就是说刚被换出的快很快又被访问,所以紧接着又会被调入,那这些概念我们在操作系统里面其实也讲过好,接下来看第3个啊算法叫,近期最少使用英文缩写叫lru,嗯,这个算法思想是这样的,我们会为每一个开始快开始行设置一个计数器用于记录这个cash筷里面存放的储存块,已经多久没有被放过了,然后当我们需要替换的时候,我们会选择计数器,最大的一个菜式快把它替换出去计数器最大是不是就意味着这个款是最久没有被访问过的好,还是用刚才那个例子来体会一下啊,这首先跟大家介绍一个就是手算做题的方法,我们先不考虑机器是如何执行的,总共有4个开出来刚开始不是呃空的那第1个被访问的组成块括号是1,我们可以把它放到0这个位置十二号。那第1个被方的组成括号示意我们可以把它放到0这个位置,第2个是2,那我们我们可以把2号主存块放到1这个位置,然后三次也是类似的好那访问了前4个组成块之后啊,看市里的情况是这样子的,1234好接下来1和2他们已经在开始当中,所以可以命中再接下来要访问5,那么此时就必须把其中的某一个组成换给替换出去,那根据这个算法的规则我们要替换的是最久没有被访问过的一个储存块,对吧,那我们可以从5这个位置从这个位置开始往前看,2最近已经被访问过,一最近被访问过,4最近被访问过,所以此时态势里面这几个储存块最久没有被访问过的应该是3号块,所以在这个时候我们可以淘汰三其他的几个和二十八然后这地方没有。当然到这个地方又要访问到3号了,3号没有再开始合作,那和之前的处理方法类似,我们从这个位置往前看215是最近被访问过的,所以最久没有被访问过的应该是4号快,所以我们淘汰4号换入3号,然后其他的几个保持不变好,所以这就是我们做题的时候可以采取的一个方法,当需要替换一个开始快的时候,从当前访问的这个主存块号这个位置开始往前看看一下,哪些主存款是最近被访问过的,那从后往前看最后一个出现的啊,这个主子挂号啊就应该是需要替换的,这个东西就是好那后续的两个节目再展开,这是我们做题的时候可以采取的一个比较快的方法,呃,接下来我们再看一下用硬件站在机器的角度,它是如何实现近期最少使用算法的,那上小学时候我们说过每一个太长呃需要有个标记救世主这个所存储的增加一个这些信息如果要使用这种方法我们还必须。信息出来,如果要收。信息之外,如果要使用a2。性就是计数器,刚开始所有的菜市场都是通道计数器,也会被全部只为琳儿弹计数器的变化规则是这样的,首先看二这个地方如果说我们访问某一个主存块,好在开始里面没有命中,那此时如果还有空闲的cash长,我们就会把这个主存块装入到一个空闲的行里面,同时把这个菜场所对应的计数器置为0,然后其余的非空闲的太长计数器会全部加1号来看一下什么意思,刚开始我们访问的是1号主存块,此时没有命中并且还依然有空闲的开场,所以我们会把1号主存块放到阿卡什琳这个位置唧唧复唧唧。五嘉羿娜在这个时候其他这些开始上都是空前的,所以她们的计数器我们不需要管,不需要嘉羿好,接下来我们2号组成话,那么我们可以把他调入到差11定位置,并且把他的计数器设为0,同时把其他的非空闲看市场所对应的技术请嘉羿,所以此时看是0的计数器变为了一好注意理解这个技术系的逻辑,他想要反映的就是这个,看是块已经多久没有被访问了,好继续接下来是3号组成块,那么我们把它放到呃K12这个位置计数器设为0,同时其他的这些非空前开始行计数器加1在接下来访问4号也是类似的,其他的这些计数器都会嘉羿好继续,接下来要讨论的是1号储存快,那显然这个总存款此时已经在看是当中是可以命中的,那当我们命中之后我们会把索命中的这个技术技术七的执笔的其他。当我们命中之后,我们会把所命中的这个太长它的计数器清零同时计数器的值比他更低的,其他的那些计数器我们会把嘉羿极为不便,总之就是我们此时访问了恶灵号开始快,那么它的计数器应该从3变为0,然后计数器的值比3更晓得这些啊,这些开始行他的计数器的值都要加12辩31变2变1啊,所以这种方式可以保证我们最近访问过的这个呃储存快,他的计数器的值肯定是最小的,可以恢复成0,然后越久我们又被访问过了,开始行他的计数器的值会不断的嘉羿就会变得越来越大,好,我们继续接下来要访问的是2号的主办,那显然也是可以命中的,那么和之前的处理方式一样,我们会把当前访问的这个太长,把它计数器的值清零其他技术加以选择。讨论的这个特长,把它计数器的值清零,另外其他计数器的值都嘉羿好继续,接下来要访问的是5号储存罐,那此时开始没有民众,我们必须选择替换我们一个开始快,那照这个算法的规则,我们会替换掉计数器的值,最大的一个啊,开始画也就是2号,他的技术提示三,那这个开始画当中存放的是3号组成块,所以我们把3号主存块地换到5号主存话费,只有技术器的值清零,然后其余的计数器的值全部加一,好继续接下来要访问施迤,那么此时一是可以运作的,因此我们会把1号主存块所存放的这个开始行,他的技术七点清零,另外比这个计数器的值更小的那些计数器的值,我们需要嘉羿第二个小的一盒佳茵儿我们不需要思考然后。需要把阿比2更小的1和0,这两个计数器的是嘉羿而比2更大的3这个技术及的事,我们不需要嘉羿思考一下,我们把2变为了0,然后1和0分别加1,我们当然也可以把这个三同样地也进行一个嘉羿变成色,但是把3变为4其实毫无意义,但他的只保留原本的3也可以达到同样的效果,因为我们设置计数器的目的其实是想通过计数器的值的大小来判断我们应该替换哪一个主存块,我们想选择的是计数器的值,最大的一个开始,快会把他给替换掉,那三这个值本来就已经是最大的,所以我们在让三继续嘉羿其实是没有意义的,那这种处理策略的好处就是当我们只有4个catch行的时候,我们的4个计数器的值肯定是012三只有可能出现这几种情况,不可能出现4这种情况二号二号也可以我们会把二号。嗯,出现这几种情况不可能出现4,这种情况好所以注意体会这个细节,好,我们继续接下来访问2号组成吧,那么2号也可以民众我们会把2号块所对应的这个计数器把它变为0,同时把计数器更小的啊,这些值让它加1,然后计数器更大的这个三让它保持不变好继续,接下来要访问的是3,那么此时开始没有命中,并且已经没有空闲的太长了,所以我们会选择计数器的值最大的这个呃开始快进行淘汰,把4号主城快跑开出去,然后把3号主城快换进来,另外还需要修改计数器的值为0,然后其余的这些计数器都需要嘉羿好再往后缝合色,没有一种那么我们同样需要把计数器最大的这个给它替换掉,就变成这样子儿子的名字我们需要加水但是机器。把计数器最大的这个给他替换掉,其余的这些技术系都需要嘉羿,好,那这就是liu算啊,我们模拟机器的执行给我们手算要麻烦一些,但是机器对计数器进行这样的处理是有好处的,刚才我们说过采用这样的策略可以保证所有的这些计数器的值,只有可能出现01 23,那么这也就意味着当我们的差10块的总数只有2的N次方这么多块的时候,我们就只需要N个比各位来作为计数器就可以,比如这个例子当中我们只有4个开始块,那么我们就只需要量比特的信息来表示计数器,就可以两比,特刚好可以表示0123这几种数字好,所以这样的策略就保证了,当我们用硬件实现这个替换算法的时候,硬件电路的设计可以变得更简单,我们只需要增加两个比特的荣誉信息就可以考虑到了在不久的将来。就可以好那很显然啊,这个算法它其实是考虑到了局部性原理的,因为基于时间局部性可以知道我们近期访问过的组存块,在不久的将来也很有可能会被再次访问,所以这种算法的思想就是每一次和淘汰最久没有访问过的组成块,这种策略是合理的遵循了局部性原理,所以这个算法在实际当中运行效果会很优秀,Cass的命中率很高,好,那这是liu算法,那虽然这个算法很优秀,但是如果说我们频繁访问到的储存块的数量要比看市行的数量要更大,那么我们有可能会发生抖动现象,比如说我们按1234512345来这样的顺序来访问各个主城,快,那此时被我们频繁访问到的主存块,总共有5块儿,太长的数量只有45,大家可以自己模拟一下,如果是这样的访问序列,那即便是采用you算法,依然会发生抖动现象最近。对自己模拟下,如果是这样的访问序列,那即便是采用lm算法,一辆会发生振动现象,在这儿就不再展开,接下来我们看这个小学的最后这种算法最近不经常使用算法啊,叫lifu,这个F指的是频率frequently和liu算法类色,我们也需要给每一个开始快他常涉及的技术性,只不过他这样的技术既适用于记录,每一个看是快饿到目前为止被访问过了多少次,然后当我们需要替换某一个块的时候,我们会选择计数器,最小的也就是被访问次数最少的那个进行置换好还是用刚才的例子来看一下啊,刚开始我们需要把计数器都设为0,然后计数器的变化规则是这样的,当我们掉入一个新的快的时候,这个快所对应的计数器会值为0之后,这个快美被访问一次计数器的值就会加1啊,所以刚开始我们访问12 34,只需要把这几个储存快分别的掉入到他时的相应位置唧唧复唧。武嘉羿啊,所以刚开始我们访问11234,只需要把这几个储存快分别的掉入到差使得相应位置,那也就是第1次被调入的时候,计数器的值都是置为0,所以这个计数器此事是4个0,接下来要访问一那么1号主存块命中,我们就可以让他记录记得是嘉羿在接下访问22号民中,那么与它所对应的这个太长记数器也会嘉羿,然后接下来房屋此时就需要替换一块,那么按照这个算法的规则我们会替换掉计数器最小的一行,不过现在大家会发现我们2和3这两行的计数器的值都是最小的都是0,那到底计划哪一块呢?通常来说可以有这样的两种处理策略,第1种策略就是按照行号开始行耗递增的次序来判断它们的优先级这个这个责任进行排序二十三那个应该是二号。里边存入的这个组成块应该是2号太长的这一块最先被调入的,所以按照先进先出的规则,我们会优先淘汰2号开始块里边转发的这个内容好,所以我们把3号组成块给淘汰掉,相应的位置换成5号,好,那再接下来1和2又再次会被访问,这两次访问都可以运用,所以我们需要把1和2所对应的这两个计数器都加1好,再往后放5~3此时又需要运行此替换算法,那同样的第2行和第3行他们的计数器都是最小的啊,我们可以选择按照行号递增的次序来给他们进行一个优先级的排序,我们会选择淘汰行号更小的这个开始快,所以我们把5换出,然后3换入好,接下来4号可以听清楚,那么与4号相对应的这个开始行,它的技术及加音最后要访问5号,那这个时候计数器最小的看,市行只有一个,所以毫无疑问我们需要淘汰的是3这个组成块换成5号。艺术漆最小的菜市场只有一个,所以头一问我们需要淘汰的13这个组织快换一个号,好,那这就是F算了,既然采用这种想法的话,那这个计数器的值有可能是0~1个很大的树,所以如果要用硬件实现,那么每个探查所对应的计数器就需要用比较长的几个二进制比分位来表示,而另一个方面lifu这种方法看起来好像很科学,这个计数器相当于我们对每个tx块呃对访问的次数进行了一个总体的统计,对吧?看起来好像很科学,就是总体来看啊,被访问次数越多的我们就越有可能把它留住,但事实上考虑到时间局部性原理,我们不难想到就是曾经经常会被访问的主存块,在未来其实不一定会被用到微信视频聊天的时候那和视频聊天相关的那些快的数据显然在一段时间内那么这些技术在你使用视频聊天的这段时间内。昨天相关的那些呃快的数据显然在一段时间内经常会被访问,那么这就意味着与这些块相对应的计数器,在你使用视频聊天的这段时间内会一直增加加加加加到一个很大很大的值,好那之后你不再需要视频聊天了,但是由于这些块的计数器已经变得很大了,所以接下来这些块在cash当中的数据副本很有可能在长时间内不会被淘汰,因此这种算法实际运行效果其实也不好,他并没有遵循局部性原理,所谓局部性就是我们其实只是要考虑到最近的一小个局部,而不需要像这算法这样子有可能会记录下整个全局的一个啊访问的频率好,所以这个算法看起来科学,但实际上它的产生用率可能也不高好的,那么这个小学当中我们学习了4种驾驶计划算法,因为开始的存储容量很小,而主存的存储容量很大之后。噢,就是cash的命中率到哪些数据这样的一个问题,那随机算法核心你先出很好理解,稍微复杂一点的是近期最少使用这个算法,但是这个算法的实际运行效果就是chess的命中率,在这几个算法当中又是最优秀的,所以我们考试最经常考察的也还是这个算法,不过我们手工做题的时候啊,大多数情况下我们也不需要写出计数器的值怎么变化,大家可以用我们刚才提到的更快的那种方法来快速的做进,只不过大家也需要理解这种算法计数器,它的一个工作原理好的那以上就是这些小节的全部内容。 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值