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(仅在虚拟化场景下启用)

两阶段转换的完整流程如下:

  1. CPU/设备发出VA:软件或DMA引擎生成虚拟地址。
  2. Stage 1查表:MMU/SMMU根据页表基地址(TTBR0/TTBR1)查找Stage 1页表,输出IPA。
  3. Stage 2查表:如果启用了虚拟化,MMU/SMMU继续查找Stage 2页表(由Hypervisor管理),输出最终PA。
  4. 访问物理内存:PA被发送到内存控制器,完成数据读写。
两阶段地址转换模型(VA → IPA → PA) CPU/设备 发出VA Stage 1 转换 VA → IPA Stage 2 转换 IPA → PA 物理内存 PA访问 由OS/内核管理页表 由Hypervisor管理页表

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的转换结果,或者合并后的最终转换。
TLB与页表遍历器加速转换流程 发出VA请求 TLB查找 TLB命中 TLB未命中 硬件页表遍历 CPU/设备发起 直接返回PA

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