您的位置:首页 > 运维架构

关于缓存调度算法FIFO、LRU、OPT这三种置换算法的缺页次数

2013-09-25 21:40 435 查看
这三个置换算法,或者说缓存调度算法,其实来源于操作系统。操作系统的页置换算法。

FIFO:即 First In, First Out 先进先出算法。

LRU: Least recently used,最近最少使用算法。即是将最近最少使用的对象踢出内存。

OPT: Optimal,最优替换,也就是上帝模式。它是考虑当前内存中的对象,以及将来要放进内存的对象,然后,将在最远的将来才被访问的页面踢出内存。所以,这个算法在转换时,需要把将来即将放进内存的对象考虑进去,才能找到要踢出内存的对象。

看下面的详细例子,了解算法的具体策略。

考虑下述页面走向:

1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6

当内存块数量分别为3时,试问FIFO、LRU、OPT这三种置换算法的缺页次数各是多少?

答:缺页定义为所有内存块最初都是空的,所以第一次用到的页面都产生一次缺页。

当内存块数量为3时:



  发生缺页中断的次数为16。

  在FIFO算法中,先进入内存的页面被先换出。当页6要调入时,内存的状态为4、1、5,考查页6之前调入的页面,分别为5、1、2、4,可见4为最先进入内存的,本次应换出,然后把页6调入内存。



  发生缺页中断的次数为15。

  在LRU算法中,最近最少使用的页面被先换出。当页6要调入时,内存的状态为5、2、1,考查页6之前调入的页面,分别为5、1、2,可见2为最近一段时间内使用最少的,本次应换出,然后把页6调入内存。



  发生缺页中断的次数为11。
    在OPT算法中,在最远的将来才被访问的页面被先换出。当页6要调入时,内存的状态为1、2、5,考查页6后面要调入的页面,分别为2、1、2、…,可见5为最近一段时间内使用最少的,本次应换出,然后把页6调入内存。

via: http://yinzhezq.blog.163.com/blog/static/1648628902010112961039187/

另外:

还有算法:

LFU: Least Frequently Used,最不经常使用算法。它是根据在一段时间里页面被使用的次数选择出最少使用的页。注意它与LRU的区别。

另外,OPT算法通常是用来评价其他替换算法的好坏的标准。本身无法实现。

via: http://wenda.tianya.cn/question/7885ae7b7cc29697

一些参考资料:

在Java中, 基于LinkedHashMap实现LRU缓存调度算法原理及应用 。搜下,有一堆文章:

如:/article/5193964.html

基于LRU改进的算法也有很多:如:

/article/5794188.html

缓存的命中率

另一方面,当你自己去着手写一个缓存算法,或者去使用一个的时候,或者去评价比较的时候,

我们要关注的就是缓存的命中率问题。

如果你自己写一个的话,那么最好是模拟一些数据,测试一下大概的命中率能有多大,再与其他算法的命中率进行比较。

转载:http://chen.junchang.blog.163.com/blog/static/6344519201372724744551/?COLLCC=4294895973&
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: