为什么LRU不会遭受Belady的异常?

时间:2011-03-10 16:50:07

标签: operating-system theory

我对页面替换算法有疑问。 FIFO受Belady's Anomaly影响但LRU没有。{有谁知道为什么LRU不受影响?我一直在互联网上寻找原因,但没有运气。

3 个答案:

答案 0 :(得分:10)

因为LRU是一种堆叠算法,并且使用k帧将始终是LRU的k + n帧的子集。因此,k帧也可能发生k + n帧可能发生的任何页面错误,这反过来意味着LRU不会遭受Belady的异常。

答案 1 :(得分:5)

因为FIFO假定页面长时间占用内存这一事实是最安全的替换,实际上并非如此。相反,在FIFO失败的情况下,统计上,如果频繁调用页面,则比最近调用的另一个页面更可能再次调用。换句话说,频率是一个比年龄更好的页面加载决定因素。

答案 2 :(得分:4)

与Caspar的答案类似,但我发现我的教科书(稍加编辑)的解释更加明确。

  

[ LRU属于]到一类页面替换算法,称为堆栈算法,[ ]永远无法展示Belady的异常。

     

堆栈算法是一种算法,可以证明N帧中内存中的页面集合始终是N + 1帧内存中的页面集合的子集。 [因此,额外的帧永远不会导致额外的页面错误。]

     

对于LRU替换,内存中的页面集将是N个最近引用的页面。如果帧数增加,这N个页面仍将是最近引用的页面,因此仍将在内存中。

Silberschatz,A.,Galvin,P。B.,& Gagne,G。(2014)。操作系统概念(第9版)。新加坡:威利。