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