1.前言
Virtualization(虛擬化)是讓公開(kāi)的虛擬資源等同于被虛擬化的底層物理資源。虛擬化在各個(gè)領(lǐng)域應(yīng)用很廣泛,不局限于計(jì)算機(jī)科學(xué)領(lǐng)域。無(wú)論是在硬件、軟件還是在嵌入式子系統(tǒng)中,虛擬化總是使用或組合三種簡(jiǎn)單的技術(shù)來(lái)實(shí)現(xiàn)的:多路復(fù)用(Multiplexing)、聚合(Aggregation)和模擬(Emulation)。
2.多路復(fù)用
多路復(fù)用目的是在多個(gè)虛擬實(shí)體之間復(fù)用物理資源。有兩種類型的多路復(fù)用:空間復(fù)用和時(shí)間復(fù)用。
通過(guò)空間復(fù)用,物理資源(在空間上)被劃分為多個(gè)虛擬實(shí)體。例如操作系統(tǒng)跨不同地址空間對(duì)物理內(nèi)存的不同頁(yè)面進(jìn)行多路復(fù)用。為了實(shí)現(xiàn)這一目標(biāo),操作系統(tǒng)要統(tǒng)一管理虛擬到物理的地址映射,并依賴于MMU提供的體系結(jié)構(gòu)支持。
通過(guò)時(shí)間復(fù)用,可以在虛擬實(shí)體之間分時(shí)調(diào)度相同的物理資源。例如,操作系統(tǒng)調(diào)度器將CPU內(nèi)核和硬件線程多路復(fù)用到一組可運(yùn)行的進(jìn)程中。通過(guò)上下文切換操作將處理器的寄存器文件的狀態(tài)保存在與傳出進(jìn)程相關(guān)聯(lián)的內(nèi)存中,然后從與傳入進(jìn)程相關(guān)聯(lián)的內(nèi)存位置恢復(fù)該寄存器文件的狀態(tài)。
圖1 多路復(fù)用
3.聚合
聚合所做的與多路復(fù)用恰恰相反,它獲取多個(gè)物理資源,把它們組合起來(lái),并使它們看起來(lái)像是單個(gè)抽象。例如,RAID控制器將多個(gè)磁盤(pán)聚合成單個(gè)卷。在配置完成后,RAID控制器將確保對(duì)卷的所有讀寫(xiě)操作都恰當(dāng)分配到RAID組的各個(gè)磁盤(pán)上。
這樣的話,操作系統(tǒng)將文件系統(tǒng)格式化到卷上,就不必?fù)?dān)心布局和編碼的細(xì)節(jié)。在不同的域中,處理器的內(nèi)存控制器將多個(gè)DIMM的容量聚合到一個(gè)物理地址空間中,然后由操作系統(tǒng)統(tǒng)一管理。
圖2?聚合
4.模擬
模擬依賴于軟件中的間接層來(lái)搭建與物理設(shè)備相對(duì)應(yīng)的虛擬化資源或設(shè)備,即使該虛擬資源實(shí)際不存在于當(dāng)前的計(jì)算機(jī)物理系統(tǒng)中??缂軜?gòu)模擬器是在一個(gè)處理器架構(gòu)上運(yùn)行另一個(gè)處理器架構(gòu),例如,Apple Rosetta在x86計(jì)算機(jī)上模擬PowerPC處理器以實(shí)現(xiàn)向后兼容,比如在圖(c)中X是x86,Y是PowerPC。
圖3?模擬
5.結(jié)語(yǔ)
多路復(fù)用、聚合和模擬可以自然地組合在一起,形成各種形式的虛擬化實(shí)現(xiàn)。特別是幾乎所有的虛擬機(jī)管理程序(Hypervisor)都是多路復(fù)用和模擬的組合。