虚拟内存区域

虚拟内存区域

虚拟内存区域是进程的虚拟地址空间中的一个同质区间,即具有同样特性的连续地址范围

一个进程的内存映象由下面几部分组成:

程序代码、数据、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

Start: 该区域起始虚拟地址

End: 该区域结束虚拟地址

Perm: 读、写和执行权限;表示对这个区域,允

许进程做什么。这个域的最后一个字符要么是p

表示私有的,要么是s表示共享的。

Offset: 被映射部分在文件中的起始地址

Major、minor:主次设备号

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标志内存区

域不能被换出。

 


你可能感兴趣的:(虚拟内存区域)