【问题标题】:Can we obtain LRU (least recently used) page replacement algorithm in O(1)?我们可以在 O(1) 中获得 LRU(最近最少使用)页面替换算法吗?
【发布时间】:2012-04-11 16:51:13
【问题描述】:

能否在O(1)(即常数时间)中获得LRU(最近最少使用)页面替换算法?

如果可能,请给出算法。

【问题讨论】:

  • 家庭作业?到目前为止,您尝试过什么?

标签: algorithm data-structures operating-system


【解决方案1】:

双向链表可以使用 O(1) 操作实现 LRU 队列。已使用的节点可以从其旧位置取消链接,并在恒定时间内重新链接到队列的头部。

请注意,如果您想将其用作页面替换方法,您仍然需要弄清楚如何使用 MMU 统计信息来有效地更新队列。

【讨论】:

  • 不错的答案,但只是想向提问者指出,由于时间限制,这种方法实际上并没有被任何操作系统使用。
  • 是的,您并不真正关心已使用的确切订单页面;你想要的是一个“最近不使用”的页面列表,你可以按需退出。实际上,您可以使用 MMU 的页面访问标志以批处理方式更新页面替换统计信息——但请注意,双链接 LRU 队列为此目的的实用数据结构...
  • 但是要找出使用过的节点,我们必须遍历喜欢的列表......这将花费 O(n) 时间......如果我错了,请纠正我......
  • 是的,您需要每页进行一次操作。但是此时您不再执行严格的 LRU:页面访问统计信息汇总了数百万次使用。此外,对于实际应用,您无需同时检查每一页——您可以以循环方式轮流浏览它们。
  • 哦,我误解了你的问题。不,您不需要遍历链表。您直接转到页表中的相应条目(这是一个在 O(1) 时间内可访问的随机访问表),从 LRU 队列中取消链接条目(对于双向链表,这需要 O(1) 时间),并将其重新链接到最近使用的一端(也在 O(1) 时间内)。
【解决方案2】:

在维基百科中有几个 LRU 页面算法的 references,包括与实现的链接。选项包括:

  • 链接列表
  • LRU-K
  • ARC
  • 硬件支持

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2013-12-06
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多