(57)【特許請求の範囲】
【請求項１】
ネットワークによって相互接続された複数の処理ノードと共用メモリを含む多重処理コンピュータ・システムのホーム・ノード内で使用できる装置であって、
前記複数の処理ノードからの前記共用メモリに対するトランザクション要求の内、所有状態のコヒーレンシ単位のコピーを求めるリード・ツー・オウン・トランザクション要求を受け取るように結合された第１の待ち行列と、
前記複数の処理ノードからの前記共用メモリに対するトランザクション要求の内、共用状態のコヒーレンシ単位のコピーを求めるリード・ツー・シェア・トランザクション要求を受け取るように結合された第２の待ち行列と、
前記第１、第２の待ち行列に結合して、前記リード・ツー・オウン・トランザクション要求および前記リード・ツー・シェア・トランザクション要求を受け取り、該受け取った複数のトランザクション要求を同時に処理可能に構成されたホーム・エージェント制御装置と、
前記第１、第２の待ち行列および前記ホーム・エージェント制御装置に結合され、
（１）特定のコヒーレンシ単位に対するリード・ツー・オウン・トランザクション要求が現在、前記ホーム・エージェント制御装置によって処理されている場合に、前記第１の待ち行列に保持されている前記特定のコヒーレンシ単位に対するリード・ツー・オウン・トランザクション要求をブロックし、
（２）特定のコヒーレンシ単位に対するリード・ツー・シェア・トランザクション要求が現在、前記ホーム・エージェント制御装置によって処理されている場合でも、前記ホーム・エージェント制御装置が前記第２の待ち行列に保持されている前記特定のコヒーレンシ単位に対するリード・ツー・シェア・トランザクション要求を受け取り、処理できるようにした、トランザクション・ブロッキング装置とを備えることを特徴とする装置。
【請求項２】
前記ホーム・エージェント制御装置が、前記第２の待ち行列からの所与のリード・ツー・シェア・トランザクション要求を処理する前に前記第１の待ち行列からの所与のリード・ツー・オウン・トランザクション要求を処理するように構成されることを特徴とする請求項１に記載の、多重処理コンピュータ・システムのホーム・ノード内で使用できる装置。
【請求項３】
前記所与のリード・ツー・オウン・トランザクション要求が前記ネットワークを通じて送られる前に前記所与のリード・ツー・シェア・トランザクション要求がネットワークを通じて送られた場合でも、前記所与のリード・ツー・シェア・トランザクション要求を処理する前に前記所与のリード・ツー・オウン・トランザクション要求を処理するように、前記ホーム・エージェント制御装置が構成されることを特徴とする請求項２に記載の、多重処理コンピュータ・システム内で使用できる装置。
【請求項４】
前記所与のリード・ツー・オウン・トランザクション要求が前記第１の待ち行列内に格納される前に前記所与のリード・ツー・シェア・トランザクション要求が前記第２の待ち行列内に記憶された場合でも、前記所与のリード・ツー・シェア・トランザクション要求を処理する前に前記所与のリード・ツー・オウン・トランザクション要求を処理するように、前記ホーム・エージェント制御装置が構成されることを特徴とする請求項２に記載の、多重処理コンピュータ・システムのホーム・ノード内で使用できる装置。
【請求項５】
ネットワークによって相互接続された複数の処理ノードと共用メモリを含む多重処理コンピュータ・システムのホーム・ノード内で使用できるシステム・インターフェース装置であって、このシステム・インターフェース装置が、
前記複数の処理ノードからの前記共用メモリに対するトランザクション要求の内、所有状態のコヒーレンシ単位のコピーを求めるリード・ツー・オウン・トランザクション要求を受け取るように結合された第１の待ち行列と、
前記複数の処理ノードからの前記共用メモリに対するトランザクション要求の内、共用状態のコヒーレンシ単位のコピーを求めるリード・ツー・シェア・トランザクション要求を受け取るように結合された第２の待ち行列と、
前記第１、第２の待ち行列に結合して、前記リード・ツー・オウン・トランザクション要求および前記リード・ツー・シェア・トランザクション要求を受け取り、該受け取った複数のトランザクション要求を同時に処理可能に構成されたホーム・エージェント制御装置と、
前記第１、第２の待ち行列および前記ホーム・エージェント制御装置に結合された、トランザクション・ブロッキング装置とを備えており、
前記システム・インターフェース装置によるトランザクション要求の処理方法が、
前記第１の待ち行列が第１のリード・ツー・オウン・トランザクション要求を受け取ることと、
前記第１の待ち行列が第２のリード・ツー・オウン・トランザクション要求を受け取ることと、
前記ホーム・エージェント制御装置が、前記第１のリード・ツー・オウン・トランザクション要求を処理することと、
前記トランザクション・ブロッキング装置が、前記第１および第２のリード・ツー・オウン・トランザクション要求が同じコヒーレンシ単位に対応するものである場合に、前記第１のリード・ツー・オウン・トランザクション要求の処理が完了するまで前記第２のリード・ツー・オウン・トランザクション要求の処理をブロックすることと、
前記第２の待ち行列が第１のリード・ツー・シェア・トランザクション要求を受け取ることと、
前記第２の待ち行列が第２のリード・ツー・シェア・トランザクション要求を受け取ることと、
前記ホーム・エージェント制御装置が、前記第１のリード・ツー・シェア・トランザクション要求を処理することと、
前記トランザクション・ブロッキング装置が、前記第１および第２のリード・ツー・シェア・トランザクション要求が共通のコヒーレンシ単位に対応するものである場合でも、前記第１のリード・ツー・シェア・トランザクション要求の処理中に前記第２のリード・ツー・シェア・トランザクション要求の処理を許可することと
を含むことを特徴とする方法。
【請求項６】
前記ホーム・エージェント制御装置が、前記第２の待ち行列からの所与のリード・ツー・シェア・トランザクション要求を処理する前に前記第１の待ち行列から所与のリード・ツー・オウン・トランザクション要求を処理するように構成されていることを特徴とする請求項５記載の方法。
【請求項７】
前記所与のリード・ツー・オウン・トランザクション要求が前記ネットワークを通じて送られる前に前記所与のリード・ツー・シェア・トランザクション要求がネットワークを通じて送られた場合でも、前記ホーム・エージェント制御装置が、前記所与のリード・ツー・シェア・トランザクション要求を処理する前に、前記所与のリード・ツー・オウン・トランザクション要求を処理することを、さらに含むことを特徴とする請求項６記載の方法。
【請求項８】
前記所与のリード・ツー・オウン・トランザクション要求が前記第１の待ち行列内に格納される前に前記所与のリード・ツー・シェア・トランザクション要求が前記第２の待ち行列内に記憶された場合でも、前記所与のリード・ツー・シェア・トランザクション要求を処理する前に前記所与のリード・ツー・オウン・トランザクション要求を処理することを特徴とする請求項６に記載の方法。
【発明の詳細な説明】
【０００１】
関連特許出願の相互参照
本特許出願は、開示が引用によって本明細書に組み込まれた、下記の関連特許出願に関係するものである。
１．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｅｘｔｅｎｄｉｎｇ  Ｔｈｅ  Ｃｏｈｅｒｅｎｃｅ  Ｄｏｍａｉｎ  Ｂｅｙｏｎｄ  Ａ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｂｕｓ」（参照番号Ｐ９９０）。
２．本出願と同時出願されたＨａｇｅｒｓｔｅｎの「Ｍｅｔｈｏｄ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｏｐｔｉｍｉｚｉｎｇ  Ｇｌｏｂａｌ  Ｄａｔａ  Ｒｅｐｌｉｅｓ  Ｉｎ  Ａ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ９９１）。
３．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｍｅｔｈｏｄ  ＡｎｄＡｐｐａｒａｔｕｓ  Ｐｒｏｖｉｄｉｎｇ  Ｓｈｏｒｔ  Ｌａｔｅｎｃｙ  Ｒｏｕｎｄ−Ｒｏｂｉｎ  Ａｒｂｉｔｒａｔｉｏｎ  Ｆｏｒ  Ａｃｃｅｓｓ  ＴｏＡ  Ｓｈａｒｅｄ  Ｒｅｓｏｕｒｃｅ」（参照番号Ｐ９９２）。
４．本出願と同時出願されたＳｉｎｇｈａｌ等の「ＩｍｐｌｅｍｅｎｔｉｎｇＳｎｏｏｐｉｎｇ  Ｏｎ  Ａ  Ｓｐｌｉｔ−Ｔｒａｎｓａｃｔｉｏｎ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｂｕｓ」（参照番号Ｐ９９３）。
５．本出願と同時出願されたＳｉｎｇｈａｌ等の「Ｓｐｌｉｔ  Ｔｒａｎｓａｃｔｉｏｎ  Ｓｎｏｏｐｉｎｇ  Ｂｕｓ  Ｐｒｏｔｏｃｏｌ」（参照番号Ｐ９８９）。
６．本出願と同時出願されたＨｅｌｌｅｒ等の「Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ  Ｓｕｂｓｙｓｔｅｍ  Ｆｏｒ  Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｗｉｔｈ  Ａ  Ｓｍａｌｌ  Ｎｕｍｂｅｒ  ＯｆＰｒｏｃｅｓｓｏｒｓ  Ｕｓｉｎｇ  Ａ  Ｓｗｉｔｃｈｉｎｇ  Ａｒｒａｎｇｅｍｅｎｔ  Ｏｆ  Ｌｉｍｉｔｅｄ  Ｄｅｇｒｅｅ」（参照番号Ｐ１６０９）。
７．本出願と同時出願されたＷａｄｅ等の「Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｐｅｒｆｏｒｍｉｎｇ  Ｄｅａｄｌｏｃｋ  Ｆｒｅｅ  Ｍｅｓｓａｇｅ  Ｔｒａｎｓｆｅｒ  Ｉｎ  Ｃｙｃｌｉｃ  Ｍｕｌｔｉ−Ｈｏｐ  Ｄｉｇｉｔａｌ  Ｃｏｍｐｕｔｅｒ  Ｎｅｔｗｏｒｋ」（参照番号Ｐ１５７２）。
８．本出願と同時出願されたＣａｓｓｉｄａｙ等の「Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｐｌｅｓｉｏｃｈｒｏｎｏｕｓ  Ｓｉｇｎａｌｉｎｇ」（参照符号Ｐ１５９３）。
９．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｍｅｔｈｏｄｓ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｆｏｒ  Ａ  Ｃｏｈｅｒｅｎｃｅ  Ｔｒａｎｓｆｏｒｍｅｒ  Ｆｏｒ  Ｃｏｎｎｅｃｔｉｎｇ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｃｏｈｅｒｅｎｃｅ  Ｄｏｍａｉｎｓ」（参照番号Ｐ１５１９）。
１０．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｍｅｔｈｏｄｓ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｆｏｒ  Ａ  Ｃｏｈｅｒｅｎｃｅ  Ｔｒａｎｓｆｏｒｍｅｒ  Ｗｉｔｈ  Ｌｉｍｉｔｅｄ  Ｍｅｍｏｒｙ  Ｆｏｒ  Ｃｏｎｎｅｃｔｉｎｇ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｃｏｈｅｒｅｎｃｅ  Ｄｏｍａｉｎｓ」（参照番号Ｐ１５３０）。
１１．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｍｅｔｈｏｄｓ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｆｏｒ  Ｓｈａｒｉｎｇ  Ｄａｔａ  Ｏｂｊｅｃｔｓ  Ｉｎ  Ａ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ１４６３）。
１２．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｍｅｔｈｏｄｓ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｆｏｒ  Ａ  Ｄｉｒｅｃｔｏｒｙ−Ｌｅｓｓ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ  Ｉｎ  Ａ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｈａｒｅｄ  Ｍｅｍｏｒｙ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ１５３１）。
１３．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｈｙｂｒｉｄ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ  Ｉｎ  Ａ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｈａｒｅｄ  Ｍｅｍｏｒｙ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ１５５０）。
１４．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｍｅｔｈｏｄｓ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｆｏｒ  Ｓｕｂｓｔａｎｔｉａｌｌｙ  Ｍｅｍｏｒｙ−Ｌｅｓｓ  Ｃｏｈｅｒｅｎｃｅ  Ｔｒａｎｓｆｏｒｍｅｒ  Ｆｏｒ  Ｃｏｎｎｅｃｔｉｎｇ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ１５２９）。
１５．本出願と同時出願されたＧｕｚｏｖｓｋｉｙ等の「Ｅｎｃｏｄｉｎｇ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｄｉｒｅｃｔｏｒｙ  Ｓｔａｔｅ  Ｉｎ  Ｃａｃｈｅ  Ｃｏｈｅｒｅｎｔ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｈａｒｅｄ  Ｍｅｍｏｒｙ  Ｓｙｓｔｅｍ」（参照番号Ｐ１５２０）。
１６．本出願と同時出願されたＮｅｓｈｅｉｍ等の「Ｓｏｆｔｗａｒｅ  Ｕｓｅ  Ｏｆ  Ａｄｄｒｅｓｓ  Ｔｒａｎｓｌａｔｉｏｎ  Ｍｅｃｈａｎｉｓｍ」（参照番号Ｐ１５６０）。
１７．本出願と同時出願されたＬｏｗｅｎｓｔｅｉｎ等の「Ｄｉｒｅｃｔｏｒｙ−Ｂａｓｅｄ，Ｓｈａｒｅｄ−Ｍｅｍｏｒｙ，Ｓｃａｌｅａｂｌｅ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｈａｖｉｎｇ  Ｄｅａｄｌｏｃｋ−ｆｒｅｅ  Ｔｒａｎｓａｃｔｉｏｎ  Ｆｌｏｗ  Ｓａｎｓ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ」（参照番号Ｐ１５６１）。
１８．本出願と同時出願されたＮｅｓｈｅｉｍの「Ｍａｉｎｔａｉｎｉｎｇ  Ａ  Ｓｅｑｕｅｎｔｉａｌ  Ｓｔｏｒｅｄ  Ｏｒｄｅｒ  （ＳＳＯ）  Ｉｎ  ＡＮｏｎ−ＳＳＯ  Ｍａｃｈｉｎｅ」（参照番号Ｐ１５６２）。
１９．本出願と同時出願されたＷｏｎｇ−Ｃｈａｎの「Ｎｏｄｅ  Ｔｏ  Ｎｏｄｅ  Ｉｎｔｅｒｒｕｐｔ  Ｍｅｃｈａｎｉｓｍ  Ｉｎ  Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ１５８７）。
２０．１９９６年４月８日に出願された、「Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｍｕｌｔｉｃａｃｈｅ  Ｃｏｈｅｒｅｎｃｅ  Ｐｒｏｔｏｃｏｌ」と題するＨａｇｅｒｓｔｅｎ等の出願第０８／６３０７０３号。
２１．１９９５年１２月２２日に出願された、「Ａ  Ｈｙｂｒｉｄ  ＮＵＭＡＣｏｍａ  Ｃａｓｈｉｎｇ  Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄｓ  ＦｏｒＳｅｌｅｃｔｉｎｇ  Ｂｅｔｗｅｅｎ  Ｔｈｅ  Ｃａｃｈｉｎｇ  Ｍｏｄｅｓ」と題するＨａｇｅｒｓｔｅｎ等の出願第０８／５７７２８３号。
２２．１９９５年１２月２２日に出願された、「Ａ  Ｈｙｂｒｉｄ  ＮＵＭＡＣｏｍａ  Ｃａｓｈｉｎｇ  Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄｓ  ＦｏｒＳｅｌｅｃｔｉｎｇ  Ｂｅｔｗｅｅｎ  Ｔｈｅ  Ｃａｃｈｉｎｇ  Ｍｏｄｅｓ」と題するＷｏｏｄ等の出願第０８／５７５７８７号。
２３．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｆｌｕｓｉｎｇ  Ｏｆ  Ｃａｃｈｅ  Ｍｅｍｏｒｙ  Ｉｎ  Ａ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ１４１６）。
２４．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「ＥｆｆｉｃｉｅｎｔＡｌｌｏｃａｔｉｏｎ  Ｏｆ  Ｃａｃｈｅ  Ｍｅｍｏｒｙ  Ｓｐａｃｅ  ＩｎＡ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ１５７６）。
２５．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「ＥｆｆｉｃｉｅｎｔＳｅｌｅｃｔｉｏｎ  Ｏｆ  Ｍｅｍｏｒｙ  Ｓｔｏｒａｇｅ  Ｍｏｄｅｓ  Ｉｎ  Ａ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ１７２６）。
２６．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｓｋｉｐ−ｌｅｖｅｌ  Ｗｒｉｔｅ−ｔｈｒｏｕｇｈ  Ｉｎ  Ａ  Ｍｕｌｔｉ−ｌｅｖｅｌ  Ｍｅｍｏｒｙ  Ｏｆ  Ａ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」（参照番号Ｐ１７３６）。
２７．本出願と同時出願されたＨａｇｅｒｓｔｅｎの「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｃｏｎｆｉｇｕｒｅｄ  ｔｏ  ＰｅｒｆｏｒｍＥｆｆｉｃｉｅｎｔ  Ｗｒｉｔｅ  Ｏｐｅｒａｔｉｏｎｓ」（参照番号Ｐ１５００）。
２８．本出願と同時出願されたＨａｇｅｒｓｔｅｎの「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｃｏｎｆｉｇｕｒｅｄ  ｔｏ  ＰｅｒｆｏｒｍＥｆｆｉｃｉｅｎｔ  Ｂｌｏｃｋ  Ｃｏｐｙ  Ｏｐｅｒａｔｉｏｎｓ」（参照番号Ｐ１５１５）。
２９．本出願と同時出願されたＨａｇｅｒｓｔｅｎの「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｉｎｃｌｕｄｉｎｇ  Ａｎ  Ａｐｐａｒａｔｕｓ  Ｆｏｒ  Ｏｐｔｉｍｉｚｉｎｇ  Ｓｐｉｎ−Ｌｏｃｋ  Ｏｐｅｒａｔｉｏｎｓ」（参照番号Ｐ１５２５）。
３０．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｃｏｎｆｉｇｕｒｅｄ  ｔｏ  Ｄｅｔｅｃｔａｎｄ  Ｅｆｆｉｃｉｅｎｔｌｙ  Ｐｒｏｖｉｄｅ  ｆｏｒ  Ｍｉｇｒａｔｏｒｙ  Ｄａｔａ  Ａｃｃｅｓｓ  Ｐａｔｔｅｒｎｓ」（参照番号Ｐ１５５５）。
３１．本出願と同時出願されたＨａｇｅｒｓｔｅｎの「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｃｏｎｆｉｇｕｒｅｄ  ｔｏ  Ｓｔｏｒｅ  Ｃｏｈｅｒｅｎｃｙ  Ｓｔａｔｅ  Ｗｉｔｈｉｎ  Ｍｕｌｔｉｐｌｅ  Ｓｕｂｎｏｄｅｓ  ｏｆ  ａ  Ｐｒｏｃｅｓｓｉｎｇ  Ｎｏｄｅ」（参照番号Ｐ１５２７）。
３２．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｃｏｎｆｉｇｕｒｅｄ  ｔｏ  Ｐｅｒｆｏｒｍ  Ｐｒｅｆｅｔｃｈｉｎｇ  Ｏｐｅｒａｔｉｏｎｓ」（参照番号Ｐ１５７１）。
３３．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｃｏｎｆｉｇｕｒｅｄ  ｔｏ  Ｐｅｒｆｏｒｍ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  Ｏｐｅｒａｔｉｏｎｓ」（参照番号Ｐ１５５１）。
３４．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｈａｖｉｎｇ  Ｃｏｈｅｒｅｎｃｙ−Ｒｅｌａｔｅｄ  Ｅｒｒｏｒ  Ｌｏｇｇｉｎｇ  Ｃａｐａｂｉｌｉｔｉｅｓ」（参照番号Ｐ１７１９）。
３５．本出願と同時出願されたＨａｇｅｒｓｔｅｎの「Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｅｍｐｌｏｙｉｎｇ  Ａ  Ｔｈｒｅｅ−Ｈｏｐ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ」（参照番号Ｐ１７８５）。
３６．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｃｏｎｆｉｇｕｒｅｄ  ｔｏ  Ｐｅｒｆｏｒｍ  Ｓｏｆｔｗａｒｅ  Ｉｎｉｔｉａｔｅｄ  Ｐｒｅｆｅｔｃｈ  Ｏｐｅｒａｔｉｏｎｓ」（参照番号Ｐ１７８７）。
３７．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｅｍｐｌｏｙｉｎｇ  Ｌｏｃａｌ  ａｎｄ  Ｇｌｏｂａｌ  Ｓｐａｃｅｓ  ａｎｄ  Ｍｕｌｔｉｐｌｅ  Ａｃｃｅｅ  Ｍｏｄｅｓ」（参照番号Ｐ１７８４）。
３８．本出願と同時出願されたＨａｇｅｒｓｔｅｎ等の「Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｅｍｐｌｏｙｉｎｇ  Ａ  Ｃｏｈｅｒｅｎｃｙ  Ｐｒｏｔｏｃｏｌ  Ｉｎｃｌｕｄｉｎｇ  Ａ  Ｒｅｐｌｙ  Ｃｏｕｎｔ」（参照番号Ｐ１５７０）。
【０００２】
【発明の属する技術分野】
本発明は、マルチプロセッサ・コンピュータ・システムの分野に関し、詳細には、分散共用メモリ・アーキテクチャを有するマルチプロセッサ・コンピュータ・システム内の動作を最適化する機構および方法に関する。
【０００３】
【従来の技術】
多重処理コンピュータ・システムは、コンピューティング・タスクを実行するために使用できる２つ以上のプロセッサを含む。１つのプロセッサ上で特定のコンピューティング・タスクを実行し、同時に他のプロセッサが、関係のないコンピューティング・タスクを実行することができる。別法として、特定のコンピューティング・タスクの構成要素を複数のプロセッサ間で分散し、コンピューティング・タスク全体を実行するのに必要な時間を短縮することができる。一般的に言えば、プロセッサは、１つまたは複数のオペランドに対する演算を実行して結果を生成するように構成された装置である。演算は、プロセッサによって実行される命令に応答して実行される。
【０００４】
市販の多重処理コンピュータ・システムで広く使用されているアーキテクチャは、対称型マルチプロセッサ（ＳＭＰ）アーキテクチャである。通常、ＳＭＰコンピュータ・システムは、キャッシュ階層を通じて共用バスに接続された複数のプロセッサを備える。共用バスにはメモリも接続され、メモリはシステム内のプロセッサ間で共用される。メモリ内の特定のメモリ位置へのアクセスは、他の特定のメモリ位置へのアクセスと同様な時間で行われる。メモリ内の各位置に一様にアクセスできるので、この構造はしばしば、一様なメモリ・アーキテクチャ（ＵＭＡ）と呼ばれる。
【０００５】
プロセッサは多くの場合、内部キャッシュと共に構成され、ＳＭＰコンピュータ・システム内のプロセッサと共用バスとの間のキャッシュ階層には通常、１つまたは複数のキャッシュが含まれる。特定のメイン・メモリ・アドレスに存在するデータの複数のコピーをこれらのキャッシュに記憶することができる。特定のアドレスが所与の時間に１つのデータ値しか記憶しない共用メモリ・モデルを維持するために、共用バス・コンピュータ・システムはキャッシュ・コヒーレンシを使用する。一般的に言えば、特定のメモリ・アドレスに記憶されているデータに対する演算の効果がキャッシュ階層内のデータの各コピーに反映される場合、その演算はコヒーレントである。たとえば、特定のメモリ・アドレスに記憶されているデータを更新したときには、前のデータのコピーを記憶しているキャッシュにその更新を供給することができる。別法として、特定のメモリ・アドレスへのその後のアクセスによって、更新済みコピーがメイン・メモリから転送されるように、前のデータのコピーをキャッシュ内で無効化することができる。共用バス・システムの場合、通常、スヌープ・バス・プロトコルが使用される。共用バス上で実行される各コヒーレント・トランザクションは、キャッシュ内のデータと突き合わせて調べられる（あるいは「スヌープ」される）。影響を受けるデータのコピーが見つかった場合、コヒーレント・トランザクションに応答して、そのデータを含むキャッシュ・ラインの状態を更新することができる。
【０００６】
残念なことに、共用バス・アーキテクチャは、多重処理コンピュータ・システムの有用性を制限するいくつかの欠点を有する。バスはピーク帯域幅を利用することができる（たとえば、バスを介して転送できるバイト数／秒）。バスに追加プロセッサを取り付けると、プロセッサにデータおよび命令を供給するのに必要な帯域幅がピーク・バス帯域幅を超えることがある。いくつかのプロセッサが使用可能なバス帯域幅を待たなければならないので、プロセッサの帯域幅要件が使用可能なバス帯域幅を超えるとコンピュータ・システムの性能が影響を受ける。
【０００７】
また、共用バスにより多くのプロセッサを追加するとバスに対する容量負荷が増大し、場合によってはバスの物理長が増加する。容量負荷が増大しバス長が延びると、バスを横切って信号が伝搬する際の遅延が長くなる。伝搬遅延が長くなるので、トランザクションの実行時間が長くなる。したがって、より多くのプロセッサを追加するほど、バスのピーク帯域幅が減少する。
【０００８】
これらの問題は、プロセッサの動作周波数および性能が引き続き向上していることによってさらに深刻化する。より高い周波数およびより高度なプロセッサ・マイクロアーキテクチャによって性能が向上するので、帯域幅要件は、プロセッサの数が同じであっても前のプロセッサ世代より高くなる。したがって、前に多重処理コンピュータ・システムに十分な帯域幅を与えたバスが、より高性能のプロセッサを使用する同様なコンピュータ・システムには不十分であることがある。
【０００９】
多重処理コンピュータ・システム用の他の構造は、分散共用メモリ・アーキテクチャである。分散共用メモリ・アーキテクチャは、内部にプロセッサおよびメモリが存在する複数のノードを含む。複数のノードは、その間の結合されたネットワークを介して通信する。全体的に考えると、複数のノード内に含まれるメモリは、コンピュータ・システムの共用メモリを形成する。通常、ディレクトリを使用して、どのノードが特定のアドレスに対応するデータのキャッシュ・コピーを有するかが識別される。ディレクトリを調べることによってコヒーレンシ活動を生成することができる。
【００１０】
分散共用メモリ・システムは、スケーリング可能であり、共用バス・アーキテクチャの制限を解消する。多くのプロセッサ・アクセスはノード内で完了するので、通常、ノードがネットワーク上で有する帯域幅要件は、共用バス・アーキテクチャが共用バス上で与えなければならない帯域幅要件よりもずっと低い。ノードは、高いクロック周波数および帯域幅で動作し、必要に応じてネットワークにアクセスすることができる。ノードのローカル帯域幅に影響を与えずにネットワークに追加ノードを追加することができる。その代わり、ネットワーク帯域幅が影響を受ける。
【００１１】
分散共用メモリ・アーキテクチャを有する多重処理コンピュータ・システムは、その利点にもかかわらず、スピンロック動作のために性能が低下する恐れがある。一般に、スピンロック動作は、メモリの重大な領域に一度に１つの並行プロセスしかアクセスできないようにするプログラムによって使用されるソフトウェア・ロックに関連するものである。簡単なスピンロックから高度な待ち行列ベースのロックまで、様々なロック実施形態が実施されている。簡単なスピンロック実施形態は、後述するように、非常に集中的なトラフィックを生成する可能性があるが、依然としてコンピュータ・システム内で最も一般的に使用されているソフトウェア・ロックである。
【００１２】
スピンロック実施形態を使用するシステムでは通常、所与のプロセスがアトミック動作を実行して重大なメモリ領域へのアクセスを得る必要がある。たとえば、一般にアトミック試験及びセット動作が使用される。試験及びセット動作は、このメモリ領域に関連付けられたロック・ビットがクリアされているかどうかを判定し、かつこのロック・ビットをアトミックにセットするために実行される。すなわち、プロセスは、この試験によって、このメモリ領域に他のプロセスによるロックがないかどうかを判定することができ、セット動作によって、ロック・ビットがクリアされている場合にロックを行うことができる。ロック・ビットの試験によって、メモリ領域が現在ロックされていることが示された場合、プロセスは、ロック・ビットが、クリアされたことが検出されるまで連続的に読み取られる、ソフトウェア・ループを開始し、検出された時点で、アトミック試験及びセット動作を再開する。
【００１３】
スピンロックは、楽観的スピンロック・アルゴリズムまたは悲観的スピンロック・アルゴリズムを使用して実施することができる。楽観的スピンロックは、下記のアルゴリズムによって示される。
【００１４】
0003987162.tif 000002
【００１５】
上記で示した楽観的スピンロック・アルゴリズムでは、プロセスはまず、アクセスが求められているメモリ領域に対応するロック・ビットに対してアトミック試験及びセット動作を実行する。アトミック試験及びセット動作は書込みを含むので、共用メモリ・システムではリード・ツー・オウン（ＲＴＯ）動作とみなされる。したがって、システムは、アトミック試験及びセット動作に応答してロック・ビットを含むコヒーレンシ単位を修正状態にする。アトミック試験及びセット動作が失敗した場合、プロセスは、他のプロセスによってロック・ビットがクリアされるまでロック・ビットを反復的に読み取る。プロセスは次いで、アトミック試験及びセット動作を再開する。
【００１６】
悲観的スピンロックは、下記のアルゴリズムによって示される。
【００１７】
0003987162.tif 000003
【００１８】
悲観的スピンロック・アルゴリズムでは、プロセッサはまず、ロック・ビットがクリアされるまで、アクセスが求められているメモリ領域に対応するロック・ビットを反復的に読み取る。ロック・ビットの読取りは、共用メモリ・システムではリード・ツー・シェア動作とみなされる。プロセスは、読取り動作によってロック・ビットがクリアされていると判定すると、メモリ領域へのアクセスをロックし及びアクセスを得るためにアトミック試験及びセット動作を実行する。アトミック試験及びセット動作の実行時に試験が失敗した場合、プロセスは再び、ロック・ビットがクリアされるまでロック・ビットを反復的に読み取る。
【００１９】
どちらの実施形態でも、競合の対象であるスピンロックに対応するメモリ領域が解放されると、すべてのＮ個のスピン中のプロセッサが、キャッシュ・ライン向けのＲＴＳトランザクションを生成する。したがって、分散共用メモリ・アーキテクチャでは、ホーム・ノードでＮ個のＲＴＳ要求が待機し、一度に１つずつ処理される。
【００２０】
最初にデータ応答を受け取ったプロセッサは、ロックの解除を検出し、ＲＴＯトランザクションを生成する。ＲＴＯトランザクションは、ホーム・ノードで前のＲＴＳ要求の後に待機させられる。残りの各ＲＴＳ要求のプロセッサが同様に、ロックが解除されたことを示す表示を受け取るので、これらのプロセッサもそれぞれ、ＲＴＯトランザクションを生成する。第１のＲＴＯトランザクションが最終的にホーム・ノードによって処理されると、そのトランザクションを発行したプロセッサは、メモリ領域へのアクセスをロックしてアクセスを得る。したがって、残りのプロセッサのＲＴＯ要求に対応する試験及びセット動作は失敗し、これらのプロセッサはそれぞれ、スピン中のＲＴＳ要求を再開する。
【００２１】
【発明が解決しようとする課題】
上記の議論から、同じメモリ領域へのアクセスに対していくつかのスピン中のプロセッサが競合しているとき、ロックが解除されると比較的多数のトランザクション要求が行われることは明白である。このために、次の競合者がロックを得ることができるまでのロックの解除に関連する待ち時間は比較的長くなる（すなわち、ＲＴＳの待ち時間のＮ倍程度）。さらに、トランザクションの数が多いので、ロックの所有権がノード間で移行する最大頻度が制限される可能性がある。最後に、スピン中のプロセッサのうちでロックを達成するプロセッサは１つだけなので、残りのプロセッサの試験及びセット動作が失敗したときに、ネットワーク上で望ましくないリクエスト・ツー・オウン要求が行われる。ロックが記憶されているコヒーレンシ単位がプロセッサ間およびノード間で移行し、他のコピーが無効になるので望ましくない。そのため、ロックがセットされているにもかかわらず、ネットワーク・トラフィックはさらに増加する。したがって、ロックが解除される結果として行われるトランザクション要求の数を減少させるようにスピンロック中のマルチプロセッサ・システムの動作を最適化し、それによって全体的なシステム性能を向上させる機構が望ましい。
【００２２】
スピンロック動作中とその他の動作を使用するトランザクション中の両方に分散共用メモリ・アーキテクチャを使用する多重処理システムの重要な点は、トランザクション・スループットを最大にすることである。さらに、分散共用メモリ・アーキテクチャを使用するシステムは、競合状態のためのコヒーレンシ障害を回避するように構成すべきである。また、いくつかの状況では、多数のＣＰＵが同じキャッシュ・ラインにアクセスする。これはたとえば、多数のＣＰＵが同じコードを実行するスタートアップ時に起こる恐れがある。これは、すべての待機中のＣＰＵが、「待機」値を有する同じ変数上でスピンするある種のバリア同期実施形態でも起こる恐れがある。この変数が「ｇｏ」値に変化すると、ＣＰＵのすべてのキャッシュ内のローカル・コピーが無効化され、すべてのＣＰＵが、この新しい値を達成するためにグローバル読取り要求を発行する。そのような状況では、システムはＣＰＵに、アクセスが重ならないように順次この変数にアクセスするよう強制することができる。これは、１つのＣＰＵがこの変数にアクセスするための待ち時間に、このＣＰＵがアクセスを行う前に待機していたＣＰＵの数を乗じた値に等しい量だけ最後のＣＰＵのアクセスを遅延させる効果を有する。
【００２３】
【課題を解決するための手段】
上記で概略的に述べた問題は主として、本発明による、ＮＵＭＡモードでのリード・ツー・シェア・トランザクション用の機能拡張されたブロッキング機構を使用する多重処理コンピュータ・システムによって解決される。一実施態様では、多重処理コンピュータ・システムは、相互接続ネットワークによって相互接続された複数の処理ノードを含む。各処理ノードは、対称型多重処理（ＳＭＰ）バスを通じてメモリ・サブシステムおよびシステム・インタフェースに結合された複数の処理装置を含む。多重処理システムは、分散共用メモリ・アーキテクチャを形成する。各処理ノードのシステム・インタフェースは、ノードに関連付けられたコヒーレンシ単位に対応するコヒーレンシ情報のディレクトリを維持するホーム・エージェントを含む。ホーム・エージェントは、相互接続ネットワークを介して他の処理ノードから受け取ったトランザクション要求も処理する。ホーム・エージェントは、複数の要求を同時に処理するように構成される。同じコヒーレンシに対応する他のトランザクション要求がすでにホーム・エージェント制御装置によって処理されている場合に未処理のコヒーレント・トランザクション要求の処理を妨げるトランザクション・ブロッキング装置がホーム・エージェント制御装置に結合される。トランザクション・ブロッキング装置は、ＮＵＭＡ（非一様メモリ・アーキテクチャ）モードのリード・ツー・シェア・トランザクション要求の場合のいくつかの例外を除いて、すべてのコヒーレンシ・トランザクション要求をブロックするように構成される。ＮＵＭＡモードのリード・ツー・シェア・トランザクション要求が、ＮＵＭＡモードの他のリード・ツー・シェア・トランザクション要求をブロックしないようにトランザクション・ブロッキング装置を構成することによって、トランザクションをより迅速に完了することができ、バリア同期待ち時間を短縮することができる。前述の方式は、ＮＵＭＡモードの読取りストリームなど、データの「所有権」を移動させない他のトランザクション・タイプに適用することもできる。より一般的に言えば、あるノードのデータ所有権を変更させないトランザクション・タイプは、同じタイプの他のトランザクションをブロックしない。
【００２４】
概して、本発明は、多重処理コンピュータ・システムのホーム・ノード内で使用できる装置を企図するものである。この多重処理コンピュータ・システムは、分散共用メモリ・アーキテクチャを形成するネットワークによって相互接続された複数の処理ノードを含む。この装置は、複数の処理ノードからリード・ツー・オウン・トランザクション要求を受け取るように結合された第１の待ち行列と、複数の処理ノードからリード・ツー・シェア・トランザクション要求を受け取るように結合された第２の待ち行列とを備える。ホーム・エージェント制御装置は、リード・ツー・オウン・トランザクション要求およびリード・ツー・シェア・トランザクション要求を受け取るように結合され、第１の待ち行列によって記憶されているリード・ツー・オウン・トランザクション要求を処理し、かつ第２の待ち行列によって記憶されているリード・ツー・シェア・トランザクション要求を処理するように構成される。
【００２５】
本発明はさらに、分散共用メモリ・アーキテクチャを有する多重処理システム内のホーム・ノードでトランザクション要求を処理する方法を企図するものである。この方法は、ホーム・ノードでリード・ツー・シェア・トランザクション要求を受け取ることと、ホーム・ノードで、リード・ツー・シェア・トランザクション要求を受け取った後にリード・ツー・オウン・トランザクション要求を受け取ることと、ホーム・ノードが、リード・ツー・シェア・トランザクション要求を処理する前にリード・ツー・オウン・トランザクション要求を処理することとを含む。
【００２６】
本発明はさらに、多重処理コンピュータ・システムの他のノードからトランザクション要求を受け取るように構成された複数の記憶要素と、複数の記憶要素によって記憶されているトランザクション要求を受け取るように結合されたホーム・エージェント制御装置とを備える多重処理コンピュータ・システムのノード内で使用できるホーム・エージェントを企図するものである。ホーム・エージェント制御装置は、ノードが所与のリード・ツー・オウン・トランザクション要求を受け取る前に所与のリード・ツー・シェア・トランザクション要求を受け取った場合でも、その所与のリード・ツー・シェア・トランザクション要求を処理する前にその所与のリード・ツー・オウン・トランザクション要求を処理するように構成される。
【００２７】
本発明はさらに、非一様メモリ・アーキテクチャを形成するネットワークによって相互接続された複数の処理ノードを備える多重処理コンピュータ・システムを企図するものである。少なくとも１つの処理ノードは、複数の処理ノードからトランザクション要求を受け取るように結合された１つまたは複数の待ち行列と、トランザクション要求を受け取り、処理するように結合されたホーム・エージェント制御装置と、１つまたは複数の待ち行列およびホーム・エージェント制御装置に結合されたトランザクション・ブロッキング装置とを含む。トランザクション・ブロッキング装置は、共通のコヒーレンシ単位に対する他のトランザクション要求が現在、ホーム・エージェント制御装置によって処理されている場合に、選択されたトランザクションをブロックするように構成される。トランザクション・ブロッキング装置はさらに、特定のコヒーレンシ単位に対する第２のトランザクション要求が現在、ホーム・エージェント制御装置によって処理されており、第２のトランザクション要求によってその特定のコヒーレンシ単位が所有されることがなく、第２のトランザクション要求と所与のトランザクション要求が同じトランザクション・タイプのものである場合に、この特定のコヒーレンシ単位に対するこの所与のトランザクションを処理できるように構成される。
【００２８】
【発明の実施の形態】
次に、図１を参照すると、多重処理コンピュータ・システム１０の一実施形態のブロック図が示されている。コンピュータ・システム１０は、ポイント・ツー・ポイント・ネットワーク１４によって相互接続された複数のＳＭＰノード１２Ａないし１２Ｄを含む。本明細書で特定の参照符号とその後に続く文字で参照された要素は、集合的に参照符号のみで参照する。たとえば、ＳＭＰノード１２Ａないし１２Ｄを集合的にＳＭＰノード１２と呼ぶ。図の実施形態では、各ＳＭＰノード１２は、複数のプロセッサと、外部キャッシュと、ＳＭＰバスと、メモリと、システム・インタフェースとを含む。たとえば、ＳＭＰノード１２Ａは、プロセッサ１６Ａないし１６Ｂを含む複数のプロセッサと共に構成される。プロセッサ１６は外部キャッシュ１８に接続され、外部キャッシュ１８はさらにＳＭＰバス２０に結合される。また、メモリ２２およびシステム・インタフェース２４はＳＭＰバス２０に結合される。さらに、ＳＭＰバス２０に１つまたは複数の入出力（Ｉ／Ｏ）インタフェース２６を結合することができる。入出力インタフェース２６は、シリアル・ポートおよびパラレル・ポート、ディスク・ドライブ、モデム、プリンタなどの周辺装置とのインタフェースをとるために使用される。他のＳＭＰノード１２Ｂないし１２Ｄを同様に構成することができる。
【００２９】
一般的に言えば、コンピュータ・システム１０は、ネットワーク・トラフィックを最小限に抑え全体的な性能を向上させるように最適化される。各ＳＭＰノード１２のシステム・インタフェース２４は、システム・インタフェース２４がある種のＲＴＳトランザクション要求の後に、ＲＴＯトランザクション要求を受け取った場合でも、ＲＴＳトランザクション要求を処理する前にネットワーク１４を介して受け取ったＲＴＯトランザクション要求を処理するように優先付けするように構成される。一実施形態では、これは、ＲＴＳトランザクション要求を受け取る第２の待ち行列とは別の、ＲＴＯトランザクション要求を受け取る待ち行列をシステム・インタフェース２４内に設けることによって行われる。そのような実施形態では、システム・インタフェース２４は、第２の待ち行列内のすでに受け取ったある種の未処理のＲＴＳトランザクション要求を処理する前にＲＴＯ待ち行列内の未処理のＲＴＯトランザクション要求を処理するように構成される。
【００３０】
システム・インタフェース２４は、いくつかのトランザクション要求を並行して処理することができる。しかし、同じコヒーレンシ単位に対応する他のトランザクション要求が現在、システム・インタフェースによって処理されている場合に、特定のコヒーレンシ・トランザクションの処理を妨げるためにブロッキング機構が使用される。そのようなブロッキングは、リード・ツー・シェア（ＮＵＭＡモード）要求が他のリード・ツー・シェア（ＮＵＭＡモード）トランザクション要求をブロックしないという例外を除いて、すべてのトランザクション要求に対して行われる。
【００３１】
システム・インタフェース２４は、ＲＴＯ待ち行列内のネクストインラインＲＴＯトランザクション要求と第２の待ち行列内のネクストインライン・トランザクション要求を交互にピンポン方式で処理するように構成される。第２の待ち行列は、ＲＴＳトランザクション要求だけでなく、特にフラッシュ要求、割り込み要求、無効化要求など他のタイプの要求をバッファすることもできる。
【００３２】
スピンロック動作中は、特に、多数のプロセッサが、ロックされた同じメモリ領域へのアクセスを求めて競合する場合（すなわち、これらのプロセッサがそれぞれ、ＲＴＳトランザクション要求がそれぞれ生成されるスピンロック動作中であるので）、第２の待ち行列内で比較的多数のＲＴＳトランザクション要求が未処理になるという特徴がある。特定のプロセッサが、ロック解除を示すデータ応答を受け取ると、そのプロセッサは、ＲＴＯトランザクション要求を生成する。このＲＴＯトランザクション要求がシステム・インタフェース２４のＲＴＯ待ち行列に入れられ、かつ他のスピン中のプロセッサによって生成された多数の前のＲＴＳトランザクション要求が依然として第２の待ち行列内で順序正しく待機しているので、ＲＴＯトランザクション要求は、ＲＴＯ待ち行列のネクストインライン位置に比較的迅速に伝搬することができる。したがって、システム・インタフェース２４は、すでに受け取っているＲＴＳトランザクション要求の前にＲＴＯトランザクション要求を処理することができる。その結果、ＲＴＯトランザクション要求が完了したときに、他のスピン中のプロセッサは、ロック解除を検出せず、したがってＲＴＯトランザクション要求を生成することはない。そのため、ロックが記憶されているコヒーレンシ単位の不要な移行を回避することができる。さらに、コヒーレンシ単位の他のコピーの無効化も回避される。全体的なネットワーク・トラフィックが減少されるので、多重処理システムの全体的な性能を向上させることができる。
【００３３】
本明細書では、メモリ動作とは、データを発送元から宛先へ転送させる動作である。発送元または宛先、あるいはその両方は、開始側内の記憶位置でも、あるいはメモリ内の記憶位置でもよい。発送元または宛先は、メモリ内の記憶位置であるとき、メモリ動作と共に搬送されるアドレスを介して指定される。メモリ動作は、読取り動作でも、あるいは書込み動作でよい。逆に、書込み動作では、データが開始側内の発送元から開始側の外側の宛先へ転送される。読取り動作では、データが開始側の外側の発送元から開始側内の宛先へ転送される。図１に示したコンピュータ・システムでは、メモリ動作は、ＳＭＰバス２０上の１つまたは複数のトランザクションと、ネットワーク１４上の１つまたは複数のコヒーレンシ動作とを含むことができる。
【００３４】
各ＳＭＰノード１２は基本的に、メモリ２２を共用メモリとして有するＳＭＰシステムである。プロセッサ１６は、高性能プロセッサである。一実施形態では、各プロセッサ１６は、ＳＰＡＲＣプロセッサ・アーキテクチャのバージョン９に適合するＳＰＡＲＣプロセッサである。しかし、プロセッサ１６が任意のプロセッサ・アーキテクチャを使用できることに留意されたい。
【００３５】
通常、プロセッサ１６は、内部命令キャッシュと内部データ・キャッシュとを含む。したがって、外部キャッシュ１８はＬ２キャッシュと呼ばれる（レベル２を表す。内部キャッシュはレベル１キャッシュである）。プロセッサ１６が内部キャッシュと共に構成されていない場合、外部キャッシュ１８はレベル１キャッシュである。「レベル」の語が、特定のキャッシュがプロセッサ１６内の処理コアにどのくらい近接しているかを識別するために使用されることに留意されたい。レベル１は、処理コアに最も近く、レベル２は２番目に近く、以下同様である。外部キャッシュ１８は、それに結合されたプロセッサ１６から頻繁にアクセスされるメモリ・アドレスに迅速にアクセスする。外部キャッシュ１８が様々な特定のキャッシュ構成として構成できることに留意されたい。たとえば、外部キャッシュ１８によってセットアソシエーティブ構成または直接マップ構成を使用することができる。
【００３６】
ＳＭＰバス２０は、プロセッサ１６（キャッシュ１８を通じた通信）とメモリ２２とシステム・インタフェース２４と入出力インタフェース２６との間の通信に適応する。一実施形態では、ＳＭＰバス２０は、アドレス・バスおよび関連する制御信号、ならびにデータ・バスおよび関連する制御信号を含む。アドレス・バスとデータ・バスが別々のものなので、ＳＭＰバス２０上で分割トランザクション・バス・プロトコルを使用することができる。一般的に言えば、分割トランザクション・バス・プロトコルは、アドレス・バス上で行われるトランザクションが、データ・バス上で行われる並行トランザクションとは異なるものでよいプロトコルである。アドレスとデータを使用するトランザクションは、アドレス・バス上でアドレスおよび関連する制御情報が搬送されるアドレス・フェーズと、データ・バス上でデータが搬送されるデータ・フェーズとを含む。特定のアドレス・フェーズに対応するデータ・フェーズの前に、他のトランザクションに関する追加アドレス・フェーズまたは追加データ・フェーズ、あるいはその両方を開始することができる。アドレス・フェーズと対応するデータ・フェーズは、多数の方法で相関付けることができる。たとえば、データ・トランザクションをアドレス・トランザクションと同じ順序で行うことができる。別法として、トランザクションのアドレス・フェーズとデータ・フェーズを固有のタグを介して識別することができる。
【００３７】
メモリ２２は、プロセッサ１６によって使用されるデータおよび命令コードを記憶するように構成される。メモリ２２は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）を備えることが好ましい。ただし、任意のタイプのメモリを使用することができる。メモリ２２は、他のＳＭＰノード１２内の図示した同様なメモリと共に、分散共用メモリ・システムを形成する。分散共用メモリのアドレス空間の各アドレスは、そのアドレスのホーム・ノードと呼ばれる特定のノードに割り当てられる。ホーム・ノードとは異なるノード内のプロセッサは、ホーム・ノードのアドレスにあるデータにアクセスし、場合によってはデータをキャッシュすることができる。したがって、ＳＭＰノード１２どうしの間と、特定のＳＭＰノード１２Ａないし１２Ｄ内のプロセッサ１６とキャッシュ１８との間に、コヒーレンシが維持される。システム・インタフェース２４はノード間コヒーレンシを与え、それに対してＳＭＰバス２０上のスヌーピングはノード内コヒーレンシを与える。
【００３８】
システム・インタフェース２４は、ノード間コヒーレンシを維持するだけでなく、他のＳＭＰノード１２との間のデータ転送を必要とするＳＭＰバス２０上のアドレスを検出する。システム・インタフェース２４は、転送を実行し、トランザクションのための対応するデータをＳＭＰバス２０上に与える。図の実施形態では、システム・インタフェース２４はポイント・ツー・ポイント・ネットワーク１４に結合される。しかし、代替実施形態では他のネットワークを使用できることに留意されたい。ポイント・ツー・ポイント・ネットワークでは、ネットワーク上の各ノード間に個別の接続が存在する。特定のノードは、専用リンクを介して第２のノードと直接通信する。特定のノードは、第３のノードと通信するときは、第２のノードと通信するために使用したリンクとは異なるリンクを使用する。
【００３９】
図１では４つのＳＭＰノード１２が示されているが、任意の数のノードを使用するコンピュータ・システム１０の実施形態が企図されることに留意されたい。
【００４０】
図２Ａおよび２Ｂは、コンピュータ・システム１０の一実施形態によってサポートされる分散メモリ・アーキテクチャの概念図である。具体的には、図２Ａおよび２Ｂは、図１の各ＳＭＰノード１２がデータをキャッシュしメモリ・アクセスを実行する代替方法を示す。コンピュータ・システム１０がそのようなアクセスをサポートする方法に関する詳細については、下記で詳しく説明する。
【００４１】
次に、図２Ａを参照すると、コンピュータ・システム１０の一実施形態によってサポートされる第１のメモリ・アーキテクチャ３０を示す論理図が示されている。アーキテクチャ３０は、複数のプロセッサ３２Ａないし３２Ｄと、複数のキャッシュ３４Ａないし３４Ｄと、複数のメモリ３６Ａないし３６Ｄと、相互接続ネットワーク３８とを含む。複数のメモリ３６は分散共用メモリを形成する。アドレス空間内の各アドレスは、１つのメモリ３６内の位置に対応する。
【００４２】
アーキテクチャ３０は非一様メモリ・アーキテクチャ（ＮＵＭＡ）である。ＮＵＭＡアーキテクチャでは、第１のメモリ・アドレスにアクセスするのに必要な時間の長さが、第２のメモリ・アドレスにアクセスするのに必要な時間の長さと大幅に異なることがある。アクセス時間は、アクセスの開始側と、アクセスされたデータを記憶しているメモリ３６Ａないし３６Ｄの位置に依存する。たとえば、プロセッサ３２Ａが、メモリ３６Ａに記憶されている第１のメモリ・アドレスにアクセスする場合、このアクセス時間は、メモリ３６Ｂないし３６Ｄのうちの１つに記憶されている第２のメモリ・アドレスへのアクセスのアクセス時間よりもずっと短い。すなわち、プロセッサ３２Ａによるメモリ３６Ａへのアクセスはローカルに（たとえば、ネットワーク３８上での転送なしに）完了することができ、それに対してメモリ３６Ｂへのプロセッサ３２Ａアクセスはネットワーク３８を介して実行される。通常、ネットワーク３８を通じたアクセスは、ローカル・メモリ内で完了するアクセスよりも低速である。たとえば、ローカル・アクセスは数百ナノ秒で完了することができ、それに対してネットワークを介したアクセスは数マイクロ秒を占有する可能性がある。
【００４３】
リモート・ノードに記憶されているアドレスに対応するデータは任意のキャッシュ３４にキャッシュすることができる。しかし、キャッシュ３４がそのようなリモート・アドレスに対応するデータを放棄した後、リモート・アドレスへのその後のアクセスはネットワーク３８上での転送を介して完了する。
【００４４】
ＮＵＭＡアーキテクチャは、主として特定のローカル・メモリに対応するアドレスを使用するソフトウェア・アプリケーションに優れた性能特性を付与することができる。一方、より多くのランダム・アクセス・パターンを有しメモリ・アクセスを特定のローカル・メモリ内のアドレスに制限しないソフトウェア・アプリケーションは、特定のプロセッサ３２がリモート・ノードへの反復アクセスを実行するときに大量のネットワーク・トラフィックを経験する。
【００４５】
次に図２Ｂを参照すると、図１のコンピュータ・システム１０によってサポートされる第２のメモリ・アーキテクチャ４０を示す論理図が示されている。アーキテクチャ４０は、複数のプロセッサ４２Ａないし４２Ｄと、複数のキャッシュ４４Ａないし４４Ｄと、複数のメモリ４６Ａないし４６Ｄと、ネットワーク４８とを含む。しかし、メモリ４６はキャッシュ４４とネットワーク４８との間に論理的に結合される。メモリ４６は、より大規模なキャッシュ（たとえば、レベル３のキャッシュ）として働き、対応するプロセッサ４２からアクセスされるアドレスを記憶する。メモリ４６は、対応するプロセッサ４２から作用を受けているデータを「アトラクトする」と言われる。図２Ａに示したＮＵＭＡアーキテクチャとは異なり、アーキテクチャ４０は、ローカル・プロセッサがリモート・データにアクセスする際にリモート・データをローカル・メモリに記憶することによってネットワーク４８上のアクセスの数を低減させる。
【００４６】
アーキテクチャ４０をキャッシュ専用メモリ・アーキテクチャ（ＣＯＭＡ）と呼ぶ。メモリ４６の組合せで形成された分散共用メモリ内の複数の位置は、特定のアドレスに対応するデータを記憶することができる。特定の記憶位置に特定のアドレスの永久的なマッピングが割り当てられることはない。その代わり、特定のアドレスに対応するデータを記憶する位置は、その特定のアドレスにアクセスするプロセッサ４２に基づいて動的に変化する。逆に、ＮＵＭＡアーキテクチャでは、メモリ４６内の特定の記憶位置が特定のアドレスに割り当てられる。アーキテクチャ４０は、アーキテクチャ上で実行中のアプリケーションによって実行されるメモリ・アクセス・パターンに調整し、メモリ４６どうしの間でコヒーレンシが維持される。
【００４７】
好ましい実施形態では、コンピュータ・システム１０は、図２Ａおよび２Ｂに示した両方のメモリ・アーキテクチャをサポートする。具体的には、メモリ・アドレスに、１つのＳＭＰノード１２Ａないし１２ＤからＮＵＭＡ方式でアクセスし、同時に他のＳＭＰノード１２Ａないし１２ＤからＣＯＭＡ方式でアクセスすることができる。一実施形態では、ＳＭＰバス２０上のアドレスのあるビットが、他のＳＭＰノード１２を、与えられたアドレスのホーム・ノードとして識別している場合に、ＮＵＭＡアクセスが検出される。そうでない場合は、ＣＯＭＡアクセスが仮定される。他の詳細を下記に与える。
【００４８】
一実施形態では、ＣＯＭＡアーキテクチャは、ハードウェア技法とソフトウェア技法の組合せを使用して実施される。ハードウェアは、ページのローカルにキャッシュされたコピー間のコヒーレンシを維持し、ソフトウェア（たとえば、コンピュータ・システム１０で使用されるオペレーティング・システム）は、キャッシュされたページを割り振り、割り振り解除する責任を負う。
【００４９】
図３は、一般に、図１に示したＳＭＰノード１２Ａに適合する、ＳＭＰノード１２Ａの一実施形態の詳細を示す。他のノード１２も同様に構成することができる。図１の各ＳＭＰノード１２の特定の代替実施形態も可能であることに留意されたい。図３に示したＳＭＰノード１２Ａの実施形態は、サブノード５０Ａやサブノード５０Ｂなど複数のサブノードを含む。各サブノード５０は、２つのプロセッサ１６および対応するキャッシュ１８と、メモリ部分５６と、アドレス・コントローラ５２と、データ・コントローラ５４とを含む。サブノード５０内のメモリ部分５６は集合的に、図１のＳＭＰノード１２Ａのメモリ２２を形成する。他のサブノード（図示せず）はさらに、ＳＭＰバス２０に結合され入出力インタフェース２６を形成する。
【００５０】
図３に示したように、ＳＭＰバス２０は、アドレス・バス５８とデータ・バス６０とを含む。アドレス・コントローラ５２はアドレス・バス５８に結合され、データ・コントローラ５４はデータ・バス６０に結合される。図３は、システム・インタフェース論理ブロック６２と、変換記憶域６４と、ディレクトリ６６と、メモリ・タグ（ＭＴＡＧ）６８とを含むシステム・インタフェース２４も示す。論理ブロック６２は、アドレス・バス５８とデータ・バス６０の両方に結合され、下記で詳しく説明するようにある種の状況でアドレス・バス５８上で無視信号７０をアサートする。論理ブロック６２は、変換記憶域６４、ディレクトリ６６、ＭＴＡＧ６８、ネットワーク１４にも結合される。
【００５１】
図３の実施形態では、各サブノード５０は、ＳＭＰバス２０が配置されたバックプレーンに挿入できるプリント回路ボード上に構成される。このように、ＳＭＰノード１２内に含まれるプロセッサまたは入出力インタフェース２６あるいはその両方の数は、サブノード５０を挿入しあるいは取り外すことによって変更することができる。たとえば、コンピュータ・システム１０は最初、少数のサブノード５０と共に構成することができる。コンピュータ・システム１０のユーザが必要とするコンピューティング・パワーが増大するにつれて必要に応じて追加サブノード５０を追加することができる。
【００５２】
アドレス・コントローラ５２は、キャッシュ１８とＳＭＰ２０のアドレス部分との間のインタフェースを形成する。図の実施形態では、アドレス・コントローラ５２は、出力待ち行列７２といくつかの入力待ち行列７４とを含む。出力待ち行列７２は、アドレス・コントローラ５２がアドレス・バス５８へのアクセスを許可されるまで出力待ち行列に接続されたプロセッサからのトランザクションをバッファする。アドレス・コントローラ５２は、出力待ち行列７２に記憶されているトランザクションを、それらが出力待ち行列７２に入れられた順に実行する（すなわち、出力待ち行列７２はＦＩＦＯ待ち行列である）。アドレス・コントローラ５２によって実行されるトランザクション、ならびにキャッシュ１８およびプロセッサ１６の内部のキャッシュによってスヌープされるアドレス・バス５８から受け取るトランザクションは、入力待ち行列７４に入れられる。
【００５３】
出力待ち行列７２と同様に、入力待ち行列７４はＦＩＦＯ待ち行列である。すべてのアドレス・トランザクションは、各サブノード５０の入力待ち行列７４（場合によっては、アドレス・トランザクションを開始したサブノード５０の入力待ち行列７４内）に記憶される。したがって、アドレス・トランザクションは、スヌーピングのために、アドレス・トランザクションがアドレス・バス５８上で行われる順にキャッシュ１８およびプロセッサ１６に与えられる。トランザクションがアドレス・バス５８上で行われる順序は、ＳＭＰノード１２Ａの順序である。しかし、完全なシステムは１つのグローバル・メモリ順序を有することが予期される。このように順序が予期されるため、ネットワーク１４上の動作の順序によってグローバル順序を確立する必要があるので、コンピュータ・システム１０が使用するＮＵＭＡアーキテクチャとＣＯＭＡアーキテクチャの両方で問題が生じる。２つのノードがあるアドレスに対するトランザクションを実行する場合、そのアドレスのホーム・ノードで対応するコヒーレンシ動作が行われる順序は、各ノード内で見られる２つのトランザクションの順序を定義する。たとえば、同じアドレスに対して２つの書込みトランザクションが実行される場合、そのアドレスのホーム・ノードに２番目に到着する書込み動作は２番目に完了する書込みトランザクションであるべきである（すなわち、両方の書込みトランザクションによって更新されるバイト位置は、両方のトランザクションの完了時に第２の書込みトランザクションから与えられる値を記憶する）。しかし、第２のトランザクションを実行するノードは実際には、ＳＭＰバス２０上で最初に第２のトランザクションを行わせることができる。無視信号７０によって、ＳＭＰノード１２の残りの部分が第２のトランザクションに反応することなしに、第２のトランザクションをシステム・インタフェース２４へ転送することができる。
【００５４】
したがって、システム・インタフェース論理ブロック６２は、アドレス・コントローラ５２の出力待ち行列／入力待ち行列構造によって課される順序付け制約と共に効果的に動作するために、無視信号７０を使用する。アドレス・バス５８上にトランザクションが与えられ、システム・インタフェース論理ブロック６２が、このトランザクションに応答してリモート・トランザクションを実行すべきであることを検出すると、論理ブロック６２は無視信号７０をアサートする。あるトランザクションに対して無視信号７０をアサートすると、アドレス・コントローラ５２は入力待ち行列７４へのそのトランザクションの格納を抑制する。したがって、無視されたトランザクションに続いて行われ、ＳＭＰノード１２Ａ内でローカルに完了する他のトランザクションは、入力待ち行列７４の順序付け規則を破らずに、無視されたトランザクションに対して所定の順序とは異なる順序で完了することができる。具体的には、ネットワーク１４上のコヒーレンシ活動に応答してシステム・インタフェース２４によって実行されるトランザクションを、無視されたトランザクションの後に続けて実行し完了することができる。リモート・トランザクションから応答を受け取ったときに、システム・インタフェース論理ブロック６２によって、無視されたトランザクションをアドレス・バス５８上で再発行することができる。それによって、トランザクションは、入力待ち行列７４に入れられ、再発行時に行われるトランザクションと共に順序正しく完了することができる。
【００５５】
一実施形態では、特定のアドレス・コントローラ５２からのトランザクションが無視された後、その特定のアドレス・コントローラ５２からのその後のコヒーレント・トランザクションも無視される。特定のプロセッサ１６からのトランザクションは、アドレス・バス５８上に与えられることによって課される順序付け要件にはかかわらず、互いに重要な順序付け関係を有することができる。たとえば、トランザクションは、ＳＰＡＲＣアーキテクチャに含まれるＭＥＭＢＡＲ命令などのメモリ同期命令によって他のトランザクションから分離することができる。プロセッサ１６は、トランザクションを、それらが互いに実行される順に搬送する。トランザクションは、出力待ち行列７２内で順序付けされ、したがって、特定の出力待ち行列７２から発行されるトランザクションは順序正しく実行されるはずである。特定のアドレス・コントローラ５２からのその後のトランザクションを無視することによって、特定の出力待ち行列７２に関するインオーダー規則を保存することができる。さらに、特定のプロセッサからのすべてのトランザクションを順序付けなくて済むことに留意されたい。しかし、アドレス・バス５８上で、どのトランザクションを順序付けなければならないかと、どのトランザクションを順序付けなくてもよいかを判定することは困難である。したがって、この実施形態で、論理ブロック６２は特定の出力待ち行列７２からのすべてのトランザクションの順序を維持する。この規則の例外を許容するサブノード５０の他の実施形態が可能であることに留意されたい。
【００５６】
データ・コントローラ５４は、データ・バス６０、メモリ部分５６、キャッシュ１８との間でデータをルーティングする。データ・コントローラ５４は、アドレス・コントローラ５２と同様な入力待ち行列と出力待ち行列とを含むことができる。一実施形態では、データ・コントローラ５４は、バイト・スライス・バス構成の複数の物理装置を使用する。
【００５７】
図３に示したプロセッサ１６は、メモリ管理装置（ＭＭＵ）７６Ａないし７６Ｂを含む。ＭＭＵ７６は、プロセッサ１６上で実行される命令コードによって生成されたデータ・アドレスと、命令アドレスに対して、仮想アドレス／物理アドレス変換を実行する。命令の実行に応答して生成されるアドレスは仮想アドレスである。言い換えれば、仮想アドレスは、命令コードのプログラマによって作成されるアドレスである。仮想アドレスは（ＭＭＵ７６内で具体化される）アドレス変換機構を通過し、アドレス変換機構から対応する物理アドレスが作成される。物理アドレスは、メモリ２２内の記憶位置を識別する。
【００５８】
アドレス変換は多数の理由で実行される。たとえば、アドレス変換機構を使用して、あるメモリ・アドレスに対する特定のコンピューティング・タスクのアクセスを許可または拒否することができる。このように、あるコンピューティング・タスク内のデータおよび命令は、他のコンピューティング・タスクのデータおよび命令から分離される。また、コンピューティング・タスクのデータおよび命令の各部分は、ハード・ディスク・ドライブに「ページアウト」することができる。ある部分がページアウトされると、その変換は無効化される。コンピューティング・タスクによるその部分へのアクセス時には、変換が失敗しているために割り込みが行われる。この割り込みによって、オペレーティング・システムは、ハード・ディスク・ドライブから対応する情報を検索することができる。このように、メモリ２２内の実際のメモリよりも多くの仮想メモリを使用することができる。仮想メモリの他の多くの用途が良く知られている。
【００５９】
再び、図１に示したコンピュータ・システム１０を、図３に示したＳＭＰノード１２Ａ実施形態と共に参照すると分かるように、ＭＭＵ７６によって算出される物理アドレスは、プロセッサ１６が配置されたＳＭＰノード１２に関連付けられたメモリ２２内の位置を定義するローカル物理アドレス（ＬＰＡ）である。ＭＴＡＧ６８は、メモリ２２内の各「コヒーレンシ単位」ごとにコヒーレンシ状態を記憶する。ＳＭＰバス２０上でアドレス変換が実行されると、システム・インタフェース論理ブロック６２は、アクセスされたコヒーレンシ単位に関する、ＭＴＡＧ６８に記憶されているコヒーレンシ状態を調べる。ＳＭＰノード１２がこのアクセスを実行するのに十分な、このコヒーレンシ単位へのアクセス権を有することをコヒーレンシ状態が示している場合、アドレス変換は続行する。しかし、トランザクションを完了する前にコヒーレンシ活動を実行すべきであることをコヒーレンシ状態が示している場合、システム・インタフェース論理ブロック６２は無視信号７０をアサートする。論理ブロック６２は、ネットワーク１４上でコヒーレンシ動作を実行し、適当なコヒーレンシ状態を得る。適当なコヒーレンシ状態が得られると、論理ブロック６２は、無視されたトランザクションをＳＭＰバス２０上で再発行する。それに続いて、トランザクションが完了する。
【００６０】
一般的に言えば、特定の記憶位置（たとえば、キャッシュまたはメモリ２２）でコヒーレンシ単位に関して維持されるコヒーレンシ状態は、そのＳＭＰノード１２でのコヒーレンシ単位へのアクセス権を示す。このアクセス権は、コヒーレンシ単位の妥当性と、そのＳＭＰノード１２内でコヒーレンシ単位のコピーに対して与えられている読取り／書込み許可を示す。一実施形態では、コンピュータ・システム１０によって使用されるコヒーレンシ状態は、修正、所有、共用、無効である。修正状態は、ＳＭＰノード１２が対応するコヒーレンシ単位を更新したことを示す。したがって、他のＳＭＰノード１２はこのコヒーレンシ単位のコピーを有さない。また、修正されたコヒーレンシ単位は、ＳＭＰノード１２から放棄されると、再びホーム・ノードに記憶される。所有状態は、このコヒーレンシ単位に対してＳＭＰノード１２が責任を負うが、他のＳＭＰノード１２がコピーを共用している可能性があることを示す。この場合も、コヒーレンシ単位は、ＳＭＰノード１２から放棄されると、再びホーム・ノードに記憶される。共用状態は、ＳＭＰノード１２がコヒーレンシ単位を読み取ることはできるが、所有状態を得ないかぎり更新することはできないことを示す。また、他のＳＭＰノード１２もこのコヒーレンシ単位のコピーを有する可能性がある。最後に、無効状態は、ＳＭＰノード１２がコヒーレンシ単位のコピーを有さないことを示す。一実施形態では、修正状態は、書込み許可を示すが、無効状態を除く状態は、対応するコヒーレンシ単位への読取り許可を示す。
【００６１】
本明細書では、コヒーレンシ単位は、コヒーレンシのために単位とみなされるメモリのいくつかの連続バイトである。たとえば、コヒーレンシ単位内の１バイトが更新された場合、コヒーレンシ単位全体が更新されたとみなされる。特定の一実施形態では、コヒーレンシ単位はキャッシュ・ラインであり、連続６４バイトを備える。しかし、コヒーレンシ単位が任意の数のバイトを備えることができることが理解されよう。
【００６２】
システム・インタフェース２４は、変換記憶域６４を使用してローカル物理アドレスからグローバル・アドレス（ＧＡ）への変換を記憶する変換機構も含む。グローバル・アドレス内のあるビットは、そのグローバル・アドレスに関するコヒーレンシ情報が記憶されているアドレスのホーム・ノードを識別する。たとえば、コンピュータ・システム１０の実施形態は、図１のＳＭＰノードなど４つのＳＭＰノード１２を使用することができる。そのような実施形態では、グローバル・アドレスの２ビットがホーム・ノードを識別する。グローバル・アドレスの最上位部分のビットはホーム・ノードを識別するために使用されることが好ましい。同じビットが、ローカル物理アドレスではＮＵＭＡアクセスを識別するために使用される。ＬＰＡのビットが、ローカル・ノードがホーム・ノードではないことを示す場合、そのＬＰＡはグローバル・アドレスであり、トランザクションはＮＵＭＡモードで実行される。したがって、オペレーティング・システムは、ＮＵＭＡタイプ・ページの場合はＭＭＵ７６にグローバル・アドレスを置く。逆に、オペレーティング・システムは、ＣＯＭＡタイプ・ページの場合にはＭＭＵ７６にＬＰＡを置く。ＬＰＡが、ＧＡに等しくてよい（ホームが、ＬＰＡが与えられたノードのメモリ２２内にある、ＮＵＭＡアドレスならびにグローバル・アドレスの場合）ことに留意されたい。また、ＬＰＡは、他のＳＭＰノード１２にホームを有するデータのコピーを記憶するために使用される記憶位置を識別するときはＧＡに変換することができる。
【００６３】
特定のホーム・ノードのディレクトリ６６は、どのＳＭＰノード１２が、コピー間のコヒーレンシが維持できるようにホーム・ノードに割り当てられた所与のグローバル・アドレスに対応するデータのコピーを有するかを識別する。また、ホーム・ノードのディレクトリ６６は、コヒーレンシ単位を所有するＳＭＰノード１２を識別する。したがって、キャッシュ１８とプロセッサ１６との間のローカル・コヒーレンシはスヌーピングを介して維持され、それに対してシステム・ワイド（またはグローバル）コヒーレンシはＭＴＡＧ６８およびディレクトリ６６を使用して維持される。ディレクトリ６６は、ＳＭＰノード１２Ａに割り当てられた（すなわち、ＳＭＰノード１２Ａがホーム・ノードである）コヒーレンシ単位に対応するコヒーレンシ情報を記憶する。
【００６４】
図３の実施形態では、ディレクトリ６６およびＭＴＡＧ６８が各コヒーレンシ単位ごとに情報を記憶することに留意されたい。逆に、変換記憶域６４は、ページに関して定義されたローカル物理／グローバル変換を記憶する。ページは、複数のコヒーレンシ単位を含み、通常、サイズが数キロバイト、あるいは場合によっては数メガバイトである。
【００６５】
したがって、ソフトウェアは、ページごとにローカル物理アドレス／グローバル・アドレス変換を作成する（それによって、リモートに記憶されているグローバル・ページのコピーを記憶するローカル・メモリ・ページを割り振る）。したがって、メモリ２２のブロックはページごとにも特定のグローバル・アドレスに割り振られる。しかし、前述のように、コヒーレンシ状態およびコヒーレンシ活動はコヒーレンシ単位上で実行される。したがって、メモリの特定のグローバル・アドレスにページが割り振られたときに、ページに対応するデータは必ずしも、割り振られたメモリへ転送されるわけではない。その代わり、プロセッサ１６がページ内の様々なコヒーレンシ単位にアクセスすると、それらのコヒーレンシ単位はコヒーレンシ単位の所有者から転送される。このように、ＳＭＰノード１２Ａから実際にアクセスされたデータは、対応するメモリ２２へ転送される。ＳＭＰノード１２Ａからアクセスされないデータは転送できず、そのため、メモリ２２内のページの割り振り時にデータのページを転送する実施形態と比べてネットワーク１４上の全体的な帯域幅使用度が低減する。
【００６６】
一実施形態では、変換記憶域６４、またはディレクトリ６６、またはＭＴＡＧ６８、あるいはそれらの組合せはそれぞれ、関連する変換、ディレクトリ、ＭＴＡＧ情報の一部しか記憶しないキャッシュでよいことに留意されたい。変換、ディレクトリ、ＭＴＡＧ情報の全体は、メモリ２２内のテーブルまたは専用メモリ記憶域（図示せず）に記憶される。アクセスに必要な情報が、対応するキャッシュにない場合、テーブルはシステム・インタフェース２４からアクセスされる。
【００６７】
次に、図４を参照すると、例示的なディレクトリ・エントリ７１が示されている。ディレクトリ・エントリ７１は、図３に示したディレクトリ６６の一実施形態によって使用することができる。ディレクトリ６６の他の実施形態は、異なるディレクトリ・エントリを使用することができる。ディレクトリ・エントリ７１は、有効ビット７３と、書き直しビット７５と、所有者フィールド７７と、共用者フィールド７９とを含む。ディレクトリ・エントリ７１は、ディレクトリ・エントリのテーブル内に存在し、対応するコヒーレンシ単位を識別するグローバル・アドレスを介してテーブル内に配置される。具体的には、コヒーレンシ単位に関連付けられたディレクトリ・エントリ７１は、コヒーレンシ単位を識別するグローバル・アドレスで形成されたオフセット位置にあるディレクトリ・エントリのテーブル内に記憶される。
【００６８】
有効ビット７３は、セットされると、ディレクトリ・エントリ７１が有効である（すなわち、そのディレクトリ・エントリ７１は、対応するコヒーレンシ単位に関するコヒーレンシ情報を記憶している）ことを示す。有効ビット７３は、クリアされると、そのディレクトリ・エントリ７１が無効であることを示す。
【００６９】
所有者フィールド７７は、１つのＳＭＰノード１２をコヒーレンシ単位の所有者として識別する。所有側ＳＭＰノード１２Ａないし１２Ｄは、コヒーレンシ単位を修正状態と所有状態のどちらかで維持する。通常、所有側ＳＭＰノード１２Ａないし１２Ｄは、コヒーレンシ単位を修正状態で得る（下記の図１５を参照されたい）。それに続いて、所有側ＳＭＰノード１２Ａないし１２Ｄは、コヒーレンシ単位のコピーを他のＳＭＰノード１２Ａないし１２Ｄに与える際に所有状態に遷移することができる。他のＳＭＰノード１２Ａないし１２Ｄはコヒーレンシ単位を共用状態で得る。一実施形態では、所有者フィールド７７は、４つのＳＭＰノード１２Ａないし１２Ｄのうちの１つをコヒーレンシ単位の所有者として識別するようにコード化された２つのビットを備える。
【００７０】
共用者フィールド７９は、各ＳＭＰノード１２Ａないし１２Ｄに割り当てられた１つのビットを含む。ＳＭＰノード１２Ａないし１２Ｄがコヒーレンシ単位の共用コピーを維持している場合、共用者フィールド７９内の対応するビットがセットされる。逆に、ＳＭＰノード１２Ａないし１２Ｄがコヒーレンシ単位の共用コピーを維持していない場合、共用者フィールド７９内の対応するビットはクリアされる。このように、共用者フィールド７９は、図１のコンピュータ・システム１０内に存在するコヒーレンシ単位のすべての共用コピーを示す。
【００７１】
書き直しビット７５は、セットされると、所有者フィールド７７を介してコヒーレンシ単位の所有者として識別されたＳＭＰノード１２Ａないし１２Ｄがコヒーレンシ単位の更新済みコピーをホームＳＭＰノード１２に書き込んだことを示す。ビット７５は、クリアされると、所有側ＳＭＰノード１２Ａないし１２Ｄがコヒーレンシ単位の更新済みコピーをホームＳＭＰノード１２Ａないし１２Ｄに書き込んでいないことを示す。
【００７２】
次に図５を参照すると、システム・インタフェース２４の一実施形態のブロック図が示されている。図５に示したように、システム・インタフェース２４は、ディレクトリ６６と、変換記憶域６４と、ＭＴＡＧ６８とを含む。変換記憶域６４は、グローバル・アドレス／ローカル物理アドレス（ＧＡ２ＬＰＡ）変換装置８０およびローカル物理アドレス／グローバル・アドレス（ＬＰＡ２ＧＡ）変換装置８２として示されている。
【００７３】
システム・インタフェース２４は、ＳＭＰバス２０またはネットワーク１４上で実行すべきトランザクションを記憶するための入力待ち行列と出力待ち行列も含む。具体的には、図の実施形態では、システム・インタフェース２４は、ヘッダ・パケットをネットワーク１４との間でバッファするための入力ヘッダ待ち行列８４と出力ヘッダ待ち行列８６とを含む。ヘッダ・パケットは、実行すべき動作を識別し、その後に続くデータ・パケットの数およびフォーマットを指定する。出力ヘッダ待ち行列８６は、ネットワーク１４上で送るべきヘッダ・パケットをバッファし、入力ヘッダ待ち行列８４は、システム・インタフェース２４が、受け取ったヘッダ・パケットを処理するまで、ネットワーク１４から受け取ったヘッダ・パケットをバッファする。同様に、データ・パケットは、データがそれぞれ、ＳＭＰデータ・バス６０およびネットワーク１４上で転送されるまで入力データ待ち行列８８および出力データ待ち行列９０にバッファされる。
【００７４】
ＳＭＰ出力待ち行列９２、ＳＭＰ入力待ち行列９４、ＳＭＰ入出力入力待ち行列（ＰＩＱ）９６は、アドレス・バス５８との間でアドレス・トランザクションをバッファするために使用される。ＳＭＰ出力待ち行列９２は、アドレス・バス５８上のシステム・インタフェース２４から与えられるトランザクションをバッファする。無視されたトランザクションに関するコヒーレンシ活動の完了に応答して待機させられた再発行トランザクションは、ＳＭＰ出力待ち行列９２にバッファされる。また、ネットワーク１４から受け取ったコヒーレンシ活動に応答して生成されたトランザクションは、ＳＭＰ出力待ち行列９２にバッファされる。ＳＭＰ入力待ち行列９４は、システム・インタフェース２４によって処理されるコヒーレンシ関連トランザクションを記憶する。逆にＳＭＰ  ＰＩＱ９６は、他のＳＭＰノード１２に存在する入出力インタフェースへ搬送される入出力トランザクションを記憶する。入出力トランザクションは一般に、非コヒーレントとみなされ、したがってコヒーレンシ活動を生成しない。
【００７５】
ＳＭＰ入力待ち行列９４およびＳＭＰ  ＰＩＱ９６は、トランザクション・フィルタ９８から、待機させるべきトランザクションを受け取る。トランザクション・フィルタ９８はＭＴＡＧ６８およびＳＭＰアドレス・バス５８に結合される。トランザクション・フィルタ９８は、他のＳＭＰノード１２上の入出力インタフェースを識別する入出力トランザクションをアドレス・バス５８上で検出した場合、そのトランザクションをＳＭＰ  ＰＩＱ９６に入れる。ＬＰＡアドレスへのコヒーレント・トランザクションがトランザクション・フィルタ９８によって検出された場合、ＭＴＡＧ６８から得た対応するコヒーレンシ状態が調べられる。トランザクション・フィルタ９８は、コヒーレンシ状態に応じて、無視信号７０をアサートすることができ、コヒーレンシ・トランザクションをＳＭＰ入力待ち行列９４で待機させることができる。コヒーレント・トランザクションを実行するのに十分な、コヒーレンシ単位へのアクセス権が、ＳＭＰノード１２Ａによって維持されていないことをＭＴＡＧ６８が示している場合には、無視信号７０がアサートされ、コヒーレンシ・トランザクションが待機させられる。逆に、ＳＭＰノード１２Ａによって十分なアクセス権が維持されていることをＭＴＡＧ６８が示している場合、無視信号７０がアサート解除されコヒーレンシ・トランザクションは生成されない。
【００７６】
ＳＭＰ入力待ち行列９４およびＳＭＰ  ＰＩＱ９６からのトランザクションは、システム・インタフェース２４内の要求エージェント１００によって処理される。ＬＰＡ２ＧＡ変換装置８２は、要求エージェント１００による動作の前に、トランザクションのアドレス（ＬＰＡアドレスである場合）を、ＳＭＰアドレス・バス５８上に与えられるローカル物理アドレスから、対応するグローバル・アドレスに変換する。要求エージェント１００は次いで、グローバル・アドレスによって識別されたホーム・ノードへ送られる特定のコヒーレンシ要求を指定するヘッダ・パケットを生成する。このコヒーレンシ要求は出力ヘッダ待ち行列８６に入れられる。それに続いて、コヒーレンシ応答が入力ヘッダ待ち行列８４で受け取られる。要求エージェント１００は、入力ヘッダ待ち行列８４から得たコヒーレンシ応答を処理し、場合によっては（下記で説明するように）ＳＭＰ出力待ち行列９２に関する再発行トランザクションを生成する。
【００７７】
システム・インタフェース２４には、ホーム・エージェント１０２とスレーブ・エージェント１０４とが含まれる。ホーム・エージェント１０２は、入力ヘッダ待ち行列８４から受け取ったコヒーレンシ要求を処理する。ホーム・エージェント１０２は、特定のグローバル・アドレスに関してディレクトリ６６に記憶されているコヒーレンシ情報から、他のＳＭＰノード１２内の１つまたは複数のスレーブ・エージェントへコヒーレンシ・デマンドを送るべきかどうかを判定する。一実施形態では、ホーム・エージェント１０２は、影響を受けるコヒーレンシ単位に対応するコヒーレンシ情報をブロックする。言い換えれば、そのコヒーレンシ単位に関連するその後の要求は、コヒーレンシ要求に対応するコヒーレンシ活動が完了するまで実行されない。一実施形態によれば、ホーム・エージェント１０２は、（入力ヘッダ待ち行列８４を介して）コヒーレンシ要求を開始した要求エージェントからコヒーレンシ完了を受け取る。コヒーレンシ完了は、コヒーレンシ活動が完了したことを示す。ホーム・エージェント１０２は、コヒーレンシ完了を受け取ると、影響を受けるコヒーレンシ単位に対応するコヒーレンシ情報上のブロックを削除する。コヒーレンシ情報がコヒーレンシ活動が完了するまでブロックされるので、ホーム・エージェント１０２が、コヒーレンシ要求の受取時にただちに実行されたコヒーレンシ活動に応じてコヒーレンシ情報を更新できることに留意されたい。
【００７８】
スレーブ・エージェント１０４は、コヒーレンシ・デマンドを入力ヘッダ待ち行列８４を介して他のＳＭＰノード１２のホーム・エージェントから受け取る。スレーブ・エージェント１０４は、特定のコヒーレンシ・デマンドに応答して、コヒーレンシ・トランザクションをＳＭＰ出力待ち行列９２で待機させる。一実施形態では、コヒーレンシ・トランザクションによって、キャッシュ１８およびプロセッサ１６の内部のキャッシュは、影響を受けるコヒーレンシ単位を無効化することができる。コヒーレンシ単位がキャッシュ内で修正された場合、修正済みデータはシステム・インタフェース２４へ転送される。別法として、コヒーレンシ・トランザクションによって、キャッシュ１８およびプロセッサ１６の内部のキャッシュは、コヒーレンシ単位のコヒーレンシ状態を共用に変更することができる。スレーブ・エージェント１０４は、コヒーレンシ・デマンドに応答して活動を完了した後、コヒーレンシ・デマンドに対応するコヒーレンシ要求を開始した要求エージェントへコヒーレンシ応答を送る。コヒーレンシ応答は、出力ヘッダ待ち行列８６で待機させられる。コヒーレンシ・デマンドに応答して活動を実行する前に、コヒーレンシ・デマンドと共に受け取ったグローバル・アドレスがＧＡ２ＬＰＡ変換装置８０を介してローカル物理アドレスに変換される。
【００７９】
一実施形態によれば、要求エージェント１００、ホーム・エージェント１０２、スレーブ・エージェント１０４によって実行されるコヒーレンシ・プロトコルは書込み無効化ポリシーを含む。言い換えれば、ＳＭＰノード１２内のプロセッサ１６があるコヒーレンシ単位を更新すると、他のＳＭＰノード１２内に記憶されているそのコヒーレンシ単位のコピーは無効化される。しかし、他の実施形態では他の書込みポリシーを使用することができる。たとえば、書込み更新ポリシーを使用することができる。書込み更新ポリシーによれば、あるコヒーレンシ単位が更新されると、更新済みデータは各ＳＭＰノード１２に記憶されているそのコヒーレンシ単位の各コピーへ送られる。
【００８０】
次に図６を参照すると、要求エージェント１００に対応するＳＭＰノード１２内のＳＭＰバス２０上の特定のトランザクションに応答して、第１のＳＭＰノード１２Ａないし１２Ｄ（「要求側ノード」）の要求エージェント１００と第２のＳＭＰノード１２Ａないし１２Ｄ（「ホーム・ノード」）のホーム・エージェント１０２と第３のＳＭＰノード１２Ａないし１２Ｄ（「スレーブ・ノード」）のスレーブ・エージェント１０４との間で実行される通常のコヒーレンシ活動を示す図が示されている。図１に示すようなコンピュータ・システム１０の一実施形態によって使用される特定のコヒーレンシ活動を、下記で図１１ないし１３に関して詳しく説明する。この説明の残りの部分全体にわたって、参照符号１００、１０２、１０４は、要求エージェント、ホーム・エージェント、スレーブ・エージェントを識別するために使用される。エージェントが他のエージェントと通信する際、２つのエージェントがそれぞれの異なるＳＭＰノード１２Ａないし１２Ｄに存在することが多いことを理解されたい。
【００８１】
要求エージェント１００は、ＳＭＰバス２０からトランザクションを受け取ると、トランザクションに適したコヒーレンシ要求を形成し、トランザクションのアドレスに対応するホーム・ノードへコヒーレンシ要求を送る（参照符号１１０）。コヒーレンシ要求は、要求エージェント１００から要求されたアクセス権ならびに影響を受けるコヒーレンシ単位のグローバル・アドレスを示す。要求されたアクセス権は、要求エージェント１００に対応するＳＭＰノード１２で試みられているトランザクションの実行を可能にするのに十分なものである。
【００８２】
ホーム・エージェント１０２は、コヒーレンシ要求を受け取ると、関連するディレクトリ６６にアクセスし、どのＳＭＰノード１２が、影響を受けるコヒーレンシ単位のコピーを記憶しているかを判定する。また、ホーム・エージェント１０２はコヒーレンシ単位の所有者を判定する。ホーム・エージェント１０２は、影響を受けるコヒーレンシ単位のコピーを記憶している各ノードのスレーブ・エージェント１０４と、影響を受けるコヒーレンシ単位に対する所有コヒーレンシ状態を有するノードのスレーブ・エージェント１０４へのコヒーレンシ・デマンドを生成することができる（参照符号１１２）。コヒーレンシ・デマンドは、受取側ＳＭＰノード１２内の影響を受けるコヒーレンシ単位の新しいコヒーレンシ状態を示す。コヒーレンシ要求が未処理なので、ホーム・エージェント１０２は、影響を受けるコヒーレンシ単位に関連するその後のコヒーレンシ要求がホーム・エージェント１０２によって開始されないように、影響を受けるコヒーレンシ単位に対応するコヒーレンシ情報をブロックする。また、ホーム・エージェント１０２は、コヒーレンシ要求が完了したことを反映するようにコヒーレンシ情報を更新する。
【００８３】
ホーム・エージェント１０２は、要求エージェント１００へコヒーレンシ応答を送ることもできる（参照符号１１４）。コヒーレンシ応答は、スレーブ・エージェント１０４から発行されるコヒーレンシ応答の数を示すことができる。別法として、ある種のトランザクションは、スレーブ・エージェント１０４との対話なしで完了することができる。たとえば、ホーム・エージェント１０２を含むＳＭＰノード１２内の入出力インタフェース２６を目標とする入出力トランザクションは、ホーム・エージェント１０２によって完了することができる。ホーム・エージェント１０２は、関連するＳＭＰバス２０に関するトランザクションを待機させ（参照符号１１６）、次いで、トランザクションが完了したことを示す応答を送ることができる。
【００８４】
スレーブ・エージェント１０４は、ホーム・エージェント１０２からのコヒーレンシ・デマンドに応答して、関連するＳＭＰバス２０上に与えるトランザクションを待機させることができる（参照符号１１８）。また、スレーブ・エージェント１０４は要求エージェント１００へコヒーレンシ応答を送る（参照符号１２０）。コヒーレンシ応答は、特定のコヒーレンシ要求に応答して受け取ったコヒーレンシ・デマンドがそのスレーブによって完了したことを示す。コヒーレンシ応答は、コヒーレンシ・デマンドが完了したとき、あるいはコヒーレンシ・デマンドが、対応するＳＭＰノード１２上で確実に完了し、影響を受けるコヒーレンシ単位に対する状態変化がコヒーレンシ・デマンドが完了するよりも前に実行される、コヒーレンシ・デマンドが完了するよりも前の時間に、スレーブ・エージェント１０４によって送られる。
【００８５】
要求エージェント１００は、影響を受ける各スレーブ・エージェント１０４からコヒーレンシ応答を受け取ると、ホーム・エージェント１０２へコヒーレンシ完了を送る（参照符号１２２）。ホーム・エージェント１０２は、コヒーレンシ完了を受け取ると、対応するコヒーレンシ情報からブロックを削除する。要求エージェント１００は、再発行トランザクションを、ＳＭＰバス２０上で実行できるように待機させ、ＳＭＰノード１２内でトランザクションを完了することができる（参照符号１２４）。
【００８６】
コヒーレンシ要求を発行した要求エージェント１００によって各コヒーレンシ要求に固有のタグが割り当てられることに留意されたい。その後に続くコヒーレンシ・デマンド、コヒーレンシ応答、コヒーレンシ完了はこのタグを含む。このように、特定のコヒーレンシ要求に関するコヒーレンシ活動は、関連する各エージェントによって識別することができる。さらに、非コヒーレント・トランザクション（たとえば、入出力トランザクション）に応答して非コヒーレント動作を実行できることに留意されたい。非コヒーレント動作は、要求側ノードとホーム・ノードしか使用しないものでよい。さらに、ホーム・エージェント１０２によって各コヒーレンシ要求に異なる固有のタグを割り当てることができる。それぞれの異なるタグは、ホーム・エージェント１０２を識別し、要求側のタグの代わりにコヒーレンシ完了を表すために使用される。
【００８７】
次に図７を参照すると、ＳＭＰバス２０上でのリード・ツー・オウン・トランザクションに応答したコンピュータ・システム１０の例示的な実施形態に関するコヒーレンシ活動を示す図が示されている。リード・ツー・オウン・トランザクションが実行されるのは、プロセッサ１６によって要求された特定のデータに関してキャッシュ・ミスが検出され、プロセッサ１６がコヒーレンシ単位への書込み許可を要求したときである。ストア・キャッシュ・ミスはたとえば、リード・ツー・オウン・トランザクションを生成することができる。
【００８８】
要求エージェント１００、ホーム・エージェント１０２、いくつかのスレーブ・エージェント１０４を図７に示す。ＳＭＰバス２０からリード・ツー・オウン・トランザクションを受け取ったノードは、影響を受けるコヒーレンシ単位を無効状態で記憶する（たとえば、コヒーレンシ単位はそのノードには記憶されない）。要求ノード１００の下付き文字「ｉ」は無効状態を示す。ホーム・ノードは、コヒーレンシ単位を共用状態で記憶し、いくつかのスレーブ・エージェント１０４に対応するノードもコヒーレンシ単位を共用状態で記憶する。ホーム・エージェント１０２およびスレーブ・エージェント１０４の下付き文字「ｓ」は、それらのノードでの共用状態を示す。リード・ツー・オウン動作は、要求されたコヒーレンシ単位を要求側ノードへ転送させる。要求側ノードはコヒーレンシ単位を修正状態で受け取る。
【００８９】
要求エージェント１００は、ＳＭＰバス２０からリード・ツー・オウン・トランザクションを受け取ると、コヒーレンシ単位のホーム・ノードへリード・ツー・オウン・コヒーレンシ要求を送る（参照符号１３０）。受取側ホーム・ノードのホーム・エージェント１０２は、１つまたは複数の他のノードに関する共用状態を検出する。スレーブ・エージェントが所有状態ではなく共用状態であるので、ホーム・ノードは、要求されたデータを直接供給することができる。ホーム・エージェント１０２は、要求されたコヒーレンシ単位に対応するデータを含むデータ・コヒーレンシ応答を要求エージェント１００へ送る（参照符号１３２）。データ・コヒーレンシ応答は、要求エージェント１００がデータの所有権を得る前に他のノードのスレーブ・エージェントから受け取るべき肯定応答の数も示す。ホーム・エージェント１０２は、要求側ＳＭＰノード１２Ａないし１２Ｄがコヒーレンシ単位の所有者であり、他のＳＭＰノード１２Ａないし１２Ｄがそれぞれ無効であることを示すようにディレクトリ６６を更新する。要求エージェント１００からのコヒーレンシ完了の受取時に、コヒーレンシ単位に関するコヒーレンシ情報がブロック解除されると、ディレクトリ６６は各ＳＭＰノード１２でのコヒーレンシ単位の状態に一致する。
【００９０】
ホーム・エージェント１０２は、影響を受けるコヒーレンシ単位の共用コピーを維持している各スレーブ・エージェント１０４へ無効化コヒーレンシ・デマンドを送る（参照符号１３４Ａ、１３４Ｂ、１３４Ｃ）。無効化コヒーレンシ・デマンドは、受取側スレーブ・エージェントにノード内の対応するコヒーレンシ単位を無効化させ、無効化が完了したことを示す肯定コヒーレンシ応答を要求側ノードへ送らせる。各スレーブ・エージェント１０４は、コヒーレンシ単位の無効化を完了し、それに続いて肯定コヒーレンシ応答を送る（参照符号１３６Ａ、１３６Ｂ、１３６Ｃ）。一実施形態では、各肯定応答は、コヒーレンシ単位に関して要求エージェント１００によって受け取られる応答の総数のカウントを含む。
【００９１】
要求エージェント１００は、スレーブ・エージェント１０４から各肯定コヒーレンシ応答を受け取り、ホーム・エージェント１０２からデータ・コヒーレンシ応答を受け取った後、ホーム・エージェント１０２へコヒーレンシ完了を送る（参照符号１３８）。要求エージェント１００は、そのローカル・メモリ内のコヒーレンシ単位を無効化し、ホーム・エージェント１０２は、対応するコヒーレンシ情報に対するブロックを解除する。データ・コヒーレンシ応答１３２および肯定コヒーレンシ応答１３６が、特に各ノード内の未処理のトランザクションの数に応じて任意の順序で受け取ることができることに留意されたい。
【００９２】
次に図８を参照すると、要求エージェント１００によって使用される例示的な状態マシンを示すフローチャート１４０が示されている。要求エージェント１００は、フローチャート１４０で表した状態マシンの複数の独立のコピーを含むことができ、そのため、複数の要求を並行して処理することができる。
【００９３】
要求エージェント１００は、ＳＭＰ入力待ち行列９４からトランザクションを受け取ると、要求準備完了状態１４２を開始する。要求準備完了状態１４２では、要求エージェント１００は、影響を受けるコヒーレンシ単位のグローバル・アドレスで識別されるホーム・ノードに存在するホーム・エージェント１０２へコヒーレンシ要求を送る。要求エージェント１００は、コヒーレンシ要求を送ると、要求アクティブ状態１４４に遷移する。要求アクティブ状態１４４中に、要求エージェント１００はスレーブ・エージェント１０４から（および任意選択でホーム・エージェント１０２から）コヒーレンシ応答を受け取る。各コヒーレンシ応答が受け取られると、要求エージェント１００は、コヒーレンシ活動を開始したトランザクションのタイプに応じて新しい状態に遷移する。また、要求活動状態１４２は、タイマを使用して、所定のタイムアウト期間内にコヒーレンシ応答を受け取らなかったことを検出することができる。ホーム・エージェント１０２によって指定された応答の数を受け取る前にタイマが満了した場合、要求エージェント１００はエラー状態に遷移する（図示せず）。さらに、ある種の実施形態は、読取り転送が失敗したことを示す応答を使用することができる。そのような応答を受け取った場合、要求エージェント１００は、要求準備完了状態１４２に遷移し再び読取りを試みる。
【００９４】
エラーやタイムアウトなしで応答を受け取った場合、状態は読取りトランザクションに関しては要求エージェント１００によって読取り完了状態１４６に遷移する。読取りトランザクションの場合、受け取られる応答のうちの１つに、要求されたコヒーレンシ単位に対応するデータを含めることができることに留意されたい。要求エージェント１００は、ＳＭＰバス２０上で読取りトランザクションを再発行し、さらにホーム・エージェント１０２へコヒーレンシ完了を送る。それに続いて、要求エージェント１００はアイドル状態１４８に遷移する。次いで、図８に示した状態マシンを使用して、要求エージェント１００によって新しいトランザクションを処理することができる。
【００９５】
逆に、書込みトランザクションには書込みアクティブ状態１５０および無視書込み再発行状態１５２が使用される。コンピュータ・システム１０のある種の書込みトランザクションでは、ネットワーク１４上でコヒーレンシ活動が開始されても、無視信号７０はアサートされない。たとえば、入出力書込みトランザクションは無視されない。書込みデータは、システム・インタフェース２４へ転送され、そこに記憶される。ＳＭＰバス２０上での書込みトランザクションのデータ・フェーズよりも前にコヒーレンシ応答を受け取った場合にシステム・インタフェース２４へデータを転送できるように、非無視書込みトランザクションには書込みアクティブ状態１５０が使用される。対応するデータを受け取った後、要求エージェント１００は書込み完了状態１５４に遷移する。書込み完了状態１５４中に、コヒーレンシ完了応答がホーム・エージェント１０２へ送られる。それ続いて、要求エージェント１００がアイドル状態１４８に遷移する。
【００９６】
無視された書込みトランザクションは、無視書込み再発行状態１５２への遷移を介して処理される。無視書込み再発行状態１５２中に、要求エージェント１００は、無視された書込みトランザクションをＳＭＰバス２０上で再発行する。このように、書込みデータを発送側プロセッサ１６から転送することができ、対応する書込みトランザクションをプロセッサ１６によって解除することができる。要求エージェント１００は、書込みデータをコヒーレンシ完了と共に送るべきかどうかに応じて、無視書込みアクティブ状態１５６と無視書込み完了状態１５８のどちらかに遷移する。無視書込みアクティブ状態１５６は、書込みアクティブ状態１５０と同様に、ＳＭＰバス２０からのデータ転送を待つために使用される。無視書込み完了状態１５８中に、ホーム・エージェント１０２へコヒーレンシ完了が送られる。それに続いて、要求エージェント１００がアイドル状態１４８に遷移する。要求エージェント１００は、ＳＭＰ入力待ち行列９４からトランザクションを受け取ると、アイドル状態１４８から要求準備完了状態１４２に遷移する。
【００９７】
次に図９を参照すると、ホーム・エージェント１０２に関する例示的な状態マシンを示すフローチャート１６０が示されている。ホーム・エージェント１０２は、それに対する複数の未処理の要求を処理できるように、フローチャート１６０で表した状態マシンの複数の独立のコピーを含むことができる。しかし、一実施形態によれば、複数の未処理の要求が同じコヒーレンシ単位に影響を与えることはない。
【００９８】
ホーム・エージェント１０２は、要求受取状態１６２でコヒーレンシ要求を受け取る。この要求は、コヒーレント要求とその他のトランザクション要求のどちらかとして分類することができる。一実施形態によれば、他のトランザクション要求には、入出力読取り要求および入出力書込み要求と、割り込み要求と、管理要求を含めることができる。非コヒーレント要求は、状態１６４の間にＳＭＰバス２０上でトランザクションを送ることによって処理される。それに続いて、コヒーレンシ完了が送られる。コヒーレンシ完了の受取時に、入出力書込みトランザクションおよび割り込み許可トランザクションによって、ホーム・ノード内のＳＭＰバス２０上でデータ・トランザクションが送られる（データ専用状態１６５）。データが転送されると、ホーム・エージェント１０２はアイドル状態１６６に遷移する。別法として、コヒーレンシ完了の受取時に、入出力読取りトランザクション、管理トランザクション、割り込み拒否トランザクションによって、アイドル状態への遷移が行われる。
【００９９】
逆に、ホーム・エージェント１０２は、コヒーレンシ要求を受け取ると検査状態１６８に遷移する。検査状態１６８は、コヒーレンシ要求の影響を受けるコヒーレンシ単位に関してコヒーレンシ活動が進行中であるかどうかを検出するために使用される。コヒーレンシ活動が進行中である（すなわち、コヒーレンシ情報がブロックされている）場合、ホーム・エージェント１０２は、進行中のコヒーレンシ活動が完了するまで検査状態１６８のままである。それに続いて、ホーム・エージェント１０２は設定状態１７０に遷移する。
【０１００】
設定状態１７０中に、ホーム・エージェント１０２は、ブロックすべき影響を受けるコヒーレンシ単位に対応するコヒーレンシ情報を記憶するディレクトリ・エントリの状況を設定する。ブロック状況によって、影響を受けるコヒーレンシ単位へのその後の活動の進行が妨げられ、コンピュータ・システム１０のコヒーレンシ・プロトコルが簡略化される。ホーム・エージェント１０２は、受け取ったコヒーレンシ要求に対応するトランザクションの読取り特性または書込み特性に応じて、読取り状態１７２または書込み応答状態１７４に遷移する。
【０１０１】
ホーム・エージェント１０２は、読取り状態１７２中に、読取りトランザクションに関して更新されるコヒーレンシ・デマンドをスレーブ・エージェント１０４に発行する。ホーム・エージェント１０２は、要求エージェント１００からコヒーレンシ完了が受け取られるまで読取り状態１７２のままであり、その後、ブロック状況クリア状態１７６に遷移する。読取りを求めるコヒーレンシ要求が失敗する可能性のある実施形態では、ホーム・エージェント１０２は、読取りトランザクションの失敗を示すコヒーレンシ完了を受け取ると、影響を受けるディレクトリ・エントリの状態をコヒーレンシ要求の前の状態に復元する。
【０１０２】
書込み状態１７４中に、ホーム・エージェント１０２は要求エージェント１００へコヒーレンシ応答を送る。ホーム・エージェント１０２は、要求エージェント１００からコヒーレンシ完了が受け取られるまで応答書込み状態１７４のままである。コヒーレンシ完了と共にデータを受け取った場合、ホーム・エージェント１０２は書込みデータ状態１７８に遷移する。別法として、ホーム・エージェント１０２は、データを含まないコヒーレンシ完了を受け取ったときに、ブロック状況クリア状態１７６に遷移する。
【０１０３】
ホーム・エージェント１０２は、受け取った書込みデータを転送するために、書込みデータ状態１７８中にＳＭＰバス２０上で書込みトランザクションを発行する。たとえば、書込みストリーム動作（後述）によって、データがホーム・エージェント１０２へ転送される。ホーム・エージェント１０２は、受け取ったデータを、記憶するためにメモリ２２へ送る。それに続いて、ホーム・エージェント１０２はブロック状況クリア状態１７６に遷移する。
【０１０４】
ホーム・エージェント１０２は、ブロック状況クリア状態１７６で受け取ったコヒーレンシ要求の影響を受けるコヒーレンシ単位に対応するコヒーレンシ情報のブロック状況をクリアする。それに続いて、コヒーレンシ情報にアクセスすることができる。非ブロック・コヒーレンシ情報内に存在する状態は、前に受け取ったコヒーレンシ要求によって開始されたコヒーレンシ活動を反映する。ホーム・エージェント１０２は、対応するコヒーレンシ情報のブロック状況をクリアすることによって、アイドル状態１６６に遷移する。ホーム・エージェント１０２は、コヒーレンシ要求を受け取ると、アイドル状態１６６から受取要求状態１６２に遷移する。
【０１０５】
次に図１０を参照すると、スレーブ・エージェント１０４に関する例示的な状態マシンを示すフローチャート１８０が示されている。スレーブ・エージェント１０４は、受取状態１８２中にコヒーレンシ・デマンドを受け取る。スレーブ・エージェント１０４は、コヒーレンシ・デマンドに応答して、ＳＭＰバス２０上に与えられるトランザクションを待機させる。このトランザクションによって、キャッシュ１８およびプロセッサ１６の内部のキャッシュの状態が、受け取ったコヒーレンシ・デマンドに応じて変化する。スレーブ・エージェント１０４は、このトランザクションを要求発送状態１８４の間待機させる。
【０１０６】
応答発送状態１８６中に、スレーブ・エージェント１０４は、トランザクションを開始した要求エージェント１００へコヒーレンシ応答を送る。様々な実施形態によれば、スレーブ・エージェント１０４が、ＳＭＰバス２０に関するトランザクションを待機させ、あるいはＳＭＰバス２０上のトランザクションが首尾良く完了したときに要求発送状態１８４から応答発送状態１８６に遷移できることに留意されたい。スレーブ・エージェント１０４は、コヒーレンシ応答を送った後、アイドル状態１８８に遷移する。スレーブ・エージェント１０４は、コヒーレンシ・デマンドを受け取るとアイドル状態１８８から受取状態１８２に遷移することができる。
【０１０７】
次に図１１ないし１４を参照すると、例示的なコヒーレンシ要求タイプ、コヒーレンシ・デマンド・タイプ、コヒーレンシ応答タイプ、コヒーレンシ完了タイプをリストしたいくつかの表が示されている。図１１ないし１４の表に示したタイプは、コンピュータ・システム１０の一実施形態によって使用することができる。他の実施形態は、他の数組のタイプを使用することができる。
【０１０８】
図１１は、コヒーレンシ要求のタイプをリストした表１９０である。第１の列１９２は、下記の図１５で使用される各要求タイプのコードをリストしたものである。第２の列１９４は、コヒーレンシ要求タイプをリストしたものであり、第３の列１９６は、コヒーレンシ要求の発送元を示すものである。図１２ないし１４では、同様な列がコヒーレンシ・デマンド、コヒーレンシ応答、コヒーレンシ完了に使用される。「Ｒ」は要求エージェント１００を示し、「Ｓ」はスレーブ・エージェント１０４を示し、「Ｈ」はホーム・エージェント１０２を示す。
【０１０９】
リード・ツー・シェア要求は、特定のＳＭＰノードにコヒーレンシ単位が存在せず、ＳＭＰバス２０からコヒーレンシ単位へのトランザクションの性質上、コヒーレンシ単位への読取りアクセスが必要であるときに実行される。たとえば、キャッシュ可能読取りトランザクションではリード・ツー・シェア要求が実行される。一般的に言えば、リード・ツー・シェア要求とは、共用状態のコヒーレンシ単位のコピーを求める要求である。同様に、リード・ツー・オウン要求とは、所有状態のコヒーレンシ単位のコピーを求める要求である。他のＳＭＰノード内のコヒーレンシ単位のコピーは無効状態に変更すべきである。リード・ツー・オウン要求は、たとえばキャッシュ可能書込みトランザクションのキャッシュ・ミスに応答して実行することができる。
【０１１０】
読取りストリームおよび書込みストリームとは、コヒーレンシ単位全体の読取りまたは書込みを求める要求である。これらの動作は通常、ブロック・コピー動作に使用される。プロセッサ１６およびキャッシュ１８は、読取りストリーム要求または書込みストリーム要求に応答して与えられたデータはキャッシュしない。その代わり、読取りストリーム要求の場合には、コヒーレンシ単位がプロセッサ１６へのデータとして与えられ、書込みストリーム要求の場合にはメモリ２２にデータが書き込まれる。リード・ツー・シェア要求、リード・ツー・オウン要求、読取りストリーム要求をＣＯＭＡ動作（たとえば、ＲＴＳ、ＲＴＯ、ＲＳ）またはＮＵＭＡ動作（たとえば、ＲＴＳＮ、ＲＴＯＮ、ＲＳＮ）として実行できることに留意されたい。
【０１１１】
書き直し要求は、コヒーレンシ単位のホーム・ノードにコヒーレンシ単位が書き込まれるときに実行される。ホーム・ノードは、コヒーレンシ単位を書き直す許可と共に応答する。コヒーレンシ単位は次いで、コヒーレンシ完了と共にホーム・ノードに渡される。
【０１１２】
無効要求は、他のＳＭＰノード内のコヒーレンシ単位のコピーを無効化するために実行される。無効化要求が生成される例示的なケースは、共用または所有されているコヒーレンシ単位への書込みストリーム・トランザクションである。書込みストリーム・トランザクションではコヒーレンシ単位が更新され、したがって他のＳＭＰノード内のコヒーレンシ単位のコピーが無効化される。
【０１１３】
入出力読取りトランザクションおよび入出力書込みトランザクションに応答して入出力読取り要求および入出力書込み要求が送られる。入出力トランザクションは非コヒーレントである（すなわち、トランザクションはキャッシュされず、トランザクションに対してコヒーレンシは維持されない）。入出力ブロック・トランザクションでは、通常の入出力トランザクションよりも大きな、データの一部が転送される。一実施形態では、ブロック入出力動作で６４バイトの情報が転送され、それに対して非ブロック入出力トランザクションで８バイトが転送される。
【０１１４】
フラッシュ要求では、コヒーレンシ単位のコピーが無効化される。修正されたコピーはホーム・ノードへ返される。割り込み要求はリモートＳＭＰノード内の特定の装置への割り込みを知らせるために使用される。割り込みは特定のプロセッサ１６に与えることができ、そのプロセッサは、割り込みに応答して所定のアドレスに記憶されている割り込みサービス・ルーチンを実行することができる。管理パケットは、ノード間である種のリセット信号を送るために使用される。
【０１１５】
図１２は、例示的なコヒーレンシ・デマンド・タイプをリストした表１９８である。表１９０と同様に、表１９８には列１９２、１９４、１９６が含まれる。リード・ツー・シェア・デマンドは、コヒーレンシ単位の所有者へ搬送され、それによってその所有者は要求側ノードへデータを送る。同様に、リード・ツー・オウン・デマンドおよび読取りストリーム・デマンドによって、コヒーレンシ単位の所有者は要求側ノードへデータを送る。また、リード・ツー・オウン・デマンドによって、所有者は所有者ノード内のコヒーレンシ単位の状態を無効に変更する。読取りストリーム・デマンドおよびリード・ツー・シェア・デマンドによって、所有者ノードにおける状態が（修正から）所有に変更される。
【０１１６】
無効化デマンドでは、対応するコヒーレンシ単位は転送されない。その代わり、無効化デマンドではコヒーレンシ単位のコピーが無効化される。最後に、管理デマンドは管理要求に応答して搬送される。各デマンドが要求エージェント１００からの要求に応答してホーム・エージェント１０２によって開始されることを留意されたい。
【０１１７】
図１３は、コンピュータ・システム１０の一実施形態によって使用される例示的な応答タイプをリストした表２００である。図１１および１２と同様に、図１３はコヒーレンシ応答に関する列１９２、１９４、１９６を含む。
【０１１８】
データ応答とは、要求されたデータを含む応答である。所有者スレーブ・エージェントは通常、コヒーレンシ要求に関するデータ応答を与える。しかし、ホーム・エージェントは入出力読取り要求に関するデータを与えることができる。
【０１１９】
肯定応答は、特定のコヒーレンシ要求に関連するコヒーレンシ・デマンドが完了したことを示す。スレーブ・エージェントは通常、肯定応答を与えるが、ホーム・エージェントは、ホーム・ノードがコヒーレンシ単位の所有者であるときに肯定応答を（データと共に）与える。
【０１２０】
スレーブ所有なし応答、アドレス・マップなし応答、エラー応答は、エラーが検出されたときにスレーブ・エージェント１０４によって搬送される。スレーブ所有なし応答は、コヒーレンシ単位の所有者およびスレーブがもはやコヒーレンシ単位を所有していないときにホーム・エージェント１０２によってスレーブが識別された場合に送られる。アドレス・マップなし応答は、所有権を主張している装置が、対応するＳＭＰバス２０上にはないデマンドを、スレーブが受け取った場合に、送られる。スレーブ・エージェントによって検出された他のエラー条件はエラー応答を介して示される。
【０１２１】
ホーム・エージェント１０２は、スレーブ・エージェント１０４が使用できるエラー応答以外のエラー応答を与えることができる。対応する要求がホーム・エージェント１０２によるサービスを必要としていないことを示すために、ホーム・エージェント１０２によって否定肯定（ＮＡＣＫ）および否定応答（ＮＯＰＥ）が使用される。ＮＡＣＫトランザクションを使用して、対応する要求がホーム・ノードによって拒否されたことを示すことができる。たとえば、割り込み要求は、受取側ノードによって割り込みが拒否された場合にＮＡＣＫを受け取る。受取側ノードによって割り込みが受け入れられた場合には肯定応答（ＡＣＫ）が搬送される。ＮＯＰＥトランザクションは、受取側ノードによって記憶されていないコヒーレンシ単位のための対応するフラッシュ要求が搬送されたことを示すために使用される。
【０１２２】
図１４は、コンピュータ・システム１０の一実施形態による例示的なコヒーレンシ完了タイプを示す表２０２である。図１４は、図１１ないし１３と同様に、コヒーレンシ完了に関する列１９２、１９４、１９６を含む。
【０１２３】
データなしの完了は、特定の要求が完了したことを示す、要求エージェント１００からホーム・エージェント１０２への信号として使用される。ホーム・エージェント１０２は、これに応答して、対応するコヒーレンシ情報をブロック解除する。ＳＭＰバス２０上の異なるトランザクションに対応する２種類のデータ完了が含まれている。一方のタイプの再発行トランザクションでは、ＳＭＰバス２０上でデータ・フェーズしか使用されない。この再発行トランザクションは、一実施形態では入出力書込みトランザクションおよび割り込みトランザクションに使用することができる。他方のタイプの再発行トランザクションではアドレス・フェーズとデータ・フェーズの両方が使用される。書込みストリームや書き直しなどのコヒーレント書込みは、アドレス・フェーズとデータ・フェーズの両方を含む再発行トランザクションを使用することができる。最後に、要求された状態を得ることに失敗した読取り要求に関する、失敗を示す完了が含まれている。
【０１２４】
次に図１５を参照すると、ＳＭＰバス２０上の様々なトランザクションに対するコヒーレンシ活動を示す表２１０が示されている。表２１０は、他のＳＭＰノード１２へ要求を送らせるトランザクションを示す。ＳＭＰノード内で完了するトランザクションは示されていない。列内の「−」は、特定の行内で考えられるケースではその列に関して実行される活動がないことを示す。要求エージェント１００によってＳＭＰバス２０上で受け取られるトランザクションを示すトランザクション列２１２が含まれている。ＭＴＡＧ列２１４は、トランザクションに対応するアドレスによってアクセスされるコヒーレンシ単位のＭＴＡＧの状態を示す。図の状態は、前述のＭＯＳＩ状態と「ｎ」状態とを含む。「ｎ」状態は、コヒーレンシ単位が、トランザクションが開始されたＳＭＰノードではＮＵＭＡモードでアクセスされることを示す。したがって、コヒーレンシ単位のローカル・コピーは要求側ノード・メモリには記憶されない。その代わり、コヒーレンシ単位は、ホームＳＭＰノード（または所有者ノード）から転送され、メモリ２２に記憶されずに要求側プロセッサ１６またはキャッシュ１８へ送られる。
【０１２５】
要求列２１６は、トランザクションのアドレスによって識別されるホーム・エージェントへ送られるコヒーレンシ要求をリストしたものである。ホーム・エージェント１０２は、列２１６にリストしたコヒーレンシ要求を受け取ると、ディレクトリ６６に記録されている要求側ノードのコヒーレンシ単位の状態を検査する。Ｄ列２１８は、要求側ノードに関して記録されるコヒーレンシ単位の現状態をリストしたものであり、Ｄ’列２２０は、受け取ったコヒーレンシ要求に応答してホーム・エージェント１０２によって更新された、要求側ノードに関して記録されるコヒーレンシ単位の状態をリストしたものである。ホーム・エージェント１０２は、コヒーレンシ単位の所有者への第１のコヒーレンシ・デマンドと、コヒーレンシ単位の共用コピーを維持しているノードへの追加コヒーレンシ・デマンドを生成することができる。所有者へ送られるコヒーレンシ・デマンドを列２２２に示し、それに対して共用ノードへ送られるコヒーレンシ・デマンドを列２２４に示す。さらに、ホーム・エージェント１０２は要求側ノードへコヒーレンシ応答を送ることができる。ホーム・エージェント応答を列２２６に示す。
【０１２６】
コヒーレンシ単位の所有者として示されたＳＭＰノード内のスレーブ・エージェント１０４は、列２２８に示したようにコヒーレンシ応答を送る。共用ノードとして示されたノード内のスレーブ・エージェント１０４は、受け取ったコヒーレンシ・デマンドで示された状態変化を実行した後に、列２３０に示したコヒーレンシ応答を用いて、列２２４に示したコヒーレンシ・デマンドに応答する。
【０１２７】
要求エージェント１００は、適当な数のコヒーレンシ応答を受け取ると、ホーム・エージェント１０２へコヒーレンシ完了を送る。様々なトランザクションに使用されるコヒーレンシ完了を列２３２に示す。
【０１２８】
一例を挙げると、行２３４は、対応するＭＴＡＧ状態が無効であるＳＭＰバス２０上のリード・ツー・シェア・トランザクションに対するコヒーレンシ活動を示す。対応する要求エージェント１００は、リード・ツー・シェア・トランザクションに関連付けられたグローバル・アドレスで識別されたホーム・ノードへリード・ツー・シェア・コヒーレンシ要求を送る。行２３４に示したケースでは、ホーム・ノードのディレクトリは、要求側ノードがデータを無効状態で記憶していることを示す。要求側ノードに関するホーム・ノードのディレクトリ内の状態は共用に更新され、ホーム・エージェント１０２により、ディレクトリによって所有者として示されたノードへリード・ツー・シェア・コヒーレンシ・デマンドが送られる。トランザクションが共用状態を得ようとするので、共用者へはデマンドは送られない。所有者ノード内のスレーブ・エージェント１０４は、コヒーレンシ単位に対応するデータを要求側ノードへ送る。要求側ノード内の要求エージェント１００は、データを受け取るとホーム・ノード内のホーム・エージェント１０２へコヒーレンシ完了を送る。従って、トランザクションが完了する。
【０１２９】
Ｄ列２１８に示した状態がＭＴＡＧ列２１４の状態に合致しないことがあることに留意されたい。たとえば、行２３６は、ＭＴＡＧ列２１４では無効状態のコヒーレンシ単位を示す。しかし、Ｄ列２１８内の対応する状態は、修正でも、あるいは所有でも、あるいは共用でもよい。そのような状況が発生するのは、コヒーレンシ単位への現トランザクションに関するＭＴＡＧ６８へのアクセスがアドレス・バス５８上で実行されるときに、コヒーレンシ単位に関する要求側ノードからの前のコヒーレンシ要求がコンピュータ・システム１０内で未処理であるときである。しかし、特定のアクセス時にディレクトリ・エントリがブロックされるので、未処理の要求は、現要求によるディレクトリ６６のアクセスよりも前に完了する。このため、生成されるコヒーレンシ・デマンドは、（ディレクトリがアクセスされるときのＭＴＡＧ状態に合致する）ディレクトリ状態に依存する。行２３６に示した例では、コヒーレンシ単位が現在、要求側ノードに存在していることをディレクトリが示しているので、リード・ツー・シェア要求は、単に要求側ノード内のＳＭＰバス２０上で読取りトランザクションを再発行することによって完了することができる。したがって、ホーム・ノードは、応答カウント１を含め、要求に肯定応答し、それに続いて要求側ノードは読取りトランザクションを再発行することができる。さらに、表２１０には多数のタイプのトランザクションがリストされているが、コンピュータ・システム１０の様々な実施形態に応じて他のトランザクションを使用できることに留意されたい。
【０１３０】
次に図１６を参照すると、ホーム・エージェント１０２の実施形態のブロック図が示されている。図１６に示したホーム・エージェント１０２は、入力ヘッダ待ち行列８４（図５）を通じてネットワーク１４から関連するトランザクション要求を受け取るように結合された高優先順位（ＲＴＯ）待ち行列４０２と、低優先順位待ち行列４０４と、入出力待ち行列４０６とを含む。高優先順位待ち行列４０２および低優先順位待ち行列４０４とホーム・エージェント制御装置４１０との間に結合されたトランザクション・ブロッキング装置４０８が示されている。ディレクトリ・キャッシュ４２０および関連するディレクトリ・キャッシュ管理装置４２２は、全体としてディレクトリ６６（図５）を実施するために使用され、やはりホーム・エージェント制御装置４１０に結合される装置として示されている。
【０１３１】
前述のように、動作時に、ホーム・エージェント１０２は入力ヘッダ待ち行列８４を通じてネットワーク１４からトランザクション要求を受け取る。各トランザクション要求は次いで、要求のタイプに応じて高優先順位待ち行列４０２、低優先順位待ち行列４０４、入出力待ち行列４０６のいずれかへ搬送される。図１６の実施形態では、高優先順位待ち行列４０２はＲＴＯトランザクション要求を受け取り、入出力待ち行列４０６は入出力トランザクション要求を受け取る。低優先順位待ち行列４０４は、ＲＴＳトランザクション要求を含め、他のすべての要求タイプを受け取る。高優先順位待ち行列４０２、低優先順位待ち行列４０４、入出力待ち行列４０６はそれぞれ、ＦＩＦＯバッファ装置を使用して実施することができる。トランザクション要求を適当な待ち行列へルーティングするために制御回路（図１６では独立に示されていない）が使用される。
【０１３２】
ホーム・エージェント制御装置４１０は、図５および６の上記の説明に関連して上記で説明したように適当なコヒーレンシ・デマンドおよび応答を生成することによってトランザクション要求を処理する。ホーム・エージェント制御装置４１０はまた、要求エージェントからコヒーレンシ完了メッセージを受け取り、ＳＭＰ出力待ち行列９８を通じてＳＭＰバス５８上で搬送すべきバストランザクション要求のバッファとして働く。ホーム・エージェント制御装置４１０は最終的に、ホーム・エージェント制御装置４１０と共に現在アクティブなすべての要求の状況を維持する。
【０１３３】
ホーム・エージェント制御装置４１０は、複数のトランザクション要求を同時に処理するように構成することができる。言い換えれば、ホーム・エージェント制御装置４１０は、所与のトランザクション要求の処理を、他のトランザクション要求に対応する完了メッセージが受け取られる前に開始することができる。したがって、所与の時間に複数のトランザクション要求がアクティブであってよい。特定の一実施形態では、ホーム・エージェント制御装置４１０は最大で１６個のアクティブ要求を処理することができる。
【０１３４】
トランザクション・ブロッキング装置４０８は、高優先順位待ち行列４０２または低優先順位待ち行列４０４内の所与のトランザクション要求が、ホーム・エージェント制御装置４１０内ですでにアクティブな他のトランザクション要求のコヒーレンシ単位に対応するものである場合に、所与のトランザクション要求の処理をブロックするように構成される。アクティブ要求の完了メッセージが受け取られると、ブロックは削除される。一実施形態では、高優先順位待ち行列４０２と低優先順位待ち行列４０４のどちらか内のネクストインライン・トランザクション要求がブロックされた場合、他の待ち行列からのトランザクションは依然として、ブロッキング装置４０８を通じてホーム・エージェント制御装置４１０に与えられる。
【０１３５】
特定の一実施形態では、トランザクション・ブロッキング装置４０８は、未処理のＲＴＳＮ（リード・ツー・シェアＮＵＭＡモード）トランザクションと新しいＲＴＳＮトランザクション要求のライン・アドレス（すなわち、コヒーレンシ単位アドレス）が同じである場合に、未処理のＲＴＳＮトランザクションが新しいＲＴＳＮトランザクション要求をブロックしないように構成することができる。
【０１３６】
ホーム・エージェント制御装置４１０は、高優先順位待ち行列４０２内で１つまたは複数のトランザクション要求が未処理であり、低優先順位待ち行列４０４内でも１つまたは複数のトランザクション要求が未処理である場合に、高優先順位待ち行列４０２内の未処理のネックトインラインＲＴＯトランザクション要求が低優先順位待ち行列４０４内のネックトインライン・トランザクション要求よりも前に処理されるように構成することもできる。ホーム・エージェント制御装置４１０は、高優先順位待ち行列４０２内のＲＴＯ要求を処理した後、低優先順位待ち行列４０４内のネックトインライン・トランザクション要求を受け取り、処理する。ホーム・エージェント制御装置４１０はそれに続いて、高優先順位待ち行列４０２内の未処理ＲＴＯ要求のサービスを開始し、以後同様にピンポン方式で処理する。入出力待ち行列４０６内の未処理の入出力トランザクション要求は、トランザクション処理資源の可用性またはホーム・エージェント制御装置４１０内の状態マシン（ホーム・エージェント記述子と呼ばれる）に応じて、任意の時にホーム・エージェント制御装置４１０によって処理することができる。
【０１３７】
スピンロック動作中のホーム・エージェント１０２の動作は、図１７および１８ならびに下記の例を参照して最も良く理解することができる。図１７は、「ＲＴＯ（１）」として固有に識別されたＲＴＯトランザクションが、高優先順位待ち行列４０２内で未処理であり、ＲＴＳ（１）ないしＲＴＳ（７）として固有に識別されたいくつかのＲＴＳトランザクションが低優先順位待ち行列４０４内で未処理である状況を示す。この例では、各ＲＴＳトランザクション要求ＲＴＳ（１）ないしＲＴＳ（７）は、それぞれ、ロックされた同じメモリ領域へのアクセスを求めて競合しているスピン中のプロセッサからの要求に対応すると仮定する。さらに、ＲＴＯトランザクションＲＴＯ（１）が無関係のトランザクション要求であると仮定する。
【０１３８】
ホーム・エージェント制御装置４１０はまず、ＲＴＯトランザクション要求ＲＴＯ（１）を処理することができる。ホーム・エージェント制御装置４１０は、同じコヒーレンシ単位がＲＴＯ（１）トランザクションには関与していないと仮定して（すなわち、そうでない場合、要求ＲＴＳ（１）はトランザクション・ブロッキング装置４０８によってブロックされる）、ＲＴＳトランザクション要求ＲＴＳ（１）の処理を受け入れ開始することもできる。ＲＴＳ（１）トランザクション要求を実施する前にＲＴＳ（１）要求に関連するロック・ビットが解除された場合、ＲＴＳ（１）を発行したプロセッサは、ロック解除を検出し、アトミック試験及びセット動作を開始する。
【０１３９】
次に図１８を参照すると、ロック解除を検出したプロセッサによって開始されるアトミック試験及びセット動作に対応する、ＲＴＯ（２）と呼ばれるＲＴＯトランザクションが示されている。 図１８に示した例では、ネットワーク１４から要求ＲＴＯ（２）を受け取る前に、ＲＴＳ（２）およびＲＴＳ（３）がすでに、ホーム・エージェント制御装置４１０によるサービスに関して受け入れられていると仮定されている。要求ＲＴＳ（３）に関するトランザクションが完了すると、要求ＲＴＯ（２）がトランザクション・ブロッキング装置４０８を通じてホーム・エージェント制御装置４１０に渡される。ＲＴＯ（２）は、高優先順位待ち行列４０２を介して要求ＲＴＳ（４）ないしＲＴＳ（７）をバイパスするので、ＲＴＳ（４）ないしＲＴＳ（７）よりも前に処理される。したがって、メモリ領域に対するロック・ビットがセットされ、ＲＴＳ（４）ないしＲＴＳ（７）を発行したプロセッサは、ロック解除を検出せず、アトミック試験及びセット動作を開始することはない。これによって、追加ＲＴＯトランザクション要求の生成と、ロックが記憶されているコヒーレンシ単位の不要な移行が回避される。さらに、コヒーレンシ単位の他のコピーの無効化も回避される。全体的なネットワーク・トラフィックが減少されるので、多重処理システムの全体的な性能を向上させることができる。
【０１４０】
一実施形態では、高優先順位待ち行列４０２が、低優先順位待ち行列４０４の容量と比べて比較的小規模であることに留意されたい。たとえば、高優先順位待ち行列４０２は、最大で８つの未処理のＲＴＯ要求を記憶するように構成することができる。低優先順位待ち行列４０４および入出力待ち行列４０６はそれぞれ、ホーム・エージェントへ送られるすべての可能な要求に適合するようなサイズにすることができる（すなわち、（ＲｘＮ）。ここで、Ｒは要求エージェント記述子の数であり、Ｎはノードの数である）。
【０１４１】
さらに、ホーム・エージェント１０２を様々な他の特定の実施形態として構成することが企図される。たとえば、ＲＴＯトランザクション要求およびＲＴＳトランザクション要求用の物理的に離れた待ち行列を設けるのではなく、ホーム・エージェント内の未処理のＲＴＯトランザクション要求を検出しある種のＲＴＯトランザクション要求の処理を、すでに受け取っているある種のＲＴＳトランザクション要求の処理よりも優先するように、ホーム・エージェント制御装置を構成することができる。
【０１４２】
上記の例示的な実施形態ではＳＭＰノード１２について説明したが、一般的に言えば、コンピュータ・システム１０は１つまたは複数の処理ノードを含むことができる。本明細書では、処理ノードは、少なくとも１つのプロセッサと対応するメモリとを含む。他の処理ノードと通信する回路も含まれる。コンピュータ・システム１０の実施形態に複数の処理ノードが含まれるとき、処理ノード内の対応するメモリは分散共用メモリを形成する。処理ノードはリモート処理ノードまたはローカル処理ノードと呼ぶことができる。処理ノードは、特定のプロセッサを含まない場合、その特定のプロセッサに対してリモート処理ノードである。逆に、特定のプロセッサを含む処理ノードは、その特定のプロセッサのローカル処理ノードである。最後に、本明細書では、「待ち行列」とは、複数の記憶位置または要素を含む記憶領域またはバッファである。
【０１４３】
当業者には、上記の開示を完全に理解した後に多数の変形形態および修正形態が明らかになろう。特許請求の範囲は、すべてのそのような変形形態および修正形態を包含するものと解釈されるものである。
【図面の簡単な説明】
【図１】マルチプロセッサ・コンピュータ・システムのブロック図である。
【図２】図１に示したコンピュータ・システムの一実施形態によってサポートされる非一様メモリ・アーキテクチャを示す概念ブロック図（Ａ）と、図１に示したコンピュータ・システムの一実施形態によってサポートされるキャッシュ専用メモリ・アーキテクチャを示す概念ブロック図（Ｂ）である。
【図３】図１に示した対称型多重処理ノードの一実施形態のブロック図である。
【図４】図３に示したディレクトリの一実施形態に記憶された例示的なディレクトリ・エントリを示す図である。
【図５】図１に示したシステム・インタフェースの一実施形態のブロック図である。
【図６】要求エージェントとホーム・エージェントとスレーブ・エージェントとの間の通常のコヒーレンシ動作に応答して実行される活動を示す図である。
【図７】プロセッサからのリード・ツー・オウン要求に応答して実行される例示的なコヒーレンシ動作を示す図である。
【図８】図５に示した要求エージェントの一実施形態に関する例示的な状態マシンを示すフローチャートである。
【図９】図５に示したホーム・エージェントの一実施形態に関する例示的な状態マシンを示すフローチャートである。
【図１０】図５に示したスレーブ・エージェントの一実施形態に関する例示的な状態マシンを示すフローチャートである。
【図１１】システム・インタフェースの一実施形態による要求タイプをリストした表である。
【図１２】システム・インタフェースの一実施形態によるデマンド・タイプをリストした表である。
【図１３】システム・インタフェースの一実施形態による応答タイプをリストした表である。
【図１４】システム・インタフェースの一実施形態による完了タイプをリストした表である。
【図１５】システム・インタフェースの一実施形態による、プロセッサによって実行される様々な動作に応答して実行されるコヒーレンシ動作を表す表である。
【図１６】マルチプロセッサ・コンピュータ・システムのシステム・インタフェース内で使用されるホーム・エージェントの一実施形態のブロック図である。
【図１７】マルチプロセッサ・コンピュータ・システムのホーム・エージェント内のＲＴＯ待ち行列および第２の待ち行列に存在する例示的な未処理のトランザクション要求を示すブロック図である。
【図１８】マルチプロセッサ・コンピュータ・システムのホーム・エージェント内のＲＴＯ待ち行列および第２の待ち行列に存在する例示的な未処理のトランザクション要求を示すブロック図である。
【符号の説明】
１０  コンピュータ・システム
１２  ＳＭＰノード
１４  ポイント・ツー・ポイント・ネットワーク
１６  プロセッサ
１８  外部キャッシュ
２０  ＳＭＰバス
２２  メモリ
２４  システム・インタフェース
２６  入出力インタフェース
【図１】
0003987162.tif 000004
【図２】
0003987162.tif 000005
【図３】
0003987162.tif 000006
【図４】
0003987162.tif 000007
【図５】
0003987162.tif 000008
【図６】
0003987162.tif 000009
【図７】
0003987162.tif 000010
【図８】
0003987162.tif 000011
【図９】
0003987162.tif 000012
【図１０】
0003987162.tif 000013
【図１１】
0003987162.tif 000014
【図１２】
0003987162.tif 000015
【図１３】
0003987162.tif 000016
【図１４】
0003987162.tif 000017
【図１５】
0003987162.tif 000018
【図１６】
0003987162.tif 000019
【図１７】
0003987162.tif 000020
【図１８】
0003987162.tif 000021