Linux内核 内存管理(2)物理内存初始化

一. 内存节点(Node)、内存区域(Zone)

1.每个 内存节点(Node) 对应一组 本地物理内存,与特定 CPU 核心组关联(如 ARM big.LITTLE 架构中的大小核分组)。本例子是单节点系统

2.每个 内存节点(Node) 进一步划分为多个 内存区域(Zone),用于区分内存的 物理属性 或 用途

DMA

用于支持 DMA 设备(如 USB、网卡)的内存区域,通常位于物理内存低地址(≤16MB)。

手机 SoC 中,摄像头、基带等外设通过 DMA 访问此区域内存。

DMA32

支持 32 位地址空间的 DMA 设备(寻址范围 ≤4GB),ARM 32 位系统常用。

传统 ARMv7 架构设备(如早期树莓派)使用此区域。

Normal

普通内存区域,用于内核和用户空间常规分配(如堆、栈),无特殊硬件限制。

ARM64 位系统(如 AArch64)的主流内存区域。

Movable

可移动内存区域

用于避免碎片化

二. 页(Page)

  • 定义:操作系统将物理内存划分为固定大小的块,称为 页(Page),是内存分配和回收的最小单位。
  • ARM 中的页大小:常规页大小为 4KB(由 MMU 配置决定),但支持 大页(Large Page,如 16KB、64KB) 以减少页表条目,提升地址转换效率。大页常用于虚拟机、图形渲染等需要大块连续内存的场景(如 ARM Mali GPU 的显存管理)。

页面管理的维度

(1)页的类型

从cat /proc/pagetypeinfo观察

Unmovable

69

29

33

6

4

1

1

1

0

0

0

Movable

64

7

1

1

1

17

30

23

6

1

135

Reclaimable

1

5

11

6

3

4

1

1

0

1

0

HighAtomic

0

0

0

0

0

0

0

0

0

0

0

Isolate

0

0

0

0

0

0

0

0

0

0

0

1.纵向来看:按阶数统计的空闲页数量

  • Page Block Order:内存块的阶数(order=9),表示每个块由 29=512 个页组成。若页大小为 4KB,则每个块大小为 512×4KB=2MB。

2.横向来看:按迁移类型统计的内存块数量

  • 迁移类型(Migration Type):
  • Unmovable:不可移动的页(如内核代码、数据结构)。
  • Movable:可移动的页(如用户空间进程的内存)。
  • Reclaimable:可回收的页(如文件系统缓存)。

3.总体来看

  • 横向看迁移类型:
  • Movable 在高阶数(如 order=10)有 135 个页块,说明系统保留了大量连续大页用于可移动分配(如用户进程)。
  • Unmovable 在低阶数(如 order=0~2)较多,符合内核小内存分配的特点。
  • 纵向看阶数:
  • 低阶数(0~3) 页块多表示系统擅长分配小内存(如栈、堆)。
  • 高阶数(≥5) 页块多表示系统有连续大内存可用(如 DMA 设备、大文件映射)。

4.关键指标

高阶数(order≥5)页块

各迁移类型均有分布

某类型高阶数为 0 → 大内存分配失败

Movable 块占比

越高越好(通常 > 80%)

过低 → 内存碎片化风险

Unmovable 块占比

越低越好(通常 < 10%)

过高 → 内核占用过多连续内存

Reclaimable 块数量

适中(根据缓存需求调整)

过高 → 可能导致内存回收频繁

(2)页帧号(Page Frame Number, PFN)

  • 物理页的唯一标识,用于映射虚拟地址与物理地址(如通过页表实现 VA → PA 转换)。
  • 在 ARM 的 MMU 架构(如 TTBR0/TTBR1 寄存器)中,PFN 是页表项的核心字段。

三者关系

物理内存整体
├─ 内存节点(Node 0)   ── 对应一组 CPU 可直接访问的物理内存(如 NUMA 节点 0 的本地内存)
│  ├─ Zone(DMA)       ── 低端物理内存,用于 DMA 设备,地址范围 0 ~ 1GB
│  │  ├─ Page(4KB)    ── 具体物理页,如空闲页、可移动页、不可移动页等
│  │  └─ Page(4KB)    ── ...
│  ├─ Zone(Normal)    ── 常规物理内存(若存在,地址范围 1GB ~ 更高)
│  │  └─ Page(4KB)    ── ...
│  └─ Zone(Movable)   ── 可移动页的集合,属于 Normal 或独立 Zone
└─ 内存节点(Node 1)   ── 另一组 CPU 可访问的物理内存(如 NUMA 节点 1 的本地内存)
   └─ Zone(DMA)       ── ...

三.mem_map / pageblock

管理粒度

单个物理页(4KB)

连续页块(如 4MB)

核心作用

记录页状态,支持页级分配与回收

支持大页分配、内存规整,管理连续页块

数据结构

struct page

 

数组

基于

 

struct page

 

的逻辑分组(无独立结构体)

关联方式

每个页块由连续的

 

struct page

 

组成

通过 PFN 计算页块起始位置,依赖页状态

#嵌入式##嵌入式笔面经分享##牛客创作赏金赛#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务