專利名稱:對象圖的復(fù)制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算,尤其涉及經(jīng)由通信網(wǎng)絡(luò)互連的多個計算機的同時操作。
背景技術(shù):
以本申請人的名義公布的、公布號為WO 2005/103926的國際專利申 請PCT/AU2005/000580 (代理所巻號為5027F-WO )(公布號為 2005-0262313的美國專利申請11/111,946與其對應(yīng))公開了被編寫成僅單計算機上執(zhí)行的應(yīng)用程序的不同部分如何能夠在多個計算機的對應(yīng)的 不同計算機上基本同時地操作。該同時操作到本申請的優(yōu)先權(quán)日為止尚未 在商業(yè)上使用。題目為"Computer Architecture Method of Operation for Multi-Computer Distributed Processing and Co-ordinated Memory and Asset Handling"的美國專利申請11/ 259885所對應(yīng)的國際專利申請 PCT/AU2005/001641 (代理所巻號為5027F-D1-WO ),以及本申請人名義下的、截至本申請的優(yōu)先權(quán)日未公布的國際專利申請 PCT/AU2006/000532 (代理所巻號為5027F-D2-WO )還揭示了更多的細 節(jié)。上述每一個在先申請的說明書內(nèi)容交叉引用全部結(jié)合在本i兌明書 中。簡要地說,上述專利說明書公開了被編寫成僅在單計算機上操作的至 少一個應(yīng)用程序能夠在每個均具有獨立的本地存儲器的若干計算機上被 同時操作。該程序的操作所需的存儲器位置在每個計算機的獨立的本地存 儲器中被復(fù)制。每次在應(yīng)用程序?qū)⑿聰?shù)據(jù)寫到任一復(fù)制的存儲器位置時, 傳輸該新數(shù)據(jù),并且將其存儲在每個計算機的每個對應(yīng)的存儲器位置。因 此,不考慮可能的傳輸延遲,每個計算機的本地存儲器與每個其它計算機的本地存儲器的內(nèi)容基;M目同,并且被更新以保持如此。由于所有應(yīng)用程 序通常讀取數(shù)據(jù)比它們產(chǎn)生待寫的新數(shù)據(jù)要頻繁得多,所以上述方案使得 能夠在計算iUL方面實現(xiàn)較大的優(yōu)勢。尤其是,該策略使得通過商用通信 網(wǎng)絡(luò)互連的兩個或更多商用計算機能夠同時操作,從而在被編寫成僅在單計算機上執(zhí)行的應(yīng)用程序下運行。包括JAVA和MICROSOFT.NET的高級語言具有兩種存儲器位置或 字段。這兩種中的第一種是所謂的"原始"字段,其包含字母數(shù)字數(shù)據(jù), 如數(shù)字或字母。該內(nèi)容僅僅通過被拷貝到另一個原始字段即可容易地被復(fù) 制,第二種字^通常被稱為引用字段的"非原始"字段,其實質(zhì)上包含 指向另一個存儲器位置或另一個對象的"指針"。編程語言使用一個或多 個指針來將計算機的操作重定向到所引用的地址。如果指針被絕對地拷 貝,則它們將指向其它機器中相同的存儲器位置,但這些位置可能具有相 同的存儲器內(nèi)容,或可能不具有相同的存儲器內(nèi)容。本發(fā)明的目的是希望在多計算機系統(tǒng)中使非原始字段的復(fù)制更容易, 從而允許盡可能接i^本上相同的存儲器結(jié)構(gòu)和內(nèi)容的期望目標。發(fā)明內(nèi)容根據(jù)本發(fā)明的第 一方面,公開一種在多計算機環(huán)境中對被復(fù)制對象的 非原始字段進行復(fù)制的方法,在所述多計算機環(huán)境中,至少一個應(yīng)用程序 的不同部分在通過通信網(wǎng)絡(luò)互連的多個計算機的不同計算機上同時執(zhí)行, 所述方法包括步驟(i) 創(chuàng)建對應(yīng)表,并針對所述多個計算機的任一個計算機中存在的每個 對象,使所^t應(yīng)表中的表項與到所^j"象的每個引用相對應(yīng);(ii) 在每個計算機中復(fù)制所述對應(yīng)表,或者允it^個計算機訪問存在于 服務(wù)器計算機中的針對全部機器的單個對應(yīng)表的對應(yīng)部分,在所述對應(yīng)表 中的每個所述表項包含指向由所述一個機器的對象所引用的本地存儲器 對象的本地指針;并(iii) 使每個所述其它機器指定對應(yīng)的非原始字段和本地對象,并在所述 表中輸入相應(yīng)本地存儲器對象的相應(yīng)本地指針。根據(jù)本發(fā)明的第二方面,公開一種在通過通信網(wǎng)絡(luò)互連的多個計算機 的不同計算機上同時執(zhí)行至少一個應(yīng)用程序的不同部分的多計算機系統(tǒng),其中,針對在所述計算機中的任一個計算機中創(chuàng)建的每個非原始字段,在 全部所述計算機可訪問的或者每個所述計算機中所復(fù)制的對應(yīng)表中存在 對應(yīng)的表項,所述表項包含指向由所述一個計算機的所述非原始字段所引 用的本地存儲器對象的本地指針,且每個其它所述計算機指定對應(yīng)的非原 始字段和本地對象,且在所述對應(yīng)表中輸入對應(yīng)的本地存儲器對象的對應(yīng)本地指針。根據(jù)本發(fā)明的第三方面,公開通itit信網(wǎng)絡(luò)互連并且用于保證執(zhí)行上 述方法的多個計算機。根據(jù)本發(fā)明的第四方面,公開一種計算機程序產(chǎn)品,其包括存儲在存 儲介質(zhì)中且用于使多個計算機執(zhí)行上述方法的程序指令集。根據(jù)本發(fā)明的第五方面,公開一種用于與至少一個其它計算機*, 以便執(zhí)行上述方法或形成上述計算機系統(tǒng)的單個計算機。
圖1A示意性示出被布置成運行JAVA代碼從而構(gòu)成單個JAVA虛擬 機的現(xiàn)有技術(shù)計算機;圖1B是類似于圖1A的圖,但是圖解了代碼的初始加載;圖1C圖解了每個均為JAVA虛擬機的多個計算機形成多計算機系統(tǒng) 的互連;圖2示意性圖解了 "n"個運行應(yīng)用的計算機,至少一個附加的服務(wù) 器機器X作為服務(wù)器與這些計算機連接;圖3是多個機器中的存儲器位置的示意圖,其示出包括對象和字段的 存儲器位置;圖4是與圖3相似的存儲器圖,但示出了引用新對象的引用字段的創(chuàng)建;圖5是示出成功復(fù)制新建的引用字段的存儲器圖;圖6是列出對應(yīng)的引用字段的表;圖7是示出又一引用字段的創(chuàng)建的存儲器圖;圖8是示出成功復(fù)制又一引用字段的存儲器圖;圖9是在將相同應(yīng)用程序加載在網(wǎng)絡(luò)中每個機器上期間所遵循的過 程的流程圖;圖IO是示出與圖9的過程相似的經(jīng)修改過程的ill^呈圖;圖11是利用存儲器更新的第一實施例,在圖8的機器上執(zhí)行的多線 程處理的示意性圖示;圖12是與圖ll相似的示意性圖示,但示出了可替選實施例;以及 圖13示出用于圖8的計算機的多線程存儲器更新。
具體實施方式
各實施例將參照JAVA語言進行描述,然而,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理 解,本發(fā)明不局限于該語言,特別地,可用于其它語言(包含過程性語言、 聲明性語言和面向?qū)ο笳Z言),包含MICROSOFT.NET平臺和體系結(jié)構(gòu) (Visual Basic、 Visual C和Visual C++,以及Visual C#)、 FORTRAN、 C、 C++、 COBOL、 BASIC等等?,F(xiàn)有技術(shù)中已知的是提供通過建立圖1A中所示的虛擬機來利用特定 語言的應(yīng)用程序的單計算機或機器(由各制造商中的任何一個所生產(chǎn),并 且具有以各種不同語言中的任何一種語言操作的操作系統(tǒng)(或者等同控制 軟件或其它機制))。圖1A的代碼和數(shù)據(jù)以及虛擬機配置或方案采取用JAVA語言編寫并 且在JAVA虛擬機61內(nèi)執(zhí)行的應(yīng)用代碼50的形式。因而在應(yīng)用的期望語 言為JAVA語言的情況下,使用JAVA虛擬機,其中JAVA虛擬機能夠運 行JAVA形式的代碼,而不論機器制造商和計算機或機器的內(nèi)部細節(jié)如 何。有關(guān)更多細節(jié),參見由美國Sun Microsystems >公司的T. Lindholm和 F.Yellin所著的"The JAVA Virtual Machine Specification"第二版,其通 過引用結(jié)合于此。才艮據(jù)本發(fā)明的實施例,通過提供如圖1B所示被方4更地稱為"分布式 運行時"或"分布式運行時系統(tǒng)"DRT 71的附加設(shè)備,改進圖IA的常 規(guī)技術(shù)方案。圖IB和1C中,通過由箭頭75或75A或75B所示的加載過程,應(yīng) 用代碼50被加載到與分布式運行時系統(tǒng)71合作的JAVA虛擬機Ml、M2........ Mn上。如此處所使用的,術(shù)語"分布式運行時"和"分布式運行時系統(tǒng)"實質(zhì)上是同義的,并且通過闡述而不是限制,通常被理解成 包含支持在特定平臺上運行的、用特定語言編寫的軟件的庫代碼和進程。 此外,分布式運行時系統(tǒng)還可以包含支持在特定分布式計算環(huán)境內(nèi)運行 的、用特定語言編寫的軟件的庫代碼和進程。運行時系統(tǒng)(無論是否是分 布式運行時系統(tǒng))通常處理程序與操作系統(tǒng)之間的接口的細節(jié),例如系統(tǒng) 調(diào)用、程序啟動和終止、以及存儲器管理。為說明背景,常規(guī)的分布式計算環(huán)境(DCE)(其不提供本發(fā)明優(yōu)選實施例中所使用的本發(fā)明的分布式 運行時或分布式運行時系統(tǒng)71的能力)可以從開放軟件基金會得到。該 分布式計算環(huán)境(DCE )執(zhí)行一種針對在機器上運行的軟件的計算機到計 算機的通信形式,但是除其許多限制之外,其不能實現(xiàn)所期望的修改或通信操作。除其功能與操作之外,優(yōu)選的DRT 71協(xié)調(diào)多個機器Ml 、 M2........Mn之間的特定通信。此外,優(yōu)選的分布式運行時71在JAVA應(yīng)用50的 由箭頭75A或75B所示的在圖1C的每個JAVA虛擬機72或機器JVM#1 、JVM#2........ JVM弁n上的加載過程期間開始運行。根據(jù)此處所提供的描述應(yīng)當(dāng)理解,雖然許多示例和描述被提供成與JAVA語言和JAVA虛擬機 相關(guān),以使得讀者能了解具體例子的益處,但是本發(fā)明不局限于JAVA語 言或JAVA虛擬機,或者任何其他語言、虛擬機、機器或者操作環(huán)境。圖1C以改進形式示出了每個如圖IB所示的JAVA虛擬機的方案。 顯然,相同的應(yīng)用代碼50 ^載到每個機器Ml、 M2…Mn上。然而, 各機器M1、 M2…Mn之間的通信由箭頭83表示,并且雖然通it^U器硬 件物理上傳送,但是有利地被每個機器內(nèi)的各自01^71/1...71/11所控制。 因而,實際上這可以a念上理解成經(jīng)由網(wǎng)絡(luò)或其它通信銜洛53而相互 通信的DRT 71/1, ...71/n,而不是自身或彼此直接通信的機器Ml、 M2…Mn。所設(shè)想和包含的是機器M1、 ]\12...]\111或011171/1、 71/2...71/n 之間的這種直接通信,或者這樣的通信的組合。優(yōu)選的DRT71提供獨立 于傳送、協(xié)議和鏈接的通信。一個公共應(yīng)用程序或應(yīng)用代碼50,及其可執(zhí)行版本(可能具有修改) 在多個計算機或機器Ml、 M2…Mn上同時或并發(fā)執(zhí)行。應(yīng)用程序50被 編寫為在單機器或計算機上執(zhí)行(或者在模擬單計算機操作的上述專利申 請的多計算機系統(tǒng)上操作)。實質(zhì)上,改進的結(jié)構(gòu)是在每個單獨機器上復(fù) 制相同的存儲器結(jié)構(gòu)和內(nèi)容。術(shù)語"公共應(yīng)用程序,,應(yīng)被理解為是指被編寫成在單機器上操作的, 且在多個計算機或機器M1、 M2...Mn中的每一個上、或者可選地在所述 多個計算機或機器Ml、 M2...Mn的某個子集的每一個上全部或部分地加 載和/或執(zhí)行的應(yīng)用程序或應(yīng)用程序代碼。換句話說,具有以應(yīng)用程序代 碼50表示的公共應(yīng)用程序。其為單個拷貝,或每個均被單獨修改以生成 應(yīng)用程序或程序代碼的修改拷貝或版本的多個相同拷貝。于是每個拷貝或 實例被準備以在對應(yīng)的機器上執(zhí)行。在它們被修改之后,從它們執(zhí)行類似 的操作并且彼此一致且連貫地運行的意義上來說,它們是7>共的。應(yīng)當(dāng)理解,實現(xiàn)本發(fā)明的實施例的多個計算機、機器、信息設(shè)備等可以任選地連 接到或耦合到未實現(xiàn)本發(fā)明的實施例的其它計算機、機器、信息設(shè)備等。在每個機器上運行相同的應(yīng)用程序50 (例如并行合并排序、計算流 體動力學(xué)應(yīng)用或數(shù)據(jù)挖掘應(yīng)用),但是該應(yīng)用程序的可執(zhí)行代碼根據(jù)需要 在每個機器修改,使得每個機器上的每個執(zhí)行實例(拷貝或復(fù)本)使其在 該特定機器上的本地操作與其它機器上的相應(yīng)實例(拷貝或復(fù)本)的操作 協(xié)調(diào),使得它們以一致、連貫和協(xié)調(diào)的方式一起工作,并且看起來l象應(yīng)用 的一個全局實例(即"元應(yīng)用")。相同或基;M目同的應(yīng)用代碼的各拷貝或復(fù)本,每個被加載到互操作且 相連接的機器或計算機中對應(yīng)的一個上。由于每個機器或計算機的特性可能不同,所以應(yīng)用代碼50可在加栽之前被修改、在加栽過程期間被修改、或者在加載過程之后被修改(雖然有一些缺點),以在每個機器上提供應(yīng)用 代碼的定制或修改。不同機器上的程序或應(yīng)用代碼之間的一些不同點可以是允許的,只要能夠保持本文所述的其它對互^Mt性、 一致性和連貫性的要求。在下文將會明白,機器M1、 M2...Mn中的每個機器,因而全部機 器M1、 1\12...]\111具有相同或基;^目同的應(yīng)用代碼50,其通常具有可以是 特定于機器的修改.在每個機器M1、 ]\12...]\111上的應(yīng)用代碼50 (或其相關(guān)部分)的加載 之前、加載期間、或執(zhí)行前的任何時候,每個應(yīng)用代碼50由對應(yīng)的修改 器(modifier) 51根據(jù)相同的規(guī)則(或基^+目同的規(guī)則,因為在每個修改 器51/1、 51/2...51/n內(nèi)允許小的優(yōu)化改變)來修改.機器M1、 M2...Mn中的每個機器與相同的(或基^t曰同或類似的) 修改器51 (在某些實施例中被實現(xiàn)為分布式運行時或DRT71,而在其它 實施例中被實現(xiàn)為應(yīng)用代碼和數(shù)據(jù)50的附件,并且也能夠在JAVA虛擬 機自身內(nèi)實現(xiàn)) 一起操作。因而,所有的機器Ml 、 M2...Mn都具有針對 所需每個修改的相同的(或基^目同或類似的)修改器51。例如,對于 存儲器管理和復(fù)制、初始化、結(jié)束、和/或同步可能需要不同的修改(盡 管可能不是所有實施例都需J^所有這些修改類型)。存在修改器51和分布式運行時71的可替選實現(xiàn)。例如,如圖1C中 虛線所示,修改器51可以被實現(xiàn)為分布式運行時71的部件,或分布式運 行時71內(nèi)部的部件,因此DRT71可實現(xiàn)修改器51的功能和操作。可替 選地,修改器51的功能和IMt可以在用于實現(xiàn)DRT 71的結(jié)構(gòu)、軟件、 固件或其它裝置之夕卜實現(xiàn),例如在代碼和數(shù)據(jù)50內(nèi),或者在JAVA虛擬機自身內(nèi)。在一個實施例中,修改器51和DRT 71兩者都以提供DRT和 修改器的功能的單段計算;^序代碼來實現(xiàn)或編寫。在這種情況下,修改 器功能和結(jié)構(gòu)實際上被包含到DRT中。與其實現(xiàn)無關(guān)地,修改器功能和 結(jié)構(gòu)負責(zé)修改應(yīng)用代碼程序的可執(zhí)行代碼,而分布式運行時功能和結(jié)構(gòu)負 責(zé)實現(xiàn)各計算機或機器兩者和兩者以上之間的通信。在一個實施例中,通 信功能通過每個機器上的DRT的計算機程序代碼內(nèi)的中間協(xié)議層來實 現(xiàn)。例如,DRT可以用JAVA語言來實現(xiàn)通信棧,并使用傳輸控制協(xié)i5C/ 網(wǎng)際協(xié)議(TCP/IP)來提供機器之間的通信或?qū)υ?。這些功能或操作可 以用各種方法來實現(xiàn),并且根據(jù)本文提供的描述應(yīng)當(dāng)理解,這些功能或操 作如何確切地被實現(xiàn),或者在結(jié)構(gòu)和/或過程性元素之間或在計算機程序 代碼或數(shù)據(jù)結(jié)構(gòu)之間如何被確切劃分對本發(fā)明來說并不是重要或至關(guān)重 要的。然而,在圖1C所示的方案中,提供了多個單獨計算M機器M1、 M2...Mn,其中每個都經(jīng)由通信網(wǎng)絡(luò)53或其它通信鏈路互連。每個單獨 計算機或機器都設(shè)置有對應(yīng)的修改器51。每個單獨計算^£設(shè)置有連接 到通信網(wǎng)絡(luò)的通信端口。通信網(wǎng)絡(luò)53或路徑可以是任何電子信令、數(shù)據(jù)、 或數(shù)字通信網(wǎng)絡(luò)或路徑,并且優(yōu)選為慢速,因而成本低的通信路徑,例如 因特網(wǎng)上的、或者包含ETHERNET或INFINIBAND的任何常見組網(wǎng)結(jié) 構(gòu)及其擴展和改進上的網(wǎng)絡(luò)連接。優(yōu)選地,計算機設(shè)置有與通信網(wǎng)絡(luò)53 連接的一個或多個么*通信端口 (例如CISCO Power Connect 5224交換 機)。由于上述方案,如果機器M1、 M2、 ....... Mn中的每個機器都具有例如10MB的內(nèi)部或本地存儲器容量,則應(yīng)用代碼50整體上可用的總存 儲器空間并不是如所期望的那樣為10MB乘以機器數(shù)量。也不是所有n 個機器的內(nèi)部存儲器容量的加性組合。相反,其為10MB,或者大于10MB 但是小于nxlOMB的某個數(shù)。在各機器的內(nèi)部存儲器容量不同(這是允 許)的情況下,于是在一個機器中的內(nèi)部存儲器小于至少一個其它機器的 內(nèi)部存儲器容量的情況下,當(dāng)這樣的存儲器(或其一部分)被作為"公共" 存儲器(即機器Ml... Mn的每個機器上的類似等同存儲器),或相反被用 于執(zhí)行公共應(yīng)用代碼時,任何一個機器的最小存儲器的大小可用作各機器 的最大存儲器容量。然而,盡管對待每個機器的內(nèi)部存儲器的方式可能最初看起來是性能 的可能約束,但是,在下文中將會理解這如何導(dǎo)致操作和性能的提高。當(dāng)然,每個機器M1、 ]\12...1\111都有專用的(即非公共的)內(nèi)部存儲器容量。 各機器Ml, M2, ...Mn的專用內(nèi)部存儲器容量通常近似相等,但是也不 一定如此。例如,當(dāng)多計算機系統(tǒng)是利用由不同實體所擁有或操作的現(xiàn)有 計算機、機器或信息設(shè)備來實現(xiàn)或組成時,內(nèi)部存儲器容量可能是相當(dāng)不 同的。另一方面,如果正在實現(xiàn)一個新的多計算機系統(tǒng),則每個機器或計 算機優(yōu)選為選擇具有相同的內(nèi)部存儲器容量,但不一定如此。應(yīng)當(dāng)理解,每個機器的獨立本地存儲器僅僅代表該機器總存儲器中被 分配給應(yīng)用程序的在該機器上運行的部分的那部分存儲器。因而,其它存 儲器將被該機器的操作系統(tǒng)以及與應(yīng)用程序50無關(guān)的其它計算任務(wù)所占 用。原型多計算機系統(tǒng)的非商業(yè)操作表明,并不是該系統(tǒng)中每個機器或計 算機都使用或需要引用(例如,具有每個可能的存儲器位置的本地復(fù)本) 每個可能的存儲器位置。結(jié)果,只J^個機器的本M儲器對于該機器的 操作U夠的,則無需每個機器的本地存儲器與每個其它機器相同,就可 以操作多計算機系統(tǒng)。也就是說,假如特定機器不需要引用(例如具有一 些特定存儲器位置的本地復(fù)本) 一些特定存儲器位置,則那些特定存儲器 位置在該特定機器中未被復(fù)制是無關(guān)緊要的。選擇每個機器中內(nèi)部存儲器的量以在每個機器中以及所連接或耦合的多個機器、計算機或信息設(shè)備M1、 M2、 ....... Mn的星座或網(wǎng)絡(luò)上達到期望性能等級也是有利的。在描述了這些內(nèi)部和公共存儲器考慮因素 后,根據(jù)本文提供的描述應(yīng)當(dāng)理解,機器之間可以是公共的存儲器的量并 不是限制。在一些實施例中,多個單獨計算機或機器的一些或全部可以被包含在 單個外殼或機架(例如由Hewlett-Packard Development公司,Intel公司, IBM公司等制造的所謂"刀片服務(wù)器")、由Intel、 AMD或其它公司制 造的多處理器(例如對稱式多處理器SMP)或多核處理器(例如雙核處 理器以及芯片多線程處理器)內(nèi),或者被實現(xiàn)在單個印刷電游^板上或甚至 在單個芯片或芯片組內(nèi)。類似地,還包含具有多核,多CPU的或其它處 理邏輯的計算機或機器。當(dāng)用非JAVA語言或應(yīng)用代碼環(huán)境來實現(xiàn)時,通用平臺和/或虛擬機 和/或機器和/或運行時系統(tǒng)能夠操作該平臺和/或虛擬機和/或機器和/或運 行時系統(tǒng)環(huán)境的語言(例如,可能包含但不局限于源代碼語言、中間代碼 語言、目標代碼語言、機器代碼語言以及任何其它代碼語言中的任何一個或多個)的應(yīng)用代碼50,并且不論機器或處理器制造商以及機器的內(nèi)部 細節(jié)如何,利用該平臺和/或虛擬機和/或機器和/或運行時系統(tǒng)和/或語言體 系結(jié)構(gòu)。還應(yīng)當(dāng)理解,平臺和/或運行時系統(tǒng)可包含虛擬機和非虛擬機軟 件和/或固件體系結(jié)構(gòu),以及硬件和直接硬件編碼的應(yīng)用和實現(xiàn)。對于更一般的虛擬機或抽象機環(huán)境,以及對于可不使用或要求使用類 和/或?qū)ο蟮哪壳昂蛯淼挠嬎銠C和/或計算機器和/或信息設(shè)備或處理系 統(tǒng),本發(fā)明結(jié)構(gòu)、方法和計算積4呈序以及計算M序產(chǎn)品仍然適用。不使 用類和/或?qū)ο蟮挠嬎銠C和/或計算機器的例子例如包含由Intel公司等制 造的x86計算機體系結(jié)構(gòu),由Sun Microsystems公司等制造的SPARC計 算機體系結(jié)構(gòu),由IBM公司等制造的Power PC計算機體系結(jié)構(gòu),以及 由Apple Computer公司等制造的個人計算機產(chǎn)品。對于不使用類或?qū)ο蟮母拍畹倪@些類型的計算機、計算機器、信息設(shè) 備以及在其上實現(xiàn)的虛擬機或虛擬計算環(huán)境,可概括為例如包含基M據(jù) 類型(例如整型數(shù)據(jù)類型,浮點數(shù)據(jù)類型,長整型數(shù)據(jù)類型,xMt度數(shù)據(jù) 類型,串?dāng)?shù)據(jù)類型,字符數(shù)據(jù)類型和布爾數(shù)據(jù)類型),結(jié)構(gòu)化數(shù)據(jù)類型(例 如數(shù)組和記錄),派生的類型,或者過程性語言或其它語言或環(huán)境的其它 代碼或數(shù)據(jù)結(jié)構(gòu),如函數(shù)、指針、組件、模塊、結(jié)構(gòu)、引用和聯(lián)合。當(dāng)這 些結(jié)構(gòu)和過程按需要組合應(yīng)用時,它們維護計算環(huán)境,其中在該計算環(huán)境 下,計算機或計算環(huán)境的存儲器位置、地址范圍、對象、類、資產(chǎn)、資源 或任何其它過程或結(jié)構(gòu)方面,在多個單獨機器M1、 M2…Mn上以協(xié)調(diào)的、 連貫的和一致的方式按需要被產(chǎn)生、維護、IMt和去活或刪除。應(yīng)用代碼50的這種分析或細查可發(fā)生在加載應(yīng)用代碼50之前,或者 在應(yīng)用代碼50加載過程期間,或者甚至在應(yīng)用代碼50加載過程之后(或 者這些情況的某種組合)。這可被比作改寫(instrumentation )、程序轉(zhuǎn)換、 翻譯、或者編譯過程,因為應(yīng)用代碼可用附加的指令編寫,和/或由保留 含義的程序操縱來修改,和/或可選地從輸入代碼語言翻譯成不同的代碼 語言(例如,從源代碼語言或中間代碼語言轉(zhuǎn)換到目標代碼語言或機器代 碼語言)。關(guān)于這一點,應(yīng)當(dāng)理解,術(shù)語"編譯"通?;虬闯R?guī)涉及代碼 或語言上的改變,例如從源代碼到目標代碼,或者從一種語言到另一種語 言。然而,在這種情況下,術(shù)語"編譯"(及其語法上的等同內(nèi)容)未被 如此限制,并且也可以包含或包括相同代碼或語言內(nèi)的修改。例如,將編 譯及其等同內(nèi)容理解成包括普通編譯(例如,但不限于從源代碼到目標代碼)和從源代碼到源代碼的編譯,以及從目標代碼到目標代碼的編譯,以及其中的任何變更組合。還包含所謂的"中間代碼語言",其為一種"偽 目標代碼"。舉例而言,但非限制性地,在一個實施例中,對應(yīng)用代碼50的分析 或細查發(fā)生在應(yīng)用程序代碼的加栽期間,應(yīng)用程序代碼的加載是例如由操 作系統(tǒng)從硬盤或其它存儲設(shè)備、介質(zhì)或源中讀取應(yīng)用代碼50,并且將其 拷貝到存儲器中,以及準備開始執(zhí)行該應(yīng)用程序代碼而實現(xiàn)的。在另一個 實施例中,在JAVA虛擬機中,分析或細查可發(fā)生在 java.Iang.CIassLoader.loadClass方法(介l!如"java.lang.ClassLoader.loadClass()") 的類加載過程期間??商孢x地,或者此外,對應(yīng)用代碼50 (或應(yīng)用代碼的一部分)的分 析或細查甚至可發(fā)生在應(yīng)用程序代碼加載過程之后,例如在操作系統(tǒng)已將 應(yīng)用代碼加載到存儲器中之后,或者任選地,甚至在應(yīng)用程序代碼的相關(guān) 對應(yīng)部分的執(zhí)行已經(jīng)開始之后,例如在JAVA虛擬機已經(jīng)通過"java.lang.Classloader.loadClass()"方法將應(yīng)用代碼加栽到虛擬機中并且 任選地開始扭^行之后。計算領(lǐng)域的普通技術(shù)人員會知道,各種可能的技術(shù)可以用于修改計算 機代碼,這些技術(shù)包括但不限于改寫、程序轉(zhuǎn)換、翻譯或編譯裝置和/或 方法。一種這樣的技術(shù)是,在無需在先或之后改變應(yīng)用代碼的語言的情況 下,對應(yīng)用代碼進行修改。另一種這樣的技術(shù)是將原始代碼(例如,JAVA 語言源代碼)轉(zhuǎn)換成中間表示(或中間代碼語言,或偽碼),例如JAVA 字節(jié)代碼。 一旦該轉(zhuǎn)換發(fā)生,就對字節(jié)代碼進行l(wèi)務(wù)改,然后轉(zhuǎn)換可被逆轉(zhuǎn)。 這提供了祐J務(wù)改JAVA代碼的所期望的結(jié)果。另一個可能的技術(shù)是直接從源代碼或者通過上述中間語言或通過一 些其它中間手段,將應(yīng)用程序轉(zhuǎn)換到機器代碼。然后,在加載和執(zhí)行機器 代碼之前修改機器代碼。另一個這樣的技術(shù)是將原始代碼轉(zhuǎn)換成中間表 示,該中間表示從而被修改并且l^被轉(zhuǎn)換成機器代碼。本發(fā)明包括所有這樣的修改途徑,以及兩個、三個甚至更多這樣的途 徑的組合。DRT 71或其它代碼修改裝置負責(zé)在單獨機器M1、 M2...Mn中每個 機器上建立或復(fù)制使得多個機器能互操作的存儲器結(jié)構(gòu)和內(nèi)容。在一些實 施例中,此復(fù)制的存儲器結(jié)構(gòu)相同,而在其它實施例中,此存儲器結(jié)構(gòu)會有部分相同,而其它部分不同。在另外的其它實施例中,存儲器結(jié)構(gòu)^格式或存儲約定(如大端字節(jié)序(Big Endian)或小端字節(jié)序(Little Endian) 格式或約定)方面不同。當(dāng)這些結(jié)構(gòu)和過程按需要組合應(yīng)用時,它們維護計算環(huán)境,其中在該 計算環(huán)境下,計算機或計算環(huán)境的存儲器位置、地址范圍、對象、類、資 產(chǎn)、資源或任何其它過程或結(jié)構(gòu)方面,在多個單獨機器M1、 M2...Mnl 以協(xié)調(diào)的、連貫的和一致的方式按需要被產(chǎn)生、維護、IMt和去活或刪除。因此,術(shù)語"一個"、"單"和"公共"應(yīng)用代碼或程序包含以下情形, 在該情形中,所有機器M1、 ]^2...]\111操作或執(zhí)行相同的程序或代碼而不 是不同的(和無關(guān)的)程序,換言之,相同或基^f目同的應(yīng)用代碼的拷貝 或復(fù)^加栽到互操作勤目連接的機器或計算機中的每一個上。在使用分布式軟件的常規(guī)方案中,從一個機器的軟件到物理上位于另 一個機器上的存儲器的存儲器訪問通常通過互連各機器的網(wǎng)絡(luò)進行。因 而,每個機器的本地存儲器都能夠被任何其它機器所訪問,因此不能說是 獨立的。然而,因為對物理上位于另一個計算機上的存儲器的讀和/或?qū)?存儲器訪問需要利用互連各計算機的慢速網(wǎng)絡(luò),所以在這些配置中,這樣 的存儲器訪問可導(dǎo)致存儲器讀/寫處理操作中的實質(zhì)性延遲,可能大約為 106-107個機器中央處理單元的周期(假定為同時期的處理器速度)。最終, 該延遲取決于多個因素,例如通信網(wǎng)絡(luò)的速度、帶寬和/或時延。這很大 程度上說明了現(xiàn)有技術(shù)方案中多個互連機器的低性能。然而,在本方案中,因為所有存儲器位置(或所有存儲器位置的某個 子集)的當(dāng)前值被存儲在產(chǎn)生讀存儲器需求的處理所執(zhí)行的機器上,所以 對存儲器位置或數(shù)據(jù)的所有讀取都在本地得到滿足。類似地,因為所有存儲器位置(或所有存儲器位置的某個子集)的當(dāng) 前值被存儲在生成寫存儲器需求的處理所執(zhí)行的機器上,所以存儲器位置 或數(shù)據(jù)的所有寫入都在本地得到滿足。這樣的本*儲器讀和寫處理操作通常在102-103個中央處理單元周 期內(nèi)滿足。因而實際上,涉及和/或?qū)懙拇鎯ζ髟L問的等待基本上較少。 此夕卜,每個機器的本M儲器不能被任何其它機器訪問,因此可被稱作是 獨立的。本發(fā)明獨立于傳送、網(wǎng)絡(luò)和通信路徑,并且不依賴于各機器或各DRT 之間的通信如何進行。在一個實施例中,甚至機器或DRT之間的電子郵件(email)交互也可以滿足通信的需要。結(jié)合以上所述,從圖2中可以看出,有若干機器M1、 M2、 ...Mn, "n"為大于或等于2的整數(shù),圖1的應(yīng)用程序50在機器Ml、 M2、 ...Mn上基本上同時運行。這些機器按層次順序被分配以數(shù)字1、 2、 3.......等等。該順序通常是循環(huán)的或閉合的,使得當(dāng)機器2和機器3在層次上相鄰 時,機器"n"和機器l也是如此。優(yōu)選地,存在另一個機器X,其被提 供來使各種內(nèi)務(wù)處理功能(housekeeping functions )能被執(zhí)行,例如充當(dāng) 鎖服務(wù)器。特別地,所述另一個機器X可以是低價機器,并且比可能具 有令人滿意的屬性如處理M度的其它機器便宜很多。此外, 一個附加的 低價機器(X+l)優(yōu)選地可用于在機器X出現(xiàn)故障時提供冗余。當(dāng)提供兩 個這樣的服務(wù)器機器X和X+1時,為了簡單,它們優(yōu)選地作為集群結(jié)構(gòu) 的^器來操作。根據(jù)本發(fā)明,必要時,機器X和X+1能夠作為多計算 機系統(tǒng)來操作。然而,這一般會導(dǎo)致不期望的復(fù)雜度。如果未提供機器X,則其功能(例如內(nèi)務(wù)處理功能)由其它機器中的一個、 一些或4^P機器來提供?,F(xiàn)在參考圖3,該圖示出組成計算機系統(tǒng)的多個機器中的任意三個機 器Mn-l、 Mn和Mn+l的存儲器圖。在應(yīng)用程序的操作開始之前,已經(jīng) 執(zhí)行在上文被并入的專利說明書中所描述的初始化處理,因此,每個機器 中的存儲器內(nèi)容實質(zhì)上相同。在所示的特定例子中,每個機器具有兩個對 象A和B,且每個對象具有能夠存儲字母數(shù)字數(shù)據(jù)的兩個原始字段11。 在給出的特定例子中,對象A的兩個字段包含數(shù)字7和9,同時對象B 的兩個字段包含數(shù)字3和5。個體計算機中的每一個計算機在如上所述被初始化后,執(zhí)行應(yīng)用程序 5的不同部分.設(shè)想每個機器將只生成要存儲在原始字段和非原始字段二 者中的修改的數(shù)據(jù)。在這樣的字段是只包含字母數(shù)字數(shù)據(jù)的原始字段的情 況下,這些字段能被容易地拷貝,從而在每個其它機器上復(fù)制。然而,如 圖4中所示,可能出現(xiàn)例如機器Mn具有引用字段10的情形,引用字段 10因為與原始字段11不同,所以用雙線邊界^示,在機器Mn中的對象A的內(nèi)部是字段10、 11和12,它們在機器Mn-l 中的對象A中具有對應(yīng)字段30、 31和32,而在機器Mn+l中的對象A 中具有對應(yīng)字段20、 21和22。在該特定示例中,新的引用字段10包含對附加對象H的引用,其中 對象H自身包括兩個原始字段ll。在圖4中,在引用字段10內(nèi),示出了被引用對象的名稱H以及箭頭,以指出引用字段10的內(nèi)容使程序重定向 以從對象A移到對象H。因此,產(chǎn)生以下問題如何將機器Mn中發(fā)生 的存儲器變化在全部其它機器中復(fù)制,以使計算機系統(tǒng)保持基本上一致的 存儲器。如圖4中所示,關(guān)于機器Mn-l,對象A內(nèi)可能具有引用字段30,然 而,這是不足夠的,因為機器Mn的引用字段IO引用的對象H在機器 Mn-l中不存在??商孢x地,如針對機器Mn+l所示,可能在對象A內(nèi)具 有引用字段20,同時在該機器內(nèi)創(chuàng)建新的對象,然而,機器組織通常不 同,因此在機器Mn+1中創(chuàng)建的新對象的指針(或地址)與在機器Mn 中創(chuàng)建的對象H的指針(或地址)不同。圖5中示出了期望的最終結(jié)果。這里,具有引用字段10和附加對象 H的機器Mn與以前相同。然而,對于機器Mn+l,對象A"&置了引用字 段20,該引用字段20的內(nèi)容引用在機器Mii+1的本地存儲器中創(chuàng)建并與 機器N的對象H對應(yīng)的新對象T。類似地,針對對象A,機器Mn-l具 有引用字段30,該引用字段30對應(yīng)于字段10,并且其內(nèi)容引用在機器 Mn-l的本i^儲器內(nèi)創(chuàng)建并與機器Mn的對象H對應(yīng)的新的對象K。利用例如圖6中所示的對應(yīng)表創(chuàng)建圖5中所示的期望的結(jié)果。這樣的 對應(yīng)表優(yōu)選且方便地存儲在服務(wù)器機器X內(nèi),因此可以被全部其它機器 訪問。在圖6的對應(yīng)表中,被引用對象H的創(chuàng)建(其為了這個示例,可 以方便地被假設(shè)為與應(yīng)用程序50的關(guān)于人類頭部的方面相關(guān))被分配以 全局名稱C (方便地代表在拉丁文中意思為頭的cranium),應(yīng)該理解,H 的本地指針(或地址)一般與全局名稱C不同。對于多計算機系統(tǒng)中的其它機器中的每一個機器,有必勤,J建新對象 的本地指針(或地址),然后將該指針輸入到圖6的與全局名稱C相對應(yīng) 的對應(yīng)表中。對于機器Mn-l,新對象的本地地址被方便地稱為K (代表 德語中意思為頭的Kopf),同時,對于機器Mn+l,本地地址方便地被稱 為T (代表法語中意思為頭的話te )。、因為對象H: T和,全部通過圖6"對應(yīng)表鏈接,所以,象H中各現(xiàn)在參考圖7,圖7示出了 Mt不同的示例。這里,由機器Mn執(zhí)行 的應(yīng)用程序50的處理在對象B內(nèi)生成引用現(xiàn)有對象H的新引用字段46。 因此,有必要在包含在機器Mn-l和機器Mn+1中的對應(yīng)對象B中創(chuàng)建引用字段46的本地拷貝.最終結(jié)果如圖8中所示,其中,在機器Mn-l和Mn+l中分別創(chuàng)建了 新的引用字段56和66.此外,這些新的引用字段中的每一個引用字段的 內(nèi)容分別是對與機器Mn的對象H相對應(yīng)的對象K和對象T的引用。該 創(chuàng)建可以通過查閱圖6的對應(yīng)表進行,使得例如機器Mn+1知道其本地存 儲器中與機器Mn的對象H相對應(yīng)的對象是對象T?,F(xiàn)在參考圖9,在初始加載程序期間,被加栽來創(chuàng)建每個JAVA虛擬 機72的程序50被修改。該修改在圖9中的步驟卯開始,并涉及被加載 應(yīng)用程序50中檢測4^P存儲器位置(在JAVA中稱為字段-^t其它語 言中使用等同術(shù)語)的初始的實質(zhì)步驟91。需要為在步驟92和93的隨 后處理標識這樣的存儲器位置。在加載程序期間,DRT71創(chuàng)建如此標識 的全部存儲器位置的列表,其中JAVA字段通過對象和類列出。易變字段 和同步字段都被列出。修改過程的下一個階段(圖9中的指定的步驟92)是搜索可執(zhí)行應(yīng) 用程序代碼,以便定位操作或改變與步驟91中生成的列勤目對應(yīng)的字段 值從而寫入各字段以使得在對應(yīng)存儲器位置的值改變的每個處理行為。當(dāng) 檢測到改變字段值的這樣的操作(在JAVA語言中典型為putstatic或 putfield)時,于是在程序中,在此處通過步驟93插入"更新傳播例程", 以保證通知全部其它機器字^:的內(nèi)容發(fā)生了改變。此后,如上述合并的說 明書中所述且如圖9中的步驟94所示,以通常方式繼續(xù)加載過程。圖10中示出了加載期間初始修改的可替選形式。這里,開始和列表 步驟90和91以及搜索步猓92與圖9中相同。然而,在步驟103插入"警 告例程",而不是如在步驟93插入"更新傳播例程",其中處理線程執(zhí)行 更新。"警告例程"指示未在處理中使用和分配給DRT的一個線程或多個 線程執(zhí)行必要的傳播。該步驟103是圖9中步驟93的較快的可替選方式, 并且其導(dǎo)致更低的開銷。一旦發(fā)生如圖9或圖10所示的加載期間的初始修改,則發(fā)生圖11和 圖12中所示的多線程處理操作中的任一個操作。從圖11的實施例中看出, 正在進行機器Ml上的包括線程111/1 ...111/4的多線程處理110,且(在 本例中)第二線程111/2的處理導(dǎo)致線程111/2在步驟113得知字段值的 改變.在該階段,在步驟114中斷該線程111/2的正常處理,且同一線程 111/2通過網(wǎng)絡(luò)53通知全部其它機器M2.,.Mn在步驟113發(fā)生的被改變 字段的標識和改變的內(nèi)容。在通信過程結(jié)束處,線程111/2在步驟115恢復(fù)處理,直到存在字段內(nèi)容變化的下一個實例。在圖12所示的可替選方案中, 一旦機器Ml上的線程111/2得知步 驟113中字段值的改變,就指示DRT處理120 (如步驟125和箭頭127 所示)分配給DRT處理120的另一線程121/1要才艮據(jù)步驟128,通過網(wǎng) 絡(luò)53將在步驟113檢測到的被改變字段的標識和改變的內(nèi)容傳播到全部 其它機器M2…Mn。這是可以快速執(zhí)行的操作,因此在線程111/2恢復(fù)步 驟115中的處理之前,初始線程111/2的處理只如步驟125中所示那樣僅 僅瞬間中斷。然后,被通知了改變(如箭頭127所示)的其它線程121/1 通過網(wǎng)絡(luò)153將步驟128中所示的該改變傳達給其它機器M2…Mn中的 每一個機器。圖12的第二方案更好地利用了各線程111/1... 111/3和121/1 (通常不 作等同要求)的處理能力,并用漸增的大小"n"給出更好的定標(n是 大于等于2的整數(shù),代表連接到網(wǎng)絡(luò)53并各自同時執(zhí)行應(yīng)用程序50的不 同部分的機器的總數(shù)).不管使用哪個方案,在步驟113檢測到的改變的 字段和標識以及內(nèi)^C傳播到網(wǎng)絡(luò)上的4^P其它機器M2…Mn。這如圖13中所示,其中DRT 71/1及其圖12中的線程121/1 (在圖 13中由步驟128代表)經(jīng)由網(wǎng)絡(luò)53,把通過機器M1中的處理在圖12的 步驟113生成的所列存儲器位置的標識和改變的內(nèi)容發(fā)送到其它機器 M2…Mn中的每個機器。其它機器M2…Mn中的每個機器通過接收來自網(wǎng)絡(luò)53的標識和內(nèi)容 對,并將新的內(nèi)容寫入本地對應(yīng)存儲器位置,從而執(zhí)行由圖13中針對機 器Mn的步驟135、 136和137所指示的動作。計算領(lǐng)域的技術(shù)人員應(yīng)該明白,圖6的對應(yīng)表不必只能位于服務(wù)器機 器X內(nèi),而是可以在各機器Mn-l、 Mn、 Mn+1等的每一個機器中維護該 表的本地拷貝。另外,在這些情況下,因為每個機器能夠通過查閱自己的 表來確定與由任何其它機器所引用的對^目對應(yīng)的本地存儲器中的對象, 所以沒必要存在全局名稱。例如,如果機器Mng器Mn+l接收到更新 包含在對象T中的原始字段ll的內(nèi)容的消息,則機器Mn查閱圖6的對 應(yīng)表,并確定其對象H對應(yīng)于機器Mn+1的對象T,因此其為應(yīng)該被更 新的對象。即,圖6的對應(yīng)表不需要包括左側(cè)的標題為"全局"的列。由 于這個原因,圖6中所示的表具有用虛線分開的左側(cè)部分,以表明如果不 存在服務(wù)器機器X,則不需要該部分。前文只說明了本發(fā)明的一些實施例和修改,顯然,計算領(lǐng)域的技術(shù)人 員顯然可以在不離開本發(fā)明的范圍的情況下做出其它實施例和修改。例如,上述方案設(shè)想"n"個計算機,其中每個計算機分享應(yīng)用程序 的一小部分(l/n)。在這種情況下,全部"n"個計算機具有相同的本地 存儲器結(jié)構(gòu)。然而,可以操作其中只有計算機的子集具有相同的本*儲 器結(jié)構(gòu)的系統(tǒng)。在該情形下,該子集的成員的最大數(shù)目將被作為以上說明 中的"n"。還應(yīng)該理解,存儲器位置可以包括數(shù)據(jù)和代碼部分兩者。因此,存儲 器位置的新的值或改變可以包括新的數(shù)字數(shù)據(jù)和新的或修改的代碼部分。 類似地,對JAVA的引用包括JAVA語言,以及JAVA平臺與體系結(jié)構(gòu)。在所有描述的修改實例中,其中應(yīng)用代碼50在加載之前、在加載期 間、或者甚至在加載之后^fr未修改的應(yīng)用代碼的執(zhí)行開始之前被修改, 應(yīng)當(dāng)理解,被修改的應(yīng)用代碼在進行的修改之后取代未修改的應(yīng)用代碼而 #>載,以及取代未修改的應(yīng)用代碼而被執(zhí)行??商孢x地,在修^L生在加載之后以;M^未修改的應(yīng)用代碼的執(zhí)行開始之后的情況下,應(yīng)當(dāng)理解,未修改的應(yīng)用代碼可以被對應(yīng)于進行的修改、 所修改的應(yīng)用代碼所^替換;或者,可替選地,隨著對正在執(zhí)行的未修 改應(yīng)用代碼遞增地進行修改,未修改的應(yīng)用代碼可以被部分或者遞增地替 換。無論使用這樣的修改途徑中的哪種,被進行之后的修改都取代未修改 的應(yīng)用代碼而執(zhí)行。針對多個機器M1、 M2...Mn中的每一個機器上的所有類似等同本地 對象(類,資產(chǎn)或資源等)使用全局標識符作為"元名字"或"元標識" 的形式是有利的。例如,不必跟蹤每個機器上多個類似等同對象的每個類 似等同本地對象的每個唯一本地名字或標識,取而代之,可以定義或使用 對應(yīng)于每個機器上的多個類似等同對象的全局名字(例如"globalname7787"),在此情況下每個機器將全局名字與特定的本地名字 或?qū)ο舐?lián)系起來(例如"globalname7787"對應(yīng)于機器Ml上的對象"1ocalobject456" , "globalname7787"對應(yīng)于機器M2上的對象"localobject885",以及"globalname7787"對應(yīng)于機器M3上的對象"localobjectlll"等等)。根據(jù)本文所提供的詳細描述,本領(lǐng)域的技術(shù)人員還會明白,在由每個 DRT 71當(dāng)最初記錄或創(chuàng)建所有對象中的全部或某子集的列表時創(chuàng)建的表、列表或其它數(shù)據(jù)結(jié)構(gòu)(例如存儲器位置或字段)中,對于各個機器Ml、 M2...Mn上的每個這樣的記錄的對象,存在在機器M1、 M2...Mn中 的每個機器上公共或類似的名字或標識。然而,在各個機器中,因為每個機器可能,并且通常會根據(jù)其自身的內(nèi)部處理來存儲不同存儲器位置處的 存儲器值或內(nèi)容,所以對應(yīng)于指定的名字或標識的本MMt象將會或者可能 會隨時間而變化。因而,每個DRT中的表、列表、或其它數(shù)據(jù)結(jié)構(gòu)一般 會具有對應(yīng)于單個存儲器名字或標識的不同本地存儲器位置,但是每個全 局的"存儲器名字"或標識會具有存儲在不同本*儲器位置中的相同的 "存儲器值或內(nèi)容"。所以,對于每個全局名字,會存在一族對應(yīng)獨立本 地存儲器位置,其中在每個計算機中有一個族成員。雖然本地存儲器名字 可能不同,但是資產(chǎn)、對象、位置等基本上具有相同內(nèi)容或值。所以族是 連貫的。本文所使用的術(shù)語"表"或"表格"意圖包括任何列表或有組織的、 無論為何種格式、并且在其內(nèi)可以以有序的方式存儲和讀出數(shù)據(jù)的數(shù)據(jù)結(jié) 構(gòu)》根據(jù)本文提供的說明,本領(lǐng)域的普通技術(shù)人員也應(yīng)該明白,應(yīng)用程序 代碼50在加載期間的上述修改可以用多種方法或由各種裝置來實現(xiàn)。這 些方法或裝置包含但不局限于至少下列五種方法以及這五種的變型或組 合,包含(i) 加載時的再編譯;(ii) 加栽之前的預(yù)編譯過程;(iii) 加載之前的編譯;(iv) "即時(just-in-time)"編譯,或(v) 加載后的再編譯(但是,例如當(dāng)在分布式環(huán)境中執(zhí)行相關(guān)或?qū)?yīng)的 應(yīng)用代碼之前)。通常,術(shù)語"編譯"意味著代碼或語言方面的改變,例如從源代碼到 目標代碼,或從一種語言到另一種語言。顯然,在本說明書中,術(shù)語"編 譯"(及其語法上的等同內(nèi)容)的使用未被如此限制,并且也可以包含或 包括相同代碼或語言內(nèi)的修改.給定修改存儲器處理操作以協(xié)調(diào)多個機器Ml、 M2…Mn的兩者之間 和兩者以上之間的操作的基^念,存在若干不同的方式或?qū)嵤├?,可?執(zhí)行或?qū)崿F(xiàn)所協(xié)調(diào)的、連貫的和一致的存儲器狀態(tài)和處理^Mt概念、方法和過程。在第一實施例中,特定機器(例如機器M2)加載包括存儲器處理操 作的資產(chǎn)(例如類或?qū)ο?,對其進行修改,然后使其它機器Ml、 M3…Mn 中的每一個機器(順序地、同時地或根據(jù)任何其它順序、例程或過程)加 載包括新的修改的存儲器處理操作的已修改對象(或類或其它資產(chǎn)或資 源)。注意,可能存在與應(yīng)用程序代碼中的僅僅一個對^目對應(yīng)的一個或 多個存儲器處理操作,或者存在與應(yīng)用程序代碼中的多個對象相對應(yīng)的多 個存儲器處理操作。注意,在一個實施例中,被加載的存儲器處理操作是 可執(zhí)行的中間代碼。在該可以被稱為"主/從"的方案中,從(或輔)機器M1、 M3…Mn 中的每一個加栽經(jīng)修改的對象(或類),且包括新的修改的存儲器處理操 作,該新的修改的存儲器處理操作由主(或主要)機器(例如機器M2) 或其它機器(例如機器X)通過計算機通信網(wǎng)絡(luò)或其它通信M或路徑發(fā) 送到每一個4器。在該"主/從"或"主要/輔助"配置的微小變型中, 計算機通信網(wǎng)絡(luò)可以用共享存儲裝置(例如共享文件系統(tǒng))或者共享文檔/ 文件庫(如共享數(shù)據(jù)庫)來代替。根據(jù)這里提供的詳細說明可以理解,在每個機器或計算機上執(zhí)行的修 改不需要且往往不會相同或完全相同。所需要的是它們被以足夠相似、使 得多個機器中的每一個機器相對于其它機器一致且連貫地運行的方式來 修改。此外,可以理解存在無數(shù)方式來實現(xiàn)修改,這可能例如取決于特定 的硬件、體系結(jié)構(gòu)、操作系統(tǒng)、應(yīng)用程序代碼等不同因素。還可以理解, 能夠在操作系統(tǒng)內(nèi)、在任何操作系統(tǒng)外或不需要^^T操作系統(tǒng)、在虛擬機 內(nèi)、在EPROM中、在軟件中、在硬件中、在固件中、或者以上的任何 組合來實現(xiàn)。在另一個實施例中,每個機器M1、 M2…Mn接收包括一個或多個存 儲器處理^作的未修改的資產(chǎn)(例如類或?qū)ο?,但^1修改^^作,然后 加載包括現(xiàn)在已修改的操作的資產(chǎn)(例如類或?qū)ο?。盡管一個機器(例 如主機器或主要機器)可以對發(fā)送到每個機器的存儲器處理操作定制或執(zhí) 行不同的修改,但該實施例更容易使每個機器所執(zhí)行的修改 Mt不同.因 而它可以基于其特定的機器體系結(jié)構(gòu)、硬件處理器、存儲器、配置、操作 系統(tǒng)、或其它與其它機器和全部其它類似修^bf目似、連貫和一致的因素而 被增強、定制和/或最優(yōu)化'在所有所述實例或?qū)嵤├?,對機器M1、 M2…Mn以及任選地包括機器x提供或傳達的資產(chǎn)代碼(例如類代碼或?qū)ο蟠a),可以被以4^ 組合或置換的方式在不同機器兩者和兩者以上之間分支、分布或傳達;例如通過提供直接機器到機器的通信(例如,M2直##給Ml、 M3、 M4 等中的每一個),或通過提供或使用級聯(lián)或連續(xù)通信(例如,M2供給M1, 而M1供給M3,而M3供給M4等),或者直接通信和M^通信和/或順 序通信的組合。在修改與僅由多個計算機中的一個計算機執(zhí)行的清除例程、結(jié)束等有 關(guān)的情況下,上述方案需要修改。在該"主/從"或"主JI"/輔助"方案的 該變型中,機器M2以未修改形式將包括清除例程的資產(chǎn)(例如類或?qū)ο? 加載在機器M2上,然后,(例如,M2或每個本地機器)從資產(chǎn)(例如 類或?qū)ο?中整體或部分地刪除已存在于機器上的未修改的清除例程,并例程)加載在其它機器上。因此,在這個實例中,修改不是資產(chǎn)清除例程 的轉(zhuǎn)換、改寫、翻譯或編譯,而是刪除除一個之外的全部機器上的清除例 程。在一個實施例中,在除一個之外的4^機器上刪除結(jié)束或清除例程的 實際代碼塊,因此,因為全部其它機器已刪除了結(jié)束例程,所以該最后的 機器是可以執(zhí)行結(jié)束例程的唯一機器。該方法的一個益處在于,因為只有 一個機器有結(jié)束例程,所以在執(zhí)行相同結(jié)束例程的多個機器之間不發(fā)生沖突。完全刪除清除例程的處理可以由"主"機器(例如機器M2,或者其 它機器如機器X)執(zhí)行,或者可替選地由每個其它機器M1、 M3…Mn在 收到未修改的資產(chǎn)時執(zhí)行。該"主/從"或"主要/輔助"方案的另外變化 是使用共享存儲裝置,例如共享文件系統(tǒng),或者共享文檔/文件庫,如共 享數(shù)據(jù)庫,作為在機器Ml、 M2…Mn和任選的服務(wù)器機器X之間交換資 產(chǎn)、類或?qū)ο蟮拇a的手段。在另一個方案中,特定機器(例如機器M1)加載包括結(jié)束或清除例 程的未修改資產(chǎn)(例如類或?qū)ο?,而全部其它機器M2、 M3…Mn執(zhí)行 修改以刪除資產(chǎn)(例如類或?qū)ο?的清除例程并加載修改的版本。在又一個方案中,機器Ml、 M2…Mn可向附加服務(wù)器機器X發(fā)送 一些或全部加栽請求,該服務(wù)器機器X通過上述方法中的任何方法對應(yīng) 用程序代碼50 (包括資產(chǎn)、和/或類、和/或?qū)ο螅蛘哂少Y產(chǎn)、和/或類、 和/或?qū)ο蠼M成;并包括結(jié)束或清除例程)執(zhí)行修改,并將包括現(xiàn)在已修 改的結(jié)束或清除例程的經(jīng)修改的應(yīng)用程序代碼返回給機器Ml至Mn中的器又本地加載包括修改的例程的經(jīng)修改的應(yīng)用程序代碼。在該方案中,機器Ml至Mn向機器X轉(zhuǎn)發(fā)全部加載請求,機器X機器X執(zhí)行的修改可以包括所述修改中的任何修改。當(dāng)然,該方案可以 應(yīng)用于僅僅一些機器,同時,這里所述的其它方案被應(yīng)用于其它機器。計算機和/或編程技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該知道,當(dāng)附加的代碼或指 令被插入到已有代碼或指令集中以將其修改時,已有代碼或指令集很可能 需要進一步修改(例如通過對連續(xù)指令的再編號),使得偏移,分支、屬 性、標記(markup)等被正確處理或滿足。類似地,在JAVA語言中,存儲器位置包含例如字段和數(shù)組兩種類型。 以上所述涉及字段,并且數(shù)組類型所需的改變基本上是相同的必要變更。 并且,本發(fā)明同樣適用于與JAVA類似的編程語言(包含過程性的、聲明 性的和面向?qū)ο蟮恼Z言),包括Microsoft.NET平臺和體系結(jié)構(gòu)(Visual Basic、 Visual C/C++,以及C弁),F(xiàn)ORTRAN, C/C++ , COBOL、 BASIC 等。本文所使用的術(shù)語"對象"和"類"源自JAVA環(huán)境,并且意圖包括 源自不同環(huán)境如動態(tài)鏈接庫(DLL),目標代碼包,功能單元或存儲器位 置的類似術(shù)語。關(guān)于本發(fā)明的實施例描述了各種裝置,例如包^^但不限于鎖裝置、分 布式運行時裝置、修改器或修改裝置等。在本發(fā)明的至少一個實施例中, 這些各種裝置中的任何一個或每個可通過在計算機邏輯電路、處理器、 ASIC、邏輯或電子電M件、微處理器、微控制器或其它邏輯內(nèi)執(zhí)行的 計算M序代碼語句或指令(可能包括通過多個計算機程序代碼語句或指 令)來實現(xiàn),以修改這樣的邏輯或電路的操作來實現(xiàn)所述的操作或功能。 在另一個實施例中,這些各種裝置中的任何一個或每個可以用固件實現(xiàn), 而在其它實施例中,其可以用硬件實現(xiàn)。此外,在本發(fā)明的至少一個實施 例中,這些各種裝置中的任何一個或每個可由計算機程序軟件、固件和/ 或硬件的組合來實現(xiàn)。上述方法、過程和/或例程中的任何一個和每個可有利地被實現(xiàn)為存 儲在任何有形介質(zhì)上或以電子、信號或數(shù)字形式存在的計算機程序和/或 計算^序產(chǎn)品。這樣的計算機程序或計算積應(yīng)序產(chǎn)品分別包括指令,和 /或被組織成模塊、程序、子程序,或者以任何其它方式組織,以便在處 理邏輯如計算機、計算機器或信息設(shè)備的處理器或微處理器中執(zhí)行;計算M序或計算^^序產(chǎn)品修改其在上面執(zhí)行的計算機的操作,或者修改與 該計算機程序或計算機程序產(chǎn)品所在的或在上面執(zhí)行的計算^目耦合、連接或者以信號通信的計算機上的操作。這樣的計算WE序或計算M序產(chǎn) 品修改計算機、計算機器和/或信息設(shè)備的操作和體系結(jié)構(gòu)性的結(jié)構(gòu),以 改變計算機的技術(shù)操作,并實現(xiàn)本文所述的技術(shù)效果。因此,本發(fā)明可包含一種計算機程序產(chǎn)品,其包括一組程序指令,其 中該組程序指令存儲在存儲介質(zhì)中,或者以任何形式電子地存在,并且可 用于使多個計算機執(zhí)行如本文(包括任一權(quán)利要求中)所述的方法、過程、 例程等中的伶阿一個。此外,本發(fā)明包含(但不局限于)多個計算機,或者與經(jīng)由通信網(wǎng)絡(luò) 或其它通信M或^互連、并且每個可用于基本同時或并行地執(zhí)*編 寫成僅在單個計算機上或者在各計算機中對應(yīng)的不同的計算機上操作的 應(yīng)用代碼的相同或不同部分的單個計算機。所述計算M編程成在被加載 計算M序產(chǎn)品時或者根據(jù)后續(xù)指令,執(zhí)行說明書中描述的、或任一權(quán)利 要求書中提出的任何方法、過程或例程。類似地,本發(fā)明在其范圍內(nèi)還包 含被布置成與類似的、或J^類似的計算機合作以形成多計算機系統(tǒng)的單 個計算機。總而言之,公開一種在多計算機環(huán)境中對被復(fù)制對象的非原始字段進 行復(fù)制的方法,在所述多計算機環(huán)境中,在通過通信網(wǎng)絡(luò)互連的多個計算 機的不同計算機上同時執(zhí)行至少一個應(yīng)用程序的不同部分,該方法包括步 驟(i) 創(chuàng)建對應(yīng)表,并針對多個計算機的任一個計算機中存在的每個對象, 使對應(yīng)表中的各表項與到所述對象的每個引用相對應(yīng);(ii) 在每個計算機中復(fù)制對應(yīng)表,或者允許每個計算機訪問存在于服務(wù) 器計算機中的用于4^機器的單個對應(yīng)表的對應(yīng)部分,在對應(yīng)表中的每個 表項包含指向由一個機器的對象所引用的本地存儲器對象的本地指針;并(m)使每個其它機器指定對應(yīng)的非原始字段和本地對象,并在表中輸入 對應(yīng)的;W^儲器對象的對應(yīng);^y旨針。優(yōu)選地,還包括步驟(iv)使用表中與對應(yīng)非原始字段或?qū)?yīng)對象的所有本地指針相對應(yīng)的全 局名稱'優(yōu)選地,還包括步驟(V)在應(yīng)用程序部分中的一個部分的處理指示在所述機器中的一個機器 中創(chuàng)建第二或l^的被引用非原始字段的情況下,在所述機器中的每個其 它機器中創(chuàng)建對應(yīng)的第二或^的被引用非原始字段。優(yōu)選地,還包括步驟(vi)利用每個計算機內(nèi)的多個線程中的一個線程來執(zhí)行應(yīng)用程序的不同 部分,和(vii )使指示創(chuàng)建第二或隨后的被引用非原始字段的線程來指示所述計算 機中的每個其它計算機創(chuàng)建對應(yīng)的第二或隨后的被引用非原始字段。優(yōu)選地,還包括步驟(viii) 利用每個計算機內(nèi)的多個線程中的 一個線程來執(zhí)行應(yīng)用程序的不 同部分,和(ix) 使與指示創(chuàng)建第二或隨后的被引用非原始字段的線程不同的線程來 指示所述計算機中的每個其它計算機創(chuàng)建對應(yīng)的第二或隨后的被引用非 原始字段。另外,公開一種在通過通信網(wǎng)絡(luò)互連的多個計算機的不同計算機上同 時執(zhí)行至少一個應(yīng)用程序的不同部分的多計算機系統(tǒng),其中,針對在所述 計算機中的任一個計算機中創(chuàng)建的每個非原始字段,在全部計算機可訪問 或者每個計算機中所復(fù)制的對應(yīng)表中存在對應(yīng)的表項,表項包含指向由一個計算機的非原始字段所引用的本地存儲器對象的本地指針,其中,每個 其它計算機指定對應(yīng)的非原始字段和本JW象,且在對應(yīng)表中輸入對應(yīng)本 地存儲器對象的對應(yīng)本地指針。優(yōu)選地,所a利用與相應(yīng)非原始字段或相應(yīng)對象的全部本地指針相 對應(yīng)的全局名稱。優(yōu)選地,針對在所述計算機的一個計算機中的每個第二或隨后的被引 用非原始字段,在所述計算機中每個其它計算機中創(chuàng)建對應(yīng)的第二或J^ 的被引用非原始字段。優(yōu)選地,在每個所述計算機中利用多線程處理來執(zhí)行應(yīng)用程序的不同 部分,并且指示創(chuàng)建第二或隨后的被引用非原始字段的線程指示所述計算 機中每個其它計算機創(chuàng)建笫二或隨后到達被引用非原始字段??商孢x地,在每個計算機中利用多線程處理來執(zhí)行應(yīng)用程序的不同部 分,并且由與指示創(chuàng)建第二或隨后的被引用非原始字段的線程不同的線指示計算機中每個其它計算機創(chuàng)建對應(yīng)的第二或隨后的被引用非原始字 段。還提供了通過通信網(wǎng)絡(luò)互連并且用于保證執(zhí)行以上方法中的任一個 方法的多個計算機。還提供一種計算M序產(chǎn)品,其包括存儲在存儲介質(zhì)中且用于使多個 計算機執(zhí)行以上方法中的任一個方法的程序指令集。還公開一種用于與至少一個其它計算機^f乍,以便執(zhí)行以上方法中的 任一個方法或形成上述計算機系統(tǒng)的單個計算機。本文所使用的術(shù)語"包括"(及其語法變型)用于表示"具有"或"包 含"的包括性含義,而不是用于表示"僅由......組成"的排它性含義。
權(quán)利要求
1.一種在多計算機環(huán)境中對被復(fù)制對象的非原始字段進行復(fù)制的方法,在所述多計算機環(huán)境中,在通過通信網(wǎng)絡(luò)互連的多個計算機的不同計算機上同時執(zhí)行至少一個應(yīng)用程序的不同部分,所述方法包括步驟(i)創(chuàng)建對應(yīng)表,并針對所述多個計算機的任一個中存在的每個對象,使所述對應(yīng)表中的表項與到所述對象的每個引用相對應(yīng);(ii)在每個計算機中復(fù)制所述對應(yīng)表,或者允許每個計算機訪問存在于服務(wù)器計算機中的針對全部機器的單個對應(yīng)表的對應(yīng)部分,在所述對應(yīng)表中的每個所述表項包含指向由所述一個機器的對象所引用的本地存儲器對象的本地指針;并(iii)使每個所述其它機器指定對應(yīng)的非原始字段和本地對象,并在所述表中輸入對應(yīng)本地存儲器對象的對應(yīng)本地指針。
2. 根據(jù)權(quán)利要求l所述的方法,還包括步驟(iv) 使用所W中與對應(yīng)非原始字段或?qū)?yīng)對象的4^P本地指針相 對應(yīng)的全局名稱。
3. 根據(jù)權(quán)利要求1或2所述的方法,還包括步驟(v) 在所述應(yīng)用程序部分中的一個部分的處理指示在所述機器中的 一個機器中創(chuàng)建第二或隨后的被引用非原始字段的情況下,在所i^器中 每個其它機器中創(chuàng)建對應(yīng)的第二或隨后的被引用非原始字段。
4. 根據(jù)權(quán)利要求3所述的方法,還包括步驟(vi) 利用每個所述計算機內(nèi)的多個線程中的一個線程來執(zhí)行所述應(yīng) 用程序的所述不同部分,和(vii )使指示創(chuàng)建所述第二或隨后的被引用非原始字段的線程來指示 所述計算機中每個所述其它計算機創(chuàng)建所述對應(yīng)的第二或隨后的被引用 非原始字段。
5. 根據(jù)權(quán)利要求3所述的方法,還包括步驟(viii) 利用每個所述計算機內(nèi)的多個線程中的一個線程來執(zhí)行所述 應(yīng)用程序的所述不同部分,和(ix) 使與指示創(chuàng)建所述第二或隨后的被引用非原始字段的線程不同 的線程來指示所述計算機中每個所述其它計算機創(chuàng)建所述對應(yīng)的第二或隨后的被引用非原始字段。
6. —種在通過通信網(wǎng)絡(luò)互連的多個計算機的不同計算機上同時執(zhí)行 至少 一個應(yīng)用程序的不同部分的多計算機系統(tǒng),其中,針對在所述計算機 中的任一個計算機中創(chuàng)建的每個非原始字段,在全部所述計算機可訪問或 者每個所述計算機中所復(fù)制的對應(yīng)表中存在對應(yīng)的表項,所述表項包含指 向由所述一個計算機的所述非原始字段所引用的本地存儲器對象的本地 指針,且每個其它所述計算機指定對應(yīng)的非原始字段和本地對象,且在所 述對應(yīng)表中輸入對應(yīng)本地存儲器對象的對應(yīng)本地指針。
7. 根據(jù)權(quán)利要求6所述的系統(tǒng),其中,所a利用與對應(yīng)的非原始 字段或?qū)?yīng)的對象的4^P本地指針相對應(yīng)的全局名稱。
8. 根據(jù)權(quán)利要求6或7所述的系統(tǒng),其中,針對所述計算機的一個 計算機中的每個第二或隨后的被引用非原始字段,在所述計算機中的每個 其它計算機中創(chuàng)建對應(yīng)的第二或隨后的被引用非原始字段。
9. 根據(jù)權(quán)利要求8所述的系統(tǒng),其中,在每個所述計算機中利用多 線程處理來執(zhí)行所述應(yīng)用程序的不同部分,且指示創(chuàng)建所述第二或隨后的 被引用非原始字段的線程指示所述計算機中的每個其它計算機來創(chuàng)建所 述第二或隨后的被引用非原始字段。
10. 根據(jù)權(quán)利要求8所述的系統(tǒng),其中,在每個所述計算機中利用多 線程處理來執(zhí)行所述應(yīng)用程序的不同部分,且由與指示創(chuàng)建所述第二或隨 后的被引用非原始字段的線程不同的線程指示所述計算機中的每個所述 其它計算機來創(chuàng)建所述對應(yīng)的第二或隨后的被引用非原始字段。
11. 通過通信網(wǎng)絡(luò)互連并且用于保證執(zhí)行如權(quán)利要求l-5中任一個所 述的方法的多個計算機。
12. —種計算M序產(chǎn)品,包括存儲在存儲介質(zhì)中且用于使多個計算 機執(zhí)行如權(quán)利要求1-5中任一個所述的方法的程序指令集。
13. —種用于與至少一個其它計算機合作,以便執(zhí)行如權(quán)利要求1-5 中任一個所述的方法或形成如權(quán)利要求6-11中任一個所述的計算機系統(tǒng) 的單個計算機。
全文摘要
公開了在多計算機環(huán)境中對僅僅一些存儲器位置進行的更新,在該多計算機環(huán)境中,至少一個應(yīng)用程序(50)在均具有本地存儲器的多個計算機M1、M2...Mn上同時執(zhí)行。公開了每個本地存儲器中的各包括原始字段(11)的對象A和B。然而,應(yīng)用程序(50)的同時操作可以導(dǎo)致一個機器中的“非原始”引用字段(10),該引用字段(10)然后必須在全部其它機器中復(fù)制。然而,引用字段(10)引用上述一個機器的本地存儲器中的另一個對象(H),從而必須在每個其它機器的本地存儲器中創(chuàng)建對應(yīng)的對象(T,K),并使其被對應(yīng)的非原始字段(10)引用。
文檔編號G06F15/16GK101283342SQ200680037442
公開日2008年10月8日 申請日期2006年10月5日 優(yōu)先權(quán)日2005年10月10日
發(fā)明者約翰·馬修·霍爾特 申請人:瓦拉泰克有限公司