内存管理vma_内存管理(28)RMAP反向映射1

什么是反向映射?

我们知道每个用户进程都有一套自己的独立的用户地址空间,在32位的系统上那就是3G大小,剩下的1G属于内核空间。用户地址空间会与物理地址空间建立一个映射关系。这个关系的信息就存放在PTE表项空间中。所以,每个用户进程都有一套自己的用户PTE表项。而在建立映射关系的这个过程中有可能多个用户映射到一块物理内存存在。有的页面需要被迁徙,有的长期不使用的页面需要被交换到磁盘。在交换之前需要找出哪儿些进程使用了这个页面,然后断开这些映射的PTE,这个寻找并断开映射关系的过程就是反向映射。

1.RMAP相关数据结构

c4b027433b3f360645b5e123b53fc266.png

struct anon_vma

d5ab4cf9849979e7257cfd1df47736d9.png

struct anon_vma_chain

72195cd722551a4f26c15d97034bd920.png

struct vm_area_struct

2.RMAP的使用场景

2.1.do_anonymous_page函数:分配匿名页

b871fa9f56782484f378cd068fcad84e.png

do_anonymous_page函数

  • 2.1.1.anon_vma_prepare函数:为进程地址空间vma准备struct anon_vma及其相关管理链表
63bf3cc9352a1a1f7dfaec87053e87e7.png

anon_vma_prepare函数-1

a27d7649cf773f6627e36da03baf869a.png

anon_vma_prepare函数-2

  • 2.1.2.anon_vma_chain_link函数:把avc加入vma的anon_vma_chain链表以及把avc加入anon_vma的rb_root红黑树
0ec48fd655ce5e1f178346bb2b91a53b.png

anon_vma_chain_link函数

  • 2.1.3.page_add_new_anon_rmap函数:建立匿名页和物理页间的映射关系并加入RMAP系统
c2d1694c70bc69c424594b5e68abe08e.png

page_add_new_anon_rmap函数

  • 2.1.4.__page_set_anon_rmap函数:设置这个页面为匿名映射
9f19cc8cda1d62fc3355d4cdc010e0cc.png

__page_set_anon_rmap函数

  • 2.1.5.linear_page_index函数:计算当前address处于VMA的第几个页面
ca62b5ceaeed3e212908240ca291bdb7.png

linear_page_index函数

综上分析av、vma、avc之间的关系如下:

0a10bf01fd1ae845bbfa16e95275bea1.png

av、vma、avc、page对应关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值