结合
linux内存管理之用户态内存管理
http://blog.csdn.net/shipinsky/article/details/78221511 一起学习
| vma0 | | vma1 | | vma2 |
start0 end0 start1 end1 start2 end2
addr在这里则返回NULL
addr在这里的话返回vma1,addr越过end1就返回vma2了
addr在这里的话也返回vma1,如果小于end0则返回vma0了
对于find_vma来说,
它查找线性区vm_end大于addr的第一个线性区的位置;
并返回这个线性区描述符的地址;
如果没有这样的线性区存在,则返回NULL。
注意该函数选择的线性区不一定包含addr,因为addr可能位于任何线性区之外。
struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr)
对于find_vma_prev来说,跟前者的差别在于pprev指向ppstruct
vm_area_struct *
find_vma_prev(struct mm_struct *mm, unsigned long addr,
struct vm_area_struct **pprev)
参考文章:
linux proc maps文件分析
http://blog.csdn.net/lijzheng/article/details/23618365