亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

在虛擬機(jī)器中使用合成指令的系統(tǒng)和方法

文檔序號:6431679閱讀:375來源:國知局
專利名稱:在虛擬機(jī)器中使用合成指令的系統(tǒng)和方法
技術(shù)領(lǐng)域
本發(fā)明一般涉及操作系統(tǒng)領(lǐng)域,尤其涉及虛擬機(jī)器(或處理器虛擬化)可理解但被預(yù)定義處理器體系結(jié)構(gòu)(如,x86體系結(jié)構(gòu))定義為“非法”的指令的應(yīng)用,使得當(dāng)在虛擬機(jī)器環(huán)境內(nèi)執(zhí)行時(shí),本發(fā)明使用這些指令來執(zhí)行定義好了的合法行動(dòng)。在某種意義上,本發(fā)明向預(yù)先存在的指令集添加了“合成”指令。
背景技術(shù)
虛擬機(jī)器計(jì)算機(jī)包括被設(shè)計(jì)成執(zhí)行一組具體的系統(tǒng)指令的一般中央處理單元(CPU)。一組具有類似的體系結(jié)構(gòu)或設(shè)計(jì)規(guī)范的處理器可被認(rèn)為是同一處理器家族的成員。當(dāng)前的處理器家族包括由亞利桑那州鳳凰城的Motorola公司制造的Motorola680×0處理器家族;由加利福尼亞州桑尼維爾市的Intel公司制造的Intel 80×86處理器家族;以及由Motorola公司制造且在加利福尼亞州的庫珀蒂諾市的Apple計(jì)算機(jī)公司制造的計(jì)算機(jī)中使用的PowerPC處理器家族。盡管由于其類似的體系結(jié)構(gòu)和設(shè)計(jì)規(guī)范,一組處理器可以在同一家族中,然而依照其時(shí)鐘速度和其它性能參數(shù),有關(guān)家族中的處理器可有很大的不同。
每一微處理器家族執(zhí)行對處理器家族唯一的指令。處理器或處理器家族能夠執(zhí)行的一組共同的指令被稱為處理器指令集。作為示例,由Intel 80×86處理器家族使用的指令集與由PowerPC處理器家族使用的指令集不兼容。Intel 80×86指令集基于復(fù)雜指令集計(jì)算機(jī)(CISC)格式。Motorola PowerPC指令集基于精簡指令集計(jì)算機(jī)(RISC)格式。CISC處理器使用大量的指令,某些指令可執(zhí)行相當(dāng)復(fù)雜的功能,但是某些一般需要許多時(shí)鐘周期來執(zhí)行。RISC處理器使用較少數(shù)量的可用指令來執(zhí)行以更高速率執(zhí)行的一組更簡單的功能。
處理器家族在計(jì)算機(jī)系統(tǒng)中的唯一性通常也導(dǎo)致計(jì)算機(jī)系統(tǒng)的硬件體系結(jié)構(gòu)的其它元件間的不兼容性。使用來自Intel 80×86處理器家族的處理器制造的計(jì)算機(jī)系統(tǒng)將具有不同于使用來自PowerPC處理器家族的處理器制造的計(jì)算機(jī)系統(tǒng)的硬件體系結(jié)構(gòu)的硬件體系結(jié)構(gòu)。由于處理器指令集和計(jì)算機(jī)系統(tǒng)的硬件體系結(jié)構(gòu)的唯一性,通常書寫應(yīng)用程序軟件以運(yùn)行在運(yùn)行特定操作系統(tǒng)的特定計(jì)算機(jī)系統(tǒng)上。
計(jì)算機(jī)制造商希望通過令更多而不是更少的應(yīng)用程序運(yùn)行在與計(jì)算機(jī)制造商的生產(chǎn)線關(guān)聯(lián)的微處理器家族上來將其市場占有率最大化。為擴(kuò)充可運(yùn)行在計(jì)算機(jī)系統(tǒng)上的操作系統(tǒng)和應(yīng)用程序的數(shù)量,開發(fā)了一種技術(shù)領(lǐng)域,其中,具有一種類型的CPU的給定計(jì)算機(jī),稱為主機(jī),將包括允許主計(jì)算機(jī)仿真不相關(guān)類型的稱之為訪客的CPU指令的仿真器程序。由此,主計(jì)算機(jī)將執(zhí)行促使一個(gè)或多個(gè)主機(jī)指令響應(yīng)于給定訪客指令而被調(diào)用的應(yīng)用程序。由此,主計(jì)算機(jī)既可以運(yùn)行為其自己的硬件體系結(jié)構(gòu)設(shè)計(jì)的軟件,又可以運(yùn)行為具有不相關(guān)的硬件體系結(jié)構(gòu)的計(jì)算機(jī)書寫的軟件。作為一個(gè)更具體的示例,例如,由Apple計(jì)算機(jī)公司制造的計(jì)算機(jī)系統(tǒng)可運(yùn)行為基于PC的計(jì)算機(jī)系統(tǒng)書寫的操作系統(tǒng)和程序。也可以使用仿真器程序在單個(gè)CPU上并發(fā)地操作多個(gè)不兼容的操作系統(tǒng)。以這一方案,盡管每一操作系統(tǒng)與其它操作系統(tǒng)不兼容,仿真器程序可主存(host)兩個(gè)操作系統(tǒng)之一,允許其它不兼容的操作系統(tǒng)在同一計(jì)算機(jī)系統(tǒng)上并發(fā)地運(yùn)行。
當(dāng)在主計(jì)算機(jī)系統(tǒng)上仿真訪客計(jì)算機(jī)系統(tǒng)時(shí),訪客計(jì)算機(jī)系統(tǒng)被稱為虛擬機(jī)器,因?yàn)橹饔?jì)算機(jī)系統(tǒng)僅作為訪客計(jì)算機(jī)系統(tǒng)的硬件體系結(jié)構(gòu)的操作的軟件表示存在。術(shù)語仿真器和虛擬機(jī)器有時(shí)候可以互換使用,來表示模擬或仿真整個(gè)計(jì)算機(jī)系統(tǒng)的硬件體系結(jié)構(gòu)的能力。作為一個(gè)示例,由加利福尼亞州的圣馬特奧市的Connectix公司創(chuàng)建的Virtual PC軟件仿真包括Intel 80×86Pentium處理器和各種主板組件和卡的整個(gè)計(jì)算機(jī)。這些組件的操作在運(yùn)行在主機(jī)器上的虛擬機(jī)器中仿真。在主計(jì)算機(jī),如具有PowerPC處理器的計(jì)算機(jī)系統(tǒng)的操作系統(tǒng)軟件和硬件體系結(jié)構(gòu)上執(zhí)行的仿真器程序模擬了整個(gè)訪客計(jì)算機(jī)系統(tǒng)的操作。仿真器程序擔(dān)當(dāng)主機(jī)器硬件體系結(jié)構(gòu)和由運(yùn)行在仿真環(huán)境中的軟件發(fā)送的指令之間的互換的角色。
x86體系結(jié)構(gòu)“x86”是使用x86指令集體系結(jié)構(gòu)(ISA)的所有微處理器家族系列的類屬名。IA32是由Intel開發(fā)的使用x86 ISA的具體的處理器體系結(jié)構(gòu)。x86由Intel的8086微處理器開始。x86處理器包括但不限于,Intel的8086、286、386、486、Pentium、具有MMX的Pentium、Pentium PRO、Pentium II、Pentium III和Pentium 4處理器家族,以及先進(jìn)微設(shè)備(AMD)的K5、K6、K6-2、K6-3、Athlon、增強(qiáng)Athlon(稱為“雷鳥(thunderbird)”)、Atholon 4和Athlon MP、Athlon 64、Opteron等等。
虛擬機(jī)器監(jiān)控器(VMM)是直接運(yùn)行在硬件之上的軟件層,并且VMM通過展現(xiàn)與VMM正在虛擬化的硬件相同的接口來將機(jī)器的所有資源虛擬化(令VMM變得不被其上運(yùn)行的操作系統(tǒng)層注意)。然而,x86體系結(jié)構(gòu),包括IA32體系結(jié)構(gòu)及其類似物,包含呈現(xiàn)VMM實(shí)現(xiàn)的許多問題的虛擬化漏洞。首先,x86體系結(jié)構(gòu)未將所有處理器狀態(tài)劃分成特許狀態(tài)或用戶狀態(tài),其中,特許狀態(tài)應(yīng)當(dāng)包括指示當(dāng)前特許級別以及需要在基礎(chǔ)操作系統(tǒng)(或“監(jiān)控層”)下控制來實(shí)現(xiàn)用戶級應(yīng)用程序?qū)嵗g的資源控制和保護(hù)屏障的其它資源的任一控制或狀態(tài)域等等。第二,當(dāng)在用戶級嘗試對特許狀態(tài)的訪問(不論是讀還是寫)時(shí),x86體系結(jié)構(gòu)在所有情況下都不引發(fā)俘獲。第三,x86體系結(jié)構(gòu)沒有用于當(dāng)用戶級代碼嘗試訪問應(yīng)當(dāng)被虛擬化的非特許狀態(tài)(如,定時(shí)器值、性能計(jì)數(shù)器、處理器特征寄存器)時(shí)引發(fā)俘獲(trap)的裝置。第四,盡管所有存儲器內(nèi)(in-memory)處理器結(jié)構(gòu)應(yīng)當(dāng)被儲存在當(dāng)前地址空間之外或在VM內(nèi)被保護(hù)以免遭錯(cuò)誤或惡意的存儲器訪問,x86體系結(jié)構(gòu)不允許該結(jié)構(gòu)。第五也是最后,x86體系結(jié)構(gòu)不能在處理了中斷或俘獲之后將其中斷或俘獲時(shí)的所有的處理器狀態(tài)恢復(fù)成其預(yù)俘獲狀態(tài)。

發(fā)明內(nèi)容
x86體系結(jié)構(gòu)的上述這些許多缺點(diǎn)和限制由當(dāng)期望時(shí)不能引發(fā)俘獲的指令引起。換言之,如果這些指令相反能引發(fā)俘獲,則虛擬機(jī)器監(jiān)控器(VMM)可以正確地將這些指令虛擬化。
本發(fā)明通過引入引發(fā)俘獲并由此為虛擬機(jī)器(VM)提供安全地處理指令的機(jī)會的“合成指令”,彌補(bǔ)了x86處理器體系結(jié)構(gòu)中的缺點(diǎn)。通過使用對x86體系結(jié)構(gòu)“非法”但仍可由虛擬機(jī)器理解的指令,本發(fā)明的方法使用了合成指令來虛擬機(jī)器中執(zhí)行較佳定義的行動(dòng),這些行動(dòng)當(dāng)由x86處理器上執(zhí)行的傳統(tǒng)指令執(zhí)行時(shí)會有問題,并且由此,本發(fā)明為x86處理器系統(tǒng)提供了更加改進(jìn)的處理器虛擬化。


當(dāng)結(jié)合附圖閱讀時(shí),可以更好地理解以上概述以及以下較佳實(shí)施例的詳細(xì)描述。為說明本發(fā)明的目的,在附圖中示出了本發(fā)明的示例性構(gòu)造;然而,本發(fā)明不限于所揭示的具體的方法和手段。附圖中圖1示出了包括直接運(yùn)行在計(jì)算機(jī)硬件上并與兩個(gè)虛擬機(jī)器(VM)交互的虛擬機(jī)器監(jiān)控器(VMM)軟件層的虛擬化計(jì)算系統(tǒng);圖2示出了圖1的虛擬化計(jì)算系統(tǒng),但還包括直接與計(jì)算機(jī)硬件交互的主機(jī)(本機(jī))操作系統(tǒng)。
圖3是在主計(jì)算機(jī)系統(tǒng)中運(yùn)行的仿真計(jì)算機(jī)系統(tǒng)的元件的邏輯關(guān)系的示圖;圖4示出了x86處理器(尤其對IA32體系結(jié)構(gòu))的EFLAGS寄存器;圖5示出了虛擬機(jī)器監(jiān)控器(VMM)通常認(rèn)可的四種不同的處理器模式分類。
圖6是x86指令的表,它展現(xiàn)了這樣一個(gè)事實(shí),被認(rèn)為是環(huán)0代碼事實(shí)上運(yùn)行在較高的環(huán)級別,這是傳統(tǒng)的x86處理器虛擬化方法的問題。
圖7是指令集的表,它展現(xiàn)了這樣一個(gè)事實(shí),虛擬機(jī)器為訪客操作系統(tǒng)投影了某些x86處理器信息。
圖8是為虛擬化目的必須俘獲但是在x86體系結(jié)構(gòu)中未俘獲的指令的表。
圖9是涉及x86體系結(jié)構(gòu)中IF和IOPL領(lǐng)域的有問題的指令的表。
圖10所示是用于通過優(yōu)化OS代碼并使用“合成指令”改進(jìn)IA32中的虛擬化的方法的一個(gè)實(shí)施例的流程圖。
具體實(shí)施例方式
使用特殊性描述了本發(fā)明的主題來滿足法定需求。然而,該描述本身并非限制本申請的范圍。相反,發(fā)明人考慮所要求權(quán)利的主題也可以結(jié)合其它當(dāng)前或未來的技術(shù)以其它方式來實(shí)施,以包括與本文檔所描述的步驟類似的不同步驟或其組合。此外,盡管此處可使用術(shù)語“步驟”來意味著所采用的方法的不同元素,該術(shù)語不應(yīng)當(dāng)被解釋為暗示此處所揭示的各種步驟之間或之中的任何特定順序,除非當(dāng)明確描述了個(gè)別步驟的順序。最后,盡管后文的討論有時(shí)會集中在IA32體系結(jié)構(gòu)和/或x86處理器家族上,本揭示并非局限到這些分組,并且因此任一這樣的討論明確地包括可向其應(yīng)用和/或使用本發(fā)明的各種實(shí)施例的所有可應(yīng)用的處理器體系結(jié)構(gòu),包括但不限于,x86處理器體系結(jié)構(gòu)及其等效體系結(jié)構(gòu),并明確地包括IA32和IA64體系結(jié)構(gòu)及其等效體系機(jī)構(gòu)、擴(kuò)充和衍生方案。
計(jì)算機(jī)微處理器微處理器是微芯片上的計(jì)算機(jī)處理器。它被設(shè)計(jì)成執(zhí)行利用小的數(shù)字保留區(qū)用于將當(dāng)前GDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSGDT);用于將當(dāng)前LDT選擇器儲存到EAX的合成指令(如VMSLDT);用于將當(dāng)前IDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSIDT);以及用于將當(dāng)前TR選擇器儲存到EAX的合成指令(如VMSTR)。
48.如權(quán)利要求46所述的系統(tǒng),其特征在于,所述合成指令還包括用于清除虛擬化IF的合成指令(如VMCLI);以及用于設(shè)置虛擬化IF的合成指令(如VMSTI)。
49.如權(quán)利要求46所述的系統(tǒng),其特征在于,所述合成指令還包括,俘獲并處理用于確定自旋鎖采集何時(shí)失敗的合成指令。
50.如權(quán)利要求46所述的系統(tǒng),其特征在于,所述合成指令還包括用于返回標(biāo)識所述中央處理單元的身份的值的合成指令(如VMCPUID)。
51.如權(quán)利要求50所述的系統(tǒng),其特征在于,所述合成指令的十六進(jìn)制操作代碼是OF C7 C8 01 00。
52.一種包括用于改進(jìn)x86處理器體系結(jié)構(gòu)及其等效體系結(jié)構(gòu)中的處理器虛擬化的計(jì)算機(jī)可讀指令的計(jì)算機(jī)可讀媒質(zhì),所述體系結(jié)構(gòu)包括但不限于IA32體系結(jié)構(gòu),其特征在于,所述計(jì)算機(jī)可讀指令包括在所述x86處理器中引發(fā)隨后由運(yùn)行在所述x86處理器上的虛擬機(jī)器監(jiān)控器俘獲的異常,用于由所述虛擬機(jī)器監(jiān)控器處理的合成指令。
53.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括指令,其中所述訪客操作系統(tǒng)中的至少一個(gè)多處理器自旋鎖指令用確定自旋鎖采集何時(shí)失敗的合成指令(如VMSPLAF)來補(bǔ)充。
54.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括用于返回表示中央處理單元的身份的值的合成指令(如VMCPUID)。
55.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,它還包括使IF入棧的合成指令(如VMPUSHFD)。
56.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括使IF出棧的合成指令(如VMPOPFD)。
57.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括將當(dāng)前GDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSGDT)。
58.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括將當(dāng)前LDT選擇器儲存到EAX的合成指令(如VMSLDT)。
59.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括將當(dāng)前IDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSIDT)。
60.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括將當(dāng)前TR選擇器儲存到EAX的合成指令(如VMSTR)。
61.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括清除虛擬化IF的合成指令(如VMCLI)。
62.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括設(shè)置虛擬化IF的合成指令(如VMSTI)。
63.如權(quán)利要求52所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括用于確定所述指令是運(yùn)行在虛擬化處理器上還是直接運(yùn)行在x86處理器上的指令,所述指令包括用于執(zhí)行用于返回表示中央處理單元的身份的值的合成指令的指令;以及用于確定是否返回了對應(yīng)于中央處理單元的身份的值,并且(a)如果是這樣,則使用合成指令,以及(b)如果不是,則中止使用合成指令的指令。
64.如權(quán)利要求63所述的計(jì)算機(jī)可讀指令,其特征在于,所述合成指令的十六進(jìn)制操作代碼是OF C7 C8 01 00。
65.一種用于當(dāng)在x86處理器機(jī)器體系結(jié)構(gòu)及其等效體系結(jié)構(gòu)上執(zhí)行時(shí)處理合成指令的系統(tǒng),所述體系結(jié)構(gòu)包括但不限于IA32體系結(jié)構(gòu),所述系統(tǒng)包括移除、替換或補(bǔ)充訪客操作系統(tǒng)中以下預(yù)定義指令的一個(gè)或多個(gè)實(shí)例PUSHCS、PUSH SS、來自SS的MOV、CALLF、VERR、VERW和LAR。
66.一種用于優(yōu)化訪客操作系統(tǒng)以改進(jìn)當(dāng)在x86處理器體系結(jié)構(gòu)及其等效體系機(jī)構(gòu)上執(zhí)行時(shí)處理器虛擬化的方法,所述體系結(jié)構(gòu)包括但不限于IA32體系結(jié)構(gòu),其特征在于,所述方法包括移除、替換或補(bǔ)充訪客操作系統(tǒng)中以下預(yù)定義指令的一個(gè)或多個(gè)實(shí)例PUSHCS、PUSH SS、來自SS的MOV、CALLF、VERR、VERW和LAR;用讀取虛擬化CPUID信息的合成指令(如VMCPUID)來替換訪客操作系統(tǒng)中的CPUID;用確定自旋鎖采集何時(shí)失敗的合成指令(如VMSPLAF)來補(bǔ)充訪客操作系統(tǒng)中的自旋鎖指令;
對于用戶級代碼的直接執(zhí)行,任一對特許的破壞由VMM捕捉,并繼續(xù)傳遞到訪客的異常處理器。然而,特許級代碼的直接執(zhí)行涉及在用戶級上運(yùn)行特許級代碼,盡管事實(shí)是用特許級代碼將對該處理器的所有特許狀態(tài)元件具有完全的訪問的假定來書寫特許級代碼。為協(xié)調(diào)這-不一致性,VM依賴于處理器來對所有特許指令(即,直接或間接訪問特許狀態(tài)的指令)生成俘獲。特許破壞俘獲調(diào)用虛擬機(jī)器監(jiān)控器(VMM)內(nèi)的俘獲處理器。VMM俘獲處理器然后仿真特許指令的暗指狀態(tài)變化,并將控制返回至隨后的指令。特許指令的這一仿真通常涉及對具體VM實(shí)例專有的陰影狀態(tài)的使用。
例如,如果處理器體系結(jié)構(gòu)包括僅在特許模式中可訪問的特許模式寄存器(PMR),則從用戶級代碼對PMR的讀取或?qū)懭氲娜我粐L試都會引發(fā)俘獲。VMM俘獲處理器確定俘獲的起因,并參考對該關(guān)聯(lián)的VM的實(shí)例專有的陰影值。(該P(yáng)MR值可以與當(dāng)前保留在主機(jī)處理器的PMR中的值不同。)取決于俘獲指令的頻率以及處理俘獲的成本,該技術(shù)將遭受相對小但引人注意的性能惡化。例如,由IBM和Amdahl開發(fā)的某些VMM以本機(jī)速度的80-98%執(zhí)行,由此由于該俘獲額外開銷有2-15%的凈性能丟失。
x86/IA32的限制供虛擬化使用的理想化處理器被稱為是嚴(yán)格虛擬化的-即,可嚴(yán)格虛擬化的處理器允許實(shí)現(xiàn)滿足以下需求的直接執(zhí)行虛擬化機(jī)制(a)該VMM必須能夠處于處理器和系統(tǒng)資源的“控制”之下。
(b)在該VM下運(yùn)行的軟件(不論是在用戶還是在特許級)應(yīng)當(dāng)無法告知它正在虛擬機(jī)器中運(yùn)行。
為滿足這些需求,可嚴(yán)格虛擬化處理器展現(xiàn)以下特性·結(jié)合存儲器管理單元(MMU)或類似的地址翻譯機(jī)制·提供兩個(gè)或多個(gè)特許級別·將所有處理器狀態(tài)劃分成特許狀態(tài)或用戶狀態(tài);特許狀態(tài)應(yīng)當(dāng)包括指示當(dāng)前特許級別的任一控制或狀態(tài)域·當(dāng)在用戶級上試圖訪問特許狀態(tài)(不論讀還是寫)時(shí)引發(fā)俘獲·具有當(dāng)用戶級代碼試圖訪問應(yīng)當(dāng)被虛擬化的非特許狀態(tài)(如,定時(shí)器值、性能計(jì)數(shù)器、處理器特征寄存器)時(shí)可任選地引發(fā)俘獲的手段
·所有存儲器內(nèi)處理器結(jié)構(gòu)儲存在當(dāng)前地址空間之外,或可被保護(hù)免遭VM內(nèi)有誤或惡意存儲器訪問·在中斷或俘獲時(shí)刻的任一處理器狀態(tài)可在處理了中斷或俘獲之后被恢復(fù)成其俘獲前狀態(tài)若干現(xiàn)代的處理器-僅舉幾個(gè)例子,包括PowerPC和DEC Alpha-滿足這些需求。然而,IA32不滿足-它僅滿足前兩個(gè)需求。由此,IA32包含對VMM實(shí)現(xiàn)呈現(xiàn)若干挑戰(zhàn)性的許多虛擬化漏洞。
首先,IA32體系結(jié)構(gòu)在若干實(shí)例中違背了用戶/特許狀態(tài)分隔的需求,其最重要的涉及如圖4所示的用戶和特許狀態(tài)的EFLAGS寄存器。以下EFLAGS域應(yīng)當(dāng)被認(rèn)為是特許的VIP、VIF、VM、IOPL和IF。(所有其它域表示用戶狀態(tài),并且不需要被特許。)然而,對于IA32,當(dāng)從用戶模式執(zhí)行對EFLAGS寄存器的特許域(包括PUSHF/PUSHFD、POPF/POPFD和IRET)進(jìn)行讀寫的指令時(shí),它們不被俘獲,并且在IA32中沒有強(qiáng)迫這些指令被俘獲的手段。
此外,在IA32中,PUSHF和POPF指令通常在訪客內(nèi)核(環(huán)0)代碼中使用來保存并恢復(fù)IF(中斷啟用標(biāo)記)的狀態(tài)。在虛擬機(jī)器中,該內(nèi)核代碼在較高環(huán)級(如,環(huán)1)上執(zhí)行,且設(shè)置IOPL使得IN/OUT指令俘獲。由于運(yùn)行在VM內(nèi)的操作系統(tǒng)(OS)不應(yīng)當(dāng)被允許禁用主機(jī)處理器上的中斷,在虛擬機(jī)器代碼運(yùn)行時(shí)實(shí)際的IF值被設(shè)為1,不論虛擬IF的狀態(tài)如何。因此,PUSHF指令總是將具有IF=1的EFLAGS推入棧,并且POPF指令總是忽略出棧的EFLAGS值中的IF域。
除EFLAGS寄存器之外,特許和用戶狀態(tài)被混合的兩個(gè)另外的區(qū)域在CS和SS寄存器中。這些寄存器的最低兩位包含作為特許狀態(tài)的當(dāng)前特許級(CPL),而這些寄存器的較高的十四位包含非特許的段索引和描述符表選擇器。當(dāng)從用戶模式執(zhí)行明確或隱含地訪問CS或SS選擇器的指令(包括SS的CALLF、MOV和PUSH SS)時(shí),不俘獲。注意,其它指令促使CS或SS被推入棧(如,通過調(diào)用門的INT、INTO、JMPF,通過調(diào)用門的CALLF),但是這些指令可以被俘獲,允許VMM虛擬化被推入棧的CPL值。
允許用戶級代碼直接訪問特許處理器狀態(tài)的x86/IA32保護(hù)模型的另外的不適當(dāng)性包括以下指令SGDT、SIDT、SLDT、SMSW和STR。由于各種原因,GDT、LDT、IDT和TR的投影對正確的虛擬化是必需的,這意味著TR、GDTR和IDTR將指向VMM的陰影表,而不是由訪客操作系統(tǒng)指定的表。然而,由于非特許代碼可從這些寄存器讀取,不可能正確地虛擬化其內(nèi)容。另外,當(dāng)從非特許狀態(tài)執(zhí)行時(shí),在GDT和LDT內(nèi)訪問描述符的若干指令,包括LAR、LSL、VERR和VERW,它們不俘獲。由于GDT/LDT投影是必需的,這四個(gè)指令可在VM內(nèi)不正確地執(zhí)行。此外,CPUID指令不俘獲。為在虛擬機(jī)器內(nèi)模擬新處理器特征或禁用處理器特征,重要的是在從非特許模式執(zhí)行時(shí)能夠俘獲在CPUID上。
另外,VM環(huán)境內(nèi)的上下文切換依賴于保存和恢復(fù)處理器的整個(gè)狀態(tài)的能力,但是IA32未允許這一能力。更具體地,六個(gè)段(DS、ES、CS、SS、FS和GS)的每一個(gè)的高速緩存的描述符狀態(tài)在重加載段時(shí)被儲存在處理器內(nèi)部,并且該信息不可以通過任一體系結(jié)構(gòu)定義的機(jī)制來訪問。因此,這是對正確虛擬化的重大的障礙。例如,如果一個(gè)代碼片斷加載了一個(gè)段,然后修改了對應(yīng)于該段的存儲器內(nèi)描述符,則隨后的內(nèi)容切換將無法正確地恢復(fù)原始的段描述符信息。同樣,如果處理器在實(shí)時(shí)模式中操作,并且然后切換到保護(hù)模式,則該段將包含不對應(yīng)于保護(hù)模式GDT/LDT內(nèi)的描述符的選擇器,并且這一點(diǎn)上的上下文切換將無法正確地恢復(fù)最初在實(shí)時(shí)模式中加載的高速緩存的描述符。
同樣,當(dāng)在多處理器(MP)VM上將PAUSE指令(最近被添加來提供關(guān)于自旋鎖執(zhí)行的超線程處理器提示的NOP的前綴形式)用于自旋鎖時(shí),將導(dǎo)致問題。例如,一個(gè)虛擬處理器可在由第二虛擬處理器持有的鎖上自旋,并且如果第二虛擬處理器運(yùn)行在當(dāng)前未執(zhí)行的線程上時(shí),第一虛擬處理器將自旋很長一段時(shí)間,并由此浪費(fèi)了處理器循環(huán)。盡管如果VM自旋時(shí)可以通知虛擬機(jī)器監(jiān)控器將是有用的-以允許VMM調(diào)度另一VM運(yùn)行或發(fā)信號通知第二虛擬處理器線程來調(diào)度-然而當(dāng)前沒有這樣的通知方法可用。
某些VM環(huán)境使用了若干種不同的技術(shù)來解決這些缺點(diǎn),并一般以混合方式采用了仿真和直接執(zhí)行?;谔幚砥髂J胶蛷腛S本身衍生的其它信息選擇具體的技術(shù)。對于這一系統(tǒng),如圖5所示一般由VMM認(rèn)可四種不同的處理器模式分類。在環(huán)0模式(用于大多數(shù)現(xiàn)代OS內(nèi)核級代碼)的情況下忽略默認(rèn)行為是可能的-且期望的。下文描述的大部分討論了通過直接執(zhí)行機(jī)制安全地執(zhí)行所有環(huán)0代碼的需求。
許多VM環(huán)境利用一種稱作“環(huán)壓縮”的技術(shù)(首先由DEC工程師用于虛擬化VAX體系結(jié)構(gòu))。環(huán)壓縮涉及在較不特許的環(huán)(如環(huán)1)內(nèi)執(zhí)行環(huán)0代碼以允許VMM俘獲訪問虛擬化資源的某些特許級指令。例如,IA32頁表基礎(chǔ)指針被儲存在CR3寄存器內(nèi)。讀CR3的指令僅在環(huán)0內(nèi)可執(zhí)行。當(dāng)從環(huán)1執(zhí)行時(shí),該指令促使處理器生成俘獲(具體地,類型6的“非法操作”異常)。在俘獲時(shí),VMM獲取控制并仿真該指令,返回虛擬化的(訪客處理器的)CR3而非VMM(主機(jī)處理器的)CR3。
在很大程度上,VMM能夠隱藏預(yù)期在環(huán)0執(zhí)行的代碼實(shí)際上在不同的環(huán)級中執(zhí)行的事實(shí)。在前面的示例中,訪問CR3的代碼不知道已出現(xiàn)俘獲的事實(shí),因?yàn)樗信c該指令關(guān)聯(lián)的重要的狀態(tài)變化都被仿真。然而,IA32虛擬化的這些缺點(diǎn)阻礙了環(huán)壓縮完全不透明。圖6所示的指令揭示了這一事實(shí)環(huán)0代碼運(yùn)行在較高環(huán)級,并且使用這些指令的代碼是有問題的,而且在直接執(zhí)行環(huán)境內(nèi)運(yùn)行一般是不安全的。
另外,IA32體系結(jié)構(gòu)包括全局和局部的描述符表(分別為GDT和LDT)。這些表包括代碼和數(shù)據(jù)段以及控制環(huán)間轉(zhuǎn)移的門。訪客OS可設(shè)置其GDT或LDT以允許在環(huán)3和環(huán)0之間轉(zhuǎn)移。然而,VMM不允許直接到環(huán)0的任一轉(zhuǎn)移,因?yàn)檫@將給予訪客OS對主機(jī)處理器的直接控制。相反,VMM必須涉及到環(huán)0的任一轉(zhuǎn)移,以使它能夠正確地將執(zhí)行重定向到較低特許的環(huán)級。這意味著VMM不能直接使用訪客的GDT和LDT。相反,它必須將訪客的GDT和LDT的內(nèi)容投影到專用表,在需要時(shí)作出調(diào)節(jié)來防止任一直接到環(huán)0的轉(zhuǎn)移。這些調(diào)節(jié)被局限在DPL(描述符特許級)域和描述符類型域的代碼位上。由于這些較小的修改,被投影的描述符表將與訪客描述符表有略微的差異。
在大多數(shù)情況下,這些差異對軟件不可見;然而,如圖7所示,在IA32體系結(jié)構(gòu)中有揭示這一差異的若干指令。例如,VMM寫保護(hù)了重疊訪客GDT和LDT的頁,使得修改這些表的任一嘗試將導(dǎo)致VMM內(nèi)的寫保護(hù)錯(cuò)誤。作為響應(yīng),VMM確保對訪客GDT或LDT的變化在其內(nèi)部陰影表內(nèi)反映。然而,當(dāng)修改了對應(yīng)于當(dāng)前加載的選擇器的GDT或LDT條目時(shí),對相應(yīng)的存儲器內(nèi)描述符的修改是不可逆的,因?yàn)镮A32體系結(jié)構(gòu)不提供讀當(dāng)前加載的段描述符的任何方式。在這一情況下,VMM必須在允許修改存儲器內(nèi)描述符之前依賴于仿真。
IA32虛擬化的一個(gè)尤其有問題的方面涉及EFLAGS寄存器內(nèi)的IF(中斷屏蔽標(biāo)志),盡管這一狀態(tài)明顯應(yīng)當(dāng)被特許,它可容易地被非特許代碼讀取。此外,從非特許代碼內(nèi)修改IF的嘗試被簡單地忽略而不是生成俘獲-換言之,盡管可能俘獲操縱IF(包括STI和CLI)的某些指令,訪問IF的其它指令不被俘獲。同樣不被俘獲的其它指令(但是應(yīng)當(dāng)來自虛擬化的觀點(diǎn))在圖8中示出。
不幸的是,盡管代碼在虛擬機(jī)器內(nèi)執(zhí)行,在虛擬化IF內(nèi)作出真實(shí)IF的鏡像是不可行的,因?yàn)檫@將允許訪客OS無限地關(guān)閉中斷,即,有程序錯(cuò)誤的訪客OS可能掛起整個(gè)主機(jī)系統(tǒng)。為此,當(dāng)執(zhí)行訪客代碼時(shí),主機(jī)IF一直保留啟用(即,不屏蔽中斷),即使清除了虛擬化(訪客)的IF。
類似地,俘獲STI/CLI指令需要調(diào)節(jié)EFLAGS的IOPL域,IOPL是可向非特許代碼容易地展現(xiàn)的特許域的另一示例,它具有與IF關(guān)聯(lián)的那些域類似的缺點(diǎn)。涉及IF和IOPL域的有問題的指令在圖9中示出。
IA32體系結(jié)構(gòu)也定義了由處理器使用的某些數(shù)據(jù)結(jié)構(gòu),包括TSS、GDT、LDT和IDT,這些數(shù)據(jù)結(jié)構(gòu)位于由頁表定義的邏輯地址空間內(nèi)。當(dāng)訪客OS運(yùn)行在虛擬機(jī)器內(nèi)時(shí),其頁表定義了該地址空間的哪些區(qū)域用于映射存儲器、幀緩存、存儲器映射的寄存器等等。幾乎不變的是,該地址空間的某些部分保留未使用。盡管訪客OS維護(hù)其自己的TSS、GDT、LDT和IDT,然而VMM提供了這些數(shù)據(jù)結(jié)構(gòu)的其自己的專用版本。然而,這些結(jié)構(gòu)必須被映射到由訪客OS控制的地址空間的某處。VMM的代碼和內(nèi)部數(shù)據(jù)結(jié)構(gòu)也必須在同一地址空間內(nèi)映射。因此,VMM需要找出當(dāng)前未由訪客OS使用的地址空間的某一部分(相對較小)。該區(qū)域被稱為“VMM工作區(qū)域”。VMM積極地監(jiān)控訪客OS頁表以確定訪客OS是否試圖將頁映射到當(dāng)前被VMM工作區(qū)域占用的區(qū)域中。如果是,VMM就找出地址空間的另一未使用部分并重定位其自身。
該技術(shù)允許廣泛的訪客OS兼容性,但是當(dāng)使用整個(gè)訪客地址空間時(shí),它是有問題的,這一情況會在大量物理存儲器被分配給虛擬機(jī)器時(shí)出現(xiàn)。為此,VMM提供了一種機(jī)制,通過該機(jī)制,訪客OS可特別地為VMM工作區(qū)域保留其地址空間的一部分。一旦指定了這一空間,VMM就將其自身重定位到這一空間,并停止積極地跟蹤對頁表的改變(在訪客OS兌現(xiàn)其不再使用保留區(qū)域的承諾的假定下)。
俘獲指令是一種好壞摻半的事情。一方面,如果指令俘獲,它可以被正確地虛擬化。另一方面,俘獲引發(fā)極大的性能額外開銷。例如,STI指令通常需要一個(gè)循環(huán)來執(zhí)行,但是當(dāng)在VM環(huán)境內(nèi)執(zhí)行STI時(shí),它引發(fā)由VMM處理的俘獲,在Pentium 4處理器上,它通常需要500個(gè)以上的循環(huán)來執(zhí)行。某些VM試圖通過跟蹤高頻俘獲指令,并在可能時(shí)用在虛擬化環(huán)境中保存原始指令的語義的等效的非俘獲代碼對它們打補(bǔ)丁,來減輕這一額外開銷。這可以通過使用訪客OS內(nèi)核空間內(nèi)分配的不可分頁“補(bǔ)丁緩存”來完成。
然而,在操作中,可打補(bǔ)丁的俘獲指令需要至少五字節(jié)長度來允許長JMP指令一如果沒有這必需的五字節(jié),VMM將需要覆寫俘獲指令之后的一個(gè)或多個(gè)指令,因?yàn)橐蜓a(bǔ)丁的指令可能在長度上小于五字節(jié)。
改進(jìn)的虛擬化(如IA32)IA32體系結(jié)構(gòu)的許多上述缺點(diǎn)和限制由當(dāng)期望時(shí)不能引發(fā)俘獲的指令引起。換言之,如果這些指令相反將引發(fā)俘獲,VMM就能夠正確地仿真這些指令。本發(fā)明提供了各種實(shí)施例來有效地為這些有問題的指令創(chuàng)建俘獲。本發(fā)明的各種實(shí)施例針對通過優(yōu)化OS代碼并使用“合成指令”(后文更詳細(xì)地討論)來改進(jìn)IA32體系結(jié)構(gòu)中的虛擬化。本發(fā)明的若干實(shí)施例包括圖10中示出的一系列步驟來如下地優(yōu)化訪客OS·在訪客OS中,找出并移除和/或替換來自SS的PUSH CS、PUSH SS、MOV或環(huán)0代碼內(nèi)的CALLF的任一使用。如上所述,這些指令揭示了運(yùn)行在虛擬機(jī)器內(nèi)的環(huán)0代碼實(shí)際上在較低特許環(huán)級上運(yùn)行的事實(shí)。然而,這些指令在大多數(shù)操作系統(tǒng)中很少見,并一般可以一起移除或用其它現(xiàn)有的指令或現(xiàn)有指令組來替換。
·在訪客OS中,找出VERR、VERW或LAR的任一使用并核實(shí)其使用不依賴于描述符類型的DPL或代碼位。同樣,這些指令在大多數(shù)OS中不使用。
·在訪客OS中,找出SGDT、SLDT、SIDT或STR的任一使用,并移除這些指令或用相應(yīng)的VM合成指令替換它們。為實(shí)現(xiàn)這一步驟,用更新描述符表?xiàng)l目的合成指令(如VMWRDESC)替換訪客操作系統(tǒng)中的描述符表?xiàng)l目,避免了與維護(hù)陰影描述符表相關(guān)聯(lián)的額外開銷。
·在訪客OS中,找出CPUID的任一使用-即,在OS內(nèi)由系統(tǒng)的所有部分用于訪問CPUID信息的公共子例程訪問它-并修改讀取CPUID的公共子例程以使用合成指令來訪問虛擬化的CPUID信息而不是直接讀取CPUID。盡管只要由主機(jī)處理器返回的具體CPUID信息不與訪客特征沖突,CPUID虛擬化就不必要,然而如果新處理器要實(shí)現(xiàn)VMM不提供支持的特征,則虛擬化的CPUID值就將指示該特征不存在,而非虛擬化的CPUID值卻指示它存在。
·在訪客OS中,查找任一MP自旋鎖,并修改它們以使用VMSPLAF(自旋鎖采集失敗)合成指令。
·在訪客OS中,找出PUSHF(D)和POPF(D)的任何實(shí)例,并且如果這些指令的使用依賴于要入?;虺鰲5腎F值,則用對應(yīng)的合成指令來替換它們。該步驟通常表示涉及令OS變得“VM干凈”的大多數(shù)工作。
·在訪客OS中,標(biāo)識修改GDT或LDT條目的位置,并減少到最小修改次數(shù),然后用VMWRDESC合成指令來替換其余的修改。(尤其要小心以避免當(dāng)前加載的選擇器被修改的情況。)·在訪客OS中,確保GDT和LDT位于不包含其它數(shù)據(jù)結(jié)構(gòu)的頁上,如果不是這樣,則將其變成這樣。
·在訪客OS中,定位環(huán)0代碼內(nèi)的STI和CLI的實(shí)例,并用長度為五字節(jié)的相應(yīng)合成指令來替換它們。通過使用合成形式,VMM能夠更好地對代碼打補(bǔ)丁,以降低對俘獲的需求,因?yàn)橹苯訉TI和CLI指令(它們的每一個(gè)長度都小于五字節(jié))打補(bǔ)丁需要VMM覆寫俘獲指令之后的一個(gè)或多個(gè)指令,這是由于典型的可打補(bǔ)丁的俘獲指令長度上需要至少五字節(jié)來允許長JMP指令。
·使用以下引證的VMSETINFO合成指令。上述九個(gè)指令完成了“VM清除”,使得該合成指令可以啟用環(huán)0內(nèi)的直接執(zhí)行。
·動(dòng)態(tài)地禁用周圍的直接執(zhí)行并在保持“VM不安全”的環(huán)0代碼的大塊之后重新啟用它。通過為訪客操作系統(tǒng)提供合成指令來動(dòng)態(tài)地禁用(如VMDXDSBL)和重啟用(VMDXENBL)直接執(zhí)行-訪客操作系統(tǒng)能夠避免“VM不安全”環(huán)0的大代碼塊。
·確定VMM是否能使用“補(bǔ)丁緩存”,如果是這樣,則在內(nèi)核空間內(nèi)分配補(bǔ)丁緩存以便獲得最好的性能。該補(bǔ)丁緩存必需是不可分頁的,被映射到執(zhí)行環(huán)0代碼的所有地址空間上下文中,并且其大小由VMGETINFO合成指令指示。補(bǔ)丁緩存的位置和大小可使用下文引證的VMSETINFO指令來設(shè)置。補(bǔ)丁緩存應(yīng)當(dāng)對整個(gè)系統(tǒng)分配一次,而不是對每一虛擬處理器分配。
·確定VMM是否需要“VMM工作區(qū)域”,如果是這樣,分配并保留所指示大小的地址空間并在訪客OS內(nèi)對齊。如后文所討論的通過使用VMSETINFO指令來設(shè)置該保留區(qū)域的基礎(chǔ)。
VM“合成指令”換言之是對VM具有特殊意義的非法處理器指令。由此,當(dāng)在不支持合成指令的VM或非VM環(huán)境內(nèi)執(zhí)行合成指令時(shí),它們生成類型6(非法操作)異常,并因此對OS重要的是在使用它們之前檢查合成指令支持。為檢查VM合成指令支持,OS執(zhí)行一VMCPUID指令,并且如果該指令生成非法指令錯(cuò)誤,OS就確定合成指令不被支持。(注意,VMCPUID可以從所有的特許級執(zhí)行,因此它可以在用戶級代碼中安全使用。)這一同樣的測試可以用于確定是否在VM環(huán)境中執(zhí)行,如果是這樣,其后準(zhǔn)許虛擬機(jī)器訪問或修改基礎(chǔ)VMM的特征或行為。以下是使用嘗試/異常機(jī)制和結(jié)構(gòu)化異常處理來執(zhí)行這一測試的示例代碼<pre listing-type="program-listing">  BOOL   SyntheticInstructionsSupportedO  {   Boolean synthInstrSupported=TRUE;   _try{   _asm{   _emit 0x0F//發(fā)出VMCPUID指令   _emit 0xC7   _emit 0xC8   _emit 0x01   _emit 0x00  }  }_except(EXCEPTION_EXECUTE_HANDLER){   synthInstrSupported=FALSE;  }  return synthInstrSupported;  }</pre>通過使用合成指令,不利地影響x86處理器上的虛擬化的x86 ISA指令因此可以用引發(fā)x86處理器中的異常的合成指令來替換或補(bǔ)充,該異常然后由運(yùn)行在所述x86處理器上的虛擬機(jī)器俘獲用于由所述虛擬機(jī)器處理。同樣,對于遞歸的虛擬化,其中第一虛擬機(jī)器運(yùn)行在第二虛擬機(jī)器上,指令由合成指令來替換或補(bǔ)充,以引發(fā)x86處理器中可以通過第二虛擬機(jī)器傳遞的異常,由所述第一虛擬機(jī)器俘獲用于處理。
對于本發(fā)明的若干實(shí)施例而言,合成指令的長度都是五字節(jié),這允許它們可用JMP指令來打補(bǔ)丁,以減小俘獲額外開銷。(在其它實(shí)施例中,合成指令可以更長或更短。)合成指令的十六進(jìn)制編碼使用以下格式OF C7 C8 XXXX(其中,“XX”是兩位十六進(jìn)制變量,用于標(biāo)識具體的合成指令)。該指令解碼為CMPXCHG8B指令,但是它被認(rèn)為是“非法”的,因?yàn)橹付ǖ哪繕?biāo)操作數(shù)是寄存器(并由此導(dǎo)致俘獲)。然而,在本發(fā)明的若干實(shí)施例中,合成指令不支持任何形式的指令前綴(如,LOCK、REP、段忽略(override)、操作數(shù)大小忽略、地址大小忽略),并且在這一環(huán)境中試圖使用前綴會導(dǎo)致非法指令異常(UD#)。
合成指令此處詳細(xì)描述了用于本發(fā)明的各種實(shí)施例的合成指令的子集。此處未列出的另外的合成指令在本發(fā)明的上文中也已描述。同樣,本發(fā)明未明確描述的其它合成指令仍被本發(fā)明的各種實(shí)施例所期望,并且此處沒有內(nèi)容應(yīng)當(dāng)被認(rèn)為是將本發(fā)明局限在明確標(biāo)識的具體合成指令上。
VMGETINFO-獲取VM信息VMGETINFO取出一段具體的VM信息,并將其放置到EDX:EAX。所返回的信息取決于ECX中的索引。如果指定的索引引用不被虛擬處理器支持的信息片斷,則生成GP(0)。如果該索引引用被支持的信息片斷,則將EDX:EAX設(shè)為信息值。(注意,用于該指令所使用的寄存器慣例類似于RDMSR指令。)該指令與大多數(shù)處理器指令不同,它影響整個(gè)系統(tǒng)的狀態(tài)。在具有多處理器的系統(tǒng)上,用VMGETINFO訪問的狀態(tài)被認(rèn)為是“全局的”。例如,使用一個(gè)處理器上的VMSETINFO設(shè)置VMM工作區(qū)域基礎(chǔ)允許隨后使用第二處理器上的VMGETINFO讀回相同的值。
VMSETINFO-設(shè)置VM信息VMSETINFO設(shè)置如EDX:EAX中所指定的一段具體的VM信息。要設(shè)置的信息取決于ECX中的索引。如果指定的索引引用不被虛擬處理器支持的或不可寫的信息片斷,則生成GP(0)。(注意,用于該指令的寄存器慣例類似于WRMSR指令)。該指令與大多數(shù)處理器指令不同,它影響整個(gè)系統(tǒng)的狀態(tài)。在具有多處理器的系統(tǒng)上,使用VMSETINFO設(shè)置的狀態(tài)被認(rèn)為是“全局的”。例如,使用一個(gè)處理器上的VMSETINFO設(shè)置VMM工作區(qū)域基礎(chǔ)令該數(shù)據(jù)然后可以使用第二處理器上的VMGETINFO來讀回。
VMDXDSBL-禁用直接執(zhí)行VMDXDSBL禁用直接執(zhí)行,直到下一次通過使用VMDXENBL來啟用直接執(zhí)行為止。該指令僅可從環(huán)0代碼內(nèi)執(zhí)行,并應(yīng)當(dāng)僅在禁用中斷(或任一形式的占先)時(shí)執(zhí)行,以防止直接執(zhí)行被禁用很長一段時(shí)間。它可以用于保護(hù)非“VM安全”(即,包含當(dāng)在VM環(huán)境內(nèi)直接執(zhí)行中運(yùn)行時(shí)會中斷的若干非虛擬化指令或假定)的小代碼塊。該指令僅影響它在其上執(zhí)行的處理器。它不影響虛擬機(jī)器內(nèi)的其它虛擬處理器。如果直接執(zhí)行已被禁用,該指令不做任何事情。
VMDXENBL-啟用直接執(zhí)行VMDXENBL在可能時(shí)啟用直接執(zhí)行。該指令僅可以從環(huán)0代碼內(nèi)執(zhí)行,并應(yīng)當(dāng)僅在禁用中斷(或任一形式的占先)時(shí)執(zhí)行。它可以結(jié)合VMDXDSBL指令使用來保護(hù)非“VM安全”(即,包含當(dāng)在VM環(huán)境內(nèi)直接執(zhí)行中運(yùn)行時(shí)會中斷的若干非虛擬化指令或假定)的小代碼塊。該指令僅影響它所在其上執(zhí)行的處理器。它不影響虛擬機(jī)器內(nèi)的其它虛擬處理器。如果直接執(zhí)行已啟用,該指令不做任何事情。
VMCPUOD-虛擬化CPU信息VMCPUID類似于真實(shí)的CPUID指令,除它返回投影的CPU信息之外。
VMHLT-暫停VMHLT類似于正常的HLT指令,除它可以從任一處理器模式執(zhí)行之外一包括環(huán)3和v86模式。它可以被插入到任一“空閑循環(huán)”中以減少虛擬機(jī)器內(nèi)的處理器使用。在某些實(shí)施例中,這個(gè)用于暫停處理器的合成指令(如VMHALT)可以作為用戶級訪客代碼執(zhí)行。
VMSPLAF-自旋鎖采集失敗自旋鎖在支持對稱多處理的操作系統(tǒng)內(nèi)被頻繁地使用。這些鎖通常保護(hù)在處理器之間共享的關(guān)鍵資源。它們依賴于該鎖將由另一其它處理器占有相對較少的周期的事實(shí)。在多處理器VM系統(tǒng)內(nèi),如果占有自旋鎖的虛擬處理器被臨時(shí)先占且在其它虛擬處理器等候由掛起的處理器占有的資源時(shí)不運(yùn)行,典型的自旋鎖行為可導(dǎo)致較差的性能和較高的CPU使用。為避免這一情況,VMSPLAF指令可以用于通知VMM,OS正在等候它未能采集的自旋鎖。作為響應(yīng),VMM或可調(diào)度另一虛擬處理器運(yùn)行,或掛起當(dāng)前虛擬處理器并調(diào)度它在以后當(dāng)資源被釋放時(shí)執(zhí)行。
VMPUSHFD-虛擬化標(biāo)志寄存器進(jìn)棧VMPUSHFD類似于正常的PUSHFD指令,除了它是“VM安全”的之外。它假定32位操作數(shù)大小和32位棧指針。如果CS和sS當(dāng)前不是32位,則其行為不確定。也不保證以與真實(shí)PUSHFD指令相同的方式執(zhí)行段邊界或?qū)懞藢?。進(jìn)棧的EFLAGS寄存器的值將包含投影的IF值。然而,IOPL域的值可能不正確。需要讀IOPL的代碼應(yīng)當(dāng)響應(yīng)于INT指令、外部中斷或異常使用進(jìn)棧的EFLAGS的值。該指令僅可在環(huán)0代碼內(nèi)使用。
VMPOPFD-虛擬化標(biāo)志寄存器出棧VMPOPFD類似于正常的POPFD指令,除了它是“VM安全”的之外。它假定32位操作數(shù)大小和32位棧指針。如果CS和SS當(dāng)前不是32位,其行為不確定。也不保證以與真實(shí)PUSHF指令相同的方式執(zhí)行段邊界或?qū)懞藢?。出棧的EFLAGS內(nèi)的IF域的值將被兌現(xiàn)。然而,IOPL域的值可能被忽略。需要調(diào)節(jié)IOPL的代碼應(yīng)當(dāng)使用IRETD或VMIRETD指令。該指令僅可在環(huán)0代碼內(nèi)使用。
VMCLI-清除中斷標(biāo)志VMCLI類似于正常的CLI指令,除了它是五字節(jié)長且可被打補(bǔ)丁來避免被俘獲到VMM中以外。該指令僅可在環(huán)0代碼內(nèi)使用。
VMSTI-設(shè)置中斷標(biāo)志VMSTI類似于正常的STI指令,除了它是五字節(jié)長且可以被打補(bǔ)丁來避免被俘獲到VMM中以外。它也與正常的STI不同,因?yàn)樗环乐乖谙乱恢噶钔瓿汕俺霈F(xiàn)中斷。該規(guī)則的唯一的異常是如果VMSTI之后是連同VMSTI一起自動(dòng)執(zhí)行的SYSEXIT指令。該指令僅可以在環(huán)0代碼內(nèi)使用。
VMIRETD-從中斷返回VMIRETD類似于正常的IRETD指令,除了它是“VM安全”的之外。與正常的IRETD指令不同,該指令總是假定32位操作數(shù)大小和32位棧指針。如果CS和SS的當(dāng)前大小不是32位,則其行為不確定。該指令僅可在環(huán)0代碼內(nèi)使用。只要潛在地使用了IRETD,它就應(yīng)當(dāng)被使用來返回到v86模式。使用VMIRETD避免了當(dāng)從CPL>0返回至v86模式時(shí)IA32處理器的不合宜的行為。(注意,環(huán)壓縮導(dǎo)致環(huán)0代碼在VM環(huán)境內(nèi)在較少特許的環(huán)級運(yùn)行。)VMSGDT-儲存全局描述符表VMSGDT類似于真實(shí)的SGDT指令,除了它儲存投影的GDT基礎(chǔ)和長度之外。它假定對存儲器操作數(shù)的尋址模式是DS:[EAX],并且DS是開放的可寫段。如果DS不是開放的可寫段,其行為不確定。
VMSIDT-儲存中斷描述符表VMSIDT類似于真實(shí)的SIDT指令,除了它儲存投影的IDT基礎(chǔ)和長度之外。它假定對存儲器操作數(shù)的尋址模式是DS:[EAX],并且DS是開放的可寫段。如果DS不是開放的可寫段,其行為不確定。
VMSLDT-儲存局部描述符表VMSLDT類似于真實(shí)的SLDT指令,除了它儲存投影的LDT選擇器之外。它假定目標(biāo)操作數(shù)的EAX寄存器。
VMSTR-儲存任務(wù)寄存器VMSTR類似于真實(shí)的STR指令,除它儲存投影的LDT選擇器之外。它假定目標(biāo)操作數(shù)是EAX寄存器。
VMSDTE-儲存到描述符表?xiàng)l目
VMSDTE用于更新GDT或LDT內(nèi)的描述符條目。為使用,將選擇器加載到ECX內(nèi)。忽略ECX最頂上的16位和最底部的2位(位0和1)。ECX的位2指示選擇器引用全局還是局部描述符表。其余部分(位3到位15)對選擇器進(jìn)行編碼-即,到描述符表的偏移。EDX:EAX應(yīng)當(dāng)使用值來加載以寫入指定的描述符表?xiàng)l目。應(yīng)當(dāng)使用該指令而非直接修改描述符表,使得VMM的應(yīng)用描述符表可以在同一時(shí)刻被更新。不要修改對應(yīng)于當(dāng)前加載的段選擇器的描述符條目。這將導(dǎo)致不確定的行為。如果不被VMM所推薦(如由VMGETINFO指令返回的VMM信息位4所指示的),不要使用該指令。當(dāng)不被推薦時(shí)使用該指令將導(dǎo)致當(dāng)運(yùn)行在將來的VMM實(shí)現(xiàn)上時(shí)較差的性能。該指令僅可以從環(huán)0代碼使用。
總結(jié)本發(fā)明描述的各種系統(tǒng)、方法和技術(shù)可以硬件或軟件,或者適當(dāng)時(shí)兩者的組合來實(shí)現(xiàn)。由此,本發(fā)明的方法和裝置,或其某些方面或其部分可采用包含在有形媒質(zhì)中的程序代碼(即指令)的形式,有形媒質(zhì)如軟盤、CD-ROM、硬盤或任一其它機(jī)器可讀存儲媒質(zhì),其中,當(dāng)程序代碼被加載到機(jī)器,如計(jì)算機(jī),并由其執(zhí)行時(shí),該機(jī)器變?yōu)橛糜趯?shí)踐本發(fā)明的裝置。在程序代碼在可編程計(jì)算機(jī)上執(zhí)行的情況下,計(jì)算機(jī)一般包括處理器、可由處理器讀取的存儲媒質(zhì)(包括易失和非易失存儲器和/或存儲元件)、至少一個(gè)輸入設(shè)備以及至少一個(gè)輸出設(shè)備。一個(gè)或多個(gè)程序較佳地以高級程序語言或面向?qū)ο缶幊陶Z言實(shí)現(xiàn)來與計(jì)算機(jī)系統(tǒng)進(jìn)行通信。然而,如期望,程序可以匯編語言或機(jī)器語言實(shí)現(xiàn)。在任一情況下,語言可以是已編譯或已解釋語言,并與硬件實(shí)現(xiàn)相組合。
本發(fā)明的方法和裝置也可以通過某一傳輸媒質(zhì),如通過電線或電纜、通過光纖或通過任一其它形式的傳輸發(fā)送的程序代碼的形式來實(shí)施,其中,當(dāng)程序代碼被接受并被加載到機(jī)器,如EPROM、門陣列、可編程邏輯器件(PLD)、客戶機(jī)計(jì)算機(jī)、錄影機(jī)等,并由其執(zhí)行時(shí),該機(jī)器變?yōu)橛糜趯?shí)踐本發(fā)明的裝置。當(dāng)在通用處理器上實(shí)現(xiàn)時(shí),程序代碼與處理器組合來提供操作來執(zhí)行本發(fā)明的標(biāo)引功能的唯一裝置。
盡管結(jié)合各個(gè)附圖的較佳實(shí)施例描述了本發(fā)明,可以理解,在不背離本發(fā)明的情況下,可以使用其它類似的實(shí)施例,或可以向描述的實(shí)施例作出修改和添加來執(zhí)行本發(fā)明的同一功能。例如,盡管在仿真?zhèn)€人計(jì)算機(jī)的功能的數(shù)字設(shè)備的上下文中描述了本發(fā)明的示例性實(shí)施例,本領(lǐng)域的技術(shù)人員將認(rèn)識到,本發(fā)明不限于這類數(shù)字設(shè)備,本申請中所描述的可應(yīng)用到任意數(shù)量的現(xiàn)有或新興計(jì)算裝置或環(huán)境,如游戲控制臺、手持式計(jì)算機(jī)、便攜式計(jì)算機(jī)等等,不論它們是有線還是無線,并且可應(yīng)用到通過通信網(wǎng)絡(luò)連接并跨網(wǎng)絡(luò)進(jìn)行交互的任意數(shù)量的這類計(jì)算裝置。此外,應(yīng)當(dāng)強(qiáng)調(diào),此處考慮了各種計(jì)算機(jī)平臺,包括手持式設(shè)備操作系統(tǒng)和其它應(yīng)用專用硬件/軟件接口系統(tǒng),尤其是當(dāng)無線網(wǎng)絡(luò)化設(shè)備的數(shù)量持續(xù)增長的情況下。因此,本發(fā)明不應(yīng)局限與任一單個(gè)環(huán)境,而是依照所附權(quán)利要求書的寬度和范圍來解釋。
最后,此處所描述的揭示的實(shí)施例可適用于在其它處理器體系結(jié)構(gòu)、基于計(jì)算機(jī)的系統(tǒng)或系統(tǒng)虛擬化中使用,這類實(shí)施例明確地被本發(fā)明的揭示所期望,并且由此,本發(fā)明不應(yīng)局限于此處所描述的具體實(shí)施例,而是相反應(yīng)被更廣泛地解釋。同樣,用于不同于處理器虛擬化的目的的合成指令的使用也被本發(fā)明的揭示所期望,并且在不同于處理器虛擬化的上下文中對合成指令的任一這樣的使用應(yīng)當(dāng)被最廣泛地讀入本發(fā)明的揭示中。
權(quán)利要求
1.一種用于改進(jìn)x86處理器體系結(jié)構(gòu)及其等效體系結(jié)構(gòu)中的處理器虛擬化的方法,所述體系結(jié)構(gòu)包括但不限于IA32體系結(jié)構(gòu),其特征在于,所述方法包括移除、替換或補(bǔ)充訪客操作系統(tǒng)中不利地影響對在x86處理器上操作的虛擬機(jī)器的虛擬化的一個(gè)或多個(gè)預(yù)定義指令。
2.如權(quán)利要求1所述的方法,其特征在于,所述一個(gè)或多個(gè)指令包括以下指令組的成員PUSH CS、PUSH SS、來自SS的MOV、CALLF、VERR、VERW和LAR。
3.如權(quán)利要求1所述的方法,其特征在于,不利地影響x86處理器上的虛擬化的指令由合成指令來替換或補(bǔ)充,以在x86處理器中引發(fā)異常,所述異常然后由運(yùn)行在所述x86處理器上的虛擬機(jī)器俘獲用于由所述虛擬機(jī)器處理。
4.如權(quán)利要求3所述的方法,其特征在于,對于運(yùn)行在第二虛擬機(jī)器上的第一虛擬機(jī)器而言,由合成指令替換或補(bǔ)充以在x86處理器中引發(fā)異常的指令,所述異常然后由運(yùn)行在所述x86處理器上的所述第一虛擬機(jī)器俘獲,用于由所述虛擬機(jī)器通過有效地繞過所述第二虛擬機(jī)器來處理。
5.如權(quán)利要求3所述的方法,其特征在于,所述合成指令在用戶模式和特許模式中都可使用。
6.如權(quán)利要求3所述的方法,其特征在于,所述合成指令沒有對現(xiàn)有x86指令的推論。
7.如權(quán)利要求3所述的方法,其特征在于,所述合成指令是用于禁用直接執(zhí)行的指令(如,VMDXDSBL)。
8.如權(quán)利要求3所述的方法,其特征在于,所述合成指令是用于啟用(或重啟用)直接執(zhí)行的指令(如,VMDXENBL)。
9.如權(quán)利要求3所述的方法,其特征在于,對于用合成指令替換的指令,所述合成指令在語法上類似于被替換的指令。
10.如權(quán)利要求9所述的方法,其特征在于,長度上少于五字節(jié)的指令用長度上至少為五字節(jié)的合成指令來替換(如以便于打補(bǔ)丁)。
11.如權(quán)利要求10所述的方法,其特征在于,STI指令用至少為五字節(jié)長的合成指令(如VMSTI)來替換。
12.如權(quán)利要求10所述的方法,其特征在于,CLI指令用至少為五字節(jié)長的合成指令(如VMCLI)來替換。
13.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中的CPUID指令用讀虛擬化CPUID信息的合成指令(如VMCPUID)來替換。
14.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中至少一個(gè)多處理器自旋鎖指令用確定自旋鎖采集何時(shí)失敗的合成指令(如VMSPLAF)來補(bǔ)充。
15.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中的PUSHF(D)指令用將IF推入棧的合成指令(如VMPUSHFD)來替換。
16.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中的POPF(D)指令用將IF出棧的合成指令(如VMPOPFD)來替換。
17.如權(quán)利要求3所述的方法,其特征在于,在訪客操作系統(tǒng)中修改描述符表?xiàng)l目的指令用更新所述描述符表?xiàng)l目的合成指令(如VMWRDESC)來替換,避免了與維護(hù)陰影描述符表相關(guān)聯(lián)的額外開銷。
18.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中SGDT指令用將當(dāng)前GDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSGDT)來替換。
19.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中SLDT指令用將當(dāng)前LDT選擇器儲存到EAX的合成指令(如VMSLDT)來替換。
20.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中的SIDT指令用將當(dāng)前IDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSIDT)來替換。
21.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中的STR指令用將當(dāng)前TR選擇器儲存到EAX的合成指令(如VMSTR)來替換。
22.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中的CLI指令用清除虛擬化IF的合成指令(如VMCLI)來替換。
23.如權(quán)利要求3所述的方法,其特征在于,訪客操作系統(tǒng)中的STI指令用設(shè)置虛擬化IF的合成指令(如VMSTI)來替換。
24.如權(quán)利要求3所述的方法,其特征在于,用于暫停所述處理器的合成指令(如VMHALT)可以作為用戶級訪客代碼執(zhí)行。
25.一種使操作系統(tǒng)確定它是運(yùn)行在虛擬化處理器上還是直接運(yùn)行在x86處理器上的方法,其特征在于,所述方法包括執(zhí)行用于返回表示中央處理單元的身份的值的合成指令(如VMCPUID);如果返回了值,則推斷所述操作系統(tǒng)運(yùn)行在虛擬化處理器上,并其后使用合成指令;以及如果出現(xiàn)異常,則推斷所述操作系統(tǒng)直接運(yùn)行在x86處理器上,并其后制止使用合成指令。
26.如權(quán)利要求25所述的方法,其特征在于,它還包括,如果返回了值,則訪問或修改基礎(chǔ)虛擬機(jī)器監(jiān)控器的特征或行為。
27.如權(quán)利要求25所述的方法,其特征在于,所述合成指令的十六進(jìn)制操作代碼為0F C7 C8 01 00。
28.一種使改進(jìn)的操作系統(tǒng)代碼使用長JMP指令為可俘獲指令有效地打補(bǔ)丁的方法,其特征在于,所述方法包括以下步驟在訪客操作系統(tǒng)中,定位長度小于五字節(jié)的可俘獲指令(如運(yùn)行在環(huán)0代碼內(nèi)的STI和CLI指令)的實(shí)例,并用至少為五字節(jié)長的相應(yīng)合成指令(如分別為VMSTI和VMCLI)來替換這些可俘獲指令。
29.一種用于在x86處理器體系結(jié)構(gòu)及其等效體系結(jié)構(gòu)上處理合成指令的系統(tǒng),所述體系結(jié)構(gòu)包括但不限于IA32體系結(jié)構(gòu),其特征在于,所述系統(tǒng)包括用于在所述合成指令引發(fā)x86處理器中的異常之后俘獲由訪客操作系統(tǒng)發(fā)出的所述合成指令的子系統(tǒng);以及用于為訪客操作系統(tǒng)處理所述合成指令的子系統(tǒng)。
30.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括一子系統(tǒng),其中俘獲并處理用于確定自旋鎖采集何時(shí)失敗的合成指令(如VMSPLAF)。
31.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于處理使IF入棧的合成指令(如VMPUSHFD)的子系統(tǒng)。
32.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于處理使IF出棧的合成指令(如VMPOPFD)的子系統(tǒng)。
33.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于處理更新描述符表?xiàng)l目的合成指令(如VMWRDESC)的子系統(tǒng),避免了與維護(hù)陰影描述符表相關(guān)聯(lián)的額外開銷。
34.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于處理將當(dāng)前GDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSGDT)的子系統(tǒng)。
35.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于處理將當(dāng)前LDT選擇器儲存到EAX的合成指令(VMSLDT)的子系統(tǒng)。
36.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括處理將當(dāng)前IDT基礎(chǔ)長度儲存到EAX的合成指令(如VMSIDT)的子系統(tǒng)。
37.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于處理將當(dāng)前TR選擇器儲存到EAX的合成指令(如VMSTR)的子系統(tǒng)。
38.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于處理清除虛擬化IF的合成指令(如VMCLI)的子系統(tǒng)。
39.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于處理設(shè)置虛擬化IF的合成指令(如VMSTI)的子系統(tǒng)。
40.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于處理暫停可作為用戶級訪客代碼執(zhí)行的處理器的合成指令(如VMHALT)的子系統(tǒng)。
41.如權(quán)利要求29所述的系統(tǒng),其特征在于,它還包括用于確定所述系統(tǒng)是運(yùn)行在虛擬化處理器上還是直接運(yùn)行在x86處理器上的子系統(tǒng),所述子系統(tǒng)包括用于執(zhí)行返回表示由中央處理單元支持的特征的身份的值的合成指令(如VMCPUID)的子系統(tǒng);以及用于確定是否返回了值以及(a)如果是,則推斷所述操作系統(tǒng)運(yùn)行在虛擬化處理器上,并且其后使用合成指令,以及(b)如果不是,則推斷所述操作系統(tǒng)直接運(yùn)行在x86處理器上,并其后制止使用合成指令的子系統(tǒng)。
42.如權(quán)利要求41所述的系統(tǒng),其特征在于,它還包括用于如果返回值則訪問或修改所述基礎(chǔ)虛擬機(jī)器監(jiān)控器的特征或行為的子系統(tǒng)。
43.如權(quán)利要求41所述的系統(tǒng),其特征在于,所述合成指令的十六進(jìn)制操作代碼是0F C7 C8 01 00。
44.如權(quán)利要求29所述的系統(tǒng),其特征在于,所述合成指令包括用于禁用直接執(zhí)行的合成指令(如VMDXDSBL)。
45.如權(quán)利要求29所述的系統(tǒng),其特征在于,所述合成指令包括用于啟用(或重啟用)直接執(zhí)行的合成指令(如VMDXENBL)。
46.如權(quán)利要求29所述的系統(tǒng),其特征在于,所述合成指令包括用于使IF入棧的合成指令(如VMPUSHFD);以及用于使IF出棧的合成指令(如VMPOPFD)。
47.如權(quán)利要求46所述的系統(tǒng),其特征在于,所述合成指令還包括用于將當(dāng)前GDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSGDT);用于將當(dāng)前LDT選擇器儲存到EAX的合成指令(如VMSLDT);用于將當(dāng)前IDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSIDT);以及用于將當(dāng)前TR選擇器儲存到EAX的合成指令(如VMSTR)。
48.如權(quán)利要求46所述的系統(tǒng),其特征在于,所述合成指令還包括用于清除虛擬化IF的合成指令(如VMCLI);以及用于設(shè)置虛擬化IF的合成指令(如VMSTI)。
49.如權(quán)利要求46所述的系統(tǒng),其特征在于,所述合成指令還包括,俘獲并處理用于確定自旋鎖采集何時(shí)失敗的合成指令。
50.如權(quán)利要求46所述的系統(tǒng),其特征在于,所述合成指令還包括用于返回標(biāo)識所述中央處理單元的身份的值的合成指令(如VMCPUID)。
51.如權(quán)利要求50所述的系統(tǒng),其特征在于,所述合成指令的十六進(jìn)制操作代碼是0F C7 C8 01 00。
52.一種包括用于改進(jìn)x86處理器體系結(jié)構(gòu)及其等效體系結(jié)構(gòu)中的處理器虛擬化的計(jì)算機(jī)可讀指令的計(jì)算機(jī)可讀媒質(zhì),所述體系結(jié)構(gòu)包括但不限于IA32體系結(jié)構(gòu),其特征在于,所述計(jì)算機(jī)可讀指令包括在所述x86處理器中引發(fā)隨后由運(yùn)行在所述x86處理器上的虛擬機(jī)器監(jiān)控器俘獲的異常,用于由所述虛擬機(jī)器監(jiān)控器處理的合成指令。
53.如權(quán)利要求46所述的方法,其特征在于,所述訪客操作系統(tǒng)中的至少一個(gè)多處理器自旋鎖指令用確定自旋鎖采集何時(shí)失敗的合成指令(如VMSPLAF)來補(bǔ)充。
54.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括用于返回表示中央處理單元的身份的值的合成指令(如VMCPUID)。
55.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,它還包括使IF入棧的合成指令(如VMPUSHFD)。
56.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括使IF出棧的合成指令(如VMPOPFD)。
57.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括將當(dāng)前GDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSGDT)。
58.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括將當(dāng)前LDT選擇器儲存到EAX的合成指令(如VMSLDT)。
59.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括將當(dāng)前LDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSIDT)。
60.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括將當(dāng)前TR選擇器儲存到EAX的合成指令(如VMSTR)。
61.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括清除虛擬化IF的合成指令(如VMCLI)。
62.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括設(shè)置虛擬化IF的合成指令(如VMSTI)。
63.如權(quán)利要求46所述的計(jì)算機(jī)可讀指令,其特征在于,它還包括用于確定所述指令是運(yùn)行在虛擬化處理器上還是直接運(yùn)行在x86處理器上的指令,所述指令包括用于執(zhí)行用于返回表示中央處理單元的身份的值的合成指令的指令;以及用于確定是否返回了對應(yīng)于中央處理單元的身份的值,并且(a)如果是這樣,則使用合成指令,以及(b)如果不是,則中止使用合成指令的指令。
64.如權(quán)利要求63所述的計(jì)算機(jī)可讀指令,其特征在于,所述合成指令的十六進(jìn)制操作代碼是0F C7 C8 01 00。
65.一種用于當(dāng)在x86處理器機(jī)器體系結(jié)構(gòu)及其等效體系結(jié)構(gòu)上執(zhí)行時(shí)處理合成指令的方法,所述體系結(jié)構(gòu)包括但不限于IA32體系結(jié)構(gòu),所述方法包括移除、替換或補(bǔ)充訪客操作系統(tǒng)中以下預(yù)定義指令的一個(gè)或多個(gè)實(shí)例PUSHCS、PUSH SS、來自SS的MOV、CALLF、VERR、VERW和LAR。
66.一種用于優(yōu)化訪客操作系統(tǒng)以改進(jìn)當(dāng)在x86處理器體系結(jié)構(gòu)及其等效體系機(jī)構(gòu)上執(zhí)行時(shí)處理器虛擬化的方法,所述體系結(jié)構(gòu)包括但不限于IA32體系結(jié)構(gòu),其特征在于,所述方法包括移除、替換或補(bǔ)充訪客操作系統(tǒng)中以下預(yù)定義指令的一個(gè)或多個(gè)實(shí)例PUSHCS、PUSH SS、來自SS的MOV、CALLF、VERR、VERW和LAR;用讀取虛擬化CPUID信息的合成指令(如VMCPUID)來替換訪客操作系統(tǒng)中的CPUID;用確定自旋鎖采集何時(shí)失敗的合成指令(如VMSPLAF)來補(bǔ)充訪客操作系統(tǒng)中的自旋鎖指令;用使IF入棧的合成指令(如VMPUSHFD)來替換訪客操作系統(tǒng)中的PUSHF(D)指令;用使IF出棧的合成指令(如VMPOPFD)來替換訪客操作系統(tǒng)中的POPF(D)指令;用將當(dāng)前GDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSGDT)來替換訪客操作系統(tǒng)中的SGDT指令;用將當(dāng)前LDT選擇器儲存到EAX的合成指令(如VMSLDT)來替換訪客操作系統(tǒng)中的SLDT指令;用將當(dāng)前IDT基礎(chǔ)和長度儲存到EAX的合成指令(如VMSIDT)來替換訪客操作系統(tǒng)中的SIDT指令;用將當(dāng)前TR選擇器儲存到EAX的合成指令(如VMSTR)來替換訪客操作系統(tǒng)中的STR指令;用清除虛擬化IF的合成指令(如VMCLI)來替換訪客操作系統(tǒng)中的CLI指令;用設(shè)置虛擬化IF的合成指令(如VMSTI)來替換訪客操作系統(tǒng)中的STI指令。
全文摘要
本發(fā)明通過提供引發(fā)俘獲并由此為虛擬機(jī)器(VM)提供安全處理指令的機(jī)會的一組“合成指令”,彌補(bǔ)了x86處理器體系結(jié)構(gòu)中的缺點(diǎn)。通過使用對x86體系機(jī)構(gòu)“非法”、但仍可被虛擬機(jī)器理解的指令,該方法使用了這些合成指令以在虛擬機(jī)器中執(zhí)行較佳定義的動(dòng)作,這些動(dòng)作當(dāng)由傳統(tǒng)指令向x86處理器執(zhí)行時(shí)將是有問題的,但是它們?yōu)閤86處理器系統(tǒng)提供了大大改進(jìn)的處理器虛擬化。
文檔編號G06F9/455GK1607503SQ20041008266
公開日2005年4月20日 申請日期2004年9月24日 優(yōu)先權(quán)日2003年10月14日
發(fā)明者E·特羅特 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1