概念
进程运行过程中,如果发生缺页中断,而此时内存中有没有空闲的物理块,为了能够把所缺的页面装入内存,系统必须从内存中选择一页换出。
算法:
●先进先出(FIFO)算法:
思想:最近刚访问的,将来访问的可能性比较大。
实现:使用一个队列,新加入的页面放入队尾,每次淘汰队首的页面,即最先进入的数据,最先被淘汰。
弊端:无法体现页面冷热信息
●最不经常访问淘汰算法( LFU (Least frequently used) )
思想:如果过去访问多次,那么将来访问的频率也更高
实现:每个数据块有一个引用计数,数据块按引用计数排序,每次淘汰队尾数据块
开销:排序开销
●最近最少使用LRU (Least Recently Used)
思想:置换最近一段时间以来最长时间未访问过的页面,如果数据最近被访问过,那么将来被访问的几率也更高
实现:使用一个栈,新页面或者命中的页面移动到栈底,每次替换栈顶的缓存页面
优点:LRU算法对热点数据命中率很高
缺点:缓存污染,偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。
●最久未使用k次淘汰算法(LRU-K)
思想:LRU-K 中的 K 代表最近使用的次数,LRU-1即LRU
实现:相比 LRU,LRU-K 需要多维护一个队列,用于记录所有缓存数据被访问的历史。只有当数据的访问次数达到 K 次的时候,才将数据放入缓存。当需要淘汰数据时,LRU-K 会淘汰第 K 次访问时间距当前时间最大的数据。
解决:LRU-K 的主要目的是为了 解决 LRU 算法“缓存污染”的问题。