Page PG_referenced vs PG_active 位?

Page PG_referenced vs PG_active bit?

我正在阅读有关页面和内存分配的内容并发现:

PG_referencedPG_active 但我不清楚有什么区别? 我知道 PG_active 在访问页面时设置并每隔一段时间清除一次。但这与 PG_referenced 有何不同,一个为 1 而另一个为 0 或两者共享相同的值?

这特定于 Linux 实施。页面跳转的页面缓存有两个 LRU 列表:活动和非活动。 PG_active 位告诉您页面当前是否在活动列表中。从mm/swap.cthis function

/*
 * Mark a page as having seen activity.
 *
 * inactive,unreferenced    ->  inactive,referenced
 * inactive,referenced      ->  active,unreferenced
 * active,unreferenced      ->  active,referenced
 *

void mark_page_accessed(struct page *page)

这个函数注释解释的很好。任何需要标记为已访问的页面都会从左侧的状态之一(例如“非活动,未引用”)过渡到右侧的状态(例如“非活动,引用”)。当一个非活动但引用的页面再次被访问时,它应该跳转到活动列表,设置其活动位,但清除其引用位。

活动和引用的页面最安全,不会被踢出内存,而不活动的未引用页面最先被踢出。页面替换算法会根据需要将页面从活动列表移至非活动列表,以保持每个列表上的页面一定比例,并为 OS.

保留一定数量的空闲页面。