日韩av无码一区二区三区不卡 ,亚洲中文字幕无码永久在线,精品亚洲国产成AV人片传媒,在线中文字幕乱码英文字幕正常

首頁 行業(yè)動(dòng)態(tài) Linux 虛擬化方法、架構(gòu)和實(shí)現(xiàn)
Linux 虛擬化方法、架構(gòu)和實(shí)現(xiàn)
2017-21-01

      虛擬化的含義豐富,應(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)出來。對計(jì)算機(jī)進(jìn)行虛擬化就是要將計(jì)算機(jī)以多臺(tái)計(jì)算機(jī)或一臺(tái)完全不同的計(jì)算機(jī)的形式呈現(xiàn)出來。虛擬化也可以將多臺(tái)計(jì)算機(jī)組合成一臺(tái)計(jì)算機(jī)的形式呈現(xiàn)出來。這通常稱為服務(wù)器聚合或網(wǎng)格計(jì)算。

處理器虛擬化

     虛擬化早期的另外一種用法(在本例中是對處理器的仿真)是 P-code(或偽碼)機(jī)。P-code 是一種機(jī)器語言,運(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 年代對 BCPL(Basic Combined Programming Language)的設(shè)計(jì)中也采用了相同的概念,C 語言即由 BCPL 發(fā)展而來。在這種用法中,編譯器會(huì)將 BCPL 代碼編譯成稱為 O-code 的中間機(jī)器代碼。接下來的第二個(gè)步驟是將 O-code 編譯成目標(biāo)機(jī)器的原始語言?,F(xiàn)代編譯器所使用的這種模型為將編譯器移植到新目標(biāo)體系結(jié)構(gòu)上提供了很大的靈活性(通過一種中間語言將前端和后端分隔開來)。  

指令集虛擬化   

    虛擬化最新的發(fā)展稱為指令集虛擬化,或者二進(jìn)制轉(zhuǎn)換。在這種模型中,虛擬指令集被轉(zhuǎn)換成底層硬件的物理指令集,這個(gè)過程通常都是動(dòng)態(tài)的。當(dāng)代碼執(zhí)行時(shí),就會(huì)對代碼的某個(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è)例子是完全虛擬化解決方案通過運(yùn)行時(shí)代碼掃描來查找和重定向特權(quán)指令(用來解決特定處理器指令集的一些問題)。

虛擬化的類型   

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

硬件仿真   

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

                                                                                                 

    

    正如您所能預(yù)見的一樣,使用硬件仿真的主要問題是速度會(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)(參見圖 2)。"協(xié)調(diào)"在這里是一個(gè)關(guān)鍵,因?yàn)?VMM 在客戶操作系統(tǒng)和裸硬件之間提供協(xié)調(diào)。特定受保護(hù)的指令必須被捕獲下來并在 hypervisor 中進(jìn)行處理,因?yàn)檫@些底層硬件并不由操作系統(tǒng)所擁有,而是由操作系統(tǒng)通過 hypervisor 共享。

                                                                                                   

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

超虛擬化   

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

                                                                              [img=upload/20090318104731-0.jpg]

    正如前面介紹的一樣,超虛擬化技術(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ù)器相互簡單地隔離開來(參見圖 4)。

                                                                                                    

 

      操作系統(tǒng)級(jí)的虛擬化要求對操作系統(tǒng)的內(nèi)核進(jìn)行一些修改,但是其優(yōu)點(diǎn)是可以獲得原始性能。 VMware(完全虛擬化) ,VMware 是完全虛擬化的一個(gè)商業(yè)解決方案。在客戶操作系統(tǒng)和裸硬件之間有一個(gè) hypervisor 作為抽象層使用。這個(gè)抽象層允許任何操作系統(tǒng)在硬件上運(yùn)行,而不需要了解任何其他客戶操作系統(tǒng)。VMware 也會(huì)對可用的 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 (完全虛擬化)   

      盡管是一個(gè)新品牌,不過它實(shí)際上已經(jīng)有很長的一段歷史,可以一直追溯到 20 世紀(jì) 60 年代。System/360 在 1965 年就可以支持使用虛擬機(jī)進(jìn)行虛擬化。有趣的是,System z 保留了對之前的 System/360 產(chǎn)品線的向后兼容性。z/VM? 是 System z 上的操作系統(tǒng) hypervisor。其核心是 Control Program(CP),它為客戶操作系統(tǒng),包括 Linux,提供了物理資源的虛擬化(參見圖 5)。這樣,多個(gè)處理器和其他資源就可以在多個(gè)客戶操作系統(tǒng)上被虛擬化。

                                                                                                       

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

Xen(超虛擬化)   

     Xen 是一個(gè)來自于 XenSource 的操作系統(tǒng)級(jí)超虛擬化的免費(fèi)開源解決方案?;叵胍幌略诔摂M化中,hypervisor 和操作系統(tǒng)會(huì)共同協(xié)作,雖然操作系統(tǒng)需要進(jìn)行一些更改,但卻可以帶來接近于原始系統(tǒng)的性能。   就像 Xen 需要進(jìn)行協(xié)作(對客戶操作系統(tǒng)進(jìn)行修改)一樣,只有那些修補(bǔ)過的操作系統(tǒng)才可以通過 Xen 進(jìn)行虛擬化。Linux 本身就是開源的,所以從 Linux 角度來看,這是一個(gè)很合理的折衷,因?yàn)樽罱K可以獲得比完全虛擬化更好的性能。但是從廣泛支持的角度來看(例如對其他非開源操作系統(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)程中(參見圖 6)。這就允許 Linux 內(nèi)核(使用自己的相關(guān)用戶空間)在單個(gè) Linux 內(nèi)核中運(yùn)行。

                                                                                                           

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

    注意由于客戶內(nèi)核是在應(yīng)用程序空間中運(yùn)行的,因此它們必須為這種用法而被特殊編譯(不過它們可以是不同的內(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 對 Linux 內(nèi)核進(jìn)行虛擬化,這樣多個(gè)用戶空間環(huán)境 -- 又稱為 Virtual Private Server(VPS) -- 就可以單獨(dú)運(yùn)行,而不需要互相了解。Linux-VServer 通過修改 Linux 內(nèi)核實(shí)現(xiàn)用戶空間的隔離。

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

    Linux-VServer 還使用了一種 chroot 格式來為每個(gè) VPS 隔離 root 目錄。雖然 chroot 允許指定新 root 目錄,但還是需要其他一些功能(稱為 Chroot-Barrier)來限制 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 類似,不過也有一些有趣的區(qū)別。OpenVZ 是一個(gè)支持虛擬化的內(nèi)核(修改過的),可以支持用戶空間隔離、VPS 和一組用戶管理工具。例如,您可以簡單地從命令行創(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 命令類似。  

  為了對進(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)程來執(zhí)行。

     OpenVZ 還包括了所謂的 beancounters。beancounter 包括很多參數(shù),這些參數(shù)為給定的 VPS 定義了資源分配。這為 VPS 提供了一定層次上的控制,定義了有多少內(nèi)存可用,有多少進(jìn)程間通信(IPC)對象可用等。   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。 對完全虛擬化和超虛擬化的硬件支持   回想一下 IA-32(x86)體系結(jié)構(gòu)在進(jìn)行虛擬化時(shí)會(huì)產(chǎn)生的一些問題。特定的特權(quán)模式指令無法捕獲,基于所使用的模式還可能返回不同的結(jié)果。例如,x86 STR 指令可以檢索安全狀態(tài),但是所返回的值要取決于請求者特定的特權(quán)級(jí)別。在嘗試在不同的層次對不同的操作系統(tǒng)進(jìn)行虛擬化時(shí),這會(huì)出現(xià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)用程序。不過硬件供應(yīng)商已經(jīng)認(rèn)識(shí)到了這種缺陷(以及其他一些問題),并且已經(jīng)開發(fā)了一些支持并加速虛擬化的新設(shè)計(jì)。

   Intel 正在開發(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í)的(即使對環(huán) 0 來說也是如此)。這種體系架構(gòu)支持定義指令來使 VM(客戶操作系統(tǒng))退出到 VMM 和保存處理器狀態(tài)。   

   AMD 也開發(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)表來進(jìn)行地址轉(zhuǎn)換。   

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


定制專屬于我的服務(wù)器
可選購標(biāo)準(zhǔn)配置的服務(wù)器產(chǎn)品,也可以根據(jù)自己需求定制專屬服務(wù)器
開始定制
服務(wù)熱線:400-028-1968 028-85099673 13881950196
工作時(shí)間:周一至周六 09:00-18:00(北京時(shí)間)
Copyright ? 2025 成都網(wǎng)爍信息科技有限公司 版權(quán)所有
本網(wǎng)站直接或間接向消費(fèi)者推銷商品或者服務(wù)的商業(yè)宣傳均屬于“廣告”(包裝及參數(shù)、售后保障等商品信息除外)