4.1 最佳淘汰算法(OPT)
工作机制:如果被替换掉的页是以后再也不会使用的,那么这种算法无疑是
最优秀的。因为不管什么算法,替换掉的页也有可能再次被缓存,替换掉其它的
页。
优点:为一种度量,替换的次数理论会最少,可以很高效地实现页面替换,
这种算法无疑是优秀的算法。虽然这种理想的算法无法被实现,但是可以作为优
先选择项。
缺点:最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的
过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问
序列。因此,最佳置换算法是无法实现的。会面对一个无法实现的问题,我们还
是不知道哪些页面会在未来多长一段时间内不会被再次访问。
4.2 最近最久未使用算法(LRU)
工作机制:如果一个数据在最近一段时间没有被访问到,那么可以认为在将
来它被访问的可能性也很小。因此,当空间满时,最久没有访问的数据最先被置
换(淘汰)。
优点:方便淘汰最近未使用的页面。性能较好,但需要寄存器和栈的硬件支
I
3
持。
LRU
是堆栈类算法,理论上,堆栈类算法不可能出现
Belady
异常。
缺点:实现困难,开销大。对于偶发的批量操作,比如说批量查询历史数据,
就有可能使缓存中热门数据被这些历史数据替换,造成缓存污染,导致缓存命中
率下降,减慢了正常数据查询。
4.3 先进先出算法(FIFO)
工作机制:这和我们现实生活中的排队方式很相似,先进队伍的人会先买到
票,然后先从队伍中离开。如果使用
FIFO
算法作为页面置换算法,缓存空间大
小是三个页面时,一次进入要进入缓存时, 操作系统将会把
Page1
清除出缓存,
将
Page4
加入至缓存中。如果再有
Page5
要进入缓存时,操作系统会将
Page2
清
除出缓存空间,以此类推。
优点:先进先出法符合逻辑,避免了过程中的浪费与损失。容易理解,剩余
的存货更接近于存货成本。对硬件要求较低
缺点:若源源不断地有高优先级进程到来,则可能导致低优先级的饥饿,但
动态的
weight
能有效地规避此类问题。先进先出页面置换算法没有考虑到缓存
页面被使用的情况。如果一个页面被频繁访问,我们应该将它保留在缓存中,这
样就能够提高程序的性能。但是使用
FIFO
算法, 很可能将一个被频繁访问的页
面清除出缓存,在大数情况下,先进先出页面置换算法缺页率比较低或会产生
Belady
异常现象。
4.4 时钟置换算法(CLOCK)
工作机制:时钟置换算法可以认为是一种最近未使用算法,即逐出的页面都
是最近没有使用的那个。我们给每一个页面设置一个标记位
u
,
u=1
表示最近有
使用
u=0
则表示该页面最近没有被使用,应该被淘汰。每一次进行替换指针的位
置就从替换数移到下一个位置
,
每一次进行访问时,则指针保持不动。
优点:性能和开销较均衡,较
OPT
算法有更高效更节省的优点
缺点:没能把替换的因素考虑进去,只考虑了访问带来的权重的影响。
4.5 改进时钟置换算法(CLOCK)
工作机制:改进时钟置换算法是在时钟算法上加入了替换的权值。除了访问位,再添加一个修改位,具体的置换规则(0,0)
:最近没有使用使用也没有修改, 最佳状态;(0,1)
:修改过但最近没有使用,第二考虑的状态;
(1,0)
:使用过但没 有被修改,该页面可能再次被访问;(1,1)
:使用过也修改过,该页面可能再次被 访问。以此为优先权排序进行淘汰的判断。
优点:性能和开销更为均衡,较时钟置换算法考虑更加全面,同时有更高效
的优点。
缺点:构成复杂冗长,算法的时间复杂度依旧高。
4.6 相关计算
缺页率
=
缺页次数
/
工作总次数;