对于包含MMU的处理器而言,Linux系统提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。
进程的4GB空间被分为两部分:用户空间和内核空间。
用户空间的地址一般分布为03GB,剩下的34GB为内核空间。用户进程通常只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。用户进程只有通过系统调用(代表用户进程在内核态执行)等方式才能访问到内核空间。
每个进程的用户空间都是完全独立、互不相关的,用户进程各自有不同的页表。而内核空间是由内核负责映射的,不会跟着进程改变,是固定的。内核空间的虚拟地址到物理地址映射是被所有进程共享的,内核的虚拟空间独立于其他程序。
Linux中1GB的内核空间又被划分为物理内存映射区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射器,如下图:
对于x86系统而言,一般情况下,物理内存映射区最大长度为896MB,系统的物理内存被顺序映射在内核空间的这个区域中。当系统物理内存大于896MB时,超过物理内存映射区的那部分内存称为高端内存(未超过物理内存映射区的内存被称为常规内存),内存在存取高端内存时必须将他们映射到高端页面映射区。