2. ARM体系结构基础:虚拟地址、物理地址、中间物理地址的概念
在ARMv8-A及后续体系结构中,内存管理单元(MMU)支持三种地址空间概念:虚拟地址(VA)、物理地址(PA)以及ARM特有的中间物理地址(IPA)。理解这三者的定义、转换关系以及硬件支持机制,是掌握SMMU和系统虚拟化的前提。
2.1 三种地址的核心定义
| 地址类型 | 英文缩写 | 定义 | 典型宽度(ARMv8) |
|---|---|---|---|
| 虚拟地址 | VA | CPU或设备直接使用的地址,由软件(操作系统或应用)生成,经过MMU/SMMU转换后才能访问物理内存。 | 32位/48位/52位 |
| 中间物理地址 | IPA | 在虚拟化场景下,Guest OS看到的“物理地址”,实际是Hypervisor为虚拟机模拟的地址空间,需经过Stage 2转换才能映射到真实物理地址。 | 40位/48位 |
| 物理地址 | PA | 系统总线上的真实硬件地址,直接对应DRAM或MMIO区域的物理位置。 | 40位/48位/52位 |
关键区分:在非虚拟化系统中,只有VA和PA两级转换;在虚拟化系统中,引入IPA作为中间层,形成VA→IPA→PA的三级转换模型。SMMU同样支持这种两级转换,用于设备DMA地址隔离。
2.2 地址转换的两阶段模型
ARM MMU和SMMU均支持两阶段地址转换(Two-Stage Translation),这是实现虚拟机设备直通和地址空间隔离的核心机制。
Stage 1(第一阶段): VA → IPA(或VA → PA,在非虚拟化场景下)
Stage 2(第二阶段): IPA → PA(仅在虚拟化场景下启用)
Stage 2(第二阶段): IPA → PA(仅在虚拟化场景下启用)
两阶段转换的完整流程如下:
- CPU/设备发出VA:软件或DMA引擎生成虚拟地址。
- Stage 1查表:MMU/SMMU根据页表基地址(TTBR0/TTBR1)查找Stage 1页表,输出IPA。
- Stage 2查表:如果启用了虚拟化,MMU/SMMU继续查找Stage 2页表(由Hypervisor管理),输出最终PA。
- 访问物理内存:PA被发送到内存控制器,完成数据读写。
2.3 地址空间宽度与配置
ARMv8-A体系结构支持多种地址空间宽度,具体取决于实现和配置。下表总结了常见配置:
| 地址类型 | 32位模式 | 48位模式(LVA) | 52位模式(LPA2) |
|---|---|---|---|
| VA | 32位(4GB) | 48位(256TB) | 52位(4PB) |
| IPA | 40位(1TB) | 48位(256TB) | 52位(4PB) |
| PA | 40位(1TB) | 48位(256TB) | 52位(4PB) |
注意:IPA宽度不能超过PA宽度,且Stage 2转换的输出PA必须落在系统实际支持的物理地址范围内。如果IPA宽度大于PA宽度,Hypervisor必须确保映射的IPA范围不会超出PA上限。
2.4 地址转换的硬件加速:TLB与页表遍历
为了加速地址转换,ARM MMU/SMMU内部集成了转换后备缓冲器(TLB)和硬件页表遍历器(Hardware Page Table Walker)。
- TLB:缓存最近使用的VA→PA或VA→IPA→PA转换结果,减少页表查找次数。
- 页表遍历器:当TLB未命中时,硬件自动遍历多级页表(通常为3级或4级),无需软件介入。
- 两阶段TLB:在虚拟化场景下,TLB需要同时缓存Stage 1和Stage 2的转换结果,或者合并后的最终转换。
2.5 地址空间隔离的意义
引入VA、IPA、PA三级地址空间的核心目的是实现隔离:
- 进程间隔离:每个进程拥有独立的VA空间,通过Stage 1页表映射到不同的PA区域,防止进程间非法访问。
- 虚拟机间隔离:每个虚拟机拥有独立的IPA空间,通过Stage 2页表映射到不同的PA区域,Hypervisor确保虚拟机无法访问其他虚拟机或宿主机内存。
- 设备DMA隔离:SMMU为设备提供独立的VA或IPA空间,设备DMA地址经过转换后才能访问物理内存,防止设备错误或恶意访问。
实践要点:在配置SMMU时,需要明确设备使用的是“直通IPA”(设备直接发出IPA,仅需Stage 2转换)还是“完整VA→IPA→PA”(设备发出VA,需要Stage 1+Stage 2转换)。前者性能更好,后者隔离粒度更细。
2.6 本章小结
| 概念 | 核心作用 | 管理方 | 典型应用 |
|---|---|---|---|
| VA | 进程/设备使用的逻辑地址 | 操作系统/设备驱动 | 进程地址空间、设备DMA |
| IPA | 虚拟机看到的“物理地址” | Guest OS | 虚拟机内存、设备直通 |
| PA | 系统总线的真实硬件地址 | Hypervisor/固件 | 物理内存分配、MMIO |