1. ARM SMMU架构概述
ARM系统内存管理单元(SMMU)是一种IOMMU实现,它为系统中的外设提供与CPU MMU类似的内存管理和地址转换功能。SMMU的核心作用是管理设备对系统内存的访问,确保设备只能访问被明确授权的内存区域,从而提供内存保护和隔离能力。
在典型的计算机系统中,CPU通过MMU实现虚拟地址到物理地址的转换,而外设通常直接使用物理地址进行DMA操作。这种设计存在两个主要问题:
- 设备驱动程序需要管理物理内存的分配和映射
- 恶意或存在缺陷的设备可能访问未被授权的内存区域
SMMU通过为外设提供地址转换服务解决了这些问题,其主要功能包括:
- 虚拟地址到物理地址的转换
- 内存访问权限检查
- 内存属性控制
- 多级安全保护
1.1 SMMU与CPU MMU的异同
虽然SMMU和CPU MMU都提供地址转换功能,但它们在设计上有显著差异:
| 特性 | CPU MMU | SMMU |
|---|---|---|
| 使用者 | CPU核心 | 外设/DMA引擎 |
| 地址空间 | 每个进程有独立VA空间 | 设备共享或独享地址空间 |
| TLB管理 | 硬件自动管理 | 需要软件参与维护 |
| 上下文切换 | 频繁(进程切换) | 相对不频繁 |
| 异常处理 | 产生CPU异常 | 产生SMMU故障事件 |
1.2 SMMU的核心组件
SMMU架构包含以下几个关键组件:
- 流匹配单元(Stream Matching Unit):负责将设备事务与对应的转换上下文关联起来
- 转换上下文(Translation Context):包含地址转换表基址、内存属性等配置信息
- TLB(Translation Lookaside Buffer):缓存最近使用的地址转换结果
- 属性转换单元(Attribute Transformation Unit):修改事务的内存属性
- 故障记录单元(Fault Recording Unit):记录转换过程中发生的错误
这些组件协同工作,为系统中的每个设备事务提供适当的内存访问控制。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SMMU事务处理流程
2.1 事务处理概述
当设备发起内存访问时,SMMU按
