这两种算法均常用于缓存替换策略,其目的是保证缓存的优化性能,保证缓存透明性。当缓存中的空间被填满后,缓存替换策略将选择缓存中某些单元从缓存中剔除,并将现在需要使用的单元填入缓存。缓存替换策略在执行过程中会导致一定的延迟,延迟公式如下:
\[T = m \times T_m + T_h + E\]
- \(T\) 表示平均延迟时间
- \(m\) 表示缺页率 (1 - 命中率)
- \(T_m\) 访问主存所需的时间
- \(T_h\) 访问缓存时所耗费的延迟时间
- \(E\) 其他次要影响
其中,关乎\(T\)的主要两个参数为\(T_h\) 和 \(m\),即在缓存中数据的查找时间以及缓存命中率。同样的,这两个参数也决定着缓存的优化性能。这两个参数的优劣取决于缓存替换策略。一个好的缓存替换策略,能够保证尽可能多的有用的数据存在于缓存,使得提升缓存的命中率。缓存中数据的查找时间,主要描述当发起一次数据读写请求后,需要多长时间缓存才能得以反馈信息,该参数取决于缓存的编址策略,如Cache直接映射、全相联映射和组相联映射。 不同的缓存替换策略这两个参数的取值也不同。
Least Recently Used(最近最少使用策略 LRU)
将最近最少使用的单元首先替换出缓存。该算法要求跟踪记录每个单元最近一次使用的时间,当缓存空间被占满,则从缓存的记录中选择最近最少使用的单元进行替换。为实现该算法,实现的技术通常是维护一个“生存时间”表,最近最少使用情况可通过该表得出。当有一个新的单元进驻缓存时,“生存时间”表中将标记当前时间(以递增整数代替时间)。一种示例如下:
进驻顺序依次为: A B C D E D F
可以看出,当A B C D进驻缓存时,由于缓存尚未填满,因此依次填入,并未有替换行为的发生。当E即将进驻缓存时,缓存空间已被占满,因此将最近最少使用的A替换出(由于A的“生存时间”为1,少于缓存中其他所有单元的“生存时间”)以此类推。