Advertisement

Linux内存分区方案

阅读量:

Linux具备对多种硬件架构的支持能力,因此其内存描述机制必须具备通用性,以便于实现高效的内存管理。为此,Linux引入了内存节点、内存区以及页框等概念。

内存节点(Node):该划分方式主要依据CPU访问成本的差异进行。在多CPU系统中,本地内存与远端内存被划分为不同的节点。内核通过struct pg_data_t结构体来表征内存节点。

内存分区(Zone):在对内存节点进一步细分的基础上,Linux将每个节点划分为多个区域。内核使用struct zone结构体来描述这些区域。通常情况下,一个节点会被划分为DMA、Normal和High Memory三个不同的分区。

  • DMA内存区:即直接内存访问区域,通常对应于物理地址空间的前16MB部分。该区域主要用于一些外部设备的数据传输操作,允许外设与主存之间直接交换数据,而无需经过系统CPU的干预。
  • Normal内存区:涵盖从16MB至896MB范围内的物理地址空间。
  • HighMemory内存区:位于896MB之后的物理地址空间。

为何高端内存的边界设定为896M? 这与32位Linux系统的虚拟地址空间限制密切相关。32位系统中虚拟地址空间范围为0-4G,其中0-3G分配给用户态程序使用,而3G-4G则用于内核态运行环境。这表明内核仅拥有1G的虚拟地址空间可用资源。当实际物理存储容量超过1

全部评论 (0)

还没有任何评论哟~