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

进程虚拟内存

时间:2015-07-12 21:34:52      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

进程虚拟内存

     1 进程地址空间

         进程虚拟内存地址空间起始于0,终止于TASK_SIZE-1,其上是内核空间,总的地址空间按3:1划分,用户进程不能访问内核空间,如果没有某种协议,一个用户进程也不能访问其他进程的空间。

1.1 进程地址空间的布局

a 当前运行代码的text段

b 程序使用的动态库的代码

c 存储全局变量和动态产生数据的堆

d 保存局部变量和函数/过程调用的栈

e 环境变量和命令行参数

f 文件内容映射到虚拟内存空间的内存映射

每个进程都有一个mm_struct,这个结构保存了进程的内存管理信息。

技术分享 

经典布局

MMAP地址通常在虚拟空间的1/3处

 技术分享

新布局

如果栈的大小设置为不受限制,则选择使用经典布局,否则使用新布局

1.2 内存映射

 技术分享

在mm_struct中,进程虚拟空间信息由多个区域表示,每个区域由vm_area_struct描述,使用红黑树的方式,在添加区域时可以快速找到该区域之前的区域,而无需扫描整个链表

 技术分享

void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);int munmap(void* start,size_t length);

mmap函数会在虚拟地址空间start处,建立一块length长度的,访问权限为prot定义

进程虚拟内存

标签:

原文地址:http://www.cnblogs.com/zhangfann/p/4641537.html

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