linux 中的物理地址和虚拟地址 2010-05-27 09:54:35| 分类: Linux 学习 | 标签: |字号大中小 订阅 在支持MMU 的32 位处理器平台上,Linux 系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000 到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux 运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB 的物理内存根据不同需求映射到整个 4GB 的虚拟存储空间中。 物理存储空间布局 Linux的物理存储空间布局与处理器相关,详细情况可以从处理器用户手册的存储空间分布表(memory map)相关章节中查到,我们这里只列出嵌入式处理器平台Linux物理内存空间的一般布局,如图18-4 所示。 500)this.width=500;"> 图18-4 Linux物理内存空间一般布局示意图 说明: 1)最大node 号n 不能大于MAX_NUMNODES-1。 2)MAX_NUMNODES 表示系统支持的最多node 数。在ARM 系统中,Sharp 芯片最多支持16 个nodes,其他芯片最多支持4 个nodes。 3)numnodes 是当前系统中实际的内存node 数。 4)在不支持CONFIG_DISCONTIGMEM选项的系统中,只有一个内存node。 5)最大bank 号m 不能大于NR_BANKS-1。 6)NR_BANKS 表示系统中支持的最大内存bank 数,一般等于处理器的RAM 片选数。在ARM 系统中,Sharp 芯片最多支持16 个banks,其他芯片最多支持8 个banks。 7)mem_init()函数会将所有节点的页帧位码表所占空间、孔洞页描述符空间及空闲内存页都释放掉。 虚拟存储空间布局 在支持MMU 的系统中,当系统做完硬件初始化后就使能MMU 功能,这样整个系统就运行在虚拟存储空间中,实现虚拟存储空间到物理存储空间映射功能的是处理器的MMU,而虚拟存储空间与5 路存储空间的映射关系则是由Linux内核来管理的。32 位系统中物理存储空间占4GB 空间,虚拟存储空间同样占 4GB空间,Linux把物理空间中实际存在的远远小于4GB 的内存空间映射到整个4GB 虚拟存储空间中除映射I/O 空间之外的全部空间,所以虚拟内存空间远远大于物理内存空间,这就说同一块物理内存可能映射到多处虚拟内存地址空间上,这正是Linux内存管理职责所在。图 18-5 列出了 Linux内核中虚拟内存空间的一般布局(其实I/O 空间也在其中,通常占用高端内存空间,在此未标出)。 500)this.width=500;"> 图 18-5 Linux系统虚拟内存空间一般布局示意图 说明: 1)线性地址空间:是指Linux 系统...