自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

x86硬件輔助虛擬化之虛擬機與VMM

云計算 虛擬化
本文介紹x86硬件輔助虛擬化上的虛擬機與VMM類型。

理清虛擬機和虛擬機監(jiān)視器的類別

大家在談到虛擬機時可能會有不同的看法:編程的朋友肯定對JVM不會陌生,JVM本身就是一種虛擬機;而喜歡系統(tǒng)虛擬軟件的朋友則對VMware、Xen和微軟這些虛擬化廠家的虛擬化產(chǎn)品有著更實際的理解。大家只知道它們是不同類別的虛擬機,但是它們之間是如何分類的呢?哪種虛擬機與Intel VT和AMD-V的關(guān)聯(lián)性***呢?

兩類不同的虛擬機

根據(jù)筆者的理解,虛擬機可以分為進程虛擬機和系統(tǒng)虛擬機兩大類,進程虛擬機支持ABI——用戶指令加上系統(tǒng)調(diào)用;系統(tǒng)虛擬機則支持完整的ISA——包括用戶指令和系統(tǒng)指令。在這個分類方法中,又可以根據(jù)客戶機和本地機(Host Machine,在虛擬化資料中也常常稱其為宿主機)是否使用了相同的ISA進行次級細分。

 

虛擬機大致可分為兩大類,并可進一步細分

為了簡化講解,我們只考慮和硬件虛擬化關(guān)系最為密切的、在相同ISA情況下的系統(tǒng)虛擬機(右圖中黑框圈選的地方,因為大部分讀者接觸不到不同ISA指令集轉(zhuǎn)換的情況)分類情況。前面我們提到的VMware、Xen的虛擬軟件產(chǎn)品都屬于系統(tǒng)虛擬機類別,而Intel VT和AMD-V等x86硬件輔助虛擬化技術(shù)能夠提升系統(tǒng)虛擬機的執(zhí)行性能。

#p#

三種虛擬機監(jiān)視器(VMM)

大家談到虛擬化時最常用的一個詞就是VMM(也稱作Hypervisor,虛擬機監(jiān)控器,基本上大家可以認為就是前文講到的那個虛擬化層,抽象層的替代品),在系統(tǒng)虛擬機中虛擬軟件常常被稱為VMM,VMM在虛擬機中可以算是最為關(guān)鍵的組件,對于系統(tǒng)虛擬機的分類就是對虛擬機監(jiān)視器(VMM)的分類。VMM一般有三種類型,分別是獨立(Type-1)、宿主(Type-2)和混合(Hybrid)類型。不論是哪一種系統(tǒng)虛擬機模型,只要它能夠提供對Intel VT和AMD-V的支持,都可以在一定程度上減少虛擬化軟件帶來的性能開銷(早期的RISC硬件輔助虛擬化除外)。

 

虛擬軟件把一個硬件平臺上的ISA翻譯成另一個,以構(gòu)成系統(tǒng)虛擬機。

  Type-1型VMM直接安裝在物理機器上,運行在***特權(quán)模式下,而客戶機系統(tǒng)則運行在特權(quán)較少的模式上。這種虛擬機在很多方面都是很高效的,但明顯的缺點是要考慮的方面較多(比如各種驅(qū)動程序),所以設(shè)計比較復(fù)雜,VMware的ESX server就屬于這種類型。

  Type-2型VMM類似于在操作系統(tǒng)上安裝的應(yīng)用程序,VMM可以依賴主機操作系統(tǒng)提供設(shè)備驅(qū)動和其它底層服務(wù),因此不需要考慮大量的設(shè)備驅(qū)動問題,VMM體積較小。大家最常用的VMware Workstation和JVM都屬于此類型,這種虛擬機的缺點是會損失一些效率,因為當請求操作系統(tǒng)服務(wù)時要通過更多的軟件層次,來回的次數(shù)也更多。

  混合型是Type-1和Type-2的結(jié)合體,在這個類型中VMM和主機操作系統(tǒng)處于平行關(guān)系,微軟的Virtual Server 2005R2以及最近非常受大家關(guān)注的Xen就是混合型的典范。

#p#

小知識:ISA和ABI

ISA是Instruction Set Architecture的簡寫,譯為指令集體系結(jié)構(gòu)。在這個結(jié)構(gòu)中有兩個部分是和虛擬機密切相關(guān)的,一個是用戶指令集(User ISA),另一個是系統(tǒng)指令集(Syetem ISA)。

 

用戶指令集是應(yīng)用程序可直接調(diào)用的,而系統(tǒng)指令集則是操作系統(tǒng)才能看到的,負責管理硬件資源。ABI是Application Binary Interface的簡寫,譯為應(yīng)用二進制接口。它包括兩個主要組件,一個是用戶指令集,另一個則是系統(tǒng)調(diào)用接口(System Calls)。

#p#

x86體系虛擬化遭遇ISA set缺陷

Popek和Goldberg在1974年發(fā)表的那篇論文中給出了一個真正的VMM必須滿足的三個條件:高效性、資源控制和同質(zhì)性。高效性是指所有的安全指令都可以在本地硬件上直接運行而不需要VMM的干預(yù)或仿真,資源控制是指任何客戶機軟件都不能改變它可用的系統(tǒng)資源分配,同質(zhì)性是指拋開性能略微下降的因素,虛擬機上執(zhí)行的任何程序的行為必須和在本地機器上運行一樣。這里面我們之所以重點關(guān)注高效性,是因為x86指令集系統(tǒng)本身存在問題——有少部分指令不能在以前的虛擬化環(huán)節(jié)中進行正常VMM陷入,導(dǎo)致指令執(zhí)行失敗,使得這個條件難以滿足。要理解其中的問題,我們首先要了解CPU虛擬化的基本原理、特權(quán)級別和敏感指令。

 

VMM通常分為三種類型

#p#

CPU虛擬化

在VMM對硬件資源虛擬化的過程中,CPU虛擬化是非常重要的一個環(huán)節(jié)。CPU虛擬化是為物理機器上的每一個虛擬機提供一個或者多個虛擬CPU(簡稱VCPU),每個VCPU分時復(fù)用物理CPU,在任意時刻一個物理CPU只能被一個VCPU使用。VMM要在整個過程中合理分配時間片以及維護所有VCPU的狀態(tài)(資深一些的讀者應(yīng)該會聯(lián)想到現(xiàn)代多任務(wù)操作系統(tǒng)中TSS工作機理以及超線程技術(shù)中涉及到的上下文切換,是不是有似曾相識的感覺呢?),當進行VCPU切換時,要保存當前VCPU的狀態(tài),將被調(diào)度的VCPU狀態(tài)載入物理CPU,可見如何保證VCPU的正確運行和合理調(diào)度是CPU虛擬化技術(shù)中需要解決的問題。

 

Type-2型VMM更易使用但是會損失一定效率

#p#

特權(quán)級別

大部分的現(xiàn)代計算機體系結(jié)構(gòu)都有兩個或兩個以上的特權(quán)級別,用來分隔內(nèi)核和應(yīng)用軟件。以x86為例,為了得到更高的保護控制,在x86的保護模式下定義了當前特權(quán)級別(Current Previleged Level,簡稱CPL),一共有四個特級層次(0 to 3)被定義,我們一般稱之為Ring。Ring后面的數(shù)字越大特權(quán)越小,我們的操作系統(tǒng)一般都運行在Ring0上,而Ring1和2一般用來支持設(shè)備驅(qū)動,Ring3上面跑的就是應(yīng)用軟件了。而在現(xiàn)在的x86處理器中,64位架構(gòu)已經(jīng)非常普遍,64位CPU因為必須支持頁表模式,所以只有兩個特權(quán)級別,我們可以簡單理解為Ring0和Ring3(實際上另有明確定義),這種模型我們常稱為0/3模型。

系統(tǒng)中有一些關(guān)鍵操作指令只能在***特權(quán)級別上執(zhí)行,它們一般被稱為特權(quán)指令,特權(quán)指令僅僅在當前的特權(quán)級別為零時(CPL=0)才會執(zhí)行。如果在非特權(quán)級別上試圖執(zhí)行特權(quán)指令,將生成一個一般保護異常(這通常會生成一個應(yīng)用程序錯誤),而非特權(quán)指令則可以在任何一個權(quán)限級別執(zhí)行。

#p#

敏感指令中的漏網(wǎng)之魚

在虛擬化世界的VMM模型中,我們可以看到所有的客戶機操作系統(tǒng)都運行在非特權(quán)模式下,即非Ring0級。因為Guest OS已經(jīng)不處在特權(quán)級別,所以存在一部分原本應(yīng)該在特權(quán)級別執(zhí)行但現(xiàn)在因為層級權(quán)限不夠必須轉(zhuǎn)交VMM進行處理的指令,這部分指令就叫敏感指令。

 

x86的敏感指令中明顯有一部分漏網(wǎng)之魚

而根據(jù)Popek和Goldberg的定義,指令集支持虛擬化的前提是:所有敏感指令都是特權(quán)指令。很可惜x86指令集不能滿足這個要求,這是它和RISC架構(gòu)相比的一個不足。

在IBM之類的RISC指令集方面,因為敏感指令全部是特權(quán)指令,所以敏感指令的執(zhí)行都可以被VMM捕獲,而在x86方面,因為有一部分敏感指令不屬于特權(quán)指令,變成了非特權(quán)指令,而非特權(quán)指令在較低的特權(quán)級別上是可以直接執(zhí)行的,也就是說VMM不會處理這些指令。這樣就勢必會帶來問題,試想一個不受虛擬化軟件層控制的指令卻工作在虛擬化層之上,這是怎樣一個情景?x86至少有十幾條敏感指令是不會引發(fā)異常的非特權(quán)指令,在IA-32指令集中,我們稱這些非特權(quán)級別的敏感指令為臨界指令,它們可以分成兩類:

敏感寄存器指令:它們讀取或者修改敏感寄存器和(或者)敏感內(nèi)存數(shù)據(jù)區(qū)所存放的內(nèi)容,比如時鐘寄存器、中斷寄存器。

        1.SGDT、SIDT、SLDT
        2.SMSW
        3.PUSHF、POPF

保護系統(tǒng)指令:涉及存儲保護系統(tǒng)、內(nèi)存或者地址定位系統(tǒng)。

        1.LAR、LSL、VERR、VERW
        2.POP
        3.PUSH
        4.CALL、JMP、INT n、RET
        5.STR
        6.MOV

#p#

臨界指令實例講解

我們用一個實際的例子來解釋x86指令集的虛擬化漏洞。SMSW指令(取機器狀態(tài)字的指令)是為了向下兼容老式處理器,這個指令應(yīng)該由操作系統(tǒng)完成,也就是說需要Ring0才可以,但很可惜它沒有被放在特權(quán)指令中。在虛擬化環(huán)境中,客戶機操作系統(tǒng)都工作在非特權(quán)層次上(一般為Ring1或者Ring3),前面我們講到非特權(quán)指令在較低特權(quán)級別時可以不被VMM捕獲而直接執(zhí)行。

 

不同的特權(quán)級別滿足不同程序運行的需求

客戶機操作系統(tǒng)在執(zhí)行這個指令時,直接取到的是真實機器的值(假設(shè)取值1為保護模式,0為實模式),現(xiàn)在的VMM一般都工作在保護模式下,如果客戶機操作系統(tǒng)正好運行在實模式下,那么問題就出來了,SMSW取到的值是1,表示系統(tǒng)運行在保護模式下,而不是真正的客戶機操作系統(tǒng)的實模式的返回值0,這顯然是不正確的。

寫在***

講到這里,大家應(yīng)該對虛擬化和虛擬機的定義以及VMM有了一個整體的認識,也搞明白了x86指令集為什么是不可虛擬化架構(gòu),這為我們更好地理解后續(xù)要講解的硬件輔助虛擬化奠定了一定的理論基礎(chǔ)。下一次我們就給大家講解傳統(tǒng)CPU虛擬化模型的技術(shù)(特權(quán)解除和先陷入后模擬)以及軟件CPU虛擬化和硬件CPU輔助虛擬化的解決方法,敬請關(guān)注!

 

MC特約評論員 林昊翔(虛擬化技術(shù)愛好者)

虛擬化技術(shù)優(yōu)勢日益體現(xiàn),不僅大幅度降低了IT支出成本、減少能源浪費,而且還極大地增強了系統(tǒng)整體安全性和可靠性。軟硬件廠商未來可能攜手提高虛擬化產(chǎn)品的自身性能以及提供更豐富的功能?;谥鳈C操作系統(tǒng)的虛擬機產(chǎn)品以及硬件虛擬化技術(shù)得到更廣泛應(yīng)用。硬件廠商在操作模式間的轉(zhuǎn)換速度、TLB性能、內(nèi)存虛擬化和I/O虛擬化等方面加以改進和完善;軟件廠商則利用二進制動態(tài)翻譯及程序行為分析的技術(shù)減小性能開銷,利用內(nèi)存和存儲的重復(fù)刪除技術(shù)降低資源開銷。而分布式文件系統(tǒng)和分布式共享內(nèi)存等技術(shù)的引入將有助于打造一個高可用、高容錯的分布式虛擬化軟件平臺,便于虛擬機的部署和動態(tài)遷移。

【編輯推薦】

  1. x86服務(wù)器技術(shù)革命 IBM eX5架構(gòu)揭秘 
  2. x86服務(wù)器開路先鋒:Proliant二十載走向融合
  3. Unix Solaris x86操作系統(tǒng)的講解

 

責任編輯:王勇
相關(guān)推薦

2011-02-20 22:23:43

X86虛擬化XenServer

2010-03-20 11:03:13

VMControl虛擬化管理

2009-10-14 10:56:00

主流x86虛擬機技術(shù)

2012-01-04 01:35:46

Power虛擬機x86性能大賽

2011-12-14 13:02:05

Power虛擬機X86平臺服務(wù)器

2011-04-11 09:36:40

2014-07-18 10:14:13

VMware服務(wù)器虛擬化

2020-06-18 16:39:10

KVM虛擬化虛擬機

2020-03-06 15:00:18

CPU硬件虛擬化

2011-02-20 11:21:26

2012-01-04 09:59:50

2011-07-08 10:17:09

VMwareX86

2011-02-16 14:49:17

虛擬機

2012-07-03 10:16:52

VMwarex86服務(wù)器虛擬化

2011-12-30 10:31:53

Power7x86PowerVM虛擬機

2013-01-31 10:04:20

x86服務(wù)器虛擬化

2009-07-03 14:10:47

刀片服務(wù)器IBM虛擬化

2013-08-22 10:13:47

x86服務(wù)器虛擬化

2010-12-17 10:29:27

虛擬化數(shù)據(jù)中心惠普

2009-12-25 10:05:00

Linux虛擬化Xen虛擬化
點贊
收藏

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