文章地址:pages.cs.wisc.edu/~basu/isca_iommu_tutorial/index.htm
时间:2016年4月3日(星期日)上午8:30
地点:Room "Salon V", ASPLOS 2016, Atlanta, GA USA
组织者:Arkaprava(Arka)Basu,Andrew G. Kegel(AMD 研究)
概述:
自 1970 年代内存管理单元(MMU)问世以来,运行在 CPU 上的应用程序就一直使用虚拟地址访问内存。然而,外设设备仍然通过直接内存访问(DMA)使用物理地址访问内存。直到 2000 年代中期,随着商用处理器中 IOMMU(IO 内存管理单元)技术的出现,通用外设设备才能够使用虚拟地址访问内存。IOMMU 技术迅速发展,以支持现代计算中的许多关键特性。例如,IOMMU 是扩展 CPU 虚拟内存至 GPU 以实现异构计算的关键技术。此外,在虚拟化系统中,IOMMU 允许客户操作系统直接访问 IO,并允许在不经过主机干预的情况下直接传递中断。类似地,在非虚拟化系统中,IOMMU 也支持安全可靠的用户空间 IO 访问。
什么是 IOMMU?
IOMMU(输入输出内存管理单元)是一项用于转换和校验外设内存访问的技术,旨在取代软件实现方案。它为 DMA 提供内存保护,支持 DMA 的虚拟地址转换、中断重映射及虚拟化功能。该技术通过以下核心机制实现高效安全的进程虚拟内存访问:利用 PASID 转换进程地址空间与设备物理访问、强制执行操作系统分配策略、处理虚拟内存页故障等。
![]()
IOMMU逻辑
传统 IO 设备的 DMA 操作
内核中的设备驱动控制 IO 设备向 DMA 控制器发送 “DMA 请求”,DMA 控制器收到请求后向 CPU 发出占用总线的请求,在 CPU 批准使用总线后,此时的 CPU 会让出一个或者多个总线周期用于数据传输,同时 DMA 数据传输期间,CPU 停止访问内存,无法执行需要占用总线的指令。DMA 控制器将掌握总线控制权,建立 IO 设备的 DMA 传输通道。
![]()
DMA
缺点:
对于恶意设备没有防范(DMA 攻击,例如 FinSpy)
对于不稳定的设备驱动没有保护
侧信道攻击导致泄露信息
针对上面问题,需要有硬件驱动的内存保护,IOMMU 应运而生。
IOMMU
![]()
当系统启用 IOMMU(Input-Output Memory Management Unit)时,设备发起 DMA 请求的流程会涉及地址转换、权限检查和内存访问的协作。整体流程为:设备发起 DMA 请求 → IOMMU 拦截并转换地址 → 内存控制器访问物理内存 → 数据返回设备。
![]()
IOMMU的用例:阻止未授权的内存访问
![]()
在现实中,DMA 设备使用系统总线上的物理地址,根据软件驱动程序或操作系统指令读取和写入内存,这导致软件漏洞或恶意应用程序的攻击可能会访问和修改重要的操作系统数据(操作系统安全策略、密码等),在未启用 IOMMU 的设备上,这类操作无法被操作系统检测到,并且 DMA 设备如果访问到其他应用程序的内存,可能导致系统崩溃,或者让恶意驱动接管整个系统。在启用 IOMMU 后,IOMMU 允许操作系统对任何访问物理内存的 DMA 设备强制执行 DMA 访问策略,当未授权的内存访问发生后,操作系统将得到通知并且可以关闭设备和驱动程序,然后通知用户或管理员。
![]()
IOMMU技术家族
![]()
AMD IOMMU®:IO Memory Management Unit
Intel VT-d®:Virtualization Technology for Directed IO
ARM SMM®:System Memory Management Unit
IBM CAPI®:Coherent Accelerator Processor Interface
更多游戏资讯请关注:电玩帮游戏资讯专区
电玩帮图文攻略 www.vgover.com
