内存管理vma_内存管理(30)RMAP反向映射3

内存管理(29)RMAP反向映射2说到了父子进程他们之间的纽带建立。那这样的纽带是如何被应用的呢?

在内核中主要应用在:

1.kswap内核线程回收页面时需要断开所有映射了该匿名页面的用户PTE页表项;

2.页面迁移时,需要断开所有映射到匿名页面的用户PTE页表项。

1.预备知识点

从内存管理(28)RMAP反向映射1中匿名页缺页中断,当缺页中断发生时系统会创建一个avc和av,并将page->mapping指向av,avc的av成员指针指向刚刚创建的av,avc的vma成员指向(父/子)进程地址空间vma,最后avc被分别添加到av的红黑树,(父/子进程)vma下的链表进行管理。关系如下图所示。最终的效果就是通过avc可以找到与page建立映射关系的所有进程的vma。

36eb6f101e8dc7bbfeabbf48c0d84fdd.png

avc、vma、av关系

2.应用

try_to_unmap()函数:断开page对应的所有vma

ea29d2668b289526b09bc4b7606079a5.png

try_to_unmap()函数

c75ef1916bbb92ef75e6b4eaf0d7a755.png

rmap_walk函数

50cf8821af1bb14a83ae2bb7dddf19b0.png

rmap_walk_anon函数

  • 258~270行:这部分是断开page上所有VMA反向映射的关键。遍历anon_vma下的avc树,找到其下所有的avc对应的vma,调用rmap_one()函数依次断开并清除对应的PTE表项,最后看下是否断开成功条件,成功就跳出循环返回结果。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值