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 的超大页映射。
1.4 MMU 在 ARM 体系中的位置
在 ARM Cortex-A 系列处理器(如 Cortex-A7、A53、A72)中,MMU 位于指令/数据缓存(L1 Cache) 与总线接口单元(BIU) 之间。CPU 核心发出的所有访存地址(指令地址和数据地址)都先经过 MMU 转换,再进入缓存层次或直接访问物理内存。
ARM 架构中 MMU 的硬件位置与数据流:
- CPU 核心 发出虚拟地址(VA)
- TLB(转换后备缓冲器) 快速查找缓存中的页表项
- 若 TLB 命中,直接获得物理地址;若未命中,则触发页表遍历(Page Table Walk)
- MMU 硬件自动遍历多级页表(ARM 使用 2~4 级页表),获取物理地址
- 转换后的物理地址送入 L1 Cache 或直接访问 主存
- 若访问权限或属性检查失败,MMU 触发 异常(Abort) 交由操作系统处理
ARM 特有机制: ARMv7-A 和 ARMv8-A 架构支持安全扩展(TrustZone),MMU 在安全世界(Secure World)和普通世界(Normal World)各有独立的页表基址寄存器,实现硬件级隔离。
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 使能