(57)【要約】  各々がローカルメモリを有する複数のコンピュータＭ１、Ｍ２．．．．Ｍｎ上で少なくとも１つのアプリケーションプログラム（５０）が同時に実行されるマルチコンピュータ環境において、幾つかのメモリロケーションだけの更新が開示される。ローカルメモリ内のメモリロケーション（Ａ、Ｂ、Ｄ、Ｅ、Ｘ）は、２つのグループにカテゴリー化される。メモリロケーションの第１グループ（Ｘ１、Ｘ２、．．．Ｘｎ、Ａ１、Ａ２、．．．Ａｎ）は各々、他のコンピュータによってアクセス可能である。メモリロケーションの第２グループ（Ｂ、Ｅ）は各々、メモリロケーションを含むローカルメモリを有するコンピュータによってのみアクセス可能である。第１グループにおけるメモリロケーションの値への変更のみが、他の全てのコンピュータに送信される。第２グループにおけるメモリロケーションが第１グループのメモリロケーションによって参照される（すなわち、第１グループロケーションが第２グループロケーションを指す）ことをアプリケーションプログラム実行が意味する場合に、第２グループにおけるメモリロケーションを第１グループに昇格するための昇格メカニズムが開示される。【選択図】図２４
2009512028.tif 000002
【特許請求の範囲】
【請求項１】
単一のコンピュータ上でのみ実行されるよう記述された少なくとも１つのアプリケーションプログラムの異なる部分が、複数のコンピュータの対応する異なるコンピュータ上で各々ほぼ同時に実行されるマルチコンピュータ環境においてほぼ同時に更新されるようにするために、独立したメモリロケーションを選択する方法であって、
（ｉ）各々が前記各コンピュータ上に複製されるメモリロケーションの第１グループを選択する段階と、
（ｉｉ）各メモリロケーションが物理的に位置付けられる前記コンピュータの特定のコンピュータにおいてのみ各々が存在するメモリロケーションの第２グループを無視する段階と、
（ｉｉｉ）前記第１グループ内のメモリロケーションが参照を開始するいずれかのメモリロケーションを前記第２グループから昇格する段階と、
（ｉｖ）前記第２グループ内にあるときに物理的に位置付けられたコンピュータ以外の前記コンピュータの他の全てのコンピュータに前記昇格された第２グループロケーションを複製する段階と、
（ｖ）前記複製され昇格された第２グループロケーションを前記第１グループに割り当てる段階と、
（ｖｉ）前記コンピュータのいずれか１つの第１グループロケーションに行なわれたあらゆる変更によって前記コンピュータの他のコンピュータの前記第１グループロケーションをほぼ同時に更新する段階と、
を含む方法。
【請求項２】
（ｖｉｉ）昇格された第２グループメモリロケーション自体が参照するいずれかの１つ又は複数のメモリロケーションを前記メモリロケーションの第２グループから昇格させ、これにより、昇格されたメモリロケーションによって参照されるメモリロケーションは、その参照しているメモリロケーションの昇格を継承する追加の段階を含む、
ことを特徴とする請求項１に記載の方法。
【請求項３】
（ｖｉｉｉ）前記メモリロケーションの第１グループをリストするテーブルを維持する追加の段階を含む、
ことを特徴とする請求項１又は２に記載の方法。
【請求項４】
（ｉｘ）別のサーバーコンピュータ上に全ての前記複数のコンピュータに対する１つの前記テーブルを維持する追加の段階を含む、
ことを特徴とする請求項３に記載の方法。
【請求項５】
（ｘ）前記複数のコンピュータの各々内に前記複数の前記テーブルの１つを維持する追加の段階を含む、
ことを特徴とする請求項３に記載の方法。
【請求項６】
前記メモリロケーションが、資産、構造、又は資源を含む、
ことを特徴とする請求項１−５のいずれか１項に記載の方法。
【請求項７】
単一のコンピュータ上でのみ実行されるよう記述された少なくとも１つのアプリケーションプログラムの異なる部分が、複数のコンピュータの対応する異なるコンピュータ上で各々ほぼ同時に実行されるマルチコンピュータシステムであって、
前記複数のコンピュータの各々は独立したローカルメモリを有し、前記複数のコンピュータの全ては、通信ネットワークによって相互接続されており、前記ローカルメモリ内に存在するメモリロケーションは、２つのグループ、すなわち各々が前記各コンピュータ上で複製されるメモリロケーションの第１グループと、前記各第２グループメモリロケーションが物理的に存在する前記コンピュータの特定のコンピュータ内にのみ各々が存在するメモリロケーションの第２グループとにカテゴリー化され、前記システムが、
前記通信ネットワークを介して、１つのコンピュータ内の前記第１グループのメモリロケーションに行なわれたあらゆる変更を前記他のコンピュータの全ての他の対応するメモリロケーションに対して更新するメモリ更新手段と、
前記アプリケーションプログラムの実行の結果として、前記第１グループのメモリロケーションによってトップで現在参照される前記第２グループのいずれかのメモリロケーションを前記第２グループから前記第１グループに昇格する昇格手段と、
を含むことを特徴とするマルチコンピュータシステム。
【請求項８】
前記昇格手段は、昇格された第２グループメモリロケーション自体が参照するいずれかの１つ又は複数のメモリロケーションを前記メモリロケーションの第２グループから昇格するよう動作可能な継承手段を含む、
ことを特徴とする請求項７に記載のシステム。
【請求項９】
前記昇格手段が、前記メモリロケーションの第１グループをリストするテーブルを含む、
ことを特徴とする請求項７又は８に記載のシステム。
【請求項１０】
別のサーバーコンピュータ内に存在する前記複数のアプリケーションプログラム実行コンピュータ全てに対して１つの前記テーブルを有する、
ことを特徴とする請求項９に記載のシステム。
【請求項１１】
複数の前記テーブルを前記複数のアプリケーションプログラム実行コンピュータの各々内に１つ有する、
ことを特徴とする請求項９に記載のシステム。
【請求項１２】
前記メモリロケーションが、資産、構造、又は資源を含む、
ことを特徴とする請求項７〜１１のいずれか１項に記載のシステム。
【請求項１３】
記憶媒体内に記憶され、請求項１〜６のいずれか１項に記載の方法を複数のコンピュータが実行できるように動作可能なプログラム命令のセットを含む、
ことを特徴とするコンピュータプログラム製品。
【請求項１４】
通信ネットワークを介して相互接続され、請求項１〜６のいずれか１項に記載の方法を確実に実行するよう動作可能な複数のコンピュータ。
【請求項１５】
請求項１〜６のいずれか１項に記載の方法を実行するため、或いは請求項７〜１２及び１４のいずれか１項に記載のコンピュータシステムを形成するために、少なくとも１つの他のコンピュータと協働するように適合された単一のコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ処理に関し、詳細には、通信ネットワークを介して相互接続された複数のコンピュータの同時オペレーションに関する。
【背景技術】
【０００２】
本出願人名でＷＯ２００５／１０３９２６（米国特許出願第１１／１１１，９４６号及び公開番号２００５−０２６２３１３が対応）において公開された国際特許出願番号ＰＣＴ／ＡＵ２００５／０００５８０（代理人整理番号５０２７Ｆ−ＷＯ）では、単一のコンピュータ上でのみ実行されるよう記述されたアプリケーションプログラムの異なる部分が、複数のコンピュータの対応する異なるコンピュータ上でほぼ同時にどのように動作することができるかを開示している。この同時オペレーションは、本出願の優先日現在で商用的に使用されていない。「Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｍｅｔｈｏｄ  ｏｆ  Ｏｐｅｒａｔｉｏｎ  ｆｏｒ  Ｍｕｌｔｉ−Ｃｏｍｐｕｔｅｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｐｒｏｃｅｓｓｉｎｇ  ａｎｄ  Ｃｏ−ｏｒｄｉｎａｔｅｄ  Ｍｅｍｏｒｙ  ａｎｄ  Ａｓｓｅｔ  Ｈａｎｄｌｉｎｇ（マルチ−コンピュータ分散処理及び調整されたメモリ及び資産処理のためのオペレーションのコンピュータアーキテクチャ方法）」という名称の米国特許出願第１１／２５９８８５号が対応する国際特許出願番号ＰＣＴ／ＡＵ２００５／００１６４１（代理人整理番号５０２７Ｆ−Ｄ１−ＷＯ）及び本出願の優先日では公開されていない本出願人名でのＰＣＴ／ＡＵ２００６／０００５３２（代理人整理番号５０２７Ｆ−Ｄ２−ＷＯ）でも更に詳細に開示されている。上記の先願の各々の明細書の内容は、全ての目的において相互参照により本明細書に組み込まれる。
【０００３】
簡潔に述べると、上述の特許明細書では、単一のコンピュータ上でのみ動作するように記述された少なくとも１つのアプリケーションプログラムが、独立したローカルメモリを各々が備えた幾つかのコンピュータ上で同時に動作できることが開示されている。このプログラムのオペレーションに必要なメモリロケーションは、各コンピュータの独立したローカルメモリに複製される。アプリケーションプログラムがいずれかの複製されたメモリロケーションに新しいデータを書き込む度に、当該新しいデータが送信され、各コンピュータの各対応するメモリロケーションに記憶される。従って、伝送遅延の可能性は別として、各コンピュータは、そのコンテンツが互いのコンピュータのローカルメモリと実質的に同じであり、且つこれを維持するよう更新されるローカルメモリを有する。全てのアプリケーションプログラムは、一般に、新しいデータが書き込まれるよりも遙かに頻繁にデータを読み取るので、上述の構成により、コンピュータ処理速度における相当な利点を達成することが可能になる。詳細には、こうした方策によって、商品通信ネットワークによって相互接続された２つ又はそれ以上の汎用コンピュータが、単一のコンピュータ上でのみ実行されるよう記述されたアプリケーションプログラム下で同時に実行し動作することが可能になる。
【０００４】
多くの場合、上述の構成は満足に機能する。これは、更新遅延が存在する可能性があるとプログラマーが認識し、プログラムのフローを調整してこれを解決することができる場合に特に当てはまる。しかしながら、最新のコンテンツではなく古いコンテンツ又は値を用いることで問題が発生し得る場合がある。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明の根源は、更新する必要のあるデータのボリュームを低減することによって、マルチコンピュータシステムのオペレーション速度を向上させたいという要求である。
【課題を解決するための手段】
【０００６】
本発明の第１の態様によれば、単一のコンピュータ上でのみ実行されるよう記述された少なくとも１つのアプリケーションプログラムの異なる部分が、複数のコンピュータの対応する異なるコンピュータで各々ほぼ同時に実行されるマルチコンピュータ環境においてほぼ同時に更新される独立したメモリロケーションを選択する方法が開示され、本方法は、
（ｉ）各々が各コンピュータに複製されるメモリロケーションの第１グループを選択する段階と、
（ｉｉ）各メモリロケーションが物理的に位置付けられるコンピュータの特定のコンピュータにおいてのみ各々が存在するメモリロケーションの第２グループを無視する段階と、
（ｉｉｉ）第１グループ内のメモリロケーションが参照を開始するいずれかのメモリロケーションを第２グループから昇格する段階と、
（ｉｖ）第２グループ内にあるときに物理的に位置付けられたコンピュータ以外のコンピュータの他の全てのコンピュータに昇格された第２グループロケーションを複製する段階と、
（ｖ）複製され昇格された第２グループロケーションを第１グループに割り当てる段階と、
（ｖｉ）コンピュータのいずれか１つの第１グループロケーションに行なわれたあらゆる変更によってコンピュータの他のコンピュータの第１グループロケーションをほぼ同時に更新する段階と、
を含む。
【０００７】
本発明の第２の態様によれば、単一のコンピュータ上でのみ実行されるよう記述された少なくとも１つのアプリケーションプログラムの異なる部分が、複数のコンピュータの対応するコンピュータ上で各々ほぼ同時に実行されるマルチコンピュータシステムが開示され、複数のコンピュータの各々は独立したローカルメモリを有し、複数のコンピュータの全ては、通信ネットワークによって相互接続されており、ローカルメモリ内に存在するメモリロケーションは、２つのグループ、すなわち各々が各コンピュータ上で複製されるメモリロケーションの第１グループと、各第２グループメモリロケーションが物理的に存在するコンピュータの特定のコンピュータ内にのみ各々が存在するメモリロケーションの第２グループとにカテゴリー化され、該システムは、通信ネットワークを介して、１つのコンピュータ内の第１グループのメモリロケーションに行なわれたあらゆる変更を他のコンピュータの全ての他の対応するメモリロケーションに対して更新するメモリ更新手段と、アプリケーションプログラムの実行の結果として、第１グループのメモリロケーションによってトップで現在参照される第２グループのいずれかのメモリロケーションを第２グループから第１グループに昇格する昇格手段と、を含む。
【０００８】
本発明の第３の態様によれば、上記の方法を実行するため、或いは上記のコンピュータシステムを形成するために少なくとも１つの他のコンピュータと協働するように適合された単一のコンピュータが開示される。
【０００９】
本発明の第４の態様によれば、記憶媒体内に記憶され、複数のコンピュータが上記に定義された方法を実行することが可能となるよう動作可能なプログラム命令のセットを含むコンピュータプログラム製品が開示される。
【００１０】
本発明の第５の態様によれば、通信ネットワークを介して相互接続され、上述された方法を確実に実行するよう動作可能な複数のコンピュータが開示される。
【発明を実施するための最良の形態】
【００１１】
次に、本発明の好ましい実施形態を図面を参照しながら説明する。
【００１２】
ＪＡＶＡ（登録商標）言語に関連して実施形態を説明するが、本発明はこの言語に限定されず、特に、ＭＩＣＲＯＳＯＦＴ．ＮＥＴプラットフォーム及びアーキテクチャ（Ｖｉｓｕａｌ  Ｂａｓｉｃ、ＶｉｓｕａｌＣ、ＶｉｓｕａｌＣ＋＋、及びＶｉｓｕａｌＣ＃）、ＦＯＲＴＲＡＮ、Ｃ、Ｃ＋＋、ＣＯＢＯＬ、ＢＡＳＩＣ及び同様のものを含む他の言語（手続き、宣言、及びオブジェクト指向言語を含む）と共に使用できることは当業者には明らかであろう。
【００１３】
図１Ａに示すような仮想マシーンを作成することによってアプリケーションの特定の言語を利用する単一のコンピュータ又はマシーン（種々の製造業者のいずれかによって作製され、種々の異なる言語のいずれかで動作するオペレーティングシステム（又は等価な制御ソフトウェア又は他のメカニズム）を有する）を提供することは、従来技術で知られている。
【００１４】
図１Ａのコード及びデータ並びに仮想マシーン設定又は構成は、ＪＡＶＡ（登録商標）言語で記述され且つＪＡＶＡ（登録商標）仮想マシーン６１内で実行されるアプリケーションコード５０の形態を取る。従って、アプリケーションの目的とする言語がＪＡＶＡ（登録商標）言語である場合、マシーン製造業者及びコンピュータ又はマシーンの内部の詳細に関わらず、ＪＡＶＡ（登録商標）コードを操作できるＪＡＶＡ（登録商標）仮想マシーンが使用される。更なる詳細については、引用により本明細書に組み込まれる、米国のＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ  Ｉｎｃ．のＴ．Ｌｉｎｄｈｏｌｍ及びＦ．Ｙｅｌｌｉｎによる「Ｔｈｅ  ＪＡＶＡ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」  ２ｎｄ  Ｅｄｉｔｉｏｎ（ＪＡＶＡ（登録商標）仮想マシーン仕様）  第２版を参照されたい。
【００１５】
図１Ａのこの従来技術の構成は、図１Ｂに見られるように、便宜上「分散型ランタイム」又は「分散型ランタイムシステム」ＤＲＴ７１と呼ばれる付加的な機能を提供することによって、本発明の実施形態に従って修正される。
【００１６】
図１Ｂ及び１Ｃでは、アプリケーションコード５０は、矢印７５又は７５Ａ又は７５Ｂで示されるロード処理を介して分散型ランタイムシステム７１と協働してＪａｖａ（登録商標）仮想マシーンＭ１、Ｍ２、．．．Ｍｎにロードされる。本明細書で使用される用語「分散型ランタイム」及び「分散型ランタイムシステム」は、本質的には同義語であり、限定ではなく例証として、特定のプラットフォーム上で実行される特定の言語で記述されたソフトウェアをサポートするライブラリコード及びプロセスを含むことは一般に理解される。更に、分散型ランタイムシステムはまた、特定の分散型コンピュータ環境内で実行される特定の言語で記述されたソフトウェアをサポートするライブラリコード及びプロセスを含むことができる。ランタイムシステム（分散型ランタイムシステムであっても、又はそうでなくても）は、通常、システム呼出し、プログラム起動及び終了、及びメモリ管理などのプログラムとオペレーティングシステムとの間のインターフェースの詳細を処理する。バックグラウンドの目的で、従来の分散型コンピュータ環境（ＤＣＥ）（本発明の好ましい実施形態で使用される本発明の分散型ランタイム又は分散型ランタイムシステム７１の機能を提供しないもの）は、Ｏｐｅｎ  Ｓｏｆｔｗａｒｅ  Ｆｏｕｎｄａｔｉｏｎから利用可能である。この分散型コンピュータ環境（ＤＣＥ）は、マシーン上で実行されるソフトウェアに対するコンピュータ間通信の形式を実行するが、多くの制限の中でも、所要の修正又は通信オペレーションを実施することができない。その機能及びオペレーションの中で、好ましいＤＲＴ７１は、複数のマシーンＭ１、Ｍ２、．．．Ｍｎ間の特定の通信を調整する。更に、好ましい分散型ランタイム７１は、図１Ｃの各ＪＡＶＡ（登録商標）仮想マシーン７２又はマシーンＪＶＭ＃１、ＪＶＭ＃２、．．．ＪＶＭ＃ｎ上でＪＡＶＡ（登録商標）アプリケーション５０の矢印７５Ａ又は７５Ｂで示されるロード処理中にオペレーションに入る。読者が特定の実施例の利益を得ることができるように、ＪＡＶＡ（登録商標）言語及びＪＡＶＡ（登録商標）仮想マシーンに対して多くの実施例及び説明が提供されるが、本発明は、ＪＡＶＡ（登録商標）言語又はＪＡＶＡ（登録商標）仮想マシーンのいずれか、或いは他の何らかの言語、仮想マシーン、マシーン又はオペレーティング環境に限定されないことは、本明細書に提示される説明に照らせば理解されるであろう。
【００１７】
図１Ｃは、図１Ｂに各々が示されるＪＡＶＡ（登録商標）仮想マシーンの構成を修正された形式で示している。この場合も同じアプリケーションコード５０が各マシーンＭ１、Ｍ２．．．Ｍｎにロードされることは明らかであろう。しかしながら、矢印８３で示されている各マシーンＭ１、Ｍ２、．．．Ｍｎ間の通信は、マシーンハードウェアを介して物理的にルート指定されるが、各マシーン内の個々のＤＲＴ７１／１．．．７１／ｎによって制御されるのが有利である。従って、実際にはこれは、これら自体又は互いに直接通信するマシーンＭ１、Ｍ２．．．Ｍｎではなく、ネットワーク又は他の通信リンク５３を介して互いに通信するＤＲＴ７１／１，．．．７１／ｎとして概念化することができる。マシーンＭ１、Ｍ２．．．Ｍｎ又はＤＲＴ７１／１，７１／２．．．７１／ｎ間のこの直接通信、或いはこのような通信の組合せのいずれかが企図され含まれる。好ましいＤＲＴ７１は、トランスポート、プロトコル、及びリンクが独立した通信を提供する。
【００１８】
１つの共通アプリケーションプログラム又はアプリケーションコード５０及びその実行可能バージョン（場合によっては修正のある）は、複数のコンピュータ又はマシーンＭ１、Ｍ２．．．Ｍｎ全体で同時に又は並行して実行している。アプリケーションプログラム５０は、単一のマシーン又はコンピュータ上で実行するように（或いは、単一のコンピュータオペレーションをエミュレートする上述の特許出願のマルチコンピュータシステム上で動作するように）記述されている。本質的には、修正された構造は、個々のマシーンの各々上で同一のメモリ構造及びコンテンツを複製するものである。
【００１９】
用語「共通アプリケーションプログラム」は、単一のマシーン上で動作するよう記述され、複数のコンピュータ又はマシーンＭ１、Ｍ２．．．Ｍｎの各々全体又は一部で、或いは任意選択的に複数のコンピュータ又はマシーンＭ１、Ｍ２．．．Ｍｎのあるサブセットの各々でロード及び／又は実行されるアプリケーションプログラム又はアプリケーションプログラムコードを意味すると理解すべきである。言い換えると、アプリケーションコード５０において表された共通アプリケーションプログラムが存在する。これは、各々が個々に修正されてアプリケーションプログラム又はプログラムコードの修正されたコピー又はバージョンを生成する、単一のコピー又は複数の同一コピーのいずれかである。次いで、各コピー又はインスタンスは、対応するマシーン上で実行する準備がなされている。これらが修正された後の時点では、これらは、同様のオペレーションを実施し、互いに一貫性があり且つ整合性があるように動作する点で共通である。任意選択的に、本発明の実施形態を実施する複数のコンピュータ、マシーン、情報アプライアンス、又は同様のものは、本発明の実施形態を実施していない他のコンピュータ、マシーン、情報アプライアンス、又は同様のものと接続或いは結合することができることは理解されるであろう。
【００２０】
同じアプリケーションプログラム５０（例えば、並列マージソート、又は計算流体力学アプリケーション、又はデータマイニングアプリケーション）は、各マシーン上で実行されるが、当該アプリケーションプログラムの実行可能コードは、必要に応じて各マシーン上で修正され、各マシーン上の各実行インスタンス（コピー又は複製）が、他のマシーン上のそれぞれのインスタンス（又はコピー又は複製）のオペレーションと当該特定のマシーン上のローカルオペレーションを調整し、これらが、一貫性があり且つ整合性のある調整された様態で共に機能し、アプリケーションの１つのグローバルインスタンス（すなわち、「メタ−アプリケーション」）であるように見せる。
【００２１】
同じ又は実質的に同じアプリケーションコードのコピー又は複製は各々、相互運用し且つ接続されたマシーン又はコンピュータの対応するコンピュータにロードされる。各マシーン又はコンピュータの特徴は異なる可能性があるので、アプリケーションコード５０は、ロード前、又はロードプロセス中に修正し、或いは、幾つかの欠点はあるが、ロードプロセス後に修正し、各マシーン上でのアプリケーションコードのカスタマイズしたもの又は修正物を提供することができる。種々のマシーン上のプログラム又はアプリケーションコード間の何らかの相違点は、本明細書で説明される相互運用性、一貫性、及び整合性に対する他の要件が維持可能な限り許容することができる。以下で明らかになるように、マシーンＭ１、Ｍ２．．．Ｍｎの各々、及びすなわち、マシーンＭ１、Ｍ２．．．Ｍｎの全てが、同じ又は実質的に同じアプリケーションコード５０を有し、通常は、マシーン固有とすることができる修正を伴う。
【００２２】
各マシーンＭ１、Ｍ２．．．Ｍｎ上でのアプリケーションコード５０（又はその関連部分）のロード前、又はロード中、又は実行の前のあらゆる時点で、各アプリケーションコード５０は、同じ規則（又は僅かな最適化変更が各モディファイア５１／１、５１／２．．．５１／ｎ内で許容されているので実質的に同じ規則）に従って対応するモディファイア５１によって修正される。
【００２３】
マシーンＭ１、Ｍ２．．．Ｍｎの各々は、同じ（又は実質的に同じ又は類似の）モディファイア５１（幾つかの実施形態では、分散型ランタイム又はＤＲＴ７１として実装され、他の実施形態では、アプリケーションコード及びデータ５０への添付物として実装され、更に、ＪＡＶＡ（登録商標）仮想マシーン自体内に実装することができる）で動作する。従って、マシーンＭ１、Ｍ２．．．Ｍｎの全ては、必要とされる各修正に対して同じ（又は実質的に同じ又は類似の）モディファイア５１を有する。例えば、メモリ管理及び複製のため、初期化のため、ファイナライズのため、及び／又は同期化のために、別の修正が必要になる可能性がある（但し、全ての実施形態において、これらの修正タイプの全てが必要とされるわけではない）。
【００２４】
モディファイア５１及び分散型ランタイム７１の別の実施が存在する。例えば、図１Ｃの破線によって示されるように、モディファイア５１は、分散型ランタイム７１のコンポーネントとして、又はこの内部に実装することができ、従ってＤＲＴ７１は、モディファイア５１の機能及びオペレーションを実施することができる。或いは、モディファイア５１の機能及びオペレーションは、コード及びデータ５０内、又はＪＡＶＡ（登録商標）仮想マシーン自体内など、ＤＲＴ７１を実装するのに使用される構造、ソフトウェア、ファームウェア、又は他の手段の外部で実施することができる。１つの実施形態では、モディファイア５１及びＤＲＴ７１の両方が、ＤＲＴ及びモディファイアの機能を提供する単一のコンピュータプログラムコードに実装され又は記述される。この場合、モディファイア機能及び構造は、実際にはＤＲＴに含まれる。どのように実装されるかに関係なく、モディファイア機能及び構造は、アプリケーションコードプログラムの実行可能なコードを修正する役割を担い、分散型ランタイム機能及び構造は、コンピュータ又はマシーン間の通信を実施する役割を担う。１つの実施形態における通信機能は、各マシーン上のＤＲＴのコンピュータプログラムコード内の中間プロトコルレイヤを介して実施される。ＤＲＴは、例えば、ＪＡＶＡ（登録商標）言語で通信スタックを実施することができ、送信制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）を使用して、マシーン間の通信又は通話を提供することができる。これらの機能又はオペレーションは、多様な方法で実施することができ、本明細書に提供される説明の観点から、これらの機能又はオペレーションが構造及び／又は手順要素間、或いはコンピュータプログラムコード又はデータ構造間に厳密にどのように実施又は分割されるかについては、本発明には重要ではなく、不可欠なものでもない点は理解されるであろう。
【００２５】
しかしながら、図１に示された構成では、複数の個々のコンピュータ又はマシーンＭ１、Ｍ２．．．Ｍｎが提供され、その各々は、通信ネットワーク５３又は他の通信リンクを介して相互接続される。各個々のコンピュータ又はマシーンは、対応するモディファイア５１を備える。各個々のコンピュータはまた、通信ネットワークに接続する通信ポートを備えている。通信ネットワーク５３又は経路は、いずれかの電子信号方式、データ、又はデジタル通信ネットワーク又は経路とすることができ、インターネットを介したネットワーク接続、或いはＥＴＨＥＲＮＥＴ（登録商標）又はＩＮＦＩＮＩＢＡＮＤ及びこれらの拡張及び改良を含む何らかの共通ネットワーク構成といった、低速で、従って低コストの通信経路であるのが好ましい。好ましくは、コンピュータは、通信ネットワーク５３に接続する１つ又はそれ以上の公知の通信ポート（ＣＩＳＣＯ  Ｐｏｗｅｒ  Ｃｏｎｎｅｃｔ  ５２２４  Ｓｗｉｔｃｈなど）を備えている。
【００２６】
上述の構成の結果として、マシーンＭ１、Ｍ２、．．．、Ｍｎの各々が、例えば、１０ＭＢの内部又はローカルメモリ容量を有する場合、全体としてアプリケーションコード５０に利用可能な総メモリは、予想されるようにマシーンの数（ｎ）×１０ＭＢではない。これは、ｎ個のマシーン全ての内部メモリ容量の加法的な組合せでもない。そうではなく、１０ＭＢか、又は１０ＭＢよりも大きいがｎ×１０ＭＢよりも小さいある数である。マシーンの内部メモリ容量が異なる場合、これは許容可能であり、ひいては１つのマシーンの内部メモリが、マシーンの少なくとも１つの他のマシーンの内部メモリ容量よりも小さい場合には、マシーンのいずれかの最も小さなメモリのサイズは、このようなメモリ（又はその一部）が「共通」メモリ（すなわち、マシーンＭ１．．．Ｍｎの各々の類似の等価メモリ）として扱われるとき、又は共通アプリケーションコードを実行するのに使用されるときに、マシーンの最大メモリ容量として用いることができる。
【００２７】
しかしながら、各マシーンの内部メモリが処理される方式は、当初は性能に関する潜在的な制約となる可能性があるが、これがどのような改良されたオペレーション及び性能をもたらすかについては以下で明らかになるであろう。当然、各マシーンＭ１、Ｍ２．．．Ｍｎは、プライベート（すなわち、「非共通の」）内部メモリ容量を有する。マシーンＭ１、Ｍ２、．．．、Ｍｎのプライベート内部メモリ容量は通常はほぼ等しいが、必須ではない。例えば、マルチコンピュータシステムが、異なるエンティティによって所有又は操作される既存のコンピュータ、マシーン、又は情報アプライアンスを使用して実施又は編成されている場合、内部メモリ容量は全く異なる場合がある。他方、新しいマルチコンピュータシステムが実装されている場合、各マシーン又はコンピュータは、同一の内部メモリ容量を有するように選択されるのが好ましいが、これは必須ではない。
【００２８】
各マシーンの独立したローカルメモリは、そのマシーン上で実行されるアプリケーションプログラムの当該部分に割り当てられたマシーンの総メモリの当該部分だけを表わしている点は理解されるべきである。従って、他のメモリは、アプリケーションプログラム５０に関係のないマシーンのオペレーティングシステム及び他のコンピューテーションタスクが占有することになる。
【００２９】
プロトタイプマルチコンピュータシステムの非商用オペレーションは、システム内のあらゆるマシーン又はコンピュータが、あらゆる可能なメモリロケーション（例えば、そのローカル複製を有する）を利用しないか、或いはこれを参照する必要がないことを示す。結果として、各マシーンのローカルメモリが当該マシーンのオペレーションに十分である限り、何らかの他のマシーンに同一の各マシーンのローカルメモリがなくともマルチコンピュータシステムを動作させることが可能となる。すなわち、特定のマシーンが、幾つかの特定のメモリロケーション（例えばそのローカル複製を有する）を参照する必要がない場合、その特定のメモリロケーションが当該特定のマシーンにおいて複製されないことは問題ではない。
【００３０】
また、各マシーンにおいて及び接続され又は結合された複数のマシーン、コンピュータ、又は情報アプライアンスＭ１、Ｍ２、．．．、Ｍｎのコンステレーション又はネットワーク全体にわたって、所望の性能レベルを達成するように各マシーンの内部メモリ量を選択することが有利とすることができる。記載されたこれらの内部及び共通メモリを考慮すると、マシーン間に共通とすることができるメモリ量に制限がないことは、本明細書に示される説明に照らせば明らかであろう。
【００３１】
幾つかの実施形態では、複数の個々のコンピュータ又はマシーンの一部又は全ては、単一のハウジング又はシャーシ（Ｈｅｗｌｅｔｔ−Ｐａｃｋａｒｄ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｃｏｍｐany、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ、ＩＢＭ  Ｃｏｒｐｏｒａｔｉｏｎなどによって製造された、いわゆる「ブレードサーバー」など）、或いは、インテル、ＡＭＤ、又はその他によって製造され、もしくは単一のプリント基板又は単一のチップ又はチップセット内に実装されたマルチプロセッサ（例えば、対称マルチプロセッサ又はＳＭＰ）又はマルチコアプロセッサ（例えば、デュアルコアプロセッサ及びチップマルチスレッディングプロセッサ）内に包含することができる。同様に、マルチコア、マルチＣＰＵ、又は他の処理論理回路を有するコンピュータ又はマシーンも含まれる。
【００３２】
非ＪＡＶＡ（登録商標）言語又はアプリケーションコード環境で実施されるときには、一般化されたプラットフォーム、及び／又は仮想マシーン及び／又はマシーン及び／又はランタイムシステムは、当該プラットフォーム及び／又は仮想マシーン及び／又はマシーン及び／又はランタイムシステム環境の言語（例えば、限定ではないが、ソース−コード言語、中間−コード言語、オブジェクト−コード言語、マシーン−コード言語、及びいずれかの他のコード言語のいずれか１つ又はそれ以上を含む場合がある）でアプリケーションコード５０を動作させ、マシーン又はプロセッサ製造業者及びマシーンの内部詳細に関係なく、プラットフォーム、及び／又は仮想マシーン及び／又はマシーン及び／又はランタイムシステム及び／又は言語アーキテクチャを利用することができる。プラットフォーム及び／又はランタイムシステムが、仮想マシーン及び非仮想マシーンソフトウェア及び／又はファームウェアアーキテクチャ、並びにハードウェア及び直接ハードウェアコード化アプリケーション及び実装を含むことができる点は理解されるであろう。
【００３３】
仮想マシーン又は抽象マシーン環境のより一般的なセットにおいて、並びに現在及び将来のコンピュータ及び／又はコンピュータマシーン及び／又は情報アプライアンス又は処理システムにおいて、クラス及び／又はオブジェクトのいずれかを利用しない、或いは利用を必要としない場合があるが、本発明の構造、方法、及びコンピュータプログラム及びコンピュータプログラム製品は依然として適用可能である。クラス及び／又はオブジェクトのいずれかを利用しないコンピュータ及び／又はコンピュータマシーンの実施例は、例えば、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ及びその他によって製造された×８６コンピュータアーキテクチャ、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ及びその他によって製造されたＳＰＡＲＣコンピュータアーキテクチャ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ及びその他によって製造されたＰｏｗｅｒ  ＰＣコンピュータアーキテクチャ、及びＡｐｐｌｅ  Ｃｏｍｐｕｔｅｒ，  Ｉｎｃ及びその他によって製作されたパーソナルコンピュータ製品を含む。
【００３４】
クラス又はオブジェクトの概念を利用せずに実装されたコンピュータ、コンピュータマシーン、情報アプライアンス、及び仮想マシーン又は仮想コンピュータ環境のこれらのタイプでは、例えば、手続き型言語又は他の言語についての基本データタイプ（整数データタイプ、浮動小数点データタイプ、長データタイプ、ダブルデータタイプ、ストリングデータタイプ、文字データタイプ、及びブールデータタイプなど）、構造化データタイプ（アレイ及びレコードなど）、派生タイプ、又は他のコードもしくはデータ構造を含み、関数、ポインタ、コンポーネント、モジュール、構造、リファレンス、及びユニオンなどの環境を含むように一般化することができる。必要なときに組み合わせて適用されるこれらの構造及び手続きは、コンピュータ又はコンピュータ環境のメモリロケーション、アドレス範囲、オブジェクト、クラス、資産、資源、又はいずれかの他の手続き又は構造的態様が、必要な場合には、複数の個々のマシーンＭ１、Ｍ２．．．Ｍｎにわたって調整され整合性があり且つ一貫性のあるようにして作成、維持、動作、及び非動作もしくは削除が行われるコンピュータ環境を維持する。
【００３５】
アプリケーションコード５０のこの分析又は精査は、アプリケーションプログラムコード５０のロードの前、又はアプリケーションプログラムコード５０ロード処理中、又はアプリケーションプログラムコード５０ロード処理の後（或いはこれらのある組合せ）でも行なうことができる。これは、アプリケーションコードが、付加的な命令を備え、及び／又は他の場合には、意味保護プログラムマニピュレーションによって修正され、及び／又は任意選択的に入力コード言語から異なるコード言語に翻訳（例えばソース−コード言語又は中間−コード言語からオブジェクト−コード言語又はマシーン−コード言語）することができる点で、インストゥルメンテーション、プログラム変換、翻訳、又はコンパイル手続きに形容することができる。この文脈では、用語「「コンパイル」は、通常又は従来的に、コード又は言語における変更、例えばソースコードからオブジェクトコード又は１つの言語から別の言語への変更を包含することは理解される。しかしながら、本発明では、用語「コンパイル」（及びその文法上等価な語句）はこれに限定されず、同じコード又は言語内の修正をも含む又は包含することができる。例えば、コンパイル及びその等価な語句は、通常のコンパイル（例えば、限定ではなく例証として、ソース−コードからオブジェクトコードになど）と、ソース−コードからソース−コードへのコンパイル、並びにオブジェクト−コードからオブジェクトコードへのコンパイル、及びいずれかの変更された組合せを包含することは理解される。「疑似オブジェクト−コード」の形式のいわゆる「中間−コード言語」も含まれる。
【００３６】
限定ではなく例証として、１つの実施形態では、アプリケーションコード５０の分析又は精査は、オペレーティングシステムがハードディスクもしくは他の記憶デバイス、媒体、又はソースからアプリケーションコード５０を読み取り、これをメモリにコピーしてアプリケーションプログラムコードの実行を始める準備をすることなどによって、アプリケーションプログラムコードのロード中に行なわれる。別の実施形態では、ＪＡＶＡ（登録商標）仮想マシーンにおいて、分析又は精査は、ｊａｖａ（登録商標）．ｌａｎｇ．ＣｌａｓｓＬｏａｄｅｒ．ｌｏａｄＣｌａｓｓ  ｍｅｔｈｏｄ（例えば「ｊａｖａ（登録商標）．ｌａｎｇ．ＣｌａｓｓＬｏａｄｅｒ．ｌｏａｄＣｌａｓｓ（）」）のクラスロード処理中に行なうことができる。
【００３７】
代替的に、又はこれに加えて、アプリケーションコード５０（又はアプリケーションコードの一部）の分析又は精査は、オペレーションシステムがアプリケーションコードをメモリにロードした後など、アプリケーションプログラムコードロード処理後でも、或いは、例えば、ＪＡＶＡ（登録商標）仮想マシーンがアプリケーションコードを「ｊａｖａ（登録商標）．ｌａｎｇ．ＣｌａｓｓＬｏａｄｅｒ．ｌｏａｄＣｌａｓｓ（）」方法及び任意選択的に開始された実行を介して仮想マシーンにロードした後など、任意選択的にアプリケーションプログラムコードの関連した対応部分の実行が起動された後でも行うことができる。
【００３８】
コンピュータ技術分野の当業者であれば、限定ではないが、インストゥルメンテーション、プログラム変換、翻訳、又はコンパイル手段及び／又は方法を含む、コンピュータコードの修正に使用できる種々の実施可能な技術を認識しているであろう。
【００３９】
１つのこのような技術は、アプリケーションコードの言語の先の変更又は結果として生じる変更を伴うことなくアプリケーションコードへの修正を行なうものである。別のこのような技術は、オリジナルコード（例えば、ＪＡＶＡ（登録商標）言語ソース−コード）をＪＡＶＡ（登録商標）バイトコードなどの中間表現（又は中間−コード言語、又は疑似コード）に変換するものである。この変換が行なわれると、バイトコードに対し修正が行なわれ、その結果、変換を逆にすることができる。これは、改良されたＪＡＶＡ（登録商標）コードの所望の結果をもたらす。
【００４０】
別の実施可能な技術は、アプリケーションプログラムをソース−コードから直接、或いは前述の中間言語を介して又は何らかの他の中間手段を介してマシーンコードに変換するものである。次に、マシーンコードは、ロード及び実行前に修正される。更に別のこのような技術は、オリジナルコードを修正した後マシーンコードに変換される中間表現に変換するものである。
【００４１】
本発明は、全てのこのような修正ルート、及びこのようなルートの２つ、３つ、又はそれ以上の組合せをも包含する。
【００４２】
ＤＲＴ７１又は他のコード修正手段は、個々のマシーンＭ１、Ｍ２．．．Ｍｎの各々に対してメモリ構造及びコンテンツを作成又は複製する役割を担い、これにより複数のマシーンの相互運用が可能になる。幾つかの実施形態では、この複製されたメモリ構造が同一となる。他の実施形態では、このメモリ構造は、同一である部分と、同一でない他の部分とを有することになる。更に他の実施形態では、メモリ構造は、Ｂｉｇ  Ｅｎｄｉａｎ又はＬｉｔｔｌｅ  Ｅｎｄｉａｎフォーマット又は規定など、フォーマット又は記憶規定のみが異なる。
【００４３】
必要なときには組み合わせて適用されるこれらの構造及び手続きは、コンピュータ又はコンピュータ環境のメモリロケーション、アドレス範囲、オブジェクト、クラス、資産、資源、又はいずれかの他の手続き又は構造的態様が、必要な場合には、複数の個々のマシーンＭ１、Ｍ２．．．Ｍｎにわたって調整され整合性があり且つ一貫性のあるようにして作成、維持、動作、及び非動作又は削除が行われるコンピュータ環境を維持する。
【００４４】
従って、用語「１つ」、「単一の」、及び「共通」のアプリケーションコード又はプログラムとは、全てのマシーンＭ１、Ｍ２．．．Ｍｎが異なる（及び関係のない）プログラムではなく同じプログラム又はコードを動作又は実行しており、言い換えると、同じ又は実質的に同じアプリケーションコードのコピー又は複製が、相互運用し且つ接続されたマシーン又はコンピュータの各々にロードされる状況を含む。
【００４５】
分散型ソフトウェアを利用する従来の構成では、１つのマシーンのソフトウェアから別のマシーンに物理的に位置付けられたメモリへのメモリアクセスは通常、マシーンを相互接続しているネットワークを介して行なわれる。従って、各マシーンのローカルメモリは、いずれかの他のマシーンによってアクセスでき、従って、独立しているとはいえない。しかしながら、別のコンピュータ上に物理的に位置付けられたメモリへの読み取り及び／又は書き込みメモリアクセスは、コンピュータを相互接続している遅いネットワークの使用を必要とするので、これらの構成では、このようなメモリアクセスは、メモリ読み取り／書き込み処理オペレーションおいて、潜在的にはマシーンの中央処理ユニットの１０6−１０7サイクルのオーダー（最新のプロセッサ速度とした場合）のかなりの遅延を生じる可能性がある。最終的に、この遅延は、例えば通信ネットワークの速度、帯域幅、及び／又は待ち時間などの多数の要素に依存する。これは、主に、従来技術による構成における複数の相互接続されたマシーンの性能の低下の原因となる。
【００４６】
しかしながら、本構成では、全メモリロケーション（又はその一部のサブセット）の現在値が、メモリ読み取りの要求を生じる処理を実行するマシーン上に記憶されるので、メモリロケーション又はデータの全ての読み取りはローカルで満たされる。
【００４７】
同様に、全メモリロケーション（又はその一部のサブセット）の現在値が、メモリ書き込みの要求を生じる処理を実行するマシーン上に記憶されるので、メモリロケーション又はデータの全ての書き込みはローカルで満たされる。
【００４８】
このようなローカルメモリ読み取り及び書き込み処理オペレーションは通常、中央処理ユニットの１０2−１０3サイクル内で満たされる。従って、実際には、包含及び／又は書き込みのメモリアクセスの待機が遙かに少ない。また、各マシーンのローカルメモリは、いずれかの他のマシーンがアクセスすることができず、従って、独立しているといえる。
【００４９】
本発明は、トランスポート、ネットワーク、及び通信経路が独立しており、マシーン又はＤＲＴ間の通信がどのように行われるかには依存しない。１つの実施形態では、マシーン又はＤＲＴ間の電子メール（Ｅメール）交換でも通信には十分とすることができる。
【００５０】
上記に関連して、図１のアプリケーションプログラム５０がほぼ同時に実行されている、２より大きいか又は等しい整数であるマシーンＭ１、Ｍ２、．．．Ｍｎの数「ｎ」が存在することが図２から分かるであろう。これらのマシーンには、階層順序で数１、２、３．．．などが割り当てられる。この順序は通常、マシーン２及び３が階層的に隣接し、マシーン「ｎ」及び１も同様であるようにループ又は閉鎖されている。ロックサーバーとして動作するように、種々のハウスキーピング機能を実行できるように提供される別のマシーンＸが存在することが好ましい。詳細には、別のマシーンＸは、低価値のマシーンであり、プロセッサ速度などの所望の属性を有することができる他のマシーンよりも遙かに安価にすることができる。更に、マシーンＸが故障した場合の冗長性を提供するために、付加的な低価値マシーン（Ｘ＋１）が利用可能であるのが好ましい。２つのこのようなサーバーマシーンＸ及びＸ＋１が提供された場合、これらは、簡単にするために、クラスタ構成でデュアルマシーンとして動作するのが好ましい。マシーンＸ及びＸ＋１は、必要に応じて、本発明に従うマルチコンピュータシステムとして動作することができる。しかしながら、これは、一般に望ましくない複雑さをもたらすことになる。マシーンＸが提供されない場合、ハウスキーピング機能などのマシーンＸの機能は、他のマシーンの１つ、又は幾つか、或いは全てによって提供される。
【００５１】
引用により上記が組み込まれた本明細書では、各ローカルメモリのコンテンツが送信遅延は別として、実質的に同一であることを確保するように対応するメモリロケーションを更新することができるシステムを開示している。しかしながら、マシーンの数が増え且つアプリケーションプログラムの複雑さも増すにつれて、通信ネットワーク５３を介して送信する必要のあるデータのボリュームも増える。
【００５２】
この問題を克服するために、本発明の１つの実施形態によれば、潜在的に更新を必要とするメモリロケーションは、少なくとも２つのカテゴリーに分割される。第１カテゴリーは、複数のマシーンのいずれか２つ又はそれ以上によってアクセス可能なメモリロケーションからなり、従って、連続的に更新されるはずである。第２カテゴリーは、メモリロケーションが物理的に位置付けられるローカルマシーンによってのみアクセス可能なメモリロケーションからなる。これらのメモリロケーションにおいては、最初に、他のマシーン全てに対して当該メモリロケーションのコンテンツを複製し、次いで、オリジナルローカルメモリコンテンツが変更される度に、複製されたメモリロケーションのコンテンツを更新し続けることは望ましいことではない。２つのカテゴリーに分類されるメモリロケーションは、関係のあるメモリロケーションを指すポインタが存在するかどうかによって容易に区別することができる。幾つかのメカニズム又はモードが存在し、これによってこのカテゴリー化及びデータ転送を行なうことができる。
【００５３】
ここで図３を参照すると、複数のマシーンＭ１、Ｍ２、．．．．．Ｍｎ（存在する場合はいずれかのサーバーマシーンＸ以外）の各々は、概略的に示されたメモリロケーションを有する。マシーンＭ１では、クラスＸ１及びオブジェクトＢが存在する。マシーンＭ２では、マシーンＭ１についてと同じクラスＸ２、及びオブジェクトＤが存在する。マシーンＭｎでは、同じクラスＸｎと２つのオブジェクトＡ及びＥが存在する。メモリロケーションＸのコンテンツは、マシーンの各々について同じであり、各マシーンは、メモリロケーションＸからの読み取りと、メモリロケーションＸへの書き込みの両方を行なうことができる。この理由のために、メモリロケーションＸの境界は、二重線で示されている。
【００５４】
好ましくは、各メモリロケーションと、テーブル内の各メモリロケーションにアクセスできるマシーンとをリストするテーブルを維持することは、図２のサーバーマシーンＸに好都合である。このようなテーブルは、到達可能性テーブルといわれ、図４に示される。図４のテーブルの第１行は、マシーンＭｎによってのみアクセスできるメモリロケーションＡを扱う。図４のテーブルの第２行は、マシーンＭ１によってのみアクセスできるメモリロケーションＢを扱う。同様に、オブジェクトＤは、マシーンＭ２によってのみアクセスでき、オブジェクトＥは、マシーンＭｎによってのみアクセスできる。しかしながら、クラスＸは、マシーンＭ１、Ｍ２及びＭｎの全てによってアクセスすることができる。
【００５５】
上述の複数マシーン環境では、クラスＸのコンテンツがマシーンの１つによって書き込まれることによって変更された場合、そのコンテンツの変更をネットワーク５３を介して他のマシーン全てに送信する必要がある。しかしながら、オブジェクトＡ、Ｂ、Ｄ及びＥは各々、単一のマシーンによってのみアクセスでき、そのローカルマシーンだけがアクセスすることができるので、これらのメモリロケーションのコンテンツを作成又は更新することのいずれにおいてもあまり意味がない。
【００５６】
特定のマシーン、例えばマシーンＭｎによって処理が行なわれている間、クラスＸｎがオブジェクトＡを参照する必要がある場合には、クラスＸｎは、オブジェクトＡを指すといわれる。これは、クラスＸｎからオブジェクトＡを指す矢印によって図５に示されている。オブジェクトＡのステータスにおける変更は、他のマシーン全てによってアクセス又は参照できることを意味する。この理由のために、図５ではこれはオブジェクトＡｎと名付けられ、二重線で囲まれており、オブジェクトＡ１、Ａ２、その他として他のマシーンの各々において再現される。更に、矢印は、各対応するクラスＸ１、Ｘ２、その他から対応する参照オブジェクトＡ１、Ａ２、その他を示す。オブジェクトＡのステータスのこの変更の結果として、図４の到達可能性テーブルの第１行は、図６に示されるように、オブジェクトＡがマシーンＭ１、Ｍ２、及びＭｎによって到達できることを示すように修正される。図２のサーバーマシーンＸは、図６の修正された到達可能性テーブルを使用し、オブジェクトＡのコンテンツが、１つのマシーンによって修正される場合に他のマシーン全てにネットワーク３を介して確実に送信されるようにする。
【００５７】
図７及び８は別の修正を示す。ここで、マシーンＭｎにおけるオブジェクトＡは、マシーンＭｎによって実行される処理の結果として、新しいオブジェクトＫを指している。結果として、図８に示されるように到達可能性テーブルに付加的な行を挿入することが必要になる。この新しい行は、オブジェクトＫがマシーンＭｎによってのみアクセスできることを示す。
【００５８】
このような場合において、図５に関して前述の修正が行なわれた場合、図９に示される状況が生じる。クラスＸｎはここでオブジェクトＡｎを指すので、前述と同様に、オブジェクトＡは他のマシーンの各々に複製される。しかしながら、オブジェクトＡｎ自体がオブジェクトＫを指すので、オブジェクトＫの各々は、他のマシーンの各々で複製される必要がある。これにより、オブジェクトＫ１、Ｋ２、．．．．．Ｋｎが生じる。更に、これらのオブジェクトの各々は、全マシーンによってアクセス可能であり、その結果、これらのオブジェクトは図９の二重線で示される。到達可能性テーブルへの対応する変更は、図１０に示され、ここではオブジェクトＫが、全マシーンによってアクセス可能であるように示されている。
【００５９】
上述の詳細な説明は、メモリロケーションに言及しているが、構造、資産、又は資源（ＪＡＶＡ（登録商標）ではクラス又はオブジェクトと呼ばれる）に等しく適用可能である。これらは、全マシーンによってグローバルに使用できる（グローバルな）名前又はタグが既に割り当てられている（異なるマシーンのローカルメモリ構造は異なる場合があることは理解されるので）。従って、１つのマシーンにおける特定のメモリロケーションに割り当てられたローカル又は実際の名前は、別のマシーンにおける対応するメモリロケーションに割り当てられたローカル名とは完全に異なるものとすることができる。このグローバル名称割り当ては、クラス又はオブジェクトが最初に初期化されるロード時のコンパイルプロセス中に起こるのが好ましい。これは、サーバーマシーンＸによって維持されたテーブルを介して最も好都合に行なわれる。このテーブルはまた、到達可能性データを含むことができる。
【００６０】
到達可能性データによって、構造、資産、又は資源（すなわち、メモリロケーション）を２つのカテゴリー又はクラスに分割できるようになることは、コンピュータ技術分野における当業者には明らかであろう。第１カテゴリーは、全てのマシーンによってアクセスできるこれらのロケーションからなる。対応する全メモリロケーションが同じコンテンツ（更新データの送信による遅延を除く）を有するように、このようなメモリロケーションに関して実行される書き込み動作を全マシーンに分散させる必要がある。しかしながら、第２カテゴリーに関しては、これらのメモリロケーションがローカルマシーンによってのみアクセス可能であるので、これらのメモリロケーションへの書き込み動作は、他のマシーン全てに分散させる必要はなく、他のマシーン上の対応するメモリロケーションも必要ではない。このカテゴリー化の結果として、データのかなりの量を１つのマシーンから他のマシーンに送信する必要がなくなり、よって、ネットワーク５３上のトラフィックの量がかなり低減される。
【００６１】
前述の説明では、サーバーマシーンＸ内に位置付けられ且つ該サーバーマシーンＸによって維持される単一到達可能性テーブルが提供される。しかしながら、各マシーンがその固有の到達可能性テーブルを操作することが望ましい場合には、サーバーマシーンＸなしでコンピュータシステムを動作させることもできる。図１１−１４は、図４、６、８、及び１０それぞれに対応する条件下での個々のマシーンについての個々の到達可能性テーブルを示している。
【００６２】
すなわち、図１１では、マシーンＭ１に対するテーブルは、クラスＸに対する行とオブジェクトＢに対する行とを有する。同様に、マシーンＭ２に対するテーブルは、クラスＸに対する行とオブジェクトＤに対する行とを有する。しかしながら、マシーンＭｎに対するテーブルは、クラスＸに対して１つと、オブジェクトＡ及びＥの各々に対して１つの３つの行を有する。図３と５の比較によって示される変更が生じると、クラスＸｎはオブジェクトＡｎを参照しているので、従って、他のクラスＸ１、Ｘ２などの全ては、対応するオブジェクトＡ１、Ａ２などを参照しなければならず、全マシーンは、オブジェクトＡに対するマシーンの到達可能性テーブル内に１つの行を含まなくてはならない。これは、図１２に示される状況である。他のマシーンは、オブジェクトＡに対してテーブルエントリを継承しているといわれる。
【００６３】
マシーンＭｎは、マシーンＭｎ上のクラスＸに対するテーブルエントリを調べることによってオブジェクトＡが他のマシーン全体の複製を必要とすることを判断することができる。図示の状況では、マシーンＭｎは、オブジェクトＡとクラスＸに対するテーブルエントリを比較することによって、複製についての肯定的決定を行なう。オブジェクトＡに対するテーブルエントリが、クラスＸに対するテーブルエントリ内に全てのマシーンを含む場合には、マシーンＭｎは、オブジェクトＡが他のいずれのマシーンに対して更に複製する必要がないことを正しく判断することができる。更に、テーブルエントリを他のマシーンに追加又は更新することも必要ではない。或いは、オブジェクトＡのテーブルエントリが、クラスＸのテーブルエントリ内にマシーンのフルセットを含まない場合には、マシーンＭｎは、オブジェクトＡに対するテーブルエントリを更新して、クラスＸに対するテーブルエントリ内にリストされたマシーンのセットを含めるようにし、更に、オブジェクトＡに対する新しいテーブルエントリ内にリストされた全マシーンに対して、マシーンＭｎ上のオブジェクトＡに対する新しいテーブルエントリ内にリストされたマシーンのセットでオブジェクトＡに対するそのローカルテーブルを更新するよう指示する。最後に、マシーンＭｎ上のクラスＸのマシーンのセットの継承の前にマシーンＭｎ上のオブジェクトＡに対するテーブルエントリ内には未だ存在しなかったマシーンのセットについては、マシーンＭｎは、これらのマシーン（すなわち、マシーンＭ１及びＭ２）に対して、オブジェクトＡに対するローカルテーブルエントリを追加し、オブジェクトＡ及び関連するクラスＸへのリファレンスに関してメモリ内にローカル複製を作成するよう指示する。
【００６４】
同様に、図７に関して、付加的なオブジェクトＫがマシーンＭｎによって作成されると、マシーンＭ１及びＭ２がオブジェクトＫのローカル複製を持たず、図７に示されるように、これらはオブジェクトＡ及びＫに対するテーブルエントリも持たないので、図１３に示すように、マシーンＭｎに対する到達可能性テーブル内にオブジェクトＫに対する付加的な行が作成される。図９に示すように、クラスＸへのオブジェクトＡのリファレンスの割り当ては、オブジェクトＡがクラスＸのテーブルエントリを継承することを必要とする。しかしながら、これに加えて、オブジェクトＡがオブジェクトＫを参照するときに、オブジェクトＫはまた、オブジェクトＡの新規に更新されたテーブルエントリ（クラスＸに対するテーブルエントリの継承値を含む）を継承することによって、クラスＸのテーブルエントリを間接的に継承しなくてはならない。マシーンＭｎ上でのオブジェクトＡ及びＫに対するテーブルエントリの更新に従って、マシーンＭｎは、オブジェクトＡ及びＫに対するテーブルエントリ内にリストされた全マシーンに対し、そのローカルテーブルを更新するよう指示し、更に、オブジェクトＡ及びＫそれぞれのテーブルエントリ内に本来は存在していない全マシーンに対し、オブジェクトＡ及びＫのローカル複製を作成するよう指示する。個々のマシーンに対して結果として生じたテーブルが、図１４に示されている。
【００６５】
更なる実施例を図１５に示す。ここで、Ａ１及びＡ２を示すオブジェクトは、マシーンＭ１及びＭ２上でシェアされるが、マシーンＭｎ上には存在しない。これは、サーバーマシーンＸによって利用される単一到達可能性テーブル又は個々のマシーンによって利用される複数到達可能性テーブルをそれぞれ示す図１６及び１７のオブジェクトＡに対するテーブルエントリ内に示されている。図１８に示されるように、アプリケーションプログラムの処理中のマシーンＭ２は、オブジェクトＤのリファレンスをオブジェクトＡに割り当てる。この結果、ＤＲＴ７１／２は、マシーンＭ２上のオブジェクトＤ及びＡに対するテーブルエントリを調べる。テーブルのこのインテロゲーションは、オブジェクトＤに対するテーブルエントリがオブジェクトＡに対するテーブルエントリ内にリストされたマシーンのセット内に全マシーンを含まないと判断する。従って、マシーンＭ２上のオブジェクトＤに対するテーブルエントリは、オブジェクトＤに対するテーブルエントリ内に未だ存在しないオブジェクトＡに対するテーブルエントリのマシーンを含むように更新され、この場合、これは付加的なマシーンＭ１である。このオペレーションによれば、マシーンＭ２は、マシーンＭ１に対し、マシーンＭ２上のオブジェクトＤに対する現在更新されたテーブルエントリ内にリストされたマシーンからなるオブジェクトＤに対するテーブルエントリを作成し、オブジェクトＤのローカル複製を作成するよう指示する。単一到達可能性テーブル及び複数到達可能性テーブルに対して結果として生じた変更は、図１９及び２０それぞれに示されている。
【００６６】
クラスＸに割り当てられたオブジェクトＡへのリファレンスの追加がマシーンＭ１によって実行される別の実施例が、図２１に示されている。結果として、クラスＸ及びオブジェクトＡに対するテーブルを調べ、オブジェクトＡがその到達可能性状態を変更するかどうかを判断する。オブジェクトＡに対するテーブルエントリが、クラスＸに対するテーブルエントリ内に全マシーンを含む場合には、追加の動作は行なわれない。しかしながら、図２１の場合と同様に、クラスＸが、オブジェクトＡに対するテーブルエントリに含まれないマシーンをそのテーブルエントリ内に含む場合には、到達可能性変更が行なわれる。この変更に従って、マシーンＭ１は、クラスＸに対するエントリを更新する。更に、マシーンＭ１は、他の全マシーンに対し、マシーンＭ１上のオブジェクトＡに対する現在更新されたテーブルエントリと同じになるようにオブジェクトＡに対するテーブルエントリを追加及び／又は更新するよう指示する。このオペレーションによれば、オブジェクトＡに対するテーブルエントリ内に未だ存在しないあらゆるマシーンは、オブジェクトＡに対するそのテーブルエントリを追加し、オブジェクトＡのローカルメモリ内に複製を作成するよう指示される（この場合には、マシーンＭｎ上でのみ必要とされる）。しかしながら、マシーンＭ１はまた、オブジェクトＡがオブジェクトＤを参照しており、よって、オブジェクトＤがオブジェクトＡの到達可能性の変更を継承しなくてはならないことを認知している。この結果、オブジェクトＤに対するテーブルエントリは、オブジェクトＡの更新されたテーブルエントリ内にリストされた全マシーンを含むように更新される。
【００６７】
上記に加えて、マシーンＭ１はまた、オブジェクトＤのテーブルエントリ内に以前に含まれていなかった全マシーン（この場合は、マシーンＭｎのみ）に対し、オブジェクトＤに対するテーブルエントリにマシーンＭ１上の更新されたテーブルエントリ値に等しい値を追加し、オブジェクトＤのローカルメモリ内に複製を作成するよう指示する。更に、マシーンＭ１は、他の全マシーン（この場合は、マシーンＭ２のみ）に対し、オブジェクトＤに対するテーブルエントリをマシーンＭ１上で更新された新しいテーブルエントリ値で更新するよう指示する。これらの変更を反映する単一到達可能性テーブル及び複数到達可能性テーブルが図２２及び２３それぞれに示されている。
【００６８】
ここで図２４を参照すると、図１８に示された位置は、オブジェクトＤへのリファレンスを割り当てられているマシーンＭ１のクラスＸによって修正される。この事象に関連して、オブジェクトＤ及びクラスＸの到達可能性テーブルは、到達可能性の変更が起きる可能性についてＤＲＴ７１／１によって調べられる。この結果、オブジェクトＤ及びクラスＸに対するテーブルエントリが比較され、オブジェクトＤに対するテーブルエントリがクラスＸのテーブルエントリ内にリストされた全マシーンを含む場合、付加的な動作を行なう必要はない。或いは、オブジェクトＤに対するテーブルエントリがクラスＸに対するテーブルエントリ内にリストされた全マシーンを含まない場合、到達可能性の変更が行なわれ、その結果として生じる動作が必要とされる。
【００６９】
図２４に示されるように、マシーンＭ１は、オブジェクトＤが到達可能性変更を受けたと判断する。この結果、マシーンＭ１は最初に、クラスＸに対するテーブルエントリ内に全マシーンを含むようオブジェクトＤに対するテーブルエントリを更新する。オブジェクトＤに対するテーブルエントリのマシーンのセット内に以前はなかった各新しいマシーンについて、マシーンＭ１は、このような各マシーンに対し、マシーンＭ１上のオブジェクトＤに対する現在更新されているマシーンエントリに等しいオブジェクトＤに対するローカルテーブルエントリを追加し、オブジェクトＤのローカルメモリ内に複製を作成するよう指示する。互いのマシーンについて、マシーンＭ１はまた、他のマシーンに対し、マシーンＭ１内のオブジェクトＤに対するテーブルエントリに等しくなるようにオブジェクトＤに対するそのテーブルエントリを更新するよう指示する。これらの変更を反映する単一到達可能性テーブル及び複数到達可能性テーブルを図２５及び２６にそれぞれ示す。
【００７０】
上記では、本発明の幾つかの実施形態のみを説明しており、本発明の範囲から逸脱することなく修正を行い得る点は当業者には明らかである。例えば、図４、６、８、及び１０のテーブルは全て、各メモリロケーションに対応する行を示している。実際には、そのローカルマシーンによってのみアクセス可能なＤ及びＥなどのメモリロケーションについては、テーブル内に行を有する必要はない。代わりに、このような行は、メモリロケーションが１つ又はそれ以上の他のマシーンによってアクセス可能になった場合にのみ作成される。同様に、ＪＡＶＡ（登録商標）への言及は、ＪＡＶＡ（登録商標）言語とＪＡＶＡ（登録商標）プラットフォーム及びアーキテクチャの両方を含む。
【００７１】
修正の全ての説明される事例では、ロード前、又はロード中、或いはロード後で未修正のアプリケーションコードの実行が開始される前に、アプリケーションコード５０が修正される場合、改良されたアプリケーションコードは、修正が行なわれるのに続いて未修正のアプリケーションコードの代わりにロードされて、未修正のアプリケーションコードの代わりに実行されることを理解されたい。
【００７２】
代替として、修正が、ロード後及び未修正のアプリケーションコードの実行の開始後に行なわれる事例では、未修正のアプリケーションコードは、修正が実施されるのに対応して修正アプリケーションコードと全体的に置き換えることができ、或いは、実行中の未修正のアプリケーションコードに増分的に修正が行なわれるときに部分的に又は増分的に置き換えることができる点を理解されたい。このような修正ルートのどれが使用されるかに関係なく、引き続き行なわれる修正が、未修正のアプリケーションコードの代わりに実行される。
【００７３】
複数のマシーンＭ１、Ｍ２．．．Ｍｎの各マシーン上で類似の等価のローカルオブジェクト（又はクラス、又は資産又は資源又は同様のもの）全てに対して「メタ−名前」又は「メタ−アイデンティティ」の形式であるグローバル識別子を使用することが有利である。例えば、複数の類似の等価オブジェクトの各マシーン上で各類似の等価ローカルオブジェクトの各固有のローカル名又はアイデンティティを追跡するのではなく、各マシーンがグローバル名称を特定のローカル名又はオブジェクトに関係付けるという条件の下（例えば、「グローバル名称７７８７」はマシーンＭ１上のオブジェクト「ローカルオブジェクト４５６」に対応し、「グローバル名称７７８７」はマシーンＭ２上のオブジェクト「ローカルオブジェクト８８５」に対応し、「グローバル名称７７８７」はマシーンＭ３上のオブジェクト「ローカルオブジェクト１１１」に対応する、など）で、各マシーン上の複数の類似の等価オブジェクトに対応するグローバル名称（例えば、「グローバル名称７７８７」）を定義又は使用することができる。
【００７４】
全オブジェクト（例えばメモリロケーション又はフィールド）の全ての又は一部のサブセットのリストを最初に記録又は作成するときに各ＤＲＴ７１によって作成されるテーブル又はリスト或いは他のデータ構造において、各マシーンＭ１、Ｍ２．．．Ｍｎ上のこうした各記録されたオブジェクトに対しマシーンＭ１、Ｍ２．．．Ｍｎの各々上で共通する又は類似した名前又はアイデンティティが存在することは、本明細書に提供される詳細な説明の観点から当業者には明らかであろう。しかしながら、個々のマシーンにおいては、各マシーンが、その固有の内部プロセスに従って異なるメモリロケーションにメモリ値又はコンテンツを記憶することができ、一般的には記憶することになるので、所与の名前又はアイデンティティに対応するローカルオブジェクトは、時間と共に変わることになり、又は変わる可能性がある。従って、ＤＲＴの各々におけるテーブル、又はリスト、或いは他のデータ構造は、一般に、単一のメモリ名又はアイデンティティに対応する異なるローカルメモリロケーションを有することになるが、各グローバル「メモリ名」又はアイデンティティは、異なるローカルメモリロケーション内に記憶された同じ「メモリ値又はコンテンツ」を有することになる。よって、各グローバル名称については、コンピュータの各々において１つのファミリーメンバーでの対応する独立ローカルメモリロケーションのファミリーが存在することになる。ローカルメモリ名は異なる場合もあるが、資産、オブジェクト、ロケーション、その他は、本質的には同じコンテンツ又は値を有する。よって、ファミリーは整合性がある。
【００７５】
本明細書で使用される用語「テーブル」又は「タビュレーション」は、データを順番に記憶及び読み取ることのできるあらゆるフォーマットのリスト又は編成されたデータ構造を含むことが意図される。
【００７６】
ロード中のアプリケーションプログラムコード５０の上述の修正は、多くの方法で又は多様な手段で達成できることは、本明細書に提供される説明の観点から当業者には明らかであろう。これらの方法又は手段は、限定でないが、少なくとも以下の５つの方法、及びこれらの５つの方法の変形又は組合せを含む。
（ｉ）ロード時の再コンパイル
（ｉｉ）プリコンパイルによるロード前の処理
（ｉｉｉ）ロード前のコンパイル
（ｉｖ）「ジャスト−イン−タイム（ＪＩＴ）」コンパイル
（ｖ）ロード後の再コンパイル（但し、又は例えば、分散環境での関連した又は対応するアプリケーションコードの実行前）。
【００７７】
従来、用語「コンパイル」とは、例えばソースからオブジェクトコード又は１つの言語から別の言語へのコード又は言語の変換を意味する。明確には、本明細書における用語「コンパイル」（及びその文法的に等価のもの）の使用はこれに限定されず、同じコード又は言語内での修正を含む又は包含することができる。
【００７８】
コンピュータ及び／又はプログラミング技術分野における当業者であれば、付加的なコード又は命令が既存のコード又は命令に挿入されてこれを修正する場合、既存のコード又は命令セットは、オフセット、分岐、属性、マークアップ、及び同様のものが正しく処理され又は応じられるように更なる修正（例えば、シーケンシャル命令の再ナンバリングによってなど）を必要とする可能性があることを認識するであろう。
【００７９】
同様に、ＪＡＶＡ（登録商標）言語では、メモリロケーションは、例えばフィールドタイプ及びアレイタイプの両方を含む。上記の説明は、フィールドを扱っており、アレイタイプに必要な変更は、本質的には同じ必要な変更を加えている。また本発明は、Ｍｉｃｒｏｓｏｆｔ．ＮＥＴプラットフォーム及びアーキテクチャ（ＶｉｓｕａｌＢａｓｉｃ、Ｖｉｓｕａｌ  Ｃ／Ｃ＋＋、及びＣ＃）、ＦＯＲＴＲＡＮ、Ｃ／Ｃ＋＋、ＣＯＢＯＬ、ＢＡＳＩＣなどを含むＪＡＶＡ（登録商標）に類似したプログラミング言語（手続き型、宣言、及びオブジェクト指向言語を含む）に対し等しく適用可能である。
【００８０】
本明細書で使用される用語オブジェクト及びクラスとは、ＪＡＶＡ（登録商標）環境から派生したものであり、ダイナミックリンクライブラリ（ＤＬＬ）、又はオブジェクトコードパッケージ、或いは機能ユニット又はメモリロケーションなどの異なる環境から派生した類似語を包含するものとする。
【００８１】
例えば、限定ではないが、ロック手段、分散型ランタイム手段、モディファイア又は修正手段、及び同様のものを含む本発明の実施形態に関する種々の手段が説明される。本発明の少なくとも１つの実施形態では、これらの種々の手段のいずれか１つ又は各々は、コンピュータプログラムコード命令文又は命令（場合によっては、複数のコンピュータプログラムコード命令文又は命令によるものを含む）によって実施することができ、コンピュータ論理回路、プロセッサ、ＡＳＩＣ、論理又は電子回路ハードウェア、マイクロプロセッサ、マイクロコントローラ、又は他の論理内で実行し、このような論理又は回路のオペレーションを修正して、記載されたオペレーション又は機能を達成する。別の実施形態では、これらの種々の手段のいずれか１つ又は各々は、ファームウェアにおいて実施することができ、他の実施形態では、これらをハードウェアにおいて実施することができる。更に、本発明の少なくとも１つの実施形態では、これらの種々の手段のいずれか１つ又は各々は、コンピュータプログラムソフトウェア、ファームウェア、及び／又はハードウェアの組合せによって実施することができる。
【００８２】
上述の方法、手順、及び／又はルーチンのいずれか及び各々は、有利には、何らかの有形媒体上に記憶されるか、或いは電子、信号、又はデジタル形式で存在するコンピュータプログラム及び／又はコンピュータプログラム製品として実施することができる。このようなコンピュータプログラム又はコンピュータプログラム製品は、別個の、及び／又は、コンピュータ、コンピュータマシーン、又は情報アプライアンスのプロセッサ又はマイクロプロセッサなどにおいて、論理を処理する際に実行するためのモジュール、プログラム、又はサブルーチンとして、或いはいずれかの他の方法で編成された命令を含み；コンピュータプログラム又はコンピュータプログラム製品は、コンピュータが実行するオペレーション、或いはコンピュータプログラム又はコンピュータプログラム製品が存在又は実行されているコンピュータに結合され、接続され、或いは他の方法で信号通信中のコンピュータ上のコンピュータのオペレーションを修正する。このようなコンピュータプログラム又はコンピュータプログラム製品は、コンピュータ、コンピュータマシーン、及び／又は情報アプライアンスのオペレーション及びアーキテクチャの構造を修正し、コンピュータの技術上のオペレーションを変更し、本明細書で説明される技術的な効果を実現する。
【００８３】
従って、本発明は、記憶媒体に記憶されるか又はいずれかの形式で電子的に存在するプログラム命令のセットを備え、本明細書に記載され請求項のいずれかに含む方法、手順、ルーチン、又は同様のもののいずれかを複数のコンピュータが実施できるよう動作可能なコンピュータプログラム製品を含むことができる。
【００８４】
更に、本発明は、（限定ではないが）通信ネットワーク又は他の通信リンク又は経路を介して相互接続された、複数のコンピュータ、又は複数のコンピュータと対話するように適合された単一のコンピュータを含み、各々は、コンピュータの対応する異なるコンピュータの単一のコンピュータ上でのみ動作するよう記述されたアプリケーションコードの同じ部分又は異なる部分をほぼ同時に又は並行して実行するよう動作可能である。コンピュータは、コンピュータプログラム製品がロードされたとき、或いは後続の命令時に本明細書に説明され又は請求項のいずれかに記載された方法、手順、又はルーチンのいずれかを実行するようプログラムされている。同様に、本発明はまた、同じ又はほぼ類似したコンピュータと協働してマルチコンピュータシステムを形成するよう配列された単一のコンピュータをその範囲に含む。
【００８５】
要約すると、単一のコンピュータ上でのみ実行されるよう記述された少なくとも１つのアプリケーションプログラムの異なる部分が、複数のコンピュータの対応する異なるコンピュータで各々ほぼ同時に実行されるマルチコンピュータ環境においてほぼ同時に更新される独立したメモリロケーションを選択する方法が提供され、本方法は、
（ｉ）各々が各コンピュータに複製されるメモリロケーションの第１グループを選択する段階と、
（ｉｉ）各メモリロケーションが物理的に位置付けられるコンピュータの特定のコンピュータにおいてのみ各々が存在するメモリロケーションの第２グループを無視する段階と、
（ｉｉｉ）第１グループ内のメモリロケーションが参照を開始するいずれかのメモリロケーションを第２グループから昇格する段階と、
（ｉｖ）第２グループ内にあるとｋに物理的に位置付けられたコンピュータ以外のコンピュータの他の全てのコンピュータに昇格された第２グループロケーションを複製する段階と、
（ｖ）複製され昇格された第２グループロケーションを第１グループに割り当てる段階と、
（ｖｉ）コンピュータのいずれか１つの第１グループロケーションに行なわれたあらゆる変更によってコンピュータの他のコンピュータの第１グループロケーションをほぼ同時に更新する段階と、
を含む。
好ましくは、本方法は、
（ｖｉｉ）昇格された第２グループメモリロケーション自体が参照するいずれかの１つ又は複数のメモリロケーションをメモリロケーションの第２グループから昇格させ、これによって昇格されたメモリロケーションによって参照されるメモリロケーションは、その参照しているメモリロケーションの昇格を継承する追加の段階を含む。
好ましくは、本方法は、
（ｖｉｉｉ）メモリロケーションの第１グループをリストするテーブルを維持する追加の段階を含む。
好ましくは、本方法は、
（ｉｘ）別のサーバーコンピュータ上に全ての複数のコンピュータに対するテーブルを１つ維持する段階の更なるステップを含む。
或いは、この方法は、
（ｘ）複数のコンピュータの各々に複数のテーブルの１つを維持する追加の段階を含む。
【００８６】
好ましくは、メモリロケーションは、資産、構造、又は資源を含む。単一のコンピュータ上でのみ実行されるよう記述された少なくとも１つのアプリケーションプログラムの異なる部分が、複数のコンピュータの対応する異なるコンピュータ上で各々ほぼ同時に実行されるマルチコンピュータシステムであって、複数のコンピュータの各々は、独立ローカルメモリを有し、複数のコンピュータの全ては、通信ネットワークによって相互接続されており、ローカルメモリ内に存在するメモリロケーションは、２つのグループ、すなわち各々が各コンピュータ上で複製されるメモリロケーションの第１グループと、各第２グループメモリロケーションが物理的に存在するコンピュータの特定のコンピュータ内にのみ各々が存在するメモリロケーションの第２グループとにカテゴリー化され、本システムは、１つのコンピュータ内の第１グループのメモリロケーションに行なわれたあらゆる変更を他のコンピュータの全ての他の対応するメモリロケーションに対して通信ネットワークを介して更新するメモリ更新手段と、アプリケーションプログラムの実行の結果として、第１グループのメモリロケーションによってトップで現在参照される第２グループのいずれかのメモリロケーションを第２グループから第１グループに昇格する昇格手段とを含む。
【００８７】
好ましくは、昇格手段は、昇格された第２グループメモリロケーション自体が参照するいずれかの１つ又は複数のメモリロケーションをメモリロケーションの第２グループから昇格するよう動作可能な継承手段を含む。好ましくは、昇格手段は、メモリロケーションの第１グループをリストするテーブルを含む。
【００８８】
好ましくは、本システムは、別のサーバーコンピュータ内に存在する複数のアプリケーションプログラム実行コンピュータ全てに対して１つのテーブルを有する。
或いは、本システムは、複数のテーブルを複数のアプリケーションプログラム実行コンピュータの各々に１つ有する。
好ましくは、メモリロケーションは、資産、構造、又は資源を含む。
更に、記憶媒体内に記憶され、上記の方法のいずれかを複数のコンピュータが実行できるよう動作可能なプログラム命令のセットを含むコンピュータプログラム製品が提供される。
同様に、通信ネットワークを介して相互接続され、上記の方法のいずれかを確実に実行するよう動作可能な複数のコンピュータが提供される。
【００８９】
更に、上記の方法のいずれかを実行するため、又は上記のコンピュータシステムを形成するために、少なくとも１つの他のコンピュータと協働するように適合された単一のコンピュータが提供される。
【００９０】
本明細書で使用される用語「備える」（及びその文法的変形形態）は、「有する」又は「含む」といった包括的な意味で使用され、「だけからなる」という排他的意味では使用されない。
【図面の簡単な説明】
【００９１】
【図１Ａ】ＪＡＶＡ（登録商標）コードを動作し、これによって単一のＪＡＶＡ（登録商標）仮想マシーンを構成するよう配置された従来技術のコンピュータの概略図である。
【図１Ｂ】図１Ａに類似したコードの初期ロードを示す図である。
【図１Ｃ】各々がマルチコンピュータシステムを形成するためのＪＡＶＡ（登録商標）仮想マシーンである複数のコンピュータの相互接続を示す図である。
【図２】少なくとも１つの付加的なサーバーマシーンＸがサーバーとして接続された「ｎ」個のアプリケーション実行コンピュータの概略図である。
【図３】クラス及びオブジェクトを含むメモリロケーションを示す複数のマシーン全てにおけるメモリロケーションの概略マップである。
【図４】図３の種々のメモリロケーション、及び到達される能力を示すテーブルである。
【図５】図３に類似し、メモリロケーションＡを指すメモリロケーションＸの結果を示すマップである。
【図６】図５に対応する到着可能性テーブルである。
【図７】図３に類似し、新しいメモリロケーションＫを指すメモリロケーションＡを示すマップである。
【図８】図７に対応する到着可能性テーブルである。
【図９】図７に類似し、メモリロケーションＡを指すメモリロケーションＸの結果を示すマップである。
【図１０】図９に対応する到着可能性テーブルである。
【図１１】図４の到着可能性テーブルに対応する複数到着可能性テーブルを示す図である。
【図１２】図６の到着可能性テーブルに対応する複数到着可能性テーブルを示す図である。
【図１３】図８の到着可能性テーブルに対応する複数到着可能性テーブルを示す図である。
【図１４】図１０の到着可能性テーブルに対応する複数到着可能性テーブルを示す図である。
【図１５】追加のメモリ変更を示す図である。
【図１６】図１５のメモリ変更に対応する単一到着可能性テーブルを示す図である。
【図１７】図１５のメモリ変更に対応する複数到着可能性テーブルを示す図である。
【図１８】別のメモリ変更を示す図である。
【図１９】図１８のメモリ変更に対応する単一到着可能性テーブルを示す図である。
【図２０】図１８のメモリ変更に対応する複数到着可能性テーブルを示す図である。
【図２１】更に別のメモリ変更を示す図である。
【図２２】図２１のメモリ変更に対応する単一到着可能性テーブルを示す図である。
【図２３】図２１のメモリ変更に対応する複数到着可能性テーブルを示す図である。
【図２４】更に別のメモリ変更を示す図である。
【図２５】図２４のメモリ変更に対応する単一到着可能性テーブルを示す図である。
【図２６】図２４のメモリ変更に対応する複数到着可能性テーブルを示す図である。
【符号の説明】
【００９２】
５３  ネットワーク
Ｍ１  Ｍ２  Ｍｎ  マシーン
Ａ１  Ａ２  オブジェクト
Ｂ  オブジェクト
Ｄ１  Ｄ２  Ｄｎ  オブジェクト
Ｅ  オブジェクト
Ｘ１  Ｘ２  Ｘｎ  クラス
【図１Ａ】
2009512028.tif 000003
【図１Ｂ】
2009512028.tif 000004
【図１Ｃ】
2009512028.tif 000005
【図２】
2009512028.tif 000006
【図３】
2009512028.tif 000007
【図４】
2009512028.tif 000008
【図５】
2009512028.tif 000009
【図６】
2009512028.tif 000010
【図７】
2009512028.tif 000011
【図８】
2009512028.tif 000012
【図９】
2009512028.tif 000013
【図１０】
2009512028.tif 000014
【図１１】
2009512028.tif 000015
【図１２】
2009512028.tif 000016
【図１３】
2009512028.tif 000017
【図１４】
2009512028.tif 000018
【図１５】
2009512028.tif 000019
【図１６】
2009512028.tif 000020
【図１７】
2009512028.tif 000021
【図１８】
2009512028.tif 000022
【図１９】
2009512028.tif 000023
【図２０】
2009512028.tif 000024
【図２１】
2009512028.tif 000025
【図２２】
2009512028.tif 000026
【図２３】
2009512028.tif 000027
【図２４】
2009512028.tif 000028
【図２５】
2009512028.tif 000029
【図２６】
2009512028.tif 000030
【国際調査報告】
2009512028.tif 000031
2009512028.tif 000032