【學習筆記】虛擬化實現技術架構
1. 處理器虛擬化
VMM陷入
方式:
1) 基於處理器保護機制觸發的異常,處理器會在執行敏感指令前,檢查其執行條件是否滿足,不滿足就會陷入VMM進行處理。
2) 虛擬機器主動觸發異常,虛擬機器通過陷阱指令主動陷入到VMM中。
3) 非同步中斷,一旦中斷訊號到達處理器,處理器會強行中斷當前指令,然後跳轉到VMM註冊的中斷服務程式。
VM-Exit:CPU自動從非跟模式切換到根模式
VM-Entry:VMM排程某個客戶機執行時,CPU從根模式切換到非根模式。
VMCS:儲存虛擬CPU需要的相關狀態
vCPU:vCPU描述符,包括虛擬暫存器(VMCS內)和vCPU標識、狀態資訊(VMCS外)等
2. 中斷虛擬化
事件注入機制
3. 記憶體虛擬化
一個作業系統對其實體記憶體存在兩個主要的基本認識:實體地址從0開始和記憶體地址連續性。
1) 引入客戶機實體地址空間
由於引入客戶機實體地址空間,記憶體虛擬化需要通過兩次地址轉換來支援地址空間的虛擬化,即
客戶機虛擬地址(GVA)-》客戶機實體地址(GPA)-》宿主機實體地址(HPA)
其中從GVA到GPA的轉換是由客戶機軟體決定,通常是客戶機作業系統通過VMCS中的Guest狀態域CR3指向的頁表決定。GPA到HPA的轉換是由VMM決定(客戶機實體地址與宿主機實體地址對映表)。
2) 影子頁表(客戶機頁表的虛擬TLB)
一份影子頁表與一份客戶機作業系統的頁表對應,將客戶機虛擬地址直接對映到宿主機實體地址。客戶機作業系統維護的頁表只能被客戶機作業系統載入到虛擬MMU中,不能被物理MMU使用,VMM在物理MMU中載入的是影子頁表。
v 影子頁表的建立與維護貫穿於:
VMM對客戶機作業系統修改客戶機CR3暫存器的截獲與處理;
VMM對客戶機作業系統INVLPG指令的截獲與處理;
VMM對因客戶機頁表和影子頁表不一致而觸發的缺頁異常的截獲與處理;
v 缺頁異常的分類:
影子頁表初始化時的缺頁異常;
VMM將宿主機物理頁換出到硬碟上引發的缺頁異常;
客戶機上的缺頁異常;
v 影子缺頁異常的處理:
客戶機頁幀號-》宿主機物理頁幀號-》影子宿主機頁幀號
① VMM根據客戶機頁表項建立起相應的影子頁目錄和頁表結構
② VMM根據發生缺頁異常的客戶虛擬地址,在客戶機頁表的相應頁表項中得到與之對應的客戶機實體地址
③ 根據客戶機實體地址,在客戶機實體地址與宿主機實體地址對映表中得到相應的宿主機實體地址,VMM再把這個宿主機實體地址填充到影子頁表中,需要填充的內容還包括頁表項的訪問位和修改位
v 影子頁表的缺點:
① 頁表同步,實現複雜
② 為每個客戶機程序都維護一個對應的影子頁表,記憶體開銷大
3) IntelEPT(擴充套件頁表)
從硬體上支援GVA-》GPA-》HPA的兩次地址轉換:
CPU首先查詢客戶機CR3暫存器指向的頁表,CR3暫存器給出的是GPA,然後CPU查詢EPT TLB將客戶機CR3中的GPA轉換為HPA,若EPT TLB沒有相應的記錄,就進一步查詢EPT頁表,如果還沒有,CPU丟擲EPT Violation異常交給VMM處理。EPT硬體通過增大EPT TLB來儘量減少記憶體訪問。
頁池;
4. I/O裝置虛擬化
VT-x技術允許客戶機直接訪問物理的I/O空間,實現了讓客戶機直接訪問裝置真實的I/O地址空間(包括埠I/O和MMIO記憶體對映I/O)
VT-d技術提供了DMA重對映技術,讓裝置的DMA操作直接訪問到客戶機的記憶體空間
v Intel VT-d
裝置所有的DMA傳輸都會被DMA重對映硬體截獲。
v DMA重對映
DMA:直接記憶體訪問,包括同步DMA,即由裝置驅動在設定好需要被DMA訪問的記憶體地址後,寫某個暫存器來通知裝置發起DMA,裝置會直接從該記憶體地址讀取內容並操作。非同步DMA,即裝置將資料直接複製到一個事先設定好的記憶體地址,再通過一箇中斷通知驅動程式。
PCI匯流排:裝置識別符號、PCI配置空間、PCI裝置列舉
① BDF:裝置識別符號,用來索引任何一條總線上的任何一個裝置。
② 根條目:用於描述PCI匯流排,每條匯流排對應一個根條目,共256個。
③ 上下文條目:用於描述某個具體的PCI裝置,共256個。
v DMA重對映過程
當DMA重對映硬體捕獲到一個DMA傳輸時,通過其中的BDF的BUS欄位索引根條目表,得到產生此DMA傳輸的匯流排對應的根條目,由此根條目的CTP欄位索引上下文條目表,用BDF中的{Device:Funciton}欄位索引該表得到產生此DMA傳輸的裝置對應的上下文條目。由上下午條目的ASR欄位,可以定址到該裝置對應的I/O頁表,通過I/O頁表中GPA到MPA的對映,DMA重對映硬體就可以做地址轉換了,從而使裝置能夠直接訪問指定客戶機的記憶體區域。