(57)【要約】【課題】分散メッセージパッシングオペレーティングシステムのノード間の通信を管理する、より信頼性のある方法を提供する。【解決手段】分散メッセージパッシングオペレーティングシステムにおける多数のノード間の通信を管理する方法であって、ローカルノードにおいて、ローカルノードをリモートノードに相互接続する、利用可能な通信ネットワーク（１４０）のプールを維持することと、利用可能な通信ネットワークのプールにおけるネットワークを介して、ローカルネットワーク（１１０）とリモートネットワーク（１１２）との間の複数のパケットの伝送を共有することとを包含する。【選択図】図１
2006340354.tif 000002
【特許請求の範囲】
【請求項１】
分散メッセージパッシングオペレーティングシステムにおける多数のノード間の通信を管理する方法であって、
ローカルノードにおいて、該ローカルノードをリモートノードに相互接続する、利用可能な通信ネットワークのプールを維持することと、
該利用可能な通信ネットワークのプールにおけるネットワークを介して、該ローカルネットワークと該リモートネットワークとの間の複数のパケットの伝送を共有することと
を包含する、方法。
【請求項２】
前記利用可能な通信ネットワークのプールから通信ネットワークのサブセットを選択することと、
該通信ネットワークのサブセットにおけるネットワークを介して、前記ローカルノードと前記リモートノードとの間の複数のパケットの伝送を共有することと
をさらに包含する、請求項１に記載の方法。
【請求項３】
前記通信ネットワークのサブセットが、同様の性能特性を有するネットワークを含む、請求項２に記載の方法。
【請求項４】
前記複数のパケットのそれぞれに対して、前記通信ネットワークのサブセットから、最も速い通信ネットワークを決定することであって、該最も速い通信ネットワークは、該通信ネットワークのサブセットにおいて、他の通信ネットワークよりも速くパケットを伝送することが可能である、ことと、
該決定された最も速い通信ネットワークを介して、対応するパケットを伝送することと
をさらに包含する、請求項２に記載の方法。
【請求項５】
前記通信ネットワークのプールのうちの一つを、好ましい通信ネットワークとして指定することと、
該好ましい通信ネットワークに障害が生じた場合、該プールにおける任意の他の通信ネットワークを介して、複数のパケットを伝送することと
をさらに包含する、請求項１に記載の方法。
【請求項６】
前記通信ネットワークのプールのサブセットを好ましい通信ネットワークとして指定することと、
該好ましい通信ネットワークのプールのサブセットのそれぞれに障害が生じた場合、任意の他の通信プロトコルを介して、前記複数のパケットを伝送することと
をさらに包含する、請求項１に記載の方法。
【請求項７】
前記通信ネットワークのプールのうちの一つを専用の通信ネットワークとして指定することと、
該専用の通信ネットワークを介して、前記複数のパケットを伝送することと
をさらに包含する、請求項１に記載の方法。
【請求項８】
前記通信ネットワークのプールのサブセットを専用の通信ネットワークとして指定することと、
該専用の通信ネットワークのサブセットを介して、前記複数のパケットのみを伝送することと
をさらに包含する、請求項１に記載の方法。
【請求項９】
コンピュータ可読媒体上において具体化される分散メッセージパッシングオペレーティングシステムであって、
ローカルプロセッサ上で走るローカルスレッドを含むローカルノードであって、メッセージをパスし、メッセージを受信するように動作可能である、ローカルノードと、
少なくともひとつのネットワークを介して、該ローカルノードと通信するリモートノードであって、該リモートノードが、リモートプロセッサ上で走るリモートスレッドを含み、メッセージをパスし、メッセージを受信するように動作可能である、リモートノードと
を備え、
該ローカルノードが、
該ローカルスレッドから伝送要求を受信することに応答して、該リモートノードとノード間接続を確立するように、
少なくとも一つのネットワークを介して、該ローカルノードから該リモートノードへパスするメッセージを管理するように、および、
該リモートノードからメッセージを受信し、該ローカルスレッドへ該メッセージを転送するように
さらに動作可能であり、
該リモートノードが、
該リモートスレッドから伝送要求を受信することに応答して、該ローカルノードと該ノード間接続を確立するように、
該複数のネットワークを介して、該リモートノードから該ローカルノードへパスするメッセージを管理するように、および、
該ローカルノードからメッセージを受信し、該リモートスレッドへメッセージを転送するように
さらに動作可能である、
オペレーティングシステム。
【請求項１０】
前記ローカルノードが、少なくとも一つのネットワークを介して、前記ローカルノードと前記リモートノードとの間の複数のパケットの伝送を共有することによって、該ローカルノードから該リモートノードへパスするメッセージを管理するようにさらに動作可能である、請求項９に記載のオペレーティングシステム。
【請求項１１】
前記少なくとも一つのネットワークが複数のネットワークを含み、前記ローカルノードが、該複数のネットワークのサブセットを選択することによって、および、前記ネットワークのサブセットを介して、該ローカルノードと前記リモートノードとの間の複数のパケットの伝送を共有することによって、該ローカルノードから該リモートノードへパスするメッセージを管理するようにさらに動作可能である、請求項９に記載のオペレーティングシステム。
【請求項１２】
前記ネットワークのサブセットが同様の性能特性を含む、請求項１１に記載のオペレーティングシステム。
【請求項１３】
前記伝送を共有することが、
前記複数のパケットのそれぞれに対して、前記複数のネットワークから、最も速いネットワークを決定することであって、該最も速いネットワークは、該複数の中の他のネットワークよりも速く、対応するパケットを伝送することが可能である、ことと、
該最も速いネットワークを介して、該対応するパケットを伝送することと
を含む、請求項１１に記載のオペレーティングシステム。
【請求項１４】
前記少なくとも一つのネットワークが複数のネットワークを含み、前記ローカルノードが、該少なくとも一つのネットワークを好ましいネットワークとして指定することによって、および、好ましいネットワークに障害が生じた場合、該複数の中の他のネットワークを介して、前記複数のパケットを伝送することによって、該ローカルノードから前記リモートノードへパスするメッセージを管理するようにさらに動作可能である、請求項９に記載のオペレーティングシステム。
【請求項１５】
前記ローカルノードが、前記複数のネットワークのサブセットを好ましい通信ネットワークとして指定することによって、および、該好ましい通信ネットワークのサブセットのそれぞれに障害が生じた場合、該サブセットの中のみではない他のネットワークを介して、前記複数のパケットを伝送することによって、該ローカルノードから前記リモートノードへパスするメッセージを管理するようにさらに動作可能である、請求項１４に記載のオペレーティングシステム。
【請求項１６】
前記少なくとも一つのネットワークが複数のネットワークを含み、前記ローカルノードが、該複数のネットワークうちの一つを専用の通信ネットワークとして指定することによって、および、該専用の通信ネットワークを介して、前記複数のパケットを伝送することによって、該ローカルノードから前記リモートノードへパスするメッセージを管理するようにさらに動作可能である、請求項９に記載のオペレーティングシステム。
【請求項１７】
前記ローカルノードが、前記複数のネットワークのサブセットを専用の通信ネットワークとして指定することによって、および、該専用の通信ネットワークのサブセットを介して、該複数のパケットを伝送することによって、該ローカルノードから前記リモートノードへパスするメッセージを管理するようにさらに動作可能である、請求項１６に記載のオペレーティングシステム。
【請求項１８】
前記ローカルノードが、前記ネットワークの利用可能性を決定することによって、および、利用可能なネットワークを介してメッセージをパスすることのみによって、該ローカルノードから前記リモートノードへパスするメッセージを管理するようにさらに動作可能である、請求項９に記載のオペレーティングシステム。
【請求項１９】
分散メッセージパッシングオペレーティングシステムにおける多数のノード間の通信を管理する方法であって、
ローカルノードにおいて、該ローカルノードをリモートノードに相互接続する、利用可能な通信ネットワークのプールを維持することと、
該利用可能な通信ネットワークの一つに障害が生じたかどうかを決定することと、
定期的に該障害の生じた通信ネットワークに亘って、ローカルネットワークからリモートネットワークへ、メンテナンスパケットを伝送することと、
該障害の生じた通信ネットワークが復旧したかどうかを決定することと
を包含する、方法。
【請求項２０】
前記障害の発生した通信ネットワークが復旧した場合、前記復旧した通信ネットワークを前記プールに付け加えることをさらに包含する、請求項１９に記載の方法。
【請求項２１】
前記複数の通信ネットワークのうちの一つに障害が発生したかどうかを決定することが、ネットワークドライバが動いていないことの通知を受信することをさらに包含する、請求項１９に記載の方法。
【請求項２２】
利用可能な通信ネットワークの前記プールにおけるネットワークを介して、前記ローカルノードと前記リモートノードとの間の複数のパケットの伝送を共有することをさらに包含する、請求項１９に記載の方法。
【請求項２３】
利用可能な通信ネットワークの前記プールから通信ネットワークのサブセットを選択することと、
該通信ネットワークのサブセットにおけるネットワークを介して、前記ローカルノードと前記リモートノードとの間の複数のパケットの伝送を共有することと
をさらに包含する、請求項１９に記載の方法。
【請求項２４】
前記通信ネットワークのサブセットが、同様の性能特性を有するネットワークを含む、請求項２３に記載の方法。
【請求項２５】
前記複数のパケットのそれぞれに対して、前記通信ネットワークのサブセットから、最も速い通信ネットワークを決定することであって、該最も速い通信ネットワークは、該通信ネットワークのサブセットにおける他の通信ネットワークよりも速くパケットを伝送することが可能である、ことと、
該決定された最も速い通信ネットワークを介して、対応するパケットを伝送することと
をさらに包含する、請求項２３に記載の方法。
【請求項２６】
前記通信ネットワークのプールのうちの一つを好ましい通信ネットワークとして指定することと、
好ましい通信ネットワークに障害が生じた場合、該プールにおける任意の他の通信プロトコルを介して複数のパケットを伝送することと
をさらに包含する、請求項１９に記載の方法。
【請求項２７】
前記通信ネットワークのプールのサブセットを好ましい通信ネットワークとして指定することと、
該好ましい通信ネットワークのサブセットのそれぞれに障害が生じた場合、該プールにおける任意の他の通信プロトコルを介して、前記複数のパケットを伝送することと
をさらに包含する、請求項２２に記載の方法。
【請求項２８】
前記通信ネットワークのプールのうちの一つを専用の通信ネットワークとして指定することと、
該専用の通信ネットワークを介して、前記複数のパケットを伝送することと
をさらに包含する、請求項１９に記載の方法。
【請求項２９】
前記通信ネットワークのプールのサブセットを専用の通信ネットワークとして指定することと、
該専用の通信ネットワークのサブセットのみを介して、前記複数のパケットを伝送することと
をさらに包含する、請求項２２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、コンピュータシステムのネットワークに関し、より詳細には、コンピュータシステムのネットワークを介した、分散オペレーティングシステムに関する。
【背景技術】
【０００２】
オペレーティングシステム（ＯＳ）は、コンピュータリソースの制御および管理をするシステムソフトウェアである。通常のＯＳは、アプリケーションソフトウェアとコンピュータのハードウェアとの間の通信を可能にする。ＯＳによって、アプリケーションは、ハードウェアにアクセスすることができ、ディスクアクセス、メモリ管理、タスクのスケジューリング、およびユーザインターフェーシングなど、コンピュータの基本的システム動作にアクセスすることができる。付け加えて、ＯＳはまた、ネットワーク接続を提供する。
【０００３】
コンピュータのネットワーク化は、ファイル、およびいくつかの相互接続されたコンピュータの間の周辺機器を共有するメカニズムを提供する。理想的には、コンピュータネットワークによって、全てのコンピュータおよびアプリケーションが、ネットワークの全てのリソースへのアクセスを有することができるべきであり、集合的リソースを最適化するべきである。この結果を達成するために、分散オペレーティングシステムが開発されている。通常の分散ＯＳは、しかしながら、様々な制約を被る。第１に、分散ＯＳは、多層化されたシステムであり得る。すなわち、ローカル環境のための一つの層、およびネットワーク環境のための別個の層である。これは、開発者およびユーザによって学習されるべき、二つの異なるオペレーティングシステムという結果になる。付け加えて、ローカルおよびネットワーク層を用いたインターフェースが著しく異なるゆえに、アプリケーションプログラムは、一つの層または他の層にて動作するように書き込まれ得るが、両方にて動作するように書き込まれることはできない。つまり、アプリケーションプログラムのネットワークバージョンは、個々のコンピュータ上では実行し得ず、スタンドアローンバージョンもまたネットワーク上では実行し得ない。
【０００４】
付け加えて、ネットワークソフトウェアは、クライアントコンピュータおよびサーバを異なる機械として扱う。ユーザが、中央コンピュータを用いて、ファイルを多数のリモートコンピュータに提供させたい場合、次いで中央コンピュータは、サーバとして指定され、リモートコンピュータはクライアントとして指定される。これはネットワークの柔軟性を制限し得る。というのは、サーバおよびクライアントコンピュータは、オペレーティングシステムによって異なる性能を与えられているからである。例えば、二つのコンピュータが互いにファイルを共有することは可能であり得ず、というのも、一つはサーバとして指定されなければならず、もう一つはクライアントとして指定されなければならないからである。通常、サーバは、クライアントに格納されたファイルにアクセスし得ない。
【０００５】
コンピュータネットワークシステムは、リソースおよび構成の特定のセットを扱うように設計され、および最適化されている。例えば、メインフレームコンピュータシステムは、大きなメモリ記憶装置およびプリンタのセットを有するメインフレームコンピュータを含み得る。より小さいターミナルまたはコンピュータは、ネットワークおよびソフトウェアに特定の方法において、クライアントとして、このメインフレームにアクセスし得る。そのようなコンピュータシステムは、インターネットなどの通信開発を活用するための柔軟性を有し得ない。
【０００６】
メッセージパッシング（ｍｅｓｓａｇｅ  ｐａｓｓｉｎｇ）分散オペレーティングシステムは、これらの問題を克服するために開発されている。例示的なメッセージパッシングオペレーティングシステムは、ｖａｎ  ｄｅｒ  Ｖｅｅｎら（「ｖａｎ  ｄｅｒ  Ｖｅｅｎら」）による、特許文献１に記載され、その開示はここにおいて援用される。ｖａｎ  ｄｅｒ  Ｖｅｅｎらは、インターネット通信リンクを含む柔軟なネットワーク環境、および、スタンドアローンコンピュータに適用され得る、単一レベルの構成を用いた分散オペレーティングシステムを記載する。これは、メッセージパッシングオペレーティングシステムの使用、および、オフ−ノード（ｏｆｆ−ｎｏｄｅ）メッセージを命令および受信することが可能であるネットワークマネージャに、オフ−ノードメッセージを送信することによって、なされる。
【０００７】
付け加えて、このシステムにおけるプロセス間制御（ＩＰＣ）は信頼性があるべきである。不都合なことに、一部の以前の分散オペレーティングシステムは、（１）過渡的な通信障害および迅速なノード再ブートを確実に扱う、（２）リンク信頼性に適合する送信プロトコルを提供する、（３）送信がメディアの任意の組み合わせを介して生じることを可能にする性能がないことによって決定される、送信実行制限を被る。ノードはしばしば、インターネットなどの、サードパーティ通信ネットワークを介して接続され得るゆえ、ノード間の物理的通信線の統合を保証することは不可能であり得る。過渡的通信障害は、クライアントのプロセスをロックし得、リソースを無駄にし、システム全体の実行を阻害してしまう。
【０００８】
それゆえ、過渡的通信障害および迅速なノードの再ブートの間の処理の信頼性を改善し得、ならびに、様々なポリシーに通信リンクの任意の組み合わせを介してインプリメントさせるために、リンク信頼性に適合し、および／またはメディア選択を取り出す、順応性のあるプロトコルを介して、データ送信の実行を改善し得る、分散メッセージパッシングオペレーティングシステムのノード間の通信を管理する信頼性のある方法の必要性が存在する。
【特許文献１】米国特許第６，６９７，８７６号明細書
【発明の開示】
【課題を解決するための手段】
【０００９】
（１）過渡的な通信障害および迅速なノード再ブートを確実に扱う、（２）リンク信頼性に適合する送信プロトコルを提供する、（３）送信がメディアの任意の組み合わせを介して生じることを可能にする性能がないことによって決定される、送信実行制限を克服するための分散オペレーティングシステムにおける通信を管理する方法である。ここで記載されるシステムおよび方法は、高性能メッセージ伝達およびマルチインターフェース管理およびサポートを提供する、任意の信頼性のあるノード間（ｎｏｄｅ−ｔｏ−ｎｏｄｅ）セッションプロトコルを提供する。これは、ノード間における多数のインターフェースをダイナミックに活用し得る単一の接続を介して、オペレーティングシステムの二つのノード間における全てのデータを伝送することによって、なされる。様々なメディア選択ポリシーはまた、ユーザに、特定のデータ送信のためのインターフェースを特定させるようにインプリメントされ得る。
【００１０】
本発明の他のシステム、方法、特性、および利点は、以下の図面および詳細な記載の検証にて、当業者にあきらかになる。全てのそのような追加的なシステム、方法、特性、および利点は、本記載内に含まれ、本発明の範囲内であり、および、以下の請求の範囲によって保護されることが意図される。
【００１１】
本発明はさらに以下の手段を提供する。
【００１２】
（項目１）  
分散メッセージパッシングオペレーティングシステムにおける多数のノード間の通信を管理する方法であって、
ローカルノードにおいて、該ローカルノードをリモートノードに相互接続する、利用可能な通信ネットワークのプールを維持することと、
該利用可能な通信ネットワークのプールにおけるネットワークを介して、該ローカルネットワークと該リモートネットワークとの間の複数のパケットの伝送を共有することと
を包含する、方法。
【００１３】
（項目２）  
上記利用可能な通信ネットワークのプールから通信ネットワークのサブセットを選択することと、
該通信ネットワークのサブセットにおけるネットワークを介して、上記ローカルノードと上記リモートノードとの間の複数のパケットの伝送を共有することと
をさらに包含する、項目１に記載の方法。
【００１４】
（項目３）  
上記通信ネットワークのサブセットが、同様の性能特性を有するネットワークを含む、項目２に記載の方法。
【００１５】
（項目４）  
上記複数のパケットのそれぞれに対して、上記通信ネットワークのサブセットから、最も速い通信ネットワークを決定することであって、該最も速い通信ネットワークは、該通信ネットワークのサブセットにおいて、他の通信ネットワークよりも速くパケットを伝送することが可能である、ことと、
該決定された最も速い通信ネットワークを介して、対応するパケットを伝送することと
をさらに包含する、項目２に記載の方法。
【００１６】
（項目５）  
上記通信ネットワークのプールのうちの一つを、好ましい通信ネットワークとして指定することと、
該好ましい通信ネットワークに障害が生じた場合、該プールにおける任意の他の通信ネットワークを介して、複数のパケットを伝送することと
をさらに包含する、項目１に記載の方法。
【００１７】
（項目６）  
上記通信ネットワークのプールのサブセットを好ましい通信ネットワークとして指定することと、
該好ましい通信ネットワークのプールのサブセットのそれぞれに障害が生じた場合、任意の他の通信プロトコルを介して、上記複数のパケットを伝送することと
をさらに包含する、項目１に記載の方法。
【００１８】
（項目７）  
上記通信ネットワークのプールのうちの一つを専用の通信ネットワークとして指定することと、
該専用の通信ネットワークを介して、上記複数のパケットを伝送することと
をさらに包含する、項目１に記載の方法。
【００１９】
（項目８）  
上記通信ネットワークのプールのサブセットを専用の通信ネットワークとして指定することと、
該専用の通信ネットワークのサブセットを介して、上記複数のパケットのみを伝送することと
をさらに包含する、項目１に記載の方法。
【００２０】
（項目９）  
コンピュータ可読媒体上において具体化される分散メッセージパッシングオペレーティングシステムであって、
ローカルプロセッサ上で走るローカルスレッドを含むローカルノードであって、メッセージをパスし、メッセージを受信するように動作可能である、ローカルノードと、
少なくともひとつのネットワークを介して、該ローカルノードと通信するリモートノードであって、該リモートノードが、リモートプロセッサ上で走るリモートスレッドを含み、メッセージをパスし、メッセージを受信するように動作可能である、リモートノードと
を備え、
該ローカルノードが、
該ローカルスレッドから伝送要求を受信することに応答して、該リモートノードとノード間接続を確立するように、
少なくとも一つのネットワークを介して、該ローカルノードから該リモートノードへパスするメッセージを管理するように、および、
該リモートノードからメッセージを受信し、該ローカルスレッドへ該メッセージを転送するように
さらに動作可能であり、
該リモートノードが、
該リモートスレッドから伝送要求を受信することに応答して、該ローカルノードと該ノード間接続を確立するように、
該複数のネットワークを介して、該リモートノードから該ローカルノードへパスするメッセージを管理するように、および、
該ローカルノードからメッセージを受信し、該リモートスレッドへメッセージを転送するように
さらに動作可能である、
オペレーティングシステム。
【００２１】
（項目１０）  
上記ローカルノードが、少なくとも一つのネットワークを介して、上記ローカルノードと上記リモートノードとの間の複数のパケットの伝送を共有することによって、該ローカルノードから該リモートノードへパスするメッセージを管理するようにさらに動作可能である、項目９に記載のオペレーティングシステム。
【００２２】
（項目１１）  
上記少なくとも一つのネットワークが複数のネットワークを含み、上記ローカルノードが、該複数のネットワークのサブセットを選択することによって、および、上記ネットワークのサブセットを介して、該ローカルノードと上記リモートノードとの間の複数のパケットの伝送を共有することによって、該ローカルノードから該リモートノードへパスするメッセージを管理するようにさらに動作可能である、項目９に記載のオペレーティングシステム。
【００２３】
（項目１２）  
上記ネットワークのサブセットが同様の性能特性を含む、項目１１に記載のオペレーティングシステム。
【００２４】
（項目１３）  
上記伝送を共有することが、
上記複数のパケットのそれぞれに対して、上記複数のネットワークから、最も速いネットワークを決定することであって、該最も速いネットワークは、該複数の中の他のネットワークよりも速く、対応するパケットを伝送することが可能である、ことと、
該最も速いネットワークを介して、該対応するパケットを伝送することと
を含む、項目１１に記載のオペレーティングシステム。
【００２５】
（項目１４）  
上記少なくとも一つのネットワークが複数のネットワークを含み、上記ローカルノードが、該少なくとも一つのネットワークを好ましいネットワークとして指定することによって、および、好ましいネットワークに障害が生じた場合、該複数の中の他のネットワークを介して、上記複数のパケットを伝送することによって、該ローカルノードから上記リモートノードへパスするメッセージを管理するようにさらに動作可能である、項目９に記載のオペレーティングシステム。
【００２６】
（項目１５）  
上記ローカルノードが、上記複数のネットワークのサブセットを好ましい通信ネットワークとして指定することによって、および、該好ましい通信ネットワークのサブセットのそれぞれに障害が生じた場合、該サブセットの中のみではない他のネットワークを介して、上記複数のパケットを伝送することによって、該ローカルノードから上記リモートノードへパスするメッセージを管理するようにさらに動作可能である、項目１４に記載のオペレーティングシステム。
【００２７】
（項目１６）  
上記少なくとも一つのネットワークが複数のネットワークを含み、上記ローカルノードが、該複数のネットワークうちの一つを専用の通信ネットワークとして指定することによって、および、該専用の通信ネットワークを介して、上記複数のパケットを伝送することによって、該ローカルノードから上記リモートノードへパスするメッセージを管理するようにさらに動作可能である、項目９に記載のオペレーティングシステム。
【００２８】
（項目１７）  
上記ローカルノードが、上記複数のネットワークのサブセットを専用の通信ネットワークとして指定することによって、および、該専用の通信ネットワークのサブセットを介して、該複数のパケットを伝送することによって、該ローカルノードから上記リモートノードへパスするメッセージを管理するようにさらに動作可能である、項目１６に記載のオペレーティングシステム。
【００２９】
（項目１８）  
上記ローカルノードが、上記ネットワークの利用可能性を決定することによって、および、利用可能なネットワークを介してメッセージをパスすることのみによって、該ローカルノードから上記リモートノードへパスするメッセージを管理するようにさらに動作可能である、項目９に記載のオペレーティングシステム。
【００３０】
（項目１９）  
分散メッセージパッシングオペレーティングシステムにおける多数のノード間の通信を管理する方法であって、
ローカルノードにおいて、該ローカルノードをリモートノードに相互接続する、利用可能な通信ネットワークのプールを維持することと、
該利用可能な通信ネットワークの一つに障害が生じたかどうかを決定することと、
定期的に該障害の生じた通信ネットワークに亘って、ローカルネットワークからリモートネットワークへ、メンテナンスパケットを伝送することと、
該障害の生じた通信ネットワークが復旧したかどうかを決定することと
を包含する、方法。
【００３１】
（項目２０）  
上記障害の発生した通信ネットワークが復旧した場合、上記復旧した通信ネットワークを上記プールに付け加えることをさらに包含する、項目１９に記載の方法。
【００３２】
（項目２１）  
上記複数の通信ネットワークのうちの一つに障害が発生したかどうかを決定することが、ネットワークドライバが動いていないことの通知を受信することをさらに包含する、項目１９に記載の方法。
【００３３】
（項目２２）  
利用可能な通信ネットワークの上記プールにおけるネットワークを介して、上記ローカルノードと上記リモートノードとの間の複数のパケットの伝送を共有することをさらに包含する、項目１９に記載の方法。
【００３４】
（項目２３）  
利用可能な通信ネットワークの上記プールから通信ネットワークのサブセットを選択することと、
該通信ネットワークのサブセットにおけるネットワークを介して、上記ローカルノードと上記リモートノードとの間の複数のパケットの伝送を共有することと
をさらに包含する、項目１９に記載の方法。
【００３５】
（項目２４）  
上記通信ネットワークのサブセットが、同様の性能特性を有するネットワークを含む、項目２３に記載の方法。
【００３６】
（項目２５）  
上記複数のパケットのそれぞれに対して、上記通信ネットワークのサブセットから、最も速い通信ネットワークを決定することであって、該最も速い通信ネットワークは、該通信ネットワークのサブセットにおける他の通信ネットワークよりも速くパケットを伝送することが可能である、ことと、
該決定された最も速い通信ネットワークを介して、対応するパケットを伝送することと
をさらに包含する、項目２３に記載の方法。
【００３７】
（項目２６）  
上記通信ネットワークのプールのうちの一つを好ましい通信ネットワークとして指定することと、
好ましい通信ネットワークに障害が生じた場合、該プールにおける任意の他の通信プロトコルを介して複数のパケットを伝送することと
をさらに包含する、項目１９に記載の方法。
【００３８】
（項目２７）  
上記通信ネットワークのプールのサブセットを好ましい通信ネットワークとして指定することと、
該好ましい通信ネットワークのサブセットのそれぞれに障害が生じた場合、該プールにおける任意の他の通信プロトコルを介して、上記複数のパケットを伝送することと
をさらに包含する、項目２２に記載の方法。
【００３９】
（項目２８）  
上記通信ネットワークのプールのうちの一つを専用の通信ネットワークとして指定することと、
該専用の通信ネットワークを介して、上記複数のパケットを伝送することと
をさらに包含する、項目１９に記載の方法。
【００４０】
（項目２９）  
上記通信ネットワークのプールのサブセットを専用の通信ネットワークとして指定することと、
該専用の通信ネットワークのサブセットのみを介して、上記複数のパケットを伝送することと
をさらに包含する、項目２２に記載の方法。
【００４１】
（摘要）
コンピュータシステムのネットワークを介した、改良型分散オペレーティングシステムが記載される。既存の分散オペレーティングシステムは、（１）過渡的な通信障害および迅速なノード再ブートを確実に扱う、（２）リンク信頼性に適合する送信プロトコルを提供する、（３）送信がメディアの任意の組み合わせを介して生じることを可能にする性能がないことによって決定される、送信実行制限を有する。ここで記載されるシステムおよび方法は、高性能メッセージ伝達およびマルチインターフェース管理およびサポートを提供する、任意の信頼性のあるノード間（ｎｏｄｅ−ｔｏ−ｎｏｄｅ）セッションプロトコルを提供する。これは、メッセージパッシングオペレーティングシステムの使用、および、オフ−ノード（ｏｆｆ−ｎｏｄｅ）メッセージを命令および受信することが可能であるネットワークマネージャに、オフ−ノードメッセージを送信することによって、なされる。
【発明を実施するための最良の形態】
【００４２】
本発明は、以下の図面および記載を参照してより良く理解され得る。図における構成要素は必ずしも縮尺通りではなく、その代わり、強調が本発明の原理を例示する上で置かれる。さらに、図において、同様の参照番号は、異なる図面全体に亘って、対応する部分に指定される。
【００４３】
分散オペレーティングシステムをインプリメントするための例示的な物理的レイアウトが図１において示される。そのレイアウトは、ローカルコンピュータシステム１１０およびリモートコンピュータシステム１１２を含み、通信ネットワーク１４０を介して相互接続される。ローカルコンピュータシステム１１０およびリモートコンピュータシステム１１２は、所定の品質を有するように記載されているが、その物理的配置およびシステムの電子的構成要素は、本発明を記載するための一つの例として提示されるにすぎない。同様に、二つのコンピュータシステム１１０と１１２との間をメッセージパッシングさせる通信ネットワーク１４０はまた、多くの物理的形式および様々な通信プロトコルの形式を採り得る。二つのコンピュータシステム１１０と１１２との間をパスするデータがメッセージである場合、それは、通信するために使用されるメディアとは独立している。それゆえ、通信ネットワークのタイプは、本発明の結果とは殆ど関係がない。
【００４４】
図１のローカルコンピュータシステム１１０は、アプリケーションプログラムを実行し得るローカルクライアントプロセッサ１６０を含む。ローカルクライアントプロセッサ１６０は、ローカルエリアネットワークを介してそのローカルエリアにおける他のデバイスと通信することが可能であり、ローカルエリアネットワークは、技術的に既知の方法においてインプリメントされ得る。これらのローカルデバイスは、ローカルメッセージパッシングオペレーティングシステム１１８、一つ以上のローカルサーバ１２０および１２２、ならびに、ローカルネットワークマネージャ１２４を含み得る。
【００４５】
ローカルメッセージパッシングオペレーティングシステム１１８およびローカルネットワークマネージャ１２４は、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、光学式ディスク（ＣＤ−ＲＯＭ）、または磁気格納媒体（ハードドライブまたは携帯用ディスケット）などの、コンピュータ可読媒体上にて、実行可能な形式において通常、格納されるソフトウェアプログラムであり得る。ローカルオペレーティングシステム１１８およびローカルネットワークマネージャ１２４はまた、ハードウェアまたは他の技術的に既知の手段によってインプリメントされ得る。
【００４６】
ローカルメッセージパッシングオペレーティングシステム１１８は、ローカルプロセッサ１６０、１２０、１２２のそれぞれにアクセス可能であり得る。プロセス間制御の手段としてのメッセージパッシングに付け加えて、オペレーティングシステムは、一般に、データ入力およびデータ出力、タイミングサービスなどの性能を提供し、それは、類似したメモリ媒体上に格納される外部サブルーチンを介して提供され得る。メッセージパッシングオペレーティングシステムは、通信チャンネルおよびそれらの間の接続をセットアップすることによって、プロセッサ１６０、１２０、１２２、およびローカルネットワークマネージャ１２４のそれぞれの間の通信を扱う。
【００４７】
リモートコンピュータシステム１１２は類似した配置を含み、メッセージパッシングオペレーティングシステムカーネル１２６、リモートサーバ１２８、およびリモートネットワークマネージャ１３０を含む。この配置において、メッセージパッシングオペレーティングシステムカーネル１２６、リモートサーバ１２８、およびリモートネットワークマネージャ１３０の３つの示されたデバイスは、メッセージパッシングネットワーク１３２を介して、互いの間でメッセージを通信し、その一方で、リモートネットワークマネージャ１３０は、通信ネットワーク１４０を介して、ローカルネットワークマネージャ１２４と通信する。このリモートネットワーク１１２の構成要素は、ローカルネットワーク１１０における、その対応する構成要素に類似した特性を有する。
【００４８】
ローカルネットワーク１１０と同様に、リモートネットワーク１１２の配置は、本発明を記載するための一例としてのみ、意図されている。明らかに、無限の数の配置が作成され得、それは当業者にとっては既知である。スペクトルの一方の端において、ネットワークは、単一の回路基板上の二つのプロセッサを含み得、それらが互いに通信できるように、相互接続される。あるいは、ネットワークは、あらゆる場所に配置された無数のプロセッサを含み得、様々なタイプの通信リンクを介して相互接続される。「リモート（ｒｅｍｏｔｅ）」という用語は、離れている（ａｐａｒｔ）ことを意味するために使用され、それは、任意の空間的、または距離的な情報を伝えることを意味しない。
【００４９】
分散オペレーティングシステムは、二つの段階において、ローカルクライアントプロセッサ１６０からリモートサーバ１３０へのメッセージパッシングを扱う。クライアント側１１０は、本質的に、ローカルネットワークマネージャ１２４を、ローカルクライアントプロセッサ１６０に対する人工（ａｒｔｉｆｉｃｉａｌ）サーバとして扱う。同様に、リモートネットワークマネージャ１３０は、バーチャルメッセージを生成し、それは、リモートサーバ１２８をパスする。すなわち、リモートネットワークマネージャ１３０は、リモートサーバ１２８に対するクライアントとしてアクトする。
【００５０】
ローカルおよびリモートオペレーティングシステム１１８および１２６は、メッセージパッシングオペレーティングシステムとして技術的に既知である。例えば、メッセージパッシングは、システム全体に亘る、プロセス間の制御（ＩＰＣ）を提供し得る。一般に、メッセージは、メッセージのコンテンツに添付された特定の意味を有せずに、一つのプロセスから別のプロセスへとパスされるバイト（ｂｙｔｅ）のパケットである。メッセージにおけるデータは、メッセージの送信者および受信者に対する意味を有するが、他の者に対しては意味を有しない。
【００５１】
メッセージパッシングによって、プロセスは互いにデータをパスすることが可能であるだけでなく、いくつかの処理の実行を同期化させる手段を提供する。それらがメッセージを送信、受信、返信する場合、プロセスは、それらが実行され得る場合、およびその長さに影響を与える、様々な「状態変化」を経験する。それらの状態および優先順位を知ることで、オペレーティングシステム１１８および１２６は、利用可能なプロセッサのリソースを最適化するために、出来る限り効率的に、全てのプロセスをスケジュールすることができる。
【００５２】
クライアント側コンピュータシステム１１０において、ローカルクライアント１６０上にて実行されるアプリケーションは、リモートサーバ１２８のオフノード（ｏｆｆ−ｎｏｄｅ）アドレスを知る。ローカルカーネルオペレーティングシステム１１８は、それがノード識別に対して、対応するローカルマッピングを有しない場合、任意のメッセージをオフノードメッセージとして認識し得る。オペレーティングシステム１１８は、認識されないメッセージをオフノードとして考え得、ローカルクライアント１６０の接続に対するそのようなメッセージを、スレッドおよびプロセスを含んで動作するローカルネットワークマネージャ１２４に導き得、その両方は、技術的に既知である。スレッドは、便利にも、群としてスケジュールおよび実行されるプログラミングステップの、サイズ調整された集合である。プロセスは、他方で、スレッドの「コンテナ」として考えられ得、スレッドが実行されるアドレススペースを規定する。プロセスは少なくとも一つのスレッドを含む。
【００５３】
メッセージパッシングは、スレッドからスレッドへ直接にターゲットされるよりも、チャンネル１６４および接続に導かれる。メッセージを受信することを望むスレッドは、まず、チャンネル１６４を作成し、メッセージをそのスレッドに送信することを望む別のスレッドは、まずそのチャンネルに「添付される（ａｔｔａｃｈ）」ことによって、そのチャンネルへの接続をしなければならない。ローカルクライアントプロセッサ１６０とローカルネットワークマネージャ１２４との間のメッセージの送信をインプリメントする様々な手段は、当業者には既知であり、本発明は、ここで検討されるチャンネルおよび接続を介した送信に限定されない。
【００５４】
チャンネル１６４は、メッセージカーネルコールによってインプリメントされ、メッセージを受信するために、サーバによって使用される。クライアントスレッドによって作成された接続は、サーバによって利用可能になったチャンネルに「接続」する。いったん接続が確立されると、クライアントはその接続を介してメッセージを送信することができる。プロセスにおける多数のスレッドは、同じチャンネル１６４に添付される場合、次いで、単一の接続はスレッド間にて共有され得る。チャンネル１６４および接続は、小さな整数識別子によるプロセス内にて名付けられ得る。クライアント接続は、直接に、ファイル記述子にマップされ得る。
【００５５】
チャンネル１６４は、それに関連される３つの待ち行列（ｑｕｅｕｅ）を有し得る。一つは、メッセージを待機するスレッド、もう一つは、まだ受信されていないメッセージを送信するスレッド、およびもう一つは、受信されたメッセージを送信したが、返信されていないスレッド、である。これらの任意の待ち行列の間、待機スレッドはブロックされる。他の応用において、チャンネル１６４は、異なる方法において配置され得る。
【００５６】
このメッセージブロックは、通常、図２の状態図に従う。図２において、太字の機能またはメッセージは、第１のスレッドに由来し、あるいは、イタリック体の機能およびメッセージは、ターゲットスレッドに由来する。また、プロセスが実行を継続することが許可されない場合、プロセスはブロックされる。なぜなら、メッセージプロトコルの一部を最後まで待機しなければならないからである。参照は、ＵＮＩＸ（登録商標）（ＰＯＳＩＸ）機能コールのための、特定のＰｏｒｔａｂｌｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅになされるが、これは、任意の方法において請求の範囲を限定することを意図されていない。スレッドは、ＭｓｇＳｅｎｄｖ（）機能をコールことによって、および、ターゲットスレッドが、ＭｓｇＲｅｃｅｉｖｅ（）機能を用いて、メッセージを伝送するまで、準備状態２５０から送信ブロック状態２５２へ動くことによって、メッセージをターゲットスレッドに伝送し得る。これは、発生したスレッドを返信ブロック状態２５４に送る。ターゲットスレッドがメッセージを処理した場合、それは、ＭｓｇＲｅｐｌｙｖ（）機能を用いて、返信メッセージを、その発生したスレッドに伝送し、準備状態２５０に戻す。スレッドが、以前に送信されたメッセージペンディングなしで、ＭｓｇＲｅｃｅｉｖｅ（）機能を実行する場合、それは、ターゲットスレッドがメッセージを、発生したスレッドへパスするために、ＭｓｇＳｅｎｄｖ（）機能をコールするまで、受信ブロック２５６にある。このブロックは、スレッドの同期化された実行を維持する。
【００５７】
このブロックスキームが処理の同期化を保証する一方で、リモートネットワークマネージャ１３０が、ローカルネットワークマネージャ１２４への返信を伝送しようとする間に、通信ネットワーク１４０において一時的な障害が存在する場合、問題が生じ得る。機能停止が十分な継続期間に及ぶ場合、トランスポート層は、最終的に、返信を送信しようとすることを止める。リモートネットワークマネージャ１３０がローカルネットワークマネージャ１２４と通信することができず、その返信が搬送されるのに失敗するゆえ、ローカルクライアント１６０は、永遠に返信ブロックに留まる。返信ブロック問題は、根本的な通信エラーに関係なく生じ得る。例えば、通信機能停止は、サーバノードの迅速な再ブート、バッファのオーバーラン、ネットワークからの物理的切断などによってトリガされ得る。
【００５８】
図３におけるフローチャートは、これらの関心事をアドレスする方法を開示する。ローカルノードにおけるプロセッサは、リモートノードの送り先を有するメッセージを生成し得る。すなわち、メッセージは、ステップ３１０において、ローカルネットワークマネージャ１２４に転送され得る。応答において、ローカルネットワークマネージャ１２４は、ステップ３２０において、ノード間接続がリモートノードに存在するかどうかを決定し得る。接続が存在しない場合、ローカルネットワークマネージャ１２４は、ステップ３３０において、リモートノードへの接続を作成し得る。ローカルノードとリモートノードとの間に接続が存在する場合、ローカルネットワークマネージャ１２４は、その接続が、ステップ３４０において、有効であるかどうかを決定し得る。接続がもはや有効ではない場合、ローカルネットワークマネージャ１２４は、ステップ３５０において、無効な接続を取り除き得、ステップ３３０において、新しい接続を作成する。いったん、有効な接続が、ローカルノードとリモートノードとの間に存在することが決定されると、あるいは、新しい接続が作成された場合、ローカルネットワークマネージャ１２４は、ステップ３６０において、一つ以上のインターフェースを介して、そのメッセージをリモートネットワークマネージャ１３０に伝送し得る。
【００５９】
「伝送（ｔｒａｎｓｍｉｓｓｉｏｎ）」という用語は、一つのデバイスから別のデバイスへの、メッセージの転送を記載するために使用される。その用語は、通常、メッセージのタイプ、「送信（ｓｅｎｄ）」および「受信（ｒｅｃｅｉｖｅ）」と混同することを防ぐために使用される。また、上記したように、ローカルネットワークマネージャ１２４とリモートネットワークマネージャ１３０との間の通信ネットワーク１４０は、メッセージが通信される必要のある場合のみ、技術的に知られているように、無数の形式を採り得る。例えば、ステップ３６０の伝送は、ＴＣＰ／ＩＰプロトコルネットワークを用いて、インプリメントされ得る。
【００６０】
図３において概説された方法をインプリメントするために、ローカルネットワークマネージャ１２４は、図４において示されるように、ローカルカーネルインターフェース層４１０、ローカルメディア選択層４２０、および、ローカルトランスポート層４３０を含み得る。ローカルカーネルインターフェース層４１０は、メッセージパッシングオペレーティングシステムカーネル１１８と対話し得る。ローカルトランスポート層４３０は、ローカルコンピュータシステム１１０の、それぞれのネットワークインターフェースのためのインスタンス４３２およびインスタンス４３４を含み得る。それぞれのインスタンスは、その関連するインターフェースに亘って、データを伝送し得る。ローカルメディア選択層４２０は、ノード間接続を管理し、および、トランスポート層インスタンス４３２および４３４を介したメッセージの伝送を管理し得る。
【００６１】
リモートネットワークマネージャ１３０は、同様の配置を有し得、リモートカーネルインターフェース層４４０、リモートメディア選択４５０層、および、それぞれのネットワークインターフェースのためのインスタンス４６２およびインスタンス４６４を含み得るリモートトランスポート層４６０を含む。これらのリモート層４４０、４５０、および４６０は、ローカルコンピュータシステム１１０の、その対応するローカル層４１０、４２０、および４３０として、リモートコンピュータシステム１１２上の対応する機能を実行し得る。ここで記載される機能性は、ローカルネットワークマネージャ１２４およびリモートネットワークマネージャ１３０の特定の層に対応するように記載されているが、これらの機能性は、既知の技術を使用して、殆ど無限の数の方法にて提供され得る。
【００６２】
上述したように、初めに、ローカルノードは、リモートノードに対して伝送要求を生成し得る。その伝送要求は、任意の長さのバイトのアレイとして扱われ得、リモートノードに対応するノード記述子を含み得る。伝送要求は、（例えば、ローカルカーネルインターフェース層４１０によって）ローカルネットワークマネージャ１２４によって受信され得る。ローカルカーネルインターフェース層４１０は、次いで、その要求を、ノード間接続がリモートノードに存在するかどうか、ならびに、存在しない場合に、新しいノード間接続を作成するかどうかを決定し得るローカルメディア選択層４２０にパスし得る。ローカルメディア選択層４２０は、システムのそれぞれのリモートノードの、伝送接続構造を維持し得る。伝送接続構造は、ローカルノードとリモートノードとの間の接続のために、状態情報などを制御するために使用され得、ローカルメディア選択層４２０の内部に格納し得る。伝送接続構造は、ノード記述子によって指し示されたリンクリストにおいて保持され得、その結果、ローカルメディア選択層４２０は、伝送接続構造が、その要求において参照されるリモートノードに存在するかどうかを迅速に決定し得る。あるいは、ハッシュされたリンクリストなどの他のデータ構造が、その伝送接続構造を保持するために使用され得る。
【００６３】
伝送接続構造は、接続状態、対のノード記述子、対の接続識別子、ならびに、ヘッド（ｈｅａｄ）ポインタおよびテイル（ｔａｉｌ）ポインタに対応する構成要素を含み得る。他の構成要素は追加または代用され得る。接続状態構成要素は、その接続の状態を規定するデータ構造を含み得る。例えば、接続は、ノード間接続を確立するために使用されるパケットに対応する多数の状態のうちの一つを有し得、以下でさらに詳細に記載される。対のノード記述子は、ローカルノードおよびリモートノードのためのノード記述子に対応し得る。例えば、その対は、リモートノードのためのローカルノードのノード記述子、および、ローカルノードのためのリモートノードのノード記述子を含み得る。伝送接続構造の例示的なデータ領域は、表１．０において示される。
【００６４】
【表１】
2006340354.tif 000003
対の接続識別子は、以下で記載されるように、接続管理のために使用される識別子であり得る。その対の接続識別子は、メディア選択層４２０および４５０によって生成される単調に増加するカウンターであり得、二つのノード間の接続を独自に識別し、その結果、それぞれの接続は、独自のノード記述子および接続識別子の対を有し得る。接続識別子は、ローカルメディア選択層４２０が伝送接続構造を作成する場合に生成され得る。あるいは、接続識別子は任意の既知の方法において生成され得る。例えば、接続識別子は、個々に、ローカルコンピュータシステム１１０およびリモートコンピュータシステム１１２のブートデータおよび／または時間に基づき得る。
【００６５】
ヘッドポインタおよびテイルポインタは、それぞれのノードのための伝送要求の順序に適った（ｉｎ−ｏｒｄｅｒ）伝送を保証するために、接続の伝送要求のリンクされたリストを規定し得る。あるいは、他の既知の技術は、それぞれのノードのための、伝送要求の、順序に適った伝送をインプリメントするために使用され得る。新しい伝送接続構造を作成する場合、ヘッドポイントおよびテイルポインタは、初期の伝送要求をポイントし得、初期の伝送要求が最初に提供されることを保証するために接続が確立される前に、その要求を待ち行列に入れる（ｑｕｅｕｅ）。例示的な伝送要求は、表２．０において、以下に示される。
【００６６】
いったん伝送接続構造が識別または作成されると、接続管理パケットは、ノード間接続を確立するために、ローカルノードとリモートノードとの間に伝送される。接続管理パケットのタイプは、接続の状態に対応し得、独自に接続を識別するために使用される、対のノード記述子および対の接続識別子を含み得る。例示的な接続管理パケットは、接続を開始するためのローカルノードによって送信されるＴＣＳ＿ＩＮＩＴパケット、接続が確立されたことを示すためにリモートノードによって送信されるＴＣＳ＿ＲＥＭ＿ＵＰパケット、アクティブな接続をポーリングするためのローカルノードによって送信されるＴＣＳ＿ＵＰパケット、および、ローカルノードおよびリモートノードによって送信されるＴＣＳ＿ＤＯＷＮパケットおよびＴＣＳ＿ＲＥＭ＿ＤＯＷＮパケットを含み得、個々に、既存の接続を取り除く。接続は一方向接続であり得、接続管理パケットはローカルまたはリモートノードのいずれかによって伝送され得るが、ローカルノードまたは開始ノードがその接続を介して伝送データパケットを許可するのみである。従って、接続は、ＴＣＳ＿ＩＮＩＴまたはＴＣＳ＿ＵＰの状態を有し得るのみである。
【００６７】
通常の接続管理パケットフローを表す例示的なフローチャートは、図５に示される。接続は、ローカルノードとリモートノードとの間の接続が確立されていることを示すＴＣＳ＿ＩＮＩＴにおいて開始され得る。接続がＴＣＳ＿ＩＮＩＴ状態にある間、ＴＣＳ＿ＩＮＩＴパケットは、ステップ５０２において、ローカルノードからリモートノードへ伝送され得る。ＴＣＳ＿ＩＮＩＴパケットは、リモートノードのための、ローカルノードのノード記述子、およびローカルノードの接続識別子を含み得る。例示的なＴＣＳ＿ＩＮＩＴパケットは、４の値を有するローカル接続識別子を含み得る。
【００６８】
ＴＣＳ＿ＩＮＩＴパケットを受信すると、ステップ５０４において、リモートノードは、伝送受信構造がＴＣＳ＿ＩＮＩＴパケットにおいて参照される、ローカルノードおよび接続に存在するかどうかを決定し得る。伝送受信構造は、それが、ＴＣＳ＿ＩＮＩＴパケットにおいて含まれるノード記述子によって指し示され得ることを除いて、伝送接続構造と同様の要素を含み得る。伝送受信構造がローカルノードに存在しない場合（それは通常のことであるが）、リモートノードは、伝送受信構造を作成し得、ステップ５０６において、ローカルノードに、ＴＣＳ＿ＲＥＭ＿ＵＰを伝送し得る。ＴＣＳ＿ＲＥＭ＿ＵＰパケットは、ＴＣＳ＿ＩＮＩＴからのノード記述子および接続識別子、ならびに、ローカルノードのためのリモートノードのノード記述子およびリモートノードの接続識別子を含み得る。このように、ＴＣＳ＿ＲＥＭ＿ＵＰパケットは、対のノード記述子および接続識別子を含む。例示的なＴＣＳ＿ＲＥＭ＿ＵＰパケットは、４および３の値を有する接続識別子の対を含み得る。
【００６９】
ＴＣＳ＿ＲＥＭ＿ＵＰパケットに応答して、ローカルノードは、ステップ５１２において、ノード記述子および接続識別子の対に対応する伝送接続構造が存在するかどうかを決定し得る。参照された構造が存在する場合、ステップ５１６において、ローカルノードは、既存の構造のリモート接続識別子領域が空であるかどうかを決定し得る。その値が空である場合、ステップ５２０において、ローカルノードは、新しいノード記述子および接続識別子を用いて、その参照された伝送接続構造を更新し得る。例えば、伝送接続構造は、接続識別子４および３を含みように更新され得る。この点において、接続が確立されたと考えられ得、その接続は、ＴＣＳ＿ＵＰの状態を有する。ローカルノードは、ステップ５２２において、その接続を介して、データパケットを伝送し得る。同様に、リモートノードは、その接続を介して、データパケットを受信し得る。いずれかのノードは、ＴＣＳ＿ＤＯＷＮまたはＴＣＳ＿ＲＥＭ＿ＤＯＷＮパケットを伝送することによって、任意の点において、その接続を取り除き得る。
【００７０】
所定の状況において、エラーが、接続管理プロセスにおいて生じる。例えば、伝送受信構造は既に、ＴＣＳ＿ＩＮＩＴパケットにおいて参照されるノード記述子のために存在し得る。リモートノードが既に、前から存在する伝送受信構造を有する場合、二つの場合が可能である。第１に、既存の伝送受信構造は、ＴＣＳ＿ＩＮＩＴパケットと同じ接続識別子を有し得る。リモートノードは、いくつかの理由で、接続識別子と合致することを含む、前から存在する伝送受信構造を有し得る。例えば、二重（ｄｕｐｌｉｃａｔｅ）ＴＣＳ＿ＩＮＩＴは、ローカルノードによって、または通信ネットワーク１４０上のどこかによって生成され得る。あるいは、ローカルノードは、再ブートされ得、既存のノード間の接続の知識（つまり、状態情報）を有しないが、しかしながら、古い接続と同じ接続識別子を再生成する。あるいは、前から存在する構造は、接続の同期がずれていることを再び指示する、合致していない（ｎｏｎ−ｍａｔｃｈｉｎｇ）接続識別子を含み得る。
【００７１】
前から存在する伝送受信構造が存在する場合、ステップ５０８において、リモートノードは、ＴＣＳ＿ＲＥＭ＿ＤＯＷＮパケットを伝送することによって、問題の原因に関係なく、既存の接続を取り除き得る。そのＴＣＳ＿ＲＥＭ＿ＤＯＷＮパケットは、単一のノード記述子および接続識別子のいずれかを含み得、参照された接続を取り除くために、コマンドとしてローカルノードによって扱われる。ローカルノードは、例えば、接続のためのその伝送接続構造を削除することによって、および、ステップ５１０において、接続に関連する任意の他の状態情報を除去（ｃｌｅａｎ  ｕｐ）することによって、接続を取り除き得る。ローカルノードは、次いで、接続を再確立することを企て得る。あるいは、接続識別子は、問題の原因を決定するために使用され得る。問題の原因が無害である場合、例えば、ＴＣＳ＿ＩＮＩＴパケットが二重パケットである場合、前から存在する接続は、データ伝送のために使用され得る。
【００７２】
同様のエラーはまた、ＴＣＳ＿ＲＥＭ＿ＵＰパケットがローカルノードによって受信された場合に生じ得る。上述したように、ＴＣＳ＿ＲＥＭ＿ＵＰパケットは、ノード記述子および接続識別子の完全な対、すなわち、ローカルノードの対およびリモートノードの対を含む。ローカルノードが、参照されたローカルノード記述子および接続識別子の対に対応する伝送接続構造を有しない場合、それらのノードは同期からずれており、ＴＣＳ＿ＤＯＷＮパケットは、ステップ５１４において、接続を終了するために、リモートノードに伝送され得る。ＴＣＳ＿ＤＯＷＮパケットに応答して、リモートノードは、ステップ５２４において、参照された伝送受信構造を無効にし得、任意の残りの状態情報などを除去し得る。あるいは、ローカルノードは、リモートノードの、既存の伝送接続構造を有し得る。上述した通常の場合において、ローカルノードの伝送接続構造は、リモートノード記述子を含み得ず、それらの構成要素は、例えば０などの、初期値にセットされ得る。しかしながら、二重パケットまたは再ブートのために、伝送接続構造は、リモートノード記述子および接続識別子の対の値を含み得る。この場合、ローカルノードは、ステップ５１８において、既存の伝送接続構造を無効にし得、ステップ５１４において、ＴＣＳ＿ＤＯＷＮパケットを伝送することによって、接続を取り除き得る。あるいは、エラーの原因が無害であると決定された場合、前から存在する接続は、更新され得、データ伝送のために使用され得る。
【００７３】
接続が確立された後、伝送要求は、例えば、上述したように、ユーザレベルの接続を確立し、そのユーザレベルの接続を介してデータを伝送することによって、ローカルネットワークマネージャ１２４によって提供され得る。特定のノードのための伝送要求は、ローカルネットワークマネージャによって順に提供され得る。これは、例えば、上述したヘッドポインタおよびテイルポインタを使用し、特定の接続のための伝送要求を待ち行列に入れることによって、達成され得る。伝送要求を待ち行列に入れるための例示的な構造は、表２．０に示される。付け加えて、伝送要求識別子は生成され得、単調に増加するカウンターなどのように、ノードに対して独自であり得る。あるいは、伝送要求識別子は、多数の既存の方法を使用して生成され得る。伝送要求識別子は、例えば、ローカルメディア選択層４２０によって、生成され得る。上述したように、伝送要求は、任意の長さのバイトのアレイとして扱われ得る。伝送要求識別子をインプリメントすることによって、全てのユーザデータは、通常、伝送要求識別子およびオフセットによって指し示されるバイトの２次元アレイとして扱われる。
【００７４】
【表２】
2006340354.tif 000004
ノード間接続を有する二つのノードの間の関係は、３つの方法において特徴付けられ得る。第１に、ノードは、アクティブに通信するユーザレベルプロセスを有し得る。第２に、ノードは、アクティブなユーザレベル接続を有し得るが、現在データを伝送していない。第３に、ユーザレベル接続がノード上のプロセス間に存在し得ない。最初の二つの場合のいずれかにおいて、メディア選択層４２０は、ノード間接続を保持し得る。しかしながら、３つ目の場合において、メディア選択層４２０は、ノード間接続を取り除き得、例えば、通信が所定の時間の間、止まる場合、代替的に、または追加的に、接続をタイムアウトする他の既知の方法が使用され得る。
【００７５】
二つ以上のインターフェースがローカルノードとリモートノードとの間に存在する場合、ローカルメディア選択層４２０はまた、インターフェース、ネットワーク、その他などのプール（ｐｏｏｌ）を維持することによってなど、多数のインターフェースを介して、データパケットの伝送を管理し得る。そのプールは、動作中または利用可能であるそれらのインターフェースまたはネットワークを含み得るか、または、そのプールは任意のインターフェースまたはネットワークを含み得る。複数のネットワークインターフェースを介して伝送を管理する、一つの例示的な方法は、図６のフローチャートにおいて示される。最初に、メディア選択層４２０は、ステップ６０２において、メディア選択優先（ｐｒｅｆｅｒｅｎｃｅ）を決定し得る。メディア選択優先は、メディア選択層４２０が接続を介してデータをどのように伝送するかのポリシーを指示する。メディア選択優先は、デバイスのパス名の一部として特定され得る。例えば、パス名である、「／ｎｅｔ／ｌａｂ２〜ｅｘｃｌｕｓｉｖｅ：ｅｎ０／ｄｅｖ／ｓｅｒ１」は、「専用（ｅｘｃｌｕｓｉｖｅ）」のメディア選択ポリシーを用いて、「ｌａｂ２」と名付けられたノード上のシリアルデバイスにアクセスするために使用され得る。必要に応じて、シンボルリンクは、パス名を与えられた様々なメディア選択に作成され得る。代替的に、または追加的に、メディア選択ポリシーは、パス名から分離したコマンドを介して、規定され得る。
【００７６】
図６において示されるように、データは、（１）負荷バランス（ｌｏａｄｂａｌａｎｃｅ）ポリシー６０３、（２）「ｐｒｅｆｅｒｒｅｄ（優先される）」ポリシー６１１、（３）「専用（ｅｘｃｌｕｓｉｖｅ）」ポリシー６１９の３つの異なるポリシーに従って伝送され得る。当業者は、様々な追加的なメディア選択ポリシーがインプリメントされ得ることを理解する。例えば、「冗長な（ｒｅｄｕｎｄａｎｔ）」メディア選択ポリシーが提供され得、ユーザは多数のインターフェースを介して同時にデータパケットを伝送することができる。
【００７７】
「負荷バランス」ポリシー６０３によって、ローカルメディア選択層４２０は、どのネットワークインターフェースまたはトランスポート層インスタンス４３２および４３４がそれぞれのパケットにデータを伝送するかを、決定することができる。それぞれのパケットは、リモートノードに最も速くパケットを搬送することができるリンク上にて待ち行列に入り得る。これは、多数のリンクが利用可能（帯域幅は、利用可能なリンクの帯域幅の合計であり得る）であり、リンクが利用可能でなくなるにつれて、サービスが顕著に低下する場合、ノード間のより大きな帯域幅を効果的に提供する。従って、ローカルメディア選択層４２０は、ステップ６０４において、最も速いインターフェース４３２および４３４を決定し得る。パケットは、次いで、ステップ６０６において、決定されたインターフェース４３２および４３４を介して伝送され得る。エラーが生じた場合、ローカルメディア選択層は、次に最も速いインターフェースを介してパケットを再送信しようと企て得る。付け加えて、ローカルメディア選択層４２０は、失敗したインターフェースを介して、未来のパケットを送信することを企て得ない。ローカルメディア選択層４２０は、データが伝送されるまで、ステップ６１０において、任意の追加的なパケットのために、このプロセスを継続し得る。
【００７８】
「優先」メディア選択ポリシー６１１によって、ユーザは、利用可能な場合に使用すべき特定のネットワークインターフェースを特定することができる。従って、ローカルメディア選択層４２０は、ステップ６１２において、特定のインターフェースを介して、データを伝送することを企て得、追加のパケットを伝送するために、ステップ６１８において、ループする。インターフェースが、ステップ６１４において、伝送の間利用可能でなくなる（すなわち、エラーが伝送中に生じる）場合、メディア選択層４２０は、次いで、データを伝送するために、別のインターフェース４３２および４３４を選択し得る。例えば、ローカルメディア選択層４２０は、デフォルトのメディア選択ポリシーに逆戻りし得る。あるいは、ローカルメディア選択層４２０は、優先リンクに最も類似するインターフェースを選択し得る。多数の優先インターフェースはまた、特定され得、その結果、メディア選択層４２０は、第１のインターフェースを介して、利用可能な場合、次いで、第２のインターフェースなどを介して、パケットを伝送することを企て得る。複数の優先は、例えば、リンクの相対的な性能値を設定することによって、特定され得る。相対的な性能値は、例えば、最大帯域幅、平均帯域幅、ネットワークの利用可能性などの、ネットワークの性能特性に基づき得る。図６に示されるように、ローカルメディア選択層４２０は、ステップ６１６において、追加的な優先のインターフェースが特定されるかどうかを決定することを企て得る。追加的なインターフェースが特定される場合、伝送は、追加的なインターフェースを介して企てられ得る。追加的なインターフェースが特定されない場合、ローカルメディア選択層４２０は、例えば、「負荷バランス」ポリシー６０３などの、デフォルトメディア選択ポリシーに従い、伝送を企て得る。代替的に、または追加的に、ポリシーは組み合わされ得、その結果、メディア選択層４２０は、複数の「優先」６１１リンクを介して、伝送を効果的に「負荷バランス」６０３をし得る。
【００７９】
最後に、「専用」メディア選択優先６１９によって、ユーザは、特定のリンクへの伝送をロックすることができる。「専用」リンクが利用可能でなくなった場合において、ローカルネットワークマネージャ１２４は、任意の他のインターフェースを介して、データを伝送することを企て得ない。あるいは、複数の「専用」６１９のインターフェースは特定され得、その結果、メディア選択層４２０は、特定のインターフェースに亘ってのみ、情報を伝送し得る。「専用」メディア選択ポリシーは、例えば、膨大なデータを動かすアプリケーションが高帯域幅のインターフェースを要求する場合などに使用され得る。「専用」メディア選択ポリシーを使用して、ユーザは、アプリケーションの要求に見合うそれらのインターフェースのみへの伝送に制限することができ、障害のある状況のもとで、より低い帯域幅のインターフェースに負荷をかけ過ぎることを避けることができる。再び、ポリシーは組み合わされ得、その結果、メディア選択層４２０は、いくつかの「専用」６１９のインターフェースを介して、伝送を効果的に「負荷バランス」６０３をし得る。再び図６を参照すると、ローカルメディア選択層４２０は、ステップ６２０において、専用のインターフェースを介して、データパケットを伝送し得る。特定のインターフェースが障害を起こした場合、伝送は任意の追加的なインターフェースを介して企てられない。
【００８０】
この例示的なメディア選択方法をインプリメントするために、ローカルメディア選択層４３０は、利用可能なインターフェースまたはネットワークのプールを維持し得る。例えば、それぞれのトランスポート層インスタンス４３２および４３４は、その関連するインターフェースがダウンした場合に、メディア選択層に通知し得る。メディア選択層４３０は、次いで、定期的に、それがいつ、再び、適切に機能するかを決定するために、インターフェースにポーリングし得る。例えば、上述のノード記述子および接続識別子の対を含むＴＣＳ＿ＵＰパケットは、定期的に、利用可能でないインターフェースに亘って伝送され得る。応答において、リモートメディア選択層４５０は、リンクが再び利用可能であることを確認するために、ＴＣＳ＿ＲＥＭ＿ＵＰパケットを伝送し得る。
【００８１】
ローカルメディア選択層４２０はまた、ローカルトランスポート層４３０からの性能情報を獲得し得る。この性能情報は、次いで、特定のメディア選択優先に従い、インターフェースを選択するために使用され得る。例えば、それぞれのトランスポート層インスタンス４３２および４３４は、静的またはダイナミックな性能情報を含み得る。それぞれのインスタンスは、ハードウェア性能などの、静的な性能情報を維持し得る。例示的なダイナミックな性能情報は、バイトカウント、現在、待ち行列にある伝送要求、および、それらの要求のサイズなどを含み得る。
【００８２】
適切なインターフェースがメディア選択層４２０によって選択された後、データパケットは、ローカルトランスポート層４３０によって、リモートトランスポート層４６０に伝送され得る。ローカルトランスポート層４３０による例示的なデータ伝送を表すフローチャートは、図７において示される。ステップ７０２において、伝送要求を受信した後、ローカルトランスポート層４３０は、ステップ７０４において、伝送の長さを確認し得る。追加的なパケットが伝送される場合、ローカルトランスポート層は、ステップ７０６において、そのパケットをリモートノードに伝送し得る。ローカルトランスポート層４３０は、例えば、バッファを割り当て、それを要求からのデータにパッキングし、および、インターフェースドライバに適切なコールをすることによって、そのパケットを伝送し得る。ローカルトランスポート層４３０はまた、ノード記述子およびセッション層、またはノード間、接続識別子の対を、それぞれのデータパケットに付加し得る。例示的なパケットデータ領域は、表４．０に示され、パケットに含まれる例示的なメディア選択層情報は、表５．０に含まれる。次に、ローカルトランスポート層４３０は、残りのデータを伝送するためにループし得る。追加的な情報が伝送されない場合、ローカルトランスポート層４３０は、ステップ７０８において、例えば、パケットヘッダにおけるフラグセットによって、伝送の最後のパケットにマークし得、その結果、リモートノードは、その伝送が完了していることを通知され得る。全てのデータが伝送された後、ローカルトランスポート層４３０は、ステップ７１０において、受信ノードからの応答を待機し得る。
【００８３】
【表３】
2006340354.tif 000005
リモートトランスポート層４６０による例示的なデータ受信を表すフローチャートが図８に示される。最初に、パケットは、ステップ８０２において、リモートノード上のデバイスドライバによって受信され、リモートネットワークマネージャ４３０のリモートトランスポート層４６０にパスされる。受信されたパケットは、伝送における次のパケットへのポインタ、パケットの長さ、ヘッダおよびデータバッファ、物理アドレスなどを規定する要素を含み得る。受信されたパケットのための例示的なデータ領域は表６．０に示される。必要に応じて、技術的に既知であるエラーチェッキングが、ステップ８０４において、パケットを有効にするために実行され得る。他の要素は代用され得、または追加され得る。
【００８４】
【表４】
2006340354.tif 000006
リモートトランスポート層４６０は、伝送全体が受信されるまで、パケットを受信することを継続し得る。伝送全体は、次いで、ステップ８０８において、リモートメディア選択層４５０にパスされ得、メディア選択サービスを実行するか、または、場合によっては、ユーザデータを、適切な送り先に転送する。従って、リモートトランスポート層４６０は、ステップ８０６において、伝送が単一のパケット伝送であるかどうかを決定し得る。接続管理パケットおよび小さなユーザデータ伝送などの、単一のパケット伝送が、ステップ８０８において、さらなる処理のために、リモートメディア選択層４５０に直接にパスされ得る。伝送は、パケットのヘッダにおける開始フラグおよび終了フラグの両方を設定することによって、単一のパケット伝送に指定され得る。一般には、伝送は、例えば、受信された伝送の待ち行列に伝送を追加することによって、リモートメディア選択層４５０にパスされ得る。待ち行列は、例えば、リモートノード記述子の下位のＸビットによって指し示される受信されたシーケンス構造のリンクされたリストへのポインタのアレイとして、インプリメントされ得る。受信されたパケット待ち行列構造の例示的なデータ領域は、表７．０において示される。
【００８５】
【表５】
2006340354.tif 000007
伝送が多数のパケットを含む場合、リモートトランスポート層は、ステップ８１０において、伝送を再構成し得る。例えば、伝送は、受信されたシーケンスデータ構造に再構成され得る。例示的な受信されたシーケンス構造は、所定のノード記述子／接続識別子の組み合わせのための、受信されたパケットのリンクされたリストとしてインプリメントされ得る。受信されたシーケンス構造はまた、接続のための独自のノード記述子および接続識別子、物理アドレスなどを規定する要素を含み得る。リモートトランスポート層４６０は接続識別子を使用し得、受信されたパケットのシーケンス数は、ステップ８１２において、前から存在する受信されたシーケンス構造を検索するために使用され得る。必要な場合、ステップ８１４において、新しい受信されたシーケンス構造が割り当てられ、ポインタアレイに追加され、受信されたパケットは、次いで、ステップ８１６において、受信されたシーケンス構造に挿入される。リモートトランスポート層４６０は、順々に、すなわち、オフセットの順に、パケットを挿入するために、受信されたシーケンス構造をスキャンし得る。代替的に、または追加的に、パケットは、任意の場所における構造に挿入され得る。
【００８６】
ステップ８１８において、伝送の最後のパケットを受信すると、ローカルネットワークマネージャ１２４によって送信されるように、リモートトランスポート層４６０は、ステップ８２０において、伝送が完了していることを確かめるために、受信されたシーケンス構造をスキャンし得る。伝送の最後のパケットは、そのパケットのヘッダにおけるフラグを介して、指定され得る。伝送が完了した場合、リモートトランスポート層４６０は、ステップ８２４において、首尾良い転送を示すＡＣＫパケットを伝送し得る。あるいは、リモートトランスポート層４６０は、ステップ８２６において、伝送の一つ以上のパケットが失われたことを示すＮＡＣＫパケットを伝送し得る。ＮＡＣＸパケットは、失われたパケットを記載する、ホールリスト（ｈｏｌｅ  ｌｉｓｔ）を含み得る。例示的なホールリストは、例えば、伝送シーケンスにおけるオフセットおよび長さで、ホールを記載することによって、伝送におけるホールの全体数、および、リストにおけるそれぞれのホールを規定するデータ構造を含むためにインプリメントされ得る。
【００８７】
再び図７を参照すると、ローカルトランスポート層４３０は、ステップ７１０において、伝送の最後のパケットを伝送した後、リモートトランスポート層４６０からの応答を待機する。ローカルトランスポート層４３０は、ステップ７１２において、首尾良い伝送を指示するＡＣＫパケットを受信し得る。この場合、ローカルトランスポート層４３０は、メディア選択層４２０へ、成功を指示し得る。あるいは、ローカルトランスポート層４３０は、ステップ７１４において、失われたパケットを指示するＮＡＣＫパケットを受信し得る。この場合、参照されたパケットは、ステップ７１６において、再作成され得、再伝送され得る。ステップ７１８において、所定の時間の間、応答を受信しない場合、ローカルトランスポート層は、ステップ７２０において、シーケンスの最後のパケットを再作成し得、再伝送し得、再びステップ７２２において、応答を待機する。最後のパケットは、その受信されたシーケンスを再スキャンし、ＡＣＫまたはＮＡＣＫパケットを送信するために、リモートノードをトリガし得る。これによって、ローカルノードは、通信機能停止が生じる不完全な伝送を救出することが可能となり、最後のパケットまたは応答パケットのいずれかが失われてしまうことを防ぐ。ステップ７２４において、反復されるタイムアウトが生じた場合、ローカルトランスポート層４３０は、ステップ７２６において、ローカルメディア選択層４２０に通知し得る。応答において、ローカルメディア選択層４２０は、利用可能なインターフェースのプールからインターフェースを取り除き得、その未来の利用可能性を決定するために、ポーリングパケットを用いて、インターフェースを定期的にポーリングし得る。例示的なポーリングパケットは、上述されたＴＣＳ＿ＵＰパケットを含み得る。
【００８８】
本発明の様々な実施形態が記載される一方で、さらなる多くの実施形態および実施が、本発明の範囲内にて可能であることは、当業者にとって明らかである。従って、本発明は、添付された請求の範囲およびその均等物に照らし合わされることを除いて、限定されない。
【図面の簡単な説明】
【００８９】
【図１】分散オペレーティングシステムをインプリメントするための、例示的な物理的レイアウトである。
【図２】分散オペレーティングシステムのための例示的なメッセージブロック図である。
【図３】分散オペレーティングシステムにおいて、ノード間通信を管理する例示的な方法を表す。
【図４】分散オペレーティングシステムにおいて、ノード間通信のために使用されるネットワークマネージャの例示的な論理構成を表す。
【図５】分散オペレーティングシステムのノード間において、ノード間通信を確立するための例示的な方法を表す。
【図６】分散オペレーティングシステムにおいて、多数のネットワークインターフェースを介した送信を管理する方法のための、例示的な方法を表す。
【図７】分散オペレーティングシステムにおいて、ローカルノードからデータを送信するための例示的な方法を表す。
【図８】分散オペレーティングシステムにおいて、リモートノードにてデータを受信するための例示的な方法を表す。
【符号の説明】
【００９０】
１１０  ローカルコンピュータシステム
１１２  リモートコンピュータシステム
１１８  ローカルメッセージパッシングオペレーティングシステム
１２０、１２２  ローカルサーバ
１２８  リモートサーバ
１４０  通信ネットワーク
【図１】
2006340354.tif 000008
【図２】
2006340354.tif 000009
【図３】
2006340354.tif 000010
【図４】
2006340354.tif 000011
【図５】
2006340354.tif 000012
【図６】
2006340354.tif 000013
【図７】
2006340354.tif 000014
【図８】
2006340354.tif 000015