(57)【特許請求の範囲】
【請求項１】
少なくともいくつかがそれぞれメモリを含んでいる、導体を介して接続されたノードと、
スヌープ要求をノード受信順序で受け取り、スヌープ要求が大域順序になる前にノード内のメモリのスヌープを開始する処理回路と、
スヌープ要求を受け取り、それらを順序付けバッファの出力において大域順序で提供する順序付けバッファと
を備えた分散化リング上の多重プロセッサ・コンピュータ・システム。
【請求項２】
少なくともそのうちのいくつかがメモリを含んでいるノードと、
新しいスヌープ要求が大域順序になる前に新しいスヌープ要求および他のスヌープ要求をノード受信順序で受け取り新しいスヌープ要求に対してノード内のメモリのスヌープを開始する処理回路と、
新しいスヌープ要求および他のスヌープ要求を受け取り、順序付けバッファの出力において新しいスヌープ要求を大域順序で提供する順序付けバッファと、
新しいスヌープ要求および他のスヌープ要求を順序付けバッファ内で位置付ける位置付け回路と
を備えた分散化リング上の多重プロセッサ・コンピュータ・システム。
【請求項３】
分散化リング上の多重プロセッサ・コンピュータ・システムにおいて実施される方法であって、
異なるノードによって異なるノード受信順序で受け取られたスヌープ要求のスヌープ結果を決定するための方法において、
スヌープ要求を異なるノード受信順序で異なるノードによって受け取るステップと、
スヌープ要求が大域順序になる前に各ノードのメモリのスヌープを開始するステップと、
各ノードの順序付けバッファ内でスヌープ要求を位置付けするステップと、そして
スヌープ要求が大域順序になるまで必要に応じて順序付けバッファ内でスヌープ要求を進めるステップと
を備えた方法。
【発明の詳細な説明】
【０００１】
関連する出願：本願および本願と同時に出願された「Ｐａｓｓｉｖｅ  Ｍｅｓｓａｇｅ  Ｏｒｄｅｒｉｎｇ  ｏｎ  ａ  Ｄｅｃｅｎｔｒａｌｉｚｅｄ  Ｒｉｎｇ」と題する米国特許出願第          号（整理番号４２３９０．Ｐ５４２６）は、基本的に共通の明細書を有するが、異なる主題を請求するものである。本出願および本願と同時に出願された「Ｄｅｃｅｎｔｒａｌｉｚｅｄ  Ｒｉｎｇ  Ａｒｂｉｔｒａｔｉｏｎ  Ｆｏｒ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ」と題する出願番号第          号（整理番号４２３９０．Ｐ５４２７）は重複する明細書を有するが、異なる主題を請求するものである。
【０００２】
（発明の背景）
発明の技術分野：本発明は、順序外れスヌーピングを可能にする分散化リング上の多重プロセッサ・コンピュータ・システムに関する。
【０００３】
背景技術：多重プロセッサ・コンピュータ・システムは、プロセッサ間およびチップセットとプロセッサの間（それぞれをノードと呼ぶ）で通信するバスを含んでいる。バス上での競合を回避するために、チップセット内にある中央アービタは、バス上のどのノードがメッセージをバス上で送信できるか判定する。バス上のメッセージはバス上を通って各ノードにブロードキャストされ、各ノードはメッセージを基本的に同時に受ける。したがってメッセージが送られる順序に関して混乱は起こらない。
【０００４】
各ノードがリング上の隣接するノードに結合されるリング・トポロジが開発されてきた。ポイント・ツー・ポイント・リング内で、各ノードは隣接するリング上のノードからリンク（導体）によって分離される。リングの利点はリング上の導体のドライバがシステムのすべてのノードではなく、特定のノードの受信器回路だけをロードすればいいという点である。したがって信号は状態をより迅速に変えることができる。
【０００５】
各ノードはメッセージを他の各ノードに送るが、メッセージは中央ポイントからすべてのノードに同時に送られるのではなく、ノードからノードへ順に送られる。したがってすべてのノードによって監視されるリンクは１つもない。普通ノードはメッセージが受け取られるまで、もう１つのノードがメッセージを送ったということを知らない。１つ以上のノードが同時にメッセージを送る場合、メッセージは異なるノードによって異なる順序で受け取られる。スヌープ要求のようなメッセージについては、この方式では誤った結果が生じる。
【０００６】
したがって各ノードが一貫してメッセージを順序付けるような、メッセージの順序付けのシステムが必要とされる。
【０００７】
（概要）
いくつかの実施態様では、コンピュータ・システムは導体を介して結合されたノードを含んでいる。ノードのうちの少なくともいくつかはそれぞれスヌープ要求をノード受信順序で受け取り、ノード内のメモリのスヌープをスヌープ要求が大域順序になる前に初期化するメモリおよび処理回路を含んでいる。少なくともいくつかのノードはそれぞれ、スヌープ要求を受けるための順序付けバッファを含んでおり、順序付けバッファの出力において要求を大域順序で提供する。
【０００８】
本発明は、本発明の実施形態についての下記の詳細な説明および添付の図面からより完全に理解できよう。ただしそれらは本発明を記載の特定の実施形態に限定するものと解するべきではなく、説明と理解のためのものである。
【０００９】
（好ましい実施形態の詳細な説明）
１．概要
図１を参照する。例示的コンピュータ・システム１０がノードＮ０、Ｎ１、Ｎ２、Ｎ３を含んでいる。ノードは共有バスではなくポイント・ツー・ポイント・リング・トポロジを介して相互に通信する。信号は導体２６を介してノードＮ０とＮ１の間を、導体２４を介してノードＮ１とＮ２の間を、導体２６を介してノードＮ２とＮ３の間を、導体２８を介してノードＮ３とＮ４の間を送られる。導体２２〜２８はそれぞれ多数の並列導体を含んでもよい。導体２２のうち異なるいくつかは異なる目的に使用され、導体２４のうち異なるいくつかは異なる目的に使用され、導体２６のうち異なるいくつかは異なる目的に使用され、導体２８のうち異なるいくつかは異なる目的に使用される。例えば、下記の仮想スロットは導体２２〜２８のいくつかの導体だけを通って送信してもよい。スヌープ応答はスヌープ要求とは異なる導体で送られることもある。いくつかの実施形態では、データ信号のような特定の信号は導体２２〜２８には含まれない導体を通って送られる。図１は、信号が時計周りの方向にだけ伝わる単方向の例を図示する。例ではノードは大域クロックを共有せずソース同期式の送信を使用する。
【００１０】
図３はノードＮ２の例示的実施形態を図示する。ノードＮ２はプロセッサ３０およびキャッシュ３４（プロセッサ３０と同じダイ上にあってもよい）を含んでいる。ノードＮ２は、メモリおよび／または周辺装置への１つ以上のプロセッサおよび／またはチップセットを含んでいることもある。プロセッサ３０はネットワーク・インターフェース回路とインターフェースされ、いくつかの実施形態ではネットワーク・インターフェースが受信回路４２、制御回路４０、送信回路４８を含んでいる。キャッシュ３４は図示したように後方のバスを介してプロセッサ３０に、かつ制御回路４０に直接アクセスすることができ、また一方だけまたは他方を通ってもよい。主記憶装置４６は任意選択で、他のノードと共有した主記憶装置の一部であってもよい。主記憶装置４６はプロセッサおよび／または制御回路４０によって直接アクセスすることができる。図３は制御回路４０によって分離されている受信回路４２および送信回路４８を図示するが、信号は受信回路から送信回路へ迅速に送ることができ、いくつかの実施形態では同一の回路を両方に対して使用することもできる。ノードＮ２は、図３には図示していない構成要素を含んでもよい。ノードは１つ以上のリングの一部であってもよい。ここで述べた制御回路４０の機能はプロセッサ３０によって実行することもできる。ノードＮ０、Ｎ１、Ｎ３は、Ｎ２と同じでも異なっていてもよい。単なる例として、導体２２〜２８はそれぞれおよそ数センチメートルまたはそれ以下の長さであってもよい。もう１つの例としてシステム１０は、導体２２〜２８が例えば数メートルの長さである分散型ネットワークであってもよい。
【００１１】
ノードＮ０内のプロセッサが、ノードＮ１、Ｎ２、Ｎ３に関連するキャッシュまたは他のメモリが特定のキャッシュ・ラインを有するかどうかを判定しようとする以下の例を考えてみたい。ノードＮ１がキャッシュ・ラインを有するかどうかを要求する要求メッセージ（パケットの形をとることもある）が導体２２を介してノードＮ１に送られる。キャッシュ・ラインを持つかどうかをノードＮ１が決定する前に、メッセージは導体２４を介してノードＮ２に送られ、ノードＮ２がキャッシュ・ラインを持つかどうか要求する。それがキャッシュ・ラインを持つかどうかをノードＮ２が決定する前に、メッセージは導体２６を介してノードＮ３に送られ、ノードＮ３がキャッシュ・ラインを持つかどうかを要求する。メッセージは導体２８を介してノードＮ０に送り返される。例ではメッセージはノードＮ０〜Ｎ４によって送信されているが、もとはノードＮ０だけによって送信された。
【００１２】
システム１０は分散化されていて中央アービトレータがない。いくつかの実施形態では、システム１０は集中型のバスをベースとしたシステムを模倣し、従来のプロトコル（キャッシュ・コヒーレンスなど）をほとんどまたはまったく変更せずに使用できるようにする。すべてではないが多くのバス・ベース型のシステムでは、ただ１つのエージェントが一度にデータをバス上に挿入し、すべてのエージェントはバス上のメッセージを同一の順序で同時に見る。リング・ベース型のシステムでは、エージェントはこのようなパケットを異なった順序で受ける。本発明のいくつかの実施形態は、ノードが一貫してメッセージを大域順序で順序付けできる仮想スロット抽象化を使用した、受動的なメッセージの順序付けを含んでいる。
【００１３】
２．仮想スロット
いくつかの実施形態では、仮想スロットはリングの一部で送られる最大のパケットまたは他の形のメッセージを運ぶのに十分なリングの帯域幅の装置である。このようなパケットが、メッセージを送るために使用可能なリングの導体の数より大きい場合は、エージェントがパケットを送るのに１クロック周期以上がかかるこであろう。仮想スロットの長さは、リングの関連する導体で使用される周期の最大の数である。
【００１４】
以下は４つのノードを有するシステム１０の例である。無論、本発明は、これより多くのまたは少ない数のノードおよび異なる詳細部分をもって実施することもできる。一対のノード間遅延の合計（フライト時間とノード遅延を足したもの）が９クロック周期だと仮定する。したがって、１つのフリット（ｆｌｉｔ）（フル・メッセージ・パケットではない）がリングを一周するのに３６クロック周期がかかる。ある意味では、リングは３６個の別々のフリットを保持できると言える。さらに、ノードがメッセージ・パケットを送るのに５クロック周期かかるとする。したがってリング全体は［３６／５］＝７つまでのメッセージをいつでも保持することができる。リングを回っている３６個のフリットは、７つの仮想スロットおよび１つの不使用のフリットを構成していると考えられる。例ではリングの容量は７仮想スロットである。
【００１５】
７つの仮想スロット（Ｓ０、Ｓ１、Ｓ２、Ｓ３、Ｓ４、Ｓ５、Ｓ６）は図１および図２に示したように視覚化することができる。使用されない１つのサイクルまたはフリットは図１に示してあるが、図２には示していない。図１はメッセージ・スロットの実際の配置を図示し、図２はメッセージ・スロットの仮想の配置を図示する。
【００１６】
リング内の仮想スロットの数を計算するのに使用される多様なタイミングをノードは正確には知ることができない。しかしノードはメッセージを送るのにかかるクロックの数ｃは知ることができる（上記の例の場合ｃ＝５）。これを使用してノードはリング内の仮想スロットの数を計算することができる。例として以下の手順を考えてみたい。システムの起動時に、識別されたノード（例えばＮ０）がフリットを送り始め、次いでノードがそれをリング内に循環させる。各フリットには増加するシーケンス番号でタグが付けられる。０とラベルされたフリットがそこに戻ってきたときにノードがｐフリットを送ったとする。リングがｐフリットを含んでいることができ、その時仮想スロットの数がｓ＝［ｐ／ｃ］になることをノードは知っている。これは他のノードに伝達することができる。
【００１７】
いくつかの実施形態では、仮想スロットの数が決定されると識別されたノードが各仮想スロットの第１の（ヘッダ）メッセージに印を付ける。ノードは、仮想スロットのヘッダである空いたメッセージだけにパケットを挿入し始める。識別されたノードは各仮想スロットの第１のフリットにスロットＩＤを付けてそれを識別することができる。次いでノードは、そのメッセージ用にどのフリットを使用できるかを判定するために、これらのスロットＩＤを持つフリットを検索することができる。ノードは、仮想スロットの始まりである空いたフリットだけにメッセージの第１のフリットを入れる。
【００１８】
リング内の仮想スロットの数は時間とともに変化することがある（例えば温度条件の変化などで）。システムは、使用可能な数より少ない仮想スロットを使用する（増加を考慮に入れて）ようにも、または周期的にそれ自体で変更してスロットを加えるかまたは放棄するように設計することもできる。
【００１９】
３．受動的メッセージ順序付け
いくつかの実施形態ではメッセージの順序付けは受動的で、メッセージを送るのに必要とされている通信の他には通信を必要としない。ノードの受信順序は、メッセージがノードによって実際に受け取られる順序である（順序は通常各ノードによって異なる）。仮想時間は、仮想スロットがリング内を動くのに従って増加する。仮想時間順序は仮想時間に従ったメッセージの順序である。もとは同じ仮想時間で送信された各メッセージは、同一レベルの仮想時間順序にある。大域順序とは、大域順序付けを受けている各ノードが一致するメッセージ順序である。リング内に、大域順序が何であるかを知らない１つまたは複数のノードがあることもある。例えばノードは、大域順序が関連せず大域順序を把握しない出入力ノードであってもよい。
【００２０】
メッセージは順序付けバッファ６２から大域順序で引き出される。順序付けバッファ６２の底位置にあるメッセージは大域順序になっている。なぜなら大域順序ではそれより早い位置にメッセージを挿入することはできないからである。順序付けバッファ６２内の１つ以上のメッセージが同時に大域順序であってもよい。送信ノードおよび送信ノードと受信ノード間の仮想スロットの数に応じて、すでに大域順序にある位置、またはさらにメッセージが受信され次第大域順序になる位置にメッセージが挿入される。２つまたはそれ以上のメッセージが同一の仮想時間順序レベルにある場合、タイブレーク技術が使用されどのメッセージが順序付けバッファ６２のより早い位置に挿入されるのかを決定する。共有バスが提供する順序と必ずしも正確に同じ順序ではないがそれに類似した順序を提供するため、大域順序はバス順序と呼ばれることがある。例えばメッセージ２がノード２から送られる前に、メッセージ１がノード１から送られると仮定する。大域順序では、メッセージ１はリングおよび仮想スロットの詳細に応じてメッセージ２の前または後に置かれる。
【００２１】
大域順序には以下の３つの特性がある。（特性（１）、（２）、（３）とする）
（１）大域順序でメッセージｍ１がメッセージｍ２より先にあるのをノードＡが見た場合、大域順序付けを受けているすべてのノードは大域順序でｍ１がｍ２より先にあるのを見る。
（２）ノードがまずメッセージｍ１を送信し次いでメッセージｍ２を送る場合、大域順序付けを受けているすべてのノードはｍ１がｍ２より先にあるのを見る。
（３）ノードがメッセージｍ１をノード受信順序で受け取り、後にメッセージｍ２を送った場合、大域順序付けを受けているすべてのノードは大域順序でｍ１がｍ２より先にあるのを見る。
【００２２】
大域順序が必ずしもメッセージが送られる正確な時間順序に従わないことは、特性（１）、（２）、（３）が与えられる限り一般に重要ではない。
【００２３】
特性（１）、（２）、（３）に加え、以下２つの追加の特性（特性（４）、（５）とする）が受動的メッセージ順序付けのある種の応用例において有用である。
（４）ノードがメッセージｍをノード受信順序で受けるとき、ノードはすでに受信されているメッセージに相対的なｍの大域順序付けを知る。
（５）ノードにおけるメッセージの受信は、それより先に受信されたメッセージの相対的大域順序を変更しない。
【００２４】
受動的メッセージ順序がさまざまな目的およびシステム用のメッセージの順序付けで使用できることは強調されるべきである。例えば受動的メッセージ順序付けを使用して、リング上のスヌープ要求の順序付けをすることができる。他の例では受動的メッセージ順序付けをコンピュータの分散型ネットワークで使用して、分散型データベース内のメッセージの一貫した順序付けを行うこともできる。
【００２５】
キャッシュ・コヒーレンス・プロトコルなどある種のプロトコルの要素は、すべてのノードがすべてのトランザクションを同一の順序で見るというものである。受動的要求順序付けが提供する大域順序付けを用いると、すべてのノードはすべてのトランザクションを同一の順序で見る。
【００２６】
ａ．仮想スロット抽象化
仮想スロット抽象化は、メッセージ送信の「仮想時間」を決定するのに使用できる。メッセージは順序付けバッファ内でこの仮想時間に従って順序付けされることができる。
【００２７】
ｉ．スロットが均等に分割するとき
ｓ個の仮想スロットがリング内にあり、各スロットがｃ個のフリットを備えるとする。ノードの数（ｎ）が均等に分割する場合、ｓ／ｎ個のスロットが（またはｓｃ／ｎ個のフリットが）各リンク上にあり、その時ｓ／ｎおよびｓｃ／ｎは整数である。これはフリットが１つのノードからもう一方のノードに送られるのにｓｃ／ｎサイクルを要することを意味する。ノードはこの情報を使用してメッセージがいつ送信されたのかを判定することができる。ノードは隣接するアップストリームのノードからメッセージの第１のフリットを受けると、そのメッセージがｕ  ｓｃ／ｎサイクル前に送信されたことを知る。ここでのｕはアップストリームのノードの数である。もしすべてが完全に同期されれば、ノードはメッセージの送信時間について正確に一致する。しかしシステムは完全には同期できないので、ノードはクロック・サイクルではなく、リング上の到着する仮想スロットに基づいてその計算を行う。ノードは仮想スロットの抽象化の構造について一致しているので、ノードは実質的に同期される。
【００２８】
ノードはフリット（すなわち「仮想サイクル」）を数える必要はない。仮想スロットはリングを回っているので（仮想スロットの第１のフリットは識別可能でありうる）、仮想スロットを数えることで十分である。メッセージがノードに到着すると、ノードはそれがｕ  ｓ／ｎスロット前に送信されたことを判定する。ノードはメッセージが０スロット前に送信されたことを知り、ノード自体のメッセージをその送信時間に認識することもある。
【００２９】
ノードは仮想スロット装置内のメッセージの「年齢」または仮想時間を把握することもできる。メッセージがアップストリームのノードｕリンクから受け取られると、受信側はそれがｕｓ／ｎスロットの経過時間であることを認識し、順序付けバッファ内でそれに適切なタグ付けをする。各仮想スロットが受け取られると、メッセージはそれぞれ１スロット古くなる。その経過時間を数として特別にノード内のどこかに記憶する必要はない。その代わりノードは年齢が増すのに従って状態が前進する回路を含んでいる。
【００３０】
ｎ−１リンク以上アップストリームのノードはないので、いくつかの実施形態ではｕ＜ｎしたがってすべての可能なｕについてｕｓ／ｎ＜ｓになる。ノードが受ける一番古いメッセージは、ａ−１スロットの経過時間になるはずである。したがってメッセージがｓ−１の経過時間になると、ノードはその後に到着するメッセージはいずれも仮想時間において後に送信されたものであろうことを認識する。したがって順序付けバッファ内でのメッセージの順序付けは、経過時間がｓ−１になったときに完了することができる。
【００３１】
ｉｉ．スロットが均等に分割しないとき
例えば図２のような４つのノードを有し７つの仮想スロットを持つ（ｎ＝４およびｓ＝７）リングを考えてみる。この場合リング内のリンク間の仮想スロットを分割すれば十分である。ノードは例えば初期化時に、どのリンクにいくつの仮想スロットがあるかを決定することができる。図２の場合次のように決定される。
・ノード０からノード１のリンクが２つの仮想スロットを持つ。
・ノード１からノード２のリンクが２つの仮想スロットを持つ。
・ノード２からノード３のリンクが２つの仮想スロットを持つ。
・ノード３からノード０のリンクが１つの仮想スロットを持つ。
【００３２】
図５はこの決定によるノード間のリンクにおける仮想スロットの配置を図示する。スロットが均等に分割しないときスロット機能は表１のように定義される。
0004414096.tif 000002
【００３３】
スロット機能は受け取ったメッセージの「年齢」を判定するために使用することもできる。特に、遅延（ｉ，ｊ）はノードｉがノードｊから受け取ったメッセージの「年齢」（スロットの遅延に基づく）であるというように、機能「遅延」を誘導することができる。遅延（i,j)=slots(j)+slots(next(j))+...+slots(prev(i))で、このときprev(i)=n+i-1 mod n if i≠jで、遅延（ｉ，ｉ）＝０と計算される。図５について、表２は遅延機能（（スロット単位での）メッセージ遅延の計算）を提供する。
0004414096.tif 000003
表２は例えば、ノード２がノード０から受け取ったメッセージは４スロット前に送信されたことを示している。
【００３４】
特定のノードが大域順序付けを受けていない場合、それでも仮想スロット抽象および関連する遅延機能は機能するが、それに応じて変更されることもある。例えばノードＮ１が順序付けを受けていない場合、それでも表２に示すようにメッセージがノードＮ０からＮ２に伝わるのに４仮想スロットを要する。
【００３５】
いくつかの実施形態では、メッセージがｍスロットの経過時間であるときに（ｍが遅延機能におけるスロットの最大数であるとき（例えばｍ＝６）であるとき）、同一の仮想時間に送信された要求のメッセージはいずれも受け取られている。この時点で順序付けを完了することができる。
【００３６】
図４は、図３のノードＮ２の制御回路４０の例示的実施形態に含まれるある種の回路を図示する。図３および図４を参照すると、位置付け回路６０は、導体７０上で受信回路４２によって受信されたメッセージ、または導体７６上でプロセッサ３０から受信されたメッセージを順序付けバッファ６２内の適切な位置に提供する。処理回路６６はメッセージをプロセッサ３９に提供するなど多様な機能を実行することもできる。いくつかの実施形態では、処理回路６６はキャッシュ３４などのメモリのスヌープを開始する。順序付けバッファ６２はリング上の各スロット用の位置を含んでいる。位置は大域順序で配置され、最も上にあるものが大域順序では最後になり、底にあるものが大域順序では一番先になる。メッセージが初めに送信された仮想時間によって、１つ以上の位置が同一の仮想時間内にあることがある。位置付け回路６０は、その仮想時間に基づいてメッセージを適当な初期位置に置く。次いで新たなメッセージが受け取られると、以前に置かれたメッセージは古くなり順序付けバッファ６２の底部に向かって移動する。（いくつかの実施形態では、メッセージは順序付けバッファ６２の底部に向かって物理的に位置を変えるのではなく、ビットの変化を受けて古くなることもある。）いくつかの実施形態では、特定のメッセージがともにリンクされていることが望ましい。例えば、同一のアドレスに対する特定のスヌープ要求はポインタを介してリンクしてよい。いくつかの実施形態では、位置付け回路６０はこうしたポインタを提供する。また任意選択の調整回路６４を使用してデータを位置間で移動および／または変更することもできる。メッセージは位置付け回路６０が受け取ったメッセージと比較して調整することもできるが、底位置にあるメッセージは大域順序になっており、これについては各ノードが一致している。メッセージは導体７２を介して送信回路４８に、または導体７６を介してプロセッサ３０に、または他の回路に提供される。いくつかの実施形態では、順序付けバッファ６２の底位置だけが出て行くメッセージを保持することができる。他の実施形態では、どの位置でも出て行くメッセージを保持することもある。導体７２と順序付けバッファ６２との結合は、出て行くメッセージを保持するいずれの位置に対してバッファ６２を順序付ける順序の出力を表す。混乱を避けるため、および詳細は実施態様に特有であるため、すべての制御回路（例えばインターフェース回路）および図３および図４に関連する導体は図示していない。メッセージは、順序付けバッファ６２において、処理回路６６によって受信されたときとは異なる形態をとりうることに注意されたい。
【００３７】
ｂ．「スカイライン・ダイアグラム」による視覚化
ノード２のための順序付けバッファ６２のような順序付けバッファの動作は、「スカイライン・ダイアグラム」によって視覚化することができる。図６は、それぞれノード０、１、２、３に関する例示的スカイライン・ダイヤグラム１０２、１０４、１０６、１０８を図示する。したがってスカイライン・ダイヤグラム１０６はノード２内での順序付けバッファ６２の動作を図示している。スカイライン・ダイヤグラムはｓ個以上の位置（ｓはスロットの数）を示しているが、ｓ個の位置だけを同時にふさぐことができる。位置付け回路（例えば図４の）は、図６に図示するものに類似のデマルチプレクサ（ＤＥＭＵＸ）を含んでおり、それがメッセージおよび送信ノードＩＤ番号をスロットまたはノード内のプロセッサから受ける。スカイライン・ダイヤグラムのカラムは異なるノードからのメッセージに対応する。デマルチプレクサは、メッセージを送信ノードＩＤに対応するカラムに割り当てる。すなわち、カラム０はノードＮ０が送ったメッセージを保持し、カラム１はノードＮ１が送ったメッセージを保持する等である。カラムの高さは異なり、仮想スロットｓから上記で定義された遅延機能を引いた数になる。例えばノード１について図中のカラム３の高さは、ｓ−遅延（１，３）＝７−３＝４になる。説明を簡潔にするために、７つの仮想スロットを持つリングの場合、カラムのセクションをレベル１、レベル２、レベル３、レベル４、レベル５、レベル６と呼ぶが、全カラムが各レベルを持つわけではない。同一の仮想時間に送信されたメッセージは異なるノードによって異なる仮想時間に受け取られるが、同一のレベルに位置付けされる。
【００３８】
メッセージは受け取られると、そのメッセージを送ったノードに対応するカラムの最上部に置かれる。後続のスロットが受け取られると全メッセージは古くなり１レベル下がる。底に到達したときメッセージはｓ−１スロットの経過時間（この例では６スロットの経過時間）であり、同一のスロット年齢のどのメッセージが優先順位を得るのかを決定することにより、大域順序付けを完了することができる。ノードが例えばナンバ・カウンタを介して仮想時間を把握する必要はないことに注意されたい。むしろ回路は単にメッセージを順序付けバッファ内の適切な位置に配置し、１レベル移動させることによって他のメッセージを古くする。さらに順序付けバッファ６２はスカイライン・バッファのすべての構成要素を備える必要はない。例えば、スカイライン・バッファにはスロットの数より多い位置がある。順序付けバッファ６２には各スロットに対して１つの位置がある。しかし本発明の実施形態は、順序付けバッファ６２とは異なる順序付けバッファをもって実施してもよい。
【００３９】
ｉ．例：４スロットが同一の仮想時間に送られる場合
図６、７、８、９は図２のリングについての例を図示する。各ノードは仮想スロット内のメッセージの送信を同一の仮想時間（ＶＴ０）に開始する。仮想スロットはリングに沿って移動し、順番に４つのメッセージを搬送する。ノード受信順序は各ノードによって異なる。それでも４つのすべてのノードは４つのメッセージが同一の仮想時間に送信されたことを正確に判定する。
【００４０】
仮想時間ＶＴ０に、ノードＮ０がスロットＳ０内のメッセージを初めに送信し、ノードＮ１がスロットＳ２内のメッセージを初めに送信し、ノードＮ２がスロットＳ４内のメッセージを初めに送信し、ノードＮ３がスロットＳ６内のメッセージを初めに送る。しかしそのことは瞬時には各ノードには知られない。むしろ異なる時間に異なるスロットが異なるノードの順序付けバッファに送られる。仮想時間ＶＴ０に、スロットＳ０、Ｓ２、Ｓ４、Ｓ６はそれぞれノードＮ０、Ｎ１、Ｎ２、Ｎ３の順序付けバッファに提供される。図６でスロットＳ０、Ｓ２、Ｓ４、Ｓ６のメッセージはそれぞれ、スカイライン・ダイヤグラム１０２、１０４、１０６、１０８のカラム０、１、２、３のレベル０において受け取られる。図６〜１０で、記号「Ｓ０」「Ｓ２」「Ｓ４」「Ｓ６」がスロットＳ０、Ｓ２、Ｓ４、Ｓ６内に搬送されたメッセージを表すことに注意されたい。無論、スロット自体は順序付けバッファ内にはない。
【００４１】
仮想時間ＶＴ１に、スロットはそれぞれリング上で１レベル先に進む。すなわちスロット０はＶＴ０時にスロット１があった位置に進み、スロット１はＶＴ０時にスロット２があった位置に進み、以下このようにしてスロット６はＶＴ０時にスロット０があった位置へと進む。スロットがノードに入ると、スカイライン・ダイヤグラム内のメッセージが古くなり次のレベルへ移動する。したがって図７に示すように、スロットＳ０、Ｓ２、Ｓ４、Ｓ６のメッセージはそれぞれスカイライン・ダイアグラムのカラム０、１、２、３のレベル１へ進む。また仮想時間ＶＴ１に、ノード３のスロットＳ６のメッセージはノードＮ０の順序付けバッファによって受け取られる。スロットＳ６のメッセージはスカイライン・ダイヤグラム１０２のカラム３のレベル１に置かれる。カラム３はカラム０より短いため、スロットＳ０およびＳ６のメッセージは仮想時間ＶＴ１においてスカイライン・ダイヤグラム１０２で同一レベルにある。メッセージはもともと同一の仮想時間に送信されたのでこれで意味をなす。
【００４２】
リング内でのスロットの各前進にともない、異なるノードから発したが同一の仮想時間に送信されたスロットを異なるノードが受ける。先に受け取られたメッセージは、スロットがリングを移動するのに従ってスカイライン・ダイヤグラムに沿って進められる。下記はどのノードがどのスロットをどのノードから受け取り、そのスロットがどこに置かれるかを要約する。
仮想時間ＶＴ０において：
Ｎ０はＳ０をＮ０から受ける（メッセージはカラム０の最上に置かれる）
Ｎ１はＳ２をＮ１から受ける（メッセージはカラム１の最上に置かれる）
Ｎ２はＳ４をＮ２から受ける（メッセージはカラム２の最上に置かれる）
Ｎ３はＳ６をＮ３から受ける（メッセージはカラム３の最上に置かれる）
仮想時間ＶＴ１において：
Ｎ０はＳ６をＮ３から受ける（メッセージはカラム３の最上に置かれる）
仮想時間ＶＴ２において：
Ｎ１はＳ０をＮ０から受ける（メッセージはカラム０の最上に置かれる）
Ｎ２はＳ２をＮ１から受ける（メッセージはカラム１の最上に置かれる）
Ｎ３はＳ４をＮ２から受ける（メッセージはカラム２の最上に置かれる）
仮想時間ＶＴ３において：
Ｎ０はＳ４をＮ２から受ける（メッセージはカラム２の最上に置かれる）
Ｎ１はＳ６をＮ３から受ける（メッセージはカラム３の最上に置かれる）
仮想時間ＶＴ４において：
Ｎ２はＳ０をＮ０から受ける（メッセージはカラム０の最上に置かれる）
Ｎ３はＳ２をＮ１から受ける（メッセージはカラム１の最上に置かれる）
仮想時間ＶＴ５において：
Ｎ０はＳ２をＮ１から受ける（メッセージはカラム１の最上に置かれる）
Ｎ１はＳ４をＮ２から受ける（メッセージはカラム２の最上に置かれる）
Ｎ２はＳ６をＮ３から受ける（メッセージはカラム３の最上に置かれる）
仮想時間ＶＴ６において：
Ｎ３はＳ０をＮ０から受ける（メッセージはカラム０の最上に置かれる）
【００４３】
図８は仮想時間ＶＴ４におけるスカイライン・ダイヤグラム１０２〜１０８内のメッセージを図示する。
【００４４】
図９は仮想時間ＶＴ６におけるスカイライン・ダイヤグラム１０２〜１０８内のメッセージを図示する。各スカイライン・ダイヤグラムは、４メッセージの同一の組合せを持ち、そのメッセージは同一の仮想時間に送信されたためにこれで意味をなす。各ノードは同じ方式を使用して、同一の仮想時間にメッセージ間で優先順位を決定する。例えばより低いノードＩＤに関連付けられたメッセージはより高いノードＩＤに関連付けられたメッセージに対して優先順位を得る。
【００４５】
仮想時間ＶＴ６になるまで、メッセージのすべてが受け取られるわけではなく、メッセージの大域順序も知られない。例えばカラム０内のメッセージが優先順位を得るとすると、ノード３のカラム０内でメッセージが受け取られるのか、またその場合メッセージの内容が何なのかということは通常ＶＴ６になるまで知られない。ある種の技術を使用してノードの動作をスピードアップしてもよい。例えばカラム０が最も高い優先順位を持ちカラム３が最も低い優先順位を持つとすると、ノード２の場合、Ｓ０、Ｓ２、Ｓ４のメッセージが最初の３つの優先順位であることがＶＴ４（レベル４）において知られる。Ｓ０、Ｓ２、Ｓ４のメッセージへの応答がＳ６のメッセージの内容に依存しないと仮定すると、ノードＮ３はＶＴ６より前にＳ０、Ｓ２、Ｓ４のメッセージに対して作用し始めることができる。最優先メッセージは各ノードに対してＶＴ５において知うることができる。実際、ノード３のカラム０のメッセージ以外の全メッセージはその時までに知られる。その場合ノードＮ０、Ｎ１、Ｎ２、Ｎ３はＶＴ６より前に最優先メッセージに対して作用し始めることができる。しかし各メッセージがスカイライン・ダイアグラムのレベル６において受け取られるまで、メッセージへの対応が行われないようにノードを実施することもできる。あるスカイライン・ダイアグラムは、１つだけの位置を有する１つ以上のカラムを持つこともでき、その場合各メッセージがレベル６に達する前に大域順序が知られる例は少なくなる。
【００４６】
ｉｉ．例：スロットが異なる仮想時間に送られる場合
図を簡潔にするために、図６〜９はもともと同一の仮想時間に送信されたメッセージの過程だけを図示する。もともと異なる仮想時間に送信されたスロット内のメッセージは、異なるレベルに位置付けされる。例えば仮想時間ＶＴ０にノードＮ０およびＮ１がスロットＳ０およびＳ２内のメッセージをそれぞれ初めに送信し、仮想時間ＶＴ１にノードＮ０およびＮ１がスロットＳ６およびＳ１内のメッセージをそれぞれ初めに送るが、その他にはメッセージを送信しないと仮定する。仮想時間ＶＴ０およびＶＴ１に、ノードＮ０およびＮ１の順序付けバッファはこれらのノードが初めに送ったメッセージを受ける。スロットＳ０、Ｓ１、Ｓ２、Ｓ６のメッセージは、スカイライン・ダイアグラム１０２および１０４内で仮想時間の各進行とともに古くなる。仮想時間ＶＴ２に、スカイライン・ダイアグラム１０４のカラム０はスロットＳ０のメッセージを受け取り、スカイライン・ダイアグラム１０６のカラム１はスロットＳ２のメッセージを受ける。図１０はＶＴ２時のスカイライン・ダイアグラムを図示する。図を簡潔にするために他のメッセージはいずれも示していない。
【００４７】
４．順序外れスヌーピング
キャッシュなどのメモリのスヌープはよく知られている。しかしノードが異なる順序でスヌープ要求メッセージを受けるとき、何らかのメカニズムを使用して、キャッシュ・コヒーレンスを維持するために各ノードが同一の順序で要求を見るようにしなければならない。順序外れスヌーピングは、特性（１）〜（３）を提供するさまざまなネットワークで実行することができる。ネットワークはリング内にある必要はない。ネットワークがリング内にある場合、要求を順序付けるのに上記の受動的メッセージ順序付け技術が有用である。しかしリングが使用される場合でも、上記以外の受動的メッセージ順序付け技術を使用して要求を順序付けることができる。
【００４８】
順序外れスヌーピング法は、メッセージが迅速に搬送されるがその最終的な順序付け（互いに相対的な）を知るのが遅れることもあるという、基礎となる通信メカニズムのために設計される。本発明のいくつかの実施形態を用いると、スヌープ要求を受け取ってスヌーピングを開始し、一方で最終的なキャッシュ・コヒーレンスを維持することができるようになる。本発明によって要求の順序付けが完了する前にスヌーピングを開始することができる。
【００４９】
下記の順序外れスヌーピングについての詳細な技術は、先に引用した特性（１）〜（５）を含んでいる。しかし特性（４）および（５）は必要ではない。
【００５０】
結果（スヌープの結果とライトバックの両方）が大域順序で分散している限り、ノード受信順序でスヌープを実行しても差し支えない。タグに関する変更は、スヌープが大域順序で実行されたときに起こる変更である。すべてのノードは同一のメモリ（キャッシュ・コヒーレンス）のビューを持ち、実施態様によっては中間処理同期の方法（ロック、書込み順序付け、割込み順序付け）が保存される。実施態様によっては、スヌープ応答はクリーン（ラインが見つからないまたは無効の（Ｉ）状態）、ヒット（独占的（Ｅ）または共有（Ｓ）状態）ｈｉｔｍ（変更された（Ｍ）状態）を含んでいるが、本発明はそのように限定されるものではない。
【００５１】
順序付けバッファ６２など各ノード内の順序付けバッファは、さまざまなメモリ・ライン・アドレスについてのスヌープ要求を受け取る。重要なのは同一のアドレスに対して２つ以上の未処理の要求がある場合である。
【００５２】
いくつかの実施形態では、ノードは要求を（ノード受信順序で）受け取ったとき、ノードはすでに到着している要求またはそのノードが発したいずれかの要求に対してその要求を順序付けることができる。時間上それより後に到着する要求は、現存の要求の相対的な大域順序に影響を及ぼしてはならない。
【００５３】
表３はある種の例示的キャッシュ・コヒーレンスのトランザクションおよび本発明との関連でスヌープ要求に含まれることもある省略形を提供する。無論、他のトランザクションを使用することもでき、本発明は表３の詳細に限定されるものではない。
【表１】
0004414096.tif 000004
【００５４】
ａ．スヌープ・プロセスの概要
いくつかの実施形態では、要求がノードによって受け取られるとすぐにスヌープがそれに関して発行される。よく知られているように、読取り−修正−書込み動作がキャッシュ・タグ上で実行される。通常通り新しいタグがコミットされる間、スヌープ結果は即時には要求元のノードに戻されない。その代わり要求が大域に順序付けられるまで古いタグが記憶される。この時点でノードは、大域順序でスヌープされていたら要求のスヌープ結果はどのようになったかを判定することができる。この結果は要求元のノードに戻される。
【００５５】
いくつかの実施形態ではスヌープが実行されタグの一致が検出されると、タグ内のＭＥＳＩ（Ｍ、Ｅ、ＳまたはＩ）状態が潜在的に変更される。この変更はＭＥＳＩビットに機能ｆが適用されたと見ることができる。（例えばｎｅｗ＿ＭＥＳＩ＿ｂｉｔｓ＝ｆ（ｏｌｄ＿ＭＥＳＩ＿ｂｉｔｓ）。表４は、例示的な無効ＭＥＳＩ機能を提供する。表５は例示的共用ＭＥＳＩ機能を提供する。
0004414096.tif 000005
【００５６】
インテル社のある種のプロセッサを使用すると、表５は新しい状態が現行状態ではＭであるＳになるというように変更される。
【００５７】
いくつかの実施形態では、スヌープはＢＲＩＬＯまたはＢＩＬＯ要求に応答して無効ＭＥＳＩ機能を、およびＢＲＬ要求に応答して共用ＭＥＳＩ機能を使用することもある。これら２つの機能が相互に構成することに注意されたい。
ｉｎｖａｌ°ｉｎｖａｌ＝ｉｎｖａｌ°ｓｈａｒｅ＝ｓｈａｒｅ°ｉｎｖａｌ＝ｉｎｖａｌ；
ｓｈａｒｅ°ｓｈａｒｅ＝ｓｈａｒｅ
【００５８】
集合｛ｉｎｖａｌ，ｓｈａｒｅ｝が合成中に閉じているということは、適切なスヌープ結果が順序外れスヌーピングが起こった後で計算されうることを意味する。集合が可換である（ｉｎｖａｌ°ｓｈａｒｅ＝ｓｈａｒｅ°ｉｎｖａｌ）ということは、スヌープが順序外れに実行される場合でも、最終的なスヌープ結果は正しい順序で行ったときと同じになるであろうことを意味する。スヌープ動作がタグ上で実行される順序は、最終的なタグ状態から見れば重要ではない。
【００５９】
ｂ．スヌープ・プロセスの詳細
以下は、いくつかの実施形態で含まれる追加の詳細事項である。
・スヌープ結果はスヌープが大域順序で実行されたように報告される。したがってタグの元の状態（所定のスヌープより以前）は、大域順序で所定のスヌープより前にあるスヌープ要求がこれ以上到着しないということが判定されるまで保存される。新しいスヌープが大域順序で古いスヌープより前にあれば、元のタグ状態は新しいスヌープに渡される。
・修正されたタグ状態はスヌープ要求の大域順序が知られた後で、大域順序において後続するスヌープ要求に戻される。このことにより、各スヌープ要求はその結果が大域順序で生じたかのように報告することができる。
・スヌープは受信された順序で、原子読取り−修正−書込みシーケンスで実行される。
・元のタグ状態は保存され、同一のラインにヒットしノード受信順序において後に到着するが大域順序において前に順序付けられるスヌープ要求に渡される。
・同一のラインにヒットする（大域順序で）後続のスヌープ要求に対するポインタ（リンクのための）は保持され、修正されたタグ状態が大域順序において後続の要求に渡されることがある。
【００６０】
下表６は、本発明のいくつかの実施形態を理解する上で使用されうる特定の特徴についての用語および表記を提供する。
【表２】
0004414096.tif 000006
【００６１】
表６の定義により以下のようなステートメントが理解できよう。
もし（ＴＡＧ［Ｒｅｑｕｅｓｔ．Ｉｎｄｅｘ］＝＝Ｒｅｑｕｅｓｔ．Ｔａｇ）のとき下記の擬似コードについて何かせよ。
【００６２】
順序外れスヌーピングは、上記の受動的メッセージ順序付けで使用された構造によって使用してもよい。例えば、ＳＳＲＢおよびＳＲＢは図３の順序付けバッファ６２内にある。いくつかの実施形態では、ＳＳＲＢはスカイライン・ダイヤグラムで、順序付けバッファを含んでいるノードから要求を受けるカラムにより表され、ＳＲＢは他のカラムにより表されことがある。例えば、スカイライン・ダイヤグラム１０２を図示する図１１で、ＳＳＲＢはカラム０で表され、ＳＲＢはカラム１、２、３で表される。ノードがセルフ・スヌープしない場合でも、他のノードに対するそのノードからのスヌープ要求はなお順序付けバッファ内にあり、各ノードが同一の大域順序を持つことに注意されたい。それ自体のスヌープ要求を保持する要求元のノードの順序付けバッファ内の位置は、ＳＳＲＢと呼ばれることもあるし呼ばれないこともある。位置付け回路６０は、要求間のポインタを介して同一のアドレスを持つスヌープ要求をリンクすることがある。
【００６３】
いくつかの実施形態では、順序付けバッファ・エントリ（例えばＳＲＢおよびことによるとＳＳＲＢ）は表７中のフィールドを含んでいることがある。すべてのフィールドが必要ではなく、追加のフィールドが使用されることもある。
【表３】
0004414096.tif 000007
【００６４】
以下は本発明のいくつかの実施形態の動作を説明し、これは時間１、２、３における順序付けバッファ６２を示す図１２Ａ、１２Ｂ、１２Ｃおよび時間１、２、３におけるタグ３６のメモリ・タグにおけるアドレスＸのＭＥＳＩ状態を示す図１３Ａ、１３Ｂ、１３Ｃに関連する例によって図示される。ノード受信順序ではまずスヌープ要求（１）（コマンドＣ１を含んでいる）が受信され、次いでスヌープ要求（２）（コマンドＣ２を含んでいる）が、次いでスヌープ要求（３）（コマンドＣ３を含んでいる）が順序付けバッファ６２によって受け取られる。要求（１）、（２）、（３）はそれぞれアドレスＸに対する。他のアドレスに対しての要求が含まれることもあるが、図１２Ａ、１２Ｂ、１２Ｃには示していない。順序付けバッファ６２がスヌープ要求１を受ける前に、アドレスＸはＭ、Ｅ、Ｓ状態またはＩ状態（一般にＭＥＳＩ状態と記される）を有する。
【００６５】
ＭＥＳＩプロトコルはキャッシュ・ライン・コヒーレンス・プロトコルの例である。メモリ・タグ３６内のＭＥＳＩ状態は、メモリ・キャッシュ・ライン・コヒーレンス状態の例であり、タグ３６内のメモリ・キャッシュ・ライン・コヒーレンス状態ビットによって表される。順序付けバッファ６２内のＭＥＳＩ状態は、順序付けバッファ・キャッシュ・ライン・コヒーレンス状態の例であり、順序付けバッファ６２内の順序付けバッファ・キャッシュ・ライン・コヒーレンス状態ビットによって表される。表４および５は、キャッシュ・ライン・コヒーレンス機能の例である。本発明はＭＥＳＩプロトコルによって使用すると限定するものではないが、他のキャッシュ・ライン・コヒーレンス・プロトコル（ＭＥＳＩ状態のいくらかまたはすべて、および追加のキャッシュ・ライン・コヒーレンス状態を含んでおりうる）とともに使用してもよい。他のキャッシュ・ライン・コヒーレンス・プロトコルの詳細に応じて、表４および／または表５および／または合成中に閉じていて可換性のある他のキャッシュ・ライン・コヒーレンス機能を使用してもよい。
【００６６】
アドレスＸに対する新しいスヌープ要求がノードによって受け取られると、その要求は順序付けバッファ６２内の大域順序になる位置に位置付けられる。順序付けバッファ６２は探索されて、順序付けバッファ６２内の、やはりアドレスＸに対する最も近い前のスヌープ要求および／または最も近い後のスヌープ要求を識別する（最も近い前の一致要求または最も近い後の一致要求と呼ばれる）。前のスヌープ要求は大域順序で先に起こると考えられ、後のスヌープ要求より前に順序付けバッファ６２から出て行く。最も近いとは大域順序において最も近くにあることを意味する。ただ１つの前の一致要求しかない場合でも要求は最も近い前の一致要求でありうること、およびただ１つの後の一致要求しかない場合でも要求は最も近い後の一致要求でありうることに注意されたい。新しい要求は、もしあれば最も近い前の一致要求をポイントし、もしあれば最も近い後の一致要求をポイントする。
【００６７】
ＭＥＳＩ状態は、新しい要求のために順序付けバッファ６２のＭＥＳＩフィールドに提供される。そのＭＥＳＩ状態がどこから来るかは、後の要求で一致するものがあるかどうかによって決まる。後の要求で一致するものがない場合、メモリ（例えばキャッシュ３６）内のアドレスＸについてのタグ内のＭＥＳＩ状態（すなわちＭ、Ｅ、ＳまたはＩのいずれか）は、新しい要求のために順序付けバッファ位置に提供される。例えば図１２Ａでキャッシュ３６のＭＥＳＩ状態（時間１以前の状態）は、時間１において要求（１）のＭＥＳＩフィールドに提供される。この例では時間１、２、３は正確な瞬間ではなく時間の幅であることに注意されたい。例えば時間１における図１２Ａの事象は、やはり時間１における図１３Ａの事象の前、またはそれと同時に、または後に起こりうる。
【００６８】
後の要求で一致するものがある場合、後の一致する要求のＭＥＳＩ状態はコピーされ新しい要求のＭＥＳＩ状態になる。例えば図１２Ｂで、時間２における要求（２）のＭＥＳＩ状態は、時間１における要求（１）のＭＥＳＩ状態と同じである。一致する前の要求および後の要求を持つ要求があることに注意されたい。例えば要求（３）は要求（１）より前で要求（２）よりも後である。したがって前段で述べたように、要求（１）中のＭＥＳＩ状態は要求（３）のＭＥＳＩ状態にコピーされる。このようにして新しいＭＥＳＩビットは大域順序で先へ進み、出て行く要求とともに含まれる。
【００６９】
いくつかの実施形態では、要求のＭＥＳＩビットが変更できないことを確かめた時間の後に（例えば要求が順序付けバッファ６２を出るときに）、出て行く要求の最も近い後の一致する要求のＭＥＳＩ状態が更新される。更新されたＭＥＳＩ状態は、機能への入力が最も近い後の一致要求内の現在のＭＥＳＩ状態であるときに、適切なＭＥＳＩ機能（例えば表４または５）によって生成された状態である。どのＭＥＳＩ状態が適切であるかは、出て行く要求のコマンドによって決まる。指摘したように、スヌープはＢＲＩＬＯまたはＢＩＬＯコマンドに応答して「無効（ｉｎｖａｌｉｄ）」（表４）を使用し、ＢＲＬコマンドに応答して「共用（ｓｈａｒｅ）」（表５）を使用することができる。例えば図１２Ｃで要求（２）が出て行く際、要求（３）のＭＥＳＩ状態はｆＣ２（ＭＥＳＩ）であり、すなわち要求（３）を保持する順序付けバッファ６２の位置についての新しいＭＥＳＩ状態が、要求が出て行く前にコマンドＣ２に対するＭＥＳＩ機能に適用された要求（２）のＭＥＳＩ状態の結果であることを意味する。アドレスＸに対して他の要求がないと仮定すると、要求（３）が出て行くとき、要求（１）のＭＥＳＩ状態はｆＣ３（ｆＣ２（ＭＥＳＩ））になるはずである。他の実施形態では最も近い後の一致要求のＭＥＳＩ状態は、順序付けバッファ６２が新しい要求を受け取って先の要求のＭＥＳＩ状態が確立されるごとに変更される。いずれの実施形態でも、更新されたＭＥＳＩ状態は先の要求に送られる。調整回路６４はＭＥＳＩ状態を修正し、順序付けバッファの位置の間でＭＥＳＩ状態を移動してもよい。例ではｆＣ１、ｆＣ２、ｆＣ３は、コマンドＣ１、Ｃ２、Ｃ３によって表４、表５または類似の表を実施することもできる。例えばＣ１がＢＲＩＬＯである場合、ｆＣ１は表４を実施することができる。
【００７０】
メモリ・タグ（例えばキャッシュ６２）内のＭＥＳＩ状態は、適切なＭＥＳＩ機能によって生成されるＭＥＳＩ状態によって更新される。その場合メモリ・タグ内の現在のＭＥＳＩ状態はＭＥＳＩ機能への入力である。どのＭＥＳＩ機能が適切であるかは、新しいスヌープ要求のコマンドによる。例えば図１３Ａで、時間１におけるアドレスＸについてのＭＥＳＩ状態はｆＣ１（ＭＥＳＩ）であり、それは時間１の前におけるキャッシュ６２内のメモリ・タグのＭＥＳＩ状態がコマンドＣ１についてのＭＥＳＩ機能に適用されることを意味する。図１３Ｂで時間２におけるアドレスＸについてのメモリ・タグ内のＭＥＳＩ状態は、ｆＣ２（ｆＣ１（ＭＥＳＩ））である。図１３ＣでアドレスＸについてのメモリ・タグ内のＭＥＳＩ状態は時間３においてｆＣ３（ｆＣ２（ｆＣ１（ＭＥＳＩ）））であり、それは要求（２）が出て行く前または後になる。
【００７１】
いくつかの実施形態では、図１２Ａ、１２Ｂ、１２Ｃおよび１３Ａ、１３Ｂ、１３Ｃ中の先述のアクティビティは、順序付けバッファのＳＲＢ部分内の要求についてだけ実行される。例えばＳＲＢ部分内の要求だけが一致する要求である。他の実施形態では、アクティビティは順序付けバッファのＳＲＢおよびＳＳＲＢ部分両方の要求について実行することができる。
【００７２】
引き出される際の要求のＭＥＳＩ状態と、応答するメモリ・タグのＭＥＳＩ状態は要求のノード受信順序にかかわらず同じである。
【００７３】
要求が出て行くときにスヌープ応答（例えばクリーン、ヒット、ｈｉｔｍ）は、要求が引き出されるときの要求のＭＥＳＩ状態および出て行く要求のコマンドに基づく機能を通して、制御回路４０で計算される。本発明はスヌープ応答の特定のタイプまたはスヌープ応答を計算するための機能に限定されるものではない。いくつかの実施形態では、導体２２〜２８のうち２つがヒットおよびｈｉｔｍスヌープ応答信号を専用的に搬送するのに使用される。単なる例であるが、調整回路６４はヒットおよびｈｉｔｍ状態を計算しそれらを導体７２に供給することもできる。ワイヤードＯＲ技術を使用して、ノードがヒットまたはｈｉｔｍ導体を低くプルすることもできる。ヒットもｈｉｔｍもアサートされない場合、クリーンなスヌープ応答が推論される。スヌープ応答は要求から固定時間（例えば１リング周期）が経過した後に送られる。本発明は、スヌーピングのまたはスヌープ要求を送る特定の実施態様に制限されるものではない。スヌープすることができるメモリを各ノードが備える必要はない。例からリングは、スヌープするメモリのないチップセットを持つノードを含んでいることができる。そのような実施形態では、そのノードは順序付けバッファを含んでも含まなくてもよい。他のノードの順序付けバッファおよび位置付け回路はそれに応じて構成される。
【００７４】
以下の擬似コードは本発明のいくつかの実施形態のスヌーピング動作のもう１つの表現を提供する。実際には擬似コードは、専用ハードウェア、ソフトウェア、ファームウェア、他の何らかの手段またはこれらの組合せによって実施することができる。
／／ファンクション・テンプレート
／／
／／大域順序で後に順序付けられたエントリで一致するものについてＳＲＢを検索せよ
／／一致するエントリがなければＮＵＬＬを戻せ
ＳＲＢｉｎｄｅｘ＿ｔ
ＦｉｎｄＰｒｅｖＭａｔｃｈ（ＲｅｑＡｄｄｒ＿ｔ）；
／／大域順序で前に順序付けられたエントリで一致するものについてＳＲＢを検索せよ
／／一致するエントリがなければＮＵＬＬを戻せ
ＳＲＢｉｎｄｅｘ＿ｔ
ＦｉｎｄＳｕｃｃＭａｔｃｈ（ＲｅｑＡｄｄｒ＿ｔ）；
／／スヌープがＴＡＧ内で有効なエントリをヒットしたらＴＲＵＥを戻す
／／現在のＭＥＳＩ状態を戻す
／／ＴＡＧへの読取りアクセスを実行せよ
ＢＯＯＬ
ＳｎｏｏｐＴＡＧ（Ｉｎｄｅｘ＿ｔ，Ｔａｇ＿ｔ，*ＭＥＳＩ＿ｔ）；
／／現在のＭＥＳＩおよび要求コマンドに基づいてＴＡＧ内のＭＥＳＩビットを更新せよ
／／ＴＡＧへの書込みアクセスを実行せよ
ｖｏｉｄ
ＵｐｄａｔｅＴＡＧ（Ｉｎｄｅｘ＿ｔ，Ｃｍｄ＿ｔ，ＭＥＳＩ＿ｔ）；
／／ＴＡＧ更新と同様しかしコマンドおよびＳＲＢテーブルのエントリの更新に使用された古いＭＥＳＩに基づいて新しいＭＥＳＩビットを計算する
／／ＴＡＧに対して何のアクセスもしない
ＭＥＳＩ＿ｔ
ＵｐｄａｔｅＭＥＳＩ（Ｃｍｄ＿ｔ，ＭＥＳＩ＿ｔ）；
／／ＭＥＳＩ状態とコマンドのこの組合せについてのスヌープ状況を戻す
ＳｎｏｏｐＳｔａｔ＿ｔ
ＳｎｏｏｐＳｔａｔｕｓ（Ｃｍｄ＿ｔ，ＭＥＳＩ＿ｔ）；
／／新しいＳＲＢエントリを割り当て一致するアドレスを検索せよ
ＳＲＢｉｎｄｅｘ＿ｔ      ＣｕｒｒＲｅｑ；
／／ＣｕｒｒＲｅｑはＳＲＢ内の次の使用可能なエントリのインデックス
／／ＣｕｒｒＲｅｑをｍａｎａｇｅするためのコードがここにない
ＳＲＢ［ＣｕｒｒＲｅｑ］＝Ｒｅｑ；    ／／ＳＲＢエントリへの要求のすべてのフィールドを割り当てる。
ＳＲＢＩｎｄｅｘ＿ｔ    ＰｒｅｖＭａｔｃｈ＝ＦｉｎｄＰｒｅｖＭａｔｃｈ（Ｒｅｑ．Ａｄｄｒ）；
ＳＲＢＩｎｄｅｘ＿ｔ    ＳｕｃｃＭａｔｃｈ＝ＦｉｎｄＳｕｃｃＭａｔｃｈ（Ｒｅｑ．Ａｄｄｒ）；
／／    リング順序でタグ上で読取り−修正−書込みを実行せよ
ＳＲＢ［ＣｕｒｒＲｅｑ］．Ｍａｔｃｈ＝ＳｎｏｏｐＴａｇ（Ｒｅｑ．Ｉｎｄｅｘ，Ｒｅｑ．Ｔａｇ，＆ＳＲＢ［ＣｕｒｒＲｅｑ］．ＭＥＳＩ）；
ｉｆ（ＳＲＢ）［ＣｕｒｒＲｅｑ］．Ｍａｔｃｈ）｛    ／／ｓｎｏｏｐ  ｈｉｔ
ＵｐｄａｔｅＴａｇ（Ｒｅｑ．Ｉｎｄｅｘ．ＳＲＢ［ＣｕｒｒＲｅｑ］．ＭＥＳＩ）；
｝
／／          ＳＲＢフィールドを割り当てる
ｉｆ（ＰｒｅｖＭａｔｃｈ）｛
／／大域順序で前の要求に一致するものがある
／／前のスヌープ要求が出て行くとＭＥＳＩビットが戻される
ＳＲＢ［ＰｒｅｖＭａｔｃｈ］．ＳｕｃｃＭａｔｃｈ＝ＣｕｒｒＲｅｑ；
｝
ｉｆ（ＳｕｃｃＭａｔｃｈ）｛
／／大域順序で後の要求に一致するものがある
／／前の要求をポイントしＭＥＳＩビットを押収する
／／このようにもとのＭＥＳＩビットが大域順序で「前へ移動する」
ＳＲＢ［ＣｕｒｒＲｅｑ］．ＳｕｃｃＭａｔｃｈ＝ＳｕｃｃＭａｔｃｈ；
ＳＲＢ［ＣｕｒｒＲｅｑ］．ＭＥＳＩ＝ＳＲＢ［ＳｕｃｃＭａｔｃｈ］．ＭＥＳＩ；
｝
／／大域順序が確立されＳＲＢエントリが「引き出される」と、われわれはスヌープ状況を報告し、その結果生じたＭＥＳＩ状態を後続の一致するエントリに転送し、それが正確にそのスヌープ状況を報告できるようにする。このようにして、エントリが出て行くと更新されたＭＥＳＩビットは時間において「後ろへ移動する」。「引き出し」は大域順序で次に引き出されるＳＲＢエントリを指す。Ｒｅｔｉｒｅインデックスを管理するコードはここには含まれない。
ＳＲＢｉｎｄｅｘ＿ｔ    Ｒｅｔｉｒｅ；
ＳｎｏｏｐＳｔａｔ＿ｔ  ＳｎｏｏｐＰｈａｓｅ＝ＳｎｏｏｐＳｔａｔｕｓ（
ＳＲＢ［Ｒｅｔｉｒｅ］．Ｃｍｄ．
ＳＲＢ［Ｒｅｔｉｒｅ］．ＭＥＳＩ）；
ＳＲＢ［ＳＲＢ［Ｒｅｔｉｒｅ］．ＳｕｃｃＭａｔｃｈＩｎｄｅｘ］．ＭＥＳＩ＝ＵｐｄａｔｅＭＥＳＩ（
ＳＲＢ［Ｒｅｔｉｒｅ］．Ｃｍｄ．
ＳＲＢ［Ｒｅｔｉｒｅ］．ＭＥＳＩ）．
【００７５】
５．双方向信号送信
リング上の双方向信号送信のタイプは、（１）異なる方向に対して異なる導体を使用する場合と、および（２）両方の方向とも同じ導体を使用する場合を含んでいる。例えばボーカー（Ｂｏｒｋｅｒ）他の米国特許第５，６０４，４５０号等を参照されたい。同一の導体を使用する技術のもとでは、どちらのノードも導体が高いままであればもう一方のノードが論理高信号を送ったことを知り、どちらのノードも導体が低いままであればもう一方が論理低信号を送ったことを知る。各ノードは導体が異なる電圧（例えば１／２ＶＤＤ）に変化すれば、もう一方のノードが信号を異なる状態で送ったことを知る。この場合のＶＤＤは高い。受信ノードは、その受信回路をＶＤＤ／２からＶＤＤ／４に変更する。他の方式を双方向信号に使用してもよい。双方向信号方式および方向の選択の詳細の選択によっては、搬送速度を上げ性能を平衡させることができる。
【００７６】
図１４はノードＮ０とＮ１、Ｎ１とＮ２、Ｎ２とＮ３、Ｎ３とＮ０がそれぞれ導体１２２、１２４、１２６、１２８に双方向に接続されている双方向リング１２０を図示する。システム１０の場合と同じように、導体１２２〜１２８の異なる導体が異なる種類の信号を搬送するために使用される。双方向のうち少なくともいくつかはタイプ（２）である。図１５を参照すると例えばノードＮ２内の受信回路８４および９０は異なる方向に信号を受け取り、送信回路８６および８８は異なる方向に信号を送る。制御回路８２は制御回路４０に類似するが両方向に信号を取り扱う。
【００７７】
仮想スロット・レイヤおよび対応するアクティビティ（例えばアービトレーション）は、２方向について独立して維持される。１方向における輻輳はもう１つの方向のリングのトラフィックを妨害する必要はない。ただしいくつかの実施形態では、メモリの一貫性が必要とするときにはノードはメッセージを順番に発しつづけることもできる。例えばノードの第１のメッセージが時計回りで送信され、第２のメッセージが反時計回りで送信されたとする。時計回りのリングが輻輳し反時計回りのリングがそうでない場合、ノードは時計回りのメッセージがリング状に置かれるまで、反時計回りのメッセージを発行することを試みない（もし順序付けが必要な場合）。
【００７８】
反対方向に送信されたメッセージ（例えばスヌープ要求）を一貫して順序付けられるようにするために回路が含まれてもよい。ノードは両方向のための単一の順序付けバッファを維持することもできる。２方向が完全に同期されれば（おそらく非現実的）、スロット間の固定された位置関係を使用してすべての関与するノードが確実にそれらを一貫して処理できるようにすることができる。
【００７９】
２方向が完全には同期されない場合、ノードはあたかも特定の位置関係が存在するかのように要求パケットを処理することができる。特に各ノードは処理スロット内の方向を交互に入れ換えることができる。しかしリングが完全には同期されないと、２つの異なる方向から到着するスロットは入れ替わらないこともある。例えばメッセージＢが他の方向から到着する前に、ノードがメッセージＡおよびＣを連続して時計回りで受けるとする。ＣはＢが到着するまで順序付けバッファ内に置くことができない。しかしノードは待っている間にＣを転送すること（および新しい時計周りのスロットを受け取ること）を拒否するため、時計回りのリングを単に保持しておくことは不可能である。そのかわりノードはＣを通常通りに転送するが、それを順序付けバッファ内に置く代わりに第１の方向バッファ（例えば時計回りのバッファ）内に置きＢが到着するまでそこに保管しておく。それに応答する第２の方向バッファ（例えば反時計周りバッファ）がある。一実施形態では、バッファのうち１つは常に空なので、同一の記憶装置をもって実施することができる。図１６は例えばノードＮ０の順序付けバッファ１６０を図示する。順序付けバッファ１６０の動作はスカイライン・ダイヤグラムによって各方向について図示してもよい。２つのスカイライン・ダイヤグラムは図１６のように異なる外観を呈するかまたは同一の外観（例えば２つのスカイライン・ダイヤグラム１０２）を呈する。第１および第２の方向バッファ１６２および１６８は位置付け回路１６４および１７０に要求を提供し、要求はそこから順序付けバッファ１６０に提供される。他の配置を使用してもよい。処理回路６６に類似の処理回路を含んでいることもできる。
【００８０】
２つの方向が任意で互いに「同期はずれ」になると、第１および第２の方向バッファのサイズを制限する方法はない。したがって方向が同期しない見込みを制限することが望ましい。これは、ノードの１つ（例えばＮ０）−−マスタ・ノード−−に、リング回転ごとに１回の頻度で２方向のクロック・パルスを一貫して再生成させることによって行うことができる。これは２つの方向が完全に同期されることを保証するものではないが、方向が互いからドリフトする可能性を制限し、これにより時計回りおよび反時計回りのバッファのサイズを制限することができる。
【００８１】
６．追加情報および実施形態
図示した２つの構造の間または連続しているように図示されている構造内（導体など）に、中間構造（バッファなど）または信号を設置してもよい。図中の四角形の境界線は図示する目的のためで、制限的なものではない。矢印は特定の実施形態における特定の信号の流れを示すが、制御信号およびデータの要求などのあらゆる信号を表すものではない。
【００８２】
メッセージ間に空の仮想スロットが全くないか比較的少ない場合、通常大域順序はノード受信順序とは異なったものになる。しかしメッセージが十分な間隔で離れている場合、大域順序はノード受信順序と同じになる。
【００８３】
いくつかの実施形態ではリングは２つのノードしか持たず、その場合信号は双方向にノード間を送られる（例えば同時に少なくとも１つの導体上を、および／または１つ以上の導体上を単方向に）。
【００８４】
本発明は電圧信号を伝導する導体に限定するものではない。例えば導体は光ファイバー導体でもよい。リング内の２つまたはそれ以上のノードは、電磁信号を通して無線式に接続することもできる。
【００８５】
明細書が、構成要素、特徴、構造または特性を「含んでもよい」「含んでいることもある」「含んでいることもできる」と述べる場合、その特定の構成要素、特徴、構造または特性を含んでいる必要はない。明細書中の「いくつかの実施形態では」という参照は、実施形態に関して述べられる特定の特徴、構造、または特性が少なくともいくつかの実施形態で含まれるが、必ずしも本発明のすべての実施形態で含まれる必要性はないことを意味する。頻出する「いくつかの実施形態」は必ずしもすべてが同一の実施形態を指すわけではない。
【００８６】
ここで使用する場合、ビットが一定の電圧状態を有するかまたはアサートされた状態に関する範囲内にあるときにビットは「アサート」され、異なる状態を有するかまたはアサート解除されることに関する他の範囲内にあるときにビットは「アサート解除」される。アサートされたまたはアサート解除されたビットは、実施態様によって論理１、論理０、ＶＤＤ／２または何らかの他の値または値の範囲になりうる。
【００８７】
保留要求バッファ（ＰＲＢ）は、まだノード自体の順序付けバッファに発行されていない、またはもう１つのノードに送信されていないノードの要求を保留する。
【００８８】
実施態様によっては、要求は順序付けバッファから出た後に表６中で示す未処理要求バッファ（ＯＲＢ）に記憶される。このバッファは、新しい要求（内部のまたはスヌープの）を１サイクル中のすべての現在のエントリに対して比較できる内容アドレス指定可能メモリ（ＣＡＭ）として実施することもできる。このバッファを使用することができる理由は、キャッシュ・タグはライン所有権および責任を反映するが、必ずしもデータの存在を反映するとは限らないためである。キャッシュ・ラインについてのスヌープ応答が受け取られると、要求側はラインについての責任を引き受け、それをキャッシュ内のＭ状態にセットする。同一のラインに対するもう１つのＢＲＩＬＯ要求が到着し、ノードによってスヌープされたと仮定する。キャッシュ・ラインはＭ状態にあり、ノードは正しくＨＩＴＭをスヌープ要求結果として戻すが、ノードはそれ自体の（優先の）ＢＲＩＬＯ要求についてのデータを得る（および一度使用する）まで、ラインについてのライトバック（ＷＢ）を搬送してはならない。未処理要求についての情報（スヌープ段階を経て、順序付け完了のために付されたがまだデータを受け取ってはいない）はＯＲＢに記録される。ＯＲＢおよびＰＲＢは図３および４中で枠で表され、または図示していない追加の枠で表される。
【００８９】
実施態様によってはノードに戻るデータを把握するために、ノードは独自の静的識別（ＩＤ）を有し、バス上で未処理のＮ要求（例えばＮ＝１６。８ビットのフィールドｄｅｆｅｒｒｅｄ  ＩＤ，ＤＩＤ［７：０］：＝｛ＡｇｅｎｔＴｙｐｅ，ＡｇｅｎｔＩｄ［２：０］，ＲｅｑＩＤ［４：０］｝に至るまで、各要求を独自に識別しその要求に対するデータ応答にタグ付けをする。
【００９０】
いくつかの実施形態では、仮想スロットがメッセージを含まない場合、順序付けバッファには何も挿入されないが現存のメッセージは古くなる。他の実施形態では、順序付けバッファ内の位置にビットが挿入され（メッセージが置かれたはずの位置に）現存のメッセージが古くなる。また他の実施形態では何も挿入されず現存のメッセージは古くならない。
【００９１】
この開示の利益を受ける当分野の技術者は、先の説明および図面から本発明の範囲内で多くの他の変例が作られることを理解されよう。従ってそれについて修正を含んでいる以下の請求項が発明の範囲を定義する。
【図面の簡単な説明】
【図１】  本発明の例示的実施形態におけるスロットの実際の配置の概略図である。
【図２】  本発明の例示的実施形態におけるスロットの仮想配置の概略図である。
【図３】  本発明の例示的実施形態における図１および図２のノードの１つにおけるある種の回路の概略図である。
【図４】  本発明の例示的実施形態における図３の制御回路の詳細の概略図である。
【図５】  本発明の例示的実施形態において使用される中間ノード・リンクへの仮想的スロットの配置を示す図である。
【図６、７、８、９、１０、１１】  スカイライン・ダイアグラムおよび特定のメッセージに関連するデータを保持する関連の回路を示す図である。
【図１２】  特定の時間における順序付けバッファ内のあるＭＥＳＩ状態を示す図である。
【図１３】  特定の時間におけるアドレス用のメモリ内のタグ状態を示す図である。
【図１４】  ノード間の同時双方向送信を含んでいる、本発明の例示的実施形態におけるスロットの仮想配置の概略図である。
【図１５】  本発明の例示的実施形態における図１４のノードの１つにおける特定の回路の概略図である。
【図１６】  双方向送信に関連するスカイライン・ダイアグラムを示す図である。
【図１】
0004414096.tif 000008
【図２】
0004414096.tif 000009
【図３】
0004414096.tif 000010
【図４】
0004414096.tif 000011
【図５】
0004414096.tif 000012
【図６】
0004414096.tif 000013
【図７】
0004414096.tif 000014
【図８】
0004414096.tif 000015
【図９】
0004414096.tif 000016
【図１０】
0004414096.tif 000017
【図１１】
0004414096.tif 000018
【図１２】
0004414096.tif 000019
【図１３】
0004414096.tif 000020
【図１４】
0004414096.tif 000021
【図１５】
0004414096.tif 000022
【図１６】
0004414096.tif 000023