码迷,mamicode.com
首页 > 系统相关 > 详细

Linux进程虚拟地址空间

时间:2016-12-26 00:02:37      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:虚拟   内容   进制   局部变量   空间   png   ifd   ons   令行   

在linux中,各个进程的虚拟地址空间是独立的。各个进程的虚拟地址空间起始于0,延伸至TASK_SIZE -1.

在32 bit系统中,内核分配1GB,而各个用户空间进程可用的部分为3GB。

进程虚拟地址空间由若干个区域组成,

1.当前运行代码的二进制代码.text段。

2.程序使用的动态库代码。

3.存储区局变量和静态变量的数据段,bss,data段

4.保存动态分配数据的堆

5.保存局部变量和实现函数 调用的栈

6.环境变量和命令行参数。

7.文件内容映射到虚拟地址空间的内存映射。

具体布局如下图所示,

技术分享

如果全局变量randomize_va_space设置为1,那么启用地址空间随机化机制(上图的ramdom xxx offset)。用户可以通过/proc/sys/kernel/randomize_va_space停用该特性。

每个进程都有mm_struct(linux/mm_types.h)的实例,保存进程虚拟内存管理信息。

struct mm_struct {
struct vm_area_struct *mmap; /* list of VMAs */
struct rb_root mm_rb;
#ifdef CONFIG_MMU
unsigned long (*get_unmapped_area) (struct file *filp,unsigned long addr, unsigned long len,unsigned long pgoff, unsigned long flags);
#endif
unsigned long mmap_base; /* base of mmap area */
unsigned long mmap_legacy_base; /* base of mmap area in bottom-up allocations */
unsigned long task_size; /* size of task vm space */

struct list_head mmlist; /* List of maybe swapped mm‘s. These are globally strung

unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack;
unsigned long arg_start, arg_end, env_start, env_end;

....

};

技术分享

 

 

 

Linux进程虚拟地址空间

标签:虚拟   内容   进制   局部变量   空间   png   ifd   ons   令行   

原文地址:http://www.cnblogs.com/fellow1988/p/6220710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!