LFR/LRU是如何实现的?

How is LFR/LRU implemented?

LRU/LFU 等页面替换政策是如何实施的?硬件 MMU 是否跟踪引用计数(在 LFU 的情况下)? 是否可以作为内核的一部分实现?

通常,硬件为跟踪哪些页面被访问提供了最低限度的支持,然后 OS 内核使用它来实现某种伪 LRU 分页策略。

Fox 示例,在 x86 上,MMU 将在访问页面时设置 PTE(页面 table 条目)中的 'A' 位。因此内核不断循环遍历所有正在使用的内存,检查并清除该位。自上次扫描以来已访问任何已设置该位的页面,并且自上次扫描以来未访问过该位(仍然)清除的任何页面。这些页面是替换的候选者。详细信息从 OS 到 OS 不等,但通常会有某种队列结构在其中跟踪这些页面,并替换最旧的页面。