linux那些事之反向映射RMAP

本文深入探讨了Linux内核中匿名页的反向映射(RMAP)机制,包括struct page、anon_vma、anon_vma_chain等关键数据结构及其相互关系。通过反向映射,内核可以快速找到使用同一物理页的多个进程的VMA,以及在内存回收中有效管理共享匿名页面。此外,文章还介绍了相关的操作函数,如anon_vma_prepare、page_add_new_anon_rmap等,并阐述了反向映射在内存管理和回收中的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内核中经常出现一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huo的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值