什么是反向映射?
我们知道每个用户进程都有一套自己的独立的用户地址空间,在32位的系统上那就是3G大小,剩下的1G属于内核空间。用户地址空间会与物理地址空间建立一个映射关系。这个关系的信息就存放在PTE表项空间中。所以,每个用户进程都有一套自己的用户PTE表项。而在建立映射关系的这个过程中有可能多个用户映射到一块物理内存存在。有的页面需要被迁徙,有的长期不使用的页面需要被交换到磁盘。在交换之前需要找出哪儿些进程使用了这个页面,然后断开这些映射的PTE,这个寻找并断开映射关系的过程就是反向映射。
1.RMAP相关数据结构
![c4b027433b3f360645b5e123b53fc266.png](https://i-blog.csdnimg.cn/blog_migrate/6b8e9ebadddb1e6d845d48724ffa26e9.jpeg)
struct anon_vma
![d5ab4cf9849979e7257cfd1df47736d9.png](https://i-blog.csdnimg.cn/blog_migrate/1edaf7162409ba2b9876c83bc4ec4897.jpeg)
struct anon_vma_chain
![72195cd722551a4f26c15d97034bd920.png](https://i-blog.csdnimg.cn/blog_migrate/da183571cde53a16d6e2accbbaf6a49b.jpeg)
struct vm_area_struct
2.RMAP的使用场景
2.1.do_anonymous_page函数:分配匿名页
![b871fa9f56782484f378cd068fcad84e.png](https://i-blog.csdnimg.cn/blog_migrate/9fc439ca285ec93520dc6f1f5904ea47.jpeg)
do_anonymous_page函数
- 2.1.1.anon_vma_prepare函数:为进程地址空间vma准备struct anon_vma及其相关管理链表
![63bf3cc9352a1a1f7dfaec87053e87e7.png](https://i-blog.csdnimg.cn/blog_migrate/b52c9349f2c2ce2748cde93caf1122c3.jpeg)
anon_vma_prepare函数-1
![a27d7649cf773f6627e36da03baf869a.png](https://i-blog.csdnimg.cn/blog_migrate/1dd7f8408e433f481e9bfdb96e9ebe53.jpeg)
anon_vma_prepare函数-2
- 2.1.2.anon_vma_chain_link函数:把avc加入vma的anon_vma_chain链表以及把avc加入anon_vma的rb_root红黑树
![0ec48fd655ce5e1f178346bb2b91a53b.png](https://i-blog.csdnimg.cn/blog_migrate/6efc816cf5bbe4ffbeb050a221ae21d7.jpeg)
anon_vma_chain_link函数
- 2.1.3.page_add_new_anon_rmap函数:建立匿名页和物理页间的映射关系并加入RMAP系统
![c2d1694c70bc69c424594b5e68abe08e.png](https://i-blog.csdnimg.cn/blog_migrate/7af1891571be235b81b26a2a5db103f0.jpeg)
page_add_new_anon_rmap函数
- 2.1.4.__page_set_anon_rmap函数:设置这个页面为匿名映射
![9f19cc8cda1d62fc3355d4cdc010e0cc.png](https://i-blog.csdnimg.cn/blog_migrate/c47d214d12166a8b2a2097d303c77939.jpeg)
__page_set_anon_rmap函数
- 2.1.5.linear_page_index函数:计算当前address处于VMA的第几个页面
![ca62b5ceaeed3e212908240ca291bdb7.png](https://i-blog.csdnimg.cn/blog_migrate/2833bad25a43b8e6f0cae79dbfe530dc.jpeg)
linear_page_index函数
综上分析av、vma、avc之间的关系如下:
![0a10bf01fd1ae845bbfa16e95275bea1.png](https://i-blog.csdnimg.cn/blog_migrate/9dd0d10630d5c596e5ef684cf0e70d9a.jpeg)
av、vma、avc、page对应关系