两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種虛擬機(jī)管理器的動態(tài)內(nèi)存映射方法

文檔序號:6613906閱讀:265來源:國知局

專利名稱::一種虛擬機(jī)管理器的動態(tài)內(nèi)存映射方法
技術(shù)領(lǐng)域
:本發(fā)明涉及虛擬化方法,特別是虛擬機(jī)管理器的動態(tài)內(nèi)存映射方法。技術(shù)背景虛擬機(jī)(VirtualMachine,VM)技術(shù)源于上世紀(jì)60年代,其核心思想是在一臺物理主機(jī)上虛擬出多個虛擬計算機(jī)(VM),其上能同時運行多個獨立的操作系統(tǒng),這些客戶操作系統(tǒng)(GuestOS)通過虛擬機(jī)管理器(VirtualMachineMonitor,VMM)訪問實際的物理資源。內(nèi)存虛擬化是虛擬機(jī)管理器(VMM)的重要功能之一。由于內(nèi)存是虛擬機(jī)最頻繁訪問的設(shè)備之一,內(nèi)存虛擬化的效率將對虛擬機(jī)的性能產(chǎn)生重大影響。而由于現(xiàn)代計算機(jī)通常都采用段頁式存儲管理、多級頁表等復(fù)雜的存儲體系結(jié)構(gòu),這又給VMM的高性能內(nèi)存虛擬化設(shè)計帶來了很大挑戰(zhàn)。當(dāng)需要在同一物理主機(jī)上同時部署多個虛擬機(jī)時,VMM能否提供可伸縮的內(nèi)存管理功能就顯得尤為重要。這是因為VMM需要實現(xiàn)物理內(nèi)存在虛擬機(jī)之間的分割復(fù)用,如果這種分割是靜態(tài)的,則一臺物理主機(jī)上所能并發(fā)執(zhí)行的虛擬機(jī)數(shù)量必然受到實際硬件的機(jī)器內(nèi)存大小的限制。同時,由于虛擬機(jī)上運行的軟件對內(nèi)存的需求各不相同,而且是動態(tài)變化的,基于靜態(tài)分割的內(nèi)存管理機(jī)制必然會造成內(nèi)存資源的不合理分配,從而大大影響虛擬機(jī)執(zhí)行的性能。因此,為了使VMM系統(tǒng)具有更好的伸縮性和可擴(kuò)展性,理想的VMM應(yīng)該提供以下一些內(nèi)存管理功能■按需取頁。只有當(dāng)虛擬機(jī)真正需要的時候,VMM才將物理內(nèi)存分配給它,而不是簡單地將固定大小的內(nèi)存空間劃分給虛擬機(jī)。按需取頁能夠提高內(nèi)存資源的利用率?!鎏摂M存儲。VMM應(yīng)該能夠利用交換等技術(shù),給虛擬機(jī)提供超過實際機(jī)器內(nèi)存大小的內(nèi)存空間。虛擬機(jī)上的GuestOS能夠象運行在裸機(jī)上一樣,透明地使用VMM提供的整個"物理內(nèi)存"。■內(nèi)存共享。VMM應(yīng)該允許虛擬機(jī)內(nèi)部、以及虛擬機(jī)之間只讀地共享完全相同的內(nèi)存區(qū)域,從而緩解大量虛擬機(jī)并發(fā)運行時的內(nèi)存資源緊缺。內(nèi)存共享是實現(xiàn)虛擬機(jī)快速復(fù)制的重要基礎(chǔ)。當(dāng)前的虛擬機(jī)管理系統(tǒng)分別實現(xiàn)了以上部分管理功能。如開源虛擬機(jī)管理器Xen實現(xiàn)了基于Ballooning的虛擬存儲技術(shù),即允許VMM從其它虛擬機(jī)竊取一些未使用機(jī)器內(nèi)存頁面,給急需內(nèi)存的虛擬機(jī)使用;VMWare公司的VMWareWorkstation實現(xiàn)了基于交換的虛擬存儲技術(shù),即允許將虛擬機(jī)的部分物理內(nèi)存頁面交換到宿主操作系統(tǒng)(HostOS)的交換磁盤分區(qū)上;而VMWareESXServer還實現(xiàn)了基于頁面內(nèi)容比較的虛擬機(jī)間內(nèi)存共享技術(shù)。但是,由于各種內(nèi)存管理功能的底層的實現(xiàn)機(jī)制是相互獨立的,現(xiàn)有虛擬機(jī)管理系統(tǒng)中的這些內(nèi)存管理機(jī)制具有以下缺點第一、機(jī)制的可擴(kuò)展性不強(qiáng)。受到開發(fā)周期的影響,上述VMM在實現(xiàn)不同的內(nèi)存管理功能時,分別引入了不同的底層支持機(jī)制,導(dǎo)致內(nèi)存管理模塊日益復(fù)雜而難以管理,限制了系統(tǒng)的可擴(kuò)展性。例如,為了實現(xiàn)Ballooning功能,Xen引入了GrantTable機(jī)制(參見2004年KeirFraser,"S映i/aniM^ejcce^w欣JfewWWwa/她c//weMo""or,"inProceedingsofthe1stWorkshoponOperatingSystemandArchitecturalSupport),但是該機(jī)制并不適用于按需取頁、內(nèi)存交換和內(nèi)存共享,因而難以繼續(xù)加入這些內(nèi)存管理功能。第二、完整性和耦合度不高。現(xiàn)有VMM大都未能實現(xiàn)上述所有的內(nèi)存管理功能。而即使是已實現(xiàn)的功能,也都分別采用獨立的模塊設(shè)計。由于模塊所用到的底層機(jī)制是相互獨立的,這些模塊之間難以有效地協(xié)同工作,甚至是相互沖突的。例如在VMWareESXServer中,內(nèi)存共享機(jī)制是不能與交換機(jī)制同時啟用的。而在實際應(yīng)用中,我們往往希望VMM能夠綜合地、并發(fā)地利用所有可能的內(nèi)存管理技術(shù),實現(xiàn)資源利用率的最大化。
發(fā)明內(nèi)容本發(fā)明的目的是建立統(tǒng)一的動態(tài)內(nèi)存映射機(jī)制,使得能夠在充分保證虛擬機(jī)訪問內(nèi)存的性能的前提下,實現(xiàn)虛擬機(jī)內(nèi)存的動態(tài)管理和調(diào)配。我們認(rèn)為,VMM應(yīng)該用一套單一的機(jī)制來支持上層的按需取頁、虛擬存儲和內(nèi)存共享功能,即該機(jī)制應(yīng)該具有很好的通用性。通用性帶來的好處是實現(xiàn)代碼復(fù)用,并降低VMM本身的復(fù)雜性,同時能夠有效地控制不同內(nèi)存管理功能之間不兼容性。同時,這套機(jī)制應(yīng)該是高效的。由于內(nèi)存是虛擬機(jī)最頻繁訪問的設(shè)備之一,內(nèi)存虛擬化的效率將對虛擬機(jī)的性能產(chǎn)生重大影響。只有將該機(jī)制帶來的性能的開銷控制在10%以內(nèi),才能認(rèn)為該機(jī)制是實用的。此外,這套機(jī)制必須具有良好的可擴(kuò)展性。利用它實現(xiàn)一個新的內(nèi)存管理功能不應(yīng)該影響到已實現(xiàn)的功能。另外,該機(jī)制不但能夠適用于現(xiàn)有的內(nèi)存管理功能,還要為今后可能的新內(nèi)存管理技術(shù)提供支持。綜上,本發(fā)明是要提出一套通用的、高效的、可擴(kuò)展的虛擬機(jī)內(nèi)存管理機(jī)制,以解決現(xiàn)有VMM系統(tǒng)中的內(nèi)存管理機(jī)制相互獨立所帶來的代碼可維護(hù)性差、可擴(kuò)展性差、耦合度低等難題。針對以上問題,本發(fā)明提出了虛擬機(jī)的動態(tài)內(nèi)存映射機(jī)制。動態(tài)內(nèi)存映射是VMM進(jìn)行內(nèi)存管理的一種底層機(jī)制,它允許VMM在虛擬機(jī)運行時,動態(tài)地改變虛擬機(jī)的物理內(nèi)存與真實硬件的機(jī)器內(nèi)存的對應(yīng)關(guān)系。從而能夠很好地支持VMM實現(xiàn)按需取頁、虛擬存儲和內(nèi)存共享等上層的內(nèi)存管理功能。我們將從基本思想、主要構(gòu)成、工作流程三個層次詳細(xì)說明動態(tài)內(nèi)存映射機(jī)制的
發(fā)明內(nèi)容。一、動態(tài)內(nèi)存映射機(jī)制的基本思想現(xiàn)代計算機(jī)通常都具備內(nèi)存分頁保護(hù)機(jī)制,這給VMM進(jìn)行內(nèi)存虛擬化提供了必要硬件支持。但由于客戶操作系統(tǒng)本身也會進(jìn)行頁式內(nèi)存管理,虛擬機(jī)系統(tǒng)中實際上存在著三個地址概念■機(jī)器地址(MachineAddress),指真實硬件的物理地址,即地址總線上應(yīng)該出現(xiàn)的地址信號?!鑫锢淼刂?GuestPhysicalAddress),指經(jīng)過VMM抽象的、虛擬機(jī)所看到的偽物理地址。■虛擬地址(GuestVirtualAddress),指GuestOS提供給其應(yīng)用程序使用的線性地址空間。基于以上概念,本發(fā)明提出的動態(tài)內(nèi)存映射模型的定義如下定義虛擬機(jī)所見到的物理內(nèi)存為集合P(以"頁面"為單位),虛擬機(jī)的生存周期為序列,假設(shè)在時刻G時,VMM提供給該虛擬機(jī)的機(jī)器內(nèi)存為集合Mi(以"頁面"為單位),映射力是從P到Mi的一個部分函數(shù),即對于任意的/eP,力(p"0或_/;(p)={m},meMi,且滿足下列性質(zhì)(函數(shù)的建立將在實施方式中描述)(1)映射力和其值域M,允許隨時間^動態(tài)變化;(2)若在某個時刻,虛擬機(jī)的物理地址p沒有機(jī)器頁面與之對應(yīng),即乂&)=0,則虛擬機(jī)對內(nèi)存p的讀寫訪問都將陷入VMM;(3)若在某個時刻,虛擬機(jī)的兩個物理地址映射到同一機(jī)器地址,即對任意兩個不同的eP,若力(p!)=力(p2),則虛擬機(jī)對內(nèi)存pi或者&的寫訪問都將陷入VMM;我們稱函數(shù)序列尸=/0,力,是虛擬機(jī)內(nèi)存P的一個動態(tài)內(nèi)存映射。在動態(tài)內(nèi)存映射的定義中,性質(zhì)(1)保證了映射力和其值域M,都是能夠隨著時間變化的,因此允許VMM動態(tài)調(diào)整虛擬機(jī)使用的機(jī)器內(nèi)存集合,或者動態(tài)調(diào)整虛擬機(jī)的物理內(nèi)存到機(jī)器內(nèi)存的對應(yīng)關(guān)系;性質(zhì)(2)允許虛擬機(jī)的某些物理內(nèi)存沒有機(jī)器內(nèi)存與之對應(yīng)時,能夠保證VMM能夠介入虛擬機(jī)對這些內(nèi)存的訪問(包括讀和寫),并進(jìn)行模擬;性質(zhì)(3)允許虛擬機(jī)的某些物理內(nèi)存共享同一機(jī)器內(nèi)存,而且保證VMM能夠介入虛擬機(jī)對共享內(nèi)存的寫訪問,并進(jìn)行模擬。因此,性質(zhì)(1)是動態(tài)內(nèi)存映射機(jī)制能夠運作的基本要求;而(2)和(3)則是該機(jī)制能夠用于實現(xiàn)按需取頁、虛擬存儲、內(nèi)存共享等功能的必要條件,我們將導(dǎo)致陷入發(fā)生的內(nèi)存訪問操作稱為"訪問違例",而將這兩個性質(zhì)一起稱為"違例陷入性質(zhì)",違例陷入性質(zhì)是動態(tài)內(nèi)存映射機(jī)制的正確性保障。二、動態(tài)內(nèi)存映射機(jī)制的主要構(gòu)成為了建立和維護(hù)動態(tài)內(nèi)存映射關(guān)系,本發(fā)明提出了"頁面池"的概念,它是虛擬機(jī)物理資源集合M的一個具體實現(xiàn),同時,本發(fā)明還設(shè)計了用于完成映射的主要數(shù)據(jù)結(jié)構(gòu),并描述了該數(shù)據(jù)結(jié)構(gòu)是如何與頁面池協(xié)同工作的;為了實現(xiàn)"違例陷入性質(zhì)",本發(fā)明利用當(dāng)前VMM中廣泛使用的影子頁表(參見YaozuDong,et.al,五We"ci"gXew*>WAinfe/Wr加atea"owrecA"o/ogv,IntelTechnologyJournal,Volume10,Issue3,August,2006)和頁故障的處理機(jī)制(參見AndrewandS.,Tanenbaum.C(peraft'rtg5feco"t/五淑'ow.PrenticeHall,2002),并用逆映射(參見AviKivity,et.al,yMM:7Tze丄/wiaWWwa/MacW"eMo""w,inProceedingsoftheLinuxSymposium,June,2007)的方法實現(xiàn)了一個安全的違例陷入機(jī)制,保證了發(fā)生訪問違例時,GuestOS會由于頁故障而陷入VMM。1、頁面池頁面池是用于維護(hù)VMM分配給某個虛擬機(jī)的全部內(nèi)存的數(shù)據(jù)結(jié)構(gòu)。一個頁面池由兩個部分構(gòu)成空閑池(FreePool)和活動池(ActivePool)。空閑池包含了當(dāng)前分配給該虛擬機(jī)、但尚未被虛擬機(jī)使用的所有機(jī)器頁面,而活動池則包含了所有已被虛擬機(jī)映射的機(jī)器頁面。嚴(yán)格地說,活動池中的頁面對應(yīng)于集合/(P),而空閑池中的頁面則對應(yīng)于集合M-/(P)。我們規(guī)定(1)虛擬機(jī)永遠(yuǎn)只能和活動池中的頁面建立內(nèi)存映射;(2)VMM要改變頁面池的大小時,永遠(yuǎn)只能向空閑池中添加新的機(jī)器頁面,或者從空閑池中取出機(jī)器頁面。根據(jù)以上設(shè)計,頁面池將包含以下操作1、分配(allocate):將一個頁面從空閑池移入活動池,并且保證為該頁面建立映射。2、返還(return):將一個頁面從活動池放回空閑池,之前必須保證刪除了與該頁面有關(guān)的所有內(nèi)存映射。3、擴(kuò)大(expand):將某些機(jī)器頁面加入頁面池的空閑池中,其結(jié)果是增大了虛擬機(jī)所能使用的機(jī)器內(nèi)存(集合M)的大小。4、收縮(shrink):將某些機(jī)器頁面從頁面池的空閑池中刪除,其結(jié)果是減小了虛擬機(jī)所能使用的機(jī)器內(nèi)存(集合M)的大小。在通常情況下,我們需要為每個虛擬機(jī)建立一個頁面池,以保證虛擬機(jī)之間的獨立性和隔離性。但是,如果允許虛擬機(jī)之間共享內(nèi)存頁面,則由多個虛擬機(jī)構(gòu)成的虛擬機(jī)組共享同一個頁面池也是可行的。2、映射的表示我們可以用一個大小為|P|的數(shù)組,如phys一mem[](P為虛擬機(jī)所見的物理內(nèi)存集合),來表示映射關(guān)系/。該數(shù)組的元素值定義如下對于虛擬機(jī)的每個物理頁面;?eP,(1)若力(p)-0,則phys—memb]的值為空;(2)若力(p)-(W,貝ijphys_mem[p]指向機(jī)器頁面m。這樣,如果^(p)T^0,VMM能夠用phys—mem[p]來獲得對應(yīng)的機(jī)器頁面,其時間開銷為0(1)。而當(dāng)phys—mem[p]的值為空時,VMM便可以知道GuestOS對物理內(nèi)存;?的訪問發(fā)生了讀訪問違例。3、違例陷入機(jī)制為了實現(xiàn)動態(tài)內(nèi)存映射定義中的"違例陷入性質(zhì)",我們在VMM中引入了違例陷入機(jī)制。該機(jī)制保證了運行中的GuestOS遇到訪問違例時會陷入VMM,以保證VMM能夠獲得計算機(jī)的控制權(quán)并對違例訪問加以模擬。這里將以采用影子頁表技術(shù)的虛擬機(jī)系統(tǒng)為例,闡釋本發(fā)明的解決方案。由于我們的違例陷入機(jī)制只對頁表進(jìn)行修改,因此它也同樣適用于采用半虛擬化技術(shù)的虛擬機(jī)系統(tǒng),例如Xen(參見Paul,Barham,etal.Zenam/Jrto/WWwafeariow.ACMSIGOPSOperatingSystemsReview,ProceedingsofthenineteenthACMsymposiumonOperatingsystemsprinciples(SOSP).2003,Vol.37)。由于影子頁表是虛擬機(jī)訪問機(jī)器內(nèi)存的唯一途徑,因此,只要保證VMM對映射/的更新能夠反映到影子頁表中,就能夠利用MMU(MemoryManagementUnit)的硬件保護(hù)機(jī)制,保證虛擬機(jī)的訪問違例會陷入VMM。若將GuestOS中虛擬地址到物理地址的映射關(guān)系記為g,則影子頁表可以理解為映射關(guān)系/,g,VMM必須保證如下兩點(1)若/(p)-0,則對于任意的映射了物理地址p的虛擬地址v,要保證關(guān)于v的影子頁表項為空;(2)對任意兩個不同的化,;72eP,若它們映射到同一機(jī)器地址,則對于任意映射了的物理地址^或者;2的虛擬地址v,要保證關(guān)于v的影子頁表項是只讀映射。這兩條性質(zhì)稱為違例陷入性質(zhì)在影子頁表上的傳遞性。在x86體系結(jié)構(gòu)下,上述的(1)可以通過清除影子頁表項的P(Present)位來實現(xiàn),而(2)則可以通過清除影子頁表項的W(Writable)位來實現(xiàn)。為了找到所有映射了某個機(jī)器頁面m的所有影子頁表項,本發(fā)明采用了"逆映射"數(shù)據(jù)結(jié)構(gòu)。逆映射(ReverseMapping)是一種能夠快速獲得映射原像的數(shù)據(jù)結(jié)構(gòu),本發(fā)明用它來表示映射(/^》"。因此,當(dāng)VMM更新影子頁表項時,要同步更新對應(yīng)的逆映射。結(jié)合上面的分析,本發(fā)明提出的技術(shù)方案為一種虛擬機(jī)管理器的動態(tài)內(nèi)存映射方法,其步驟為-(1)分別建立虛擬機(jī)和虛擬機(jī)管理器的頁面池,并進(jìn)行初始化;所述頁面池包括活動池和空閑池,其具有如下功能分配將一個頁面從空閑池移入活動池,并且保證為該頁面建立映射;返還將一個頁面從活動池放回空閑池,之前刪除與該頁面有關(guān)的所有內(nèi)存映射;擴(kuò)大將某些機(jī)器頁面加入頁面池的空閑池中,增大虛擬機(jī)所能使用的機(jī)器內(nèi)存;收縮將某些機(jī)器頁面從頁面池的空閑池中刪除,減小虛擬機(jī)所能使用的機(jī)器內(nèi)存;(2)虛擬機(jī)訪問違例時虛擬機(jī)管理器動態(tài)建立并更新虛擬機(jī)物理內(nèi)存集合P到虛擬機(jī)管理器頁面池中的機(jī)器內(nèi)存集合M的映射關(guān)系/(p),其中p為物理內(nèi)存集合P中的任意一個頁面。所述頁面的數(shù)據(jù)結(jié)構(gòu)包括頁面號、引用計數(shù)、狀態(tài)標(biāo)志。所述的方法中采用影子頁表建立所述映射關(guān)系/(p)。所述的方法中虛擬機(jī)管理器動態(tài)更新所述影子頁表項的映射關(guān)系/(p)Xg(v),同步更新對應(yīng)的逆映射(/(p)Xg(v))—、其中g(shù)(力為虛擬地址到物理地址的映射關(guān)系,V為虛擬地址。所述活動池與所述空閑池通過雙向鏈表連接。所述訪問違例為在時刻^虛擬機(jī)訪問了內(nèi)存p,且力(p)=0時,則虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入虛擬機(jī)管理器,所述虛擬機(jī)管理器從頁面池的空閑池中分配一塊新的機(jī)器內(nèi)存m,將其加入頁面池的活動池,設(shè)置力+1()={加},然后恢復(fù)虛擬機(jī)執(zhí)行。所述訪問違例為在時刻fj虛擬機(jī)訪問了內(nèi)存p,且y;(p)-0時,則虛擬1^幾的執(zhí)行將中斷,控制轉(zhuǎn)入虛擬機(jī)管理器,所述虛擬機(jī)管理器執(zhí)行下列步驟(1)虛擬機(jī)管理器判斷當(dāng)前頁面池的空閑池是否充裕,若是,則虛擬機(jī)管理器分配一塊新的機(jī)器內(nèi)存W將它加入頁面池的活動池,設(shè)置/汁1&)={附},然后轉(zhuǎn)到步驟(3);(2)若否,則虛擬機(jī)管理器從頁面池的活動池中選擇一個頁面集合S,將它們從頁面池的活動池中刪除,同時,對于所有映射了S中機(jī)器頁面的物理頁面JC,我們設(shè)置力+1(力=0,并將頁面JC的內(nèi)容寫入交換空間,然后重新運行系統(tǒng);(3)虛擬機(jī)管理器檢查p的內(nèi)容是否在交換空間中,若是,則從交換空間中將p的內(nèi)容讀入附,恢復(fù)虛擬機(jī)的執(zhí)行;否則恢復(fù)虛擬機(jī)的執(zhí)行。所述方法中所述虛擬機(jī)管理器中的所有虛擬機(jī)共享同一頁面池,所述訪問違例為在時刻^,其中一臺虛擬機(jī)A試圖寫入內(nèi)存p,若存在來自所述虛擬機(jī)/!或其他虛擬機(jī)的另一個物理頁面/7',使得/7和p'映射到同一機(jī)器頁面時,虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入虛擬機(jī)管理器,所述虛擬機(jī)管理器分配一個新的機(jī)器頁面m,將頁面p的內(nèi)容復(fù)制到W中;然后,虛擬機(jī)管理器將《7加入頁面池,設(shè)置/,+1(p)={附},并恢復(fù)虛擬機(jī)的執(zhí)行。所述訪問違例為虛擬機(jī)訪問了虛擬地址v,由于影子頁表中沒有關(guān)于v的地址轉(zhuǎn)換映射,虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入虛擬機(jī)管理器,所述虛擬機(jī)管理器執(zhí)行下列頁故障處理(1)虛擬機(jī)管理器根據(jù)被中斷的虛擬CPU的頁表指針寄存器獲得虛擬機(jī)的頁目錄指針,并模擬內(nèi)存管理單元逐級找到虛擬地址V所對應(yīng)的頁表項;(2)在步驟(1)的同時,虛擬機(jī)管理器根據(jù)每一級頁表的物理地址,査詢影子頁表的哈希表,獲得與該級頁表對應(yīng)的影子頁表,如果該級頁表沒有對應(yīng)的影子頁表,則分配新的影子頁表,并與上一級影子頁表相關(guān)聯(lián),使虛擬機(jī)管理器得到與V對應(yīng)的影子頁表項指針;(3)虛擬機(jī)管理器從虛擬機(jī)的頁表項中讀出與v對應(yīng)的物理地址p,然后查詢數(shù)組phys_memb],但發(fā)現(xiàn)其值為空;所述數(shù)組phys—mem[]為虛擬機(jī)物理內(nèi)存集合P到機(jī)器內(nèi)存集合M的映射y^);(4)虛擬機(jī)管理器判斷頁面池中空閑頁的數(shù)量是否大于所需頁數(shù),如果頁面池中空閑頁的數(shù)量小于所需頁數(shù),頁面淘汰模塊將被激活,并異步地執(zhí)行步驟(6)~(10);(5)如果空閑池中沒有頁面,則在此等待;否則,就從空閑池中選擇一個頁面w,并轉(zhuǎn)到步驟(11);(6)頁面淘汰模塊根據(jù)頁面淘汰算法,從活動池中選擇一組頁面,并將這些頁面從活動池中刪除;(7)虛擬機(jī)管理器依次査詢這些頁面的逆映射鏈,找到所有映射了這些頁面的影子頁表項,先記錄下表項的Dirty位,再將這些頁表項置為空,同時也刪除對應(yīng)的逆映射,最后,虛擬機(jī)管理器刷新虛擬機(jī)的快表(TLB,TranslationLook-aheadBuffer);(8)如果該頁面是臟的,則虛擬機(jī)管理器需要發(fā)起I/0操作,將這些頁面的物理頁面號及頁面內(nèi)容保存到磁盤的設(shè)定的位置上;(9)在phys—mem[]數(shù)組中,將與這些頁面的物理頁面號對應(yīng)的數(shù)組元素置為空,同時標(biāo)記這些物理頁面已被換出;(10)將這些頁面加入空閑池,并回到步驟(5);(11)虛擬機(jī)管理器將機(jī)器頁面w從空閑池中刪除,并加入活動池,然后設(shè)置phys_mem[p]=(12)虛擬機(jī)管理器根據(jù)頁面/的標(biāo)記,判斷該頁面是否之前被換出,如果是,則虛擬機(jī)管理器需要發(fā)起I/0操作,通過頁面p的物理頁面號,從磁盤中讀出先前保存下來的頁面內(nèi)容,并寫入機(jī)器頁面m中;(13)將w的機(jī)器地址寫入與導(dǎo)致故障的虛擬地址v對應(yīng)的影子頁表項,并將這個頁表項指針添加到機(jī)器頁面m的逆映射鏈中,最后,虛擬機(jī)管理器刷新虛擬機(jī)的快表(TLB,TranslationLook-aheadBuffer);(14)虛擬機(jī)管理器恢復(fù)虛擬機(jī)的執(zhí)行。所述的方法中虛擬機(jī)管理器處理完所述訪問違例后,如果影子頁表項發(fā)生了變化,則虛擬機(jī)管理器需要同時更新對應(yīng)的逆映射。發(fā)明的優(yōu)點與積極效果同現(xiàn)有的虛擬機(jī)內(nèi)存管理機(jī)制相比,本發(fā)明提出的虛擬機(jī)動態(tài)內(nèi)存映射機(jī)制具有以下優(yōu)點與積極效果1.平臺無關(guān)性。本發(fā)明給出了動態(tài)內(nèi)存映射的模型定義,該模型是用一種抽象的方法描述的,并不局限于某種特殊的實現(xiàn)方案,也不局限于特定體系結(jié)構(gòu)的計算機(jī)。2.通用性。利用動態(tài)內(nèi)存映射機(jī)制,VMM能夠很容易地實現(xiàn)虛擬機(jī)的按需取頁、虛擬內(nèi)存、Ballooning、內(nèi)存共享、Copy-On-Write、虛擬機(jī)快速復(fù)制??梢酝ㄟ^動態(tài)內(nèi)存映射模型的定義得到相應(yīng)的形式化算法。3.高效性。為了測試動態(tài)內(nèi)存映射機(jī)制帶來的開銷,我們在同一臺物理計算機(jī)上部署了兩臺完全一樣的虛擬機(jī),其上都安裝了CentOSLinux,內(nèi)核版本為2.6.9。我們分別用修改前和修改后的某個VMM運行該虛擬機(jī),并在虛擬機(jī)上編譯2.6.20版本的Linux內(nèi)核。實驗結(jié)果表明,本發(fā)明機(jī)制給VMM的內(nèi)存虛擬化帶來的額外時間開銷能夠控制在5%以內(nèi),如圖3(a)所示,而其中的絕大多數(shù)開銷來源于逆映射的維護(hù)(增加開銷138秒,其中118秒用于逆映射的維護(hù),如圖3(b)所示。4.高耦合度。利用動態(tài)內(nèi)存映射機(jī)制實現(xiàn)的虛擬機(jī)高級內(nèi)存管理功能,由于其底層采用的是同一個高效的機(jī)制,因此具有很好的耦合性,相互直接的兼容性很好,而且易于協(xié)同工作。這給VMM設(shè)計高效的上層內(nèi)存管理策略帶來的極大的方便。安全性。由于動態(tài)內(nèi)存映射機(jī)制具有代碼復(fù)用等優(yōu)點,能夠很好地控制整個VMM系統(tǒng)的復(fù)雜性,從而提高整個計算系統(tǒng)的安全性和可信度。同時,由于虛擬機(jī)的所有內(nèi)存訪問都是通過同一機(jī)制實現(xiàn)的,因此易于VMM進(jìn)行集中的隔離控制和權(quán)限檢査。圖1顯示了一個實現(xiàn)了動態(tài)內(nèi)存映射機(jī)制的VMM;圖2為實現(xiàn)了動態(tài)內(nèi)存映射之后,頁故障處理的主要工作流程;圖3本發(fā)明與現(xiàn)有技術(shù)的內(nèi)存映射機(jī)制帶來的內(nèi)存開銷對比圖。具體實施方式在下面的例子中,我們將簡要闡述在一個虛擬機(jī)管理器上實現(xiàn)動態(tài)內(nèi)存映射機(jī)制的必要步驟,以及如何利用已實現(xiàn)的動態(tài)內(nèi)存映射機(jī)制完成虛擬機(jī)的頁面交換。首先,我們要設(shè)計一個表示機(jī)器頁面的數(shù)據(jù)結(jié)構(gòu),稱為"機(jī)器頁面描述符",描述符必須包含如下信息1、對應(yīng)的機(jī)器頁面號;2、引用計數(shù),用于表示該頁面被映射/使用的次數(shù);3、狀態(tài)標(biāo)志,用于表明該頁面的使用狀態(tài)。然后,我們需要實現(xiàn)頁面池機(jī)制。頁面池可以用兩個雙向鏈表實現(xiàn),分別用于表示活動池和空閑池。當(dāng)一個機(jī)器頁面的描述符被加到某個鏈表中時,就表示該頁面已被加入對應(yīng)的頁面池中。最后,我們需要實現(xiàn)違例陷入機(jī)制,并在違例陷入時動態(tài)的建立和維護(hù)動態(tài)內(nèi)存映射關(guān)系。下面我們先分別以按需取頁、虛擬存儲、內(nèi)存共享為例,描述動態(tài)內(nèi)存映射關(guān)系在這幾種不同應(yīng)用中的建立流程。在給出這些流程時,我們首先假定"陷入的性質(zhì)"是成立的,并在最后給出違例陷入機(jī)制和逆映射更新這兩個重要部分的具體實現(xiàn),即頁故障的處理流程。1、按需取頁(1)VMM初始化頁面池為空,且對于虛擬機(jī)的任意物理頁面;,設(shè)置/0(/)=0,并啟動虛擬機(jī);(2)在某個時刻^,若虛擬機(jī)訪問了內(nèi)存p,且乂(p)-0,則根據(jù)性質(zhì)(2),虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入VMM;(3)VMM從頁面池的空閑池中分配一塊新的機(jī)器內(nèi)存m,將它加入頁面池的活動池,設(shè)置(p)={附},然后恢復(fù)虛擬機(jī)執(zhí)行;(4)重復(fù)步驟(2)和(3),直到虛擬機(jī)停機(jī)。2、虛擬存儲(1)VMM初始化頁面池為空,且對于虛擬機(jī)的任意物理頁面p,設(shè)置/o(p)-0,并啟動虛擬機(jī);(2)在某個時刻^,若虛擬機(jī)訪問了物理頁面;,且力(p)-0,則根據(jù)性質(zhì)(2),虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入VMM;(3)VMM判斷當(dāng)前頁面池的空閑池是否充裕,若是,則VMM分配一塊新的機(jī)器內(nèi)存m將它加入頁面池的活動池,設(shè)置/,+i(p)={w},然后轉(zhuǎn)到步驟(5);(4)若否,則VMM需要將某些頁面換出VMM從頁面池的活動池中選擇一個頁面集合S,將它們從頁面池的活動池中刪除,同時,對于所有映射了S中機(jī)器頁面的物理頁面;c,我們設(shè)置/w(x)-0,并將頁面x的內(nèi)容寫入交換空間。然后回到步驟(3);(5)VMM檢査p的內(nèi)容是否在交換空間中,若是,則從交換空間中將p的內(nèi)容讀入m,否則直接進(jìn)入步驟(6);(6)恢復(fù)虛擬機(jī)的執(zhí)行,轉(zhuǎn)到步驟(2),直到虛擬機(jī)停機(jī)。3、內(nèi)存共享首先假定所有需要共享頁面的虛擬機(jī)使用同一頁面池。(1)VMM初始化頁面池,使其只包含一個機(jī)器頁面s,并對于每個虛擬機(jī)的任意物理頁面;?,設(shè)置/0(;)=&},然后依次啟動各個虛擬機(jī);(2)在時刻^,虛擬機(jī)A試圖寫入物理頁面p。若存在另一個(或一些)物理頁面;'(來自虛擬機(jī)A或其他虛擬機(jī)),使得p和p'映射到同一機(jī)器頁面,則根據(jù)性質(zhì)(3),虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入VMM。(3)VMM分配一個新的機(jī)器頁面w,將物理頁面p的內(nèi)容復(fù)制到附中。然后,VMM將m加入頁面池,設(shè)置力+1&)={7},并恢復(fù)虛擬機(jī)的執(zhí)行。(4)重復(fù)步驟(2)和(3),直到所有虛擬機(jī)停機(jī)。上述內(nèi)存共享的實現(xiàn)中,所有虛擬機(jī)的內(nèi)存一開始都映射到同一個機(jī)器頁面,并隨著它們運行的過程利用Copy-On-Write不斷分裂。這從理論上是可行的,但是考慮到性能問題,實際的VMM通??梢赃M(jìn)行一些優(yōu)化,即允許虛擬機(jī)啟動時既存在共享的機(jī)器頁面,又擁有部分獨立的機(jī)器頁面,從而避免分裂次數(shù)過多帶來的性能問題。4、頁故障的處理流程考慮了動態(tài)內(nèi)存映射之后,頁故障處理的主要工作流程如圖2所示。圖中虛框部分是實現(xiàn)動態(tài)內(nèi)存映射的關(guān)鍵步驟。導(dǎo)致虛擬機(jī)陷入頁故障處理時,VMM能知道的信息包括1、導(dǎo)致頁故障的虛擬地址V;2、頁故障的性質(zhì)(缺頁、權(quán)限違例、讀寫違例)。但是,VMM能夠根據(jù)其掌握的其它數(shù)據(jù)結(jié)構(gòu),分析出更詳細(xì)的故障來源。這些信息包括(1)導(dǎo)致頁故障的虛擬機(jī)。(2)導(dǎo)致頁故障的物理地址和訪問權(quán)限。(3)和虛擬地址v有關(guān)的任何一級影子頁表。(4)與物理地址p對應(yīng)的機(jī)器頁面描述符。首先,VMM會根據(jù)導(dǎo)致頁故障的虛擬地址v,逐級周游GuestOS的頁表系統(tǒng)。在周游的同時,VMM還會查找與GuestOS的各級頁表所對應(yīng)的影子頁表是否存在,如果不存在則為其新分配一個影子頁表,并建立它與上層影子頁表的鏈接關(guān)系。這樣,如果頁故障是由于影子頁表缺失而導(dǎo)致的,則經(jīng)過此番周游,各級的影子頁表都已補(bǔ)齊了。當(dāng)周游到最后一級頁表時,VMM便可以知道這個頁面對于GuestOS是否存在。如果該頁面根本沒有被GuestOS映射,或者訪問權(quán)限不對,則GuestOS必須對這個頁故障負(fù)責(zé)。VMM把這個頁故障轉(zhuǎn)交給GuestOS處理。否則則表明VMM必須對這個頁故障負(fù)責(zé)。此時導(dǎo)致故障的主要原因包括(1)映射存在,但對應(yīng)的影子頁表項沒有初始化;(2)/(p)=0,這種情況又包括物理頁面號;7是非法的、尚未為該物理頁面分配機(jī)器頁面、該頁面已被換出、該頁面已被Balloon技術(shù)交給其它虛擬機(jī)使用等等。(3)GuestOS試圖寫入一個共享頁,而這個頁已經(jīng)在影子頁表中標(biāo)為只讀的。是否共享頁可以利用機(jī)器頁面描述符的引用計數(shù)來判斷。(4)GuestOS試圖寫入一個用作頁表的頁面,而且該頁表對應(yīng)的影子頁表已經(jīng)建立。一個頁面是否被用作頁表,可以通過査詢影子頁表的哈希表獲知。對于原因(1),VMM只需根據(jù)/(p)和g(力設(shè)置該頁表項即可。對于原因(2),VMM要先建立物理頁面到機(jī)器頁面的映射關(guān)系,然后再更新導(dǎo)致頁故障的影子頁表項。為了建立映射關(guān)系,我們需要先得到一個有效的機(jī)器頁面m。m可以直接從空閑池中取出,但如果空閑池中沒有可用頁面,則需要發(fā)起頁面淘汰算法(參見AndrewandS.,Tanenbaum.Moder"6^era"'wgiS"/e/w,Secowc/PrenticeHall,2002.)或Ballooning過程(參見Carl,A.Waldspurger.MemoryResourceManagementinVMwareESXServer.December2002.),重新填充空閑池。這個過程中,我們需要減少被回收頁面的引用計數(shù),并根據(jù)逆映射,確保放回空閑池的頁面不被任何影子頁表項映射。一旦得到了機(jī)器頁面附,我們就可以更新映射/(p),增加m的引用計數(shù),然后再根據(jù)/(p)和g(v)設(shè)置好該頁的影子頁表項。對于原因(3),VMM將發(fā)起Copy-On-Write過程,為該機(jī)器頁面建立一個副本,然后把導(dǎo)致異常的物理頁面重新映射到這個機(jī)器頁面,并且設(shè)置該映射為可寫的。而對于原來的機(jī)器頁面,我們要將它的引用計數(shù)減l,只要計數(shù)值仍然大于l,其它的物理頁面仍然只能只讀共享該頁面。而如果計數(shù)值降為1,則需要根據(jù)逆映射,將影子頁表中所有對該頁面的映射置為可寫的。對于原因(4),VMM將模擬這個寫操作,然后刪除該頁表對應(yīng)的影子頁表,這個影子頁表將在后來的訪問中重新被建立。此步驟確保對頁表的更新能及時反映到影子頁表上。上述操作完成后,如果影子頁表項發(fā)生了變化,則VMM需要同時更新對應(yīng)的逆映射,以表明某個物理頁面被這些影子頁表項所映射。完成了頁故障修復(fù)后,VMM就可以恢復(fù)GuestOS的執(zhí)行了。只要確保進(jìn)入GuestOS之前,所有的映射關(guān)系都已按照真實硬件的邏輯建立好,整個內(nèi)存虛擬化過程對GuestOS就是完全透明的。頁故障處理機(jī)制是在VMM的缺頁中斷處理中實現(xiàn)的。VMM必須在頁故障處理函數(shù)(參見http:Ven.wikipedia.org/wiki/Page—fault)中實現(xiàn)影子頁表維護(hù)、逆映射維護(hù),以及整個頁面交換過程。根據(jù)前面給出的實現(xiàn)方法流程,能夠完成影子頁表維護(hù)、逆映射維護(hù)等基本操作,并在此基礎(chǔ)上實現(xiàn)了頁面交換功能的頁故障處理流程如下所示(1)創(chuàng)建虛擬機(jī)時,我們?yōu)樵撎摂M機(jī)分配一定數(shù)量的機(jī)器頁面,將它們放入頁面池的空閑池中,并置數(shù)組phys—mem[]的各個元素為空;(2)在某個時刻,虛擬機(jī)上的GuestOS訪問了虛擬地址v,由于影子頁表中沒有關(guān)于v的地址轉(zhuǎn)換映射,虛擬機(jī)將發(fā)生頁故障,并陷入VMM;(3)VMM根據(jù)被中斷的虛擬CPU的頁表指針寄存器(如x86處理器的CR3寄存器),獲得GuestOS的頁目錄指針,并模擬MMU逐級找到虛擬地址v所對應(yīng)的頁表項。在這里,我們假設(shè)該頁表項存在,而且沒有權(quán)限錯誤;(4)在步驟(3)的同時,VMM會根據(jù)每一級頁表的物理地址,查詢影子頁表的哈希表,獲得與該級頁表對應(yīng)的影子頁表,如果該級頁表沒有對應(yīng)的影子頁表,則分配新的影子頁表,并與上一級影子頁表相關(guān)聯(lián),最后,VMM同樣得到了與v對應(yīng)的影子頁表項指針;(5)VMM從GuestOS的頁表項中讀出與v對應(yīng)的物理地址/。在確認(rèn);是該虛擬機(jī)合法物理地址后,VMM査詢數(shù)組phys^jnemM,但發(fā)現(xiàn)其值為空;(6)VMM判斷頁面池中空閑頁的數(shù)量是否大于所需頁數(shù),如果頁面池中空閑頁的數(shù)量小于所需頁數(shù),頁面淘汰模塊將被激活,并異步地執(zhí)行步驟(8)(12)。(7)如果空閑池中沒有頁面,則在此等待。否則,就從空閑池中選擇一個頁面m,并轉(zhuǎn)到步驟(13)(8)頁面淘汰模塊根據(jù)頁面淘汰算法,從活動池中選擇一組頁面,并將這些頁面從活動池中刪除;(9)VMM依次查詢這些頁面的逆映射鏈,找到所有映射了這些頁面的影子頁表項,先記錄下表項的Dirty位,再將這些頁表項置為空,同時也刪除對應(yīng)的逆映射。最后,VMM必須刷新虛擬機(jī)的快表(TLB,TranslationLook-aheadBuffer);(10)如果該頁面是臟的,則VMM需要發(fā)起I/0操作,將這些頁面的物理頁面號及頁面內(nèi)容保存到磁盤的設(shè)定的位置上;(11)在phys—mem[]數(shù)組中,將與這些頁面的物理頁面號對應(yīng)的數(shù)組元素置為空,同時標(biāo)記這些物理頁面已被換出;(12)將這些頁面加入空閑池,并回到步驟(7);(13)VMM將機(jī)器頁面m從空閑池中刪除,并加入活動池。然后設(shè)置phys—memb]=附;(14)VMM根據(jù)頁面;?的標(biāo)記,判斷該頁面是否之前被換出(參見步驟ll),如果是,則VMM需要發(fā)起I/0操作,通過頁面p的物理頁面號,從磁盤中讀出先前保存下來的頁面內(nèi)容,并寫入機(jī)器頁面7W中;(15)將m的機(jī)器地址寫入與導(dǎo)致故障的虛擬地址v對應(yīng)的影子頁表項(這個頁表項是在步驟4中得到的),并將這個頁表項指針添加到機(jī)器頁面w的逆映射鏈中。最后,VMM必須刷新虛擬機(jī)的TLB;(16)VMM恢復(fù)虛擬機(jī)的執(zhí)行。在上述流程中,我們假設(shè)頁面池的大小是不變的(都是在步驟1中分配的),而且不考慮寫故障的情況和用于頁面共享的計數(shù)器。權(quán)利要求1.一種虛擬機(jī)管理器的動態(tài)內(nèi)存映射方法,其步驟為(1)分別建立虛擬機(jī)和虛擬機(jī)管理器的頁面池,并進(jìn)行初始化;所述頁面池包括活動池和空閑池,其具有如下功能分配將一個頁面從空閑池移入活動池,并且保證為該頁面建立映射;返還將一個頁面從活動池放回空閑池,之前刪除與該頁面有關(guān)的所有內(nèi)存映射;擴(kuò)大將某些機(jī)器頁面加入頁面池的空閑池中,增大虛擬機(jī)所能使用的機(jī)器內(nèi)存;收縮將某些機(jī)器頁面從頁面池的空閑池中刪除,減小虛擬機(jī)所能使用的機(jī)器內(nèi)存;(2)虛擬機(jī)訪問違例時虛擬機(jī)管理器動態(tài)建立并更新虛擬機(jī)物理內(nèi)存集合P到虛擬機(jī)管理器頁面池中的機(jī)器內(nèi)存集合M的映射關(guān)系f(p),其中p為物理內(nèi)存集合P中的任意一個頁面。2.如權(quán)利要求1所述的方法,其特征在于所述頁面的數(shù)據(jù)結(jié)構(gòu)包括頁面號、引用計數(shù)、狀態(tài)標(biāo)志o3.如權(quán)利要求l所述的方法,其特征在于采用影子頁表建立所述映射關(guān)系/(p)。4.如權(quán)利要求3所述的方法,其特征在于虛擬機(jī)管理器動態(tài)更新所述影子頁表項的映射關(guān)系/(p)Xg(v),同步更新對應(yīng)的逆映射(/(p)Xg(v))—、其中g(shù)(v)為虛擬地址到物理地址的映射關(guān)系,v為虛擬地址。5.如權(quán)利要求l所述的方法,其特征在于所述活動池與所述空閑池通過雙向鏈表連接。6.如權(quán)利要求l所述的方法,其特征在于所述訪問違例為在時刻^虛擬機(jī)訪問了內(nèi)存p,且力(/7)=0時,則虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入虛擬機(jī)管理器,所述虛擬機(jī)管理器從頁面池的空閑池中分配一塊新的機(jī)器內(nèi)存m,將其加入頁面池的活動池,設(shè)置/,+1(^)={附},然后恢復(fù)虛擬機(jī)執(zhí)行。7.如權(quán)利要求1所述的方法,其特征在于所述訪問違例為在時刻^虛擬機(jī)訪問了物理頁面;,且力0)=0時,則虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入虛擬機(jī)管理器,所述虛擬機(jī)管理器執(zhí)行下列步驟-(1)虛擬機(jī)管理器判斷當(dāng)前頁面池的空閑池是否充裕,若是,則虛擬機(jī)管理器分配一塊新的機(jī)器內(nèi)存m將它加入頁面池的活動池,設(shè)置/i+1(p)={w},然后轉(zhuǎn)到步驟(3);(2)若否,則虛擬機(jī)管理器從頁面池的活動池中選擇一個頁面集合S,將它們從頁面池的活動池中刪除,同時,對于所有映射了S中機(jī)器頁面的物理頁面:c,設(shè)置/,+1(x)-0,并將頁面x的內(nèi)容寫入交換空間,然后重新運行系統(tǒng);(3)虛擬機(jī)管理器檢査所述物理頁面p的內(nèi)容是否在交換空間中,若是,則從交換空間中將所述物理頁面p的內(nèi)容讀入所述機(jī)器內(nèi)存m,恢復(fù)虛擬機(jī)的執(zhí)行;否則恢復(fù)虛擬機(jī)的執(zhí)行。8.如權(quán)利要求1所述的方法,其特征在于所述虛擬機(jī)管理器中的所有虛擬機(jī)共享同一頁面池,所述訪問違例為在時刻G,其中一臺虛擬機(jī)&試圖寫入物理頁面p,若存在來自所述虛擬機(jī)A或其他虛擬機(jī)的另一個物理頁面使得和p'映射到同一機(jī)器頁面時,虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入虛擬機(jī)管理器,所述虛擬機(jī)管理器分配一個新的機(jī)器頁面m,將所述物理頁面p的內(nèi)容復(fù)制到所述機(jī)器頁面m中;然后,虛擬機(jī)管理器將所述機(jī)器頁面W加入頁面池,設(shè)置力+1()={附},并恢復(fù)虛擬機(jī)的執(zhí)行。9.如權(quán)利要求5所述的方法,其特征在于所述訪問違例為虛擬機(jī)訪問了虛擬地址v,由于影子頁表中沒有關(guān)于所述虛擬地址V的地址轉(zhuǎn)換映射,虛擬機(jī)的執(zhí)行將中斷,控制轉(zhuǎn)入虛擬機(jī)管理器,所述虛擬機(jī)管理器執(zhí)行下列頁故障處理步驟(1)虛擬機(jī)管理器根據(jù)被中斷的虛擬CPU的頁表指針寄存器獲得虛擬機(jī)的頁目錄指針,并模擬內(nèi)存管理單元逐級找到所述虛擬地址V所對應(yīng)的頁表項;(2)在步驟(1)的同時,虛擬機(jī)管理器根據(jù)每一級頁表的物理地址,查詢影子頁表的哈希表,獲得與該級頁表對應(yīng)的影子頁表,如果該級頁表沒有對應(yīng)的影子頁表,則分配新的影子頁表,并與上一級影子頁表相關(guān)聯(lián),使虛擬機(jī)管理器得到與所述虛擬地址V對應(yīng)的影子頁表項指針;(3)虛擬機(jī)管理器從虛擬機(jī)的頁表項中讀出與所述虛擬地址v對應(yīng)的物理地址/7,然后查詢數(shù)組phys—mem[p],但發(fā)現(xiàn)其值為空;所述數(shù)組phys—mem[]為虛擬機(jī)物理內(nèi)存集合P到機(jī)器內(nèi)存集合M的映射^);(4)虛擬機(jī)管理器判斷頁面池中空閑頁的數(shù)量是否大于所需頁數(shù),如果頁面池中空閑頁的數(shù)量小于所需頁數(shù),頁面淘汰模塊將被激活,并異步地執(zhí)行步驟(6)(10);(5)如果空閑池中沒有頁面,則在此等待;否則,就從空閑池中選擇一個機(jī)器頁面W,并轉(zhuǎn)到步驟(11);(6)頁面淘汰模塊根據(jù)頁面淘汰算法,從活動池中選擇一組頁面,并將這些頁面從活動池中刪除;(7)虛擬機(jī)管理器依次查詢這些頁面的逆映射鏈,找到所有映射了這些頁面的影子頁表項,先記錄下表項的Dirty位,再將這些頁表項置為空,同時也刪除對應(yīng)的逆映射,最后,虛擬機(jī)管理器刷新虛擬機(jī)的快表(TLB,TranslationLook-aheadBuffer);(8)如果該頁面是臟的,則虛擬機(jī)管理器需要發(fā)起I/0操作,將這些頁面的物理頁面號及頁面內(nèi)容保存到磁盤的設(shè)定的位置上;(9)在phys-mem[]數(shù)組中,將與這些頁面的物理頁面號對應(yīng)的數(shù)組元素置為空,同時標(biāo)記這些物理頁面已被換出;(10)將這些頁面加入空閑池,并回到步驟(5);(11)虛擬機(jī)管理器將所述機(jī)器頁面m從空閑池中刪除,并加入活動池,然后設(shè)置phys一mem[p]=附;(12)虛擬機(jī)管理器根據(jù)所述頁面p的標(biāo)記,判斷該頁面是否之前被換出,如果是,則虛擬機(jī)管理器需要發(fā)起I/O操作,通過所述頁面p的物理頁面號,從磁盤中讀出先前保存下來的頁面內(nèi)容,并寫入所述機(jī)器頁面m中;(13)將所述機(jī)器頁面w的機(jī)器地址寫入與導(dǎo)致故障的虛擬地址v對應(yīng)的影子頁表項,并將這個頁表項指針添加到所述機(jī)器頁面m的逆映射鏈中,最后,虛擬機(jī)管理器刷新虛擬機(jī)的快表;(14)虛擬機(jī)管理器恢復(fù)虛擬機(jī)的執(zhí)行。10.如權(quán)利要求6或7或8或9所述的方法,其特征在于虛擬機(jī)管理器處理完所述訪問違例后,如果影子頁表項發(fā)生了變化,則虛擬機(jī)管理器需要同時更新對應(yīng)的逆映射。全文摘要本發(fā)明公開了一種虛擬機(jī)管理器的動態(tài)內(nèi)存映射方法,其步驟為分別建立虛擬機(jī)和虛擬機(jī)管理器的頁面池;虛擬機(jī)訪問違例時虛擬機(jī)管理器動態(tài)建立并更新虛擬機(jī)物理內(nèi)存集合P到虛擬機(jī)管理器頁面池中的機(jī)器內(nèi)存集合M的映射關(guān)系f(p);采用本發(fā)明的方法可以同時支持上層的按需取頁、虛擬存儲和內(nèi)存共享功能,使得虛擬機(jī)管理器在充分保證虛擬機(jī)訪問內(nèi)存性能的前提下,實現(xiàn)虛擬機(jī)內(nèi)存的動態(tài)管理和調(diào)配。文檔編號G06F12/02GK101158924SQ200710178118公開日2008年4月9日申請日期2007年11月27日優(yōu)先權(quán)日2007年11月27日發(fā)明者孫逸峰,張彬彬,汪小林,羅英偉,許卓群,陳昊罡申請人:北京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
铜陵市| 荣成市| 前郭尔| 永修县| 商丘市| 类乌齐县| 九江市| 丹巴县| 彰化市| 赣州市| 庆云县| 鸡东县| 阿巴嘎旗| 鹤岗市| 隆回县| 双牌县| 托里县| 桂东县| 酉阳| 兴宁市| 永嘉县| 巴林右旗| 锦屏县| 晋城| 泽普县| 波密县| 延吉市| 得荣县| 南宫市| 黄梅县| 融水| 兴宁市| 班戈县| 乾安县| 通河县| 临泉县| 宜都市| 航空| 新乡县| 板桥市| 长顺县|