内核中经常出现一个page 被多个虚拟进程使用,例如fork是子进程会继承父进程的页面,同样在开始时拥有相同的页面,此时一个page会对应多个进程VMA:
在共享内存场景中,一个物理内存也会被多个进程同时使用。针对上述场景,如果是一个文件被多个进程使用,实际上只对应一个物理页,此时page为page cache,page结构中可以通过page中的struct address_space *mapping结构进行管理。
而针对匿名页由于没有对应具体文件,但是又经常需要用到根据page查找到对应的所有正在使用的进程vma,该查找过程被称为反向映射(RMAP).
匿名页反向映射管理数据结构
匿名页反向映射用于记录page与VMA 1:N关系;其结构如下:
- struct anon_vma 结构为基于全局相当于page cache中的address_space结构,用于记录page 对应多少个进程的VMA,通过anon_vma_chain这个桥梁记录对应多少个进程。
- struct page