Hello,<div><br></div><div>I&#39;m trying to understand the page replacement policy in the latest Linux kernel and reimplement a similar one in the user space.</div><div>As far as I can understand from ULK and the code, there are two lists: active list and inactive list.</div>


<div>Here I only consider the case of the *page cache*:</div><div>When a page is added to the page cache (by add_to_page_cache_lru), it is also added to the inactive list and its reference bit is set (by mark_page_accessed).</div>
<div>When a page is accessed again, it is added to the active list and the reference bit is cleared (by mark_page_accessed).</div>

<div>When a page is accessed and it&#39;s in the active list, the reference bit is set if it&#39;s not set (by mark_page_accessed).</div><div><br></div><div>When the system is out of free pages, it starts to shrink the cache.</div>
<div>When a page is in the active list, if the page hasn&#39;t been referenced for a period of time (page_referenced() returns 0, and for the pages in the page cache, it&#39;s always 0), it will be moved to the inactive list (in shrink_active_list);</div>

<div>When a page is in the inactive list, if the page hasn&#39;t been referenced (it&#39;s always true for pages in the page cache), reclaim the page (in shrink_inactive_list);</div><div>When the system is out of free pages, it always starts to reclaim pages in the inactive list first, unless the number of pages in the active list is larger than that in the inactive list.</div>
<div><br></div><div>Please correct me if any part is wrong for the page cache.</div><div><br></div><div>Thanks,</div><div>Da</div>