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


这三个置换算法,或者说缓存调度算法,其实来源于操作系统。操作系统的页置换算法。
FIFO:即 First In, First Out 先进先出算法。
LRU: Least recently used,最近最少使用算法。即是将最近最少使用的对象踢出内存。
OPT: Optimal,最优替换,也就是上帝模式。它是考虑当前内存中的对象,以及将来要放进内存的对象,然后,将在最远的将来才被访问的页面踢出内存。所以,这个算法在转换时,需要把将来即将放进内存的对象考虑进去,才能找到要踢出内存的对象。

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

考虑下述页面走向:

          12342156212376321236

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

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

       当内存块数量为3时:

   

 

  发生缺页中断的次数为16

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

      

 

  发生缺页中断的次数为15

  在LRU算法中,最近最少使用的页面被先换出。当页6要调入时,内存的状态为521,考查页6之前调入的页面,分别为512,可见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缓存调度算法原理及应用  。搜下,有一堆文章:
如: http://www.cnblogs.com/-OYK/archive/2012/12/04/2801799.html

基于LRU改进的算法也有很多:如:
http://www.cnblogs.com/cyjb/archive/2012/11/16/LruCache.html


缓存的命中率

另一方面,当你自己去着手写一个缓存算法,或者去使用一个的时候,或者去评价比较的时候,
我们要关注的就是缓存的命中率问题。

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


转载:http://chen.junchang.blog.163.com/blog/static/6344519201372724744551/?COLLCC=4294895973&

你可能感兴趣的:(算法,缓存)