TWI467491B - 用於使用協調物件之修正式電腦結構之方法、系統與電腦程式產品 - Google Patents

用於使用協調物件之修正式電腦結構之方法、系統與電腦程式產品 Download PDF

Info

Publication number
TWI467491B
TWI467491B TW95102934A TW95102934A TWI467491B TW I467491 B TWI467491 B TW I467491B TW 95102934 A TW95102934 A TW 95102934A TW 95102934 A TW95102934 A TW 95102934A TW I467491 B TWI467491 B TW I467491B
Authority
TW
Taiwan
Prior art keywords
memory
computers
machine
computer
application
Prior art date
Application number
TW95102934A
Other languages
English (en)
Other versions
TW200638266A (en
Inventor
John Matthew Holt
Original Assignee
Waratek Pty Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from AU2005902027A external-priority patent/AU2005902027A0/en
Application filed by Waratek Pty Ltd filed Critical Waratek Pty Ltd
Publication of TW200638266A publication Critical patent/TW200638266A/zh
Application granted granted Critical
Publication of TWI467491B publication Critical patent/TWI467491B/zh

Links

Landscapes

  • Stored Programmes (AREA)
  • Multi Processors (AREA)

Description

用於使用協調物件之修正式電腦結構之方法、系統與電腦程式產品
本發明係關於電腦及其它運算機器及資訊家電,尤指一種修正的電腦架構及程式結構,其使得一應用程式之作業透過使用一分散式執行時間(run time)的通信鏈結所互連的複數電腦可以同步或同時地進行,並可以達到改善效能。
自從電腦及運算的出現,電腦之軟體皆是寫入一單一機器上運作。如第1圖所示,該先前技術之單一機器1係由一中央處理單元或CPU2所構成,其透過一匯流排4連接到記憶體3。同時連接到該匯流排4者為該單一機器1之多種其它功能性單元,像是螢幕5、鍵盤6及滑鼠7。
該機器1之效能的功能性限制為要由CPU 2操縱的資料及那些操縱的結果必須由該匯流排4所移動。該匯流排4會遭遇一些問題,包括所謂的匯流排「佇列」,其由想要取得存取到該匯流排之單元所形成,爭奪問題及類似者。這些問題某種程度上可由多種策略來消除,包括快取記憶體,但是這些策略總是會增加該機器1之管理負荷。
自然地這些年來已有許多的嘗試要增加機器效能。一種方式係使用對稱性多處理器。此先前技術方式已經用於所謂的「超級」電腦,其架構示於第2圖。其中複數CPU 12係連接到一共通記憶體13。再次地,於該CPU 12與該記憶體13之間的通信會造成瓶頸。此僅有一種應用程式及該應用程式之記憶體之整個複本可分散在整個共通記憶體上。該單一應用程式可完全透通地由任何記憶體位置讀取以及寫入(即共享之意)。
當有一些這種機器透過一網路互連時,此可藉由採用為一單一機器撰寫的單一應用程式,並將所需要的記憶體資源分成許多部份來達到。然後這些部份即分散在一些電腦之間以形成可由所有CPU 12存取的該共通記憶體13。此程序要依賴將該記憶體區格隔離或隱藏於該單一執行中應用程式。該效能在當一部機器上一CPU必須存取(透過一網路)實際上位在一不同機器上的一記憶體位置時即會降低。
雖然超級電腦已經在技術上成功地達到高運算速率,它們無法在商業應用上成功,因為它們本身的複雜性使得它們非常昂貴,不僅在於製造,同是也在於管理。特別是,該單一系統影像觀念從未能夠在大小尺寸上達到在商品化(或大量生產)之電腦及網路上運作。特別是,該單一系統影像觀念僅能夠在非常快速(且因此非常昂貴)的電腦上以非常快速(且同樣昂貴)的網路互連時才有實際的應用。
另一種增加電腦能力之可能性係透過使用複數部機器,其係由先前技術之分散式運算觀念中產生,其架構示於第3圖。在此已知配置中,一單一應用程式(Ap)係由其作者(或由熟悉該應用程式之其它程式師)畫分成多個分散的工作,藉此在例如三部機器上執行,第3圖中的例子n為整數3。此目的在於每部機器M1,...,M3會執行整個應用程式不同的三分之一,且目的是在於施加到不同機器之負荷大約相等。該等機器透過一網路14通信,其可用多種形式來提供,例如一通信鏈結、區域內部網路、區域外部網路及區域網路類似者。基本上這種網路14之作業速度大小會比在每部個別機器M1,M2,...,Mn中匯流排4之作業速度會慢一個等級。
分散式運算會遇到一些缺點。首先,要畫分該應用程式是很困難的工作,且必須人工進行。第二,在該網路14上傳遞資料、部份結果、結果及類似者為一項管理性負荷。第三,有需要畫分使其非常困難藉由使用更多的機器而可以更加擴大,因為已經被畫分成例如三份之應用程式無法在四部機器上良好此運作。第四,如果該等機器中的一部必須除能,整個系統之整體效能則會實質地降低。
另一種先前技術的配置為透過「叢集」(clusters)做網路運算,其架構示於第4圖。在此方式中,整個應用程式被載入到每部機器上M1,M2,...,Mn。每部機器與一共用資料庫連繫,但不直接與其它機器通信。雖然每部機器執行相同的應用程式,每部機器係進行不同的工作,並僅使用其本身的記憶體。此即類似於一些窗口,其每一個會銷售火車票給公眾。此方式可以作業,並可擴大,其主要的缺點是其很難管理該網路。
在例如像是JAVA及MICROSOFT.NET之電腦語言中,程式師會使用到兩種主要型態的結構。在JAVA語言中,其已知為物件(objects)及類別(classes)。更概括而言,它們可稱之為資產。每次產生一物件(或其它資產),有一初始化例式(routine),其執行為一物件初始化(例如"<init>")例式。類似地,每此一類別被載入時,有一類別初始化例式,稱之為"<clinit>"。其它語言使用不同的用語,但利用一類似的觀念。但是在任一例中,沒有一種相等的「清除」或刪除例式,以在當一物件或類別(或其它資產)不再需要時即要刪除。反而此「清除」係在一背景模式中不引人注意地發生。
再者,於任何電腦環境中,其有需要取得及釋放一鎖定,以進行使用這種物件、類別、資產、資源或結構,用於避免該應用程式之不同部份嘗試在同時間使用相同的物件、類別、資產、資源或結構。在JAVA環境中,此即為同步化。同步化更通常稱之為專門使用一物件、類別、資源、結構或其它資產,以避免電腦或機器之間的爭奪。在JAVA中,此係藉由「監視進入」及「監試離開」指令或例式來達到。其它語言使用不同的用語,但利用一類似的觀念。
不幸地是習用的電腦系統、架構及操作方案並未提供運算環境及方法,其中一應用程式可以同時在任意複數部電腦上運作,其中該環境及操作方案可保證上述的記憶體管理、初始化、清除及同步化例式可在所有該等運算機器上以一致及協同的方式來作業。
本發明揭示一種運算環境,其中一應用程式可在複數部電腦上同時作業。在這種環境中,其有利的是可保證上述的資產初始化、清除及同步化例式在所有該等機器上以一致及協同的方式作業。
根據本發明第一態樣,其揭示一種多重電腦系統,其具有至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,但在由一通信網路互連的複數部電腦上同時執行,其中該應用程式之不同部份實質上在該電腦之不同部份上同時執行,且對於每個部份會產生類似的複數個實質相同的物件,其每個在該相對應的電腦中,且每個具有一實質上相同的名稱,其中每個該相同名稱的物件之初始內容實質上相同,其中所有該等相同的物件在當該等複數部電腦之每一個不再需要參照到它們相對應的物件時即會共同被刪除,且其中該系統包括一鎖定手段,其可應用到所有該等電腦,其中任何想要利用其中一有名稱之物件之電腦係由該等鎖定手段取得一授權鎖定,其可允許該使用,且其可防止所有其它電腦使用到它們相對應名稱之物件,直到該授權鎖定被放棄。
根據本發明第二態樣,其揭示一種方法在複數部電腦上同時執行至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,該等電腦藉由一通信網路互連,該方法包含以下步驟:(i)在該等電腦之不同電腦上執行該應用程式之不同部份,且對每個該部份產生類似的複數個實質上相同的物件,其每個在該相對應電腦上,且每個具有一實質上相同的名稱,(ii)產生每個該相同名稱物件之實質上相同的初始內容,(iii)當所有該複數部電腦不再需要參照到它們相對應的物件時,共同刪除所有該等相同的物件,且(iv)需要任何想要利用其中一有名稱物件之該等電腦來取得一授權鎖定,其可允許該使用,且其可防止所有其它電腦利用它們相對應之有名稱物件,直到該授權鎖定被放棄。
根據本發明第三態樣,其揭示一種多重電腦系統,其具有至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,但同時在由一通信網路互連的複數部電腦上執行,其中該應用程式之不同部份在該等電腦中不同電腦上實質上同時執行,其中每部電腦具有一獨立的本地記憶體,其僅可由該應用程式之相對應部份所存取,且其中對於每個該部份產生複數個實質上相同物件,其每個在該相對應電腦上。
根據本發明第四態樣,其揭示了透過一通信鏈結互連的複數部電腦,且每個具有一獨立的本地記憶體,且實質上同時操作至少一應用程式之不同部份,其每個被寫入僅在一單一電腦上作業,每個本地記憶體僅由該應用程式之相對應部份所存取。
根據本發明第五態樣,其揭示一種方法在複數部電腦上同時執行至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,該等電腦藉由一通信網路互連,且每個具有一獨立的本地記憶體,該方法包含以下步驟:(i)在該等電腦中不同電腦上執行該應用程式之不同部份,且對於每個該部份產生複數個實質上相同物件,其每個在該相對應電腦上,且每個僅可由該應用程式之相對應部份所存取。
根據本發明第六態樣,其揭示一種方法,其載入要被寫入僅在一單一電腦上作業之應用程式到每個該等電腦上,該等電腦係透過一通信鏈結互連,且該等應用程式之不同部份實質上同時可在不同電腦上執行,其每部電腦具有一獨立的本地記憶體,其僅可由該應用程式之相對應部份所存取,該方法包含於該應用程式之相關部份被載入之前、載入期間或載入之後,及在被執行之前來修正該應用程式之步驟。
根據本發明第七態樣,其揭示一種方法,可在所有經由一通信鏈結互連之複數部電腦上同時操作至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,每個該等電腦皆具有至少一最小預定本地記憶體容量,該應用程式的不同部份係在該等電腦中不同電腦上實質地同時執行,而每部電腦之本地記憶體僅可由該應用程式之相對應部份所存取,該方法包含以下步驟:(i)初始時在實質上相同的條件下提供每個本地記憶體,(ii)滿足自該相對應本地記憶體每個該應用程式部份所產生的所有記憶體讀取及寫入,及(iii)經由該等通信鏈結傳遞所有該等記憶體寫入在每部該電腦,其係發生在該複數部電腦中所有其餘電腦的本地之上,藉此由每部該電腦所利用之本地記憶體之內容當中接受到一更新資料傳輸延遲者,即保持實質上相同。
根據本發明第八態樣,其揭示一種方法,以編譯或修正一應用程式,其被寫入到僅在一單一電腦上作業,但可在透過一通信鏈結互連的複數部電腦上同時執行,將該應用程式的不同部份實質上在該等電腦中不同電腦上同時執行,其每個具有一獨立本地記憶體,其僅可由該應用程式之相對應部份所存取,該方法包含以下步驟:(i)偵測共用利用了該等電腦中一部的記憶體記錄之指令,(ii)列出所有這些共用的記憶體記錄,並提供每個列出之記憶體記錄的一有名稱標籤,(iii)偵測那些寫入到任何的該等列出記憶體記錄中的指令,或是操縱其內容,及(iv)在每個該偵測的寫入或操縱指令之後啟動一更新傳遞例式,該更新傳遞例式傳送每個該重新寫入或操縱的表列記憶體記錄之重新寫入或操縱的內容及名稱標籤到其餘的該等電腦。
根據本發明第九態樣,其揭示一種多執行緒處理電腦作業,其中被撰寫成在僅一單一電腦上作業之單一應用程式之個別執行緒係在複數部電腦中不同對應的電腦上同時地處理,其每個具有僅由該相對應執行緒存取之一獨立本地記憶體,且每個透過一通信鏈結互連,該改善包含透過該通信鏈結傳送本地記憶體之內容的改變,其實體上關連於該電腦,並處理每個其它電腦之本地記憶體的每個執行緒。
本發明另揭示一種運算環境,其中一應用程式可在複數部電腦上同時作業。在這種環境中,其優點在於可保證上述的初始化例式在所有機器上係以一致性的方式作業。
根據本發明第十態樣,其揭示一種多重電腦系統,其具有至少一應用程式,每個係被撰寫成僅在一單一電腦上作業,但同時在由一通信網路互連的複數部電腦上執行,其中該等應用程式之不同部份實質上在該等電腦中不同的電腦上同時執行,且對於每個該部份產生複數個實質上相同的物件,其每個在該相對應電腦上,且每個具有實質上相同的名稱,且其中每個該等相同名稱的物件之初始內容實質上相同。
根據本發明第十一態樣,其揭示經由一通信鏈結互連的複數部電腦,且同時操作至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,其中每個該電腦實質上同時執行該應用程式的一不同部份,每個該電腦在操作其應用程式部份時僅在實體上位在每部該電腦中的本地記憶體中產生物件,由每部該電腦所使用之本地記憶體的內容基本上類似,但在每個實例中並不相同,且該等電腦中每一部具有分散式更新手段,以分散到由該部電腦產生的所有其它該等電腦物件。
根據本發明第十二態樣,其揭示一種方法在複數部電腦上同時執行至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,該等電腦藉由一通信網路互連,該方法包含以下步驟:(i)在該等電腦中不同電腦上執行該應用程式之不同部份,且對於每個該部份產生複數個實質上相同物件,其每個在該相對應電腦上,且每個具有一實質上相同的名稱,且(ii)產生該等相同名稱物件之實質上相同的初始內容。
根據本發明第十三態樣,其揭示一種編譯或修正一應用程式之方法,其被寫入僅在一單一電腦上作業,以在透過一通信鏈結互連的複數部電腦中不同的電腦上之不同部分實質上同時執行,該方法包含以下步驟:(i)偵測指令,其利用該等電腦之一產生物件,(ii)在每個該偵測到的物件產生指令之後啟動一初始化例式,該初始化例式傳送每個產生的物件到其餘的該等電腦。
根據本發明第十四態樣,其揭示一種多執行緒處理電腦作業,其中被撰寫成在僅一單一電腦上作業之單一應用程式之個別執行緒係在複數部電腦中不同對應的電腦上同時地處理,其每個具有僅由該相對應執行緒存取之一獨立記憶體,且每個透過一通信鏈結互連,該改善包含透過該通信鏈結傳送在本地記憶體中產生的物件,其實體上關連於該電腦,並處理每部其它電腦之本地記憶體的每個執行緒。
根據本發明第十五態樣,其揭示一種方法,以保證一應用程式的一致性初始化,其被寫入僅在一單一電腦上作業,但其不同的部份係要在透過一通信網路互連的複數部電腦中不同的電腦上同時執行,該方法包含以下步驟:(i)在載入當中、在之前或之後詳查或分析該應用程式,以偵測定義一初始化例式的每個程式步驟,及(ii)修正該初始化例式以保證所有該等電腦之一致作業。
本發明另揭示一種運算環境,其中一應用程式可在複數部電腦上同時作業。在這種環境中,其優點在於可保證該「清除」(或刪除或最終化)在所有機器上係以一致性的方式作業。一致性的最終化的目的為本發明之緣起。
根據本發明第十六態樣,其揭示一種多重電腦系統,其具有至少一應用程式,每個係被撰寫成僅在一單一電腦上作業,但同時在由一通信網路互連的複數部電腦上執行,其中該等應用程式之不同部份實質上在該等電腦中不同的電腦上同時執行,且對於每個該部份產生複數個實質上相同的物件,其每個在該相對應電腦上,且每個具有實質上相同的名稱,且其中每個該等相同的物件在當每部該等複數部電腦不再需要參照到它們相對應物件時即會共同地刪除。
根據本發明第十七態樣,其揭示經由一通信鏈結互連的複數部電腦,且同時操作至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,其中每個該電腦實質上同時執行該應用程式的一不同部份,每個該電腦在操作其應用程式部份時可需要或不再需要參照到僅在本地記憶體中的一物件,其實體係位在每部該電腦上,由每部該電腦所使用之本地記憶體的內容基本上類似,但在每個實例中並不相同,且該等電腦中每一部具有一最終化例式,其僅在當該複數部電腦中每一部不再需要參照到它們相對應之物件時即刪除一未參照的物件。
根據本發明第十八態樣,其揭示一種方法在複數部電腦上同時執行至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,該等電腦藉由一通信網路互連,該方法包含以下步驟:(i)在該等電腦中不同電腦上執行該應用程式之不同部份,且對於每個該部份產生複數個實質上相同物件,其每個在該相對應電腦上,且每個具有一實質上相同的名稱,且(ii)當所有該複數部電腦不再需要參照到它們相對應物件時即會共同地刪除所有該等相同物件。
根據本發明第十九態樣,其揭示一種方法,以保證一應用程式的一致性最終化,其被寫入僅在一單一電腦上作業,但其不同的部份係要在透過一通信網路互連的複數部電腦中不同的電腦上同時執行,該方法包含以下步驟:(i)在載入當中、或之前或之後詳查該應用程式,以偵測定義一最終化例式之每個程式步驟,及(ii)修正該最終化例式,以保證僅有在當每部該等電腦不再需要參照到它們相對應的物件時共同刪除在所有該等電腦上相對應之物件。
根據本發明第二十態樣,其揭示一種多重執行緒處理電腦作業之方法,其中被撰寫成僅在一單一電腦上作業之一單一應用程式之個別執行緒係同時正在處理,其每個係在透過一通信鏈結互連的複數部電腦中一不同的相對應電腦上,且其中在實體上關連於該電腦的本地記憶體中的物件處理每個執行緒,其在每部其它電腦之本地記憶體中具有相對應的物件,該改善包含當該複數部電腦之每一部不再需要參照到它們相對應的物件時即共同地刪除所有該等相對應物件。
根據本發明第二十一態樣,其揭示一種多重電腦系統,其具有至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,但在由一通信網路互連的複數部電腦上同時執行,其中該應用程式之不同部份在該等電腦中不同的電腦上實質上同時執行,且對於每個部份產生複數個實質上相同的物件,其每個在該相對應電腦上,且每個具有一實質上相同的名稱,且該系統包括一鎖定機制或鎖定手段,其可應用到所有該等電腦,其中任何想要利用其中一有名稱物件的電腦可由該等鎖定機制取得一授權鎖定,其可允許該使用,並可防止所有其它電腦使用它們相對應之有名稱物件,直到該授權鎖定被放棄。
根據本發明第二十二態樣,其揭示經由一通信鏈結互連的複數部電腦,且同時操作至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,其中每個該電腦實質上同時執行該應用程式的一不同部份,每個該電腦在操作其應用程式部份時利用到僅在本地記憶體中的一物件,且實體上位在每個該部電腦中,由每部該電腦所使用之本地記憶體的內容基本上類似,但在每個實例中並不相同,且該等電腦中每一部具有一取得鎖定例式及一釋放鎖定例式,其可允許僅由一部電腦使用該本地物件,且每個該其餘的該等複數部電腦被鎖定排除使用它們相對應物件。
根據本發明第二十三態樣,其揭示一種方法在複數部電腦上同時執行至少一應用程式,其每個被撰寫成僅在一單一電腦上作業,該等電腦藉由一通信網路互連,該方法包含以下步驟:(i)在該等電腦中不同的電腦上執行該應用程式之不同部份,且對於每個該部份產生複數個實質上相同的物件,其每個在該相對應電腦上,且每個具有一實質上相同的名稱,及(ii)任何想要利用其中一有名稱物件的該等電腦需要取得一授權鎖定,其可允許該使用,且可防止所有其它電腦使用它們相對應之有名稱物件,直到該授權鎖定被放棄。
根據本發明第二十四態樣,其揭示一種方法,以保證一應用程式的一致性同步化,其被寫入僅在一單一電腦上作業,但其不同的部份係要在透過一通信網路互連的複數部電腦中不同的電腦上同時執行,該方法包含以下步驟:(i)在被載入、在之前或在之後詳查該應用程式以偵測每個定義一同步化例式之程式步驟,及(ii)修正該同步化例式以保證一物件僅由一電腦使用,並防止所有其餘電腦同時利用它們相對應的物件。
根據本發明第二十五態樣,其揭示一種多重執行緒處理電腦作業之方法,其中被撰寫成僅在一單一電腦上作業之一單一應用程式之個別執行緒係同時正在處理,其每個係在透過一通信鏈結互連的複數部電腦中一不同的相對應電腦上,且其中在實體上關連於該電腦的本地記憶體中的物件處理每個執行緒,其在每部其它電腦之本地記憶體中具有相對應的物件,該改善包含僅允許該等電腦中的一部使用一物件,並防止所有其餘電腦同時使用它們相對應的物件。
根據本發明第二十六態樣,其揭示一種電腦程式產品,其包含一組程式指令,其儲存在一儲存媒體中,並可用以允許複數部電腦執行上述的方法。
根據本發明第二十七態樣,其揭示一分散式執行時間及分散式執行時間系統,用以構成複數電腦、運算機器或資訊家電之間的通信。
根據本發明第二十八態樣,其揭示一種修正器、修正器手段及修正器例式,以修正一應用程式,其被寫入一次在一單一電腦或運算機器上執行,以同時在複數個網路化電腦或運算機器上執行。分散式執行時間與分散式執行時間系統用以構成複數部電腦、運算機器或資訊家電之間的通信。
根據本發明第二十九態樣,其揭示一種電腦程式及電腦程式產品,其被寫入僅在一單一電腦上作業,但產品包含一組程式指令,其儲存在一儲存媒體中,並可用以允許複數部電腦執行上述的例式、作業及方法。
附錄之參考
雖然本說明書提供了本發明數個具體實施例之完整及詳細的說明,使得本發明可被瞭解,並可以不需要參照其它材料而實施,該說明書包括附錄A,B,C及D,其中提供範例性實際程式或程式碼片段,其可實施所描述之具體實施例的多個態樣。雖然本發明之各態樣在整個說明書中的說明包括附錄、圖面及申請專利範圍,其可瞭解到附錄A係主要關於欄位,附錄B主要關於初始化,附錄C主要關於最終化,而附錄D主要關於同步化。更特定而言,所附的附錄當中提供:附錄A1-A10例示了範例程式碼,以說明關於欄位之本發明具體實施例。
附錄B1為來自一未修正類別初始化<clinit>之範例性典型碼片段,附錄B2為對於一修正的類別初始化<clinit>指令的同等者。附錄B3為來自一未修正的物件初始化<init>指令之典型的碼片段。附錄B4為對於一修正的物件初始化<init>指令的一同等者。此外,附錄B5為附錄B2之程式碼對於一未修正的類別初始化指令的另一個選擇,而附錄B6為附錄B4之程式碼對於一未修正的物件初始化<init>指令的另一個選擇。再者,附件B7為InitClient之範例性電腦程式原始碼,其對一「初始化伺服器」查詢該相關類別或物件之初始化狀態。附錄B8為InitServer之電腦程式原始碼,其接收InitClient之一初始化狀態查詢,並回應而傳回該相對應之狀態。類似地,附錄B9為用於附錄B1-B6之先前/之後範例中的該範例應用程式之電腦程式原始碼。
其將可瞭解到在此處提供之說明目的在於附錄的分類化,以及在此說明中其它的標題及副標題的使用係要做為讀者的輔助,而並非以任何的方式限制本發明之範圍。
本發明揭示一種修正的電腦架構,其使得一應用程式可在複數部電腦上同時執行,其方式可克服前述習用的架構、系統、方法及電腦程式之限制。
在一態樣中,在每部電腦內共用的記憶體可用修正及/或覆寫來更新,所以所有記憶體讀取請求皆可在本地滿足。先前在程式載入期間或之後,但在執行該程式碼之相關部份之前或類似者,重造成記憶體中重新寫入或操縱之指令可被識別出來。額外的指令***到該程式碼(或其它做成的修正)可造成在所有電腦中同等記憶體位置進行更新。本發明並不限於JAVA語言或虛擬機器,範例性具體實施例係關於JAVA語言及標準來說明。在另一態樣中,提供了JAVA語言類別與物件(或其它資產)的初始化,所以所有電腦之所有記憶體位置依相同方式初始化。在另一態樣,JAVA語言類別及物件之最終化亦可提供,所以最終化僅在當出現在所有機器上的最後類別或物件不再被需要時才發生。在又另一態樣中,提供同步化,使得造成該應用程式取得(或釋放)對一特定資產之鎖定(同步化)的指令可被識別。其中***有額外的指令(或其它執行的程式碼修正)以產生一修正的同步化例式,用於所有電腦的更新。
本發明亦揭示一種運算環境及運算方法,其中一應用程式在複數部電腦上同時作業。在這種環境中,其有利的是可保證上述的初始化、清除及同步化例式在所有該等機器上以一致及協同的方式作業。這些記憶體複製、物件或其它資產初始化、最終化及同步化可分別使用及應用在多種運算及資訊處理環境。再者,它們較佳地是可實施及應用在任何的組合中,藉以提供綜效給多重電腦處理,例如網路為主的分散式運算。
因為本發明之每一種架構、系統、程序、方法及電腦程式態樣(例如記憶體管理及複製、初始化、最終化及同步化)皆可獨立地應用,因此將先進行說明,而不會參照到其它態樣。但是要瞭解到,在本說明中所提到的目的、類別、會其它資產產生或初始化,通常皆在這些目的、類別或其它資產的最終化之前。
在此處所提供的進一步說明之下將可更加瞭解到,本發明之特徵之一係要使其成為一種共用的應用程式或應用碼,及其可執行版本(具有類似的修正),其係在複數部電腦或機器M1...Mn之間同時或同步地執行。在之後的許多細節中所說明者為本發明係由在每部機器上執行相同的應用程式來達到此目的(例如Microsoft Word或Adobe Photoshop CS2),但是修正每部機器上的應用程式之可執行碼為必要的,使得在每部機器上每個執行例證“instance”("複本")可以與在任何特殊機器上的其本地作業可以與在其它機器上個別例證之作業相協調,使得它們皆可由一致性、協調及調和的方式一起工作,並使其外觀上為該應用的一個共通例證(即超應用(meta-application))。
根據本發明之具體實施例,一單一應用碼50(有時候非正式地稱為應用或應用程式)可以同時在透過一通信網路或其它通信鏈結或路徑53互連的一些機器M1,M2...Mn上同時地作業。該通信網路或路徑可為任何電子發信、資料或數位通信網路或路徑,較佳地是為一相當低速之通信路徑,例如網際網路上的一網路連接,或任何共用的網路組態,其已知或可做為該日期或此應用程式,及其延伸及改善。
藉由範例(但非限制),一應用碼或程式50可為該等機器上的單一應用,例如Microsoft Word,相對於每部機器上不同的應用,例如在機器M1上為Microsoft Word,機器M2上為Microsoft PowerPoint,及機器M3上的Netscape Navigator等等。因此,該術語「一個」應用碼或程式,及一「共用」應用碼或程式係用於嘗試及捕捉此狀況,其中所有的機器M1,...,Mn係操作或執行相同的程式或碼,且不是不同(及不相關的)程式。換言之,相同或實質上相同的應用碼之複本或複製品係載入到每個互操作及連接的機器或電腦。因為每部機器或電腦之特性可以不同,該應用碼50可在載入之前、該載入處理期間做修正,且在該載入處理之後具有一些限制,以提供在每部機器上該碼之顧客化或修正。在該等程式之間的一些不相似性可以允許,只要在此處所說明的互通性、持續性及協調性之需求可以維持。在之後將可瞭解到,每部操作相同應用碼50之機器M1,M2,...Mn,在每部機器M1,M2,...Mn,及因此所有的機器M1,M2,...Mn具有相同或實質上相同的應用碼50,通常會具有機器特定之修正。
類似地,每個機器M1,M2,...Mn具有在每部機器M1,M2,...,Mn上之相同(或實質上相同或類似)的修正子51(在一些具體實施例中實施為一分散式運算時間或DRT 71作業,因此所有的機器M1,M2,...Mn對於每個需要的修正具有相同(或實質上相同或類似)之修正子51。例如不同的修正對於記憶體管理及複製、初始化、最終化及/或同步化皆需要(雖然對於所有的具體實施例並不需要所有這些修正種類)。
此外,於每部機器M1,M2,...,Mn上在載入該應用碼50(或其相關部份)或在其執行之前的任何時間,每個應用碼50已經根據相同的規則由相對應的修正子51所修正(或實質上相同的規則,因為微幅的最佳化改變皆在每個修正子51/1,51/2.,,,51/n之內所允許)。當在任何特定機器上需要個別的修正時,例如對於機器M2,以影響該機器之記憶體管理、初始化、最終化、及/或同步化,然後每部機器事實上可根據複數個個別修正子(例如51/2-M(M2記憶體管理修正子),51/2-I(如M2初始化修正子),51/2-F(如M2最終化修正子)及/或51/2-S(如M2同步化修正子))來具有及被修正;或是可以結合其它任何一或多個這些修正子成為該電腦或機器之組合的修正子。在至少一些具體實施例中,在執行所需要的步驟來識別所需要的修正、並在執行實際修正時、並以有組織、一致性及協調性方式之電腦或機器的複數部或群集之作業的協調中皆會很有效率。這些修正可以根據本發明之各態樣由在以下詳細說明之分散式執行時間手段71來執行。在類似的方法中,具有本技術中一般技能之那些工作者在此處所提供的說明之下,將可瞭解到該分散式執行時間、分散式執行時間系統及分散式執行時間手段之結構性及方法論態樣,因為它們在此處之說明係特定於記憶體管理、初始化、最終化及/或同步化可以結合,所以一應用程式或應用碼所需要的任何修正皆可獨立進行、或組合進行,以達到在任何特定機器上或橫跨複數部機器M1,M2,...,Mn中任何所需要的記憶體管理、初始化、最終化及/或同步化。
利用所提供的對於任何記憶體管理修正子之特定參照,整個修正子或分散式執行時間手段之這些記憶體管理修正子51-M或DRT 71-M或其它碼修正手段組件係負責在每部個別機器M1,M2,...Mn上產生或複製一記憶體結構及內容,而可允許該複數部機器相互運作。在一些具體實施例中,此複製的記憶體結構將為相同,在其它具體實施例中,此記憶體結構將具有相同的部份及其它不相同的部份,另有其它的具體實施例中,該等記憶體結構或可不相同。
參照到可能存在之任何初始化修正子,整體修正子或分散式執行時間手段之這些初始化修正子51-I或DRT 71-I或其它碼修正手段組件係負責修正該應用碼50,所以其可執行初始化例式或其它初始化作業,例如像是在JAVA語言及虛擬機器環境中的類別及物件初始化方法或例式,其係以一協調、調和及一致性的方式橫跨該複數部個別機器M1,M2,...Mn。
參照到可能存在之最終化修正子,這些最終化修正子51-F或DRT 71-F或其它碼修正手段係負責修正該應用碼50,所以該碼可執行最終化清除、或其它記憶體改造、回收、刪除或最終化作業,例如像是在JAVA語言及虛擬機器環境中的類別及物件最終方法或例式,其係以一協調、調和及一致性的方式橫跨該複數部個別機器M1,M2,...Mn。
再者,參照到可能存在的任何同步化修正子,這些同步化修正子51-S或DRT 71-S或其它碼修正手段係負責保證當在一或多部機器上執行之修正過的應用程式50之一部份(例如一執行緒或處理)專門地利用(例如藉由一同步化例式或類似或同等的相互排除運算子或作業)一特定的本地資產,例如一物件50X-50Z或類別50A,在機器M2...Mn上沒有其它不同及可能同步地執行部份獨特地立刻或同時間利用對應於在其本地記憶體中類似的相等對應資產。
這些結構及程序在需要時以組合方式應用時,其維持一運算環境,其中記憶體位置、位址範圍、物件、類別、資產、資源或任何一電腦或運算環境之任何其它程序性或結構性態樣皆為在需要時產生、維持、操作及撤銷或刪除,其係以一協調、調和及一致性方法橫跨在該複數部個別機器M1,M2...Mn。
現在將注意力移到本發明數個態樣當中的特殊性,其可單獨利用或以任何組合方式利用。
記憶體管理及複製
連接到第5圖,根據本發明一較佳具體實施例,一單一應用碼50(有時候更為非正式地稱之為應用或應用程式)可以在透過一通信網路或其它通信鏈結或路徑53互連的一些機器M1,M2...,Mn上同時作業。藉由範例(但非限制),一應用碼或程式50將可為在該等機器上一單一共用應用程式,例如Microsfot Word,相對於在每部機器上不同的應用,例如在機器M1上的Microsoft Word,機器M2上的Microsoft PowerPoint,及機器M3上的Netscape Navigator等等。因此,該術語「一個」、「單一」及「共用」應用碼或程式係用於嘗試及捕捉此狀況,其中所有的機器M1,...,Mn係操作或執行相同的程式或碼,且不是不同(及不相關的)程式。換言之,相同或實質上相同的應用碼之複本或複製品係載入到每個互操作及連接的機器或電腦。因為每部機器或電腦之特性可以不同,該應用碼50可在載入之前、該載入處理期間或在該載入處理之後做修正,以提供在每部機器上該碼之顧客化或修正。在該等程式之間的一些不相似性可以允許,只要在此處所說明的互通性、持續性及協調性之需求可以維持。在之後將可瞭解到,每部操作相同應用碼50之機器M1,M2,...Mn,在每部機器M1,M2,...Mn,及因此所有的機器M1,M2,...Mn具有相同或實質上相同的應用碼50,通常會具有機器特定之修正。
類似地,每部機器M1,M2,...Mn在每部機器M1,M2,...Mn上利用相同(或實質上相同或類似)修正子51作業,因此所有的機器M1,M2.,,,Mn具有相同(或實質上相同或類似)修正子51,而機器M1之修正子指定為51/1,機器M2之修正子指定為51/2等。此外,在載入之前或載入期間,或是在執行之前,或甚至在已經進行之後,每部機器M1,M2,...Mn上的應用碼50係由相對應的修正子51根據相同的規則來修正(或實質上相同的規則,因為在每個修正子51/1,51/2,...,51/n內允許微小的最佳化改變)。
因為在此處提供的進一步說明之下將可更為瞭解到,本發明之特徵之一係使其出現應用碼50之一應用程式例證係橫跨所有該複數部機器M1,M2,...,Mn上同時地執行。在之後的許多細節中所說明者為本發明係由在每部機器上執行相同的應用程式碼來達到此目的(例如Microsoft Word或Adobe Photoshop CS2),但是修正每部機器上的應用程式之可執行碼為必要的,使得在該等機器M1~Mn中每部機器上每個執行事件(或"本地例證")可以將其本地作業與在其它機器之每一部上個別的事件之作業協調,使得該複數部機器中每一部上的每個事件可由一致性、協調及調和的方式一起工作,藉此使其外觀上為該應用及程式碼的一個共通例證(或事件)(即超應用(meta-application))。
上述的配置之結果,如果每部機器M1,M2,...,Mn具有像是10MB之內部記憶體容量,則每個應用碼50可用之整個記憶體不需要做為一個可以期待為機器數目乘以10MB,或是所有n部機器之內部記憶體容量之增加性組合,但仍可僅為10MB。當該等機器的內部記憶體容量不同的狀況下,其係可允許的,然後在當一部機器中的內部記憶體小於至少一部其它機器之內部記憶體容量時,則任何機器之最小記憶體的大小可以做為該等機器之最大記憶體容量,其係當這種記憶體(或其一部份)被視為一「共用」記憶體(即在每部機器M1...Mn上類似相等的記憶體)或另外用於執行該共用應用碼。
但是,即使每部機器的內部記憶體被對待的方法初始時可呈現為效能的一種可能限制,這樣會如何造成改善的作業及效能將在以下更加明顯。自然地,每部機器M1,M2...,Mn具有一私密(即「非共用」)內部記憶體容量。該等機器M1,M2,...,Mn之私密內部記憶體容量通常大致相等,但不一定要相等。其亦較佳地是選擇每部機器中內部記憶體的大小,以達到每部機器中所想要的效能水準,並其橫跨連接的或耦合的複數部機器、電腦或資訊家電M1,M2,...,Mn之群集或網路。在已經說明了這些內部及共用記憶體的考量之後,其將可在此處所提供的說明之下瞭解到在機器之間可共用之記憶體大小並非本發明的一種限制。
由先前技術中已知可以在該應用的一特定語言中操作一單一電腦或機器(由多個製造商之一所製造,並具有以多種不同語言中的一種運作的一作業系統),藉由產生一虛擬機器,如第6圖所示。第6圖之碼、資料及虛擬機器組態或配置所採取的形式為以Java語言所寫成之應用碼50,並在一Java虛擬機器61內執行。因此,當該應用之內部語言為Java語言時,其使用一JAVA虛擬機器,其能夠在運作Java寫成的碼,而無關於機器製造商及該機器的內部細節。進一步的細節請參見美國Sun Microsystems公司T.Lindholm及F.Yellin所撰之“The JAVA Virtual Machine Specification”第2版,其在此引用做為參考。
第6圖之習用技術配置根據本發明之具體實施例做修正,其提供一額外的設施,習慣上稱之為「分散式執行時間」或「分散式執行時間系統」DRT 71,如第7圖中所示。
在第7圖中,該應用碼50被載入到Java虛擬機器72中,並與該分散式執行時間系統71共同運作,其係透過箭頭75所指示的載入程序。如此處所使用之術語「分散式執行時間」及「分散式執行時間系統」,其基本上為同義字,其藉由例示(但非限制)可通常瞭解為包括程式庫碼及處理,其可支援在一特定平台上所執行以一特定語言寫成的軟體。此外,一分散式執行時間系統亦可包括程式庫碼及處理,其可支援在一特定分散式運算環境中執行之以一特定語言寫成的軟體。該執行時間系統基本上處理了該程式與該作業系統之間的介面之細節,例如系統呼叫、程式啟動及終止、及記憶體管理。為了說明背景,並未提供本發明所需要之創新的分散式執行時間或分散式執行時間系統71之能力的一習用分散式運算環境(DCE)可由該Open Software Foundation取得。此分散式運算環境(DCE)可執行在該等機器上執行之軟體的電腦對電腦通信的形式,但在其許多限制中,其不能夠實施此發明之修正或通信作業。在其許多功能及作業當中,本發明之DRT 71可協調該複數部機器M1,M2,...Mn之間的特定通信。再者,本發明之分散式執行時間71在由機器JVM#1,JVM#2,...JVM#n之每部JAVA虛擬機器72上的JAVA應用50之箭頭75所指出的載入程序期間開始作業。於載入期間的作業順序將在以下參考第9圖來說明。其將可在此處所提供之說明而瞭解到雖然此處提供的許多範例及說明皆相對於JAVA語言及JAVA虛擬機器來提供,所以讀者可以取得特定範例之好處,但本發明並不限於JAVA語言或JAVA虛擬機器,或是受限於任何其它語言、虛擬機器、機器或作業環境。
第8圖顯示了第5圖之配置的修正形式,其利用了JAVA虛擬機器,其每個在第7圖中例示。其將可瞭解到其再次地載入相同的應用碼50到每部機器M1,M2..Mn上。但是,每部機器M1,M2,...,Mn之間的通信,其由箭頭83代表,雖然透過該機器硬體做實體導引,其較佳地是由每部機器內個別的DRT 71/1...71/n所控制。因此,實際上此可在觀念上視為DRT的71/1,...71/n,其透過該網路或其它網路鏈結73來彼此通信,而非透過機器M1,M2,...Mn它們本身或彼此之間的直接通信。實際上,本發明考慮到並包括此機器M1,M2,...,Mn或DRT 71/1,71/2,...71/n之間的此直接通信或這些通信的組合。本發明之DRT 71提供的通信在傳輸、協定及鏈結上為獨立。
其將可瞭解到在此處的說明之下,該修正子51及該分散式執行時間71會有另外的實施。例如,該修正子51可以實施該分散式執行時間71之一個組件或在其內,因此該DRT 71可以實施該修正子51之功能及作業。另外,該修正子51之功能及作業可以在用於實施該DRT 71之結構、軟體、韌體或其它手段之外實施。在一具體實施例中,該修正子51及DRT 71係實施或寫入在電腦程式碼的單一段落中,而可提供該DRT及修正子之功能。因此該修正子功能及結構可能包含在該DRT中,並視為一選擇性組件。在如何實施之外,該修正子功能及結構係負責修正該應用碼程式之可執行碼,且該分散式執行時間功能及結構係負責實施該等電腦或機器之間的通信。在一具體實施例中的通信功能係透過在每部機器上之DRT的電腦程式碼內的一中間協定層來實施。例如該DRT可實施在該JAVA語言中的一通信堆疊,並使用該傳輸控制協定/網際網路協定(TCP/IP)來提供該等機器之間的通信或對話。實際上這些功能或作業是如何實施或分割在結構性及/或程序性元素之間,或是在本發明之電腦程式碼或資料結構之間,皆比它們所提供者要來得不重要。
但是,在第8圖所例示的配置中(亦在第31-32圖中),其提供複數部個別電腦或機器M1,M2,...Mn,其每個係透過一通信網路53或其它通信鏈結來互連,且每部個別的電腦或機器具有一修正子51(請參見第5圖),並由例如該分散式執行時間(DRT)71(參見第8圖)所釋放,並載入有一共用應用碼50。該術語共用應用程式係要理解為代表一應用程式或應用程式碼,其寫成在單一機器上作業,並載入在該複數部電腦或機器M1,M2...Mn上整體或部份地執行,或視需要在該複數部電腦或機器M1,M2...Mn之某個子集合中每一個之上來執行。但有些不同地是,有一種共用應用程式,以應用碼50所代表,且此單一複本或可能是複數個相同複本係被修正來產生該應用程式或程式碼的一修正複本或版本,每個複本或例證係預備在該複數部機器上執行。在它們被修正之後,如果它們執行類似的作業,並彼此一致性及調和性地操作,即視為是共用。其將可瞭解到,實施本發明之特徵的複數部電腦、機器、資訊家電或類似者,可視需要連接或耦合到並未實施本發明之特徵的其它電腦、機器、資訊家電或類似者。
基本上在至少一具體實施例中,該修正子51或DRT 71或其它碼修正手段即負責修正該應用碼50,所以其可在JAVA語言及虛擬機器環境中執行記憶體操縱作業,例如記憶體PUTSTATIC及PUTFIELD指令,其係在一協調的、一致及調和的方式,並橫跨該複數部個別機器M1...Mn之間。因此接下來在這種運算環境中,其必須保證每個記憶體位置以一致性的方式操縱(相對於其它者)。
在一些具體實施例中,部份或所有的該複數部個別電腦或機器可以包含在單一外殼或機殼內(例如所謂刀鋒伺服器,由Hewlett-Packard Development公司、Intel公司、IBM公司及其它所製造),或是實施在一單一印刷電路板上,或甚至在一單一晶片或晶片組內。
一機器(由多家製造商中任何一家製造,並具有在多種不同語言中任何一種操作的一作業系統),其可在該應用程式碼50之特定語言中操作,在此例中為JAVA語言。也就是說,一JAVA虛擬機器72能夠操作在JAVA語言中的應用碼50,並利用無關於該機器製造商及該機器的內部細節之JAVA架構。
當實施在一非JAVA語言或應用碼環境中,該泛用化平台、及/或虛擬機器、及/或機器、及/或執行時間系統,皆能夠操作在該平台的語言中的應用碼50(可能包括例如(但不限於)任何一種或多種的原始碼語言、中介碼語言、物件碼語言、機器碼語言及任何其它碼語言),及/或虛擬機器、及/或機器、及/或執行時間系統環境,並利用該平台、及/或虛擬機器、及/或機器、及/或執行時間系統、及/或語言架構,而無關於該機器製造商及該機器的內部細節。其將亦可在此處所提供的說明中瞭解到該平台及/或執行時間系統可包括虛擬機器及非虛擬機器軟體及/或韌體架構,以及硬體及直接硬體編碼應用及實施。
對於一更為一般性的虛擬機器或摘要機器環境的組合,且對於目前及未來的電腦及/或運算機器及/或資訊家電或處理系統,且其可不利用或不需要利用到類別及/或物件,本發明之結構、方法及電腦程式及電腦程式產品仍將可應用。不會利用類別及/或物件之電腦及/或運算機器之範例包括例如由Intel公司及其它公司所製造的x86電腦架構,由Sun Microsystems公司及其它公司所製造的SPARC電腦架構,及由IBM公司及其它公司所製造的PowerPC電腦架構,及由Apple電腦公司及其它公司所製造的個人電腦產品。對於這些種類的電腦、運算機器、資訊家電,及並未利用類別或物件觀念而在其上實施的虛擬機器或虛擬運算環境,例如其可被一般化來包括基本資料型別(例如整數資料型別、浮點資料型別、長整數資料型別、雙重資料型別、字串資料型別、符號資料型別及布林資料型別)、結構化資料型別(例如陣列及記錄)衍生的型別,或其它程序性語言的碼或資料結構、或其它語言及環境,例如函數、指標、組件、模組、結構、參照及集合。
現在請參考第7圖及第9圖,於該載入程序75期間,該應用碼50正被載入到每個JAVA虛擬機器72上,其由DRT 71所修正。此修正在第9圖之步驟90中進行,並包含該初始步驟91,其較佳地細查或分析該碼,並偵測所有可由該應用碼50所定址的記憶體位置,或視需要為可由該應用碼50所定址的所有記憶體位置之某個子集合;例如像是有名稱及無名稱記憶體位置,變數(例如本地變數、共用變數、及正式引數到子例式或函數)、欄位、暫存器、或任何其它位址空間、或應用碼50可存取之位址的範圍。在某些例子中這種記憶體位置需要在步驟92及93中對於後續的處理來識別。在一些具體實施例中,對於進一步處理需要一個表列之偵測的記憶體位置,於該載入程序75期間的DRT 71產生一系列藉此被識別的所有記憶體位置。在一具體實施例中,形式為JAVA欄位的該等記憶體位置係由物件及類別來列出,但是該等記憶體位置、欄位或類似者可以用任何方式列出或組織,只要它們符合該系統之結構化及程式化需求,其上要使用該程式,及在此所述之本發明的原理。此偵測為選擇性,且並非在本發明之所有具體實施例中皆需要。其可注意到該DRT至少部份可以完成該修正子51之名單。
該修正程序之下一階段(第9圖中指定的步驟92)[Step 92]係要搜尋整個應用碼50,藉以在需要時,定位出操縱或改變對應於在步驟91所產生的該表列之任何列出之記憶體位置的數值或內容(例如但不限於JAVA欄位)之活動。較佳地是,操縱或改變任何一或多個列出之記憶體位置的任何一或多個數值或內容之所以處理活動皆被定位出來。
當偵測到這種處理活動或作業(基本上是JAVA語言中的"putstatic"或"putfield",或例如一記憶體指定作業、或一記憶體寫入作業、或一記憶體操縱作業、或更為一般性作業,其另可操縱或改變記憶體或其它可定址區域之數值或內容),其可改變一列出的或偵測的記憶體位置之數值或內容,然後由應用碼50中的步驟93***在一「更新傳遞例式」,其對應於該偵測到的記憶體操縱作業,以與所有其它機器通信,藉以通知所有其它機器該操縱的記憶體位置之識別,及該操縱的記憶體位置之更新過、操縱的或改變的數值或內容。該***的「更新傳遞例式」較佳地是採取形式為方法、函數、程序或類似的子例式呼叫、或作業到DRT 71之網路通信程式庫。另外,該「更新傳遞例式」可採取一種碼區塊的選擇性形式(或其它線上碼形式),其***到該應用碼指令串流,時機在對應於該偵測的操縱指令或作業期間、之後、之前或其它時間。而較佳地是,在一多工或平行處理機器環境(且在一些具體實施例中包含或不含作業系統),例如一種機器環境能夠有可能同時或同步執行多種或不同的執行緒或處理,該「更新傳遞例式」可在相同執行緒或處理或處理器上執行,如同步驟92之偵測的記憶體操縱作業。然後,該載入程序即繼續,藉著載入該修正的應用碼50在該機器72上,以取代該未修正的應用碼50,如第9圖之步驟94所表示。
另一種在載入期間修正的形式例示於第10圖中。此處之開始及列表步驟90,91及該搜尋步驟92相同於第9圖。但是,除了***該「更新傳遞例式」到該應用碼50當中係對應於在步驟92中所指的該偵測的記憶體操縱作業,如在步驟93中所代表,其中該DRT之應用碼50或網路通信程式庫碼71在相同的執行緒或處理或處理器上執行,如同該偵測到的記憶體操縱作業,執行該更新,而令一「警示例式」被***以對應於步驟103中的該偵測到的記憶體操縱作業。該「警示例式」指示、通知、或另可要求一不同且可能同時或同步地執行執行緒或處理或處理器,其並未用於執行該記憶體操縱作業(也就是說,不同於操縱該記憶體位置之執行緒或處理或處理器之一不同的執行緒或處理或處理器),例如配置給該DRT 71之不同的執行緒或處理,以執行該操縱的記憶體位置之識別的所有其它機器之通知、傳遞或通信,以及該操縱的記憶體位置之更新、操縱、或改變的數值或內容。
一旦於該載入程序期間的此修正已經發生,且該修正的應用碼50開始執行,則為發生第11圖或第12圖之步驟。第11圖(及其中的步驟112,113,114及115)對應於該修正的應用碼50之執行及作業,當其根據在第9圖中所揭示及描述的程序來修正時。另一方面第12圖(其中的步驟112,113,125,127及115)在其中揭示對應於該修正的應用碼50之執行及作業,當其根據第10圖做修正時。
此該應用碼50之分析或細查可在載入該應用程式碼50之前、或在該應用程式碼50載入程序期間發生,或甚至在該應用程式碼50載入程序之後發生。其可類似於一安裝、程式轉換、轉譯、或編譯程序,其中該應用碼可用額外的指令來實施,及/或另可由意義保留程式操縱所修正,即/或選擇性地由一輸入碼語言轉譯到一不同的碼語言(例如像是由原始碼語言或中介碼語言轉譯到物件碼語言或機器碼語言),並瞭解到該術語編譯通常或習用上包含了碼或語言中的改變,例如由原始碼或物件碼,或由一種語言到另一種語言。但是,在本例中該術語「編譯」(及其文法上同等者)並沒有那麼多限制,且亦可包括或含有在相同碼或語言內的修正。例如,該編譯及其同等者可瞭解為同時包含正常編譯(例如像是藉由例示而非限制,由原始碼到物件碼),且由原始碼編譯成原始碼,以及由物件碼編譯到物件碼,以及其中任何改變的組合。其亦可包括所謂的「中介碼語言」,其形式為「虛擬物件碼」。
藉由例示且並非限制,在一具體實施例中,該應用碼50之分析或細查可在載入該應用程式碼期間發生,例如藉由該作業系統由該硬碟或其它儲存裝置或來源讀取該應用碼,並將其複製到記憶體,並預備開始執行該應用程式碼。在另一具體實施例中,於JAVA虛擬機器中,該分析或細查可在該java.lang.ClassLoader loadClass方法(如java.lang.ClassLoader.loadClass())之類別載入程序期間發生。
另外,該應用碼50之分析或細查可以甚至在該應用程式碼載入程序之後發生,例如在該作業系統已經載入該應用碼到記憶體之後,或選擇性地甚至在該應用程式碼之相關的對應部份已經開始執行之後,例如像是在該JAVA虛擬機器已經載入該應用碼到該虛擬機器當中之後,其係透過"java.lang.ClassLoader.loadClass()"方法,且選擇性地進行執行。
如第11圖所示,一多重執行緒處理機器環境110存在於每部機器M1,...Mn之上,並包含執行緒111/1...111/4。該第二執行緒111/2之處理及執行(在此範例中)造成步驟113中執行緒111/2操縱一記憶體位置,其藉由寫入到一列出的記憶體位置。根據第9圖之步驟90-94中對於該應用碼50所做的修正,該應用碼50係在對應於步驟113之記憶體位置的地方被修正,所以其傳遞、通知或通信步驟113之操縱的記憶體位置之識別及改變的數值到其它機器M2,...Mn,其係透過網路53或其它通信鏈結或路徑,如步驟114中所示。在此階段,該執行緒111/2之應用碼50之處理可被改變,在某些狀況下在步驟114中藉由執行該***的「更新傳遞例式」所中斷,且相同的執行緒111/2通知或傳遞或通信步驟113之操縱的記憶體位置之識別及改變的數值到所有其它機器M2,...Mn,透過該網路53或其它通信鏈結或路徑。在該通知、傳遞或通信程序114結束時,該執行緒111/2即繼續在步驟115中之修正的應用碼50之處理或執行。
在第12圖所示的另一種配置中,一多重執行緒處理機器環境110包含或具有執行緒111/1,...111/3,及一同時或同步執行DRT處理環境120包含該執行緒121/1,如圖所示,或選擇性複數個執行緒,皆在機器M1,...Mn的每一部上執行。在執行緒111/2之修正的應用碼50之處理及執行造成步驟113之記憶體操縱作業,其在此例中為寫入到一列出的記憶體位置。根據在第9圖中步驟90,91,92,103及94中對於該應用碼50所做的修正,該應用碼50係對應到步驟113之寫入到記憶體位置之地方被修正,所以其要求或另外通知該DRT處理環境120之執行緒來通知或傳遞或通信步驟113之操縱的記憶體位置之識別及改變的數值到其它機器M2,...Mn上,如步驟125及128,及箭頭127所示。根據此修正,該執行緒111/2處理及執行該修正的應用碼50要求該DRT處理環境120之一不同及可能同時或同步執行緒或處理(例如執行緒121/1)來通知步驟113之操縱的記憶體位置之識別及改變的數值到該等機器M2,...Mn,其系透過網路53或其它通信鏈結或路徑,如步驟125及箭頭127所示。回應於步驟125及箭頭127之要求,該DRT處理環境120之一不同及可能同時或同步執行緒或處理121/1及透過網路53或其它通信鏈結或路徑通知該等機器M2,...,Mn步驟113之操縱的記憶體位置之識別及改變的數值,其係由在步驟125之執行緒111/2及箭頭127上執行的修正應用碼50所要求。
當相較於稍早說明之第11圖之執行緒111/2之步驟114,第12圖之執行緒111/2的步驟125可以快速地進行,因為執行緒111/2之步驟114必須透過該相當慢的網路53(例如當相較於第1圖之內部記憶體匯流排4或第2圖之共用記憶體13時為相當慢)通知或通信機器M2,...,Mn步驟113之操縱的記憶體位置之識別及改變的數值,其中執行緒111/2之步驟125並為透過該相當慢的網路53通信於機器M2.,,,Mn。而是,執行緒111/2之步驟125要求或是另外通知該DRT處理環境120之一不同及可能同時或同步執行緒121/1來透過該相當慢的網路53通知及傳遞步驟113之操縱的記憶體位置之識別及改變的數值到機器M2,...Mn,如箭頭127所示。因此執行步驟125之執行緒111/2僅在該執行緒111/2重新開始或繼續在步驟115中的修正之應用碼的處理或執行之前被暫時地中斷。然後該DRT處理環境120之其它執行緒121/1則透過該相當慢的網路53或其它相當慢的通信鏈結或路徑傳送步驟113之操縱的記憶體位置之識別及改變的數值到機器M2,...Mn。
第12圖之第二配置可較佳地利用多個執行緒111/1...111/3及121/1的處理能力(通常其並未受到相等的需求)。無關於所使用的配置,步驟113之操縱的記憶體位置之識別及改變的數值在該網路53或其它通信鏈結或路徑上被傳遞到所有其它的機器M2...Mn上。
此係例示於第13圖,其中第11圖之步驟114或DRT 71/1(對應於第12圖之DRT處理環境120)及其第12圖之執行緒121/1(由第13圖之步驟128所代表),透過該網路53或其它通信鏈結或路徑傳送第11圖及第12圖之步驟113之操縱的記憶體位置之識別及改變的數值到每一部其它的機器M2,...,Mn。請參考第13圖,每一部其它機器M2,...,Mn執行自該網路53接收的動作,例如來自機器M1之步驟113之操縱的記憶體位置之識別及改變的數值,由箭頭135所代表,並寫入在步驟135所接收的數值到對應於在步驟135所接收之識別的記憶體位置之本地記憶體位置,如步驟136所示。
在第3圖之習用配置中,其利用分散式軟體、由一機器的軟體做記憶體存取到實體上位在另一部機器上之記憶體,其係由該網路所互連的機器所允許。但是,因為該讀取及/或寫入記憶體存取到實體上位在另一部電腦上的記憶體需要使用該慢速網路14,在這些配置中,這種記憶體存取會造成記憶體讀取/寫入處理作業之實質的延遲,其等級可能在該機器之中央處理單元的106 -107 循環左右,但最終會根據多種因素,例如像是該網路14之速率、頻寬及/或遲滯而定。此大多數會造成在第3圖之先前技術配置中多個互連之機器的效能降低。
但是,在關連於第8圖之上述的本配置中,其將可瞭解到所有記憶體位置或資料之讀取可在本地滿足,因為所有(或所有的某個子集合)記憶體位置之目前數值係儲存在執行產生該需求來讀取記憶體之處理的機器上。
類似地,在關連於第8圖之上述的本配置中,其將可瞭解到所有記憶體位置或資料之寫入可在本地滿足,因為所有(或所有的某個子集合)記憶體位置之目前數值係儲存在執行產生該需求來寫入到記憶體之處理的機器上。
根據本發明所執行的這種本地記憶體讀取及寫入處理作業基本上可在該中央處理單元的102 -103 循環內被滿足。因此實際上,對於牽涉到讀取之記憶體存取會比相對於第3圖所示及說明的配置會有實質上較短的等待。此外,實際上對於牽涉到寫入之記憶體存取會比相對於第3圖所示及說明的配置會有實質上較短的等待。
其可瞭解到大部份應用軟體較常會讀取記憶體,而較不會經常寫入到記憶體。因此,記憶體被寫入或重新寫入之速率相較於記憶體被讀取之速率相對較低。由於對於記憶體寫入或重新寫入之需求較慢,該記憶體位置或欄位可以透過可能相對較慢及較便宜之商用網路53來以一相對慢的速率來連續地更新,然而此可能相對較慢之速率足以滿足寫入到記憶體之應用程式的需求。此結果為第8圖配置之效能可優於第3圖所示。其可在此處所提供之說明之下瞭解到當一相對較慢的網路通信鏈結或路徑53因為其可提供所想要的效能及低成本而可較佳地被使用時,本發明並不限於一相對慢速之網路連接,且可使用任何通信鏈結或路徑。本發明無關於傳輸、網路及通信路徑,且不會根據機器或DRT之間的通信是如何發生。在一具體實施例中,甚至機器或DRT之間的電子郵件(EMAIL)交換即已足以用於通信。
在關於上述之另一種選擇性修正中,在網路53上所傳送之一操縱的記憶體位置之識別及改變數值配對,每個配對基本上係以例如一單一封包、訊框或單元的整個內容來傳送,其可被群組成對應於多重操縱的記憶體位置之識別及改變數值之多重配對的批次,並在網路53或其它通信鏈結或路徑上以一單一封包、訊框或單元來一起傳送。此另外的修正進一步降低了互連這些多種機器的網路53或其它通信鏈結或路徑之通信速率的需求,因為每個封包、單元或訊框可包含多重識別及改變數值配對,因此僅需要傳送較少的封包、訊框或單元。
其可瞭解到在該應用程式碼重複地寫入到一單一記憶體位置的環境中,步驟114之第11圖中所例示的具體實施例傳送一更新及傳遞訊息到對應於每一個執行的記憶體操縱作業之所有機器上。在關於上述的又另一種選擇性修正中,第12圖之DRT執行緒121/1並不需要執行對應於每一個本地記憶體操縱作業之一更新及傳遞作業,但另可傳送比記憶體操縱作業要較少的更新及傳遞訊息,每個訊息包含該操縱的記憶體位置之最後或最新改變的數值或內容,或依需要僅可傳送對應於該最後的記憶體操縱作業之一單一更新及傳遞訊息。此進一步的改善可降低對於該網路53或其它通信鏈結或路徑之需求,因為僅需要傳送較少的封包、訊框或單元。
對於本技術專業人士在此處所提供之詳細說明之下亦可瞭解到當初始記錄或產生所有記憶體位置(或欄位)、或其所有的某個子集合時,由每個DRT 71所產生的一表格、或表列、或其它資料結構對於在每部機器M1,...,Mn上每個這種記錄的記憶體位置,有一個名稱或識別在每一部機器M1,...,Mn上為共用或類似。但是,在個別機器中,對應於一給定名稱或識別(例如在第9圖之步驟91中所列出者)的本地記憶體位置將會隨時間改變,因為每部機器可以及通常將根據其本身的內部處理而儲存改變的記憶體數值或內容在不同的記憶體位置中。因此,每個DRT中的表格、表列或其它資料結構對應於一單一記憶體名稱或識別通常將具有不同的本地記憶體位置,但每個共用「記憶體名稱」或識別將具有相同的「記憶體數值」儲存在不同的本地記憶體位置中。
本技術專業人士在此處所提供的說明之下亦將可瞭解到在載入該應用程式碼50之前述的修正期間可用多種方式或藉由不同的手段來完成。這些方式或手段包括(但不限於)至少下述的五種方法,或這五種之變化或組合,其中包括有:(i)在載入時重新編譯,(ii)在載入之前藉由一預編譯程序,(iii)在載入之前編譯,(iv)一「即時性」編譯,或(v)在載入之後重新編譯(但是或例如在一分散式環境中執行相關或相對應的應用碼之前)。
傳統上該術語「編譯」意指碼或語言的改變,例如由原始碼到物件碼,或是一種語言到另一種。清楚地是在本說明中使用該術語「編譯」(及其文法上同等者)並沒有那麼多限制,且亦可包括或含有在相同碼或語言內的修正。
對於修正記憶體操縱作業來協調複數部機器M1...Mn之間的作業之基本觀念,有數種不同方式或具體實施例當中此協調、調和及一致性記憶體狀態及操縱作業觀念、方法及程序可以進行或實施。
在第一具體實施例中,一特定機器,如機器M2,載入該資產(例如類別或物件),其包括有記憶體操縱作業,修正它,然後將包含有新修正的記憶體操縱作業的修正物件(或類別或其它資產或資源)載入到每一部其它的機器上M1,M3,...Mn(其可依序或同時,或根據任何其它順序、例式或程序)。請注意到對應於該應用碼中僅一個物件可以有一或複數個記憶體操縱作業,或對應於在該應用碼中的複數個物件可有複數個記憶體操縱作業。請注意到在一具體實施例中,被載入的該記憶體操縱作業為二元化可執行物件碼。另外,被載入的該記憶體操縱作業為可執行的中間碼。
在此配置中,其可使用術語「主控者/受控者」,每部受控(或次級)機器M1,M3,...Mn載入該修正的物件(或類別),並包含由該主控(或主要)機器(例如機器M2,或某個其它機器,如第15圖中之機器X)在該電腦通信網路或其它通信鏈結或路徑上傳送給它的新修正的記憶體操縱作業。在對於此「主控者/受控者」或「主要/次級」配置的些微變化中,該電腦通信網路可由一共用的儲存裝置所取代,例如一共用的檔案系統、或一共用的文件/檔案儲存區,例如一共用的資料庫。
請注意到在每部機器或電腦上執行的修正不需要且經常不會是相同或類似。其所需要的是它們係以足夠類似的方式被修正,而其係根據此處所述之創新原理,該複數部機器之每一步對於其它機器為一致性且調和性地完成此處所述的作業及目的。再者,在此處所提供之說明之下將可瞭解到有大量的方法可以實施修正,例如可以根據該特定硬體、架構、作業系統、應用程式碼、或類似者或其它因素而定。其亦可瞭解到本發明之具體實施例可以在一作業系統內、或在任何作業系統之外或不具有其好處,在該虛擬機器內,在一EPROM內,在一軟體、韌體,或是這些的任何組合當中來實施。
在又另外的具體實施例中,每部機器M1,...,Mn接收該未修正的資產(例如類別或物件),其中包含有一或多個記憶體操縱作業,但修正該作業,然後載入包含有現在修正的作業之資產(例如類別或物件)。雖然一種機器(例如該主控或主要機器)可以顧客化或執行一不同的修正到傳送給每部機器之記憶體操縱作業,此具體實施例更可立即使得由每部機器所進行之修正略微不同,並基於其特定的機器架構、硬體、處理器、記憶體、組態、作業系統或其它因素來改進、顧客化及/或最佳化,然而仍類似、調和並與其它機器一致於所有其它類似的修正及特性,其不需要一定類似或相同。
在所述之所有具體實施例中,供應或傳送該資產碼(例如類別碼或物件碼)給該等機器M1,...Mn者,且視需要包含第15圖的一機器X,其可分支、分散或傳送於不同機器之任何組合或排列之間;例如藉由提供直接機器對機器通信(例如直接由M2供應每部M1,M3,M4等),或藉由提供或使用一串接或序列性通信(例如M2供應M1,其然後供應M3,然後供應M4,依此類推),或是該直接及串接及/或序列性的組合。
請參考所附的附錄A,其中:附錄A5為修正之前來自一記憶體操縱作業之典型的碼區段(例如具有一記憶體操縱作業之範例性未修正的例式),而附錄A6為在修正之後相同的具有一記憶體操縱作業之例式(例如具有一記憶體操縱作業之範例性修正的例式)。這些碼區段僅為範例性,並可識別一軟體碼手段,用以執行在一範例性語言中的修正。其將可瞭解到可以使用其它軟體/韌體或電腦程式碼來完成相同或類似的功能或作業,其皆不背離本發明。
附錄A5及A6(亦在以下的表VI及表VII中重現)為範例性碼表列,其提供了一例式的習用或未修正的電腦程式軟體碼(例如可用於單一機器或電腦環境中),其具有應用程式碼50之一記憶體操縱作業,及相同例式的一後修正摘錄,例如可用於本發明之具有多重機器的具體實施例中。加入到該例式之修正過的碼以粗體文字來強調。
其要注意到在該附錄中的編譯過的碼與在該表格中重複的部份採用的形式為檔案"example.java"之原始碼,其係包括在附錄A7(表VIII)中。在附錄A5及表VI之程序中,步驟001之程序名稱"Method void setValues(int,int)"為"example.java"之編譯過應用碼之setValues方法之顯示的解碼輸出的名稱。該名稱"Method void setValues(int,int)"為任選的,其對此範例選擇出來代表包含一記憶體操縱作業之一典型JAVA方法。整個方法係負責透過使用一記憶體操縱指定敘述(在此範例中為"putstatic"及"putfield")及該等步驟來寫入兩個數值或兩個不同的記憶體位置來完成在此所述之目的。
第一(步驟002),該Java虛擬機器指令"iload_1"造成該Java虛擬機器在該目前方法訊框之索引1處載入該整數值於該本地變數陣列中,並儲存此項目在目前方法訊框之堆疊的最上方,並造成該整數值傳送到此方法做為該第一引數,並儲存在索引1的本地變數陣列中,並推入到該堆疊上。
該Java虛擬機器指令"putstatic #3<Field int static Value>"(步驟003)造成該Java虛擬機器將最上方數值推出目前方法訊框的堆疊,並儲存該數值到由包含此範例setValues()方法之應用程式的classfile結構之第三個索引中的CONSTANT Fieldref info constant-pool項目所指定的靜態欄位中,並使得該目前方法訊框之堆疊的最上方數值被儲存在稱為"staticValue"的整數欄位中。
該Java虛擬機器指令"aload_1"(步驟004)造成該Java虛擬機器在該目前方法訊框之索引0處載入該項目於該本地變數陣列中,並儲存此項目在目前方法訊框之堆疊的最上方,並造成「此」物件參照儲存在索引0的本地變數陣列中,並推入到該堆疊上。
首先(步驟005),該Java虛擬機器指令"iload_2"造成該Java虛擬機器在該目前方法訊框之索引2處載入該整數值於該本地變數陣列中,並儲存此項目在目前方法訊框之堆疊的最上方,並造成該整數值傳送到此方法做為該第一引數,並儲存在索引2的本地變數陣列中,並推入到該堆疊上。
該Java虛擬機器指令"putfield #2<Field int instanceValue>"(步驟006)使得該Java虛擬機器將最上方兩個數值推出該目前方法訊框的堆疊,並由儲存最上方數值在包含此範例setValues方法之應用程式的classfile結構的第2個索引中的CONSTANT_Fieldref_info constant-pool項目所指定,並造成在該目前方法訊框之堆疊上方的整數值被儲存在該物件參照的稱為"instanceValue"之例證欄位中,在該堆疊的整數值之下。
最後,該JAVA虛擬機器指令"return"(步驟007)使得該JAVA虛擬機器藉由傳回控制給先前的方法訊框來中止執行此setValues()方法,並造成中止執行此setValues()方法。
由於這些在第1圖及第2圖中習用組態的單一機器上作業的步驟,該JAVA虛擬機器操縱(即寫入)該staticValue及instanceValue記憶體位置,並在執行包含該等記憶體操縱作業之setValues()方法中能夠保證該記憶體正是且保持一單一應用例證之多個執行緒之間的一致性,因此可保證不想要的行為(例如像是一單一應用例證之多個執行緒之間的不一致或不調和的記憶體)會這種不一致或不調和的記憶體例如為相對於一單一記憶體位置之不正確、或不同數值或內容並不會發生)。如果這些要在第5圖及第8圖之組態的複數部機器上進行,藉由同步地執行該應用程式碼50在該複數部機器M1...Mn之每一部上,在每一部機器上每一個同步執行的應用程式發生之記憶體操縱作業將會被執行,但不具有任何其它機器之間的協調,這種協調例如為更新每部機器上的相對應記憶體位置,使得它們每一個皆回報一相同內容或數值。若是以橫跨複數部機器之一致性、協調及調和的記憶體狀態及操縱與更新作業為目標,此先前技術配置將無法執行這種橫跨複數部機器之一致性、協調及調和的記憶體狀態及操縱與更新作業,因為每部機器僅在本地執行記憶體操縱,並不會嘗試與在任何一部或超過一部機器上的任何其它類似記憶體狀態來協調或更新它們的本地記憶體狀態及操縱作業。因此這種配置由於不協調、不一致及/或不調和的記憶體操縱及更新作業將會造成機器M1..Mn之間不一致及不調和的記憶體狀態。因此,本發明的目標為克服此先前技術配置之限制。
在表VII(附錄A6)之範例碼中,該碼已被修正,所以其解決了在來自表VI(附錄A5)之碼範例中未能解決之對於複數部機器M1...Mn之一致性、協調的記憶體操縱及更新作業問題。在此修正的setValues()方法碼中,一"ldc#4<String"example">指令被***在該"putstatic #3"指令之後,使其成為執行"putstaic #3"指令之後的第一個指令。此造成該JAVA虛擬機器將該字串值"example"載入到該目前方法訊框的堆疊上,並造成此字串值"example"被載入到該目前方法訊框的堆疊最上方。此改變很明顯,因為其修正該setValues()方法來載入對應於包含由該"putstatic #3"指令寫入到該堆疊上之靜態欄位位置之類別的類別名稱之一字串識別項。
再者,該JAVA虛擬機器指令"iconst_0"被***在該"ldc #4"指令之後,所以該JAVA虛擬機器載入整數值"0"到該目前方法訊框之堆疊上,並造成該整數值"0"被載入到該目前方法訊框之堆疊的最上方。此改變很明顯,因為其修正了該setValues()方法來載入一整數值,其在此範例中為"0",其代表由先前"putstatic #3"作業所操縱之記憶體位置(欄位)之識別。其要注意到用於實施本發明之記憶體識別項的選擇或特定形式僅用於例示的目的。在此範例中,該整數值"0"為用於該操縱的記憶體位置之識別項,並對應於該"staticValue"欄位做為該"example.java"應用之第一欄位,如附錄A7所示。因此,對應於該"putstatic #3"指令,該"iconst_0"指令載入對應於該"putstatic #3"指令之操縱的欄位之索引的該整數值"0",且其在本例中為"example.java"的第一欄位,因此該"0"整數索引值到該堆疊上。
此外,該JAVA虛擬機器指令"invokestatic #5<Method boolean alert(java.lang.Object,int)>"被***在"iconst_0"指令之後,所以該JAVA虛擬機器將最上方兩個項目推出該目前方法訊框的堆疊(其根據先前"ldc #4"指令為一參照到該字串物件,並具有數值"example"對應於所操縱欄位所屬的類別之名稱,且該整數"0"對應於在該example.java應用中該操縱欄位的索引),並引起"alert"方法,傳送最上方兩個項目推出該堆疊到新的方法訊框做為其前兩個引數。此改變很明顯,因為其修正setValues()方法來執行該"alert"方法及相關的作業,對應於該setValues()方法之先前的記憶體操縱作業(也就是說,該"putstatic #3"指令)。
類似地,在此修正的setValues()方法碼,一"aload_0"指令係***在該"putfield #2"指令之後,使其成為執行該"putfield #2"指令之後的第一指令。此造成該JAVA虛擬機器來載入先前"putfield #2"指令所屬的操縱欄位之範例類別的例證物件到該目前方法訊框之堆疊上,並造成由對應於該"putfield #2"指令寫入的例證欄位之物件參照,載入到該目前方法訊框之堆疊的上方。此改變很明顯,因為其修正該setValues()方法來載入一參照到對應於該操縱欄位的物件到該堆疊上。
再者,該JAVA虛擬機器指令"iconst_1"係***在該"aload_0"指令之後,所以該JAVA虛擬機器載入一整數值"1"到該目前方法訊框之堆疊上,並造成整數值"1"被載入到該目前方法訊框之堆疊的上方。此改變很明顯,因為其修正該setValues()方法來載入一整數值,其在此範例中為"1",其代表由先前"putfield #2"作業所操縱的該記憶體位置(欄位)之識別。其要注意到用於實施本發明之識別項的選擇或特定形式僅做為例示的目的。在此範例中,該整數值"1"對應於該"instanceValue"欄位做為該"example.java"應用之第二欄位,如附錄A7所示。因此,對應於該"putfield #2"指令,該"iconst_1"指令載入對應於該"putfield #2"指令之操縱的欄位之索引的該整數值"1",且其在此例中,"example.java"之第二欄位,因此為該"1"整數索引值,載入到該堆疊上。
此外,該JAVA虛擬機器指令"invokestatic #5<Method boolean alert(java.lang.Object,int)>"被***在該"iconst_1"指令之後,所以該JAVA虛擬機器推出最上方兩個項目離開該目前方法訊框之堆疊(其係根據先前的"aload_0"指令為一參照到該操縱的例證欄位所屬之物件的該物件,且該整數"1"對應於在該example.java應用之操縱的欄位之索引),並引起該"alert"方法,傳送推出該堆疊的最上方兩個項目到該新方法訊框作為其前兩個引數。此改變很明顯,因為其修正該setValues()方法來執行該"alert"方法及相關的作業,對應於該setValues()方法之先前的記憶體操縱作業(也就是說該"putfield #2"指令)。
該方法void alert(java.lang.Object,int),為附錄A8之FieldAlert碼之部份及該分散式執行時間系統(DRT)71之部份,要求或另通知執行附錄A9之FieldSend.java碼之一DRT執行緒121/1,以更新及傳遞該操縱的記憶體位置之改變的識別及數值到該複數部機器M1...Mn。
其將可瞭解到該修正的碼在具有複數部電腦或運算機器之一分散式運算環境中允許該記憶體操縱作業之協調的作業,所以關於在該複數部機器M1...Mn上未修正的碼或程序之作業的問題(例如像是不一致及不調和的記憶體狀態及操縱及更新作業)在當應用該修正的碼或程序時並不會發生。
初始化
請再次回到第14圖,其所示為一單一先前技術電腦操作為一JAVA虛擬機器之架構圖。依此方法,一機器(由多家製造商中任何一家製造,並具有在多種不同語言中任何一種操作的一作業系統),其可在該應用程式碼50之特定語言中操作,在此例中為JAVA語言。也就是說,一JAVA虛擬機器72能夠操作在JAVA語言中的應用碼50,並利用無關於該機器製造商及該機器的內部細節之JAVA架構。
當實施在一非JAVA語言或應用碼環境中,該泛用化平台、及/或虛擬機器、及/或機器、及/或執行時間系統,皆能夠操作在該平台的語言中的應用碼50(可能包括例如(但不限於)任何一種或多種的原始碼語言、中介碼語言、物件碼語言、機器碼語言及任何其它碼語言),及/或虛擬機器、及/或機器、及/或執行時間系統環境,並利用該平台、及/或虛擬機器、及/或機器、及/或執行時間系統、及/或語言架構,而無關於該機器製造商及該機器的內部細節。其將亦可在此處所提供的說明中瞭解到該平台及/或執行時間系統可包括虛擬機器及非虛擬機器軟體及/或韌體架構,以及硬體及直接硬體編碼應用及實施。
回到該JAVA語言虛擬機器環境之範例,在該JAVA語言中,當載入一給定的類別檔案50A,僅會發生一次的類別初始化例式<clinit>。但是,該物件初始化例式<init>基本上經常發生,例如該物件初始化例式通常在每次產生一新物件(例如一物件50X,50Y或50Z)時發生。此外,在該JAVA環境及其它機器或其它使用類別及物件結構之執行時間系統環境,類別(通常為比物件更廣的類別)在物件之前載入(其為較窄的類別,且其中該物件屬於或被識別為一特定類別),所以在第14圖所示的該應用碼50中,其具有一單一類別50A及三個物件50X,50Y及50Z,該第一類別50A先被載入,然後載入第一物件50X,然後載入第二物件50Y,最後載入第三物件50Z。
如對於第14圖所示之具體實施例,其中僅有一單一電腦或機器72(且非複數部連接或耦合的電腦或機器),則在執行該初始化例式(像是類別及物件初始化例式)當中不會產生衝突或不一致性,其會要在該載入程序期間作業,因為對於習用的作業,每個初始化例式僅由該單一虛擬機器或機器或執行時間系統或語言環境執行一次,其視需要可對每一個該一或多個類別及一或多個物件屬於或識別為該類別,或同等者,其中並未使用術語類別及物件。
對於一更為一般性的虛擬機器或摘要機器環境的組合,且對於目前及未來的電腦及/或運算機器及/或資訊家電或處理系統,且其可不利用或不需要利用到類別及/或物件,本發明之結構、方法及電腦程式及電腦程式產品仍決將可應用。不會利用類別及/或物件之電腦及/或運算機器之範例包括例如由Intel公司及其它公司所製造的x86電腦架構,由Sun Microsystems公司及其它公司所製造的SPARC電腦架構,及由IBM公司及其它公司所製造的PowerPC電腦架構,及由Apple電腦公司及其它公司所製造的個人電腦產品。對於這些種類的電腦、運算機器、資訊家電,及並未利用類別或物件觀念而在其上實施的虛擬機器或虛擬運算環境,例如其可被一般化來包括基本資料型別(例如整數資料型別、浮點資料型別、長整數資料型別、雙重資料型別、字串資料型別、符號資料型別及布林資料型別)、結構化資料型別(例如陣列及記錄)衍生的型別,或其它程序性語言的其它碼或資料結構、或其它語言及環境,例如函數、指標、組件、模組、結構、參照及集合。
回到該JAVA語言虛擬機器環境之範例,在該JAVA語言中,當載入一給定的類別檔案50A,僅會發生一次的類別初始化例式<clinit>。但是,該物件初始化例式<init>基本上經常發生,例如該物件初始化例式通常在每次產生一新物件(例如一物件50X,50Y或50Z)時發生。此外,在該JAVA環境及其它機器或其它使用類別及物件結構之執行時間系統環境,類別(比物件更廣的類別)在物件之前載入(其為較窄的類別,且其中該物件屬於或被識別為一特定類別),所以在第14圖所示的該應用碼50中,其具有一單一類別50A及三個物件50X-50Z,該第一類別50A先被載入,然後載入第一物件50X,然後載入第二物件50Y,最後載入第三物件50Z。
如對於第14圖所示之具體實施例,其中僅有一單一電腦或機器72(且非複數部連接或耦合的機器),則在執行該初始化例式(即該類別初始化例式<clinit>及該物件初始化例式<init>)當中不會產生衝突或不一致性,其會要在該載入程序期間作業,因為對於習用的作業,每個初始化例式僅由該單一虛擬機器或機器或執行時間系統或語言環境執行一次,其視需要可對每一個該一或多個類別及一或多個物件屬於或識別為該類別。
但是,在第8圖所例示的配置中(亦在第31-33圖中),其提供複數部個別電腦或機器M1,M2,...Mn,其每個係透過一通信網路53或其它通信鏈結來互連,且每部個別的電腦或機器具有一修正子51(請參見第5圖),並由例如該分散式執行時間(DRT)71(參見第8圖)所釋放,並載入有一共用應用碼50。該術語共用應用程式係要理解為代表一應用程式或應用程式碼,其寫成在單一機器上作業,並載入在該複數部電腦或機器M1,M2...Mn上整體或部份地執行,或視需要在該複數部電腦或機器M1,M2...Mn之某個子集合中每一個之上來執行。但有些不同地是,有一種共用應用程式,以應用碼50所代表,且此單一複本或可能是複數個相同複本係被修正來產生該應用程式或程式碼的一修正複本或版本,每個複本或例證係預備在該複數部機器上執行。在它們被修正之後,如果它們執行類似的作業,並彼此一致性及調和性地操作,即視為是共用。其將可瞭解到,實施本發明之特徵的複數部電腦、機器、資訊家電或類似者,可視需要連接或耦合到並未實施本發明之特徵的其它電腦、機器、資訊家電或類似者。
在一些具體實施例中,部份或所有的該複數部個別電腦或機器可以包含在單一外殼或機殼內(例如所謂刀鋒伺服器,由Hewlett-Packard Development公司、Intel公司、IBM公司及其它所製造),或是實施在一單一印刷電路板上,或甚至在一單一晶片或晶片組內。
基本上該修正子51或DRT 71或其它碼修正手段即負責修正該應用碼50,所以其可在JAVA語言及虛擬機器環境中執行初始化例式或其它初始化作業,例如像是在該JAVA語言及虛擬機器環境中的類別及物件初始化方法或例式,其係在一協調的、一致及調和的方式,並橫跨該複數部個別機器M1,M2...Mn之間。因此在這種運算環境中其依循必須要保證在每部個別的機器M1,M2...Mn上的本地物件及類別以一致性方式(相對於彼此)被初始化。
其將可瞭解到在此處的說明之下,該修正子51及該分散式執行時間71會有另外的實施。例如,該修正子51可以實施該分散式執行時間71之一個組件或在其內,因此該DRT 71可以實施該修正子51之功能及作業。另外,該修正子51之功能及作業可以在用於實施該DRT 71之結構、軟體、韌體或其它手段之外實施。在一具體實施例中,該修正子51及DRT 71係實施或寫入在電腦程式碼的單一段落中,而可提供該DRT及修正子之功能。因此該修正子功能及結構可能包含在該DRT中,並視為一選擇性組件。在如何實施之外,該修正子功能及結構係負責修正該應用碼程式之可執行碼,且該分散式執行時間功能及結構係負責實施該等電腦或機器之間的通信。在一具體實施例中的通信功能係透過在每部機器上之DRT的電腦程式碼內的一中間協定層來實施。例如該DRT可實施在該JAVA語言中的一通信堆疊,並使用該傳輸控制協定/網際網路協定(TCP/IP)來提供該等機器之間的通信或對話。實際上這些功能或作業是如何實施或分割在結構性及/或程序性元素之間,或是在本發明之電腦程式碼或資料結構之間,皆比它們所提供者要來得不重要。
為了保證在機器M1,M2,...,Mn之間有一致性的類別及物件(或同等者)初始化狀態及初始化作業,該應用碼50由搜尋整個可執行的應用碼50來分析或細查,藉以偵測在該應用碼50中的程式步驟(例如特定的指令或指令種類),其可定義或構成或另外代表一初始化作業或例式(或其它類似的記憶體、資源、資料或碼初始化例式或作業)。在該JAVA語言中,這些程式步驟例如包含或具有一物件或類別之某部份或全部的"<init>"或"<clinit>"方法,並視需要為任何關連於一"<init>"或"<clinit>"方法之其它碼、例式或方法,例如藉由該"<clinit>"方法之"<init>"的主體喚起一不同方法之方法。
此該應用碼50之分析或細查可在載入該應用程式碼50之前、或在該應用程式碼50載入程序期間發生,或甚至在該應用程式碼50載入程序之後發生。其可類似於一安裝、程式轉換、轉譯、或編譯程序,其中該應用碼可用額外的指令來實施,及/或另可由意義保留程式操縱所修正,即/或選擇性地由一輸入碼語言轉譯到一不同的碼語言(例如像是由原始碼語言或中介碼語言轉譯到物件碼語言或機器碼語言),並瞭解到該術語編譯通常或習用上包含了碼或語言中的改變,例如由原始碼或物件碼,或由一種語言到另一種語言。但是,在本例中該術語「編譯」(及其文法上同等者)並沒有那麼多限制,且亦可在相同碼或語言內包括或含有修正。例如,該編譯及其同等者可瞭解為同時包含正常編譯(例如像是藉由例示而非限制,由原始碼到物件碼),且由原始碼編譯成原始碼,以及由物件碼編譯到物件碼,以及其中任何改變的組合。其亦可包括所謂的「中介碼語言」,其形式為「虛擬物件碼」。
藉由例示且並非限制,在一具體實施例中,該應用碼50之分析或細查可在載入該應用程式碼期間發生,例如藉由該作業系統由該硬碟或其它儲存裝置或來源讀取該應用碼,並將其複製到記憶體,並預備開始執行該應用程式碼。在另一具體實施例中,於JAVA虛擬機器中,該分析或細查可在該java.lang.ClassLoader loadClass方法(如java.lang.ClassLoader.loadClass())之類別載入程序期間發生。
另外,該應用碼50之分析或細查可以甚至在該應用程式碼載入程序之後發生,例如在該作業系統已經載入該應用碼到記憶體之後,或選擇性地甚至在該應用程式碼之相關的對應部份已經開始或進行之後,例如像是在該JAVA虛擬機器已經載入該應用碼到該虛擬機器當中之後,其係透過"java.lang.ClassLoader.loadClass()"方法,且選擇性地進行執行。
因此,上述的分析或觀察,初始化例式(例如<clinit>類別初始化方法及<init>物件初始化方法)係初始時被尋找,且當發現或識別出***一修正碼時,藉以引發一修正的初始化例式。此修正的例式被調整,並寫入來初始化在該等機器中的一部上之類別50A,例如JVM#1,並告訴、通知或另外傳遞到所有其它機器M2,...,Mn,這種類別50A存在,並視需要其初始化的狀態。有數種不同其它的模式,其中可以進行此修正及載入。
因此在一種模式中,在該載入機器上的DRT 71/1,在此例中為Java虛擬機器M1(JVM#1),要求所有其它機器M1,...,Mn之DRT's 71/2...71/n,如果類似的同等第一類別50A在任何其它機器上被初始化(即已經被初始化)。如果此問題的答案為"是"(也就是說一類似同等類別50A已經在另一部機器上被初始化),則該初始化例式的執行即被中止、暫停、終止、關閉或另外對在機器JVM#1上的類別50A所除能。如果答案為"否"(也就是說一類似同等類別50A在另一部機器上尚未被初始化),則該初始化作業即繼續(或重新開始、或開始、或進行,及該類別50A被初始化,並視需要該連續的改變(例如像是記憶體中的初始化的碼及資料結構)於該初始化例式被轉換到在其它機器之每一部上每一個類似同等的本地類別期間被帶入,如第8圖中箭頭83所示。
一類似程序在每次一物件(如50X,50Y或50Z)被載入及初始化的狀況下發生。當該載入機器之DRT 71/1,在此範例中為Java機器M1(JVM#1)並未識別,由於其它機器M2...Mn之質問,一類似同等物件到要在機器M1上被初始化的該特定物件,即物件50Y,其已經由另一部機器初始化,則在機器M1上的DRT 71/1可以執行對應於物件50Y之物件初始化例式,並視需要每一部其它機器M2...Mn可載入一類似同等本地物件(其可方便地稱為一網點物件),及由機器M1上該初始化作業之執行所帶入的相關後續改變(例如像是初始化的資料、初始化的碼、及/或初始化的系統或資源結構)。但是,如果機器M1之DRT 71/1決定對於有問題之物件50Y之一類似同等物件已經在該複數部機器之另一部機器上被初始化(例如像是機器M2),則由對應於物件50Y之初始化函數、例式或程序的機器M1執行即並未開始或進行、或另外中止、終止、關閉或另外除能,且載入機器M1上的物件50Y,較佳地是但視需要該等後續改變(例如像是初始化的資料、初始化的碼、及/或其它初始化的系統或資源結構)由機器M2執行的初始化例式,即載入到對應於物件50Y之機器M1上。再次地,有多種方法可帶出所想要的結果。
較佳地是,該初始化例式的執行即配置給一部機器,例如該第一機器M1來載入(及視需要尋找來初始化)該物件或類別。對應於決定一特定類別或物件(及在每一部機器M1...Mn上任何類似同等本地類別或物件)尚未被初始化之初始化例式的執行,即對於所有機器M1...Mn僅執行一次,較佳地是僅由一部機器,而代表所有的機器M1...Mn。對應用、且較佳地是遵循由一部機器執行該初始化例式(如機器M1),然後所有其它機器之每一部載入一類似同等本地物件(或類別),且視需要載入該後續改變(例如像是初始化的資料、初始化的碼、及/或其它初始化的系統或資源結構),由機器M1之初始化作業的執行所帶入。
由第15圖可看出,對於第8圖之一般性配置之修正提供了機器M1,M2...Mn皆如同以前,並在所有機器M1,M2...Mn上同時或同步地執行相同的應用碼50(或許多碼)。但是,先前的配置由一伺服器機器X的供應所修正,其方便地能夠供應管家函數,例如且特別是結構、資產及資源之初始化。這種伺服器機器X可為一低價值商用電腦,例如PC,因為其運算負擔較低。如第15圖中虛線所示,兩部伺服器機器X及X+1可以為了冗餘的目的來提供,以增加該系統之整體可靠度。當提供這兩種伺服器機器X及X+1時,它們較佳地是但可視需要操作成一不會失效環境中的冗餘機器。
其不需要提供一伺服器機器X,因為其運算負擔可以分散到機器M1,M2...Mn上。另外,由一部機器所操作的一資料庫(在一主控者/受控者種類作業中)可以用於管家功能。
第16圖所示為要遵循的一較佳泛用程序。在已經進行一載入步驟161之後,要執行之該等指令即依序考慮,且所有初始化例式在步驟162中依所示來偵測。在該JAVA語言中,這些及物件初始化方法(例如<init>)及類別初始化方法(如<clinit>)。其它語言使用不同的術語。
當在步驟162中偵測到一初始化例式時,其在步驟163中被修正,藉以執行橫跨及該複數部機器M1,M2...Mn之間的一致、協調及調和之初始化作業(例如像是資料結構及碼結構之初始化),其基本上藉由***其它的指令到該初始化例式中,例如決定在此初始化例式所對應之物件或類別(或資產)所對應之機器M1...Mn上一類似同等物件或類別(或其它資產)已經被初始化,如果是的話,即中止、暫停、終止、關閉或另外除能此初始化例式之執行(及或初始化作業),若否的話,即開始、繼續、或重新開始執行該初始化例式(即/或初始化作業),並視需要指示其它機器M1...Mn來載入一類似同等的物件或類別,及由該初始化例式之執行所帶入的後續改變。另外,該修正指令可以***在該例式之前,例如像是在進行該相對應類別或物件之初始化的指令或作業之前。一旦該修正步驟163已經完成該載入程序,並繼續載入該修正的應用碼來取代該未修正的應用碼,如步驟164中所示。總之,該初始化例式僅要執行一次,較佳地是僅由一部機器,代表所有的機器M1...Mn,其對應於由所有機器M1...Mn之決定,該特定物件或類別(即在每部機器M1...Mn上類似同等本地物件或類別,其對應於此初始化例式所相關的該特定物件或類別)尚未被初始化。
第17圖所示為一修正的特定形式。在進行步驟171
之例式之後,要被初始化的結構、資產或資源(JAVA的術語為類別或物件)在步驟172中被配置一名稱或標籤(例如一通用名稱或標籤),其可用來識別在每部機器M1,...,Mn上相對應的類似同等本地物件。此最為方便地是透過由第15圖之伺服器機器X所維護的一表格(或類似資料或記錄結構)來完成。此表格亦可包括要被初始化的類似同等類別或物件之初始化狀態。其將可瞭解到此表格或其它資料結構僅可儲存該初始化狀態,或其亦可儲存其它狀態或資訊。如第17圖中所示,如步驟173和174藉由機器M1...Mn的通信由DRT 71決定對應於該通用名稱或標籤之每部其它機器上的類似同等本地物件尚未被初始化(即尚未在除了進行該載入及尋找之機器之外的一部機器上並未初始化,以執行初始化),然後此代表該物件或類別可被初始化,較佳地是但視需要用正常的方式,藉由開始、進行、持續、或重新開始該初始化例式之執行,如步驟176中所示,因為其為要被初始化的機器M1...Mn之該複數部類似同等本地物件或類別的第一個。
在一具體實施例中,該初始化例式被停止初始化或進行或開始執行;但是,在一些實施中,其很難或實際上不可能來停止該初始化例式做初始化或開始或進行執行。因此,在另一具體實施例中,已經開始或進行之初始化例式的執行被中止,使得其不會完成或並無法以其正常的方式完成。此另外的中止可被瞭解為包括一實際中斷、或一暫緩、或一延遲、或暫停一已經開始執行之初始化例式之執行(不論在完成之前的執行階段),因此要保證該初始化例式並未得到機會來執行,以完成該物件(或類別或其它資產)之初始化,且因此該物件(或類別或其它資產)維持「未初始化」(即「並未初始化」)。
但是或另外,如果步驟173及174決定對應於該複數部類似同等本地物件或類別之通用名稱,每一個在該複數部機器M1...Mn之一部上面,其已經在另一部機器上被初始化,然後此代表該物件或類別被視為代表或為了該複數部機器M1...Mn來被初始化。因此,該初始化例式之執行即被中止、終止、關閉或另由執行步驟175來除能。
第18圖例示了第17圖之步驟173的一具體實施例,其顯示由該載入機器(M1,M2...Mn當中之一)所進行的查詢到第15圖之伺服器機器X,其詢問對應於該通用名稱之複數個類似同等本地物件(或類別)之初始化狀態。該載入機器之作業係暫時地中斷,如步驟181所示,並對應於第17圖之步驟173,直到回覆給此先前要求自機器X接收到,如步驟182所示。在步驟181中,該載入機器傳送一查詢訊息到機器X,要求要被初始化之物件(或類別或其它資產)之初始化狀態。接下來,該載入機器等待來自對應於在步驟181中該提出機器所傳送之查詢訊息之機器X的一答覆,如步驟182所示。
第19圖所示為由第15圖之機器X所進行之活動,其回應於第18圖之步驟181的這種初始化查詢。該初始化狀態在步驟192及193中決定,其決定如果對應於通用名稱之初始化狀態要求的一類似同等物件(或類別或其它資產),如在步驟191中所接收,其在另一部機器上被初始化(即除了步驟191之初始化狀態要求所啟始的該查詢機器181之外的一部機器),其中初始化狀態的一表格被徵詢對應於該通用名稱之記錄,且如果該初始化狀態記錄指出在另一部機器(例如在該等機器M1...Mn中的一部)上的一類似同等本地物件(或類別),並對應於一通用名稱已經被初始化,對此效果之回應由進行步驟194被傳送到該查詢機器。另外,如果該初始化狀態記錄指出在另一部機器(例如在該複數部機器M1...Mn中的一部之上)上,及對應於通用名稱為未初始化,一相對應回覆由進行步驟195及196傳送到該查詢機器。此處所使用之特別術語物件或類別(或在步驟192中使用之同等術語資產或資源)要被瞭解為包含所有類似同等物件(或類別、或資產、或資源),其對應於在該複數部機器M1...Mn的每一部上相同的通用名稱。然後步驟182之等待查詢機器能夠依此回應及/或作業,例如像是藉由(i)中止(或暫停、或延遲)該初始化例式之執行,當步驟182之來自機器X之回覆指出在另一部機器(例如該複數部機器M1...Mn中的一部)上一類似同等本地物件對應於要在步驟172中被提出要初始化之物件的該通用名稱已經在它處被初始化(即在除了提出要進行該初始化之機器之外的一部機器上初始化);或(ii)藉由繼續(或重新開始、或開始、或進行)該初始化例式之執行,當在步驟182中來自機器X之回覆指出在該複數部機器M1...Mn之一類似同等本地物件對應於在步驟172要被提出初始化之該物件的通用名稱尚未在它處被初始化(即除了提出要進行初始化之該機器之外的一部機器上未被初始化)。
請參考所附附錄,其中:附錄A1-A10所示為關連於欄位之實際碼,附錄B1為來自一未修正的<clinit>指令之一典型的碼區段,附錄B2為對應於一修正的<clinit>指令之同等者,附錄B3為來自一未修正的<init>指令之一典型的碼區段,附錄B4為對應於一修正的<init>指令之同等者。此外,附錄B5為附錄B2的碼之另一種選擇,而附錄B6為附錄B4之碼的另一種選擇。
再者,附錄B7為InitClient之原始碼,其執行第17圖及第18圖之步驟的一具體實施例,其查詢對應於在該複數部機器M1...Mn上該複數個類似同等類別或物件之指定的類別或物件之初始化狀態的一「初始化伺服器」(例如一機器X)。附錄B8為InitServer之原始碼,其進行第19圖之步驟的一具體實施例,其接收由InitClient傳送的一初始化狀態查詢,並回應來傳回該指定的類別或物件之相對應初始化狀態。類似地,附錄B9為用於附錄B1-B6之先前/之後範例中所使用的該範例應用之原始碼(在表X到XV重覆)。並且,附錄B10為InitLoader之原始碼,其執行第16,20及21圖之步驟的一具體實施例,其根據本發明之一種模式修正附錄B9之範例性應用程式碼。
附錄B1及B2(亦在以下的表X及表XI中部份重現)為範例性碼表列,其提供應用程式50之一初始化例式的該習用或未修正的電腦程式軟體碼(例如可用於單一機器或電腦環境中),及相同初始化例式的一後修正摘錄,例如可用於本發明之具有多重機器的具體實施例中。加入到該初始化例式之修正過的碼以粗體文字來強調。
其要注意到在該附錄中的編譯過的碼與在該表格中重複的部份採用的形式為檔案"example.java"之原始碼,其係包括在附錄B4(表XIII)中。在附錄B1及表X之程序中,步驟001之程序名稱"Method<clinit>"為編譯過應用碼之"example.java"之clinit方法之顯示的解碼輸出的名稱。該方法名稱<clinit>為根據該JAVA平台規格之一類別初始化方法的名稱,並對此範例選擇來代表一JAVA初始化方法之作業的一典型模式。整個方法係負責初始化該類別'example',所以其可被使用,且該"example.java"碼所執行的步驟在此依序說明。
首先(步驟002),該JAVA虛擬機器指令"new #2<Class example>"造成該JAVA虛擬機器例舉由儲存在包含有此範例<clinit>方法之應用程式的該classfile結構的第二個索引中CONSTANT_Classref_info constant_pool項目所指定的該範例類別的一新類別例證,並造成參照到一新產生之型別'example'之物件被置於(推入)在該目前執行的執行緒之目前方法訊框的堆疊上。
接著(步驟003),該Java虛擬機器指令"dup"造成該Java虛擬機器來複製該堆疊的最上方項目,並推入該複製的項目到該目前方法訊框的堆疊之最上方位置,並造成該參照到該新產生之'example'物件在被複製並推入到該堆疊上之堆疊的最上方。
接者(步驟004),該JAVA虛擬機器指令"invokespecial #3<Method example()>"造成該JAVA虛擬機器推出該最上方項目離開該目前方法訊框的堆疊,並引起在該推出的物件上的該例證初始化方法"<init>",並造成引起該新產生的'example'物件之"<init>"結構。
該Java虛擬機器指令"putstatic #3<Field example currentExample>"(步驟005)造成該Java虛擬機器來推出最上方數值離開該目前方法訊框的堆疊,並儲存該數值在由包含此範例<clinit>方法之應用程式的該classfile結構之第三個索引中的CONSTANT_Fieldref_info constant-pool項目所指定的該靜態欄位中,並造成該參照到該新產生及初始化的'example"物件在該目前方法訊框的堆疊之上方,其係儲存在類別'example'之靜態參照欄位名為'currentExample'中。
最後,該Java虛擬機器指令"return"(步驟006)由傳回控制改該先前方法訊框來使得該Java虛擬機器停止執行此<clinit>方法,並造成此<clinit>方法之執行的終止。
由於這些在第1圖及第2圖之習用組態之單一機器上作業的步驟,該JAVA虛擬機器可用一致性、調和及協調的方法來追跡一類別的初始化狀態,並在執行包含該初始化作業的<clinit>方法中能夠保證不會發生不想要的行為(例如執行超過一次的類別'example.java'之<init>方法),像是由不一致及/或不調和之初始化作業所造成。如果這些步驟要在第5圖及第8圖之組態中複數部機器上進行,並具有第9,10,11,12及13圖之記憶體更新及傳遞複製手段,並在該複數部機器M1...Mn的每一部上同步地執行該應用程式碼50,在每一部機器上每個同步執行的應用程式事件的初始化作業將可不需要在任何其它機器上任何其它事件之間的協調之下來進行。如果給定橫跨複數部機器之一致性、協調及調和的初始化作業之目標,此先前技術配置將無法執行這種橫跨該複數部機器之一致性協調的初始化作業,因為每部機器僅在本地執行初始化,且無任何嘗試來協調它們的本地初始化作業於在任何一或多部其它機器上的任何其它類似初始化作業。因此這種配置將會由於未協調、不一致及/或不調和的初始化狀態及相關的初始化作業而會有不想要或其它異常的行為。因此,其為本發明的目的來克服該先前技術之限制。
在表格XIV(附錄B5)的範例碼中,該碼已經被修正,所以其可解決複數部機器M1...Mn之一致性協調的初始化作業之問題,其並未在表X(附錄B1)之碼範例中被解決。在此修正的<clinit>方法碼中,一"1dc #2<String"example">"指令被***在該"new #5"指令之前,藉以為該<clinit>方法之第一指令。此造成該JAVA虛擬機器載入該項目在該目前classfile之索引2處constant_pool中,並儲存此項目在該目前方法訊框的堆疊上方,並造成該參照到數值"example"之字串物件被推入到該堆疊上。
再者,該JAVA虛擬機器指令"invokestatic #3<Method Boolean isAlreadyLoaded(java.lang.String)>"被***在該"0 ldc #2"指令之後,所以該JAVA虛擬機器推出該最上方項目離開該目前方法訊框之堆疊(其根據先前"ldc #2"指令為一參照到該String物件,利用對應於此<clinit>方法所屬的該類別之名稱的數值"example"),並引起該"isAlreadyLoaded"方法,傳送該推出的項目到該新方法訊框做為其第一引數,並在由此"invodestatic"指令傳回時傳回一布林值到該堆疊上。此改變很明顯,因為其修正該<clinit>方法來執行該"isAlreadyLoaded"方法及相關的作業,對應於該<clinit>方法之執行的開始,並傳回一布林引數(代表是否對應用此<clinit>方法之類別在該複數部機器M1...Mn中另一部機器上被初始化)到該<clinit>方法之執行方法訊框的堆疊上。
接著,兩個JAVA虛擬機器指令"ifeq 9"及"return"被***到該"2 invokestatic #3"指令之後及該"new #5"指令之前的該碼串流中。這兩個指令的第一個為"ifeq 9"指令,其使得該JAVA虛擬機器推出最上方項目離開該堆疊,並執行該推出的數值與零之間的比較。如果該執行的比較成功(即如果且僅如果該推出的數值等於零時),則執行繼續到"9 new #5"指令。但是如果該執行的比較失敗(即如果且僅如果該推出的數值不等於零),則執行繼續到該碼串流中的下一個指令,其為該"8 return"指令。此改變特別明顯,因為其修正該<clinit>方法來在當該"isAlreadyLoaded"方法之傳回值為負值(即"false")時即繼續執行該<clinit>方法(即指令9-19),或是當該"isAlreadyLoaded"方法為正值(即"true")時即中斷該<clinit>方法之執行(即該"8 return"指令造成傳回控制給此<clinit>方法之引起者)。
該方法void isAlreadyLoaded(java.lang.String),附錄B7之InitClient碼之部份,及分散式執行時間系統(DRT)71之部份,其執行機器M1...Mn之間的通信作業,以協調該等機器M1...Mn之間的<clinit>方法之執行。此範例的isAlreadyLoaded方法傳送在第15圖之一機器X上執行之附錄B8的InitServer碼,藉由傳送一「初始化狀態要求」到對應於正被「初始化」的該類別之機器X(即此<clinit>方法所屬的該類別)。請參考第19圖及附錄B8,機器X接收對應於該<clinit>方法所屬的類別之「初始化狀態要求」,並造成初始化狀態或記錄之一表格來決定該要求所對應之該類別的該初始化狀態。
如果對應於該初始化狀態要求之類別並未在除了該要求機器之外的另一部機器上被初始化,則機器X將會傳送一回應,代表該類別尚未被初始化,並更新對應於該指定的類別的一記錄登錄項來指示該類別現在被初始化。另外,如果對應於該初始化狀態要求之類別在除了該要求機器之外的另一部機器上被初始化,則機器X將傳送一回應來指示該類別已經被初始化。對應於決定了此初始化狀態要求所關於的該類別並未在除了該要求機器之外的另一部機器上被初始化,產生一回覆,並傳送到該要求機器來指示該類別並未被初始化。此外,機器X較佳地是更新對應於該初始化狀態要求所相關的該類別之登錄項來指示該類別現在被初始化。在自機器X接收到這種訊息之後,代表該類別並未在另一部機器上被初始化,該isAlreadyLoaded()方法及作業終止執行,並傳回一'false'數值到先前的方法訊框,其為該<clinit>方法之執行方法訊框。另外,在自機器X接收到一訊息之後,代表該類別已經在另一部機器上被初始化,該isAlreadyLoaded()方法及作業終止執行,並傳回一'true'數值到先前的方法訊框,其為該<clinit>方法之執行方法訊框。在此傳回作業之後,該<clinit>方法訊框之執行然後重新開始,如在步驟004中附錄B5之碼序列中所指出。
其將可瞭解到該修正的碼在具有複數部電腦或運算機器之一分散式運算環境中允許該記憶體操縱作業之協調的作業,所以關於在該複數部機器M1...Mn上未修正的碼或程序之作業的問題(例如像是多重初始化作業、或重新初始化作業)在當應用該修正的碼或程序時並不會發生。
類似地,接下來的程序來修正關於物件之一<init>方法,藉以由附錄B3之碼區段(參見表格XII)轉換到附錄B6之碼區段(參見表格XV)來指示。
附錄B3及B6(亦在以下的表XII及表XV中部份重現)為範例性碼表列,其提供應用程式50之一初始化例式的該習用或未修正的電腦程式軟體碼(例如可用於單一機器或電腦環境中),及相同初始化例式的一後修正摘錄,例如可用於本發明之具有多重機器的具體實施例中。加入到該初始化例式之修正過的碼以粗體文字來強調。
其要注意到在該附錄中的編譯過的碼與在該表格中重複的部份採用的形式為檔案"example.java"之原始碼,其係包括在附錄B4中。在附錄B1及表XI之程序中,步驟001之程序名稱"Method<init>"為編譯過應用碼之"example.java"之init方法之顯示的解碼輸出的名稱。該方法名稱<init>為根據該JAVA平台規格之一物件的初始化方法(或方法,因為會有一個以上)的名稱,並對此範例選擇來指示一JAVA初始化方法之作業的一典型模式。整個方法係負責初始化一'example'物件,所以其可被使用,且該"example.java"碼所執行的步驟在此依序說明。
該Java虛擬機器指令"aload_0"(步驟002)造成該Java虛擬機器載入該項目在該目前方法訊框之索引0處的該本地變數陣列,並儲存此項目在該目前方法訊框之堆疊的上方,並造成此物件參照儲存在索引0處的該本地變數陣列中,並被推入到該堆疊上。
接著(步驟003),該JAVA虛擬機器指令"invokespecial #1<Method java.lang.Object()>"使得該JAVA虛擬機器來推出該最上方項目離開該目前方法訊框之堆疊,並引起在該推出之物件的該例證初始化方法"<init>",並造成該"example'物件之超類別的"<init>"結構(或方法)被引起。
該Java虛擬機器指令"aload_0"(步驟004)造成該Java虛擬機器載入該項目於該目前方法訊框的索引0處的本地變數陣列中,並儲存此項目在該目前方法訊框的堆疊之最上方,並造成儲存在索引0處的本地變數陣列中的「此」物件參照被推到該堆疊上。
接著(步驟005),該JAVA虛擬機器指令"invokestatic #2<Method long currentTimeMillis()>"造成該JAVA虛擬機器引起該java.lang.System類別之"currentTimeMillis()"方法,並造成一長數值對應於來自該currentTimeMillis()方法引發之傳回值被推入到的該堆疊的最上方。
該Java虛擬機器指令"putfield #3<Field long timestamp>"(步驟006)使得該Java虛擬機器推出最上方兩個數值離開該目前方法訊框的堆疊,並儲存該最上方數值在該第二推出數值的物件例證欄位,其由儲存在含有此範例<init>方法之應用程式的classfile結構的第三個索引中的CONSTANT_Fieldref_info constant-pool項目,並造成在該目前方法訊框的堆疊最上方之長數值被儲存在該堆疊上的長數值之下此物件參照之名為"timestamp"的例證欄位中。
最後,該Java虛擬機器指令"return"(步驟007)使得該Java虛擬機器藉由傳回控制到該先前方法訊框來中止執行此<init>方法,並造成此<init>方法之執行結束。
由於這些在第1圖及第2圖中習用組態的單一機器上作業的步驟,該JAVA虛擬機器可用一致性、調和及協調的方式追跡一物件的初始化狀態,且在執行含有該初始化作業的<init>方法中能夠保證不會發生不想要的行為(例如執行超過一次的一單一'example.java'物件之<init>方法,或是相同物件的重新初始化),例如可由不一致及/或不調和之初始化作業所造成。如果這些步驟要在第5圖及第8圖之組態中複數部機器上進行,並具有第9,10,11,12及13圖之記憶體更新及傳遞複製手段,且同步地在該複數部機器M1...Mn之每一部上執行該應用程式碼50,在每部機器上每個同步執行應用程式事件的初始化作業將可在任何其它機器上的任何其它事件之間執行,而不需要協調。如果給定橫跨複數部機器之一致性、協調及調和的初始化作業之目標,此先前技術配置將無法執行這種橫跨該複數部機器之一致性協調的初始化作業,因為每部機器僅在本地執行初始化,且無任何嘗試來協調它們的本地初始化作業於在任何一或多部其它機器上的任何其它類似初始化作業。因此這種配置將會由於未協調、不一致及/或不調和的初始化狀態及相關的初始化作業而會有不想要或其它異常的行為。因此本發明之目的在於克服先前技術配置之限制。
在表XV(附錄B6)之範例碼中,該碼已經被修正,所以其解決了在來自表XII(附錄B3)之碼範例中未解決之複數部機器M1...Mn之一致性、協調的初始化作業的問題。在此修正的<init>方法碼中,一"aload_0"指令被***在該"1 invokespecial #1"指令之後,因為該"invokespecial #1"指令必須在進一步使用該物件之前執行。此***的"aload_0"指令造成該JAVA虛擬機器來載入該項目到該目前方法訊框之索引0處的本地變數陣列中,並儲存此項目在該目前方法訊框之堆疊的最上方,並造成在索引0處該「此」物件的物件參照被推入到該堆疊上。
再者,該JAVA虛擬機器指令"invokestatic #3<Method Boolean isAlreadyLoaded(java.lang.Object)>"被***在該"4 aload_0"指令之後,所以該JAVA虛擬機器推出該最上方項目離開該目前方法訊框的堆疊(其根據該先前"aload_0"指令為參照到此<init>方法所屬的該物件),並引起該"isAlreadyLoaded"方法,傳送該推出的項目到該新方法訊框做為其第一引數,並在由此"invokestatic"指令傳回時來傳回一布林值到該堆疊上。此改變很明顯,因為其修正該<init>方法來執行該"isAlreadyLoaded"方法及相關的作業,對應於該<init>方法之執行的開始,並傳回一布林引數(代表是否對應用此<init>方法之物件在該複數部機器M1...Mn中另一部機器上被初始化)到該<init>方法之執行方法訊框的堆疊上。
接著,兩個JAVA虛擬機器指令"ifeq 13"及"return"被***到該"5 invokestatic #2"指令之後及該"12 aload_0"指令之前的該碼串流中。這兩個指令的第一個為"ifeq 13"指令,其使得該JAVA虛擬機器推出最上方項目離開該堆疊,並執行該推出的數值與零之間的比較。如果該執行的比較成功(即如果且僅如果該推出的數值等於零時),則執行繼續到"12 aload_0"指令。但是如果該執行的比較失敗(即如果且僅如果該推出的數值不等於零),則執行繼續到該碼串流中的下一個指令,其為該"11 return"指令。此改變特別明顯,因為其修正該<init>方法來在當該"isAlreadyLoaded"方法之傳回值為負值(即"false")時即繼續執行該<init>方法(即指令12-19),或是當該"isAlreadyLoaded"方法為正值(即"true")時即中斷該<init>方法之執行(即該"11 return"指令造成傳回控制給此<init>方法之引起者。
該方法void isAlreadyLoaded(java.lang.Object),附錄B7之InitClient碼之部份,及分散式執行時間系統(DRT)71之部份,其執行機器M1...Mn之間的通信作業,以協調該等機器M1...Mn之間的<init>方法之執行。此範例的isAlreadyLoaded方法傳送在第15圖之一機器X上執行之附錄B8的InitServer碼,藉由傳送一「初始化狀態要求」到對應於正被「初始化」的該物件之機器X(即此<init>方法所屬的該物件)。請參考第19圖及附錄B8,機器X接收對應於該<clinit>方法所屬的物件之「初始化狀態要求」,並造成初始化狀態或記錄之一表格來決定該要求所對應之該物件的該初始化狀態。
如果對應於該初始化狀態要求之物件並未在除了該要求機器之外的另一部機器上被初始化,則機器X將會傳送一回應,代表該物件尚未被初始化,並更新對應於該指定的物件的一記錄登錄項來指示該物件現在被初始化。另外,如果對應於該初始化狀態要求之物件在除了該要求機器之外的另一部機器上被初始化,則機器X將傳送一回應來指示該物件已經被初始化。對應於決定了此初始化狀態要求所關於的該物件並未在除了該要求機器之外的另一部機器上被初始化,產生一回覆,並傳送到該要求機器來指示該物件並未被初始化。此外,機器X較佳地是更新對應於該初始化狀態要求所相關的該物件之登錄項來指示該物件現在被初始化。在自機器X接收到這種訊息之後,代表該物件並未在另一部機器上被初始化,該isAlreadyLoaded()方法及作業終止執行,並傳回一'false'數值到先前的方法訊框,其為該<init>方法之執行方法訊框。另外,在自機器X接收到一訊息之後,代表該物件已經在另一部機器上被初始化,該isAlreadyLoaded()方法及作業終止執行,並傳回一'true'數值到先前的方法訊框,其為該<init>方法之執行方法訊框。在此傳回作業之後,該<init>方法訊框之執行然後重新開始,如在步驟006中附錄B5之碼序列中所指出。
其將可瞭解到該修正的碼在具有複數部電腦或運算機器之一分散式運算環境中允許該記憶體操縱作業之協調的作業,所以關於在該複數部機器M1...Mn上未修正的碼或程序之作業的問題(例如像是多重初始化、或重新初始化作業)在當應用該修正的碼或程序時並不會發生。
附錄B1為附錄B9之example.java應用之<clinit>方法之解碼的編譯形式之修正前的摘錄。附錄B2為附錄B1之修正後的形式,其根據第20圖之步驟由附錄B10之InitLoader.java所修正。附錄B3為附錄B9之example.java應用之<init>方法的解碼之編譯的形式的修正之前摘錄。附錄B4為附錄B3的修正後形式,根據第21圖之步驟由附錄B10之InitLoader.java所修正。附錄B5為附錄B1的另一種修正後形式,根據第20圖之步驟由附錄B10之InitLoader.java所修正。且附錄B6為附錄B3之另一種修正後形式,根據第21圖之步驟由附錄B10之InitLoader.java所修正。該等修正以粗體來強調。
現在請參考第20圖及第21圖,接下來的程序為呈現出修正類別初始化例式(即該"<init>"方法)及物件初始化例式(即該"<init>"方法)。接下來的例式來修正關於類別之一<clinit>方法,藉以由附錄B1之碼區段(參見表格X)轉換到附錄B5之碼區段(參見表格XIV)來指示。類似地,接下來的程序來修正關於物件之一物件初始化<init>方法,藉以由附錄B3之碼區段(參見表格XII)轉換到附錄B6之碼區段(參見表格XV)來指示。
該應用碼50之初始載入(顯示在附錄B9之原始碼形式的一例示性範例,及顯示在附錄B1(亦參見表X)及附錄B3(亦參見表XII)中的一相對應部份解碼的形式)到該JAVA虛擬機器72上,係在步驟201中進行,且該碼被分析或細查,藉以偵測一或多個類別初始化指令、碼區塊或方法(即"<clinit>"方法),由步驟202進行,及/或一或多個物件初始化指令、碼區塊或方法(即"<init>"方法),由步驟212進行。一旦偵測到,由進行步驟203來修正一<clinit>方法,及由進行步驟213來修正一<init>方法。一修正的類別初始化例式之範例例示表示在附錄B2(亦參見表XI),及另一種例示表示在附錄B5(亦參見表XIV)。一修正的物件初始化例式之範例例示係表示在附錄B4(亦參見表XIII),其另一種例示表示在附錄B6(亦參見表XV)。如步驟204及214所示,於修正完成之後,則繼續該載入程序,使得該修正的應用碼被載入到每部機器上,而非該未修正的應用碼。
附錄B1(亦參見表X)及附錄B2(亦參見表XI)分別為一類別初始化例式(即一"<clinit>"方法)的之前(或預修正或未修正碼)及之後(或後修正或修正的碼)摘錄。此外,另一種修正的<clinit>方法之另一個範例係例示於附錄B5(亦參見表XIV)。加入到該方法之修正過的碼以粗體文字來強調。在附錄B1之未部份修正的解碼之碼範例中,該<clinit>方法之"new #2"及"invokespecial #3"指令產生一新物件(型別為'example'),及接下來的指令"putstaitc #4"寫入此新產生的物件之參照到稱為"currentExample"之記憶體位置(欄位)。因此,不需要管理複數部機器M1,...,Mn之分散式環境中協調的類別初始化,且每個具有第9,10,11,12及13圖之一記憶體更新及傳遞手段,藉此該應用程式碼50係要操作成橫跨複數部機器M1...Mn之一單一協調、一致及調和的例證,每部電腦或運算機器將利用對應於該<clinit>方法之多重執行的多種及不同物件來重新初始化(及視需要另外重新寫入或覆寫)該"currentExample"記憶體位置(欄位),造成在每部機器M1,...,Mn上該應用程式碼50之事件之間可能的不調和或不一致記憶體。清楚地是此並非一單一應用程式碼50例證的程式師或使用者所預期要發生的。
所以,藉由DRT的好處,該應用碼50被修正成其由改變該類別初始化例式(即該<clinit>方法)來載入到該機器中。所做的改變(以粗體強調)為該修正的<clinit>方法所執行的該等初始指令。這些加入的指令決定了此特定類別之初始化狀態,其藉由檢查是否對應於此特定類別在另一部機器上之一類似同等本地類別,其已經被初始化並依需要載入,其藉由呼叫一例式來決定該複數個類似同等類別的初始化狀態,例如該"is already loaded"(例如"isAlreadyLoaded()")之程序或方法。執行第17圖之步驟172-176之DRT 71的附錄B7的InitClient之"isAlreadyLoaded()"方法決定了在每一部機器M1,...,Mn上的類似同等本地類別之初始化狀態,其對應於正在載入的該特定類別,其結果為一"真"結果或一"假"結果,皆對應於是否該等機器M1...Mn之另一個(或多個)已經被初始化,並視需要載入一類似同等的類別。
DRT 71之附錄B7之InitClient的初始化決定例式或方法"isAlreadyLoaded()"可視需要採用一引數,其可代表此類別的一唯一識別項(參見附錄B5及表XIV)。例如,正被考慮要初始化的該類別名稱,代表此類別正被考慮要初始化的該類別或類別物件之一參照,或代表橫跨所有機器之一唯一數目或識別項(也就是對應於複數個類似同等本地類別之一唯一識別項,其每個在複數部機器M1...Mn上),其要用於決定在每部機器M1...Mn上複數部類似同等本地類別之初始化狀態。依此方式,該DRT可以同時支援多個類別之初始化,而不會混淆,因為該多重類別或尚未載入者,已使用每個類別之唯一識別項來載入,該DRT 71可有數種可能的方法來決定該類別之初始化狀態。較佳地是,該要求機器可以依序要求每個其它要求的機器(例如藉由使用一電腦通信網路來在該要求機器及該被要求機器之間交換查詢及回應訊息),如果對應該唯一識別項的於該要求的機器之類似同等本地類別被初始化,且如果任何要求的機器回覆為真,代表該類似同等本地類別已經被初始化,則傳回一真結果,其由該isAlreadyLoaded()方法傳回,代表該本地類別不需要被初始化,否則即傳回一假結果,由該isAlreadyLoaded()方法傳回,代表該本地類別必須被初始化。當然對於真或假結果之不同邏輯方案另可用相同的效果來實施。另外,在該本地機器上之DRT可考慮一共享的記錄表(可能在一獨立機器(如機器X),或在每部本地機器上一調和共享的記錄表,及被更新來維持實質上相同,或在一資料庫中),以決定是否在其它機器上之複數部類似同等類別之一已經被初始化。
如果DRT 71之isAlreadyLoaded()方法傳回假,則此代表此類別(即在該等複數部機器M1...Mn上複數個類似同等本地類別)之前並未被初始化,其係在該複數部機器M1...Mn之分散式運算環境中的任何其它機器上,因此該類別初始化方法之執行係要發生或進行,因為此係視為在每部機器上該複數個類似同等類別的一類別的第一及原始初始化。因此,當存在初始化狀態之一共享的記錄表,該DRT必須更新在該共享的記錄表中對應於此類別的該初始化狀態記錄為真或其它數值,以代表此類別被初始化,使得藉由所有機器及選擇性包括該目前機器之初始化狀態的該共享記錄表的後續參考(例如由isAlreadyLoaded方法之所有後續引發來執行),現在將傳回一真的值,以代表此類別已經被初始化。因此,如果isAlreadyLoaded()傳回假,該修正的類別初始化例式重新或繼續(或另外視需要開始或啟始)執行。
另一方面,如果該DRT 71之isAlreadyLoaded方法傳回真,則此代表此類別(在該複數部機器M1...Mn之一上每個該複數個類似同等本地類別)已經在該分散式環境中被初始化,如同記錄在該類別之初始化狀態的機器X上該共享的記錄表中。在這種狀況下,該類別初始化方法並不要執行(或另外重新開始或繼續,或開始或執行到完成),因為其有可能造成不想要的互動或矛盾,例如記憶體、資料結構或其它機器資源或裝置之重新初始化。因此,當該DRT傳回真時,在該<clinit>方法開始時所***的指令可防止該初始化例式的執行(選擇性為整體或部份),藉由透過使用該傳回指令來中斷開始或繼續該<clinit>方法之執行,且後續中止此類別之JAVA虛擬機器的初始化作業。
物件之初始化例式的一同等程序(例如"<init>"方法)係例示於第21圖,其中步驟212及213等同於第20圖之步驟202及203。此造成附錄B3之碼被轉換到附錄B4(亦參見表XIII)或附錄B6(亦參見表XV)之碼當中。
附錄B3(亦參見表XII)及附錄B4(亦參見表XIV)分別為一物件初始化例式(即一"<linit>"方法)的之前(或預修正或未修正碼)及之後(或後修正或修正的碼)摘錄。此外,另一種修正的<init>方法之另一個範例係例示於附錄B6(亦參見表XV)。加入到該方法之修正過的碼以粗體文字來強調。在附錄B4之未修正的部份解碼之碼範例中,該<init>方法之"aload_0"及"invokespecial #3"指令引起該java.lang.Object超類別之<init>。接下來,接著的指令"aload_0"載入一參照到「此」物件到該堆疊上,成為給"8 putfield #3"指令的引數之一。接下來,接著的指令"invokestatic #2"引發該方法java.lang.System.currentTimeMillis(),並傳回一長數值在該堆疊上。接下來,接著的指令"putfield #3"寫入該長數值置於該堆疊上,為該先前"invokestatic #2"指令到稱之為"timestamp"的記憶體位置(欄位),其對應於由"4 aload_0"指令被載入到該堆疊上的該物件例證。因此,不需要管理複數部機器M1,..,Mn之分散式環境中協調的物件初始化,且每個具有第9,10,11,12及13圖之一記憶體更新及傳遞手段,藉此該應用程式碼50係要操作成橫跨複數部機器M1...Mn之一單一協調、一致及調和的例證,每部電腦或運算機器將利用對應於該<init>方法之多重執行的多種及不同數值來重新初始化(及視需要另外重新寫入或覆寫)該"timestamp"記憶體位置(欄位),造成在每部機器M1,...,M上n該應用程式碼50之事件之間可能的不調和或不一致記憶體。清楚地是此並非一單一應用程式碼50例證的程式師或使用者所預期要發生的。
所以,藉由DRT的好處,該應用碼50被修正成其由改變該物件初始化例式(即該<init>方法)來載入到該機器中。所做的改變(以粗體強調)為該修正的<init>方法所執行的該等初始指令。這些加入的指令決定了此特定類別之初始化狀態,其藉由檢查是否對應於此特定物件在另一部機器上之一類似同等本地物件,其已經被初始化並依需要載入,其藉由呼叫一例式來決定該複數個類似同等物件的初始化狀態,例如附錄B7之該"is already loaded"(例如"isAlreadyLoaded()")之程序或方法。執行第17圖之步驟172-176之DRT 71的"isAlreadyLoaded()"方法決定了在每一部機器M1,...,Mn上的類似同等本地物件之初始化狀態,其對應於正在載入的該特定物件,其結果為一"真"結果或一"假"結果,皆對應於是否該等機器M1...Mn之另一個(或多個)已經被初始化,並視需要載入一類似同等的物件。
DRT 71之初始化決定程序或方法"isAlreadyLoaded()"可視需要採用一引數,其可代表此物件的一唯一識別(參見附錄B6及表XV)。例如,正被考慮要初始化的該物件名稱,正被考慮要初始化的該物件之一參照,或代表橫跨所有機器之一唯一數目或識別項(也就是對應於複數個類似同等本地類別之一唯一識別項,其每個在複數部機器M1...Mn上),其要用於決定在每部機器M1...Mn上複數部類似同等本地物件之此物件的初始化狀態。依此方式,該DRT可以同時支援多個物件之初始化,而不會混淆,因為該多重物件或尚未載入者,已使用每個物件之唯一識別項來載入,
該DRT 71可有數種可能的方法來決定該物件之初始化狀態。較佳地是,該要求機器可以依序要求每個其它要求的機器(例如藉由使用一電腦通信網路來在該要求機器及該被要求機器之間交換查詢及回應訊息),如果對應該唯一識別的於該要求的機器之類似同等本地物件被初始化,且如果任何要求的機器回覆為真,代表該類似同等本地類別已經被初始化,則傳回一真結果,其由該isAlreadyLoaded()方法傳回,代表該本地物件不需要被初始化,否則即傳回一假結果,由該isAlreadyLoaded()方法傳回,代表該本地物件必須被初始化。當然對於真或假結果之不同邏輯方案另可用相同的效果來實施。另外,在該本地機器上之DRT可考慮一共享的記錄表(可能在一獨立機器(如機器X),或在每部本地機器上一調和共享的記錄表,及被更新來維持實質上相同,或在一資料庫中),以決定此特定物件(或再其它機器上之複數個類似同等物件中任何一個)已經被該要求的機器當中之一來初始化。
如果DRT 71之isAlreadyLoaded()方法傳回假,則此代表此物件(即在該等複數部機器M1...Mn上複數個類似同等本地物件)之前並未被初始化,其係在該複數部機器M1...Mn之分散式運算環境中的任何其它機器上,因此該物件初始化方法之執係要發生或進行,因為此係視為第一及原始初始化。因此,當存在初始化狀態之一共享的記錄表,該DRT必須更新在該共享的記錄表中對應於此物件的該初始化狀態記錄為真或其它數值,以代表此物件被初始化,使得藉由所有機器及選擇性包括該目前機器之初始化狀態的該共享記錄表的後續參考(例如由isAlreadyLoaded方法之所有後續引發來執行),現在將傳回一真的值,以代表此物件已經被初始化。因此,如果isAlreadyLoaded()傳回假,該修正的物件初始化例式重新或繼續(或另外視需要開始或啟始)執行。
另一方面,如果該DRT 71之isAlreadyLoaded()方法傳回真,則此代表此物件(在該複數部機器M1...Mn之一上每個該複數個類似同等本地物件)已經在該分散式環境中被初始化,如同記錄在該物件之初始化狀態的機器X上該共享的記錄表中。在這種狀況下,該物件初始化方法並不要執行(或另外重新開始或繼續,或開始或執行到完成),因為其有可能造成不想要的互動或矛盾,例如記憶體、資料結構或其它機器資源或裝置之重新初始化。因此,當該DRT傳回真時,接近該<init>方法開始時所***的指令可防止該初始化例式的執行(選擇性為整體或部份),藉由透過使用該傳回指令來中斷開始或繼續該<init>方法之執行,且後續中止此物件之JAVA虛擬機器的初始化作業。
類似於用於<clinit>之修正係用於<init>。該應用程式的<init>方法(或多種方法,因為可為多個)即被偵測到,如步驟212所示,並被修正,如步驟213所示,以橫跨該分散式環境來調和地行為。
在已經發生修正之後的解碼之指令序列即提出在附錄B4中(及另一個類似的配置提供在附錄B6中),且該修正的/***的指令以粗體強調。對於該<init>修正,不像是該<clinit>修正,該修正指令時常需要被置於該"invokespecial"指令之後,而非放在最開始時。此理由為JAVA虛擬機器規格所主導。其它語言時常具有類似的微細設計差異。
給定測試的基本觀念來決定初始化是否已經發生在該等機器M1...Mn中某一部上的複數個類似同等類別或物件或其它資產,且如果未進行初始化,如果是的話,未進行該初始化;有數種不同的方式或具體實施例,其中可以進行或實施此協調的及調和的初始化觀念、方法及程序。
在第一具體實施例中,一特定機器,如機器M2,載入該資產(例如類別或物件),其包括一用來修正它的初始化例式,然後將包含有新修正的初始化例式的修正物件(或類別或其它資產或資源)載入到每一部其它的機器上M1,M3,...Mn(其可依序或同時,或根據任何其它順序、例式或處理)。請注意到對應於該應用碼中僅一個物件可以有一或複數個例式,或對應於在該應用碼中的複數個物件可有複數個例式。請注意到在一具體實施例中,被載入的該初始化例式為二元化可執行物件碼。另外,被載入的該初始化例式為可執行的中間碼。
在此配置中,其可使用術語「主控者/受控者」,每部受控(或次級)機器M1,M3,...Mn載入該修正的物件(或類別),並包含由該主控(或主要)機器(例如機器M2,或某個其它機器,如第15圖中之機器X)在該電腦通信網路或其它通信鏈結上傳送給它的新修正的初始化例式。在對於此「主控者/受控者」或「主要/次級」配置的些微變化中,該電腦通信網路可由一共用的儲存裝置所取代,例如一共用的檔案系統、或一共用的文件/檔案儲存區,例如一共用的資料庫。
請注意到在每部機器或電腦上執行的修正不需要且經常不會是相同或類似。其所需要的是它們係以足夠類似的方式被修正,而其係根據此處所述之創新原理,該複數部機器之每一步對於其它機器為一致性且調和性地完成此處所述的作業及目的。再者,在此處所提供之說明之下將可瞭解到有大量的方法可以實施修正,例如可以根據該特定硬體、架構、作業系統、應用程式碼、或類似者或其它因素而定。其亦可瞭解到本發明之具體實施例可以在一作業系統內、或在任何作業系統之外或不具有其好處,在該虛擬機器內,在一EPROM內,在一軟體、韌體,或是這些的任何組合當中來實施。
在此「主控者/受控者」或「主要/次級」配置的另一種變化中,機器M2載入資產(例如類別或物件),包含一(或甚至一或多個)初始化例式,以未修正形式在機器M2上,然後(例如機器M2或每個本地機器)修正該類別(或物件或資產),藉由整體或部份自該資產(或類別或物件)中刪除該初始化例式,並藉由一電腦通信網路或其它通信鏈結或路徑載入該資產的修正碼,其在其它機器上具有現在修正或刪除的初始化例式。因此,在該修正並非該資產初始化例式的一轉換、測試、轉譯或編譯時,而是在所有機器中除了一部之外之上刪除該初始化例式。
整個刪除該初始化例式之處理可以由該「主控」機器(例如機器M2或某個其它機器,例如第15圖之機器X)或另由每個其它機器M1,M3,...,Mn在收到該未修正資產時來執行。此「主控者/受控者」或「主要/次級」配置的額外變化係要使用一共享的儲存裝置,例如一共享的檔案系統,或一共享的文件/檔案儲藏處,例如一共享的資料庫,用於在機器M1,M2,...,Mn及選擇性第15圖之機器X之間交換該資產、類別或物件的碼(包括例如該修正的碼)。
在又另外的具體實施例中,每部機器M1,...,Mn接收該未修正的資產(例如類別或物件),其中包含有一或多個初始化例式,但修正該例式,然後載入包含有現在修正的例式之資產(例如類別或物件)。雖然一種機器(例如該主控或主要機器)可以顧客化或執行一不同的修正到傳送給每部機器之初始化例式,此具體實施例更可立即使得由每部機器所進行之修正略微不同,並基於其特定的機器架構、硬體、處理器、記憶體、組態、作業系統或其它因素來改進、顧客化及/或最佳化,然而仍類似、調和並與其它機器一致於所有其它類似的修正及特性,其不需要一定類似或相同。
在另一配置中,一特定機器(如M1)載入該未修正的資產(例如類別或物件),其包括一或多個初始化例式,且所有其它機器M2,M3,...,Mn執行一修正或刪除該資產的初始化例式(例如類別或物件),並載入該修正的版本。
在所述之所有具體實施例中,供應或傳送該資產碼(例如類別碼或物件碼)給該等機器M1,...Mn者,且視需要包含第15圖的一機器X,其可分支、分散或傳送於不同機器之任何組合或排列之間;例如藉由提供直接機器對機器通信(例如直接由M2供應每部M1,M3,M4等),或藉由提供或使用一串接或序列性通信(例如M2供應M1,其然後供應M3,然後供應M4,依此類推),或是該直接及串接及/或序列性的組合。
在又另一種配置中,該初始機器(如M2)可以進行該應用碼50之初始載入,根據此發明來修正它,然後產生一類別/物件載入及初始化的表,其列出所有或至少所有由機器M2所載入及初始化的相關的類別及/或物件。此表格然後被傳送或傳遞(或至少其內容被傳送或傳遞)到所有其它機器(包括例如為分支或串接的形式)。然後如果一機器(除了M2之外)需要載入,且因此初始化在該表中所列出的一類別,其傳送一要求到M2來提供所需要的資訊,視需要包含要被載入之類別或物件之未修正的應用碼50或要被載入的該類別或物件之修正的應用碼,且視需要為在機器M2上先前載入及初始化的類別或物件之先前初始化的(或視需要且如果可用的話,該最新或甚至目前的)數值或內容。此模式的另一種配置係要傳送必要資訊的該要求不是到機器M2,而是另一個或甚至超過一個之機器M1,...,Mn或機器X。因此提供給機器Mn之資訊一般而言不同於由機器M2所載入及初始化的該初始狀態。
在上述之狀況下,對於該表格中每個登錄項為較佳及較有利的是伴隨一計數器,其在每此一類別或物件被載入及初始化在該等機器M1,...,Mn中一部之上時來增加。因此,當需要資料或其它內容時,該類別或物件內容及該相對應計數器之計數,且視需要包括該修正過或未修正的應用碼,皆回應於該需求來轉換。此「隨需求」模式對於一或多部機器M1,...,Mn可以某種程度增加了此發明之執行的負擔,但其亦降低了互連該等電腦之通信網路之交通量,並因此提供整體效益。
在又另一種配置中,該等機器M1到Mn可以傳送一些或所有載入要求到一額外的機器X(例如參見第15圖之具體實施例),其可執行對該應用碼50之修正,包括一個(及可能複數個)最終化例式,其透過上述任何一種方法,並傳回該修正的應用碼,其包括對於每部機器M1到Mn之現在修正的初始化例式,且這些機器依序載入該修正的應用碼,其包括本地修正的例式。在此配置中,機器M1到Mn傳送所有載入要求到機器X,其傳回一修正的應用程式碼50到每部機器,其包括修正的初始化例式。由機器X所執行的該等修正可包括本發明之範圍所涵蓋的任何修正。此配置在應用到其它機器之前當然可應用到此處所述的某些機器及其它配置。
在運算技術中的專業人士將可知道多種可能的技術,其可用於修正電腦碼,其包括但不限於測試、程式轉換、轉譯、或編譯手段。
一種這樣的技術係對該應用碼進行修正,而不需要該應用碼之語言的一先前或後續改變。另一種這樣的技術係要轉換該原始碼(例如JAVA語言原始碼)成為一中介表示(或中介碼語言或虛擬碼),例如JAVA位元組碼。一旦此轉換發生之後,對該位元組碼做修正,然後可倒轉該轉換。此提供了修正的JAVA碼所需要的結果。
另一種可能的技術為轉換該應用程式為機器碼,其可直接由原始碼、或透過前述的中介語言、或透過某些其它中介手段。然後該機器碼在被載入及執行之前被修正。另一種這樣的技術為轉換該原始碼為一中介代表,因此被修正及後續被轉換成機器碼。
本發明包含所有這些修正程序,以及兩個、三個或甚至更多這種程序的組合。
最終化
請再次回到第14圖,其所示為一單一先前技術電腦操作為一JAVA虛擬機器之架構圖。依此方法,一機器(由多家製造商中任何一家製造,並具有在多種不同語言中任何一種操作的一作業系統),其可在該應用程式碼50之特定語言中操作,在此例中為JAVA語言。也就是說,一JAVA虛擬機器72能夠操作在JAVA語言中的應用碼50,並利用無關於該機器製造商及該機器的內部細節之JAVA架構。
當實施在一非JAVA語言或應用碼環境中,該泛用化平台、及/或虛擬機器、及/或機器、及/或執行時間系統,皆能夠操作在該平台的語言中的應用碼50(可能包括例如(但不限於)任何一種或多種的原始碼語言、中介碼語言、物件碼語言、機器碼語言及任何其它碼語言),及/或虛擬機器、及/或機器、及/或執行時間系統環境,並利用該平台、及/或虛擬機器、及/或機器、及/或執行時間系統、及/或語言架構,而無關於該機器製造商及該機器的內部細節。其將亦可在此處所提供的說明中瞭解到該平台及/或執行時間系統可包括虛擬機器及非虛擬機器軟體及/或韌體架構,以及硬體及直接硬體編碼應用及實施。
再者,當僅有單一電腦或機器72時,第14圖之單一機器能夠輕易地追跡是否該等特定物件50X,50Y及/或50Z可能在該應用碼50的執行之後續時間為該應用碼50所需要。此基本上可由維護每個物件及/或類別之一「把柄計數」或類似計數或索引來完成。此計數基本上可在執行該應用碼50中追跡參照到一特定物件(或類別)之場所或次數。對於一把柄計數(或其它計數或索引為主)實施,其在當產生或指定該物件或類別之新的參照時向上增加該把柄計數(或索引),並在當消滅或遺失該物件或類別之參照時向下減少該把柄計數(或索引),當一特定物件的物件把柄計數到達零時,在該執行應用碼50中無處可參照到該特定物件(或類別),其中關於該零物件把柄計數(或類別把柄計數)。例如,在該JAVA語言及虛擬機器環境中,一「零物件把柄計數」關連於缺少指向到該特定物件之任何參照(零參照計數)。然後該物件稱之為「可最終化」或存在於一可最終化狀態。物件把柄計數(及把柄計數器)可以用類似的方式對每個物件來維持,所以可以知道每個特殊或特定物件之可最終化或非可最終化狀態。類別把柄計數(及類別把柄計數器)可以用類似的方式對每個物件及每個類別來維持,所以可以知道每個特殊或特定類別之可最終化或非可最終化狀態。再者,資產把柄計數或索引及計數器可以用類似的方式對每個資產或類別及物件來維持,所以可以知道每個特殊或特定資產之可最終化或非可最終化狀態。
一旦對於一物件(或類別)已經達到此最終化狀態,該物件(或類別)可以安全地最終化。此最終化基本上可以包括物件(或類別)刪除、移除、清除、改造、回收、最終化或其它記憶體釋放作業,因為該物件(或類別)不再需要了。
因此,由於這些參照、指標、把柄計數或其它類別及物件種類追跡手段之可用性,該電腦程式師(或其它自動化或非自動化程式產生器或產生手段)在使用該JAVA語言及架構來撰寫像是該應用碼50之程式,其不需要撰寫任何特定碼,藉以提供給此類別或物件之移除、清除、刪除、改造、回收、最終化或其它記憶體釋放作業。因為僅有一單一JAVA虛擬機器72,該單一JAVA虛擬機器72可用一致性、調和及協調的方式追跡該類別及物件把柄計數,並以一自動化及不唐突的方式視需要清除(或進行最終化),例如不需要不想要的行為,錯誤、不成熟、多餘或重新最終化作業,像是可由不一致及/或不調和最終化狀態或把柄計數所造成。在類似的方式中,一單一泛用化虛擬機器或機器或執行時間系統可以追跡該類別及物件把柄計數(或如果未特別使用「物件」及「類別」指定時即相等),並視需要以一自動化及不唐突的方式清除(或進行最終化)。
上述之自動化把柄計數系統係用來指出當一執行中應用程式50之一物件(或類別)不再需要,並可被「刪除」(或清除、或最終化、或再造、或回收、或其它另行釋放)。其要瞭解到當實施在「非自動化記憶體管理」語言及架構(例如像是「未收集垃圾」程式化語言,像是C,C++,FORTRAN,COBOL及機器碼語言,例如x86,SPARC,PowerPC,或中介碼語言),該應用程式碼50或程式師(或其它自動化或非自動化程式產生器或產生手段)能夠做出決定何時不再需要一特定物件(或類別),並後續可被「刪除」(或清除、或最終化、或再造、或回收)。因此,在本發明內文中的「刪除」要瞭解為包含在那些「非自動化記憶體管理」語言及架構中,對應於刪除、最終化、清除、回收或再造作業之「非自動化記憶體管理」語言及架構上物件(或類別)之刪除(或清除、或最終化、或再造、或回收、或釋放)。
對於一更為一般性的虛擬機器或摘要機器環境的組合,且對於目前及未來的電腦及/或運算機器及/或資訊家電或處理系統,且其可不利用或不需要利用到類別及/或物件,本發明之結構、方法及電腦程式及電腦程式產品仍將可應用。不會利用類別及/或物件之電腦及/或運算機器之範例包括例如由Intel公司及其它公司所製造的x86電腦架構,由Sun Microsystems公司及其它公司所製造的SPARC電腦架構,及由IBM公司及其它公司所製造的PowerPC電腦架構,及由Apple電腦公司及其它公司所製造的個人電腦產品。對於這些種類的電腦、運算機器、資訊家電,及並未利用類別或物件觀念而在其上實施的虛擬機器或虛擬運算環境,例如其可被一般化來包括基本資料型別(例如整數資料型別、浮點資料型別、長整數資料型別、雙重資料型別、字串資料型別、符號資料型別及布林資料型別)、結構化資料型別(例如陣列及記錄)衍生的型別,或其它程序性語言的其它碼或資料結構、或其它語言及環境,例如函數、指標、組件、模組、結構、參照及集合。
但是,在第8圖所例示的配置中(亦在第31-33圖中),其提供複數部個別電腦或機器M1,M2,...Mn,其每個係透過一通信網路53或其它通信鏈結來互連,且每部個別的電腦或機器具有一修正子51(請參見第5圖),並由例如該分散式執行時間(DRT)71(參見第8圖)所釋放或實施,並載入有一共用應用碼50。該術語共用應用程式係要理解為代表一應用程式或應用程式碼,其寫成在單一機器上作業,並整體或部份地載入及/或執行在該複數部電腦或機器M1,M2...Mn上整體或部份地執行,或視需要在該複數部電腦或機器M1,M2...Mn上來執行。但有些不同地是,有一種共用應用程式,以應用碼50所代表,且此單一複本或可能是複數個相同複本係被修正來產生該應用程式或程式碼的一修正複本或版本,每個複本或例證係預備在該複數部機器上執行。在它們被修正之後,如果它們執行類似的作業,並彼此一致性及調和性地操作,即視為是共用。其將可瞭解到,實施本發明之特徵的複數部電腦、機器、資訊家電或類似者,可視需要連接或耦合到並未實施本發明之特徵的其它電腦、機器、資訊家電或類似者。
在一些具體實施例中,部份或所有的該複數部個別電腦或機器可以包含在單一外殼或機殼內(例如所謂刀鋒伺服器,由Hewlett-Packard Development公司、Intel公司、IBM公司及其它所製造),或是實施在一單一印刷電路板上,或甚至在一單一晶片或晶片組內。
基本上該修正子51或DRT 71或其它碼修正手段即負責修正該應用碼50,所以其可在JAVA語言及虛擬機器環境中執行清除、或其它記憶體再造、回收、刪除或最終化作業,例如像是在該JAVA語言及虛擬機器環境中的最終化方法,其係在一協調的、一致及調和的方式,並橫跨該複數部個別機器M1,M2...Mn之間。因此在這種運算環境中其依循必須要保證在每部個別的機器M1,M2...Mn上的本地物件及類別以一致性方式(相對於彼此)被最終化。
其將可瞭解到在此處的說明之下,該修正子51及該分散式執行時間71會有另外的實施。例如,該修正子51可以實施該分散式執行時間71之一個組件或在其內,因此該DRT 71可以實施該修正子51之功能及作業。另外,該修正子51之功能及作業可以在用於實施該DRT 71之結構、軟體、韌體或其它手段之外實施。在一具體實施例中,該修正子51及DRT 71係實施或寫入在電腦程式碼的單一段落中,而可提供該DRT及修正子之功能。因此該修正子功能及結構可能包含在該DRT中,並視為一選擇性組件。在如何實施之外,該修正子功能及結構係負責修正該應用碼程式之可執行碼,且該分散式執行時間功能及結構係負責實施該等電腦或機器之間的通信。在一具體實施例中的通信功能係透過在每部機器上之DRT的電腦程式碼內的一中間協定層來實施。例如該DRT可實施在該JAVA語言中的一通信堆疊,並使用該傳輸控制協定/網際網路協定(TCP/IP)來提供該等機器之間的通信或對話。實際上這些功能或作業是如何實施或分割在結構性及/或程序性元素之間,或是在本發明之電腦程式碼或資料結構之間,皆比它們所提供者要來得不重要。
特別是,當在一特定機器上(例如機器M3)上執行的該應用程式碼不會具有活動的把柄、參照或指標到一特定本地物件或類別(即一「零把柄計數」),在另一部機器上(例如機器M5)執行的相同程式碼可具有一活動把柄、參照或指標到該本地類似同等物件或類別,其對應於機器M3之「未參照的」本地物件或類別,因此此其它機器(機器M5)在未來仍需要參照或使用該物件或類別。因此,如果在每部機器M3及M5上相對應之類似同等本地物件或類別要以相對於其它機器之一獨立及未協調之方法被最終化(會另由某個其它記憶體清除作業所清除),該物件及應用之行為整個並未定義,也就是說,缺少機器M1...Mn之間協調的、調和、及一致性最終化或記憶體清除作業,即有可能造成衝突、不想要的互動、或其它異常行為,例如在機器M5及機器M3上本地類似相對應物件之間的永久不一致性。例如,如果機器M3上該本地類似同等物件或類別要被最終化,例如由機器M3中被刪除、或清除、或再造、或回收,並以相對於機器M5之一不協調及不一致的方式,則如果機器M5係要執行一作業,或另外使用機器M3上對應於現在最終化的類似同等本地物件之本地物件或類別(這種作業例如為第9,10,11,12,及13圖中一記憶體更新及傳遞手段的環境中,一寫入到(或嘗試寫入到)機器M5上類似同等本地物件或對該特定物件之數值的修改),則該作業(該改變或嘗試的數值改變)可以不被執行(由機器M5傳遞)到整個所有其它機器M1,M2...Mn,因為至少機器M3將不會包括在其本地記憶體中相關類似同等對應的特定物件,該物件及其資料、內容及數值已經由先前物件清除、或最終化、或再造或回收作業來刪除。因此,即使可考慮到目前機器M5能夠寫入到該物件(或類別),事實上其已經在機器M3上被最終化,其代表可能這種寫入作業為不可能,或在機器M3上幾乎不可能。
此外,如果機器M3上一類別的物件要標示為可最終化及後續被最終化(例如藉由刪除、或清除、或再造、或回收),而在其它機器M1,M2...Mn上相同的物件亦不會標示為可最終化,則在機器M3上該物件的最終化(或刪除、或清除、或再造、或回收)之執行相對於所有機器M1,M2...Mn之間協調的最終化作業為不成熟,因為除了M3之外的機器尚未預備來最終化它們對應於由機器M3現在最終化或可最終化之特殊物件的本地類似同等物件。因此,如果機器M3要執行一給定特殊物件(或類別)上該清除或其它最終化例式,該清除或其它最終化例式將執行該清除或最終化,而非僅是在機器M3上的本地物件(或類別),但亦對於在所有其它機器上所有類似同等本地物件或類別(即對應於要被清除或另外最終化之特殊物件或類別)。
如果要發生這些狀況,在其它機器M1,M2...Mn上同等物件之行為即為未定義,並有可能造成機器M3與機器M1,M2...Mn之間的永久及不可恢復的不一致性。因此,雖然機器M3可獨立地決定一物件(或類別)已經可以最終化,並進行最終化該指定的物件(或類別),機器M5可能不會對於已經預備好最終化之相同類似同等本地物件(或類別)做出相同決定,因此不一致的行為將由於刪除在一部機器(例如機器M3)上複數個類似同等物件中的一個而有可能造成,但不會在其它機器(如機器M5)或多個機器,且由機器M3不成熟地執行該指定物件(或類別)之最終化例式,並代表所有其它的機器M1,M2...Mn。在機器M5之最低作業以及其它的機器處於上述的狀況下,皆為不可預測,並有可能造成不一致的結果,這種不一致性有可能例如來自於不成熟地執行最終化例式及/或在一部機器或一些機器的子集合中但不會在其它部機器上刪除該物件。因此,將不會達到在每部該等複數部機器M1,M2...Mn上對於相同應用程式碼之同步作業所需要之達到或提供一致性的協調最終化作業(或其它記憶體清除作業)。因此任何嘗試要維持相同的記憶體內容與第9,10,11,12及13圖之記憶體更新及傳遞手段者,或甚至相同的記憶體內容,做為一特別或定義的類別、物件、數值或其它資料的組合,其係對於每部機器M1,M2,...,Mn,對於相同應用程式之同步作業的需要,對於給定的習用方案皆將不會達到。
為了保證在機器M1,M2,...,Mn之間有一致性的類別及物件(或同等者)最終化狀態及最終化或清除,該應用碼50由搜尋整個可執行的應用碼50來分析或細查,藉以偵測在該應用碼50中的程式步驟(例如特定的指令或指令種類),其可定義或構成或另外代表一最終化作業或例式(或其它類似的記憶體、資料或碼清除例式、或其它類似的再造、回收或刪除作業)。在該JAVA語言中,這些程式步驟例如包含或具有一物件之某部份或全部的"finalize()"方法,並視需要為任何關連於一"finalize()"方法之其它碼、例式或方法,例如藉由該"finalize()"方法的主體喚起一不同方法之方法。
此分析或細查會在載入該應用程式碼50之前、或在該應用程式碼50載入程序期間發生,或甚至在該應用程式碼50載入程序之後發生。其可類似於一安裝、程式轉換、轉譯、或編譯程序,其中該應用程式可用額外的指令來實施,及/或另可由意義保留程式操縱所修正,即/或選擇性地由一輸入碼語言轉譯到一不同的碼語言(例如像是由原始碼或中介碼語言轉譯到機器語言),並瞭解到該術語編譯通常或習用上包含了碼或語言中的改變,例如由原始碼或物件碼,或由一種語言到另一種語言。但是,在本例中該術語「編譯」(及其文法上同等者)並沒有那麼多限制,且亦可在相同碼或語言內包括或含有修正。例如,該編譯及其同等者可瞭解為同時包含正常編譯(例如像是藉由例示而非限制,由原始碼到物件碼),且由原始碼編譯成原始碼,以及由物件碼編譯到物件碼,以及其中任何改變的組合。其亦可包括所謂的「中介語言」,其形式為「虛擬物件碼」。
藉由例示且並非限制,在一具體實施例中,該應用碼50之分析或細查可在載入該應用程式碼期間發生,例如藉由該作業系統由該硬碟或其它儲存裝置或來源讀取該應用碼,並將其複製到記憶體,並預備開始執行該應用程式碼。在另一具體實施例中,於JAVA虛擬機器中,該分析或細查可在該java.lang.ClassLoader loadClass方法(如java.lang ClassLoader.loadClass())之類別載入程序期間發生。
另外,該應用碼50之分析或細查可以甚至在該應用程式碼載入程序之後發生,例如在該作業系統已經載入該應用碼到記憶體之後,或選擇性地甚至在該應用程式碼之相關的對應部份已經開始或進行之後,例如像是在該JAVA虛擬機器已經載入該應用碼到該虛擬機器當中之後,其係透過"java.lang.ClassLoader.loadClass()"方法,且選擇性地進行執行。
因此,上述的分析或細查中,初始係尋找清除例式,且當找到或識別出來時,***一修正碼,藉以呼叫一修正的清除例式。此修正的例式係被調整並撰寫來中止在任何特定機器上的該清除例式,除非要被刪除、清除、再造、回收、釋放、或另被最終化之類別或物件(或更一般而言是「資產」)被標示為被所有其它機器所刪除。有數種不同其它的模式,其中可以進行此修正及載入。
藉由例示且並非限制,在一具體實施例中,該應用碼50之分析或細查可在載入該應用程式碼期間發生,例如藉由該作業系統由該硬碟或其它儲存裝置或來源讀取該應用碼,並將其複製到記憶體,並預備開始執行該應用程式碼。在另一具體實施例中,於JAVA虛擬機器中,該分析或細查可在該java.lang.ClassLoader loadClass方法(如java.lang.ClassLoader.loadClass())之執行期間發生。
另外,該應用碼50之分析或細查可以發生,即使在該應用碼載入程序之後,例如在該作業系統已經載入該應用碼到記憶體中,甚至開始執行,或在該java虛擬機器透過"java.lang.ClassLoader.loadClass()"方法已經載入該應用碼到該虛擬機器當中之後。換言之,在JAVA虛擬機器的例子中,在執行了"java.lang.ClassLoader.loadclass()"之後已經斷定。
因此在一種模式中,在該載入機器上的DRT 71/1,在此例中為Java虛擬機器M1(JVM#1),要求所有其它機器M2,...,Mn之DRT's 71/2...71/n,如果類似的同等第一類別50X,如被使用、參照或被任何其它機器M2,...Mn所使用(即並未被標示為最終化)。如果此問題的答案為是(也就是說,一類似同等物件正由另一部或多部機器使用時,且並未被標示為可最終化,因此不會被刪除、清除、最終化、再造、回收或釋放),則正常的清除例式即被關閉、中止、暫停或另對於機器JVM#1上類似同等第一物件50X所除能。如果該答案為否,(也就是在每部機器上類似同等第一物件50X在所有其它機器上被標示為利用一類似同等物件50X可最終化),則該清除例式***作(或重新開始或持續、或進行),且該第一物件50X與一類似同等物件50X被刪除在不僅是機器JVM#1上,但是在所有其它機器M2...Mn上。較佳地是,該清除例式之執行被配置給一部機器,例如該最後機器M1標示了該類似同等物件或類別為可最終化。該最終化例式之執行對應於由所有機器之決定之該複數個類似同等物件為可最終化,其對應於所有機器M1...Mn僅執行一次,且較佳地是僅由一部機器來代表所有的機器M1...Mn。對應於且較佳地是依循該最終化例式之執行,則所有機器可以刪除、再造、回收、釋放或另外清除由它們本地類似同等物件所使用的記憶體(及其它相對應系統資源)。
附錄C1,C2,C3及C4(亦在以下的表XVI,XVII,XVIII及XIX中部份重現)為範例性碼表列,其提供應用程式50之一最終化例式(附錄C1及表XVI)的該習用或未修正的電腦程式軟體碼(例如可用於單一機器或電腦環境中),及相同同步化例式的一後修正摘錄,例如可用於本發明之具有多重機器的具體實施例中(附錄C2及C3及表XVII及XVIII)。同時,被加入到該初始化例式之修正過的碼以粗體文字來強調。
附錄C1為附錄C4之example.java應用之finalize()方法之解碼的編譯形式之修正前的摘錄。附錄C2為附錄C1之修正之後形式,其由附錄C7之FinalLoader.java利用第22圖之步驟所修正。附錄C3為附錄C1的另一個修正之後形式,其由附錄C7之FinalLoader.java根據第22圖之步驟所修正。該等修正以粗體強調。
附錄C4為在修正之前/之後的摘錄C1-C3中所使用之example.java應用之原始碼的摘錄。此範例應用具有一單一最終化例式,該finalize()方法根據本發明由附錄C7之FinalLoader.java所修正。
其要注意到在該附錄中的編譯過的碼與在該表格中重複的部份採用的形式為檔案"example.java"之原始碼,其係包括在附錄C4中。在附錄C1及表XVI之程序中,步驟001之程序名稱"Method finalize()"為編譯過應用碼之"example.java"之最終化方法之顯示的解碼輸出的名稱。該方法名稱"finalize()"為根據該JAVA平台規格之一物件的最終化方法的名稱,並對此範例選擇來代表一JAVA最終方法之作業的一典型模式。整體而言該方法係負責配置系統資源或執行對應於決定出不具有對此物件之參照的JAVA虛擬機器之垃圾收集器的其它清除,且該"example.java"執行的碼係依序做說明。
首先(步驟002),該JAVA虛擬機器指令"getstatic #9<Field java.io.PrintScream out>"使得該JAVA虛擬機器取回儲存在含有此範例finalize()方法之應用程式的classfile結構的第二索引中由CONSTANT_Fieldref_info constant_pool項目所指出的該靜態欄位的物件參照,並造成對該欄位中java.io.PrintStream物件之參照被放置(推入)在該目前執行之執行緒的目前方法訊框的堆疊上。
接著(步驟003),該JAVA虛擬機器指令"ldc #24<String"Deleted...">"使得該JAVA虛擬機器載入該字串值"Deleted"到該目前方法訊框之堆疊上,並造成該字串值"Deleted"載入到該目前方法訊框之堆疊的最上方。
接著(步驟004),該JAVA虛擬機器指令"invokevirtual #16<Method void println(java.lang.String)>"使得該JAVA虛擬機器推出該最上方項目離開該目前方法訊框的堆疊,並引起該"println"方法,傳送推出的項目到該新方法訊框做為其第一引數,並使得該"println"方法被引發。
最後,該JAVA虛擬機器指令"return"(步驟005)使得該JAVA虛擬機器藉由傳回控制到先前的方法訊框來停止執行此finalize()方法,其並造成此最終化方法之執行的終止。
由於這些在第1圖及第2圖中習用組態之單一機器上所操作的這些步驟,該JAVA虛擬機器可用一致性、調和及協調的方式來追跡該物件把柄計數,並在執行含有該println作業的finalize()方法中能夠保證不會發生不想要的行為(例如不成熟或超數目最終化作業,例如超過一次地執行一單一'example.java'物件之finalize()方法),例如可由不一致及/或不調和最終化狀態或把柄計數所造成。如果這些步驟要在第5圖及第8圖之組態中複數部機器上進行,並具有第9,10,11,12及13圖之記憶體更新及傳遞複製手段,且同步在該複數部機器M1...Mn之每一部上執行該應用程式碼50,在每一部機器上每個同步執行之應用程式事件的最終化作業將在任何其它機器上,不需要任何其它事件之間的協調即可進行。給定了橫跨複數部機器之一致性、協調及調和的最終化作業之目標,此先前技術配置將無法執行橫跨該複數部機器之這種一致性、協調的最終化作業,因為每部機器僅在本地執行最終化,且不會嘗試協調它們的本地最終化作業與在任何其它一部或多部機器上的任何其它類似的最終化作業。因此這種配置將會由於未協調、不一致及/或不調和的最終化狀態或把柄計數及相關的最終化作業而受到不想要或其它異常的行為。因此本發明的目的在於克服先前技術配置之限制。
在表XVIII(附錄C3)之範例碼中,該碼已經被修正,所以其解決了在表XVI(附錄C1)之碼範例中無法解決的複數部機器M1...Mn之一致性、協調的最終化作業的問題。在此修正的finalize()方法碼中,一"aload_0"指令被***在該"getstatic #9"指令之前,藉以為該finalize()方法之第一指令。此使得該JAVA虛擬機器載入該項目在該目前方法訊框的索引0處的本地變數陣列中,並儲存此項目在該目前方法訊框的堆疊上方,並使得在索引0處之「此」物件的物件參照中的物件被推入到該堆疊上。
再者,該JAVA虛擬機器指令"invokestatic #3<Method boolean isLastReference(java.lang.Object)>"被***在該"0 aload_0"指令之後,所以該JAVA虛擬機器推出該最上方項目離開該目前方法訊框的堆疊(其根據先前"aload_0"指令為參照到此finalize()方法所屬的該物件),並引發該"isLastReference"方法,傳送該推出的項目到該新方法訊框做為其第一引數,並在由此"invokestatic"指令傳回一布林值到該堆疊上。此改變很明顯,因為其修正該finalize()方法來執行該"isLastReference"方法及相關的作業,對應於該finalize()方法之執行的開始,並傳回一布林引數(代表是否對應用此finalize()方法之類別在該複數部機器M1...Mn中每一部機器上類似同等物件之間的最後剩下的參照)到該finalize()方法之執行方法訊框的堆疊上。
接著,兩個JAVA虛擬機器指令"ifne 8"及"return"被***到該"1 invokestatic #3"指令之後及該"getstatic #9"指令之前的該碼串流中。這兩個指令的第一個為"ifne 8"指令,其使得該JAVA虛擬機器推出最上方項目離開該堆疊,並執行該推出的數值與零之間的比較。如果該執行的比較成功(即如果且僅如果該推出的數值不等於零時),則執行繼續到"8 getstaticw #9"指令。但是如果該執行的比較失敗(即如果且僅如果該推出的數值不等於零),則執行繼續到該碼串流中的下一個指令,其為該"7 return"指令。此改變特別明顯,因為其修正該finalize()方法來在當該"isLastReference"方法之傳回值為正值(即"true")時即繼續執行該finalize()方法(即指令8-16),或是當該"isAlreadyLoaded"方法為負值(即"false")時即中斷該finalize()方法之執行(即該"7 return"指令造成傳回控制給此finalize()方法之引起者)。
該方法void isLastReference(java.lang.Object),附錄C5之FinalClient碼之部份,及分散式執行時間系統(DRT)71之部份,其執行機器M1...Mn之間的通信作業,以協調該等機器M1...Mn之間的finalize()方法之執行。此範例的isLastReference方法傳送在第15圖之一機器X上執行之附錄C6的InitServer碼,藉由傳送一「清除狀態要求」到對應於正被「最終化」的該物件之機器X(即此finalize()方法所屬的該類別)。請參考第25圖及附錄C6,機器X接收對應於該finalize()方法所屬的物件之「清除狀態要求」,並造成清除計數或最終化狀態之一表格來決定該要求所對應之該物件的清除計數或最終化狀態。
如果在對應於該清除狀態要求之該等複數部機器M1...Mn中每一部上的該複數部類似同等物件被標示為除了該要求機器(即n-1機器)之外所有其它機器上的清除,則機器X將傳送一回應來代表該複數個類似同等物件被標示為在所有其它機器上為清除,並視需要更新對應於該指定的類似同等物件之一記錄登錄項來代表該類似同等物件為現在被清除。另外,如果對應於該清除狀態要求之該複數個類似同等物件並未對除了該要求機器(即小於n-1機器)之所有其它機器上為清除,則機器X將傳送一回應來代表該複數部類似同等物件並未標示為在所有其它機器上為清除,並增加對應於該指定的物件之"標示為清除計數器"記錄(或其它類似的最終化記錄手段),以記錄該要求機器已經標示了該等複數個類似同等物件要被清除中的一部。對應於決定出此清除狀態要求所相關的該複數部類似同等物件,即標示為除了該要求機器之外所有其它機器為清除,即產生一回覆,並傳送到該要求機器來代表該複數個類似同等物件被標示為除了該要求機器之外所有其它機器上為清除。此外及視需要地,機器X可更新對應於該清除狀態要求所相關的該物件之該登錄項來代表該複數個類似同等物件為現在「被清除」。在自機器X接收到這種訊息之後,代表該複數個類似同等物件被標示為在所有機器上為清除,該isLastReference()方法及作業即終止執行,並傳回一'true'數值到先前的方法訊框,其為該finalize()方法之執行方法訊框。另外,在自機器X接收到一訊息之後,代表該複數個類似同等物件並未被標示為在所有其它機器上為清除,該isLastReference()方法及作業即終止執行,並傳回一'false'數值到先前的方法訊框,其為該finalize()方法之執行方法訊框。在此傳回作業之後,該finalize()方法訊框之執行然後重新開始,如在步驟中附錄C3之碼序列中所指出。
其將可瞭解到該修正的碼在具有複數部電腦或運算機器之一分散式運算環境中允許最終化例式或其它清除作業之協調的作業,所以關於在該複數部機器M1...Mn上未修正的碼或程序之作業的問題(例如像是錯誤、不成熟、多重最終化、或重新最終作業)在當應用該修正的碼或程序時並不會發生。
其可觀察到附錄C2及表XVII中的碼為另一種選擇,但比附錄C3中的碼為較差的形式。基本上其功能上同等於附錄C3中的碼及方法。
由第15圖可看出,對於第8圖之一般性配置之修正提供了機器M1,M2...Mn皆如同以前,並在所有機器M1,M2...Mn上同時或同步地執行相同的應用碼50(或許多碼)。但是,先前的配置由一伺服器機器X的供應所修正,其方便地能夠供應管家函數,例如且特別是結構、資產及資源之清除。這種伺服器機器X可為一低價值商用電腦,例如PC,因為其運算負擔較低。如第15圖中虛線所示,兩部伺服器機器X及X+1可以為了冗餘的目的來提供,以增加該系統之整體可靠度。當提供這兩種伺服器機器X及X+1時,它們較佳地是操作成一不會失效環境中的冗餘機器。
其不需要提供一伺服器機器X,因為其運算負擔可以分散到機器M1,M2...Mn上。另外,由一部機器所操作的一資料庫(在一主控者/受控者種類作業中)可以用於管家功能。
第16圖所示為要遵循的一較佳泛用程序。在進行載入161之後,要執行的該等指令被視為在序列中,且所有清除例式被偵測成如步驟162中所示。在該JAVA語言中,這些為該等最終化例式或最終化方法(如finalize())。其它語言使用不同的術語。
當偵測到一清除例式時,其在步驟163中修正,藉以在橫跨該複數部機器M1,M2...Mn之間執行一致性、協調及調和的清除或最終化,其基本上藉由***另外的指令到該清除例式中,用以例如決定如果含有此最終化例式之物件(或類別或其它資產)被標示為橫跨所有其它機器上所有類似同等本地物件可最終化,且如果是的話,即藉由重新開始執行該最終化例式來執行最終化,或如果不是的話,則中止該最終化例式之執行,或延遲或暫停該最終化例式之執行,直到所有其它機器已經標示了它們類似同等本地物件為可最終化。另外,該等修正的指令可被***在該例式之前。一旦該修正已經完成,該載入程序由載入該修正的應用碼來取代該未修正的應用碼以繼續,如步驟164中所示。同時,該最終化例式僅要執行一次,且較佳地是僅由一部機器來代表所有機器M1...Mn,其對應於由所有機器M1...Mn來決定該特定物件為可最終化。
第17圖所示為一修正的特定形式。首先,該等結構、資產或資源(在JAVA術語中的類別或物件)50A,50X...50Y,其為被清除的可能候選者,其被配置一名稱或標籤(例如一通用名稱或標籤),或已經被配置一通用名稱或標籤,其可被用來識別相對應的類似同等本地結構、資產或資源(例如JAVA中的類別及物件)共同在每部機器M1,M2...Mn上,如步驟172所示。此較佳地是當該等類別或物件原始被初始化時即發生。此最為方便地是透過由伺服器機器X所維護的一表格來完成。此表格亦包括該類別或物件(或其它資產)的「清除狀態」。其將可瞭解到此表格或其它資料結構僅可儲存該清除狀態,或其亦可儲存其它狀態或資訊。在一具體實施例中,此表格亦包括一計數器,其儲存了識別出已經標示要刪除的此特殊物件、類別或其它資產的機器數目(並視需要有該等機器之識別,雖然其並不需要)。在一具體實施例中,該計數值會增加,直到該計數值等於機器的數目。因此,整個機器資產刪除計數值小於(n-1)時,其中n為Mn中機器的總數,其代表了該物件、類別或其它資產做為一網路(或機器群集)整體之「不要清除」狀態,因為小於n-1之機器資產刪除計數代表一或多部機器尚未標示它們類似的同等本地物件(或類別或其它資產)成為最終化,且該物件不能被清除,因勿會造成不想要或其它異常的行為。不同的敘述中,且藉由範例(但非限制),如果有六部機器且該資產刪除計數小於五,則其代表並非所有其它機器已經嘗試來最終化此物件(即並未標示此物件為可最終化),且因此該物件不能被最終化。但是如果該資產刪除計數為五,則其代表僅有一部機器尚未嘗試最終化此物件(即標示此物件為可最終化),因此該最後尚未標示該物件為可最終化之機器必須為嘗試來最終化該物件的目前機器(即標示該物件為可最終化,且因此造成該最終化表格做為在所有其它機器上此物件的最終化狀態)。在六部機器之組態中,該n-1=5之計數值代表五部機器必須先前已經標示該物件為刪除,且要標示此物件為刪除的第六部機器為實際上執行該完整最終化例式之機器。
如在第17圖中所示,如果該通用名稱或識別項在所有其它機器上(即除了提出要進行該清除或刪除例式之外的所有機器)並未標示為清除或刪除或其它最終化,則此代表該物件或類別(或其它資產)所提出的清除或最終化例式必須在其初始化之前被中止、停止、暫緩、暫停、延遲、或取消,或如果已經初始化,則到其完成時,如果其已經開始執行,因為該物件或類別仍為一或多部機器M1,M2...Mn所需要,如步驟175所示。
在一具體實施例中,該清除或最終化例式被停止初始化或開始執行;但是,在一些實施中,其很難或實際上不可能來停止該清除或最終化例式做初始化或開始執行。因此,在另一具體實施例中,已經開始之最終化例式的執行被中止,使得其不會完成或並無法以其正常的方式完成。此另外的中止可被瞭解為包括一實際中斷、或一暫緩、或一延遲、或暫停一已經開始執行之最終化例式之執行(不論在完成之前的執行階段),因此要保證該最終化例式並未得到機會來執行,以完成該物件(或類別或其它資產)之清除,且因此該物件(或類別或其它資產)維持「未清除」(即「並未最終化」或「未刪除」)。
但是或另外,如果在在該複數部機器M1,M2...Mn上每一部的複數個類似同等本地物件之通用名稱或其它唯一編號或識別項被標示為在所有其它機器上為刪除,此代表沒有其它機器需要對應於該通用名稱或其它唯一編號或識別項之類別或物件(或其它資產)。由於清除例式及作業,或視需要的慣用或習用正常清除例式及作業,在步驟176中所指明者即可並必須被執行。
第18圖所示為提出要執行一清除例式的機器(M1,M2...Mn之一)對於該伺服器機器X所做的查詢。此提出機器之作業被暫時中斷,如步驟181及182中所示,並對應於第17圖之步驟173。在步驟181中,該提出機器傳送一查詢訊息到機器X,以要求該物件(或類別或其它資產)的清除或最終化狀態要被清除。接下來,該提出機器等待來自對應於在步驟181中該提出機器所傳送之查詢訊息之機器X的一答覆,如步驟182所示。
第25圖所示為回應於第18圖之步驟181之這種最終化或清除狀態查詢而由機器X所進行的活動。該最終或清除狀態之決定如步驟192所示,其可決定如果對應於通用名稱之清除狀態要求的物件(或類別或其它資產),即在步驟191(191A)中所接收者,即標示為除了啟始步驟191之清除狀態要求的查詢機器181之外的所有其它機器皆為刪除。在本文件中所使用的單一術語物件或類別(或在步驟191(192A)或其它圖面中所使用的資產或資源的同等術語)皆可瞭解為包含對應於在該複數部機器M1,M2,...Mn中每一部上相同通用名稱的所有類似同等物件(或類別、或資產或資源)。如果該步驟193(193A)之決定為判定該通用命名的資源並未標示("No")為在(n-1)機器上為刪除(即在別處使用),則傳送對於該效應的回應到該查詢機器194(194A),但該「標示為刪除」之計數器則會增加1,如步驟197(197A)中所示。類似地,如果對此決定之答案被標示為("Yes"),其代表該通用命名的資源即對除了該等待查詢機器182之外的所有其它機器為刪除,則傳送一對應回覆到該等待查詢機器182,其係來自啟始步驟191之清除狀態要求者,如步驟195(195A)所示。然後該等待查詢機器182即能夠依此回應,例如像是藉由:(i)中止(或暫停、或延遲)最終化例式之執行,當來自步驟182之機器X的回覆代表對應於提出要在步驟172中被最終化的該物件之通用名稱之複數部機器M1,M2,...Mn上該等類似同等本地物件仍可在別處使用(即除了提出要進行最終化的機器之外的所有其它機器上並未標示為刪除);或(ii)藉由繼續(或重新開始、或開始)執行該最終化例式,當來自步驟182之機器X的回覆指出代表對應於提出要在步驟172中被最終化的該物件之通用名稱之複數部機器M1,M2,...Mn上該等類似同等本地物件並未在別處使用(即對於除了提出進行最終化的機器之外的所有其它機器標示為刪除)。如第25圖中虛線所示,較佳地是除了步驟195中所示之"yes"回應之外,在機器X上所儲存或維持的該共用表格或清除的狀態即被更新,所以該通用命名的資產之狀態即被改變為「清除」,如步驟196所示。
請參考所附的附錄C,其中:附錄C1為來自一未修正最終化例式的一典型碼段落,附錄C2為關於一修正的最終化例式之同等者,而附錄C3為關於一修正的最終化例式之另一同等者。
附錄C1及C2/C3在表XVI及XVII/XVIII中重覆者分別為一最終化例式之先前(預修正或未修正碼)及之後(或後修正或修正的碼)摘錄。加入到該方法之修正過的碼以粗體文字來強調。在附錄C1之原始碼範例中,在此物件的最終化(即刪除)的事件中該最終化方法印出"Deleted..."到該電腦操縱台。因此,若沒有管理在一分散式環境中的物件最終化,每部機器將重新最終化相同的物件,因此對於一單一通用命名的調和複數個類似同等物件會執行不止一次的最終化方法。清楚地是此並非一單一應用程式碼例證的程式師或使用者所預期要發生的。
所以,藉由DRT的好處,該應用碼50被修正成其由改變該清除、刪除、或最終化例式或方法來載入到該機器中。其將可瞭解到該術語最終化基本上係用於存在於此說明之立案日期時相對於該JAVA虛擬機器規格的JAVA語言之內文中。因此,最終化以更為一般性的瞭解即代表物件及/或類別清除或刪除或再造或回收或任何同等形式的物件、類別、資產或資源清除。該術語最終化因此必須用於此廣義的表示,除非另有限制。所做的改變(以粗體強調)為該最終化方法所執行的該等初始指令。這些加入的指令檢查是否此特定物件為要被標示為可最終化的該複數部機器M1,M2...Mn上該複數個類似同等物件之最後剩下的物件,藉由呼叫一例式來決定要被最終化之物件的清除狀態,例如"isLastReference()"程序或DRT 71方法,其執行了第17圖之步驟172-176,其中尋求對於該特定物件之清除狀態的決定,且其決定了對應於是否在正在執行該決定程序之此特定機器上的特定物件的一真結果或一假結果為該等複數部機器M1,M2...Mn之最後一部,其每個具有一類似同等網點物件之一來要求最終化。回想一網點物件代表了在該等機器中不同者之上一類似同等物件,所以例如在具有八部機器的組態中,將會有八個網點物件(即在八部機器中每一部上有八個類似同等物件)。
DRT 71之最終化決定程序或方法"isLastReference()"可視需要採用一引數,其可代表此物件的一唯一識別項(參見附錄C3及表XVIII)。例如,正被考慮最終化之物件的名稱,被質疑要最終化之物件的一參照,或是代表橫跨所有機器(或節點)之此物件要被用於決定此物件或類別或其它資產的最終化狀態的一唯一編號或識別。依此方式,該DRT可以同時支援多個物件(或類別或資產)之最終化,而不會混淆,因為該多重物件已經或尚未最終化者,已使用每個物件之唯一識別項來考慮在稍早參閱的最終化表格中的正確記錄。
該DRT 71可有數種可能的方法來決定該物件之最終化狀態。較佳地是,它(該要求機器)可以依序要求每個其它要求的機器(例如藉由使用一電腦通信網路來在該要求機器及該被要求機器之間交換查詢及回應訊息),如果它們的要求機器之類似同等物件已經被標示為最終化,且如果任何要求的機器回覆為假,即代表它們的類似同等物件並未被標示為最終化,則傳回一假結果,其由該isLastReference()方法傳回,代表該本地物件不需要被最終化,否則即傳回一真結果,由該isLastReference()方法傳回,代表該本地物件必須被最終化。當然對於真或假結果之不同邏輯方案另可用相同的效果來實施。另外,在該本地機器上之DRT 71可考慮一共享的記錄表(可能在一獨立機器(如機器X),或在每部本地機器上一調和共享的記錄表,及被更新來維持實質上相同,或在一資料庫中),以決定是否在該複數個物件中每一個已經被標示為除了該目前要求機器之外的所有要求的機器皆為最終化。
如果該DRT 71之"isLastReference()"方法傳回真,則此代表此物件已經對在該虛擬或分散式運算環境中所有其它機器(即該複數部機器M1...Mn)為最終化,因此,該最終化方法之執行係要進行成考慮到在該複數部機器M1,M2...Mn上最後剩下的類似同等物件要被標示或宣告為可最終化。
另一方面,如果該DRT 71之"isLastReference()"方法傳回假,則此代表該複數個類似同等物件尚未對該分散式環境中所有其它機器標示為最終化,如物件之最終化狀態的機器X上的共享記錄表中所記錄者。在此例中,該最終化方法並不要被執行(或另外重新開始或繼續),因為其將可能無效化在那些機器上的物件,其係要繼續使用它們類似同等物件,且尚未標示它們的類似同等物件為最終化。因此,當DRT傳回假時,在該最終化方法開始時***的四個指令可防止執行該最終化方法之剩餘的碼,其藉由透過使用一傳回指令來中止執行該最終化方法,然後中止此物件的Java虛擬機器之最終化作業。
給定測試的基本觀念為決定如果一最終化(像是一刪除或清除)已預備要在一類別、物件或其它資產上進行;且如果預備進行該最終化,且如果未預備好,則不會進行最終化,即有數種不同方法或具體實施例,其中可以實施此最終化觀念、方法及程序。
在第一具體實施例中,一特定機器,如機器M2,載入該資產(例如類別或物件),其包括一修正它的清除例式,然後將修正物件(或類別或資產)載入到每一部其它的機器上M1,M3,...Mn(其可依序或同時,或根據任何其它順序、例式或程序)。請注意到對應於該應用碼中僅一個物件可以有一或複數個例式,或對應於在該應用碼中的複數個物件可有複數個例式。請注意到在一具體實施例中,被載入的該清除例式為二元化可執行物件碼。另外,被載入的該清除例式為可執行的中間碼。
在一種配置中,其可使用術語「主控者/受控者」(或主要/次級),每部受控(或次級)機器M1,M3,...Mn載入該修正的物件(或類別),並包含由該主控(或主要)機器(例如機器M2,或某個其它機器,如第15圖中之機器X)在該電腦通信網路或其它通信鏈結上傳送給它的新修正的記憶體操縱作業。在對於此「主控者/受控者」或「主要/次級」配置的些微變化中,該電腦通信網路可由一共用的儲存裝置所取代,例如一共用的檔案系統、或一共用的文件/檔案儲存區,例如一共用的資料庫。
請注意到在每部機器或電腦上執行的修正不需要且經常不會是相同或類似。其所需要的是它們係以足夠類似的方式被修正,而其係根據此處所述之創新原理,該複數部機器之每一步對於其它機器為一致性且調和性地完成此處所述的作業及目的。再者,在此處所提供之說明之下將可瞭解到有大量的方法可以實施修正,例如可以根據該特定硬體、架構、作業系統、應用程式碼、或類似者或其它因素而定。其亦可瞭解到本發明之具體實施例可以在一作業系統內、或在任何作業系統之外或不具有其好處,在該虛擬機器內,在一EPROM內,在一軟體、韌體,或是這些的任何組合當中來實施。
在此「主控者/受控者」或「主要/次級」配置中另一個變化中,機器M2載入該資產(例如類別或物件),包含了在機器M2上未修正形式的一清除例式,然後(例如M2或每部本地化機器)刪除該未修正的清除例式,其已經存在於該機器上,其係整體或部份地來自該資產(例如類別或物件),並藉由一電腦通信網路載入該資產的修正碼,其利用在其它機器上新修正或刪除的清除例式。因此在此狀況下,在該修正並非該資產清除例式的一轉換、測試、轉譯或編譯時,而是在所有機器中除了一部之外之上刪除該初始化例式。在一具體實施例中,該最終化或清除例式之實際碼區塊在所有機器中除了一部之外皆被刪除,且因此最後機器為可以執行該最終化例式之唯一機器,因為所有其它機器已經刪除了該最終化例式。此方法的好處為在執行了相同最終化例式的多重機器之間不會產生衝突,因為僅有一部機器具有該例式。
整個刪除該清除例式之處理可以由該「主控」機器(例如機器M2或某個其它機器,例如第15圖之機器X)或另由每個其它機器M1,M3,...,Mn在收到該未修正資產時來執行。此「主控者/受控者」或「主要/次級」配置的額外變化係要使用一共享的儲存裝置,例如一共享的檔案系統,或一共享的文件/檔案儲藏處,例如一共享的資料庫,用於在機器M1,M2,...,Mn及選擇性第15圖之機器X之間交換該資產、類別或物件的碼(包括例如該修正的碼)。
在又另外的具體實施例中,每部機器M1,...,Mn接收該未修正的資產(例如類別或物件),其中包含有一或多個最終化或清除例式,但修正該例式,然後載入包含有現在修正的例式之資產(例如類別或物件)。雖然一種機器(例如該主控或主要機器)可以顧客化或執行一不同的修正到傳送給每部機器之最終化或清除例式,此具體實施例更可立即使得由每部機器所進行之修正略微不同,並基於其特定的機器架構、硬體、處理器、記憶體、組態、作業系統或其它因素來改進、顧客化及/或最佳化,然而仍類似、調和並與其它機器一致於所有其它類似的修正及特性,其不需要一定類似或相同。
在另一配置中,一特定機器(如M1)載入該未修正的資產(例如類別或物件),其包括一或多個最終化或清除例式,且所有其它機器M2,M3,...,Mn執行一修正或刪除該資產的清除例式(例如類別或物件),並載入該修正的版本。
在所述之所有具體實施例中,供應或傳送該資產碼(例如類別碼或物件碼)給該等機器M1,...Mn者,且視需要包含第15圖的一機器X,其可分支、分散或傳送於不同機器之任何組合或排列之間;例如藉由提供直接機器對機器通信(例如直接由M2供應每部M1,M3,M4等),或藉由提供或使用一串接或序列性通信(例如M2供應M1,其然後供應M3,然後供應M4,依此類推),或是該直接及串接及/或序列性的組合。
在又另一種配置中,該等機器M1到Mn可以傳送一些或所有載入要求到一額外的機器X(例如參見第15圖之具體實施例),其可執行對該應用碼50之修正(例如包含資產、及/或類別、及/或物件),包括最終化或清除例式,其透過上述任何一種方法,並傳回該修正的應用程式碼,其包括對於每部機器M1到Mn之現在修正的最終化或清除例式,且這些機器依序載入該修正的應用程式碼,其包括本地修正的例式。在此配置中,機器M1到Mn傳送所有載入要求到機器X,其傳回一修正的應用程式碼50到每部機器,其包括修正的最終化或清除例式。由機器X所執行的該等修正可包括本發明之範圍所涵蓋的任何修正。此配置在應用到其它機器之前當然可應用到此處所述的某些機器及其它配置。
在運算技術中的專業人士將可知道多種可能的技術,其可用於修正電腦碼,其包括但不限於測試、程式轉換、轉譯、或編譯手段。
一種這樣的技術係對該應用碼進行修正,而不需要該應用碼之語言的一先前或後續改變。另一種這樣的技術係要轉換該原始碼(例如JAVA語言原始碼)成為一中介表示(或中介碼語言或虛擬碼),例如JAVA位元組碼。一旦此轉換發生之後,對該位元組碼做修正,然後可倒轉該轉換。此提供了修正的JAVA碼所需要的結果。
另一種可能的技術為轉換該應用程式為機器碼,其可直接由原始碼、或透過前述的中介語言、或透過某些其它中介手段。然後該機器碼在被載入及執行之前被修正。另一種這樣的技術為轉換該原始碼為一中介代表,因此被修正及後續被轉換成機器碼。
本發明包含所有這些修正程序,以及兩個、三個或甚至更多這種程序的組合。
同步化
請再次回到第14圖,其所示為一單一先前技術電腦操作為一JAVA虛擬機器之架構圖。依此方法,一機器(由多家製造商中任何一家製造,並具有在多種不同語言中任何一種操作的一作業系統),其可在該應用程式碼50之特定語言中操作,在此例中為JAVA語言。也就是說,一JAVA虛擬機器72能夠操作在JAVA語言中的應用碼50,並利用無關於該機器製造商及該機器的內部細節之JAVA架構。
當實施在一非JAVA語言或應用碼環境中,該泛用化平台、及/或虛擬機器、及/或機器、及/或執行時間系統,皆能夠操作在該平台的語言中的應用碼50(可能包括例如(但不限於)任何一種或多種的原始碼語言、中介碼語言、物件碼語言、機器碼語言及任何其它碼語言),及/或虛擬機器、及/或機器、及/或執行時間系統環境,並利用該平台、及/或虛擬機器、及/或機器、及/或執行時間系統、及/或語言架構,而無關於該機器製造商及該機器的內部細節。其將亦可在此處所提供的說明中瞭解到該平台及/或執行時間系統可包括虛擬機器及非虛擬機器軟體及/或韌體架構,以及硬體及直接硬體編碼應用及實施。
再者,第14圖之單一機器(非複數部連接或耦合的機器),或一更為一般性虛擬機器或摘要機器環境,例如像是(但不限於)一物件導向的虛擬機器,其能夠立即保證指定物件50X-50Z之多種不同及可能同步使用不會衝突或造成不想要的互動,當藉由使用互斥(如"mutex")運算子或作業(包含例如鎖定、信號、監視、阻障及類似者),例如像是在JAVA語言寫成的一電腦程式中由該程式師使用一同步化例式。因為在此範例中每個物件係單獨且僅在本地存在(此為在執行發生時該機器內的本地化),第14圖中在此單一機器內執行之單一JAVA虛擬機器72能夠保證一物件(或數個物件)可適當地被同步化,如由至少在此專利說明書的立案日期存在的JAVA虛擬機器及語言規格所定義,當指定要由該應用程式(或程式師)進行時,且因此要被同步化之物件或多個物件僅立即或同時由可能多個執行部份中一執行部份及該可執行應用碼50之可能同步執行部份,例如像是可能同步執行中的執行緒或處理。如果該可執行應用碼50之另一個執行部份及可能同步執行部份(例如像是但不限於一可能同步執行之執行緒或處理)想要專門使用相同的物件,而該物件為由一第一執行部份(如一第一執行緒或處理)的一互斥運算的主題,例如當第14圖之一多重部份處理機器的一第二執行部份(如一第二執行緒或處理)嘗試要在已經由一第一執行部份同步化的一相同物件上同步化,然後可能的衝突由該JAVA虛擬機器72解決,使得該第二及額外執行部份及可能同步執行部份或該應用程式50之部份必須等到該第一執行部份已經完成其同步化例式或其它互斥運算的執行。其可瞭解到在一習用狀況中,該應用程式或程式碼之一第二或多重執行部份(即一第二或多重執行緒)可以想要使用第14圖之多重執行緒處理機器中相同的物件。
對於一更為一般性的虛擬機器或摘要機器環境的組合,且對於目前及未來的電腦及/或運算機器及/或資訊家電或處理系統,且其可不利用或不需要利用到類別及/或物件,本發明之結構、方法及電腦程式及電腦程式產品仍將可應用。不會利用類別及/或物件之電腦及/或運算機器之範例包括例如由Intel公司及其它公司所製造的x86電腦架構,由Sun Microsystems公司及其它公司所製造的SPARC電腦架構,及由IBM公司及其它公司所製造的PowerPC電腦架構,及由Apple電腦公司及其它公司所製造的個人電腦產品。對於這些種類的電腦、運算機器、資訊家電,及並未利用類別或物件觀念而在其上實施的虛擬機器或虛擬運算環境,例如其可被一般化來包括基本資料型別(例如整數資料型別、浮點資料型別、長整數資料型別、雙重資料型別、字串資料型別、符號資料型別及布林資料型別)、結構化資料型別(例如陣列及記錄)衍生的型別,或其它程序性語言的其它碼或資料結構、或其它語言及環境,例如函數、指標、組件、模組、結構、參照及集合。
一類似程序應用了類別50A之適當修正(即具有適當或必要的變更)。特別是,當在一單一機器上使用JAVA語言及架構撰寫或產生一程式時,該電腦程式師(或如果當可應用時,一自動化或非自動化電腦程式產生器或產生手段),不僅需要使用一同步化例式,藉以提供避免衝突或不想要的互動。因此,一單一JAVA虛擬機器可追跡該等類別及物件(或其它資產)的獨特使用,並避免相對應問題(例如衝突、競賽狀況、不想要的互動、或其它由於關於事件相關時序的非預期性關鍵相依性造成的異常行為),為一不唐突方法中所需要。藉此獨特使用的唯一一個物件或類別之處理即稱之為JAVA語言中的同步化。在JAVA語言中,同步化通常可以用三種方式或手段中的一種來作業或實施。第一種方法或手段為透過使用一同步化方法描述,其係包含在由JAVA語言所寫成的一應用程式之原始碼。第二種方法或手段為包含了JAVA虛擬機器之一編譯過應用程式的方法描述器中一「同步化描述器」。而用於執行同步化之第三種方法或手段係藉由使用該JAVA虛擬機器之該指令監視進入(如"monitorenter")及監視離開(如"monitorexit"),其分別表示一同步化例式之開始及結束,其造成取得或執行一"lock"(或其它互斥運算子或作業),且一"lock"之分別釋放或終止(或其它互斥運算子或作業),其防止一資產成為在多重及可能同步使用之間的衝突之主題(或競賽狀況、或不想要的互動、或其它由於事件的相關時序中未預期的關鍵相依性的異常行為)。例如一資產可包括一類別或一物件,以及任何其它軟體/語言/執行時間/平台/架構或機器資源。這些資源可包括例如(但不限於)軟體程式(例如像是可執行軟體、模組、次程式、次模組、應用程式介面(API)、軟體庫、動態鏈結庫)及資料(例如像是資料型別、資料結構、變數、陣列、表列、結構、集合),及記憶體位置(例如像是命名的記憶體位置、記憶體範圍、位址空間、暫存器),及輸入/輸出(I/O)埠及/或介面,或其它機器、電腦或資訊家電資源或資產。
但是,在第8圖所例示的配置中(亦在第31-33圖中),其提供複數部個別電腦或機器M1,M2,...Mn,其每個係透過一通信網路53或其它通信鏈結來互連,且每部個別的電腦或機器具有一修正子51(請參見第5圖),並由例如該分散式執行時間(DRT)71(參見第8圖)所釋放,並載入有一共用應用碼50。該術語共用應用程式係要理解為代表一應用程式或應用程式碼,其寫成在單一機器上作業,並載入在該複數部電腦或機器M1,M2...Mn上整體或部份地執行,或視需要在該複數部電腦或機器M1,M2...Mn之某個子集合中每一個之上來執行。但有些不同地是,有一種共用應用程式,以應用碼50所代表,且此單一複本或可能是複數個相同複本係被修正來產生該應用程式或程式碼的一修正複本或版本,每個複本或例證係預備在該複數部機器上執行。在它們被修正之後,如果它們執行類似的作業,並彼此一致性及調和性地操作,即視為是共用。其將可瞭解到,實施本發明之特徵的複數部電腦、機器、資訊家電或類似者,可視需要連接或耦合到並未實施本發明之特徵的其它電腦、機器、資訊家電或類似者。
在一些具體實施例中,部份或所有的該複數部個別電腦或機器可以包含在單一外殼或機殼內(例如所謂刀鋒伺服器,由Hewlett-Packard Development公司、Intel公司、IBM公司及其它所製造),或是實施在一單一印刷電路板上,或甚至在一單一晶片或晶片組內。
基本上該修正子51或DRT 71可保證當在一或多部機器上執行之修正過的應用程式50之一部份(例如一執行緒或處理)專門地利用(例如藉由一同步化例式或類似或同等的相互排除運算子或作業)一特定的本地資產,例如一物件50X-50Z或類別50A,在機器M2...Mn上沒有其它不同及可能同步地執行部份獨特地立刻或同時間利用對應於在其本地記憶體中類似的相等對應資產。
其將可瞭解到在此處的說明之下,該修正子51及該分散式執行時間71會有另外的實施。例如,該修正子51可以實施該分散式執行時間71之一個組件或在其內,因此該DRT 71可以實施該修正子51之功能及作業。另外,該修正子51之功能及作業可以在用於實施該DRT 71之結構、軟體、韌體或其它手段之外實施。在一具體實施例中,該修正子51及DRT 71係實施或寫入在電腦程式碼的單一段落中,而可提供該DRT及修正子之功能。因此該修正子功能及結構可能包含在該DRT中,並視為一選擇性組件。在如何實施之外,該修正子功能及結構係負責修正該應用碼程式之可執行碼,且該分散式執行時間功能及結構係負責實施該等電腦或機器之間的通信。在一具體實施例中的通信功能係透過在每部機器上之DRT的電腦程式碼內的一中間協定層來實施。例如該DRT可實施在該JAVA語言中的一通信堆疊,並使用該傳輸控制協定/網際網路協定(TCP/IP)來提供該等機器之間的通信或對話。實際上這些功能或作業是如何實施或分割在結構性及/或程序性元素之間,或是在本發明之電腦程式碼或資料結構之間,皆比它們所提供者要來得不重要。
因此其將可在此處所提供說明之下瞭解到本發明另包括實施執行緒安全的任何手段,不論是否其透過使用鎖定(鎖定/解鎖)、同步化、監視器、SEMPHAFORES,互斥鎖,或其它機制。
其將可瞭解到同步化代表或指明一資產或資源之「獨特使用」或「互斥」。用於實施單一電腦或機器之習用結構及方法已經發展出一些方法來在這種單一電腦或機器組態上進行同步化。但是,這些習用結構及方法並未提供在複數部電腦、機器或資訊家電之間同步化的解決方案。
特別是,當一特定機器(例如像是機器M3)獨特地使用一物件或類別(或任何其它資產或資源),另一部機器(例如像是機器M5)亦可由該碼所指示,其係執行來獨特地同時或一重疊的時段內使用對應於機器M3上該類似同等物件或類別之本地類似同等物件或類別。因此,如果在每部機器M3及M5上相同相對應本地類似同等物件或類別係要由兩部機器皆獨特使用時,則該物件及應用整體的行為並未定義,意即當明確地由該電腦程式(程式師)指定時而缺少一物件(或類別)之適當的獨特使用時,有可能造成在機器M5及M3上由於事件的相對時序之非預期相依性造成的衝突、不想要的互動、異常行為,或類似同等物件之間的永久不一致性。因此將無法達成在每一部該等複數部機器M1,M2...Mn上相同應用程式碼之同步及協調的作業所需要之複數部機器之間同步化例式(或其它互斥運算)要達到或提供一致性、協調及調和作業的目的。
為了保證在機器M1,M2...Mn之間的一致性同步化,該應用碼50由尋找整個可執行應用碼50來分析或細查,藉以偵測在該應用碼50中的程式步驟(例如特定的指令或指令型態),其可定義或構成,或另外代表一同步化例式(或其它互斥運算)。在JAVA語言中,這些程式步驟例如可包含或具有開放監視輸入(如"monitorenter")指令,及一或多個關閉監視離開(如"monitorexit")指令。在一具體實施例中,一同步化例式可由執行一"monitorenter"指令開始,並以一配對的執行一"monitorexit"指令來結束。
此該應用碼50之分析或細查可在載入該應用程式碼50之前、或在該應用程式碼50載入程序期間發生,或甚至在該應用程式碼50載入程序之後發生。其可類似於一安裝、程式轉換、轉譯、或編譯程序,其中該應用碼可用額外的指令來實施,及/或另可由意義保留程式操縱所修正,即/或選擇性地由一輸入碼語言轉譯到一不同的碼語言(例如像是由原始碼語言或中介碼語言轉譯到物件碼語言或機器碼語言),並瞭解到該術語編譯通常或習用上包含了碼或語言中的改變,例如由原始碼或物件碼,或由一種語言到另一種語言。但是,在本例中該術語「編譯」(及其文法上同等者)並沒有那麼多限制,且亦可在相同碼或語言內包括或含有修正。例如,該編譯及其同等者可瞭解為同時包含正常編譯(例如像是藉由例示而非限制,由原始碼到物件碼),且由原始碼編譯成原始碼,以及由物件碼編譯到物件碼,以及其中任何改變的組合。其亦可包括所謂的「中介語言」,其形式為「虛擬物件碼」。
藉由例示且並非限制,在一具體實施例中,該應用碼50之分析或細查可在載入該應用程式碼期間發生,例如藉由該作業系統由該硬碟或其它儲存裝置或來源讀取該應用碼,並將其複製到記憶體,並預備開始執行該應用程式碼。在另一具體實施例中,於JAVA虛擬機器中,該分析或細查可在該java.lang.ClassLoader loadClass方法(如java.lang.ClassLoader.loadClass())之類別載入程序期間發生。
另外,該應用碼50之分析或細查可以甚至在該應用程式碼載入程序之後發生,例如在該作業系統已經載入該應用碼到記憶體之後,或選擇性地甚至在該應用程式碼之相關的對應部份已經開始或進行之後,例如像是在該JAVA虛擬機器已經載入該應用碼到該虛擬機器當中之後,其係透過"java.lang.ClassLoader.loadClass()"方法,且選擇性地進行執行。
請參考所附的附錄D,其中:附錄D1為在修正之前一同步化例式的一典型碼段落(如一範例性未修正同步化例式),而附錄D2為在修正之後相同的同步化例式(例如一範例性修正的同步化例式)。這些碼區段僅為範例性,並可識別一軟體碼手段,用以執行在一範例性語言中的修正。其將可瞭解到可以使用其它軟體/韌體或電腦程式碼來完成相同或類似的功能或作業,其皆不背離本發明。
附錄D1及D2(亦在以下的表XX及表XXI中部份重現)為範例性碼表列,其提供應用程式50之一初始化例式的該習用或未修正的電腦程式軟體碼(例如可用於單一機器或電腦環境中),及相同初始化例式的一後修正摘錄,例如可用於本發明之具有多重機器的具體實施例中。加入到該同步化方法之修正過的碼以粗體文字來強調。本發明之其它具體實施例可提供要被加入、修改、移除、移動或重新組織、或另外改變的碼、或敘述、或指令。
其要注意到在該附錄中的編譯過的碼與在該表格中重複的部份採用的形式為檔案"example.java"之原始碼,其係包括在附錄D3中。列在該附錄及表格中的解碼編譯過的碼係採自該檔案"EXAMPLE.JAVA"中的編譯過原始碼。在附錄D1及表XX之程序中,步驟001之程序名稱"Method void run()"為編譯過應用碼之"example.java"之執行方法之顯示的解碼輸出的名稱。該名稱"Method void run()"為任選的,其對此範例選擇出來代表包含一同步化作業之一典型JAVA方法。該方法整體負責用一執行緒安全的方式透過使用一同步化敘述來增加一記憶體位置(「計數器」),並依序說明達到此目的之步驟。
首先(步驟002),該Java虛擬機器指令"getstatic #2<Field java.lang.Object LOCK>"使得該Java虛擬機器取得儲存在含有此範例run()方法之應用程式的classfile結構的第二索引中由CONSTANT_Fieldref_info constant-pool項目所指出的該靜態欄位之物件參照,並造成在該欄位中對該物件之參照(以下稱之為LOCK)被放置(推入)在該目前執行中執行緒之目前方法訊框的堆疊上。
接著(步驟003),該Java虛擬機器指令"dup"使得該Java虛擬機器來複製該堆疊之最上方項目,並推入該複製的項目到該目前方法訊框之堆疊的最上方位置,並造成在該堆疊的最上方之LOCK物件之參照被複製,並推入到該堆疊上。
接著(步驟004),該Java虛擬機器指令"astore_1"使得該Java虛擬機器移除該目前方法訊框之堆疊的最上方項目,並儲存該項目到該目前方法訊框之索引1的本地變數陣列中,並造成該堆疊的最上方LOCK物件參照被儲存在該本地變數索引1中。
然後(步驟005),該Java虛擬機器指令"monitorenter"使得該Java虛擬機器推出該最上方物件離開該目前方法訊框的堆疊,並取得在該推出的物件上之一排除鎖定,並造成一鎖定在該LOCK物件上被取得。
該Java虛擬機器指令"getstatic #3<Field int counter>"(步驟006)使得該Java虛擬機器來取得含有此範例run()方法之應用程式的classfile結構之第三索引中由CONSTANT_Fieldref_info constant-pool項目所指出的該靜態欄位之整數值,並造成該欄位之整數值被放置(推入)在該目前執行中執行緒的目前方法訊框之堆疊上。
該Java虛擬機器指令"iconst_1"(步驟007)使得該Java虛擬機器載入一整數值"1"到該目前方法訊框的堆疊上,並使得該整數值1被載入到該目前方法訊框的堆疊之最上方。
該Java虛擬機器指令"iadd"(步驟008)使得該Java虛擬機器來執行該目前方法訊框的堆疊之最上方兩個整數值之整數相加,並造成該加法作業之所得整數值被放置在該目前方法訊框之堆疊的最上方。
該Java虛擬機器指令"putstatic #3<Field int counter>"(步驟009)使得該Java虛擬機器來推出該最上方數值離開該目前方法訊框之堆疊,並儲存該數值在含有此範例run()方法之應用程式的classfile結構之第三索引中由CONSTANT_Fieldref_info constant-pool項目所指出的該靜態欄位中,並造成該目前方法訊框之堆疊的最上方整數值被儲存在名為"counter"之整數欄位中。
該Java虛擬機器指令"aload_1"(步驟010)使得該Java虛擬機器載入該項目在該目前方法訊框之索引1處的本地變數陣列中,並儲存此項目在該目前方法訊框之堆疊的最上方,並造成儲存在索引1處的本地變數陣列中的物件參照被推入到該堆疊上。
該Java虛擬機器指令"monitorexit"(步驟011)使得該Java虛擬機器推出該最上方物件離開該目前方法訊框的堆疊,並釋放在該推出的物件上的排除LOCK,並造成一鎖定在該LOCK物件上被釋放。
最後,該Java虛擬機器指令"return"(步驟012)使得該Java虛擬機器來藉由傳回控制到該先前方法訊框來停止執行此run()方法,並造成此run()方法執行的終止。
由於這些在第1圖及第2圖中習用組態的一單一機器上作業的步驟,包含該"counter"記憶體位置之增加作業的同步化敘述可保證此run()方法中不會有兩個或多個同步執行例證將會衝突,或另外造成不想要的互動,例如由於該一個"counter"記憶體位置處執行的該增加事件之相對時序之未預期的關鍵相依性的的競賽狀況或其它異常行為。如果這些步驟要在第5圖及第8圖之組態中複數部機器上進行,並具有第9,10,11,12及13圖之記憶體更新及傳遞複製手段,且同步執行該run()方法之兩個或多個例證或事件,其每個在該複數部機器M1,M2...Mn中不同的機器上,該run()方法之每個同步執行例證的互斥運算將會在該等機器之每個相對應者之上執行,而不需要那些機器之間的協調。
給定橫跨複數部機器之一致性協調的同步化作業為目的,此先前技術配置將無法執行這種橫跨該複數部機器之一致性協調的同步化作業,因為每部機器僅在本地執行同步化,並沒有任何嘗試來協調它們的本地同步化作業,其係利用在任何一部或多部其它機器上的任何其它類似同步化作業。因此這種配置將會在該等機器M1,M2,...,Mn之間的衝突或其它不想要的互動(例如競賽狀況或由於在每部機器上該"counter"增加事件的相對時序之未預期的關鍵相依性之其它異常行為)。因此本發明的目標在於克服該先前技術配置的此限制。
在表XXI(附錄D2)中的範例碼中,該碼已經被修正,所以其解決了複數部機器M1,M2,...,Mn之一致性協調的同步化作業之問題,其並未在來自表XX(附錄D1)之碼範例中被解決。在此修正的run()方法碼中,一"dup"指令被***在該"4 astore_1"及"6 monitorenter"指令之間。此使得該Java虛擬機器複製該堆疊的最上方項目,並推入該複製的項目到該目前方法訊框之堆疊的最上方位置上,並造成對於位在該堆疊的最上方處該LOCK物件之參照被複製,並推入到該堆疊上。
再者,該Java虛擬機器指令"invokestatic #23<Method void acquireLock(java.lang.Object)>"被***在該"6 monitorenter"之後及該"10 getstatic #3<Field int counter>"敘述之前,所以該Java虛擬機器推出該最上方項目離開該目前方法訊框之堆疊,並引發該"acquireLock"方法,傳送該推出的項目到該新方法訊框做為其第一引數。此改變特別明顯,因為其修正該run()方法來執行該"acquireLock"方法及相關的作業,相對應於其之前的該"monitorenter"指令。
附錄D1為附錄D3之example.java之同步化作業的解碼編譯的形式之修正之前的摘錄,其包含一啟始"monitorenter"指令及結束"monitorexit"指令。附錄D2為附錄D1之修正之後的形式,根據第26圖之步驟中附錄D6之LockLoader.java所修正。該等修正以粗體來強調。
該方法void acquireLock(java.lang.Object),附錄D4之LockClient碼之部份,及分散式執行時間系統(DRT)71之部份,其執行機器M1...Mn之間的通信作業,以協調該等機器M1...Mn之間的先前"monitorenter"同步化作業之執行。此範例的acquireLock方法通信於在第15圖之機器X上執行的附錄D5之LockServer碼,其藉由傳送一'acquire lock request"到對應於被鎖定之物件的機器X(即對應於該"monitorenter"指令的該物件),其在表XXI及附錄D2之內文中為該'LOCK'物件。請參考第29圖,機器X接收對應於該LOCK物件之'acquire lock request',並查閱一鎖定的表格來決定對應於在每部機器上該複數個類似同等物件之鎖定狀態,其在附錄D2之例子中為該複數個類似同等LOCK物件。
如果在每部機器M1...Mn上所有的該等複數個類似同等物件目前並未任何其它機器M1...Mn鎖定,則機器X將會記錄該物件為現在鎖定,並通知該鎖定之成功取得的要求機器。另外,如果一類似同等物件目前由該等機器M1...Mn中另一個所鎖定,則機器X將會加入此要求機器到等待要鎖定此複數個類似同等物件之機器佇列中,直到當機器X決定此要求機器能夠取得該鎖定為止。對應於由一要求機器之成功取得一鎖定,即產生一回覆,並傳送到該成功要求的機器通知該機器已成功取得該鎖定。在收到這種來自機器X之訊息而確認成功取得一要求的鎖定之後,該acquireLock方法及作業終止執行,並傳回控制到該先前方法訊框,其為附錄D2之內文,即為該run()方法之執行中方法訊框。直到當該要求機器接收到來自機器X的一回覆而確認成功取得該要求的鎖定時,該acquireLock方法及run()方法之作業被暫停,直到收到一確認回覆。在此傳回作業之後,該run()方法之執行即重新開始。該acquireLock方法之具體實施例的範例性原始碼即提供在附錄D4中。附錄D4亦提供額外的關於DRT 71功能之細節。
稍後,兩個敘述"dup"及"invokestatic #24<Method void releaseLock(java.lang.Object)>"被***到該碼串流中,位在該"18 aload_1"敘述之後及該"23 monitorexit"敘述之前。這兩個敘述使得該Java虛擬機器複製在該堆疊上的項目,然後引發該releaseLock方法將該堆疊的最上方項目做為該方法呼叫的一引數,並造成該run()方法之修正來執行該"releaseLock"方法及相關的作業,其相對應於以下的"monitorexit"指令,於該程序離開及傳回之前。
該方法void releaseLock(java.lang.Object),附錄D4之LockClient碼之部份,及分散式執行時間系統(DRT)71之部份,其執行機器M1...Mn之間的通信作業,以協調該等機器M1...Mn之間的之後"monitorexit"同步化作業之執行。此範例的releaseLock方法通信於在第15圖之機器X上執行的附錄D5之LockServer碼,其藉由傳送一'release lock request"到對應於未鎖定之物件的機器X(即對應於該"monitorexit"指令的該物件),其在表XXI及附錄D2之內文中為該'LOCK'物件。對應於第30圖,機器X接收對應於該LOCK物件之"release lock request",並更新該等鎖定的表格,以指明對應於該等類似同等'LOCK'物件之鎖定狀態成為現在的「未鎖定」。此外,如果有其它機器等待取得此鎖定,則機器X能夠選擇該等等待機器中的一部成為該鎖定的新擁有者,藉由更新該鎖定表格,以指定此選擇的一部等待中機器成為該新的鎖定擁有者,並通知該等等待機器中成功的一個藉由一確認回覆其已成功地鎖定該鎖定。然後該等等待機器中成功的一部即重新開始執行其同步化例式。在通知機器X鎖定釋放之後,該releaseLock方法終止執行,並傳回控制到該先前方法訊框,其在此例中為該run()方法之方法訊框。在此傳回作業之後,該run()方法之執行重新開始。
其將可瞭解到該修正的碼在具有複數部電腦或運算機器之一分散式運算環境中允許機器M1...Mn之間該同步化例式或其它互斥運算之協調的作業,所以關於在該複數部機器M1...Mn上未修正的碼或程序之作業的問題(例如像是衝突、不想要的互動、競賽狀況、或由於事件的相對時間上未預期之關鍵相依性的異常行為)在當應用該修正的碼或程序時並不會發生。
在附錄D1之未修正的碼範例中,該應用程式碼包括在一包覆同步化例式內本地記憶體(用於一計數器)中增加一記憶體位置的指令或作業。該同步化例式之目的在於保證在多重執行緒及多重處理應用及電腦系統中該計數器記憶體增加作業的執行緒安全。該術語執行緒安全或執行緒安全性代表由某種互斥而多重同步執行所重新進入或保護的碼。在本發明內文中多重執行緒的應用可以例如包括在每一部不同的機器上同步執行的操作兩個或多個執行緒之應用。因此,在包含或具有複數部機器的環境中沒有管理的協調同步化,每個執行係同步執行相同的應用程式之部份,並具有第9,10,11,12及13圖之一記憶體更新及傳遞複製手段,每部電腦或運算機器將獨立地執行同步化,藉此可能同時增加該共享的計數器,造成可能的衝突或不想要的互動,例如該等機器M1...Mn之間的競賽狀況及不調和的記憶體。其將可瞭解到雖然此具體實施例係使用一共享的計數器來說明,使用或提供這種共享的計數器或記憶體位置為選擇性,且對於本發明之同步化態樣並不需要。較佳地是該同步化例式之行為方式做為該程式化語言、執行時間系統或機器架構(或其任何組合)保證,也就是說停止該應用程式之兩個部份(例如兩個執行緒)來同步執行相同的同步化例式或相同的互斥運算或運算子。清楚地一致性、調和及協調的同步化行為即該應用程式碼50之程式師或使用者預期要發生者。
所以,藉由DRT 71的好處,該應用碼50被修正成其由改變該同步化例式來載入到該機器中。其將此處所提供的說明之下可瞭解到對每部機器所做的該等修正通常可類似到這種程度,因為它們必須較佳地是達到所有機器之間協調的同步化作業的一致性最終結果;但是,給定該發明同步化方法及相關的程序之廣義應用性,該等修正之性質通常可以改變,而不會改變所產生的效應。例如,在一簡單變化中,一或多個額外的指令或敘述可被***,例如像是一「非作業」(nop)型態指令到該應用中,其將代表所做的該等修正為技術上不同,但該修正的碼仍符合於本發明。例如本發明的具體實施例可以藉由程式轉換、轉譯、編譯的多種形式、測試或藉由其它在此處所述或本技術中已知者來實施該等改變。所做的該等改變(以粗體強調)為該同步化例式所執行的該開始或初始指令及該結束指令,且其分別對應於該同步化例式之該登錄項(開始)及離開(最後)。這些加入的指令(或修正的指令串流)用於協調在該複數部機器M1...Mn之每一部或某個子集合上執行的該修正執行方法當中多個同步執行之例證或事件之間的同步化例式之執行,其係藉由引發對應於該同步化例式之開始執行的acquireLock方法,並藉由引發對應於該同步化例式之結束執行的releaseLock方法,藉此提供在橫跨該複數部機器M1,M2,...Mn上執行之修正的應用程式碼之同時作業所需要的同步化例式之一致性協調的作業(或其它互斥運算或運算子)。此亦較佳地是提供了以一協調方式橫跨該等機器之一應用程式之作業。
該DRT 71之取得鎖定(如"acquireLock()")方法採用一個引數("(java.lang.Ojbect)"),其代表參照(或某個其它唯一識別項)到該特定本地物件,其中需要該通用鎖定(請參見附錄D2及表XXI),其係要取得橫跨在對應於該指定的本地物件之其它機器上之複數個類似同等物件的一通用鎖定。例如該唯一識別項可為該物件的名稱、對有問題之物件的一參照、或是代表橫跨所有節點之該複數個類似同等物件之唯一編號。藉由使用橫跨所有連接之機器的一通用唯一識別項來代表在該複數部機器上複數個類似同等物件,該DRT可以同時支援多個物件之同步化,而不會混淆,因為該複數個物件已經被同步化,且其不會有物件(或類別)識別項不是唯一的狀況,藉由使用每個物件的唯一識別項來查閱在該共享的同步化表格中正確的記錄。
使用此處的一通用識別項的另一個好處為可做為在每一部機器上所有類似同等本地物件之'meta-name'的形式。例如,除了必須追跡每部機器上每個類似同等本地物件之每個唯一本地名稱之外,其另可定義一通用名稱(如"globalname7787"),其中每個本地機器依序對映到一本地物件(如“globalname7787”對應到機器M1上的物件“localobject456”,而“globalname7787”對應到機器M2上的物件“localobject885”,而“globalname7787”對應到機器M3上的物件“localobject111”,依此類推)然後其較容易來簡單地稱之為「對globalname7787取得鎖定」,然後轉譯到機器1(M1)上來表示「對localobject456取得鎖定」,並轉譯到機器2(M2)上來表示「對localobject885取得鎖定」等等。
可視需要被使用的該共享同步化表格為一種表格,其它儲存手段,或任何其它資料結構可以儲存每個物件(及/或類別或其它資產)之一物件(及/或類別或其它資產)識別項及該同步化狀態(或鎖定或未鎖定狀態)。該表格或其它儲存手段用來關連一物件(及/或類別或其它資產、或複數個類似同等物件或類別或資產)到一鎖定狀態及一未鎖定狀態之鎖定或未鎖定或某個其它實體或邏輯表示的狀態。舉例而言:該表格(或所想要使用的任何其它資料結構)較佳地是可包括一命名的物件識別項,及代表是否一命名的物件(即"globalname7787")為鎖定或未鎖定之記錄。在一具體實施例中,該表格或其它儲存手段儲存了一旗標或記憶體位元,其中當該旗標或記憶體位元儲存一"0"時該物件為未鎖定,而當該旗標或記憶體位元儲存一"1"時,該物件為鎖定。很清楚地,多重位元或位元組儲存可以使用,且可以使用不同的邏輯概念或指標,其皆不背離本發明。
該DRT 71可用數種方法中的任何一種來決定該物件之同步化狀態。其可想到例如本發明可包括實施執行緒安全的任何手段,不論是否其透過使用鎖定(鎖定/解鎖)、同步化、監視器、SEMPHAFORES,互斥鎖,或其它機制。這些代表停止或限制同步執行一單一應用程式的執行中部份,藉以保證根據同步化、鎖定或類似者之規則的一致性。較佳地是,其可依序要求每部機器如果對應於要被鎖定之被尋找的該物件之它們的本地類似同等物件(或類別或其它資產或資源)目前被同步化,且如果任何機器回覆為真時,則可暫停該同步化例式之執行,並等待直到在其它機器上目前同步化的類似同等物件為未同步化,否則在本地同步化此物件,並重新開始執行該同步化例式之執行。每部機器可以依本身的方式實施同步化(或互斥運算或運算子),且此在不同機器上可以不同。因此,雖然提供了一些範例性實施細節,最終同步化(或互斥運算)要如何實施,或同步化或互斥狀態(或鎖定/未鎖定狀態)要如何精確地記錄在記憶體或其它儲存手段中,並非本發明之關鍵。藉由未同步化,我們通常代表未鎖定,或未受到一互斥運算,而藉由同步化,我們通常代表被鎖定,並受到一互斥運算。
另外,在每部本地機器上的DRT 71可以查閱一共享的記錄表(可能在一獨立機器上(例如在不同於機器M1,M2,...,Mn)之機器X上),或可查閱在該等本地機器中每一部上的一調和共享的記錄表格,或是建立在一記憶體中或其它儲存的共享資料庫,以決定是否此物件已經被標示或識別為被任何機器同步化(或「鎖定」),如果是的話,則等待直到該物件的狀態被改變為未鎖定,然後在此機器上取得該鎖定,否則藉由在該共享的鎖定表中標示該物件為鎖定(視此機器的需要)來取得該鎖定。
在該共享的記錄表被查閱的狀況中,此可視為一共享資料庫或資料結構之變化,其中每部機器具有一共享表格的一本地複本(此為一共享表格的複本),其被更新來維持該等複數部機器M1,...,Mn之調和性。
在一具體實施例中,該共享的記錄表代表可由所有機器M1,...,Mn存取的一共享表格,其可例如被定義或被儲存在一共用存取資料庫中,使得任何機器M1,...,Mn可以查閱或讀取此共享的資料庫表格中一物件的鎖定或未鎖定狀態。另一種配置為實施一共享的記錄表為一額外機器之記憶體中的一表格(我們稱之為「機器X」),其儲存了每個物件識別名稱及其鎖定狀態,並做為該中央儲存區,其可由所有其它機器M1,...,MN 查閱或決定一類似同等物件的鎖定狀態。
在任何這些不同的選擇性實施中,在該方法中一部或複數個類似同等物件被標示或識別為同步化(或鎖定)或未同步化(或未鎖定)相對並不重要,且可利用多種儲存的記憶體位元或位元組或旗標來識別該兩種可能邏輯狀態之中的一種,其為本技術中所熟知。其將可瞭解到在本具體實施例中,該同步化非常類似於鎖定,且未鎖定非常類似於未鎖定。這些相同的考量可應用於類別,亦可應用於其它資產或資源。
請考慮到DRT 71負責決定一物件(或類別、或其它資產,對應於複數個類似同等物件或類別或資產)之鎖定狀態,其在允許對應於取得該鎖定的同步化例式要進行之前被鎖定。在此處所述的範例性具體實施例中,該DRT查閱該共享的同步化記錄表,其在一具體實施例中係存在於一特殊「機器X」上,因此該DRT需要透過該網路或其它通信鏈結或路徑與此機器X通信,以進行查詢,並決定該物件(或類別、或其它資產,對應於複數個類似同等物件或類別或資產)之鎖定(或未鎖定)狀態。
如果在嘗試要執行一同步化例式或其它互斥運算的本地機器上的DRT決定了目前沒有其它機器具有此物件(即無其它機器已經同步化此物件)或複數個類似同等物件中任何其它者的一鎖定,則要在取得對應於所有其它機器上該複數個類似同等物件之此物件的鎖定,例如藉由修正尋求要被鎖定之該物件的鎖定狀態之共享表格中的相對應登錄項,或另外依序取得除了目前機器之外在所有其它機器上所有其它類似同等物件上的鎖定。請注意到此程序係要鎖定在所有其它機器M1,...,Mn上該複數個類似同等物件(或類別或資產),所以可以防止由兩部或多部機器同時或同步使用任何類似同等物件,並可使用任何可用的方法來完成此協調的鎖定。例如,不論是否機器M1指示M2來鎖定其類似同等本地物件,則指示M3鎖定其類似同等本地物件,然後指示M4等等;或如果M1指示M2鎖定其類似同等本地物件,則M2指示M3鎖定其類似同等本地物件,然後M3指示M4鎖定其類似同等本地物件,依此類推,其要想到的是在所有其它機器上該等類似同等物件之鎖定,所以可以防止兩部或多部機器同時或同步使用任何類似同等物件。僅有在當此機器已經成功地確認沒有其它機器目前已經鎖定一類似同等物件,且此機器相對應地已經鎖定其本地類似同等物件,即可開始執行該同步化例式或碼區塊。
另一方面,如果在將要執行一同步化例式的機器(如機器M1)內的DRT 71決定了另一部機器(如機器M4)已經同步化一類似同等物件,則此機器M1要延遲該同步化例式(或碼區塊)之持續的執行,直到當在機器M1上的DRT可以確認沒有其它機器(例如機器M2,M3,M4,或M5,...,Mn當中)目前正在對一相對應的類似同等本地物件執行一同步化例式,且此機器M1已經相對應地在本地同步化其類似同等物件。請注意本地同步化代表在一單一機器上先前技術的習用同步化,然而通用或協調的同步化代表在複數部機器M1...Mn中的一部之上橫跨類似同等本地物件及/或在其之間的協調之同步化。在該例中,該同步化例式(或碼區塊)不是要繼續執行,直到此機器M1可以保證沒有其它機器M2,M3,M4,...,Mn正在執行要被尋找來鎖定之本地類似同等物件之一同步化例式,因為其將可能會破壞了橫跨該等參與機器M1,M2,M3,...,Mn的物件,其係由於受到衝突或其它不想要的互動,例如競賽狀況、及由於同步化例式之同步執行所產生的類似問題。因此,當該DRT決定此物件或在另一部機器上一類似同等物件目前被「鎖定」,例如被機器M4(相對於所有其它機器),在機器M1上的DRT暫停該同步化例式之執行,其藉由暫停該取得鎖定(如acquireLock())之執行作業直到當一相對應釋放鎖定(如releaseLock())作業由該鎖定的目前擁有者(如機器M4)執行。
因此,在執行一釋放鎖定(如releaseLock())作業時,目前「擁有」或保持一鎖定(即正執行一同步化例式)之機器M4指出其同步化例式的關閉,例如藉由標示此物件成為「未鎖定」在該共享的鎖定狀態表中,或另外依序釋放在所有其它機器上取得的鎖定。此時,等待要開始執行一暫停的同步化敘述之一不同機器即可宣稱此現在釋放的鎖定之擁有權,其藉由重新開始其延遲(即延後)的"acquireLock()"作業的執行,例如藉由標示其本身為執行在該共享的同步化狀態表格中此類似同等物件的一鎖定,或另外依序取得在每部其它機器上類似同等物件之本地鎖定。其要瞭解到該取得鎖定(如"acquireLock")之重新開始的執行即要包括該取得鎖定(如"acquireLock")執行之選擇性重新開始,此時執行即暫停,以及另外選擇性的配置,其中該取得鎖定(如"acquireLock")之執行作業被重複,藉以重新要求該鎖定。再次地,這些相同的考慮亦應用於類別,更概言之為應用到任何資產或資源。
所以,根據至少一具體實施例及取得該DRT 71之作業的好處,該應用碼50被修正為藉由改變該同步化例式(包含至少一開始"acquire lock"型態指令(例如一JAVA"monitorenter"指令)及一結束"release lock"型態指令(例如一JAVA"monitorexit"指令)被載入到該機器中。"Acquire lock"型態指令進行一互斥運算的作業或執行,其通常對應於一特定資產,例如一特定記憶體位置或機器資源,並造成對應於該互斥運算之資產相對於一些或所有同時或同步使用的模式、執行或作業而鎖定。"Release lock"型態指令終止或是中斷進行一互斥運算的作業或執行,其通常對應於一特定資產,例如一特定記憶體位置或機器資源,並造成對應於該互斥運算之資產相對於一些或所有同時或同步使用的模式、執行或作業而解鎖。所做的改變(以粗體強調)為該同步化例式所執行的該等修正的指令。例如這些加入的指令檢查如果此鎖定已經被另一部機器取得。如果此鎖定尚未被另一部機器取得,則此機器之DRT通知所有其它機器此機器已經取得該指定的鎖定,藉此停止其它機器執行對應於此鎖定的同步化例式。
該DRT 71可決定並記錄類似同步物件之鎖定狀態,或其它複數部機器上相對應記憶體位置或機器或軟體資源,其可用多種方式,例如像是藉由例示但非限制:1.對應於機器M1中一同步化例式的該登錄項,機器M1之DRT個別地查閱或傳遞每部機器來確定如果此通用鎖定已經由不同於其本身的任何其它機器M2,...,Mn所取得。如果對應於此資產或物件之此通用鎖定為或已經由該等機器M2,...,Mn中另一部取得,則機器M1之DRT暫停在機器M1上同步化例式之執行,直到所有其它機器不再擁有在此資產或物件上的一通用鎖定(意即沒有其它機器不再擁有對應於此資產或物件之一通用鎖定),此時機器M1可成功地取得該通用鎖定,使得所有其它機器M2,...,Mn現在必須等待機器M1在一不同機器可以依序取得它之前釋放該通用鎖定。否則,當其決定出對應於此資產或物件之通用鎖定尚未由另一部機器M2,...,Mn取得時,該DRT繼續執行該同步化例式之執行,且使得所有其它機器M2,...,Mn現在必須等待機器M1在一不同機器可依序取得它之前來釋放該通用鎖定。
另外,2.對應於一同步化例式之登錄項,該DRT查閱一共享的記錄表格(例如一共享的資料庫、或在每部參與機器上一共享表格的一複本),其代表如果任何機器目前「擁有」此通用鎖定。如果是的話,則該DRT暫停在此機器上的同步化例式之執行,直到沒有機器擁有在一類似同等物件上一通用鎖定。否則該DRT記錄此機器在該共享的表格中(或表格,如果有多個記錄表格,如在多重機器上)成為此通用鎖定的擁有者,然後繼續執行該同步化例式。
類似地,當釋放一通用鎖定時,也就是說,當一同步化例式之執行要結束時,該DRT可以「不記錄」,改變該狀態指標,及/或用許多其它方式來重置該機器之通用鎖定狀態,例如藉由例示而非限制:1.對應於一同步化例式的離開,該DRT個別地通知每部其它機器具不再擁有該通用鎖定。
另外,2.對應於一同步化例式之離開,該DRT更新該記錄給此通用鎖定的資產或物件(例如像是複數個類似同等物件或資產)在該共享的記錄表格中,使得此機器不再記錄為擁有此通用鎖定。
另外,該DRT可提供一取得通用鎖定佇列來排列需要取得一通用鎖定之機器,例如藉由例示但非限制:1.對應於由機器M1之對一同步化例式之登錄項,如機器M1的DRT,其通知該通用鎖定之目前擁有的機器M1(如機器M4)在由該目前擁有機器釋放時將會或需要來取得該相對應通用鎖定,藉以執行一作業。該指定的機器M4,如果沒有其它等待中機器,則儲存該要求機器的(如機器M1)有興趣或要求的記錄在一表格或表列中,使得機器M4可以知道後續要釋放該相對應通用鎖定,其中記錄在該表格或表列中的機器M1正等待要取得相同的通用鎖定,其在離開了對應於由機器M4所保有的該通用鎖定之同步化例式之後,即通知在該等等待機器記錄中所指定的該等待機器(即機器M1)可以取得該通用鎖定,且因此機器M1可以進行來取得該通用鎖定,並繼續執行其本身的同步化例式。
2.對應於由機器1之一同步化例式的該登錄項,該DRT通知該通用鎖定之目前擁有者(如機器M4)一特定機器(如機器M1)將會在由該機器(即機器M4)釋放時來取得該鎖定。該機器M4在其查詢此鎖定物件之等待機器之記錄之後找到已經有一或多部其它機器(如機器M2及M7)在等待,即加入機器M1到想要取得此鎖定的物件之該機器M2及M7之表列末端,或是另外傳送來自M1之要求到該第一等待中機器(即機器M2),或任何其它等待中機器(即機器M7),然後其依序記錄機器M1在等待中機器之它們的表格或記錄中。
在上述的範例中,例如該等記錄可以保持在機器M4上,並儲存一佇列或其它有順序的或索引的機器表列,其等待要在機器M4釋放其所保有之鎖定之後來取得該鎖定。然後此表列或佇列可由M4使用或參照,所以M4可傳送該鎖定到其它機器上,其係根據該要求順序或任何其它優先性的方案。另外,該表列可以為沒有順序,且機器M4可傳送該通用鎖定到該表列或記錄中的任何機器。
3.對應於一同步化例式之登錄項,該DRT記錄其本身在一共享的記錄表格中(例如儲存在可由所有機器存取的一共享資料庫中的一表格,或實質上類似的多個獨立表格)。
再者或另外,該DRT 71可通知被佇列之其它機器來取得對應於由此機器的一同步化例式之離開的此通用鎖定,其可用以下的數種方式,例如:1.對應於一同步化例式之離開,該DRT通知該等等待中機器中的一部(例如在該等待機器之佇列中的第一部機器)該通用鎖定被釋放。
2.對應於一同步化例式之離開,該DRT通知該等待中機器中的一部(例如在該等待機器之佇列中第一部機器)該通用鎖定被釋放,且額外地提供整個機器佇列的一複本(例如等待此通用鎖定的第二機器及後續機器)。依此方式,該第二機器由該第一機器繼承了該等待機器表列,並藉此保證該等待機器之佇列的連續性,成為在該表列中依序以下的每部機器取得並後續釋放相同的通用鎖定。
在上述的細查期間,"monitorenter"及"monitorexit"指令(或方法)初始時尋找,且在找到時,***一修正碼,藉以喚起一修正的同步化例式。此修正的例式額外地取得及釋放該通用鎖定。有數種不同的模式,其中可以進行此修正及載入。
由第15圖可看出,對於第8圖之一般性配置之修正提供了機器M1,M2...Mn皆如同以前,並在所有機器M1...Mn上同時或同步地執行相同的應用碼50(或許多碼)。但是,先前的配置由一伺服器機器X的供應所修正,其方便地能夠供應管家函數,例如且特別是結構、資產及資源之同步化。這種伺服器機器X可為一低價值商用電腦,例如PC,因為其運算負擔較低。如第15圖中虛線所示,兩部伺服器機器X及X+1可以為了冗餘的目的來提供,以增加該系統之整體可靠度。當提供這兩種伺服器機器X及X+1時,它們較佳地是但可視需要操作成一不會失效環境中的冗餘機器。
其不需要提供一伺服器機器X,因為其運算負擔可以分散到機器M1,M2...Mn上。另外,由一部機器所操作的一資料庫(在一主控者/受控者種類作業中)可以用於管家功能。
第16圖所示為要遵循的一較佳泛用程序。在已經進行載入161之後,要執行的該等指令被視為在序列中,且所有同步化例式被偵測成如步驟162中所示。在該JAVA語言中,這些為"monitorenter"及"monitorexit"指令,且方法標示為在該方法描述器中同步化。其它語言使用不同的術語。
當一同步化例式被偵測162時,其在步驟163中被修正,藉以橫跨該複數部機器M1...Mn之一致性、協調、及調和的同步化作業(或其它互斥運算),基本上係藉由***其它指令到該同步化(或其它互斥)例式,以例如在在該複數部機器M1...Mn中其它一或多部上類似同等同步化或其它互斥運算協調之間的同步化例式之作業,所以沒有兩部或多部機器立即或重疊地執行一類似同等同步化或其它互斥運算。另外,該等修正指令可以***在該例式之前,例如像是在相關於一同步化例式之指令或作業之前。一旦該修正步驟163已經完成該載入程序,由載入該等修正的應用碼繼續,以取代該未修正的應用碼,如在步驟164中所指。該等修正較佳地是採用的形式為「在所有其它機器上取得鎖定」,及一「在所有其它機器上釋放鎖定」修正,如步驟163中所指。
第27圖所示為一修正的特定形式。首先,該等結構、資產或資產(在JAVA中稱之為類別或物件,例如50A,50X-50Y)或更概言之「鎖定」成為同步化,其已經被配置一名稱或標籤(例如一通用名稱或標籤),其可用來識別在每部機器M1...Mn上相對應的類似同等本地物件或資產或資源或鎖定,如步驟172所指。此較佳地是發生在當該等類別或物件原始被初始化時。此最為方便地是透過由伺服器機器X所維護的一表格來完成。此表格亦包括該類別或物件或鎖定的該同步化狀態。其將可瞭解到此表格或其它資料結構僅可儲存該同步化狀態,或其亦可儲存其它狀態或資訊。在該較佳具體實施例中,此表格亦包括一佇列配置,其儲存了已經要求使用此資產或鎖定的機器之識別。
如第27圖之步驟173中所示,接著一"acquire lock"要求被傳送到機器X,在其之後,該傳送機器等待確認鎖定取得,如步驟174中所示。因此,如果該通用名稱已經被鎖定(即一相對應類似本地資產由除了提出要取得該鎖定的該機器之外的另一部機器獨特地使用),則此代表該相對應物件或類別或資產或鎖定之提出的同步化例式必須被暫停,直到相對應物件或類別或資產或鎖定由目前擁有者解鎖。
另外,如果該通用名稱並未鎖定,此代表沒有其它機器獨特地使用一類似同等類別、物件、資產或鎖定,並確認立刻收到鎖定取得。在收到確認鎖定取得之後,該同步化例式之執行被允許來繼續,如步驟175中所示。
第28圖顯示了由想要放棄一鎖定的應用程式執行機器所依循的程序。該初始步驟在步驟181中指出。此提出機器之作業係暫時地由步驟183,184中斷,直到該回覆自機器X接收到,對應於步驟184,並執行,然後重新開始,如步驟185中所指。視需要,並如步驟182中所示,要求釋放一鎖定的機器即進行尋找此鎖定之「通用名稱」,其在機器X進行一要求之前。依此方式,在多部機器上多重鎖定可被取得及釋放,而不會彼此干擾。
第29圖所示為回應於一"acquire lock"查詢(第27圖)而由機器X進行的活動。在步驟191中接收一"acquire lock"要求之後,該鎖定狀態於步驟192及193中決定,且如果否的話,該命名的資源並不自由,或另為「鎖定」,該查詢機器之識別在步驟194中被加入到(或形成)等待取得要求之佇列。另外,如果該答案為是,該命名的資源為自由及「未鎖定」,該相對應回覆在步驟197中被傳送。然後該等待查詢機器即能夠藉由進行第27圖之步驟175依此執行該同步化例式。除了該是的回應之外,該共享的表格在步驟196中被更新,所以該通用命名的資產之狀態即改變為「鎖定」。
第30圖所示為由機器X回應於第28圖之"release lock"要求而進行的活動。在步驟201中收到一"release lock"要求之後,機器X依需要及較佳地是確認要求要釋放該通用鎖定之機器的確是該鎖定的目前擁有者,如步驟202中所指。接著,該佇列狀態在步驟203中決定,且如果沒有一個在等待取得此鎖定,機器X標示此鎖定為「未擁有」(或「未鎖定」)在該共享表格中,如步驟207中所示,並視需要傳送一釋放的確認回到該要求中機器,如步驟208所示。此使得該要求中機器執行第28圖之步驟185。
另外,如果是的話,也就是說其它機器正等待來取得此鎖定,機器X標示此鎖定成為現在由該佇列中下一部機器所取得,如步驟204中所示,然後傳送鎖定取得之確認到步驟205中該佇列的機器,然後自該等待機器之佇列中移除該新鎖定擁有者,如在步驟206中所示。
對於修正同步化例式(或其它互斥運算或運算子)來協調複數部機器M1...Mn之間的作業之基本觀念,有數種不同方式或具體實施例當中此協調、調和及一致性同步化(或其它互斥)作業觀念、方法及程序可以進行或實施。
在第一具體實施例中,一特定機器,如機器M2,載入該資產(例如類別或物件),其包括一同步化例式,修正它,然後將修正的資產(或類別或物件)載入到每一部其它的機器上M1,M3,...Mn(其可依序或同時,或根據任何其它順序、例式或程序),其具有包含該新修正的同步化例式之修正的資產(或類別或物件)。請注意到對應於該應用碼中僅一個物件可以有一或複數個例式,或對應於在該應用碼中的複數個物件可有複數個例式。請注意到在一具體實施例中,被載入的該同步化例式為二元化可執行物件碼。另外,被載入的該同步化例式為可執行的中間碼。
在此配置中,其可使用術語「主控者/受控者」,每部受控(或次級)機器M1,M3,...Mn載入該修正的物件(或類別),並包含由該主控(或主要)機器(例如機器M2,或某個其它機器,如第15圖中之機器X)在該電腦通信網路或其它通信鏈結或路徑上傳送給它的新修正的同步化例式。在對於此「主控者/受控者」或「主要/次級」配置的些微變化中,該電腦通信網路可由一共用的儲存裝置所取代,例如一共用的檔案系統、或一共用的文件/檔案儲存區,例如一共用的資料庫。
請注意到在每部機器或電腦上執行的修正不需要且經常不會是相同或類似。其所需要的是它們係以足夠類似的方式被修正,而其係根據此處所述之創新原理,該複數部機器之每一步對於其它機器為一致性且調和性地完成此處所述的作業及目的。再者,在此處所提供之說明之下將可瞭解到有大量的方法可以實施修正,例如可以根據該特定硬體、架構、作業系統、應用程式碼、或類似者或其它因素而定。其亦可瞭解到本發明之具體實施例可以在一作業系統內、或在任何作業系統之外或不具有其好處,在該虛擬機器內,在一EPROM內,在一軟體、韌體,或是這些的任何組合當中來實施。
在此「主控者/受控者」或「主要/次級」配置的另一種變化中,機器M2載入資產(例如類別或物件),包含一(或甚至一或多個)初始化例式,以未修正形式在機器M2上,然後(例如機器M2或每個本地機器)修正該類別(或物件或資產),藉由整體或部份自該資產(或類別或物件)中刪除該同步化例式,並藉由一電腦通信網路或其它通信鏈結或路徑載入該資產的修正碼,其在其它機器上具有現在修正或刪除的同步化例式。因此,在該修正並非該資產同步化例式的一轉換、測試、轉譯或編譯時,而是在所有機器中除了一部之外之上刪除該同步化例式。
整個刪除該同步化例式之處理可以由該「主控」機器(例如機器M2或某個其它機器,例如第15圖之機器X)或另由每個其它機器M1,M3,...,Mn在收到該未修正資產時來執行。此「主控者/受控者」或「主要/次級」配置的額外變化係要使用一共享的儲存裝置,例如一共享的檔案系統,或一共享的文件/檔案儲藏處,例如一共享的資料庫,用於在機器M1,M2,...,Mn及選擇性第15圖之機器X之間交換該資產、類別或物件的碼(包括例如該修正的碼)。
在又另外的具體實施例中,每部機器M1,...,Mn接收該未修正的資產(例如類別或物件),其中包含有一或多個同步化例式,但修正該例式,然後載入包含有現在修正的例式之資產(例如類別或物件)。雖然一種機器(例如該主控或主要機器)可以顧客化或執行一不同的修正到傳送給每部機器之同步化例式,此具體實施例更可立即使得由每部機器所進行之修正略微不同,並基於其特定的機器架構、硬體、處理器、記憶體、組態、作業系統或其它因素來改進、顧客化及/或最佳化,然而仍類似、調和並與其它機器一致於所有其它類似的修正及特性,其不需要一定類似或相同。
在另一配置中,一特定機器(如M1)載入該未修正的資產(例如類別或物件),其包括一或多個同步化例式,且所有其它機器M2,M3,...,Mn執行一修正或刪除該資產的同步化例式(例如類別或物件),並載入該修正的版本。
在所述之所有具體實施例中,供應或傳送該資產碼(例如類別碼或物件碼)給該等機器M1,...Mn者,且視需要包含第15圖的一機器X,其可分支、分散或傳送於不同機器之任何組合或排列之間;例如藉由提供直接機器對機器通信(例如直接由M2供應每部M1,M3,M4等),或藉由提供或使用一串接或序列性通信(例如M2供應M1,其然後供應M3,然後供應M4,依此類推),或是該直接及串接及/或序列性的組合。
在又另一種配置中,該等機器M1到Mn可以傳送一些或所有載入要求到一額外的機器X(例如參見第15圖之具體實施例),其可執行對該應用碼50之修正,包括一個(及可能複數個)初始化例式,其透過上述任何一種方法,並傳回該修正的應用碼,其包括對於每部機器M1到Mn之現在修正的初始化例式,且這些機器依序載入該修正的應用碼,其包括本地修正的例式。在此配置中,機器M1到Mn傳送所有載入要求到機器X,其傳回一修正的應用程式碼50到每部機器,其包括修正的同步化例式。由機器X所執行的該等修正可包括本發明之範圍所涵蓋的任何修正。此配置在應用到其它機器之前當然可應用到此處所述的某些機器及其它配置。
在運算技術中的專業人士將可知道多種可能的技術,其可用於修正電腦碼,其包括但不限於測試、程式轉換、轉譯、或編譯手段。
一種這樣的技術係對該應用碼進行修正,而不需要該應用碼之語言的一先前或後續改變。另一種這樣的技術係要轉換該原始碼(例如JAVA語言原始碼)成為一中介表示(或中介碼語言或虛擬碼),例如JAVA位元組碼。一旦此轉換發生之後,對該位元組碼做修正,然後可倒轉該轉換。此提供了修正的JAVA碼所需要的結果。
另一種可能的技術為轉換該應用程式為機器碼,其可直接由原始碼、或透過前述的中介語言、或透過某些其它中介手段。然後該機器碼在被載入及執行之前被修正。另一種這樣的技術為轉換該原始碼為一中介代表,因此被修正及後續被轉換成機器碼。
本發明包含所有這些修正程序,以及兩個、三個或甚至更多這種程序的組合。
包括記憶體管理及複製物件初始化、最終化及同步化之具體實施例
現在已經說明的結構、程序、電腦程式碼及工具,及一多重電腦系統及運算方法的其它態樣及特徵,其利用至少一個記憶體管理及複製物件初始化、最終化及同步化,其可立即瞭解到這些亦可視需要但較佳地是應用在任何組合中。
其亦可瞭解到本發明之記憶體管理、初始化、最終化及/或同步化態樣可被序列性或順序性或平行地實施或應用。例如,其中該碼正被細查或分析來識別或偵測關於初始化的特定碼段落,相同的分析或細查亦可嘗試來識別或偵測關於最終化(或例如同步化)之碼段落。另外,個別順序性(或可能重疊)分析及細查可用來個別地偵測關於初始化及最終化及同步化之碼。任何對該碼所需要的修正亦可組合地或獨立地執行,再者,部份可以共同地執行,而其它部份被獨立地執行。
現在已經說明了該記憶體管理及複製、初始化、最終化及同步化的態樣之後,現在將注意力導引到一範例性作業方案,其例示的方法中在兩部電腦上應用程式可用一致性調和的方式來同時執行相同的應用程式。
在此方面,請注意到第31-33圖,所示為兩部膝上型電腦101及102。該等電腦101及102不需要相同,且實際上其可為一IBM或IBM複製品,而另一個可為一APPLE電腦。該等電腦101及102具有兩個螢幕105,115,兩個鍵盤106,116,但僅有單一滑鼠107。該兩部機器101,102藉由一單一同軸電纜或雙絞線纜線314來互連。
兩個簡單應用程式被下載到每部機器101,102上,該等程式被修正成它們如上述地被載入。在此具體實施例中,該第一應用為一簡單計算機程式,並造成一計算機108之影像被顯示在該螢幕105上。該第二程式為一繪圖程式,其顯示了四種顏色的區塊109,其為不同顏色,並在一長方形方塊310內隨機移動。再次地,於載入之後,該方塊310即顯示在螢幕105上。每個應用獨立地作業,所以該等區塊109在該螢幕105上隨機移動,然而在該計算機108內的數字可與一數學運算子(例如加法或乘法)一起被選擇(利用滑鼠107),所以該計算機108顯示該結果。
該滑鼠107可用來「抓取」該方塊310,並移動它到右邊而橫跨該螢幕105並到該螢幕115上,藉以到達在第32圖中所例示的狀況。在此配置中,該計算機應用在機器101上執行,然而該繪圖應用造成在方塊310之顯示正在機器102上進行。
但是,如在第33圖中所示,其有可能藉由該滑鼠107來拖曳該計算機108到右方,如第32圖所示,藉以使得該計算機108的一部份由每個螢幕105,115顯示。類似地,該方塊310可藉由該滑鼠107拖曳到左方,如第32圖所示,所以該方塊係由每個螢幕105,115部份顯示,如第33圖所示。在此組態中,該計算機運算的部份正在機器101及機器102上的一部份之上執行,然而該繪圖應用之部份正在進行該機器101,且其餘的則在機器102上進行。
其它說明
前述僅說明本發明的一些具體實施例及修正,本技術專業人士將可瞭解到,其可在不背離本發明之範圍之下來進行。例如,參照到JAVA同時包括JAVA語言,以及JAVA平台及架構。
在所有做說明的修正例證中,其中該應用碼50在之前修正、或在載入期間、或甚至在載入之後但在執行該未修正應用碼已經進行了執行之前,其要瞭解到該修正的應用碼被載入來取代及執行來取代該未修正的應用碼,再後續到要被執行的該等修正。
另外,在修正是發生在載入之後及已經進行了該未修正應用碼的執行之後的狀況中,其要瞭解到該未修正的應用碼可以由整個修正的應用碼取代,對應於正在執行的修正,或另外該未修正的應用碼可以部份取代,或遞增地成為要逐漸在該執行中未修正的應用碼時執行該等修正。不論如何使用這些修正程序,後續要被執行的該等修正即執行來取代該未修正的應用碼。
使用在本發明中所述的一通用識別項的好處的形式為在該複數部機器M1,...,Mn的每一部上所有類似同步本地物件(或類別或資產或資源或類似者)的"meta-name"或"meta-identity"。例如,除了必須追跡在該複數個類似同等物件的每一部機器上每個類似同等本地物件的每個唯一本地名稱或識別項,其另可定義或使用對應於在每部機器上該複數個類似同等物件的一通用名稱(如"globalname7787"),並瞭解到每部機器關連該通用名稱到一特定本地名稱或物件(如對應於機器M1上物件"localobject456"之"globalname7787",及對應於機器M2上物件"localobject885"之"globalname7787",及對應於機器M3上物件"localobject111"之"globalname7787"等等)。
那些在程式領域中的專業人士將可知道當額外的碼或指令被***到一既有碼或指令組當中來修正相同、既有碼或指令組時,將會需要另外的修正(例如像是藉由重新編號序列的指令),所以可滿足偏移、分支、屬性、記上及類似者。
類似地,在該JAVA語言中,記憶體位置包括例如欄位及陣列型態。上述的說明處理了欄位,且陣列型態所需要的改變基本上為相同的適當修正。同時本發明可同等應用到類似的程式化語言(包括程序化、宣告化及物件導向)到JAVA,包括Microsoft.NET平台及架構(Visual Basic,Visual C/C ,and C#)FORTRAN,C/C ,COBOL,BASIC等)。
前述的配置中更新記憶體位置或欄位值之JAVA碼被修正,其係基於假設該執行時間系統(如以C及JAVA寫成的JAVA HOTSPOT VIRTUAL MACHINE)或該作業系統(例如以C及組合語言寫成的LINUX)。其每部機器M1...Mn將通常更新在該本地機器(如M2)上的記憶體,但並未在任何相對應的其它機器上(M1,M3...Mn)。其有可能留下該JAVA碼,其可更新記憶體位置或未修改的欄位數值,且另外修改該LINUX或HOTSPOT例式可在本地更新記憶體,所以其相對應地亦更新在所有其它機器上的記憶體。為了包含這種配置,此處所使用的術語「更新傳遞例式」配合維持基本上相同的所有機器M1...Mn之記憶體,其可瞭解到包含在其範圍內同時該JAVA putfield及putstatic指令及相關的作業,及該JAVA putstatic及putstatic之「組合」以及執行記憶體更新之LINUX或HOTSPOT碼段落。
前述的具體實施例中該JAVA初始化例式之碼被修正,其係係基於假設該執行時間系統(如以C及JAVA寫成的JAVA HOTSPOT VIRTUAL MACHINE)或該作業系統(例如以C及組合語言寫成的LINUX),其每部機器M1...Mn將會呼叫該JAVA初始化例式。其有可能不修訂該JAVA初始化例式,而另外修訂該LINUX或HOTSPOT例式會呼叫該JAVA初始化例式,所以如果已經載入該物件或類別,則該JAVA初始化例式並不會被呼叫。為了包含這種配置,該術語「初始化例式」要瞭解為在其範圍內同時包含JAVA初始化例式及該JAVA初始化例式與該LINUX或HOTSPOT碼段落之「組合」,其將呼叫或初始化該JAVA初始化例式。
前述的具體實施例中該JAVA最終化例式或清除例式之碼被修正,其係係基於假設該執行時間系統(如以C及JAVA寫成的JAVA HOTSPOT VIRTUAL MACHINE)或該作業系統(例如以C及組合語言寫成的LINUX),其每部機器M1...Mn將會呼叫該JAVA最終化例式。其有可能不修訂該JAVA最終化例式,而另外修訂該LINUX或HOTSPOT例式,其會呼叫該JAVA最終化例式,所以如果並不是要刪除該物件或類別,則該JAVA最終化例式並不會被呼叫。為了包含這種配置,該術語「最終化例式」要瞭解為在其範圍內同時包含JAVA最終化例式及該JAVA最終化例式與該LINUX或HOTSPOT碼段落之「組合」,其將呼叫或初始化該JAVA最終化例式。
前述的具體實施例中該JAVA同步化例式之碼被修正,其係係基於假設該執行時間系統(如以C及JAVA寫成的JAVA HOTSPOT VIRTUAL MACHINE)或該作業系統(例如以C及組合語言寫成的LINUX),其每部機器M1...Mn通常將會取得在該本地機器上的該鎖定(如M2),但不會在任何其它機器(M1,M3...Mn)上。其有可能留下該JAVA同步化例式未修訂,且另修訂在本地取得該鎖定之LINUX或HOTSPOT例式,所以其相對應地亦取得在所有其它機器上的該鎖定。為了包含這種配置,該術語「同步化例式」要瞭解為在其範圍內同時包含JAVA同步化例式及該JAVA同步化例式與該LINUX或HOTSPOT碼段落之「組合」,其將會執行鎖定取得及釋放。
此處所使用的術語物件及類別係由JAVA環境中得到,且要包括由不同環境得到的類似術語,例如動態鏈結庫(DLL),或物件碼包裝、或功能單元或記憶體位置。
多種手段相對於本發明之具體實施例來做說明,其包括例如但不限於鎖定手段,分散的執行時間手段、修正子或修正手段、傳遞手段、分散更新手段、計數器手段、同步化手段及類似者。在本發明至少一具體實施例中,這些多種手段中任何一個或每一個皆可由電腦程式碼敘述或指令來實施(可能包括有複數個電腦程式碼敘述或指令),其可在電腦邏輯電路、處理器、ASIC、微處理器、微控制器或其它邏輯之內執行,以修正這種邏輯或電路之作業,以完成所引述的作業或功能。在另一具體實施例中,這些多種手段中任何一個或每一個皆可實施成韌體,且在其它具體實施例中這些可實施成硬體。再者,在本發明至少一具體實施例中,這些多種手段中任何一個或每一個皆可由電腦程式軟體、韌體及/或硬體之組合所實施。
前述之方法、程序及/或程式中任何或每一個皆可較佳地是實施成為一電腦程式及/或電腦程式產品,而可儲存在任何有形的媒體上,或存在於電子、信號或數位形式。這種電腦程式或電腦程式產品分別包含指令,及/或組織成模組、程式、子例式、或以任何其它方式來在處理邏輯中執行,例如在一處理器中、或一電腦、電腦機器或資訊家電的微處理器中;該電腦程式或電腦程式產品修正該電腦之作業,其中其執行或在一電腦上,而與其結合、連接或是以信號通信之電腦上存在有或執行該電腦程式或電腦程式產品。這種電腦程式或電腦程式產品修正該電腦、電腦機器及/或資訊家電之作業及架構性結構,以改變該電腦之技術作業,並實現了此處所述的技術效應。
因此本發明可包括一電腦程式產品,其包含一組儲存在一儲存媒體上的程式指令,或電子式存在於任何形式中,並可用來允許複數部電腦來執行任何的方法、程序、例式或類似者,如此處所述,並包含在申請專利範圍中的任一項。
再者,本發明可包括複數部電腦,其透過一通信網路或其它通信鏈結或路徑來互連,且其每一個用實質上同時或同步執行一應用程式碼的相同或不同的部份,其係撰寫來僅在電腦之相對應的不同一部上的一單一電腦上作業,其中該電腦被程式化來執行在本說明書中所述之任何一種方法、程序或例式,或是在任何的申請專利範圍中所提出,或在載入有一電腦程式產品者。
如在此處所使用之該術語「包含」(及其文法之變化形)係用於做為「具有」或「包括」的意含,且並不排除「僅包含有」的排除性意義。
著作權宣告
本專利說明書及附錄形成為其一部份,其包含有受到著作權保護的內容。該著作權擁有者(即為申請人)不拒絕為了檢閱的目的而由公開取得的相關專利局檔案來重製此專利說明書或相關的內容,但另外保留所有相關的著作權。特別是,該等多種指令並不能在沒有著作權擁有者的特定書面允許之下被輸入到一電腦中。
附錄
A,B,C,D
附錄A
下述為JAVA語言中的程式表列:
A1.該第一摘錄為根據第10圖之步驟92及103之修正子51的修正碼之例示的一部份。其搜尋整個應用程式碼50之碼陣列,且當其偵測到一記憶體操縱指令(即JAVA語言及虛擬機器環境中一putstatic指令(opcode 178))時,其由***一"alert"例式來修正該應用程式碼。
A2.此第二摘錄為DRT.alert()方法之一部份,其實施了第12圖之步驟125及箭頭127。此DRT.alert()方法要求第12圖之DRT處理環境的一或多個執行緒來更新及傳遞對應於附錄A1之作業的改變的記憶體位置之數值及識別。
A3.此第三摘錄為DRT 71的一部份,其對應於第12圖之步驟128。此碼區段顯示出DRT在一獨立執行緒,例如第12圖之執行緒121/1,其係在步驟125及陣列127通知或要求之後,並在橫跨該網路53傳送該改變的數值及改變的數值位置/識別到複數部機器M1...Mn之其它機器上。
A4.該第四摘錄為DRT 71之一部份,並對應於第13圖之步驟135及136。此為程式碼的一區段來接收由另一個DRT71在網路上所傳送之傳遞的識別及數值配對,並寫入該改變的數值到該識別的記憶體位置。
// START
A5.該第五摘錄為附錄A7的example.java應用之一解碼的編譯過形式,其執行一記憶體操縱作業(putstaic及putfield)。
A6.該第六摘錄為附錄A5中相同的範例性應用之解碼的編譯過形式,其係在由附錄A11之FieldLoader.java所執行的修正之後,其係根據此發明之第9圖。該等修正以粗體 強調。
A7.該第七摘錄為在摘錄A5及A6所所使用之 example.java應用之原始碼。此範例應用具有兩個記憶體位置(staticValue及instanceValue),並執行兩個記憶體位置作業。
}
A8.該第八摘錄為FieldAlert.java之原始碼,其對應於第12圖之步驟125及箭頭127,且其要求執行該「分散式執行時間」71之FieldSend.java之執行緒121/1來傳遞一改變的數值及識別配對到其它機器M1...Mn。
A9.該第九摘錄為對應於第12圖之步驟128的FieldSend.java原始碼,並等待對應於步驟125及箭頭127之A8的FieldAlert.java所產生的一要求/通知,且其透過網路53傳遞由FieldAlert.java所要求之改變的數值/識別配對。
A10.該第十摘錄為FieldReceive.java之原始碼,其對應於第13圖之步驟135及136,且其接收在網路上53透過附錄A9之FieldSend.java所傳送給它之傳遞的改變數值及識別配對。
A11.FieldLoader.java.
此摘錄為FieldLoader.java之原始碼,其修正了一應用程式碼,例如附錄A7之example.java應用碼,當其根據第10圖之步驟90,91,92,103,及94正被載入到一JAVA虛擬機器上時。FieldLoader.java在修正一編譯過的JAVA期間利用了附錄A12到A36之習用類別。
A12.Attribute_info.java
用於在ClassFiles內代表attribute_info結構之合宜類別。
A13.ClassFile.java
用於代表ClassFile結構之合宜類別。
A14.Code_attribute.java
用於在ClassFiles內代表Code_attribute結構之合宜類別。
A15.CONSTANT_Class_info.java
用於在ClassFiles內代表CONSTANT_Class_info結構之合宜類別。
A16.CONSTANT_Double_info.java
用於在ClassFiles內代表CONSTANT_Double_info結構之合宜類別。
}
A17.CONSTANT_Fieldref_info.java
用於在ClassFiles內代表CONSTANT_Fieldref_info結構之合宜類別。
A18.CONSTANT_Float_info.java
用於在ClassFiles內代表CONSTANT_Float_info結構之合宜類別。
A19.CONSTANT_Integer_info.Java
用於在ClassFiles內代表CONSTANT_Integer_info結構之合宜類別。
A20.CONSTANT_InterfaceMethodref_info.java
用於在ClassFiles內代表CONSTANT_InterfaceMethodref_info結構之合宜類別。
}
A21.CONSTANT_Long_info.java
用於在ClassFiles內代表CONSTANT_Long_info結構之合宜類別。
A22.CONSTANT_Methodref_info.java
用於在ClassFiles內代表CONSTANT_Methodref_info結構之合宜類別。
A23.CONSTANT_NameAndType_info.java
用於在ClassFiles內代表CONSTANT_NameAndType_info結構之合宜類別。
A24.CONSTANT_String_info.java
用於在ClassFiles內代表CONSTANT_String_info結構之合宜類別。
}
A25.CONSTANT_Utf8_info.java
用於在ClassFiles內代表CONSTANT_Utf8_info結構之合宜類別。
A26.ConstantValue_attribute.java
用於在ClassFiles內代表ConstantValue_attribute結構之合宜類別。
A27.cp_info.java
用於在ClassFiles內代表cp_info結構之合宜類別。
A28.Deprecated_attribute.java
用於在ClassFiles內代表Deprecated_attribute結構之合宜類別。
}
A29.Exceptions_attribute.java
用於在ClassFiles內代表Exceptions_attribute結構之合宜類別。
}
A30.field_info.java
用於在ClassFiles內代表field_info結構之合宜類別。
}
A31.InnerClasses_attribute.java
用於在ClassFiles內代表InnerClasses_attribute結構之合宜類別。
A32.LineNumberTable_attribute.java
用於在ClassFiles內代表LineNumberTable_attribute結構之合宜類別。
import java.lang.*;
A33.LocalVariableTable_attribute.java
用於在ClassFiles內代表LocalVariableTable_attribute結構之合宜類別。
A34.method_info.java
用於在ClassFiles內代表method_info結構之合宜類別。
A35.SourceFile_attribute.java
用於在ClassFiles內代表SourceFile_attribute結構之合宜類別。
import java.lang.*;
A36.Synthetic_attribute.java
用於在ClassFiles內代表Synthetic_attribute結構之合宜類別。
附錄B
附錄B1為附錄B9之example.java應用之<clinit>方法之解碼的編譯形式之修正前的摘錄。附錄B2為附錄B1之修正後的形式,其根據第20圖之步驟由附錄B10之InitLoader.java所修正。附錄B3為附錄B9之example.java應用之<init>方法的解碼之編譯的形式的修正之前摘錄。附錄B4為附錄B3的修正後形式,根據第21圖之步驟由附錄B10之InitLoader.java所修正。附錄B5為附錄B1的另一種修正後形式,根據第20圖之步驟由附錄B10之InitLoader.java所修正。且附錄B6為附錄B3之另一種修正後形式,根據第21圖之步驟由附錄B10之InitLoader.java所修正。該等修正以粗體 來強調。
B1
B2
B3
B4
B5
B6
附錄B7
此摘錄為InitClient.java之原始碼,其對應於第17圖之步驟171,172,173,174,175及176,與第18圖之步驟181與182,且其查詢一「初始化伺服器」,例如第15圖之機器X,其執行附錄B8之InitServer.java,藉以決定尋求被初始化之相關類別或物件之初始化狀態。
附錄B8
此摘錄為InitServer.java之原始碼,其對應於第19圖之步驟191,192,193,194,195及196,其在一「初始化伺服器」上作業,例如第15圖的機器X,並自網路53接收該複數部機器M1...Mn上複數個類似同等物件或類別之一指定的物件或類別的一「初始化狀態要求」,並由執行附錄B7的InitClient.java機器所傳送,並回應而傳回該指定的類別或物件之相對應初始化狀態。
附錄B9
此摘錄為在修正之前/之後的摘錄B1-B6中所使用之example.java應用之原始碼的摘錄。此範例應用具有兩個初始化例式<clinit>及<init>,其係根據本發明由附錄B10之InitLoader.java做修正。
}
附錄B10
InitLoader.java
此摘錄為InitLoader.java之原始碼,其修正了一應用程式碼,例如附錄B9之example.java應用碼,當其根據第16圖之步驟161-164,及第20圖之201-204,及第21圖之步驟201,212,213及204載入到一JAVA虛擬機器上時。InitLoader.java在修正一編譯過的JAVA期間利用了附錄A12到A36之習用類別。
附錄C
附錄C1為附錄C4之example.java應用之finalize()方法之解碼的編譯形式之修正前的摘錄。附錄C2為附錄C1之修正之後形式,其由附錄C7之FinalLoader.java利用第22圖之步驟所修正。附錄C3為附錄C1的另一個修正之後形式,其由附錄C7之FinalLoader.java根據第22圖之步驟所修正。該等修正以粗體 強調。
C1.一單一機器之典型的先前技術最終化
C2.多重機器之較佳的最終化
C3.多重機器之較佳的最終化(其它方案)
附錄C4
此摘錄為在修正之前/之後的摘錄C1-C3中所使用之example.java應用之原始碼的摘錄。此範例應用具有一單一最終化例式,該finalize()方法根據本發明由附錄C7之FinalLoader.java所修正。
附錄C5
此摘錄為FinalClient.java之原始碼,其對應於第23圖之步驟171,172A,173A,174A,175A及176A,且其查詢一「初始化伺服器」,例如第15圖之機器X,其執行附錄C6之InitServer.java,藉以決定尋求被最終化之相關類別或物件之最終化狀態。
附錄C6
此摘錄為FinalServer.java之原始碼,其對應於第25圖之步驟191A,192A,193A,194A,195A,196A及197A,其在一「最終化伺服器」上作業,例如第15圖的機器X,並自網路53接收該複數部機器M1...Mn上複數個類似同等物件或類別之一指定的物件或類別的一「清除狀態要求」,並由執行附錄C5的FinalClient.java機器所傳送,並回應而傳回該指定的類別或物件之相對應最終化狀態。
附錄C7
FinalLoader.java
此摘錄為FinalLoader.java之原始碼,其修正了一應用程式碼,例如附錄C4之example.java應用碼,當其根據第22圖之步驟161A,162A,163B及164A正被載入到一JAVA虛擬機器上時。FinalLoader.java在修正一編譯過的JAVA期間利用了附錄A12到A36之習用類別。
附錄D1
附錄D1為附錄D3之example.java之同步化作業的解碼編譯的形式之修正之前的摘錄,其包含一啟始"monitorenter"指令及結束"monitorexit"指令。附錄D2為附錄D1之修正之後的形式,根據第26圖之步驟中附錄D6之LockLoader.java所修正。該等修正以粗體 來強調。
附錄D2
Method void run()
附錄D3
此摘錄為在修正摘錄D1及D2之前/之後中所使用之example.java應用之原始碼。此範例應用具有一單一同步化作業例式,其包含一開始"monitorenter"指令及一結束 "monitorexit"指令,其根據本發明由附錄D6之LockLoader做修正。
附錄D4
此摘錄為LockClient.java之原始碼,其對應於第27圖之步驟171B,172B,173B,174B,及175B,及第28圖之步驟181B,182B,183B,184B及185B,且其查詢一「同步化伺服器」,例如第15圖之機器X,其執行附錄D5之LockServer.java,藉以同步化(即藉由一取得鎖定及釋放鎖定要求配對)尋求要被同步化之相關類別或物件(即尋求要被「鎖定」)。
附錄D5
此摘錄為LockServer.java之原始碼,其對應於第29圖之191B,192B,193B,194B,195B,196B,197B及198B,及第30圖之步驟201,202,203,204,205,206,207及208,其在一「同步化伺服器」上作業,例如第15圖之機器X,並自網路53接收在複數部機器M1...Mn上複數個類似同等物件或類別之一指定的物件或類別之一「取得鎖定要求」或一「釋放鎖定要求」,並由執行附錄D4之LockClient.java的機器傳送,並回應來傳回一「取得鎖定要求」之擁有權的相對應確認,或視需要為該指定的類別或物件之「釋放鎖定要求」的確認。
附錄D6
LockLoader.java
此摘錄為LockLoader.java之原始碼,其修正了一應用程式碼,例如附錄D3之example.java應用碼,當其根據第26圖之步驟161B,162B,163B及164B正被載入到一JAVA虛擬機器上時。LockLoader.java在修正一編譯過的JAVA檔案類別期間利用了附錄A12到A36之習用類別。
1...單一機器
2...中央處理單元
3...記憶體
4...匯流排
5...螢幕
6...鍵盤
7...滑鼠
12...CPU
13...通用記憶體
14...網路
50...應用
50A...類別
50X...第一物件
50Y...第二物件
50Z...第三物件
51...修正子
53...網路
61...Java虛擬機器
71...分散式執行時間
72...Java虛擬機器
75...箭頭
83...箭頭
101...電腦
102...電腦
105...螢幕
106...鍵盤
107...滑鼠
108...計算機
109...區塊
115...螢幕
116...鍵盤
120...處理環境
121...執行緒
310...長方形方塊
314...雙絞纜線
現在將參照圖面說明本發明之具體實施例,其中:第1圖為一習用電腦之內部架構圖;第2圖所示為已知的對稱性多處理器之內部架構圖;第3圖為習用分散式運算之架構圖;第4圖為習用使用叢集之網路運算之架構圖;第5圖所示為根據本發明第一具體實施例之操作相同應用程式之複數部機器的架構方塊圖;第6圖所示為一先前技術電腦之架構圖,用以操作JAVA碼,藉此構成一JAVA虛擬機器;第7圖所示類似於第6圖,但例示根據該較佳具體實施例之程式碼的初始載入;第8圖類似於第5圖,但例示出複數部電腦之互連接,其每個用第7圖所例示之方式操作JAVA碼;第9圖所示為在該網路中每部機器上載入相同應用程式期間之後的一範例性程序的流程圖;第10圖所示為關於第9圖之一修正程序的流程圖;第11圖所示為利用記憶體更新的一第一具體實施例在第8圖的機器上執行之多執行緒處理之架構圖;第12圖為類似於第11圖的架構,但例示另一具體實施例;第13圖例示第8圖之電腦的範例性多執行緒記憶體更新;第14圖所示為配置成在JAVA碼中作業之一電腦的架構圖,並藉此構成一JAVA虛擬機器;第15圖所示為執行該應用程式之n部機器,並由一額外伺服器機器X服務的架構圖;第16圖所示為初始化例式之修正的流程圖;第17圖所示為初始化例式之持續或中止之流程圖;第18圖所示為傳送到該伺服器機器X之查詢的流程圖;第19圖所示對於第18圖之請求的該伺服器機器X之回應的流程圖;第20圖所示為該類別初始化資產型別<clinit>指令之修正的初始化例式的流程圖;第21圖所示為該物件初始化資產型別<init>指令之修正的初始化例式的流程圖;第22圖所示為「清除」或最終化例式之修正的流程圖;第23圖所示為最終化例式之持續或中止之流程圖;第24圖所示為傳送到該伺服器機器X之查詢的流程圖;第25圖所示對於第24圖之請求的該伺服器機器X之回應的流程圖;第26圖所示為該監視進入及離開例式之修正的流程圖;第27圖所示為在處理機器請求取得一鎖定之後該處理之流程圖;第28圖所示為請求釋放一鎖定的流程圖;第29圖所示對於第27圖之請求的該伺服器機器X之回應的流程圖;第30圖所示對於第28圖之請求的該伺服器機器X之回應的流程圖;第31圖為互連的兩部膝上型電腦同時執行複數應用程式之架構圖,其中兩個應用程式在單一電腦上執行;第32圖類似於第31圖,但顯示出第31圖之設備具有一應用程式在每部電腦上作業;及第33圖類似於第31圖及第32圖,但顯示出第31圖之設備上兩個應用程式同時在兩部電腦上作業。
50‧‧‧應用
53‧‧‧網路
71‧‧‧分散式執行時間
72‧‧‧Java虛擬機器
83‧‧‧箭頭

Claims (44)

  1. 一種一多重電腦系統中操作一應用程式之方法,該多重電腦系統包括經由一通訊鏈結互連之複數個單一電腦,該應用程式具有撰寫成包括複數個線程之代碼,該等複數個線程係意欲執行於一單一獨立電腦上且參照該單一獨立電腦,該單一獨立電腦具有一單一中央處理單元(CPU)或對稱多重處理單元以及一單一獨立本地記憶體,該單一獨立本地記憶體不與該等複數個單一電腦之任何其他電腦共享,該方法包含以下步驟:(a)分配互連之該等複數個單一電腦中之應用程式代碼之該等複數個線程,而使得包括該應用程式代碼之至少一個第一線程之該應用程式之至少一部分係分配於該等複數個單一電腦之一第一特定者上執行,且該應用程式代碼之至少一個第二線程係分配於該等複數個單一電腦之一第二特定者上執行;(b)操作每一單一電腦,而使得該單一獨立本地記憶體之記憶體位置僅可藉由分配其上執行之該線程或該等線程定址;(c)藉由具有用於執行之經分配之一應用程式代碼線程或線程之該等單一電腦來執行經分配之該應用程式代碼線程或該等線程;(d)在該執行步驟之前或在該執行步驟期間,產生該等複數個單一電腦之每一者之類似的複數個記憶 體位置,該等複數個記憶體位置之每一者具有一名稱,其中經命名之該等記憶體位於之每一者之該起始記憶體位置值內容係在產生時相同;(e)在該執行步驟期間或在該執行步驟之後,藉由該單一電腦在該單一電腦之單一獨立本地記憶體儲存可由經分配之用於執行之該線程或該等線程定址之每一應用記憶體值之一原始版本;(f)經由該通訊鏈結傳遞每一應用記憶體值之每一新的原始版本之一複製版本之一更新至該等複數個單一電腦之所有其他者之該單一獨立本地記憶體,其中每一應用記憶體已由於該等單一電腦之任意者上之該線程或該等線程之執行而覆寫一先前對應應用記憶體值;以及(g)在所有該等複數個單一電腦之該單一獨立本地記憶體中儲存經傳遞且經更新之每一個別應用記憶體值之該複製版本;(h)鎖定該等單一電腦之每一者之記憶體位置,其中想要利用其中之一記憶體位置之任何單一電腦取得該多重電腦系統之一授權鎖定,以允許該記憶體位置之該利用,並在該授權鎖定放開之前防止該等單一電腦之所有其他者利用相對應記憶體位置;(i)所有該等單一電腦之經儲存之該等應用記憶體值針對一通訊鏈結更新傳輸延遲而保持相同,而沒有該等單一電腦的任意者在經分配之該線程或該等線 程執行期間定址該等複數個單一電腦之任何其他者之該獨立本地記憶體,經儲存之該等應用記憶體值包括該等原始版本與該等複製版本;以及(j)當所有該等複數個單一電腦不再需要參照相對應記憶體位置時,共同刪除該等相同記憶體位置之所有該等原始版本與複製版本。
  2. 如申請專利範圍第1項所述之方法,進一步包含以下步驟:若在該等單一電腦之一者上運行之該應用程式在該等單一電腦之該者上建立一記憶體位置,則經建立之該物件經由該通訊網路傳播至該等複數個單一電腦之所有其他者。
  3. 如申請專利範圍第2項所述之方法,進一步包含以下步驟:在載入之前、期間或之後修正該應用程式,藉由***一初始化例式修正該應用程式建立一記憶體位置處之每一例證,該初始化例式將由一個單一電腦建立之每一物件傳播至所有該等其他單一電腦。
  4. 如申請專利範圍第1項所述之方法,進一步包含以下步驟:提供一分散式運行時間構件給該等單一電腦之每一者,以經由該通訊網路在該等複數個單一電腦間通訊。
  5. 如申請專利範圍第4項所述之方法,進一步包含以下 步驟:提供可由該等分散式執行時間構件之每一者存取之一共享表格,且其中儲存不再需要存取一記憶體位置之該等複數個單一電腦之任意者之識別與該記憶體位置之識別。
  6. 如申請專利範圍第5項所述之方法,進一步包含以下步驟:將一計數器構件與該共享表格相關聯,該計數器構件儲存不再需要存取該記憶體位置之該等單一電腦之數目之一計數。
  7. 如申請專利範圍第6項所述之方法,進一步包含以下步驟:提供一額外電腦,其上並未執行該共享程式,並主控該共享表格與計數器,該額外電腦連接至該通訊網路。
  8. 如申請專利範圍第4項所述之方法,進一步包含以下步驟:提供可由該等分散式執行時間構件之每一者存取之一共享表格,且其中儲存目前需要存取一記憶體位置之該等複數個單一電腦之任意者之識別與該記憶體位置之識別。
  9. 如申請專利範圍第8項所述之方法,進一步包含以下步驟:將一計數器構件與該共享表格相關聯,該計數器 構件儲存尋求存取該記憶體位置之該等單一電腦之數目之一計數。
  10. 如申請專利範圍第9項所述之方法,進一步包含以下步驟:提供一額外電腦,其上並未執行該共享程式,並主控該共享表格與儲存該計數之計數器構件,該額外電腦連接至該通訊網路。
  11. 如申請專利範圍第1項所述之方法,其中該傳遞步驟包括執行一更新傳播例式之步驟。
  12. 如申請專利範圍第11項所述之方法,其中執行該更新傳播例式之步驟包括以下步驟:傳遞經更新、經改變或經操縱之記憶體位置之識別,以及經操縱之該記憶體位置之經更新、經操縱或經改變之值或內容。
  13. 如申請專利範圍第12項所述之方法,其中該更新通訊係經由一低速網路通訊鏈結或路徑執行。
  14. 如申請專利範圍第11項所述之方法,其中從該網路接收一更新通訊之該等複數個單一電腦之每一者將接收之該記憶體位置值寫入對應接收之經識別記憶體位置之該本地獨立記憶體位置。
  15. 如申請專利範圍第13項所述之方法,其中該通訊鏈結包括一透過網際網路之通訊鏈結。
  16. 如申請專利範圍第13項所述之方法,其中該低速網路係為具有大小比在該等單一電腦之匯流排之作業速度慢一大小等級之一作業通訊速度。
  17. 如申請專利範圍第11項所述之方法,其中該等單一電腦間之該等通訊雖然透過該單一電腦機器硬體做導引,卻是由每一單一電腦中之個別之一分散式運行時間(DRT)所控制,該分散式運行時間協調該等複數個單一電腦間之特定通訊。
  18. 如申請專利範圍第17項所述之方法,其中該DRT協調該等單一電腦間之通訊在傳輸、協定及通訊鏈結上為獨立。
  19. 如申請專利範圍第11項所述之方法,其中:所有來自該單一電腦本地獨立記憶體之記憶體位置或資料之讀取可在本地滿足,因為所有(或所有的一些子集合)記憶體位置之一目前值係儲存在承載執行產生該需求來讀取記憶體之該等線程之處理的該單一電腦上;以及所有來自該單一電腦本地獨立記憶體之記憶體位置或資料之寫入可在本地滿足,因為所有(或所有的一些子集合)記憶體位置之一目前值係儲存在承載執行產生該需求來寫入記憶體之該等代碼線程之處理的該單一電腦上;其中寫入或再寫入記憶體之該需求係相對低於讀取記憶體之該需求,因此記憶體位置可經由一慢及便宜之商用網路來以一相對慢之速率來連續地更新,然而該相對慢之速率足以滿足寫入記憶體之應用程式的該需求。
  20. 一種多重電腦系統,包含:經由一通訊鏈結互連之複數個單一電腦;其中該等複數個單一電腦之每一者具有:(a)一單一中央處理單元(CPU)或對稱多重處理單元,(b)一單一獨立本地記憶體,該單一獨立本地記憶體不與該等複數個單一電腦之任何其他電腦共享,以及(c)係獨立於該等複數個單一電腦之其他者;其中該等複數個單一電腦之每一者係適於儲存與執行一應用程式之一類似複本之至少一個線程,該應用程式具有撰寫成僅在一單一電腦系統上操作之代碼,該等代碼包括所有意欲與一單一記憶體一起執行之複數個線程;其中該單一獨立本地記憶體之每一者具有僅可由執行該應用程式碼之相對應複本之相對應單一電腦之該線程或該等線程定址或存取之記憶體位置,而該單一獨立本地記憶體之每一者具有儲存其上之從所有該等複數個電腦之所有該等線程之執行所形成所有應用程式記憶體值;(i)分配構件,該分配構件用於分配或接收該等複數個單一電腦中之經儲存之該等應用程式代碼之該等複數個線程之一分配,而使得包括該應用程式代碼之至少一個線程之該應用程式之至少一部分係分配於該等複數個單一電腦之一對應者上藉由該等複數個單一電腦之該者之一或更多個線程執行; (ii)執行構件,該執行構件用於藉由具有經分配之一應用程式代碼線程或線程之該等複數個單一電腦來執行該應用程式代碼線程或該等線程;(iii)一記憶體儲存,該記憶體儲存用於在該等單一電腦之每一者之該單一獨立本地記憶體中儲存可由該等複數個單一電腦之個別每一者之該等線程之個別每一者定址之個別每一應用記憶體值之一複製;(iv)傳遞構件,該傳遞構件用於經由該通訊鏈結傳遞每一新的應用記憶體值至該等複數個單一電腦之所有其他者之該單一獨立本地記憶體,而使得所有該等單一電腦之該等複製應用記憶體值之值針對一更新傳輸延遲而實質上保持相同,其中每一新的應用記憶體值已由於該等單一電腦之任意者上之該等應用程式代碼之執行而覆寫一先前對應值;(v)鎖定構件,該鎖定構件可應用至該單一電腦,其中想要利用其中之一記憶體位置之任何單一電腦從該鎖定構件取得一授權鎖定,以允許該記憶體位置之該利用,並在該授權鎖定放開之前防止該等單一電腦之所有其他者利用相對應記憶體位置;(vi)刪除構件,該刪除構件用於當該等複數個單一電腦之每一者不再需要參照相對應記憶體位置時,共同刪除所有該等相同記憶體位置。
  21. 如申請專利範圍第20項所述之系統,其中該鎖定構件包括一取得鎖定例式與一釋放鎖定例式,且二個例式 都包括在對所有該等電腦上運行之該應用程式之修正。
  22. 如申請專利範圍第21項所述之系統,其中該鎖定構件進一步包括一共享列表,該共享列表表列由該電腦使用之經命名之該等記憶體位置、該等記憶體位置之每一者之一鎖定狀態以及任何等待鎖定取得之一佇列。
  23. 如申請專利範圍第22項所述之系統,其中該鎖定構件係定位於一額外電腦中,該額外電腦不運行該應用程式,並連接至該通訊網路。
  24. 如申請專利範圍第20項所述之系統,其中該等電腦之每一者包括一分散式運行時間構件,該等電腦之每一者之該分散式運行時間構件能與所有其他電腦通訊,而使得若在該等電腦之一者上運行之該應用程式之一部分在該等電腦之該者上建立一記憶體位置,則經建立之該記憶體位置藉由該等電腦之該者之該分散式運行時間構件傳播至該等電腦之所有其他者。
  25. 如申請專利範圍第20項所述之系統,其中該等電腦之每一者包括一分散式運行時間構件,該等電腦之每一者之該分散式運行時間構件能與所有其他電腦通訊,而使得若在該等電腦之一者上運行之該應用程式之一部分不再需要參照該等電腦之該者中之一記憶體位置,則未參照之該記憶體位置之識別藉由等電腦之該者之該分散式運行時間構件傳送至可由所有該等其他電腦存取之一共享列表。
  26. 如申請專利範圍第20項所述之系統,其中在載入之前、期間或之後修正該等應用程式之每一者,藉由***一初始化例式修正該應用程式建立一記憶體位置處之每一例證,該初始化例式將由一個電腦新建立之每一物件傳播至所有該等其他電腦。
  27. 如申請專利範圍第26項所述之系統,其中係根據自程序群組中選出的一程序修正該應用程式,該程序群組包含在載入時重新編譯、在載入之前預編譯、在載入之前編譯、及時編譯、以及在載入之後及執行該應用程式之相關部份之前重新編譯。
  28. 如申請專利範圍第26項所述之系統,其中係根據自群組中選出的一程序轉移經修正之該應用程式至所有該等電腦,該群組包含主控者/受控者轉移、分支轉移及串接轉移。
  29. 如申請專利範圍第20項所述之系統,其中分配給該等應用程式之每一者之本地記憶體容量實質上相同,且可用於該等應用程式之每一者之整體記憶體容量為經分配之該記憶體容量。
  30. 如申請專利範圍第29項所述之系統,其中所有該等電腦包括一分散式更新構件,該分散式更新構件之每一者經由該通訊鏈結通訊,而資料轉移速率實質上小於該本地記憶體讀取速率。
  31. 如申請專利範圍第30項所述之系統,其中該等電腦中至少一些者由不同製造商所製造及/或具有不同的作 業系統。
  32. 如申請專利範圍第20項所述之系統,其中該通訊鏈結包含一網際網路通訊鏈結。
  33. 如申請專利範圍第20項所述之系統,其中該通訊構件包括用於執行一更新傳播例式之構件。
  34. 如申請專利範圍第33項所述之系統,其中用於執行一更新傳播例式之該構件包括用於傳遞經更新、經改變或經操縱之記憶體位置之識別,以及經操縱之該記憶體位置之經更新、經操縱或經改變之值或內容之構件。
  35. 如申請專利範圍第34項所述之系統,其中用於更新通訊之該構件係操作以經由一低速通訊鏈結或路徑執行。
  36. 如申請專利範圍第33項所述之系統,其中從該網路接收一更新通訊之該等複數個單一電腦之每一者將接收之該記憶體位置值寫入對應接收之經識別記憶體位置之該本地獨立記憶體位置。
  37. 如申請專利範圍第35項所述之系統,其中該通訊鏈結包括一透過網際網路之通訊鏈結。
  38. 如申請專利範圍第35項所述之系統,其中該低速網路係為具有大小比在該等單一電腦之匯流排之作業速度慢一大小等級之一作業通訊速度。
  39. 如申請專利範圍第33項所述之系統,其中該等單一電腦間之該等通訊雖然透過該單一電腦機器硬體做導引,卻是由每一單一電腦中之個別之一分散式運行時 間(DRT)所控制,該分散式運行時間協調該等複數個單一電腦間之特定通訊。
  40. 如申請專利範圍第39項所述之系統,其中該DRT協調該等單一電腦間之通訊在傳輸、協定及鏈結上為獨立。
  41. 如申請專利範圍第33項所述之系統,其中:所有來自該單一電腦本地獨立記憶體之記憶體位置或資料之讀取可在本地滿足,因為所有(或所有的一些子集合)記憶體位置之一目前值係儲存在承載執行產生該需求來讀取記憶體之該等代碼線程之處理的該單一電腦上;以及所有來自該單一電腦本地獨立記憶體之記憶體位置或資料之寫入可在本地滿足,因為所有(或所有的一些子集合)記憶體位置之一目前值係儲存在承載執行產生該需求來寫入記憶體之該等代碼線程之處理的該單一電腦上;其中寫入或再寫入記憶體之該需求係相對低於讀取記憶體之該需求,因此記憶體位置可經由一慢及便宜之商用網路來以一相對慢之速率來連續地更新,然而該相對慢之速率足以滿足寫入記憶體之應用程式的該需求。
  42. 一種儲存在一實體機器可讀取媒體上並包括可執行指令之電腦程式產品,該等可執行指令在一多重電腦系統中用於實施操作一應用程式之方法,該多重電腦系 統包括經由一通訊鏈結互連之複數個單一電腦,該應用程式具有撰寫成包括複數個線程之代碼,該等複數個線程係意欲執行於一單一獨立電腦上且參照該單一獨立電腦,該單一獨立電腦具有一單一中央處理單元(CPU)或對稱多重處理單元以及一單一獨立本地記憶體,該單一獨立本地記憶體不與該等複數個單一電腦之任何其他電腦共享,該等可執行指令執行一方法,該方法包含以下步驟:(a)分配互連之該等複數個單一電腦中之應用程式代碼之該等複數個線程,而使得包括該應用程式代碼之至少一個第一線程之該應用程式之至少一部分係分配於該等複數個單一電腦之一第一特定者上執行,且該應用程式代碼之至少一個第二線程係分配於該等複數個單一電腦之一第二特定者上執行;(b)操作每一單一電腦,而使得該單一獨立本地記憶體之記憶體位置僅可藉由分配其上執行之該線程或該等線程定址;(c)藉由具有用於執行之經分配之一應用程式代碼線程或線程之該等單一電腦來執行經分配之該應用程式代碼線程或該等線程;(d)在該執行步驟之前或在該執行步驟期間,產生該等複數個單一電腦之每一者之類似的複數個記憶體位置,該等複數個記憶體位置之每一者具有一名稱,其中經命名之該等記憶體位於之每一者之該起始 記憶體位置值內容在係產生時相同;(e)在該執行步驟期間或在該執行步驟之後,藉由該單一電腦在該單一電腦之單一獨立本地記憶體儲存可由經分配之用於執行之該線程或該等線程定址之每一應用記憶體值之一原始版本;(f)經由該通訊鏈結傳遞每一應用記憶體值之每一新的原始版本之一複製版本之一更新至該等複數個單一電腦之所有其他者之該單一獨立本地記憶體,其中每一應用記憶體已由於該等單一電腦之任意者上之該線程或該等線程之執行而覆寫一先前對應應用記憶體值;以及(g)在所有該等複數個單一電腦之該單一獨立本地記憶體中儲存經傳遞且經更新之每一個別應用記憶體值之該複製版本;(h)鎖定該等單一電腦之每一者之記憶體位置,其中想要利用其中之一記憶體位置之任何單一電腦取得該多重電腦系統之一授權鎖定,以允許該記憶體位置之該利用,並在該授權鎖定放開之前防止該等單一電腦之所有其他者利用相對應記憶體位置;以及(i)所有該等單一電腦之經儲存之該等應用記憶體值針對一通訊鏈結更新傳輸延遲而保持相同,而沒有該等單一電腦的任意者在經分配之該線程或該等線程執行期間定址該等複數個單一電腦之任何其他者之該獨立本地記憶體,經儲存之該等應用記憶體值包括 該等原始版本與該等複製版本;以及(j)當所有該等複數個單一電腦不再需要參照相對應記憶體位置時,共同刪除該等相同記憶體位置之所有該等原始版本與複製版本。
  43. 如申請專利範圍第42項所述之電腦程式產品,其中:該傳遞步驟包括執行一更新傳播例式之步驟,而執行該更新傳播例式之步驟包括以下步驟:傳遞經更新、經改變或經操縱之記憶體位置之識別,以及經操縱之該記憶體位置之經更新、經操縱或經改變之值或內容,且該更新通訊係經由一低速網路通訊鏈結或路徑執行,該低速網路通訊鏈結或路徑係為具有大小比在該等單一電腦之匯流排之作業速度慢一大小等級之一作業通訊速度;從該網路接收一更新通訊之該等複數個單一電腦之每一者將接收之該記憶體位置值寫入對應接收之經識別記憶體位置之該本地獨立記憶體位置;該等單一電腦間之該等通訊雖然透過該單一電腦機器硬體做導引,卻是由每一單一電腦中之個別之一分散式運行時間(DRT)所控制,該分散式運行時間協調該等複數個單一電腦間之特定通訊,而該DRT協調該等單一電腦間之通訊在傳輸、協定及鏈結上為獨立;所有來自該單一電腦本地獨立記憶體之記憶體位置或資料之讀取可在本地滿足,因為所有(或所有的 一些子集合)記憶體位置之一目前值係儲存在承載執行產生該需求來讀取記憶體之該等線程之處理的該單一電腦上;以及所有來自該單一電腦本地獨立記憶體之記憶體位置或資料之寫入可在本地滿足,因為所有(或所有的一些子集合)記憶體位置之一目前值係儲存在承載執行產生該需求來寫入記憶體之該等線程之處理的該單一電腦上;以及其中寫入或再寫入記憶體之該需求係相對低於讀取記憶體之該需求,因此記憶體位置可經由一慢及便宜之商用網路來以一相對慢之速率來連續地更新,然而該相對慢之速率足以滿足寫入記憶體之應用程式的該需求。
  44. 如申請專利範圍第42項所述之電腦程式產品,其中該等代碼撰寫成包括複數個線程之代碼,該等複數個線程係意欲執行於一單一獨立電腦上且參照該單一獨立電腦,該單一獨立電腦具有一單一中央處理單元(CPU)或對稱多重處理單元以及一單一獨立本地記憶體,該單一獨立本地記憶體不與該等複數個單一電腦之任何其他電腦共享。
TW95102934A 2005-04-21 2006-01-25 用於使用協調物件之修正式電腦結構之方法、系統與電腦程式產品 TWI467491B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
AU2005902027A AU2005902027A0 (en) 2005-04-21 Modified Computer Architecture with Coordinated Objects

Publications (2)

Publication Number Publication Date
TW200638266A TW200638266A (en) 2006-11-01
TWI467491B true TWI467491B (zh) 2015-01-01

Family

ID=52784735

Family Applications (1)

Application Number Title Priority Date Filing Date
TW95102934A TWI467491B (zh) 2005-04-21 2006-01-25 用於使用協調物件之修正式電腦結構之方法、系統與電腦程式產品

Country Status (1)

Country Link
TW (1) TWI467491B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10102098B2 (en) 2015-12-24 2018-10-16 Industrial Technology Research Institute Method and system for recommending application parameter setting and system specification setting in distributed computation

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013095665A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Tracking distributed execution on on-chip multinode networks without a centralized mechanism
US9166865B2 (en) * 2012-11-07 2015-10-20 International Business Machines Corporation Mobility operation resource allocation

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6049809A (en) * 1996-10-30 2000-04-11 Microsoft Corporation Replication optimization system and method
US20020001009A1 (en) * 1997-06-04 2002-01-03 Hewlett-Packard Company Ink container having a multiple function chassis
US6625751B1 (en) * 1999-08-11 2003-09-23 Sun Microsystems, Inc. Software fault tolerant computer system
US20030225852A1 (en) * 2002-05-30 2003-12-04 International Business Machines Corporation Efficient method of globalization and synchronization of distributed resources in distributed peer data processing environments
TW200404433A (en) * 2002-07-19 2004-03-16 Ibm Employing a resource broker in managing workloads of a peer to peer computing environment
US6760903B1 (en) * 1996-08-27 2004-07-06 Compuware Corporation Coordinated application monitoring in a distributed computing environment

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6760903B1 (en) * 1996-08-27 2004-07-06 Compuware Corporation Coordinated application monitoring in a distributed computing environment
US6049809A (en) * 1996-10-30 2000-04-11 Microsoft Corporation Replication optimization system and method
US20020001009A1 (en) * 1997-06-04 2002-01-03 Hewlett-Packard Company Ink container having a multiple function chassis
US6625751B1 (en) * 1999-08-11 2003-09-23 Sun Microsystems, Inc. Software fault tolerant computer system
US20030225852A1 (en) * 2002-05-30 2003-12-04 International Business Machines Corporation Efficient method of globalization and synchronization of distributed resources in distributed peer data processing environments
TW200404433A (en) * 2002-07-19 2004-03-16 Ibm Employing a resource broker in managing workloads of a peer to peer computing environment

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10102098B2 (en) 2015-12-24 2018-10-16 Industrial Technology Research Institute Method and system for recommending application parameter setting and system specification setting in distributed computation

Also Published As

Publication number Publication date
TW200638266A (en) 2006-11-01

Similar Documents

Publication Publication Date Title
US7788314B2 (en) Multi-computer distributed processing with replicated local memory exclusive read and write and network value update propagation
CN1965308B (zh) 具有协作对象的修改后的计算机架构
US7844665B2 (en) Modified computer architecture having coordinated deletion of corresponding replicated memory locations among plural computers
Chin et al. Distributed, object-based programming systems
US8788569B2 (en) Server computer system running versions of an application simultaneously
US8707287B2 (en) Method, computer program product, and system for non-blocking dynamic update of statically typed class-based object-oriented software
US5359721A (en) Non-supervisor mode cross address space dynamic linking
US8984534B2 (en) Interfacing between a receiving component of a server application and a remote application
Liu et al. Fabric: Building open distributed systems securely by construction
EP0735474B1 (en) Method and apparatus for generation and installation of distributed objects on a distributed object system
US20020129177A1 (en) System and method for class loader constraint checking
US20060095483A1 (en) Modified computer architecture with finalization of objects
US20040107416A1 (en) Patching of in-use functions on a running computer system
US20050262513A1 (en) Modified computer architecture with initialization of objects
US20090276660A1 (en) Server computer component
WO2007113539A1 (en) Interactive development tool and debugger for web services
Van Der Burg et al. Disnix: A toolset for distributed deployment
TWI467491B (zh) 用於使用協調物件之修正式電腦結構之方法、系統與電腦程式產品
Ma et al. Efficient Scheduler Live Update for Linux Kernel with Modularization
Renouf Pro (IBM) WebSphere Application Server 7 Internals
Milano Programming Safely with Weak (And Strong) Consistency
AU2006238334A1 (en) Modified computer architecture for a computer to operate in a multiple computer system
Ma et al. Improving automatic centralization by version separation
Kim Applying dynamic software updates to computationally-intensive applications
Levine et al. Object Lifetime Manager