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