前言
在学习虚拟内存的反向映射部分时,遇到了struct anon_vma
这个结构,在网上看了很多篇帖子,都说是per process的,但是自己阅读代码过程发现逻辑似乎并不是这样,一时就很奇怪,是帖子描述的有问题,还是我没有理解透彻?实践出真知,与其在代码上纠结半天,不如根据看代码运行结果,让我们进入内核这个黑箱子,来看看它究竟如何运作
工具准备
我使用的是bcc这个工具,使用起来非常简单,在centos下只要yum install bcc-tools -y
,再加上可以使用python,就可以使用bcc这个强大的工具了,关于bcc的语法,可以参阅
bpf程序
一个简单的小程序,我选择的是__anon_vma_prepare
这个函数,因为这个函数是page fault中选择分配新的anon_vma还是使用一个旧的主要逻辑。
验证
只要把一个进程内的vma->anon_vma的地址都打印出来,让我们看看它的表现
输入ls,内核会起一个新的进程,这时就可以观测这个进程的vma
结果如下:
看着有点奇怪,新起的ls进程确实打印出了很多个不同的anon_vma地址,但守