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