專利名稱:虛擬機管理裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及虛擬機,更具體而言,涉及管理虛擬機的裝置和方法。
背景技術(shù):
近來,虛擬化技術(shù)已經(jīng)廣泛應(yīng)用在各種應(yīng)用環(huán)境之中,用以提高IT資源和應(yīng)用程序的效率。虛擬化技術(shù)可以隨時根據(jù)需要,將資源、應(yīng)用程序甚至服務(wù)器分配到相應(yīng)的位置,從而整合資源,提高計算機的可用性,由此節(jié)省50%到70%的IT總成本。虛擬化的典型實現(xiàn)是在一臺物理計算機上模擬出一臺或多臺虛擬的計算機,即虛擬機(Virtual Machine),也就是通過軟件模擬的具有完整硬件系統(tǒng)功能的、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng)。這樣的虛擬機與物理計算機一樣,承載著自身的客戶操作系統(tǒng)和應(yīng)用程序,并具有物理計算機上的所有組件,包括主板、硬盤、網(wǎng)卡控制器等。雖然多個虛擬機可以共享一臺計算機的物理資源,但它們彼此之間保持完全隔離狀態(tài),如同它們是不同的物理計算機一樣。例如,如果在一臺物理服務(wù)器上有四個虛擬機,而其中一個虛擬機崩潰了,其他三個虛擬機仍將可用。在可用性和安全性方面,虛擬環(huán)境中運行的應(yīng)用程序之所以遠(yuǎn)優(yōu)于在傳統(tǒng)的非虛擬化系統(tǒng)中運行的應(yīng)用程序,隔離就是一個重要的原因。為了保持虛擬機之間的隔離,虛擬機之間通常會保持硬件資源分配的獨立性,盡量少地共享同一部分物理資源。具體地,在內(nèi)存管理方面,處于物理平臺和虛擬機之間的管理程序會為每個虛擬機分配一段獨立的內(nèi)存,每個虛擬機只對自己“專屬”的內(nèi)存進(jìn)行存取。圖1示出現(xiàn)有技術(shù)中多個虛擬機的內(nèi)存管理。如圖1所示,在同一物理平臺上安裝了 10個虛擬機,分別標(biāo)注為虛擬機VM1-10。虛擬機的管理程序根據(jù)物理平臺的硬件容量和每個虛擬機的運行需要,為每個虛擬機分配一段內(nèi)存,并維持虛擬機內(nèi)存和物理內(nèi)存之間的映射關(guān)系。例如在一個例子中,物理平臺的總內(nèi)存容量為15G,管理程序為每個虛擬機分配 IG的內(nèi)存,并且使得每個虛擬機所獲得的內(nèi)存之間相互獨立,例如將物理內(nèi)存的O-IG分配給虛擬機VMlJf 1-2G分配給虛擬機VM2。由此,每個虛擬機只能看到分配給自己的IG內(nèi)存,并對這部分內(nèi)存進(jìn)行讀寫。具體地,在VM2進(jìn)行內(nèi)存訪問時,VM2的內(nèi)存管理單元首先將所請求的邏輯地址轉(zhuǎn)化為自己能看到的O-IG物理地址中的相應(yīng)地址,稱為客戶物理地址 (guest physical address)。然后,管理程序獲得該客戶物理地址,通過查閱虛擬機內(nèi)存和物理內(nèi)存之間的映射關(guān)系,將獲得的客戶物理地址映射到物理內(nèi)存的真實物理地址,并返回給虛擬機。例如,如果VM2所請求的客戶物理地址是0. 5G,那么管理程序返回的真實物理地址就是1. 5G。如此,每個虛擬機獨立地享有專用的內(nèi)存區(qū)段,彼此隔離地進(jìn)行內(nèi)存訪問。然而,上述的隔離方法在資源利用上還存在一定不足。假定一個虛擬機流暢地運行一個操作系統(tǒng)和基本的上層應(yīng)用所需的內(nèi)存為2G,那么在同一物理平臺上安裝100個虛擬機就需要至少200G物理內(nèi)存,這樣巨大的內(nèi)存需要對物理平臺提出了很高的要求。然而,實際上,在這100個虛擬機中,很可能大部分虛擬機是基于相同的操作系統(tǒng),因此物理平臺上存在對同一操作系統(tǒng)的多重備份,這就存在著一定的資源浪費。然而,對于整個系統(tǒng)來說,保持虛擬機之間的獨立和隔離是虛擬化的基本要求。因此,如何更加有效地利用物理平臺的資源,同時保持虛擬機之間的隔離成為一項很有意義的挑戰(zhàn)。
發(fā)明內(nèi)容
考慮到以上提出的問題,提出本發(fā)明,以提高承載多個虛擬機的物理平臺的資源利用率。根據(jù)本發(fā)明第一方面,提供一種虛擬機管理裝置,包括虛擬機信息獲取單元,配置為獲取當(dāng)前虛擬機的軟件層級信息;內(nèi)存分析單元,配置為參照已安裝的至少一個虛擬機的現(xiàn)有軟件層級信息和所述當(dāng)前虛擬機的軟件層級信息,將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分;以及內(nèi)存映射單元,配置為將上述共享部分映射到物理內(nèi)存的共享區(qū)段,所述共享區(qū)段由所述已安裝的至少一個虛擬機中的至少一個所使用。根據(jù)本發(fā)明第二方面,提供一種虛擬機管理方法,包括獲取當(dāng)前虛擬機的軟件層級信息;參照已安裝的至少一個虛擬機的現(xiàn)有軟件層級信息和所述當(dāng)前虛擬機的軟件層級信息,將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分;以及將上述共享部分映射到物理內(nèi)存的共享區(qū)段,所述共享區(qū)段由所述已安裝的至少一個虛擬機中的至少一個所使用。通過本發(fā)明實施例的方法和裝置,可以使得同一物理平臺上的多個虛擬機在各個層級上進(jìn)行內(nèi)存的部分共享,從而在有效利用內(nèi)存資源的同時,保持虛擬機的相對獨立和隔1 °
圖1示出現(xiàn)有技術(shù)中多個虛擬機的內(nèi)存管理;圖2示出根據(jù)本發(fā)明一個實施例的虛擬機管理裝置的框圖;圖3示意性示出根據(jù)本發(fā)明一個實施例的多個虛擬機的軟件層級信息;圖4示意性示出根據(jù)本發(fā)明另一實施例的多個虛擬機的軟件層級信息;圖5示出根據(jù)本發(fā)明一個實施例的內(nèi)存映射方式的示意圖;圖6示出根據(jù)本發(fā)明一個實施例的內(nèi)存映射改變的示意圖;以及圖7示出根據(jù)本發(fā)明一個實施例的管理虛擬機的方法的流程圖。
具體實施例方式以下結(jié)合附圖描述本發(fā)明的具體實施例。但是應(yīng)該理解,以下對具體實施例的描述僅僅是為了解釋本發(fā)明的執(zhí)行示例,而不對本發(fā)明的范圍進(jìn)行任何限定。在本發(fā)明的多個實施例中,考慮同一物理平臺上安裝的虛擬機所具有的操作系統(tǒng)和應(yīng)用軟件,也就是虛擬機在各個層級上安裝的軟件信息,對于在同一層級具有相似軟件的虛擬機實施內(nèi)存的部分共享,從而在有效利用內(nèi)存資源的同時,保持虛擬機的相對獨立和隔離。圖2示出根據(jù)本發(fā)明一個實施例的虛擬機管理裝置的框圖,該虛擬機管理裝置位于物理平臺與虛擬機之間,用以管理在該物理平臺上安裝的多個虛擬機。如圖2所示,虛擬機管理裝置20包括虛擬機信息獲取單元202,配置為獲取當(dāng)前虛擬機的軟件層級信息;內(nèi)存分析單元204,配置為參照已安裝的至少一個虛擬機的現(xiàn)有軟件層級信息和所述當(dāng)前虛擬機的軟件層級信息,將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分;以及內(nèi)存映射單元206,配置為將上述共享部分映射到物理內(nèi)存的共享區(qū)段,所述共享區(qū)段由所述已安裝的至少一個虛擬機中的至少一個所使用。具體地,虛擬機信息獲取單元202可以在各個虛擬機的安裝過程中捕獲每個虛擬機的軟件信息。典型地,虛擬機的安裝過程包括首先安裝最底層的軟件,即虛擬機所運行的操作系統(tǒng),然后在操作系統(tǒng)之上安裝各種軟件應(yīng)用。軟件應(yīng)用的安裝也是分層級進(jìn)行的,例如可以先在特定操作系統(tǒng)上安裝Java虛擬機(JVM),然后在Java虛擬機環(huán)境中安裝 WAS (WebSphere Application krver),接著在WAS基礎(chǔ)上可以安裝更為上層的功能,例如 WPSdebSphere Process Server)。一般來說,各個軟件應(yīng)用的安裝文件會在文件頭部中指明該軟件應(yīng)用的信息,例如名稱、版本、發(fā)行公司、發(fā)行時間等等。因此,在各個層級的軟件應(yīng)用的安裝過程中,虛擬機信息獲取單元202可以通過讀取安裝文件的頭部信息,獲取所安裝的軟件應(yīng)用的信息。對于當(dāng)前安裝的虛擬機,虛擬機信息獲取單元202如上所述例如通過讀取安裝文件中的頭部信息獲取其軟件信息,并結(jié)合軟件所在的層級,得到當(dāng)前虛擬機的軟件層級信息。進(jìn)一步地,虛擬機信息獲取單元202將獲取的當(dāng)前虛擬機的軟件層級信息傳送到內(nèi)存分析單元204。對于已經(jīng)安裝的虛擬機,虛擬機信息獲取單元202已經(jīng)在其安裝過程中獲取其軟件信息,進(jìn)而得到每個已安裝的虛擬機的軟件層級信息。進(jìn)一步地,虛擬機信息獲取單元 202可以對多個已安裝的虛擬機的軟件層級信息進(jìn)行綜合和比較,以各種形式維持已安裝的虛擬機的軟件層級信息。在一個實施例中,已安裝的虛擬機的軟件層級信息被組織為樹形圖的形式,如圖3 所示。具體地,圖3示意性示出根據(jù)本發(fā)明一個實施例的多個虛擬機的軟件層級信息。在圖3的示意圖中,示出了已安裝的4個虛擬機的軟件層級信息,其中,通過樹形圖中節(jié)點之間的繼承關(guān)系示出各個虛擬機的軟件層級信息之間的關(guān)系。根據(jù)樹形圖的特點,繼承自某一父節(jié)點的子節(jié)點具有父節(jié)點的全部軟件層級信息,相應(yīng)地,繼承自同一父節(jié)點的兩個子節(jié)點共享父節(jié)點處的軟件層級信息。更具體而言,虛擬機1只在操作系統(tǒng)上安裝了 Java開發(fā)工具包(JDK),虛擬機2基于虛擬機1在JDK中安裝了 WAS,而虛擬機3在虛擬機1的基礎(chǔ)上安裝了 WXS。進(jìn)一步地,相比于虛擬機2,虛擬機4在虛擬機2的基礎(chǔ)上又安裝了 WPS。 虛擬機2和虛擬機3共同具有父節(jié)點處的虛擬機1的軟件層級信息。通過維持這樣的樹形圖,虛擬機信息獲取單元202可以清楚地表示出各個虛擬機的軟件層級信息之間的關(guān)系。在另一個實施例中,已安裝的虛擬機的軟件層級信息被組織為柱形圖的形式,如圖4所示。具體地,圖4示意性示出根據(jù)本發(fā)明另一實施例的多個虛擬機的軟件層級信息。 在圖4的示意圖中,對于每個虛擬機,以柱形圖的形式自下而上地示出在各個層級安裝的軟件的信息。例如,虛擬機1在AIX操作系統(tǒng)上安裝了 IBM Java虛擬機,在此之上又相繼安裝了 WAS和WPS ;虛擬機2的軟件層級信息與虛擬機1完全相同;虛擬機3在Java虛擬機上安裝的是WXS ;而虛擬機4和5則是基于Linux操作系統(tǒng),其上安裝的Java虛擬機版本也不相同,一個來自IBM,一個來自Sim公司。通過維持類似圖4的柱形圖,虛擬機信息獲取單元202可以清楚地表示出每個虛擬機的具體軟件層級信息??梢岳斫猓梢砸云渌问骄S持已安裝虛擬機的軟件層級信息,例如將其組織為
6列表、文本形式,或以其他圖表形式示出。本領(lǐng)域技術(shù)人員能夠需要對軟件層級信息的維持形式進(jìn)行選擇或修改,這樣的選擇或修改都在本發(fā)明的構(gòu)思范圍之內(nèi)。接下來,內(nèi)存分析單元204通過參照虛擬機信息獲取單元202所傳送的當(dāng)前虛擬機的軟件層級信息和所維持的已安裝虛擬機的軟件層級信息,來確定當(dāng)前虛擬機的內(nèi)存共享方式。具體地,在虛擬機安裝過程中,會通過用戶指定或系統(tǒng)默認(rèn),為每個虛擬機分配一段內(nèi)存。這段內(nèi)存在虛擬機看來是專屬于自己使用的內(nèi)存,但是在虛擬機管理裝置看來,只是虛擬機在邏輯上可以使用的內(nèi)存大小,因此可以將其稱為是邏輯內(nèi)存。為了確定各個虛擬機分配得到的邏輯內(nèi)存在物理意義上的共享方式,內(nèi)存分析單元204將當(dāng)前虛擬機的軟件信息與已安裝虛擬機的軟件層級信息進(jìn)行比對,從而確定哪個已安裝的虛擬機與當(dāng)前虛擬機的軟件層級結(jié)構(gòu)最為接近。通過確定當(dāng)前虛擬機與最接近的已安裝虛擬機所共有的軟件層級信息,內(nèi)存分析單元204將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分,其中共享部分與上述共有的軟件層級信息相關(guān)聯(lián)。具體地,在一個例子中,已安裝虛擬機的軟件層級信息如圖4所示,其中示出了已經(jīng)安裝的5個虛擬機的軟件層級信息。在安裝新的虛擬機,即第6個虛擬機時,虛擬機信息獲取單元202獲取該第6虛擬機的安裝信息,例如,所安裝的操作系統(tǒng)為Linux,操作系統(tǒng)上安裝的是IBM Java虛擬機,其上安裝的是WXS。內(nèi)存分析單元204通過將當(dāng)前的第6虛擬機的軟件信息與圖4所示的已安裝虛擬機的軟件層級信息相比較,可以判斷得出,已安裝的虛擬機4所具有的軟件層級結(jié)構(gòu)與當(dāng)前虛擬機最為相似,兩者具有共同的操作系統(tǒng)和 Java虛擬機。實際上,在操作系統(tǒng)維持基本運行環(huán)境所需要的內(nèi)存中,有一部分內(nèi)存用于維持操作系統(tǒng)所需的各種庫函數(shù)等固定條目。操作系統(tǒng)通常只對這部分內(nèi)存進(jìn)行讀取,而不對其進(jìn)行修改或?qū)懭?。因此,這部分內(nèi)存可以在多個虛擬機之間進(jìn)行共享,而不會妨礙虛擬機之間的隔離。對于軟件應(yīng)用來說,也存在類似的固定內(nèi)存區(qū)段,可在多個虛擬機之間進(jìn)行共享。因此,在內(nèi)存分析單元204確定當(dāng)前虛擬機與虛擬機4具有相同的操作系統(tǒng)和Java虛擬機的情況下,就可以基于操作系統(tǒng)Linux和Java虛擬機所具有的固定內(nèi)存區(qū)段的大小, 使得當(dāng)前虛擬機與虛擬機4共享一部分內(nèi)存。具體地,內(nèi)存分析單元204可以將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分,專用部分是當(dāng)前虛擬機私有的內(nèi)存,共享部分是可能與其他虛擬機共同使用的內(nèi)存部分。一般來說,共享部分的大小關(guān)聯(lián)于當(dāng)前虛擬機與已安裝虛擬機的共同軟件部分的大小,以及該共同軟件部分所占用的內(nèi)存中可共享的固定內(nèi)存區(qū)段的大小。在以上例子中,假定Linux操作系統(tǒng)所占用的內(nèi)存中有0. 3G內(nèi)存是固定內(nèi)存區(qū)段,Java虛擬機所占用內(nèi)存中有0. 2G內(nèi)存是固定內(nèi)存區(qū)段,那么當(dāng)前虛擬機與虛擬機4可以共享0. 5G的內(nèi)存。 相應(yīng)地,如果分配給當(dāng)前虛擬機的內(nèi)存為2G,那么當(dāng)前虛擬機的專用內(nèi)存部分為1. 5G。如上所述,內(nèi)存分析單元204在邏輯層面確定了內(nèi)存的共享方案。進(jìn)而,通過內(nèi)存映射單元206在物理層面實現(xiàn)上述內(nèi)存共享。具體地,在每個虛擬機中都存在內(nèi)存管理單元,用以維持虛擬機運行過程中所請求的內(nèi)存的邏輯地址與物理地址之間的映射表。這個物理地址是虛擬機所能看到的、分配給自己的內(nèi)存區(qū)段中的地址,也就是客戶物理地址。然而,客戶物理地址并不是硬件平臺中的物理內(nèi)存的真實物理地址,需要通過內(nèi)存映射單元206進(jìn)行進(jìn)一步轉(zhuǎn)換。具體而言,內(nèi)存映射單元206維持虛擬機的客戶物理地址與物理內(nèi)存的真實物理地址之間的映射關(guān)系,該映射關(guān)系可以以頁表的形式存儲。在獲得虛擬機所請求的客戶物理地址之后,內(nèi)存映射單元206通過查閱所維持的頁表確定對應(yīng)的真實物理地址,從而使得虛擬機能夠?qū)υ撜鎸嵨锢淼刂诽幍膬?nèi)存進(jìn)行訪問。為了實現(xiàn)內(nèi)存的共享,內(nèi)存映射單元206需要維持特殊的映射表,從而將多個虛擬機的客戶物理地址映射到同一真實物理地址,由此實現(xiàn)物理內(nèi)存的共享。圖5示出根據(jù)本發(fā)明一個實施例的內(nèi)存映射方式的示意圖。在圖5中,虛擬機4 和當(dāng)前虛擬機6都被分配了 2G內(nèi)存,各自都可以通過客戶物理地址對分配給自己的內(nèi)存進(jìn)行訪問。并且,虛擬機4和當(dāng)前虛擬機6具有如上所述的軟件層級信息,因此可以基于共同的操作系統(tǒng)Linux和同樣版本的Java虛擬機而共享0. 5G邏輯內(nèi)存。對于虛擬機4,內(nèi)存映射單元206如通常方式將0-2G的邏輯內(nèi)存的客戶物理地址映射到真實的物理內(nèi)存區(qū)段 S1-S3,其中S1-S3總大小為2G,并且在S1-S3中,操作系統(tǒng)和Java虛擬機所占用的固定內(nèi)存區(qū)段為S2-S3,大小為0. 5G。對于當(dāng)前虛擬機6,已經(jīng)在邏輯上將分配給它的2G內(nèi)存劃分為專用部分和共享部分,其中共享部分為0. 5G,對應(yīng)于操作系統(tǒng)和Java虛擬機所占用的固定內(nèi)存區(qū)段。因此,內(nèi)存映射單元206將虛擬機6的0. 5G共享部分的客戶物理地址映射到物理內(nèi)存的共享內(nèi)存區(qū)段S2-S3,該內(nèi)存區(qū)段是虛擬機4已經(jīng)使用的內(nèi)存區(qū)段,將剩余的 1.5G邏輯內(nèi)存的客戶物理地址映射到專用于虛擬機6的內(nèi)存區(qū)段S3-S4,其大小為1.5G。 這樣,經(jīng)過內(nèi)存映射單元的映射,虛擬機4和虛擬機6共享了 0. 5G的內(nèi)存。在這種情況下, 兩個虛擬機各自能使用的內(nèi)存在邏輯上依然是2G,但是所占用的真實物理內(nèi)存的總大小僅為 3. 5G。為了記錄內(nèi)存區(qū)段的使用狀態(tài),在一個實施例中,內(nèi)存映射單元206可以在現(xiàn)有的映射表形式的基礎(chǔ)上添加一個狀態(tài)位,用以標(biāo)記相應(yīng)內(nèi)存區(qū)段的共享狀態(tài)。例如,在一個例子中,以S標(biāo)記共享的內(nèi)存區(qū)段,以P標(biāo)記專用的內(nèi)存區(qū)段。在上述例子中,在內(nèi)存映射單元206將虛擬機6的0. 5G共享部分映射到內(nèi)存區(qū)段S3-S4時,就可以將該段內(nèi)存S3-S4 的狀態(tài)位由P改變?yōu)镾。為了保證共享的安全,在虛擬機訪問物理內(nèi)存時,僅允許對狀態(tài)位為S的內(nèi)存區(qū)段進(jìn)行讀取,而不能進(jìn)行修改或?qū)懭?。由此,即使虛擬機4崩潰,也不會影響內(nèi)存區(qū)段S3-S4的數(shù)據(jù),因此虛擬機6仍然可以照常運行而不會受到影響,從而保持了所需的獨立性和隔離性。在以上實施例中,通過內(nèi)存分析單元204和內(nèi)存映射單元206,虛擬機之間可以在多個層級進(jìn)行內(nèi)存的部分共享。例如,當(dāng)前虛擬機與虛擬機4在操作系統(tǒng)層級上共享0. 3G 內(nèi)存,在Java虛擬機層級上共享0. 2G內(nèi)存,這進(jìn)一步提高了內(nèi)存的使用效率,并使得共享方案更加靈活地適應(yīng)于各種應(yīng)用場景。不過,虛擬機之間的共享關(guān)系并不是恒定不變的,而是會隨著虛擬機軟件層級信息的改變而變化。仍然參照以上描述的例子,在物理平臺上已安裝圖4所示的虛擬機1-5 的情況下,對于當(dāng)前安裝的虛擬機6,可以采用如圖5所示的共享方式。接著,在虛擬機6安裝完成之后,有可能用戶卸載了虛擬機4,釋放虛擬機4所占用的內(nèi)存。在此情況下,虛擬機信息獲取單元202會更新其中維持的軟件層級信息,將其轉(zhuǎn)變?yōu)橐寻惭b的虛擬機1-3,5-6 的軟件層級信息。在一個實施例中,為了使得虛擬機4的內(nèi)存釋放不影響其他虛擬機的運行,內(nèi)存映射單元206完全釋放虛擬機4所占用的專用內(nèi)存部分S1-S2,而不釋放虛擬機4與虛擬機6共享的內(nèi)存區(qū)段S2-S3,也不改變內(nèi)存區(qū)段S2-S3的狀態(tài)位S。接著,如果在后續(xù)進(jìn)一步安裝新的虛擬機7,則內(nèi)存分析單元204類似地參照已安裝的虛擬機1-3,4-6的軟件層級信息確定新的內(nèi)存共享方式。此外,在虛擬機的配置狀態(tài)發(fā)生變化時,虛擬機的共享關(guān)系和共享方式也會發(fā)生改變。圖6示出根據(jù)本發(fā)明一個實施例的內(nèi)存映射改變的示意圖,其中圖6A示出初始映射關(guān)系,圖6B示出改變后的映射關(guān)系。如圖6A所示,與上述例子相一致,虛擬機4和虛擬機 6各自有0. 5G的邏輯內(nèi)存被映射到物理內(nèi)存的同一區(qū)段S2-S3。這一共享內(nèi)存區(qū)段S2-S3 可能維持有與操作系統(tǒng)配置方式相關(guān)的數(shù)據(jù)。在某種情況下,如圖6B所示,虛擬機6需要對自己的系統(tǒng)配置方式進(jìn)行改變,因此需要對共享的邏輯內(nèi)存中的子區(qū)段m進(jìn)行修改。在接收到虛擬機6對內(nèi)存區(qū)段m進(jìn)行修改的請求后,內(nèi)存映射單元206通過原有的映射表可以查閱到,該邏輯內(nèi)存區(qū)段m對應(yīng)于物理內(nèi)存的共享區(qū)段S2-S3中的子區(qū)段L,該子區(qū)段的狀態(tài)位為S,不允許修改。這時,內(nèi)存映射單元206可以從空閑的物理內(nèi)存中開辟出一段內(nèi)存L’,將區(qū)段L中的數(shù)據(jù)復(fù)制到區(qū)段L’,將內(nèi)存區(qū)段L和L’的狀態(tài)位都設(shè)定為P。進(jìn)一步地,內(nèi)存映射單元206修改映射表,使得虛擬機6的邏輯內(nèi)存m對應(yīng)到物理內(nèi)存區(qū)段L’。由此,虛擬機6通過對狀態(tài)位為P的內(nèi)存區(qū)段L’進(jìn)行寫入而實現(xiàn)了對邏輯內(nèi)存區(qū)段m的修改。 此外,內(nèi)存區(qū)段S2-S3中除子區(qū)段L之外的剩余部分仍然由虛擬機4和虛擬機6所共享,而子區(qū)段L的狀態(tài)變?yōu)樘摂M機4所專有。通過上述過程,可以實現(xiàn)虛擬機對共享內(nèi)存部分的修改而不影響其他虛擬機。如上所述,本發(fā)明實施例的虛擬機管理裝置根據(jù)虛擬機的軟件層級信息確定虛擬機之間的共享方式,使得不同虛擬機之間在多個層級都可以實現(xiàn)內(nèi)存的部分共享??梢钥吹剑摂M機之間共享的內(nèi)存部分越多,在物理平臺上節(jié)省的內(nèi)存就越多。同時,由于共享的內(nèi)存部分是經(jīng)過特殊選擇的,并且不能被單個虛擬機修改,因此虛擬機之間仍然可以保持相對的獨立和隔離,安全性不會受到影響。基于同一發(fā)明構(gòu)思,本發(fā)明還提供了管理虛擬機的方法。圖7示出根據(jù)本發(fā)明一個實施例的管理虛擬機的方法的流程圖,該方法用以管理在同一物理平臺上安裝的多個虛擬機。如圖7所示,根據(jù)一個實施例的虛擬機管理方法包括步驟701,在其中獲取當(dāng)前虛擬機的軟件層級信息;步驟702,在其中參照已安裝的至少一個虛擬機的軟件層級信息和所述當(dāng)前虛擬機的軟件層級信息,將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分;以及步驟703,在其中將上述共享部分映射到物理內(nèi)存的共享區(qū)段,所述共享區(qū)段由至少一個已經(jīng)安裝的虛擬機所使用。在一個實施例中,步驟701可以包括,在當(dāng)前虛擬機的安裝過程中,通過讀取安裝文件的頭部信息,捕獲當(dāng)前虛擬機的軟件信息。在此基礎(chǔ)上,結(jié)合軟件所處的層級,可以獲得當(dāng)前虛擬機的軟件層級信息。類似地,對于各個已安裝的虛擬機,在其安裝過程中都可以獲得其軟件層級信息。 通過對多個已安裝的虛擬機的軟件層級信息進(jìn)行綜合和比較,可以將其維持為各種形式。 在一個實施例中,已安裝的虛擬機的軟件層級信息被組織為樹形圖的形式。在另一個實施例中,已安裝的虛擬機的軟件層級信息被組織為柱形圖的形式??梢岳斫?,虛擬機的軟件層級信息也可以以其他形式示出,具體例子如參照虛擬機管理裝置的描述,在此不再贅述。接著,在步驟702中,通過參照已安裝虛擬機的軟件層級信息和步驟701中獲取的當(dāng)前虛擬機的軟件層級信息,來確定當(dāng)前虛擬機的內(nèi)存劃分。具體地,在步驟702中,將當(dāng)前虛擬機的軟件信息與已安裝虛擬機的軟件層級信息進(jìn)行比對,從而確定哪個已安裝的虛擬機與當(dāng)前虛擬機的軟件層級結(jié)構(gòu)最為接近。基于當(dāng)前虛擬機與最接近的已安裝虛擬機共同的軟件層級信息,將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分,其中專用部分是當(dāng)前虛擬機私有的內(nèi)存,共享部分是可能與其他虛擬機共同使用的內(nèi)存部分。具體地,共享部分的大小關(guān)聯(lián)于當(dāng)前虛擬機與已安裝虛擬機的共同軟件部分的大小,以及該共同軟件部分所占用的內(nèi)存中可共享的固定內(nèi)存區(qū)段的大小。為了在物理層面實現(xiàn)內(nèi)存共享,在步驟703中,通過維持特殊的映射表,可以將共享部分的地址映射到物理內(nèi)存的共享區(qū)段,該共享區(qū)段是其他虛擬機已經(jīng)在使用的內(nèi)存區(qū)段。也就是說,通過將多個虛擬機的邏輯內(nèi)存映射到同一物理內(nèi)存地址,來實現(xiàn)物理內(nèi)存的
ο為了記錄內(nèi)存區(qū)段的使用狀態(tài),在一個實施例中,步驟703還可以包括,在映射表中包含狀態(tài)位,用以標(biāo)記相應(yīng)內(nèi)存區(qū)段的共享狀態(tài)。對于共享狀態(tài)的內(nèi)存區(qū)段,虛擬機僅可以對其進(jìn)行讀取,而不能進(jìn)行修改或?qū)懭?。此外,虛擬機之間的共享關(guān)系并不是恒定不變的。在卸載虛擬機的情況下,虛擬機管理方法還包括釋放內(nèi)存的步驟(未示出)。在該步驟中,完全釋放所卸載的虛擬機占用的專用物理內(nèi)存部分。對于該虛擬機所占用的共享內(nèi)存區(qū)段,僅在使用該內(nèi)存區(qū)段的最后一個虛擬機卸載的同時釋放。在虛擬機的配置狀態(tài)發(fā)生變化時,虛擬機的共享關(guān)系和共享方式也會發(fā)生改變。具體地,在虛擬機想要修改邏輯內(nèi)存中的共享部分的情況下,虛擬機管理方法還包括共享修改步驟(未示出),在其中,從空閑的物理內(nèi)存中開辟出新的內(nèi)存區(qū)段, 將共享部分原始映射到的物理內(nèi)存的共享區(qū)段中的數(shù)據(jù)復(fù)制到該新的內(nèi)存區(qū)段,修改映射表,使得共享部分映射到該新的內(nèi)存區(qū)段。由此,就可以對共享部分進(jìn)行安全地修改而不影響其他虛擬機。具體修改過程的例子如參照虛擬機管理裝置所描述,不再贅述。通過以上結(jié)合具體例子的描述可以獲知,利用本發(fā)明實施例的虛擬機管理裝置和方法,可以使得同一物理平臺上安裝的虛擬機實現(xiàn)內(nèi)存的部分共享,同時不影響虛擬機的隔離和安全性。本領(lǐng)域技術(shù)人員可以理解,上述管理虛擬機的裝置和方法可以使用計算機可執(zhí)行指令和/或包含在處理器控制代碼中來實現(xiàn),例如在諸如磁盤、⑶或DVD-ROM的載體介質(zhì)、諸如只讀存儲器(固件)的可編程的存儲器或者諸如光學(xué)或電子信號載體的數(shù)據(jù)載體上提供了這樣的代碼。各實施例的裝置及其單元可以由諸如超大規(guī)模集成電路或門陣列、 諸如邏輯芯片、晶體管等的半導(dǎo)體、或者諸如現(xiàn)場可編程門陣列、可編程邏輯設(shè)備等的可編程硬件設(shè)備的硬件電路實現(xiàn),也可以用由各種類型的處理器執(zhí)行的軟件實現(xiàn),也可以由上述硬件電路和軟件的結(jié)合實現(xiàn)。用于執(zhí)行本發(fā)明的操作的軟件和程序代碼,可以用一種或多種程序設(shè)計語言的組合來編寫,包括但不限于,面向?qū)ο蟮某绦蛟O(shè)計語言,諸如Java, Smalltalk,C++之類,以及常規(guī)的過程式程序設(shè)計語言,諸如C程序設(shè)計語言或類似的程序設(shè)計語言。程序代碼可以本地地或遠(yuǎn)程地在計算機上執(zhí)行,以完成設(shè)定的操作。雖然以上結(jié)合具體實施例,對本發(fā)明的管理虛擬機的裝置和方法進(jìn)行了詳細(xì)描述,但本發(fā)明并不限于此。本領(lǐng)域普通技術(shù)人員能夠在說明書教導(dǎo)之下對本發(fā)明進(jìn)行多種變換、替換和修改而不偏離本發(fā)明的精神和范圍。應(yīng)該理解,所有這樣的變化、替換、修改仍然落入本發(fā)明的保護(hù)范圍之內(nèi)。本發(fā)明的保護(hù)范圍由所附權(quán)利要求來限定。
權(quán)利要求
1.一種虛擬機管理裝置,包括虛擬機信息獲取單元,配置為獲取當(dāng)前虛擬機的軟件層級信息;內(nèi)存分析單元,配置為參照已安裝的至少一個虛擬機的現(xiàn)有軟件層級信息和所述當(dāng)前虛擬機的軟件層級信息,將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分;以及內(nèi)存映射單元,配置為將上述共享部分映射到物理內(nèi)存的共享區(qū)段,所述共享區(qū)段由所述已安裝的至少一個虛擬機中的至少一個所使用。
2.如權(quán)利要求1所述的虛擬機管理裝置,其中,所述虛擬機信息獲取單元配置為,在所述當(dāng)前虛擬機的安裝過程中讀取其安裝文件的頭部信息,從而獲取當(dāng)前虛擬機的軟件層級 fn息ο
3.如權(quán)利要求1所述的虛擬機管理裝置,其中,所述虛擬機信息獲取單元配置為,以樹形圖和柱形圖中的至少一個的形式維持已安裝的至少一個虛擬機的現(xiàn)有軟件層級信息。
4.如權(quán)利要求1所述的虛擬機管理裝置,其中,所述內(nèi)存分析單元配置為,將當(dāng)前虛擬機的軟件層級信息與所述現(xiàn)有軟件層級信息進(jìn)行比對,確定當(dāng)前虛擬機與最接近的已安裝虛擬機所共有的軟件層級信息,并使得所述共享部分與上述共有的軟件層級信息相關(guān)聯(lián)。
5.如權(quán)利要求1所述的虛擬機管理裝置,其中所述內(nèi)存映射單元配置為,維持映射表, 通過所述映射表記錄邏輯內(nèi)存的共享部分與物理內(nèi)存的共享區(qū)段的映射關(guān)系。
6.如權(quán)利要求5所述的虛擬機管理裝置,其中所述映射表包含狀態(tài)位,用以標(biāo)記各個內(nèi)存區(qū)段的共享狀態(tài)。
7.如權(quán)利要求1所述的虛擬機管理裝置,其中所述內(nèi)存映射單元配置為,釋放卸載的虛擬機的專用部分所對應(yīng)的物理內(nèi)存。
8.如權(quán)利要求1所述的虛擬機管理裝置,其中所述內(nèi)存映射單元配置為,響應(yīng)于對所述共享部分的修改請求,從空閑的物理內(nèi)存中開辟出新的內(nèi)存區(qū)段,將共享部分所對應(yīng)的共享區(qū)段中的數(shù)據(jù)復(fù)制到該新的內(nèi)存區(qū)段,并使得所述共享部分映射到該新的內(nèi)存區(qū)段。
9.一種虛擬機管理方法,包括獲取當(dāng)前虛擬機的軟件層級信息;參照已安裝的至少一個虛擬機的現(xiàn)有軟件層級信息和所述當(dāng)前虛擬機的軟件層級信息,將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分;以及將上述共享部分映射到物理內(nèi)存的共享區(qū)段,所述共享區(qū)段由所述已安裝的至少一個虛擬機中的至少一個所使用。
10.如權(quán)利要求9所述的方法,其中,獲取當(dāng)前虛擬機的軟件層級信息的步驟包括,在所述當(dāng)前虛擬機的安裝過程中讀取其安裝文件的頭部信息,從而獲取當(dāng)前虛擬機的軟件層級信息。
11.如權(quán)利要求9所述的方法,其中,所述已安裝的至少一個虛擬機的現(xiàn)有軟件層級信息被維持為樹形圖和柱形圖中的至少一個。
12.如權(quán)利要求9所述的方法,其中,劃分邏輯內(nèi)存的步驟包括,將當(dāng)前虛擬機的軟件層級信息與所述現(xiàn)有軟件層級信息進(jìn)行比對,確定當(dāng)前虛擬機與最接近的已安裝虛擬機所共有的軟件層級信息,并使得所述共享部分與上述共有的軟件層級信息相關(guān)聯(lián)。
13.如權(quán)利要求9所述的方法,其中將共享部分映射到共享區(qū)段的步驟包括,維持映射表,通過所述映射表記錄邏輯內(nèi)存的共享部分與物理內(nèi)存的共享區(qū)段的映射關(guān)系。
14.如權(quán)利要求13所述的方法,其中所述映射表包含狀態(tài)位,用以標(biāo)記各個內(nèi)存區(qū)段的共享狀態(tài)。
15.如權(quán)利要求9所述的方法,還包括,釋放卸載的虛擬機的專用部分所對應(yīng)的物理內(nèi)存。
16.如權(quán)利要求9所述的方法,還包括,響應(yīng)于對所述共享部分的修改請求,從空閑的物理內(nèi)存中開辟出新的內(nèi)存區(qū)段,將共享部分所對應(yīng)的共享區(qū)段中的數(shù)據(jù)復(fù)制到該新的內(nèi)存區(qū)段,并使得所述共享部分映射到該新的內(nèi)存區(qū)段。
全文摘要
提供了虛擬機管理裝置和方法,所述裝置包括虛擬機信息獲取單元,配置為獲取當(dāng)前虛擬機的軟件層級信息;內(nèi)存分析單元,配置為參照已安裝的至少一個虛擬機的現(xiàn)有軟件層級信息和所述當(dāng)前虛擬機的軟件層級信息,將分配給當(dāng)前虛擬機的邏輯內(nèi)存劃分為專用部分和共享部分;以及內(nèi)存映射單元,配置為將上述共享部分映射到物理內(nèi)存的共享區(qū)段,所述共享區(qū)段由至少一個已經(jīng)安裝的虛擬機所使用。還提供了與上述裝置對應(yīng)的方法。通過以上裝置和方法,可以使得同一物理平臺上的多個虛擬機實現(xiàn)內(nèi)存的部分共享,從而在有效利用內(nèi)存資源的同時,保持虛擬機的相對獨立和隔離。
文檔編號G06F9/455GK102541619SQ201010612360
公開日2012年7月4日 申請日期2010年12月23日 優(yōu)先權(quán)日2010年12月23日
發(fā)明者劉顯, 戴曉君, 甘志, 韓瑞波 申請人:國際商業(yè)機器公司