为了知道缓存对应内存的哪个地址,还需要存储内存地址。我们可以将地址分为如下形式:
因为块内地址是连续的,每个缓存块只需存储块的首地址就行了。
这种方式的优点是能更充分的利用缓存,缺点是存储地址位数较多,电路复杂,且查询缓存时需要遍历缓存。
同样的,直接映射可以将地址分为如下形式:
这种方法是内存地址映射到缓存的位置是固定的,所以不能充分利用缓存。
这是全相连映射和直接映射折中的办法:
1.随机算法(RAND):随机地确定替换的Cache块。它的实现比较简单,但没有依据程序访问的局部性原理,故可能命中率较低。
2.先进先出算法(FIFO):选择最早调入的行进行替换。它比较容易实现,但也没有依据程序访问的局部性原理,可能会把、心是要只常使用的程序染(如循环程序)也作为最早进入Cache的块替换掉。
3.近期最少使用算法(LRU):依据程序访问的局部性原理选择近期内长久未访问过的存储行作为替换的行,平均命中率要比FIFO要高,是堆栈类算法。
LRU算法对每行设置一个计数器,Cache每命中一次,命中行计数器清0,而其他各行计数器均加1,需要替换时比较各特定行的计数值,将计数值最大的行换出。
4.最不经常使用算法(LFU):将一段时间内被访问次数最少的存储行换出。每行也设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的行计数器加1,需要替换时比较各特定行的计数值,将计数值最小的行换出。