(57)【特許請求の範囲】
【請求項１】
クラスタコンピューティングシステムを含むコンピューティング環境において、デバッギングプロセスを起動する方法であって、
クラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを、ヘッドノードのスケジューラを介して受信するステップであって、前記デバッグジョブがパブリックネットワーク上のクライアントから生じ、前記ヘッドノードは、前記クラスタプライベートネットワークおよび前記パブリックネットワークの両方に接続され、前記パブリックネットワークは、前記クラスタプライベートネットワークの外部に存在する、ステップと、
前記コンピュートノードにおいて前記デバッグジョブを処理することに着手し、結果として、前記コンピュートノードにおいてデバッガリモートエージェントを始動させることによって、デバッギングを開始するステップであって、前記デバッガリモートエージェントが、ネットワークポートをオープンし、前記クライアントにおけるデバッガクライアントから生ずるデバッガ接続要求を前記ネットワークポートにおいてリスンすることを含む、ステップと、
前記コンピュートノードにおける前記始動させたデバッガリモートエージェントの存在下で、前記コンピュートノードにおいてユーザジョブを処理することに着手するステップと、
前記ユーザジョブをデバッグする準備が前記デバッガリモートエージェントにおいて整ったことを前記クライアントに通知するステップと、
前記クライアントに通知した結果として、前記コンピュートノードにおける前記デバッガリモートエージェントが、前記ネットワークポートにおいてデバッガ接続要求を受け、前記クライアントにおける前記デバッガクライアントを前記デバッガリモートエージェントに接続するステップと
を含むことを特徴とする方法。
【請求項２】
前記クライアントは、リスナを含み、前記クライアントにおける前記デバッガクライアントを前記デバッガリモートエージェントに接続することが、前記リスナを前記デバッガリモートエージェントに接続することを含むことを特徴とする請求項１に記載の方法。
【請求項３】
通信は、前記クライアントからプルされることを特徴とする請求項２に記載の方法。
【請求項４】
通信は、前記クライアントからプッシュされることを特徴とする請求項２に記載の方法。
【請求項５】
前記クライアントと前記コンピュートノードの間の通信は、前記パブリックネットワークと前記クラスタプライベートネットワークの両方に結合されたシステム上のプロキシを介するものであることを特徴とする請求項１に記載の方法。
【請求項６】
前記クライアントと前記コンピュートノードの間の通信は、前記パブリックネットワークと前記クラスタプライベートネットワークの両方に結合されたシステム上のＮＡＴサービスを介するものであることを特徴とする請求項１に記載の方法。
【請求項７】
前記ユーザジョブを前記パブリックネットワーク上の前記クライアントから前記ヘッドノードの前記スケジューラを介して受信するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記クライアントと前記コンピュートノードの間の通信を円滑化するために、１つまたは複数のプロキシポートをオープンするステップをさらに含み、前記１つまたは複数のプロキシポートは、１３２２５から１３７１９までの範囲から選択されることを特徴とする請求項１に記載の方法。
【請求項９】
前記クライアントは、クラスタコンピューティング用のアプリケーションを開発するために開発者によって使用される開発者アプリケーションを含み、前記クライアントからのメッセージは、前記開発者アプリケーションから受信されることを特徴とする請求項１に記載の方法。
【請求項１０】
クラスタコンピューティングシステムを含むコンピューティング環境において、デバッギングプロセスをアタッチする方法であって、
ユーザジョブを実行しているクラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを始動させるためのメッセージを、パブリックネットワーク上のクライアントから、前記クラスタプライベートネットワークと前記パブリックネットワークの両方に接続されたヘッドノードを介して受信するステップであって、前記パブリックネットワークは、前記クラスタプライベートネットワークの外部に存在する、ステップと、
前記コンピュートノードにおいて前記デバッグジョブを処理することに着手し、結果として、前記コンピュートノードにおいてデバッガリモートエージェントを始動させることによって、前記ユーザジョブのデバッギングを開始するステップであって、前記デバッガリモートエージェントが、ネットワークポートをオープンし、前記クライアントにおけるデバッガクライアントから生ずるデバッガ接続要求を前記ネットワークポートにおいてリスンすることを含む、ステップと、
前記ユーザジョブをデバッグする準備が前記デバッガリモートエージェントにおいて整ったことを前記クライアントに通知するステップと、
前記クライアントに通知した結果として、前記コンピュートノードにおける前記デバッガリモートエージェントが、前記ネットワークポートにおいてデバッガ接続要求を受け、前記クライアントにおけるデバッガクライアントを前記デバッガリモートエージェントに接続するステップと
を含むことを特徴とする方法。
【請求項１１】
前記クライアントは、リスナを含み、前記クライアントにおける前記デバッガクライアントを前記デバッガリモートエージェントに接続することが、前記リスナを前記デバッガリモートエージェントに接続することを含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
通信は、前記クライアントからプルされることを特徴とする請求項１１に記載の方法。
【請求項１３】
通信は、前記クライアントからプッシュされることを特徴とする請求項１１に記載の方法。
【請求項１４】
前記クライアントと前記コンピュートノードの間の通信は、前記パブリックネットワークと前記クラスタプライベートネットワークの両方に結合されたシステム上のプロキシを介するものであることを特徴とする請求項１０に記載の方法。
【請求項１５】
前記クライアントと前記コンピュートノードの間の通信は、前記パブリックネットワークと前記クラスタプライベートネットワークの両方に結合されたシステム上のＮＡＴサービスを介するものであることを特徴とする請求項１０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタコンピューティングシステムを含むコンピューティング環境において、デバッギングプロセスを起動およびアタッチする方法に関する。
【背景技術】
【０００２】
コンピュータおよびコンピューティングシステムは、現代生活のほぼすべての局面に影響を及ぼすようになった。一般に、コンピュータは、仕事、レクリエーション、ヘルスケア、運輸、娯楽、家政などに関与する。
【０００３】
さらに、コンピューティングシステムの機能は、ネットワーク接続を介して他のコンピューティングシステムとの相互接続を可能にするコンピューティングシステムの能力によって高めることができる。ネットワーク接続は、有線もしくは無線イーサネット（登録商標）を介する接続、セルラ接続、またはシリアル、パラレル、ＵＳＢ、もしくは他の接続を介するコンピュータ対コンピュータの接続さえも含むことができるが、それらに限定されない。これらの接続は、コンピューティングシステムが、他のコンピューティングシステムにおけるサービスにアクセスすること、およびアプリケーションデータを他のコンピューティングシステムから素早く効率的に受け取ることを可能にする。
【０００４】
相互接続されたコンピュータは、クラスタコンピューティングを実施するために使用することができる。クラスタコンピューティングは、ジョブが単一のコンピュータで実行するには大きすぎる場合でも、多数のコンピュータを使用することによってジョブを実行する。代わりに、ジョブは細分化され、細分化されたジョブが、クラスタ内の個々のコンピュータシステムに送られる。一般に、クラスタは、ヘッドノード（ｈｅａｄ  ｎｏｄｅ）を用いて実施され、ヘッドノードは、ジョブを受け入れ、ジョブまたはジョブの部分をクラスタ内のコンピュートノード（ｃｏｍｐｕｔｅ  ｎｏｄｅ）に割り当てる。一般に、コンピュートノードは、プライベートネットワーク（ｐｒｉｖａｔｅ  ｎｅｔｗｏｒｋ）内で実施されるが、プライベートネットワークは、その外部のコンピュータシステムによっては公的にアクセス可能ではない。ヘッドノードは、クラスタにジョブを提出したいことがある外部クライアントからジョブを受け入れることができるように、プライベートネットワークと１つまたは複数のパブリックネットワーク（ｐｕｂｌｉｃ  ｎｅｔｗｏｒｋ）の両方のメンバとすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
コンピューティングシステムでは、システムがクラッシュすること、または予期せぬ結果を返すことに関して生じる問題がしばしば起こる。システムクラッシュまたは予期せぬ結果の原因を決定するために、様々なデバッギング技法が使用される。いくつかの技法は、デバッガの使用を必要とする。デバッガは、実行中コードと一緒に、またはその下で動作するソフトウェアアプリケーションとすることができる。デバッガは、コードをステップ実行する（すなわち、一まとまりの多くの命令を実行し、その後、ユーザ入力を待ってから、次の一まとまりの多くの命令を実行する）ためや、実行中コード内のあるポイントで実行を停止させるためにコード内にブレイクポイントを設定するためなどに使用することができる。しかし、クラスタシステムでは、開発者がデバッグしたいシステムは、開発者によって直接的にアクセス可能なシステムの外部のネットワーク上にあることがあるという事実に鑑みて、デバッガを始動させることがより難しくなり得る。すなわち、開発者は、パブリックネットワーク上のクライアント上で開発者アプリケーション（ｄｅｖｅｌｏｐｅｒ  ａｐｐｌｉｃａｔｉｏｎ）を使用していることがあり、一方、デバッグされるアプリケーションは、パブリックネットワーク上のクライアントコンピュータによって直接的にアクセス可能ではないプライベートネットワーク上にあるクラスタ上のジョブとして動作していることがある。したがって、デバッグしたいシステムが、デバッガを直接的に提供できないことがある。それどころか、デバッガをコンピュートクラスタ上で実行しているジョブに接続するには、クラスタのノードがクライアントと同じネットワーク上にあること、および／またはユーザがコンピュートクラスタに管理的アクセスを行えることが必要なことがある。
【０００６】
本出願において特許請求される本発明は、何らかの不都合を解決する実施形態、または上で説明したような環境においてのみ動作する実施形態に限定されない。むしろ、この「背景技術」は、本明細書で説明するいくつかの実施形態を実施できる１つの例示的な技術領域を説明するためにもっぱら提供されている。
【課題を解決するための手段】
【０００７】
本明細書で説明する一実施形態は、クラスタコンピューティングシステムを含むコンピューティング環境において実施することができる。実施形態は、デバッギングプロセスを起動するためのステップを有する方法を含む。方法は、クラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを、パブリックネットワーク上のクライアントから、ヘッドノードのスケジューラを介して受信するステップを含む。ヘッドノードは、クラスタプライベートネットワークおよびパブリックネットワークの両方に接続される。パブリックネットワークは、クラスタプライベートネットワークの外部に存在する。方法は、デバッグジョブを処理することに着手し、結果として、コンピュートノードにおいて１つまたは複数のデバッガリモートエージェント（ｄｅｂｕｇｇｅｒ  ｒｅｍｏｔｅ  ａｇｅｎｔ）を始動させることによって、デバッギングを開始するステップをさらに含む。方法は、コンピュートノードにおいて、始動させたデバッガリモートエージェントの存在下で、ユーザジョブを処理することに着手するステップをさらに含む。クライアントは、ユーザジョブをデバッグする準備が１つまたは複数のデバッガリモートエージェントにおいて整った旨の通知を受ける。クライアントにおけるデバッガクライアントは、１つまたは複数のデバッガリモートエージェントに接続される。
【０００８】
別の実施形態は、クラスタコンピューティングシステムを含むコンピューティング環境において実施される。この実施形態は、デバッギングプロセスをアタッチするためのステップを有する方法を含む。方法は、ユーザジョブを実行しているクラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを始動させるためのメッセージを、パブリックネットワーク上のクライアントから、クラスタプライベートネットワークとパブリックネットワークの両方に接続されたシステムを介して受信するステップを含む。パブリックネットワークは、クラスタプライベートネットワークの外部に存在する。方法は、デバッグジョブを処理することに着手し、結果として、コンピュートノードにおいて１つまたは複数のデバッガリモートエージェントを始動させることによって、ユーザジョブのデバッギングを開始するステップをさらに含む。クライアントは、ユーザジョブをデバッグする準備が１つまたは複数のデバッガリモートエージェントにおいて整った旨の通知を受ける。クライアントにおけるデバッガクライアントは、１つまたは複数のデバッガリモートエージェントに接続される。
【０００９】
この「課題を解決するための手段」は、以下の「発明を実施するための形態」においてさらに説明する概念からの抜粋を簡略な形で紹介するために提供される。この「課題を解決するための手段」は、特許請求される本発明の主要な特徴または必須の特徴を識別することは意図しておらず、特許請求される本発明の範囲を決定する際の助けとして使用することも意図していない。
【００１０】
さらなる特徴および利点は、以下の説明において説明され、部分的には説明から明らかであり、または本明細書の教示を実施することによって知ることができる。本発明の特徴および利点は、特に添付の特許請求の範囲において指摘される機器および組み合わせを用いて実現および獲得することができる。本発明の特徴は、以下の説明および添付の特許請求の範囲からより十分に明らかになり、以下で説明するように本発明を実施することによって知ることができる。
【００１１】
上述および他の利点および特徴を獲得できる方法を説明するため、上で簡潔に説明した本発明のより詳細な説明が、添付の図面に示される特定の実施形態を参照して行われる。これらの図面は典型的な実施形態を示すにすぎず、したがって、範囲について限定的であると見なされるべきではないことを理解したうえで、添付の図面を使用して、さらに特定的かつ詳細に実施形態を記述および説明する。
【図面の簡単な説明】
【００１２】
【図１】プロキシを使用するデバッガ起動シナリオを示す図である。
【図２】プロキシを使用するデバッガアタッチシナリオを示す図である。
【図３】ＮＡＴ転送を使用するデバッガ起動シナリオを示す図である。
【図４Ａ】ＮＡＴ転送を使用するデバッガアタッチシナリオを示す図である。
【図４Ｂ】ＮＡＴ転送を使用するデバッガアタッチシナリオを示す図である。
【図５】デバッガを起動する方法を示す図である。
【図６】デバッガをアタッチする方法を示す図である。
【発明を実施するための形態】
【００１３】
本明細書では、クラスタのためのデバッギング機能を含む様々な実施形態が開示される。実施形態は、デバッガ制御の下でジョブを起動するための機能を含むことができる。あるいは、実施形態は、既存のジョブにデバッガをアタッチするための機能を含むことができる。説明するように、これらの実施形態のいくつかは、コンピュートノードに直接的なクライアントアクセスを行わずに、またはクラスタ上で管理特権を有することなく、上記の機能を実施することができる。
【００１４】
図１は、説明的なものである。図１は、パブリックネットワーク１０４上にクライアント１０２を示している。クライアントは、クラスタにジョブを提供することを望むことができる。クラスタは、ジョブに関連する作業を実行する、コンピュートノード１０６などの、コンピュートノードを有することができる。図１は、一般に、実施形態が、ヘッドノード１１０によってジョブを割り当てることができる複数のコンピュートノード１０６を含むことを示している。コンピュートノードは、パブリックネットワーク１０４から分離されているプライベートネットワーク１０８上に存在することができる。特に、プライベートネットワーク１０８は、パブリックネットワーク１０４上のシステムがプライベートネットワーク１０８上のシステムと直接的に通信できないように、パブリックネットワーク１０４から隔離される。例えば、これらのネットワークは、異なるドメインを有することができる。
【００１５】
代わりに、クライアント１０２は、ヘッドノード１１０および／またはルーティングノード（ｒｏｕｔｉｎｇ  ｎｏｄｅ）１１２などの１つまたは複数のシステムを使用して実施できる仲介手段（ｉｎｔｅｒｍｅｄｉａｒｙ）を介して、ジョブおよび他の通信を提供する。クライアント１０２は、ジョブを仲介手段に提出することができ、その後、仲介手段が、ジョブを１つまたは複数のコンピュートノード１０６に転送する。クライアント１０２によって提出されたジョブは、コンピュートノード１０６によって実行されている間に、エラーを生じることがある。本明細書で説明する実施形態は、エラーをデバッグするために、クラスタ上でクライアント１０２によってデバッギングを開始するための機能を含むことができる。一例では、これは、リモートエージェントデバッガを起動した後で、コードをデバッガリモートエージェント上で実行することによって行うことができる。
【００１６】
説明的な一例では、デバッギングプロセスの起動は、クラスタプライベートネットワーク１０６の外部のパブリックネットワーク１０４上のクライアント１０２が、ユーザジョブをデバッガタスクとともにヘッドノード１１０などの仲介手段に送信することによって実行することができる。ヘッドノード１１０は、１つまたは複数のコンピュートノード１０６がデバッガタスクを実行するためのジョブを生成することができる。コンピュートノード１０６におけるデバッガタスクの実行は、クラスタプライベートネットワーク１０８上の１つまたは複数のコンピュートノード１０６において１つまたは複数のデバッガリモートエージェント１１４を始動させることによって、クライアント１０２（または他の何らかのシステム）から先に送信されたユーザジョブのリモートデバッギングを開始する。その後、クライアント１０２は、デバッギングを行う準備がリモートエージェント１１４において整った旨の通知を受けることができる。いくつかの実施形態では、これは、パブリックネットワークシステム１０４がプライベートネットワーク１０８システムに呼び掛けることを可能にするプロキシを含むルーティングノード１１２を使用することによって達成することができる。さらに、クライアント１０２は、デバッガクライアントを有することができる。クライアント１０２のデバッガクライアントは、例えばルーティングノード１１２などを介して、デバッガリモートエージェントに接続することができる。
【００１７】
以下では、一例についてのさらなる詳細が説明される。特に、引き続き図１を参照する以下の例では、開発者アプリケーション１１６を含む統合開発環境（ｉｎｔｅｇｒａｔｅｄ  ｄｅｖｅｌｏｐｍｅｎｔ  ｅｎｖｉｒｏｎｍｅｎｔ）を使用できる一実施形態が説明される。開発者アプリケーションは、アプリケーション、特にクラスタコンピューティング向けのアプリケーションを開発する開発者によって使用することができる。説明される特定の例では、開発者アプリケーション１１６は、ワシントン州レドモンドに本社を置くＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎが販売するＶｉｓｕａｌ  Ｓｔｕｄｉｏ（登録商標）を使用して実施することができる。
【００１８】
１に示されるように、開発者アプリケーション１１６は、リスナ（ｌｉｓｔｅｎｅｒ）１１８を生成する。リスナ１１８は、通信を円滑化するために、ポートＤ１をオープンする。いくつかの実施形態では、割り当てられるポートは（本明細書で説明する他のポートと同様に）、１３２２５から１３７１９の範囲内のポートとすることができるが、それは、これらのポートが一般には割り当てられることがないからである。リスナ１１８は、ローカルアドミニストレータとして動作するルーティングノード１１２上のよく知られたプロキシサービス１２０へのリンクＰをオープンする。いくつかの実施形態では、構成データまたはプロジェクト設定に基づいて、プロキシを選択することができる。リスナ１１８は、本明細書ではＩｎｉｔＰｒｏｘｙ（Ｄ１，Ｕ）として示されるメッセージである初期化メッセージを、Ｐを介して、プロキシサービス１２０に送信し、ここで、Ｕは、ユーザのクラスタ資格証明書（ｃｌｕｓｔｅｒ  ｃｒｅｄｅｎｔｉａｌ）である。プロキシサービス１２０は、ユーザ資格証明書（Ｕ）を用いてプロキシのインスタンスをフォーク（ｆｏｒｋ）し、それとＩｎｉｔＰｒｏｘｙメッセージに対する応答テキストとをＤ１に渡す。いくつかの実施形態では、本明細書で説明する送信および受信メッセージには暗号化を施すことができることに留意されたい。
【００１９】
２に示されるように、プロキシ１２２は、Ｄ１のためのプロキシ１１２へのＤ１ｐをオープンし、新しいプロキシ要求のためのポートＰ１をオープンし、応答ＩｎｉｔＰｒｏｘｙＲｅｐｌｙ（Ｐ１，Ｄ１ｐ）をリスナ１１８に返送する。
【００２０】
３に示されるように、リスナ１１８は、ヘッドノード１１０のスケジューラ１２４に新しいジョブメッセージ：ＮｅｗＪｏｂ（ＤｅｂｕｇＳｔａｒｔ，Ｐ１，Ｄ１ｐ）を送信する。このメッセージは、新しいデバッガジョブを指定する。いくつかの実施形態では、リスナが回送を行うためのヘッドノード１１０およびスケジューラ１２４の情報は、構成データおよび／または開発プロジェクト設定内に含めることができる。
【００２１】
４に示されるように、スケジューラ１２４は、各コンピュートノード１０６において、ＤｅｂｕｇＳｔａｒｔ（Ｐ１，Ｄ１ｐ）を実行するジョブを生成する。
【００２２】
５に示されるように、デバッグスタート１２６は、アドレスＤ２を選択し、この例ではｍｓｖｓｍｏｎ（Ｄ２，Ｅ）を呼び出すことによって、適切なリモートエージェント１１４を始動させ、イベントＥを待つ。リモートエージェント１１４が始動し、接続のためにＤ２をオープンする。リモートエージェント１１４は、Ｄ２上での受信の準備が整ったとき、イベントＥを設定する。
【００２３】
６に示されるように、デバッグスタート１２６は、ルーティングメッセージＲｏｕｔｅＴｏ（Ｄ２）をプロキシ１２２（Ｐ１）に送信する。プロキシ１２２は、プロキシポート（ｐｒｏｘｉｅｄ  ｐｏｒｔ）Ｄ２ｐを生成する。
【００２４】
７に示されるように、プロキシは、ルーティング応答メッセージＲｏｕｔｅＴｏＲｅｐｌｙ（Ｄ２ｐ）を用いてデバッグスタート１２６に応答する。
【００２５】
８に示されるように、デバッグスタート１２６は、デバッグエージェントが始動されたことを示すメッセージＤｅｂｕｇＡｇｅｎｔＳｔａｒｔｅｄ（Ｄ２ｐ）をＤ１ｐを介してプロキシ１２２に送信する。
【００２６】
９において、プロキシ１２２は、ＤｅｂｕｇＡｇｅｎｔＳｔａｒｔｅｄメッセージをＤ１を介してリスナ１１８に転送する。リスナ１１８は、開発者アプリケーション１１６のデバッガを呼び出し、Ｄ２ｐを介してリモートエージェントに接続するようにデバッガに命令する。
【００２７】
１０に示されるように、開発者アプリケーションのデバッガは、Ｄ２ｐを介してプロキシ１２２とのリモートデバッギングセッションをオープンする。
【００２８】
１１に示されるように、プロキシ１２２は、Ｄ２を介してリモートエージェント１１４とのセッションをオープンする。プロキシ１２２は、両方向にデバッギングメッセージを回送する。開発者アプリケーションのデバッガは、プロキシ１２２を通して、リモートエージェント１１４にユーザプロセス１２８を起動するように命令する。ユーザプロセス１２８は、デバッグされるプロセスとすることができる。リモートエージェント１１４は、ユーザプロセス１２８を起動して、ユーザプロセス１２８を識別するプロセス識別子を返す。開発者アプリケーションのデバッガは、起動が完了したことをリスナ１１８に通知し、リスナ１１８にプロセス識別子ｐｉｄを与える。
【００２９】
１２に示されるように、リスナ１１８は、ＤｅｂｕｇＡｇｅｎｔＳｔａｒｔｅｄＲｅｐｌｙ（ｐｉｄ）メッセージをＤ２ｐを介してプロキシ１２２に送信する
【００３０】
１３に示されるように、プロキシ１２２は、応答をデバッグスタート１２６に転送する。デバッグスタート１２６は、ユーザプロセス１２８へのハンドルをオープンし、その終了を待つ。
【００３１】
上で説明した例には、様々な構成要素が示されている。以下の説明では、これらの構成要素のいくつかについてさらに詳細に説明する。
【００３２】
説明した例におけるリスナ１１８は、デバッギング開始時に生成され、デバッギングセッションが終了するまで存続し続ける、開発者アプリケーション１１６の構成要素である。リスナ１１８の目的は、デバッギングセッションに加わることを望むリモートプロセスのために、開発者アプリケーション１１６のデバッギングを開始することである。リスナ１１８は、リモートデバッギングセッションを開始するよう求める要求に応答するサービス（一例では、ワシントン州レドモンドに本社を置くＭｉｃｒｏｓｏｆｔ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎが販売する、Ｗｉｎｄｏｗｓ（登録商標）  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｆｏｕｎｄａｔｉｏｎ（登録商標））である。以下では、リモートデバッギングセッションを開始するよう求める要求の一例について説明する。
ＰＩＤ  ＩｎｉｔｉａｔｅＲｅｍｏｔｅＤｅｂｕｇＳｅｓｓｉｏｎ（Ｅｎｄｐｏｉｎｔ  ＲｅｍｏｔｅＡｇｅｎｔＡｄｄｒｅｓｓ，Ｅｎｄｐｏｉｎｔ  ＰｒｏｘｙＡｄｄｒｅｓｓ）  
【００３３】
このメッセージに応答して、リスナ１１８は、開発者アプリケーション１１６のデバッガリモート起動／アタッチコードを呼び出し、それに、ＲｅｍｏｔｅＡｇｅｎｔＡｄｄｒｅｓｓと、任意選択的にＰｒｏｘｙＡｄｄｒｅｓｓと、ユーザ資格証明書を提供する。開発者アプリケーション１１６の起動コードは、（プロキシ１２２を介する）ＲｅｍｏｔｅＡｇｅｎｔＡｄｄｒｅｓｓへの接続をオープンし、起動（または以下で説明するようにアタッチ）を行うように要求する。正常終了すると、プロセス識別子（ｐｉｄ）がリスナ１１８に返される。リスナ１１８は、ｐｉｄを用いてメッセージに応答する。複数のメッセージを予期することができる。いくつかの実施形態では、リスナ１１８は、受信したすべてのメッセージに応答する。
【００３４】
プロキシサービス１２０は、ルーティングノード１１２上で、ローカルシステム資格証明書（ｌｏｃａｌ  ｓｙｓｔｅｍ  ｃｒｅｄｅｎｔｉａｌ）の下で動作するサービスである。いくつかの実施形態では、プロキシサービス１０２は、Ｗｉｎｄｏｗｓ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｆｏｕｎｄａｔｉｏｎ（登録商標）サービスとすることができる。プロキシサービス１２０は、デバッギングセッションのためにプロキシ１２２を始動させる。プロキシサービス１２０は、よく知られたアドレスを発行し、そのアドレスにおいてプロキシ要求をリスン（ｌｉｓｔｅｎ）する。以下では、例示的な発行メッセージについて説明する。
Ｅｎｄｐｏｉｎｔ  ＮｅｗＰｒｏｘｙＳｅｓｓｉｏｎ（Ｃｒｅｄｅｎｔｉａｌｓ  ｕｓｅｒＣｒｅｄｅｎｔｉａｌｓ）  
【００３５】
要求が到着すると、プロキシサービス１２０は、ユーザ資格証明書を確認し、エンドポイントポートを割り当て、ユーザの資格証明書の下でプロキシ１２２のプロセスを始動させる。プロキシサービス１２０は、プロキシ１２２がエンドポイントをオープンするのを待ち、その後、プロキシ１２２のエンドポイントデスクリプション（ｅｎｄｐｏｉｎｔ  ｄｅｓｃｒｉｐｔｉｏｎ）を用いてＮｅｗＰｒｏｘｙＳｅｓｓｉｏｎ要求に応答する。
【００３６】
プロキシ１２２は、ユーザ資格証明書の下で動作する、いくつかの実施形態ではＷｉｎｄｏｗｓ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｆｏｕｎｄａｔｉｏｎ（登録商標）サービスとすることができる、サービスである。プロキシ１２２は、パブリックネットワーク１０４上の（例えば開発者アプリケーション１１６の）デバッガとプライベートネットワーク１０８上のリモートエージェント１１４の間でメッセージを回送することを担当する。始動時に、プロキシ１２２は、要求を回送するためのエンドポイントをオープンする。以下では、要求を回送するためのエンドポイントをオープンするためのメッセージの一例について説明する。
Ｅｎｄｐｏｉｎｔ  ＲｏｕｔｅＴｏ（Ｅｎｄｐｏｉｎｔ  ｅｎｄｐｏｉｎｔ）  
【００３７】
要求がネットワークＡ（Ｂ）上のプロセスから到着すると、その後、ルータは、Ｂ（Ａ）上に新しいエンドポイントｐｒｏｘｙＥｎｄｐｏｉｎｔをオープンし、応答に収めてデスクリプションを返す。
【００３８】
デバッグスタート１２６は、ユーザ資格証明書の下で動作し、デバッグされるプロセス（例えばユーザプロセス１２８）とともに、マシン上でリモートエージェント１１４のデバッガプロセスを始動させることを担当する。デバッグスタート１２６は、クラスタマネージャによって直接的に、または動的コンピューテーション（ｄｙｎａｍｉｃ  ｃｏｍｐｕｔａｔｉｏｎ）のためにタスクをスケジュールしているクラスタサブスケジューラによって呼び出すことができる。デバッグスタート１２６は、リスナ１１８との通信を開始し、自らが生成したリモートエージェント１１４の動的アドレスをリスナに通知する。
【００３９】
図１に示された先の例では、デバッギング機能を始動させ、その後、ユーザプロセス１２８を始動させることによって、ユーザプロセス１２８をデバッグする一例について説明したが、他の実施形態では、すでに実行中のプロセスにデバッギング機能をアタッチすることができる。以下の説明および図２では、デバッガアタッチの一例について説明する。
【００４０】
２０１に示されるように、開発者アプリケーション１１６は、リスナ１１８を生成する。リスナ１１８は、Ｄ１をオープンする。リスナ１１８は、ローカルアドミニストレータとして動作するルーティングノード上のよく知られたプロキシサービス１２０へのリンク（Ｐ）をオープンする（例えば、構成データおよび／または開発者プロジェクト設定を形成する）。リスナ１１８は、プロキシ初期化メッセージＩｎｉｔＰｒｏｘｙ（Ｄ１，Ｕ）をＰに送信し、ここで、Ｕは、ユーザのクラスタ資格証明書である。プロキシサービス１２０は、ユーザ資格証明書（Ｕ）を用いてプロキシ１２２のインスタンスをフォークし、それとＩｎｉｔＰｒｏｘｙメッセージに対する応答テキストとをＤ１に渡す。
【００４１】
２０２に示されるように、プロキシ１２２は、Ｄ１のためのプロキシ１２２へのＤ１ｐをオープンし、プライベートおよびパブリックネットワーク１０４および１０６それぞれからの新しいプロキシ要求のためのＰ１（およびＰ２）をオープンし、プロキシ初期化応答メッセージＩｎｉｔＰｒｏｘｙＲｅｐｌｙ（Ｐ１，Ｐ２，Ｄ１ｐ）をリスナ１１８に返送する。
【００４２】
２０３に示されるように、リスナ１１８は、スケジューラ１２４にジョブ詳細を要求する。
【００４３】
２０４に示されるように、リスナ１１８は、コンピュートノード１０６とプロセスｉｄとのリストを返信として受信する。
【００４４】
２０５に示されるように、リスト内の各コンピュートノード１０６に対して、リスナ１１８は、ＦｏｒｗａｒｄＭｅｓｓａｇｅ（ＮｏｄｅＮａｍｅ，Ａ，ＤｅｂｕｇＳｔａｒｔ（Ｐ１，Ｄ１ｐ），Ｕ）をＰ２に送信する。
【００４５】
２０６に示されるように、プロキシ１２２は、ＤｅｂｕｇＳｔａｒｔメッセージをノード「ＮｏｄｅＮａｍｅ」上のよく知られたアドレスＡを介してアタッチサービス１３０に転送する。
【００４６】
２０７に示されるように、アタッチサービス１３０は、アドレスＤ２を選択し、ユーザ資格証明書Ｕの下でｍｓｖｓｍｏｎ（Ｄ２，Ｅ）を呼び出すことなどによって、ユーザエージェント１１４を始動させ、イベントＥを待つ。リモートエージェント１１４が始動し、接続のためにＤ２をオープンする。リモートエージェント１１４は、Ｄ２上での受信の準備が整ったとき、イベントＥを設定する。
【００４７】
２０８に示されるように、アタッチサービス１３０は、ＲｏｕｔｅＴｏ（Ｄ２）メッセージをプロキシ１２２（Ｐ１）に送信する。プロキシ１２２は、プロキシポートＤ２ｐを生成する。
【００４８】
２０９に示されるように、プロキシ１２２は、ＲｏｕｔｅＴｏＲｅｐｌｙ（Ｄ２ｐ）を用いてアタッチサービス１３０に応答する。
【００４９】
２１０に示されるように、アタッチサービス１３０は、ＤｅｂｕｇＡｇｅｎｔＳｔａｒｔｅｄ（Ｄ２ｐ）メッセージをＤ１ｐを介してプロキシに送信する。
【００５０】
２１１に示されるように、プロキシ１２２は、ＤｅｂｕｇＡｇｅｎｔＳｔａｒｔｅｄメッセージをＤ１を介してリスナ１１８に転送する。リスナ１１８は、開発者アプリケーション１１６のデバッガを呼び出し、Ｄ２ｐを介してリモートエージェントに接続するようにデバッガに命令する。
【００５１】
２１２に示されるように、開発者アプリケーション１１６のデバッガは、Ｄ２ｐを介してプロキシ１２２とのリモートデバッギングセッションをオープンする。
【００５２】
２１３に示されるように、プロキシ１２２は、Ｄ２を介してリモートエージェント１１４とのセッションをオープンする。プロキシ１２２は、両方向にデバッギングメッセージを回送する。デバッガは、リモートエージェント１１４にプロセス識別子（ｐｉｄ）によって識別されるユーザプロセス１２８にアタッチするように命令する。リモートエージェント１１４は、プロセスにアタッチする。開発者アプリケーション１１６のデバッガは、アタッチが完了したことをリスナ１１８に通知する。
【００５３】
以下では、いくつかの実施形態において、アタッチサービス１３０について詳細に説明する。アタッチサービス１３０は、ローカルシステム資格証明書の下で動作し、デバッグされるプロセス（例えばユーザプロセス１２８）とともに、マシン上でリモートデバッガプロセスリモートエージェント１１４を始動させることを担当する。アタッチサービス１３０は、リモートクラスタアタッチをサポートする任意のノード上で動作するシステムサービスである。アタッチサービス１３０は、リスナ１１８からのＤｅｂｕｇＳｔａｒｔメッセージをリスンし、その後、メッセージ内に含まれるユーザ資格証明書の下でリモートエージェント１１４のプロセスを生成する。アタッチサービス１３０は、自らが生成したリモートエージェント１１４の動的アドレスをリスナ１１８に通知する。
【００５４】
上で説明した実施形態では、パブリックネットワークとプライベートネットワークの間で通信するためにプロキシを使用しているが、他の実施形態では、ディレクトリサービスおよびＮＡＴポート転送（ＮＡＴ  ｐｏｒｔ  ｆｏｒｗａｒｄｉｎｇ）を使用することができる。例えば、図３および図４は、ディレクトリサービスおよびＮＡＴポート転送を使用した起動およびアタッチの例を示す相互作用図を示している。具体的には、図３は、起動シナリオを示している。図４は、アタッチシナリオを示している。
【００５５】
先に説明した例と同様に、クラスタは、ヘッドノード１１０と１組のコンピュートノード１０６の２種類のノードを含む。ヘッドノード１１０は、パブリックネットワークとプライベートネットワークの２つのネットワークに接続される。コンピュートノード１０６は各々が、プライベートネットワークだけに接続される。ホストマシン１０２などのクライアントマシンは、パブリックネットワーク上に存在する。この特定の例では、ヘッドノード１１０における明示的なＮＡＴポートマッピング（ＮＡＴ  ｐｏｒｔ  ｍａｐｐｉｎｇ）を介さない限り、パブリックネットワークとプライベートネットワークの間での回送は可能ではない。
【００５６】
クラスタアタッチおよび起動の実施には、多くのアクタ（ａｃｔｏｒ）が関与する。そのようなアクタの１つは、デバッガユーザインタフェースホストを含むことができる、開発者アプリケーション１１６である。
【００５７】
別のアクタは、ディレクトリサービス１３２であり、これは、転送ポートのディレクトリをクラスタジョブに提供するサービス（例えばＷｉｎｄｏｗｓ（登録商標）サービスなど）として動作するアプリケーションとすることができる。ディレクトリサービスは、クラスタのヘッドノード１１０上で動作することができる。ＮＡＴポート転送１３４は、クラスタのヘッドノード１１０上で動作するネットワークアドレス変換（ｎｅｔｗｏｒｋ  ａｄｄｒｅｓｓ  ｔｒａｎｓｌａｔｉｏｎ）サービスとすることができる。ヘッドノード１１０上で動作するサーバスケジューラ１２４は、クラスタのコンピュートノード１０６上で実行するユーザジョブをスケジュールする。
【００５８】
診断サービス１３６は、各コンピュートノード１０６上でサービス（Ｗｉｎｄｏｗｓ（登録商標）サービスなど）として実行するアプリケーションとすることができる。診断サービス１３６は、図４のアタッチ例に示されるように、プロセスにアタッチするように求めるデバッガ要求を処理する。診断サービス１３６は、ブート時に自動的に開始され、よく知られたポートＤＳ上でデバッガ要求をリスンする。診断サービス１３６は、要求を満たすために、リモートエージェント１１４のインスタンスを生成する。デバッグスタート１２６は、デバッガによってユーザジョブに注入されるタスクである。デバッグスタート１２６は、デバッガ制御下でユーザプロセス１２８を起動するために、リモートエージェント１１４のインスタンスを生成する。リモートエージェント１１４は、開発者アプリケーション１１６のデバッガのリモートヘルパプロセス（ｒｅｍｏｔｅ  ｈｅｌｐｅｒ  ｐｒｏｃｅｓｓ）である。リモートエージェント１１４は、アタッチ要求に応答して、診断サービス１３６によってコンピュートノード１０６上で始動される。ユーザプロセス１２８は、デバッグされるプロセスである。
【００５９】
ここで図３を参照すると、クラスタ上でデバッギングを起動し、ユーザプロセスをデバッグする一例が示されている。３０１では、開発者アプリケーション１１６のユーザは、自分のジョブをクラスタ上での実行のための待ち行列に入れることを、スケジューラ１２４を介して要求する。
【００６０】
３０２では、スケジューラ１２４は、ジョブに１組のコンピュートノード１０６を割り当て、各ノード１０６上で動作するジョブの実行を開始する。
【００６１】
３０３では、ジョブ内の第１のタスクは、デバッグスタートタスク１２６である。デバッグスタートタスク１２６は、１組のコンピュートノードのうちの各コンピュートノード１０６上でリモートエージェント１１４のプロセスを生成し、各コンピュートノード１０６は、ポートＤｒをオープンし、デバッガ接続をリスンする。
【００６２】
３０４では、リモートエージェント１１４が開始された後、デバッグスタート１２６は、コンピュートノード１０６の各々についてのＤｒポートをディレクトリサービス１３２に登録する。
【００６３】
３０５では、開発者アプリケーション１１６は、リモートエージェント１１４ごとに１つのマップポート（ｍａｐｐｅｄ  ｐｏｒｔ）Ｄｒｐを受け取るまで、ユーザのジョブのために登録されたすべてのポートについてディレクトリサービス１３２にポーリングを行う。ディレクトリサービス１３２は、要求を満たすのに必要とされるポートマッピングをＮＡＴを介して生成する。
【００６４】
３０６では、ジョブのためにポートが生成されると、ディレクトリサービス１３２は、ジョブが終了していないことを検証するために、定期的にスケジューラ１２４にポーリングを行う。
【００６５】
３０７では、登録されたポートごとに、開発者アプリケーション１１６は、Ｄｒｐを介してコンピュートノード１０６上のリモートエージェント１１４に接続し、ユーザプロセス１２８の生成およびデバッグを行う。デバッギングセッションが完了するまで、メッセージが、開発者アプリケーション１１６とリモートエージェント１１４の間で継続的にやり取りされる。デバッギングセッションの完了後すぐに、またはしばらく経ってから、ユーザプロセス１２８が終了し、ジョブが終了する。
【００６６】
３０８では、ディレクトリサービス１３２は、スケジューラ１２４を介してジョブ完了を発見し、すべてのＤｒｐ転送ポートを削除する。
【００６７】
以下では、クラスタアタッチシナリオについて説明する。４０１では、ユーザは、ジョブをスケジューラ１２４の待ち行列に入れる。スケジューラ１２４は、ジョブにＪｏｂＩｄを与える。スケジューラ１２４は、しばらく後で、１組Ｓのコンピュートノード１０６上で動作する（ユーザプロセス１２８から成る）ユーザジョブを開始する。
【００６８】
４０２では、ユーザは、自分の実行ジョブをデバッグすることに決める。ユーザは、開発者アプリケーション１１６を始動させ、クラスタアタッチプロセスを開始する。ユーザは、自分のクラスタのヘッドノード１１０およびＪｏｂＩｄを識別する。開発者アプリケーション１１６は、ジョブのユーザプロセス１２８のためのコンピュートノード名とプロセスｉｄとのリストについて、スケジューラ１２４に問い合わせを行う。
【００６９】
４０３では、スケジューラ１２４によって返されたリスト内のコンピュートノード１０６ごとに、開発者アプリケーション１１６は、診断サービス１３６のポートＤＳをディレクトリサービス１３２に登録する。今度は、ディレクトリサービス１３２が、ＤＳについてのＮＡＴポートマッピングを要求する。ディレクトリサービス１３２は、マップポートＤＳｐを返す。このプロセスは、コンピュートノード１０６ごとに１つのＤＳｐが生成されるという結果をもたらす。ＤＳｐに送信されるメッセージは、ヘッドノード１１０を介して対応するＤＳに回送される。
【００７０】
４０４では、コンピュートノード１０６ごとに、開発者アプリケーション１１６は、アタッチ要求をＤＳｐに送信する。メッセージは、ポートＤＳ上でコンピュートノード１０６の診断サービス１３６に転送される。診断サービス１３６は、コンピュートノード１０６上でリモートエージェント１１４のインスタンスを生成する。リモートエージェント１１４は、ポートＤｒをオープンし、開発者アプリケーション１１６に関連するクライアント１０２のデバッガからのデバッガ接続要求をリスンする。リモートエージェント１１４が開始された後、診断サービス１３６は、Ｄｒをディレクトリサービス１３２に登録する。その後、アタッチ要求が完了する。
【００７１】
４０５では、開発者アプリケーション１１６は、コンピュートノード１０６ごとに１つのマップポートＤｒｐを受け取るまで、ユーザのジョブのために登録されたすべてのポートについてディレクトリサービス１３２にポーリングを行う。ディレクトリサービス１３２は、要求を満たすのに必要とされるポートマッピングをＮＡＴを介して生成する。
【００７２】
４０６では、ジョブのためにポートが生成されると、ディレクトリサービス１３２は、ジョブが終了していないことを検証するために、定期的にスケジューラ１２４にポーリングを行う。
【００７３】
４０７では、各コンピュートノード１０６上のユーザプロセス１２８ごとに、開発者アプリケーション１１６は、Ｄｒｐを介してコンピュートノード１０６上のリモートエージェント１１４に接続し、ユーザプロセス１２８のためのデバッギングセッションを開始する。デバッギングセッションが完了するまで、メッセージが、開発者アプリケーション１１６（具体的には開発者アプリケーションのデバッガモジュール）とリモートエージェント１１４の間で継続的にやり取りされる。デバッギングセッションの完了後すぐに、またはしばらく経ってから、ユーザプロセス１２８が終了し、ジョブが終了する。
【００７４】
４０８では、ディレクトリサービス１３２は、スケジューラ１２４を介してジョブ完了を発見し、すべてのＤｒｐ転送ポートを削除する。
【００７５】
４０９では、ディレクトリサービス１３２は、ジョブに関連するすべてのＤＳｐポートも削除する。
【００７６】
以下の説明では、今度は、実行できる多くの方法および方法ステップについて言及する。方法ステップは、ある順序で説明され、またはフローチャートでは特定の順序で生じるように示されるが、特定の順序は、特別に述べられていない限り必要ではなく、またはあるステップはそのステップが実行される前に完了している別のステップに従属するので必要ではない。
【００７７】
ここで図５を参照すると、方法５００が示されている。方法５００は、クラスタコンピューティングシステムを含むコンピューティング環境において実施することができる。方法５００は、デバッギングプロセスを起動するためのステップを含む。方法５００は、クラスタプライベートネットワーク上のコンピュートノードにおいて、パブリックネットワーク上のクライアントからヘッドノードのスケジューラを介してデバッグジョブを受信するステップ（ステップ５０２）を含む。ヘッドノードは、プライベートネットワークとパブリックネットワークの両方に接続される。パブリックネットワークは、クラスタプライベートネットワークの外部に存在する。例えば、図１に示されるように、コンピュートノード１０６は、クライアント１０２から、ヘッドノード１１０を介して、特にヘッドノード１１０のスケジューラ１２４を介して回送されるデバッグジョブを受信することができる。
【００７８】
方法５００は、デバッグジョブの処理に着手し、結果として、コンピュートノードにおいて１つまたは複数のデバッガリモートエージェントを始動させることによって、デバッギングを開始するステップ（ステップ５０４）をさらに含む。例えば、図１を参照すると、リモートエージェント１１４を開始することができる。
【００７９】
方法５００は、コンピュートノードにおいて、始動させたデバッガリモートエージェントの存在下で、ユーザジョブを処理することに着手するステップ（ステップ５０６）をさらに含む。例えば、コンピュートノード１０６は、動作中のリモートエージェント１１４の存在下で、ユーザプロセス１２８の処理に着手することができる。
【００８０】
方法５００は、ユーザジョブをデバッグする準備が１つまたは複数のデバッガリモートエージェントにおいて整ったことをクライアントに通知するステップをさらに含む。例えば、図１は、メッセージをプロキシ１２２に送信することができ、次に、そのメッセージが開発者アプリケーション１１６のリスナ１１８に転送されることを示している。
【００８１】
方法５００は、クライアントにおけるデバッガクライアントを１つまたは複数のデバッガリモートエージェントに接続するステップをさらに含む。例えば、開発者アプリケーション１１６に含まれるデバッガは、上で説明したように、１つまたは複数のリモートエージェント１１４に接続することができる。
【００８２】
ここで図６を参照すると、別の方法６００が示されている。方法６００は、クラスタコンピューティングシステムを含むコンピューティング環境で実施することができる。方法６００は、デバッギングプロセスをアタッチするためのステップを含む。方法６００は、ユーザジョブを実行しているクラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを、パブリックネットワーク上のクライアントから、クラスタプライベートネットワークとパブリックネットワークの両方に接続されたシステムを介して受信するステップ（ステップ６０２）を含む。パブリックネットワークは、クラスタプライベートネットワークの外部に存在する。例えば、図２に示されるように、パブリックネットワーク１０４およびクラスタプライベートネットワーク１０８が示されている。クライアント１０２は、パブリックネットワーク１０４上に存在し、コンピュートノード１０６は、クラスタプライベートネットワーク１０８上に存在する。コンピュートノードは、デバッグジョブを開始するために、ルーティングノード１１２からメッセージを受信することができる。
【００８３】
方法６００は、デバッグジョブを処理することに着手し、結果として、コンピュートノードにおいて１つまたは複数のデバッガリモートエージェントを始動させることによって、ユーザジョブのデバッギングを開始するステップ（ステップ６０４）をさらに含む。具体的には、アタッチサービス１３０が、ユーザエージェント１１４を開始することができる。
【００８４】
方法６００は、ユーザジョブをデバッグする準備が１つまたは複数のデバッガリモートエージェントにおいて整ったことをクライアントに通知するステップ（ステップ６０６）をさらに含む。
【００８５】
方法６００は、結果として、クライアントのデバッガクライアントを１つまたは複数のデバッガリモートエージェントに接続するステップ（ステップ６０８）をさらに含む。
【００８６】
さらに、方法は、１つまたは複数のプロセッサと、コンピュータメモリなどのコンピュータ可読媒体とを含む、コンピュータシステムによって実施することができる。実際には、コンピュータメモリは、１つまたは複数のプロセッサによって実行されたときに、実施形態において列挙されたステップなど、様々な機能の実行を引き起こすコンピュータ実行可能命令を記憶することができる。
【００８７】
本発明の実施形態は、以下でより詳細に説明するように、コンピュータハードウェアを含む専用または汎用コンピュータを含むことができ、または利用することができる。本発明の範囲内の実施形態は、コンピュータ実行可能命令および／またはデータ構造を搬送または記憶するための物理的および他のコンピュータ可読媒体も含む。そのようなコンピュータ可読媒体は、汎用または専用コンピュータシステムによってアクセスできる任意の利用可能な媒体とすることができる。コンピュータ実行可能命令を記憶するコンピュータ可読媒体は、物理的記憶媒体である。コンピュータ実行可能命令を搬送するコンピュータ可読媒体は、伝送媒体である。したがって、限定することなく、例を挙げると、本発明の実施形態は、物理的コンピュータ可読記憶媒体と伝送コンピュータ可読媒体という、少なくとも２つの明確に異なる種類のコンピュータ可読媒体を含むことができる。
【００８８】
物理的コンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、もしくは（ＣＤ、ＤＶＤなどの）他の光ディスク記憶、磁気ディスク記憶もしくは他の磁気記憶デバイス、または所望のプログラムコード手段をコンピュータ実行可能命令もしくはデータ構造の形態で記憶するために使用でき、汎用もしくは専用コンピュータによってアクセスできる他の任意の媒体を含む。
【００８９】
「ネットワーク」は、コンピュータシステムおよび／もしくはモジュールならびに／または他の電子デバイスの間での電子データの輸送を可能にする、１つまたは複数のデータリンクとして定義される。情報が、（有線、無線、または有線もしくは無線の組み合わせの）ネットワークまたは別の通信接続を介して、コンピュータに移送または提供される場合、コンピュータは、その接続を伝送媒体であると適切に見なす。伝送媒体は、所望のプログラムコード手段をコンピュータ実行可能命令またはデータ構造の形態で搬送するために使用でき、汎用または専用コンピュータによってアクセスできる、ネットワークおよび／またはデータリンクを含むことができる。上記の組み合わせもコンピュータ可読媒体の範囲内に含まれる。
【００９０】
さらに、様々なコンピュータシステムコンポーネントに送り届けられるとき、コンピュータ実行可能命令またはデータ構造の形態をとるプログラムコード手段は、伝送コンピュータ可読媒体から物理的コンピュータ可読記憶媒体に（またはそれとは反対方向に）自動的に移送することができる。例えば、ネットワークまたはデータリンクを介して受信されたコンピュータ実行可能命令またはデータ構造は、ネットワークインタフェースモジュール（例えば「ＮＩＣ」）内のＲＡＭにバッファリングすることができ、その後、最終的には、コンピュータシステムＲＡＭに、および／またはコンピュータシステムの低揮発性のコンピュータ可読物理記憶媒体に移送することができる。したがって、コンピュータ可読物理記憶媒体は、伝送媒体を同様に（またはむしろ主として）利用するコンピュータシステムコンポーネント内に含むことができる。
【００９１】
コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理デバイスに、何らかの機能または機能のグループを実行させる命令およびデータを含む。コンピュータ実行可能命令は、例えば、２進数、もしくはアセンブリ言語などの中間フォーマット命令とすることができ、またはソースコードとすることさえできる。本発明は、構造的特徴および／または方法論的ステップに特有の言葉で説明されたが、添付の特許請求の範囲において確定される本発明は、上で説明された特徴またはステップに必ずしも限定されるものではないことを理解されたい。むしろ、説明された特徴およびステップは、特許請求の範囲を実施する例示的な形態として開示されている。
【００９２】
本発明は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、モバイル電話、ＰＤＡ、ページャ、ルータ、およびスイッチなどを含む、多くのタイプのコンピュータシステム構成を有する、ネットワークコンピューティング環境において実施できることが当業者には理解されよう。本発明は、ネットワークを介して（有線データリンク、無線データリンク、または有線および無線データリンクの組み合わせによって）結合された、ローカルコンピュータシステムおよびリモートコンピュータシステムが、ともにタスクを実行する、分散システム環境において実施することもできる。分散システム環境では、プログラムモジュールは、ローカルおよびリモートメモリ記憶デバイスの両方において見出すことができる。
【００９３】
本発明は、本発明の主旨または特徴から逸脱することなく、他の特定の形態で具現することができる。説明された実施形態は、すべての点において、説明的なものにすぎず、限定的なものではないと見なすべきである。したがって、本発明の範囲は、上述の説明によってではなく、添付の特許請求の範囲によって示される。特許請求の範囲の均等物の意味および範囲内に含まれるすべての変更は、特許請求の範囲内に含まれるべきである。
【図１】
0005906246.tif 000002
【図２】
0005906246.tif 000003
【図３】
0005906246.tif 000004
【図４Ａ】
0005906246.tif 000005
【図４Ｂ】
0005906246.tif 000006
【図５】
0005906246.tif 000007
【図６】
0005906246.tif 000008