系統(tǒng)架構(gòu)設(shè)計筆記(104)—— 虛擬化

虛擬化( Virtualization )技術(shù)最早出現(xiàn)在 20 世紀(jì) 60 年代的 IBM 大型機系統(tǒng),在 20 世紀(jì) 70 年代的System3 70 系列中逐漸流行起來叮称,這些機器通過一種叫虛擬機監(jiān)控器( Virtual Machine Monitor 购撼, VMM )的程序在物理硬件之上生成許多可以運行獨立操作系統(tǒng)軟件的虛擬機( Virtual Machine )實例。隨著近年多核系統(tǒng) 危融、 集群 鞋怀、 網(wǎng)格甚至云計算的廣泛部署双泪,虛擬化技術(shù)在商業(yè)應(yīng)用上的優(yōu)勢日益體現(xiàn),不僅降低了 IT 成本密似,而且還增強了系統(tǒng)安全性和可靠性焙矛,虛擬化的概念也逐漸深入到人們?nèi)粘5墓ぷ髋c生活中。

虛擬化是一個廣義的術(shù)語残腌,對于不同的人來說可能意味著不同的東西村斟,這要取決他們所處的環(huán)境。在計算機科學(xué)領(lǐng)域中抛猫,虛擬化代表著對計算資源的抽象蟆盹,而不僅僅局限于虛擬機的概念。例如對物理內(nèi)存的抽象闺金,產(chǎn)生了虛擬內(nèi)存技術(shù)逾滥,使得應(yīng)用程序認(rèn)為其自身擁有連續(xù)可用的地址空間( Address Space ),而實際上败匹,應(yīng)用程序的代碼和數(shù)據(jù)可能被分隔成多個碎片頁或段寨昙,甚至被交換到磁盤 、 閃存等外部存儲器上掀亩,即使物理內(nèi)存不足舔哪,應(yīng)用程序也能順利執(zhí)行。

1 虛擬化技術(shù)的分類

虛擬化技術(shù)是一個非常廣的概念槽棍,所以其具體內(nèi)容可分成不同層面的幾大類型捉蚤。

1.1 平臺虛擬化

平臺虛擬化( Platform Virtualization )是針對計算機和操作系統(tǒng)的虛擬化。我們通常所說的虛擬化主要是指平臺虛擬化技術(shù)刹泄,通過使用控制程序( Control Program 外里,也稱為 Virtual Machine Monitor 或 Hypervisor ),隱藏特定計算平臺的實際物理特性特石,為用戶提供抽象的 盅蝗、 統(tǒng)一的 、 模擬的計算環(huán)境姆蘸。虛擬機中運行的操作系統(tǒng)稱為客戶機操作系統(tǒng)( Guest OS )墩莫,運行虛擬機監(jiān)控器的操作系統(tǒng)稱為主機操作系統(tǒng)( Host OS ),當(dāng)然某些虛擬機監(jiān)控器可以脫離操作系統(tǒng)直接運行在硬件之上(如 VMWARE 的 ESX 產(chǎn)品)逞敷。運行虛擬機的真實系統(tǒng)稱為主機系統(tǒng)狂秦。

hypervisor /?ha?p?rva?z?r/

平臺虛擬化技術(shù)又可以細(xì)分為如下幾個子類:

(1)全虛擬化

全虛擬化( Full Virtualization )是指虛擬機模擬了完整的底層硬件,包括處理器 推捐、 物理內(nèi)存 裂问、 時鐘 、 外設(shè)等,使得為原始硬件設(shè)計的操作系統(tǒng)或其他系統(tǒng)軟件完全不作任何修改就可以在虛擬機中運行堪簿。操作系統(tǒng)與真實硬件之間的交互可以看成是通過一個預(yù)先規(guī)定的硬件接口進(jìn)行的痊乾。

全虛擬化 VMM ( Virtual Machine Monitor )以完整模擬硬件的方式提供全部接口(同時還必須模擬特權(quán)指令的執(zhí)行過程)。舉例而言椭更, x86 體系結(jié)構(gòu)中哪审,對于操作系統(tǒng)切換進(jìn)程頁表的操作,真實硬件通過提供一個特權(quán) CR3 寄存器來實現(xiàn)該接口虑瀑,操作系統(tǒng)只需執(zhí)行 "mov pgtable 湿滓, %%cr3" 匯編指令即可。全虛擬化 VMM 必須完整地模擬該接口執(zhí)行的全過程舌狗。如果硬件不提供虛擬化的特殊支持叽奥,那么這個模擬過程將會十分復(fù)雜:一般而言, VMM 必須運行在最高優(yōu)先級來完全控制主機系統(tǒng)把夸,而 Guest OS 需要降級運行而线,從而不能執(zhí)行特權(quán)操作。當(dāng) Guest OS 執(zhí)行前面的特權(quán)匯編指令時恋日,主機系統(tǒng)產(chǎn)生異常( General Protection Exception )膀篮,執(zhí)行控制權(quán)重新從 Guest OS 轉(zhuǎn)到 VMM 手中。 VMM 事先分配一個變量作為影子 CR3 寄存器給 Guest OS 岂膳,將 pgtable 代表的客戶機物理地址( Guest Physical Address )填入影子 CR3 寄存器誓竿,然后 VMM 還需要 pgtable 翻譯成主機物理地址( Host Physical Address )并填入物理 CR3 寄存器,最后返回到 Guest OS 中谈截。隨后 VMM 還將處理復(fù)雜的 Guest OS 缺頁異常( Page Fault )筷屡。

比較著名的全虛擬化 VMM 有Microsoft Virtual PC 、 VMware Workstation 簸喂、 SUNVirtual Box 毙死、 Parallels Desktopfor Mac和 QEMU。

(2)超虛擬化

超虛擬化( Paravirtualization )是一種修改 Guest OS 部分訪問特權(quán)狀態(tài)的代碼以便直接與 VMM 交互的技術(shù)喻鳄。在超虛擬化虛擬機中扼倘,部分硬件接口以軟件的形式提供給客戶機操作系統(tǒng),這可以通過 Hypercall ( VMM 提供給 Guest OS 的直接調(diào)用除呵,與系統(tǒng)調(diào)用類似)的方式來提供再菊。例如, Guest OS 把切換頁表的代碼修改為調(diào)用 Hypercall 來直接完成修改影子 CR3 寄存器和翻譯地址的工作颜曾。由于不需要產(chǎn)生額外的異常和模擬部分硬件執(zhí)行流程纠拔,超 虛擬化可以大幅度提高性能,比較著名的 VMM 有 Denali泛豪、Xen稠诲。

hyper- /?ha?p?r/
Over; above; beyond;

(3)硬件輔助虛擬化

硬件輔助虛擬化( Hardware-Assisted Virtualization )是指借助硬件(主要是主機處理器)的支持來實現(xiàn)高效的全虛擬化侦鹏。例如有了 Intel-VT 技術(shù)的支持, Guest OS 和 VMM 的執(zhí)行環(huán)境自動地完全隔離開來臀叙, Guest OS 有自己的 “ 全套寄存器 ” 种柑,可以直接運行在最高級別。因此在上面的例子中匹耕, Guest OS 能夠執(zhí)行修改頁表的匯編指令。 Intel-VT 和 AMD-V 是目前 x86 體系結(jié)構(gòu)上可用的兩種硬件輔助虛擬化技術(shù)荠雕。

(4)部分虛擬化

部分虛擬化( Partial Virtualization )中稳其, VMM 只模擬部分底層硬件,因此客戶機操作系統(tǒng)不作修改是無法在虛擬機中運行的炸卑,其他程序可能也需要進(jìn)行修改既鞠。在歷史上,部分虛擬化是通往全虛擬化道路上的重要里程碑盖文,最早出現(xiàn)在第一代的分時系統(tǒng) CTSS 和 IBMM44/44X 實驗性的分頁系統(tǒng)中嘱蛋。

(5)操作系統(tǒng)級虛擬化

在傳統(tǒng)操作系統(tǒng)中,所有用戶的進(jìn)程本質(zhì)上是在同一個操作系統(tǒng)的實例中運行五续,因此內(nèi)核或應(yīng)用程序的缺陷可能影響到其他進(jìn)程洒敏。操作系統(tǒng)級虛擬化( Operating System Level Virtualization )是一種在服務(wù)器操作系統(tǒng)中使用的輕量級的虛擬化技術(shù),內(nèi)核通過創(chuàng)建多個虛擬的操作系統(tǒng)實例(內(nèi)核和庫)來隔離不同的進(jìn)程疙驾,不同實例中的進(jìn)程完全不了解對方的存在凶伙。比較著名的有 Solaris Container、FreeBSD Jail 和 OpenVZ 等它碎。

1.2 資源虛擬化

資源虛擬化(Resource Virtualization)函荣,針對特定的系統(tǒng)資源的虛擬化,比如內(nèi)存扳肛、存儲傻挂、 網(wǎng)絡(luò)資源等。

1.3 應(yīng)用程序虛擬化

應(yīng)用程序虛擬化( Application Virtualization )挖息,包括仿真 金拒、 模擬 、 解釋技術(shù)等旋讹。雖然上面對虛擬化的分類已較為精確殖蚕,但這種分類并不是絕對的,一個優(yōu)秀的虛擬化軟件往往融合了多項技術(shù)沉迹。例如 VMware Workstation 是一個著名的全虛擬化的 VMM 睦疫,但是它使用了一種被稱為動態(tài)二進(jìn)制翻譯的技術(shù)把對特權(quán)狀態(tài)的訪問轉(zhuǎn)換成對影子狀態(tài)的操作,從而避免了低效的 Trap-And-Emulate 的處理方式鞭呕,這與超虛擬化相似蛤育,只不過超虛擬化是靜態(tài)地修改程序代碼。

對于超虛擬化而言,如果能利用硬件特性瓦糕,那么虛擬機的管理將會大大簡化底洗,同時還能保持較高的性能。

2 虛擬化的模式

虛擬化可以通過很多方法來證實咕娄。它不是一個單獨的實體亥揖,而是一組模式和技術(shù)的集合,這些技術(shù)提供了支持資源的邏輯表示所需的功能圣勒,以及通過標(biāo)準(zhǔn)接口將其呈現(xiàn)給這些資源的消費者所需的功能费变。這些模式本身都是前面介紹過的各種不同虛擬形式的重復(fù)出現(xiàn)。

2.1 單一資源多個邏輯表示

這種模式是虛擬化最廣泛使用的模式之一圣贸。它只包含一個物理資源挚歧,但是它向消費者呈現(xiàn)的邏輯表示卻仿佛它包含多個資源一樣。消費者與這個虛擬資源進(jìn)行交互時就仿佛自己是唯一的消費者一樣吁峻,而不會考慮他正在與其他消費者一起共享資源滑负。

2.2 多個資源單一邏輯表示

這種模式包含了多個組合資源,以便將這些資源表示為提供單一接口的單個邏輯表示形式用含。在利用多個功能不太強大的資源來創(chuàng)建功能強大且豐富的虛擬資源時矮慕,這是一種非常有用的模式。存儲虛擬化就是這種模式的一個例子啄骇。在服務(wù)器方面凡傅,集群技術(shù)可以提供這樣的幻想:消費者只與一個系統(tǒng)(頭節(jié)點)進(jìn)行交互,而集群事實上可以包含很多的處理器或節(jié)點肠缔。實際上夏跷,這就是從 IT 技術(shù)設(shè)施的角度看到的網(wǎng)格可以實現(xiàn)的功能。

2.3 在多個資源之間提供單一邏輯表示

這種模式包括一個以多個可用資源之一的形式表示的虛擬資源明未。虛擬資源會根據(jù)指定的條件來選擇一個物理資源實現(xiàn)槽华,例如資源的利用 、 響應(yīng)時間或鄰近程度趟妥。盡管這種模式與上一種模式非常類似猫态,但是它們之間有一些細(xì)微的差別。首先披摄,每個物理資源都是一個完整的副本亲雪,它們不會在邏輯表示層上聚集在一起。其次疚膊,每個物理資源都可以提供邏輯表示所需要的所有功能义辕,而不是像前一種模式那樣只能提供部分功能。這種模式的一個常見例子是使用應(yīng)用程序容器來均衡任務(wù)負(fù)載寓盗。在將請求或事務(wù)提交給應(yīng)用程序或服務(wù)時灌砖,消費者并不關(guān)心到底是幾個容器中執(zhí)行的哪一個應(yīng)用程序的副本為請求或事務(wù)提供服務(wù)璧函。消費者只是希望請求或事務(wù)得到處理。

2.4 單個資源單一邏輯表示

這是用來表示單個資源的一種簡單模式基显,就仿佛它是別的什么資源一樣蘸吓。啟用 Web 的企業(yè)后臺應(yīng)用程序就是一個常見的例子。在這種情況下撩幽,我們不是修改后臺的應(yīng)用程序库继,而是創(chuàng)建一個前端來表示 Web 界面,它會映射到應(yīng)用程序接口中窜醉。這種模式允許通過對后臺應(yīng)用程序進(jìn)行最少的修改(或根本不加任何修改)來重用一些基本的功能制跟。也可以根據(jù)無法修改的組件,使用相同的模式構(gòu)建服務(wù)酱虎。

2.5 復(fù)合或分層虛擬

這種模式是前面介紹的一種或多種模式的組合,它使用物理資源來提供豐富的功能集擂涛。信息虛擬化是這種模式一個很好的例子读串。它提供了底層所需要的功能,這些功能用于管理對資源 撒妈、 包含有關(guān)如何處理和使用信息的元數(shù)據(jù)恢暖,以及對信息進(jìn)行處理的操作的全局命名和引用。例如 Open Grid Services Architecture ( OGSA )或者 Grid Computing Components 狰右,實際上都是虛擬化的組合或虛擬化的不同層次杰捂。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棋蚌,隨后出現(xiàn)的幾起案子嫁佳,更是在濱河造成了極大的恐慌,老刑警劉巖谷暮,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒿往,死亡現(xiàn)場離奇詭異,居然都是意外死亡湿弦,警方通過查閱死者的電腦和手機瓤漏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颊埃,“玉大人蔬充,你說我怎么就攤上這事“嗬” “怎么了饥漫?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長罗标。 經(jīng)常有香客問我趾浅,道長愕提,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任皿哨,我火速辦了婚禮浅侨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘证膨。我一直安慰自己如输,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布央勒。 她就那樣靜靜地躺著不见,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崔步。 梳的紋絲不亂的頭發(fā)上稳吮,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音井濒,去河邊找鬼灶似。 笑死,一個胖子當(dāng)著我的面吹牛瑞你,可吹牛的內(nèi)容都是我干的酪惭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼者甲,長吁一口氣:“原來是場噩夢啊……” “哼春感!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虏缸,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鲫懒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刽辙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刀疙,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年扫倡,在試婚紗的時候發(fā)現(xiàn)自己被綠了谦秧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡撵溃,死狀恐怖疚鲤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缘挑,我是刑警寧澤集歇,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站语淘,受9級特大地震影響诲宇,放射性物質(zhì)發(fā)生泄漏际歼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一姑蓝、第九天 我趴在偏房一處隱蔽的房頂上張望鹅心。 院中可真熱鬧,春花似錦纺荧、人聲如沸旭愧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽输枯。三九已至,卻和暖如春占贫,著一層夾襖步出監(jiān)牢的瞬間桃熄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工型奥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞳收,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓桩引,卻偏偏與公主長得像,于是被迫代替她去往敵國和親收夸。 傳聞我的和親對象是個殘疾皇子坑匠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355