1. MMU 基础概念

1.1 MMU 的定义与作用

内存管理单元(Memory Management Unit, MMU) 是 ARM 处理器中负责将 CPU 发出的虚拟地址(Virtual Address, VA) 转换为实际物理内存物理地址(Physical Address, PA) 的硬件模块。它位于 CPU 核心与内存控制器之间,是现代嵌入式操作系统(如 Linux、RTOS)实现多任务、内存保护和虚拟内存的基石。

核心定义: MMU 是一个硬件地址转换引擎,它通过查找页表(Page Table)完成 VA → PA 的映射,并同时检查访问权限和缓存策略。

1.2 为什么需要 MMU?—— 必要性分析

在裸机或简单 RTOS 系统中,CPU 直接访问物理地址,无需 MMU。但在以下场景中,MMU 成为必需品:

场景 无 MMU 的问题 有 MMU 的解决方案
多任务隔离 任务 A 可随意读写任务 B 的内存,导致系统崩溃 每个任务拥有独立虚拟地址空间,硬件级隔离
内存碎片 物理内存碎片化后,大块连续分配失败 虚拟地址连续,物理页可分散,通过页表映射
进程保护 用户程序可篡改内核数据 设置权限位(读/写/执行),越权访问触发异常
内存扩展 物理内存有限,无法运行大程序 虚拟内存 + 页面置换(swap),透明扩展
缓存一致性 不同外设对内存属性要求不同 页表项配置 Cache 策略(WT/WB/非缓存)
嵌入式视角: 即使不使用虚拟内存(如关闭 swap),MMU 的权限控制和缓存属性配置功能在安全关键系统(如汽车、医疗)中仍然不可或缺。

1.3 虚拟地址与物理地址的映射关系

MMU 将虚拟地址空间划分为固定大小的页(Page),物理内存划分为相同大小的页框(Page Frame)。映射关系存储在页表(Page Table)中,每个页表项(PTE)记录:

  • 物理页框号:映射到的物理内存基址
  • 权限位:读、写、执行、用户/特权模式
  • 属性位:Cache 策略、共享属性、可执行性
  • 有效位:该映射是否有效

地址转换公式:

物理地址 = 页表项中的物理页框号 × 页大小 + 虚拟地址的页内偏移

例如,4KB 页大小下,虚拟地址 0x1004 的页号为 0x1,偏移为 0x4;若页表项映射到物理页框号 0xF,则物理地址 = 0xF × 0x1000 + 0x4 = 0xF004。

关键理解: 映射是按页进行的,不是按字节。页大小通常为 4KB(标准页)、16KB 或 64KB(大页),ARM 还支持 1MB 的段映射(Section)和 16MB 的超大页映射。
虚拟地址到物理地址映射流程 虚拟地址 → 物理地址映射流程 虚拟地址 (VA) 0x00001004 页表查找 页号=1, 偏移=0x004 物理地址 (PA) 0x0000F004 页表项 (PTE) 结构 物理页框 权限 Cache属性 有效 物理页框=0xF | 权限=RW | Cache=WB | 有效=1

1.4 MMU 在 ARM 体系中的位置

在 ARM Cortex-A 系列处理器(如 Cortex-A7、A53、A72)中,MMU 位于指令/数据缓存(L1 Cache) 与总线接口单元(BIU) 之间。CPU 核心发出的所有访存地址(指令地址和数据地址)都先经过 MMU 转换,再进入缓存层次或直接访问物理内存。

ARM 架构中 MMU 的硬件位置与数据流:

  1. CPU 核心 发出虚拟地址(VA)
  2. TLB(转换后备缓冲器) 快速查找缓存中的页表项
  3. 若 TLB 命中,直接获得物理地址;若未命中,则触发页表遍历(Page Table Walk)
  4. MMU 硬件自动遍历多级页表(ARM 使用 2~4 级页表),获取物理地址
  5. 转换后的物理地址送入 L1 Cache 或直接访问 主存
  6. 若访问权限或属性检查失败,MMU 触发 异常(Abort) 交由操作系统处理
ARM 特有机制: ARMv7-A 和 ARMv8-A 架构支持安全扩展(TrustZone),MMU 在安全世界(Secure World)和普通世界(Normal World)各有独立的页表基址寄存器,实现硬件级隔离。
MMU 在 ARM 处理器中的位置 MMU 在 ARM 处理器中的位置与数据流 CPU 核心 发出 VA VA MMU 地址转换 权限检查 TLB 缓存 PA L1 Cache 指令/数据 总线接口 BIU 异常 (Abort) 页表基址寄存器 (TTBR) 主存 (页表)

1.5 ARM 中 MMU 的关键寄存器

寄存器 全称 作用
TTBR0 Translation Table Base Register 0 用户空间(0x00000000~0xBFFFFFFF)页表基址
TTBR1 Translation Table Base Register 1 内核空间(0xC0000000~0xFFFFFFFF)页表基址
SCTLR System Control Register MMU 使能位(M位)、Cache 使能位(C位)
DACR Domain Access Control Register 域访问权限控制(ARMv7 及之前)
MAIR Memory Attribute Indirection Register 定义内存属性编码(ARMv8)
嵌入式启动要点: 系统上电时 MMU 默认关闭(SCTLR.M=0),CPU 直接使用物理地址。操作系统初始化过程中,先建立页表,设置 TTBR,最后置位 SCTLR.M 使能 MMU。此过程必须在禁用中断且代码位于恒等映射区域的条件下完成,否则会导致指令崩溃。

1.6 本章小结

  • MMU 是 ARM 处理器中实现虚拟地址 → 物理地址转换的硬件单元
  • 其必要性体现在多任务隔离、内存保护、碎片消除、缓存策略控制四大方面
  • 映射以页为单位,通过页表记录物理页框、权限和属性
  • MMU 位于 CPU 核心与缓存之间,是访存路径的必经关卡
  • ARM 通过 TTBR0/TTBR1 区分用户/内核空间,SCTLR 控制 MMU 使能