Cache替换算法

要解决的问题:
Cache很小,主存很大。如果cache满了怎么办?

在这里插入图片描述
\quad

在这里插入图片描述
也要关注各种算法的英文缩写

\quad

一. 随机算法(RAND)

\quad
在这里插入图片描述

随机算法―一实现简单,但完全没考虑局部性原理,命中率低,实际效果很不稳定

\quad

二. 先进先出算法(FIFO)

\quad
在这里插入图片描述
先进先出算法—实现简单,最开始按#0#1#2#3放入Cache,之后轮流替换#0#1#2#3, FIFO依然没考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的

抖动现象: 频繁的换入换出现象(刚被替换的块很快又被调入)

\quad

三. 近期最少使用算法(LRU)

\quad
近期最少使用算法(LRU, Least Recently Used )-—为每一个Cache块设置一个“计数器”,用于记录每个cache块已经有多久没被访问了。当Cache满后替换“计数器”最大的

\quad

手算方式

在这里插入图片描述

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

机算方式

在这里插入图片描述
未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1;
一定要注意理解: 每个Cache块已经有多久没被访问了
计数器记录的是没被访问的次数

\quad
在这里插入图片描述

①命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变;
\quad
\quad

在这里插入图片描述
③未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1

LRU算法―-基于“局部性原理”,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,cache命中率高。

若被频繁访问的主存块数量>cache行的数量,则有可能发生“抖动”,如:{1,2,3,4,5,1,2,3,4,5,1,2.}

\quad

在这里插入图片描述
因为要替换的是最大的, 所以没必要把3+1, 一般有4个主存块最大也就记到3
Cache块的总数=2n,则计数器只需nbit位。且Cache装满后所有计数器的值一定不重复

\quad

四. 最不经常使用算法(LFU)

\quad
在这里插入图片描述
若有多个计数器最小的行,可按行号递增、或FIFO策略进行选择

在这里插入图片描述
这种算法可能会导致计数器需要很多位数来表示, 多次命中就会一直增加

LFU算法―一曾经被经常访问的主存块在未来不一定会用到(如:微信视频聊天相关的块),
并没有很好地遵循局部性原理,因此实际运行效果不如LRU

这个算法看起来很科学, 其实如果这段时间经常被访问, 累加计数很大, 但是未来一段时间不用了
但是这时计数器的值已经很大了, 短时间内不会被替换掉, 就会影响运行效果

\quad
\quad
在这里插入图片描述
\quad
\quad
链接: 王道考研计算机组成原理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值