当前位置: 技术问答>linux和unix
vm_area_struct初始化赋值问题?
来源: 互联网 发布时间:2016-05-19
本文导语: 当可执行映象映射到进程的虚拟地址空间时,将产生一组 vm_area_struct 结构来描述虚拟内存区间的起始点和终止点,每个 vm_area_struct 结构代表可执行映象的一部分,可能是可执行代码,也可能是初始化的变量或未初...
当可执行映象映射到进程的虚拟地址空间时,将产生一组 vm_area_struct 结构来描述虚拟内存区间的起始点和终止点,每个 vm_area_struct 结构代表可执行映象的一部分,可能是可执行代码,也可能是初始化的变量或未初始化的数据
我想请教大家的是,假如我的可执行映象中有一个代码段(地址范围为0X00001000h 到 0X00002000h),有一个vm_area_struct 结构映射这个代码段,那么这个vm_area_struct的vm_start和vm_end的值是不是就会分别赋值为0X00001000h 和 0X00002000h? 另外如果是这样赋值的,那么这个赋值是什么时候进行的,我在有的书上看到vm_area_struct好像开始是拷贝父进程的值,也不知道vm_area_struc以后会在什么时候改?
希望大家能够指点一下,小弟不胜感激!!!
我想请教大家的是,假如我的可执行映象中有一个代码段(地址范围为0X00001000h 到 0X00002000h),有一个vm_area_struct 结构映射这个代码段,那么这个vm_area_struct的vm_start和vm_end的值是不是就会分别赋值为0X00001000h 和 0X00002000h? 另外如果是这样赋值的,那么这个赋值是什么时候进行的,我在有的书上看到vm_area_struct好像开始是拷贝父进程的值,也不知道vm_area_struc以后会在什么时候改?
希望大家能够指点一下,小弟不胜感激!!!
|
进程的虚拟内存区间
代码段 --数据段--bss段--动态分配区间--堆栈段--0xc0000000内核区
在每个进程的mm_struct结构中,
unsigned long start_code, end_code, start_data, end_data;
这些成分指明了代码段和数据段的起始地址。
你可以通过mmap,mmap_avl,mmap_cache这几个变量把进程的vm_area_struct的start、end值都打印出来。
在我的印象中,堆栈段肯定站一个vm_area_struct,在malloc动态分配内存时,会新产生vm_area_struct,
vm_area_struct在加载代码时初始化,在之后动态分配时,有合并也有删除。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。