專利名稱::虛擬機(jī)內(nèi)存的共享方法與計(jì)算機(jī)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種可共享虛擬機(jī)中未使用內(nèi)存的方法與一種使用該方法的計(jì)算機(jī)系統(tǒng)。
背景技術(shù):
:隨著計(jì)算機(jī)硬件裝置的成本越來(lái)越降低以及大型服務(wù)器的需求越來(lái)越高,虛擬機(jī)(VirtualMachine)也越來(lái)越被重視。虛擬機(jī)為一種接口,應(yīng)用于一軟件與計(jì)算機(jī)系統(tǒng)之間,并可提供此計(jì)算機(jī)系統(tǒng)的各種資源給上述軟件使用。此軟件通常為一操作系統(tǒng),因此,操作系統(tǒng)可以通過(guò)虛擬機(jī)來(lái)存取計(jì)算機(jī)系統(tǒng)上的資源。然而,在一計(jì)算機(jī)系統(tǒng)上可以安裝多個(gè)虛擬機(jī),每個(gè)虛擬機(jī)上可安裝不同的操作系統(tǒng)。舉例來(lái)說(shuō),微軟的windows操作系統(tǒng)與Iinux操作系統(tǒng)便可同時(shí)安裝在一個(gè)計(jì)算機(jī)系統(tǒng)上不同的虛擬機(jī)中。另一方面,在開發(fā)新的操作系統(tǒng)時(shí)還可在一計(jì)算機(jī)系統(tǒng)上測(cè)試不同版本的操作系統(tǒng),其中各個(gè)操作系統(tǒng)也被安裝在不同的虛擬機(jī)上,當(dāng)其中一個(gè)測(cè)試的操作系統(tǒng)發(fā)生錯(cuò)誤時(shí)便不會(huì)導(dǎo)致整個(gè)計(jì)算機(jī)系統(tǒng)當(dāng)機(jī)。另外,隨著云端計(jì)算(CloudComputing)的應(yīng)用越來(lái)越廣,服務(wù)器的機(jī)動(dòng)性(mobility)也越來(lái)越重要。而由于虛擬機(jī)能讓操作系統(tǒng)與計(jì)算機(jī)系統(tǒng)之間的耦合關(guān)系被松綁,因此一個(gè)操作系統(tǒng)可以隨著虛擬機(jī)動(dòng)態(tài)的被移動(dòng)到另外一個(gè)計(jì)算機(jī)系統(tǒng),藉此平衡服務(wù)器的負(fù)載。然而,雖然理論上計(jì)算機(jī)系統(tǒng)上可以執(zhí)行多個(gè)虛擬機(jī),但是可執(zhí)行的虛擬機(jī)數(shù)量還是會(huì)受到限制,其中一個(gè)限制的原因便是內(nèi)存容量的問(wèn)題。在一計(jì)算機(jī)系統(tǒng)上所配置的內(nèi)存是有限的,若平均的將所有的內(nèi)存分配給所執(zhí)行的虛擬機(jī),則每個(gè)虛擬機(jī)所能運(yùn)用的內(nèi)存便可能不足。然而,這些虛擬機(jī)中可能會(huì)使用到相同的程序代碼或是數(shù)據(jù)(例如,window操作系統(tǒng)的核心程序),因此每一個(gè)虛擬機(jī)上都存有這些相同的數(shù)據(jù)。若能將這些虛擬機(jī)中相同的數(shù)據(jù)共享,使各個(gè)虛擬機(jī)只使用一份程序代碼或數(shù)據(jù)于計(jì)算機(jī)系統(tǒng)的內(nèi)存中,便能更有效的利用計(jì)算機(jī)系統(tǒng)的內(nèi)存。其中一種共享內(nèi)存的作法是,針對(duì)每個(gè)虛擬機(jī)中的每一個(gè)內(nèi)存分頁(yè)(memorypage),根據(jù)一個(gè)哈希函數(shù)(hashfunction)來(lái)計(jì)算出一個(gè)哈希值,并比對(duì)各個(gè)虛擬機(jī)中的內(nèi)存分頁(yè)是否有相同哈希值。若不同的虛擬機(jī)中存在相同的哈希值的內(nèi)存分頁(yè),則這些內(nèi)存分頁(yè)便可能是存有相同的資料,可以進(jìn)一步的共享。然而,此方法必須對(duì)每個(gè)虛擬機(jī)的每個(gè)內(nèi)存分頁(yè)都計(jì)算哈希值,所以非常的耗時(shí)。因此如何有效的共享虛擬機(jī)中的內(nèi)存,為此領(lǐng)域研究人員所關(guān)心的問(wèn)題。
發(fā)明內(nèi)容本發(fā)明提出一種虛擬機(jī)內(nèi)存的共享方法,此共享方法用于執(zhí)行至少一個(gè)虛擬機(jī)的計(jì)算機(jī)系統(tǒng)中。此共享方法包括以下步驟。取得虛擬機(jī)所對(duì)應(yīng)的內(nèi)存映像圖,此內(nèi)存映像圖存有所對(duì)應(yīng)的虛擬機(jī)中內(nèi)存頁(yè)面的使用狀態(tài)。根據(jù)虛擬機(jī)所對(duì)應(yīng)的內(nèi)存映像圖,標(biāo)記虛擬機(jī)上未被使用的內(nèi)存頁(yè)面為第一空閑頁(yè)。以及,共享虛擬機(jī)中的第一空閑頁(yè)。以另外一個(gè)角度來(lái)說(shuō),本發(fā)明還提出一種計(jì)算機(jī)系統(tǒng),用以執(zhí)行至少一個(gè)虛擬機(jī)。此計(jì)算機(jī)系統(tǒng)包括有內(nèi)存單元、處理單元、內(nèi)存控制單元。其中內(nèi)存單元包括有多個(gè)物理內(nèi)存頁(yè)面,而處理單元耦接至該內(nèi)存單元。內(nèi)存控制單元?jiǎng)t耦接至上述處理單元與內(nèi)存單元,并用以取得上述虛擬機(jī)所對(duì)應(yīng)的內(nèi)存映像圖,此內(nèi)存映像圖存有所對(duì)應(yīng)的虛擬機(jī)中內(nèi)存頁(yè)面的使用狀態(tài)。內(nèi)存控制單元還用以根據(jù)虛擬機(jī)所對(duì)應(yīng)的內(nèi)存映像圖,標(biāo)記虛擬機(jī)上未被使用的內(nèi)存頁(yè)面為多個(gè)第一空閑頁(yè),并共享各虛擬機(jī)中的第一空閑頁(yè)。圖1為依照本發(fā)明第一實(shí)施例所繪示的計(jì)算機(jī)系統(tǒng)方塊圖。圖2為依照本發(fā)明第一實(shí)施例所繪示的計(jì)算機(jī)系統(tǒng)與虛擬機(jī)的示意圖。圖3為依照本發(fā)明第一實(shí)施例的虛擬機(jī)內(nèi)存共享方法的流程圖。圖4A為依照本發(fā)明第一實(shí)施例所繪示的第一空閑頁(yè)的示意圖。圖4B為依照本發(fā)明第一實(shí)施例所繪示的一個(gè)虛擬機(jī)的內(nèi)存頁(yè)面的共享示意圖。圖5為依照本發(fā)明第二實(shí)施例的內(nèi)存共享方法的流程圖。圖6為依照本發(fā)明第三實(shí)施例的內(nèi)存共享方法的流程圖。圖7為依照本發(fā)明第三實(shí)施例所繪示的未使用內(nèi)存分頁(yè)的示意圖。圖8為依照本發(fā)明第三實(shí)施例所繪示的共享內(nèi)存方法各步驟的時(shí)間軸示意圖。主要組件符號(hào)說(shuō)明100:計(jì)算機(jī)系統(tǒng)120:處理單元140:內(nèi)存單元142、143、144、145:物理內(nèi)存頁(yè)面220:虛擬機(jī)監(jiān)控程序230、240:虛擬機(jī)232、234、236、242、731、740:內(nèi)存頁(yè)面250,260:操作系統(tǒng)262、252:虛擬內(nèi)存頁(yè)面254、264:內(nèi)存映像圖234,244,720:第一空閑頁(yè)730:第二空閑頁(yè)S302、S303、S304、S305、S306、S602、S604、S606:虛擬機(jī)內(nèi)存共享方法的各步驟S802:寫入資料S804:呼叫nominate指令S806:呼叫share指令具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。[第一實(shí)施例]圖1為依照本發(fā)明第一實(shí)施例所繪示的計(jì)算機(jī)系統(tǒng)方塊圖。請(qǐng)參照?qǐng)D1,計(jì)算機(jī)系統(tǒng)100包括處理單元120、內(nèi)存單元140、與內(nèi)存控制單元160。處理單元120耦接至內(nèi)存單元140,用以執(zhí)行計(jì)算機(jī)系統(tǒng)100中的軟件及軔體。處理單兀120例如為中央處理器(CentralProcessUnit,CPU)。內(nèi)存單元140包含了多個(gè)物理內(nèi)存頁(yè)面142。內(nèi)存單元140例如為動(dòng)態(tài)隨機(jī)存取內(nèi)存(DynamicRandomAccessMemory,DRAM)或靜態(tài)隨機(jī)存取內(nèi)存(StaticRandomAccessMemory,SRAM)。內(nèi)存控制單元160耦接至處理單元120與內(nèi)存單元140,用以控制內(nèi)存單元140中的物理內(nèi)存頁(yè)面142。內(nèi)存控制單兀160例如為微處理器(microprocessor),執(zhí)行一非揮發(fā)性內(nèi)存(未繪示)中的程序代碼。計(jì)算機(jī)系統(tǒng)100上執(zhí)行了多個(gè)虛擬機(jī),而每個(gè)虛擬機(jī)上可執(zhí)行一操作系統(tǒng)。請(qǐng)參照?qǐng)D2,圖2為依照本發(fā)明實(shí)施例所繪示的計(jì)算機(jī)系統(tǒng)與虛擬機(jī)的示意圖。虛擬機(jī)監(jiān)控程序(VirtualMachineMonitor,VMM)220被執(zhí)行在計(jì)算機(jī)系統(tǒng)100上,用以控制計(jì)算機(jī)系統(tǒng)100上所有的資源。其中計(jì)算機(jī)系統(tǒng)100的資源包括處理單元120、內(nèi)存單元140、或是計(jì)算機(jī)系統(tǒng)100上的輸入輸出(inputoutput,10)裝置(未繪示)的執(zhí)行與使用。在本實(shí)施例中,VMM220建置了虛擬機(jī)230與虛擬機(jī)240,虛擬機(jī)230與虛擬機(jī)240便可以通過(guò)VMM220來(lái)存取上述計(jì)算機(jī)系統(tǒng)100的資源。然而虛擬機(jī)監(jiān)控程序220可以提供數(shù)目更多或更少的虛擬機(jī),本發(fā)明并不限制虛擬機(jī)的數(shù)目。VMM220可將計(jì)算機(jī)系統(tǒng)100上的資源分配給虛擬機(jī)230與虛擬機(jī)240。以內(nèi)存為例,VMM220將內(nèi)存單元140中的物理內(nèi)存頁(yè)面142分配給虛擬機(jī)230與虛擬機(jī)240,使虛擬機(jī)230中包含了多個(gè)內(nèi)存頁(yè)面232,并使虛擬機(jī)240中包含了多個(gè)內(nèi)存頁(yè)面242。值得注意的是,內(nèi)存頁(yè)面232與內(nèi)存頁(yè)面242為客端物理內(nèi)存(guestphysicalmemory),也就是說(shuō)內(nèi)存頁(yè)面232與內(nèi)存頁(yè)面242并不是實(shí)體的內(nèi)存,僅是被對(duì)應(yīng)至內(nèi)存單元140中物理內(nèi)存頁(yè)面142的虛擬內(nèi)存。另一方面,虛擬機(jī)230上安裝了操作系統(tǒng)260,且虛擬機(jī)240上安裝了操作系統(tǒng)250。如此一來(lái),操作系統(tǒng)260便可以存取虛擬機(jī)230上的資源(例如,內(nèi)存頁(yè)面232),而操作系統(tǒng)250便可以存取虛擬機(jī)240上的資源(例如,內(nèi)存頁(yè)面242)。而操作系統(tǒng)260中也包含了多個(gè)虛擬內(nèi)存頁(yè)面262,操作系統(tǒng)260是用邏輯地址(logicaladdress)來(lái)存取這些虛擬內(nèi)存頁(yè)面262。當(dāng)操作系統(tǒng)260用邏輯地址存取虛擬內(nèi)存頁(yè)面262時(shí),此邏輯地址會(huì)被操作系統(tǒng)260轉(zhuǎn)換為內(nèi)存頁(yè)面232的客端實(shí)體位置(guestphysicaladdress),而VMM220再將此客端實(shí)體位置轉(zhuǎn)換為物理內(nèi)存頁(yè)面142的實(shí)體位置(physicaladdress)。操作系統(tǒng)260通過(guò)這樣的轉(zhuǎn)換關(guān)系來(lái)存取物理內(nèi)存頁(yè)面142。操作系統(tǒng)250也通過(guò)類似的轉(zhuǎn)換用邏輯地址來(lái)存取物理內(nèi)存頁(yè)面142,在此便不再贅述。而操作系統(tǒng)260中的內(nèi)存映像圖(memorymap)264則存放著內(nèi)存頁(yè)面232的使用狀態(tài)。在一實(shí)施例中,操作系統(tǒng)260為微軟windows操作系統(tǒng),內(nèi)存映像圖264則為頁(yè)框值數(shù)據(jù)庫(kù)(pageframenumberdatabase,PFNdatabase)。而頁(yè)框值數(shù)據(jù)庫(kù)為數(shù)組型態(tài)的數(shù)據(jù)結(jié)構(gòu),此數(shù)組的每一個(gè)元素中包括”Type”字段,而”Type”字段記錄著對(duì)應(yīng)的一個(gè)內(nèi)存頁(yè)面232的使用狀態(tài)。而內(nèi)存頁(yè)面232的使用狀態(tài)例如為已配置、或未使用等。在一實(shí)施例中,操作系統(tǒng)250為L(zhǎng)inux操作系統(tǒng),并使用對(duì)偶式內(nèi)存管理算法(BuddySystemAlgorithm)來(lái)管理空閑頁(yè),內(nèi)存映像圖254是名為mem_map的數(shù)組數(shù)據(jù)結(jié)構(gòu)。然而,本發(fā)明并不限制虛擬機(jī)上操作系統(tǒng)的種類,也不限制內(nèi)存映像圖的數(shù)據(jù)結(jié)構(gòu)。圖3為依照本發(fā)明實(shí)施例的虛擬機(jī)內(nèi)存共享方法的流程圖。請(qǐng)參照?qǐng)D3,在步驟S302中,本實(shí)施例的內(nèi)存控制單元160取得對(duì)應(yīng)各虛擬機(jī)的內(nèi)存映像圖在內(nèi)存中的地址,并通過(guò)此地址得到內(nèi)存映像圖。詳細(xì)的說(shuō),內(nèi)存控制單元160取得對(duì)應(yīng)于虛擬機(jī)230的內(nèi)存映像圖264,以及對(duì)應(yīng)于虛擬機(jī)240的內(nèi)存映像圖254。在一實(shí)施例中,操作系統(tǒng)260為windows操作系統(tǒng),而在windows操作系統(tǒng)中執(zhí)行文件、動(dòng)態(tài)鏈接數(shù)據(jù)庫(kù)(dynamicallylinkedlibraries,DLLs)或核心映像文件(kernelimage)皆符合可攜帶可執(zhí)行(portableexecutable,PE)的格式。內(nèi)存控制單元160可以根據(jù)有PE格式的核心映像文件找到此核心映像文件在內(nèi)存中的基準(zhǔn)地址(baseaddress),并可以找到所對(duì)應(yīng)的程序數(shù)據(jù)庫(kù)(programdatabase,PDB)檔案。內(nèi)存控制單元160可以從上述程序數(shù)據(jù)庫(kù)檔案找到操作系統(tǒng)260中內(nèi)存映像圖264在內(nèi)存中相對(duì)于核心映像文件的相對(duì)位置。內(nèi)存控制單元160將上述的相對(duì)位置與基準(zhǔn)位置結(jié)合,便可以得到內(nèi)存映像圖264的內(nèi)存位置。然而,本發(fā)明并不限制內(nèi)存控制單元160取得內(nèi)存映像圖的方式。在步驟S304中,內(nèi)存控制單元160根據(jù)各虛擬機(jī)所對(duì)應(yīng)的內(nèi)存映像圖,標(biāo)記各虛擬機(jī)上未被使用的內(nèi)存頁(yè)面為多個(gè)第一空閑頁(yè)。請(qǐng)參考圖4A(a),圖4A為依照本發(fā)明實(shí)施例所繪示的第一空閑頁(yè)的示意圖。舉例來(lái)說(shuō),內(nèi)存控制單元160根據(jù)內(nèi)存映像表264取得內(nèi)存頁(yè)面232的使用狀態(tài),并將使用狀態(tài)為”未使用”的內(nèi)存頁(yè)面標(biāo)示為第一空閑頁(yè)234;并且根據(jù)內(nèi)存映像表254取得內(nèi)存頁(yè)面242的使用狀態(tài),將虛擬機(jī)240中未使用的內(nèi)存頁(yè)面標(biāo)示為第一空閑頁(yè)244。以下稱第一空閑頁(yè)時(shí)所指的是標(biāo)記為第一空閑頁(yè)的內(nèi)存分頁(yè)。值得注意的是,第一空閑頁(yè)234對(duì)應(yīng)至內(nèi)存單元140中的物理內(nèi)存頁(yè)面143,而第一空閑頁(yè)244對(duì)應(yīng)至內(nèi)存單元140中的物理內(nèi)存頁(yè)面144,因此,第一空閑頁(yè)234與第一空閑頁(yè)244分別占據(jù)了內(nèi)存單元140不同的物理內(nèi)存頁(yè)面。值得注意的是,若第一空閑頁(yè)234與第一空閑頁(yè)244內(nèi)的資料并沒有被重置(即,全設(shè)為O),則即使經(jīng)過(guò)哈希函數(shù)的運(yùn)算,第一空閑頁(yè)234與第一空閑頁(yè)244很有可能會(huì)產(chǎn)生不同的哈希值,也就不能被公知的做法共享。在步驟S306中,內(nèi)存控制單元160共享各虛擬機(jī)的第一空閑頁(yè)。舉例來(lái)說(shuō),內(nèi)存控制單元160共享第一空閑頁(yè)234與第一空閑頁(yè)244,使得第一空閑頁(yè)234與第一空閑頁(yè)244會(huì)對(duì)應(yīng)至相同的物理內(nèi)存頁(yè)面143(如圖4A(b)所示)。在一實(shí)施例中,VMM220是名為Xen的開放原始碼的虛擬機(jī)監(jiān)控程序,其中提供了nominate與share的指令,用以共享內(nèi)存。內(nèi)存控制單元160可通過(guò)呼叫上述nominate與share的指令來(lái)共享內(nèi)存。另一方面,在另一實(shí)施例中,內(nèi)存控制單元160所執(zhí)行的功能被實(shí)作為在虛擬機(jī)230上的程序代碼,由處理單元120執(zhí)行并呼叫上述的nominate與share指令來(lái)共享內(nèi)存。本發(fā)明并不限制共享虛擬機(jī)上內(nèi)存的方式。在其他實(shí)施例中,為了避免內(nèi)存控制單元160在共享第一空閑頁(yè)234與第一空閑頁(yè)244的同時(shí),虛擬機(jī)230(或虛擬機(jī)240)將數(shù)據(jù)寫入第一空閑頁(yè)234(或第一空閑頁(yè)244),此種情形會(huì)使得內(nèi)存控制單元160共享已被使用的內(nèi)存分頁(yè),造成錯(cuò)誤。因此,在本發(fā)明的一實(shí)施例中,內(nèi)存控制單元160在步驟S306之前還會(huì)暫停各虛擬機(jī)對(duì)第一空閑頁(yè)的存取。并且在步驟S306之后,內(nèi)存空置單元160還會(huì)恢復(fù)各虛擬機(jī)對(duì)第一空閑頁(yè)的存取。然而,本發(fā)明并不限制共享內(nèi)存頁(yè)面時(shí)虛擬機(jī)的個(gè)數(shù),本發(fā)明也可用在只有建置一個(gè)虛擬機(jī)的計(jì)算機(jī)系統(tǒng)上。圖4B為依照本發(fā)明一實(shí)施例所繪示的一個(gè)虛擬機(jī)的內(nèi)存頁(yè)面的共孚不意圖。請(qǐng)參考圖4B,在一實(shí)施例中,VMM220上只建置了一個(gè)虛擬機(jī)230,虛擬機(jī)230上執(zhí)行操作系統(tǒng)260。內(nèi)存控制單元160依照?qǐng)D3的流程,先取得虛擬機(jī)220上的內(nèi)存映像圖264(步驟S302)。接著在步驟S304中,內(nèi)存控制單元160根據(jù)虛擬機(jī)所對(duì)應(yīng)的內(nèi)存映像圖264,標(biāo)記虛擬機(jī)230上未被使用的內(nèi)存頁(yè)面232為第一空閑頁(yè)。例如,內(nèi)存控制單元160標(biāo)記未使用的內(nèi)存頁(yè)面234與內(nèi)存頁(yè)面264為第一空閑頁(yè)。接著在步驟S306中,共享虛擬機(jī)230中的第一空閑頁(yè),使得內(nèi)存頁(yè)面232中不同的內(nèi)存頁(yè)面可映像至物理內(nèi)存頁(yè)面142中相同的物理內(nèi)存頁(yè)面。例如,內(nèi)存控制單元160在共享內(nèi)存頁(yè)面234與內(nèi)存頁(yè)面236之后,使得內(nèi)存頁(yè)面234與內(nèi)存頁(yè)面236被映像至物理內(nèi)存頁(yè)面145。[第二實(shí)施例]請(qǐng)參考圖5,圖5為依照本發(fā)明第二實(shí)施例的內(nèi)存共享方法的流程圖。其中步驟S302.S304.S306已詳細(xì)說(shuō)明如上,在此便不再贅述。在步驟S303中,內(nèi)存控制單元160暫停各虛擬機(jī)對(duì)內(nèi)存頁(yè)面的存取。也就是說(shuō),內(nèi)存控制單元160暫停了虛擬機(jī)230對(duì)內(nèi)存頁(yè)面232的存取,也暫停了虛擬機(jī)240對(duì)內(nèi)存頁(yè)面242的存取。并且,在步驟S305中,內(nèi)存控制單元恢復(fù)了各虛擬機(jī)對(duì)內(nèi)存頁(yè)面的存取。也就是說(shuō),內(nèi)存控制單元160恢復(fù)了虛擬機(jī)230對(duì)內(nèi)存頁(yè)面232的存取,也恢復(fù)了虛擬機(jī)240對(duì)內(nèi)存頁(yè)面242的存取。如此一來(lái),就可以避免內(nèi)存控制單元160在進(jìn)行步驟S304的同時(shí),各虛擬機(jī)將數(shù)據(jù)寫入內(nèi)存頁(yè)面所造成的錯(cuò)誤。[第三實(shí)施例]請(qǐng)參考圖6及圖7,圖6為依照本發(fā)明第三實(shí)施例的內(nèi)存共享方法的流程圖;圖7為依照本發(fā)明第三實(shí)施例所繪示的未使用內(nèi)存分頁(yè)的示意圖。其中步驟S302與步驟S304已詳細(xì)說(shuō)明如上,在此便不再贅述。然而,為了避免在步驟S304之后并且在內(nèi)存控制單元160共享內(nèi)存頁(yè)面之前有數(shù)據(jù)寫入至要共享的內(nèi)存頁(yè)面,本實(shí)施例還會(huì)根據(jù)內(nèi)存映像圖再次標(biāo)記未使用的內(nèi)存頁(yè)面為第二空閑頁(yè)并且使用只讀(read-only)標(biāo)記來(lái)確認(rèn)內(nèi)存頁(yè)面未被寫入過(guò)。舉例來(lái)說(shuō),在步驟S304中,內(nèi)存控制單元160根據(jù)虛擬機(jī)230所對(duì)應(yīng)的內(nèi)存映像圖264,標(biāo)記各虛擬機(jī)上未被使用的內(nèi)存頁(yè)面為多個(gè)第一空閑頁(yè)720(如圖7(a)所不)。接著在步驟S602中,內(nèi)存控制單元160標(biāo)記虛擬機(jī)上的內(nèi)存頁(yè)面為只讀狀態(tài)。具體來(lái)說(shuō),內(nèi)存控制單元160是將被標(biāo)記為第一空閑頁(yè)的內(nèi)存頁(yè)面標(biāo)記為只讀狀態(tài)。以虛擬機(jī)230為例,第一空閑頁(yè)720皆被內(nèi)存控制單元160標(biāo)記為只讀狀態(tài)。除此之外,在步驟S602之后,若有被標(biāo)記為只讀狀態(tài)的內(nèi)存頁(yè)面(例如,第一空閑頁(yè)720)被寫入時(shí),內(nèi)存控制單元160會(huì)取消被寫入的內(nèi)存頁(yè)面的只讀狀態(tài)。接著在步驟S604中,內(nèi)存控制單元160根據(jù)各虛擬機(jī)所對(duì)應(yīng)的內(nèi)存映像圖,標(biāo)記各虛擬機(jī)上未被使用的內(nèi)存頁(yè)面為多個(gè)第二空閑頁(yè)。例如,內(nèi)存控制單元160根據(jù)對(duì)應(yīng)于虛擬機(jī)230的內(nèi)存映像圖264,將內(nèi)存頁(yè)面232中未使用的內(nèi)存頁(yè)面標(biāo)示為第二空閑頁(yè)730(如圖7(b)所示)。值得注意的是,在內(nèi)存控制單元執(zhí)行步驟S304與步驟S604的時(shí)間之間,內(nèi)存頁(yè)面731被改寫了,因此第二空閑頁(yè)730與第一空閑頁(yè)720的范圍并不相同。并且,內(nèi)存頁(yè)面731的只讀狀態(tài)也會(huì)被取消。接著,在步驟S606中,內(nèi)存控制單元160將共享各虛擬機(jī)中同時(shí)被標(biāo)記為只讀、第一空閑頁(yè)以及第二空閑頁(yè)的內(nèi)存頁(yè)面。舉例來(lái)說(shuō),內(nèi)存控制單元160檢查第一空閑頁(yè)720與第二空閑頁(yè)730所包含的內(nèi)存分頁(yè),得到重復(fù)的內(nèi)存頁(yè)面740(如圖7(c)所示)。并且在共享內(nèi)存頁(yè)面時(shí),內(nèi)存控制單元160檢查內(nèi)存頁(yè)面740是否仍是只讀狀態(tài)以判斷內(nèi)存頁(yè)面740是否有遭到寫入。如果內(nèi)存頁(yè)面740仍是只讀狀態(tài)則內(nèi)存控制單元160保持其只讀狀態(tài)并共享內(nèi)存頁(yè)面740。在本實(shí)施例中,VMM220是名為Xen的開放原始碼的虛擬機(jī)監(jiān)控程序,其中提供了nominate與share的指令,用以共享內(nèi)存。更詳細(xì)的說(shuō),內(nèi)存控制單元160是先呼叫nominate指令,取得內(nèi)存頁(yè)面的手柄(handle)。然后再根據(jù)兩個(gè)內(nèi)存頁(yè)面的手柄來(lái)呼叫share指令,藉此共享此兩內(nèi)存頁(yè)面(步驟S606)。也就是說(shuō)步驟S606是通過(guò)呼叫share指令來(lái)實(shí)作,而nominate的指令必須在步驟S606之前完成。舉例來(lái)說(shuō),請(qǐng)參照?qǐng)D4A,內(nèi)存控制單元160先呼叫nominate指令取得被標(biāo)記為第一空閑頁(yè)234的各個(gè)內(nèi)存分頁(yè)的手柄,接著呼叫nominate指令取得虛擬機(jī)240里標(biāo)記為第一空閑頁(yè)244的各個(gè)內(nèi)存分頁(yè)的手柄。接著內(nèi)存控制單元160再跟據(jù)標(biāo)記為第一空閑頁(yè)234的內(nèi)存分頁(yè)的手柄,以及被標(biāo)記為第一空閑頁(yè)244的內(nèi)存分頁(yè)的手柄來(lái)呼叫share指令,使得第一空閑頁(yè)234與第一空閑頁(yè)244的內(nèi)存分頁(yè)可以共享物理內(nèi)存分頁(yè)143。由于nominate與share的指令并不是被同時(shí)執(zhí)行,因此會(huì)產(chǎn)生在nominate與share之間有數(shù)據(jù)寫入的問(wèn)題。請(qǐng)參考圖8,圖8為依照本發(fā)明第三實(shí)施例所繪示的共享內(nèi)存方法各步驟的時(shí)間軸示意圖。請(qǐng)同時(shí)參考圖7與圖8。如圖8(a)所示的情況,內(nèi)存控制單元160先執(zhí)行步驟S304并將未使用的內(nèi)存分頁(yè)標(biāo)示為第一空閑頁(yè)720,接著虛擬機(jī)230寫入數(shù)據(jù)到內(nèi)存頁(yè)面731(步驟S802)。然后在步驟S804中內(nèi)存控制單元160執(zhí)行nominate指令,但所得到的內(nèi)存手柄會(huì)是標(biāo)記為第一空閑頁(yè)720的內(nèi)存分頁(yè)。也就是說(shuō),內(nèi)存控制單元160所得到的手柄所指向的第一空閑頁(yè)720中包含有一個(gè)已被使用的內(nèi)存分頁(yè)731。在這樣的情況下,內(nèi)存控制單元160在執(zhí)行share指令時(shí)(步驟S806),會(huì)共享已被使用的內(nèi)存分頁(yè)731,造成錯(cuò)誤。然而,在本實(shí)施例的共享方法中會(huì)確認(rèn)兩次未使用的內(nèi)存分頁(yè)并使用只讀標(biāo)記。本實(shí)施例如圖8(b)所示,在內(nèi)存控制單元160執(zhí)行步驟S304之后,內(nèi)存控制單元160會(huì)標(biāo)記內(nèi)存頁(yè)面232為只讀狀態(tài)(步驟S602)。并且在步驟S802與S804以后,還會(huì)進(jìn)行第二次的確認(rèn)(步驟S604),標(biāo)示非使用的內(nèi)存頁(yè)面為第二空閑頁(yè)730。如此一來(lái),在步驟S604中便會(huì)得到第二空閑頁(yè)730,而不會(huì)包括已被寫入的內(nèi)存頁(yè)面731。因此在步驟S606中內(nèi)存控制單元160執(zhí)行share指令以共享同時(shí)被標(biāo)記為只讀、第一空閑頁(yè)以及第二空閑頁(yè)的內(nèi)存頁(yè)面740時(shí),并不會(huì)共享已被使用的內(nèi)存分頁(yè)731。在其他實(shí)施例中,內(nèi)存控制單元160在圖6的流程圖中也可只執(zhí)行步驟S302、S304、S604與S606。也就是說(shuō),內(nèi)存控制單元160并不標(biāo)記內(nèi)存頁(yè)面為只讀狀態(tài)(步驟S602);而在步驟S606中,內(nèi)存控制單元160共享被標(biāo)記為第一空閑頁(yè)且也被標(biāo)記為第二空閑頁(yè)的內(nèi)存頁(yè)面。綜上所述,本發(fā)明提出了一種虛擬機(jī)內(nèi)存的共享方法與一種計(jì)算機(jī)系統(tǒng)。本發(fā)明由于所共享的內(nèi)存是虛擬機(jī)中未被使用的內(nèi)存分頁(yè),因此不需要經(jīng)過(guò)哈希函數(shù)的比對(duì),能夠提升效率。另一方面,本發(fā)明在確認(rèn)虛擬機(jī)中未被使用的內(nèi)存分頁(yè)時(shí),會(huì)先暫停各虛擬機(jī)對(duì)內(nèi)存分頁(yè)的存取,或者是確認(rèn)兩次未使用的內(nèi)存分頁(yè),使得可以解決在存取內(nèi)存分頁(yè)的同時(shí)有數(shù)據(jù)被寫入的問(wèn)題。以上所述的具體實(shí)施例,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說(shuō)明,應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。權(quán)利要求1.一種虛擬機(jī)內(nèi)存的共享方法,用于一計(jì)算機(jī)系統(tǒng),該計(jì)算機(jī)系統(tǒng)用以執(zhí)行至少一虛擬機(jī),該共享方法包括取得該至少一虛擬機(jī)所對(duì)應(yīng)的一內(nèi)存映像圖,該內(nèi)存映像圖存有所對(duì)應(yīng)的該至少一虛擬機(jī)中多個(gè)內(nèi)存頁(yè)面的使用狀態(tài);根據(jù)該至少一虛擬機(jī)所對(duì)應(yīng)的該內(nèi)存映像圖,標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為多個(gè)第一空閑頁(yè);以及共享該至少一虛擬機(jī)中的該些第一空閑頁(yè)。2.如權(quán)利要求1所述的共享方法,該方法還包括根據(jù)該至少一虛擬機(jī)所對(duì)應(yīng)的該內(nèi)存映像圖,標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為多個(gè)第二空閑頁(yè);共享該至少一虛擬機(jī)中被標(biāo)記為該些第一空閑頁(yè)且也被標(biāo)記為該些第二空閑頁(yè)的該些內(nèi)存頁(yè)面。3.如權(quán)利要求2所述的共享方法,其中被標(biāo)記為該些第二空閑頁(yè)的該些內(nèi)存頁(yè)面的個(gè)數(shù)少于被標(biāo)記為該些第一空閑頁(yè)的該些內(nèi)存頁(yè)面的個(gè)數(shù)。4.如權(quán)利要求2所述的共享方法,其中根據(jù)該至少一虛擬機(jī)所對(duì)應(yīng)的該內(nèi)存映像圖,標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為該些第一空閑頁(yè)的步驟之后還包括標(biāo)記被標(biāo)記為該些第一空閑頁(yè)的該些內(nèi)存頁(yè)面為只讀狀態(tài)。5.如權(quán)利要求4所述的共享方法,其中標(biāo)記被標(biāo)記為該些第一空閑頁(yè)的該些內(nèi)存頁(yè)面為只讀狀態(tài)的步驟之后還包括當(dāng)被標(biāo)記為只讀狀態(tài)且被標(biāo)記為該些第一空閑頁(yè)的該些內(nèi)存頁(yè)面被寫入時(shí),取消被寫入的該些內(nèi)存頁(yè)面的只讀狀態(tài)。6.如權(quán)利要求5所述的共享方法,其中共享該至少一虛擬機(jī)中被標(biāo)記為該些第一空閑頁(yè)且也被標(biāo)記為該些第二空閑頁(yè)的該些內(nèi)存頁(yè)面的步驟還包括共享同時(shí)被標(biāo)記為只讀狀態(tài)、第一空閑頁(yè)以及第二空閑頁(yè)的該些內(nèi)存頁(yè)面。7.如權(quán)利要求1所述的共享方法,其中根據(jù)該至少一虛擬機(jī)所對(duì)應(yīng)的該內(nèi)存映像圖,標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為該些第一空閑頁(yè)的步驟之前還包括暫停該至少一虛擬機(jī)對(duì)該些內(nèi)存頁(yè)面的存取。8.如權(quán)利要求7所述的共享方法,其中根據(jù)該至少一虛擬機(jī)所對(duì)應(yīng)的該內(nèi)存映像圖,標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為該些第一空閑頁(yè)的步驟之后還包括恢復(fù)該至少一虛擬機(jī)對(duì)該些內(nèi)存頁(yè)面的存取。9.如權(quán)利要求1所述的共享方法,其中共享方法該至少一虛擬機(jī)中的該些第一空閑頁(yè)的步驟之前還包括暫停該至少一虛擬機(jī)對(duì)該些第一空閑頁(yè)的存取。10.如權(quán)利要求9所述的共享方法,其中共享該至少一虛擬機(jī)中的該些第一空閑頁(yè)的步驟之后還包括恢復(fù)該至少一虛擬機(jī)對(duì)該些第一空閑頁(yè)的存取。11.一種計(jì)算機(jī)系統(tǒng),用以執(zhí)行至少一虛擬機(jī),該計(jì)算機(jī)系統(tǒng)包括一內(nèi)存單元,包括有多個(gè)物理內(nèi)存頁(yè)面;一處理單元,耦接至該內(nèi)存單元;以及一內(nèi)存控制單元,耦接至該處理單元與該內(nèi)存單元;其中,該內(nèi)存控制單元取得該至少一虛擬機(jī)所對(duì)應(yīng)的一內(nèi)存映像圖,該內(nèi)存映像圖存有所對(duì)應(yīng)的該虛擬機(jī)中多個(gè)內(nèi)存頁(yè)面的使用狀態(tài);該內(nèi)存控制單元根據(jù)該至少一虛擬機(jī)所對(duì)應(yīng)的該內(nèi)存映像圖,標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為多個(gè)第一空閑頁(yè);以及該內(nèi)存控制單元共享該至少一虛擬機(jī)中的該些第一空閑頁(yè)。12.如權(quán)利要求11所述的計(jì)算機(jī)系統(tǒng),其中該內(nèi)存控制單元根據(jù)該至少一虛擬機(jī)所對(duì)應(yīng)的該內(nèi)存映像圖,標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為多個(gè)第二空閑頁(yè);以及該內(nèi)存控制單元共享該至少一虛擬機(jī)中被標(biāo)記為該些第一空閑頁(yè)且也被標(biāo)記為該些第二空閑頁(yè)的該些內(nèi)存頁(yè)面。13.如權(quán)利要求12所述的計(jì)算機(jī)系統(tǒng),其中被標(biāo)記為該些第二空閑頁(yè)的該些內(nèi)存頁(yè)面的個(gè)數(shù)少于被標(biāo)記為該些第一空閑頁(yè)的該些內(nèi)存頁(yè)面的個(gè)數(shù)。14.如權(quán)利要求12所述的計(jì)算機(jī)系統(tǒng),其中該內(nèi)存控制單元在標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為該些第一空閑頁(yè)之后,該內(nèi)存控制單元還將被標(biāo)記為該些第一空閑頁(yè)的該些內(nèi)存頁(yè)面標(biāo)記為只讀狀態(tài)。15.如權(quán)利要求14所述的計(jì)算機(jī)系統(tǒng),其中該內(nèi)存控制單元在標(biāo)記被標(biāo)記為該些第一空閑頁(yè)的該些內(nèi)存頁(yè)面為只讀狀態(tài)之后,當(dāng)被標(biāo)記為只讀狀態(tài)且被標(biāo)記為該些第一空閑頁(yè)的該些內(nèi)存頁(yè)面被寫入時(shí),該內(nèi)存控制單元取消被寫入的該些內(nèi)存頁(yè)面的只讀狀態(tài)。16.如權(quán)利要求15所述的計(jì)算機(jī)系統(tǒng),其中該內(nèi)存控制單元在共享該至少一虛擬機(jī)中被標(biāo)記為該些第一空閑頁(yè)且也被標(biāo)記為該些第二空閑頁(yè)的該些內(nèi)存頁(yè)面時(shí),該內(nèi)存控制單元是共享同時(shí)被標(biāo)記為只讀狀態(tài)、該些第一空閑頁(yè)以及該些第二空閑頁(yè)的該些內(nèi)存頁(yè)面。17.如權(quán)利要求11所述的計(jì)算機(jī)系統(tǒng),其中在標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為該些第一空閑頁(yè)之前,該內(nèi)存控制單元暫停該至少一虛擬機(jī)對(duì)該些內(nèi)存頁(yè)面的存取。18.如權(quán)利要求17所述的計(jì)算機(jī)系統(tǒng),其中在標(biāo)記該至少一虛擬機(jī)上未被使用的該些內(nèi)存頁(yè)面為該些第一空閑頁(yè)之后,該內(nèi)存控制單元恢復(fù)該至少一虛擬機(jī)對(duì)該些內(nèi)存頁(yè)面的存取。19.如權(quán)利要求11所述的計(jì)算機(jī)系統(tǒng),其中在共享該至少一虛擬機(jī)中的該些第一空閑頁(yè)之前,該內(nèi)存控制單元暫停該至少一虛擬機(jī)對(duì)該些第一空閑頁(yè)的存取。20.如權(quán)利要求19所述的計(jì)算機(jī)系統(tǒng),其中在共享該至少一虛擬機(jī)中的該些第一空閑頁(yè)之后,該內(nèi)存控制單元恢復(fù)該至少一虛擬機(jī)對(duì)該些第一空閑頁(yè)的存取。全文摘要本發(fā)明公開了一種虛擬機(jī)內(nèi)存的共享方法,此共享方法用于在執(zhí)行至少一個(gè)虛擬機(jī)的計(jì)算機(jī)系統(tǒng)上。此共享方法包括以下步驟取得虛擬機(jī)所對(duì)應(yīng)的內(nèi)存映像圖,此內(nèi)存映像圖存有所對(duì)應(yīng)的虛擬機(jī)中內(nèi)存頁(yè)面的使用狀態(tài);根據(jù)虛擬機(jī)所對(duì)應(yīng)的內(nèi)存映像圖,標(biāo)記虛擬機(jī)上未被使用的內(nèi)存頁(yè)面為空閑頁(yè);共享虛擬機(jī)中的空閑頁(yè)。藉此,虛擬機(jī)可以共享未被使用的內(nèi)存頁(yè)面。本發(fā)明還提出了一種使用上述共享方法的計(jì)算機(jī)系統(tǒng)。文檔編號(hào)G06F12/08GK103064796SQ201110442250公開日2013年4月24日申請(qǐng)日期2011年12月26日優(yōu)先權(quán)日2011年10月18日發(fā)明者李翰林,姜瑞豪,闕志克,潘穎軒,曹伯瑞申請(qǐng)人:財(cái)團(tuán)法人工業(yè)技術(shù)研究院