Linux进程内存布局及映射信息
Linux进程内存布局及映射信息 处理器在运行程序时,需要存储器来存放程序和程序使用的数据, 现代操作系统提供了存储器的抽象:虚拟存储器, 使得应用程序来说不用过多的考虑物理存储使用,简化了内存管理. 虚拟存储器 虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件完美的交互,它为每一个进程提供了一个大的、一致的、私有的地址空间. --深入理解计算机系统 在多应用复杂任务场景下,进程直接使用物理内存存在一些问题: 处理数据大小: 应用程序存储的使用,将受制于物理内存大小; 复杂性:应用程序要清楚需要使用的物理地址,何时申请,何时释放,甚至产生碎片后是否要进行整理等; 安全性:如果一个进程不小心改写了另外一个进程也正在使用的内存,进程可能会莫名其妙的挂掉. 虚拟存储器很好的解决了这类问题: 高效使用内存: 将主存看作存储在磁盘上地址空间的高速缓存,主存只保存活动区域 简化存储管理: 虚拟存储提供一致的地址空间 对进程空间的保护: 以免地址空间被其他进程破坏 内存布局、映射的信息 虚拟存储用于管理,最终还是要使用到物理内存, Linux提供了一些接口可以查看,进程(虚拟)内存布局, 虚拟内存与物理内存的映射等。 相关的proc文件 可以通过下面的proc文件查看布局及映射信息 /proc/iomem: 物理内存布局 /proc/pid/maps: 进程虚拟内存布局 /proc/pid/mem: 进程内存查看 /proc/pid/pagemap: 虚拟内存映射到物理内存的信息 /proc/kpagecount: 映射的次数 /proc/kpageflags: 页面的状态 /proc/kpagecgroup: 可以查看每一页对应的cgroup的inode 物理内存使用布局 /proc/iomem 这个文件显示统内存与每个物理设备映射关系, 虚拟机内存物理内存配置了512M 00000000-00000fff : Reserved 00001000-0009ebff : System RAM 0009ec00-0009ffff : Reserved 000a0000-000bffff : PCI Bus 0000:00 000c0000-000c7fff : Video ROM 000ca000-000cafff : Adapter ROM 000cc000-000cffff : PCI Bus 0000:00 000d0000-000d3fff : PCI Bus 0000:00 000d4000-000d7fff : PCI Bus 0000:00 000d8000-000dbfff : PCI Bus 0000:00 000dc000-000fffff : Reserved 000f0000-000fffff : System ROM 00100000-1fedffff : System RAM 0ba00000-0c600de0 : Kernel code 0c800000-0cc16fff : Kernel rodata 0ce00000-0d00a8ff : Kernel data 0d5dc000-0dbfffff : Kernel bss 1fee0000-1fefefff : ACPI Tables 1feff000-1fefffff : ACPI Non-volatile Storage 1ff00000-1fffffff : System RAM ... 第一列:内存地址范围 第二列:对应的内存用途 可以看到含有System RAM的几个段 ...