为什么Least Recently Used与页面文件相比优于FIFO?
答案 0 :(得分:10)
如果你的意思是将内存页面卸载到磁盘 - 如果你的进程经常访问一个页面,你真的不希望它被分页到磁盘,即使它是你访问的第一个。另一方面,如果您几天没有访问内存页面,那么您不太可能在不久的将来这样做。
如果这不是您的意思,请编辑您的问题以提供更多详细信息。
答案 1 :(得分:3)
没有单一的缓存算法总能很好地完成,因为这需要对未来有完美的了解。 (如果你知道从哪里得到它......)LRU在VM缓存设计中的主导地位是测量系统行为的悠久历史的结果。鉴于实际工作负载,LRU在非常大的时间内工作得非常好。但是,构建一个FIFO优先于LRU的参考字符串并不是很难。
考虑通过比可用的可分页实内存大得多的大地址空间进行线性扫描。 LRU基于这样的假设:“你最近触摸的内容可能会再次触摸”,但线性扫描完全违反了这一假设。这就是为什么有些操作系统允许程序向内核提供有关其引用行为的建议 - 一个例子是经典LISP解释器所代表的“标记和扫描”垃圾收集。 (并且是更现代的GC工作的主要推动力,如“世代”。)
另一个例子是某个古董宏处理器(STAGE2)中的符号表。从根中搜索每个符号的二叉树,并且在堆栈上进行字符串评估。事实证明,通过“连接”符号树的根页面来减少可用的页面帧,并且堆栈的底部页面在页面错误率方面取得了巨大的进步。缓存很小,并且它剧烈搅拌,总是推出两个最常被引用的页面,因为缓存小于这些页面的参考间距离。所以小缓存效果更好,但只是因为从缓存中窃取的那两个页面帧被明智地使用了。
所有这一切的网络是LRU是标准答案,因为它通常非常适用于没有可怕的过载的系统上的实际工作负载(VM是可用实际内存的很多倍),并且经过多年的仔细测量得到了支持。然而, 你当然可以找到替代行为优越的案例。这就是测量真实系统很重要的原因。
答案 2 :(得分:2)
Treat the RAM as a cache。为了成为有效的缓存,它需要保留最有可能在内存中请求的项目。
LRU保留最近在内存中使用的内容。 FIFO保留最近添加的内容。一般来说,LRU效率更高,因为通常会添加一次并且从不再使用的内存项,并且有些项经常被添加和使用。 LRU更有可能将常用项目保留在内存中。
答案 3 :(得分:1)
根据temporal locality of reference,最近访问过的内存很可能很快再次访问。
答案 4 :(得分:1)
根据访问模式,FIFO有时会超过LRU。 Adaptive Replacement Cache是混合型,可根据实际使用模式调整其策略。