專利名稱:一種針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及虛擬化環(huán)境Xen,具體涉及一種在虛擬化環(huán)境Xen中利用Windows特權(quán)虛擬機(jī)監(jiān)控其他HVM虛擬機(jī)內(nèi)存的方法及系統(tǒng),屬于計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域。
背景技術(shù):
近年來(lái),隨著處理器速度的不斷提升和網(wǎng)絡(luò)帶寬的持續(xù)增長(zhǎng),虛擬化技術(shù)得到了廣泛的重視。在數(shù)據(jù)中心中,虛擬化技術(shù)得到了廣泛的應(yīng)用。Xen是由劍橋大學(xué)計(jì)算機(jī)實(shí)驗(yàn)室系統(tǒng)研究組開(kāi)發(fā)的虛擬機(jī)監(jiān)視器,以其高效性和靈活性而著稱。其作為一個(gè)高性能的開(kāi)源的虛擬機(jī)軟件,也引起了業(yè)界極大的關(guān)注,其良好的性能表現(xiàn),比物理機(jī)僅低39T5%的性能,也贏得了市場(chǎng)的一片好評(píng)。Xen屬于硬件級(jí)虛擬化軟件,即直接運(yùn)行在硬件級(jí)上,為其上運(yùn)行的操作系統(tǒng)內(nèi)核 提供虛擬化的硬件環(huán)境。Xen的結(jié)構(gòu)包括一個(gè)虛擬機(jī)管理層(Virtual Machine Monitor,以下簡(jiǎn)稱VMM),在Xen中也稱作管理程序(Xen Hypervisor), 一個(gè)特權(quán)域(PrivilegedDomain),還有其他的客戶域(Domain),特權(quán)域和客戶域都可以被稱為虛擬機(jī)。其中,特權(quán)域成為Domain 0 (DomO),主要功能是輔助Xen管理其他Domain,提供相應(yīng)的虛擬資源服務(wù),其他則稱為Domain U (DomU)。由于目前市場(chǎng)占有率比較高的x86架構(gòu)的處理器在設(shè)計(jì)之初未考慮支持虛擬化技術(shù),其本身的結(jié)構(gòu)和復(fù)雜性使得在其之上進(jìn)行虛擬化非常困難,因此,在Xen設(shè)計(jì)之初,采用的是一種半虛擬化的解決方案,即通過(guò)對(duì)客戶機(jī)的操作系統(tǒng)(Guest OS)進(jìn)行代碼級(jí)修改來(lái)避開(kāi)x86架構(gòu)帶來(lái)的弊端,但這種做法十分繁瑣,且?guī)?lái)了一些系統(tǒng)指令級(jí)別的沖突以及運(yùn)行效率的問(wèn)題。目前Intel與AMD在硬件級(jí)都提供了對(duì)虛擬化的支持,能夠支持未經(jīng)修改的Guest OS直接運(yùn)行,減少了虛擬機(jī)運(yùn)行的系統(tǒng)開(kāi)銷,這些利用硬件進(jìn)行虛擬化的虛擬機(jī)被稱為硬件虛擬域(Hardware-based Virtual Machine,簡(jiǎn)稱HVM)。Xen中已經(jīng)提供了對(duì)HVM用戶的支持。內(nèi)存中存有操作系統(tǒng)的內(nèi)核以及執(zhí)行的進(jìn)程的內(nèi)容,因此,通過(guò)對(duì)內(nèi)存中內(nèi)容的監(jiān)控,可以獲得執(zhí)行中的進(jìn)程信息以及操作系統(tǒng)內(nèi)核中主要數(shù)據(jù)的信息,從而更好地分析操作系統(tǒng)的運(yùn)行狀況,識(shí)別出進(jìn)程的惡意行為,由于每臺(tái)虛擬機(jī)的內(nèi)存之間是隔離的,利用虛擬化技術(shù)來(lái)進(jìn)行監(jiān)控與本機(jī)上進(jìn)行內(nèi)存監(jiān)控的方法相比具有天生的優(yōu)勢(shì)。文獻(xiàn)l“BryanD Payne, Martin D P De A Carbone, Wenke Lee.Secure and Flexible Monitoring ofVirtual Machines. ACSAC 2007”中提到一種利用Xen提供的借口在DomO中建立一套監(jiān)控DomU的內(nèi)存及磁盤信息的方法,但以此種方法為代表的目前虛擬機(jī)內(nèi)存監(jiān)控技術(shù)都是以DomO為監(jiān)控端,且僅能夠監(jiān)控裝有32位操作系統(tǒng)的DomU,這對(duì)于64位操作系統(tǒng)越來(lái)越普遍的當(dāng)前形勢(shì)來(lái)說(shuō)具有很大的局限性。本發(fā)明是在一臺(tái)裝有Windows系統(tǒng)的特權(quán)虛擬機(jī)上實(shí)現(xiàn)的針對(duì)HVM虛擬機(jī)的內(nèi)存監(jiān)控,且對(duì)于32位操作系統(tǒng)和64位操作系統(tǒng)的DomU都能進(jìn)行監(jiān)控,比現(xiàn)有的內(nèi)存監(jiān)控技術(shù)更加先進(jìn)。
發(fā)明內(nèi)容
本發(fā)明目的在于提供一種使用HVM特權(quán)虛擬機(jī)作為監(jiān)控端,獲取其他DomU內(nèi)存信息的方法及其系統(tǒng),其中,特權(quán)指的是該虛擬機(jī)具有與Xen的hypervisor通信的能力,內(nèi)存地址形式主要是虛擬地址,DomU上安裝的操作系統(tǒng)涉及32位與64位的Linux和windows操作系統(tǒng),由于PAE模式已經(jīng)使用得比較普遍,32位系統(tǒng)部分將默認(rèn)采取PAE模式。為了讓HVM特權(quán)虛擬機(jī)能夠使用Xen提供的Hypercall以及映射機(jī)制,我們?cè)谠撎貦?quán)虛擬機(jī)中添加IOCTL設(shè)備驅(qū)動(dòng),該設(shè)備 驅(qū)動(dòng)模擬DomO與Xen的交互模式,提供給特權(quán)虛擬機(jī)與Xen進(jìn)行交互的功能,該功能包括使用Xen提供的Hypercall以及映射機(jī)制。本發(fā)明公開(kāi)一種針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,包括步驟1,建立客戶域DomU,根據(jù)操作系統(tǒng)的運(yùn)算能力建立內(nèi)存監(jiān)控參數(shù),所述操作系統(tǒng)的運(yùn)算能力包括32位操作系統(tǒng)和64位操作系統(tǒng);步驟2,將客戶域DomU的配置文件初始化,導(dǎo)入內(nèi)存監(jiān)控參數(shù),并對(duì)內(nèi)存監(jiān)控參數(shù)進(jìn)行映射操作,實(shí)現(xiàn)內(nèi)存監(jiān)控優(yōu)化。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,在步驟2執(zhí)行32位操作系統(tǒng)時(shí)包括步驟21,用戶提供要映射的DomU的進(jìn)程的picUDomU的id值以及虛擬地址;步驟22,若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間;步驟23,若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,由于在用戶空間中地址的存在形式為虛擬地址,首先獲取該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,然后轉(zhuǎn)換為其物理地址進(jìn)行尋址。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟22包括步驟31,通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址;步驟32,根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針TOPE的物理地址值,之后,需要將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟33,根據(jù)I3DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)I3DE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟34,根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟35,根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟36,得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容為要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容進(jìn)行讀取操作完成監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟32包括步驟41,對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;步驟42,利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);步驟43,在返回的內(nèi)存頁(yè)中利用之前求得的I3DPE在頁(yè)中的偏移量既得I3DPE的值;步驟44,返回I3DPE的值。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟23包括步驟51,得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址;步驟52,得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址屬于內(nèi)核空間,因此,通過(guò)步驟22得到其對(duì)應(yīng)的物理地址;步驟53,利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行步驟22完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟51包括 步驟61,通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏
移量;步驟62,由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的Pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;步驟63,進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。
所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,在步驟2執(zhí)行64位操作系統(tǒng)時(shí)包括步驟71,用戶提供要映射的DomU的進(jìn)程的pid、DomU的id值以及虛擬地址;步驟72,若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間;步驟73,若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,需拿到該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,再進(jìn)一步轉(zhuǎn)換為其物理地址進(jìn)行尋址。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟72包括步驟81,通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址;步驟82,根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出第四級(jí)頁(yè)表項(xiàng)PML4E的物理地址值,之后,將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟83,根據(jù)PML4E和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針I(yè)3DPE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟84,根據(jù)I3DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)I3DE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟85,根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟86,根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟87,得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容既是要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容讀取操作完成監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟82包括步驟91,對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;
步驟92,利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配一頁(yè)空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);步驟93,在返回的內(nèi)存頁(yè)中利用之前求得的PML4E在頁(yè)中的偏移量既得PML4E的值;步驟94,返回PML4E的值。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟73包括步驟101,得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址;步驟102,利用得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址通過(guò)A2步驟可以得到其 對(duì)應(yīng)的物理地址;步驟103,利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行步驟72,從而完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟101包括步驟111,通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏
移量;步驟112,由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;步驟113,進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。本發(fā)明公開(kāi)一種針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),包括建立監(jiān)控參數(shù)模塊,用于建立客戶域DomU,根據(jù)操作系統(tǒng)的運(yùn)算能力建立內(nèi)存監(jiān)控參數(shù),所述操作系統(tǒng)的運(yùn)算能力包括32位操作系統(tǒng)和64位操作系統(tǒng);監(jiān)控優(yōu)化模塊,用于將客戶域DomU的配置文件初始化,導(dǎo)入內(nèi)存監(jiān)控參數(shù),并對(duì)內(nèi)存監(jiān)控參數(shù)進(jìn)行映射操作,實(shí)現(xiàn)內(nèi)存監(jiān)控優(yōu)化。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),在32位操作系統(tǒng)的監(jiān)控優(yōu)化模塊包括提供信息模塊,用于用戶提供要映射的DomU的進(jìn)程的picUDomU的id值以及虛擬地址;指向內(nèi)核空間模塊,用于若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間;指向進(jìn)程地址空間模塊,用于若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,由于在用戶空間中地址的存在形式為虛擬地址,首先獲取該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,然后轉(zhuǎn)換為其物理地址進(jìn)行尋址。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),指向內(nèi)核空間模塊包括發(fā)送地址模塊,用于通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址;計(jì)算模塊,用于根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針TOPE的物理地址值,之后,需要將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)roPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)PDE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;獲得虛擬地址模塊,用于得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容為要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容進(jìn)行讀取操作完成監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),計(jì)算模塊還包括
對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);在返回的內(nèi)存頁(yè)中利用之前求得的roPE在頁(yè)中的偏移量既得roPE的值;返回roPE的值。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),指向進(jìn)程地址空間模塊包括獲得虛擬地址模塊,用于得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址;獲得物理地址模塊,用于得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址屬于內(nèi)核空間,因此,通過(guò)指向內(nèi)核空間模塊得到其對(duì)應(yīng)的物理地址;頁(yè)表查詢模塊,用于利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行指向內(nèi)核空間模塊完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),獲得虛擬地址模塊包括通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏移量;由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的pid的值,與提供的Pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),在64位操作系統(tǒng)的監(jiān)控優(yōu)化模塊包括提供信息模塊,用于用戶提供要映射的DomU的進(jìn)程的picUDomU的id值以及虛擬地址;指向內(nèi)核空間模塊,用于若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間;指向進(jìn)程地址空間模塊,用于若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,需拿到該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,再進(jìn)一步轉(zhuǎn)換為其物理地址進(jìn)行尋址。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),指向內(nèi)核空間模塊還包括發(fā)送地址模塊,用于通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址;計(jì)算模塊,用于根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出第四級(jí)頁(yè)表項(xiàng)PML4E的物理地址值,之后,將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PML4E和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針I(yè)3DPE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)I3DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)PDE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;獲得虛擬地址模塊,用于得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容既是要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容讀取操作完成監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),計(jì)算模塊還包括對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì) 應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配一頁(yè)空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);在返回的內(nèi)存頁(yè)中利用之前求得的PML4E在頁(yè)中的偏移量既得PML4E的值;返回PML4E的值。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),指向進(jìn)程地址空間模塊包括獲得虛擬地址模塊,用于得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址;獲得物理地址模塊,用于利用得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址通過(guò)A2步驟可以得到其對(duì)應(yīng)的物理地址;頁(yè)表查詢模塊,用于利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行指向內(nèi)核空間模塊,從而完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),獲得虛擬地址模塊包括通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏移量;由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的Pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。本發(fā)明的有益效果為使用特權(quán)虛擬機(jī)代替DomO來(lái)進(jìn)行內(nèi)存監(jiān)控,且對(duì)于裝有32位操作系統(tǒng)和64位操作系統(tǒng)的DomU都可以進(jìn)行內(nèi)存監(jiān)控,這樣設(shè)計(jì)既可以將內(nèi)存監(jiān)控功能獨(dú)立管理,也減輕了 DomO的性能負(fù)擔(dān),提供了一種針對(duì)虛擬化架構(gòu)實(shí)用性強(qiáng)的內(nèi)存監(jiān)控技術(shù),為檢測(cè)病毒特征、惡意軟件攻擊行為以及分析操作系統(tǒng)運(yùn)行機(jī)理等提供了一種高效實(shí)用的手段。
圖I為本發(fā)明特權(quán)虛擬機(jī)內(nèi)存監(jiān)控流程示意圖;圖2為本發(fā)明特權(quán)虛擬機(jī)內(nèi)核模塊內(nèi)存映射流程示意圖;圖3為本發(fā)明針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法流程圖;圖4為本發(fā)明針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng)流程圖。
具體實(shí)施方式
下面給出本發(fā)明的具體實(shí)施方式
,結(jié)合附圖對(duì)本發(fā)明做出了詳細(xì)描述。本方法針對(duì)兩種平臺(tái)。在內(nèi)存監(jiān)控的程序中,需要對(duì)32位和64位系統(tǒng)采取獨(dú)立的步驟,通過(guò)用戶給定的一臺(tái)DomU需要監(jiān)控進(jìn)程號(hào)(系統(tǒng)中以pid表示)以及該進(jìn)程中要監(jiān)控的虛擬地址來(lái)對(duì)該地址的內(nèi)容進(jìn)行監(jiān)控的步驟如下當(dāng)DomU的操作系統(tǒng)為32位操作系統(tǒng)的PAE模式時(shí),步驟如下,流程如圖I所示Al.用戶提供要映射的DomU的進(jìn)程的pid、DomU的id值以及虛擬地址。A2.若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間,具體實(shí)施步驟如下I.通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址。
2.根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針(PageDirectoryPointer Entry,以下簡(jiǎn)稱PDPE)的物理地址值,之后,需要將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中,具體步驟如下I).對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址。2).利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配一頁(yè)空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè),如圖2所示。3).在返回的內(nèi)存頁(yè)中利用之前求得的I3DPE在頁(yè)中的偏移量既得roPE的值。4) 返回 PDPE 的值。3 根據(jù)F1DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)(Page Directory Entry,以下簡(jiǎn)稱I3DE)的物理地址值,并將DomU中該物理地址的內(nèi)容映射過(guò)來(lái),具體步驟參見(jiàn)A2的步驟2,其中的I3DPE在本例中是I3DE。4.根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)(Page Table Entry,以下簡(jiǎn)稱PTE)的物理地址值,并將DomU中該物理地址的內(nèi)容映射過(guò)來(lái),具體步驟參見(jiàn)A2的步驟2,其中的PDPE在本例中是PTE。5.根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射過(guò)來(lái),具體步驟參見(jiàn)A2的步驟2,其中的TOPE在本例中要求的虛擬地址對(duì)應(yīng)的物理地址值6.得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容既是要監(jiān)控的虛擬地址的內(nèi)容,這時(shí)候就可以通過(guò)對(duì)該頁(yè)的內(nèi)容讀取操作完成監(jiān)控功能。A3.若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,由于在用戶空間中地址的存在形式都是虛擬地址,因此首先需要拿到該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,再進(jìn)一步轉(zhuǎn)換為其物理地址進(jìn)行尋址。具體實(shí)施步驟如下I.得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址,具體實(shí)施步驟如下I).通過(guò)初始化得到DomU的初始進(jìn)程(init task)的物理地址、進(jìn)程結(jié)構(gòu)中的一些項(xiàng)的偏移量(如Pid在進(jìn)程結(jié)構(gòu)中的偏移量)。2).由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,可以從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的Pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;3).進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址;2.得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址屬于內(nèi)核空間,因此,通過(guò)A2步驟可以得到其對(duì)應(yīng)的物理地址。3.利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,具體步驟同A2,如此,完成了進(jìn)程地址空間的內(nèi)存的監(jiān)控功能。當(dāng)DomU的操作系統(tǒng)為64位時(shí),步驟如下,流程圖可參考圖1,比上種情況多一層映射。Al.用戶提供要映射的DomU的進(jìn)程的pid、DomU的id值以及虛擬地址。
A2.若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間,具體實(shí)施步驟如下I.通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址。2.根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出第四級(jí)頁(yè)表項(xiàng)(Page Map Level 4Entry,以下簡(jiǎn)稱PML4E)的物理地址值,之后,需要將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中,具體步驟如下I).對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;2).利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配一頁(yè)空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);3).在返回的內(nèi)存頁(yè)中利用之前求得的PML4E在頁(yè)中的偏移量既得PML4E的值;4) 返回 PML4E 的值;3 根據(jù)PML4E和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針(Page Directory PointerEntry,以下簡(jiǎn)稱I3DPE)的物理地址值,并將DomU中該物理地址的內(nèi)容映射過(guò)來(lái),具體步驟參見(jiàn)A2的步驟2,其中的PML4E在本例中是I3DPE ;4 根據(jù)F1DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)(Page Directory Entry,以下簡(jiǎn)稱I3DE)的物理地址值,并將DomU中該物理地址的內(nèi)容映射過(guò)來(lái),具體步驟參見(jiàn)A2的步驟2,其中的PML4E在本例中是I3DE ;5.根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)(Page Table Entry,以下簡(jiǎn)稱PTE)的物理地址值,并將DomU中該物理地址的內(nèi)容映射過(guò)來(lái),具體步驟參見(jiàn)A2的步驟2,其中的PML4E在本例中是PTE ;6.根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射過(guò)來(lái),具體步驟參見(jiàn)A2的步驟2,其中的PML4E在本例中是求的虛擬地址對(duì)應(yīng)的物理地址值;7.得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容既是要監(jiān)控的虛擬地址的內(nèi)容,這時(shí)候就可以通過(guò)對(duì)該頁(yè)的內(nèi)容讀取操作完成監(jiān)控功能。A3.若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,需拿到該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,再進(jìn)一步轉(zhuǎn)換為其物理地址進(jìn)行尋址。具體實(shí)施步驟如下
I.得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址,具體實(shí)施步驟同第一種情況的A3中步驟I ;2.利用得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址通過(guò)A2步驟可以得到其對(duì)應(yīng)的物理地址;3.利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,具體步驟同A2,如此,完成了進(jìn)程地址空間的內(nèi)存的監(jiān)控功能。實(shí)現(xiàn)的系統(tǒng)基于Xen架構(gòu),特權(quán)虛擬機(jī)的操作系統(tǒng)為windows server 2003, 32位的DomU的操作系統(tǒng)為windows xp sp3,支持PAE模式,64位的DomU的系統(tǒng)為SUSE 11 SPl0具體實(shí)施方式
為a)構(gòu)建可以與Xen進(jìn)行通信的特權(quán)虛擬機(jī),該虛擬機(jī)為HVM形式,裝有windows 2003操作系統(tǒng);b)利用該虛擬機(jī),在32位PAE模式HVM DomU運(yùn)行過(guò)程中對(duì)其虛擬地址對(duì)應(yīng)的內(nèi)存內(nèi)容進(jìn)行監(jiān)控;c)利用該虛擬機(jī),在64位HVM DomU運(yùn)行過(guò)程中對(duì)其虛擬地址對(duì)應(yīng)的內(nèi)存內(nèi)容進(jìn)行監(jiān)控。 具體步驟如下I、構(gòu)建HVM特權(quán)虛擬機(jī),具體實(shí)現(xiàn)方法如下a)啟動(dòng) Xenb)啟動(dòng)該特權(quán)虛擬機(jī),安裝windows 2003操作系統(tǒng)c)安裝具備與Xen通信功能的驅(qū)動(dòng)模塊d)開(kāi)啟監(jiān)控程序,等待輸入?yún)?shù)2、對(duì)運(yùn)行態(tài)的32位PAE模式的裝有windows xp sp3的HVM虛擬機(jī)進(jìn)行內(nèi)存監(jiān)控,具體實(shí)現(xiàn)方法如下a)輸入監(jiān)控參數(shù),包括DomU的id值、要監(jiān)控的進(jìn)程pid、要監(jiān)控的虛擬內(nèi)存地址。b)讀取對(duì)應(yīng)DomU的配置文件進(jìn)行初始化,這個(gè)文件需要用戶提供,包括操作系統(tǒng)類型、起始進(jìn)程地址、進(jìn)程結(jié)構(gòu)偏移量、進(jìn)程Pid偏移量、進(jìn)程頁(yè)目錄表基址偏移量。c)申請(qǐng)內(nèi)存空間,根據(jù)參數(shù)進(jìn)行映射操作,返回給用戶該內(nèi)存空間的指針。對(duì)運(yùn)行態(tài)的64位的裝有SUSEll SPl的HVM虛擬機(jī)進(jìn)行內(nèi)存監(jiān)控,具體實(shí)現(xiàn)方法同2。如圖3所示,本發(fā)明公開(kāi)一種針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,包括步驟1,建立客戶域DomU,根據(jù)操作系統(tǒng)的運(yùn)算能力建立內(nèi)存監(jiān)控參數(shù),所述操作系統(tǒng)的運(yùn)算能力包括32位操作系統(tǒng)和64位操作系統(tǒng);步驟2,將客戶域DomU的配置文件初始化,導(dǎo)入內(nèi)存監(jiān)控參數(shù),并對(duì)內(nèi)存監(jiān)控參數(shù)進(jìn)行映射操作,實(shí)現(xiàn)內(nèi)存監(jiān)控優(yōu)化。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,在步驟2執(zhí)行32位操作系統(tǒng)時(shí)包括步驟21,用戶提供要映射的DomU的進(jìn)程的picUDomU的id值以及虛擬地址;步驟22,若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間;步驟23,若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,由于在用戶空間中地址的存在形式為虛擬地址,首先獲取該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,然后轉(zhuǎn)換為其物理地址進(jìn)行尋址。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟22包括步驟31,通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址;步驟32,根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針TOPE的物理地址值,之后,需要將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟33,根據(jù)I3DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)I3DE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟34,根據(jù)PDE和虛擬地址的值,計(jì) 算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟35,根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟36,得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容為要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容進(jìn)行讀取操作完成監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟32包括步驟41,對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;步驟42,利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);步驟43,在返回的內(nèi)存頁(yè)中利用之前求得的I3DPE在頁(yè)中的偏移量既得I3DPE的值;步驟44,返回I3DPE的值。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟23包括步驟51,得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址;步驟52,得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址屬于內(nèi)核空間,因此,通過(guò)步驟22得到其對(duì)應(yīng)的物理地址;步驟53,利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行步驟22完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟51包括步驟61,通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏
移量;步驟62,由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的Pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;步驟63,進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,在步驟2執(zhí)行64位操作系統(tǒng)時(shí)包括步驟71,用戶提供要映射的DomU的進(jìn)程的pid、DomU的id值以及虛擬地址;步驟72,若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間;步驟73,若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,需拿到該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,再進(jìn)一步轉(zhuǎn)換為其物理地址進(jìn)行尋址。
所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟72包括步驟81,通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址;步驟82,根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出第四級(jí)頁(yè)表項(xiàng)PML4E的物理地址值,之后,將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟83,根據(jù)PML4E和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針I(yè)3DPE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟84,根據(jù)I3DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)I3DE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟85,根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中 該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;步驟86,根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟87,得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容既是要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容讀取操作完成監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟82包括步驟91,對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;步驟92,利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配一頁(yè)空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);步驟93,在返回的內(nèi)存頁(yè)中利用之前求得的PML4E在頁(yè)中的偏移量既得PML4E的值;步驟94,返回PML4E的值。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟73包括步驟101,得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址;步驟102,利用得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址通過(guò)A2步驟可以得到其對(duì)應(yīng)的物理地址;步驟103,利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行步驟72,從而完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,步驟101包括步驟111,通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏
移量;步驟112,由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;步驟113,進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。如圖4所示,本發(fā)明公開(kāi)一種針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),包括
建立監(jiān)控參數(shù)模塊10,用于建立客戶域DomU,根據(jù)操作系統(tǒng)的運(yùn)算能力建立內(nèi)存監(jiān)控參數(shù),所述操作系統(tǒng)的運(yùn)算能力包括32位操作系統(tǒng)和64位操作系統(tǒng);監(jiān)控優(yōu)化模塊20,用于將客戶域DomU的配置文件初始化,導(dǎo)入內(nèi)存監(jiān)控參數(shù),并對(duì)內(nèi)存監(jiān)控參數(shù)進(jìn)行映射操作,實(shí)現(xiàn)內(nèi)存監(jiān)控優(yōu)化。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),在32位操作系統(tǒng)的監(jiān)控優(yōu)化模塊包括提供信息模塊,用于用戶提供要映射的DomU的進(jìn)程的picUDomU的id值以及虛擬地址;指向內(nèi)核空間模塊,用于若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間;指向進(jìn)程地址空間模塊,用于若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,由于在用戶空間中地址的存在形式為虛擬地址,首先獲取該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,然后轉(zhuǎn)換為其物理地址進(jìn)行尋址。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),指向內(nèi)核空間模塊包括發(fā)送地址模塊,用于通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址;計(jì)算模塊,用于根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針TOPE的物理地址值,之后,需要將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)roPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)PDE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi) 存中;獲得虛擬地址模塊,用于得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容為要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容進(jìn)行讀取操作完成監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),計(jì)算模塊還包括對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);在返回的內(nèi)存頁(yè)中利用之前求得的roPE在頁(yè)中的偏移量既得roPE的值;返回roPE的值。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),指向進(jìn)程地址空間模塊包括獲得虛擬地址模塊,用于得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址;獲得物理地址模塊,用于得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址屬于內(nèi)核空間,因此,通過(guò)指向內(nèi)核空間模塊得到其對(duì)應(yīng)的物理地址;頁(yè)表查詢模塊,用于利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行指向內(nèi)核空間模塊完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),獲得虛擬地址模塊包括通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏移量;由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的Pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),在64位操作系統(tǒng)的監(jiān)控優(yōu)化模塊包括提供信息模塊,用于用戶提供要映射的DomU的進(jìn)程的picUDomU的id值以及虛擬地址;指向內(nèi)核空間模塊,用于若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間;指向進(jìn)程地址空間模塊,用于若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,需拿到該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,再進(jìn)一步轉(zhuǎn)換為其物理地址進(jìn)行尋址。
所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),指向內(nèi)核空間模塊還包括發(fā)送地址模塊,用于通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址;計(jì)算模塊,用于根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出第四級(jí)頁(yè)表項(xiàng)PML4E的物理地址值,之后,將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PML4E和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針I(yè)3DPE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)I3DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)PDE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 獲得虛擬地址模塊,用于得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容既是要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容讀取操作完成監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),計(jì)算模塊還包括對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配一頁(yè)空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);在返回的內(nèi)存頁(yè)中利用之前求得的PML4E在頁(yè)中的偏移量既得PML4E的值;返回PML4E的值。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),指向進(jìn)程地址空間模塊包括獲得虛擬地址模塊,用于得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址;獲得物理地址模塊,用于利用得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址通過(guò)A2步驟可以得到其對(duì)應(yīng)的物理地址;頁(yè)表查詢模塊,用于利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行指向內(nèi)核空間模塊,從而完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),獲得虛擬地址模塊包括通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏移量;由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的Pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地 址。本領(lǐng)域的技術(shù)人員在不脫離權(quán)利要求書確定的本發(fā)明的精神和范圍的條件下,還可以對(duì)以上內(nèi)容進(jìn)行各種各樣的修改。因此本發(fā)明的范圍并不僅限于以上的說(shuō)明,而是由權(quán)利要求書的范圍來(lái)確定的。
權(quán)利要求
1.一種針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,包括 步驟1,建立客戶域DomU,根據(jù)操作系統(tǒng)的運(yùn)算能力建立內(nèi)存監(jiān)控參數(shù),所述操作系統(tǒng)的運(yùn)算能力包括32位操作系統(tǒng)和64位操作系統(tǒng); 步驟2,將客戶域DomU的配置文件初始化,導(dǎo)入內(nèi)存監(jiān)控參數(shù),并對(duì)內(nèi)存監(jiān)控參數(shù)進(jìn)行映射操作,實(shí)現(xiàn)內(nèi)存監(jiān)控優(yōu)化。
2.如權(quán)利要求I所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,在步驟2執(zhí)行32位操作系統(tǒng)時(shí)包括 步驟21,用戶提供要映射的DomU的進(jìn)程的picUDomU的id值以及虛擬地址; 步驟22,若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間; 步驟23,若pid不為0,則該虛擬地址屬于Pid對(duì)應(yīng)的進(jìn)程地址空間,由于在用戶空間 中地址的存在形式為虛擬地址,首先獲取該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,然后轉(zhuǎn)換為其物理地址進(jìn)行尋址。
3.如權(quán)利要求2所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,步驟22包括 步驟31,通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址; 步驟32,根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針TOPE的物理地址值,之后,需要將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟33,根據(jù)I3DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)PDE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟34,根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟35,根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟36,得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容為要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容進(jìn)行讀取操作完成監(jiān)控操作。
4.如權(quán)利要求3所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,步驟32包括 步驟41,對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址; 步驟42,利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè); 步驟43,在返回的內(nèi)存頁(yè)中利用之前求得的TOPE在頁(yè)中的偏移量既得TOPE的值; 步驟44,返回I3DPE的值。
5.如權(quán)利要求2所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,步驟23包括 步驟51,得到pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址; 步驟52,得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址屬于內(nèi)核空間,因此,通過(guò)步驟22得到其對(duì)應(yīng)的物理地址; 步驟53,利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行步驟22完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。
6.如權(quán)利要求5所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,步驟51包括 步驟61,通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏移量; 步驟62,由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找; 步驟63,進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。
7.如權(quán)利要求I所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,在步驟2執(zhí)行64位操作系統(tǒng)時(shí)包括 步驟71,用戶提供要映射的DomU的進(jìn)程的pid、DomU的id值以及虛擬地址; 步驟72,若pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間; 步驟73,若pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,需拿到該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,再進(jìn)一步轉(zhuǎn)換為其物理地址進(jìn)行尋址。
8.如權(quán)利要求7所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,步驟72包括 步驟81,通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址; 步驟82,根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出第四級(jí)頁(yè)表項(xiàng)PML4E的物理地址值,之后,將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟83,根據(jù)PML4E和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針I(yè)3DPE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟84,根據(jù)I3DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)PDE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟85,根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟86,根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 步驟87,得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容既是要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容讀取操作完成監(jiān)控操作。
9.如權(quán)利要求8所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,步驟82包括 步驟91,對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址; 步驟92,利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配一頁(yè)空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè); 步驟93,在返回的內(nèi)存頁(yè)中利用之前求得的PML4E在頁(yè)中的偏移量既得PML4E的值; 步驟94,返回PML4E的值。
10.如權(quán)利要求7所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,步驟73包括 步驟101,得到Pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址;步驟102,利用得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址通過(guò)A2步驟可以得到其對(duì)應(yīng)的物理地址; 步驟103,利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行步驟72,從而完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。
11.如權(quán)利要求10所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法,其特征在于,步驟101包括 步驟111,通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏移量; 步驟112,由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的Pid的值,與提供的pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找; 步驟113,進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。
12.—種針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,包括 建立監(jiān)控參數(shù)模塊,用于建立客戶域DomU,根據(jù)操作系統(tǒng)的運(yùn)算能力建立內(nèi)存監(jiān)控參數(shù),所述操作系統(tǒng)的運(yùn)算能力包括32位操作系統(tǒng)和64位操作系統(tǒng); 監(jiān)控優(yōu)化模塊,用于將客戶域DomU的配置文件初始化,導(dǎo)入內(nèi)存監(jiān)控參數(shù),并對(duì)內(nèi)存監(jiān)控參數(shù)進(jìn)行映射操作,實(shí)現(xiàn)內(nèi)存監(jiān)控優(yōu)化。
13.如權(quán)利要求12所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,在32位操作系統(tǒng)的監(jiān)控優(yōu)化模塊包括 提供信息模塊,用于用戶提供要映射的DomU的進(jìn)程的pid、DomU的id值以及虛擬地址; 指向內(nèi)核空間模塊,用于若Pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間; 指向進(jìn)程地址空間模塊,用于若Pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,由于在用戶空間中地址的存在形式為虛擬地址,首先獲取該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,然后轉(zhuǎn)換為其物理地址進(jìn)行尋址。
14.如權(quán)利要求13所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,指向內(nèi)核空間模塊包括 發(fā)送地址模塊,用于通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址; 計(jì)算模塊,用于根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針TOPE的物理地址值,之后,需要將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)roPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)PDE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 獲得虛擬地址模塊,用于得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容為要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容進(jìn)行讀取操作完成監(jiān)控操作。
15.如權(quán)利要求14所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,計(jì)算模塊還包括 對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);在返回的內(nèi)存頁(yè)中利用之前求得的roPE在頁(yè)中的偏移量既得roPE的值;返回roPE的值。
16.如權(quán)利要求13所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,指向進(jìn)程地址空間模塊包括 獲得虛擬地址模塊,用于得到Pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址; 獲得物理地址模塊,用于得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址屬于內(nèi)核空間,因此,通過(guò)指向內(nèi)核空間模塊得到其對(duì)應(yīng)的物理地址; 頁(yè)表查詢模塊,用于利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行指向內(nèi)核空間模塊完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。
17.如權(quán)利要求16所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,獲得虛擬地址模塊包括 通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏移量;由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的pid的值,與提供的Pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。
18.如權(quán)利要求12所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,在64位操作系統(tǒng)的監(jiān)控優(yōu)化模塊包括 提供信息模塊,用于用戶提供要映射的DomU的進(jìn)程的pid、DomU的id值以及虛擬地址; 指向內(nèi)核空間模塊,用于若Pid為0,則該被監(jiān)控的虛擬地址屬于內(nèi)核空間; 指向進(jìn)程地址空間模塊,用于若Pid不為0,則該虛擬地址屬于pid對(duì)應(yīng)的進(jìn)程地址空間,需拿到該進(jìn)程的頁(yè)目錄表項(xiàng)基址的虛擬地址,再進(jìn)一步轉(zhuǎn)換為其物理地址進(jìn)行尋址。
19.如權(quán)利要求18所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,指向內(nèi)核空間模塊還包括 發(fā)送地址模塊,用于通過(guò)特權(quán)虛擬機(jī)中實(shí)現(xiàn)的訪問(wèn)Xen的內(nèi)核模塊向Xen發(fā)送獲取要映射的DomU的CR3寄存器中的頁(yè)目錄表物理內(nèi)存基址; 計(jì)算模塊,用于根據(jù)頁(yè)表基址的值和邏輯地址的值,計(jì)算出第四級(jí)頁(yè)表項(xiàng)PML4E的物理地址值,之后,將該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PML4E和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)指針I(yè)3DPE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)I3DPE和虛擬地址的值,計(jì)算出頁(yè)目錄項(xiàng)I3DE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PDE和虛擬地址的值,計(jì)算出頁(yè)表項(xiàng)PTE的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中;根據(jù)PTE和虛擬地址的值,計(jì)算出虛擬地址在DomU中對(duì)應(yīng)的物理地址值,并將DomU中該物理地址的內(nèi)容映射到特權(quán)虛擬機(jī)的內(nèi)存中; 獲得虛擬地址模塊,用于得到的特權(quán)虛擬機(jī)中分配的頁(yè)中的內(nèi)容既是要監(jiān)控的虛擬地址的內(nèi)容,通過(guò)對(duì)該頁(yè)的內(nèi)容讀取操作完成監(jiān)控操作。
20.如權(quán)利要求19所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,計(jì)算模塊還包括 對(duì)得到的物理地址值進(jìn)行計(jì)算,得到對(duì)應(yīng)的頁(yè)框號(hào)以及在該頁(yè)中的偏移量,頁(yè)框號(hào)即該頁(yè)所在頁(yè)的起始地址;利用頁(yè)框號(hào)及DomU的id,利用已經(jīng)實(shí)現(xiàn)的特權(quán)虛擬機(jī)的內(nèi)核模塊的地址映射功能,在特權(quán)虛擬機(jī)中分配一頁(yè)空閑頁(yè),將該頁(yè)框號(hào)對(duì)應(yīng)的一頁(yè)內(nèi)存的內(nèi)容映射到該空閑頁(yè),即讓這頁(yè)內(nèi)存對(duì)應(yīng)到DomU中要映射頁(yè)對(duì)應(yīng)的機(jī)器地址中的頁(yè)上,返回該空閑頁(yè);在返回的內(nèi)存頁(yè)中利用之前求得的PML4E在頁(yè)中的偏移量既得PML4E的值;返回PML4E的值。
21.如權(quán)利要求18所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,指向進(jìn)程地址空間模塊包括 獲得虛擬地址模塊,用于得到Pid對(duì)應(yīng)的進(jìn)程的頁(yè)目錄表基址的虛擬地址; 獲得物理地址模塊,用于利用得到的進(jìn)程的頁(yè)目錄表基地址的虛擬地址通過(guò)A2步驟可以得到其對(duì)應(yīng)的物理地址; 頁(yè)表查詢模塊,用于利用得到的進(jìn)程的頁(yè)目錄表基地址的物理地址進(jìn)行頁(yè)表查詢,重復(fù)執(zhí)行指向內(nèi)核空間模塊,從而完成進(jìn)程地址空間的內(nèi)存的監(jiān)控操作。
22.如權(quán)利要求21所述的針對(duì)硬件虛擬化的內(nèi)存監(jiān)控系統(tǒng),其特征在于,獲得虛擬地址模塊包括 通過(guò)初始化得到DomU的初始進(jìn)程init task的物理地址、進(jìn)程結(jié)構(gòu)的偏移量;由于進(jìn)程在內(nèi)存中是鏈表排列的,每個(gè)進(jìn)程結(jié)構(gòu)中都有一個(gè)指向下一個(gè)進(jìn)程的指針,因此,從初始進(jìn)程開(kāi)始遍歷所有的進(jìn)程,利用獲得的Pid偏移量得到鏈表中每個(gè)進(jìn)程的pid的值,與提供的pid進(jìn)行比對(duì),如果相同,則是要找的進(jìn)程,否則繼續(xù)查找;進(jìn)程的頁(yè)目錄表項(xiàng)基地址的虛擬地址存在于進(jìn)程結(jié)構(gòu)中,利用之前得到的偏移量以及找到的進(jìn)程地址即算出該地址。
全文摘要
本發(fā)明公開(kāi)一種針對(duì)硬件虛擬化的內(nèi)存監(jiān)控方法和系統(tǒng),所述方法包括步驟1,建立客戶域DomU,根據(jù)操作系統(tǒng)的運(yùn)算能力建立內(nèi)存監(jiān)控參數(shù),所述操作系統(tǒng)的運(yùn)算能力包括32位操作系統(tǒng)和64位操作系統(tǒng);步驟2,將客戶域DomU的配置文件初始化,導(dǎo)入內(nèi)存監(jiān)控參數(shù),并對(duì)內(nèi)存監(jiān)控參數(shù)進(jìn)行映射操作,實(shí)現(xiàn)內(nèi)存監(jiān)控優(yōu)化。
文檔編號(hào)G06F9/455GK102736969SQ20121016061
公開(kāi)日2012年10月17日 申請(qǐng)日期2012年5月22日 優(yōu)先權(quán)日2012年5月22日
發(fā)明者葉川, 孫毓忠, 田昕暉, 鄔小龍, 高云偉 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所