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定义
时间: 2024-10-20 05:46:21