MMU 、 IOMMU、 SMMU
一、MMU(Memory Management Unit)
MMU = CPU 的内存管理单元
作用:
把CPU看到的虚拟地址 (Virtual Address, VA)转换成物理地址 (Physical Address, PA)。
地址转换
CPU访问地址 │ ▼ Virtual Address (VA) │ ▼ MMU │ ▼ Physical Address (PA)主要功能
虚拟内存
进程地址空间隔离
内存保护
页表管理
二、IOMMU(Input Output Memory Management Unit)
IOMMU = 给 DMA 设备用的 MMU
作用:
把设备发起的 DMA 地址转换成系统物理地址
地址转换
DMA设备 │ ▼ IO Virtual Address (IOVA) │ ▼ IOMMU │ ▼ Physical Address (PA)为什么需要 IOMMU
限制设备 DMA 范围
实现设备隔离
支持虚拟机直通
统一DMA地址空间
常见流程
驱动申请 DMA:
dma_alloc_coherent()内核流程:
虚拟地址 │ ▼ 物理地址 │ ▼ IOMMU │ ▼ IOVA设备看到的地址其实是IOVA不是物理地址:
三、SMMU(System Memory Management Unit)
SMMU 是 ARM 的 IOMMU 实现
| 名称 | 含义 |
|---|---|
| MMU | CPU内存管理 |
| IOMMU | 设备DMA内存管理 |
| SMMU | ARM架构IOMMU |
ARM架构地址流程
CPU访问 VA │ ▼ MMU │ ▼ PA设备访问
Device │ ▼ IOVA │ ▼ SMMU │ ▼ PA四、完整 SoC 地址体系
在一个现代 SoC 中:
CPU │ ▼ Virtual Address │ ▼ MMU │ ▼ Physical Address │ ┌───────┴─────────┐ │ │ Memory IOMMU/SMMU │ ▼ IOVA │ ▼ Device DMA| 模块 | 全称 | 作用对象 | 地址转换 |
|---|---|---|---|
| MMU | Memory Management Unit | CPU | VA → PA |
| IOMMU | IO Memory Management Unit | DMA设备 | IOVA → PA |
| SMMU | System MMU (ARM) | ARM设备 | IOVA → PA |
