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