1. 抽象與接口
管理計算機(jī)系統(tǒng)復(fù)雜性的關(guān)鍵是通過一些定義明確的接口灵汪,把計算機(jī)系統(tǒng)劃分成不同的抽象層次杜秸。抽象層次允許忽略或簡化系統(tǒng)設(shè)計的底層實現(xiàn)細(xì)節(jié),從而簡化高層組件的設(shè)計么介。
明確的接口可以分解計算機(jī)的設(shè)計任務(wù)罪治,使得硬件和軟件設(shè)計能夠或多或少的獨立開展工作丽声。指令集就是這樣一個接口。例如觉义,Intel和AMD的設(shè)計工程師開發(fā)實現(xiàn)IA-32指令集(x86)的微處理器雁社,同時微軟的軟件工程師開發(fā)把高級語言映射到該指令集的編譯器。只要這兩個設(shè)計小組都能夠遵從該指令集的規(guī)范定義晒骇,編譯好的軟件就可以在由IA-32處理器組成的機(jī)器上正確執(zhí)行霉撵。操作系統(tǒng)接口被定義為一組函數(shù)調(diào)用的集合,是計算機(jī)系統(tǒng)中另一個重要的標(biāo)準(zhǔn)化接口厉碟。
2. 虛擬化
當(dāng)一個系統(tǒng)(或子系統(tǒng))喊巍,例如處理器,存儲器或IO設(shè)備被虛擬化箍鼓,它的接口和所有通過接口可見的資源都被映射到實現(xiàn)它的真實系統(tǒng)的接口和資源上崭参。從而,真實系統(tǒng)可以表現(xiàn)為一個不同的虛擬系統(tǒng)或多重虛擬系統(tǒng)的集合款咖。
形式上何暮,虛擬化是構(gòu)建一個將虛擬的客戶系統(tǒng)映射到真實的主機(jī)系統(tǒng)上的同態(tài)奄喂。這個同態(tài)將客戶機(jī)的狀態(tài)映射為主機(jī)的狀態(tài),對于修改客戶機(jī)狀態(tài)的操作序列海洼,在主機(jī)上也有相應(yīng)的操作序列跨新,在主機(jī)上執(zhí)行對主機(jī)狀態(tài)等價的修改。
雖然這樣的同態(tài)可以同時用來描述虛擬化和抽象坏逢,但我們要加以區(qū)分:虛擬化不同于抽象域帐,虛擬化不需要隱藏細(xì)節(jié);虛擬系統(tǒng)的細(xì)節(jié)通常與底層真是系統(tǒng)的細(xì)節(jié)相同是整。
3. 虛擬機(jī)
虛擬機(jī)(VM)通過在真實機(jī)器上增加一層軟件來支持所需實現(xiàn)的虛擬機(jī)體系結(jié)構(gòu)肖揣。從發(fā)展趨勢上說,對虛擬機(jī)的討論也就是從廣義上對計算機(jī)體系結(jié)構(gòu)的討論浮入。虛擬機(jī)通常是連接體系結(jié)構(gòu)邊界的紐帶龙优,構(gòu)建虛擬機(jī)要考慮的一個主要問題是虛擬機(jī)在實現(xiàn)體系結(jié)構(gòu)接口時的保真性。
形式上事秀,體系結(jié)構(gòu)通常由接口規(guī)范和接口操縱的資源的邏輯行為來描述彤断。術(shù)語“實現(xiàn)”則用于描述具體的體系結(jié)構(gòu)。每種體系結(jié)構(gòu)都可以有多種實現(xiàn)易迹,每種實現(xiàn)都可以有不同的特征宰衙,如高性能和低功耗的實現(xiàn)。
指令集體系結(jié)構(gòu)(instruction set architecture赴蝇,ISA)菩浙,是軟件和硬件的邊界,有兩個部分在定義虛擬機(jī)時是很重要的句伶。第一部分是指令集體系結(jié)構(gòu)中應(yīng)用程序可見的部分劲蜻,成為用戶指令集(user ISA)。第二部分是只有像操作系統(tǒng)這樣的超級用戶軟件才能看到的部分考余,負(fù)責(zé)管理硬件資源先嬉,這部分稱為系統(tǒng)指令集(system ISA)。
指令集以外接口的例子楚堤,應(yīng)用二進(jìn)制接口(ABI)疫蔓,應(yīng)用程序接口(API)。
ABI為程序提供了訪問硬件資源和使用系統(tǒng)服務(wù)的能力身冬,包括兩個主要組件衅胀。第一個組件是所有用戶指令的集合,第二個組件是系統(tǒng)調(diào)用接口酥筝。ABI中不包括系統(tǒng)指令滚躯,所有應(yīng)用程序通過系統(tǒng)調(diào)用接口調(diào)用操作系統(tǒng),使操作系統(tǒng)可以為用戶程序執(zhí)行一些功能。編譯到特定ABI的程序二進(jìn)制代碼不需要修改就可以在帶相同指令集的操作系統(tǒng)的機(jī)器上運行掸掏。
API通常用高級語言(High-level Language: HLL)定義茁影。API的一個關(guān)鍵部分是標(biāo)準(zhǔn)庫,應(yīng)用程序需要通過庫調(diào)用系統(tǒng)中各種可用的服務(wù)丧凤,包括操作系統(tǒng)提供的服務(wù)募闲。API通常在源代碼級上定義,使得被寫入API的應(yīng)用程序很容易(通過再編譯)移植到支持相同API的系統(tǒng)上愿待。
4. 機(jī)器
要理解“虛擬機(jī)”浩螺,首先要討論“機(jī)器”的定義。
從執(zhí)行用戶程序的進(jìn)程角度看呼盆,“機(jī)器”由分配給進(jìn)程的邏輯內(nèi)存地址空間年扩,用戶級寄存器和允許執(zhí)行進(jìn)程代碼的指令組成。機(jī)器的IO部分只能通過操作系統(tǒng)看到访圃,進(jìn)程與IO系統(tǒng)交互唯一的方法是通過操作系統(tǒng)調(diào)用,通常是將系統(tǒng)庫函數(shù)作為進(jìn)程的一部分來執(zhí)行相嵌⊥仁保總的來說,從進(jìn)程的角度來看饭宾,機(jī)器由操作系統(tǒng)與底層的用戶級硬件組合組合而成批糟,ABI提供了進(jìn)程與機(jī)器之間的接口。
從操作系統(tǒng)的角度來看看铆,整個系統(tǒng)由底層機(jī)器支撐徽鼎。一個系統(tǒng)是一個完整的運行環(huán)境,可以同時支持許多可能屬于不同用戶的進(jìn)程弹惦,所有進(jìn)程共享一個文件系統(tǒng)和其他IO資源否淤。進(jìn)程不斷的進(jìn)進(jìn)出出,系統(tǒng)環(huán)境始終存在(偶爾會重啟)棠隐。系統(tǒng)為進(jìn)程分配物理內(nèi)存和IO資源石抡,允許進(jìn)程通過操作系統(tǒng)與分配給他們的資源交互,操作系統(tǒng)是系統(tǒng)的一部分助泽。因此啰扛,從系統(tǒng)的角度看,機(jī)器僅由底層硬件實現(xiàn)嗡贺,指令集提供了系統(tǒng)和機(jī)器之間的接口隐解。
術(shù)語上,我們通常將底層平臺稱為主機(jī)诫睬,將運行在虛擬機(jī)環(huán)境上的軟件稱為客戶機(jī)煞茫,與虛擬機(jī)相對應(yīng)的真實平臺,即虛擬機(jī)要仿真的真實機(jī)器,稱為本地機(jī)溜嗜。
5. 進(jìn)程級和系統(tǒng)級虛擬機(jī)
對機(jī)器可以從進(jìn)程和系統(tǒng)的角度去理解宵膨,相應(yīng)的也就有進(jìn)程級和系統(tǒng)級虛擬機(jī)。
一臺進(jìn)程虛擬機(jī)能夠支持一個獨立的進(jìn)程炸宵,在進(jìn)程虛擬機(jī)中辟躏,虛擬軟件放在ABI接口處,操作系統(tǒng)和硬件結(jié)合部分的上層土全,虛擬軟件同時仿真用戶級指令和操作系統(tǒng)調(diào)用捎琐。在進(jìn)程虛擬機(jī)中,虛擬軟件經(jīng)常被稱為運行時裹匙。進(jìn)程級虛擬機(jī)為用戶應(yīng)用程序提供虛擬的ABI環(huán)境瑞凑。
系統(tǒng)虛擬機(jī)提供完整的系統(tǒng)環(huán)境,這個環(huán)境可以支持操作系統(tǒng)及其潛在的許多用戶進(jìn)程概页。它使客戶操作系統(tǒng)能夠訪問底層的硬件資源籽御,包括網(wǎng)絡(luò),IO惰匙,以及臺式機(jī)上的顯示和圖形用戶界面技掏。在系統(tǒng)虛擬機(jī)中,虛擬軟件常常被稱為虛擬機(jī)監(jiān)視器(Virtual Machine Monitor: VMM)项鬼。系統(tǒng)虛擬機(jī)提供一個完整的系統(tǒng)環(huán)境哑梳,在這個環(huán)境里屬于多個用戶的許多進(jìn)程可以共存。
6. 分類
為了把各種虛擬機(jī)放在一個視角中討論绘盟,把它們的共同實現(xiàn)點組織起來鸠真,我們引入了如圖所示的分類方法。首先龄毡,將虛擬機(jī)分為兩個主要類型吠卷,進(jìn)程虛擬機(jī)和系統(tǒng)虛擬機(jī)。第一類虛擬機(jī)支持一個ABI——用戶指令加上系統(tǒng)調(diào)用稚虎;第二類支持完整的ISA——包括用戶指令和系統(tǒng)指令撤嫩。在這個分類法中更細(xì)的劃分基于客戶機(jī)與主機(jī)是否使用了相同的ISA。