專利名稱:對于具有可移動對象的啟用網(wǎng)格的虛擬機的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及改進的數(shù)據(jù)處理系統(tǒng),具體來說,涉及用于進行多計算機數(shù)據(jù)傳輸以及程序執(zhí)行的方法和設(shè)備。
背景技術(shù):
與因特網(wǎng)相關(guān)的和與Web相關(guān)的技術(shù)廣泛采用使得在物理上由成千上萬個單位和企業(yè)以及成千上萬的個人支持的互相連接的計算機組成的全球網(wǎng)絡(luò)得到迅猛的發(fā)展。近來,企業(yè)進行了許多努力,以將許多計算機的計算容量組織到網(wǎng)格中,網(wǎng)格是許多計算機的邏輯組織,用于提供計算容量和數(shù)據(jù)倉庫容量的集體共享,同時維護對單個計算機的本地自治控制。
例如,許多企業(yè)在由GGF,Inc.,支持的Global Grid ForumTM內(nèi)進行合作,以為網(wǎng)格計算開發(fā)團體驅(qū)動的標準。Globus ProjectTM是一項由政府機構(gòu)、公司和大學(xué)支持的項目,以開發(fā)與網(wǎng)格相關(guān)的技術(shù),開發(fā)成功了開放式網(wǎng)格服務(wù)體系結(jié)構(gòu)(OGSA),這是用于將網(wǎng)格概念包括在基于Web服務(wù)內(nèi)的面向服務(wù)的框架內(nèi)的倡議。GlobusToolkit是開放式網(wǎng)格服務(wù)體系結(jié)構(gòu)的一種實現(xiàn)方式,它為開發(fā)啟用網(wǎng)格的應(yīng)用程序提供了軟件編程工具,而JavaCommunity Grid(CoG)Kit是Globus Toolkit的組成部分,它通過Java框架提供了對網(wǎng)格服務(wù)的訪問。
雖然JavaCoG Kit在訪問網(wǎng)格服務(wù)時支持Java應(yīng)用程序,但是,JavaCoG Kit不將網(wǎng)格的計算特征包括到Java虛擬機(JVM)中。因此,應(yīng)該有一種將網(wǎng)格的計算特征包括在虛擬機內(nèi)的方法、系統(tǒng)、設(shè)備和/或計算機程序產(chǎn)品。特別是應(yīng)該在虛擬機內(nèi)執(zhí)行對象管理,以便虛擬機可以在動態(tài)地變化的網(wǎng)格計算環(huán)境內(nèi)實現(xiàn)。
發(fā)明內(nèi)容
一種方法、設(shè)備、計算機程序產(chǎn)品以及數(shù)據(jù)處理系統(tǒng)給虛擬機的操作提供了嵌入的功能,用于與計算網(wǎng)絡(luò)中的其他虛擬機進行交互操作。多個虛擬機在數(shù)據(jù)處理系統(tǒng)內(nèi)的一個或多個設(shè)備上運行;多個虛擬機中的每一個虛擬機都包括以類似于網(wǎng)格的方式與虛擬機群集中的其他虛擬機進行交互操作和關(guān)聯(lián)的功能。虛擬機群集中的每一個虛擬機充當虛擬機群集內(nèi)的節(jié)點。虛擬機對其與對象組相關(guān)聯(lián)的對象進行管理,每一個虛擬機都可以管理多個對象組。虛擬機共享信息,以便對象組可以在虛擬機群集中的虛擬機之間移動,從而允許虛擬機群集充當一個邏輯虛擬機。符合典型的應(yīng)用程序模型的單個應(yīng)用程序映像可以以這樣的方式在啟用網(wǎng)格的虛擬機群集內(nèi)執(zhí)行,以便允許應(yīng)用程序的執(zhí)行橫跨多個啟用網(wǎng)格的虛擬機的實例,從而可使應(yīng)用程序的執(zhí)行橫跨多個設(shè)備。
在所附的權(quán)利要求中闡述了本發(fā)明的新穎的特征。本發(fā)明本身,進一步的目標和優(yōu)點,通過參考下面的詳細描述并參考附圖,將得到最好的理解,其中圖1A描述了數(shù)據(jù)處理系統(tǒng)的典型的網(wǎng)絡(luò),其中每一個數(shù)據(jù)處理系統(tǒng)都可以實現(xiàn)本發(fā)明;圖1B描述了可以在其中可以實現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)內(nèi)使用的典型的計算機體系結(jié)構(gòu);圖2描述了一個方框圖,該方框圖顯示了根據(jù)本發(fā)明的實施例的分布式數(shù)據(jù)處理系統(tǒng)中的虛擬機群集;圖3A描述了一個方框圖,該方框圖顯示了可以用來作為根據(jù)本發(fā)明的實施例的可群集化虛擬機來增強虛擬機的組件和/或信息;圖3B-3D描述了一組方框圖,該組方框圖顯示了對象組在群集化虛擬機之間的轉(zhuǎn)移;圖4描述了一個流程圖,該流程圖顯示了初始化主要gJVM節(jié)點的過程;
圖5A描述了一個流程圖,該流程圖顯示了在主要gJVM中向正在被初始化的非主要gJVM分配唯一gJVM標識符的過程;圖5B描述了一個流程圖,該流程圖顯示了在主要gJVM中向正在被初始化的非主要gJVM分配唯一gJVM標識符的另一個過程;圖6描述了一個流程圖,該流程圖顯示了在主要gJVM中向非主要gJVM分配唯一對象組標識符的過程;圖7描述了一個流程圖,該流程圖顯示了在主要gJVM中向非主要gJVM提供有關(guān)gJVM群集的信息的過程;圖8描述了一個流程圖,該流程圖顯示了在主要gJVM中改變非主要gJVM的運行狀態(tài)的過程;圖9描述了一個流程圖,該流程圖顯示了在主要gJVM中改變對象組的遷移狀態(tài)的過程;圖10描述了一個流程圖,該流程圖顯示了初始化非主要gJVM節(jié)點的過程;圖11描述了一個流程圖,該流程圖顯示了在群集化虛擬機上構(gòu)建線程的過程;圖12描述了一個流程圖,該流程圖顯示了在群集化虛擬機上破壞線程的過程;圖13描述了一個流程圖,該流程圖顯示了在群集化虛擬機上構(gòu)建對象的過程;圖14描述了一個流程圖,該流程圖顯示了在群集化虛擬機上處理對對象的訪問的過程;圖15描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上將對象組遷移到遠程群集化虛擬機的過程;圖16描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機接受對象組的遷移的過程;圖17描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上將線程遷移到遠程群集化虛擬機的過程;
圖18描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機接受線程的遷移的過程;圖19描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上對群集化虛擬機執(zhí)行關(guān)閉操作的過程;圖20描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機收集負載或性能信息的過程;圖21描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上響應(yīng)來自群集化虛擬機的對本地群集化虛擬機的當前負載或性能信息的請求的過程;圖22描述了一個流程圖,該流程圖顯示了本地群集化虛擬機上的根據(jù)負載或性能信息確定將線程和/或?qū)ο蠼M從本地群集化虛擬機遷移到遠程群集化虛擬機的過程;以及圖23描述了一個方框圖,該方框圖顯示了通過多個設(shè)備橫跨單一邏輯虛擬機中的多個啟用網(wǎng)格的虛擬機的單個應(yīng)用程序映像的執(zhí)行。
具體實施例方式
一般而言,可以包括或涉及本發(fā)明的設(shè)備包括各式各樣的數(shù)據(jù)處理技術(shù)。因此,作為背景,在比較詳細地描述本發(fā)明之前,先描述分布式數(shù)據(jù)處理系統(tǒng)內(nèi)的硬件和軟件組件的典型的組織。
現(xiàn)在參考附圖,圖1A描述了數(shù)據(jù)處理系統(tǒng)的典型的網(wǎng)絡(luò),其中每一個數(shù)據(jù)處理系統(tǒng)都可以實現(xiàn)本發(fā)明的一部分。分布式數(shù)據(jù)處理系統(tǒng)100包含網(wǎng)絡(luò)101,這是可以用來在分布式數(shù)據(jù)處理系統(tǒng)100內(nèi)的連接在一起的各個設(shè)備和計算機之間提供通信鏈路的媒介。網(wǎng)絡(luò)101可以包括諸如線路或光纖電纜之類的永久連接,或通過電話或無線通信建立的臨時連接。在所描述的示例中,服務(wù)器102和服務(wù)器103與存儲單元104一起連接到網(wǎng)絡(luò)101。此外,客戶端105-107也連接到網(wǎng)絡(luò)101??蛻舳?05-107和服務(wù)器102-103可以由諸如大型機、個人計算機、個人數(shù)字助理(PDA)等等各種各樣的計算設(shè)備來代表。分布式數(shù)據(jù)處理系統(tǒng)100可以包括更多的未顯示的服務(wù)器、客戶端,路由器,其他設(shè)備和對等體系結(jié)構(gòu)。
在所描述的示例中,分布式數(shù)據(jù)處理系統(tǒng)100可以包括因特網(wǎng),網(wǎng)絡(luò)101表示全世界的網(wǎng)絡(luò)和網(wǎng)關(guān)的集合,它們使用諸如輕型目錄訪問協(xié)議(LDAP)、傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)、超文本傳輸協(xié)議(HTTP)、無線應(yīng)用程序協(xié)議(WAP)等等協(xié)議彼此進行通信。當然,分布式數(shù)據(jù)處理系統(tǒng)100還可以包括許多不同類型的網(wǎng)絡(luò),例如,內(nèi)部網(wǎng)、局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)。例如,服務(wù)器102直接支持客戶端109和網(wǎng)絡(luò)110,其中包括無線通信鏈路。支持網(wǎng)絡(luò)的電話111通過無線鏈路112連接到網(wǎng)絡(luò)110,PDA 113通過無線鏈路114連接到網(wǎng)絡(luò)110。電話111和PDA 113也可以使用諸如BluetoothTM無線技術(shù)之類的適當?shù)募夹g(shù)跨無線鏈路115直接在其本身之間進行數(shù)據(jù)傳輸,以創(chuàng)建所謂的個人區(qū)域網(wǎng)絡(luò)(PAN)或個人專門網(wǎng)絡(luò)。同樣,PDA 113也可以通過無線通信鏈路116向PDA107傳輸數(shù)據(jù)。本發(fā)明可以在各種各樣的硬件平臺上實現(xiàn)。圖1A作為異構(gòu)計算環(huán)境的示例,而不是對本發(fā)明作出體系結(jié)構(gòu)的限制。
現(xiàn)在參考圖1B,該圖描述了諸如圖1A所示的其中可以實現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的典型的計算機體系結(jié)構(gòu)。數(shù)據(jù)處理系統(tǒng)120包含連接到內(nèi)部系統(tǒng)總線123的一個或多個中央處理單元(CPU)122,總線123將隨機存取存儲器(RAM)124、只讀存儲器126,以及輸入/輸出適配器128(該適配器128支持諸如打印機130、磁盤單元132或諸如音頻輸出系統(tǒng)等等未顯示的其他設(shè)備)互相連接在一起。系統(tǒng)總線123還連接用于訪問通信鏈路136的通信適配器134。用戶接口適配器148連接諸如鍵盤140和鼠標142之類的各種用戶設(shè)備或諸如觸摸屏、筆尖、麥克風(fēng)之類的未顯示的其他設(shè)備。顯示適配器144將系統(tǒng)總線123連接到顯示設(shè)備146。
那些本領(lǐng)域普通技術(shù)人員將認識到,圖1B中的硬件可以隨系統(tǒng)實現(xiàn)方式不同而不同。例如,系統(tǒng)可以具有諸如基于IntelPentium處理器之類的一個或多個處理器,數(shù)字信號處理器(DSP),以及一種或多種易失性和非易失性存儲器。除了圖1B中所描述的硬件之外,還可以使用其他外圍設(shè)備加以補充或來代替它們。所描述的示例不對本發(fā)明的體系結(jié)構(gòu)作出限制。
除了能夠在各種各樣的硬件平臺上實現(xiàn)外,本發(fā)明還可以以各種各樣的軟件環(huán)境來實現(xiàn)??梢允褂玫湫偷牟僮飨到y(tǒng)來控制每一個數(shù)據(jù)處理系統(tǒng)內(nèi)的程序執(zhí)行。例如,一個設(shè)備可以運行Unix操作系統(tǒng),而另一個設(shè)備可以包含簡單的Java運行時環(huán)境。典型的計算機平臺可以包括瀏覽器,這是著名的用于訪問各種各樣格式和語言的超文本文檔的軟件應(yīng)用程序,如圖形文件、字處理文件、可擴展標記語言(XML)、超文本標記語言(HTML)、手持設(shè)備標記語言(HDML)、無線標記語言(WML),以及各種其他格式和類型的文件。
虛擬機群集/網(wǎng)格如上文參考圖1A和圖1B所述的,本發(fā)明可以在各種各樣的硬件和軟件平臺上實現(xiàn)。具體來說,如參考其余的圖所描述的,本發(fā)明旨在提供一種改進的虛擬機,該虛擬機包括改進的虛擬機內(nèi)的網(wǎng)格的計算特征,以便改進的虛擬機可以以類似于網(wǎng)格的方式與類似的改進的虛擬機進行交互。雖然下面的附圖被描述為包括Java技術(shù),以便本發(fā)明可以作為改進的Java虛擬機(JVM)來實現(xiàn),但是,本發(fā)明也可以結(jié)合其他類型的虛擬機的技術(shù)來實現(xiàn)。
現(xiàn)在參考圖2,該圖中的方框圖描述了根據(jù)本發(fā)明的實施例的分布式數(shù)據(jù)處理系統(tǒng)中的虛擬機群集/網(wǎng)格。網(wǎng)絡(luò)200連接一組虛擬機201-205;網(wǎng)絡(luò)200類似于圖1中的網(wǎng)絡(luò)101,虛擬機201-205可以在各種各樣的設(shè)備上得到支持,如圖1所示的任何設(shè)備上。
下面介紹一下術(shù)語,群集是兩個或更多交互的實體的集合。虛擬機的群集可以稱為虛擬機群集、虛擬機網(wǎng)格或邏輯虛擬機。包含用于在群集/網(wǎng)格中操作的功能的單個虛擬機可以稱為可群集化虛擬機或啟用網(wǎng)格的虛擬機。包括在群集/網(wǎng)格內(nèi)的單個虛擬機可以稱為群集化虛擬機或嵌入網(wǎng)格的虛擬機。
如上所述,本發(fā)明可以在使用Java虛擬機的Java環(huán)境內(nèi)實現(xiàn),Java虛擬機已經(jīng)被增強以包括用于實現(xiàn)本發(fā)明的實施例的功能?;蛘撸景l(fā)明可以在對Java類庫的擴展內(nèi)實現(xiàn)。如此,上文所提供的術(shù)語可以在Java上下文內(nèi)使用。在下文中,啟用網(wǎng)格的JVM或嵌入網(wǎng)格的JVM被稱為gJVM。圖2顯示了連接包含gJVM 201-205的gJVM群集的網(wǎng)絡(luò)200。
單一群集化虛擬機或單一嵌入網(wǎng)格的虛擬機可以稱為給定虛擬機群集、給定虛擬機網(wǎng)格或給定邏輯虛擬機內(nèi)的節(jié)點。在圖2所示的示例中,一組虛擬機以類似于網(wǎng)格的方式作為單個虛擬機內(nèi)的多個節(jié)點而進行交互。本發(fā)明支持虛擬機群集中的多個節(jié)點,分布式數(shù)據(jù)處理系統(tǒng)可以支持一個以上的虛擬機群集/網(wǎng)格。此外,給定設(shè)備可以支持一個以上可群集化/啟用網(wǎng)格的虛擬機或一個以上群集化/嵌入網(wǎng)格的虛擬機。換句話說,給定設(shè)備可以支持第一群集化/嵌入網(wǎng)格的虛擬機和第二群集化/嵌入網(wǎng)格的虛擬機,其中,兩個群集化/嵌入網(wǎng)格的虛擬機包括在兩個不同的和獨立的虛擬機群集/網(wǎng)格中;兩個群集化/嵌入網(wǎng)格的虛擬機和兩個虛擬機群集/網(wǎng)格將唯一地可識別和可訪問。
依據(jù)在給定虛擬機群集/網(wǎng)格內(nèi)執(zhí)行的進程的類型,為方便起見,將給定虛擬機群集/網(wǎng)格內(nèi)交互的節(jié)點稱為本地節(jié)點或遠程節(jié)點,以便在節(jié)點之間進行區(qū)別。例如,從給定gJVM的角度來看,給定gJVM可以稱為本地節(jié)點,本地gJVM或本地gJVM節(jié)點;從給定gJVM的角度來看,與本地節(jié)點進行交互的不同的gJVM,不論是在同一臺設(shè)備上還是在另一臺設(shè)備上執(zhí)行,都可以稱為遠程節(jié)點、遠程gJVM、遠程gJVM節(jié)點。
本發(fā)明旨在透明地允許應(yīng)用程序在一組機器或設(shè)備上運行,其中每一臺機器或設(shè)備都至少支持一個群集化虛擬機節(jié)點。例如,多線程Java應(yīng)用程序可以在多個gJVM上運行,應(yīng)用程序?qū)⒉恢酪膊槐刂榔渚€程被發(fā)往哪些機器。虛擬機群集動態(tài)地在可用的群集化虛擬機組上管理和分布應(yīng)用程序的線程。
每一個虛擬機群集都具有單個主要節(jié)點。在圖2中,gJVM節(jié)點201是主要gJVM節(jié)點,而gJVM節(jié)點202-205是非主要gJVM節(jié)點。主要節(jié)點可以具有為群集內(nèi)的非主要節(jié)點執(zhí)行的某些職責(zé)。例如,主要節(jié)點可以具有定義應(yīng)用程序環(huán)境和應(yīng)用程序的上下文的一組對象,例如,針對文件訪問的,以及虛擬機群集的類加載(類路徑)。
主要節(jié)點和非主要節(jié)點可以以稍微不同的方式啟動,從而向?qū)⒊洚斨饕?jié)點或充當非主要節(jié)點的給定可群集化虛擬機提供指示。例如,Java環(huán)境中的可群集化虛擬機可以以下列示范性實例化命令來啟動Java[-main-clusterName][mainClass]“java”命令可以實例化可群集化虛擬機,即,啟動可群集化虛擬機的給定副本的執(zhí)行?!?main”參數(shù)表示,gJVM的特定實例將充當由“-clusterName”參數(shù)標識的gJVM群集內(nèi)的主要gJVM節(jié)點;當gJVM的特定實例將充當非主要gJVM節(jié)點時,實例化命令將不包括“-main”參數(shù)?!癿ainClass”參數(shù)指定要由gJVM運行的主程序。如此,包括主要節(jié)點和非主要節(jié)點的軟件模塊可以是彼此的副本,從而使軟件基本上類似,即,主要節(jié)點和非主要節(jié)點可以是所謂的對等或克隆,盡管主要節(jié)點和非主要節(jié)點可以因為主要節(jié)點的實例化進程與非主要節(jié)點的實例化進程稍有不同而表現(xiàn)出不同的行為。
由于主要節(jié)點和非主要節(jié)點可以只是可群集化虛擬機的獨立實例,其中,主要節(jié)點和非主要節(jié)點只根據(jù)兩種不同的操作模式來進行運行,例如,通過以不同的方式初始化,主要節(jié)點可以將其職責(zé)委派或轉(zhuǎn)交給非主要節(jié)點,以便可以在系統(tǒng)啟動之后將主要節(jié)點關(guān)閉后進行維護或達到其他目的。
啟用網(wǎng)格的虛擬機現(xiàn)在參考圖3A,該圖中的方框圖顯示了可以用來增強作為根據(jù)本發(fā)明的實施例的可群集化/啟用網(wǎng)格的虛擬機的虛擬機的組件和/或信息。圖3A描述了表示諸如圖2中的任何節(jié)點201-205之類的單個可群集化虛擬機的gJVM節(jié)點300。雖然沒有顯示,gJVM節(jié)點300包括用于以類似于典型的JVM的方式執(zhí)行各種任務(wù)的其他組件和信息;換句話說,gJVM節(jié)點300可以被視為已經(jīng)被增強以包括本發(fā)明的功能的典型的JVM。雖然顯示的gJVM節(jié)點300包含了多種類型的表,但是,那些本領(lǐng)域普通技術(shù)人員將理解,可以由給定可群集化虛擬機節(jié)點對不同類型的信息和不同信息格式來進行管理,以實現(xiàn)本發(fā)明的功能。
P2P通信單元302可使每一個gJVM以對等方式與任何其他gJVM進行通信,特別是向另一個gJVM傳遞gJVM的性能信息。例如,gJVM可以將其CPU負載因子、其存儲器因子,以及其通信隊列負載因子傳遞到其他gJVM,以便虛擬機群集可以以分布式方式平衡其總負載。唯一gJVM ID 304是一個數(shù)據(jù)值,該數(shù)據(jù)值表示已經(jīng)指派給由gJVM組名稱306標識的給定gJVM群集內(nèi)特定gJVM的唯一虛擬機標識符。應(yīng)用程序環(huán)境/上下文參數(shù)308定義了各種值和信息,這些值和信息在gJVM 300的壽命內(nèi)可能需要,用于從其運行時環(huán)境中獲取附加信息并用于與其運行時環(huán)境進行交互。例如,每一個gJVM都可能必須知道其中配置了主要gJVM的主要gJVM IP地址和端口值310,以便與主要gJVM進行通信。
每一個群集化虛擬機都有運行狀態(tài),例如,已停止、正在啟動、已經(jīng)啟動,以及正在停止。當在虛擬機群集內(nèi)正在實例化新節(jié)點時,即,添加到已經(jīng)在虛擬機群集內(nèi)的多個虛擬機時,有關(guān)其存在的信息被傳播到整個虛擬機群集;當虛擬機群集內(nèi)的特定節(jié)點正在被停止時,即,從虛擬機群集內(nèi)多個虛擬機的其余部分刪除時,(這可以在不停止整個虛擬機群集的情況下發(fā)生),有關(guān)特定節(jié)點被停止的信息被傳播到整個虛擬機群集。在圖3A所示的示例中,假設(shè)每一個gJVM節(jié)點都維護了gJVM群集內(nèi)的gJVM節(jié)點的列表的本地副本(這顯示為gJVM注冊表312);gJVM節(jié)點300可以接收有關(guān)其他節(jié)點的狀態(tài)的更新的信息,然后該信息將反映在gJVM注冊表312內(nèi)。如此,gJVM注冊表312提供對gJVM節(jié)點300已知的gJVM的注冊表。gJVM注冊表312包含每一個已知的gJVM的特征值的列表,如其唯一gJVM ID 314、其IP地址和端口316,以及其運行狀態(tài)318。gJVM群集內(nèi)的每一個gJVM都可以在彼此之間傳遞各種工作負荷或計算資源利用參數(shù),以便它們可以確定向哪里分派線程。
在gJVM啟動之后,它可以接受來自其gJVM群集的線程工作;當它停止時,它將其線程和關(guān)聯(lián)的對象移動到另一個gJVM。與典型的虛擬機不同的是,本發(fā)明提供了可群集化虛擬機,其中,對象可在gJVM節(jié)點之間移動,從而當可群集化虛擬機的實例正在被停止時可使線程以及其關(guān)聯(lián)的對象移動。
在典型的采用現(xiàn)有技術(shù)的系統(tǒng)中,遠程對象是通過IP地址、TCP/IP端口號、以及對象標識符引用的組合來進行編址的;遠程方法調(diào)用(RMI)引用或通用對象請求代理體系結(jié)構(gòu)(CORBA)引用還包含相對較大的其他信息。與其中存根類可以在典型的RMI或CORBA實現(xiàn)方式中使用的典型的虛擬機不同的是,本發(fā)明提供了對象引用,以便對對象的訪問在gJVM運行時環(huán)境內(nèi)透明地進行管理而無需存根類,關(guān)于這一點,下面將詳細描述。
為支持本發(fā)明內(nèi)的可移動對象,對象與對象組關(guān)聯(lián),即,在邏輯上包含在對象組內(nèi)。只要對象存在,其與特定對象組的關(guān)聯(lián)確保了對象組將繼續(xù)存在。換句話說,只要對象組至少具有一個對象,它就繼續(xù)存在。當一個對象組中的所有對象都已經(jīng)被回收時,那么,該對象組也將被回收。
對象組可以在群集化虛擬機之間移動。可訪問的對象組只在單個群集化虛擬機上存在;當對象組處于在群集化虛擬機之間的遷移狀態(tài)時,對該對象組的訪問可以得到限制。因此,每一個群集化虛擬機都具有有關(guān)對象組在虛擬機群集內(nèi)的位置的信息。
在圖3A所示的示例中,對象組注冊表320包含對gJVM 300已知的對象組ID的列表及其他關(guān)聯(lián)的信息,以在gJVM 300的gJVM群集內(nèi)定位那些對象組,從而將每一個已知的對象組與對gJVM 300已知的gJVM關(guān)聯(lián)。例如,特定對象組由對象組ID 322表示;在其上面給對象組指派了對象組ID 322的gJVM節(jié)點由gJVM ID 324標識,指派給對象組ID 322的對象組的遷移狀態(tài)由遷移狀態(tài)值326標識,狀態(tài)值326可以是一組恒定值中的某一個值,其中每一個值都表示不同的可能的遷移狀態(tài)。
為了提供透明的訪問并提供對象在虛擬機群集內(nèi)的可動性,內(nèi)部虛擬機的到對象的句柄,即對象引用,包含緊湊的信息項集,該信息項集提供了對象的定位和訪問,但沒有指定對象的位置。例如,可以使用下列Java結(jié)構(gòu)來指定Java環(huán)境中的對象句柄Struct ObjectHandle{Int objectGroupID;//Unique object group IDByte[]objectID;//Unique object ID of the object}上文所提供的示例中指定的ObjectHandle允許在gJVM群集內(nèi)執(zhí)行的應(yīng)用程序訪問gJVM群集內(nèi)的任何地方的對應(yīng)的對象。通過知道一組對象的唯一對象組標識符,任何gJVM節(jié)點都可以定位gJVM群集內(nèi)的標識的對象組;例如,如果對象組在一個表中或在將對象組標識符與gJVM標識符關(guān)聯(lián)的其他類型的數(shù)據(jù)倉庫中進行管理,那么,可以確定在其上面駐留了對象的gJVM節(jié)點。通過使用有關(guān)對gJVM節(jié)點進行編址或訪問的方式的其他信息,可以使用唯一gJVM標識符與在其上面駐留了對象的gJVM節(jié)點進行通信;例如,如果gJVM標識符在一個表中或?qū)JVM標識符與IP地址和端口號關(guān)聯(lián)的其他類型的數(shù)據(jù)倉庫中進行管理,例如,如gJVM注冊表312所示,那么,可以以某種方式訪問相應(yīng)的gJVM節(jié)點上的相應(yīng)的對象組。雖然給定gJVM節(jié)點可以由IP地址和端口號進行標識,但是此信息不直接包含在對象引用內(nèi),從而可使對象透明地在gJVM節(jié)點之間移動。通過知道要被訪問的對象的唯一對象標識符,那么,可以以某種方式訪問相應(yīng)的gJVM節(jié)點上的對象組內(nèi)的相應(yīng)的對象。
有關(guān)對象組的位置的信息可以由gJVM群集的所有g(shù)JVM節(jié)點都可以訪問的JVM單個對象提供,以查詢對象組標識符和托管對象組的gJVM節(jié)點之間的關(guān)聯(lián)。在圖3A所示的示例中,gJVM節(jié)點300包含由對象組注冊表320提供的本地信息;例如,gJVM節(jié)點300可以從另一個gJVM節(jié)點(例如,主要gJVM節(jié)點)檢索或接收對對象組注冊表320的更新,從而可使gJVM節(jié)點300執(zhí)行快速而有效的本地查詢。
對象和它們的對象組是根據(jù)需要在本地gJVM節(jié)點的堆陣內(nèi)創(chuàng)建的??梢员镜匾脤ο?,直到對象引用被傳遞到線程范圍之外,此時,可以作為遠程對象透明地訪問對象,從而可使其他線程潛在地在其他機器上運行,以對其進行訪問。在一個實施例中,優(yōu)選情況下,在gJVM節(jié)點的線程本地堆陣中創(chuàng)建對象組;或者,對象組可以在群集化虛擬機內(nèi)的其他類型的堆陣內(nèi)創(chuàng)建。當構(gòu)建線程時,給每一個新線程都提供了新線程本地堆陣;線程可以根據(jù)需要獲取更多的線程本地堆陣。線程本地堆陣提供了高性能,因為對大多數(shù)對象的大多數(shù)訪問都是在特定線程本地進行的;可以輕松地將對象回收;不需要堆陣鎖定就可以滿足對象分配。線程本地堆陣通常是作為特定線程可以對其進行訪問的可配置大小的對象來實現(xiàn)的。為滿足典型的小對象分配,線程本地堆陣在一端分離,以釋放所需空間。如果線程本地堆陣不足夠大,以滿足分配,則丟棄線程本地堆陣的其余部分,并由全新的線程本地堆陣替代。較大的對象分配可以繞過線程本地堆陣機制,并可以直接從虛擬機內(nèi)的較大的堆陣來進行滿足。圖3A描述了gJVM節(jié)點300內(nèi)的單個線程328;線程328與兩個線程本地堆陣330和332關(guān)聯(lián),從而顯示了一個線程可以與多個線程本地堆陣具有一對多的關(guān)聯(lián)。顯示的線程本地堆陣330包含對象組334和對象組336,它們包含在圖中沒有顯示的對象;顯示的線程本地堆陣332包含對象組338,其本身包含對象340-342。
用于管理線程的信息存儲在對象內(nèi),此對象也存儲在對象組內(nèi)。同樣,線程的堆棧幀是作為對象來管理的。圖3A描述了線程管理對象344和用于管理這樣的信息的堆棧幀對象346。如此,與線程相關(guān)的實例數(shù)據(jù)存儲在對象組內(nèi)。如果線程從一個gJVM節(jié)點移到另一個gJVM節(jié)點,則實例數(shù)據(jù)作為移動對象組的過程的一部分來移動。線程代碼本身不必存儲在對象組中;如果代碼在存儲器內(nèi)不存在,則在需要時從類文件中提供。
當建立新線程時也創(chuàng)建新對象組;將在對象組和新建立的線程(它具有唯一的線程標識符)之間創(chuàng)建關(guān)聯(lián)。線程標識符在整個群集中是唯一的;每一個群集化虛擬機都具有唯一的虛擬機標識符,從而可使唯一線程標識符優(yōu)選情況下基于唯一虛擬機標識符和線程標識符(它在給定虛擬機內(nèi)是唯一的)的組合。
可以根據(jù)需要將更多的對象組添加到線程中。在圖3A所示的示例中,本地對象組管理表350包含在gJVM節(jié)點300內(nèi)管理的對象組列表,即,存儲在gJVM節(jié)點300內(nèi)的對象組,與其他關(guān)聯(lián)的信息一起,管理gJVM節(jié)點300內(nèi)的那些對象組。例如,特定對象組由表中的行表示,表包含對象組ID 352,指向包含特定對象組的線程本地堆陣的指針354,以及與對象組關(guān)聯(lián)的線程標識符356;如果在群集化虛擬機內(nèi)的其他類型的堆陣內(nèi)創(chuàng)建對象組,那么,不同的信息將在本地對象組管理表350內(nèi)進行管理。
如上所述,只要對象組至少具有一個對象,它就繼續(xù)存在;即使負責(zé)創(chuàng)建對象的線程被終止,對象也可以被仍需要其存在的另一個線程引用,從而需要對象位于其中的對象組繼續(xù)存在?;蛘?,也可以在gJVM節(jié)點內(nèi)維護主全局對象組360。當線程結(jié)束時,包含在其關(guān)聯(lián)的對象組(或關(guān)聯(lián)的對象組)中的并且仍可從其他線程引用的所有其余的對象,例如,對象362-368被移到主全局對象組中。甚至在始發(fā)線程結(jié)束的情況下,主全局對象組也將包含在gJVM群集內(nèi)全局引用的所有對象,從而可以對較少的對象組進行管理。
在虛擬機群集/網(wǎng)格內(nèi)的對象組移動現(xiàn)在參考圖3B-3D,一組方框圖顯示了根據(jù)本發(fā)明的實施例的對象組在群集化虛擬機之間的轉(zhuǎn)移。圖3B-3D描述了在一段時間內(nèi)虛擬機群集內(nèi)的一組gJVM節(jié)點;圖3B描述了一個比圖3C中描述的時間點(該時間點比圖3D中描述的時間點較早)較早的時間點。圖3B以類似于圖3A的方式顯示了包含對象組334、336和338的gJVM節(jié)點300。此外,gJVM節(jié)點370包含對象組372,而gJVM節(jié)點380包含對象組382。
如上所述,只要對象組至少具有一個對象,它就繼續(xù)存在,即使最初與對象組關(guān)聯(lián)的線程被終止。圖3C描述了與圖3B相同的gJVM節(jié)點和相同對象組。然而,圖3C與圖3B不同的是,對象組338已經(jīng)從gJVM節(jié)點300轉(zhuǎn)移到gJVM節(jié)點380;例如,可以響應(yīng)與對象組338關(guān)聯(lián)的線程(如圖3A所示的線程328)終止而進行轉(zhuǎn)移。
還是如上所述,只要對象組至少具有一個對象,它就繼續(xù)存在,即使建立了對象組的群集化虛擬機已經(jīng)被停止或終止。圖3D描述了與圖3C中的某些相同的gJVM節(jié)點和對象組的稍晚的時間點。然而,圖3D與圖3C不同的是,對象組334和336已經(jīng)從gJVM節(jié)點300轉(zhuǎn)移到gJVM節(jié)點370。例如,可以響應(yīng)支持對象組334和336的gJVM節(jié)點300的終止而進行轉(zhuǎn)移;當給定gJVM關(guān)閉時,給定gJVM上的堆陣和/或?qū)ο蠼M可以轉(zhuǎn)移到另一個機器中,整個虛擬機群集中的gJVM節(jié)點中的信息將用對象組的位置進行更新。
還可以在虛擬機群集內(nèi)進行垃圾回收。在典型的Java虛擬機中,垃圾回收是用標記-清除(mark-and-sweep)方法來進行。在標記-清除方法中,當應(yīng)用程序試圖分配對象,但是存儲器利用使對象分配操作難以進行或不可能完成時,由應(yīng)用程序顯式地或者自動地調(diào)用垃圾回收。虛擬機穿過所有對象,將它們標記起來,然后,掃描所有線程和統(tǒng)計數(shù)據(jù)(全局數(shù)據(jù)),以再次標記所有可以遍歷到的所有對象。虛擬機暫停所有線程,然后遍查每一個線程的堆棧幀的數(shù)據(jù)結(jié)構(gòu),從而它標記可由任何線程引用的所有對象,可能是一個應(yīng)用程序一個應(yīng)用程序地進行。然后,破壞或刪除沒有被標記為可引用的所有對象,從而釋放存儲器,以便讓虛擬機分配對象。
大多數(shù)對象通常是只能由一個線程訪問的對象。利用本發(fā)明的虛擬機群集,可以遠程地引用對象;當遠程地引用對象時,它被同樣地標記起來。在一個實施例中,gJVM節(jié)點可以具有一個單獨的守護線程,該線程以低優(yōu)先級運行并定期遍歷系統(tǒng),以執(zhí)行遠程垃圾回收處理。每一個對象都可以具有遠程垃圾回收位,該位將由遠程垃圾回收守護程序在標記-清除方法中使用。如果被遠程引用的對象不再在其中建立了該對象的gJVM節(jié)點內(nèi)引用,那么,遠程垃圾回收守護線程則努力判斷遠程對象引用是否仍需要對象的存在。守護線程可以向其他gJVM節(jié)點發(fā)送請求消息以查詢可以準備在本地gJVM內(nèi)釋放的特定對象是否仍被遠程gJVM引用;這些請求可以為多個對象成批發(fā)出,以便可以有效地檢查引用組。如果沒有遠程gJVM節(jié)點報告特定對象仍在被遠程引用,那么,本地gJVM節(jié)點上的遠程垃圾回收守護線程可以啟動對象刪除;例如,遠程垃圾回收守護線程可以刪除關(guān)于對象正在/曾經(jīng)被遠程引用的任何指示,從而可使對象隨后在普通/本地垃圾回收過程中被刪除。
主要啟用網(wǎng)格的虛擬機的初始化現(xiàn)在參考圖4,該圖中的流程圖顯示了根據(jù)本發(fā)明的實施例的初始化主要gJVM的過程。過程從通過使用上文所描述的實例化命令初始化主群集化虛擬機節(jié)點(步驟402)開始。將gJVM群集名稱以這樣的方式進行注冊,以便使應(yīng)用程序可以查詢可用的gJVM群集,并防止與其他gJVM群集發(fā)生名稱沖突(步驟404)。主要gJVM節(jié)點獲取將被新啟動的gJVM群集使用的任何環(huán)境參數(shù)或上下文參數(shù)(步驟406),并以這樣的方式存儲信息,以便對gJVM群集中的所有節(jié)點都可用。初始化主要gJVM節(jié)點內(nèi)的對象組注冊表的主副本(步驟408),此后,將主副本作為副本傳播到諸如圖3A所示的對象組注冊表320之類的非主要gJVM節(jié)點。還初始化主要gJVM節(jié)點內(nèi)的gJVM注冊表的主副本(步驟410),此后,也將主副本作為副本傳播到諸如圖3A所示的gJVM注冊表312之類的非主要gJVM節(jié)點,從而結(jié)束該過程。
為啟用網(wǎng)格的虛擬機節(jié)點分配或注冊唯一ID現(xiàn)在參考圖5A,該圖中的流程圖顯示了在主要gJVM中向正在被初始化的非主要gJVM分配唯一gJVM標識符的過程。過程開始時,主要gJVM從非主要gJVM接收有關(guān)唯一gJVM標識符的請求(步驟502)。主要gJVM產(chǎn)生唯一gJVM標識符(步驟504),并將新產(chǎn)生的gJVM標識符添加到gJVM注冊表(步驟506)。主要gJVM將gJVM注冊表中的非主要gJVM的運行狀態(tài)設(shè)置為正在啟動狀態(tài)值(步驟508),然后,主要gJVM通過發(fā)送包含新產(chǎn)生的唯一gJVM標識符的消息來響應(yīng)發(fā)出請求的非主要gJVM(步驟510)。然后,主要gJVM將包含更新的gJVM注冊表的消息廣播到所有非主要gJVM節(jié)點(步驟512),從而結(jié)束該過程。
現(xiàn)在參考圖5B,該圖中的流程圖顯示了在主要gJVM中向正在被初始化的非主要gJVM分配唯一gJVM標識符的另一個過程。過程開始時,主要gJVM從非主要gJVM接收注冊唯一gJVM標識符的請求(步驟522)。與其中非主要gJVM節(jié)點依靠主要gJVM節(jié)點分配唯一gJVM標識符的圖5A不同的是,圖5B顯示了其中非主要gJVM節(jié)點分配其自己的唯一gJVM標識符然后向主要gJVM節(jié)點注冊其標識符的示范性系統(tǒng)。非主要gJVM節(jié)點可以通過執(zhí)行用于這樣的用途的算法來產(chǎn)生其自己的保證是唯一的標識符。例如,許多設(shè)備在制造時包括可讀、不可改變的序列號,有時稱為全局唯一標識符;由于分布式gJVM群集內(nèi)的每一個gJVM節(jié)點都在設(shè)備上運行,因此,gJVM節(jié)點可以使用一種算法以創(chuàng)建唯一gJVM標識符,其中,算法接受設(shè)備的全局唯一標識符作為輸入。
然后,主要gJVM將新gJVM標識符添加到或注冊到gJVM注冊表中(步驟524)。主要gJVM將gJVM注冊表中的非主要gJVM的運行狀態(tài)設(shè)置為正在啟動狀態(tài)值(步驟526),然后,主要gJVM通過發(fā)送包含表示注冊是否成功的狀態(tài)值的響應(yīng)消息來響應(yīng)發(fā)出請求的非主要gJVM(步驟528)。然后,主要gJVM將包含更新的gJVM注冊表的消息廣播到所有非主要gJVM節(jié)點(步驟530),從而結(jié)束該過程。
將對象組ID分配到非主要啟用網(wǎng)格的虛擬機節(jié)點現(xiàn)在參考圖6,該圖中的流程圖顯示了在主要gJVM中向非主要gJVM分配唯一對象組標識符的過程。過程開始時,主要gJVM從非主要gJVM接收有關(guān)唯一對象組標識符的請求(步驟602)。主要gJVM產(chǎn)生唯一對象組標識符(步驟604),并將新產(chǎn)生的對象組標識符添加到對象組注冊表中(步驟606)。主要gJVM將對象組注冊表中的對象組的遷移狀態(tài)設(shè)置為正在啟動狀態(tài)值(步驟608),然后,主要gJVM通過發(fā)送包含新產(chǎn)生的唯一對象組標識符的消息來響應(yīng)發(fā)出請求的非主要gJVM(步驟610)。然后,主要gJVM將包含更新的對象組注冊表的消息廣播到所有非主要gJVM節(jié)點(步驟612),從而結(jié)束該過程。
或者,與其中非主要gJVM節(jié)點依靠主要gJVM節(jié)點分配唯一對象組標識符的圖6相對比,可以使用另一個過程,其中,非主要gJVM節(jié)點分配其自己的唯一對象組標識符,然后向主要gJVM節(jié)點注冊此新產(chǎn)生的對象組標識符。非主要gJVM節(jié)點可以通過執(zhí)行用于這樣的用途的算法來產(chǎn)生其自己的保證是唯一的對象組標識符,例如,以類似于上文參考圖5B所描述的方式。
向非主要啟用網(wǎng)格的虛擬機節(jié)點提供群集特定的信息現(xiàn)在參考圖7,該圖中的流程圖顯示了在主要gJVM中向非主要gJVM提供有關(guān)gJVM群集的信息的過程。過程開始時,主要gJVM從非主要gJVM接收有關(guān)群集特定的信息的請求,如當前gJVM注冊表、當前對象組注冊表或群集的環(huán)境/上下文參數(shù)(步驟702)。主要gJVM通過發(fā)送包含被請求的信息的消息來響應(yīng)發(fā)出請求的非主要gJVM(步驟704),從而結(jié)束該過程。如此,非主要gJVM節(jié)點能夠從主要gJVM節(jié)點獲取信息,假設(shè)本發(fā)明的實施例具有這樣的gJVM群集,其中,主要gJVM節(jié)點代表非主要gJVM節(jié)點管理群集特定的信息。
改變非主要啟用網(wǎng)格的虛擬機節(jié)點的運行狀態(tài)現(xiàn)在參考圖8,該圖中的流程圖顯示了在主要gJVM中改變非主要gJVM的運行狀態(tài)的過程。過程開始時,主要gJVM從非主要gJVM接收改變其運行狀態(tài)的請求(步驟802)。主要gJVM用請求的運行狀態(tài)更新gJVM注冊表(步驟804),并用確認消息響應(yīng)發(fā)出請求的非主要gJVM(步驟806)。然后,主要gJVM將包含更新的gJVM注冊表的消息廣播到所有非主要gJVM節(jié)點(步驟808),從而結(jié)束該過程。
通過非主要啟用網(wǎng)格的虛擬機節(jié)點改變對象組遷移狀態(tài)現(xiàn)在參考圖9,該圖中的流程圖顯示了在主要gJVM中改變對象組的遷移狀態(tài)的過程。過程開始時,主要gJVM從非主要gJVM接收改變對象組的遷移狀態(tài)的請求(步驟902)。主要gJVM用請求的遷移狀態(tài)更新對象組注冊表(步驟904),并用確認消息響應(yīng)發(fā)出請求的非主要gJVM(步驟906)。然后,主要gJVM將包含更新的對象組注冊表的消息廣播到所有非主要gJVM節(jié)點(步驟908),從而結(jié)束該過程。
非主要啟用網(wǎng)格的虛擬機節(jié)點的初始化現(xiàn)在參考圖10,該圖中的流程圖顯示了根據(jù)本發(fā)明的實施例的初始化非主要gJVM節(jié)點的過程。過程從例如通過使用上文所描述的實例化命令初始化非主群集化虛擬機節(jié)點(步驟1002)開始。例如從實例化命令獲取gJVM群集名稱(步驟1004),例如使用gJVM群集名稱執(zhí)行查詢操作(步驟1006),以從全局可用的數(shù)據(jù)庫獲取網(wǎng)絡(luò)參數(shù),以啟動與標識的gJVM群集的主要gJVM節(jié)點的通信(步驟1008)。
非主要gJVM節(jié)點從主要gJVM節(jié)點請求并接收唯一gJVM標識符(步驟1010),如圖5A或圖5B所示。非主要gJVM節(jié)點獲取任何群集范圍內(nèi)的信息,如由gJVM群集使用的環(huán)境參數(shù)或上下文參數(shù)(步驟1012),如圖7所示。非主要gJVM節(jié)點還從主要gJVM節(jié)點請求并接收gJVM注冊表(步驟1014)和對象組注冊表(步驟1016),如圖7所示。雖然顯示的步驟1010-1016是以同步方式實現(xiàn)的,但是,也可以以各種各樣的方式異步地執(zhí)行這些步驟。由于非主要gJVM節(jié)點已經(jīng)完成其初始化,非主要gJVM節(jié)點向主要gJVM節(jié)點發(fā)送改變其運行狀態(tài)的請求從表示它處于正在啟動狀態(tài)的值改變?yōu)楸硎舅幱谡谶\行狀態(tài)的值(步驟1018)。假設(shè)請求被成功地執(zhí)行,非主要gJVM節(jié)點從主要gJVM節(jié)點接收確認(步驟1020),從而結(jié)束該過程。
圖10顯示了非主要gJVM節(jié)點上的初始化過程,而圖5A-9顯示了主要gJVM節(jié)點根據(jù)非主要gJVM節(jié)點的請求執(zhí)行任務(wù),以集中地作為整體代表gJVM群集管理信息的過程。其余的圖描述了非主要gJVM節(jié)點管理gJVM群集內(nèi)的對象組和線程的過程;換句話說,其余的圖從非主要gJVM節(jié)點的角度顯示了過程。然而,應(yīng)該注意,對于對象組和線程的管理,主要gJVM節(jié)點執(zhí)行類似的過程;在其中的圖顯示了向主要gJVM節(jié)點傳輸信息或從中接收信息的過程中的步驟的實例中,應(yīng)該理解,主要gJVM節(jié)點將執(zhí)行類似的步驟,只是主要gJVM節(jié)點可以將信息直接放到群集特定的表或數(shù)據(jù)庫中,如gJVM注冊表或?qū)ο蠼M注冊表,而不必與其本身(即,主要gJVM節(jié)點)協(xié)調(diào)步驟。
啟用網(wǎng)格的虛擬機節(jié)點中的線程構(gòu)建現(xiàn)在參考圖11,該圖中的流程圖顯示了在群集化虛擬機上構(gòu)建線程的過程。過程開始時,本地gJVM在群集化虛擬機的控制下通過正在執(zhí)行的應(yīng)用程序執(zhí)行的相應(yīng)的API調(diào)用接收構(gòu)建線程的請求(步驟1102),雖然本地gJVM也可以在控制虛擬機上的應(yīng)用程序的執(zhí)行的同時主動地執(zhí)行類似的過程。本地gJVM節(jié)點(在某些情況下可以被假定為非主要gJVM)向主要gJVM發(fā)送請求,以索取唯一對象組標識符,然后接收它(步驟1104)。本地gJVM構(gòu)建線程(步驟1106),這可能需要創(chuàng)建各種線程管理對象并更新各種線程管理表。產(chǎn)生唯一線程標識符,并指派給新建立的線程(步驟1108)。然后,本地gJVM分配線程本地堆陣(步驟1110),在線程本地堆陣內(nèi)創(chuàng)建或劃分對象組(步驟1112),依據(jù)實現(xiàn)方式,該過程優(yōu)選情況下存儲線程相關(guān)的對象。通過更新相應(yīng)的管理表,將新創(chuàng)建的對象組標識符與新構(gòu)建的線程關(guān)聯(lián)(步驟1114)。
然后,本地gJVM向主要gJVM發(fā)送改變對象組的遷移狀態(tài)的請求從表示正在啟動狀態(tài)的值(這是在請求新對象組標識符時由主要gJVM設(shè)置的)改變?yōu)楸硎痉€(wěn)定狀態(tài)的值(步驟1116)。然后,本地gJVM從主要gJVM接收遷移狀態(tài)改變確認(步驟1118)。然后,本地gJVM將線程構(gòu)建的響應(yīng)(可能包含線程標識符及其他與線程相關(guān)的信息)返回到發(fā)出請求的應(yīng)用程序(步驟1120),從而結(jié)束該過程。
啟用網(wǎng)格的虛擬機節(jié)點中的線程破壞現(xiàn)在參考圖12,該圖中的流程圖顯示了在群集化虛擬機上破壞線程的過程。過程開始時,本地gJVM在群集化虛擬機的控制下通過正在執(zhí)行的應(yīng)用程序執(zhí)行的相應(yīng)的API調(diào)用接收破壞線程的請求(步驟1202),雖然當本地gJVM決定,例如由于各種終止條件而主動地破壞線程時也可以執(zhí)行類似的過程。
假設(shè)與正在終止的線程關(guān)聯(lián)的對象組具有對其本身內(nèi)的對象的外部/遠程/外來引用,那么,對象組需要保留,即使最初是創(chuàng)建對象組的原因的線程現(xiàn)在正在被終止或破壞。因此,本地gJVM以相應(yīng)的方式將正在終止的線程的線程標識符與每一個關(guān)聯(lián)的對象組分離(步驟1204),這可以包括更新各種線程管理表和對象組管理表(步驟1206)。在必要時,依據(jù)本地gJVM中的存儲器分配方法,對象組可能需要從線程本地堆陣移到本地gJVM內(nèi)的普通堆陣(步驟1208)。常??赡軙羞@樣的情況終止線程將會導(dǎo)致其幾乎所有的對象被回收;在另一個實施例中,由于遠程可引用而保留的對象可以移到主全局對象組中。
然后,例如通過破壞用于控制線程的線程相關(guān)的管理對象來破壞線程(步驟1210)。然后,將線程破壞操作的響應(yīng)返回到發(fā)出請求的應(yīng)用程序(步驟1212),從而結(jié)束該過程。
啟用網(wǎng)格的虛擬機節(jié)點中的對象分配現(xiàn)在參考圖13,該圖中的流程圖顯示了在群集化虛擬機上構(gòu)建對象的過程。過程開始時,本地gJVM節(jié)點在群集化虛擬機的控制下通過正在執(zhí)行的應(yīng)用程序執(zhí)行的相應(yīng)的API調(diào)用接收構(gòu)建對象的請求(步驟1302),雖然當本地gJVM判斷主動地創(chuàng)建線程時也可以執(zhí)行類似的過程。確定發(fā)出請求的線程的線程標識符(步驟1304),檢索與發(fā)出請求的線程關(guān)聯(lián)的對象組的對象組信息(步驟1306)。然后,本地gJVM分配發(fā)出請求的線程的某一個對象組中的對象(步驟1308),并產(chǎn)生新分配的對象的對象標識符并指派給對象(步驟1310)。創(chuàng)建新創(chuàng)建的對象的對象引用/句柄(步驟1312),這可能包含對象組標識符和對象標識符,具體取決于實現(xiàn)對象引用的方式。然后,將對象引用/句柄返回到發(fā)出請求的線程(步驟1314),從而結(jié)束該過程。
啟用網(wǎng)格的虛擬機節(jié)點中的對象引用現(xiàn)在參考圖14,該圖中的流程圖顯示了在群集化虛擬機上處理對對象的訪問的過程。過程從本地gJVM通過對象句柄截取訪問或引用對象的嘗試開始(步驟1402)。本地gJVM從對象句柄檢索對象組標識符(步驟1404),并例如,通過查詢對象組管理表來判斷標識對象組是本地管理的還是遠程管理的(步驟1406)。如果對象是本地存儲的,那么本地gJVM獲取指向相應(yīng)的線程本地堆陣的指針(步驟1408),并使用對象標識符訪問線程本地堆陣中的對象(步驟1410)。
如果對象是遠程存儲的,那么,本地gJVM獲取對象所在的對象組的遠程gJVM節(jié)點的標識符(步驟1412)。從例如gJVM注冊表的本地副本檢索遠程gJVM的IP地址和端口ID。然后,本地gJVM將對象訪問請求發(fā)送到遠程gJVM(步驟1416),從而結(jié)束該過程。
對象組從啟用網(wǎng)格的虛擬機節(jié)點的遷移現(xiàn)在參考圖15,該圖中的流程圖顯示了在本地群集化虛擬機上將對象組遷移到遠程群集化虛擬機的過程。過程開始時,本地gJVM節(jié)點準備將對象組從本地gJVM節(jié)點遷移到遠程gJVM節(jié)點(步驟1502),這可能需要將請求消息發(fā)送到遠程gJVM以遷移對象組。此準備遷移對象組的操作可能由于各種條件的結(jié)果而發(fā)生,關(guān)于這一點,下面將進一步地詳細描述。例如,如參考圖19所描述的,在停止gJVM節(jié)點之前,gJVM節(jié)點內(nèi)的任何對象組都將遷移到具有g(shù)JVM群集的其他gJVM節(jié)點。
本地gJVM向主要gJVM發(fā)送將遷移對象組的遷移狀態(tài)從穩(wěn)定改變?yōu)檎谶w移的請求(步驟1504),在此之后,本地gJVM從主要gJVM接收遷移狀態(tài)改變確認(步驟1506)。然后,本地gJVM平化或序列化遷移對象組中的每一個對象(步驟1508),并以某種方式將平化或序列化的對象從本地gJVM推向遠程gJVM,以便對象仍與對象組關(guān)聯(lián)(步驟1510),在此之后,本地gJVM從遠程gJVM接收確認(步驟1512)。然后,本地gJVM破壞剛剛移動的對象組的本地gJVM內(nèi)的對象組和/或堆陣(步驟1514),同時還清除或更新本地對象組表中的對象組項以及本地gJVM節(jié)點內(nèi)的需要清除或更新的任何其他表或數(shù)據(jù)庫項(步驟1516),因為對象組現(xiàn)在位于不同的gJVM節(jié)點內(nèi),從而結(jié)束該過程。
對象組向啟用網(wǎng)格的虛擬機的遷移現(xiàn)在參考圖16,該圖中的流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機接受對象組的遷移的過程。圖16所示的過程應(yīng)該被視為圖15所示的過程的補充;圖15中的本地gJVM和遠程gJVM是圖16中的遠程gJVM和本地gJVM,分別顛倒了它們的角色。
過程開始時,本地gJVM接收將對象組從遠程gJVM遷移到本地gJVM的請求(步驟1602),在此之后,本地gJVM分配線程本地堆陣或其他相應(yīng)的類型的堆陣(步驟1604),并從遠程gJVM接收對象組中的平化或序列化的對象(步驟1606)。本地gJVM將對象讀取或膨脹到本地gJVM內(nèi)的所選擇的位置(步驟1608),并在必要時(例如,如果線程與對象組一起遷移)將接收到的對象組與線程關(guān)聯(lián)(步驟1610)。然后,本地gJVM執(zhí)行用于管理新接收到的對象組的相應(yīng)的管理任務(wù),如在本地對象組表中創(chuàng)建對象組項(步驟1612)。然后,本地gJVM向主要gJVM發(fā)送將遷移對象組的遷移狀態(tài)從正在遷移改變?yōu)榉€(wěn)定的請求(步驟1614),在此之后,本地gJVM從主要gJVM接收遷移狀態(tài)改變確認(步驟1616)。然后,本地gJVM向遠程gJVM發(fā)送確認消息,表示對象組遷移完成(步驟1618),從而結(jié)束該過程。
線程從啟用網(wǎng)格的虛擬機中遷移現(xiàn)在參考圖17,該圖中的流程圖顯示了在本地群集化虛擬機上將線程遷移到遠程群集化虛擬機的過程。過程開始時,本地gJVM節(jié)點準備將線程從本地gJVM節(jié)點遷移到遠程gJVM節(jié)點(步驟1702),這可能需要將請求消息發(fā)送到遠程gJVM以遷移線程。此準備遷移線程的操作可能由于各種條件的結(jié)果而發(fā)生,關(guān)于這一點,下面將進一步地詳細描述。本地gJVM將線程管理信息從本地gJVM推向遠程gJVM(步驟1704);線程管理信息可以包括本地gJVM節(jié)點內(nèi)的本地線程管理表中的信息,在此之后,本地gJVM從遠程gJVM接收確認(步驟1706)。然后,本地gJVM根據(jù)需要更新本地線程管理表,以反映線程已經(jīng)移到不同gJVM節(jié)點的事實(步驟1708),從而結(jié)束該過程。
線程向啟用網(wǎng)格的虛擬機中遷移現(xiàn)在參考圖18,該圖中的流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機接受線程的遷移的過程。圖18所示的過程應(yīng)該被視為圖17所示的過程的補充;圖17中的本地gJVM和遠程gJVM是圖18中的遠程gJVM和本地gJVM,分別顛倒了它們的角色。
過程開始時,本地gJVM接收將線程從遠程gJVM遷移到本地gJVM的請求(步驟1802),在此之后,本地gJVM從遠程gJVM接收線程的線程管理信息(步驟1804)。然后,本地gJVM執(zhí)行用于管理新接收到的線程的相應(yīng)的管理任務(wù),如更新本地線程管理表(步驟1806)。然后,本地gJVM向遠程gJVM發(fā)送確認消息,表示線程遷移完成(步驟1808),從而結(jié)束該過程。
關(guān)閉啟用網(wǎng)格的虛擬機現(xiàn)在參考圖19,該圖中的流程圖顯示了在本地群集化虛擬機上對群集化虛擬機執(zhí)行關(guān)閉操作的過程。過程從判斷本地gJVM需要執(zhí)行關(guān)閉操作開始(步驟1902)。關(guān)閉操作可以是由于種種原因在本地gJVM節(jié)點內(nèi)判斷自我終止的結(jié)果;或者,關(guān)閉gJVM節(jié)點的判斷可以由主要gJVM節(jié)點、由管理實用程序、由管理命令或由某些其他機制來控制。本地gJVM節(jié)點向主要gJVM節(jié)點發(fā)送改變本地gJVM節(jié)點的運行狀態(tài)的請求從表示運行狀態(tài)的值改變?yōu)楸硎就V範顟B(tài)的值(步驟1904),在此之后,本地gJVM節(jié)點從主要gJVM接收確認消息(步驟1906)。然后,本地gJVM開始將其所有線程遷移到其他gJVM節(jié)點(步驟1908),同時,還將其所有對象組遷移到其他gJVM節(jié)點(步驟1910)。如下面所詳細討論的,gJVM節(jié)點可以根據(jù)有關(guān)gJVM群集內(nèi)的其他gJVM節(jié)點性能特征的信息執(zhí)行遷移操作。然后,本地gJVM節(jié)點向主要gJVM節(jié)點發(fā)送改變本地gJVM節(jié)點的運行狀態(tài)的請求從表示正在停止狀態(tài)的值改變?yōu)楸硎疽呀?jīng)停止狀態(tài)的值(步驟1912),在此之后,本地gJVM節(jié)點從主要gJVM接收確認消息(步驟1914),從而結(jié)束該過程。
如上所述,主要節(jié)點可以將其職責(zé)委派或轉(zhuǎn)交給非主要節(jié)點,以便可以在系統(tǒng)啟動之后將主要節(jié)點關(guān)閉后進行維護或達到其他目的。如果主要節(jié)點開始關(guān)閉過程,則主要節(jié)點可能通過請求/響應(yīng)機制選擇非主要節(jié)點以充當新委派主要節(jié)點。如此,主要節(jié)點執(zhí)行更多的在主要節(jié)點處于停止狀態(tài)期間沒有由非主要節(jié)點執(zhí)行的操作。在委派操作之后,新委派的主要節(jié)點可以將其作為虛擬機群集的主要節(jié)點的新身份廣播到虛擬機群集內(nèi)的其他非主要節(jié)點,這將相應(yīng)地更新它們的信息數(shù)據(jù)結(jié)構(gòu)。
啟用網(wǎng)格的虛擬機執(zhí)行的性能信息收集現(xiàn)在參考圖20,該圖中的流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機收集負載或性能信息的過程。圖20所示的過程以迭代的方式對所有已知的遠程gJVM節(jié)點執(zhí)行操作。因此,過程開始時,本地gJVM節(jié)點從gJVM注冊表的本地副本獲取有關(guān)迭代循環(huán)內(nèi)還沒有處理的下一個遠程gJVM節(jié)點的信息(步驟2002)。然后,本地gJVM向標識的遠程gJVM節(jié)點發(fā)送要求其負載信息的請求消息(步驟2004),在此之后,本地gJVM接收包含遠程gJVM節(jié)點的負載信息的響應(yīng)消息(步驟2006);信息可以使用下面參考圖22描述的過程存儲在本地表或數(shù)據(jù)庫內(nèi),以便以后進行分析。然后,本地gJVM節(jié)點檢查在本地gJVM注冊表內(nèi)是否存在未處理的gJVM節(jié)點(步驟2008)。如果存在,那么過程返回步驟2002,以處理另一個遠程gJVM節(jié)點;如果沒有未處理的遠程gJVM節(jié)點,那么過程結(jié)束。
啟用網(wǎng)格的虛擬機執(zhí)行的性能信息收集現(xiàn)在參考圖21,該圖中的流程圖顯示了在本地群集化虛擬機上響應(yīng)來自群集化虛擬機的對本地群集化虛擬機的當前負載或性能信息的請求的過程。圖21所示的過程應(yīng)該被視為圖20所示的過程的補充;圖20中的本地gJVM和遠程gJVM是圖21中的遠程gJVM和本地gJVM,分別顛倒了它們的角色。過程開始時,本地gJVM接收本地gJVM和/或本地設(shè)備上的負載信息的請求消息(步驟2102)。例如,負載信息可以包括表示CPU使用率、存儲器使用率的值,本地gJVM節(jié)點在其上面運行的數(shù)據(jù)處理設(shè)備的其他硬件、軟件或計算資源使用率信息,gJVM內(nèi)或由gJVM控制的資源的計算資源使用率信息,及其他信息。然后,本地gJVM發(fā)送包含請求的負載信息的響應(yīng)消息(步驟2104),從而結(jié)束該過程。
啟用網(wǎng)格的虛擬機節(jié)點之間的負載平衡操作現(xiàn)在參考圖22,該圖中的流程圖顯示了本地群集化虛擬機上的根據(jù)負載或性能信息確定將線程和/或?qū)ο蠼M從本地群集化虛擬機遷移到遠程群集化虛擬機的過程。過程開始時,本地gJVM節(jié)點判斷是否開始負載平衡操作(步驟2202);如果適當,本地gJVM節(jié)點獲取或檢查其自己的負載信息(步驟2204)。本地gJVM還使用上文參考圖20和圖21所描述的過程從gJVM群集內(nèi)的其他gJVM節(jié)點獲取負載信息(步驟2206),雖然只有在已經(jīng)作出啟動負載平衡操作的判斷之后才可以從其他gJVM節(jié)點收集負載信息。
負載平衡操作可以這樣執(zhí)行,以便確保由執(zhí)行群集內(nèi)的各種應(yīng)用程序所引起的工作負荷在整個gJVM群集中進行分布。負載平衡操作可以是由于在本地gJVM節(jié)點內(nèi)根據(jù)由gJVM群集內(nèi)的所有g(shù)JVM節(jié)點所使用的算法判斷啟動負載平衡操作而進行的;或者,執(zhí)行負載平衡操作的判斷可以由主要gJVM節(jié)點、由管理實用程序、由管理命令或由某些其他機制來控制。例如,本地gJVM節(jié)點可以在它已經(jīng)構(gòu)建線程并準備分派線程之后執(zhí)行負載平衡操作;或者,為節(jié)省計算資源,可以定期執(zhí)行負載平衡操作,例如,在每隔十個新建立的線程之后。
然后,本地gJVM節(jié)點開始評估其負載信息以檢查本地gJVM節(jié)點上的某些資源是否已經(jīng)超過可配置的閾值,例如,如群集特定的上下文參數(shù)所指出的。在圖22所示的示例中,執(zhí)行兩次評估;所執(zhí)行的評估的數(shù)量可以取決于負載平衡算法、可用的負載信息或某些其他因素。
就本地gJVM節(jié)點的CPU負載值是否超過CPU負載閾值作出判斷(步驟2208);如果沒有,那么過程轉(zhuǎn)到步驟2214。如果本地gJVM節(jié)點的CPU負載值超過可配置的CPU負載閾值,那么,本地gJVM節(jié)點就通過分析以前從遠程gJVM節(jié)點收集的相對于可配置的負載閾值的負載信息,選擇具有可用的CPU資源的遠程gJVM節(jié)點(步驟2210)。然后,本地gJVM節(jié)點使用上文參考圖17和圖18所描述的過程開始遷移操作,以將線程從本地gJVM節(jié)點移動到一個或多個所選擇的遠程gJVM節(jié)點(步驟2212)。
然后,就本地gJVM節(jié)點的存儲器負載值是否超過存儲器負載閾值作出判斷(步驟2214);如果沒有,那么,過程就結(jié)束。如果本地gJVM節(jié)點的存儲器負載值超過可配置的存儲器負載閾值,那么,本地gJVM節(jié)點就通過分析以前從遠程gJVM節(jié)點收集的相對于可配置的負載閾值的負載信息,選擇具有可用存儲器資源的遠程gJVM節(jié)點(步驟2216)。然后,本地gJVM節(jié)點使用上文參考圖15和圖16所描述的過程開始遷移操作,以將對象組從本地gJVM節(jié)點移動到一個或多個所選擇的遠程gJVM節(jié)點(步驟2218),從而結(jié)束該過程。
邏輯虛擬機上的多線程應(yīng)用程序現(xiàn)在參考圖23,該圖中的方框圖描述了通過多個設(shè)備橫跨單一邏輯虛擬機中的多個啟用網(wǎng)格的虛擬機的單個應(yīng)用程序映像的執(zhí)行。機器2302-2306支持邏輯虛擬機2308和邏輯虛擬機2310。
邏輯虛擬機2308只包括由主要gJVM節(jié)點2312所代表的單個節(jié)點,該節(jié)點可以通過指定“GRID_B”為邏輯虛擬機2308的群集名稱的命令行接口來進行調(diào)用。邏輯虛擬機2308在單個設(shè)備(即,機器2306)上得到支持。
相反,邏輯虛擬機2310包括由多個設(shè)備(即,機器2302-2306)支持的多個gJVM節(jié)點2314-2320;機器2302正巧同時支持兩個gJVM節(jié)點2314和2320。虛擬機2314-2320作為單個邏輯虛擬機而進行交互操作。在此示例中,虛擬機2314-2320是使用Java技術(shù)來實現(xiàn)的;因此,虛擬機2314-2320可以被描述為Java虛擬機。由于虛擬機2314-2320作為邏輯虛擬機嵌入了以類似于網(wǎng)格的方式進行交互操作的功能,虛擬機2314-2320可以被描述為啟用網(wǎng)格的Java虛擬機(gJVM),其中每一個gJVM都是邏輯gJVM 2310內(nèi)的節(jié)點。
每一個gJVM節(jié)點2314-2320都可以通過指定“GRID_A”為邏輯gJVM 2310的群集名稱的命令行接口來進行調(diào)用。節(jié)點2316-2320是非主要節(jié)點;gJVM 2314在啟動時被指定為主要節(jié)點,雖然它可以在稍后的時間點將其作為主要節(jié)點的狀態(tài)委派給邏輯gJVM 2310內(nèi)的另一個節(jié)點。在此示例中,節(jié)點2314-2320是同一個gJVM應(yīng)用程序的特有的實例。通過使用上文所描述的方法,gJVM節(jié)點2316-2320注冊到由主要gJVM節(jié)點2314進行管理的節(jié)點的群集/網(wǎng)格中;對對象的遠程引用和gJVM節(jié)點之間的協(xié)調(diào)是通過gJVM節(jié)點能夠建立的gJVM-gJVM(對等)通信鏈路提供的。
利用本發(fā)明,多個gJVM節(jié)點作為邏輯gJVM進行交互操作,以便在一個gJVM節(jié)點上啟動的應(yīng)用程序隨后可以以橫跨多個gJVM節(jié)點的方式執(zhí)行。在圖23中的示例中,包括主線程2322的應(yīng)用程序已經(jīng)在gJVM節(jié)點2318上啟動,其其中一個輔助線程2324也在gJVM節(jié)點2318上執(zhí)行。此外,同一個應(yīng)用程序的輔助線程2326-2332也在邏輯gJVM 2310內(nèi)的gJVM節(jié)點2314和2316上執(zhí)行。
本發(fā)明允許節(jié)點2314-2320共享在邏輯gJVM 2310上執(zhí)行的Java應(yīng)用程序2334的工作負荷,而不需要Java應(yīng)用程序2334偏離標準Java應(yīng)用程序模型;換句話說,Java應(yīng)用程序2334不需要任何專有的功能,而gJVM節(jié)點2314-2320不需要專有的應(yīng)用程序代理來跨多個JVM代表Java應(yīng)用程序2334來進行操作。利用本發(fā)明,gJVM節(jié)點2314嵌入了以類似于網(wǎng)格的方式進行交互操作的功能,以執(zhí)行Java應(yīng)用程序。
對象組2336-2346在整個邏輯gJVM 2310中進行分布。任何給定應(yīng)用程序線程都可以引用多個對象組中存在的對象,不管相同應(yīng)用程序內(nèi)的應(yīng)用程序線程或另一個線程是否建立或分配了那些對象組。因此,給定線程可以引用本地對象組中的對象或遠程對象組中的對象,不管對象組是否與本地gJVM節(jié)點或遠程gJVM節(jié)點上的給定線程或另一個線程關(guān)聯(lián)。事實上,對象組可以不與任何現(xiàn)有的線程關(guān)聯(lián),或者對象可以包含在本地gJVM節(jié)點或遠程gJVM節(jié)點上的所謂的全局對象組內(nèi)。在圖23所示的示例中,顯示的線程2330引用了本地gJVM節(jié)點2314內(nèi)的對象組2336和2346中的對象,同時也引用了遠程gJVM節(jié)點2316內(nèi)的對象組2338中的對象。
參考上文提供的對本發(fā)明的詳細描述,本發(fā)明的優(yōu)點是顯而易見的。在虛擬機上執(zhí)行的應(yīng)用程序可以在多個虛擬機上以類似于網(wǎng)格的方式運行,從而可使計算資源作為類似于實用程序的服務(wù)提供,以便進行補償。當數(shù)據(jù)處理系統(tǒng)和設(shè)備關(guān)閉時,那些系統(tǒng)和設(shè)備上的可群集化虛擬機可以停止;那些系統(tǒng)和設(shè)備上的線程和對象可以遷移到其他系統(tǒng)和設(shè)備,同時虛擬機群集允許任何應(yīng)用程序繼續(xù)運行,雖然在不同的系統(tǒng)和設(shè)備集上。
值得注意的是,盡管是在完全運轉(zhuǎn)的數(shù)據(jù)處理系統(tǒng)的上下文中描述本發(fā)明的,那些本領(lǐng)域普通技術(shù)人員將認識到,本發(fā)明的進程能夠以存儲了指令的計算機可讀的介質(zhì)的形式和各種各樣的形式進行分發(fā),不管實際用于進行分發(fā)的承載信號的介質(zhì)的特定類型是什么。計算機可讀的介質(zhì)的示例包括諸如EPROM、ROM、磁帶、紙張、軟盤、硬盤驅(qū)動器、RAM和CD-ROM之類的介質(zhì),和諸如數(shù)字和模擬通信鏈路之類的傳輸類型的介質(zhì)。
方法一般來說是產(chǎn)生所希望的結(jié)果的步驟的首尾一致的序列。這些步驟要求對物理量進行物理操作。通常,盡管不一定,這些量呈現(xiàn)能夠存儲、轉(zhuǎn)移、合成、比較以及以其他方式進行操作的電的或磁性信號的形式。有時,主要是由于通用的原因,將這些信號稱為位、值、參數(shù)、項目、元素、對象、符號、字符、術(shù)語、數(shù)字等等是很方便的。然而,應(yīng)該注意,所有這些術(shù)語和類似的術(shù)語都與相應(yīng)的物理量關(guān)聯(lián),只是應(yīng)用于這些量的方便的標記。
本發(fā)明的描述只作說明,而不是詳盡的說明或只限于所說明的實施例。那些本領(lǐng)域普通技術(shù)人員將認識到,可以進行許多修改。所選擇的實施例只是為了最好地說明本發(fā)明的原理以及其實際應(yīng)用,并使精通本技術(shù)的其他人理解本發(fā)明,以便實現(xiàn)帶有各種修改的各種實施例,只要可以適合于其他預(yù)期的用途。
權(quán)利要求
1.一種操作數(shù)據(jù)處理系統(tǒng)內(nèi)的虛擬機的方法,該方法包括下列計算機實現(xiàn)的步驟將對象存儲在由所述虛擬機進行管理的存儲器中,所述虛擬機在數(shù)據(jù)處理系統(tǒng)內(nèi)的設(shè)備上運行;將對象與對象組內(nèi)的多個對象關(guān)聯(lián);將對象組與所述虛擬機關(guān)聯(lián),其中,所述虛擬機包括與虛擬機群集中的其他虛擬機進行交互操作的功能,其中,虛擬機群集中的每一個虛擬機充當虛擬機群集內(nèi)的節(jié)點;對虛擬機群集的每一個虛擬機內(nèi)的多個對象組進行管理;以及允許對象組從所述虛擬機移動到虛擬機群集中的不同的虛擬機。
2.根據(jù)權(quán)利要求1所述的方法,進一步包括將對象組與所述虛擬機解除關(guān)聯(lián);將對象組移動到虛擬機群集中的不同的虛擬機中;以及響應(yīng)將對象組移動到不同的虛擬機,將對象組與所述不同的虛擬機關(guān)聯(lián)。
3.根據(jù)權(quán)利要求1所述的方法,進一步包括與虛擬機群集中的每一個虛擬機共享關(guān)于多個對象組的位置的信息。
4.根據(jù)權(quán)利要求1所述的方法,進一步包括將對象組和不同的對象組與由所述虛擬機進行管理的線程關(guān)聯(lián)。
5.根據(jù)權(quán)利要求4所述的方法,進一步包括將對象組和不同的對象組存儲在與線程關(guān)聯(lián)的線程本地堆陣中。
6.根據(jù)權(quán)利要求4所述的方法,進一步包括將對象組存儲在與線程關(guān)聯(lián)的第一線程本地堆陣中;以及將不同的對象組存儲在與線程關(guān)聯(lián)的第二線程本地堆陣中。
7.根據(jù)權(quán)利要求4所述的方法,進一步包括將對象組與線程解除關(guān)聯(lián);終止線程;以及響應(yīng)終止線程,在對象組和由所述虛擬機進行管理的線程之間沒有關(guān)聯(lián)的情況下,對對象組進行管理。
8.根據(jù)權(quán)利要求1所述的方法,進一步包括為對象創(chuàng)建獨立于對象的位置的對象句柄。
9.根據(jù)權(quán)利要求8所述的方法,進一步包括為對象生成對象句柄;將對象與之關(guān)聯(lián)的對象組的組標識符存儲在對象句柄中,其中,組標識符在虛擬機群集內(nèi)是唯一的;以及將對象的對象標識符存儲在對象句柄中,其中,對象標識符在對象與之關(guān)聯(lián)的對象組內(nèi)是唯一的。
10.根據(jù)權(quán)利要求1所述的方法,進一步包括為對象創(chuàng)建獨立于對象的位置并且獨立于對象與之關(guān)聯(lián)的對象組的位置的對象引用。
11.根據(jù)權(quán)利要求1所述的方法,進一步包括當對象位于所述虛擬機中時,為對象創(chuàng)建第一對象引用;將對象與之關(guān)聯(lián)的對象組移動到不同的虛擬機中;以及當對象位于不同的虛擬機中時,為對象創(chuàng)建第二對象引用,其中,第一對象引用和第二對象引用相同。
12.計算機可讀的介質(zhì)中的供在數(shù)據(jù)處理系統(tǒng)中使用的用于操作虛擬機的計算機程序產(chǎn)品,該計算機程序產(chǎn)品包括用于將對象存儲在由所述虛擬機進行管理的存儲器中的裝置,所述虛擬機在數(shù)據(jù)處理系統(tǒng)內(nèi)的設(shè)備上運行;用于將對象與對象組內(nèi)的多個對象關(guān)聯(lián)的裝置;用于將對象組與所述虛擬機關(guān)聯(lián)的裝置,其中,所述虛擬機包括與虛擬機群集中的其他虛擬機進行交互操作的功能,其中,虛擬機群集中的每一個虛擬機充當虛擬機群集內(nèi)的節(jié)點;用于對虛擬機群集的每一個虛擬機內(nèi)的多個對象組進行管理的裝置;以及用于允許對象組從所述虛擬機移動到虛擬機群集中的不同的虛擬機的裝置。
13.根據(jù)權(quán)利要求12所述的計算機程序產(chǎn)品,進一步包括用于將對象組與所述虛擬機解除關(guān)聯(lián)的裝置;用于將對象組移動到虛擬機群集中的不同的虛擬機中的裝置;以及用于響應(yīng)將對象組移動到不同的虛擬機,將對象組與所述不同的虛擬機關(guān)聯(lián)的裝置。
14.根據(jù)權(quán)利要求12所述的計算機程序產(chǎn)品,進一步包括用于與虛擬機群集中的每一個虛擬機共享關(guān)于多個對象組的位置的信息的裝置。
15.根據(jù)權(quán)利要求12所述的計算機程序產(chǎn)品,進一步包括用于將對象組和不同的對象組與由所述虛擬機進行管理的線程關(guān)聯(lián)的裝置。
16.根據(jù)權(quán)利要求15所述的計算機程序產(chǎn)品,進一步包括用于將對象組和不同的對象組存儲在與線程關(guān)聯(lián)的線程本地堆陣中的裝置。
17.根據(jù)權(quán)利要求15所述的計算機程序產(chǎn)品,進一步包括用于將對象組存儲在與線程關(guān)聯(lián)的第一線程本地堆陣中的裝置;以及用于將不同的對象組存儲在與線程關(guān)聯(lián)的第二線程本地堆陣中的裝置。
18.根據(jù)權(quán)利要求15所述的計算機程序產(chǎn)品,進一步包括用于將對象組與線程解除關(guān)聯(lián)的裝置;用于終止線程的裝置;以及用于響應(yīng)終止線程,在對象組和由所述虛擬機進行管理的線程之間沒有關(guān)聯(lián)的情況下,對對象組進行管理的裝置。
19.根據(jù)權(quán)利要求12所述的計算機程序產(chǎn)品,進一步包括用于為對象創(chuàng)建獨立于對象的位置的對象句柄的裝置。
20.根據(jù)權(quán)利要求19所述的計算機程序產(chǎn)品,進一步包括用于為對象生成對象句柄的裝置;用于將對象與之關(guān)聯(lián)的對象組的組標識符存儲在對象句柄中的裝置,其中,組標識符在虛擬機群集內(nèi)是唯一的;以及用于將對象的對象標識符存儲在對象句柄中的裝置,其中,對象標識符在對象與之關(guān)聯(lián)的對象組內(nèi)是唯一的。
21.根據(jù)權(quán)利要求12所述的計算機程序產(chǎn)品,進一步包括用于為對象創(chuàng)建獨立于對象的位置并且獨立于對象與之關(guān)聯(lián)的對象組的位置的對象引用的裝置。
22.根據(jù)權(quán)利要求12所述的計算機程序產(chǎn)品,進一步包括用于當對象位于所述虛擬機中時,為對象創(chuàng)建第一對象引用的裝置;用于將對象與之關(guān)聯(lián)的對象組移動到不同的虛擬機中的裝置;以及用于當對象位于不同的虛擬機中時,為對象創(chuàng)建第二對象引用的裝置,其中,第一對象引用和第二對象引用相同。
23.數(shù)據(jù)處理系統(tǒng)中的用于操作虛擬機的設(shè)備,該設(shè)備包括用于將對象存儲在由所述虛擬機進行管理的存儲器中的裝置,所述虛擬機在數(shù)據(jù)處理系統(tǒng)內(nèi)的設(shè)備上運行;用于將對象與對象組內(nèi)的多個對象關(guān)聯(lián)的裝置;用于將對象組與所述虛擬機關(guān)聯(lián)的裝置,其中,虛擬機包括與虛擬機群集中的其他虛擬機進行交互操作的功能,其中,虛擬機群集中的每一個虛擬機充當虛擬機群集內(nèi)的節(jié)點;用于對虛擬機群集的每一個虛擬機內(nèi)的多個對象組進行管理的裝置;以及用于允許對象組從所述虛擬機移動到虛擬機群集中的不同的虛擬機的裝置。
24.根據(jù)權(quán)利要求23所述的設(shè)備,進一步包括用于將對象組與所述虛擬機解除關(guān)聯(lián)的裝置;用于將對象組移動到虛擬機群集中的不同的虛擬機中的裝置;以及用于響應(yīng)將對象組移動到不同的虛擬機,將對象組與所述不同的虛擬機關(guān)聯(lián)的裝置。
25.根據(jù)權(quán)利要求23所述的設(shè)備,進一步包括用于與虛擬機群集中的每一個虛擬機共享關(guān)于多個對象組的位置的信息的裝置。
26.根據(jù)權(quán)利要求23所述的設(shè)備,進一步包括用于將對象組和不同的對象組與由所述虛擬機進行管理的線程關(guān)聯(lián)的裝置。
27.根據(jù)權(quán)利要求26所述的設(shè)備,進一步包括用于將對象組和不同的對象組存儲在與線程關(guān)聯(lián)的線程本地堆陣中的裝置。
28.根據(jù)權(quán)利要求26所述的設(shè)備,進一步包括用于將對象組存儲在與線程關(guān)聯(lián)的第一線程本地堆陣中的裝置;以及用于將不同的對象組存儲在與線程關(guān)聯(lián)的第二線程本地堆陣中的裝置。
29.根據(jù)權(quán)利要求26所述的設(shè)備,進一步包括用于將對象組與線程解除關(guān)聯(lián)的裝置;用于終止線程的裝置;以及用于響應(yīng)終止線程,在對象組和由所述虛擬機進行管理的線程之間沒有關(guān)聯(lián)的情況下,對對象組進行管理的裝置。
30.根據(jù)權(quán)利要求23所述的設(shè)備,進一步包括用于為對象創(chuàng)建獨立于對象的位置的對象句柄的裝置。
31.根據(jù)權(quán)利要求30所述的設(shè)備,進一步包括用于為對象生成對象句柄的裝置;用于將對象與之關(guān)聯(lián)的對象組的組標識符存儲在對象句柄中的裝置,其中,組標識符在虛擬機群集內(nèi)是唯一的;以及用于將對象的對象標識符存儲在對象句柄中的裝置,其中,對象標識符在對象與之關(guān)聯(lián)的對象組內(nèi)是唯一的。
32.根據(jù)權(quán)利要求23所述的設(shè)備,進一步包括用于為對象創(chuàng)建獨立于對象的位置并且獨立于對象與之關(guān)聯(lián)的對象組的位置的對象引用的裝置。
33.根據(jù)權(quán)利要求23所述的設(shè)備,進一步包括用于當對象位于所述虛擬機中時,為對象創(chuàng)建第一對象引用的裝置;用于將對象與之關(guān)聯(lián)的對象組移動到不同的虛擬機中的裝置;以及用于當對象位于不同的虛擬機中時,為對象創(chuàng)建第二對象引用的裝置,其中,第一對象引用和第二對象引用相同。
全文摘要
一種方法、設(shè)備、計算機程序產(chǎn)品以及數(shù)據(jù)處理系統(tǒng)給虛擬機的操作提供了嵌入的功能,用于與計算網(wǎng)絡(luò)中的其他虛擬機進行交互操作。多個虛擬機在數(shù)據(jù)處理系統(tǒng)內(nèi)的一個或多個設(shè)備上運行;多個虛擬機中的每一個虛擬機都包括以類似于網(wǎng)格的方式與虛擬機群集中的其他虛擬機進行交互操作和關(guān)聯(lián)的功能。虛擬機群集中的每一個虛擬機充當虛擬機群集內(nèi)的節(jié)點。虛擬機對與對象組相關(guān)聯(lián)的其對象進行管理,每一個虛擬機管理多個對象組。虛擬機共享信息,以便對象組可以在虛擬機群集中的虛擬機之間移動,從而允許虛擬機群集充當一個邏輯虛擬機。
文檔編號G06F9/46GK1906580SQ200480040746
公開日2007年1月31日 申請日期2004年10月26日 優(yōu)先權(quán)日2004年1月21日
發(fā)明者斯科特·J·布魯薩爾德, 劉英(音譯), 埃德瓦爾多·N·斯普林 申請人:國際商業(yè)機器公司