(57)【特許請求の範囲】
【請求項１】
システム・バスによって少なくとも２つのモジュールに相互接続されたシステム・メモリを有するコンピュータ・アーキテクチャにおけるキャッシュ・コヒーレンシをチェックするための装置であって、前記モジュールの少なくとも１つが、関連するキャッシュ・メモリを有しており、
前記キャッシュに格納されているデータの状態を示すための、それぞれのキャッシュに関連したキャッシュ・タグであって、それぞれのキャッシュに格納されているデータに関連するアドレス情報を含むキャッシュ・タグと、
キャッシュ・コヒーレンシをチェックするための要求を受け取り、前記要求を前記キャッシュに送るための、それぞれのモジュールに関連したバス・インタフェイスであって、該バス・インタフェイスは、第１の読み出しのみの要求を前記キャッシュに送り、その後、第２の読み出し−書き込み要求を送るように構成されており、該第２の読み出し−書き込み要求は、前記キャッシュ・タグ内のアドレス情報が、キャッシュ・コヒーレンシをチェックするための前記要求のアドレスと一致しているということを前記第１の読み出しのみの要求が示しており、かつ、キャッシュ・コヒーレンシをチェックするための前記要求が、無効、コピー・アウト、又はクリーンな状態から共用状態への変更のいずれかの結果として前記キャッシュを変更するよう要求している場合にのみ、前記キャッシュに送られることからなる、バス・インタフェイスと、
キャッシュ・コヒーレンシのチェックに従って、読み出しのみの要求中及びその後の読み出し−書き込み要求中のみ、前記キャッシュへのアクセスを中断させるためのロックをそれぞれが備えるモジュール
からなる、装置。
【請求項２】
前記キャッシュ・タグによって示される前記キャッシュに格納されているデータの状態が、
前記キャッシュに格納されているデータが前記システム・メモリに格納されているデータより新しい修正状態、前記キャッシュに格納されているデータがモジュール間で共用できない排他的状態、前記キャッシュに格納されているデータがモジュール間で共用される共用状態、及び前記キャッシュに格納されているデータのコピーが他のいかなるモジュールにおいても保持されていない無効状態、のいずれかである、請求項１の装置。
【請求項３】
要求モジュールであって、該要求モジュールは、要求モジュールのキャッシュを有しており、前記キャッシュ・コヒーレンシのチェックを前記他のモジュールに送ることからなる、要求モジュールを更に有し、
前記他のモジュールは、前記要求モジュールに、当該他のモジュールのキャッシュに格納されているデータが前記状態のいずれにあるかを示すキャッシュ状態情報を返すことによって前記キャッシュ・コヒーレンシのチェックに応答するように構成されたサード・パーティ・モジュールであり、該サード・パーティ・モジュールのキャッシュ・タグ内のアドレス情報が前記要求のアドレスに一致しており、かつ、キャッシュ・コヒーレンシをチェックするための前記要求に対して返された前記キャッシュ状態情報が前記修正状態を示している場合には、前記要求モジュールのキャッシュに、前記サード・パーティ・モジュールのキャッシュに格納されている情報が提供されることからなる、請求項２の装置。
【請求項４】
システム・バスによって少なくとも２つのモジュールに相互接続されたシステム・メモリを有するコンピュータ・アーキテクチャにおけるキャッシュ・コヒーレンシをチェックするための方法であって、前記モジュールのそれぞれが、関連するキャッシュ・メモリを有しており、
コヒーレンシのチェックが行なわれるキャッシュをロックして、コヒーレンシのチェックの間にモジュールがそのキャッシュをアクセスできないようにするステップと、
読み出しのみのキャッシュ・コヒーレンシのチェックを行なって、前記キャッシュが現在のデータを有するか失効データを有するかを判定するステップと、
前記読み出しのみのキャッシュ・コヒーレンシのチェックの後に、前記キャッシュのロックを解除するステップと、
前記読み出しのみのキャッシュ・コヒーレンシのチェックが、前記キャッシュが、前記読み出しのみのキャッシュ・コヒーレンシのチェックのアドレスに一致するアドレス情報を含むキャッシュ・タグを有するということを示す場合にのみ、前記キャッシュを再度ロックし、かつ、次の読み出し−書き込みキャッシュ・コヒーレンシのチェックを実行するステップであって、前記キャッシュを再度読み出して、キャッシュの状態が、前記読み出しのみのキャッシュ・コヒーレンシのチェックの後のキャッシュのロックが解除された時間間隔の間に変化したかどうかを判定し、前記キャッシュに書き込みを行なって前記キャッシュに格納されているデータを更新するステップと、
前記読み出し−書き込みコヒーレンシのチェックの後に前記キャッシュのロックを解除するステップ
を含む、方法。
【請求項５】
前記キャッシュ・タグを用いて、前記キャッシュに関し、前記キャッシュに格納されているデータが前記システム・メモリに格納されているデータより新しい修正状態、前記キャッシュに格納されているデータがモジュール間で共用できない排他的状態、前記キャッシュに格納されているデータがモジュール間で共用される共用状態、及び前記キャッシュに格納されているデータのコピーが他のいかなるモジュールにおいても保持されていない無効状態、のいずれかを適宜示すステップを更に含む、請求項４の方法。
【請求項６】
要求モジュールを用いて前記キャッシュ・コヒーレンシのチェックをするための要求をサード・パーティ・モジュールに送るステップと、
前記サード・パーティ・モジュールから前記要求モジュールに、当該サード・パーティ・モジュールのキャッシュに格納されているデータが前記状態のいずれにあるかを示すキャッシュ状態情報を返すことによって前記キャッシュ・コヒーレンシのチェックに応答するステップと、
前記サード・パーティ・モジュールのキャッシュ・タグ内のアドレス情報が前記要求のアドレスに一致しており、かつ、キャッシュ・コヒーレンシをチェックするための前記要求に対して返された前記キャッシュ状態情報が前記修正状態を示している場合には、前記要求モジュールのキャッシュに、前記サード・パーティ・モジュールのキャッシュに格納されている情報を提供するステップ
を更に含む、請求項５の方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はキャッシュ、及びコヒーレント入出力構造を有する単一プロセッサ・アーキテクチャと多重プロセッサ・アーキテクチャを含むコンピュータ・アーキテクチャに関する。より詳しくは、本発明は単一プロセッサ、又は多重プロセッサ・コンピュータ・アーキテクチャにおけるキャッシュ・コヒーレンシの維持に関する。
【０００２】
【従来の技術】
キャッシュを有するコンピュータ・アーキテクチャへの情報の入出力（「I/O」）においては、失効データの発生、即ち他のキャッシュ位置、又は主記憶装置に記憶された関連データより古い、及び／又はそのデータと一致しないデータが発生することを回避する必要がある。従って、プロセッサ動作に対する干渉を最小限にしながら、キャッシュ・コヒーレンシを維持しなければならない。コンピュータ・システム・アーキテクチャの中には、入出力が入出力装置と入出力バッファとして働く主システム・メモリの間のデータ転送を意味するものがある。別のコンピュータ・システムでは、入出力がキャッシュ、又は記憶装置の一方と入出力装置との間のデータ転送を意味するものもある。これらのシステムは、プロセッサのキャッシュが入出力トラフィックが発生した場合にコヒーレント状態を保つ必要があるので、コヒーレント入出力システムと呼ばれる。
【０００３】
【発明が解決しようとする課題】
キャッシュはライト・スルー、又はライト・バックのどちらかに分類される。ライト・スルー・キャッシュは、システム・メモリとキャッシュがそれぞれ書き込まれる情報の現在のコピーを維持し、失効データを持つことがないように、常にシステム・メモリと一緒に書き込まれる。ライト・スルー・キャッシュを用いたコンピュータ・アーキテクチャにおける情報入力は、かなりのシステム・オーバヘッドを要する。
【０００４】
例えば、そのシステムは、入力用に指定された入出力バッファのいかなるブロックもキャッシュ内に存在しないよう保証しなければならない。
【０００５】
ライト・バック・キャッシュは、新しいデータを格納する余地を作るために、修正されたデータが追い出され、メモリにライト・バックされるまでそのデータを保持する。ライト・バック・キャッシュは、修正されたデータの唯一のコピーを持つことができるため、キャッシュ・データを迅速にアクセスすることができ、かつそれが決して失われないように、キャッシュと入出力システムの間のキャッシュ・コヒーレンシ・プロトコルに特別な配慮が必要となる。
【０００６】
失効データの発生に関する問題の、ソフトウエアによる解決策の１つは、バッファのページにキャッシュ不能のマークを付け、オペレーティング・システムが、情報をこのキャッシュ不能ページのみに入力するよう構成することである。この問題に対する別のソフトウエアによる解決策は、情報の入力が発生した後、オペレーティング・システムを用いてキャッシュからバッファ・アドレスを無効化して効果的にそのキャッシュをクリアすることである。失効データの発生に関する問題に対する、ハードウエアによる解決策は、情報の入力中に入出力アドレスをチェックして、それらのアドレスがキャッシュ内にあるかどうかを判定することである。それらのアドレスがキャッシュ内にあれば、キャッシュ・エントリが無効にされ、失効データの使用を回避できる。
【０００７】
多重プロセッサに関してコヒーレンシを維持するために使用されるプロトコルは、キャッシュ・コヒーレンシ・プロトコルと呼ばれる。キャッシュ・コヒーレンシ・プロトコルには２つの種類がある。
【０００８】
ディレクトリ型：物理メモリの１つのブロックに関する情報が、１つの位置に保持される。この情報は、どのキャッシュがそのブロックのコピーを有しているか、及びそのコピーに、将来の修正に関するマークが排他的に付けられているかどうかという情報を通常含んでいる。ある特定ブロックにアクセスする時、最初にディレクトリを照会してメモリ・データが失効しているかどうか、及び実データが他のキャッシュに存在するかどうかを調べる。上記条件が満たされる場合、修正されたブロックを含むキャッシュのデータがメモリに返される。次に、メモリはそのデータを新しいリクエスタに送り、ディレクトリをそのブロックの新しい位置で更新する。このプロトコルはバス間（あるいはキャッシュ間）のモジュールの干渉を最小限にするものであるが、通常待ち時間が長く、大きなディレクトリ・サイズを要するので構成するためのコストが高くなる。
【０００９】
スヌーピング：物理メモリのブロックからのデータのコピーを有する全てのキャッシュは、そのデータ・ブロックに関する情報のコピーも有する。それぞれのキャッシュは通常、共用メモリ・バス上にあり、全てのキャッシュ・コントローラはバス上を監視、又はスヌープして、それらが共用ブロックのコピーを有するかどうかを判定する。
【００１０】
スヌーピング・プロトコルは、キャッシュ、及び共用メモリを用いる多重プロセッサ・システム・アーキテクチャに十分適している。これは、該アーキテクチャが、バスとメモリの間に通常設けられている既存の物理的接続に基づいて動作するためである。スヌーピングは、コヒーレンシ情報の量が、主記憶装置内のブロック数ではなくキャッシュ内のブロック数に比例するという点でディレクトリ型プロトコルより好適である。
【００１１】
コヒーレンシの問題は、多重プロセッサ・アーキテクチャにおいてプロセッサがメモリ・ブロック、又はオブジェクトを書き込むために排他的アクセスを行わなければならない場合、及び／又はオブジェクトを読み出す時に最新のコピーを持たなければならない場合に発生する。スヌーピング・プロトコルは書き出されるべきオブジェクトを共有する全てのキャッシュになくてはいけない。共用データに書き込みを行うと、そのデータの他の全てのコピーを無効化するか、又は共用コピーの全てにその書き込みをブロードキャストするかのどちらかの結果となる。ライト−バック・キャッシュを用いるため、コヒーレンシ・プロトコルはメモリ読み出し中に、全てのキャッシュのチェックも行なって、どのプロセッサがその情報の最新のコピーを持っているかを判定しなければならない。
【００１２】
プロセッサ間で共用される情報に関するデータは、スヌーピング・プロトコルを実施するためにキャッシュ・ブロック内に設けられた状態ビットに追加される。この情報はバスの活動状態を監視する際に用いられる。読み出しミスが発生した場合、全てのキャッシュは要求された情報ブロックのコピーを持っているかをチェックし、読み出しミスをしたキャッシュにその情報を供給するといった適当な動作をとる。同様に、書き込みの場合、全てのキャッシュはそのデータのコピーを持っているかどうかをチェックし、例えばそのデータのコピーを無効にしたり、そのデータのコピーを最新の値に変更するといった動作をとる。
【００１３】
全てのコヒーレント・バス・トランザクションはキャッシュにアドレス・タグをチェックさせるので、スヌーピングは、スヌープの結果に関係なく、そのキャッシュに対するCPUのアクセスに干渉する。例えば、スヌーピングがミスを返してきた場合でも、そのキャッシュは利用不能である、即ち、そのキャッシュはタグをスヌープ・アドレスと比較するためにチェックを行なっているので、CPUはキャッシュ・アクセスを行なうことができない。従ってCPUは、キャッシュがコヒーレンシのチェックで使用中である時に、そのキャッシュをアクセスする必要がある場合、停止、又はロックする。
【００１４】
スヌーピング・プロトコルには２つの種類がある。
（１）ライト・インバリデート：書き込みを行なうプロセッサが、そのプロセッサの局所コピーを変更する前に、他のキャッシュ内の全てのコピーを無効化する。次に、このプロセッサは別のプロセッサによってそのデータに対する要求等が発生するまで、そのデータを自由に更新することができる。書き込みを行なうプロセッサはバス上に無効化信号を発し、全てのキャッシュがそのデータのコピーを持っているかどうかをチェックする。持っていれば、全てのキャッシュはそのデータを含むブロックを無効化しなければならない。この技法によって多重読み出しが可能となるが、書き込みは単一となる。
【００１５】
（２）ライト・ブロードキャスト：共用ブロックの全てを無効化する代わりに、書き込みを行なうプロセッサはバス上に新しいデータをブロードキャストする。その時、全てのコピーがこの新しい値に更新される。この技法では、共用データへの書き込みを連続的にブロードキャストする。一方、上述したライト・インバリデート技法では、他の全てのコピーを削除して、それ以降の書き込みに関して唯一の局所コピーが存在するようにしている。ライト・ブロードキャスト・プロトコルでは通常、データに共用（ブロードキャスト）タグ、又は専用（局所）タグを付けることができる。コヒーレンシの詳細な情報については、Morgan Kaufmann Publishers,Inc.(1990年）、J.Hennessy、D.PattersonのComputer Architecture:A Quantitative Approachを参照されたい。
【００１６】
スヌーピングを用いたコヒーレンス多重プロセッサ・システム・アーキテクチャにおいて、システム・バス上の各コヒーレント・トランザクションが、それぞれのプロセッサのキャッシュ・サブシステムに送られてコヒーレンシのチェックを行う。コヒーレンシのチェックが行なわれている時に、プロセッサがキャッシュにアクセスできないため、このチェックは通常、プロセッサのパイプラインを干渉するものである。
【００１７】
従来の、２重化されたキャッシュ・タグを持たない単一ポートのキャッシュにおいて、プロセッサのパイプラインは、キャッシュ・コントローラが他のプロセッサのキャッシュ・コヒーレンシのチェック処理のために使用中である時、キャッシュ・アクセス命令で停止する。各スヌープに対して、キャッシュ・コントローラは最初にスヌープ・アドレスに関してキャッシュ・タグをチェックし、ヒットした場合に、キャッシュ状態を変更しなければならない。不可分（分割不能）タグの（修正を可能にするための）読み出し、及び書き込みに関するキャッシュ帯域幅の割り当ては、スヌープがタグの書き込みを必要としない場合に要する時間より長くキャッシュをプロセッサに対してロックする。例えば、キャッシュ照会の80から90％がミスであり、即ち、タグ書き込みは不要である。
【００１８】
２重ポートを有するキャッシュを用いることによって、プロセッサのパイプラインとバス・スヌープとの競合を排除することができる。しかし、この解決策はハードウエアの追加と相互接続が必要であり、従って実施が困難であり、コストも増大する。又、バス・スヌープ専用のキャッシュ・タグの第２の集合を用いることも知られている。これらのタグは名目上、正規のキャッシュ・タグの複製であるが、こうしたシステムは正しく維持することが困難であり、かつ複製のキャッシュ・タグを持たないシステムより実施コストも大きい。
【００１９】
コヒーレンシのチェックによるプロセッサ停止時間を短縮する任意の機構が、多重プロセッサの性能を向上させることができる。このような機構を簡単で、かつ低コストな方法で実施するシステムを提供すれば、多重プロセッサ・アーキテクチャの設計をかなり改善することができる。
【００２０】
【課題を解決するための手段】
本発明は２重化キャッシュ・スヌープ機構、即ちそれぞれのスヌープをキャッシュに２回送ることができるキャッシュ機構を提供する。ここに開示する２重化キャッシュ・スヌープ機構は、幾つかのプロセッサの設計に関して、キャッシュ・コヒーレンシのチェックによってキャッシュが修正されない、即ちこのチェックが書き込みを行わないことがわかっていれば、このチェックの結果発生するサイクル分だけプロセッサが停止する必要はないという認識に基づいて、コヒーレンシのチェックが実施されている間にプロセッサが停止、又はロックされるサイクルの平均数を低減させるものである。このスヌープ機構はそれぞれのコヒーレンシのチェック、即ち非キャッシュ修正軽量チェック、及びキャッシュ修正重量チェックに分けられる。システム・バス上のそれぞれのコヒーレンシ・トランザクションに関して、最初に軽量チェックがキャッシュ・サブシステムに送られる。その後、軽量チェックが実施されている間に、キャッシュを修正する必要がある可能性を示すキャッシュ・ヒットが存在する場合にのみ、重量チェックが送られる。殆どのコヒーレンシのチェックにおいてキャッシュ・ヒットは発生しないため、たとえそれぞれのキャッシュ・ヒットによって追加のコヒーレンシのチェックが生じたとしても、プロセッサのパイプラインの停止時間の平均は短縮される。
【００２１】
キャッシュ・ヒットはキャッシュ・タグの修正が必要であることを必ずしも意味するものではないことに注意すべきである。例えば、あるラインへの読み出しアクセスの間に、そのラインの共用コピーが要求される場合がある。そのラインが他の２つのキャッシュにおいて既に共用可能状態にある場合、スヌープはこれらのキャッシュの両方にヒットするが、そのラインは既に共用可能状態にあるため、このラインの状態を修正する必要はない。
【００２２】
【実施例】
本発明はキャッシュ、及びコヒーレント入出力を有する単一プロセッサ・コンピュータ・システム、及び多重プロセッサ・コンピュータ・システムにおいて、キャッシュ・コヒーレンシのチェックを実行する２重化キャッシュ・スヌープ機構を提供する。
【００２３】
図１は多重コンピュータ・アーキテクチャの実施例における概略ブロック図である。多重コンピュータ・アーキテクチャにおいて、プロセッサ10、20、30等の複数のモジュールが、バス・リンク16、22、29によってシステム・バス23にそれぞれ接続されている。こうしたアーキテクチャにおいては、プロセッサ速度、及びオペレーティング・システムの設計に応じて任意の数のプロセッサを用いることができる。各プロセッサは内部リンク12を介してプロセッサ・キャッシュ・メモリ13に接続された中央演算処理装置（「CPU」）11を含む内部構造を有する。プロセッサ・キャッシュ・メモリはアドレス・タグ、状態要素、及びデータ要素（以下でより詳細に説明する）からなるキャッシュ・ラインを有する。バス・インタフェイス・モジュール15はプロセッサ・キャッシュを内部リンク14、及びプロセッサ・リンク16によってシステム・バス23に接続する。各プロセッサは互いに通信できるようになっており、かつバス・リンク17によってシステム・バス23に接続されたシステム・メモリ18、及びバス・リンク19によってシステム・バス23に接続されたシステム入出力（「I/O」）モジュール21と通信できる。
【００２４】
ここで記述されるシステム、及びプロセッサ・アーキテクチャは例示を目的として説明するものに過ぎず、これによって本発明の範囲が限定されるものではなく、本発明の範囲は特許請求の範囲によって定められるものである。本発明は多くの異なる種類のプロセッサ、及び多重プロセッサ・アーキテクチャに良好に適用させることが可能である。
【００２５】
バス23上にコヒーレント・トランザクションが発信される時は必ず、サード・パーティとして動作するプロセッサ10、20、30のそれぞれが仮想索引、及び実アドレスを用いてキャッシュ・コヒーレンシのチェックを行なう。又、本発明は物理的に索引付けされたキャッシュを用いるシステムにも適用可能である。
【００２６】
各サード・パーティ・プロセッサはそのアドレス・サイクルの後に、キャッシュ・コヒーレンシ状態を表わす信号を発信することができる。サード・パーティ・プロセッサはそのキャッシュ・ライン40が、共用、専用クリーン（又は「排他」）、専用ダーティ（又は「修正済み」）、不在（又は「無効」）の４つの状態のうちの１つにあることを示す信号を発する。要求側のプロセッサはコヒーレンシ状態を解釈して、そのキャッシュ・ラインに、専用クリーン、専用ダーティ、又は共用の内どのマークを付けるかを決定する。このサード・パーティ・プロセッサは、又そのキャッシュ・ライン状態を、変更なし、共用、又は不在を示すようにも更新する。
【００２７】
あるサード・パーティ・プロセッサが専用ダーティ状態にあるラインが要求されたことを示す信号を発する場合、そのサード・パーティ・プロセッサはアドレス・サイクル後のある時間に、キャッシュにキャッシュ・トランザクションを開始させる。要求側のプロセッサはこの最初の要求に対して主記憶装置から受け取ったデータを破棄し、代わりにキャッシュ間転送によってサード・パーティ・プロセッサから直接データを受け取る。同時に、サード・パーティ・プロセッサからのデータは主記憶装置に書き込まれる。多重プロセッサ・システム・アーキテクチャでは複数の未完了パイプライン・トランザクションを許しているため、プロセッサ・モジュールがパイプライン・キャッシュ・コヒーレンシのチェックを実行して、バス帯域幅を最大限に利用できることが重要である。本発明を容易に適用することのできる種類の多重プロセッサ・システム・アーキテクチャに関しては、Compcon Digest of Papers（1993年２月）のK.Chan、T.Alexander、C.Hu、D.Larson、N.Noordeen、Y.Van Atta、T.Wylegala、S.Ziaiによる「Multiprocessor Features of the HP Corporate Business Servers」を参照されたい。
【００２８】
図２はスヌーピング・シーケンスの実施例を示す、多重プロセッサ・コンピュータ・アーキテクチャにおけるプロセッサの概略ブロック図である。スヌープ・シーケンスの開始時点t1において、キャッシュにバス・インタフェイス信号を送る間、CPU信号の伝送を抑止するゲート回路30の入力論理値「０」に示すように、プロセッサ10のCPU11はキャッシュ・アクセスをロックされ、次に時刻t2に示すように、バス・インタフェイス15に代わってプロセッサ・キャッシュ13が読み出される。
【００２９】
時刻t2ではゲート回路30の入力論理値「１」に示すように、CPUはキャッシュ・アクセスのロックを解除される。読み出しの結果がヒットでない場合、（STOPの標識34によって示されるように）プロセッサを解放する決定がなされて、通常のプロセッサ動作が可能になり、時刻t5に示す処理ステップに進む。読み出しの結果がヒットである場合、（STOPの標識34によって示されるように）（時刻t3の処理ステップ、及びゲート回路30の入力論理値「０」によって示されるように）プロセッサが再度ロックされ、そのキャッシュの内容が、最初に読み出された時点t1の直前の時間間隔の間に変化していないことを確認するために、そのキャッシュを再度読み出し、そして時刻t4における処理ステップに示すようにキャッシュへの書き込みを行なう。
【００３０】
その後、スヌープ機構は（時刻t5に示す処理ステップの間に）ゲート回路30の入力論理値「１」によって示されるように、プロセッサを解放する処理に進み、通常のプロセッサ動作の継続を可能にする。従来技術による実施のように、それぞれのコヒーレンシのチェックに対する分離不能な、即ち不可分の読み出し、及び書き込み動作を実行する代わりに、ここに示すスヌープ機構は読み出し動作のみを行なう。ヒットがある場合にのみ、この機構はキャッシュを再度読み出し、次に適宜キャッシュへの書き込みを行なう（全てのヒットに対してキャッシュの修正が必要なわけではない）。ヒットがあると、追加の読み出し動作が発生し、即ち最初の読み出しのみの動作が発生し、従ってヒットがある毎に待ち時間、及びプロセッサの停止時間に影響を与えるが、コヒーレンシのチェックにおいて、ヒットに関する時間が約10％以上を占めることは通常考えられないため、この機構はコヒーレンシのチェックが実行された時間の残り90％の中で、プロセッサの停止時間を大幅に短縮し、かつ書き込み動作を必要としない。
【００３１】
図３は多重プロセッサ・コンピュータ・アーキテクチャにおけるスヌーピング・シーケンスのフロー図である。この図において、スヌープ・シーケンスの開始時点（300）に、CPUがロックされ（301）、プロセッサ・キャッシュが読み出される（302）。このスヌープ・シーケンスはプロセッサ・キャッシュの状態を示すヒット情報を返す（303）。その後CPUがロックを解除される（304）。スヌープ・シーケンスがヒットを返さない場合（305）、プロセッサはロックを解除された状態のままとなり、動作は継続される（312）。スヌープ・シーケンスがヒットを返した場合（305）、CPUが再度ロックされ（306）、キャッシュが再度読み出されて（307）初回の読み出しの後、プロセッサがロックを解除された短い時間間隔の間にキャッシュ状態が変更されたかどうかが判定される。この再読み出しからキャッシュのヒット情報が返される（308）。それがヒットでない場合（309）、CPUがロックを解除され（311）、プロセッサの動作が継続される（312）。この再読み出しによってヒットが返された場合（309）、キャッシュが書き込まれ（310）、その後CPUがロックを解除され（311）、プロセッサ動作の継続が可能になる（312）。
【００３２】
図４、図５、及び図６はバス23のコヒーレンシ・プロトコルとバス・スヌープに応答するバス・インタフェイス15、及びキャッシュ13の動作を含む本発明の一実施例のタイミングを示す。
【００３３】
図４は、スヌープがキャッシュをミスした場合を示す。時間０に、バス・インタフェイスによってバスからコヒーレント読み出しトランザクションを受け取る。時間２に、バス・インタフェイスがキャッシュに対して、時間３に非キャッシュ修正照会スヌープが発生することを知らせる。時間３に、そのスヌープのアドレスがこのキャッシュに送られる。時間４に、キャッシュはそのタグを時間３の間に送られてきたアドレスとチェックする。時間５に、この場合キャッシュ・ミスを示すタグの結果がバス・インタフェイスに送り返される。時間７に、このキャッシュ・ミスの情報がバス上に送り返され、スヌープが完了する。
【００３４】
図５は排他であるが修正されていない（クリーン）状態にあるラインを有するキャッシュにヒットするスヌープを示す。時間０に、バス・インタフェイスによってバスからコヒーレント読み出しトランザクションを受け取る。時間２に、バス・インタフェイスがこのキャッシュに対して、時間３に非キャッシュ修正照会スヌープが発生することを知らせる。時間３に、そのスヌープのアドレスがこのキャッシュに送られる。時間４に、このキャッシュはそのタグを時間３の間に送られてきたアドレスとチェックする。時間５に、クリーンなライン上のキャッシュ・ヒットを示すタグ結果が、バス・インタフェイスに送り返される。時間７に、バス・インタフェイスがこのキャッシュに対して、キャッシュ修正スヌープが発生することを知らせる。時間８に、この場合であればキャッシュ修正を可能にするためのスヌープ・アドレスが、このキャッシュに再度送られる。時間９に、キャッシュ・タグが再度チェックされる。時間10に、（再度）クリーンなライン上のヒットを示すタグのチェック結果がバス・インタフェイスに送られる。次にキャッシュは時間11に、このラインのタグを修正し、それをクリーンなラインから共用のラインに変更する。時間12に、バス・インタフェイスは、このラインの最終的な状態が共用に変わったことを表わす信号をシステム・バス上に発する。
【００３５】
図６は排他であるが修正されている（ダーティ）状態にあるラインを有するキャッシュにヒットするスヌープを示す。時間０に、バス・インタフェイスによってバスからコヒーレント読み出しトランザクションを受け取る。時間２に、バス・インタフェイスがこのキャッシュに対して、時間３に非キャッシュ修正照会スヌープが発生することを知らせる。時間３に、そのスヌープのアドレスがこのキャッシュに送られる。時間４に、このキャッシュはそのタグを時間３の間に送られてきたアドレスとチェックする。時間５に、ダーティなライン上のキャッシュ・ヒットを示すタグのチェック結果がバス・インタフェイスに送り返される。時間７に、バス・インタフェイスがこのキャッシュに対して、キャッシュ修正スヌープが発生することを知らせる。時間８に、この場合であればキャッシュ修正を可能にするためのスヌープ・アドレスがこのキャッシュに再度送られる。時間９に、キャッシュ・タグが再度チェックされる。時間10に、（再度）ダーティなライン上のヒットを示すタグのチェック結果が、バス・インタフェイスに送られる。次に、時間11から時間15の間に、このキャッシュはそのラインの内容をバス・インタフェイスに転送し、最後に、時間15において、このラインの状態を無効に変更する。時間12に、バス・インタフェイスはシステム・バス上に、そのスヌープがダーティなラインをヒットし、このダーティなラインが後でリクエスタに転送されることを示す信号を発する。この転送は時間13から時間17の間に行なわれる。
【００３６】
以上、本発明を好適実施例を参照して説明してきたが、当業者には本発明の意図、及び範囲から逸脱することなく、ここに述べたものに替わる他の適用、及び同等物が容易に考えられることが明らかである。例えば、ここに説明したスヌープ機構は複数ユーザ、又は自動選択可能なスヌープ機構を有するコヒーレンシをチェックするシステムにおいて提供可能であり、スヌープ機構の選択はシステムの最適化に基づいている。更に、例えばフリップ−フロップによってセットされるような状態を提供し、本発明を用いる環境がかなり大量のデータを共用することが予想される環境である場合、又はスヌープのチェックの第１レベルが、複製のキャッシュ・タグを有するインタフェイス回路によって、ヒットするスヌープだけを本発明を実施した回路に送るように実行される場合に、この２重化スヌープ機構を停止させることも可能である。この状態ビットは、ユーザ選択、ソフトウエア選択、又はキャッシュ動作に関する統計的判断に基づいた自動選択とすることができる。従って、本発明は特許請求の範囲によってのみ限定される。
【００３７】
以下に本発明の実施態様を列挙する。
【００３８】
１．  システム・バスによって少なくとも２つのモジュールに相互接続されたシステム・メモリを有するコンピュータ・アーキテクチャにおけるキャッシュ・コヒーレンシをチェックし、前記モジュールの少なくとも１つが、関連するキャッシュ・メモリを有する装置であって、
キャッシュ内容の状態を示す、それぞれのキャッシュに関連するタグ、
キャッシュ・コヒーレンシのチェックを行う要求を受け、前記要求を前記キャッシュに送るための、それぞれのモジュールに関連したバス・インタフェイスであって、前記要求が、第１の読み出しのみの要求と、前記第１の読み出しが前記キャッシュ・アドレスのタグが前記要求のタグと一致し、前記要求によって無効、コピー・アウト、又はクリーンな状態から共用状態への変更のいずれかの結果として前記キャッシュを修正する必要がある場合にのみ送られる第２の読み出し−書き込み要求からなり、
キャッシュ・コヒーレンシのチェックに従って、読み出し、及び読み出し−書き込み要求の間にのみ前記キャッシュへのアクセスを中断させるためのロックを含むそれぞれのモジュールから成ることを特徴とする装置。
【００３９】
２．  前記キャッシュ・タグが、前記キャッシュ内容が前記システム・メモリの内容より新しい修正状態、前記キャッシュ内容がモジュール間で共用できない排他状態、前記キャッシュ内容がモジュール間で共用される共用状態、及び前記キャッシュ内容のコピーが他のいかなるモジュールにおいても保持されていない無効状態のいずれかを適切に示す手段を更に有する、項番１に記載の装置。
【００４０】
３．  前記キャッシュ・コヒーレンシのチェックを前記の他のモジュールに送る要求モジュールを更に有し、
前記の他のモジュールは、前記要求モジュールに、関連するキャッシュ状態情報を送ることによって前記キャッシュ・コヒーレンシのチェックに応答するようになっているサード・パーティ・モジュールからなり、前記サード・パーティ・モジュールのキャッシュ状態情報が、前記要求モジュールのキャッシュに含まれる情報が前記キャッシュ・アドレス・タグが前記要求のタグに一致することを示し、かつ前記要求がキャッシュの修正を要求している場合に、前記要求モジュールのキャッシュに関する置き換え情報を提供し、前記サード・パーティ・モジュールのキャッシュに含まれる情報を修正すべき場合に、前記要求モジュールのキャッシュから置き換え情報を受け取るようになっている、項番２に記載の装置。
【００４１】
４．  かなり高いレベルのデータ共用が発生する場合にキャッシュ・コヒーレンシのチェックを停止する手段を更に有する、項番１に記載の装置。
【００４２】
５．  第１レベルのコヒーレンシのチェックが行なわれ、従って前記装置がヒットするスヌープだけを受け取る場合に、キャッシュ・コヒーレンシのチェックを停止する手段を更に有する、項番１に記載の装置。
【００４３】
６．  システム・バスによって少なくとも２つのモジュールに相互接続されたシステム・メモリを有するコンピュータ・アーキテクチャにおけるキャッシュ・コヒーレンシをチェックし、前記モジュールのそれぞれが、関連するキャッシュ・メモリを有する方法であって、前記方法が、
コヒーレンシのチェックを行なうべきキャッシュをロックして、コヒーレンシのチェックの間にモジュールがキャッシュをアクセスすることを抑止するステップ、
読み出しのみのキャッシュ・コヒーレンシのチェックを行なって、前記キャッシュが現在のデータを有するか失効データを有するかを判定するステップ、
前記読み出しのみのコヒーレンシのチェックの後に、前記キャッシュのロックを解除するステップ、
前記キャッシュを再度ロックするステップ、
前記読み出しのみのキャッシュ・コヒーレンシのチェックが、前記キャッシュが失効データを有することを示す場合に、読み出し−書き込みキャッシュ・コヒーレンシのチェックを実行するステップであって、前記キャッシュが再度読み出されて、キャッシュ状態が、読み出しのみのキャッシュ・コヒーレンシのチェックの後にロック解除された時間間隔の間に変化したかどうかを判定し、前記キャッシュに書き込みを行なって前記キャッシュ内容を更新するステップ、及び
前記読み出し−書き込みコヒーレンシのチェックの後に前記キャッシュのロックを解除するステップからなる方法。
【００４４】
７．  キャッシュ・タグを用いて、前記キャッシュに関し、前記キャッシュ内容が前記システム・メモリの内容より新しい修正状態、前記キャッシュ内容がモジュール間で共用できない排他状態、前記キャッシュ内容がモジュール間で共用される共用状態、及び前記キャッシュ内容のコピーが他のいかなるモジュールにおいても保持されていない無効状態のいずれかを適宜示すステップを更に有する、項番６に記載の方法。
【００４５】
８．  要求モジュールを用いて前記キャッシュ・コヒーレンシのチェックをサード・パーティ・モジュールに送るステップ、
前記サード・パーティ・モジュールから前記要求モジュールに、関連するキャッシュ状態情報を送ることによって前記キャッシュ・コヒーレンシのチェックに応答するステップであって、前記サード・パーティ・モジュールのキャッシュ状態情報が、前記要求モジュールのキャッシュに含まれる情報が失効しているものである場合に、前記要求モジュールのキャッシュに関する置き換え情報を提供し、前記サード・パーティ・モジュールのキャッシュに含まれる情報が失効している場合に、前記サード・パーティ・モジュールのキャッシュから置き換え情報を受け取るステップを更に有する、項番７に記載の方法。
【００４６】
９．  かなり高いレベルのデータ共用が発生する場合に、キャッシュ・コヒーレンシのチェックを停止するステップを更に有する、項番６に記載の方法。
【００４７】
10．  第１レベルのコヒーレンシのチェックが行なわれ、従って前記装置が、ヒットするスヌープだけを受け取る場合に、キャッシュ・コヒーレンシのチェックを停止するステップを更に有する、項番６に記載の方法。
【００４８】
【発明の効果】
ここに開示する２重化スヌープ機構は、キャッシュの複雑性、又はコストを増加させることなく、コヒーレンシのチェックによるプロセッサのパイプラインへの干渉を低減させる。又、この機構は従来の単一スヌープ機構に比べてより高い性能をも有する。
【図面の簡単な説明】
【図１】本発明による多重プロセッサ・コンピュータ・アーキテクチャの概略ブロック図である。
【図２】本発明によるスヌーピング・シーケンスを示す多重コンピュータ・アーキテクチャにおけるプロセッサの概略ブロック図である。
【図３】本発明による多重プロセッサ・コンピュータ・アーキテクチャにおけるスヌーピング・シーケンスのフロー図である。
【図４】本発明によるスヌープがミスした場合のタイミング図である。
【図５】本発明によるスヌープがクリーンをヒットする場合のタイミング図である。
【図６】本発明によるスヌープがダーティをヒットする場合のタイミング図である。
【符号の説明】
10、20、30  プロセッサ
11  中央演算処理装置（CPU）
13  プロセッサ・キャッシュ・メモリ
15  バス・インタフェイス・モジュール
16、22、29  バス・リンク
18  システム・メモリ
21  システム入出力（I/O）モジュール
23  システム・バス
40  キャッシュ・ライン
【図１】
0003737834.tif 000002
【図２】
0003737834.tif 000003
【図３】
0003737834.tif 000004
【図４】
0003737834.tif 000005
【図５】
0003737834.tif 000006
【図６】
0003737834.tif 000007