(57)【特許請求の範囲】
【請求項１】
選択されたプロトコルに従って動作するキャッシュを備えたマイクロプロセッサを有した少なくとも１つのエージェントを含む複数のエージェントと、これらのエージェント間に結合されたバスとを含むコンピュータ・システムで、前記複数のエージェントのうちの少なくとも１つによって開始される、データを転送する際に前記バスを通じてパイプライン化される複数のマルチフェーズ・バス・トランザクションをサポートする方法であって、
前記マイクロプロセッサが、（ｉ）前記複数のマルチフェーズ・バス・トランザクションの各スヌープ・フェーズ中にキャッシュ・スヌープを実行するとともに、（ｉｉ）前記マイクロプロセッサの前記キャッシュが前記データを修正済み状態で含む場合に、対応するスヌープ・フェーズの直後のデータ・フェーズ中に前記データを与えることによって、前記データのコヒーレンシを維持し、
（ｉ）前記複数のマルチフェーズ・バス・トランザクションのうちの少なくとも１つに関する情報を与えるためにアドレスされた前記複数のエージェントのうちの１つが、前記情報を所定期間内に提供することができず、（ｉｉ）前記マイクロプロセッサの前記キャッシュが前記情報を前記修正済み状態で含まない場合に、前記複数のマルチフェーズ・バス・トランザクションのうちの少なくとも１つを前記バスを通じたパイプライン化を妨害せずに遅延する
ことを特徴とする方法。
【請求項２】
前記データのコヒーレンシの維持がさらに、
前記データ・フェーズ中に前記データを与える前に、
前記キャッシュが前記データを前記修正済み状態で含んでいることを前記マイクロプロセッサが検出した場合に、前記スヌープ・フェーズ中に前記バスの第１の制御線をアサートする
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記データのコヒーレンシの維持がさらに、
前記第１の制御線をアサートした後および前記データ・フェーズ中に前記データを与える前に、
前記キャッシュが前記データを共用状態または専用状態で含んでいることを前記マイクロプロセッサが検出した場合に、前記スヌープ・フェーズ中に前記バスの第２の制御線をアサートする
ことを特徴とする請求項２に記載の方法。
【請求項４】
前記少なくとも１つのトランザクションの遅延がさらに、
前記複数のマルチフェーズ・バス・トランザクションのうちの前記少なくとも１つが遅延されることを示すデファード信号を、前記エージェントによって前記スヌープ・フェーズ中に発行し、
対応するデファード応答トランザクションの要求アドレスとして使用されるデファード・コードを、前記エージェントによって前記応答フェーズ中に保持する
ことを特徴とする請求項１に記載の方法。
【請求項５】
前記少なくとも１つのトランザクションの遅延がさらに、
前記エージェントが前記情報を提供することが可能になった後に、前記複数のマルチフェーズ・バス・トランザクションのうちの前記少なくとも１つを完了させるために前記対応するデファード応答トランザクションを開始するよう前記エージェントによって保持されているデファード・コードを発行する
ことを特徴とする請求項４に記載の方法。
【請求項６】
前記複数のエージェントはそれぞれマイクロプロセッサを備えており、
前記複数のマルチフェーズ・バス・トランザクションのうちの前記１つを遅延することも取り消すこともできなくなるまで該マルチフェーズ・バス・トランザクションのうちの１つに依存するマルチフェーズ・バス・トランザクションを要求することを延期するよう、前記複数のマイクロプロセッサに要求することによって、データを求める前記複数のマルチフェーズ・バス・トランザクションのプロセッサ順序付けをおこなう
ことを特徴とする請求項１に記載の方法。
【請求項７】
それぞれマイクロプロセッサを有する複数のエージェントであってその少なくとも１つのマイクロプロセッサは選択されたプロトコルに従って動作するキャッシュを備えており、前記複数のエージェント間に結合されたバスを備えたコンピュータ・システムにおいて、前記複数のエージェントのうちの少なくとも１つによって開始される、データを転送する際の複数のマルチフェーズ・バス・トランザクションをサポートする方法であって、
（ｉ）前記複数のマルチフェーズ・バス・トランザクションのうちの少なくとも１つに関する情報を与えるためにアドレスされた前記複数のエージェントのうちの１つが、前記情報を所定期間内に与えることができず、（ｉｉ）前記少なくも１つのマイクロプロセッサの前記キャッシュが前記情報を修正済み状態で記憶していない場合に、前記複数のマルチフェーズ・バス・トランザクションのうちの少なくとも１つを遅延し、
前記マルチフェーズ・バス・トランザクションのうちの１つに依存するマルチフェーズ・バス・トランザクションを要求することを、前記複数のマルチフェーズ・バス・トランザクションのうちの前記１つを遅延することも、取り消すこともできなくなるまで延期するよう、前記複数のマイクロプロセッサに要求することによって、前記複数のマルチフェーズ・バス・トランザクションのプロセッサ順序付けをおこなう方法。
【請求項８】
さらに、前記少なくとも１つのマイクロプロセッサが、（ｉ）前記複数のマルチフェーズ・バス・トランザクションの各スヌープ・フェーズ中にキャッシュ・スヌープを実行し、（ｉｉ）前記少なくとも１つのマイクロプロセッサの前記キャッシュが前記データを前記修正済み状態で含む場合に、対応するスヌープ・フェーズの直後のデータ・フェーズ中に前記データを与えることによって、前記データのコヒーレンシを維持する
ことを特徴とする請求項７に記載の方法。
【請求項９】
キャッシュと、
パイプライン機構で伝送される複数のマルチ・フェーズ・トランザクションを追跡し且つ複数の信号を使用して通信を行う論理手段と
から構成されるバス・エージェントであり、
前記複数の信号は、
前記複数のマルチ・フェーズ・トランザクション群の１つのトランザクションを遅延するため、該トランザクションのための情報に関連して前記バス・エージェントによって受信されるデファード信号と、
スヌープ・フェーズ中にアサートされ、少なくとも１つのバスサイクルの間前記キャッシュについてスヌーピングをさらに行うために該スヌープ・フェーズを延長する複数の制御信号と
を含むことを特徴とするバス・エージェント。
【請求項１０】
前記複数の制御信号はＨＩＴ＃信号とＨＩＴＭ＃信号である
ことを特徴とする請求項９記載のバス・エージェント。
【請求項１１】
前記ＨＩＴＭ＃信号が前記スヌープ・フェーズ中にアサートされると暗黙的書き戻しトランザクションを行う論理手段を更に有する
ことを特徴とする請求項１０記載のバス・エージェント。
【請求項１２】
前記デファード信号に応答して応答フェーズ中にデファード・コードを保持し、且つこのデファード・コードを前記遅延されたトランザクションを完了するために実行されるデファード応答トランザクションのために要求されるアドレスとして使用する
ことを特徴とする請求項１１記載のバス・エージェント。
【請求項１３】
前記複数のマルチ・フェーズ・トランザクション群の少なくとも１つのトランザクションが遅延されないか或いは取り消されない状態になるまで、複数のマルチ・フェーズ・トランザクション群の１つに依存するマルチ・フェーズ・トランザクションの要求を延期することをバス・エージェントに求めることによって複数のマルチ・フェーズ・トランザクション群の処理順序を保持する論理手段を更に有する
ことを特徴とする請求項９記載のバス・エージェント。
【請求項１４】
前記デファード信号はトランザクションを遅延させるために活動化されるものであり、活動化されたＨＩＴＭ＃信号により無効にされるものである
ことを特徴とする請求項９記載のバス・エージェント。
【請求項１５】
トランザクションのための情報は当該トランザクションが遅延されたことを示すデファード応答をさらに有する
ことを特徴とする請求項９記載のバス・エージェント。
【請求項１６】
前記スヌープ・フェーズ中ならば上記デファード信号を受信し、また応答フェーズ中ならばデファード応答を受信する
ことを特徴とする請求項１５記載のバス・エージェント。
【請求項１７】
少なくとも第１、第２のマルチフェーズ・バス・トランザクションを含む複数のマルチフェーズ・バス・トランザクションをサポートするためのデータ転送バス手段と、
前記第１、第２のマルチフェーズ・バス・トランザクションに関するバス要求を開始するとともに、
前記複数のマルチフェーズ・バス・トランザクションの各々のスヌープ・フェーズ中にキャッシュ・スヌーピングを実行することによりデータのコヒーレンシを維持し、
さらに、前記データへのアクセスが得られた際にデファード応答トランザクションを開始するかあるいは前記少なくとも１つのトランザクションを再試行するかのいずれかが開始されるまで、前記データ転送バス手段を通じた前記複数のマルチフェーズ・バス・トランザクションのパイプライン化を妨害することなく、前記複数のマルチフェーズ・バス・トランザクションの少なくとも１つのトランザクションを遅延する
エージェント手段と
を備えたコンピュータ・システム。
【請求項１８】
前記エージェント手段は、前記スヌープ・フェーズ中において前記エージェント手段の内部キャッシュが修正済み状態にあるデータを含むことを検出した際に前記バス手段に第１の制御信号（ＨＩＴＭ＃）をアサートすることによって前記コヒーレンシを維持する
ことを特徴とする請求項１７記載のコンピュータ・システム。
【請求項１９】
前記エージェント手段は、前記バス手段上の複数のマルチフェーズ・バス・トランザクションのバスを通じたパイプライン化を一時的に停止させるため、前記スヌープ・フェーズ中において前記バス手段に関連して第１の制御信号（ＨＩＴＭ＃）と第２の制御信号（ＨＩＴ＃）とをほぼ同時にアサートすることによって前記コヒーレンシを維持する
ことを特徴とする請求項１７記載のコンピュータ・システム。
【請求項２０】
前記エージェント手段は、
スヌープ・フェーズ中において、前記少なくとも１つのトランザクションが遅延されることを示すデファード信号を発行し、
応答フェーズ中において、前記エージェント手段によって遅延応答トランザクションに関する要求アドレスとして使用されるデファード・コードを保持して、
前記少なくとも１つのトランザクションを遅延する
ことを特徴とする請求項１７記載のコンピュータ・システム。
【請求項２１】
前記エージェント手段は、少なくと１つのトランザクションが遅延されたりあるいは取り消されることができなくなるまで前記複数のマルチフェーズ・バス・トランザクションの内の少なくとも１つのトランザクションに依存するマルチフェーズ・バス・トランザクションの遅延を要求することによって前記複数のマルチフェーズ・バス・トランザクションのプロセッサ順序付けを、さらに提供する
ことを特徴とする請求項１７記載のコンピュータ・システム。
【請求項２２】
複数のエージェントと結合し、複数のマルチフェーズ・バス・トランザクションをバスを通じてパイプライン化するコンピュータ・システムであって、データを転送するため該複数のマルチフェーズ・バス・トランザクションをサポートする方法において、
各々のバス・トランザクションがその間に開始される複数のマルチフェーズ・バス・トランザクションに対する要求フェーズを受信し、
前記複数のマルチフェーズ・バス・トランザクションの各々のスヌープ・フェーズ中に複数の制御信号（ＨＩＴ＃，ＨＩＴＭ＃）を監視し、
前記少なくとも１つのスヌープ・フェーズ中にデファード信号（ＤＥＦＥＲ＃）をアサートすることにより前記バスを通じたパイプライン化を妨害することなく前記複数のマルチフェーズ・バス・トランザクションの少なくとも１つを遅延し、
前記少なくとも１つのトランザクションのスヌープ・フェーズ中に第１の制御信号（ＨＩＴＭ＃）が活動状態にある場合に前記少なくとも１つのトランザクションの遅延を取り消し、
前記複数の制御信号（ＨＩＴ＃、ＨＩＴＭ＃）をアサートして、前記複数のマルチフェーズ・バス・トランザクションの少なくとも１つのトランザクションに対して少なくとも１つ以上のバス・サイクルだけ前記スヌープ・フェーズを延長し、
１つのトランザクションの結果を供給するため複数の応答信号（ＲＳ［２：０］＃）を各々の応答フェーズ中にアサートすることによって複数の応答フェーズを提供する方法であって、さらにこの方法は、
前記受信される各々の要求フェーズはアドレス・ストローブ信号（ＡＤＳ＃）、アドレス、及び前記要求フェーズに関連するバス・トランザクションの要求タイプを示す複数の要求信号（ＲＥＱ［４：０］＃）のアサートを含み、
前記デファード信号（ＤＥＦＥＲ＃）がそれぞれのスヌープ・フェーズ中にアサートされて遅延が実行された場合に該遅延されたトランザクションに関わるコード化された応答が各々の応答フェーズ中に前記複数の応答信号（ＲＳ［２：０］＃）上に載せられ、
第１の要求フェーズと第２の要求フェーズが前記第１の要求フェーズに対応する第１の応答フェーズの提供前に受信される
ことを特徴とする方法。
【発明の詳細な説明】
発明の背景
これは、１９９４年５月１日に出願された米国特許出願第０８／２０６３８２号の部分継続出願である。
発明の分野
本発明は全般的には、コンピュータ・システムの分野に関し、詳細には、マルチプロセッサ・コンピュータ・システムで使用すべき高度パイプライン式バス・アーキテクチャに関する。
関連技術
コンピュータ・システムは、マイクロプロセッサ、メモリ装置、入出力装置を含むが、それに限らないいくつかの構成要素（下記では一般に「エージェント」と呼ぶ）を備えることは常識である。このようなエージェントは通常、システム・バスを通じて情報を交換する。コンピュータ・システムの全体的な性能は、システム・バスのこの交換速度（すなわち、速度、効率など）に直接関係しているので、その効率を高めるために多くの試みがなされている。
システムの性能を向上させる従来の１つの方法はパイプライン化である。パイプライン化とは、前のトランザクションが完了する前に新しいバス・トランザクションを開始できるようにするプロセスである。このプロセスは、データの読取りまたは書込みを求める要求と実際の読取りトランザクションまたは書込みトランザクションとの間の時間遅延を他のトランザクションによって使用することができるため、有効であることが証明されている。このような時間遅延は、エージェントのそれぞれの異なる応答機能によってもたらされる。したがって、パイプライン化では、システム・バスがより効率的に使用され、より優れた全体的なシステム性能がもたらされる。
コンピュータ・システムの設計の様々な他の発展によって、全体的な性能は向上するが、システム・バスを介してデータを転送するプロセスは複雑になる。したがって、パイプライン化はサポートするのがかなり難しい。
そのような発展の一例は「多重処理」である。多重処理とは、それぞれ、他のマイクロプロセッサと同時にタスクを実行する複数のマイクロプロセッサを単一のコンピュータ・システムで使用することである。理論的には、“ｎ”個のマイクロプロセッサを含むコンピュータ・システムは、“ｎ”倍の数のタスクを実行することができ、したがって単一のプロセッサを含むコンピュータの“ｎ”倍の速さで動作することができる。
多重処理の条件は、常に最新のデータ・バージョンがあり、各プロセッサが、タスクを実行する必要があるときには必ず各プロセッサに最新のデータ・バージョンが与えられることである。これを「データ・コヒーレンシ」と呼ぶ。しかし、データ・コヒーレンシを与えると、複数のトランザクションが未処理であるときに最新のデータ・バージョンがどこにあるかを判定することが困難であることが多いので、バス・トランザクションをパイプライン化することはますます困難になる。この問題に対する通常の対策は、データをキャッシュしているエージェントがそのデータをメモリに書き込むまでバス・トランザクションの実行を放棄することである。しかし、この対策は、最初にパイプライン化から得られていた利益をかなり失わせる。
システム・バスの性能を向上させるために個別に使用される他の方法は、マルチプロセッサ・システムにおける「プロセッサ順序付け」サポートである。プロセッサ順序付けは、コンピュータ・システム中の任意のプロセッサによって生成されるトランザクションがそのコンピュータ・システム中のすべてのエージェントによって同じ順序で観測されることを意味する。トランザクションを中止することができるパイプライン化環境では、プロセッサ順序付けを保証する１組のプロトコルを与えなければならない。
システム・バスの性能を向上させる他の方法は、デファード（deferred）・トランザクションを使用することである。デファード・トランザクションでは、要求時に完了できないトランザクションが、データを提供する責任を負うバス上の構成要素（すなわち、「応答側エージェント」）によって遅延させられる。データが得られると、応答側エージェントは、データを要求した構成要素（すなわち、「要求側エージェント」）を対象とする新しいトランザクションを開始する。これによって、バスが、まだ得られていないデータを求める要求側エージェントからの繰り返し失敗した要求で満たされるのが防止される。
デファード・トランザクションを使用してシステム・バスの効率を高めることは、コンピュータ・システムで複数のマイクロプロセッサを使用することと矛盾する。これは、トランザクションを遅延させている間に最新のデータ・バージョンの位置が移動する可能性があるからである。繰り返しになるが、コンピュータ・システムで複数のマイクロコンピュータを使用することは、バス・システムをより効率的に使用することと矛盾する。
コンピュータ・バスの効率を高めるために個別に使用されるこれらの方法と、マルチプロセッサ・システムに必要な条件との間の様々な矛盾のために、マイクロプロセッサ・コンピュータ・システムの全体的な効率の最大の潜在性が実現されたことはない。しかし、高度パイプライン式アーキテクチャを提供し、同時にＭＥＳＩキャッシュ・コヒーレンシ、プロセッサ順序付け、デファード・トランザクション応答サポートを含む複数のマイクロプロセッサをサポートするシステム・バスを開発できる場合、最大の潜在性により近い状態で実行するコンピュータ・システムを達成することができる。
発明の簡単な概要
本発明は、単一処理コンピュータ・システム、または好ましくは多重処理コンピュータ・システム内で使用される様々な構成要素間でメッセージおよびデータを交換する方法およびシステムである。
本発明の一態様によれば、コンピュータ・システム内にシステム・バスが準備されている。システム・バスは、数組のデータ線、アドレス線、状況線、エラー線としてグループ化された多数の信号線を含む。トランザクションは、調停、要求、エラー、スヌープ、応答、データを含む６つのフェーズに分割される。各フェーズ間で実行されるクロック・サイクルの数と、各フェーズ中にデータを保持する信号線の数は、バス・システムを通じて複数のトランザクションをパイプライン化できるような値に設定される。また、同じ信号線がその機能を実行する必要がないかぎり、それぞれの異なるトランザクションのそれぞれの異なるフェーズを同時にバス上に置くことができる。
本発明の好ましい実施態様では、暗黙的書き戻し（Implicit Writeback）トランザクションを使用することによってデータ・コヒーレンシが維持される。データ転送用バスを使用し、ローカル・メモリ（「キャッシュ」）を有する装置（「エージェント」）は、バス・トランザクションの要求フェーズの後にキャッシュ・スヌープを実行することを要求され、スヌープ・フェーズ中にそのスヌープの結果を提供する。スヌープ中に、キャッシング・エージェントによって、要求されたデータの最新コピーが検出された場合、そのエージェントは、パイプラインを妨害せずに要求側エージェントにデータを提供しなければならない。また、同じデータを要求する他のトランザクションが確実に最新のバージョンを受け取るように、そのデータの所有権がトランザクション全体にわたって管理される。
本発明の好ましい実施態様では待ち時間の長いトランザクションもサポートされる。要求時に、トランザクションを所定の期間で完了することができないとき、データを提供するエージェント（「応答側エージェント」）は、パイプラインを妨害せずにトランザクションを遅延することができる。後でデータが得られたときに、応答側エージェントは、新しいトランザクションを開始し完了応答およびデータを最初の要求側エージェントに与えることができる。デファード・トランザクションの場合にプロセッサ順序付けを維持するために、同じエージェントからのバック・ツー・バック書込みトランザクションは、第１のトランザクションに対して実行されたスヌープの結果が得られるまで禁止される。
【図面の簡単な説明】
本発明の特徴および利点は、以下に述べる本発明の詳細な説明から明白になろう。
第１図は、システム・バスに沿ったトランザクションのパイプライン化を開始し制御する複数のエージェントを備えるバス・クラスタのブロック図である。
第２図は、第１図のシステム・バスによってサポートされる２つのパイプライン式トランザクションによって実行されたフェーズを示す一般的なタイミング位相図である。
第３図は、要求開始型「書込み」トランザクションをサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第４図は、応答開始型「読取り」トランザクションをサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第５図は、読取りトランザクション中に実行されている暗黙的書き戻しトランザクションをサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第６図は、書込みトランザクション中に実行されている暗黙的書き戻しトランザクションをサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第７図は、複数の部分キャッシュ線読取りトランザクションをサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第８図は、同じエージェントからの複数のキャッシュ線読取りトランザクションをサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第９図は、複数の部分キャッシュ線書込みトランザクションをサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第１０図は、複数のキャッシュ線書込みトランザクションをサポートする第１のパイプライン式バスの例示的なタイミング図である。
第１１図は、同じデータを修正するために所有権を要求する２つの順次バス・トランザクションをサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第１２図は、デファード応答トランザクションに対するデファード応答をサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第１３図は、デファード・トランザクションに対するスヌープ責任をサポートして第１図のシステム・バス内で伝搬される情報信号の例示的なタイミング図である。
第１４図は、第１図のシステム・バスの状態を監視する際に使用すべき第１図のエージェントで実施されるインオーダー待ち行列を示すブロック図である。
第１５図は、第１図の１つのマイクロプロセッサ内で使用されるバッファ構造の例示的なブロック図である。
発明の詳細な説明
データ・コヒーレンシを維持しパイプライン化を妨害せずにプロセッサ順序付けサポートを行うようにパイプライン式システム・バスを効率的に操作する方法および装置について説明する。下記の詳細な説明では、本発明を十分に説明するために様々なバス・トランザクションの多数の特定の詳細および例示的なタイミング図について述べる。しかし、当業者には、本発明が、このような特定の詳細を組み込まずに実施できるが、任意のコンピュータ・システムでの使用に広く応用できることが明らかになろう。
詳細な説明では、コンピュータ・システム内の構成要素のある種の特性を説明するためにいくつかの語が頻繁に使用される。これらの語は相互に排他的なものではない。「要求側エージェント」とは、通常はデータを読み取り、あるいは書き込むために要求を開始するエージェントである。「応答側エージェント」とは、データを提供することによって要求に応答するエージェントである。「キャッシング・エージェント」は、マイクロプロセッサなどキャッシュ機能を有するエージェントである。「スヌーピング・エージェント」とは、バス・トランザクションによりデータ要求に対して内部メモリ、通常は１つのキャッシング・エージェントをスヌープするエージェントである。より一般的な語には、通常は書込みトランザクションからデータを受け取る「受け取り側」エージェントと、システム・バスに沿ってデータを送る要求側エージェント、または応答側エージェント、またはスヌーピング・エージェントである「データ転送」エージェントが含まれる。
第１図は、４つのマイクロプロセッサ２、４、６、８と、システム・バス２０に結合された入出力ブリッジ１０およびメモリ制御装置１２とを含むバス・クラスタ１５のブロック図である。上記で識別したこれらの「エージェント」はそれぞれ、バスを介してデータまたはメッセージを送り、あるいは受け取ることができる。この実施形態では、入出力ブリッジ１０は、システム・バス２０と、表示装置２３、英数字入力装置２１、大容量記憶装置２６、ハード・コピー装置２７を含むがこれらに限らない、入出力バス２２に結合されたいくつかの周辺装置との間の通信経路を形成する。この同じ実施形態では、メモリ制御装置１２は１組の動的ランダム・アクセス・メモリ１９（ＤＲＡＭ）に結合されているが、他のメモリ装置も予想される。さらに、システム・バス２０と、このバス・クラスタが他のバス・クラスタ１７ａないし１７ｍ（“ｍ”は任意である）と通信できるようにするクラスタ相互接続機構１６に、クラスタ・ブリッジ１４が結合される。
信号線およびシステム・バス２０の論理機構は、電力消費量および電磁干渉（ＥＭＩ）が低い、ゼロックス社（Ｘｅｒｏｘ  Ｃｏｒｐｏｒａｔｉｏｎ）から市販されているＧｕｎｎｉｎｇ  Ｔｒａｎｓｃｅｉｖｅｒ  Ｌｏｇｉｃ（ＧＴＬ）を使用して実施される。この技術を使用することによって、最大８つのエージェントをシステム・バス２０に結合することができ、しかも最大１００ＭＨｚのバス・クロック速度が維持される。様々な実施形態には、３３．３ＭＨｚ、４４．４ＭＨｚ、６６．７ＭＨｚを含む様々なクロック速度が組み込まれている。ただし、他のクロック速度を使用することができる。これらのクロック速度によって、本発明は、様々なハードウェア機能を有するコンピュータ・システムに組み込むことができる。
第２図は、第１図のシステム・バスによってサポートされる２つのバス・トランザクションのフェーズを示すタイミング図である。各バス・トランザクションは、システム・クロック“ＣＬＫ“２９の選択された数のクロック・サイクル（“Ｔ１”、“Ｔ２”などと呼ばれる）によって適切に分離された６つのフェーズ、すなわち調停、要求、エラー、スヌープ、データ、応答を含む。これらのフェーズを必要に応じて様々なタイミング成分で構成できることが企図される。
調停フェーズ中には、残りのフェーズ中のバスの所有権が決定される。要求フェーズ中には、調停フェーズのシステム・バスを「所有する」エージェントは、要求側エージェントによって要求されたトランザクションを開始するのに必要な情報を他のエージェントへ提供する。この情報は、処理すべきデータがもしあれば、そのアドレスと、実行すべき動作を示すコードとを含む。要求フェーズ中にパリティ・エラーが検出されると、エラー・フェーズ中にエラー信号がアサートされる。スヌープ・フェーズ中には、システム上のキャッシング・エージェントによって実行されたスヌープの結果がアサートされる。データ・フェーズ中には、要求されたデータ転送が行われる。トランザクションがバス・パイプラインから除去され、応答フェーズ中に、そのトランザクションの結果がアサートされる。後述のように情報を供給するために各フェーズ中に様々な信号が使用される。
好ましい実施形態でサポートされるトランザクションのタイプには、（ｉ）３２バイトまたは４つの８バイト「チャンク（chunk）」からなるキャッシュ線の読取りおよび書込み、（ｉｉ）８バイトおよび１６バイトの読取りおよび書込み（部分キャッシュ線読取りおよび書込みを呼ばれる）、（ｉｉｉ）キャッシュ線の読取り・無効化、（ｉｖ）キャッシュ線の無効化が含まれるが、これらに限らない。無効化トランザクションでは、他のキャッシング・エージェントが、要求されたデータを記憶しているキャッシュ線を「無効」状態にし（無効の説明については下記を参照されたい）、そのため、要求側エージェントは、それ自体のキャッシュ内の要求されたデータの専用所有権を得ることができる。これは本発明の一実施形態でサポートされるトランザクションであるが、他の実施形態は異なる１組のトランザクションを使用し、しかも本発明を組み込むことができる。
バス調停を実行する際、第１図の各エージェントは、４つの調停信号群、すなわち、ＢＲ［３：０］＃信号、ＢＰＲＩ＃信号、ＢＮＲ＃信号、ＬＯＣＫ＃信号に依存する。ＢＲ［３：０］＃信号はバス要求信号であり、バス所有権要求を受け取ったり、送ったりするために使用される。ＢＰＲＩ＃信号は優先順位要求信号であり、エージェントが高優先順位のバス・エージェントからバス所有権要求を受け取っていることを示すために使用される。さらに、ＬＯＣＫ＃信号はバス・ロック・トランザクション信号であり、あるエージェントによって、バス所有権が現在ロックされていることをすべての他のエージェントに知らせるために使用される。すなわち、エージェントがＬＯＣＫ＃信号をアサートしている間にバス所有権を変更することはできない。ＢＮＲ＃信号は、任意のエージェントによって、すべての他のエージェントが新しいバス・トランザクションをアサートすることを一時的に要求するためにアサートされる。
要求フェーズでは、新しいバス・トランザクション要求を作成するために使用される信号はＡＤＳ＃、ＲＥＱ［４：０］＃、Ａ［３５：３］＃、ＡＰ［１：０］＃、ＲＰ＃である。ＡＤＳ＃をアサートすることは、要求フェーズ中の残りの信号が有効であることを示す。ＲＥＱ［４：０］＃は、バス・トランザクション中に出された要求のタイプを示す。Ａ［３５：３］＃は、要求されたバス・トランザクションのターゲットとされるアドレスが、もしあれば、それを示す。ＲＰ＃およびＡＰ［１：０］＃は、それぞれ信号ＲＥＱ［４：０］＃およびＡ［３５：３］＃に対するパリティ保護を行う。この応用例では、信号ＡＤＳ＃、ＲＥＱ［４：０］＃、Ａ［３５：３］＃、ＡＰ［１：０］＃、ＲＰ＃は、ＡＤＳ＃がアサートされたときから２連続クロック・サイクルにわたって有効である。参照を容易にするために、第１のクロック・サイクルでアサートされる信号には下付き文字“ａ”が付加され、第２のクロック・サイクルでアサートされる信号には下付き文字“ｂ”が付加される。たとえば、第１のクロック・サイクルでアサートされるＲＥＱ０＃を“ＲＥＱａ０＃”と呼ぶ。同様に、第２のクロック・サイクルでアサートされるＲＥＱ０＃を“ＲＥＱｂ０＃”と呼ぶ。
エラー・フェーズでは、要求信号がパリティ・エラーを含む場合にはＡＥＲＲ＃がアサートされる。ＡＥＲＲ＃がアサートされると、進行中のトランザクションが中止され、トランザクションを発行しているエージェントはそのトランザクションを調停フェーズから再開する必要がある。ＡＥＲＲ＃がアサートされた場合、すべてのエージェントがその調停状態を再同期させ、調停の失敗によって発生したパリティ・エラーのための「自動補正」を可能にする必要もある。
スヌープ・フェーズでは、好ましい実施形態でスヌープ結果を与えるために使用される信号はＨＩＴ＃およびＨＩＴＭ＃である。ＨＩＴ＃は、要求されたデータを共用状態または専用状態（下記で定義する）にし、要求されたデータを共用状態で要求側エージェント自体のキャッシュに入力すべきであることを要求側エージェントに示したあらゆるキャッシング・エージェントによってアサートされる。ＨＩＴＭ＃は、要求されたデータを修正済み状態（下記で定義する）にしたキャッシング・エージェントによってアサートされる。スヌープ・フェーズ中にＨＩＴＭ＃がアサートされた場合、第６図および第７図に関して論じるようにデータ・コヒーレンシを保存できるように暗黙的書き戻しと呼ばれる特殊なトランザクションを行わなければならないことが要求側エージェント、スヌーピング・エージェント、メモリ・エージェントに通知される。
エージェントがスヌープを完了する追加時間を必要とする場合、ＨＩＴ＃とＨＩＴＭ＃を同時にアサートし、２サイクルにわたってスヌープ・フェーズを遅延させることができる。これによって、パイプライン化が一時的に停止されるが、それをフラッシュさせる必要はなくなる。また、応答側エージェントは、必要なデータがただちには得られないと判定した場合、後でトランザクションを再開して要求されたデータを提供し、あるいは要求側エージェントにトランザクションを再試行させるオプションを、応答側エージェントに提供するＤＥＦＥＲ＃信号をアサートすることができる。
応答フェーズは、トランザクションの終わりと、応答／スヌープ開始データ・フェーズが開始したことを示す。信号ＲＳ［２：０］＃は、応答フェーズが開始されたこととトランザクションの結果を示すコード化メッセージを送るために使用される。これらの「応答結果」を下記の表Ａにリストする。
表Ａ−応答結果
コード化メッセージ    ＲＳ２＃    ＲＳ１＃    ＲＳ０＃
アイドル                  ０          ０          ０
再試行                    ０          ０          １
デファード                ０          １          ０
予約                      ０          １          １
ハード障害                １          ０          ０
データなし                １          ０          １
暗黙的書き戻し            １          １          ０
正常データ                １          １          １
応答結果は、ＲＳ［２：０］＃がアサートされるまで「アイドル」のままである。「再試行」応答が可能なのは、スヌープ・フェーズ中に（非活動状態のＨＩＴＭ＃を含む）ＤＥＦＥＲ＃がアサートされたときだけである。再試行応答を用いる場合、応答エージェントは、トランザクションを再試行しなければならないことを要求側エージェントに知らせる。「ハード障害」は、トランザクションの障害を示す有効な応答である。要求側エージェントは、回復処置をとる必要がある。「データなし」応答が必要なのは、アドレスされたエージェントからデータが返されず、かつスヌープ・フェーズ中にＤＥＦＥＲ＃およびＨＩＴＭ＃が非活動状態であるときである。「暗黙的書き戻し」は、スヌープ・フェーズ中にＨＩＴＭ＃がアサートされたときに必要な応答である。スヌーピング・エージェントは、修正済み状態であることが分かったキャッシュ線を送るために必要である。メモリ・エージェントは、応答をドライブし修正済みキャッシュ線を受け入れるために必要である。「正常データ」応答が必要なのは、要求フェーズからのバス要求が読取り応答を必要とし、かつスヌープ・フェーズ中にＨＩＴＭ＃とＤＥＦＥＲ＃が共にアサート解除されているときである。「正常データ」応答を用いる場合、応答側エージェントは、読取りデータを応答と共に送る必要がある。
データ・フェーズ中には、いくつかのバス線、すなわち、Ｄ［６３：０］＃、ＤＥＰ［７：０］＃、ＤＲＤＹ＃、ＤＢＳＹ＃に関連付けられたバス線がドライブされる。Ｄ［６３：０］＃はデータ信号であり、それぞれ、６４本のデータ線を通して１データ・ビットを専用に伝搬する。ＤＥＰ［７：０］＃はパリティ信号であり、Ｄ［６３：０］＃と共に使用される。ＤＲＤＹ＃およびＤＢＳＹ＃は、データ線Ｄ［６３：０］＃の使用を調和させ制御するために使用される信号である。すべてのデータ・フェーズ・バス信号、ＤＢＳＹ＃、ＤＲＤＹ＃、Ｄ［６３：０］＃、ＤＥＰ［７：０］＃は、データ転送エージェントによってドライブされる。クロック・サイクル“ｎ”中に線Ｄ［６３：０］＃上にデータを置くには、次のトランザクション中にこのデータ線が空くことを示すＤＢＳＹ＃のアサート解除をデータ転送エージェントがクロック・サイクル“ｎ−１”中に観測しなければならない。ＤＲＤＹ＃がアサートされるのは、データ線Ｄ［６３：０］＃上に有効なデータが置かれたときである。また、要求開始型（「書込み」）トランザクションに関するデータ・フェーズの前のあるときに応答側エージェントによってバス信号“ＴＲＤＹ＃”がアサートされ、応答側エージェントが要求側エージェントからデータを受け取る準備が完了したことが示される。ＴＲＤＹ＃は、暗黙的書き戻しトランザクション中に修正済みデータを含むデータをスヌーピング・エージェントから受け取る準備ができたことを示すためにも使用される。
下記のプロトコル規則は、データ・フェーズ中のデータ転送を調和させるために使用される上記の制御信号の使用法を規定したものである。要求フェーズとデータ・フェーズとの間の相互作用は、あるトランザクションと次のトランザクションとの間の円滑な遷移を確保するために重要なので、要求フェーズに関するプロトコル規則についても論じる。
ｎ番目の要求開始型（「書込み」）トランザクションに応答して、要求フェーズの第１サイクルから最低で３クロック・サイクル後および前のｎ−１番目のトランザクションの応答フェーズから最低で１クロック・サイクル後にトランザクションが転送すべき書込みデータをトランザクションが有するときに要求開始型ＴＲＤＹ＃がアサートされる。応答側エージェントは、ＴＲＤＹ＃信号をアサートすることに責任を負う。また、ｎ番目のトランザクションに関するスヌープ結果がＨＩＴＭ＃がアサートされたことを示す場合には必然的に、スヌープ開始型ＴＲＤＹ＃をアサートしなければならない。スヌープ開始型ＴＲＤＹ＃がアサートされたことは、応答側エージェントの暗黙的書き戻しデータを受け入れる準備が完了したことをスヌープ・エージェントに示す。
ＴＲＤＹ＃をアサート解除できるのは、非活動状態のＤＢＳＹ＃および活動状態のＴＲＤＹ＃が１クロック・サイクルにわたって観測されたときである。ＴＲＤＹ＃がアサートされたクロック・サイクルにＤＢＳＹ＃が非活動状態であることが観測され、次のクロック・サイクルが、前にＴＲＤＹ＃がアサートされてから３クロック・サイクル後である場合、１クロック・サイクル後にＴＲＤＹ＃をアサート解除することができる。応答結果が与えられるまでＴＲＤＹ＃をアサート解除する必要はない。ただし、書込みトランザクション中に暗黙的書き戻しが要求された場合はそうではなく、この場合、ＴＲＤＹ＃をできるだけ早くアサート解除し、暗黙的書き戻しに必要な第２のアサートを可能にしなければならない。
ｎ番目のトランザクションに関するスヌープ結果が与えられ、前のｎ−１番目のトランザクションに関する応答結果が与えられた後、ｎ番目のトランザクションに関する応答結果（応答フェーズ）が与えられる。トランザクションが書込みデータを含む場合、応答フェーズを実行できるのは、ＴＲＤＹ＃がアサートされ、非活動状態のＤＢＳＹ＃と共に観測された後だけである。トランザクションが書込みデータを含み、暗黙的書き戻しを伴う場合、応答フェーズを実行できるのは、ＴＲＤＹ＃が２度にわたってアサートされ、非活動状態のＤＢＳＹ＃と共に観測された後である。応答結果が正常データ応答を示す場合、応答フェーズを実行できるのは、前のトランザクションのＤＢＳＹ＃アサートが非活動状態であることが観測された後だけである。
一般に、ＴＲＤＹ＃に応答するエージェントは、ＴＲＤＹ＃が活動状態であることが観測され、ＤＢＳＹ＃が非活動状態であることが観測された後に、データを提供し、あるいはＤＢＳＹ＃を１クロック・サイクルにわたってアサートしなければならない。データがまだ得られない場合はＤＢＳＹ＃をアサートしてデータ線を「保持」することができる。データを提供するエージェントがＴＲＤＹ＃を観測した場合、それが、現在ＤＢＳＹ＃をアサートしているエージェントであり、かつＤＢＳＹ＃がアサート解除されることを事前に予想することができる場合には、ＤＢＳＹ＃がアサート解除されたことが観測される１クロック・サイクル前にそのデータの書込みを開始することができる。読取り転送は、応答フェーズがドライブされるのと同じクロック・サイクルで開始しなければならない。このプロトコルは、様々な動作の一連の例示的な図を介して示すことができる。
本発明の好ましい実施形態で使用されるシステム・バスは、ＭＥＳＩキャッシュ・プロトコルを使用することによってデータ・コヒーレンシを維持する。ＭＥＳＩキャッシュ・プロトコルでは、システム・バス上の各キャッシング・エージェントは４つの状態のうちの１つを、そのエージェントがキャッシュする各データ線に関連付ける必要がある。これらの状態とは、「修正済み」、「専用」、「共用」、「無効」であり、したがってＭＥＳＩと呼ばれる。具体的には、修正済み状態のキャッシュ線は、データが、キャッシング・エージェントによって変更され、したがってメモリ・エージェントから得られるデータと異なるものとなっていることを示す。システムが正しく動作している場合、修正済み状態のこのデータは、最新のデータ・バージョンである。また、専用状態のキャッシュ線は、キャッシング・エージェントが、メモリ・エージェントに記憶されているデータと同じデータを有し、現在同じデータをキャッシュしている他のキャッシング・エージェントがないことを示す。共用状態のキャッシュ線は、そのキャッシング・エージェント、他のキャッシング・エージェント、メモリ・エージェントが現データ・バージョンを有することを示す。無効状態のキャッシュ線は、キャッシュ線内のデータが無効であることを示す。要求フェーズ中に提供された情報に基づいてスヌープを実行し、次いでそのスヌープ・フェーズの結果をアサートするよう各キャッシング・エージェントに要求することにより、システム・バス上のあらゆるトランザクションによってＭＥＳＩキャッシュ・プロトコルを使用することができる。
第３図は、要求開始型データ転送または書込みトランザクションを示すタイミング図である。この図で、“Ｔｎ”はシステム・バス・クロック（“ＣＬＫ”）のｎ番目のクロック・サイクルを示す。ＡＤＳ＃およびＲＥＱａ０＃は、トランザクション要求を開始するために使用される信号である。この応用例全体にわたって、すべての事象は、観測される１クロック・サイクル前にアサートされる。たとえば、ＡＤＳ＃は時間Ｔ２でローになり、あるいは観測されるものとして示されている。これは、ＡＤＳ＃がクロック・サイクルＴ１中に、あるエージェントによって論理ローとしてアサートされた結果である。この規約が使用されるのは、トランザクションがバス全体にわたって観測されるのに１クロック・サイクルかかるからである。円は、信号が観測されることを示し、これに対して、正方形はアサートを示すために使用される。
依然として第３図を参照すると分かるように、要求側エージェントが、システム・バスの制御を得て、時間Ｔ２での信号ＡＤＳ＃およびＲＥＱａ０＃のアサートによって示したようにトランザクションの要求フェーズ中に書込み要求を発行したときに、要求開始型トランザクションが開始する。要求側エージェントは次いで、時間Ｔ５でそのデータを受け取るエージェント、通常は、ＤＲＡＭに結合されたメモリ制御装置によってＴＲＤＹ＃がアサートされるまで待機する。スヌープ・フェーズ中のクロック・サイクルＴ６には信号ＨＩＴＭ＃はアサートされないので、暗黙的書き戻しトランザクションは必要とされない。ＴＲＤＹ＃がアサートされた後、要求側エージェントは、ＤＢＳＹ＃がアサートされているかどうかを判定する。ＤＢＳＹ＃は時間Ｔ４およびＴ５ではアサートされておらず、要求側エージェントは、データ・フェーズ中に、ＤＲＤＹ＃をアサートし、同時に線Ｄ［６３：０］＃上にデータを置くことによって、クロック・サイクルＴ６でデータの供給を開始する。これはクロック・サイクルＴ７で観測される。
トランザクションが、単一の８バイト・チャンクを使用する部分キャッシュ線書込みであるため、次のクロック・サイクル中にはデータ線Ｄ［６３：０］＃が使用できるので、ＤＢＳＹ＃をアサートする必要はない。トランザクションで複数の８バイト・チャンクが使用される場合、ＤＢＳＹ＃はＴ６でアサートされ、最後のチャンクが与えられる１クロック・サイクル前までアサートされたままになる。ＴＲＤＹ＃がアサートされ、非活動状態のＤＢＳＹ＃と共に観測された後、応答結果が書込みトランザクションの間アサートされる。
第４図は、データ転送を含む応答開始型（「読取り」）トランザクションのタイミング図である。読取りトランザクションが開始するのは、時間Ｔ２で示したバス・トランザクションの要求フェーズ中に、ＡＤＳ＃をアサートしＲＥＱａ０＃をアサート解除することによって読取り要求が出されたときである。読取り要求が出された後、要求側エージェントは、ＤＲＤＹ＃がアサートされ、システム・バス上に有効なデータが置かれたことが示されるまで待機し、その後、そのデータの読取りを開始する。応答開始型トランザクション中にはＴＲＤＹ＃をアサートする必要はない。トランザクションが、２つの８バイト・チャンクを使用する部分キャッシュ線読取りなので、ＤＢＳＹ＃はＴ８、すなわち第２のチャンクが与えられるクロック・サイクルの１クロック・サイクル前までアサートされない。読取りトランザクション中には、スヌープ結果が観測されＤＢＳＹ＃が非活動状態であることが観測されてから１クロック・サイクル後に応答結果がアサートされる。
第５図は、暗黙的書き戻しを使用するデータ転送を含む応答開始型トランザクションのタイミング図である。このトランザクションは、Ｔ２でＡＤＳ＃がアサートされＲＥＱａ０＃がアサート解除され、読取りトランザクションであることが示されたときに開始する。次いで、キャッシング・エージェントは、それ自体のキャッシュをスヌープし、要求された最新のデータ・バージョンを有することを検出すると、トランザクションのスヌープ・フェーズ中のＴ６にＨＩＴＭ＃をアサートすることによって、そのキャッシング・エージェントがそのデータを所有していることを示す。スヌーピング・エージェントは次いで、要求側エージェントにデータを提供する責任を負う。ＨＩＴＭ＃がアサートされた後、応答側エージェントは、たとえ前にはそうする必要がなかった場合でも、ＴＲＤＹ＃をアサートしキャッシング・エージェントからデータを受け取る責任を負う。これは、Ｔ７で行われＴ８で観測される。スヌーピング・エージェントは、ＴＲＤＹ＃がアサートされたことを検出し、線Ｄ［６３：０］＃上にデータを置きＤＢＳＹ＃およびＤＲＤＹ＃をアサートすることによってデータの提供を開始する。この例のキャッシング・エージェントは１クロック・サイクルおきにしかデータ・チャンクを提供できないので、ＤＲＤＹ＃は１クロック・サイクルおきにしかアサートされず、ＤＢＳＹ＃は、Ｔ１６で最後のデータ・チャンクが観測される１クロック・サイクル前にアサート解除されたことが観測される。要求結果は、クロック・サイクルＴ８でＴＲＤＹ＃がアサートされたことが観測されＤＢＳＹ＃がアサート解除されたことが観測された後、クロック・サイクルＴ９でアサートされ、Ｔ１０で観測される。
第６図は、書込みトランザクション中に行われる暗黙的書き戻しを示す例示的なタイミング図である。書込みトランザクション中に暗黙的書き戻しを行うときには、２回のデータ転送が必要である。第１のデータ転送は、通常要求開始型書込みであり、第２のデータ転送は暗黙的書き戻しである。受け取り側エージェントは、通常はメモリ・エージェントであり、両方の書込みを受け取り、情報を１本のキャッシュ線としてマージし、このキャッシュ線がメモリに入力される。
時間Ｔ２で、ＡＤＳ＃およびＲＥＱａ０＃をアサートすることによって書込み要求が発行された後、応答側エージェントは、３クロック・サイクルが経過した後Ｔ５で第１のＴＲＤＹ＃をアサートする。Ｔ６で、暗黙的書き戻しが必要であることを示すＨＩＴＭ＃が観測される。やはり受け取り側エージェントによって行われたこの第２のＴＲＤＹ＃アサートは、Ｔ６でスヌープ結果が観測された後、かつ２回のアサートを区別できるようにＴ６で第１のＴＲＤＹ＃がアサート解除された後に、Ｔ８で観測され、行われる。要求側エージェントは、Ｔ５で第１のＴＲＤＹ＃がアサートされた後、ＤＲＤＹ＃およびＤＢＳＹ＃をアサートし線Ｄ［６３：０］＃上にデータを置くことによってデータの提供を開始する。スヌープ側エージェントは、Ｔ１０でＤＢＳＹ＃をアサートしてデータを提供する意図を示す前に、Ｔ８でＤＢＳＹ＃がアサート解除され要求開始型データ転送が完了したことが示されたことを検出するまで待機しなければならない。Ｔ１０でＤＢＳＹ＃がアサートされるが、データは実際には、Ｔ１２でＤＲＤＹ＃がアサートされるまで提供されないことに留意されたい。スヌーピング・エージェントは、データを有さない場合、Ｔ１０でＤＢＳＹ＃をアサートせず、データ転送は行われない。Ｔ１０で、暗黙的書き戻し応答を示す応答結果がシステム・バス上に置かれる。
第７図は、定常状態で行われる複数の部分キャッシュ線読取りトランザクションを示すタイミング図である。各トランザクション中には１つのデータ・チャンクしか書き込まれないので、ＤＢＳＹ＃はアサートされない。図で示したように、この定常状態では読取りを３クロック・サイクルおきに行うことができる。
第８図は、同じエージェントからバック・ツー・バックで行われる全キャッシュ線読取りの定常状態動作を示す。トランザクション１に関する応答およびデータ転送は、Ｔ８、すなわちスヌープ・フェーズから２クロック・サイクル後に行われる。データは、４連続２クロック・サイクル・タイム・フレームで送られる。ＤＢＳＹ＃は、トランザクション１ではＴ８でアサートされ、Ｔ１１、すなわち最後のデータ転送の前のクロック・サイクルまでアサートされたままになる。データが同じエージェントから提供されている場合にのみ、中間ターンアラウンド・サイクルなしで連続データ転送を行うことができる。これは、エージェントが、クロック・サイクルＴ１１およびＴ１５でＤＢＳＹ＃がアサート解除されることを予想し、クロック・サイクルを失わずに次のトランザクションのデータ・フェーズを開始することができるためである。ＴＲＤＹ＃がアサートされないのは、読取りトランザクションがあり、かつスヌープ結果が、暗黙的書き戻しデータ転送がないことを示すからである。信号ＲＳ［２：０］＃がアサートされることによって示される応答フェーズと同じクロック・サイクルに第１のデータ転送を行わなければならないことに留意されたい。現トランザクションに関する応答が「正常データ」または暗黙的書き戻し応答である場合、この応答をドライブできるようにするには、前のトランザクションに関するＤＢＳＹ＃をアサート解除しておかなければならない。
第９図は、フルスピード部分キャッシュ書込みトランザクションを含むシステム・バスの定常状態動作を示す。第１のトランザクションは、アイドル状態のシステム・バス上で行われ、第３図の簡単な書込みケースに類似している。ＴＲＤＹ＃はＴ５、すなわちＡＤＳ＃およびＲＥＱ［４：０］＃がアサート解除されてから３クロック後にアサートされる。Ｔ６で暗黙的書き戻しがないことを示す非活動状態のＨＩＴＭ＃が観測された後、Ｔ８で応答結果がアサートされる。Ｔ５で、ＴＲＤＹ＃が活動状態であることが観測され、ＤＢＳＹ＃が非活動状態であることが観測される。したがって、ＤＲＤＹ＃がアサートされることによって示されるようにＴ７でデータ転送を開始することができる。データ転送には１クロック・サイクルしかかからないので、ＤＢＳＹ＃はアサートされない。第２のトランザクションに関するＴＲＤＹ＃は、第１のトランザクションに関する応答結果がサンプリングされるまで待機しなければならない。ＴＲＤＹ＃は、応答結果が観測された後のクロック・サイクルでアサートされる。第２のトランザクションに関するスヌープ結果がＴ９で観測されたので、Ｔ１１で応答をドライブすることができる。Ｔ１０でＴＲＤＹ＃が観測されると共に、ＤＢＳＹ＃がアサート解除され、Ｔ１２でデータがドライブされる。
第１０図は、２つのエージェントのみの間のデータ転送を含むフルスピード全キャッシュ線書込みトランザクションを含むバスの定常状態動作を示す。第１のトランザクションはアイドル状態のシステム・バス上で行われる。ＴＲＤＹ＃はＴ６まで据え置かれる。応答結果は、Ｔ６で観測された非活動状態のＨＩＴＭ＃が、暗黙的書き戻しがないことを示した後、Ｔ８でドライブすることができるが、この例ではＴ９でドライブされる。Ｔ６で、ＴＲＤＹ＃が活動状態であることが観測され、ＤＢＳＹ＃が非活動状態であることが観測される。したがって、ＤＢＳＹ＃がアサートされることによって示されるように、Ｔ８でデータ転送を開始することができる。
ＲＳ［２：０］＃とＴＲＤＹ＃が共に同じエージェントから得られたものである場合、応答結果がドライブされた後のクロック・サイクルで第２のトランザクションに関するＴＲＤＹ＃をドライブすることができる。同じエージェントが両方の要求開始型データ転送をドライブする際は、特殊な最適化を行うことができる。要求側エージェントは、Ｔ１１で、ＤＢＳＹ＃をアサート解除し、トランザクション２に関してアサートされたＴＲＤＹ＃をサンプリングし、トランザクション２に関するデータ転送を所有しているので、Ｔ１２、すなわちＤＢＳＹ＃がアサート解除されてから１クロック後に次のデータ転送をドライブすることができる。Ｔ１２で、データを受け取ったエージェントは、活動状態のＴＲＤＹ＃および非活動状態のＤＢＳＹ＃をサンプリングし、Ｔ１２から開始するデータ転送を受け入れる。トランザクション２に関するスヌープ結果がＴ９で観測されたので、応答側エージェントはＴ１２で自由に応答をドライブすることができる。
要求側エージェントによって待機状態が挿入されることはないことに留意されたい。この場合、最終的にバスのバック・エンドがフロント・エンドを抑圧するが、全バス帯域幅を達成することができる。一実施形態では、マイクロプロセッサは、ある種の例でそれが回避できる場合でも常に、書込みデータ転送間にターンアラウンド・サイクルを挿入する。
暗黙的書き戻しトランザクション中の２回のパイプライン式トランザクション間でデータ・コヒーレンシを維持するために、最初にトランザクションを要求したエージェント（すなわち、要求側エージェント）は、この第１のトランザクションのスヌープ・フェーズを観測した後にキャッシュ線のスヌープ責任を負う。また、要求側エージェントは常に、応答フェーズを観測し、スヌープ開始型転送の暗黙的書き戻しに、要求されているもの以外のデータが含まれるかどうかを判定する。たとえば、最初の要求が部分線読取りトランザクション、すなわちキャッシュ線全体の一部しか必要としないトランザクションである場合、要求側エージェントは、３２バイトを含むキャッシュ線書き直しの第１の８バイト・チャンクから必要なデータを得る。最初の要求が線読取りトランザクションまたは線読取り無効化トランザクション（すべての他のキャッシング・エージェントにデータを無効状態にするよう通知するトランザクション）である場合、要求側エージェントは線全体を吸収する。最初の要求が線無効化トランザクションであり、この線が他のキャッシュ内で修正されている場合、要求側エージェントは、スヌープ開始型データ・フェーズで受け取った更新済みキャッシュ線で内部キャッシュ線を更新する。最初の線無効化トランザクションがデファード応答を受け取った場合、デファード応答のスヌープ・フェーズ中のＨＩＴＭ＃は、データが返されることを示し、要求側エージェントはそのデータで内部キャッシュを更新する。要求側エージェントがキャッシュ線に対するスヌープ責任を受け入れ、ただちにその後のトランザクションに応答してその責任を放棄すると、暗黙的書き戻しを実行する前にキャッシュ線を１度だけ内部用途に使用することができる。
要求側エージェントは、読取り／書込みトランザクション中に他のエージェントにそのキャッシュをスヌープさせるだけでなく、要求側エージェント自体のキャッシュをスヌープすることができる。この自己スヌープ機能によって、要求側エージェントはそれ自体のトランザクション要求をスヌープし、スヌープ・フェーズ中にスヌープ結果を提示することができる。スヌープが要求側エージェントのキャッシュ中の「修正済み」キャッシュ線をヒットした場合、要求側エージェントはＨＩＴＭ＃をアサートし、スヌープ開始型データ・フェーズの責任を負う。メモリ・エージェントは、自己スヌープ機能のための書き直しと通常のスヌープ機能のための暗黙的書き戻しを区別しない。いずれの場合も、アドレスされたメモリ・エージェントは、応答側エージェントのままとなり、暗黙的書き戻しも受け取り、それを書込みデータとマージする。
たとえば、要求側エージェントが、バス・ロック変数と呼ばれるある種のデータにアクセスすると、キャッシュ線は、バス・トランザクションを発行する前に内部キャッシュ・ロックアップを行う必要なしにバス・ロック・トランザクションの一部として内部キャッシュから取り出される。したがって、トランザクションでは自己スヌープ機能が必要である。自己スヌープ機能は、ページ・テーブル項目（すなわち、ページ属性）によって、アクセスされた変数がキャッシュ不能（キャッシュ・メモリに記憶すべきではないデータ）と定義されている場合にも必要である。この場合、内部キャッシュ・ロックアップは実行されずに、トランザクションがシステム・バスに発行される。ページ・テーブル・エイリアシングまたはその他の理由のために、キャッシュ線は依然としてその内部キャッシュに存在することができる。この場合、キャッシュ線は、バス・トランザクションの一部としてキャッシュから書き直される。
簡単に言えば、スヌーピング・エージェントとは、トランザクションのスヌープ・フェーズ中にＨＩＴＭ＃をアサートするエージェントである。スヌーピング・エージェントは、暗黙的書き戻し中に２つのパイプライン式トランザクション間のデータ・コヒーレンシを維持するある種の責任も有する。ＨＩＴＭ＃をアサートする際、スヌーピング・エージェントはトランザクションの暗黙的書き戻しに対する責任を引き受ける。スヌーピング・エージェントは、メモリ・エージェントからのスヌープ開始型ＴＲＤＹ＃アサートを待ち、メモリ・エージェントによる暗黙的書き戻し応答アサートに同期した活動状態のＴＲＤＹ＃（および非活動状態のＤＢＳＹ＃）から厳密に２クロックに渡ってＤＢＳＹ＃をアサートすることによって暗黙的書き戻しデータ転送を開始する。
ＴＲＤＹ＃がスヌープ開始型のものであるか、それとも要求開始型のものであるかは、トランザクションを開始させた要求のタイプによって判定される。書込みトランザクションでは、第１のＴＲＤＹ＃アサートは常に書込みデータ転送を要求し（要求開始型データ転送）、任意選択で、第２のＴＲＤＹ＃アサートは暗黙的書き戻しデータ転送を要求する（スヌープ開始型データ転送）。スヌープされたトランザクションがキャッシュ線全体を書き込む場合、スヌーピング・エージェントは暗黙的書き戻しデータを送っても、あるいは送らなくてもよい。
最初にトランザクションの対象となり、通常はＤＲＡＭを制御するエージェントは、アドレスされるメモリ・エージェントと呼ばれる。アドレスされたメモリ・エージェントは、暗黙的書き戻し中に２つのパイプライン式トランザクション間のデータ・コヒーレンシを維持するある種の責任も負う。アドレスされたメモリ・エージェントは、スヌープ・フェーズ中に活動状態のＨＩＴＭ＃を観測すると、応答側エージェントのままとなるが、暗黙的書き戻し応答に対する応答を変更する。トランザクションは、要求開始型データ転送（書込み）を含む場合、依然として、書込みデータ転送を開始できることを示すＴＲＤＹ＃のアサートに責任を負う。
スヌープされたトランザクションが要求開始型データ転送であり、スヌープ開始型データ転送（たとえば、修正済み線書き直し）を含む場合、トランザクションは２回のデータ転送を含む。要求開始型ＴＲＤＹ＃に関するＴＲＤＹ＃のアサートおよびアサート解除が完了した後、メモリ・エージェントは、修正済み線書き直しを受け取る空きキャッシュ線バッファを確保した後、スヌープ開始型ＴＲＤＹ＃をアサートする。メモリ・エージェントは、活動状態のＴＲＤＹ＃および非活動状態のＤＢＳＹ＃から厳密に２クロック・サイクルにわたって、エージェントの暗黙的書き戻しデータ転送に関するスヌーピング・エージェントからのＤＢＳＹ＃のアサートと同期した暗黙的書き戻し応答をドライブする。メモリ・エージェントは、書込みデータと書き直しキャッシュ線をマージする責任も負う。メモリ・エージェントは次いで、最新のキャッシュ線データでメイン・メモリを更新する。スヌープされたトランザクションがキャッシュ線全体を書き込む場合、暗黙的書き戻しデータはあっても、あるいはなくてもよい。ＤＢＳＹ＃が活動状態のＴＲＤＹ＃および非活動状態のＤＢＳＹ＃から厳密に２サイクルにわたってアサートされない場合、暗黙的書き戻しデータはない。
第１１図は、２つの順次（すなわち、バック・ツー・バック）パイプライン式トランザクションが同じデータ位置を要求する状況を示し、したがって、パイプラインが維持されている間データ・コヒーレンシがどのように維持されるかを示すタイミング図である。第１のバス・エージェント（“Ａ１”）は、論理ローＡＤＳ＃をアサートすることによってクロック・サイクルＴ２で第１の線無効化トランザクションを開始する。Ａ１がこのデータを修正するので、線無効化トランザクションは、システム上のすべての他のメモリ・エージェントに、このデータ位置を無効状態にするよう通知する。３サイクル後、第２のバス・エージェント（“Ａ２”）が、やはりＡＤＳ＃上の論理ローによって示される同じアドレスを要求する。本発明を組み込んだシステム・バスの好ましい実施形態では、Ａ１はこの第２の要求を観測し、この要求が、Ａ１が第１のトランザクションで要求したのと同じデータ位置に関するものであると判定する。Ａ１は、第１のトランザクションのスヌープ・フェーズの後にこのデータ位置の所有権を得るので、適当なスヌープ結果を与え、第２のトランザクションのスヌープ・フェーズ中にＨＩＴＭ＃をアサートする。
第２のトランザクションのスヌープ・フェーズ中にＨＩＴＭ＃をアサートすることによって、Ａ２とシステム・バス上のメモリ・エージェントに、Ａ１がデータ・フェーズ中に必要なデータを提供することが知らされる。第１のトランザクションの応答フェーズはクロック・サイクルＴ８中に実行され、第１のトランザクションが完了したことが示される。クロック・サイクルＴ１１中に、Ａ２は、ＴＲＤＹ＃をアサートすることによって、アドレスされたデータを受け取る準備が完了したことを示す。２クロック・サイクル後、Ａ１は、ＲＳ［２：０］＃、ＤＢＳＹ＃、Ｄ［６３：０］＃をアサートすることによってそのデータの提供を開始する。したがって、同じデータを要求する２つのパイプライン式トランザクションにわたってデータ・コヒーレンシが維持される。
本発明の好ましい実施形態では待ち時間の長いトランザクションもサポートされる。要求されたデータを提供する責任を負うが、要求時にはそうすることができないエージェントは、情報を含む要求が、ＤＥＦＥＲ＃信号が適切でないことを示していないかぎり、スヌープ・フェーズ中にＤＥＦＥＲ＃信号をアサートすることができる。これは、長い待ち時間のトランザクションの例である。他のエージェントがＨＩＴＭ＃をアサートしなかった場合、現トランザクションの応答フェーズ中に固有のデファード・コードが入力され、応答側エージェント（すなわち、ＤＥＦＥＲ＃をアサートしているエージェント）が、それ自体がデータを提供し新しい動作を開始することができると判定するまでデータ転送が据え置かれる。このデファード動作は、要求側エージェントが、まだ得られないデータに対する周期的要求を発行する必要をなくするので有用である。これによって、不要なバス・トランザクションがなくなり、ある種のケースでは、いくつかのエージェントが未成功の再試行トランザクションを発行する優先順位を無駄にする必要がある競合条件を防止することができる。
厳密に１つのエージェントが、デファード動作のメモリ・エージェントまたは入出力エージェントである。メモリ・アドレスされたこのエージェントがデファード応答で応答できるようにするために、トランザクションのスヌープ・フェーズ中にＤＥＦＥＲ＃信号がアサートされる。この処置によって、トランザクションが据え置かれる可能性があり、かつインオーダー完了が保証できないことを示す初期表示が要求側エージェントに与えられる。その結果、要求側エージェントは、デファード動作が首尾良く完了するまでその後の順序依存トランザクションの発行を停止しなければならない。他のキャッシング・エージェントが、暗黙化書き直しを含むトランザクションを順序正しく完了する責任を引き継ぐので、スヌープ・フェーズの活動状態のＨＩＴＭ＃が活動状態のＤＥＦＥＲ＃信号を無効にすることに留意されたい。
暗黙的書き戻しトランザクションの場合とまったく同じように、メモリ順序付けを維持することと、デファード動作中のスヌープ責任を明確に定義することは、デファード動作を行い、同時にバス・パイプラインを維持しマルチプロセッサ・システムにおけるデータ・コヒーレンシを維持することができるようにするうえで重大である。スヌープ・フェーズ中にトランザクションに関するＤＥＦＥＲ＃がアサートされた後、依然としてメモリ・エージェントまたは入出力エージェントが責任を負っている場合（非活動状態ＨＩＴＭ＃）、そのエージェントはキャッシュ線へのその後のアクセスでの（要求側エージェントの代わりに）その線に対するスヌープ責任を負う。アドレスされたエージェントが再試行応答で応答する場合にも（ＨＩＴＭ＃が非活動状態であると仮定する）、スヌープ・フェーズ中にＤＥＦＥＲ＃がアサートされることに留意されたい。トランザクションに関してＤＥＦＥＲ＃がアサートされ、ＨＩＴＭ＃が非活動状態である場合、メモリ・エージェントまたは入出力エージェントは、（再試行応答で）トランザクションを取り消し、あるいは応答フェーズ中にデファード応答を与える必要がある。
第１２図は、デファード応答と、その後に続く、読取り動作の対応するデファード応答を示す。Ｔ２で、要求側エージェントは、線読取り要求を発行する際にＡＤＳ＃をアサートしＲＥＱ［４：０］＃をドライブする。Ｔ５およびＴ６で、スヌープ・フェーズ中に、要求がアドレスされたエージェント（すなわち、「応答側エージェント」）は、トランザクションを順序正しく完了することはできないと判定し、したがってＴ６でＤＥＦＥＲ＃をアサートする。Ｔ６でＨＩＴＭ＃が非活動状態であることが観測されるので、応答側エージェントは、Ｔ８でＲＳ［２：０］＃に対する適当なコード化をアサートすることによって「デファード」応答を返す。
Ｔ１０の前に、応答側エージェントは、デファード要求で必要とされるデータを得る。Ｔ１０で、最初の応答側エージェントは、最初のトランザクションの装置識別“ＤＩＤ［７：０］＃”信号からラッチされた値をアドレスとして使用して、デファード応答トランザクションを発行する。Ｔ１３で、応答側エージェントは、返された線の最後のキャッシュ状態を示すＨＩＴ＃信号に対する有効なレベルをドライブする。最初の要求側エージェントは、スヌープ責任を負う。Ｔ１５で、最初の要求側エージェントは、通常の完了応答をドライブし、データ・フェーズも開始する。
Ｔ１１で、最初の要求側エージェントは、デファード応答トランザクションを観測する。要求側エージェントは、その未処理のトランザクション待ち行列に最初の要求と共に記憶されているデファード識別子とＤＩＤ［７：０］＃を突き合わせる。最初の要求側エージェントはＴ１４で、返されたキャッシュ線の最後の状態を観測する。Ｔ１６で、要求側エージェントは、トランザクション応答を観測し、未処理トランザクション待ち行列および第１４図に示したインオーダー待ち行列（“ＩＯＱ”）からトランザクションを除去する。これによって、デファード動作シーケンス全体が完了する。
データ・コヒーレンシを維持するには、デファード動作中にスヌープ所有権を明確に定義しなければならない。応答側エージェントは、キャッシュ線トランザクションのスヌープ・フェーズ中にＤＥＦＥＲ＃をアサートした後、第１図に示したバス・クラスタ内のそのキャッシュ線のスヌープ所有権も受け入れる。したがって、バス・クラスタ内の同じキャッシュ線へのその後のアクセスでは、応答側エージェントは２つの可能な処置、すなわち（ｉ）データおよび（ｉｉ）再試行をとることができる。再試行応答は、競合するトランザクションを取り消すために応答フェーズ中に応答側エージェントによって発行される。この機構は、エージェントが機能的に正しい動作を行えるようにする手段を提供する。任意選択で、応答側エージェントは、ＤＥＦＥＲ＃信号を発行し、バス・クラスタ内のキャッシュ線状態の全責任を負うことによって複数の再試行要求を有することを回避する。応答側エージェントは、デファード応答トランザクションを第１の要求側エージェントに発行する。応答側エージェントは、同じキャッシュ線の次の応答側エージェントにデファード応答を返す前に、第２の要求のデファード応答が完了することによる必要に応じて第１の要求側エージェントのキャッシュから得たキャッシュ線を明示的に無効化する無効化トランザクションを発行する。
応答側エージェントは、最初の要求のデファード応答が完了する前に、前述のクラスタに結合された別のシステム・バスからの要求の結果として線無効化トランザクションを開始することもできる。この場合、応答側エージェントは、システム・バスからのインバウンド・トランザクションがシステム・バスからのアウトバウンド・トランザクションよりも前に実行されるように順序付けている。この機構は、複数のバス・クラスタからの同じキャッシュ線への競合アクセス間の競合条件をなくする機構としてクラスタ・ブリッジ（たとえば、第１図のクラスタ・ブリッジ）によって使用され、複数のバス・クラスタを接続できるようにする。
第１３図は、応答側エージェントが、第１の線無効化要求にデファード要求を与えるときに行うスヌープ所有権獲得の効果を示す。デファード応答がない場合、スヌープ所有権はただちに応答側エージェントに移る。Ｔ２で、要求側エージェント（“１”）は、ＡＤＳ＃をアサートし、ＲＥＱ［４：０］＃をドライブして第１の線無効化要求を発行する。Ｔ５で、異なる要求側エージェント（“２”）がＡＤＳ＃をアサートし、ＲＥＱ［４：０］＃をドライブして同じキャッシュ線に第２の線無効化要求を発行する。
メモリ・エージェントは、スヌープ・フェーズでＤＥＦＥＲ＃をアサートし、応答フェーズでデファード応答をアサートして、第１の線無効化要求にデファード応答が与えられることを示す。メモリ・エージェントはまた、第２の線無効化要求を観測し、要求されたアドレスが、メモリ・エージェントがＤＥＦＥＲ＃をアサートしたキャッシュ線と同じであることを知る。メモリ・アドレスは、競合アドレスを知り、スヌープ・フェーズでＤＥＦＥＲ＃をアサートし、応答フェーズで再試行応答をアサートして、第２の応答が再試行されることを示す。第２の要求を再発行するための異なる要求側エージェントによるすべてのその後の試みには、メモリ・エージェントによって再試行応答が与えられる。
Ｔ６で、要求側エージェントは、活動状態のＤＥＦＥＲ＃を観測し、トランザクションがインオーダー完了に関してコミットされていないことを知る。要求側エージェントは、キャッシュ線の所有権を受け入れない。その結果、要求側エージェントは、Ｔ８、すなわち第２のトランザクションのスヌープ・フェーズでＨＩＴＭ＃をアサートしない。Ｔ９で、異なる要求側エージェントが、活動状態のＤＥＦＥＲ＃を観測し、トランザクションがインオーダー完了に関してコミットされていないことを知り、キャッシュ線に対して無効状態のままになる。
メモリ・エージェントは、バス・クラスタ内のキャッシュ線の所有権を得た後、Ｔ１４でデファード応答トランザクション２ｄを開始する。Ｔ１５で、異なる要求側エージェントが要求“２ｒ”を再発行する。このとき、メモリ・エージェントはトランザクション“２ｒ”に関する再試行応答を生成しない。Ｔ１７でキャッシュ線所有権を得た要求側エージェントは、要求“２ｒ”を観測すると、第１２図と同様に要求を完了する。
第１４図は、パイプライン式バスに結合された各エージェントに組み込まれた「インオーダー待ち行列」のブロック図である。システム・バス上の複数の未処理トランザクションをサポートするには、任意の特定の時間にシステム・バス上に配置されている情報を識別し、かつトランザクションで使用されるエージェントを知ることができるように、各エージェントがある種の最小量の情報を追跡しなければならない。インオーダー待ち行列（“ＩＯＱ”）１００はこの情報を記憶する。ＩＯＱ１００は、複数のトランザクション・レジスタ、たとえば８つのトランザクション・レジスタ１０１ないし１０８と、２つの待ち行列ポインタ・レジスタ１１０および１１２と、スヌープ・ポインタ・レジスタ１１３と、「空」レジスタ（図示せず）とを含む。ＩＯＱ１００の１番上から１番したへ延びる矢印は、ＩＯＱ１００が円形であり、そのため、第１の待ち行列ポインタ（すなわち、「要求」）レジスタ１１０がトランザクション・レジスタ１０８を指しているとき、要求レジスタ１１０が増分されると、第１の待ち行列ポインタ・レジスタ１１０がトランザクション・レジスタ１０１を指すようになることを示す。
好ましい実施形態では８つのトランザクション・レジスタが使用されるが、これよりも多くのレジスタを使用することも、あるいはこれよりも少ないレジスタを使用することもできる。これらのトランザクション・レジスタ１０１ないし１０８は、データ転送をサポートしていることを示すデータ転送フィールド、トランザクションに関するキャッシング・エージェントによってＨＩＴＭ＃がアサートされたことを示す暗黙的書き戻しフィールド、トランザクションが読取りトランザクションまたは書込みトランザクションであることを示す読取り／書込みフィールドなどのフィールドを含む。
バス・トランザクションは、システム・バス上に発行されると、要求レジスタ１１０の指すトランザクション・レジスタに入力され、次いで要求レジスタ１１０が増分される。トランザクションに関する応答フェーズを受け取った後、ＩＯＱ１００の１番上にあるトランザクションが除去され、第２の待ち行列ポインタ「応答」レジスタ１１２が増分される。応答レジスタ１１２は常に要求レジスタ１１０よりも遅れる。また、スヌープ・ポインタ・レジスタ１１３は、現在スヌープ中のトランザクションを指す。
待ち行列ポインタ・レジスタ１１０および１１２が共に同じトランザクション・レジスタを指し、かつ空レジスタが非活動状態であるとき、ＩＯＱ１００は満杯である。しかし、空レジスタが活動状態であるとき、ＩＯＱ１００は空である。未処理のトランザクションがない場合、空レジスタはセットされる。パリティ・エラーを除いて、トランザクションは、それらが発行されたのと同じ順序で応答およびデータを受け取り、したがってＩＯＱ１００の１番上にある各トランザクションは次に応答フェーズおよびデータ・フェーズ、すなわちトランザクションが完了する前の最後のフェーズに入る。
好ましくは、各エージェントは最低でも、未処理のトランザクションの数、次にどのトランザクションをスヌープすべきか、どのトランザクションが次に応答を受け取るべきか、トランザクションはこのエージェントへ発行されたのか、それともこのエージェントから発行されたのかの各情報を」ＩＯＱに記憶する。エージェント特有のその他のバス情報も追跡しなければならないが、あらゆるエージェントがこの情報を追跡する必要があるわけではない。たとえば、要求側エージェントは、このエージェントがあといくつのトランザクションを発行できるか（注：好ましい実施形態では、マイクロプロセッサは４つの未処理のトランザクションを有することができる）、このトランザクションは読取りか、それとも書込みか、このバス・エージェントがデータを提供する必要があるか、それともデータを受け入れる必要があるかを追跡することができる。応答側エージェントは、このエージェントがＩＯＱの１番上にあるトランザクションに関する応答を所有しているかどうか、このトランザクションが暗黙的書き戻しデータを含むかどうか、このエージェントが書き直しデータを受け取る必要があるかどうか、このエージェントがデータ転送を所有しているかどうか、トランザクションが読取りである場合にこのエージェントがデータを受け入れなければならないかどうか、エージェントが必要に応じて次のトランザクションを停止できるようにバッファ資源が利用できるかどうかを追跡することができる。スヌーピング・エージェントは、トランザクションをスヌープする必要があるかどうか、スヌープ・フェーズを延長する必要があるかどうか、このトランザクションが、このエージェントから供給すべき暗黙的書き戻しデータを含むかどうか、いくつのスヌープ要求が待ち行列にあるかを追跡することができる。また、トランザクションを据え置くことができるエージェントは、デファード・トランザクションおよびそのエージェントＩＤ、バッファ資源の可用性を追跡することができる。好ましい実施形態では、すべてＩＯＱを包含する複数の待ち行列または１つの待ち行列を実施することによってこの種のトランザクション情報を追跡することができる。
キャッシュ・コヒーレンシに悪影響を及ぼすアクセス競合が発生する恐れのあるある種の他の状況がある。このようなアクセス競合は主として、発信トランザクションが現バス・トランザクションと同じアドレスを有するときに発生する。このことをより良く理解するためにまず、本発明の好ましい実施形態で使用される、発信トランザクションが記憶される概念的バッファ構造について説明し、次いで、競合を解決するために使用される手法について説明する。
第１５図は、本発明の一実施形態で使用されるプロセッサ・バッファ構造を示す。調停時間および応答時間が短いので、バス上の大部分のエージェントはそのようなプロセッサ・バッファ構造を維持しなければならない。プロセッサ・バッファ構造の実際の実施態様が、第１５図に示したものとまったく同じではないが、プロセッサ・バッファ構造の趣旨および機能を反映することが企図される。未処理要求バッファは、ローカル・バスへ送られた要求を含むが、トランザクションは完了されていない。バッファ中のすべての要求をスヌープして、適切な線状態を確保する必要がある。発信バッファは、これからシステム・バス上で送り出される要求を保持する。他のエージェントからの現バス・トランザクションのアドレスがバッファ中の要求に一致する場合、競合を解決することができるように後述の処置をとる必要がある。
現バス要求のアドレスが発信バッファ中の１つの要求のアドレスに一致するとき、同じバス・クラスタ内で競合が発生する。使用されるすべてのプロセッサが同じバス上に存在するので、アクセス順序を確立しなければならない。具体的には、発信要求が読取りまたは部分線書込みである場合、リモート・エージェントの要求はローカル・エージェントの読取り／書込みミスにも部分書込み要求にも影響を及ぼさないので特殊な処置は必要とされない。
発信要求が読取りを含まない線無効化トランザクションである場合、他のエージェントからの現バス要求が線無効化、または部分書込み要求、または線書込みである場合には、他のエージェントからの現要求によって、ローカル・キャッシュに存在する現キャッシュ線が無効化されるので、発信線無効化要求を線読取り・無効化要求に変換する必要はない。他のエージェントからの現バス要求が線読取りまたは部分線読取りである場合、リモート・エージェントの要求によってローカル・キャッシュ線が除去されることはないので、特殊な処置は必要とされない。
発信要求が線書き直しトランザクションであり、現バス要求が線読取りトランザクション、または部分線読取りトランザクション、または線読取り・無効化トランザクション、または線無効化トランザクション、または部分線書込みトランザクション、またはＢＬＲ線読取りトランザクションである場合、書き直しが暗黙的書き戻しに変換され、次いで発信要求が除去され、あるいは、現バス要求が線書込みトランザクションである場合、最適には、現バス要求が線全体を上書きするので暗黙的書き戻しデータ転送が取り消される。
前述のバス・システムは、デファード・トランザクションとマルチプロセッサ対応データ・コヒーレンシをもたらすパイプライン式バスを提供するだけでなく、プロセッサの順序付けを可能にする。プロセッサ順序付けは、各マイクロプロセッサに、順序依存動作を求める要求を、それが依存する動作が観測され、それを取り消すことができる点（すなわち、スヌープ・フェーズ）を越えるまで延期させる技法によって行われる。従属動作とは、計算する必要がある他のデータに作用する動作である。パイプライン式システムでは、プロセッサが２つの順次（すなわち、バック・ツー・バック）命令を要求し、次いでその後のフェーズ中にデファードと再試行のどちらかによって一方の命令を取り消させることができるので、前述のことが問題となることがある。これは、好ましい実施形態で使用されるマイクロプロセッサが、取り消される可能性が高いスペキュラティブ命令を発行するので可能性の高い事象である。他のエージェントがその後に続くトランザクションを発行し、次いで必要なデータを得ることができなくなるのを防止するには、スヌープ・フェーズに到達しＤＥＦＥＲ＃がアサートされなくなるまでバック・ツー・バック書込みが待機しなければならない。したがって、バック・ツー・バック書込みは６クロック・サイクルおきにしかアサートできない。これに対して、他のトランザクションでは３クロック・サイクルおきにアサートすることができる。
したがって、マルチプロセッサ対応であり、長い待ち行列のトランザクションを可能にする高度パイプライン式バス・システムを提供する方法および装置について説明した。当業者には、開示したもの以外に本発明の様々な実施形態が可能であることが明らかになろう。一般に、本明細書で説明する例示的な実施形態は、本発明を例示するものに過ぎず、その範囲を制限するものとみなすべきものではない。したがって、本発明は、下記の請求の範囲に関して検討すべきである。
【図１】
0003660679.tif 000002
【図２】
0003660679.tif 000003
【図３】
0003660679.tif 000004
【図４】
0003660679.tif 000005
【図５】
0003660679.tif 000006
【図６】
0003660679.tif 000007
【図７】
0003660679.tif 000008
【図８】
0003660679.tif 000009
【図９】
0003660679.tif 000010
【図１０】
0003660679.tif 000011
【図１１】
0003660679.tif 000012
【図１２】
0003660679.tif 000013
【図１３】
0003660679.tif 000014
【図１４】
0003660679.tif 000015
【図１５】
0003660679.tif 000016