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