將這個(gè)概念應(yīng)用到計(jì)算機(jī)系統(tǒng)中可以讓不同用戶看到不同的單個(gè)系統(tǒng)(例如,一臺(tái)計(jì)算機(jī)可以同時(shí)運(yùn)行Linux 和 Microsoft Windows)。這通常稱為全虛擬化(full virtualization)。
虛擬化也可以使用更加復(fù)雜的格式,其中單個(gè)計(jì)算機(jī)看上去具有多個(gè)架構(gòu)(對(duì)于一個(gè)用戶來說,它是一個(gè)標(biāo)準(zhǔn)的 x86 平臺(tái);對(duì)于另外一個(gè)用戶來說,它是 IBM Power PC平臺(tái))。這種虛擬化形式通常被稱為 硬件仿真。
系統(tǒng)管理程序之上是客戶機(jī)操作系統(tǒng),也稱為虛擬機(jī)(VM)。這些 VM 都是一些相互隔離的操作系統(tǒng),將底層硬件平臺(tái)視為自己所有。但是實(shí)際上,是系統(tǒng)管理程序?yàn)樗鼈冎圃炝诉@種假象。
目前使用虛擬化解決方案的問題是,并非所有硬件都可以很好地支持虛擬化。較老的 x86 處理器根據(jù)執(zhí)行范圍對(duì)特定指令會(huì)產(chǎn)生不同結(jié)果。這就產(chǎn)生了一個(gè)問題,因?yàn)橄到y(tǒng)管理程序應(yīng)該只能在一個(gè)最受保護(hù)的范圍中執(zhí)行。由于這個(gè)原因,諸如 VMWare 之類的虛擬化解決方案會(huì)提前掃描要執(zhí)行的代碼,從而將這些指令替換為一些陷阱指令(trap instruction),這樣系統(tǒng)管理程序就可以正確地處理它們。Xen 可以支持一種協(xié)作的虛擬化方法,它不需要任何修改,因?yàn)榭蛻魴C(jī)知道自己正在進(jìn)行虛擬化,并已經(jīng)進(jìn)行了修改。KVM 會(huì)簡(jiǎn)單地忽略這個(gè)問題,如果您希望進(jìn)行虛擬化,就強(qiáng)制必須在更新的硬件上運(yùn)行。
虛擬化的類型
實(shí)現(xiàn)虛擬化的方法不止一種。實(shí)際上,有幾種方法都可以通過不同層次的抽象來實(shí)現(xiàn)相同的結(jié)果。本節(jié)將介紹 Linux 中常用的 3 種虛擬化方法,以及它們相應(yīng)的優(yōu)缺點(diǎn)。業(yè)界有時(shí)會(huì)使用不同的術(shù)語來描述相同的虛擬化方法。本文中使用的是最常用的術(shù)語,同時(shí)給出了其他術(shù)語以供參考。
硬件仿真
毫無疑問,最復(fù)雜的虛擬化實(shí)現(xiàn)技術(shù)就是硬件仿真。在這種方法中,可以在宿主系統(tǒng)上創(chuàng)建一個(gè)硬件 VM 來仿真所想要的硬件
正如您所能預(yù)見的一樣,使用硬件仿真的主要問題是速度會(huì)非常慢。由于每條指令都必須在底層硬件上進(jìn)行仿真,因此速度減慢 100 倍的情況也并不稀奇。若要實(shí)現(xiàn)高度保真的仿真,包括周期精度、所仿真的 CPU 管道以及緩存行為,實(shí)際速度差距甚至可能會(huì)達(dá)到 1000 倍之多。
硬件仿真也有自己的優(yōu)點(diǎn)。例如,使用硬件仿真,您可以在一個(gè) ARM 處理器主機(jī)上運(yùn)行為 PowerPC? 設(shè)計(jì)的操作系統(tǒng),而不需要任何修改。您甚至可以運(yùn)行多個(gè)虛擬機(jī),每個(gè)虛擬器仿真一個(gè)不同的處理器。