linux进程虚拟空间的管理

按照不同的访问属性和功能划分为不同的内存区域,VMA

代码段:可执行文件的内存映射
数据段:可执行文件的已初始化全局变量和静态局部变量的内存映射
bss段:未初始化的或者值为0的变量的内存映射
lib库的代码段:多个
lib库的数据段:多个
lib库的bss段:多个
任何内存映射文件(有名mmap建立)
任何共享内存段(匿名mmap建立)
进程栈stack
进程堆heap
内核每进程的vm_area_struct项 /proc/pid/maps 含义
vm_start 第一列 如00377000 此段虚拟地址空间的起始地址
vm_end 后一列 如00390000 此段虚拟地址空间的空间结束地址
vm_flags 第三列 如r-xp 此段虚拟地址空间的属性 r可读 w可写 x可执行p私有段 s共享段
vm_pgoff 第四列 如0000000 对有名映射。表示此段虚拟内存起始地址在文件中以页为单位进行偏移,对匿名映射它等于0或者vm_start/PAGE_SIZE
vm_file->s_dev 第五列 如fd:00 映射文件所属设备号,对匿名映射来说,因为没有在文件的磁盘上,所以没有设备号,始终为00:00,对有名映射来说,是映射文件所在设备的设备号
vm_file->i_ino 第六列 如9176473 节点号
第七列 如lib/ld-2.5.so 对有名来说,是映射的文件名,对匿名映射来说是此段虚拟内存在进程中的角色 stack表示在进程中做如ib/ld-2.5.so heap表示堆 其余情况不显示

数据结构

内核使用mm_struct来描述一个进程的虚拟地址空间,用vm_area_struct来描述一个虚拟内存区域(VMA)进程的虚拟地址空间由多个VMA组成

你可能感兴趣的:(linux内核学习,linux,java,运维)