总结
操作系统页面置换算法有如下算法
- 最佳置换算法OPT(Optimal):操作系统缓冲管理器只有一个策略,就是将未来不使用或最少使用的块置换处内存就行,能达到这种要求的算法是最佳置换算法OPT(Optimal),这种算法无法实现,因为无法预测未来
- 先进先出算法FIFO(First Input First Output)
- 最近最久未使用LRU(Least Recently Used)置换算法:考虑时间
- Clock算法:是LRU的近似实现,使用一个循环队列,一个指针一直往下循环,指到一个附加位为0的则将其置换,遇到附加位为1则将其置为0。附加位为1表示最近访问过,一般访问操作会将附加位变为1
- 改进型Clock算法:使用两个附加位(访问位,修改位),最容易被置换出去的是没有被访问也没有被修改的页面即(0, 0),然后是没有被访问但被修改的页面即(0, 1),然后是被访问但没有被修改的页面即(1, 0),然后是被访问也被修改的页面即(1,1),因为被修改的页面需要写入磁盘,而没有被修改的页面可以直接替换,直接替换最省时间
- 最少使用LFU(Least frequently used)置换算法:考虑频次,维持一个计数器,每访问一次计时器加一,redis的实现是计数器值最高256,而且不是每访问一次就加一,而是按照概率加1,计数器值越大概率越低
- 老化算法:是LFU的改进版,由于一个页面可能使用很多次突然不用了,这时它的计数器值很大,难以将其移除,所以有老化算法,随着时间推移,计数器值会越来越小
- 最近未使用NRU(Not Recently Used)置换算法:只有使用过和未使用过的区别,和LRU非常类似
- 第二次机会算法:FIFO队列的第二次机会算法,在先进先出队列中的节点加上一个附加位,如果附加位为1但是到了队头,此时也不将其置换出去,而是再次放入队尾并将附加为置为0,如果附加为0则到了队头,则直接将其置换
- 工作集算法:工作集是指一个进程当前正在使用的页面的集合,所以使用该算法每次读取页面直接读取,整个工作集而不是以页面为单位读取,这样可以预防以后的缺页中断,但是会浪费一些空间,因为进程可能用过工作集的一些页面后不再使用它们
- 工作集时钟算法:将Clock算法里面替换的单位从页面变成工作集,一次替换多个页面