(57)【特許請求の範囲】
【請求項１】
メモリを備えるマルチプロセッサコンピュータシステムであって、
受け取ったトランザクションに応じてデータを供給する主メモリ・コントローラと、
それぞれが前記主メモリ・コントローラによって供給されるデータを格納するためのキャッシュ・メモリを有し、またそれぞれが前記主メモリ・コントローラにモジュールで生成したトランザクションを送信することによって前記主メモリ・コントローラにデータを要求する複数のプロセッサモジュールと、
前記主メモリ・コントローラに接続されたキャッシュ・タグ・アレーであって、前記プロセッサモジュールの前記キャッシュ・メモリに格納された各データ・ラインのキャッシュ・コヒーレンシ状況を示す情報を含むキャッシュ・タグを含み、該キャッシュ・タグと該データ・ラインの間に一対一の対応関係があり、前記キャッシュ・タグは、前記データ・ラインを求めるプロセッサモジュールからの前回の要求が完了したか否かとは無関係に、前記データ・ラインを最後に要求した別のプロセッサモジュールを指定するキャッシュ・タグ・アレーと、
からなり、
前記主メモリ・コントローラで生成されたトランザクションを受け取る第１のプロセッサモジュールが前記データ・ラインの専用コピーを有しており、前記データ・ラインが第２のプロセッサモジュールにより要求されているとき、前記主メモリ・コントローラは、前記データ・ラインを要求するために、前記要求されたデータ・ラインおよび前記第２のプロセッサモジュールを示す、前記主メモリ・コントローラで生成されたトランザクションを前記第１のプロセッサモジュールに送信し、
前記第１のプロセッサモジュールは、前記データ・ラインと、前記第２のプロセッサモジュールを示すコードと、を該第１のプロセッサモジュールで生成されたトランザクションで前記メモリ・コントローラに返送し、
前記主メモリ・コントローラは、前記主メモリ・コントローラで生成されたトランザクションに応じて前記第１のプロセッサモジュールからデータ・ラインを受け取るとき、前記第１のプロセッサモジュールから受け取った前記データ・ラインを前記第２のプロセッサモジュールに送るよう構成されている、
マルチプロセッサコンピュータシステム。
【請求項２】
任意の前記複数のプロセッサモジュールは、要求したデータ・ラインを受け取る前に、該データ・ラインを要求する前記主メモリ・コントローラで生成されたトランザクションを受けとった場合、該要求したデータ・ラインを受け取ると、これを使用してから、前記主メモリ・コントローラからの該データ・ラインを要求するトランザクションに応じることができるよう構成されている、
請求項１に記載のマルチプロセッサコンピュータシステム。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、メモリに関し、より詳細には１つあるいはそれ以上のプロセッサがキャッシュ・メモリを有する共有メモリ・マルチプロセッサに関する。
【０００２】
【従来の技術】
コンピュータは通常プロセッサ、記憶装置、および入出力装置等の複数の構成要素を有する。これらの構成要素は通常それぞれが１つあるいはそれ以上のプロセッサ、記憶装置および／または入出力装置を有する構成要素モジュールとしてまとめられる。構成要素モジュールは一般に従来の「読み出し」トランザクションや「書き込み」トランザクションといった「トランザクション」の形態で互いに通信する。たとえば、典型的な読み出しトランザクションでは、１つのモジュールが、それが必要とするデータを識別し、その識別されたデータを送ることを要求する信号を別のモジュールに送る。これに応答するモジュールはこの要求を処理しデータを返す。
【０００３】
多くのコンピュータにおいて、装置で実行するソフトウエアは１つあるいはそれ以上の主記憶装置を共有する２つ以上の主プロセッサ・モジュールによって実行される。この種の装置はよく「共有メモリ・マルチプロセッサ」装置と呼ばれる。
【０００４】
共有メモリ・マルチプロセッサ装置においては、トランザクションは一般に従来の共有バスや従来のクロス・バー・スイッチ等の共有メモリ相互接続上でプロセッサ・モジュールと主記憶装置モジュール間で転送される。トランザクションは「サイクル」中にこの共有メモリ相互接続を介して送出される。それぞれのサイクルはある限られた数のトランザクションをその共有メモリ相互接続上で転送可能な期間である。クロス・バー・スイッチにおいては、それぞれのモジュールは通常各サイクル中にこのスイッチにトランザクションを送り、スイッチからトランザクションを受け取ることができる。これは、ある１つのサイクル中には１つのモジュールだけがバス上にトランザクションを送ることのできる従来の共有バスと対照的である。
【０００５】
従来の多くの共有メモリ相互接続では「分割トランザクション」が可能である。分割トランザクションでは、要求にただちに応答する必要はない。たとえば、あるモジュールがあるサイクル中に別のモジュールへの読み出し、トランザクションをクロス・バー・スイッチ上で送る場合がある。この他方のモジュールは他のタスクを実行するために使用中で１つあるいはそれ以上のサイクルの間この読み出しトランザクションを処理できない場合がある。最終的には、この応答側のモジュールは後のサイクルでこのトランザクションを処理し、要求されたデータを返す。要求トランザクションとそれに対する応答を相互に関係付けるために、それぞれの要求トランザクションには一般にそのトランザクションを開始するモジュールを識別し、そのトランザクションをそのモジュールが発した他のトランザクションと区別するためのトランザクション識別コードが含まれる。応答トランザクションは一般に、その応答をその要求トランザクションと関係付けることができるように、このトランザクション識別コードを付して送られる。たとえば、ある読み出しトランザクションに対して返されるデータはそのデータを返す対象となる特定の読み出しトランザクションを識別する。
【０００６】
共有メモリ・マルチプロセッサ装置では、主プロセッサは一般に共有メモリ相互接続と直結されている。それぞれの主プロセッサは一般に別々の主メモリ・コントローラを介して共有メモリ相互接続に接続されている。装置が２つ以上の主メモリを有する場合、それぞれのメモリは相互に排他的なデータアドレスの集合を含む。あるプロセッサがある主メモリからデータを読み出すとき、あるいはある主メモリにデータを書き込むとき、このプロセッサはそのメモリの主メモリ・コントローラと通信しなければならない。
【０００７】
装置内の主メモリに加えて、それぞれのプロセッサ・モジュールもまたキャッシュ・メモリを有する。かかるキャッシュ・メモリはモジュールによるアクセスを高速化するために最近用いられたデータを格納する。通常、キャッシュ・メモリには最近使用されたデータとそれらのデータ項目が格納された関係する主メモリのアドレスの両方が格納される。モジュールが主メモリ内のあるアドレスからデータを探すとき、モジュールはそのデータに関係付けられたアドレスを用いてそのキャッシュ・メモリにそのデータを要求する。キャッシュ・メモリはそのアドレスに関係付けられたデータを保持しているかどうかをチェックする。保持している場合、キャッシュ・メモリは要求されたデータをプロセッサに直接返す。キャッシュ・メモリが所望のデータを保持していない場合（すなわち「キャッシュ・ミス」が発生した場合）、通常、正規のメモリ・アクセスが発生する。キャッシュ・メモリは通常主メモリ（一般にはＲＡＭ）へのアクセスがマイクロプロセッサの速度と比較して遅い場合に有益である。キャッシュ・メモリは主ＲＡＭより速い。
【０００８】
それぞれのプロセッサがキャッシュ・メモリを有する共有メモリ・マルチプロセッサ装置の場合には、状況はキャッシュ・メモリを有する単一プロセッサ装置より多少複雑である。マルチプロセッサ装置では、特定の主メモリ・アドレスに対応する現行データを１つあるいはそれ以上のキャッシュ・メモリおよび／または主メモリに格納することができる。キャッシュ・メモリ内のデータはプロセッサによって操作されて主メモリに格納された値と異なる値になっている場合がある。したがって、任意のアドレスについての現行のデータ値が、データ値がどこにあるかにかかわりなく提供されるように「キャッシュ・コヒーレンシ法」を実行しなければならない。
【０００９】
【発明が解決しようとする課題】
通常のコヒーレンシ法では、モジュール間で相当な量の通信が行われ、これがコンピュータに不必要な遅延をもたらすことがある。典型的なコヒーレンシ法において、あるモジュールがデータを要求するとき、キャッシュ・メモリを有するそれぞれのモジュールは、そのキャッシュ・メモリの「コヒーレンシ・チェック」を実行して要求されたアドレスに関係付けられたデータを持っているかどうかを判定してそのコヒーレンシ・チェックの結果を報告すべき旨の通知を受ける。すると、モジュールはコヒーレンシ・チェックを行い、その結果を報告しなければならない。コヒーレンシ・チェックの実行すべき旨のモジュールへの通知およびその結果の報告はいずれも処理遅延を発生させることがある。
【００１０】
キャッシュ・メモリに要求されたデータを保持しているかどうかの報告に加えて、それぞれのモジュールは一般にそのキャッシュ・メモリに格納されたデータの状態に関する報告を行う。たとえば、モジュールがデータのコピーを持っており、そのコピーが「使用」（すなわち、そのデータはそのモジュールしか利用することができない）である、あるいはそのデータが「共有」（すなわち、そのデータは２つ以上のキャッシュ・メモリに同時に存在することができる）であるといった報告を行うことがある。あるいは、モジュールは、データが「きれい」である（すなわち、主メモリ内の同じアドレスのデータと同じである）、あるいは「汚れている」（すなわち、そのデータが獲得された後に操作されている）といった報告を行うこともある。通常、専用の汚れているデータのコピーは常に１つしか存在してはならない。一般に、キャッシュ・メモリに格納されたある特定のデータ・ラインについてのコヒーレンシ状態情報はそのデータ・ラインに対する「キャッシュ・タグ」として知られる１組のフィールドに格納される。
【００１１】
「コヒーレントなトランザクション」とは、要求したプロセッサに供給すべきデータのソースを判定するためにすべてのメモリのチェックを必要とする任意のトランザクションをいう。コヒーレントなトランザクションは一般に共有メモリ相互接続の任意の利用可能なサイクル中に発生しうるものである。しかし、モジュールによっては内部的に使用中であり、そのトランザクションについてのコヒーレンシ・チェックをただちに行うことができず、キャッシュ・コヒーレンシ・チェックが完了するのに数サイクルを要する場合がある。コヒーレントなトランザクションが発生する速度に対応するために、モジュールがコヒーレンシ・チェックが実行可能になるまでコヒーレントなトランザクションを格納するためのキャッシュ・コヒーレンシを持つこともある。コヒーレンシ・チェックの実行速度に応じて、特定のモジュールのコヒーレンシ待ちライン列に多数のコヒーレントなトランザクションを格納して、かかるトランザクションの実行を比較的長時間にわたって延期することができる。
【００１２】
それぞれのモジュールによって実行されるコヒーレンシ・チェックの結果が分析され、そのデータを要求したモジュールに最も新しいデータが提供される。たとえば、要求されたデータのコピーを持つキャッシュ・メモリがない場合、データは主メモリから供給される。あるモジュールが専用の操作されたコピーを持っている場合、このコピーは主メモリ・コントローラに返され、主メモリ・コントローラがこのデータを供給するか、あるいはこのコピーはキャッシュ間コピーで要求したモジュールに直接供給される。データが供給されると、各モジュールはそれぞれのキャッシュ・メモリも状態を更新する。たとえば、ある専用のデータ・コピーがある特定のモジュールに供給される場合、他のモジュールは通常そのデータのコピーを持っている場合にはそれに無効のマークを付ける。
【００１３】
したがって、不必要な遅延を発生させることなくキャッシュ・コヒーレンシ・チェックを行うことのできる、主メモリとキャッシュ・メモリを有するメモリが必要とされている。
【００１４】
したがって、本発明の目的は改良されたコヒーレントなメモリを提供することである。
【００１５】
本発明の他の目的は、キャッシュ・コヒーレンシ・チェックが可能であり、コヒーレントなトランザクションに過大な遅延を生じさせない、主メモリおよびキャッシュ・メモリを有するメモリを提供することである。
【００１６】
本発明の以上の目的およびその他の目的は当業者には、本発明とその実施例に関する以下の詳細な説明、添付図面および特許請求の範囲から明らかになるであろう。
【００１７】
【課題を解決するための手段】
本発明は広義には複製キャッシュ・タグ・メモリを包含する。このメモリは受け取ったトランザクションに応じてデータを供給する主メモリ・コントローラを有する。このメモリはまた２つあるいはそれ以上のモジュールを有し、それぞれのモジュールは主メモリ・コントローラによってそのモジュールに供給されたデータを格納するためのキャッシュ・メモリを有する。それぞれのモジュールはメモリ・コントローラにトランザクションを送ってそのモジュールが必要とするがそのモジュールのキャッシュ・メモリに格納されていないデータを要求する。
【００１８】
また、このメモリは主メモリ・コントローラに結合されたキャッシュ・タグ・アレー有する。このキャッシュ・タグ・アレーは前記のモジュールのキャッシュ・メモリのうちの１つに格納されたそれぞれのデータ・ラインに対応するキャッシュ・タグを有する。あるデータ・ラインのキャッシュ・タグは主メモリ・コントローラに最後にそのデータ・ラインを要求したモジュールを示す。
【００１９】
好適な実施例においては、かかるキャッシュ・タグはまた関連するデータ・ラインが専用であるが共有であるかを示す。
【００２０】
【実施例】
本発明は１つあるいはそれ以上のプロセッサ・モジュールおよび／または入出力もがキャッシュ・メモリを有する共有メモリ・マルチプロセッサ・コンピュータのための改良されたメモリを包含する。本発明によれば、それぞれの主メモリの主メモリ・コントローラは、キャッシュ・メモリに格納された主メモリからのデータ・ラインの状態に関する現ラインの情報を含む複製キャッシュ・タグ・アレーを有する。したがって、コヒーレンシ・チェックは主メモリ・コントローラによって直接実行することができる。これによってそれぞれのプロセッサが、キャッシュ・メモリに個別にコヒーレンシ・チェックを実行させ、そのコヒーレンシ・チェックの結果を主メモリ・コントローラに送らせることが不要となり、その結果コヒーレントなトランザクションの処理にかかわる遅延が低減される。
【００２１】
本発明のメモリを用いたコンピュータを図１の１０に示す。
【００２２】
コンピュータ１０はクロス・バー・スイッチ１２とクロス・バー・スイッチ１２に接続された複数の構成要素を有するマルチプロセッサ・コンピュータである。かかる構成要素には主メモリ・コントローラ１４，１６、出力モジュール（図示せず）およびモジュールとしてのプロセッサ・モジュール２０，２２，２４がある。これらの構成要素はクロス・バー・スイッチ１２上で互いにトランザクションを送出する。
【００２３】
トランザクションはサイクル中にクロス・バー・スイッチ１２によって授受される。メモリ・コントローラ、入出力モジュール、およびプロセッサ・モジュールはそれぞれ、各サイクル中にクロス・バー・スイッチ１２上にトランザクションを送りだし、またクロス・バー・スイッチ１２からトランザクションを受け取ることができる。
【００２４】
クロスバースイッチに送られるそれぞれのトランザクションは、そのトランザクションを送るべきモジュールを識別し、そのトランザクションをそのモジュールが発した他の未処理のトランザクションと区別するためのトランザクション識別情報を含む。トランザクションはまたそのトランザクションを送る相手である応答側モジュールを識別する。クロス・バー・スイッチはあるサイクル中に受け取ったトランザクションをこの応答側モジュールに送る。
【００２５】
応答側モジュールがトランザクションを処理する速度より高いバースト・トランザクション発行速度に対処するために、クロス・バー・スイッチ１２はそれぞれのモジュールに対応する待ちライン列を含む。クロス・バー・スイッチ１２によってあるモジュールに送られるトランザクションはそれぞれのモジュールに対応する待ちライン列に入れられ、その待ちライン列からモジュールに先入れ先出し（「FIFO」）で送られる。待ちライン列３０，３２，３６，３８および４０は主メモリ・コントローラ１４，１６およびプロセッサ・モジュール２０，２２，２４にそれぞれ対応する。
【００２６】
２つ以上のモジュールがあるサイクル中にある特定のモジュールに送る場合に対処するために、それぞれのモジュールに所定の優先順位が割り当てられている。同じサイクル中にクロス・バー・スイッチに置かれ、同じモジュールを対象とする複数のトランザクションは、送出側モジュールの優先順位にしたがってこの応答側のモジュールの待ちライン列に入れられる。したがって、１つのサイクル中にクロス・バー・スイッチが受け取った１つの受信側モジュールを対象とする複数のトランザクションは、この受信側モジュールに別々のサイクル中に送られる。
【００２７】
主メモリ・コントローラ１４および１６はそれぞれ、従来の方法で主メモリ１５および１７から情報を読み出し、また対応する主メモリに情報を格納する責任がある。主メモリ・コントローラ１４および１６は主メモリ１５および１７と直接あるいは従来のバスを介してインターフェースする。
【００２８】
プロセッサ・モジュール２０、２２および２４はコンピュータ１０の主プロセッサである。このコンピュータのソフトウエアはすべてのプロセッサ上で同時に実行することができる。
【００２９】
プロセッサ・モジュール２０、２２および２４はそれぞれキャッシュ・メモリ５０、５２および５４を有する。最近使用されたデータが、そのデータの主メモリ・アドレスとそのデータのコヒーレンシ状態に関する情報とともに、キャッシュ・メモリ５０、５２および５４に格納される。主メモリ・アドレスとコヒーレンシ情報はキャッシュ・メモリに格納されたそれぞれのデータ・ラインに関係付けられた「キャッシュ・タグ」とみることができる。
【００３０】
好適な実施例において、それぞれのキャッシュ・ライン（すなわち、キャッシュ・メモリに格納されるデータ・ラインのコピー）の状態が「無効」、「専用」、「共有」、「専用−未処理」、「共有−未処理」の５つのうちのいずれかとして定義される。「専用」ラインは１つのプロセッサ・モジュールのキャッシュ・メモリにのみ存在でき、またそのプロセッサ・モジュールだけが使用できるものである。あるプロセッサ・モジュールが専用データ・ラインを保持している場合、このプロセッサ・モジュールはそのデータ・ラインをそのデータの現在の値を表わす任意の方法で用いることができる。「共有」ラインは２つ以上のプロセッサ・モジュールのキャッシュに同時に存在することのできるものである。共有とマークされたあるデータ・ラインの現在の値をあるプロセッサ・モジュールによって変更されるためには、他のプロセッサ・モジュールの保持する共有されたコピーが無効とマークされ、そのプロセッサ・モジュールはそのデータ・ラインを専用データ・ラインとして得なければならない。「無効」とは、そのデータを使用してはならないことを示す。専用−未処理あるいは共有−未処理の状態については後に説明する。
【００３１】
それぞれのプロセッサ・モジュールのキャッシュ・タグに加えて、それぞれの主メモリ・コントローラはプロセッサ・モジュールの保持するその主メモリに関係するそれぞれのキャッシュ・ラインの現在の状態を格納する複製キャッシュ・タグ・アレーを有する。複製キャッシュ・タグ・アレー４４は主メモリ・コントローラ１４に対応する。複製キャッシュ・タグ・アレー４６は主メモリ・コントローラ１６に対応する。
【００３２】
それぞれの主メモリに対応する複製キャッシュ・タグ・アレーは、キャッシュ・メモリに格納されたその主メモリからのそれぞれのデータ・ラインに関係付けられたキャッシュ・タグに対応する「複製キャッシュ・タグ」を含む。複製キャッシュ・タグはそのデータに関係付けられる主メモリ・アドレスとそのキャッシュ・ラインのコヒーレンシ状態を含む。複製キャッシュ・タグはまたそれぞれのデータ・ラインを有するプロセッサを識別する情報あるいはそのラインを要求したプロセッサのトランザクション識別コードを含む。したがって、任意の時にそれぞれの主メモリは常にその主メモリに関係するそれぞれのデータ・ラインに関する現在のキャッシュ・コヒーレンシ状態を有する複製キャッシュ・タグ・アレーへのアクセスを有する。それぞれのモジュールはコヒーレントなトランザクションについてキャッシュ・コヒーレンシ・チェックを実行し、またその結果を主メモリコントローラに報告する必要がない。
【００３３】
「複製キャッシュ・タグ」は関連するキャッシュ・タグの正確なコピーではないことに注意しなければならない。むしろ、複製キャッシュ・タグは実際のキャッシュ・タグに含まれるすべてのコヒーレンシ状態情報、あるいは後述するように最新の情報を持っていなければならないという点においてのみ複製という。
【００３４】
あるプロセッサ・モジュールがある特定のデータ・ラインのコピーを必要とするとき、このプロセッサ・モジュールはクロス・バー・スイッチ上にそのデータ・ラインを要求する読み出しトランザクションを送りだす。この読み出しトランザクションはトランザクション識別コードを含み、またそのデータの共有コピーが必要であるのか専用コピーが必要であるのかを指定する。読み出し−専用トランザクションはデータの専用コピーに対する要求であり、読み出し−共有トランザクションはデータの共有コピーに対する要求である。読み出しトランザクションは指定されたメモリアドレスを含む主メモリの主メモリ・コントローラに送られる。
【００３５】
主メモリ・コントローラは読み出しトランザクションを受け取ると、複製キャッシュ・タグ・アレーをチェックしてそのデータ・ラインがキャッシュ・メモリに保持されているか、またそのラインのコヒーレンシ状態を判定する。そのデータ・ラインを保持するキャッシュ・メモリがない場合、主メモリ・コントローラはそのラインを主メモリからそれを要求したプロッセサ・モジュールに供給する。
【００３６】
そのラインが１つあるいはそれ以上のキャッシュ・メモリに共有されている場合、主メモリ・コントローラはそのデータ・ラインを主メモリから供給する。共有データが要求されている場合（すなわち、読み出し−共有トランザクションである場合）、データは単純にそれを要求したプロッセサ・モジュールに送られる。専用データが要求されている場合（すなわち、読み出し−専用トランザクションである場合）、主メモリ・コントローラはそのデータを主メモリから供給し、それぞれのプロッセサ・モジュールに対して、そのデータの共有されたコピーを無効としてマークするように指示するパージ・トランザクション（無効化トランザクション）を送る。本発明のある実施例では、主メモリ・コントローラはあるデータ・ラインの共有コピーを有するすべてのプロッセサ・モジュールを記録しておくことができる。このような実施例では、主メモリ・コントローラはそのデータ・ラインの共有コピーを有するプロッセサ・モジュールにパージ・トランザクションを送るだけでよい。
【００３７】
データがあるプロッセサ・モジュールのキャッシュ・メモリに専用として保持されている場合、主メモリ・コントローラは当該プロッセサ・モジュールに対して、そのデータを要求している読み出しトランザクションのトランザクション識別コードとともにフラッシュ・バック（すなわちデータ返送）トランザクションを送る。このフラッシュ・バック・トランザクションに応じて、そのプロッセサ・モジュールはそのデータ・ラインに対する自己のキャッシュ・タグを無効としてマークし、そのデータ・ラインを、トランザクション識別コードとともにそれを要求した主メモリ・コントローラに返送する。主メモリ・コントローラはそのデータ・ラインを受け取ると、これを要求したプロッセサ・モジュールに供給し、主メモリ内の関連のアドレスを更新する。
【００３８】
このフラッシュ・バック・トランザクションを関係するプロッセサ・モジュールに送るとき、主メモリ・コントローラは、要求を出したプロッセサ・モジュールをそのデータ・ラインの所有者とし、また所有権が未決である、すなわちデータがまだそのラインの所有者に送られていないことを示すように、自己の複製キャッシュ・タグの状況を更新する。そのデータ・ラインが専用として要求された場合、その状態は「未処理・専用」として記録される。そのデータ・ラインが共有として要求された場合、その状態は「未処理・共有」として記録される。
【００３９】
そのデータを要求するトランザクションが他のプロッセサ・モジュールから受け取られないと仮定すると、この複製キャッシュ・タグはフラッシュ・バックに応答してそのデータがこの主メモリによって受け取られたとき再度更新される。そのデータ・ラインが専用として要求された場合、複製キャッシュ・タグは専用・未処理ではなく専用状態を反映するように更新され、そのデータが要求したプロッセサ・モジュールに送られる。そのデータ・ラインが共有として要求された場合、複製キャッシュ・タグは未処理・共有ではなく共有状態を反映するように更新され、そのデータが要求したプロッセサ・モジュールに送られる。
【００４０】
フラッシュ・バックに応じてそのデータ・ラインが受け取られる前にそのデータを要求するトランザクションが別のプロッセサ・モジュールから受け取られた場合、多少異なる処理が必要になる。上述したように、フラッシュ・バックが送られるとき、複製キャッシュ・タグは要求中のプロッセサ・モジュールを現在の所有者とするように更新され、フラッシュ・バックとともにそのトランザクション識別コードが送られる。このトランザクション識別コードにはまたそのデータが主メモリ・コントローラにいつ返送されるかを示すデータが含まれる。次に説明する理由から、これによって同じデータ・ラインに対する複数の要求が未処理である場合に対処することができる。
【００４１】
主メモリ・コントローラがデータに対する第２の要求を受け取ったとき、そのデータの複製キャッシュ・タグはすでにそのデータに対する第１の要求に基づいて未処理状態としてマークされている。第２の要求の時点で、複製キャッシュ・タグはその新しい要求プロセッサ・モジュールとそのデータ要求がこの新しいプロセッサ・モジュールによる専用要求であるか共有要求であるかを反映するように更新される。第１の要求プロセッサ・モジュールがそのデータを専用として要求した場合、この第１の要求プロセッサ・プロセッサ・モジュールに対して、そのデータに対する第２の要求を識別するトランザクション識別コードとともにフラッシュ・バックトランザクションが送られる。第１の要求モジュールが共有データを要求していた場合、第１の要求プロセッサ・モジュールにパージ・トランザクションが送られる。第１の要求プロセッサ・モジュールは、要求したデータを受け取り、それを一度用いた後、これらのトランザクションにしたがって動作する。
【００４２】
第１のデータ要求に対するフラッシュ・バックに応答してデータが主メモリ・コントローラによって受け取られたとき、複製キャッシュ・タグはすでに第２のデータ要求を反映するように更新されている。しかし、上述したように、このデータは第１の要求に対するトランザクション識別コードとともに主メモリ・コントローラに返される。このようにして、主メモリ・コントローラはそのデータを適切に供給することができる。主メモリ・コントローラがこのデータを受け取ったとき、この情報に基づいて第１の要求プロセッサ・モジュールに送る。さらに、第１の要求プロセッサ・モジュールが共有データを受け取る場合、このデータは第１の要求プロセッサ・モジュールにも送られる。
【００４３】
第１の要求プロセッサ・モジュールが専用データを要求していた場合、そのデータが受け取られる前に、第１の要求プロセッサ・モジュールはすでにフラッシュ・バック・トランザクションを受け取っている。この順序の狂ったコマンド・シーケンスは第１の要求プロセッサ・モジュールに対して、第１の要求プロセッサ・モジュールがそのデータを一度用いることができ、次にそのデータを主メモリ・コントローラに返送しなければならないことを指示するのに用いられる。
【００４４】
第１の要求プロセッサ・モジュールが共有データを要求していた場合、そのデータが受け取られる前に、第１の要求プロセッサ・モジュールはすでにパージ・トランザクションを受け取っている。この順序外のコマンド・シーケンスは第１の要求プロセッサ・モジュールに対して、それがそのデータを一度用いることができ、次にそのコピーを無効とマークしなければならないことを指示するのに用いられる。
【００４５】
前に要求されたデータに対して第３あるいは後続の要求があった場合、同じ手順が用いられる。複製キャッシュ・タグはそのデータに対する最新の要求を反映するように更新される。前の要求者が専用データを要求したか共有データを要求したかに応じて、前の要求者にフラッシュ・バックトランザクションあるいはパージ・トランザクションが送られる。前の要求者が共有データを要求していた場合、主メモリ・コントローラはそのデータを受け取るとそれを前の要求者とそれ以後の要求者の両方に送る。
【００４６】
本発明の動作の一例として、コンピュータ１０の場合を考察する。各キャッシュ・メモリ５０，５２，および５４に対するそれぞれのキャッシュ・タグは初めに無効としてマークされる。それぞれの複製キャッシュ・タグはしたがって無効とマークされる。
【００４７】
クロス・バー・スイッチ１２の１つのサイクル中に、プロセッサ・モジュール２０は主メモリ・コントローラ１４に対して、データ・ライン「Ａ」の専用コピーを探索中であることを示す読み出し−専用トランザクションを送る。データ・ラインＡは主メモリ１５にのみ格納されているため、主メモリ・コントローラ１４は次のサイクル中にデータ・ラインＡをプロセッサ・モジュール２０に供給し、複製キャッシュ・タグ・アレー４４をデータ・ラインＡがプロセッサ・モジュール２０によって専用されることを示すように更新する。
【００４８】
プロセッサ・モジュール２０はデータ・ラインＡを受け取る。データ・ラインＡは、そのデータが専用に保持されることを示すキャッシュ・タグとともにキャッシュ・メモリ５０に格納される。プロセッサ・モジュール２０はそのキャッシュ・メモリ５０内のデータ・ラインＡの値を自由に変更することができる。
【００４９】
次のサイクル中に、プロセッサ・モジュール２２が主メモリ・コントローラ１４に、データ・ラインＡの専用コピーを探索中であることを示す読み出し−専用トランザクションを送る。主メモリ・コントローラ１４は複製キャッシュ・タグアレー４４をチェックしてデータ・ラインＡがプロセッサ・モジュール２０によって専用として保持されていることを判定する。主メモリ・コントローラ１４はプロセッサ・モジュール２０に対してプロセッサ・モジュール２０が保持するデータ・ラインＡの専用コピーを主メモリ・コントローラ１４に送り返すように要求するフラッシュバックＡ｛あるいはイールドＡ（yield A ）｝トランザクションを送る。また、プロセッサ・モジュール２２によって送られる読み出し−専用トランザクションを示すトランザクション識別コードが、このフラッシュ・バック・トランザクションとともにプロセッサ・モジュール２０に送られる。主メモリ・コントローラ１４はまた、プロセッサ・モジュール２２が専用・未処理データ・ラインＡを所有することを示すように複製キャッシュ・タグ・アレー４４を更新する。
【００５０】
プロセッサ・モジュール２０はこのフラッシュ・バック・トランザクションを受け取ると、主メモリ・コントローラ１４に対して、プロセッサ・モジュール２２の読み出し−専用トランザクションに対するトランザクション識別コードとともにデータ・ラインＡを送り、そのデータ・ラインＡのコピーを無効としてマークする。
【００５１】
データ・ラインＡに対する要求がそれ以上なかったとすると、主メモリ・コントローラ１４はデータ・ラインＡを受け取ったとき、データ・ラインＡを、トランザクション識別コードとともにプロセッサ・モジュール２２に送り、複製キャッシュ・タグ・アレー４４をデータ・ラインＡがプロセッサ・モジュール２２によって専用として保持されていることを示すように更新する。
【００５２】
次に、主メモリ・コントローラ１４がプロセッサ・モジュール２０からデータ・ラインＡを受け取る前にプロセッサ・モジュール２４がデータ・ラインＡの共有コピーを受け取っていた場合を考える。この場合、プロセッサ・モジュール２４の読み出し−共有トランザクションが受け取られると、データ・ラインＡに対する複製キャッシュ・タグが、プロセッサ・モジュール２４をデータ・ラインＡの所有者として「未処理・共有」の状態で示すように更新される。プロセッサ・モジュール２２に対して、プロセッサ・モジュール２４によって送られる読み出し−共有トランザクションのトランザクション識別コードとともにフラッシュ・バックが送られる。
【００５３】
主メモリ・コントローラ１４がプロセッサ・モジュール２０からデータ・ラインＡを受け取ると、データ・ラインＡはこのデータとともに返されるトランザクション識別コードに基づいてプロセッサ・モジュール２２に送られる。プロセッサ・モジュール２２はデータ・ラインＡを一度用い、次にそれをプロセッサ・モジュール２４によって送られた読み出し−共有トランザクションのトランザクション識別コードとともに主メモリ・コントローラ１４に返す。プロセッサ・モジュール２２はまたデータ・ラインＡのそのコピーをマークする。
【００５４】
主メモリ・コントローラ１４はプロセッサ・モジュール２２からデータ・ラインＡを受け取ると、データ・ラインＡをプロセッサ・モジュール２４に送る。主メモリ・コントローラ１４はまたデータ・ラインＡに対する複製キャッシュ・タグを、それがプロセッサ・モジュール２４に共有されていることを示すように更新する。プロセッサ・モジュール２４のキャッシュ・メモリ５４は、データ・ラインＡとそのデータが共有されていることを示すキャッシュ・タグによって更新される。
【００５５】
当業者には、データの専用コピーが関係する主メモリ・コントローラによって受け取られるたびに、主メモリをデータの現在の値に更新することができることが理解されるであろう。
【００５６】
本発明をキャッシュ・メモリを有するプロセッサ・モジュールを用いて説明したが、これは例として掲げたに過ぎない。本発明はキャッシュ・メモリを有する入出力モジュール等の他の任意の種類のモジュールに適用することが可能であることは当業者には明らかであろう。
【００５７】
当業者には以上の説明と添付図面から本発明にさまざまな変更を加えうることは明らかであろう。したがって、本発明は特許請求の範囲によってのみ限定されるものである。
【００５８】
以上、本発明の各実施例について詳述したが、ここで各実施例の理解を容易にするために、各実施例ごとに要約して以下に列挙する。
【００５９】
１．  受け取ったトランザクションに応じてデータを供給する主メモリコントローラ（１４，１６）、
それぞれが、前記主メモリコントローラ（１４，１６）によってそれに供給されるデータを格納するためのキャッシュ・メモリ（５０，５２，５４）を有し、またそれぞれが前記主メモリ・コントローラ（１４，１６）にトランザクションを送ってそれが必要としそのキャッシュ・メモリには格納されていないデータを要求する複数のモジュール（２０，２２，２４）、および
前記主メモリ・コントローラ（１４，１６）に接続されたキャッシュ・タグ・アレー（４４，４６）であって、前記モジュール（２０，２２，２４）の前記キャッシュ・メモリ（５０，５２，５４）の１つに格納されたそれぞれのデータ・ラインに対するキャッシュ・タグを含み、前記キャッシュ・タグが前記主メモリ・コントローラ（１４，１６）に対して前記データ・ラインを要求した最後のモジュールを示すキャッシュ・タグ・アレー（４４，４６）からなるメモリである。
【００６０】
２・  前記キャッシュ・タグ・アレー（４４、４６）は前記のキャッシュ・メモリ（５０，５２，５４）の１つに格納された前記データ・ラインのキャッシュ・コヒーレンシ状況を示す情報を含む上記１に記載のメモリである。
【００６１】
３．  データを要求する前記トランザクションのそれぞれは、前記トランザクションによって要求されたデータに対する所望の転送先モジュールを示す転送先符号を含み、前記主メモリ・コントローラ（１４，１６）は要求されたデータを前記の転送先符号によって示される転送先モジュールに送る上記１に記載のメモリである。
【００６２】
４．  前記主メモリ・コントローラ（１４，１６）は、あるモジュールのあるキャッシュ・メモリ内に専用として保持されているデータ・ラインを要求するトランザクションを受け取ると、前記のモジュールにデータ返送トランザクションを送って前記モジュールに前記データ・ラインを前記主メモリ・コントローラ（１４，１６）に返送させ、その後前記主メモリ・コントローラ（１４，１６）は前記のデータ・ラインを前記の転送先モジュールに送る上記３に記載のメモリである。
【００６３】
５．  前記データ返送トランザクションは前記転送先符号を含み、前記データ・ラインは前記転送先符号とともに前記主メモリ・コントローラ（１４，１６）に返送される上記５に記載のメモリである。
【００６４】
６．  前記モジュールが前記データ・ラインを受け取る前にある選択されたデータ・ラインに対するデータ返送トランザクションを受け取るモジュールは前記データ・ラインを受け取ると前記データ・ラインを返送する前に前記データ・ラインを一度用いて処理を実行することができる上記５に記載のメモリである。
【００６５】
【発明の効果】
以上のように本発明によれば、複数のモジュールから受け取ったトランザクションに応じて主メッモリ・コントローラは主メモリからデータを読み取り、その読み取ったデータをモジュールに供給し、モジュールはそのデータを自己に所属するキャッシュ・メモリに格納し、このキャッシュ・メモリの一つに格納されたデータ・ラインに対するキャッシュ・タグが主メモリ・コントローラに対してデータ・ラインを要求した最後のモジュールを示すようにしたので、キャッシュ・コヒーレンシ・チェックが可能であり、コヒーレントなトランザクションに過大な遅延を生じさせない主メモリおよびキャッシュ・メモリを有するメモリを得ることができる。
【図面の簡単な説明】
【図１】本発明の複製キャッシュ・タグ・メモリを用いたコンピュータの一実施例を示すブロック図である。
【符号の説明】
１０        コンピュータ
１２        クロス・バー・スイッチ
１４，１６        主メモリ・コントローラ
１５，１７        主メモリ
２０，２２，２４        プロセッサ・モジュール
３０，３２，３６，３８，４０        待ちライン列
４４，４６        複製キャッシュ・タグ・アレー
５０，５２，５４        キャッシュ・メモリ
【図１】
0003729891.tif 000002