源码基于:Linux5.4
从其他一些博文中,总是说 PageAnon 表示匿名页,PageSwapBacked 也表示匿名页,但其实这两个函数还是有明显的概念区别的 。本文将结合代码,详细分析这两个函数的使用场景。
- include/linux/page-flags.h
-
- static __always_inline int PageAnon(struct page *page)
- {
- page = compound_head(page);
- return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0;
- }
通过该头文件中对 PAGE_MAPPING_ANON 的解释可以看到:
/*
* On an anonymous page mapped into a user virtual memory area,
* page->mapping points to its anon_vma, not to a struct address_space;
* with the PAGE_MAPPING_ANON bit set to distinguish it. See rmap.h.
*
PAGE_MAPPING_ANON是用来区分一个匿名页映射到用户层虚拟地址空间时,page->mapping 指向的是 anon_vma,还是 address_space