1. ARM SMMU Stage 2地址转换机制解析
在虚拟化环境中,地址转换通常分为两个阶段:Stage 1将虚拟地址(VA)转换为中间物理地址(IPA),Stage 2再将IPA转换为物理地址(PA)。ARM系统内存管理单元(SMMU)通过这种两级转换机制,为虚拟机提供了隔离的内存空间。
1.1 Stage 2转换表结构
Stage 2转换表采用多级页表结构,具体层级由SMMU_CBn_TCR寄存器配置。关键参数包括:
- T0SZ:指定IPA地址空间大小偏移量,实际地址空间大小为2^(64-T0SZ)
- TG0:定义转换粒度(4KB/16KB/64KB)
- SL0:指定查找起始级别,与转换粒度相关:
- 4KB粒度时:0b00=Level 2,0b01=Level 1
- 16KB/64KB粒度时:0b00=Level 3,0b01=Level 2
转换表基地址存储在SMMU_CBn_TTBR0寄存器中,这是一个64位寄存器,其中[47:x]位存储基地址,x值由T0SZ根据特定算法确定。
1.2 地址转换流程
当设备发起DMA访问时,SMMU执行以下转换步骤:
- 根据Context Bank配置确定使用Stage 2转换
- 从SMMU_CBn_TTBR0获取一级页表基地址
- 按照SL0指定的起始级别开始页表遍历
- 逐级解析页表项,直到获得最终物理地址
- 将转换结果缓存到TLB中加速后续访问
注意:在AArch32长描述符格式下,地址位[47:40]被当作0处理,这限制了可寻址的物理内存空间。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. TLB维护操作详解
2.1 TLB无效化操作
当软件修改Stage 2转换表项后,必须执行TLB维护操作以确保一致性。核心寄存器包括:
-
SMMU_CBn_TLBIIPAS2L:按IPA无效化最后一级TLB条目
- 64位只写寄存器
- [35:0]位指定要无效化的IPA[47:12]
- 不同粒度下的特殊处理:
- 64KB粒度:忽略[15:12]位
- 16KB粒度:忽略[13:12]位
-
SMMU_CBn_TLBSYNC:同步无效化操作
- 32位只写寄存器
- 确保之前发出的所有
