1.概述
在Linux中,内核对一致和非一致内存访问系统使用相同的数据结构,因此针对各种不同形式的内存布局,各个算法几乎没有什么差别。在UMA系统上,只使用一个NUMA结点来管理整个系统内存。
首先内在划分为结点。每个结点关联到系统中的一个处理器,在内核中表示为pg_data_t的结构。
各个结点又划分为内存域,是内存的进一步细分。例如,对可用于(ISA设备的)DMA操作的内存区是有限制的。只有前16M适用,还有一个高端内存区域无法直接映射。在二者之间是通用的“普通”内存区。因此一个结点最多有3个内存域组成,如下图
内核引入了下列常量来枚举系统中的所有内存域:
◆ ZONE_DMA标记适合DMA的内存域。该区域的长度依赖于处理器类型。
◆ ZONE_DMA32标记了使用32位地址字可寻址、适合DMA的内存域。显然只有在64位系统上两种DMA内存域才有差别。
◆ ZONE_NORMAL标记了可直接映射到内核段的普通内存域。这是