(57)【要約】【課題】  計算グリッドにおいて他の仮想マシンと相互協調するための組み込み機能を持った仮想マシンを動作させるための方法、装置、コンピュータ・プログラム製品、およびデータ処理システムを提供する。【解決手段】  データ処理システム内の１つまたは複数の装置において複数の仮想マシンが稼動する。各仮想マシンは、仮想マシン・クラスタにおいてグリッドのような態様で他の仮想マシンと相互協調してそれらと関連付けるための機能を組み込んでいる。仮想マシン・クラスタにおける各仮想マシンは、仮想マシン・クラスタ内のノードとして作用する。仮想マシンは、そのオブジェクトをオブジェクト・グループと関連して管理し、各仮想マシンが複数のオブジェクト・グループを管理することも可能である。仮想マシンは、オブジェクト・グループが仮想マシン・クラスタにおける仮想マシン間で移動し得るように情報を共有し、それによって、仮想マシン・クラスタが１つの論理仮想マシンとして作用することを可能にする。【選択図】  図３
2007519110.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システム内の仮想マシンを操作するための方法であって、
前記データ処理システム内の装置において稼動する仮想マシンによって管理されるメモリにオブジェクトを保存するステップと、
前記オブジェクトをオブジェクト・グループ内の複数のオブジェクトと関連付けるステップと、
前記オブジェクト・グループを前記仮想マシンと関連付けるステップであって、前記仮想マシンが仮想マシン・クラスタにおける他の仮想マシンと相互協調するための機能を取り込み、前記仮想マシン・クラスタにおける各仮想マシンが前記仮想マシン・クラスタ内のノードとして作用する、ステップと、
前記仮想マシン・クラスタの各仮想マシン内の複数のオブジェクト・グループを管理するステップと、
前記オブジェクト・グループが前記仮想マシンから前記仮想マシン・クラスタにおける異なる仮想マシンに移動することを可能にするステップと
を含む、方法。
【請求項２】
前記オブジェクト・グループを前記仮想マシンから関連解除するステップと、
前記オブジェクト・グループを前記仮想マシン・クラスタにおける前記異なる仮想マシンに移動させるステップと、
前記オブジェクト・グループを前記異なる仮想マシンに移動させることに応答して、前記オブジェクト・グループを前記異なる仮想マシンと関連付けるステップと
を更に含む、請求項１に記載の方法。
【請求項３】
複数のオブジェクト・グループのロケーションに関する情報を前記仮想マシン・クラスタにおける各仮想マシンと共有するステップを更に含む、請求項１に記載の方法。
【請求項４】
前記オブジェクト・グループおよび異なるオブジェクト・グループを、前記仮想マシンによって管理されたスレッドと関連付けるステップを更に含む、請求項１に記載の方法。
【請求項５】
前記オブジェクト・グループおよび前記異なるオブジェクト・グループを前記スレッドと関連したスレッド・ローカル・ヒープに保存するステップを更に含む、請求項４に記載の方法。
【請求項６】
前記オブジェクト・グループを前記スレッドと関連した第１スレッド・ローカル・ヒープに保存するステップと、
前記異なるオブジェクト・グループを前記スレッドと関連した第２スレッド・ローカル・ヒープに保存するステップと
を更に含む、請求項４に記載の方法。
【請求項７】
前記オブジェクト・グループを前記スレッドから関連解除するステップと、
前記スレッドを終了させるステップと、
前記スレッドの終了に応答して、前記オブジェクト・グループと前記仮想マシンによって管理されたスレッドとの間の関連なしで前記オブジェクト・グループを管理するステップと
を更に含む、請求項４に記載の方法。
【請求項８】
前記オブジェクトのロケーションとは無関係の前記オブジェクトに対するオブジェクト・ハンドルを作成するステップを更に含む、請求項１に記載の方法。
【請求項９】
前記オブジェクトに対するオブジェクト・ハンドルを作成するステップと、
前記オブジェクトが関連するオブジェクト・グループに対するグループ識別子を前記オブジェクト・ハンドルに保存するステップであって、前記グループ識別子が前記仮想マシン・クラスタにおいて一意的である、ステップと、
前記オブジェクトに対するオブジェクト識別子を前記オブジェクト・ハンドルに保存するステップであって、前記オブジェクト識別子が、前記オブジェクトと関連するオブジェクト・グループにおいて一意的である、ステップと、
を更に含む、請求項８に記載の方法。
【請求項１０】
前記オブジェクトのロケーションに無関係であり、前記オブジェクトが関連する前記オブジェクト・グループのロケーションに無関係である前記オブジェクトに対するオブジェクト参照を作成するステップを更に含む、請求項１に記載の方法。
【請求項１１】
前記オブジェクトが前記仮想マシンにあるとき、前記オブジェクトに対する第１オブジェクト参照を作成するステップと、
前記オブジェクトが関連するオブジェクト・グループを異なる仮想マシンに移動させるステップと、
前記オブジェクトが前記異なる仮想マシンにあるとき、前記オブジェクトに対する第２オブジェクト参照を作成するステップであって、前記第１オブジェクト参照および前記第２オブジェクト参照が同じである、ステップと
を更に含む、請求項１に記載の方法。
【請求項１２】
仮想マシンを操作するためにデータ処理システムにおいて使用するためのコンピュータ可読媒体におけるコンピュータ・プログラム製品であって、
前記データ処理システム内の装置において稼動する仮想マシンによって管理されるメモリにオブジェクトを保存するための手段と、
前記オブジェクトをオブジェクト・グループ内の複数のオブジェクトと関連付けるための手段と、
前記オブジェクト・グループを前記仮想マシンと関連付けるための手段であって、前記仮想マシンが仮想マシン・クラスタにおける他の仮想マシンと相互協調するための機能を取り込み、前記仮想マシン・クラスタにおける各仮想マシンが前記仮想マシン・クラスタ内のノードとして作用する、手段と、
前記仮想マシン・クラスタの各仮想マシン内の複数のオブジェクト・グループを管理するための手段と、
前記オブジェクト・グループが前記仮想マシンから前記仮想マシン・クラスタにおける異なる仮想マシンに移動することを可能にするための手段と
を含む、コンピュータ・プログラム製品。
【請求項１３】
前記オブジェクト・グループを前記仮想マシンから関連解除するための手段と、
前記オブジェクト・グループを前記仮想マシン・クラスタにおける前記異なる仮想マシンに移動させるための手段と、
前記オブジェクト・グループを前記異なる仮想マシンに移動させることに応答して、前記オブジェクト・グループを前記異なる仮想マシンと関連付けるための手段と
を更に含む、請求項１２に記載のコンピュータ・プログラム製品。
【請求項１４】
複数のオブジェクト・グループのロケーションに関する情報を前記仮想マシン・クラスタにおける各仮想マシンと共有するための手段を更に含む、請求項１２に記載のコンピュータ・プログラム製品。
【請求項１５】
前記オブジェクト・グループおよび異なるオブジェクト・グループを、前記仮想マシンによって管理されたスレッドと関連付けるための手段を更に含む、請求項１２に記載のコンピュータ・プログラム製品。
【請求項１６】
前記オブジェクト・グループおよび前記異なるオブジェクト・グループを前記スレッドと関連したスレッド・ローカル・ヒープに保存するための手段を更に含む、請求項１５に記載のコンピュータ・プログラム製品。
【請求項１７】
前記オブジェクト・グループを前記スレッドと関連した第１スレッド・ローカル・ヒープに保存するための手段と、
前記異なるオブジェクト・グループを前記スレッドと関連した第２スレッド・ローカル・ヒープに保存するための手段と
を更に含む、請求項１５に記載のコンピュータ・プログラム製品。
【請求項１８】
前記オブジェクト・グループを前記スレッドから関連解除するための手段と、
前記スレッドを終了させるための手段と、
前記スレッドの終了に応答して、前記オブジェクト・グループと前記仮想マシンによって管理されたスレッドとの間の関連なしで前記オブジェクト・グループを管理するための手段と
を更に含む、請求項１５に記載のコンピュータ・プログラム製品。
【請求項１９】
前記オブジェクトのロケーションとは無関係である前記オブジェクトに対するオブジェクト・ハンドルを作成するための手段を更に含む、請求項１２に記載のコンピュータ・プログラム製品。
【請求項２０】
前記オブジェクトに対するオブジェクト・ハンドルを作成するための手段と、
前記オブジェクトが関連するオブジェクト・グループに対するグループ識別子を前記オブジェクト・ハンドルに保存するための手段であって、前記グループ識別子が前記仮想マシン・クラスタにおいて一意的である、手段と、
前記オブジェクトに対するオブジェクト識別子を前記オブジェクト・ハンドルに保存するための手段であって、前記オブジェクト識別子が、前記オブジェクトと関連するオブジェクト・グループにおいて一意的である、手段と、
を更に含む、請求項１９に記載のコンピュータ・プログラム製品。
【請求項２１】
前記オブジェクトのロケーションに無関係であり、前記オブジェクトが関連する前記オブジェクト・グループのロケーションに無関係である前記オブジェクトに対するオブジェクト参照を作成するための手段を更に含む、請求項１２に記載のコンピュータ・プログラム製品。
【請求項２２】
前記オブジェクトが前記仮想マシンにあるとき、前記オブジェクトに対する第１オブジェクト参照を作成するための手段と、
前記オブジェクトが関連するオブジェクト・グループを異なる仮想マシンに移動させるための手段と、
前記オブジェクトが前記異なる仮想マシンにあるとき、前記オブジェクトに対する第２オブジェクト参照を作成するための手段であって、前記第１オブジェクト参照および前記第２オブジェクト参照が同じである、手段と
を更に含む、請求項１２に記載のコンピュータ・プログラム製品。
【請求項２３】
仮想マシンを操作するためのデータ処理システムにおける装置であって、
前記データ処理システム内の装置において稼動する仮想マシンによって管理されるメモリにオブジェクトを保存するための手段と、
前記オブジェクトをオブジェクト・グループ内の複数のオブジェクトと関連付けるための手段と、
前記オブジェクト・グループを前記仮想マシンと関連付けるための手段であって、前記仮想マシンが仮想マシン・クラスタにおける他の仮想マシンと相互協調するための機能を取り込み、前記仮想マシン・クラスタにおける各仮想マシンが前記仮想マシン・クラスタ内のノードとして作用する、手段と、
前記仮想マシン・クラスタの各仮想マシン内の複数のオブジェクト・グループを管理するための手段と、
前記オブジェクト・グループが前記仮想マシンから前記仮想マシン・クラスタにおける異なる仮想マシンに移動することを可能にするための手段と
を含む、装置。
【請求項２４】
前記オブジェクト・グループを前記仮想マシンから関連解除するための手段と、
前記オブジェクト・グループを前記仮想マシン・クラスタにおける前記異なる仮想マシンに移動させるための手段と、
前記オブジェクト・グループを前記異なる仮想マシンに移動させることに応答して、前記オブジェクト・グループを前記異なる仮想マシンと関連付けるための手段と
を更に含む、請求項２３に記載の装置。
【請求項２５】
複数のオブジェクト・グループのロケーションに関する情報を前記仮想マシン・クラスタにおける各仮想マシンと共有するための手段を更に含む、請求項２３に記載の装置。
【請求項２６】
前記オブジェクト・グループおよび異なるオブジェクト・グループを、前記仮想マシンによって管理されたスレッドと関連付けるための手段を更に含む、請求項２３に記載の装置。
【請求項２７】
前記オブジェクト・グループおよび前記異なるオブジェクト・グループを前記スレッドと関連したスレッド・ローカル・ヒープに保存するための手段を更に含む、請求項２６に記載の装置。
【請求項２８】
前記オブジェクト・グループを前記スレッドと関連した第１スレッド・ローカル・ヒープに保存するための手段と、
前記異なるオブジェクト・グループを前記スレッドと関連した第２スレッド・ローカル・ヒープに保存するための手段と
を更に含む、請求項２６に記載の装置。
【請求項２９】
前記オブジェクト・グループを前記スレッドから関連解除するための手段と、
前記スレッドを終了させるための手段と、
前記スレッドの終了に応答して、前記オブジェクト・グループと前記仮想マシンによって管理されたスレッドとの間の関連なしで前記オブジェクト・グループを管理するための手段と
を更に含む、請求項２６に記載の装置。
【請求項３０】
前記オブジェクトのロケーションとは無関係である前記オブジェクトに対するオブジェクト・ハンドルを作成するための手段を更に含む、請求項２３に記載の装置。
【請求項３１】
前記オブジェクトに対するオブジェクト・ハンドルを作成するための手段と、
前記オブジェクトが関連するオブジェクト・グループに対するグループ識別子を前記オブジェクト・ハンドルに保存するための手段であって、前記グループ識別子が前記仮想マシン・クラスタにおいて一意的である、手段と、
前記オブジェクトに対するオブジェクト識別子を前記オブジェクト・ハンドルに保存するための手段であって、前記オブジェクト識別子が、前記オブジェクトと関連するオブジェクト・グループにおいて一意的である、手段と、
を更に含む、請求項３０に記載の装置。
【請求項３２】
前記オブジェクトのロケーションに無関係であり、前記オブジェクトが関連する前記オブジェクト・グループのロケーションに無関係である前記オブジェクトに対するオブジェクト参照を作成するための手段を更に含む、請求項２３に記載の装置。
【請求項３３】
前記オブジェクトが前記仮想マシンにあるとき、前記オブジェクトに対する第１オブジェクト参照を作成するための手段と、
前記オブジェクトが関連するオブジェクト・グループを異なる仮想マシンに移動させるための手段と、
前記オブジェクトが前記異なる仮想マシンにあるとき、前記オブジェクトに対する第２オブジェクト参照を作成するための手段であって、前記第１オブジェクト参照および前記第２オブジェクト参照が同じである、手段と
を更に含む、請求項２３に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理システムの改良に関し、特に、マルチコンピュータ・データ転送およびプログラム実行のための方法および装置に関するものである。
【背景技術】
【０００２】
インターネット関連技術およびウェブ関連技術の広範な採用は、数千の組織およびビジネス並びに数百万の個人によって物理的に支援される相互接続されたコンピュータのグローバル・ネットワークの成長を可能にした。最近、企業は、多数のコンピュータの計算能力を１つのグリッドに編成するように努力を払っている。グリッドとは、個々のコンピュータに対するローカル自動制御を維持しながら、計算能力およびデータストア容量の集合的な共用を行うための多数のコンピュータの論理的な編成のことである。
【０００３】
例えば、多くの企業は、グリッド・コンピューティングに関するコミュニティ主導の標準を開発するために、ＧＧＦ社によりサポートされる Global Grid Forum（商標）において相互協調している。Global Project（商標）は、グリッド関連技術を開発するために政府機関、企業、および大学によって支援された１つの活動であり、その結果、ウェブ・サービスに基づいてサービス指向のフレームワーク内にグリッドの概念を組み込むための主導体であるオープン・グリッド・サービス体系（ＯＧＳＡ）の開発が生じた。Globus Toolkit（商標）は、オープン・グリッド・サービス体系を具現化したものであり、グリッド対応アプリケーションを開発するためのソフトウェア・プログラミング・ツールを提供する。Java（商標）コミュニティ・グリッド（ＣｏＧ）・キットは、Javaフレームワークを介してグリッド・サービスにアクセスを行うGlobus Toolkitの部分である。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
Java CoGKitは、グリッド・サービスをアクセスするときにJavaアプリケーションをサポートするが、Java CoGKitはグリッドの計算特性をJava仮想マシン（ＪＶＭ）に組み込んでいない。従って、グリッドの計算特性を仮想マシンに組み込む方法、システム、および／または、コンピュータ・プログラムを有することは有益であろう。特に、動的に変化するグリッド計算環境において仮想マシンが実装されるように仮想マシン内でオブジェクト管理を行うことは有益であろう。
【課題を解決するための手段】
【０００５】
本発明は、計算グリッドにおいて他の仮想マシンと相互協調するための組み込まれた機能を仮想マシンの操作に与えるための方法、装置、コンピュータ・プログラム製品、およびデータ処理システムを提供する。データ処理システム内の１つまたは複数の装置において複数の仮想マシンが稼動する。その複数の仮想マシンにおける各仮想マシンは、仮想マシン・クラスタにおいてグリッドのような態様で他の仮想マシンと相互協調してそれと関連付けるための機能を組み込んでいる。仮想マシン・クラスタにおける各仮想マシンは、その仮想マシン・クラスタ内のノードとして作用する。仮想マシンは、自身のオブジェクトをオブジェクト・グループと関連して管理し、各仮想マシンが複数のオブジェクト・グループを管理することも可能である。仮想マシンは、オブジェクト・グループが仮想マシン・クラスタにおける仮想マシン間で移動し得るように情報を共有し、それによって、仮想マシン・クラスタが１つの論理仮想マシンとして作用することを可能にする。一般的なアプリケーション・モデルに従う単一のアプリケーション・イメージが、そのアプリケーションの実行がグリッド対応仮想マシンの複数のインスタンスにおよぶことを可能にし、それによって、そのアプリケーションの実行が複数の装置におよぶことを可能にするという方法でグリッド対応仮想マシン・クラスタにおいて実行され得る。
【０００６】
本発明の特徴と考えられる新規な構成は特許請求の範囲に示されている。本発明自体、更なる目的およびその利点は、添付図面と共に以下の詳細な説明を読むことによって最も良く理解できるであろう。
【発明を実施するための最良の形態】
【０００７】
一般に、本発明を構成し得る装置、または、本発明に関連する装置は、広範な種類のデータ処理テクノロジを包含している。従って、背景として、分散データ処理システムにおけるハードウェアおよびソフトウェア・コンポーネントの一般的な構成を、本発明を更に詳細に説明するに先立って説明することにする。
【０００８】
図面を参照すると、図１は、各々が本発明の一部分を実施し得るデータ処理システムの代表的なネットワークを示す。分散データ処理システム１００は、当該分散データ処理システム１００において相互に接続された種々の装置およびコンピュータの間の通信リンクを提供するために使用することが可能な媒体であるネットワーク１０１を含む。ネットワーク１０１は、ワイヤ・ケーブルまたは光ファイバ・ケーブルのような永続的接続、あるいは、電話通信または無線通信を介して行われる一時的接続を含み得る。図示の例では、サーバ１０２およびサーバ１０３がストレージ・ユニット１０４と共にネットワーク１０１に接続される。更に、クライアント１０５〜１０７もネットワーク１０１に接続される。クライアント１０５〜１０７およびサーバ１０２〜１０３は、メインフレーム、パーソナル・コンピュータ、パーソナル・デジタル・アシスタント（ＰＤＡ）等のような種々のコンピューティング装置によって代表されるものでよい。分散データ処理システム１００は、図示されていない更なるサーバ、クライアント、ルータ、その他の装置、およびピア・ツー・ピア・アーキテクチャを含み得る。
【０００９】
図示の例では、分散データ処理システム１００は、ライトウェート・ディレクトリ・アクセス・プロトコル（ＬＤＡＰ）、伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、ワイヤレス・アプリケーション・プロトコル（ＷＡＰ）等のような種々のプロトコルを使って相互に通信を行うネットワークおよびゲートウェイの世界的な集合体を表すインターネットをネットワーク１０１と共に含むことが可能である。もちろん、分散データ処理システム１００は、例えば、イントラネット、ローカル・エリア・ネットワーク（ＬＡＮ）、または広域ネットワーク（ＷＡＮ）のような多数の様々なタイプのネットワークも含み得る。例えば、サーバ１０２は、無線通信リンクを組み込んだクライアント１０９およびネットワーク１１０を直接にサポートする。ネットワーク対応電話１１１は無線リンク１１２を介してネットワーク１１０に接続し、ＰＤＡ１１３は無線リンク１１４を介してネットワーク１１０に接続する。電話１１１およびＰＤＡ１１３は、Bluetooth（商標）無線テクノロジのような適切なテクノロジを使って所謂パーソナル・エリア・ネットワーク（ＰＡＮ）またはパーソナル・アドホック・ネットワークを形成して、無線リンク１１５を介してそれら自身相互間でデータを直接転送することも可能である。同様の方法で、ＰＤＡ１１３は無線通信リンク１１６を介してＰＤＡ１０７にデータを転送することができる。本発明は、種々のハードウェア・プラットフォーム上で実施可能である。図１は、異機種コンピューティング環境の例として意図されており、本発明に対するアーキテクチャ上の限定として意図されたものではない。
【００１０】
次に図２を参照すると、本発明を実施し得る、図１に示されたデータ処理システムのようなデータ処理システムの代表的なコンピュータ・アーキテクチャが示される。データ処理システム１２０は、内部システム・バス１２３に接続された１つまたは複数の中央処理ユニット（ＣＰＵ）１２２を含む。システム・バス１２３は、ランダム・アクセス・メモリ（ＲＡＭ）１２４、リード・オンリ・メモリ１２６、および入出力アダプタ１２８を相互接続する。入出力アダプタ１２８は、プリンタ１３０、ディスク・ユニット１３２のような種々のＩ／Ｏ装置、または音声出力システム等のような図示されてない他の装置をサポートする。システム・バス１２３は、通信リンク１３６へのアクセスを行う通信アダプタ１３４にも接続している。ユーザ・インターフェース・アダプタ１４８は、キーボード１４０およびマウス１４２のような種々のユーザ装置またはタッチ・スクリーン、スタイラス、マイクロフォン等のような図示されてない他の装置を接続する。ディスプレイ・アダプタ１４４は、システム・バス１２３をディスプレイ装置１４６に接続する。
【００１１】
図２におけるハードウェアがシステムの実施形態に応じて変わり得ることは当業者には明らかであろう。例えば、システムは、Intel（商標）Pentium（商標）ベースのプロセッサおよびデジタル信号プロセッサ（ＤＳＰ）のような１つまたは複数のプロセッサ、並びに１つまたは複数のタイプの揮発性および不揮発性メモリを含み得る。図２に示されたハードウェアのほかに、またはそれの代わりに、他の周辺装置を使用することも可能である。図示の例は、本発明に関してアーキテクチャ上の限定を意味するものではない。
【００１２】
本発明は、種々のハードウェア・プラットフォーム上で実施し得ることに加えて、種々のソフトウェア環境で実施することも可能である。各データ処理システムにおいてプログラム実行を制御するために、一般的なオペレーティング・システムを使用することが可能である。例えば、或る装置はUnix（商標）オペレーティング・システムを実行し得るし、一方、別の装置は簡単なJavaランタイム環境を含むことも可能である。代表的なコンピュータ・プラットフォームは、グラフィック・ファイル、ワード処理ファイル、拡張可能マークアップ言語（ＸＭＬ）ファイル、ハイパーテキスト・マークアップ言語（ＨＴＭＬ）ファイル、ハンドヘルド・デバイス・マークアップ言語（ＨＤＭＬ）ファイル、ワイヤレス・マークアップ言語（ＷＭＬ）ファイル、並びに種々の他のフォーマットおよびタイプのファイルのような、種々のフォーマットおよび言語のハイパーテキスト・ドキュメントをアクセスするための周知のソフトウェア・アプリケーションであるブラウザを含み得る。
【００１３】
仮想マシン・クラスタ／グリッド
本発明は、図１および図２に関連して上述した種々のハードウェアおよびソフトウェア・プラットフォーム上で実施することが可能である。しかし、更に詳しく云えば、本発明は改良仮想マシンに関するものである。この改良仮想マシンは、残りの図に関連して説明するように、グリッドのような態様で同様の改良仮想マシンと対話するよう、グリッドの計算特性をその内部に含む。以下の図は、本発明がJava仮想マシン（ＪＶＭ）の改良として実施されるようにJavaテクノロジを組み込んだものとして説明されるが、本発明は、他のタイプの仮想マシンに対するテクノロジに関連して実施することも可能である。
【００１４】
次に図３を参照すると、本発明の一実施態様に従う、分散データ処理システムにおける仮想マシン・クラスタ／グリッドのブロック図が示される。ネットワーク２００が一組の仮想マシン２０１〜２０５を接続する。ネットワーク２００は図１におけるネットワーク１０１と同じであり、仮想マシン２０１〜２０５は、図１に示される任意の装置のような種々の装置においてサポートされ得る。
【００１５】
用語の提示として、クラスタは２以上の対話エンティティのセットである。仮想マシンのクラスタは、仮想マシン・クラスタ、仮想マシン・グリッド、または論理仮想マシンとも呼ばれる。クラスタ／グリッドにおいて動作するための機能を含む単一の仮想マシンはクラスタ化可能な仮想マシンまたはグリッド対応仮想マシンとも呼ばれる。クラスタ／グリッドに含まれる単一の仮想マシンは、クラスタ化仮想マシンまたはグリッド組み込み仮想マシンとも呼ばれる。
【００１６】
上述のように、本発明は、本発明の実施形態を具体化するための機能を含むように機能強化されたJava仮想マシンを使用して、Java環境において実施することが可能である。これとは別に、本発明は、Javaクラス・ライブラリへの拡張内で実施することも可能である。従って、上記の用語はJavaの分野で使用することが可能である。以下、グリッド対応ＪＶＭまたはグリッド組み込みＪＶＭはｇＪＶＭと呼ばれる。図３は、ｇＪＶＭ２０１〜２０５を含む１つのｇＪＶＭクラスタを接続するネットワーク２００を示す。
【００１７】
単一のクラスタ化仮想マシンまたは単一のグリッド組み込み仮想マシンは、所与の仮想マシン・クラスタ、所与の仮想マシン・グリッド、または所与の論理仮想マシンにおけるノードと呼ばれることもある。図３に示された例では、一組の仮想マシンが、グリッドのような態様で単一の仮想マシン・クラスタにおける複数のノードとして相互作用する。本発明は、仮想マシン・クラスタにおける複数のノードをサポートし、分散データ処理システムは、複数の仮想マシン・クラスタ／グリッドをサポートすることが可能である。更に、所与の装置が、複数のクラスタ化可能／グリッド対応仮想マシン、または複数のクラスタ化／グリッド組み込み仮想マシンをサポートすることも可能である。換言すると、所与の装置は第１のクラスタ化／グリッド組み込み仮想マシンおよび第２のクラスタ化／グリッド組み込み仮想マシンをサポートすることができ、ここで、２つのクラスタ化／グリッド組み込み仮想マシンは２つの別個の且つ独立した仮想マシン・クラスタ／グリッドに含まれ、２つのクラスタ化／グリッド組み込み仮想マシンおよび２つの仮想マシン・クラスタ／グリッドは一意的に識別可能およびアクセス可能である。
【００１８】
ノードを区別するため、所与の仮想マシン・クラスタ／グリッドで遂行されるプロセスのタイプに応じて、その所与の仮想マシン・クラスタ／グリッドにおける対話ノードをローカル・ノードまたはリモート・ノードと呼ぶことが都合よいかもしれない。例えば、所与のｇＪＶＭの視点から、その所与のｇＪＶＭは、ローカル・ノード、ローカルｇＪＶＭ、またはローカルｇＪＶＭノードと呼ぶことができる。所与のｇＪＶＭの視点から、ローカル・ノードと対話する別のｇＪＶＭは、それが同じ装置におけるものであっても、あるいは他の装置において実行中のものであっても、リモート・ノード、リモートｇＪＶＭ、またはリモートｇＪＶＭノードと呼ぶことができる。
【００１９】
本発明は、各々が少なくとも１つのクラスタ化仮想マシン・ノードをサポートする一組のマシンまたは装置で、アプリケーションが稼動することを透過的に許容することに関連する。例えば、マルチスレッドJavaアプリケーションは複数のｇＪＶＭで稼動し得るが、そのスレッドがどのマシンでディスパッチされたかを知らないであろうし、知る必要がないであろう。仮想マシン・クラスタは、クラスタ化仮想マシンの使用可能なセットでアプリケーションのスレッドを動的に管理し、分配する。
【００２０】
各仮想マシン・クラスタは単一の基本ノードを有する。図３では、ｇＪＶＭ２０１は基本ｇＪＶＭノードであり、ｇＪＶＭ２０２〜２０５は非基本ｇＪＶＭノードである。基本ノードは、クラスタにおける非基本ノードのために遂行される或る義務または責任を持つことがある。例えば、基本ノードは、仮想マシン・クラスタに対するクラス・ローディング（クラスパス）およびファイル・アクセスのようなアプリケーション環境およびそのアプリケーションに対するコンテキストを定義する一組のオブジェクトを有することがある。
【００２１】
基本ノードおよび非基本ノードはわずかに異なる態様で起動され、それによって、それが基本ノードとしてまたは非基本ノードとして作用するものであるという表示を所与のクラスタ化可能仮想マシンに提供することが可能である。例えば、Java環境におけるクラスタ化可能仮想マシンは、下記の例示的なインスタンス化コマンド
java [-main -clusterName][mainClass]
によって起動され得る。この「java」コマンドは、クラスタ化可能仮想マシンをインスタンス化し得る、即ち、クラスタ化可能仮想マシンの所与のコピーの実行を開始し得る。「-main」パラメータは、ｇＪＶＭの特定のインスタンスが、「-clusterName」パラメータによって識別されるｇＪＶＭクラスタ内で基本ｇＪＶＭとして作用するものであることを表す。ｇＪＶＭの特定のインスタンスが非基本ｇＪＶＭノードとして作用するものであるとき、インスタンス化コマンドは「-main」パラメータを含まないであろう。「mainClass」パラメータは、ｇＪＶＭによって実行されるべきメイン・プログラムを指定する。このように、基本ノードおよび非基本ノードを構成するソフトウェア・モジュールは互いのコピーであってもよく、それによってソフトウェアが実質的に同じになる。即ち、基本ノードが非基本ノードとはわずかに異なるインスタンス化プロセスを受けるために、基本ノードおよび非基本ノードが異なる行動を示すことがあるが、基本ノードおよび非基本ノードは、所謂、対等またはクローンとなり得る。
【００２２】
基本ノードおよび非基本ノードは、単に、クラスタ化可能仮想マシンの独立したインスタンスであってもよいので、即ち、基本ノードおよび非基本ノードは、例えば、異なる方法で初期設定されることによって、２つの異なるオペレーション・モードに従って単に機能するので、基本ノードは、システムが起動した後、保守または他の目的で基本ノードをシャットダウンすることを可能にするために、その責任を非基本ノードに委譲することが可能である。  
【００２３】
グリッド対応仮想マシン
次に図４を参照すると、本発明の一実施形態に従って仮想マシンをクラスタ化可能／グリッド対応仮想マシンとして機能拡張するために使用することが可能なコンポーネントおよび情報のブロック図が示される。図４は、図３におけるノード２０１〜２０５のいずれかのような単一のクラスタ化可能仮想マシンを表すｇＪＶＭノード３００を示す。ｇＪＶＭノード３００は、図示されていないが一般的なＪＶＭと同様の方法で種々のタスクを遂行するための他のコンポーネントおよび情報を含む。換言すると、ｇＪＶＭ３００は本発明の機能を含むように機能拡張された代表的なＪＶＭであると考えることができる。ｇＪＶＭノード３００は、複数のタイプのテーブルを含むものとして示されるが、本発明の機能をもたらすために、異なるタイプの情報および異なる情報フォーマットが所与のクラスタ化可能仮想マシン・ノードによって管理され得ることは当業者には明らかであろう。
【００２４】
Ｐ２Ｐ通信ユニット３０２は、各ｇＪＶＭが任意の他のｇＪＶＭとピア・ツー・ピア態様で通信すること、特に、ｇＪＶＭのパフォーマンス情報を他のｇＪＶＭに通信することを可能にする。例えば、ｇＪＶＭは、仮想マシン・クラスタが分散態様でその負荷全体を平衡させることができるよう、自身のＣＰＵ負荷係数、メモリ係数、および通信待ち行列負荷係数を他のｇＪＶＭに伝送することが可能である。固有ｇＪＶＭ  ＩＤ３０４は、ｇＪＶＭグループ名３０６によって識別される所与のｇＪＶＭクラスタ内の特定のｇＪＶＭに割当てられた固有の仮想マシン識別子を表すデータ値である。アプリケーション環境／コンテキスト・パラメータ３０８は、ランタイム環境から追加情報を得るために、およびランタイム環境と対話するために、ｇＪＶＭ３００の存続期間中に必要とされるかもしれない種々の値および情報を定義する。例えば、各ｇＪＶＭは、基本ｇＪＶＭと通信するために、基本ｇＪＶＭを構成する基本ｇＪＶＭ  ＩＰアドレスおよびポート値３１０を知る必要があるかもしれない。
【００２５】
各クラスタ化仮想マシンは、例えば、停止済み、起動中、起動済み、および停止中といった稼働状態を有する。新たなノードが仮想マシン・クラスタにおいてインスタンス化されるとき、即ち、既に仮想マシン・クラスタにある複数の仮想マシンに加えられるとき、その存在に関する情報が仮想マシン・クラスタ中に配布される。仮想マシン・クラスタにおける特定のノードが停止中であるとき、即ち、仮想マシン・クラスタにおける複数の仮想マシンの残りから除去されつつある（それは仮想マシン・クラスタ全体を停止することなく生じ得る）とき、特定の停止に関する情報が仮想マシン・クラスタ中に配布される。図４に示される例では、各ｇＪＶＭノードが、ｇＪＶＭレジストリ３１２として示された、ｇＪＶＭクラスタ内のｇＪＶＭノードのリストのローカル・コピーを維持しているものと仮定する。ｇＪＶＭノード３００は、他のノードのステータスに関する更新情報を受け取ることができ、受け取った更新情報はｇＪＶＭレジストリ３１２に反映される。このように、ｇＪＶＭレジストリ３１２は、ｇＪＶＭノード３００に既知のｇＪＶＭのレジストリを提供する。ｇＪＶＭレジストリ３１２は、各既知のｇＪＶＭの特性値、例えば固有ｇＪＶＭ  ＩＤ３１４、ＩＰアドレス、稼働状態３１８のような特性値のリストを含む。ｇＪＶＭクラスタ内の各ｇＪＶＭは、それらがスレッドをどこにディスパッチすべきかを決定し得るよう、種々のワークロード・パラメータまたは計算リソース使用パラメータを相互に通信することが可能である。
【００２６】
ｇＪＶＭは、起動された後に、そのｇＪＶＭクラスタからスレッド・ワークを受け取り得るし、停止するときには、そのスレッドおよび関連のオブジェクトを他のｇＪＶＭに移動する。一般的な仮想マシンとは対照的に、本発明は、オブジェクトがｇＪＶＭノードの間で移動し得るクラスタ化可能仮想マシンを提供し、それによってクラスタ化可能仮想マシンのインスタンスが停止されつつあるとき、スレッドおよびその関連オブジェクトの移動を可能にしている。
【００２７】
一般的な従来技術のシステムでは、リモート・オブジェクトは、ＩＰアドレス、ＴＣＰ／ＩＰポート番号、およびオブジェクト識別子参照の組合せによってアドレスされる。リモート・メソッド呼び出し（ＲＭＩ）参照または Common Object Request Broker Architecture（ＣＯＲＢＡ）参照は比較的大きいサイズの他の情報も含む。代表的なＲＭＩまたはＣＯＲＢＡ実装においてスタブ・クラスが使用されることがある一般的な仮想マシンとは対照的に、本発明は、更に詳細に後述されるように、オブジェクトに対するアクセスがスタブ・クラスなしにｇＪＶＭランタイム環境において透過的に管理されるようなオブジェクト参照を提供する。
【００２８】
本発明において可動オブジェクトをサポートするために、オブジェクトはオブジェクト・グループと関連付けられる、即ち、オブジェクト・グループに論理的に含まれる。オブジェクトが存在する限り、特定のオブジェクト・グループとのその関連付けは、そのオブジェクト・グループが存在し続けるであろうということを保証する。換言すれば、オブジェクト・グループは、それが少なくとも１つのオブジェクトを有する限り存在し続ける。オブジェクト・グループにおけるすべてのオブジェクトがガーベッジ・コレクトされたとき、オブジェクト・グループもガーベッジ・コレクトされるであろう。
【００２９】
オブジェクト・グループはクラスタ化仮想マシン相互間で移動することが可能である。アクセス可能な１つのオブジェクト・グループは単一のクラスタ化仮想マシンにのみ存在する。オブジェクト・グループがクラスタ化仮想マシンの間でマイグレーション状態にあるとき、そのオブジェクト・グループへのアクセスが制限され得る。従って、各クラスタ化仮想マシンは、仮想マシン・クラスタにおけるオブジェクト・グループのロケーションに関する情報を有する。
【００３０】
図４に示される例では、オブジェクト・グループ・レジストリ３２０は、ｇＪＶＭ３００にとって既知であるオブジェクト・グループＩＤのリストと、ｇＪＶＭ３００のｇＪＶＭクラスタにおけるオブジェクト・グループを見つけるための他の関連情報とを含み、それによって各既知のオブジェクト・グループをｇＪＶＭ３００にとって既知であるｇＪＶＭと関連付ける。例えば、オブジェクト・グループＩＤ３２２によって特定のオブジェクト・グループが表され、オブジェクト・グループＩＤ３２２に割り当てられたオブジェクト・グループを有するｇＪＶＭノードがｇＪＶＭ  ＩＤ３２４によって識別され、オブジェクト・グループＩＤ３２２に割り当てられたオブジェクト・グループのマイグレーション状態がマイグレーション状態値３２６によって識別される。マイグレーション状態値３２６は、各々が異なる可能なマイグレーション状態を表す一組の固定値のうちの１つであってもよい。
【００３１】
透過的なアクセスを提供するために、および仮想マシン・クラスタにおけるオブジェクトの移動可能性を提供するために、オブジェクトに対する内部仮想マシンのハンドル、即ち、オブジェクト参照は、情報項目のコンパクトなセットを含む。このセットは、オブジェクトを見つけてアクセスするが、オブジェクトのロケーションは指定しない。例えば、下記のJava構造は、Java環境においてオブジェクト・ハンドルを指定するために使用することが可能である。
Struct ObjectHandle {
IntobjectGroupID; // 固有オブジェクト・グループＩＤ
Byte[] objectID; // オブジェクトの固有オブジェクトＩＤ
}
【００３２】
上記の例において指定されたObjectHandleは、ｇＪＶＭクラスタ内で実行中であるアプリケーションがそのｇＪＶＭクラスタ内のどこにある対応するオブジェクトでもアクセスすることを可能にする。オブジェクトのグループの固有オブジェクト・グループ識別子を知ることによって、いずれのｇＪＶＭノードもｇＪＶＭクラスタ内の識別されたオブジェクト・グループを見つけることが可能である。例えば、オブジェクト・グループが、オブジェクト・グループ識別子をｇＪＶＭ識別子と関連付けるテーブルまたは他のタイプのデータストアにおいて管理される場合、オブジェクトが存在するｇＪＶＭノードを決定することが可能である。ｇＪＶＭノードがアドレスまたはアクセスされる方法に関する他の情報を使用することによって、オブジェクトが存在するｇＪＶＭノードと通信するために固有ｇＪＶＭ識別子を使用することも可能である。例えば、ｇＪＶＭ識別子が、そのｇＪＶＭ識別子を、例えばｇＪＶＭレジストリ３１２に示されるＩＰアドレスおよびポート番号と関連付けるテーブルまたは他のタイプのデータストアにおいて管理される場合、適切なｇＪＶＭノードにおける適切なオブジェクト・グループを何らかの方法でアクセスすることが可能である。所与のｇＪＶＭノードをＩＰアドレスおよびポート番号によって識別することも可能であるが、この情報はオブジェクト参照に直接的には含まれず、それによって、オブジェクトがｇＪＶＭノードの間を透過的に移動することを可能にする。アクセスされるべきオブジェクトに対する固有オブジェクト識別子を知ることによって、適切なｇＪＶＭノードにおいてオブジェクト・グループ内の適切なオブジェクトを何らかの方法でアクセスすることも可能である。
【００３３】
オブジェクト・グループのロケーションに関する情報は、ｇＪＶＭクラスタにおけるすべてのｇＪＶＭノードが、オブジェクト・グループ識別子とオブジェクト・グループをホスティングしているｇＪＶＭノードとの間の関連を検索するためにアクセスし得るＪＶＭシングルトン・オブジェクトによって提供され得る。図４に示される例では、ｇＪＶＭノード３００は、オブジェクト・グループ・レジストリ３２０によって提供されるローカル情報を含む。例えば、ｇＪＶＭノード３００は、オブジェクト・グループ・レジストリ３２０に対する更新を他のｇＪＶＭノード、例えば、基本ｇＪＶＭノードから検索するかまたは受け取り、それによって、ｇＪＶＭノード３００は素早く且つ効率的なローカル検索を行うことができる。
【００３４】
オブジェクトおよびそれらのオブジェクト・グループは、必要に応じてローカルｇＪＶＭノードのヒープにおいて作成される。オブジェクトは、オブジェクト参照がスレッド有効範囲から出るまでローカルで参照され、その時点で、オブジェクトはリモート・オブジェクトとして透過的にアクセスされ、それによって、他のマシンにおいて潜在的に稼動している他のスレッドがそれをアクセスできるようになる。１つの実施例では、オブジェクト・グループがｇＪＶＭノードのスレッド・ローカル・ヒープにおいて作成されることが望ましい。代替として、オブジェクト・グループがクラスタ化仮想マシン内の他のタイプのヒープにおいて作成されることも可能である。新しい各スレッドは、そのスレッドが構成されるときに新しいスレッド・ローカル・ヒープを提供される。スレッドは、必要に応じて更なるスレッド・ローカル・ヒープを得ることも可能である。スレッド・ローカル・ヒープは高いパフォーマンスを提供する。それは、ほとんどのオブジェクトのほとんどのアクセスが特定のスレッドにとってローカルであり、オブジェクトが容易にガーベッジ・コレクトされ得るし、ヒープ・ロックがオブジェクト割り振りを満たす必要がないためである。スレッド・ローカル・ヒープは、一般に、特定のスレッドがアクセスを行う構成可能サイズのオブジェクトとして実装される。一般的な小さいオブジェクト割り振りを満たすために、スレッド・ローカル・ヒープが一端において分割され、必要なスペースを解放する。スレッド・ローカル・ヒープが割り振りを満たすのに十分大きくなければ、そのスレッド・ローカル・ヒープの残りが廃棄され、新たなスレッド・ローカル・ヒープによって置換される。大きいオブジェクト割り振りはスレッド・ローカル・ヒープ機構をバイパスし得るし、仮想マシンにおけるより大きいヒープから直接に満たされることが可能である。図４は、ｇＪＶＭノード３００における単一のスレッド３２８を示す。スレッド３２８は、２つのスレッド・ローカル・ヒープ３３０および３３２と関連付けられ、それによって、１つのスレッドが複数のスレッド・ローカル・ヒープとの１対多の関連を持ち得ることを示す。スレッド・ローカル・ヒープ３３０は、図には示されていないオブジェクトを含むオブジェクト・グループ３３４およびオブジェクト・グループ３３６を含むものとして示される。スレッド・ローカル・ヒープ３３２は、オブジェクト３４０〜３４２を含むオブジェクト・グループ３３８を含むものとして示される。
【００３５】
スレッドを管理するための情報がオブジェクト内に保存され、このオブジェクトは、更に、オブジェクト・グループ内に保存される。同様に、スレッドのスタック・フレームがオブジェクトとして管理される。図４は、そのような情報を管理するためのスレッド管理オブジェクト３４４およびスタック・フレーム・オブジェクト３４６を示す。このように、スレッドに関するインスタンス・データがオブジェクト・グループ内に保存される。スレッドが１つのｇＪＶＭノードから他のｇＪＶＭノードに移動する場合、インスタンス・データがオブジェクト・グループの移動のプロセスの一部として移動する。スレッド・コード自体はオブジェクト・グループに保存される必要がない。コードがメモリ内に存在しない場合、それは、必要なときにクラス・ファイルから得ることが可能である。
【００３６】
新たなスレッドが構成されるとき、新たなオブジェクト・グループも作成される。オブジェクト・グループと固有のスレッド識別子を有する新たに構成されたスレッドとの間の関連が作成される。スレッド識別子はクラスタ全体にわたって一意的である。各クラスタ化仮想マシンは固有の仮想マシン識別子を有し、それによって、望ましくは、固有スレッド識別子がその固有仮想マシン識別子と所与の仮想マシン内で固有のスレッド識別子との組合せに基づくことを可能にする。
【００３７】
必要に応じて、更なるオブジェクト・グループをスレッドに追加することも可能である。図４に示される例では、ローカル・オブジェクト・グループ管理テーブル３５０が、ｇＪＶＭノード３００において管理されるオブジェクト・グループのリスト、即ち、他の関連情報と共にｇＪＶＭノード３００に保存されるオブジェクト・グループのリストを含み、ｇＪＶＭノード３００におけるそれらのオブジェクト・グループを管理する。例えば、特定のオブジェクト・グループは、オブジェクト・グループＩＤ３５２、特定のオブジェクト・グループを含むスレッド・ローカル・ヒープに対するポインタ３５４、およびオブジェクト・グループと関連するスレッド識別子３５６を含むそのテーブルにおける行によって表される。オブジェクト・グループがクラスタ化仮想マシンにおける他のタイプのヒープ内に作成される場合、異なる情報がローカル・オブジェクト・グループ管理テーブル３５０において管理されるであろう。
【００３８】
上述のように、オブジェクト・グループは、それが少なくとも１つのオブジェクトを有する限り存在し続けることが可能である。たとえオブジェクトを作成する責任のあったスレッドが終了しても、そのオブジェクトは、その存在を依然として必要とする他のスレッドによって参照されていたかもしれず、そのため、そのオブジェクトが置かれているオブジェクト・グループが存在し続けることを必要とする。代替として、マスタ・グローバル・オブジェクト・グループ３６０が、ｇＪＶＭノード内に維持されることがある。スレッドが終了するとき、他のスレッドから依然として参照し得るその関連のオブジェクト・グループ（または、複数の関連のオブジェクト・グループ）に含まれる残りのすべてのオブジェクト、例えば、オブジェクト３６２〜３６８がマスタ・グローバル・オブジェクト・グループに移動する。マスタ・グローバル・オブジェクト・グループは、当初のスレッドが終了したときでもｇＪＶＭクラスタにおいてグローバルに参照されるすべてのオブジェクトを含むであろうし、それによって、より少ないオブジェクト・グループの管理を可能にするであろう。
【００３９】
仮想マシン・クラスタ／グリッド内のオブジェクト・グループの移動
次に図５〜図７を参照すると、本発明の実施例に従ってクラスタ化仮想マシン間におけるオブジェクト・グループの転送に関するブロック図が示される。図５〜図７は、ある期間における仮想マシン・クラスタ内の一組のｇＪＶＭノードを示す。図５は、図６に示される時点よりも早い時点を示し、図６は、図７に示される時点よりも早い時点を示す。図４と同様に、図５は、オブジェクト・グループ３３４、３３６、および３３８を含むｇＪＶＭノード３００を示す。更に、ｇＪＶＭノード３７０はオブジェクト・グループ３７２を含み、ｇＪＶＭノード３８０はオブジェクト・グループ３８２を含む。
【００４０】
上述のように、オブジェクト・グループは、当該オブジェクト・グループと最初に関連したスレッドが終了しても、それが少なくとも１つのオブジェクトを有する限り、存在し続けることが可能である。図６は、図５と同じｇＪＶＭノードおよび同じオブジェクト・グループを示す。しかし、図６は、オブジェクト・グループ３３８がｇＪＶＭノード３００からｇＪＶＭノード３８０に転送されたという点で図５とは異なる。例えば、転送は、図４に示されたスレッド３２８のような、オブジェクト・グループ３３８と関連したスレッドの終了に応答して生じたかもしれない。
【００４１】
更に上述のように、オブジェクト・グループは、そのオブジェクト・グループを構成したクラスタ化仮想マシンが停止または終了しても、少なくとも１つのオブジェクトを有する限り、存在し続けることが可能である。図７は、図６と同じｇＪＶＭノードおよびオブジェクト・グループのいくつかと共にその後の時点を示す。しかし、図７は、オブジェクト・グループ３３４および３３６がｇＪＶＭノード３００からｇＪＶＭノード３７０に転送されているという点で図６とは異なる。例えば、転送は、オブジェクト・グループ３３４および３３６をサポートしていたｇＪＶＭノード３００の終了に応答して生じたかもしれない。所与のｇＪＶＭがシャットダウンするとき、所与のｇＪＶＭにおけるヒープおよび／またはオブジェクト・グループが他のマシンに転送され得るし、仮想マシン・クラスタ内のｇＪＶＭノードにおける情報がオブジェクト・グループのロケーションを更新されるであろう。
【００４２】
ガーベッジ・コレクションも仮想マシン・クラスタ内で行うことが可能である。一般的なJava仮想マシンでは、ガーベッジ・コレクションはマーク・アンド・スイープ方法で行われる。マーク・アンド・スイープ方法では、ガーベッジ・コレクションは、アプリケーションによって明示的に呼び出されるか、またはアプリケーションがオブジェクトを割り振ろうとしても、メモリ利用がオブジェクト割り振りオペレーションを困難にするかまたは不可能にするとき、自動的に呼び出される。仮想マシンは、すべてのオブジェクトを調べ、それらをマークし、しかる後、すべてのスレッドおよび統計（グローバル・データ）を破棄して、トラバースで到達し得るすべてのオブジェクトを再びマークする。仮想マシンは、すべてのスレッドを一時停止し、しかる後、各スレッドのスタック・フレームのデータ構造を調べ、そうすることによって、できればアプリケーション毎に、いずれのスレッドによっても参照し得るすべてのオブジェクトをマークする。参照可能であるとしてマークされないすべてのオブジェクトは破壊または除去され、それによって仮想マシンがオブジェクトを割り振るようにメモリを解放する。
【００４３】
一般に、大多数のオブジェクトは１つのスレッドによってのみアクセスされるオブジェクトである。本発明の仮想マシン・クラスタを用いてオブジェクトをリモート参照することが可能になる。オブジェクトがリモート参照されるとき、それはそのようにマークされる。１つの実施例では、ｇＪＶＭノードは、低い優先順位で稼動し且つリモート・ガーベッジ・コレクション処理を行うためにシステムを定期的に検索する別個のデーモン・スレッドを有することも可能である。各オブジェクトは、リモート・ガーベッジ・コレクション・デーモンによりマーク・アンド・スイープ方法で使用されるリモート・ガーベッジ・コレクション・ビットを有することも可能である。リモート参照されたオブジェクトが、それを構成したｇＪＶＭノード内で最早参照されない場合、リモート・ガーベッジ・コレクション・デーモン・スレッドは、リモート・オブジェクト参照が依然としてそのオブジェクトの存在を必要とするかどうかを決定しようとする。デーモン・スレッドは、ローカルｇＪＶＭにおいて自由にされる準備のできた特定のオブジェクトが依然としてリモートｇＪＶＭによって参照されようとしているかどうか問い合わせるための要求メッセージを他のｇＪＶＭノードに送ることが可能である。これらの要求は、参照のグループが効率的にチェックされ得るように複数のオブジェクトに対して一括処理され得る。特定のオブジェクトが依然としてリモート参照されていることをどのリモートｇＪＶＭノードもレポートしない場合、ローカルｇＪＶＭノードにおけるリモート・ガーベッジ・コレクション・デーモンはオブジェクトの除去を開始することがある。例えば、リモート・ガーベッジ・コレクション・デーモンは、オブジェクトがリモート参照される／されたという如何なる表示も除去し、それによって、その後、ノーマル／ローカル・ガーベッジ・コレクション・プロセス中にそのオブジェクトが除去されることを可能にする。
【００４４】
基本グリッド対応仮想マシンの初期設定
次に図８を参照すると、本発明の実施例に従って基本ｇＪＶＭを初期設定するためのプロセスのフローチャートが示される。プロセスは、基本クラスタ化仮想マシン・ノードが、例えば、上述のインスタンス化コマンドの使用によって初期設定されるときに始まり（ステップ４０２）、使用可能なｇＪＶＭクラスタをアプリケーションが検索することを可能にし且つ他のｇＪＶＭクラスタとの名前の衝突を防ぐように、ｇＪＶＭクラスタ名が登録される（ステップ４０４）。基本ｇＪＶＭノードが、新たに開始したｇＪＶＭクラスタによって使用される何らかの環境パラメータまたはコンテキスト・パラメータを獲得し（ステップ４０６）、ｇＪＶＭクラスタにおけるすべてのノードにとって使用可能である方法で情報を保存する。基本ｇＪＶＭノードにおけるオブジェクト・グループ・レジストリの基本コピーが初期設定される（ステップ４０８）。それは、その後、図４に示されるオブジェクト・グループ・レジストリ３２０のような非基本ｇＪＶＭノードにコピーとして配布するために使用可能である。基本ｇＪＶＭノードにおけるｇＪＶＭレジストリの基本コピーも初期設定され（ステップ４１０）、それによってプロセスを終了させる。基本コピーは、図４に示されるｇＪＶＭレジストリ３１２のような非基本ｇＪＶＭノードにコピーとして配布するために使用可能である。
【００４５】
グリッド対応仮想マシンのための固有ＩＤの割り振りまたは再登録
次に図９を参照すると、初期設定される非基本ｇＪＶＭに固有ｇＪＶＭ識別子を割り振るための基本ｇＪＶＭにおけるプロセスのフローチャートが示される。プロセスは、基本ｇＪＶＭが固有ｇＪＶＭ識別子に対する要求を非基本的ｇＪＶＭから受け取る時に開始する。基本ｇＪＶＭが、固有ｇＪＶＭ識別子を生成し（ステップ５０４）、その新たに生成されたｇＪＶＭ識別子をｇＪＶＭレジストリに加える（ステップ５０６）。基本ｇＪＶＭが、ｇＪＶＭレジストリにおける非基本ｇＪＶＭの稼動状態を起動状態値にセットし（ステップ５０８）、しかる後、新たに生成された固有ｇＪＶＭ識別子を含むメッセージを送ることによって要求元の非基本ｇＪＶＭに応答する。次に、基本ｇＪＶＭが、更新されたｇＪＶＭレジストリを含むメッセージをすべての非基本ｇＪＶＭノードにブロードキャストし（ステップ５１２）、それによってプロセスを終了させる。
【００４６】
次に図１０を参照すると、初期設定されるべき非基本ｇＪＶＭに固有ｇＪＶＭ識別子を割り振るための基本ｇＪＶＭにおける代替プロセスのフローチャートが示される。プロセスは、基本ｇＪＶＭが固有ｇＪＶＭ識別子を登録するための要求を非基本ｇＪＶＭから受け取るときに始まる（ステップ５２２）。非基本ｇＪＶＭノードが基本ｇＪＶＭノードに依存して固有ｇＪＶＭ識別子を割り振る図９とは対照的に、図１０は、非基本ｇＪＶＭノードがそれ自身の固有ｇＪＶＭ識別子を割り振り、その識別子を基本ｇＪＶＭノードに登録する例示的システムを示す。非基本ｇＪＶＭノードは、そのような目的のためのアルゴリズムの実行を通して一意的であることを保証されるそれ自身の識別子を生成し得る。例えば、多くの装置は、ときにはグローバルな固有識別子として参照される読み取り可能な且つ変更不可能なシリアル番号を含むように製造される。分散型ｇＪＶＭクラスタにおける各ｇＪＶＭノードは１つの装置上で動作するので、ｇＪＶＭノードは、固有ｇＪＶＭ識別子を作成するためにアルゴリズムを使用し得る。なお、そのアルゴリズムは装置のグローバルな固有識別子を入力として受け入れる。
【００４７】
次に、基本ｇＪＶＭが、新しいｇＪＶＭ識別子をｇＪＶＭレジストリに加えるか、または登録する（ステップ５２４）。基本ｇＪＶＭがｇＪＶＭレジストリにおける非基本ｇＪＶＭの稼動状態を起動状態値にセットし（ステップ５２６）、しかる後、基本ｇＪＶＭが、登録が成功したか否かを表すステータス値と共に応答メッセージを送ることによって要求元の非基本ｇＪＶＭに応答する（ステップ５２８）。そこで、基本ｇＪＶＭが、更新されたｇＪＶＭレジストリを含むメッセージをすべての非基本ｇＪＶＭノードにブロードキャストし（ステップ５３０）、それによってプロセスを終了させる。
【００４８】
非基本グリッド対応仮想マシン・ノードへのオブジェクト・グループＩＤの割り振り
次に図１１を参照すると、固有オブジェクト・グループ識別子を非基本ｇＪＶＭに割り振るための、基本ｇＪＶＭにおけるプロセスのフローチャートが示される。プロセスは、基本ｇＪＶＭが固有オブジェクト・グループ識別子に対する非基本ｇＪＶＭからの要求を受け取るときに始まる（ステップ６０２）。基本ｇＪＶＭが固有オブジェクト・グループ識別子を生成し（ステップ６０４）、新たに生成されたオブジェクト・グループ識別子をオブジェクト・グループ・レジストリに加える（ステップ６０６）。基本ｇＪＶＭがオブジェクト・グループ・レジストリにおけるオブジェクト・グループのマイグレーション状態を起動状態値にセットし（ステップ６０８）、しかる後、基本ｇＪＶＭが、新たに生成された固有オブジェクト・グループ識別子を含むメッセージを送ることによって、要求元の非基本ｇＪＶＭに応答する（ステップ６１０）。そこで、基本ｇＪＶＭが、更新されたオブジェクト・グループ・レジストリを含むメッセージをすべての非基本ｇＪＶＭノードにブロードキャストし（ステップ６１２）、それによってプロセスを終了させる。
【００４９】
代替として、非基本ｇＪＶＭノードが基本ｇＪＶＭノードに依存して固有オブジェクト・グループ識別子を割り振る図１１とは対照的に、代替プロセスが使用される。そのプロセスでは、非基本ｇＪＶＭノードがそれ自身の固有オブジェクト・グループ識別子を割り振り、しかる後、この新たに生成されたオブジェクト・グループ識別子を基本ｇＪＶＭノードに登録する。非基本ｇＪＶＭノードは、例えば、図１０に関連して上述した方法と同じ方法で、そのような目的のためのアルゴリズムの実行を通して一意的であることを保証されるそれ自身のオブジェクト・グループ識別子を生成することが可能である。
【００５０】
非基本グリッド対応仮想マシン・ノードへのクラスタ特有の情報の提供
次に図１２を参照すると、ｇＪＶＭクラスタに関する情報を非基本ｇＪＶＭに提供するための、基本ｇＪＶＭにおけるプロセスのフローチャートが示される。そのプロセスは、基本ｇＪＶＭが、現在のｇＪＶＭレジストリ、現在のオブジェクト・グループ・レジストリ、またはクラスタの環境／コンテキスト・パラメータのようなクラスタ特有の情報に対する要求を非基本ｇＪＶＭから受け取るときに始まる（ステップ７０２）。基本ｇＪＶＭが、要求された情報を含むメッセージを送ることによって要求元の非基本ｇＪＶＭに応答し（ステップ７０４）、それによってプロセスを終了させる。このように、非基本ｇＪＶＭノードは、基本ｇＪＶＭノードが非基本ｇＪＶＭノードに代わってクラスタ特有の情報を管理するｇＪＶＭクラスタを本発明の実施態様が有するものと仮定して、基本ｇＪＶＭノードから情報を得ることができる。
【００５１】
非基本グリッド対応仮想マシン・ノードの稼動状態の変更
次に図１３を参照すると、非基本ｇＪＶＭの稼動状態を変更するための、基本ｇＪＶＭにおけるプロセスのフローチャートが示される。プロセスは、基本ｇＪＶＭがその稼動状態を変更するための要求を非基本ｇＪＶＭから受け取るときに始まる（ステップ８０２）。基本ｇＪＶＭがその要求された稼動状態でもってｇＪＶＭレジストリを更新し（ステップ８０４）、肯定応答メッセージでもって要求元の非基本ｇＪＶＭに応答する（ステップ８０６）。しかる後、基本ｇＪＶＭが、その更新されたｇＪＶＭレジストリを含むメッセージをすべての非基本ｇＪＶＭノードにブロードキャストし（ステップ８０８）、それによってプロセスを終了させる。
【００５２】
非基本グリッド対応仮想マシン・ノードによるオブジェクト・グループ・マイグレーション状態の変更
次に図１４を参照すると、オブジェクト・グループのマイグレーション状態を変更するための、基本ｇＪＶＭにおけるプロセスのフローチャートが示される。プロセスは、基本ｇＪＶＭが、オブジェクト・グループのマイグレーション状態を変更するための要求を非基本ｇＪＶＭから受け取るときに始まる（ステップ９０２）。基本ｇＪＶＭがその要求されたマイグレーション状態でもってオブジェクト・グループ・レジストリを更新し（ステップ９０４）、肯定応答メッセージでもって要求元の非基本ｇＪＶＭに応答する（ステップ９０６）。しかる後、基本ｇＪＶＭが、その更新されたオブジェクト・グループ・レジストリを含むメッセージをすべての非基本ｇＪＶＭノードにブロードキャストし（ステップ９０８）、それによってプロセスを終了させる。
【００５３】
非基本グリッド対応仮想マシン・ノードの初期設定
次に図１５を参照すると、本発明の実施例に従って非基本ｇＪＶＭノードを初期設定するためのプロセスのフローチャートが示される。プロセスは、非基本のクラスタ化仮想マシン・ノードが、例えば、上述したインスタンス化コマンドの使用によって初期設定されたときに始まる（ステップ１００２）。ｇＪＶＭクラスタ名が、例えば、インスタンス化コマンドから得られ（ステップ１００４）、検索オペレーションが、ｇＪＶＭクラスタ名を使用して、例えば、グローバルに使用可能なデータベースからネットワーク・パラメータを得るために遂行され（ステップ１００６）、識別されたｇＪＶＭクラスタに対する基本ｇＪＶＭノードとの通信を開始する（ステップ１００８）。
【００５４】
非基本ｇＪＶＭノードが、例えば、図９および図１０に示されるように、固有ｇＪＶＭ識別子を要求し、それを基本ｇＪＶＭノードから受け取る（ステップ１０１０）。非基本ｇＪＶＭノードが、例えば、図１２に示されるように、ｇＪＶＭクラスタによって使用される環境パラメータまたはコンテキスト・パラメータのような何らかのクラスタ全体に関する情報を得る（ステップ１０１２）。非基本ｇＪＶＭノードが、例えば、図１２に示されるように、ｇＪＶＭレジストリを要求してそれを基本ｇＪＶＭノードから受け取り（ステップ１０１４）、オブジェクト・グループ・レジストリを要求してそれを基本ｇＪＶＭノードから受け取る（ステップ１０１６）。ステップ１０１０〜１０１６は同期態様で実装されるものとして示されるが、それらのステップは種々な態様で非同期的に行うことも可能である。非基本ｇＪＶＭノードがその初期設定を終了したので、非基本ｇＪＶＭノードが、それが起動状態にあることを表す値から、それが稼動状態にあることを表す値にそれの稼動状態を変更するための要求を基本ｇＪＶＭノードに送る（ステップ１０１８）。要求が成功裏に実行されたものと仮定すると、非基本ｇＪＶＭノードが基本ｇＪＶＭノードから肯定応答を受け取り（ステップ１０２０）、それによってプロセスを終了させる。
【００５５】
図１５が非基本ｇＪＶＭノードにおける初期設定プロセスを示しているのに対して、図９〜図１４は、基本ｇＪＶＭノードが、ｇＪＶＭクラスタに代わって情報を一体として集中的に管理するために非基本ｇＪＶＭノードによって要求されるようなタスクを遂行するプロセスを示す。残りの図は、非基本ｇＪＶＭノードがｇＪＶＭクラスタ内のオブジェクト・グループおよびスレッドを管理するプロセスを示す。換言すると、残りの図は、非基本ｇＪＶＭノードの観点からのプロセスを示す。しかし、基本ｇＪＶＭノードがそのオブジェクト・グループおよびスレッドの管理に関して同様のプロセスを実行することに留意すべきである。情報が基本ｇＪＶＭノードに転送されるかまたは基本ｇＪＶＭノードから受け取られるプロセスにおけるステップを図が示す場合、基本ｇＪＶＭノードが、それ自身による、即ち、基本ｇＪＶＭノードによるステップの調整を必要とすることなくｇＪＶＭレジストリまたはオブジェクト・グループ・レジストリのようなクラスタ特有のテーブルまたはデータベースに直接に情報を入れることが可能であることを除けば、基本ｇＪＶＭノードが同様のステップを実行するであろうということは明らかである。
【００５６】
グリッド対応仮想マシン・ノードにおけるスレッド構成
次に図１６を参照すると、クラスタ化仮想マシンにおいてスレッドを構成するプロセスのフローチャートが示される。そのプロセスは、ローカルｇＪＶＭが、例えば、クラスタ化仮想マシンの制御の下で実行中のアプリケーションによる適切なＡＰＩコールを通して、スレッドを構成するための要求を受け取るときに始まるが（ステップ１１０２）、ローカルｇＪＶＭが仮想マシンにおけるアプリケーションの実行を制御しているとき、そのローカルｇＪＶＭがそれ自身のイニシアティブで同様のプロセスを遂行することも可能である。場合によっては、非基本ｇＪＶＭであると仮定し得るローカルｇＪＶＭノードが、固有オブジェクト・グループ識別子に対する要求を基本ｇＪＶＭに送り、しかる後、それを受け取る（ステップ１１０４）。ローカルｇＪＶＭが、種々のスレッド管理オブジェクトの作成および種々のスレッド管理テーブルの更新を伴い得るスレッドを構成する（ステップ１１０６）。固有スレッド識別子が生成され、新たに構成されたスレッドに割り当てられる（ステップ１１０８）。しかる後、ローカルｇＪＶＭがスレッド・ローカル・ヒープを割り振り（ステップ１１１０）、スレッド・ローカル・ヒープ内にオブジェクト・グループを作成または境界付けする（ステップ１１１２）。これは、実装に応じて、スレッド関連オブジェクトを好適に保存する。新たに作成されたオブジェクト・グループ識別子が、例えば、適切な管理テーブルを更新することによって、新たに構成されたスレッドと関連付けられる（ステップ１１１４）。
【００５７】
しかる後、ローカルｇＪＶＭが、オブジェクト・グループのマイグレーション状態を、新たなオブジェクト・グループ識別子が要求されたときに基本ｇＪＶＭによってセットされた起動状態から、安定状態を表す値に変更するための要求を基本ｇＪＶＭに送る（ステップ１１１６）。そこで、ローカルｇＪＶＭが、マイグレーション状態変更肯定応答を基本ｇＪＶＭから受け取る（ステップ１１１８）。そこで、ローカルｇＪＶＭが、スレッド識別子および他のスレッド関連の情報を含み得るそのスレッド構成に対する応答を要求元のアプリケーションに戻し（ステップ１１２０）、それによってプロセスを終了させる。
【００５８】
グリッド対応仮想マシン・ノードにおけるスレッド消滅
次に図１７を参照すると、スレッドが破壊されるクラスタ化仮想マシンにおけるプロセスのフローチャートが示される。プロセスは、ローカルｇＪＶＭが、例えば、クラスタ化仮想マシンの制御の下で実行されるアプリケーションによる適切なＡＰＩコールを介して、スレッドを破壊するための要求を受け取るときに始まるが（ステップ１２０２）、ローカルｇＪＶＭが、例えば、種々の終了条件によって、それ自身のイニシアティブでスレッドを破壊することを決定するとき、同様のプロセスが生じ得る。
【００５９】
終了するスレッドと関連するオブジェクト・グループがそれ自身におけるオブジェクトに対する外部（external）／リモート／外部（foreign）参照を有するものと仮定すると、当初はオブジェクト・グループを作成するための理由であったスレッドが今や終了または破壊されつつあっても、オブジェクト・グループは維持される必要がある。従って、ローカルｇＪＶＭは、終了するスレッドのスレッド識別子を各関連のオブジェクト・グループから適切な方法で関連解除する（ステップ１２０４）。それは、種々のスレッド管理テーブルおよびオブジェクト・グループ管理テーブルの更新を含み得る（ステップ１２０６）。必要な場合、ローカルｇＪＶＭにおけるメモリ割り振り方法次第で、オブジェクト・グループがスレッド・ローカル・ヒープからローカルｇＪＶＭにおける汎用ヒープに移動する必要がある（ステップ１２０８）。スレッドを終了することは、そのほとんどすべてのオブジェクトがガーベッジ・コレクトされるという結果を生じる場合が多い。別の実施例では、リモート参照し得るものであるために残っているオブジェクトは、マスタ・グローバル・オブジェクト・グループに移動することが可能である。
【００６０】
しかる後、スレッドが、例えば、そのスレッドを制御するために使用されたスレッド関連の管理オブジェクトを破壊することによって破壊される（ステップ１２１０）。そこで、スレッド破壊オペレーションに対する応答が要求元のアプリケーションに戻され（ステップ１２１２）、それによってプロセスを終了させる。
【００６１】
グリッド対応仮想マシン・ノードにおけるオブジェクト割り振り
次に図１８を参照すると、オブジェクトが構成される、クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。プロセスは、ローカルｇＪＶＭノードが、例えば、クラスタ化仮想マシンの制御の下に実行されているアプリケーションによる適切なＡＰＩコールを介して、オブジェクトを構成するための要求を受け取るときに始まるが（ステップ１３０２）、ローカルｇＪＶＭがそれ自身のイニシアティブでオブジェクトを作成することを決定するときには、同様のプロセスが生じ得る。要求元のスレッドのスレッド識別子が決定され（ステップ１３０４）、要求元のスレッドと関連したオブジェクト・グループに対するオブジェクト・グループ情報が検索される（ステップ１３０６）。そこで、ローカルｇＪＶＭは、要求元スレッドのオブジェクト・グループの１つにおけるオブジェクトを割り振り（ステップ１３０８）、その新たに割り振られたオブジェクトに対するオブジェクト識別子が生成されてそのオブジェクトに割り当てられる（ステップ１３１０）。新たに割り振られたオブジェクトに対するオブジェクト参照／ハンドルが作成される（ステップ１３１２）。それは、オブジェクト参照が実装される方法に依存して、オブジェクト・グループ識別子およびオブジェクト識別子を含み得る。次に、オブジェクト参照／ハンドルは要求元スレッドに戻され（ステップ１３１４）、それによってプロセスを終了させる。
【００６２】
グリッド対応仮想マシン・ノードにおけるオブジェクト参照
次に図１９を参照すると、オブジェクトへのアクセスを処理するための、クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。プロセスは、オブジェクト・ハンドルを介してオブジェクトをアクセスまたは参照する試みをローカルｇＪＶＭがインターセプトすることによって始まる（ステップ１４０２）。ローカルｇＪＶＭがオブジェクト・ハンドルからオブジェクト・グループ識別子を取り出し（ステップ１４０４）、その識別されたオブジェクト・グループが、例えば、オブジェクト・グループ管理テーブルを調べることによって、ローカル管理されるかまたはリモート管理されるかを決定する（ステップ１４０６）。オブジェクトがローカルに保存される場合、ローカルｇＪＶＭが適切なスレッド・ローカル・ヒープに対するポインタを得て（ステップ１４０８）、オブジェクト識別子を使ってスレッド・ローカル・ヒープにおけるオブジェクトをアクセスする（ステップ１４１０）。
【００６３】
オブジェクトがリモートに保存される場合、ローカルｇＪＶＭが、そのオブジェクトが置かれているオブジェクト・グループのリモートｇＪＶＭノードの識別子を得る（ステップ１４１２）。リモートｇＪＶＭのＩＰアドレスおよびポートＩＤが、例えば、ｇＪＶＭレジストリのローカル・コピーから取り出される（ステップ１４１４）。そこで、ローカルｇＪＶＭがオブジェクト・アクセス要求をリモートｇＪＶＭに送り（ステップ１４１６）、それによってプロセスを終了させる。
【００６４】
グリッド対応仮想マシン・ノードからのオブジェクト・グループのマイグレーション
次に図２０を参照すると、オブジェクト・グループをリモート・クラスタ化仮想マシンにマイグレーションするための、ローカル・クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。プロセスは、ローカルｇＪＶＭノードが、リモートｇＪＶＭノードへのオブジェクト・グループのマイグレーションを準備するときに始まる（ステップ１５０２）が、オブジェクト・グループをマイグレーションするために要求メッセージをリモートｇＪＶＭに送ることを伴ってもよい。オブジェクト・グループをマイグレーションするためのこの準備は、更に詳細に後述される種々の条件の結果として生じ得る。例えば、図２４に関連して説明するように、ｇＪＶＭノードを停止させる前に、そのｇＪＶＭノードにおける如何なるオブジェクト・グループもｇＪＶＭクラスタ内の他のｇＪＶＭノードにマイグレーションされるであろう。
【００６５】
ローカルｇＪＶＭが、マイグレーション・オブジェクト・グループのマイグレーション状態を安定からマイグレーション中に変更するための要求を基本ｇＪＶＭに送る（ステップ１５０４）。しかる後、ローカルｇＪＶＭがマイグレーション状態変更肯定応答を基本ｇＪＶＭから受け取る（ステップ１５０６）。そこで、ローカルｇＪＶＭが、マイグレーション・オブジェクト・グループにおける各オブジェクトをフラット化または直列化し（ステップ１５０８）、そのフラット化または直列化されたオブジェクトをローカルｇＪＶＭからリモートｇＪＶＭに、オブジェクトがオブジェクト・グループと関連付けられたままとなるような態様でプッシュされる（ステップ１５１０）。しかる後、ローカルｇＪＶＭは、リモートｇＪＶＭから肯定応答を受け取る（ステップ１５１２）。次に、ローカルｇＪＶＭが、そのオブジェクト・グループ、および／または、今移動したオブジェクト・グループに対するローカルｇＪＶＭ内のヒープを破壊し（ステップ１５１４）、一方では、ローカルｇＪＶＭノードにおいてクリアまたは更新される必要があるすべての他のテーブルまたはデータベース・エントリと共に、ローカル・オブジェクト・グループ・テーブルにおけるオブジェクト・グループ・エントリをクリアまたは更新する（ステップ１５１６）。これは、オブジェクト・グループが、今や異なるｇＪＶＭノードに置かれるためであり、それによって、プロセスは終了する。
【００６６】
グリッド対応仮想マシンへのオブジェクト・グループのマイグレーション
次に図２１を参照すると、リモート・クラスタ化仮想マシンからのオブジェクト・グループのマイグレーションを受け入れるための、ローカル・クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。図２１に示されるプロセスは、図２０に示されるプロセスに対して相補的なものとしてみるべきである。図２０におけるローカルｇＪＶＭおよびリモートｇＪＶＭはそれぞれ図２１におけるリモートｇＪＶＭおよびローカルｇＪＶＭであり、それらの役割が逆である。
【００６７】
プロセスは、リモートｇＪＶＭからローカルｇＪＶＭにオブジェクト・グループをマイグレーションするための要求をローカルｇＪＶＭが受け取るときに始まる（ステップ１６０２）。しかる後、ローカルｇＪＶＭがスレッド・ローカル・ヒープまたは他の適切なタイプのヒープを割り振り（ステップ１６０４）、オブジェクト・グループにおけるフラット化されたまたは直列化されたオブジェクトをリモートｇＪＶＭから受け取る（ステップ１６０６）。ローカルｇＪＶＭが、それらのオブジェクトをローカルｇＪＶＭにおける選択されたロケーションに読み込むかまたは伸張し（ステップ１６０８）、必要な場合、例えば、スレッドがオブジェクト・グループと共にマイグレーションされた場合、受け取られたオブジェクト・グループをスレッドと関連付ける（ステップ１６１０）。次に、ローカルｇＪＶＭが、ローカル・オブジェクト・グループ・テーブルにおけるオブジェクト・グループ・エントリを作成するというような、新たに受け取られたオブジェクト・グループを管理するための適切な管理タスクを遂行する（ステップ１６１２）。次に、ローカルｇＪＶＭが、マイグレーションするオブジェクト・グループのマイグレーション状態をマイグレーション中から安定に変更するための要求を基本ｇＪＶＭに送り（ステップ１６１４）、しかる後、ローカルｇＪＶＭがマイグレーション状態変更の肯定応答を基本ｇＪＶＭから受け取る（ステップ１６１６）。次に、ローカルｇＪＶＭが、オブジェクト・グループのマイグレーションの終了を表す肯定応答メッセージをリモートｇＪＶＭに送り（ステップ１６１８）、それによってプロセスを終了させる。
【００６８】
グリッド対応仮想マシンからのスレッドのマイグレーション
次に図２２を参照すると、リモート・クラスタ化仮想マシンにスレッドをマイグレーションするための、ローカル・クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。プロセスは、ローカルｇＪＶＭノードがそのローカルｇＪＶＭノードからリモートｇＪＶＭノードにスレッドをマイグレーションする準備をするときに始まる（ステップ１７０２）が、スレッドをマイグレーションするために要求メッセージをリモートｇＪＶＭに送ることを伴ってもよい。スレッドをマイグレーションするための準備は、更に詳細に後述する種々の条件の結果として生じ得る。ローカルｇＪＶＭが、そのローカルｇＪＶＭからリモートｇＪＶＭにスレッド管理情報をプッシュする（ステップ１７０４）。スレッド管理情報は、ローカルｇＪＶＭノード内のローカル・スレッド管理テーブルにおける情報を含み得る。しかる後、ローカルｇＪＶＭがリモートｇＪＶＭから肯定応答を受け取る（ステップ１７０６）。次に、スレッドが異なるｇＪＶＭノードに移動してしまったと言う事実を反映すべく必要に応じてローカルｇＪＶＭがローカル・スレッド管理テーブルを更新し（ステップ１７０８）、それによってプロセスを終了させる。
【００６９】
グリッド対応仮想マシンへのスレッドのマイグレーション
次に図２３を参照すると、リモート・クラスタ化仮想マシンからのスレッドのマイグレーションを受け入れるための、ローカル・クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。図２３に示されるプロセスは、図２２に示されるプロセスに対して相補的であるとみるべきである。図２２におけるローカルｇＪＶＭおよびリモートｇＪＶＭは、それぞれ、図２３におけるリモートｇＪＶＭおよびローカルｇＪＶＭであり、それらの役割が逆である。
【００７０】
プロセスは、ローカルｇＪＶＭがリモートｇＪＶＭからそのローカルｇＪＶＭにスレッドをマイグレーションするための要求を受け取るときに始まり（ステップ１８０２）、しかる後、ローカルｇＪＶＭがスレッドに対するスレッド管理情報をリモートｇＪＶＭから受け取る（ステップ１８０４）。次に、ローカルｇＪＶＭが、ローカル・スレッド管理テーブルを更新するというような、新たに受け取られたスレッドを管理するための適切な管理タスクを遂行する（ステップ１８０６）。しかる後、ローカルｇＪＶＭが、スレッドのマイグレーションの終了を表す肯定応答メッセージをリモートｇＪＶＭに送り（ステップ１８０８）、それによってプロセスを終了させる。
【００７１】
グリッド対応仮想マシンのシャットダウン
次に図２４を参照すると、クラスタ化仮想マシンにおけるシャットダウン・オペレーションを行うための、ローカル・クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。プロセスは、ローカルｇＪＶＭがシャットダウン・オペレーションを行う必要があるという決定でもって始まる（ステップ１９０２）。シャットダウン・オペレーションは、種々の理由で自己終了するという、ローカルｇＪＶＭノードにおける決定の結果であってもよい。あるいは、ｇＪＶＭノードをシャットダウンするという決定は、基本ｇＪＶＭノードによって、管理ユーティリティによって、管理コマンドによって、または何らかの他の機構によって制御されることがある。ローカルｇＪＶＭノードが、稼動中の状態を表す値から停止中の状態を表す値にローカルｇＪＶＭノードの稼動状態を変更するための要求を基本ｇＪＶＭノードに送り（ステップ１９０４）、しかる後、ローカルｇＪＶＭノードが基本ｇＪＶＭから肯定応答メッセージを受け取る（ステップ１９０６）。次に、ローカルｇＪＶＭが、そのスレッドすべてを他のｇＪＶＭノードにマイグレーションし始め（ステップ１９０８）、一方、そのオブジェクト・グループすべてを他のｇＪＶＭノードにマイグレーションする（ステップ１９１０）。更に詳細に後述するように、ｇＪＶＭノードは、ｇＪＶＭクラスタにおける他のｇＪＶＭノードのパフォーマンス特性に関する情報に従ってマイクレーション・オペレーションを行うことが可能である。そこで、ローカルｇＪＶＭノードが、停止中の状態を表す値から停止済みの状態を表す値にローカルｇＪＶＭノードの稼動状態を変更するための要求を基本ｇＪＶＭノードに送り（ステップ１９１２）、しかる後、ローカルｇＪＶＭノードが基本ｇＪＶＭから肯定応答メッセージを受け取り（ステップ１９１４）、それによってプロセスを終了させる。
【００７２】
上述のように、基本ノードは、システムが起動した後、保守のためまたは他の目的のために基本ノードをシャットダウンすることを可能にするために、その責任を非基本ノードに委譲することが可能である。基本ノードは、シャットダウン・プロセスを開始する場合、できれば要求／応答機構を介して、新たに委譲された基本ノードとして作用するための非基本ノードを選択する。このように、基本ノードは、自身が停止中状態にある期間中、非基本ノードによっては遂行されない付加的オペレーションを遂行する。委譲オペレーションの後、新たに委譲された基本ノードがその新たなアイデンティティを、仮想マシン・クラスタに対する基本ノードとして他の非基本ノードにブロードキャストすることが可能である。それに応じて、他の非基本ノードは、それらの情報のデータ構造を更新するであろう。
【００７３】
グリッド対応仮想マシンによるパフォーマンス情報の収集
次に図２５を参照すると、リモート・クラスタ化仮想マシンからロード情報またはパフォーマンス情報を収集するための、ローカル・クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。図２５に示されるプロセスは、既知のリモートｇＪＶＭノードすべてに関するオペレーションを反復態様で遂行する。従って、プロセスは、未だ反復ループにおいて処理されてない次のリモートｇＪＶＭノードに関する情報を、ローカルｇＪＶＭノードがｇＪＶＭレジストリのローカル・コピーから得ることによって始まる（ステップ２００２）。次に、ローカルｇＪＶＭが、ロード情報に対する要求メッセージをその識別されたリモートｇＪＶＭノードに送る（ステップ２００４）。しかる後、ローカルｇＪＶＭが、リモートｇＪＶＭノードに対するロード情報を含む応答メッセージを受け取る（ステップ２００６）。その情報は、例えば、以下で図２７に関連して説明するプロセスを使用して、その後の分析のためにローカル・テーブルまたはデータベースに保存されてもよい。次に、ローカルｇＪＶＭレジストリ内に未処理のｇＪＶＭノードが存在するかどうかをローカルｇＪＶＭノードがチェックする（ステップ２００８）。もし存在すれば、プロセスは、他のリモートｇＪＶＭノードを処理するためにステップ２００２に戻るが、未処理のリモートｇＪＶＭノードが存在しない場合にはプロセスを終了させる。
【００７４】
グリッド対応仮想マシンによるパフォーマンス情報の収集
次に図２６を参照すると、ローカル・クラスタ化仮想マシンにおける現在のロードまたはパフォーマンス情報に対するクラスタ化仮想マシンからの要求に応答するための、ローカル・クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。図２６に示されるプロセスは、図２５に示されるプロセスに対して相補的であるとみるべきである。図２５におけるローカルｇＪＶＭおよびリモートｇＪＶＭは、それぞれ、図２６におけるリモートｇＪＶＭおよびローカルｇＪＶＭであり、それらの役割が逆である。プロセスは、ローカルｇＪＶＭが、ローカルｇＪＶＭおよび／またはローカル装置に関するロード情報に対する要求メッセージを受け取るときに始まる（ステップ２１０２）。例えば、ロード情報は、ローカルｇＪＶＭノードが操作しているデータ処理装置に関するＣＰＵ使用率、メモリ使用率、他のハードウェア、ソフトウェア、または計算リソースの使用率の情報、そのｇＪＶＭ内のまたはそれによって制御されるリソースに関する計算リソースの使用率の情報、または他の情報を表す値を含み得る。次に、ローカルｇＪＶＭが、要求されたロード情報を含む応答メッセージを送り（ステップ２１０４）、それによってプロセスを終了させる。
【００７５】
グリッド対応仮想マシン・ノード間のロード・バランシング・オペレーション
次に図２７を参照すると、ロードまたはパフォーマンス情報に従ってスレッドおよび／またはオブジェクト・グループを、ローカル・クラスタ化仮想マシンからリモート・クラスタ化仮想マシンにマイグレーションすることを決定するための、ローカル・クラスタ化仮想マシンにおけるプロセスのフローチャートが示される。プロセスは、ローカルｇＪＶＭノードがロード・バランシング・オペレーションを開始することを決定するときに始まる（ステップ２２０２）。それが適切である場合、ローカルｇＪＶＭノードがそれ自身のロード情報を得るかまたはチェックする（ステップ２２０４）。更に、ローカルｇＪＶＭが、例えば、図２５および図２６に関連して上述したプロセスを使用して、ｇＪＶＭクラスタ内の他のｇＪＶＭノードからロード情報を得るが（ステップ２２０６）、他のｇＪＶＭノードからのロード情報は、ロード・バランシング・オペレーションを開始するという決定が行われた後しか収集され得ないことがある。
【００７６】
ロード・バランシング・オペレーションは、クラスタ内の種々のアプリケーションを実行することによって生じたワークロードがそのｇＪＶＭクラスタ全体に分散されることを保証するために遂行することが可能である。ロード・バランシング・オペレーションは、ｇＪＶＭクラスタ内のすべてのｇＪＶＭノードが使用し得るアルゴリズムに従ってロード・バランシング・オペレーションを開始するというローカルｇＪＶＭノードにおける決定の結果であってもよい。あるいは、ロード・バランシング・オペレーションを行うという決定は、基本ｇＪＶＭノードによって、管理ユーティリティによって、管理コマンドによって、または何らかの他の機構によって制御することも可能である。例えば、ローカルｇＪＶＭノードは、それがスレッドを構成してそのスレッドをディスパッチする準備ができた後、ロード・バランシング・オペレーションを行うことが可能である。あるいは、計算リソースを節約するために、ロード・バランシング・オペレーションは、例えば、１０番目の新たに構成されたスレッドごとに、定期的に行うことも可能である。
【００７７】
次に、ローカルｇＪＶＭノードにおける何らかのリソースが、例えば、クラスタ特有のコンテキスト・パラメータにおいて表されるような、構成可能な閾値を超えたか否かをチェックするために、ローカルｇＪＶＭノードがそのロード情報の評価を始める。図２７に示される例では、２つの評価が行われる。行われる評価の数は、ロード・バランシング・アルゴリズム、使用可能なロード情報、または何らかの他の要素に依存することがある。
【００７８】
ローカルｇＪＶＭノードに対するＣＰＵロード値がＣＰＵロード閾値を超えるか否かに関する決定が行われる（ステップ２２０８）。もし超えていなければ、プロセスはステップ２２１４にブランチする。ローカルｇＪＶＭノードに対するＣＰＵロード値がＣＰＵロード閾値を超える場合、ローカルｇＪＶＭノードが使用可能なＣＰＵリソースを用いて、例えば、構成可能なロード閾値に関してリモートｇＪＶＭノードから前もって収集されたロード情報を分析することによって、リモートｇＪＶＭノードを選択する（ステップ２２１０）。しかる後、ローカルｇＪＶＭノードが、例えば、図２２および図２３に関連して説明したプロセスを使用して、ローカルｇＪＶＭノードから１つまたは複数の選択されたリモートｇＪＶＭノードにスレッドを移動させるためにマイグレーション・オペレーションを開始する（ステップ２２１２）。
【００７９】
次に、ローカルｇＪＶＭノードに対するメモリ・ロード値がメモリ・ロード閾値を超えるか否かに関する決定が行われる（ステップ２２１４）。もし超えていなければ、プロセスは終了する。ローカルｇＪＶＭノードに対するメモリ・ロード値が構成可能なメモリ・ロード閾値を超える場合、ローカルｇＪＶＭノードが、使用可能なメモリリソースを用いて、例えば、構成可能なロード閾値に関してリモートｇＪＶＭノードから前もって収集されたロード情報を分析することによって、リモートｇＪＶＭノードを選択する（ステップ２２１６）。次に、ローカルｇＪＶＭノードが、例えば、図２０および図２１に関連して上述したプロセスを使用して、ローカルｇＪＶＭノードから１つまたは複数の選択されたリモートｇＪＶＭノードにオブジェクト・グループを移動させるためにマイグレーション・オペレーションを開始し（ステップ２２１８）、それによってプロセスを終了させる。
【００８０】
論理仮想マシンにおけるマルチスレッド・アプリケーション
次に図２８を参照すると、複数の装置による、単一の論理仮想マシンにおける複数のグリッド対応仮想マシンにまたがる単一アプリケーション・イメージの実行を示すブロック図が示される。マシン２３０２〜２３０６は論理仮想マシン２３０８および論理仮想マシン２３１０をサポートする。
【００８１】
論理仮想マシン２３０８は、基本ｇＪＶＭノード２３１２によって表される単一のノードしか含まない。ノード２３１２は、論理仮想マシン２３０８に対するクラスタ名として「ＧＲＩＤ＿Ｂ」を指定したコマンド・ライン・インターフェースを介して呼び出されたということもあり得る。論理仮想マシン２３０８は単一の装置、即ち、マシン２３０６上でサポートされる。
【００８２】
対照的に、論理仮想マシン２３１０は、複数の装置、即ち、マシン２３０２〜２３０６によってサポートされる複数のｇＪＶＭノード２３１４〜２３２０を含む。マシン２３０２は、たまたま、２つのｇＪＶＭノード２３１４および２３２０を同時にサポートする。仮想マシン２３１４〜２３２０は、単一の論理仮想マシンとして相互協調する。この例では、仮想マシン２３１４〜２３２０は、Javaテクノロジを使用して実装される。従って、仮想マシン２３１４〜２３２０は Java仮想マシンとして記述されてもよい。仮想マシン２３１４〜２３２０は、グリッドのような態様で論理仮想マシンとして相互協調するための機能を組み込まれているので、各々が論理ｇＪＶＭ２３１０内のノードであるグリッド対応Java仮想マシン（ｇＪＶＭ）として記述されてもよい。
【００８３】
ｇＪＶＭノード２３１４〜２３２０の各々は、論理ｇＪＶＭ２３１０に対するクラスタ名として「ＧＲＩＤ＿Ａ」を指定されたコマンド・ライン・インターフェースを介して呼び出されたということもあり得る。ノード２３１６〜２３２０は非基本ノードである。ｇＪＶＭ２３１４は、起動時に基本ノードとして指定されたが、それは、その後の時点で、論理ｇＪＶＭ２３１０内の他のノードに基本ノードとしてそのステータスを委ねることも可能である。この例では、ノード２３１４〜２３２０は、同じアプリケーション・プログラムの固有のインスタンスである。上述の方法を使用して、ｇＪＶＭノード２３１６〜２３２０は、基本ｇＪＶＭノード２３１４によって管理されるノードのクラスタ／グリッドに登録する。オブジェクトに対するリモート参照およびｇＪＶＭノード間の調整は、ｇＪＶＭノードが確立することができるｇＪＶＭ−ｇＪＶＭ（ピア・ツー・ピア）通信リンクを介して行われる。
【００８４】
本発明によって、１つのｇＪＶＭにおいて起動するアプリケーション・プログラムが、複数のｇＪＶＭノードにまたがる態様でその後に実行し得るよう、複数のｇＪＶＭノードが論理ｇＪＶＭとして相互協調する。図２８における例では、メイン・スレッド２３２２を含むアプリケーションがｇＪＶＭノード２３１８において起動されており、その二次スレッド２３２４の１つがｇＪＶＭノード２３１８においても実行される。更に、同じアプリケーションの二次スレッド２３２６〜２３３２が論理ｇＪＶＭ２３１０におけるｇＪＶＭノード２３１４および２３１６において実行される。
【００８５】
本発明は、Javaアプリケーション２３３４が標準のJavaアプリケーション・モデルから逸脱することを必要とすることなく、論理ｇＪＶＭ２３１０おいて実行されるJavaアプリケーション２３３４のワークロードをノード２３１４〜２３２０が共有することを可能にする。換言すれば、Javaアプリケーション２３３４は如何なる専有の機能も必要とせず、ｇＪＶＭノード２３１４〜２３２０は、専有のアプリケーション・エージェントが複数のＪＶＭにわたってJavaアプリケーション２３３４の代わりに作用することを必要としない。本発明によって、ｇＪＶＭノード２３１４〜２３２０は、Javaアプリケーションを実行するためにグリッドのような態様で相互協調するための機能を組み込んでいる。
【００８６】
オブジェクト・グループ２３３６〜２３４６は、論理ｇＪＶＭ２３１０全体にわたって分散される。如何なる所与のアプリケーション・スレッドも、当該アプリケーション・スレッドまたは同じアプリケーションにおける他のスレッドが幾つかのオブジェクト・グループを構成または割り振りしようとしまいと、それらのオブジェクト・グループに存在するオブジェクトを参照することが可能である。従って、所与のスレッドが、ローカル・オブジェクト・グループにおけるオブジェクトまたはリモート・オブジェクト・グループにおけるオブジェクトを、そのオブジェクト・グループがローカルｇＪＶＭノードまたはリモートｇＪＶＭノードにおける所与のスレッドまたは他のスレッドと関連付けられていようといまいと、参照することが可能である。実際に、オブジェクト・グループが如何なる現存のスレッドとも関連しないこともあり得るし、あるいは、オブジェクトがローカルｇＪＶＭノードまたはリモートｇＪＶＭノードにおける所謂グローバル・オブジェクト・グループに含まれることもあり得る。図２８に示された例では、スレッド２３３０は、ローカルｇＪＶＭノード内のオブジェクト・グループ２３３６および２３４６におけるオブジェクトを参照するが、リモートｇＪＶＭノード２３１６内のオブジェクト・グループ２３３８におけるオブジェクトも参照するものとして示される。
【００８７】
本発明の利点は、上述した詳細な説明を参照すれば明らかであろう。仮想マシンにおいて実行されるアプリケーションは、複数の仮想マシンにわたってグリッドのような態様で実行されることが可能であり、それによって、計算リソースが補償のためのユーティリティのようなサービスとして提供されることを可能にする。データ処理システムおよび装置がシャットダウンされるとき、それらのシステムおよび装置におけるクラスタ化可能な仮想マシンが停止することがある。それらのシステムおよび装置におけるスレッドおよびオブジェクトが他のシステムおよび装置にマイグレーションされることが可能であり、一方、仮想マシン・クラスタは、如何なるアプリケーションも、たとえ異なるシステムおよび装置のセットにおいても、稼動し続けることを可能にする。
【００８８】
十分に機能するデータ処理システムに関連して本発明を説明したが、コンピュータ可読媒体における命令の形式および種々の他の形式で本発明のプロセスを分配することが、その分配を実行するために実際に使用される信号担持媒体の特定のタイプに関係なく、可能であるということが当業者には明らかであることに留意することは重要である。コンピュータ可読媒体の例は、ＥＰＲＯＭ、ＲＯＭ、テープ、ペーパー、フレキシブル・ディスク、ハードディスク・ドライブ、ＲＡＭ、およびＣＤ−ＲＯＭのような媒体、並びに、デジタルおよびアナログ通信リンクのような通信タイプの媒体を含む。
【００８９】
方法は、一般に、所望の結果を導くステップの筋の通ったシーケンスであると思われる。これらのステップは、物理量の物理操作を必要とする。通常、これらの量は、保存されること、転送されること、結合されること、比較されること、および他の何らかの形で操作されることを可能にする電気的または磁気的信号の形を必ずしも取る必要はない。これらの信号を、ビット、値、パラメータ、アイテム、エレメント、オブジェクト、記号、文字、用語、数字等として参照することは、主として一般的な用法という理由で、ときには便利である。しかし、これらの用語および同様の用語がすべて、適切な物理量に関連付けられるべきであるということ、およびこれらの量に適用された単に都合のよいラベルであるということは留意すべきである。
【００９０】
本発明の説明は例示することを目的に行われたが、網羅的であることまたは開示された実施例に限定されることを意図するものではない。多くの修正および変更が当業者には明らかであろう。実施例は、発明の原理およびその実用的な応用を説明するために選ばれたし、他の意図された用途に適するものとして種々の実施例を種々の修正によって実装すべく当業者が本発明を理解することを可能にするために選ばれた。
【図面の簡単な説明】
【００９１】
【図１】それぞれが本発明を実施し得るデータ処理システムの典型的なネットワークを示す概略図である。
【図２】本発明を実施し得るデータ処理システムにおいて使用することが可能な典型的なコンピュータ・アーキテクチャを示す概略図である。
【図３】本発明の実施形態に従う、分散データ処理システムにおける仮想マシン・クラスタを示すブロック図である。
【図４】本発明の実施形態に従って、仮想マシンをクラスタ化可能な仮想マシンとして機能拡張するために使用することが可能なコンポーネントおよび情報を示すブロック図である。
【図５】クラスタ化仮想マシン間のオブジェクト・グループの転送態様を示すブロック図である。
【図６】クラスタ化仮想マシン間のオブジェクト・グループの転送態様を示すブロック図である。
【図７】クラスタ化仮想マシン間のオブジェクト・グループの転送態様を示すブロック図である。
【図８】基本ｇＪＶＭノードを初期設定するためのプロセスを示すフローチャートである。
【図９】初期設定されるべき非基本ｇＪＶＭノードに固有ｇＪＶＭ識別子を割り振るための基本ｇＪＶＭノードにおけるプロセスを示すフローチャートである。
【図１０】初期設定されるべき非基本ｇＪＶＭノードに固有ｇＪＶＭ識別子を割り振るための基本ｇＪＶＭノードにおける代替プロセスを示すフローチャートである。
【図１１】非基本ｇＪＶＭノードに固有ｇＪＶＭ識別子を割り振るための基本ｇＪＶＭノードにおけるプロセスを示すフローチャートである。
【図１２】非基本ｇＪＶＭノードにｇＪＶＭクラスタに関する情報を提供するための基本ｇＪＶＭノードにおけるプロセスを示すフローチャートである。
【図１３】非基本ｇＪＶＭノードの稼動状態を変更するための基本ｇＪＶＭノードにおけるプロセスを示すフローチャートである。
【図１４】オブジェクト・グループのマイグレーション状態を変更するための基本ｇＪＶＭノードにおけるプロセスを示すフローチャートである。
【図１５】非基本ｇＪＶＭノード初期設定するためのプロセスを示すフローチャートである。
【図１６】クラスタ化仮想マシンにおいてスレッドが構成されるプロセスを示すフローチャートである。
【図１７】クラスタ化仮想マシンにおいてスレッドが破壊されるプロセスを示すフローチャートである。
【図１８】クラスタ化仮想マシンにおいてオブジェクトが構成されるプロセスを示すフローチャートである。
【図１９】クラスタ化仮想マシンにおいてオブジェクトへのアクセスを処理するためのプロセスを示すフローチャートである。
【図２０】ローカル・クラスタ化仮想マシンにおいてオブジェクト・グループをリモート・クラスタ化仮想マシンにマイグレーションするためのプロセスを示すフローチャートである。
【図２１】ローカル・クラスタ化仮想マシンにおいてリモート・クラスタ化仮想マシンからのオブジェクト・グループのマイグレーションを受け入れるためのプロセスを示すフローチャートである。
【図２２】ローカル・クラスタ化仮想マシンにおいてリモート・クラスタ化仮想マシンにスレッドをマイグレーションするためのプロセスを示すフローチャートである。
【図２３】ローカル・クラスタ化仮想マシンにおいてリモート・クラスタ化仮想マシンからのスレッドのマイグレーションを受け入れるためのプロセスを示すフローチャートである。
【図２４】ローカル・クラスタ化仮想マシンにおいてクラスタ化仮想マシンに関するシャットダウン・オペレーションを遂行するためのプロセスを示すフローチャートである。
【図２５】ローカル・クラスタ化仮想マシンにおいてリモート・クラスタ化仮想マシンからロードまたはパフォーマンス情報を収集するためのプロセスを示すフローチャートである。
【図２６】ローカル・クラスタ化仮想マシンにおいて、ローカル・クラスタ化仮想マシンにおける現在のロードまたはパフォーマンス情報に対するクラスタ化仮想マシンからの要求に応答するためのプロセスを示すフローチャートである。
【図２７】ローカル・クラスタ化仮想マシンにおいて、ロードまたはパフォーマンス情報に従ってローカル・クラスタ化仮想マシンからリモート・クラスタ化仮想マシンにスレッドおよびオブジェクト・グループをマイグレーションすることを決定するためのプロセスを示すフローチャートである。
【図２８】複数の装置による、単一の論理仮想マシンにおける複数のグリッド対応仮想マシンにまたがる単一アプリケーション・イメージの実行を示すブロック図である。
【図１】
2007519110.tif 000003
【図２】
2007519110.tif 000004
【図３】
2007519110.tif 000005
【図４】
2007519110.tif 000006
【図５】
2007519110.tif 000007
【図６】
2007519110.tif 000008
【図７】
2007519110.tif 000009
【図８】
2007519110.tif 000010
【図９】
2007519110.tif 000011
【図１０】
2007519110.tif 000012
【図１１】
2007519110.tif 000013
【図１２】
2007519110.tif 000014
【図１３】
2007519110.tif 000015
【図１４】
2007519110.tif 000016
【図１５】
2007519110.tif 000017
【図１６】
2007519110.tif 000018
【図１７】
2007519110.tif 000019
【図１８】
2007519110.tif 000020
【図１９】
2007519110.tif 000021
【図２０】
2007519110.tif 000022
【図２１】
2007519110.tif 000023
【図２２】
2007519110.tif 000024
【図２３】
2007519110.tif 000025
【図２４】
2007519110.tif 000026
【図２５】
2007519110.tif 000027
【図２６】
2007519110.tif 000028
【図２７】
2007519110.tif 000029
【図２８】
2007519110.tif 000030
【国際調査報告】
2007519110.tif 000031
2007519110.tif 000032
2007519110.tif 000033
2007519110.tif 000034