虚拟内存区域
虚拟内存区域是进程的虚拟地址空间中的一个同质区间,即具有同样特性的连续地址范围。
一个进程的内存映象由下面几部分组成:
程序代码、数据、BSS和栈区域,以及内存映射的区域。
一个进程的内存区域可以通过查看
/proc/pid/maps
08048000-0804f000 r-xp 00000000 08:01 573748 /sbin/rpc.statd #text
0804f000-08050000 rw-p 00007000 08:01 573748 /sbin/rpc.statd #data
08050000-08055000 rwxp 00000000 00:00 0 #bss
040000000-40015000 r-xp 00000000 08:01 933965 /lib/ld2.3.2.so #text
40015000-40016000 rw-p 00014000 08:01 933965 /lib/ld-2.3.2.so #data
每一行的域为:
start_end perm offset major:minor inode
v Start: 该区域起始虚拟地址
v End: 该区域结束虚拟地址
v Perm: 读、写和执行权限;表示对这个区域,允
许进程做什么。这个域的最后一个字符要么是p
表示私有的,要么是s表示共享的。
v Offset: 被映射部分在文件中的起始地址
v Major、minor:主次设备号
v Inode:索引结点
vm_area_struct结构
Linux内核使用结构vm_area_struct(<linux/mm_types.h>)来描述虚拟内存区域,其中几个主要成员如下:
unsigned long vm_start
虚拟内存区域起始地址
unsigned long vm_end
虚拟内存区域结束地址
unsigned long vm_flags
该区域的标记。如:VM_IO和VM_RESERVED。
VM_IO将该VMA标记为内存映射的IO区域,
VM_IO会阻止系统将该区域包含在进程的存放转
存(core dump )中,VM_RESERVED标志内存区
域不能被换出。