【问题标题】:Why LRU doesn't suffer Belady's Anomaly?为什么 LRU 不会遭受 Belady 异常?
【发布时间】:2011-03-10 16:50:07
【问题描述】:

我有一个关于页面替换算法的问题。 FIFO 受到Belady's Anomaly 的影响,但 LRU 没有。有谁知道为什么 LRU 不受影响?我一直在网上寻找原因,但没有运气。

【问题讨论】:

  • 这是一个纯技术问题,属于 StackOverflow(请不要在此处转发 - 如果有足够多的人投票关闭它,它将自动迁移)。

标签: operating-system theory


【解决方案1】:

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

【讨论】:

  • 我的理解是,在LRU中,堆栈中的元素是按最近使用的排序的,这意味着(k+n)大小的堆栈中的前k个元素与k个元素相同在 k 大小的堆栈中。
  • @RafaelJ 在我看来就像你在说 Caspar 所说的一样,也许更清楚一点。我认为这是一个很好的解释。
  • @DonHatch,是的,我是。我一开始没看懂,所以我把我的版本留在这里。也许它可以帮助某人?
【解决方案2】:

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

【讨论】:

  • 你没有回答问题。
【解决方案3】:

与 Caspar 的回答类似,但我发现我的教科书(稍作编辑)中的解释更清楚一些。

[LRU 属于] 属于一类页面替换算法,称为堆栈算法,[其中] 永远不会出现 Belady 的异常。

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

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

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

【讨论】:

    猜你喜欢
    • 2017-09-07
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多