Linux内存管理5(基于6.1内核)---高端内存
一、内存划分
ARM 架构内存区域划分:
内存区域 | 用途 | 内存范围 | 特点 |
---|---|---|---|
ZONE_DMA | 供 DMA(直接内存访问)设备使用 | 低地址部分(通常 ≤ 1GB) | 用于低延迟的设备访问内存,通常为物理内存的最底部区域,设备可直接访问。 |
ZONE_NORMAL | 普通内存,供内核和用户空间进程使用 | 低于 4GB(32 位 ARM),更大范围(64 位 ARM) | 用于常规的内存分配,供内核和用户空间访问,访问延迟较低。 |
ZONE_HIGHMEM | 高端内存,内核不能直接访问的内存 | 超过 4GB(32 位 ARM) | 需要通过额外的映射才能访问,访问延迟较高。通常在 64 位 ARM 系统中不使用。 |
ZONE_MOVABLE | 可迁移的内存,适用于内存回收、虚拟化等场景 | 高端内存部分或某些特定区域 | 内存可以在回收时迁移到其他区域,通常用于内存管理优化和内存压力大时。 |
NUMA 区域 | NUMA 节点的内存,适用于支持 NUMA 的多处理器系统 | 各个 NUMA 节点的本地内存 | 每个 NUMA 节点内的内存区域独立管理,跨节点访问会有较高延迟。 |
32 位 ARM 系统的内存区域
内存区域 | 内存范围 | 用途 |
---|---|---|
ZONE_DMA | 0 KB 到 1 GB | 供 DMA 设备使用 |
ZONE_NORMAL | 1 GB 到 3 GB | 普通内存,供内核和用户空间进程使用 |
ZONE_HIGHMEM | 3 GB 到 4 GB | 高端内存,内核无法直接访问,需要分页映射 |
64 位 ARM 系统的内存区域
内存区域 | 内存范围 | 用途 |
---|---|---|
ZONE_DMA | 0 KB 到 1 GB | 供 DMA 设备使用 |
ZONE_NORMAL | 1 GB 到 4 GB 或更高 | 普通内存,供内核和用户空间进程使用 |
ZONE_HIGHMEM | 一般不使用 | 在 64 位系统中,由于内核可直接访问更多内存,通常不需要此区域 |
ZONE_MOVABLE | 根据内存管理需求划分 | 可迁移的内存,用于内存回收和虚拟化等场景 |