cache替换算法

文章介绍了全相联映射的缓存替换策略,包括随机算法(RAND)、先进先出(FIFO)和近期最少使用(LRU)算法。LRU利用局部性原理,效果较好,而FIFO和RAND未充分考虑局部性,可能导致效率较低。此外,还提及了最近不经常使用(LFU)算法,但其实际效果可能不佳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:只有全相联映射和组相联映射需要考虑cache替换算法

文章目录


前言

cache与主存的映射方式主要有三种:全相联映射、直接映射和组相联映射。

全相联映射是主存中一个块直接拷贝到cache中任意一行,直接映射的主存块在chche中位置=主存块号%cache总块数,组相联映射的所属分组=主存块号%分组数

从主存向cache中传一个新块,当cache满的时候,就需要使用替换算法替换cache行,因直接映射算法的规则是主存块号%cache总块数,替换的话位置也是固定的,因此直接映射不用考虑替换算法,而全相联映射和组相联映射在替换时因位置不固定,需考虑替换算法。


一、替换算法

题目:设总有4个cache块,初始整个cache为空,采用全相联方式,依次访问主存块{1,2,3,4,1,2,5,1,2,3,4,5}

1、随机算法(RAND)

      若cache已满,则随机选择一块替换

 红色代表cache未满可直接把主存块调入空闲cache块中

 绿色代表该主存块在cache块中命中,直接访问该cache块

 橙色代表主存块在cache块中未命中,此算法需随机选一块替换

未考虑局部性原理,刚调入的cache块可能很快被替换,效果很差

2、先进先出(FIFO)

     优先替换最先被调入cache的主存块

红色代表cache未满可直接把主存块调入空闲cache块中

 绿色代表该主存块在cache块中命中,直接访问该cache块

 橙色代表主存块在cache块中未命中,此算法需选最先被调入cache块的替换

依然未考虑局部性原理,并且可能出现抖动现象,例如上例中后几个要访问的主存号对应的替换在cache块中刚替换掉就又被访问到

3、近期最少使用(LRU)

       为每一个Cache块设置一个计数器,用于记录每个Cache块已经有多久未访问,当Cache满后替换计数器最大的

 

红色代表cache未满可直接把主存块调入空闲cache块中

 绿色代表该主存块在cache块中命中,直接访问该cache块

 橙色代表主存块在cache块中未命中,此算法需替换计数器最大的块

该算法一个技巧就是从这个主存块往前看,比如图中箭头的位置,前面有5,1,2,证明这三个刚被访问过,就选剩下那一个就可以了

该算法比较好的利用了局部性原理(近期被访问的主存块可能在不久的将来还会被访问到),因此淘汰最久未被访问的块非常合理,该算法的实际运行效率较高,Cache命中率高
但是如果频繁被访问的主存块数 > Cache的块数,则可能还会发生抖动现象

 

4、最近不经常使用(LFU)

将访问次数最少的主存块替换,每个cache行设置一个计数器,用于记录被访问过多少次,当cache满后替换计数器最小的

 

红色代表cache未满可直接把主存块调入空闲cache块中

 绿色代表该主存块在cache块中命中,直接访问该cache块

 橙色代表主存块在cache块中未命中,此算法替换计数器最小的

曾经被经常访问的主存块在未来不一定会用到,实际运行效果不好

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值