搞懂Linux内存管理,仅此一篇( 二 )

  • 每当进程切换,用户空间就会变化,而内核空间是内核负责映射的 。它不随着进程的变化而变化 。内核空间有自己的对应的页表(init_mm.pgd),用户进程有各自的页表 。
  • 每个进程的用户空间都是独立的 。
  •  
    进程内存管理进程内存管理的对象是进程线性地址空间上的内存镜像,这些内存镜像其实就是进程使用的虚拟内存区域(memory region) 。进程虚拟空间是个32或64位的“平坦”(独立的连续区间)地址空间(空间的具体大小取决于体系结构) 。要统一管理这么大的平坦空间可绝非易事,为了方便管理,虚拟空间被划分为许多大小可变的(但必须是4096的倍数)内存区域,这些区域在进程线性地址中像停车位一样有序排列 。这些区域的划分原则是“将访问属性一致的地址空间存放在一起”,所谓访问属性在这里无非指的是“可读、可写、可执行等” 。
    如果你要查看某个进程占用的内存区域,可以使用命令cat /proc/<pid>/maps获得(pid是进程号),你会发现如下所示列表:
    08048000 - 08049000 r-xp 00000000 03:03 439029 /home/mm/src/example?08049000 - 0804a000 rw-p 00000000 03:03 439029 /home/mm/src/example?……………?bfffe000 - c0000000 rwxp ffff000 00:00 0每行数据格式如下:
    (内存区域)开始-结束 访问权限 偏移 主设备号:次设备号 i节点 文件 。
    注意点:


    推荐阅读