2005 年冬天,英特爾帶來了業內首個面向臺式機的硬件輔助虛擬化技術 Intel-VT 及相關的處理器產品,從而拉開了 IA 架構虛擬化技術應用的新時代大幕。支持虛擬化技術的處理器帶有特別優化過的指令集來自動控制虛擬化過程,從而極大簡化 VMM 的設計,VMM 的性能也能獲得很大提升。其中 IA-32 處理器的虛擬化技術稱爲 VT-x,安騰處理器的虛擬化技術稱爲 VT-i。AMD 公司也推出了本身的虛擬化解決方案,稱爲 AMD-V。儘管 Intel-VT 和 AMD-V 並不徹底相同,可是基本思想和數據結構倒是類似的,本文只討論 Intel-VT-x 技術。html
VT-x 爲 IA 32 處理器增長了兩種操做模式:VMX root operation 和 VMX non-root operation。VMM 本身運行在 VMX root operation 模式,VMX non-root operation 模式則由 Guest OS 使用。兩種操做模式都支持 Ring 0 ~ Ring 3 這 4 個特權級,所以 VMM 和 Guest OS 均可以自由選擇它們所指望的運行級別。linux
這兩種操做模式能夠互相轉換。運行在 VMX root operation 模式下的 VMM 經過顯式調用 VMLAUNCH 或 VMRESUME 指令切換到 VMX non-root operation 模式,硬件自動加載 Guest OS的上下文,因而 Guest OS 得到運行,這種轉換稱爲 VM entry。Guest OS 運行過程當中遇到須要 VMM 處理的事件,例如外部中斷或缺頁異常,或者主動調用 VMCALL 指令調用 VMM 的服務的時候(與系統調用相似),硬件自動掛起 Guest OS,切換到 VMX root operation 模式,恢復 VMM 的運行,這種轉換稱爲 VM exit。VMX root operation 模式下軟件的行爲與在沒有 VT-x 技術的處理器上的行爲基本一致;而VMX non-root operation 模式則有很大不一樣,最主要的區別是此時運行某些指令或遇到某些事件時,發生 VM exit。數據結構
VMM 和 Guest OS 共享底層的處理器資源,所以硬件須要一個物理內存區域來自動保存或恢復彼此執行的上下文。這個區域稱爲虛擬機控制塊(VMCS),包括客戶機狀態區(Guest State Area),主機狀態區(Host State Area)和執行控制區。VM entry 時,硬件自動從客戶機狀態區加載 Guest OS 的上下文。並不須要保存 VMM 的上下文,緣由與中斷處理程序相似,由於 VMM 若是開始運行,就不會受到 Guest OS的干擾,只有 VMM 將工做完全處理完畢纔可能自行切換到 Guest OS。而 VMM 的下次運行必然是處理一個新的事件,所以每次 VMM entry 時, VMM 都從一個通用事件處理函數開始執行;VM exit 時,硬件自動將 Guest OS 的上下文保存在客戶機狀態區,從主機狀態區中加載 VMM 的通用事件處理函數的地址,VMM 開始執行。而執行控制區存放的則是能夠操控 VM entry 和 exit 的標誌位,例如標記哪些事件能夠致使 VM exit,VM entry 時準備自動給 Guest OS 「塞」入哪一種中斷等等。架構
客戶機狀態區和主機狀態區都應該包含部分物理寄存器的信息,例如控制寄存器 CR0,CR3,CR4;ESP 和 EIP(若是處理器支持 64 位擴展,則爲 RSP,RIP);CS,SS,DS,ES,FS,GS 等段寄存器及其描述項;TR,GDTR,IDTR 寄存器;IA32_SYSENTER_CS,IA32_SYSENTER_ESP,IA32_SYSENTER_EIP 和 IA32_PERF_GLOBAL_CTRL 等 MSR 寄存器。客戶機狀態區並不包括通用寄存器的內容,VMM 自行決定是否在 VM exit 的時候保存它們,從而提升了系統性能。客戶機狀態區還包括非物理寄存器的內容,好比一個 32 位的 Active State 值代表 Guest OS 執行時處理器所處的活躍狀態,若是正常執行指令就是處於 Active 狀態,若是觸發了三重故障(Triple Fault)或其它嚴重錯誤就處於 Shutdown 狀態,等等。函數
前文已經提過,執行控制區用於存放能夠操控 VM entry 和 VM exit 的標誌位,包括:性能
VMCS 還包括一組位圖以提供更好的適應性:優化
每次發生 VM exit時,硬件自動在 VMCS 中存入豐富的信息,方便 VMM 甄別事件的種類和緣由。VM entry 時,VMM 能夠方便地爲 Guest OS 注入事件(中斷和異常),由於 VMCS 中存有 Guest OS 的中斷描述表(IDT)的地址,所以硬件可以自動地調用 Guest OS 的處理程序。spa
更詳細的信息請參閱 Intel 開發手冊 [5]。設計