一種平臺(tái)虛擬化系統(tǒng)的制作方法
【專(zhuān)利摘要】本發(fā)明涉及一種平臺(tái)虛擬化系統(tǒng),包括:CPU模擬器:首先讀取X86架構(gòu)代碼指令,判斷所述指令基本塊是否已翻譯;翻譯過(guò)程采用二進(jìn)制翻譯器實(shí)現(xiàn),二進(jìn)制翻譯器包括翻譯引擎和執(zhí)行引擎;其中翻譯引擎把X86架構(gòu)代碼翻譯成龍芯平臺(tái)代碼;執(zhí)行引擎準(zhǔn)備龍芯平臺(tái)代碼運(yùn)行的上下文環(huán)境,然后從龍芯平臺(tái)代碼緩存中找到X86架構(gòu)代碼所對(duì)應(yīng)的龍芯平臺(tái)代碼并執(zhí)行;內(nèi)存虛擬化模塊:采用影子頁(yè)表方法;外設(shè)虛擬化模塊:針對(duì)每一個(gè)外設(shè)設(shè)備分別建立相應(yīng)的設(shè)備模型,X86架構(gòu)虛擬機(jī)通過(guò)設(shè)備模型與外設(shè)設(shè)備進(jìn)行行交互,實(shí)現(xiàn)設(shè)備發(fā)現(xiàn)和訪問(wèn)使用。本發(fā)明能夠使一些尚不能適配國(guó)產(chǎn)龍芯硬件平臺(tái)的信息系統(tǒng)以虛擬化的方式運(yùn)行在國(guó)產(chǎn)軟硬件環(huán)境中,有助于在信息系統(tǒng)的自主化升級(jí)過(guò)程中實(shí)現(xiàn)新舊技術(shù)體制的平滑過(guò)渡。
【專(zhuān)利說(shuō)明】一種平臺(tái)虛擬化系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于虛擬計(jì)算領(lǐng)域,具體涉及一種基于國(guó)產(chǎn)軟硬件環(huán)境的資源虛擬化環(huán)境平臺(tái)虛擬化系統(tǒng)構(gòu)建方法。
【背景技術(shù)】
[0002]龍芯(Loongson)是由中國(guó)科學(xué)院計(jì)算機(jī)所自主開(kāi)發(fā)的采用簡(jiǎn)單指令集的通用系統(tǒng)處理器,可以用于服務(wù)器和個(gè)人電腦領(lǐng)域。目前已經(jīng)發(fā)展到龍芯2F和龍芯3A多核高性能處理器。
[0003]龍芯處理器主要包括三個(gè)系列。龍芯I號(hào)處理器及其IP系列主要面向嵌入式應(yīng)用,龍芯2號(hào)超標(biāo)量處理器及其IP系列主要面向桌面應(yīng)用,龍芯3號(hào)多核處理器系列主要面向服務(wù)器和高性能機(jī)應(yīng)用。目前最新的龍芯3A處理器采用的是RISC架構(gòu),兼容MIPS指令,原生四核設(shè)計(jì),內(nèi)含兩條HT PHY超傳輸總線(xiàn),采用65nm (納米)工藝,主頻IGHz。
[0004]中標(biāo)麒麟操作系統(tǒng)(龍芯版)是中標(biāo)軟件公司開(kāi)發(fā)的龍芯平臺(tái)操作系統(tǒng)。針對(duì)龍芯系列處理器硬件設(shè)計(jì)和指令集特點(diǎn),從操作系統(tǒng)內(nèi)核進(jìn)行適配和優(yōu)化。在應(yīng)用環(huán)境之外,中標(biāo)麒麟操作系統(tǒng)(龍芯版)還構(gòu)建了基于龍芯CPU的完善應(yīng)用開(kāi)發(fā)環(huán)境,方便得支持基于龍芯CPU進(jìn)一步應(yīng)用開(kāi)發(fā)和移植的工作。
[0005]由于龍芯處理器采用與通用X86系統(tǒng)不同的體系架構(gòu),指令集上與X86也不相兼容,同時(shí),為了提高處理器的性能,龍芯處理器的指令集也增加了許多新的優(yōu)化指令。針對(duì)龍芯硬件平臺(tái)的特點(diǎn),中標(biāo)軟件在通用桌面基礎(chǔ)上進(jìn)行移植開(kāi)發(fā)、性能調(diào)優(yōu)和針對(duì)性改進(jìn),系統(tǒng)軟件包均采用龍芯2F處理器指令集進(jìn)行了重新編譯,并針對(duì)功能性與易用性進(jìn)行了優(yōu)化。
[0006]虛擬化(Virtualization)技術(shù)最早出現(xiàn)在20世紀(jì)60年代的IBM大型機(jī)系統(tǒng),在70年代的System370系列中逐漸流行起來(lái),這些機(jī)器通過(guò)一種叫虛擬機(jī)監(jiān)控器(VirtualMachine Monitor, VMM)的程序在物理硬件之上生成許多可以運(yùn)行獨(dú)立操作系統(tǒng)軟件的虛擬機(jī)(Virtual Machine)實(shí)例。隨著近年多核系統(tǒng)、集群、網(wǎng)格以及云計(jì)算的廣泛部署,虛擬化技術(shù)在商業(yè)應(yīng)用上的優(yōu)勢(shì)日益體現(xiàn),不僅降低了 IT成本,而且還增強(qiáng)了系統(tǒng)安全性和可靠性,虛擬化的概念也逐漸深入到人們?nèi)粘5墓ぷ髋c生活中。
[0007]通常所說(shuō)的虛擬化主要是指平臺(tái)虛擬化技術(shù),通過(guò)使用控制程序(ControlProgram,也被稱(chēng)為Virtual Machine Monitor或Hypervisor),隱藏特定計(jì)算平臺(tái)的實(shí)際物理特性,為用戶(hù)提供抽象的、統(tǒng)一的、模擬的計(jì)算環(huán)境(稱(chēng)為虛擬機(jī))。虛擬機(jī)中運(yùn)行的操作系統(tǒng)被稱(chēng)為客戶(hù)機(jī)操作系統(tǒng)(Guest OS),運(yùn)行虛擬機(jī)監(jiān)控器的操作系統(tǒng)被稱(chēng)為主機(jī)操作系統(tǒng)(Host OS)。運(yùn)行虛擬機(jī)的真實(shí)系統(tǒng)我們稱(chēng)之為主機(jī)系統(tǒng)。
[0008]平臺(tái)虛擬化技術(shù)又可以細(xì)分為如下幾個(gè)子類(lèi):
[0009](I)全虛擬化(Full Virtualization)
[0010]全虛擬化是指虛擬機(jī)模擬了完整的底層硬件,包括處理器、物理內(nèi)存、時(shí)鐘、外設(shè)等,使得為原始硬件設(shè)計(jì)的操作系統(tǒng)或其它系統(tǒng)軟件完全不做任何修改就可以在虛擬機(jī)中運(yùn)行。操作系統(tǒng)與真實(shí)硬件之間的交互可以看成是通過(guò)一個(gè)預(yù)先規(guī)定的硬件接口進(jìn)行的。全虛擬化VMM以完整模擬硬件的方式提供全部接口(同時(shí)還必須模擬特權(quán)指令的執(zhí)行過(guò)程)。全虛擬化VMM必須完整地模擬該接口執(zhí)行的全過(guò)程。如果硬件不提供虛擬化的特殊支持,那么這個(gè)模擬過(guò)程將會(huì)十分復(fù)雜。
[0011](2)半虛擬化(Paravirtualization)
[0012]這是一種修改Guest OS部分訪問(wèn)特權(quán)狀態(tài)的代碼以便直接與VMM交互的技術(shù)。在半虛擬化虛擬機(jī)中,部分硬件接口以軟件的形式提供給客戶(hù)機(jī)操作系統(tǒng),這可以通過(guò)Hypercall (VMM提供給Guest OS的直接調(diào)用,與系統(tǒng)調(diào)用類(lèi)似)的方式來(lái)提供。這要求GuestOS必須進(jìn)行修改,才能使用VMM提供的HypercalI功能,所以限制了可用的操作系統(tǒng)。由于不需要產(chǎn)生額外的異常和模擬部分硬件執(zhí)行流程,半虛擬化相對(duì)全虛擬化可以大幅度提高性能,比較著名的VMM有Xen。
[0013](3)硬件輔助虛擬化(Hardware-Assisted Virtualization)
[0014]硬件輔助虛擬化是指借助硬件(主要是主機(jī)處理器)的支持來(lái)實(shí)現(xiàn)高效的全虛擬化。例如有了 Intel-VT技術(shù)的支持,Guest OS和VMM的執(zhí)行環(huán)境自動(dòng)地完全隔離開(kāi)來(lái),Guest OS有自己的“全套寄存器”,可以直接運(yùn)行在最高級(jí)別。Intel-VT和AMD-V是目前x86體系結(jié)構(gòu)上可用的兩種硬件輔助虛擬化技術(shù)。
[0015]目前,在國(guó)產(chǎn)龍芯平臺(tái)上使用虛擬化技術(shù)的主要技術(shù)障礙是:
[0016](I)目前龍芯平臺(tái)還不支持硬件輔助虛擬化技術(shù)。
[0017](2)目前主要的應(yīng)用軟件都運(yùn)行在Intel x86平臺(tái)上,屬于CISC架構(gòu),x86指令集。而龍芯平臺(tái)屬于RISC架構(gòu),使用MIPS指令集,軟硬件與X86平臺(tái)不兼容。
[0018]因此,本發(fā)明采用全虛擬化方法,在龍芯平臺(tái)上模擬出X86架構(gòu)的虛擬硬件,實(shí)現(xiàn)在龍芯平臺(tái)上運(yùn)行X86架構(gòu)的虛擬機(jī)。
【發(fā)明內(nèi)容】
[0019]本發(fā)明的目的是提供一種平臺(tái)虛擬化系統(tǒng),在龍芯處理器平臺(tái)上運(yùn)行X86架構(gòu)虛擬機(jī),并且在X86架構(gòu)虛擬機(jī)中使用傳統(tǒng)的X86操作系統(tǒng),運(yùn)行已有的軟件。
[0020]本發(fā)明所采用的技術(shù)方案是:
[0021]一種平臺(tái)虛擬化系統(tǒng),在龍芯處理器平臺(tái)上運(yùn)行X86架構(gòu)虛擬機(jī),包括如下部分:
[0022]CPU模擬器:首先讀取X86架構(gòu)代碼指令,判斷所述指令基本塊是否已翻譯,若未翻譯,則進(jìn)行翻譯并寫(xiě)入龍芯平臺(tái)中的指令寄存塊;若已翻譯,則在龍芯平臺(tái)上執(zhí)行已翻譯過(guò)的代碼塊并指向下一個(gè)X86架構(gòu)代碼指令,循環(huán)判斷并執(zhí)行;
[0023]上述翻譯過(guò)程采用二進(jìn)制翻譯器實(shí)現(xiàn),二進(jìn)制翻譯器包括翻譯引擎和執(zhí)行引擎;其中翻譯引擎把X86架構(gòu)代碼翻譯成龍芯平臺(tái)代碼;執(zhí)行引擎準(zhǔn)備龍芯平臺(tái)代碼運(yùn)行的上下文環(huán)境,然后從龍芯平臺(tái)代碼緩存中找到X86架構(gòu)代碼所對(duì)應(yīng)的龍芯平臺(tái)代碼并執(zhí)行;
[0024]內(nèi)存虛擬化模塊:采用影子頁(yè)表方法,使X86架構(gòu)虛擬機(jī)在進(jìn)行內(nèi)存讀寫(xiě)時(shí)可以直接得到龍芯平臺(tái)宿主機(jī)物理地址;
[0025]外設(shè)虛擬化模塊:針對(duì)每一個(gè)外設(shè)設(shè)備分別建立相應(yīng)的設(shè)備模型,X86架構(gòu)虛擬機(jī)通過(guò)設(shè)備模型與外設(shè)設(shè)備進(jìn)行行交互,實(shí)現(xiàn)設(shè)備發(fā)現(xiàn)和訪問(wèn)使用。
[0026]如上所述的一種平臺(tái)虛擬化系統(tǒng),其中:所述二進(jìn)制翻譯器,實(shí)現(xiàn)步驟如下:[0027]首先讀取X86架構(gòu)指令,將該指令放入解碼/分派循環(huán);其次在解碼/分派循環(huán)中,X86架構(gòu)指令被解釋為龍芯平臺(tái)指令;最后根據(jù)龍芯平臺(tái)指令執(zhí)行對(duì)應(yīng)的解釋執(zhí)行函數(shù)。
[0028]如上所述的一種平臺(tái)虛擬化系統(tǒng),其中:對(duì)于多條X86架構(gòu)指令,逐條進(jìn)行解碼和執(zhí)行。
[0029]如上所述的一種平臺(tái)虛擬化系統(tǒng),其中:所述龍芯平臺(tái)上設(shè)有目標(biāo)機(jī)器代碼緩存,所述緩存由二進(jìn)制翻譯器的翻譯引擎管理;由于X86架構(gòu)虛擬機(jī)的不同進(jìn)程間存在共享代碼,與所述共享代碼相對(duì)應(yīng)的龍芯平臺(tái)代碼保存在所述目標(biāo)機(jī)器代碼緩存中;對(duì)于所述共享代碼,直接在所述目標(biāo)機(jī)器代碼緩存中讀取并執(zhí)行。
[0030]如上所述的一種平臺(tái)虛擬化系統(tǒng),其中:所述影子頁(yè)表方法,建立影子頁(yè)表,影子頁(yè)表包含X86架構(gòu)虛擬機(jī)虛擬地址到龍芯平臺(tái)宿主機(jī)物理地址的映射關(guān)系;X86架構(gòu)虛擬機(jī)進(jìn)行內(nèi)存讀寫(xiě)時(shí),通過(guò)影子頁(yè)表中的地址映射關(guān)系直接得到龍芯平臺(tái)宿主機(jī)物理地址。
[0031]本發(fā)明的有益效果是:本發(fā)明充分利用包括CPU虛擬化、內(nèi)存虛擬化和外設(shè)虛擬化在內(nèi)的服務(wù)器虛擬化系列技術(shù),在以龍芯3A處理器和中標(biāo)麒麟服務(wù)器操作系統(tǒng)為主體構(gòu)成的國(guó)產(chǎn)自主基礎(chǔ)軟硬件環(huán)境下,為基礎(chǔ)設(shè)施資源的集約化管理以及信息系統(tǒng)的托管式運(yùn)維提供一種技術(shù)途徑。若將該發(fā)明應(yīng)用到信息系統(tǒng)的建設(shè)過(guò)程中,一方面將促使各種異構(gòu)的底層硬件設(shè)備所蘊(yùn)含的計(jì)算、存儲(chǔ)能力被集中整合,并按照業(yè)務(wù)單元的需要進(jìn)行調(diào)度和分配;另一方面還將使得各類(lèi)信息系統(tǒng)能夠共享公用的基礎(chǔ)設(shè)施,并以托管運(yùn)行的方式由專(zhuān)業(yè)的運(yùn)維人員統(tǒng)一管理,從而減輕業(yè)務(wù)單元的系統(tǒng)部署和運(yùn)維壓力。此外,通過(guò)構(gòu)建基于龍芯3A處理器和中標(biāo)麒麟服務(wù)器操作系統(tǒng)的虛擬化平臺(tái),能夠使一些尚不能適配國(guó)產(chǎn)自主底層硬件和基礎(chǔ)軟件的信息系統(tǒng)以虛擬化的方式運(yùn)行在國(guó)產(chǎn)自主基礎(chǔ)軟硬件環(huán)境中,有助于在信息系統(tǒng)的自主化升級(jí)過(guò)程中實(shí)現(xiàn)新舊技術(shù)體制的平滑過(guò)渡。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0032]圖1為CPU模擬器架構(gòu)圖。
[0033]圖2為二進(jìn)制代碼翻譯流程圖。
[0034]圖3為影子頁(yè)表結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0035]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明提供的一種平臺(tái)虛擬化系統(tǒng)進(jìn)行介紹:
[0036]如圖1所示,一種平臺(tái)虛擬化系統(tǒng),在龍芯處理器平臺(tái)上運(yùn)行X86架構(gòu)虛擬機(jī),包括CPU模擬器、內(nèi)存虛擬化模塊、外設(shè)虛擬化模塊。
[0037](一)CPU 模擬器
[0038]在龍芯平臺(tái)上運(yùn)行x86架構(gòu)虛擬機(jī),由于x86架構(gòu)虛擬機(jī)(簡(jiǎn)稱(chēng)虛擬機(jī))和龍芯平臺(tái)采用不同的架構(gòu),虛擬機(jī)的指令無(wú)法直接在龍芯平臺(tái)物理硬件上執(zhí)行,必須經(jīng)過(guò)翻譯,把虛擬機(jī)的代碼轉(zhuǎn)換成龍芯平臺(tái)物理機(jī)所用的代碼。
[0039]龍芯平臺(tái)上的虛擬化系統(tǒng)(VMM)使用全虛擬化技術(shù)。虛擬化系統(tǒng)對(duì)整個(gè)x86架構(gòu)虛擬機(jī)(包括處理器和配套的外圍設(shè)備)進(jìn)行仿真。這樣做的優(yōu)點(diǎn)是,可以在一種硬件平臺(tái)上運(yùn)行另外一種硬件平臺(tái)的操作系統(tǒng)和軟件(例如,在X86硬件上運(yùn)行ARM系統(tǒng)),而缺點(diǎn)是性能有比較大的損失。
[0040]處理器的模擬采用二進(jìn)制代碼翻譯技術(shù)。所謂二進(jìn)制代碼翻譯,是指把某種指令集架構(gòu)的程序翻譯成另一種指令集架構(gòu),可以在另外的平臺(tái)上運(yùn)行。這種翻譯不需要獲得程序的源代碼作為輸入,提高了程序移植的方便性。這種翻譯是在程序執(zhí)行的時(shí)候動(dòng)態(tài)進(jìn)行的。
[0041]如圖1所示,CPU模擬器首先讀取X86架構(gòu)(原PC)代碼指令,判斷所述指令基本塊是否已翻譯,若未翻譯,則進(jìn)行翻譯并寫(xiě)入龍芯平臺(tái)(PC)中的指令寄存塊;若已翻譯,則在龍芯平臺(tái)上執(zhí)行已翻譯過(guò)的代碼塊并指向下一個(gè)X86架構(gòu)(原PC)代碼指令,循環(huán)判斷并執(zhí)行。
[0042]二進(jìn)制代碼動(dòng)態(tài)翻譯系統(tǒng)的過(guò)程如圖2所示。被翻譯的虛擬機(jī)(x86架構(gòu))所運(yùn)行的代碼稱(chēng)為源機(jī)器代碼,翻譯(或解釋)出的宿主物理機(jī)(龍芯平臺(tái))運(yùn)行的代碼稱(chēng)為目標(biāo)機(jī)器代碼。二進(jìn)制翻譯器主要包括兩個(gè)模塊:翻譯引擎和執(zhí)行引擎。其中翻譯引擎負(fù)責(zé)把源機(jī)器代碼(X86架構(gòu))翻譯成目標(biāo)機(jī)器(龍芯平臺(tái))代碼;執(zhí)行引擎負(fù)責(zé)準(zhǔn)備目標(biāo)機(jī)器代碼運(yùn)行的上下文環(huán)境,然后從目標(biāo)機(jī)器代碼緩存中找到源機(jī)器代碼所對(duì)于的目標(biāo)機(jī)器代碼并執(zhí)行。
[0043]二進(jìn)制翻譯器解釋執(zhí)行步驟如下:
[0044]首先讀取X86架構(gòu)指令,將該指令放入解碼/分派循環(huán);
[0045]在解碼/分派循環(huán)中,X86架構(gòu)指令被解釋為龍芯平臺(tái)指令;
[0046]根據(jù)龍芯平臺(tái)指令執(zhí)行對(duì)應(yīng)的解釋執(zhí)行函數(shù)。
[0047]二進(jìn)制翻譯的過(guò)程可以分為3個(gè)階段:解釋?zhuān)焖俜g和優(yōu)化翻譯。
[0048](I)解釋執(zhí)行階段:當(dāng)源機(jī)器代碼被首次執(zhí)行時(shí),翻譯引擎對(duì)其進(jìn)行解釋執(zhí)行,解釋執(zhí)行不保存解釋結(jié)果。如果該源機(jī)器代碼再次被執(zhí)行,它將再次被解釋。只有當(dāng)執(zhí)行次數(shù)達(dá)到某一閾值后,翻譯引擎對(duì)其進(jìn)行翻譯,生成目標(biāo)代碼并保存到目標(biāo)代碼緩存中。當(dāng)該代碼塊再次被執(zhí)行時(shí),其對(duì)應(yīng)的翻譯代碼塊可以被重用,無(wú)需再次翻譯。
[0049](2)快速翻譯階段:由于要翻譯的代碼較多,通常采用簡(jiǎn)單的翻譯方法,基于模板生成目標(biāo)代碼。
[0050](3)優(yōu)化翻譯階段:對(duì)于被頻繁執(zhí)行的關(guān)鍵代碼塊,當(dāng)其執(zhí)行次數(shù)超過(guò)某一更高的閾值時(shí),它將再次被翻譯。在優(yōu)化翻譯階段,翻譯引擎采用更復(fù)雜的算法對(duì)源機(jī)器代碼進(jìn)行優(yōu)化翻譯,得到更高效的翻譯代碼。其執(zhí)行效率遠(yuǎn)遠(yuǎn)高于快速翻譯時(shí)得到的代碼。
[0051]二進(jìn)制翻譯引擎需要管理目標(biāo)機(jī)器代碼緩存。由于X86架構(gòu)虛擬機(jī)的不同進(jìn)程間會(huì)有大量的共享代碼,如共享庫(kù)及內(nèi)核代碼,所以目標(biāo)機(jī)器(龍芯平臺(tái))代碼應(yīng)該在物理地址空間進(jìn)行保存,以獲得比較好的性能。
[0052](二)內(nèi)存虛擬化模塊
[0053]除了處理器CPU外,虛擬化系統(tǒng)還需要模擬內(nèi)存,硬件中斷和外設(shè)10。
[0054]虛擬機(jī)認(rèn)為它所擁有的內(nèi)存地址空間總是從O開(kāi)始,但它在宿主機(jī)上執(zhí)行時(shí)不可能總是擁有從O開(kāi)始的地址所在的物理內(nèi)存。也就是說(shuō)虛擬機(jī)的物理地址并不等于宿主機(jī)上的機(jī)器物理地址。這樣虛擬化系統(tǒng)(VMM)必須把虛擬機(jī)線(xiàn)性地址到虛擬機(jī)物理地址的轉(zhuǎn)換修正為虛擬機(jī)線(xiàn)性地址到宿主機(jī)物理地址的轉(zhuǎn)換。VMM為虛擬機(jī)OS的每個(gè)進(jìn)程的頁(yè)表構(gòu)造一個(gè)影子頁(yè)表,維護(hù)虛擬機(jī)虛擬地址(Guest Linear Address)到宿主機(jī)物理地址(HostPhysical Address)的映射,宿主機(jī)CR3寄存器存放這個(gè)影子頁(yè)表的物理內(nèi)存地址。VMM同時(shí)維護(hù)一個(gè)Guest OS全局的虛擬機(jī)物理地址(Guest Physical Address)到宿主機(jī)物理地址(Host Physical Address)的映射表。發(fā)生缺頁(yè)異常的地址總是虛擬機(jī)虛擬地址(GuestLinear Address),VMM先去Guest OS中的頁(yè)表檢查原因,如果頁(yè)表項(xiàng)已經(jīng)建立,即對(duì)應(yīng)的虛擬機(jī)物理地址(Guest Physical Address)存在,說(shuō)明尚未建立到宿主機(jī)物理地址(HostPhysical Address)的映射,那么VMM分配一頁(yè)物理內(nèi)存,將影子頁(yè)表和映射表更新;否則,VMM返回到Guest OS,由Guest OS自己處理該異常。影子頁(yè)表見(jiàn)圖3所示,影子頁(yè)表包含X86架構(gòu)虛擬機(jī)虛擬地址到龍芯平臺(tái)宿主機(jī)物理地址的映射關(guān)系;X86架構(gòu)虛擬機(jī)進(jìn)行內(nèi)存讀寫(xiě)時(shí),通過(guò)影子頁(yè)表中的地址映射關(guān)系得直接到龍芯平臺(tái)宿主機(jī)物理地址。
[0055](三)外設(shè)虛擬化模塊
[0056]從虛擬機(jī)的角度看,外設(shè)是通過(guò)一組I/O資源(端口 I/O或內(nèi)存映射I/O)來(lái)進(jìn)行訪問(wèn)的。為了滿(mǎn)足多個(gè)客戶(hù)機(jī)操作系統(tǒng)的需求,龍芯平臺(tái)的虛擬化系統(tǒng)截獲虛擬機(jī)操作系統(tǒng)對(duì)設(shè)備的訪問(wèn)請(qǐng)求,模擬真實(shí)設(shè)備的效果。
[0057]X86虛擬機(jī)上的客戶(hù)機(jī)操作系統(tǒng)(Guest OS)發(fā)現(xiàn)虛擬的目標(biāo)設(shè)備后,使用目標(biāo)設(shè)備的驅(qū)動(dòng)程序來(lái)驅(qū)動(dòng)該設(shè)備。客戶(hù)機(jī)操作系統(tǒng)中的驅(qū)動(dòng)程序會(huì)發(fā)出一些請(qǐng)求并等待設(shè)備的響應(yīng),這些請(qǐng)求被龍芯虛擬化系統(tǒng)攔截處理后,響應(yīng)會(huì)返回給客戶(hù)機(jī)操作系統(tǒng),該響應(yīng)與真實(shí)物理設(shè)備的響應(yīng)相似。
[0058]在龍芯平臺(tái)的虛擬化系統(tǒng)中,進(jìn)行設(shè)備模擬,并處理所有設(shè)備請(qǐng)求與響應(yīng)的邏輯模塊,稱(chēng)為設(shè)備模型。設(shè)備模型在進(jìn)行設(shè)備I/o模擬時(shí),需要正確模擬目標(biāo)設(shè)備的軟件接口就可以保證X86客戶(hù)機(jī)操作系統(tǒng)觀察到的虛擬設(shè)備與目標(biāo)設(shè)備一致,忽略物理硬件的硬件結(jié)構(gòu)及接口。
[0059]X86虛擬機(jī)所使用的不同外設(shè)設(shè)備(例如硬盤(pán)、網(wǎng)卡、USB端口、光驅(qū)等),使用的軟件接口包括:PCI配置空間、I/O端口、麗IO (內(nèi)存映射輸入輸出)、DMA (直接內(nèi)存訪問(wèn))、中斷。在虛擬化系統(tǒng)中,X86客戶(hù)機(jī)操作系統(tǒng)通過(guò)以上接口與虛擬設(shè)備進(jìn)行數(shù)據(jù)交換,龍芯平臺(tái)虛擬化系統(tǒng)截獲這些訪問(wèn)數(shù)據(jù),將其重定向至設(shè)備模型。X86架構(gòu)虛擬機(jī)通過(guò)設(shè)備模型與外設(shè)設(shè)備進(jìn)行交互,實(shí)現(xiàn)設(shè)備發(fā)現(xiàn)和訪問(wèn)使用。
【權(quán)利要求】
1.一種平臺(tái)虛擬化系統(tǒng),在龍芯處理器平臺(tái)上運(yùn)行X86架構(gòu)虛擬機(jī),包括如下部分: CPU模擬器:首先讀取X86架構(gòu)代碼指令,判斷所述指令基本塊是否已翻譯,若未翻譯,則進(jìn)行翻譯并寫(xiě)入龍芯平臺(tái)中的指令寄存塊;若已翻譯,則在龍芯平臺(tái)上執(zhí)行已翻譯過(guò)的代碼塊并指向下一個(gè)X86架構(gòu)代碼指令,循環(huán)判斷并執(zhí)行; 上述翻譯過(guò)程采用二進(jìn)制翻譯器實(shí)現(xiàn),二進(jìn)制翻譯器包括翻譯引擎和執(zhí)行引擎;其中翻譯引擎把X86架構(gòu)代碼翻譯成龍芯平臺(tái)代碼;執(zhí)行引擎準(zhǔn)備龍芯平臺(tái)代碼運(yùn)行的上下文環(huán)境,然后從龍芯平臺(tái)代碼緩存中找到X86架構(gòu)代碼所對(duì)應(yīng)的龍芯平臺(tái)代碼并執(zhí)行; 內(nèi)存虛擬化模塊:采用影子頁(yè)表方法; 外設(shè)虛擬化模塊:針對(duì)每一個(gè)外設(shè)設(shè)備分別建立相應(yīng)的設(shè)備模型,X86架構(gòu)虛擬機(jī)通過(guò)設(shè)備模型與外設(shè)設(shè)備進(jìn)行行交互,實(shí)現(xiàn)設(shè)備發(fā)現(xiàn)和訪問(wèn)使用。
2.根據(jù)權(quán)利要求1所述的一種平臺(tái)虛擬化系統(tǒng),其特征在于:所述二進(jìn)制翻譯器,實(shí)現(xiàn)如下步驟: 首先讀取X86架構(gòu)指令,將該指令放入解碼/分派循環(huán); 在解碼/分派循環(huán)中,X86架構(gòu)指令被解釋為龍芯平臺(tái)指令; 根據(jù)龍芯平臺(tái)指令執(zhí)行對(duì)應(yīng)的解釋執(zhí)行函數(shù)。
3.根據(jù)權(quán)利要求1所述的一種平臺(tái)虛擬化系統(tǒng),其特征在于:對(duì)于多條X86架構(gòu)指令,逐條進(jìn)行解碼和執(zhí)行。
4.根據(jù)權(quán)利要求1所述的一種平臺(tái)虛擬化系統(tǒng),其特征在于:所述龍芯平臺(tái)上設(shè)有目標(biāo)機(jī)器代碼緩存,所述緩存由二進(jìn)制翻譯器的翻譯引擎管理;由于X86架構(gòu)虛擬機(jī)的不同進(jìn)程間存在共享代碼,與所述共享代碼相對(duì)應(yīng)的龍芯平臺(tái)代碼保存在所述目標(biāo)機(jī)器代碼緩存中;對(duì)于所述共享代碼,直接在所述目標(biāo)機(jī)器代碼緩存中讀取并執(zhí)行。
5.根據(jù)權(quán)利要求1所述的一種平臺(tái)虛擬化系統(tǒng),其特征在于:所述影子頁(yè)表方法,建立影子頁(yè)表,影子頁(yè)表包含X86架構(gòu)虛擬機(jī)虛擬地址到龍芯平臺(tái)宿主機(jī)物理地址的映射關(guān)系;X86架構(gòu)虛擬機(jī)進(jìn)行內(nèi)存讀寫(xiě)時(shí),通過(guò)影子頁(yè)表中的地址映射關(guān)系得直接到龍芯平臺(tái)宿主機(jī)物理地址。
【文檔編號(hào)】G06F9/455GK103793260SQ201310466848
【公開(kāi)日】2014年5月14日 申請(qǐng)日期:2013年10月9日 優(yōu)先權(quán)日:2013年10月9日
【發(fā)明者】劉東紅, 郭長(zhǎng)國(guó), 李永紅, 朱燕, 劉偉華, 孫巍 申請(qǐng)人:中國(guó)電子設(shè)備系統(tǒng)工程公司研究所, 普華基礎(chǔ)軟件股份有限公司