【问题标题】:Page faults and LRU Algorithm页面错误和 LRU 算法
【发布时间】:2012-08-25 08:00:26
【问题描述】:

一个主存储器最多可以保留 4 页。如果在按顺序排列的后续页面上使用 LRU 算法,哪个页面将是第一个发生缺页的页面?

1,2,3,1,2,4,1,2,3

这是一个我认为没有答案的测试问题。主内存可以保留 4 个页面,并且由于有 1、2、3、4 页,因此不应该发生页面错误。

答案是第 4 页,但我不明白为什么。

【问题讨论】:

  • 第一次不会出现页面错误吗?因为第一次必须有页面错误,才能引入页面。还是不算过错?否则不会出现页面错误。
  • @Vinayak Garg 我的想法完全正确,但答案是第 4 页。这对我来说毫无意义。
  • 要么答案错了,要么问题错了;)
  • 或者我们对问题和/或答案的理解可能是错误的。我给出的答案可以解释它,但它是一个很长的弓,我会把这个问题描述为一个疯狂的疯子:-)

标签: algorithm lru page-fault


【解决方案1】:

似乎唯一有意义的方法是,如果该序列中的数字是内存中的页码,而不是从磁盘检索的页面。

换句话说,它们是为加载页面而选择的页码。这(至少默认)由“如果在以下页面上使用 LRU 算法是有序的”这一短语支持。

使用 LRU 算法来选择要丢弃并重新使用的页面,因此,如果选择的是第 1 页,那么这将导致页面被换出以进行替换。

所以这个意义上的第四页是:

1,2,3,1
      ^
      |
      +-- this one.

而且,由于第一个内存页面已经在使用中,因此会发生页面错误以将新页面引入它。

我想不出任何其他情况甚至可以接近匹配该答案。

【讨论】:

    【解决方案2】:

    第一个'1'将是第一个页面错误,因为框架在开始时是空的,当第一次调用'1'时,它将显示页面错误,因为框架是空的。 页面错误总数为 4。

    【讨论】:

      【解决方案3】:

      (即使发布,我只是添加一些其他答案中未描述的见解) LRU 是 Unix 通过维护所有页面的链表来实现的。此列表将有最近使用的页面在前面,而最近最少使用的页面在后面(尾部) 由于每个内存引用都会重新组织列表,因此最后 4 页的顺序是我们感兴趣的 4,1,2,3。

      在给定的页面序列中,4 是最近最少使用的页面,而 3 是最近使用的页面。所以第 4 页将在列表的后面。任何导致其中一页被清除的事件都将分页第 4 帧,因为它位于列表的后面

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 2013-12-06
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        相关资源
        最近更新 更多