Page PG_referenced vs PG_active 位?
Page PG_referenced vs PG_active bit?
我正在阅读有关页面和内存分配的内容并发现:
PG_referenced
和 PG_active
但我不清楚有什么区别?
我知道 PG_active 在访问页面时设置并每隔一段时间清除一次。但这与 PG_referenced
有何不同,一个为 1 而另一个为 0 或两者共享相同的值?
这特定于 Linux 实施。页面跳转的页面缓存有两个 LRU 列表:活动和非活动。 PG_active
位告诉您页面当前是否在活动列表中。从mm/swap.c
看this 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.
保留一定数量的空闲页面。
我正在阅读有关页面和内存分配的内容并发现:
PG_referenced
和 PG_active
但我不清楚有什么区别?
我知道 PG_active 在访问页面时设置并每隔一段时间清除一次。但这与 PG_referenced
有何不同,一个为 1 而另一个为 0 或两者共享相同的值?
这特定于 Linux 实施。页面跳转的页面缓存有两个 LRU 列表:活动和非活动。 PG_active
位告诉您页面当前是否在活动列表中。从mm/swap.c
看this 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.
保留一定数量的空闲页面。