在什么情况下,MFU(最常用)页面替换算法的性能优于LRU(最不常用)?在什么情况下它比LRU更差?
我在哪里可以找到超出MFU页面替换算法基本定义的信息?
如果您有很少的经常引用的项目和大量的不经常引用的项目,则MFU效果很好。例如,典型的桌面用户可能有三四个他每天多次使用的程序,以及他极少使用的数百个程序。如果您想通过将程序缓存在内存中来改善他的体验,以使它们快速启动,您最好缓存那些他非常频繁使用的东西。
另一方面,如果您有大量随机引用的项,或某些项比其他项稍微更频繁地访问,或者通常以批处理方式引用项目(例如,项目A在短时间内多次访问,然后完全不再访问),则LRU缓存驱逐方案可能更好。
最近最少使用(LRU)页面置换算法
在此算法中,需要替换最长时间未使用的页面。
LRU页面置换算法的优点:
最常用(MFU)页面置换算法
实际上,MFU算法认为最经常使用的页面不会立即需要,因此将替换MFU页面。
例如:考虑以下参考字符串:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
缓冲区大小:3 字符串:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 2 0 4 2 2 0 0 2 2 2 0 0 7 7 7
0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
我一直在苦苦寻找MFU的用例,因为它经常被与MRU混淆。MFU最常引用的用例是:
最常使用(MFU)页面替换算法基于这样一个论点:计数最小的页面可能刚刚被带入并且尚未被使用。
但很明显他们谈论的是MRU - 最近使用的缓存。
我所能找到的是一篇论文,其中描述了同时使用MFU和LFU的情况,即将最常使用的参考移动到主缓存以实现更快的访问,并将最不常使用的参考移动到次要缓存。这是我所能找到的MFU的唯一用例。