目录
- 一. 随机算法(RAND)
- 二. 先进先出算法(FIFO)
- 三. 近期最少使用算法(LRU)
- 四. 最不经常使用算法(LFU)
要解决的问题:
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
链接: 王道考研计算机组成原理