【发布时间】:2011-03-10 16:50:07
【问题描述】:
我有一个关于页面替换算法的问题。 FIFO 受到Belady's Anomaly 的影响,但 LRU 没有。有谁知道为什么 LRU 不受影响?我一直在网上寻找原因,但没有运气。
【问题讨论】:
-
这是一个纯技术问题,属于 StackOverflow(请不要在此处转发 - 如果有足够多的人投票关闭它,它将自动迁移)。
我有一个关于页面替换算法的问题。 FIFO 受到Belady's Anomaly 的影响,但 LRU 没有。有谁知道为什么 LRU 不受影响?我一直在网上寻找原因,但没有运气。
【问题讨论】:
因为 LRU 是一种堆叠算法,使用 k 帧将始终是 LRU 的 k + n 帧的子集。因此,k + n 帧可能发生的任何页面错误也会发生 k 帧,这反过来意味着 LRU 不会遭受 Belady 异常。
【讨论】:
因为 FIFO 假设页面已占用内存很长时间这一事实是最安全的替换,而实际上情况并非如此。相反,FIFO失败的地方是统计上,如果一个页面被频繁调用,它比最近被调用的另一个页面更有可能被再次调用。换句话说,频率是比年龄更好的页面加载决定因素。
【讨论】:
与 Caspar 的回答类似,但我发现我的教科书(稍作编辑)中的解释更清楚一些。
[LRU 属于] 属于一类页面替换算法,称为堆栈算法,[其中] 永远不会出现 Belady 的异常。
堆栈算法是一种算法,它可以证明内存中 N 帧的页面集始终是内存中 N + 1 帧的页面集的子集。 [因此,额外的框架永远不会导致额外的页面错误。]
对于 LRU 替换,内存中的页面集将是 N 个最近引用的页面。如果增加帧数,这 N 个页面仍将是最近引用的,因此仍会在内存中。
Silberschatz, A.、Galvin, P. B. 和 Gagne, G.(2014 年)。操作系统概念(第 9 版)。新加坡:威利。
【讨论】: