IT技術互動交(jiao)流平(ping)jiao)/h4>

万人红黑大战官网

來源︰IT165收集  發布日(ri)期(qi)︰2020-02-20 03:48:50
最近幾年隨(sui)著並行計算、集群等技術的火熱,虛擬機領域煥發了(liao)第(di)二春。虛擬化就(jiu)是(shi)指(zhi)多台虛擬機共享一台物理機硬件(jian)的計算機體系dao) 辜際酢P檳食 幕舅枷朧shi)分zhi)釗磧布jian)以產(chan)生更好的系統性能(neng)(實際上,軟硬件(jian)資源並沒(mei)有增加,只是(shi)利用率提高了(liao))。一個例子就(jiu)是(shi)常見(jian)的“虛擬內存”,通(tong)過將(jiang)一部分不用的磁(ci)盤寫為頁面文件(jian),可以獲得(de)更大的內存地址空間,我們就(jiu)可以跑更大的mou)cheng)序了(liao)。
1. 層(ceng)次 我們都(du)知道,傳(chuan)統方式是(shi)應用程(cheng)序跑在操作系統上,而操作系統需(xu)要適(shi)應主機的特定體系dao) 梗 熱86的機器上就(jiu)只能(neng)跑win,linux,MaxOS等幾種,AIX就(jiu)沒(mei)法跑了(liao)。 有了(liao)虛擬化之後(hou),用于的應用程(cheng)序由相應的客戶操作系統管理,且1-n個客戶操作系統可以獨立(li)于主機的操作系統,運行在同一個硬件(jian)上,且不需(xu)要適(shi)配硬件(jian)的特定體系dao) 埂U饌tong)常通(tong)過增加一個虛擬化層(ceng)來實現(xian),該虛擬化層(ceng)稱(chen)為hypervisor或VMM(Virtual Machine Monitor)。 虛擬化層(ceng)將(jiang)主機的物理硬件(jian)資源虛擬為可被(bei)各虛擬機互斥使(shi)用的虛擬硬件(jian)資源,這可以在不同的層(ceng)面實現(xian),如下圖︰
層(ceng)次例子
應用程(cheng)序級(ji)JVM/.Net CLR
庫支持(用mei)?ji)API)級(ji)WINE
操作系統級(ji)Docker
硬件(jian)抽象級(ji)VMware/Xen/KVM
指(zhi)令(ling)集體系dao) 辜ji)Bochs

我們從下往上看。
指(zhi)令(ling)集體系dao) 辜ji)︰ 也稱(chen)為ISA(Instruction Set Architecture)級(ji),通(tong)過使(shi)用物理主機的ISA模擬一個給定的ISA來實現(xian)。基本jing)哪D夥絞絞shi)“代碼解釋”,一個軟件(jian)翻譯(yi)層(ceng)的mou)cheng)序將(jiang)源指(zhi)令(ling)逐條翻譯(yi)為目標指(zhi)令(ling),一條源指(zhi)令(ling)可能(neng)會對應上百條目標指(zhi)令(ling)來實現(xian)相同的功能(neng)。為改進(jin)性能(neng),出(chu)現(xian)了(liao)動態二進(jin)制(zhi)翻譯(yi)技術,將(jiang)動態源指(zhi)令(ling)的基本塊轉換(huan)為目標指(zhi)令(ling),基本塊可以轉化為超級(ji)塊來進(jin)一步jiao)嶸 huan)的效率。盡管如此,這種方式jiao)huai)是(shi)五種層(ceng)次中效率最低的。 一個典型的代表是(shi)Bochs,可以在各種Unix like系統中xin)D86平(ping)jiao)  ㄖzhi)令(ling)集、I/O、內存、BIOS等都(du)可以模擬。一些愛折騰的大仙在Android上裝windows就(jiu)是(shi)用了(liao)這種方式(一個例子見(jian) http://bbs.hiapk.com/thread-4752020-02-20.html ),當然(ran)速度(du)慘不忍睹(du)就(jiu)是(shi)了(liao)。
硬件(jian)抽象級(ji)︰ 該類虛擬化直接(jie)在原(yuan)始硬件(jian)上進(jin)行。該方法虛擬CPU、內存和I/O設備,目的是(shi)通(tong)過多個並行用mei)?錘慕jin)硬件(jian)資源的利用率。該類的典型代表是(shi)常用的VMware和Xen。這個層(ceng)級(ji)的虛擬化有全虛擬化、半虛擬化等方式,參見(jian)第(di)2部分介紹。 硬件(jian)級(ji)別的第(di)一個問(wen)題是(shi)CPU虛擬化。如果當VMM/hypervisor運行在管理模式時,CPU支持在用mei) J皆誦行檳食奶厝ㄖzhi)令(ling)和非特權指(zhi)令(ling),則該CPU體系dao) 故shi)可虛擬化的。RISC的所有控制(zhi)敏(min)感指(zhi)令(ling)和行xing) min)感指(zhi)令(ling)都(du)是(shi)特權指(zhi)令(ling),因此RISC CPU是(shi)天然(ran)可虛擬化的(指(zhi)這些指(zhi)令(ling)都(du)會自動陷入hypervisor)。而x86體系dao) 共 皇shi)為虛擬化設計,如果套用全虛擬化、半虛擬化等方式,則效率較低。為此提出(chu)了(liao)一種“硬件(jian)輔助的CPU虛擬化”特殊處理,引入一種特殊的運行xin)J膠橢zhi)令(ling),使(shi)得(de)VMM和操作系統可以運行在不同模式中。在Intel和AMD的x86處理器中,這種模式稱(chen)為特權模式(位于環1),于是(shi)操作系統仍(reng)運行在環0(x86中操作系統只能(neng)跑在環0,見(jian)http://baike.baidu.com/link?url=sxY1XeWXddheQHsPnAOLIUpnHF6VWLCrw1IYv67T3BPaLAcnb5-j0NQpdY_B0D8iIFmUIh6OnENGyBAjsEgR1q),hypervisor運行在環1,所有特權指(zhi)令(ling)和敏(min)感指(zhi)令(ling)都(du)會自動陷入到(dao)hypervisor中。 通(tong)常來講(jiang)硬件(jian)輔助虛擬化應具(ju)有更高的效率,然(ran)而,由于從hypervisor到(dao)客戶操作系統需(xu)要在處理器模式之間切換(huan)(用mei) J膠吞厝 J劍  嵋鸞細叩目 xiao),有時並不huan)嵊龐詼jin)制(zhi)翻譯(yi)。因此,如VMware等現(xian)在使(shi)用mei)旌系姆椒  徊糠秩撾窠jiao)給硬件(jian),其余則仍(reng)由軟件(jian)處理。 內存虛擬化則類似于現(xian)zhi)僮饗低車男檳餑詿妗2煌 氖shi)虛擬內存只有一級(ji)映射(she),而內存的虛擬化需(xu)要客戶操作系統和VMM分別維護“虛擬內存——物理內存”和“物理內存——機器內存”的映射(she),共兩(liang)級(ji)映射(she)。VMware使(shi)用影bai)右潮斫jin)行虛擬內存到(dao)jiao)髂詿嫻牡?紛 huan)。但(dan)該技術效率太低(是(shi)早期(qi)VMware巨(ju)慢的原(yuan)因之一),Intel開發了(liao)基于硬件(jian)的EPT(擴展頁表)技術來加以改進(jin),下圖為該技術的示意圖(盜的台巴子的,原(yuan)文找不到(dao)了(liao))。(AMD也有類似的技術稱(chen)為NPT)
I/O虛擬化包括管理虛擬設備和共享的物理硬件(jian)之間I/O請求的路由選擇。有如下三種方式︰全設備模擬、半虛擬化和直接(jie)I/O,我也不是(shi)很懂就(jiu)不展開講(jiang)了(liao)。只知道VMware用的是(shi)全設備模擬。 該類虛擬化由于可以得(de)到(dao)CPU級(ji)別的支持,性能(neng)是(shi)比較高的,但(dan)是(shi)VMM仍(reng)然(ran)需(xu)要自己實現(xian)調(diao)度(du)器、內存管理器等部件(jian),因此不論(lun)VMware還(huai)是(shi)Xen的代碼都(du)比較龐大。
操作系統級(ji)︰ 指(zhi)處于傳(chuan)統操作系統和用mei)?τ貿cheng)序之間的mou)橄蟛ceng)。操作系統級(ji)虛擬化在一個單一的物理服務器上創(chuang)建隔離(li)的容(rong)器和操作系統實例,常被(bei)用來chuang)唇ㄐ檳庵骰肪常 詿罅炕?獾牟恍湃斡沒(mei)? 浞峙漵布jian)資源。這種虛擬機也稱(chen)為VE(虛擬執(zhi)行環境)、VPS(虛擬專用系統)或容(rong)器。VE有自己的進(jin)程(cheng)、文件(jian)系統、用mei)?撕hao)、IP地址、路由表、防(fang)火牆規則及其他設置。盡管VE可為不同用mei)?直鴝ㄖzhi),但(dan)它們仍(reng)共享同一個操作系統。 操作系統級(ji)虛擬化方案解決了(liao)硬件(jian)級(ji)虛擬化的很多問(wen)題︰首先物理機器和虛擬機實例數可以動態改變;其次硬件(jian)級(ji)虛擬化的虛擬機初始化很慢,而操作系統級(ji)虛擬化幾乎不需(xu)要時間;第(di)三就(jiu)是(shi)硬件(jian)全虛擬化性能(neng)較低,半虛擬化又需(xu)要修改客戶操作系統(全虛擬化和半虛擬化後(hou)面講(jiang)),但(dan)操作系統級(ji)虛擬化就(jiu)幾乎沒(mei)有開銷(xiao)。以上幾個特性使(shi)操作系統級(ji)虛擬化非常適(shi)合雲(yun)計算場景(jing)。 一個典型的代表是(shi)Docker,其基于Linux的LXC,說白(bai)了(liao)就(jiu)是(shi)cgroups。Docker最近兩(liang)年火得(de)不要不要的,但(dan)實際上不是(shi)新鮮shi)攣錚 乙壞┬蒙ocker就(jiu)需(xu)要傳(chuan)統的運維體系有巨(ju)大的變革,因此在大企(qi)業(ye)中很少(shao)見(jian)到(dao)用得(de)好的(這個話題大了(liao),以後(hou)再詳細講(jiang))。Docker的優點就(jiu)是(shi)上述操作系統級(ji)虛擬化的優點,缺點也很明顯,首先宿主機和虛擬機都(du)只能(neng)是(shi)linux,資源隔離(li)比VMware這些也有差距,cpu和disk的管理較簡單。(當然(ran)在Docker間共享數據還(huai)是(shi)很容(rong)易的,用數據卷就(jiu)行了(liao),我不懂Docker都(du)知道這玩(wan)意兒,上xian)芤慌ocker的磚(zhuan)家一起開會都(du)沒(mei)想到(dao)這東西,我也是(shi)醉鳥)
庫支持級(ji)︰ 這種方案基于一個思路,大部分應用都(du)是(shi)基于用mei)?PI而不是(shi)系統級(ji)調(diao)用的,因此可以通(tong)過API鉤子控制(zhi)應用程(cheng)序和tui)淥低巢糠種 淶牧 jie),使(shi)得(de)me)鋅飩jie)口的虛擬化成為可能(neng)。這種方式和網游脫機外(wai)掛其實異(yi)曲同工,難度(du)是(shi)不高的。 一個典型的代表是(shi)WINE,其可以在Unix like系統上運行win32應用程(cheng)序。當然(ran)其實是(shi)非常難用的,高中剛開始玩(wan)linux那會兒,總(zong)想著用WINE跑win上的游戲,但(dan)是(shi)除了(liao)一些簡單的exe可以運行,directx游戲都(du)是(shi)跑不了(liao)的,原(yuan)因是(shi)DLL依賴太復雜了(liao),很多也不支持。這麼(me)多年過去了(liao)問(wen)題越(yue)來越(yue)惡化,畢(bi)竟微軟幾千號(hao)人寫API,WINE的開發就(jiu)那麼(me)幾個,模擬得(de)過來麼(me)。
應用程(cheng)序級(ji)︰ 這個級(ji)別的虛擬化是(shi)將(jiang)一個應用程(cheng)序虛擬化為一個虛擬機。最流行的方法是(shi)高級(ji)語言虛擬機,在這種情況(kuang)下,虛擬化層(ceng)作為一個應用程(cheng)序處于操作系統之上,並且這一層(ceng)抽象出(chu)一個虛擬機,其可以運行xing) 囟 幕骰肪乘嘈春捅嘁yi)的mou)cheng)序。 典型的代表是(shi)Java虛擬機和微軟的.Net CLR,當然(ran)因為純應用程(cheng)序級(ji)虛擬化效率很低,兩(liang)者現(xian)在都(du)不是(shi)純的虛擬機,比如JVM中很關(guan)鍵的一部分就(jiu)是(shi)JIT(即時編譯(yi)),當年Java1.0時代的純解釋執(zhi)行才等同于應用程(cheng)序級(ji)虛擬機,那個效率誰用誰知道。
以下是(shi)五種級(ji)別的對比,*越(yue)多越(yue)好(性能(neng)高,靈活性高,實現(xian)zhi)叢佣du)低,隔離(li)性好)︰
實現(xian)級(ji)別高性能(neng)應用程(cheng)序靈活性實現(xian)zhi)叢佣du)應用程(cheng)序隔離(li)性
應用程(cheng)序級(ji)**********
庫支持(用mei)?ji)API)級(ji)***********
操作系統級(ji)************
硬件(jian)抽象級(ji)*************
指(zhi)令(ling)集體系dao) 辜ji)************


2.機制(zhi) 可根據是(shi)否(fu)需(xu)要修改客戶操作系統,分為硬件(jian)虛擬化和編譯(yi)器支持虛擬化。硬件(jian)虛擬化又分為︰全虛擬化和基于主機的虛擬化(很多材料將(jiang)兩(liang)者等同,是(shi)不對的)。編譯(yi)器支持虛擬化只有一種,稱(chen)為半虛擬化。
全虛擬化︰ 在全虛擬化中,非關(guan)鍵指(zhi)令(ling)直接(jie)運行在硬件(jian)之上,而關(guan)鍵指(zhi)令(ling)(特權指(zhi)令(ling)、控制(zhi)敏(min)感指(zhi)令(ling)、行xing) min)感指(zhi)令(ling))被(bei)替換(huan)為通(tong)過軟件(jian)模擬的陷入VMM/hypervisor的指(zhi)令(ling)。即,(非x86系統中)VMM運行在環0,客戶操作系統運行在環1,用mei)?τ貿cheng)序運行在環3,用mei)?τ貿cheng)序的指(zhi)令(ling)直接(jie)操作系統硬件(jian),客戶操作系統的指(zhi)令(ling)通(tong)過VMM二進(jin)制(zhi)翻譯(yi)後(hou)操作系統硬件(jian)。見(jian)下圖。VMware就(jiu)使(shi)用了(liao)這種機制(zhi)。
基于主機的虛擬化︰ 這種機制(zhi)是(shi),宿主機的操作系統仍(reng)舊負責管理硬件(jian),在宿主機操作系統上安(an)裝一個虛擬化層(ceng),客戶操作系統安(an)裝an) 誦性諦檳食 ceng)之上。可見(jian)這種機制(zhi)下不論(lun)何種指(zhi)令(ling),都(du)需(xu)要經虛擬化層(ceng)轉發後(hou)由宿主機操作系統執(zhi)行,並且ye)笨突?僮饗低車SA與底層(ceng)硬件(jian)的ISA不同時,還(huai)需(xu)要在虛擬化層(ceng)做(zuo)二進(jin)制(zhi)翻譯(yi),因此效率shi)shi)很低的。也可見(jian)這種方式和全虛擬化是(shi)有區別的,所以必須分開講(jiang)。
半虛擬化︰ 半虛擬化技術是(shi)後(hou)來才出(chu)現(xian)的技術,也叫做(zuo)準虛擬化技術,現(xian)在比較熱門(men),它就(jiu)是(shi)在全虛擬化的基礎上,把客戶操作系統進(jin)行了(liao)修改,增加了(liao)一個專門(men)的API,這個API可以yue)jiang)客戶操作系統發出(chu)的指(zhi)令(ling)進(jin)行最優化,即不需(xu)要VMM/Hypervisor耗費一定的資源進(jin)行翻譯(yi)操作,因此Hypervisor的工作負擔變得(de)非常的小,整體性能(neng)也有很大的提高。不huai)鋇憔jiu)是(shi),要修改包含該API的操作系統,但(dan)是(shi)對于某(mou)些不含該API的操作系統(主要是(shi)windows)來說,就(jiu)不能(neng)用這種方法。半虛擬化技術見(jian)下圖。

這些都(du)說完,就(jiu)可以來比較另兩(liang)種主流的虛擬化技術了(liao)︰XEN和KVM。 XEN(參見(jian) http://baike.baidu.com/link?url=J97539DMsA9HW2WZYsX7ZNliZUx9d2j3LarHw2yRd37Lh_ho6zAe1Gy5Xfh-z-TxuLH3Q6T2qfrNEBDmuMiAca)主要是(shi)為x86平(ping)jiao) 竦模 痹誦行薷牡牟僮饗低呈笨梢允shi)用半虛擬化機制(zhi),當CPU支持且操作系統無(wu)法修改時可使(shi)用全虛擬化機制(zhi)。 KVM(參見(jian)http://baike.baidu.com/link?url=kV4fSyYs0tw-bhBpp6Fofh4C6c5nQDKmY1eTmIR-BPbliDsX0uYOF97ypPAsCqmsM96xt85ai4q89rO8XaEe8_,這里說KVM是(shi)全虛擬化,又是(shi)錯的)不針對特定架構,但(dan)針對特定宿主操作系統,因為它是(shi)linux內核2.6.20後(hou)內置的,代碼量比XEN少(shao)得(de)多。當運行修改的操作系統時使(shi)用半虛擬化機制(zhi),當CPU支持時可使(shi)用改進(jin)的基于主機的虛擬化機制(zhi),即Hypervisor雖然(ran)位于主操作系統上,但(dan)在內核上打了(liao)個洞,如果CPU支持如Intel VT之類的技術,虛擬機操作系統的關(guan)鍵指(zhi)令(ling)可直接(jie)映射(she)到(dao)物理硬件(jian)上,從而大大提升性能(neng),如圖所示(盜自 http://www.linuxidc.com/Linux/2015-03/114462.htm )。
如果硬要比較的話,在編譯(yi)器支持虛擬化(半虛擬化)時XEN優于KVM,在硬件(jian)虛擬化時KVM優于XEN。
(本文參考《雲(yun)計算與分布式系統》,但(dan)是(shi)原(yuan)書(shu)的相關(guan)章(zhang)節有些混亂,也有一些跟不上形(xing)wen)頻牡胤劍 徊 薷牧liao))

Tag標簽(qian)︰層(ceng)次  機制(zhi)  
  • 万人红黑大战官网

  • 李華明iOS-Cocos2d游戲開發專題
  • 本教(jiao)程(cheng)為 李華明 編著的iOS-Cocos2d游戲開發系列教(jiao)程(cheng)︰hang)jiao)程(cheng)涵(han)蓋關(guan)于i...... 詳細
About IT165 - 廣告(gao)服務 - 隱私聲明 - 版(ban)權申明 - 免責條款 - 網站(zhan)地圖 - 網友(you)投稿(gao) - 聯(lian)系方式
本站(zhan)內容(rong)來自于互聯(lian)網,僅供用于網絡(luo)技術學習,學習中請遵循相關(guan)法律法規
万人红黑大战官网 | 下一页