(57)【特許請求の範囲】
【請求項１】
相互接続構造（３４）を介して相互接続され、かつ、共有システムリソースに接続された複数のプロセッシングノード（２２Ａ〜Ｄ）を含むマルチプロセッシングコンピュータシステムにおけるロック要求調停のための方法であって、複数のプロセッシングノード（２２Ａ〜Ｄ）は、第１のプロセッシングノード（２２Ａ）、第２のプロセッシングノード（２２Ｂ）、および第３のプロセッシングノード（２２Ｃ）を含み、前記方法は、
第１のプロセッシングノード（２２Ａ）が、共有システムリソースに対するアクセスを必要とする動作の実行を開始する前に、ロック要求（４０）を第２のプロセッシングノード（２２Ｂ）に伝送するステップと、
第２のプロセッシングノード（２２Ｂ）が、ロック要求（４０）が待ち受けているかどうかを判断するステップと、
第２のプロセッシングノード（２２Ｂ）が、ロック要求（４０）が待ち受けているという判断に応答して、第１のブロードキャストメッセージ（８２）を第１および第３のプロセッシングノード（２２Ａ，２２Ｃ）に対して出すステップと、
第１および第２のプロセッシングノード（２２Ａ，２２Ｂ）の各々が、第１のブロードキャストメッセージ（８２）に応答して、対応する第１のプローブ応答メッセージ（８４）を第３のプロセッシングノード（２２Ｃ）に伝送するステップと、
第２のプロセッシングノード（２２Ｂ）が、第１および第３のプロセッシングノード（２２Ａ，２２Ｃ）から対応する第１のプローブ応答メッセージ（８４）を受信すると、対応する第１のターゲット完了メッセージ（８５）を第１のプロセッシングノード（２２Ａ）に伝送するステップとを含む、方法。
【請求項２】
ロック要求（４０）が待ち受けているかどうかを判断するステップは、
第２のプロセッシングノード（２２Ｂ）が、ロック要求（４０）をキューに配置すると、
第２のプロセッシングノード（２２Ｂ）が、ロック要求（４０）が待ち受けているかどうかを判断するために、キューを監視するステップとを含む、請求項１に記載の方法。
【請求項３】
第１のプロセッシングノード（２２Ａ）が、ブロードキャストメッセージ（８２）に応答して、第１のプローブ応答メッセージ（８４）を第２のプロセッシングノード（２２Ｂ）に送信するステップと、
第３のプロセッシングノード（２２Ｃ）が、ブロードキャストメッセージ（８２）に応答して、第２のプローブ応答メッセージ（８４）を第２のプロセッシングノード（２２Ｂ）に送信するステップとをさらに含む、請求項１に記載の方法。
【請求項４】
第１および第３のプロセッシングノード（２２Ａ，２２Ｃ）の各々が、第２のブロードキャストメッセージ（８２）に応答して、対応する第２のプローブ応答メッセージ（８４）を第２のプロセッシングノード（２２Ｂ）に送信するステップをさらに含む、請求項３に記載の方法。
【請求項５】
第２のプロセッシングノード（２２Ｂ）が、第１および第３のプロセッシングノード（２２Ａ，２２Ｃ）から対応する第２のプローブ応答メッセージ（８４）を受信すると、対応する第２のターゲット完了メッセージ（８５）を第１のプロセッシングノード（２２Ａ）に伝送するステップをさらに含む、請求項４に記載の方法。
【請求項６】
マルチプロセッシングコンピュータシステムであって、
相互接続構造（３４）を介して、互いに、および共有システムリソースに相互接続される複数のプロセッシングノード（２２Ａ〜Ｄ）を含み、複数のプロセッシングノード（２２Ａ〜Ｄ）は、
共有システムリソースへの、動作を必要とするアクセスの実行を開始する前に、ロック要求（４０）を生成するよう構成された第１のプロセッシングノード（２２Ａ）と、
第２のプロセッシングノード（２２Ｂ）とを含み、
前記第１のプロセッシングノード（２２Ａ）は、第３のプロセッシングノード（２２Ｃ）に前記ロック要求（４０）を送信するように構成されており、
前記マルチプロセッシングコンピュータシステムは、
ロック要求（４０）が待ち受けているという判断に応答して、ロック要求（４０）を受信および処理し、さらに第１のブロードキャストメッセージ（８２）を第２のプロセッシングノード（２２Ｂ）に伝送するよう構成された第３のプロセッシングノード（２２Ｃ）とを含み、
第１および第２のプロセッシングノード（２２Ａ，２２Ｂ）の各々は、第１のブロードキャストメッセージ（８２）に応答して、前記共有システムリソースが解放されていることを示す、対応する第１のプローブ応答メッセージ（８４）を、第３のプロセッシングノード（２２Ｃ）に伝送するよう構成され、
第３のプロセッシングノード（２２Ｃ）は、第１および第２のプロセッシングノード（２２Ａ，２２Ｂ）から、前記対応する第１のプローブ応答メッセージ（８４）を受信した後、第１のターゲット完了メッセージ（８５）を第１のプロセッシングノード（２２Ａ）に伝送するよう構成される、マルチプロセッシングコンピュータシステム。
【請求項７】
第１のプロセッシングノード（２２Ａ）は、第１のターゲット完了メッセージ（８５）を受信した後、ロック動作の実行を開始するよう構成され、
第１のプロセッシングノード（２２Ａ）はさらに、ロック動作の実行の完了後、ロック解放要求（４０）を第３のプロセッシングノード（２２Ｃ）に伝送するよう構成され、
第３のプロセッシングノード（２２Ｃ）は、ロック解放要求（４０）の受信に応答して、第２のブロードキャストメッセージ（８２）を第１および第２のプロセッシングノード（２２Ａ，２２Ｂ）に伝送するよう構成され、
第１および第２のプロセッシングノード（２２Ａ，２２Ｂ）の各々は、第２のブロードキャストメッセージ（８２）に応答して、対応する第２のプローブ応答メッセージ（８４）を第３のプロセッシングノード（２２Ｃ）に伝送するよう構成される、請求項６に記載のマルチプロセッシングコンピュータシステム。
【請求項８】
第３のプロセッシングノード（２２Ｃ）は、第１および第２のプロセッシングノード（２２Ａ，２２Ｂ）からの対応する第２のプローブ応答メッセージ（８４）の受信に応答して、第２のターゲット完了メッセージ（８５）を第１のプロセッシングノード（２２Ａ）に伝送するよう構成され、
第３のプロセッシングノード（２２Ｃ）は、第２のターゲット完了メッセージ（８５）を伝送すると、待機中のロック要求（４０）をサービスに置くよう構成され、さらに待機中のロック要求（４０）は、複数のプロセッシングノード（２２Ａ〜Ｄ）のうちの１つにより生成され、第３のプロセッシングノード（２２Ｃ）内に記憶される、請求項７に記載のマルチプロセッシングコンピュータシステム。
【発明の詳細な説明】
【０００１】
【技術分野】
この発明は、概してコンピュータシステムに関する。特にこの発明は、マルチプロセッシングコンピューティング環境内でプロセスを同期するためのメッセージング機構に関する。
【０００２】
【背景技術】
一般的に、パーソナルコンピュータ（ＰＣ）および他の種類のコンピュータシステムは、共有メモリにアクセスするために共有バスシステムのまわりに設計された。１つまたは複数のプロセッサおよび１つまたは複数の入力／出力（Ｉ／Ｏ）装置は、共有バスを介して共有メモリに結合される。Ｉ／Ｏ装置は、共有バスとＩ／Ｏ装置との間の情報の転送を管理するＩ／Ｏブリッジを介して、共有バスに結合されてもよい。プロセッサは、典型的には直接にまたはキャッシュ階層を介してのどちらかで共有バスに結合される。
【０００３】
図１Ａには、先行技術の共有バスマルチプロセッサコンピュータシステム１０が例示される。共有システムバス１８に直接接続されている１４Ａから１４Ｃの３つのプロセッサが示される。さらに多くのプロセッサがまた、類似の態様で接続されてもよい。システムバス１８に接続されているシステムメモリ１６（すなわち、共有メモリ）が示される。１４Ａから１４Ｃの各プロセッサは、それ自体のローカルキャッシュ、すなわちキャッシュ１２Ａから１２Ｃをそれぞれさらに有することができる。この明細書中で用いられるように、「タスク」という用語は、ある特定の演算を実行するために配列された一連の命令を指す。マルチプロセッシングコンピュータシステム１０およびコンピュータシステム１０のためのオペレーティングシステムにおいて実行されているアプリケーションソフトウェアは各々、１つまたは複数のタスクを含み得る。
【０００４】
共有メモリマルチプロセッサが直面する１つの問題は、共通のタスクで働いているプロセッサを調整するかまたは同期するための能力に関することである。特に、２つ以上のプロセスによってアクセスされるメモリ１６の排他領域（critical region）へのアクセスは、メモリトランザクションにおいて一貫した結果を与えるよう制御されなければならない。メモリ１６の排他領域またはクリティカルセクションは、システム内の各プロセッサによってアクセス可能なグローバル変数を含んでいてもよい。典型的には、排他領域はロック変数（または「セマフォ」）により保護されて、アトミックスワップ動作を用いてプロセスを同期する。アトミックスワップ動作では、プロセッサは、記憶場所を読出すこと、およびそれを同じバス動作において、ロックされた値にセットすることの両方を行なって、他のいずれのプロセッサにも共有システムメモリ１６の読出または書込をさせないようにすることもできる。
【０００５】
図１Ｂには、アトミックスワップ命令を用いて１つまたは複数の排他領域をロックするための簡略化したフロー図が示される。共有バスシステム、たとえば図１Ａのシステムでは、バスアービトレーションは、共有バス１８がシステムメモリ１６への唯一のパスであるので、比較的単純である。したがって、バスをとるプロセッサはバスの制御を保持することができ、これにより他のすべてのプロセッサをメモリからロックアウトする。プロセッサがロックの確立を求める場合、まず第１にロック変数を読出してその状態をテストする。プロセッサは、ロックがアンロックされていることを値が示すまで、読出およびテストを続ける。
【０００６】
アンロックされたロック変数の状態を検出した後、変数をロックすることを求めるプロセッサは、共有システムバス１８に対する適切な命令を実行することにより、ロックを試みる。命令は、いくつかの命令セットにおいて「テスト・アンド・セット」命令として公知であり得る。テスト・アンド・セット命令は読出−修正−書込の典型的な形式を有し、そのプロセス全体は、影響を受けた記憶場所を読出すかまたはそれに書込もうと試みる別のプロセッサによる割込が不可能である。すなわち、一旦テスト・アンド・セット命令が開始され、読出アクセスが完了すると、影響を受けた記憶場所に対しては、その場所がテスト・アンド・セット命令の第２のステップ（すなわち、「セット」関数）の間に再書込されるまで、他のアクセスを行なうことはできない。
【０００７】
ｘ８６アーキテクチャでは、プロセッサは命令の前にＬＯＣＫプリフィックスを用いて、共有システムバス１８をロックすることができる。ＬＯＣＫプリフィックスで命令が実行されると、プロセッサはそのバスロック信号出力をアサートする。この信号を外部バス制御装置（図示せず）に接続することができ、この制御装置はその後、他のいずれのプロセッサにもシステムバスを引き継がせない。こうして、多くの共有システムリソース、たとえばシステムメモリ１６、ディスクドライブ（図示せず）等を、共有システムリソースに影響を与える動作を実行する間、単一のプロセッサの専用とすることができる。
【０００８】
一般的に、排他領域を更新するプログラムのための骨組みを、ＬＯＣＫ（critical＿region）、Access（critical＿region）、ＵＮＬＯＣＫ（critical＿region）として与えることができる。フラグまたはセマフォを排他領域と関連付けることができる。上述のように、排他領域は典型的には、共有データ、データ構造またはロック変数を包含する記憶場所を含み得る。ＬＯＣＫおよびＵＮＬＯＣＫステートメントは、排他領域の内容上ではなく、むしろ排他領域のセマフォ上で動作する。セマフォは、一度にわずか１つのプロセスしか排他領域にアクセスさせない。プロセスＡがＬＯＣＫステートメントをうまく実行する場合、プロセスＡがＵＮＬＯＣＫステートメントを実行するまで、コンピュータシステム１０内の（共有システムリソースへのアクセスを必要とする）他のすべてのプロセスを停止させる必要がある。ＬＯＣＫステートメントは、テスト・アンド・セット命令で一部実行され得る。
【０００９】
共有システムリソースへのアクセスの同期は、２つ以上のプロセスによるＬＯＣＫ命令の同時実行を逐次化することにより達成される。ＬＯＣＫの逐次実行のために、わずか１つのプロセスのみがセマフォのゼロ値（リセット条件）を監視でき、これによりＬＯＣＫを通過して更新段階へ移動することができる。こうして、図１Ｂに示されるように、要求プロセッサはセマフォが（別のプロセッサによって）セットされる限り、変数をロックする試みを続けることができる。１つのプロセスがＬＯＣＫを通過し、ＵＮＬＯＣＫに達すると、セマフォはゼロ状態（すなわち、リセット状態）に戻ることができ、これにより（別のプロセッサで実行され得る）別のプロセスがＬＯＣＫステートメントを通過し、共有変数を更新することを許可する。
【００１０】
（対応するプロセッサを介して）プロセスがロックをうまく確立すると、すなわち排他領域のロックに成功すると、そのプロセスは次に排他領域で動作する。排他領域での動作が完了すると、プロセスは、たとえばその関連するセマフォをリセットすることにより、排他領域をアンロックする。これにより次のプロセスがロック所有権を確立することが可能となり、同様にロック変数に対してロック動作を続けることが可能となる。
【００１１】
不幸にも、共有バスシステムにはいくつかの欠点がある。たとえば多数の装置が共有バスに接続されるので、バスは典型的には比較的低周波数で動作される。さらに、共有システムバスは、固定されたバスバンド幅のため、多数の装置を含むような大きさにすることができない。共有バスに（直接または間接的に）接続された装置のバンド幅要求が共有バスの使用可能なバンド幅を超えると、装置は、バスにアクセスしようとする際にしばしばストールすることになる。これは結果としてシステム性能の全体的な低下につながる。
【００１２】
１つ以上の上述の問題に対しては、分散メモリシステムを用いて取組むことができる。分散メモリマルチプロセッシングコンピュータシステムでは、先行技術の共有物理システムメモリ１６（図１Ａ）が、代わりにプロセッシングノードの中で分散されてもよい。さらに、先行技術の専用のシステムバス１８（図１Ａ）は、このようなマルチプロセッシング環境にはなくてもよい。したがって、システムの拡張性を制限することなくシステム内のプロセスを同期するために、どのプロセスがロックを受取るかを判断するためのメカニズムを設けることが望ましい。
【００１３】
【発明の開示】
上述に概略が述べられた問題は、この明細書中に記載のマルチプロセッシングコンピュータシステムによって大部分が解決される。コンピュータシステムは分散システムメモリを用いてもよく、さらに多数のプロセッシングノードを含んでいてもよい。２つ以上のプロセッシングノードは、分散メモリシステムを形成することができる個別メモリに結合され得る。プロセッシングノードは、任意の好適な相互接続を用いて相互接続され得る。メモリアドレス空間は、各々のノードと関連するメモリの全体に割当てられる。
【００１４】
一実施例では、ロックの獲得および解放は、マルチプロセッシングシステムにおいて、複数のプロセッシングノードからの単一のプロセッシングノードにより調停される。第１のプロセッシングノードは、ロック要求を、システム内の各プロセッシングノードからのこのようなロック要求を調停する第２のプロセッシングノードに伝送する。第２のプロセッシングノードは、次に、受信されたロック要求が待ち受けているかどうかを判断し、もしそうであれば、ブロードキャストメッセージをシステム内の残りのすべてのプロセッシングノードに対して出す。こうして、ブロードキャストメッセージは、残りの各プロセッシングノードに第２のプロセッシングノードによる判断を伝える役割を果たし、第１のプロセッシングノードからのロック要求をサービスに置く。
【００１５】
ブロードキャストメッセージに応答して、残りの各プロセッシングノードは、ロック要求ノード、すなわち第１のプロセッシングノードによるアクセスのために共有システムリソースをすべて解放する準備ができると、プローブ応答メッセージを第２のプロセッシングノード（すなわち、調停ノード）に送信する。第２のプロセッシングノードは、次いで、ターゲット完了メッセージを第１のプロセッシングノードに伝送することにより、第１のプロセッシングノードにロック所有権の可用性を伝える。
【００１６】
ロック動作の完了後、第１のプロセッシングノードはロック解放要求を第２のプロセッシングノードに伝送する。第２のプロセッシングノードは、再びブロードキャストメッセージをシステム内の残りの各プロセッシングノードに送信して、現在のロック動作の完了をそれらに伝える。残りの各プロセッシングノードは、ブロードメッセージに応答して、対応するプローブ応答メッセージを第２のプロセッシングノードに対し、ブロードキャストメッセージの受信の肯定応答として伝送する。第２のプロセッシングノードが、システム内の他のプロセッシングノードからのすべてのプローブ応答メッセージを受信した後、ターゲット完了メッセージを第１のプロセッシングノードに送信すると、プロトコルは完了する。この発明に従ったメッセージング機構により、分散メモリマルチプロセッシングコンピュータシステム内で、競合とデッドロックのないロッキングとが可能となる。
【００１７】
好ましい実施例の以下の詳細な説明が以下の図面に関連して考慮されると、この発明をさらによく理解することができる。
【００１８】
【この発明を実施するためのモード】
概観
図２Ａでは、分散メモリマルチプロセッシングコンピュータシステム２０の一実施例が示される。図２Ａの実施例では、コンピュータシステム２０はいくつかのプロセッシングノード２２Ａ、２２Ｂ、２２Ｃ、および２２Ｄを含む。各プロセッシングノードは、各々それぞれのプロセッシングノード２２Ａ〜２２Ｄ内に含まれるメモリ制御装置２６Ａ〜２６Ｄを介して、システムメモリ２４Ａ〜２４Ｄのそれぞれの部分に結合される。こうして、分散メモリ２４Ａ〜２４Ｄは全システムメモリを含む。
【００１９】
加えて、プロセッシングノード２２Ａ〜２２Ｄは、プロセッシングノード２２Ａ〜２２Ｄの中で通信し、さらにプロセッシングノードと、対応するＩ／Ｏブリッジとの間でも通信するために、インターフェイスロジックとして公知でもある、１つまたは複数のインターフェイスポート２８を含む。たとえば、プロセッシングノード２２Ａは、プロセッシングノード２２Ｂと通信するためのインターフェイスロジック２８Ａ、プロセッシングノード２２Ｃと通信するためのインターフェイスロジック２８Ｂ、およびさらに別のプロセッシングノード（図示せず）またはＩ／Ｏブリッジ（図示せず）と通信するための第３のインターフェイスロジック２８Ｃを含む。同様に、プロセッシングノード２２Ｂはインターフェイスロジック２８Ｄ、２８Ｅおよび２８Ｆを含み、プロセッシングノード２２Ｃはインターフェイスロジック２８Ｇ、２８Ｈおよび２８Ｉを含み、さらにプロセッシングノード２２Ｄはインターフェイスロジック２８Ｊ、２８Ｋおよび２８Ｌを含む。プロセッシングノード２２Ｄは、インターフェイスロジック２８Ｌを介してＩ／Ｏブリッジ３０と通信するために結合される。他のプロセッシングノードは同様の態様で他のＩ／Ｏブリッジと通信することができる。Ｉ／Ｏブリッジ３０はＩ／Ｏバス３２に結合される。
【００２０】
プロセッシングノード２２Ａ〜２２Ｄを相互接続するインターフェイス構造は、二重−単方向リンクの組を含む。各々の二重−単方向リンクはパケットベースの単方向リンクの対として実現され、コンピュータシステム２０において任意の２つのプロセッシングノード間で、高速のパケット化された情報の転送を達成する。リンク３４Ａおよび３４Ｂは、二重−単方向リンク構造の一例である。単方向ライン３４Ａを用いて、プロセッシングノード２２Ａからプロセッシングノード２２Ｂにパケットを送り、ライン３４Ｂを用いて、プロセッシングノード２２Ｂからプロセッシングノード２２Ａにパケットを伝送する。ライン３４Ｃ〜３４Ｈの他の組を用いて、図２Ａに示されるとおり、それらの対応するプロセッシングノード間でパケットを伝送する。
【００２１】
類似の二重−単方向リンク構造を用いて、プロセッシングノードおよびその対応するＩ／Ｏ装置、またはグラフィックデバイスもしくはＩ／Ｏブリッジを、プロセッシングノード２２Ｄに関して示されるとおりに、相互接続することができる。二重−単方向リンクは、プロセッシングノード間での通信に対するキャッシュコヒーレント態様で、またはプロセッシングノードと、外部Ｉ／Ｏ装置もしくはグラフィックデバイス、またはＩ／Ｏブリッジとの間の通信に対する非コヒーレント態様で動作され得る。１つのプロセッシングノードから別のプロセッシングノードへ伝送されるべきパケットが、１つまたは複数の残りのノードを通過できることが注目される。たとえば、プロセッシングノード２２Ａによりプロセッシングノード２２Ｄに伝送されたパケットは、図２Ａの構成において、プロセッシングノード２２Ｂまたはプロセッシングノード２２Ｃのどちらかを通過することができる。任意の好適なルーティングアルゴリズムを用いてもよい。コンピュータシステム２０の他の実施例は、図２Ａに示されるより、多いかまたは少ないプロセッシングノードを含んでいてもよい。
【００２２】
メモリ制御装置およびインターフェイスロジックに加えて、プロセッシングノード２２Ａ〜２２Ｄは、１つまたは複数のプロセッサコア、キャッシュメモリ（内部または外部）、バスブリッジ、グラフィックロジック、バス制御装置、周辺機器制御装置等の、他の回路要素または論理エンティティを含み得る。ある例示的な実施例では、このような回路要素または論理エンティティは、パケットトランザクションのソースまたは宛先として作用し得るノードの「ユニット」または「ファンクション」と称される。さらに、プロセッシングノードにおける各々の回路要素は、プロセッシングノードにより実行されている機能に応じて、１つまたは複数のインターフェイスポートに結合され得る。たとえば、いくつかの回路要素はＩ／Ｏブリッジをプロセッシングノードに接続するインターフェイスロジックに結合するだけでよく、他の回路要素は２つのプロセッシングノードなどを接続するインターフェイスロジックに結合するだけでよい。他の組合せも所望のとおりに容易に実現することができる。
【００２３】
メモリ２４Ａ〜２４Ｄは任意の好適な記憶装置を含み得る。たとえばメモリ２４Ａ〜２４Ｄは、１つまたは複数のＲＡＭＢＵＳ ＤＲＡＭ（ＲＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、スタティックＲＡＭなどを含み得る。コンピュータシステム２０のメモリアドレス空間はメモリ２４Ａ〜２４Ｄ間で分けられる。各プロセッシングノード２２Ａ〜２２Ｄはメモリマップを含んでいてもよく、これを用いて、どのアドレスがどのメモリ２４Ａ〜２４Ｄにマッピングされるか、およびこれにより、どのプロセッシングノード２２Ａ〜２２Ｄに対し、特定のアドレスに対するメモリ要求が経路指定されるべきかを判断する。一実施例では、コンピュータシステム２０内のアドレスに対するコヒーレンシ点は、アドレスに対応するバイトを記憶しているメモリに結合されるメモリ制御装置２６Ａ〜２６Ｄである。言い換えれば、メモリ制御装置２６Ａ〜２６Ｄは、対応するメモリ２４Ａ〜２４Ｄへの各メモリアクセスが確実にキャッシュコヒーレント態様で生じるようにすることを担う。メモリ制御装置２６Ａ〜２６Ｄは、メモリ２４Ａ〜２４Ｄにインターフェイスするための制御回路を含み得る。さらにメモリ制御装置２６Ａ〜２６Ｄは、メモリ要求を待ち行列に入れるためのリクエストキューを含み得る。
【００２４】
一般的には、インターフェイスロジック２８Ａ〜２８Ｌは１つの単方向リンクからパケットを受信するため、および別の単方向リンクに伝送されるべきパケットをバッファリングするためのさまざまなバッファを含み得る。コンピュータシステム２０は、パケットを伝送するために任意の好適なフロー制御メカニズムを用いることができる。たとえば一実施例では、各々の送信インターフェイスロジック２８は、送信インターフェイスロジックが接続されるリンクの他方端で、受信インターフェイスロジック内の各種類のバッファの数の計数を記憶する。インターフェイスロジックは、受信インターフェイスロジックにパケットを記憶するためのフリーバッファがない限り、パケットを伝送しない。受信バッファがパケットを前方へ経路指定することにより解放されると、受信インターフェイスロジックはメッセージを送信インターフェイスロジックに伝送し、バッファが解放されたことを示す。このようなメカニズムを、「クーポンベースの」システムと称してもよい。
【００２５】
次に図２Ｂでは、プロセッシングノード２２Ａおよび２２Ｂを接続する二重−単方向リンク構造の一実施例をさらに詳細に例示するために、プロセッシングノード２２Ａおよび２２Ｂを例示するブロック図が示される。図２Ｂの実施例では、ライン３４Ａ（単方向リンク３４Ａ）はクロックライン３４ＡＡ、制御ライン３４ＡＢ、およびコマンド／アドレス／データバス３４ＡＣを含む。同様に、ライン３４Ｂ（単方向ライン３４Ｂ）はクロックライン３４ＢＡ、制御ライン３４ＢＢ、およびコマンド／アドレス／データバス３４ＢＣを含む。
【００２６】
クロックラインは、その対応する制御ラインおよびコマンド／アドレス／データバスに対するサンプルポイントを示すクロック信号を伝送する。１つの特定の実施例では、データ／制御ビットが、クロック信号の各エッジ（すなわち、立上りエッジおよび立下りエッジ）の時に伝送される。したがって、ラインごとの２データビットはクロックサイクルごとに伝送され得る。ラインごとに１ビットを伝送するのに用いられる時間の量は、この明細書中では「ビット時間」と称される。上述の実施例はクロックサイクルごとの２ビット時間を含む。パケットは２以上のビット時間にわたって伝送されてもよい。コマンド／アドレス／データバスの幅に応じて、多数のクロックラインを用いることができる。たとえば、３２ビットコマンド／アドレス／データバスに対して４つのクロックラインを用いることができる（すなわち、毎８ＣＡＤビットに対して１つのクロックラインを用いる）。
【００２７】
制御ラインは、コマンド／アドレス／データバスを介し伝送されたデータが制御情報のビット時間であるか、またはデータのビット時間であるかを示す。制御ラインは制御情報を示すためにアサートされ、データを示すためにデアサートされる。ある制御情報はデータがあとに続くことを示す。データは、対応する制御情報のあとに直ちに続いていてもよい。一実施例では、他の制御情報はデータの伝送に割込むことができる。このような割込は、データの伝送の間に多くのビット時間に対して制御ラインをアサートすること、および制御ラインがアサートされる間に制御情報のビット時間を伝送することにより実行され得る。データに割込む制御情報は、関連するデータがあとに続くことを示さなくてもよい。
【００２８】
コマンド／アドレス／データバスは、データ、コマンドおよびアドレスビットを伝送するためのラインの組を含む。一実施例では、コマンド／アドレス／データバスは８本、１６本または３２本のラインを含み得る。各プロセッシングノードまたはＩ／Ｏブリッジは、設計選択に従って、サポートされたライン数のいずれか１つを用いることができる。他の実施例は所望のとおり、他のサイズのコマンド／アドレス／データバスをサポートすることができる。
【００２９】
一実施例に従って、コマンド／アドレス／データバスラインおよびクロックラインは、反転データを運ぶことができる（すなわち、論理「１」はラインを介する低電圧として表わされ、論理「０」は高電圧として表わされる）。代わりに、これらのラインは非反転データを運ぶことができる（すなわち、論理「１」はラインを介する高電圧として表わされ、論理「０」は低電圧として表わされる）。さらなる代替例として、差分信号送信を実行することができる。
【００３０】
図３Ａ〜５では、コンピュータシステム２０の一実施例に従って、キャッシュコヒーレント通信（すなわち、プロセッシングノード間およびコヒーレントリンク３４Ａ〜３４Ｈをわたる通信）で用いられる例示的なパケットが示される。他のコヒーレントリンクパケット（たとえば、図８Ａ〜８Ｄ）が後に説明される。
【００３１】
図３Ａ、３Ｂおよび４Ａは情報、要求および応答パケットをそれぞれ例示し、図４Ｂおよび５はデータパケットを例示する。他の実施例は異なるパケット定義を用いてもよい。各パケットは、「ビット時間」見出しのもとに列挙される一連のビット時間として例示される。パケットのビット時間は、リスト化されたビット時間命令に従って伝送される。図３Ａ〜５は８ビットコマンド／アドレス／データバス実現のためのパケットを例示する。したがって、制御またはデータ情報の（７から０に番号付けされた）８ビットは、各々のビット時間の間８ビットコマンド／アドレス／データバスをわたって転送される。図中で値が与えられていないビットを、所与のパケットに対して指定するか、またはパケット特定の情報を伝送するために用いることができる。一実施例では、各制御パケットは４または８バイトから成る。
【００３２】
図３Ａは情報パケット（インフォパケット）３８を例示する。インフォパケット３８は８ビットリンクで４ビット時間を含む。コマンドエンコードはビット時間０の間に伝送され、この実施例において、コマンドフィールドＣＭＤ［５：０］により示される６ビットを含む。例示的なコマンドフィールドエンコードが図６に示される。図３Ｂおよび４Ａに示される他のパケットの各々も、ビット時間０の間、同じビット位置でのコマンドエンコードを含む。インフォパケット３８をプロセッシングノード間で最も近い隣接通信のために用いることができるので、このパケットは論理（すなわち、ファブリックレベルまたはチェーンレベル）プロトコルのレベルより下にあってもよい。さらに、インフォパケットはファブリック内で経路指定されず、このため受信器ノードにおいていずれのバッファリングを不要としてもよい。一実施例では、メッセージングプロトコルは、インフォパケットがフロー制御されず、常にそれらの宛先ノードで受取られるべきであることを必要とすることがある。インフォパケット３８の残りのフィールドは、図３Ａに例示されるようにコマンド特定であってもよい。例示的なインフォパケットは、図６の表に例示されるように、システム同期（もしくはシンク）パケットまたはノーオペレーション（ＮＯＰ）パケットを含む。一実施例では、シンクパケットを用いて、システムリセットまたはシステム全体の誤り等の再同期イベントがコンピュータシステム２０で発生したことを示す。
【００３３】
上述のように、マルチプロセッシングシステム２０内のメッセージング機構を、送信ノードと受信ノードとの間に流れるパケットに対するバッファの可用性を示す「クーポンベース」であると考えることができる。このようなクーポンベースの機構の実現例では、送信ノードは、受信ノードでの各々の種類のバッファに対するカウンタを含み得る。システムリセットでは、送信ノードはそのカウンタをクリアすることができ、リセット信号がデアサートされると、受信ノードは情報パケットを（ＮＯＰコマンドを識別するＣＭＤフィールドを備えた、図３Ａに示されるのと類似のフォーマットで）送信ノードに送り、各々の種類のうち使用可能なバッファをそれがいくつ有しているかを示すことができる。送信ノードが要求または応答パケットを受信ノードに送ると、送信ノードはその関連するカウンタをデクリメントする。ある特定のカウンタがゼロ値に達すると、送信ノードはパケットをその関連するバッファに送ることを止める。ある例示的な実施例では、情報パケットは複数の２ビットフィールドを含み、その各々はバッファのある特定の種類に対応する。受信ノードがバッファを解放すると、それは別の情報パケットを送信ノードに送信して、各２ビットフィールドが、各々の種類のうちいくつのバッファが使用可能になったかを示す。送信ノードは次に、情報パケットのデータに従って、関連するカウンタをインクリメントする。
【００３４】
図３Ｂは要求パケット４０の例を示す。上述のように、各々の単方向リンクはパイプライン方式の分割トランザクション相互接続であり、そのトランザクションはソースノードによりタグ付けされ、応答を、いずれの所与の例においても順序通りではなくパケットのルーティングに従って、ソースノードに戻すことができる。ソースノードは要求パケットを送り、トランザクションを開始する。要求パケット４０内のコマンド特定のフィールドは、特定の要求に関連して後に説明される。一般的には、各要求パケットは、（前に説明された）ＣＭＤフィールドおよびAddrフィールドを含み得る。要求パケット４０は、要求パケットのコマンドが関連するアドレスを有する場合、８ビットリンクに８ビット時間を含み得る。関連するアドレスがない場合、要求パケット４０はわずか４バイト長だけであってもよい。
【００３５】
コマンドエンコード（すなわち、ＣＭＤ［５：０］）はビット時間０の間伝送される。ビット時間４から７を用いて、要求に関連するアドレスを伝送する。要求パケットのソースは、３ビットSrcNode［２：０］フィールドおよび関連する２ビットSrcUnit［１：０］フィールドによって、ビット時間０および１で識別される。一実施例では、要求パケットの最大３２（２5）ソースを、結合された５ビットのSrcNodeおよびSrcUnitフィールドのおかげで、システム２０内に同時に伝送することができるが、所与の時間で１ソースにつきわずか１つのトランザクションしか許可されない。ある代替の実施例では、１つまたは複数のソースが、所与の時間でシステムにおいてアクティブである２以上のトランザクションを有することができる。
【００３６】
図４は応答パケット４２を例示する。応答パケット４２はコマンドエンコード（ＣＭＤフィールド）、パケットの宛先（DestNodeおよびDestUnitフィールド）、および後に説明される他のコマンド特定のフィールドを含んでもよい。３ビットDestNodeフィールドおよび２ビットDestUnitフィールドは、それに対して応答パケットの宛先が定められているプロセッシングノード内で、プロセッシングノードおよびユニットを識別する。さまざまな種類の応答パケットが追加の情報を含んでもよい。たとえば、読出応答パケットは、次に続くデータパケットに提供される読出データの量を示すことができる。一般的には、応答パケット４２は、トランザクションを実行する間、アドレスの伝送を必要としないコマンドのために用いることができる。さらに、応答パケット４２（たとえば、図８Ｃに関連して後に説明されるプローブ応答パケット）を用いて、トランザクションを終了させる肯定応答パケットを伝送することができる。
【００３７】
図４Ｂは、８ビットリンクに８ビット時間を有する例示的なデータパケット４６を示す。しかしながら、データパケットが最大６４（すなわち、１６ダブルワード）までの４ビット時間の任意の倍数であり得ることが理解されるべきである。データパケットはさまざまなトランザクションに対するデータペイロードを含む。一般的には、データパケットは書込要求または読出応答パケットの後に続いてもよく、データバイトはアドレスの昇順で転送されてもよい。データパケット４６は４から６４バイトを含んでもよい。一実施例では、データパケット４６の長さは４バイトの倍数である。６４バイトキャッシュブロックの場合、データパケット４６はキャッシュブロック転送を完了するために、（８ビットリンクに）６４ビット時間を要するだろう。他の実施例では所望のとおり、キャッシュブロックを異なるサイズに規定することができる。さらに、データを、キャッシュ不可能な読出および書込に対してキャッシュブロックサイズ未満で伝送することができる。キャッシュブロックサイズ未満のデータを伝送するためにデータパケットが必要とするビット時間はより少ない。一実施例では、データバイトはダブルワード（４バイト）境界で整列する。したがって、ダブルワード内では、データバイトがそれらの自然なバイトレーンで現れる。完全なダブルワード未満の転送のためには、データは不定義バイトで埋込まれ、ダブルワード境界でこのバイトレーンアライメントを達成することができる。
【００３８】
図５では、サイズ決めされた書込要求に対応するデータパケット５０の一例が示される。書込み（サイズ決めされた）要求（Write（Sized）要求）は、キャッシュ不可能な書込、またはサイズがキャッシュブロック未満のデータを必要とする他の書込のために、データを転送する。好ましい実施例では、キャッシュブロックのサイズは６４バイトである。サイズ決めされた書込み動作に対するデータパケットの構成は、最下位のアドレス指定されたダブルワードの送出が最初に、および、アドレス指定されたデータの残りの送出がアドレス昇順で、ダブルワードの倍数で行われるようになされてもよい。こうして、サイズ決めされた書込動作のためのデータパケット５０は、アドレスの昇順で、１から１６のダブルワード（すなわち、４バイトから６４バイトまで）の任意の部分をも含むことができる。
【００３９】
一実施例では、サイズ決めされた書込要求パケットに対応するデータパケットは、データパケット５０のデータの量にかかわらず、まず最初にマスクの１つのダブルワード（すなわち、４バイト）を伝送することができる。マスクは図５ではマスクフィールドによって示される。マスクフィールドの各ビットはデータのバイトに対応する。たとえば、Mask［０］はData［７：０］に対応し、Mask［１］はData［１５：８］に対応する、等である。したがって、データの最高８つのダブルワードまでが３２マスクビットに対応することができる。８つのダブルワードを越えるが、ただし、１６のダブルワード未満のデータ長（すなわち、キャッシュブロックサイズ）に対して、データが３２バイト以下の３２マスクビットを備えた、第２のサイズ決めされた書込要求パケットおよび別のデータパケット５０が転送され得る。すべてゼロのバイトマスクは許可されるが、任意のバイトマスクが非ゼロである場合、少なくとも１つのセットされたマスクビットは、データの第１のダブルワードと関連付けられなければならない。
【００４０】
図３Ａ〜５は８ビットリンクのためのパケットを例示する。１６および３２ビットリンクのためのパケットが、図３Ａ〜５に例示される、連続したビット時間を連結することにより形成され得る。たとえば、１６ビットリンクを介するパケットのビット時間１は、８ビットリンクを介するビット時間１および２の間に伝送される情報を含んでいてもよい。同様に、３２ビットリンクを介するパケットのビット時間１は、８ビットリンクを介するビット時間１から４の間に伝送される情報を含んでいてもよい。以下の数式１および２は、８ビットリンクに対するビット時間に関して、１６ビットリンクのビット時間１および３２ビットリンクのビット時間１の構成を例示する。
【００４１】
【数１】
0004660064.tif 000002
【００４２】
【数２】
0004660064.tif 000003
【００４３】
図６では、コンピュータシステム２０内の二重−単方向リンク構造の例示的な実施例のために用いられるコマンドを例示する表６０が示される。表６０は、各コマンドに割当てられたコマンドエンコード（ＣＭＤフィールド）を示すコマンドコード列、コマンドを表わすニーモニックを含むコマンド列、およびパケット３８〜５０（図３Ａ〜５）のうちどのパケットがそのコマンドに対して用いられるかを示すパケットタイプ列を含む。図６のコマンドのいくつかに対する簡潔な機能説明が以下に示される。
【００４４】
読出トランザクションを、Rd（サイズ決めされた）（Rd（sized））としても参照される）Read（Sized）、RdBlk（読出ブロック）、RdBlkS（共有された読出ブロック）またはRdBlkMod（読出ブロック修正）要求のうち、１つを用いて開始する。サイズ決めされた読出要求、Read（Sized）は、キャッシュ不可能な読出、またはサイズがキャッシュブロック以外であるデータの読出に対して用いられる。読出されるべきデータの量は、Read（Sized）要求パケットにエンコードされる。キャッシュブロックの読出のために、RdBlk要求を、以下の場合を除いて用いることができる。すなわち、（１）RdBlkMod要求を用いることができるときに、キャッシュブロックの書込可能なコピーが望まれる場合、または（２）キャッシュブロックのコピーが望まれるが、ブロックを修正するためのいずれの意図も既知でない場合。RdBlkS要求を用いて、ある種類のコヒーレンシ機構（たとえば、ディレクトリベースのコヒーレンシ機構）をより効率的にすることができる。RdBlkS要求に応答して、ターゲットノードが、キャッシュブロックを共有状態のソースノードに戻すことができる。一般的には、適切な読出要求は、読出トランザクションを開始するソースノードから、ソースノードにより要求されるキャッシュブロックに対応するメモリを所有するターゲットノードに伝送される。
【００４５】
チェンジトゥーダーティ（ChangeToDirty）要求パケットは、ソースノードによって伝送され、書込不可能かまたは読出専用状態にあるソースノードに記憶されるキャッシュブロックに対して、書込許可を得ることができる。チェンジトゥーダーティ要求で開始されたトランザクションは、ターゲットノードがデータを戻さないことを除いては、読出トランザクションと同様に動作することができる。ソースノードがキャッシュブロック全体を更新しようとする場合、ValidateBlk（有効ブロック）要求を用いて、ソースノードに記憶されないキャッシュブロックに対する書込許可を得ることができる。このようなトランザクションに対して、データのソースノードに対する転送はまったくないが、そうでない場合、読出トランザクションと同様に動作する。好ましくは、ValidateBlkおよびチェンジトゥーダーティ要求は、メモリに向けられるだけでよく、またコヒーレントノードによって生成されるだけでよい。
【００４６】
ロック
図７は、コンピュータシステム２０におけるロックトランザクション中のパケットの例示的な流れを示す。参照番号７２がロック要求ノードであり、参照番号７０が調停ノードであり、参照番号７４および７６が残りのプロセッシングノードである。任意のプロセッシングノード２２Ａ〜２２Ｄはロック要求ノードであり得ることが注目される。プロセッシングノードのうちたった１つのノードだけが調停ノードとして機能してもよい。ここで、ノード２２Ｄは例示のためだけに調停ノードとして選択される。システム設計者は、調停ノードとして他の任意のプロセッシングノードを、必要なハードウェアをそれに組込むことにより、選択してもよい。調停ノードでもロック要求ノードでもないノードはいずれも、残りのノードと称される。さらに、同じノードが、調停ノードおよびロック要求ノードの両方として機能することができる。このような場合では、外部パケットの多くは、調停ノードがロック要求ノードと同じであるので、不要である可能性がある。
【００４７】
上述のように、図２Ａの任意のプロセッシングノードは、特定のトランザクションに応じて、ロック要求ノード、調停ノードまたは残りのノードとして機能することができる。図７Ａに示される構成は、例示のためだけであって、プロセッシングノード２２Ａ〜２２Ｄの間の類似の実際の物理的な接続を暗に示すものではない。すなわち、残りのノード、たとえばノード７６、およびロック要求ノード７２は、調停ノード７０に直接物理的に接続されなくてもよい。したがって、追加のパケットルーティングがこれらの間で生じるかもしれない。さらに、図７Ａの構成が図２Ａの回路トポロジーに関連して説明される。２つ以上のプロセッシングノード間の他の相互接続を企図することができ、また図７Ａのパケット転送機構をそれらのさまざまな相互接続において容易に実現できることが理解される。矢印は、従属性を示すために用いられ、矢印によりつながれるそれぞれのノード間で送信される必要のあるパケットを表わす。
【００４８】
図７Ａでは、図２Ａのマルチプロセッシングシステム内における、ロック獲得およびロック解放動作のためのパケット７５の例示的な流れが示される。各プロセッシングノードは、図７Ａに例示される適切なパケットを生成するための組込みハードウェアを含む。上述のように、どのプロセッシングノードも、ロック要求ノードおよび残りのノードとして機能することができる。しかしながら、１つのプロセッシングノードのみがシステム内でロック要求を調停して、ロック要求に対して単一の逐次化点を与えることができる。この構成により、図２Ａの分散メモリアーキテクチャ内でのロック動作の適切な同期が可能となる。
【００４９】
ロックトランザクションには、ロック獲得、実際のロック動作の実行、およびロック解放の３つの役割がある。ロック獲得および解放は、専用のプロセッシングノード（すなわち、調停ノード）を介して逐次化される。図２Ａの実施例では、プロセッシングノード２２Ｄは、調停ノードとして機能するために適切な組込みハードウェアを含むものとみなされる。ロックが確立されると、ロック動作が通常行なわれるとおりに行なわれる。言い換えれば、ロックが確立されると、ロック要求ノードは、アトミックによりシステムリソースのいずれかにアクセスすることができる。ノード７２は、それがシステムリソースをロックする必要があると検出した場合、ロック要求メッセージを調停ノード７０に対して生成する。一実施例では、ロック要求メッセージは、予め定められた予約されたロック要求アドレス範囲にアドレスを有する、ゼロ長のWrite（sized）要求パケットであってもよい。他の実施例は他の種類のメッセージングフォーマットを用いて、ロック要求メッセージ（たとえば、専用のロック要求コマンドエンコード等を有する要求パケット）を伝送することができる。
【００５０】
システム２０内の各プロセッシングノードは、対応するロック要求を生成することができる。調停ノード７０は、そのロック要求の結果として生じるサービスを保証するために、発生順で各々の受信されたロック要求を待ち行列に入れることができる。ＦＩＦＯ（ファーストインファーストアウト）バッファが、待機中のロック要求を記憶するために調停ノードに設けられてもよい。ロック要求が待ち受けているとき、すなわちロック要求が（発生順の階層キューで）一番最初に受信された待機中のロック要求となるとき、調停ノード７０は、ロック要求ノード７２を含む、システム内の他のすべてのプロセッシングノードにブロードキャストパケット８２（図８Ｂ）を伝送する。これは図７Ａの「Broadcast Message（１）」と記された方向を有する矢印により示される。
【００５１】
ブロードキャストメッセージは、対応するロック要求をサービスに置くために、各々の受け手のプロセッシングノードに調停ノード７０による判断を伝える役割を果たす。ブロードキャストメッセージに応答して、（ロック要求ノード７２を省く）各々の受け手のプロセッシングノードは、新しい要求を出すことを止める。しかしながら、受け手のプロセッシングノードは要求を送り続け、プローブおよび応答を出し、フロー制御のためにパケットを生成することができる。調停プロセッシングノード７０はまた、ブロードキャストメッセージに応答して同様に動作する。さらに、残りのプロセッシングノード７４および７６の各々、ならびに調停ノード７０は、システム内の他のプロセッシングノードから到達する任意の待機中の要求または応答のために、十分な内部リソースを与える。この保護は、パケットをシステム２０内で経路指定することができるさまざまな方法からなる。たとえば、ソースプロセッシングノードから同一のターゲットプロセッシングノードへの２つのパケットで、ターゲットノードに到達するのに費やされる時間が異なることがある。
【００５２】
ノード７４および７６が上述のアクティビティを完了すると、対応するプローブ応答を、完了を示す調停ノード７０に送信する。ロック要求ノード７２もまた、メッセージングプロトコルの一部として、ブロードキャストメッセージに応答して、プローブ応答を調停ノード７０に送信する。このメッセージの伝送は、「ProbeResp（１）」と記される方向を有する矢印によって例示される。調停ノード７０は、すべてのProbeResp（１）応答を受信した後、ロック所有権をロック要求ノード７２に与える。好ましい実施例では、調停ノード７０はターゲット完了応答（図７ＡのTgtDone（１））をロック要求ノードに伝送し、ロック要求ノードにシステムリソースのその所有権について知らせ、これにより、いかなるデッドロックも起こすことなく、アトミックによりロック動作を完了することを可能にする。
【００５３】
上述のメッセージング機構では、調停ノードがブロードキャストメッセージを送信した後、しかしプロセッシングノードがその対応するターゲット完了応答を送信する前に、（ロック要求ノード以外の）プロセッシングノードがロック要求を伝送することが可能であり得る。すべてのこのような中間ロック要求を、上述のように、後のサービスのために調停ノードにより待ち行列に入れることができる。こうして調停ノード７０は、プロセッシングノード間のいかなるリソース競合またはデッドロックもなく、ロック要求調停を管理する。ロック所有権を与えるこのメッセージング機構は、マルチプロセッシングシステム２０の分散メモリ性質、およびプロセッシングノード間のバイナリパケットの不均一なルーティングを考慮に入れる。
【００５４】
ロック所有権を獲得すると、ロック要求ノード７２は、ノード７２にロックを確立させる動作を進める。一実施例では、ロックされたシーケンスが実行されると、ロック要求ノードはロック解放要求を調停ノードに伝送し、ロック動作の完了を調停ノードに伝える。ある代替の実施例では、ロック要求ノードは、ロック獲得プロセスの間、排他領域に対して適切なセマフォをセットし、次いでロック獲得プロセスの間ロックされていた１つまたは複数の共有システムリソース（たとえば、メモリ制御装置）を解放する。これにより、他のプロセッシングノードは、排他領域を含む処理以外のルーチン処理動作を続けることが可能となる。ロックされたシーケンスの実行の後、ロック要求ノードは、待機中のロック要求を調停ノードにより使用可能にするために、セマフォをリセットする。
【００５５】
一実施例では、ロック解放要求は、後に述べられる（ロック要求メッセージのための）Write（sized）パケット８０に類似の形式を有する。すなわち、ロック解放要求は、予め定められた予約されたロック解放アドレス範囲においてアドレスを有する、ゼロ長のWrite（sized）要求パケットであってもよい。他の実施例では、ロック解放要求は、他のメッセージフォーマット（たとえば、ロック解放要求などのために専用のコマンドエンコードを有するメッセージパケット）を介して実現され得る。調停ノードは、ブロードキャストメッセージ（図７ＡのBroadcast Message（２））を他のプロセッシングノード７２、７４および７６の各々にさらに伝送することにより、ロック解放要求に応答する。Broadcast Message（２）の（後に述べられる）ロックビットがリセットされ、ロック要求ノード７２により、ロック動作の完了を各々の受け手のプロセッシングノードに伝える。一実施例では、ロック獲得に関連して先に説明されたものと類似のメッセージング機構が、ロック解放の間実現される。言い換えれば、各々の受け手のプロセッシングノード７２、７４および７６は、対応するプローブ応答（図７ＡのProbeResp（２））を調停ノード７０に伝送することにより、Broadcast Message（２）に応答することができ、調停ノード７０は次に、すべてのProbeResp（２）応答を受信すると、最終のターゲット完了応答（図７ＡのTgtDone（２））を、ロック要求ノードにさらに送信することができる。このメッセージング機構は、ロック獲得およびその後に続くロックの解放に伴うパケット伝送のシーケンスを完了する。TgtDone（２）応答の伝送後、調停ノードはそのキューにある他の待機中のロック要求を処理し始めることができる。
【００５６】
図７Ｂでは、図７Ａに示されたメッセージング機構のための、簡略化されたフローチャート７８が示される。図７Ｂのフロー図におけるさまざまなブロックに関連するすべての動作が、図７Ａに関連して既に説明された。ロック解放動作は先の説明を考慮すると自明であるので、詳細には例示されない。
【００５７】
Write（sized）パケット８０の一実施例が図８Ａに示される。SrcNode［２：０］およびSrcUnit［１：０］フィールドが、要求の出所、すなわちロック要求ノード７２のノード番号および関連のユニット番号にセットされる。上述のように、システム２０内の各プロセッシングノードは独自の識別番号を有する。ノードの識別番号は、製作の際に各々のプロセッシングノード内に永久に記憶されてもよく、または起動時にシステムソフトウェアによって割当てられてもよい。各プロセッシングノードはまた、パケット生成および適切な宛先のルーティングを促進するために、システム内の残りの各プロセッシングノードに対するノード番号を含むマッピングテーブルを有してもよい。DestNode［２：０］およびDestUnit［１：０］フィールドは、Write（sized）パケットが経路指定されるべきプロセッシングノードおよびユニットのノードおよびユニット番号を伝送する。この場合、DestNodeおよびDestUnitフィールドは、調停ノード７０のノードおよびユニット番号を含む。ある例示的な実施例では、調停ノード７０はノードゼロ（すなわち、ノード識別番号「０」を有するプロセッシングノード）である。宛先ノードは、１つまたは複数の中間プロセッシングノードを介して経路指定され得るパケットの最終の受信器である。
【００５８】
さらに、パケットのソース（ここではロック要求ノード７２）は、ビット時間２の間に伝送されるソースタグ（SrcTag［４：０］）を割当てることができる。ソースタグは、ソースノードおよび関連するソースユニットにより開始される、ある特定のトランザクションに対応するパケットを識別する（すなわち、ある特定のトランザクションに対応する各パケットは同じソースタグを含む）。こうして、たとえば、SrcTagフィールドが５ビット長であるとき、ソースノードに関連する対応のソースユニットは、システム内で進行中の最大３２（２5）の異なったトランザクションを有することができる。システム内の他のノードからの応答は、応答におけるSrcNode、SrcUnitおよびSrcTagフィールドを介して、対応するトランザクションに関連付けられるだろう。
【００５９】
サイズ決めされた書込要求は、バイトまたはダブルワードでデータを転送することができる。サイズ決めされた書込要求のためのデータパケットは、図５のデータパケット５０に類似していてもよい。Write（sized）パケットは、データの開始ダブルワードアドレス（Addrフィールド）および転送されるべきデータ要素（バイトまたはダブルワード）の組を含んでいてもよい。ＣＭＤフィールド、すなわちＣＭＤ［２］におけるビット３は、転送されるべきデータ要素がバイトであるかまたはダブルワードであるかを示す。一実施例では、ＣＭＤ［２］ビットにおけるバイナリの値「１」がダブルワードの伝送を示すのに対して、ＣＭＤ［２］ビットにおけるバイナリの値「０」はバイトの伝送を示す。
【００６０】
Write（sized）パケット８０の別の特徴がMask/Countフィールドである。上述のように、ロック要求ノード７２からのWrite（sized）パケットは、ゼロ長のデータパケットを示す。したがって、キャッシュ不可能な書込動作においては、データのサイズはキャッシュブロックのサイズより小さくてもよい。この種類のサイズ決めされた書込動作は、Mask/Countフィールドの助けにより促進される。この例では、Mask/Countフィールドの長さは４ビットであると示される。Mask/Countフィールドは、書込要求の後に転送されるべきバイトまたはダブルワードデータ要素の数をエンコードする。バイト書込は、自然に整列したアドレス領域のハーフライン（たとえば、３２バイトアドレス領域）内でバイトの任意の組合せを転送することができる。整列した境界を横切るバイト転送は、アドレスの昇順で出される多数の要求に分割することができる。たとえば、第１のキャッシュラインの終わりにある１バイト、および第２のキャッシュラインの始めから２番目のバイトは、２つの別個のデータパケット５０を必要とすることがある。
【００６１】
上述のように、サイズ決めされた書込要求のためのデータパケット５０は、データパケット５０の第１のダブルワードにバイトイネーブル情報を含む。対応するWrite（sized）パケット８０におけるMask/Countフィールドを用いて、データパケット５０の（ダブルワードにおける）全体のサイズを示すことができる。このサイズはまた、マスクビットを含むダブルワードを含んでもよい。したがって、Mask/Countフィールドにより示されるダブルワードの範囲は、１（マスクビットの１ダブルワードおよびデータなし）から９（マスクビットの１ダブルワードに加えてデータの８ダブルワード）までである。これは、バイナリ００００が１ダブルワードを表わし、バイナリ１０００が９ダブルワードを表わす４ビット長のMask/Countフィールドにより適応される。Mask/Countフィールドは、マスクビットの値に関係なくデータパケット５０の長さを特定する。いくつかの場合では、マスクビットはデータパケット５０を介して送信される、対応するダブルワードに対してゼロであってもよい。しかしながら、マスクビットが非ゼロである場合、その対応するダブルワードを送信する必要がある。好ましい実施例では、ロック要求ノード７２からのWrite（sized）要求は、ゼロ値を伴う全体のマスクダブルワードを有する。このような事象では、システムは、Write（sized）要求８０と通常関連する、すべてのアクティビティを実行する。しかしながら、宛先ノード（すなわち、調停ノード７０）にはいかなるデータも書込まれない。
【００６２】
さらに、ロック要求ノード７２からのWrite（sized）パケット８０は、新しいロック要求を示すためにセットされるロックビット（Addr［２］）を含む。ロックビットはロック解放トランザクションを明確に示す。記載の中では、「セット」という用語はバイナリ「１」値を示すのに対して、「リセット」という用語はバイナリ「０」値を示す。しかしながら、反対の規則（すなわち、「セット」に対しては「０」、および「リセット」に対しては「１」）が同じ機能を実現するために選択されてもよい。ある例示的な実施例では、調停ノード７０は、Addrフィールドの内容に基づくロック要求として、Write（sized）パケットを認識するよう構成されてもよい。ＣＭＤフィールドは、依然としてパケット８０がWrite（sized）パケットであることを示してもよいが、Addrフィールドは独自にパケット８０をロック要求として識別し、メモリ書込動作としては識別しなくてもよい。ロック要求パケット８０のAddrフィールドは、データ記憶または検索に対していずれの物理的な記憶場所とも関連付けられなくてもよい。
【００６３】
図８はブロードキャストパケットの一実施例を例示し、図８Ｃはプローブ応答パケットを例示し、図８Ｄはターゲット完了パケットを例示する。これらのパケットのためのＣＭＤフィールドエンコードの一例が、図６に示される。まずブロードキャストパケット８２では、ブロードキャストメッセージを用いて、情報をシステム内のすべてのプロセッシングノードに通信する。SrcNode［２：０］およびSrcUnit［１：０］フィールドは、ロックリクエスタ、すなわちトランザクションのオリジネータのノードおよびユニット番号を伝送する。こうして、ロック要求ノードからの、ブロードキャストパケット８２およびWrite（sized）パケット８０における、SrcNodeおよびSrcUnitフィールドは、同じ情報を伝送する。一般的には、SrcNodeおよびSrcUnitフィールドは、ブロードキャスト要求をもたらした事象を開始したノードおよびユニットを識別する。
【００６４】
一実施例では、ブロードキャストメッセージは、システム内のすべてのプロセッシングノードに到達することができるように、ブロードキャストパケットを生成するノードを含む各々の受け手のプロセッシングノードによって、受取りも送信もされる。各々のプロセッシングノードは、ブロードキャストパケットとともに用いるためのルーティングテーブルを含み得る。ルーティングテーブルはシステム内の（TgtNode／TgtUnitフィールドによって示される）プロセッシングノードの各々に対して１つのエントリを有する。TgtNode／TgtUnitフィールドは対応するブロードキャストパケットのソースを識別する。ある例示的な実施例では、ルーティングテーブルにおける各エントリは８ビットベクトルである。８ビットベクトルでの各ビットは、現在のノードにおける最高８個までのインターフェイスポート２８（図２Ａ）のうちの１つを識別し、ブロードキャストパケットが、対応するインターフェイスポートを介して送られるか否かを示す。
【００６５】
ブロードキャストメッセージを用いて実現される特徴は、それらに関連する予約されたアドレス範囲を有する。この予約されたアドレス範囲および関連する特徴は、すべてのメッセージの受け手により認識される。こうして、ＣＭＤフィールドがすべての種類のブロードキャストメッセージに対して同じであるとしても、Addrフィールドは情報を伝えて、（１つの種類の動作を実行する）１つのブロードキャストパケットを、（異なる種類の動作を実行する）別のブロードキャストパケットと区別する。ブロードキャストメッセージに関連する予約されたアドレス範囲を、Addrフィールドにより識別することができる。ある例示的な実施例では、予約されたアドレスの半分が、ロック要求に応答して生成されたブロードキャストパケットに関連付けられてもよい。これらのブロードキャストパケットは、Addr［２］ビット（ロックビット）がセットされる状態で、Write（sized）パケット８０に対応するだろう。同様に、予約されたアドレスの半分が、ロック解放要求に応答して生成されたブロードキャストパケットに関連付けられてもよい。しかしながら、これらのブロードキャストパケットは、Addr［２］ビット（ロックビット）がリセットされた状態で、Write（sized）パケット８０（ロック解放要求パケット）に対応するだろう。
【００６６】
好ましい実施例では、ブロードキャストメッセージパケットは、応答が生成されるべきかどうかを示すResponseビット（ＣＭＤ［０］）を含む。応答を必要とするブロードキャストメッセージを生成するノードは、何個の応答が期待されるか知る必要がある。応答が要求された場合、それはブロードキャストパケットのTgtNodeおよびTgtUnitフィールドにより識別されるノードおよびユニット（たとえば、ブロードキャストメッセージを生成したノードおよびユニット）に向けられる。応答の種類は実現されている機能に特有のものである。こうして、たとえば、応答ノードはロック要求に関連するブロードキャストパケットに応答して、プローブ応答を返すことができる。
【００６７】
調停ノード７０は、ロック要求またはロック解放要求に応答して、適切なブロードキャストメッセージを生成するよう構成されてもよい。一実施例では、ブロードキャストパケット８２のSrcTagフィールドは、いずれの場合においても、ロック要求またはロック解放要求のための、Write（sized）パケット８０のそれと同一であり得る。ブロードキャストメッセージのTgtNode（ターゲットノード）フィールドは、調停ノード７０に対するノード識別データ（またはノード番号）を伝送する。ブロードキャストパケット８２からのこのTgtNodeフィールドは、プローブ応答パケット８４におけるDestNodeフィールドに配置されてもよい。
【００６８】
図８Ｃでは、プローブ応答パケット８４のブロック図が示される。SrcNode［２：０］およびSrcUnit［１：０］フィールドは、プローブ応答へと到る元のトランザクションのソース、すなわちロックリクエスタについてのノードおよびユニット番号を伝送する。DestNode［２：０］およびDestUnit［１：０］フィールドは、プローブ応答パケット８４のための宛先、すなわち調停ノード７０のノードおよびユニット番号を伝送する。一実施例では、DestNodeおよびDestUnitフィールドは、プローブ応答をもたらしたブロードキャストパケットのTgtNodeおよびTgtUnitフィールドと同一である。同様に、SrcTag［４：０］フィールドは、対応するブロードキャストメッセージパケットにおけるSrcTag［４：０］フィールドと同一であり、それは、ノード７２からの対応するロック要求またはロック解放要求におけるSrcTag［４：０］フィールドと同一である。こうして、SrcUnitおよびSrcTagフィールドは、さまざまなプロセッシングノード間で実行されているトランザクションの識別を維持する。プローブ応答のエラービットを用いて、たとえばプローブ応答を引起す１つまたは複数のトランザクションの処理の間に、ターゲットでのエラーを示す。エラービットがセットされ、このエラー状態を、プローブ応答のDestNodeおよびDestUnitフィールドに対応する宛先に対して示す。エラービットは通常、エラーがプローブ応答を送信する前に検出されるような状態に対してセットされる。後に発生するエラー状態を、プローブ応答パケットにおいてではなく他の方法によって報告してもよい。
【００６９】
図８Ｄでは、例示的なターゲット完了パケット８５が例示される。SrcNode［２：０］およびSrcUnit［１：０］フィールドは、元のトランザクションのソース、すなわちロックリクエスタ７２のノードおよびユニット番号を伝送する。DestNode［２：０］およびDestUnit［１：０］フィールドは、ターゲット完了パケット８５のための宛先、すなわちロックリクエスタ７２のノードおよびユニット番号を伝送する。一実施例では、SrcTag［４：０］フィールドは、対応するブロードキャストおよびプローブ応答パケットにおいてSrcTag［４：０］フィールドと同一であり、それは、ノード７２からの対応するロック要求、またはロック解放要求において、SrcTag［４：０］フィールドと同一である。こうして、SrcUnitおよびSrcTagフィールドは、さまざまなプロセッシングノードの中で実行されているトランザクションの識別を維持する。ターゲット完了パケットにおけるエラービットを用いて、エラーをターゲットで示すが、それが認識されるのは、ターゲット完了応答が送信される前である。
【００７０】
この明細書中に記載されるいずれのパケットも、異なったフォーマットおよびエンコードを用いて実行され得ることが注目される。このメッセージング機構はまた、図２Ａに示されるものとは異なったマルチプロセッシングシステム構成においても実現され得る。さらに、いずれのプロセッシングノードもロック要求ノードであり得る。しかしながら、１つのプロセッシングノードしか調停ノードとして機能することができない。
【００７１】
以上の記載は、分散メモリマルチプロセッシングコンピュータシステム内のロックトランザクションを実行するためのメッセージング機構を開示する。メッセージング機構により、マルチプロセッシングシステム内のプロセスの同期が可能となるが、システムの拡張性を制限することはない。プロセッシングノード間でのリソース競合またはデッドロックなしに、ロックを確立することができる。二重−単方向リンク相互接続アーキテクチャは、プロセッシングノード間で高速のパケット伝送を適用させることができ、またシステム内を往来する要求および応答パケットのエンドツーエンド肯定応答を可能にすることがある。
【００７２】
この発明はさまざまな変更および代替の形式が可能であるが、その特定の実施例は図面において例示のために示され、この明細書中に詳細に記載される。しかしながら、これに対する図面および詳細な記載は、この発明を開示の特定の形式に限定することを意図するものではなく、反対にこの発明が、添付の特許請求の範囲により規定されるこの発明の精神および範囲内にあるような修正、等価物および代替例すべてを包含するものであるということが理解されるべきである。
【図面の簡単な説明】
【図１Ａ】  先行技術のマルチプロセッシングコンピュータシステム構成を示す図である。
【図１Ｂ】  図１Ａのコンピュータシステム構成内のロック動作を実行するための先行技術の方法を示したフローチャートである。
【図２Ａ】  分散メモリマルチプロセッシングコンピュータシステムの実施例のブロック図である。
【図２Ｂ】  図２Ａの分散マルチプロセッシングコンピュータシステムの１対のプロセッシングノード間の、相互接続構造の例示的な実施例を示す図である。
【図３Ａ】  情報パケットの例示的な実施例のブロック図である。
【図３Ｂ】  要求パケットの例示的な実施例のブロック図である。
【図４Ａ】  応答パケットの例示的な実施例のブロック図である。
【図４Ｂ】  データパケットの例示的な実施例のブロック図である。
【図５】  サイズ決めされたバイト書込動作における、データパケットの例示的な実施例のブロック図である。
【図６】  図２Ａのコンピュータシステムで用いることができる例示的なパケットタイプを示す表である。
【図７Ａ】  図２Ａのコンピュータシステム内のロックトランザクション間の、パケットの例示的なフローを示す図である。
【図７Ｂ】  図７Ａの図のための例示的なフローチャートである。
【図８Ａ】  例示的な、サイズ決めされた書込要求パケットのブロック図である。
【図８Ｂ】  例示的なブロードキャストパケットのブロック図である。
【図８Ｃ】  例示的なプローブ応答パケットのブロック図である。
【図８Ｄ】  例示的なターゲット完了パケットのブロック図である。
【図１Ａ】
0004660064.tif 000004
【図１Ｂ】
0004660064.tif 000005
【図２Ａ】
0004660064.tif 000006
【図２Ｂ】
0004660064.tif 000007
【図３Ａ】
0004660064.tif 000008
【図３Ｂ】
0004660064.tif 000009
【図４Ａ】
0004660064.tif 000010
【図４Ｂ】
0004660064.tif 000011
【図５】
0004660064.tif 000012
【図６】
0004660064.tif 000013
【図７Ａ】
0004660064.tif 000014
【図７Ｂ】
0004660064.tif 000015
【図８Ａ】
0004660064.tif 000016
【図８Ｂ】
0004660064.tif 000017
【図８Ｃ】
0004660064.tif 000018
【図８Ｄ】
0004660064.tif 000019