当遇到cache miss发生时,缓存管理需要选择一个block替换需要存储的数据
当直接映射时非常简单,因为直接映射只有一个block,正好对应,选择block替换即可
当是多路组相联和全相联时,由于有许多block可以被挑选替换,就需要进行选择,主要有三种方法:
- 随机:随机挑选一个block进行替换
- 最近最少使用(LRU):为了减少信息最近需要被使用的几率,使用的block被记录,根据每个block的记录来预测未来的情况。挑选最长时间未被使用的block,LRU来源于时间局部性和空间局部性。最近被使用的块是很有可能再一次被使用的,那么最近使用最少的块是一个很好的处理候选者
- 先进先出(FIFO):因为LRU的计算比较复杂,这种选择最旧的块而不是 LRU 来近似 LRU
随机置换算法很容易在硬件中实现。而随着blocks数的逐渐增大,LRU的成本变得越来越大,因为它需要保存每个block最近被使用的记录,而随着blocks数的增大,这个记录也会增大,而且LRU经常只近似(and is usually only approximated)
通常的近似算法每个cache set中都有一组位,这组位的每位都跟这个set中的cache line对应,比如四路组相联中这组位的长度就是4bit,每一bit都跟一个cache line对应,当set被访问时,与被使用的block对应的位被打开(应该是调为1),当所有位被打开时,除了最近被使用的位其他的都重置,如果block需要被替换,处理器会挑选一个位被关闭的block进行替换,如果有多个block的位都是关闭的,那么会随机挑选一个
这种近似于LRU的置换算法相较于原来的LRU算法,其记录位不会随着block的数量增多而变大,因为记录的位数只跟几路组相联有关,原本的LRU没有使用set这个特性,使用block作为单位,虽然更细化,但是计算成本也比较高