虛擬化是一個廣義的術語,在計算機方面通常是指計算元件在虛擬的基礎上而不是真實的基礎上運行。虛擬化技術可以擴大硬件的容量,簡化軟件的重新配置過程。CPU的虛擬化技術可以單CPU模擬多CPU并行,允許一個平臺同時運行多個操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
虛擬化技術與多任務以及超線程技術是完全不同的。多任務是指在一個操作系統中多個程序同時并行運行,而在虛擬化技術中,則可以同時運行多個操作系統,而且每一個操作系統中都有多個程序運行,每一個操作系統都運行在一個虛擬的CPU或者是虛擬主機上;而超線程技術只是單CPU模擬雙CPU來平衡程序運行性能,這兩個模擬出來的CPU是不能分離的,只能協同工作。
虛擬化技術也與VMware Workstation等同樣能達到虛擬效果的軟件不同,是一個巨大的技術進步,具體表現在減少軟件虛擬機相關開銷和支持更廣泛的操作系統方面。
純軟件虛擬化解決方案存在很多限制。“客戶”操作系統很多情況下是通過VMM(Virtual Machine Monitor,虛擬機監視器)來與硬件進行通信,由VMM來決定其對系統上所有虛擬機的訪問。在純軟件虛擬化解決方案中,VMM在軟件套件中的位置是傳統意義上操作系統所處的位置,而虛擬化技術將各種資源虛擬出多臺主機操作系統的位置是傳統意義上應用程序所處的位置。
虛擬化技術是一套解決方案。完整的情況需要CPU、主板芯片組、BIOS和軟件的支持,例如VMM軟件或者某些操作系統本身。即使只是CPU支持虛擬化技術,在配合VMM的軟件情況下,也會比完全不支持虛擬化技術的系統有更好的性能。
兩大CPU巨頭Intel和AMD都想方設法在虛擬化領域中占得先機,但是AMD的虛擬化技術在時間上要比Intel落后幾個月。Intel自2005年末開始便在其處理器產品線中推廣應用Intel Virtualization Technology(Intel VT)虛擬化技術。
而AMD方面也已經發布了支持AMD Virtualization Technology(AMD VT)虛擬化技術的一系列處理器產品,包括Socket S1接口的Turion 64 X2系列以及Socket AM2接口的Athlon 64 X2系列和Athlon 64 FX系列等等,并且絕大多數的AMD下一代主流處理器,包括即將發布的Socket F接口的Opteron都將支持AMD VT虛擬化技術。
虛擬機是對真實計算環境的抽象和模擬,VMM 需要為每個虛擬機分配一套數據結構來管理它們狀態,包括虛擬處理器的全套寄存器,物理內存的使用情況,虛擬設備的狀態等等。VMM 調度虛擬機時,將其部分狀態恢復到主機系統中。并非所有的狀態都需要恢復,例如主機 CR3 寄存器中存放的是 VMM 設置的頁表物理地址,而不是 Guest OS 設置的值。主機處理器直接運行 Guest OS 的機器指令,由于 Guest OS運行在低特權級別,當訪問主機系統的特權狀態(如寫 GDT寄存器)時,權限不足導致主機處理器產生異常,將運行權自動交還給 VMM。此外,外部中斷的到來也會導致 VMM 的運行。
VMM 可能需要先將 該虛擬機的當前狀態寫回到狀態數據結構中,分析虛擬機被掛起的原因,然后代表 Guest OS 執行相應的特權操作。最簡單的情況,如Guest OS 對 CR3 寄存器的修改,只需要更新虛擬機的狀態數據結構即可。一般而言,大部分情況下,VMM 需要經過復雜的流程才能完成原本簡單的操作。最后 VMM 將運行權還給 Guest OS,Guest OS 從上次被中斷的地方繼續執行,或處理 VMM “塞”入的虛擬中斷和異常。這種經典的虛擬機運行方式被稱為 Trap-And-Emulate,虛擬機對于 Guest OS 完全透明,Guest OS 不需要任何修改,但是 VMM 的設計會比較復雜,系統整體性能受到明顯的損害。