文章地址: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
