1. MMU 基础概念:虚拟地址、物理地址、页表、TLB、转换粒度

MMU(Memory Management Unit,内存管理单元)是嵌入式系统中负责地址转换与内存保护的核心硬件模块。理解其基础概念是进行页表初始化与性能优化的前提。本节将逐一拆解虚拟地址、物理地址、页表、TLB 和转换粒度这五个关键要素。

MMU 地址转换核心流程 MMU 地址转换核心流程 CPU 核心 发出虚拟地址 MMU 查页表 / TLB 页表 (内存) TLB 缓存 快速命中 物理地址 访问内存/外设 未命中时查内存 说明:CPU 发出的虚拟地址经 MMU 转换后得到物理地址;TLB 作为页表的快速缓存加速命中,未命中时回退到内存页表。

1.1 虚拟地址与物理地址

概念 定义 特点 嵌入式典型范围
虚拟地址 (VA) CPU 核心直接使用的地址空间,由 MMU 转换为物理地址 连续、隔离、可映射到任意物理位置 32-bit: 0x0000_0000 ~ 0xFFFF_FFFF
64-bit: 视具体架构
物理地址 (PA) 实际访问内存或外设寄存器时使用的地址 反映真实硬件布局,可能不连续 取决于 SoC 内存映射,如 0x8000_0000 ~ 0x8FFF_FFFF

关键理解:在 MMU 使能后,软件操作的是虚拟地址,硬件最终访问的是物理地址。页表就是这两者之间的映射字典。

1.2 页表 (Page Table)

页表是存储在内存中的多级数据结构,用于描述虚拟地址到物理地址的映射关系。每个页表项(PTE)包含物理页帧号、权限位、缓存属性等控制信息。

  • 一级页表:适用于小地址空间,简单但占用连续大块内存。
  • 多级页表:ARMv7-A 使用二级页表,ARMv8-A 使用四级页表,按需分配,节省内存。
  • 页表项格式:包含物理基地址、访问权限(AP)、可缓存(C/B)、可共享(S)等位域。
多级页表结构示意 多级页表结构示意(以二级页表为例) 虚拟地址 一级页表 (L1) 二级页表 (L2) 物理地址 说明:虚拟地址的高位索引一级页表,得到二级页表基址;再索引二级页表得到物理页帧号,拼接偏移得到物理地址。 多级结构避免为整个地址空间预分配连续页表内存,按需建立映射。

1.3 TLB (Translation Lookaside Buffer)

TLB 是 MMU 内部的硬件缓存,用于缓存最近使用的页表项。由于页表查找涉及多次内存访问,TLB 命中可大幅降低地址转换延迟。

TLB 状态 延迟(典型周期) 影响
TLB 命中 1 ~ 2 个 CPU 周期 几乎无性能损失
TLB 未命中 数十 ~ 数百个周期 触发页表遍历(Page Walk),严重拖慢执行

优化要点:使用大页(如 2MB/1GB 页)可以减少页表级数,提高 TLB 覆盖范围,降低未命中率。这是嵌入式性能优化的核心手段之一。

1.4 转换粒度 (Translation Granule)

转换粒度指 MMU 支持的最小地址映射单元大小。不同架构支持不同粒度,常见的有:

  • 4KB 页:最常用,粒度细,适合代码/数据段精细管理,但 TLB 覆盖范围小。
  • 16KB / 64KB 页:ARMv8-A 可选,平衡粒度与 TLB 效率。
  • 2MB / 1GB 块:大块映射,适合大内存区域(如 DDR、显存),TLB 覆盖范围极大。
转换粒度对比 转换粒度对比:4KB 页 vs 2MB 块 4KB 页 (细粒度) TLB 覆盖 1MB 需 256 个条目 2MB 块 (粗粒度) TLB 覆盖 1GB 仅需 512 个条目 说明:细粒度页(4KB)内存浪费少,但 TLB 覆盖范围小;粗粒度块(2MB/1GB)TLB 效率高,适合大块连续内存。 嵌入式系统中,通常对代码段使用 4KB 页精细管理,对 DDR 区域使用 2MB 块提升性能。

1.5 概念关系总结

组件 位置 作用 性能影响
虚拟地址 CPU 内部 程序视角的地址空间 决定寻址能力
物理地址 系统总线 实际访问内存/外设 决定硬件访问效率
页表 内存中 存储 VA→PA 映射 页表遍历延迟大
TLB MMU 内部 缓存页表项 命中时零延迟
转换粒度 页表配置 定义映射单元大小 影响 TLB 覆盖范围

常见误区:初学者常认为页表越大越好。实际上,过大的页表会占用宝贵的内存带宽,且 TLB 未命中时的遍历开销更大。合理选择转换粒度、使用大页映射连续区域,才是性能优化的正确方向。