直接映射方式
特点:每个分区的数据块只能映射到cache的对应行;
优点:算法简单,可以通过数据块地址寻址到cache中对应的行;硬件电路开销小
缺点:cache不满的情况下,也可能出现冲突
全相联映射方式
特点:主存中的数据块可以映射到cache的任意行
优点:cache已满的情况下才有可能出现冲突,需要进行cache的主存数据块替换;
缺点:硬件电路实现较为复杂
常用的替换算法:LRU、FIFO先进先出、随机替换、LFR算法
组相联映射方式
特点:是全连接和直接映射方式的一种折中方式,分区中的数据块可以可以映射到相应组内的任意行;cache未满时就有可能出现冲突,需要进行cache中主存数据块的替换;
常用的替换算法:LRU、FIFO先进先出、随机替换、LFR算法
先进先出FIFO算法
基本思想:将主存数据块载入cache的先后顺序,作为替换顺序,在需要进行替换时,选择最先载入主存数据块的cache行进行替换。
实现方式:记录每个cache行载入主存数据块的时刻(或称时间戳)
算法特点:实现比较方便(开销小),但未考虑程序的访问局部性,因为最先进入cache的主存数据块也可能是目前经常要用的,因此,可能导致cache的命中率不高;
如果再有数据写入的时候,最先被替换的就是t1时刻写入行1被替换;
LFU算法(最不经常用算法)
基本思想:将被命中访问次数最少的cache行淘汰
实现方式:需要为每个cache行设置一个淘汰计算器,新载入的cache从0开始计数,每命中访问1次,被访问的cache行的淘汰计数器加1.需要进行替换时,计数值最小的cache行被替换。
如果有多个行的淘汰计算器的值相同,可采用随机替换的方式;
算法特点:硬件成本较高,每行需要一个淘汰计算器,淘汰计算器从cache上电后就开始记录,但不能严格反映出近期的访问情况。(不同时间段,代码访问的频次可能不一样)。
LRU算法(近期最少用算法)
基本思路:将近期内最少被命中访问过的cache行淘汰;
实现方式:与LFU算法类似,也需要为每个cache行设置一个淘汰计算器。不同点是cache行每被访问1次,该cache行的计算器被清零,其他计算值不为空的cache行各自的计算器被加1.需要进行替换时,计数值最大的cache行被替换。
随机替换
基本思路:从cache行中任选一行进行替换;