偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Linux 虛擬化方法、架構(gòu)和實(shí)現(xiàn)

系統(tǒng) Linux
虛擬化的含義豐富,應(yīng)用廣泛。服務(wù)器虛擬化是目前一個(gè)主要的虛擬化技術(shù),即在一個(gè)宿主計(jì)算機(jī)上提供多個(gè)獨(dú)立操作系統(tǒng)。本文將探索虛擬化背后的思想,然后討論實(shí)現(xiàn)虛擬化的一些技術(shù)。我們還將了解現(xiàn)有的其他一些虛擬化技術(shù),例如 Linux 上操作系統(tǒng)的虛擬化。

虛擬化的含義豐富,應(yīng)用廣泛。服務(wù)器虛擬化是目前一個(gè)主要的虛擬化技術(shù),即在一個(gè)宿主計(jì)算機(jī)上提供多個(gè)獨(dú)立操作系統(tǒng)。本文將探索虛擬化背后的思想,然后討論實(shí)現(xiàn)虛擬化的一些技術(shù)。我們還將了解現(xiàn)有的其他一些虛擬化技術(shù),例如 Linux 上操作系統(tǒng)的虛擬化。

進(jìn)行虛擬化 就是要將某種形式的東西以另外一種形式呈現(xiàn)出來(lái)。對(duì)計(jì)算機(jī)進(jìn)行虛擬化就是要將計(jì)算機(jī)以多臺(tái)計(jì)算機(jī)或一臺(tái)完全不同的計(jì)算機(jī)的形式呈現(xiàn)出來(lái)。

虛擬化也可以將多臺(tái)計(jì)算機(jī)組合成一臺(tái)計(jì)算機(jī)的形式呈現(xiàn)出來(lái)。這通常稱為服務(wù)器聚合或網(wǎng)格計(jì)算。

下面讓我們首先來(lái)看一下虛擬化的起源。

虛擬化的歷史

虛擬化并不是什么新主題;實(shí)際上,它的存在已經(jīng)超過(guò) 40 年了。虛擬化技術(shù)最早的一些用法包括 IBM? 7044、麻省理工學(xué)院(MIT)在 IBM 704 上開(kāi)發(fā)的 CTSS(Compatible Time Sharing System)以及曼徹斯特大學(xué)的 Atlas 項(xiàng)目(世界上最早的超級(jí)計(jì)算機(jī)之一),這些都是請(qǐng)求頁(yè)面調(diào)度和監(jiān)管進(jìn)程調(diào)用的先驅(qū)。

硬件虛擬化

IBM 早在 20 世紀(jì) 60 年代開(kāi)發(fā) System/360? Model 67 大型機(jī)時(shí)就認(rèn)識(shí)到了虛擬化的重要性。Model 67 通過(guò) VMM(Virtual Machine Monitor)對(duì)所有的硬件接口都進(jìn)行了虛擬化。在早期計(jì)算中,操作系統(tǒng)被稱為 supervisor。能夠在其他操作系統(tǒng)上運(yùn)行的操作系統(tǒng)被稱為 hypervisor(這個(gè)術(shù)語(yǔ)是在 20 世紀(jì) 70 年代出現(xiàn)的)。

VMM 可以直接在底層硬件上運(yùn)行,允許運(yùn)行多個(gè)虛擬機(jī)(VM)。每個(gè) VM 都可以運(yùn)行一個(gè)自己私有操作系統(tǒng)的實(shí)例 -- 在早些時(shí)候,這稱為 CMS(或 Conversational Monitor System)。之后 VM 繼續(xù)發(fā)展,現(xiàn)在您可以在 System z9? 大型機(jī)上發(fā)現(xiàn) VM。這提供了很好的向后兼容性,甚至是對(duì) System/360 產(chǎn)品線的兼容性。

處理器虛擬化

虛擬化早期的另外一種用法(在本例中是對(duì)處理器的仿真)是 P-code(或偽碼)機(jī)。P-code 是一種機(jī)器語(yǔ)言,運(yùn)行于虛擬機(jī)而不是實(shí)際硬件。P-code 早在 20 世紀(jì) 70 年代就已在加州大學(xué)圣地亞哥分校(UCSD)Pascal 系統(tǒng)上頗有名氣了,它將 Pascal 程序編譯成 P-code,然后在一個(gè) P-code 虛擬機(jī)上運(yùn)行。這就使 P-code 程序具有了高度的可移植性,而且,只要有可用的 P-code 虛擬機(jī),P-code 程序就可以運(yùn)行。

20 世紀(jì) 60 年代對(duì) BCPL(Basic Combined Programming Language)的設(shè)計(jì)中也采用了相同的概念,C 語(yǔ)言即由 BCPL 發(fā)展而來(lái)。在這種用法中,編譯器會(huì)將 BCPL 代碼編譯成稱為 O-code 的中間機(jī)器代碼。接下來(lái)的第二個(gè)步驟是將 O-code 編譯成目標(biāo)機(jī)器的原始語(yǔ)言?,F(xiàn)代編譯器所使用的這種模型為將編譯器移植到新目標(biāo)體系結(jié)構(gòu)上提供了很大的靈活性(通過(guò)一種中間語(yǔ)言將前端和后端分隔開(kāi)來(lái))。

指令集虛擬化

虛擬化最新的發(fā)展稱為指令集虛擬化,或者二進(jìn)制轉(zhuǎn)換。在這種模型中,虛擬指令集被轉(zhuǎn)換成底層硬件的物理指令集,這個(gè)過(guò)程通常都是動(dòng)態(tài)的。當(dāng)代碼執(zhí)行時(shí),就會(huì)對(duì)代碼的某個(gè)段進(jìn)行轉(zhuǎn)換。如果出現(xiàn)分支情況,就會(huì)導(dǎo)入新代碼集并進(jìn)行轉(zhuǎn)換。這使它與緩存操作非常類似,后者是將指令塊從內(nèi)存移動(dòng)到本地快速緩存中執(zhí)行。

這種模型最近在 Transmeta 設(shè)計(jì)的 Crusoe 中央處理單元(CPU)中得到了使用。二進(jìn)制轉(zhuǎn)換由 Code Morphing 的專利技術(shù)實(shí)現(xiàn)。類似的一個(gè)例子是完全虛擬化解決方案通過(guò)運(yùn)行時(shí)代碼掃描來(lái)查找和重定向特權(quán)指令(用來(lái)解決特定處理器指令集的一些問(wèn)題)。

#p#

虛擬化的類型

實(shí)現(xiàn)虛擬化的方法不止一種。實(shí)際上,有幾種方法都可以通過(guò)不同層次的抽象來(lái)實(shí)現(xiàn)相同的結(jié)果。本節(jié)將介紹 Linux 中常用的 3 種虛擬化方法,以及它們相應(yīng)的優(yōu)缺點(diǎn)。業(yè)界有時(shí)會(huì)使用不同的術(shù)語(yǔ)來(lái)描述相同的虛擬化方法。本文中使用的是最常用的術(shù)語(yǔ),同時(shí)給出了其他術(shù)語(yǔ)以供參考。

硬件仿真

毫無(wú)疑問(wèn),最復(fù)雜的虛擬化實(shí)現(xiàn)技術(shù)就是硬件仿真。在這種方法中,可以在宿主系統(tǒng)上創(chuàng)建一個(gè)硬件 VM 來(lái)仿真所想要的硬件,如圖 1 所示。

 圖 1. 硬件仿真使用 VM 來(lái)模擬所需要的硬件

正如您所能預(yù)見(jiàn)的一樣,使用硬件仿真的主要問(wèn)題是速度會(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è)不同的處理器。

完全虛擬化

完全虛擬化(full virtualization),也稱為原始虛擬化,是另外一種虛擬化方法。這種模型使用一個(gè)虛擬機(jī),它在客戶操作系統(tǒng)和原始硬件之間進(jìn)行協(xié)調(diào)(參見(jiàn)圖 2)。"協(xié)調(diào)"在這里是一個(gè)關(guān)鍵,因?yàn)?VMM 在客戶操作系統(tǒng)和裸硬件之間提供協(xié)調(diào)。特定受保護(hù)的指令必須被捕獲下來(lái)并在 hypervisor 中進(jìn)行處理,因?yàn)檫@些底層硬件并不由操作系統(tǒng)所擁有,而是由操作系統(tǒng)通過(guò) hypervisor 共享。

 圖 2. 完全虛擬化使用 hypervisor 來(lái)共享底層硬件

雖然完全虛擬化的速度比硬件仿真的速度要快,但是其性能要低于裸硬件,因?yàn)橹虚g經(jīng)過(guò)了 hypervisor 的協(xié)調(diào)過(guò)程。完全虛擬化的最大優(yōu)點(diǎn)是操作系統(tǒng)無(wú)需任何修改就可以直接運(yùn)行。惟一的限制是操作系統(tǒng)必須要支持底層硬件(例如 PowerPC)。

超虛擬化

超虛擬化(paravirtualization)是另外一種流行的虛擬化技術(shù),它與完全虛擬化有一些類似。這種方法使用了一個(gè) hypervisor 來(lái)實(shí)現(xiàn)對(duì)底層硬件的共享訪問(wèn),還將與虛擬化有關(guān)的代碼集成到了操作系統(tǒng)本身中(參見(jiàn)圖 3)。這種方法不再需要重新編譯或捕獲特權(quán)指令,因?yàn)椴僮飨到y(tǒng)本身在虛擬化進(jìn)程中會(huì)相互緊密協(xié)作。

 圖 3. 超虛擬化與客戶操作系統(tǒng)共享進(jìn)程

正如前面介紹的一樣,超虛擬化技術(shù)需要為 hypervisor 修改客戶操作系統(tǒng),這是它的一個(gè)缺點(diǎn)。但是超虛擬化提供了與未經(jīng)虛擬化的系統(tǒng)相接近的性能。與完全虛擬化類似,超虛擬化技術(shù)可以同時(shí)支持多個(gè)不同的操作系統(tǒng)。

操作系統(tǒng)級(jí)的虛擬化

我們要介紹的最后一種技術(shù)是操作系統(tǒng)級(jí)的虛擬化,它使用的技術(shù)與前面所介紹的有所不同。這種技術(shù)在操作系統(tǒng)本身之上實(shí)現(xiàn)服務(wù)器的虛擬化。這種方法支持單個(gè)操作系統(tǒng),并可以將獨(dú)立的服務(wù)器相互簡(jiǎn)單地隔離開(kāi)來(lái)(參見(jiàn)圖 4)。

 圖 4. 操作系統(tǒng)級(jí)虛擬化實(shí)現(xiàn)服務(wù)器的隔離

操作系統(tǒng)級(jí)的虛擬化要求對(duì)操作系統(tǒng)的內(nèi)核進(jìn)行一些修改,但是其優(yōu)點(diǎn)是可以獲得原始性能。

#p#

為什么虛擬化如此重要?

在了解目前 Linux 可以使用的虛擬化方法之前,讓我們先來(lái)了解一下虛擬化的優(yōu)點(diǎn)。

從商業(yè)角度來(lái)看,使用虛擬化技術(shù)有很多原因。大部分原因都可以歸結(jié)于服務(wù)器的鞏固(server consolidation)。簡(jiǎn)單來(lái)說(shuō),如果您可以對(duì)一個(gè)服務(wù)器上多個(gè)未經(jīng)充分利用的系統(tǒng)進(jìn)行虛擬化,由于服務(wù)器的數(shù)量少了,顯然可以節(jié)省大量電力、空間、制冷和管理成本。由于很難確定服務(wù)器的利用情況,虛擬化技術(shù)支持稱為動(dòng)態(tài)遷移的技術(shù)。動(dòng)態(tài)遷移(Live migration)允許操作系統(tǒng)及其應(yīng)用程序遷移到新的服務(wù)器上,從而實(shí)現(xiàn)負(fù)載在可用硬件上的均衡。

虛擬化技術(shù)對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)也非常重要。Linux 內(nèi)核占據(jù)了一個(gè)單一的地址空間,這意味著內(nèi)核或任何驅(qū)動(dòng)程序的故障都會(huì)導(dǎo)致整個(gè)操作系統(tǒng)的崩潰。虛擬化技術(shù)意味著您可以運(yùn)行多個(gè)操作系統(tǒng),如果其中一個(gè)系統(tǒng)由于某個(gè) bug 而崩潰了,那么 hypervisor 和其他操作系統(tǒng)都依然可以繼續(xù)運(yùn)行。這可以使內(nèi)核的調(diào)試非常類似于用戶空間應(yīng)用程序的調(diào)試。

與 Linux 有關(guān)的虛擬化項(xiàng)目

  表 1 給出了幾個(gè) Linux 系統(tǒng)上的虛擬化項(xiàng)目,并著重介紹了其中的開(kāi)源解決方案。

  表 1. 與 Linux 有關(guān)的虛擬化項(xiàng)目

Bochs 是一個(gè) x86 計(jì)算機(jī)仿真器,它在很多平臺(tái)上(包括 x86、PowerPC、Alpha、SPARC 和 MIPS)都可以移植和運(yùn)行。使 Bochs 更為有趣的是它不僅可以對(duì)處理器進(jìn)行仿真,還可以對(duì)整個(gè)計(jì)算機(jī)進(jìn)行仿真,包括計(jì)算機(jī)的外圍設(shè)備,比如鍵盤(pán)、鼠標(biāo)、視頻圖像硬件、網(wǎng)卡(NIC)等。

Bochs 可以配置作為一個(gè)老式的 Intel? 386 或其后繼處理器使用,例如 486、Pentium、Pentium Pro 或 64 位處理器。它甚至還可以對(duì)一些可選的圖形指令進(jìn)行仿真,例如 MMX 和 3DNow。

使用 Bochs 仿真器,您可以運(yùn)行任何 Linux 上的 Linux 發(fā)行版、Linux 上的 Microsoft? Windows? 95/98/NT/2000(以及各種應(yīng)用程序),甚至 Linux 上的 BSD(Berkeley Software Distribution)操作系統(tǒng)(FreeBSD、OpenBSD 等)。

QEMU(仿真)

QEMU 是另外一個(gè)仿真器,它與 Bochs 非常類似,不過(guò)也有一些值得一提的區(qū)別。QEMU 支持兩種操作模式。第一種是 Full System Emulation(完全系統(tǒng)仿真)模式。這種模式與 Bochs 非常類似,它可以對(duì)一個(gè)具有處理器和外圍設(shè)備的完整個(gè)人計(jì)算機(jī)(PC)進(jìn)行仿真。這種模式可以仿真很多處理器架構(gòu),例如 x86、x86_64、ARM、SPARC、PowerPC 和 MIPS,其動(dòng)態(tài)轉(zhuǎn)換的速度也比較理想。使用這種模式,您可以在 Linux、Solaris 和 FreeBSD 上仿真 Windows 操作系統(tǒng)(包括 XP)和 Linux。很多其他操作系統(tǒng)的組合也都可以得到支持(更多信息請(qǐng)參看 參考資料 部分)。

QEMU 還可以支持第二種模式,稱為 User Mode Emulation(用戶模式仿真)。這種模式只能宿主于 Linux,在這種模式下,可以啟動(dòng)不同體系結(jié)構(gòu)的二進(jìn)制文件。例如,在 x86 平臺(tái)上運(yùn)行的 Linux 系統(tǒng)上可以執(zhí)行為 MIPS 體系架構(gòu)編譯的二進(jìn)制文件。這種模式支持的其他體系結(jié)構(gòu)還包括 ARM、SPARC 和 PowerPC,而且還有很多尚在開(kāi)發(fā)之中。

VMware(完全虛擬化)

VMware 是完全虛擬化的一個(gè)商業(yè)解決方案。在客戶操作系統(tǒng)和裸硬件之間有一個(gè) hypervisor 作為抽象層使用。這個(gè)抽象層允許任何操作系統(tǒng)在硬件上運(yùn)行,而不需要了解任何其他客戶操作系統(tǒng)。

VMware 也會(huì)對(duì)可用的 I/O 硬件進(jìn)行虛擬化,并將一些高性能的設(shè)備驅(qū)動(dòng)程序加入到 hypervisor 中。

整個(gè)虛擬化后的環(huán)境都作為一個(gè)文件保存,這意味著整個(gè)系統(tǒng)(包括客戶操作系統(tǒng)、VM 和虛擬硬件)可以很容易地快速遷移到新宿主機(jī)器上進(jìn)行負(fù)載均衡。

z/VM (完全虛擬化)

盡管 IBM System z? 是一個(gè)新品牌,不過(guò)它實(shí)際上已經(jīng)有很長(zhǎng)的一段歷史,可以一直追溯到 20 世紀(jì) 60 年代。System/360 在 1965 年就可以支持使用虛擬機(jī)進(jìn)行虛擬化。有趣的是,System z 保留了對(duì)之前的 System/360 產(chǎn)品線的向后兼容性。

z/VM? 是 System z 上的操作系統(tǒng) hypervisor。其核心是 Control Program(CP),它為客戶操作系統(tǒng),包括 Linux,提供了物理資源的虛擬化(參見(jiàn)圖 5)。這樣,多個(gè)處理器和其他資源就可以在多個(gè)客戶操作系統(tǒng)上被虛擬化。

 圖 5. 使用 z/VM 的操作系統(tǒng)級(jí)虛擬化

z/VM 也可以為想要相互通信的客戶操作系統(tǒng)仿真一個(gè)客戶局域網(wǎng)(LAN)。仿真完全是在 hypervisor 中進(jìn)行的,因此相當(dāng)安全。

Xen(超虛擬化)

Xen 是一個(gè)來(lái)自于 XenSource 的操作系統(tǒng)級(jí)超虛擬化的免費(fèi)開(kāi)源解決方案。回想一下在超虛擬化中,hypervisor 和操作系統(tǒng)會(huì)共同協(xié)作,雖然操作系統(tǒng)需要進(jìn)行一些更改,但卻可以帶來(lái)接近于原始系統(tǒng)的性能。

就像 Xen 需要進(jìn)行協(xié)作(對(duì)客戶操作系統(tǒng)進(jìn)行修改)一樣,只有那些修補(bǔ)過(guò)的操作系統(tǒng)才可以通過(guò) Xen 進(jìn)行虛擬化。Linux 本身就是開(kāi)源的,所以從 Linux 角度來(lái)看,這是一個(gè)很合理的折衷,因?yàn)樽罱K可以獲得比完全虛擬化更好的性能。但是從廣泛支持的角度來(lái)看(例如對(duì)其他非開(kāi)源操作系統(tǒng)的支持),這顯然是一個(gè)缺點(diǎn)。

Windows 可以在 Xen 上作為一個(gè)客戶操作系統(tǒng)運(yùn)行,但是它只能在運(yùn)行 Intel Vanderpool 或 AMD Pacifica 的系統(tǒng)上使用。支持 Xen 的其他操作系統(tǒng)包括 Minix、Plan 9、NetBSD、FreeBSD 和 OpenSolaris。

User-mode Linux(超虛擬化)

User-mode Linux(UML)允許 Linux 操作系統(tǒng)在其他操作系統(tǒng)的用戶空間中運(yùn)行。每個(gè)客戶 Linux 操作系統(tǒng)都存在于宿主 Linux 操作系統(tǒng)中的一個(gè)進(jìn)程中(參見(jiàn)圖 6)。這就允許 Linux 內(nèi)核(使用自己的相關(guān)用戶空間)在單個(gè) Linux 內(nèi)核中運(yùn)行。

 圖 6. User-mode Linux 中的 Linux

在 2.6 版本的 Linux 內(nèi)核中,UML 駐留于主內(nèi)核樹(shù)內(nèi),但它必須提前啟用,然后再重新編譯才能使用。這些變化除了常見(jiàn)的虛擬化功能之外,還可以提供設(shè)備的虛擬化。這樣一來(lái),客戶操作系統(tǒng)就可以共享可用的物理設(shè)備,例如塊設(shè)備(比如軟盤(pán)、CD-ROM 和文件系統(tǒng))、控制臺(tái)、NIC 設(shè)備、聲音硬件等。

注意由于客戶內(nèi)核是在應(yīng)用程序空間中運(yùn)行的,因此它們必須為這種用法而被特殊編譯(不過(guò)它們可以是不同的內(nèi)核版本)。這樣就產(chǎn)生了主機(jī)內(nèi)核(硬件上的內(nèi)核)和客戶內(nèi)核(在主機(jī)內(nèi)核的用戶空間中運(yùn)行)。這些內(nèi)核甚至可以是嵌套的,這樣就允許一個(gè)客戶內(nèi)核在另外一個(gè)運(yùn)行于主機(jī)內(nèi)核的客戶內(nèi)核上運(yùn)行。

Linux-VServer(操作系統(tǒng)級(jí)虛擬化)

Linux-VServer 是一個(gè)操作系統(tǒng)級(jí)虛擬化解決方案。Linux-VServer 對(duì) Linux 內(nèi)核進(jìn)行虛擬化,這樣多個(gè)用戶空間環(huán)境 -- 又稱為 Virtual Private Server(VPS) -- 就可以單獨(dú)運(yùn)行,而不需要互相了解。Linux-VServer 通過(guò)修改 Linux 內(nèi)核實(shí)現(xiàn)用戶空間的隔離。

要將各個(gè)用戶空間與其他用戶空間隔離開(kāi)來(lái),就需要從上下文的概念入手。上下文 是給定 VPS 進(jìn)程使用的一個(gè)容器,這樣通過(guò)諸如 ps 之類的工具就可以了解 VPS 的進(jìn)程。內(nèi)核為最初的引導(dǎo)定義了一個(gè)缺省的上下文。另外管理端還能查看所有的上下文(所有的執(zhí)行進(jìn)程)。正如您可能猜到的那樣,內(nèi)核和內(nèi)部數(shù)據(jù)結(jié)構(gòu)也需要進(jìn)行修改來(lái)支持這種虛擬化方法。

Linux-VServer 還使用了一種 chroot 格式來(lái)為每個(gè) VPS 隔離 root 目錄。雖然 chroot 允許指定新 root 目錄,但還是需要其他一些功能(稱為 Chroot-Barrier)來(lái)限制 VPS 脫離其隔離的 root 目錄回到上級(jí)目錄。給定一個(gè)隔離的 root 目錄之后,每個(gè) VPS 就可以擁有自己的用戶列表和 root 密碼。

2.4 和 2.6 版本的 Linux 內(nèi)核支持 Linux-VServer,它可以運(yùn)行于很多平臺(tái)之上,包括 x86、x86-64、SPARC、MIPS、ARM 和 PowerPC。

OpenVZ(操作系統(tǒng)級(jí)虛擬化)

OpenVZ 是另外一個(gè)操作系統(tǒng)級(jí)的虛擬化解決方案,它與 Linux-VServer 類似,不過(guò)也有一些有趣的區(qū)別。OpenVZ 是一個(gè)支持虛擬化的內(nèi)核(修改過(guò)的),可以支持用戶空間隔離、VPS 和一組用戶管理工具。例如,您可以簡(jiǎn)單地從命令行創(chuàng)建一個(gè)新的 VPS:

清單 1. 從命令行創(chuàng)建 VPS

$ vzctl create 42 --ostemplate fedora-core-4

Creating VPS private area

VPS private area was created

$ vzctl start 42

Starting VPS ...

VPS is mounted

另外還可以使用 vzlist 命令顯示目前創(chuàng)建的 VPS,該命令與標(biāo)準(zhǔn) Linux ps 命令類似。

為了對(duì)進(jìn)程進(jìn)行調(diào)度,OpenVZ 還包括了兩級(jí) CPU 調(diào)度器。首先,調(diào)度器確定哪個(gè) VPS 應(yīng)該獲得 CPU。在這個(gè)步驟完成之后,第二級(jí)調(diào)度器會(huì)根據(jù)給定的標(biāo)準(zhǔn) Linux 優(yōu)先級(jí)挑選進(jìn)程來(lái)執(zhí)行。

OpenVZ 還包括了所謂的 beancounters。beancounter 包括很多參數(shù),這些參數(shù)為給定的 VPS 定義了資源分配。這為 VPS 提供了一定層次上的控制,定義了有多少內(nèi)存可用,有多少進(jìn)程間通信(IPC)對(duì)象可用等。

OpenVZ 的一個(gè)特性是檢查點(diǎn)功能和將 VPS 從一個(gè)物理服務(wù)器遷移到其他物理服務(wù)器上的能力。檢查點(diǎn) 意味著正在運(yùn)行的 VPS 的狀態(tài)被凍結(jié)并存儲(chǔ)到一個(gè)文件中。然后可以將這個(gè)文件遷移到一個(gè)新服務(wù)器上并加以還原以使 VPS 恢復(fù)運(yùn)行。

OpenVZ 支持很多硬件體系結(jié)構(gòu),包括 x86、x86-64 和 PowerPC。

 

#p#

對(duì)完全虛擬化和超虛擬化的硬件支持

回想一下 IA-32(x86)體系結(jié)構(gòu)在進(jìn)行虛擬化時(shí)會(huì)產(chǎn)生的一些問(wèn)題。特定的特權(quán)模式指令無(wú)法捕獲,基于所使用的模式還可能返回不同的結(jié)果。例如,x86 STR 指令可以檢索安全狀態(tài),但是所返回的值要取決于請(qǐng)求者特定的特權(quán)級(jí)別。在嘗試在不同的層次對(duì)不同的操作系統(tǒng)進(jìn)行虛擬化時(shí),這會(huì)出現(xiàn)問(wèn)題。例如,x86 支持 4 環(huán)保護(hù),其中級(jí)別 0 (最高特權(quán))通常運(yùn)行操作系統(tǒng),級(jí)別 1 和 2 支持操作系統(tǒng)服務(wù),級(jí)別 3(最低級(jí)別)支持應(yīng)用程序。不過(guò)硬件供應(yīng)商已經(jīng)認(rèn)識(shí)到了這種缺陷(以及其他一些問(wèn)題),并且已經(jīng)開(kāi)發(fā)了一些支持并加速虛擬化的新設(shè)計(jì)。

Intel 正在開(kāi)發(fā)新虛擬化技術(shù),能在 x86(VT-x)和 Itanium?(VT-i)體系架構(gòu)上支持 hypervisor。VT-x 支持兩種格式的操作,一種用于 VMM(root),另外一種用于客戶操作系統(tǒng)(非 root)。root 格式完全是特權(quán)級(jí)的,而非 root 格式是非特權(quán)級(jí)的(即使對(duì)環(huán) 0 來(lái)說(shuō)也是如此)。這種體系架構(gòu)支持定義指令來(lái)使 VM(客戶操作系統(tǒng))退出到 VMM 和保存處理器狀態(tài)。

AMD 也開(kāi)發(fā)了硬件輔助虛擬化技術(shù),稱為 Pacifica。除了其他一些特性之外,Pacifica 還為在特殊指令執(zhí)行時(shí)保存的客戶操作系統(tǒng)維護(hù)了一個(gè)控制塊。VMRUN 指令允許虛擬機(jī)(及其相關(guān)的客戶操作系統(tǒng))一直運(yùn)行,直到 VMM 重新獲得控制權(quán)為止(這也是可配置的)。這種可配置能力允許 CMM 為每個(gè)客戶操作系統(tǒng)定制特權(quán)指令。Pacifica 還可以使用宿主和客戶內(nèi)存管理單元(MMU)表來(lái)進(jìn)行地址轉(zhuǎn)換。

這些新技術(shù)也可以應(yīng)用到此處討論的很多其他虛擬化技術(shù)中,包括 Xen、VMware、User-mode Linux 等。

Linux KVM(內(nèi)核虛擬機(jī))

Linux 傳出的最新消息是將 KVM 合并到 Linux 內(nèi)核中(2.6.20)。KVM 是一種完全虛擬化解決方案,它有一個(gè)方面非常獨(dú)特:它將 Linux 內(nèi)核轉(zhuǎn)換為一個(gè)使用內(nèi)核模塊的 hypervisor。這個(gè)模塊允許使用其他客戶操作系統(tǒng),然后在宿主 Linux 內(nèi)核的用戶空間中運(yùn)行(參見(jiàn)圖 7)。內(nèi)核中的 KVM 通過(guò) /dev/kvm 字符設(shè)備來(lái)公開(kāi)虛擬化后的硬件??蛻舨僮飨到y(tǒng)使用為 PC 硬件仿真修改過(guò)的 QEMU 進(jìn)程與 KVM 模塊接口。

 圖 7. 使用內(nèi)核虛擬機(jī)(KVM)的虛擬化

KVM 模塊向內(nèi)核中引入了一個(gè)新的執(zhí)行模塊。普通內(nèi)核支持內(nèi)核 模式和用戶 模式,而 KVM 則引入了一種客戶 模式。客戶模式用來(lái)執(zhí)行所有非 I/O 客戶代碼,而普通用戶模式支持客戶 I/O。

KVM 的引入是 Linux 的一個(gè)有趣革新,因?yàn)樗砹俗鳛橹髁?Linux 內(nèi)核一部分的第一個(gè)虛擬化技術(shù)。它已經(jīng)存在于 2.6.20 樹(shù)中,不過(guò)也可以作為 2.6.19 內(nèi)核的一個(gè)內(nèi)核模塊使用。當(dāng)在支持虛擬化的硬件上運(yùn)行時(shí),KVM 支持 Linux(32 位和 64 位)和 Windows(32 位)客戶機(jī)。

結(jié)束語(yǔ)

如果 40 年前出現(xiàn)的技術(shù)還可以算是"新"技術(shù)的話,那么虛擬化就是一個(gè)重要的新技術(shù)領(lǐng)域。虛擬化技術(shù)已經(jīng)在很多場(chǎng)合中應(yīng)用過(guò)了,但現(xiàn)在主要的關(guān)注點(diǎn)是服務(wù)器和操作系統(tǒng)的虛擬化。與 Linux 非常類似,虛擬化為性能、可移植性和靈活性提供了很多選項(xiàng)。這意味著您可以選擇最適合于您自己應(yīng)用程序的虛擬化方法。

 

【編輯推薦】

  1. 嵌入式系統(tǒng)Linux內(nèi)核開(kāi)發(fā)實(shí)戰(zhàn)指南
  2. 玩轉(zhuǎn)linux之二-驅(qū)動(dòng)開(kāi)發(fā)技術(shù)探析
  3. 嵌入式設(shè)備上的 Linux 系統(tǒng)開(kāi)發(fā)
責(zé)任編輯:張燕妮 來(lái)源: IT168
相關(guān)推薦

2020-03-10 18:30:06

GPU虛擬化FPGA

2023-09-20 10:07:26

Linux虛擬化

2011-01-14 14:00:19

GanetiLinux集群虛擬化

2010-07-15 11:34:13

應(yīng)用虛擬化桌面虛擬化基礎(chǔ)架構(gòu)

2019-08-22 16:26:02

LinuxKVM虛擬化

2023-09-19 10:00:34

Linux虛擬

2009-11-23 19:47:57

ibmdwLinux

2010-04-14 09:12:46

虛擬化Linux虛擬化

2010-06-18 09:48:22

2013-09-03 18:07:49

GPU虛擬化華為NVIDIA

2015-08-04 12:51:15

浪潮

2012-12-28 10:18:03

LinuxXenKVM

2015-05-11 15:50:10

OpenStack虛擬化Mutil-Hyper

2017-04-17 14:15:31

NFV虛擬化運(yùn)營(yíng)商

2009-07-22 18:48:35

2010-06-07 10:44:09

2024-01-02 11:15:46

Linux系統(tǒng)

2010-10-13 18:24:36

應(yīng)用基礎(chǔ)架構(gòu)虛擬化服務(wù)器資源池動(dòng)態(tài)集群

2019-06-27 15:08:04

網(wǎng)絡(luò)虛擬化VXLAN

2013-03-21 14:00:01

VCF縱向虛擬化技術(shù)虛擬化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)