一、Cache - 主存的映射方式

全相联映射:主存块可以放在 Cache 的任意位置。
直接映射:每个主存块只能放到一个特定的位置:
Cache块号 = 主存块号 % Cache总块数
组相联映射:Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置: 组号 = 主存块号 % 分组数
华体会体育在线:(一)、全相联映射(随意放)

CPU 访问主存地址 1…1101001110:
①主存地址的前22位,对比Cache中所有块的标记;
②若标记匹配且有效位=1,则Cache命中,访问块内地址为 001110 的单元。
③若未命中或有效位 = 0,则正常访问主存。
华体会体育在线:(二)、直接映射(只能放固定位置)
直接映射,主存块在Cache中的位置 = 主存块号 % Cache总块数。

若 Cache总块数 = 2 n 2^n2n 则主存块号末尾n位直接反映它在Cache 中的位置。将主存块号的其余位作为标记即可。

此时主存地址为:

CPU 访问主存地址 0…01000 001110 :
①根据主存块号的后 3位确定Cache行 。
②若主存块号的前 19 位与Cache标记匹配且有效位=1,则Cache命中,访问块内地址为 001110 的单元。
③若未命中或有效位=0,则正常访问主存。
华体会体育在线:(三)、组相联映射(可放到特定分组)
n 路组相联映射 —— n块为一组
eg:2路组相联映射——2块为一组
组相联映射,所属分组 = 主存块号 %分组数

CPU 访问主存地址1…1101001110 :
①根据主存块号的后 2位确定所属分组号。
②若主存块号的前20位与分组内的某个标记匹配且有位=1, 则Cache命中,访问块内地址为 001110的单元。
③若未命中或有效位=0,则正常访问主存。
华体会体育在线:(四)Cache - 主存的映射方式总结

二、Cache 替换算法
前面介绍了 Cache 与主存的映射,说明了 Cache块映射到主存块的位置。但是未说明当 Cache 内存满了时应该选择哪个 Cache 进行替换,这当中涉及到 Cache 替换算法。
华体会体育在线:(一)、随机算法(RAND)
随机算法(RAND, Random)——若Cache已满,则随机选择一块替换。
随机算法——实现简单,但完全没考虑局部性原理,命中率低,实际效果很不稳定。
华体会体育在线:(二)、先进先出算法(FIFO)
先进先出算法(FIFO, First In First Out)—— 若Cache已满,则替换最先被调入Cache 的块。
先进先出算法 —— 实现简单,最开始按#0#1#2#3放入Cache,之后轮流替换 #0#1#2#3 。FIFO依然没考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的。

华体会体育在线:(三)、近期最少使用算法(LRU)
近期最少使用算法(LRU, Least Recently Used )—— 为每一个Cache块设置一个“计数器
”,用于记录每个 Cache 块已经有多久没被访问了。当 Cache 满后替换“计数器”最大的。
①命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变;
②未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1;
③未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1。

华体会体育在线:(四)、最不经常使用算法(LFU)
最不经常使用算法(LFU, Least Frequently Used )—— 为每一个Cache块设置一个“计数器”,用于记录每个Cache块被访问过几次。当Cache满后替换“计数器”最小的。
新调入的块计数器=0,之后每被访问一次计数器+1。需要替换时,选择计数器最小的一行。

华体会体育在线:(五)、Cache 替换算法的总结
