我正在阅读有关页面和内存分配的内容,发现:
PG_referenced
and PG_active
但我不清楚有什么区别?
我知道 PG_active 在访问页面时设置并每隔一段时间清除一次。但这有什么不同PG_referenced
,怎么可能一个为 1,另一个为 0 或者两者具有相同的值?
这是特定于 Linux 实现的。页面跳转的页面缓存有两个 LRU 列表:活动的和非活动的。这PG_active
位告诉您该页面当前是否在活动列表中。看着这个功能 https://elixir.bootlin.com/linux/v4.0/source/mm/swap.c#L597 from mm/swap.c
:
/*
* 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)
这个函数注释很好地解释了这一点。任何需要标记为已访问的页面都会从左侧的状态之一(例如“非活动、未引用”)转换到右侧的状态(例如“非活动、引用”)。当再次访问不活动但被引用的页面时,它应该跳转到活动列表,设置其活动位,但清除其引用位。
活动且被引用的页面最不会被踢出内存,而非活动的未引用页面最先被踢出。页面替换算法会根据需要将页面从活动列表移至非活动列表,以在每个列表上保持一定比例的页面,并保持一定数量的可用页面可供操作系统使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)