当前位置: 技术问答>linux和unix
insert_vm_struct 函数问题请教
来源: 互联网 发布时间:2016-05-03
本文导语: /* Insert vm structure into process list sorted by address * and into the inode's i_mmap ring. If vm_file is non-NULL * then the i_shared_lock must be held here. */ void __insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma) { struct vm_...
/* Insert vm structure into process list sorted by address
* and into the inode's i_mmap ring. If vm_file is non-NULL
* then the i_shared_lock must be held here.
*/
void __insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
{
struct vm_area_struct * __vma, * prev;
rb_node_t ** rb_link, * rb_parent;
__vma = find_vma_prepare(mm, vma->vm_start, &prev, &rb_link, &rb_parent);
if (__vma && __vma->vm_start vm_end)
BUG();
__vma_link(mm, vma, prev, rb_link, rb_parent);
mm->map_count++;
validate_mm(mm);
}
find_vma_prepare(mm, vma->vm_start, &prev, &rb_link, &rb_parent);为什么要这样判断?这种情况可能出现吗?
find_vma_prepare这个函数的作用是什么?
|
楼上说得没错,只是少说了一点。
有几个点:
*) 关于每个进程所有的地址空间用到的vm_area_struct是通过链表和红黑树两种数据结构来做遍历的。
*) find_vma_prepare是找需要插入的红黑树的位置,以及要插入链表的位置,
__vm_link就是实际来干插入这个事的。
*) if (__vma && __vma->vm_start vm_end) 这个判断是看看要插入的vma跟已有的有没有重叠的
里面有个点:find_vma_prepare和find_vma本质是一样的:它的返回值就两种结果:
(!vma || addr vm_end),即要么NULL,要么vma->vm_start vm_end.
注意理解“Notice that the region selected by find_vma( ) does not necessarily include addr because addr may lie outside of any memory region.”
你可以参考 Understanding The Linux Kernel 3rd 的9.3. Memory Regions
配合代码看。
有几个点:
*) 关于每个进程所有的地址空间用到的vm_area_struct是通过链表和红黑树两种数据结构来做遍历的。
*) find_vma_prepare是找需要插入的红黑树的位置,以及要插入链表的位置,
__vm_link就是实际来干插入这个事的。
*) if (__vma && __vma->vm_start vm_end) 这个判断是看看要插入的vma跟已有的有没有重叠的
里面有个点:find_vma_prepare和find_vma本质是一样的:它的返回值就两种结果:
(!vma || addr vm_end),即要么NULL,要么vma->vm_start vm_end.
注意理解“Notice that the region selected by find_vma( ) does not necessarily include addr because addr may lie outside of any memory region.”
你可以参考 Understanding The Linux Kernel 3rd 的9.3. Memory Regions
配合代码看。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。