(57)【特許請求の範囲】
【請求項１】
マルチプロセッサ・コンピュータ・システムで、各処理装置のキャッシュの各データに、該データの下記状態を示す表示がセットされ、
「変更」状態：変更されたデータを有するキャッシュでのみ有効であり、システム・メモリに書戻されていない、
「排他」状態：データはデータを有するキャッシュにしか存在せず、システム・メモリと一貫性を有する、
「共用」状態：データはデータを有するキャッシュ及び少なくとも１つの他のキャッシュ内で有効であり、システム・メモリと矛盾がない、
「無効」状態：アドレスされたデータがキャッシュに存在しない、
該表示により該データの状態を各処理装置が確認できることによってキャッシュ・コヒーレンシを維持する方法において、データを共用する状態であるときにも、読取り型要求をする処理装置に、いずれのキャッシュからデータを供給するかを選択する段階を経ることなく、該データを直接提供できるようにするための方法であって、
データの状態として、最も最近読取られ、且つ、２つ以上のキャッシュが有効なコピーを有する状態であることを示す「最近」状態を示す表示をさらに備え、
前記「最近」状態を表す表示は、当該処理装置の最近の読取りミス操作で他の処理装置からコヒーレンシ応答がない場合を除いてセットされ、
前記「最近」状態の表示がセットされたデータは、爾後に読取り型要求をする他の処理装置に当該処理装置から直接提供され、
前記読取り型要求が読取り要求であった場合には、当該処理装置から「最近」状態のデータが前記他の処理装置に提供された後に、該データの状態を表す表示が「共用」状態にセットされ、
前記読取り型要求が変更予定読取り要求であった場合には、当該処理装置から「最近」状態の表示がセットされたデータが提供された後に、該データの状態を表す表示が「無効」状態にセットされる、
ことを特徴とする方法。
【請求項２】
前記「最近」状態が、３ビット・フィールドによって表示される、請求項１記載の方法。
【請求項３】
メモリ装置と、
前記メモリ装置に接続されるバスと、
前記バスに接続され、それぞれが前記メモリ装置からのデータ値を格納するキャッシュを有する複数の処理装置とを含む、マルチプロセッサ・コンピュータ・システムであって、各処理装置のキャッシュの各データに、該データの下記状態を示す表示がセットされ、
「変更」状態：変更されたデータを有するキャッシュでのみ有効であり、システム・メモリに書戻されていない、
「排他」状態：データはデータを有するキャッシュにしか存在せず、システム・メモリと一貫性を有する、
「共用」状態：データはデータを有するキャッシュ及び少なくとも１つの他のキャッシュ内で有効であり、システム・メモリと矛盾がない、
「無効」状態：アドレスされたデータがキャッシュに存在しない、
該表示により各処理装置が該データの状態を確認できることによってキャッシュ・コヒーレンシを維持するシステムにおいて、２つ以上の処理装置のキャッシュがデータを共用する状態であるときにも、いずれのキャッシュからデータを供給するかを選択する段階を経ることなく、読取り型要求をする処理装置に該データを直接提供できるようにするための手段であって、
データの状態として、最も最近読取られ、且つ、２つ以上のキャッシュが有効なコピーを有する状態である「最近」状態を示す表示をさらに備え、
各キャッシュが、当該処理装置の最近の読取りミス操作で他の処理装置からのコヒーレンシ応答がない場合を除き前記「最近」状態を表す表示をセットするための手段と、
前記「最近」状態のデータ値を爾後に読取ろうとする他の処理装置に、該データ値を直接供給する手段と、
前記読取り型要求が読取り要求であった場合には、当該処理装置から「最近」状態のデータが前記他の処理装置に提供された後に、該データの状態を表す表示を「共用」状態にセットする手段と、
前記読取り型要求が変更予定読取り要求であった場合には、当該処理装置から「最近」状態の表示がセットされたデータが提供された後に、該データの状態を表す表示を「無効」状態にセットする手段と、
を含むことを特徴とするマルチプロセッサ・コンピュータ・システム。
【請求項４】
前記「最近」状態が、３ビット・フィールドによって表示される、請求項３記載のマルチプロセッサ・コンピュータ・システム。
【請求項５】
前記３ビット・フィールドは、「最近」、「共用」、及び「無効」に加えて、「変更」及び「排他」を識別するよう適合化される、請求項３又は４記載のマルチプロセッサ・コンピュータ・システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般的にはコンピュータ・システムに関し、特に最も最近（most recently）参照された状態を考慮し、データのキャッシュ介入を改良できるようにしたキャッシュ・コヒーレンシ・プロトコルに関する。
【０００２】
【従来の技術】
従来のマルチプロセッサ・コンピュータ・システム１０の基本的構造を図１に示す。コンピュータ・システム１０にはいくつかの処理装置があるが、そのうちの２つ、１２ａ及び１２ｂが示してある。これらは、さまざまな周辺装置に接続される。周辺装置は、入出力（Ｉ／Ｏ）装置１４（ディスプレイ・モニタ、キーボード、グラフィカル・ポインタ（マウス）、不揮発性の永続記憶装置（ハード・ディスク）等）、プログラム命令を実行するため処理装置によって用いられるメモリ装置１６（ＲＡＭ、すなわちランダム・アクセス・メモリ等）、及び基本的にはコンピュータの電源が最初に入ったときに周辺装置のひとつ（通常は永続メモリ装置）からオペレーティング・システムを探し出してロードするためのファームウェア（ＲＯＳ）１８を含む。処理装置１２ａ及び１２ｂは、汎用相互接続部、すなわちバス２０、直接メモリ・アクセス・チャネル（図示なし）等、さまざまな手段により周辺装置と通信する。コンピュータ・システム１０には、図示していないが、モデムまたはプリンタ等に接続するためのシリアル・ポート及びパラレル・ポート等、さまざまなコンポーネントを追加することができる。また当業者には明らかなように、図１のブロック図に示したものと共に使用できるコンポーネントは他にもある。例えば、ビデオ・ディスプレイ・モニタを制御するディスプレイ・アダプタ、メモリ装置１６にアクセスするメモリ・コントローラ等を使用できる。コンピュータの処理装置は２つ以上あってもよい。
【０００３】
対称型マルチプロセッサ（ＳＭＰ）・コンピュータでは、処理装置はすべてほぼ同一である。つまり、すべて、操作するための命令及びプロトコルの共通セットまたはサブセットを使用し、一般的には同じアーキテクチャを有する。代表的なアーキテクチャを図１に示している。処理装置は、コンピュータを操作するためにプログラム命令を実行する複数のレジスタ及び実行装置を有するプロセッサ・コア２２を含む。代表的な処理装置はInternational Business Machines CorporationのＰｏｗｅｒＰＣ（TM）プロセッサを含む。また処理装置には、命令キャッシュ２４及びデータ・キャッシュ２６等の１つ以上のキャッシュを置くことができる。これらは高速メモリ装置を使用して実現される。キャッシュは、メモリ装置１６から値をロードするという長いステップを避けることによって処理を高速化するために、プロセッサによって繰り返しアクセスされる値を一時的に保存するため、広く用いられる。これらのキャッシュは、プロセッサ・コアと一体化した１つの集積チップ２８上にパッケージ化されるときは、"オンボード"・キャッシュと呼ばれる。キャッシュはそれぞれ、プロセッサ・コアとキャッシュ・メモリとの間のデータの転送を管理するキャッシュ・コントローラ（図示なし）に関連付けられる。
【０００４】
処理装置には、キャッシュ３０等のキャッシュを追加することができる。キャッシュ３０はレベル２（Ｌ２）キャッシュと呼ばれるが、これはオンボード（レベル１）・キャッシュ２４及び２６をサポートするからである。言い換えると、キャッシュ３０はメモリ装置１６とオンボードキャッシュの仲介役になり、オンボード・キャッシュよりもかなり多くの情報（命令及びデータ）を格納できるが、それだけアクセス時間がかかる。例えばキャッシュ３０は、記憶容量が２５６または５１２キロバイトのチップでよく、プロセッサは、総記憶域６４キロバイトのオンボード・キャッシュを有するＩＢＭ  ＰｏｗｅｒＰＣ（TM）６０４シリーズ・プロセッサでもよい。キャッシュ３０はバス２０に接続され、メモリ装置１６からプロセッサ・コア２２への情報のロードは、すべてキャッシュ３０を経由する。図１は２レベルのキャッシュ階層のみ示しているが、多くのレベル（Ｌ３、Ｌ４等）の直列接続キャッシュを有するマルチレベルのキャッシュ階層も可能である。
【０００５】
対称型マルチプロセッサ（ＳＭＰ）コンピュータで重要なことは、コヒーレントなメモリ・システム、つまり個々のメモリ位置への書込みをすべてのプロセッサについてある順序で直列化することである。例えば、メモリ内のある位置が、書込み操作のシーケンスにより変更されて、１、２、３、４という値が取られるとする。キャッシュ・コヒーレントなシステムの場合、すべてのプロセッサが、所与の位置への書込みを表示された順序で行うのを監視する。しかしながら、ある処理要素がメモリ位置への書込みをミスする可能性はある。所与の処理要素がメモリ位置を読取るとき、１、３、４というシーケンスを検出し、値２への更新をミスする可能性がある。これらの性質を実現したシステムは"コヒーレント"と呼ばれる。コヒーレンシ・プロトコルは、実質的にすべてキャッシュ・ブロックのサイズの粒度までしか動作しない。すなわちコヒーレンシ・プロトコルはデータの移動及びデータの書込み許可をキャッシュ・ブロック単位で制御し、個々のメモリ位置について個別に制御することはない。
【０００６】
当業者には知られいるキャッシュ・コヒーレンシを実現するプロトコルや手法はいくつかある。コヒーレンシを維持するこれらのすべてのメカニズムの核心は、プロトコルによってただ１つのプロセッサが、所与の時点で所与のメモリ位置（キャッシュ・ブロック）への書込みを行う"許可"を得るという要件である。この要件により、処理要素がメモリ位置への書込みを行おうとしたときに、処理要素は最初に他のすべての処理要素に、メモリ位置への書込みの意図を通知し、書込みを行うために他のすべての処理要素から許可を受けなければならない。ここで主として問題になるのは、システムの他のすべてのプロセッサが、書込みが生じる前に開始側プロセッサから書込みの通知を受けなければならないということである。さらに所与の処理装置のＬ１キャッシュにブロックが存在する場合、そのブロックは処理装置のＬ２、Ｌ３のキャッシュにも存在する。この性質は包含（inclusion）として知られ、当業者には周知のとおりである。以降、包含の原理は、本発明に関係したキャッシュにあてはまると仮定する。
【０００７】
システムでキャッシュ・コヒーレンシを実現するため、プロセッサは共通の汎用相互接続部（すなわちバス２０）を通して通信する。プロセッサは相互接続部を通してメッセージを受け渡し、メモリ位置を読取るまたは書込む意図を示す。操作が相互接続部上にセットされると、他のすべてのプロセッサがこの操作を"スヌープ"（監視）し、それらのキャッシュの状態によって、要求された操作を進めることができるかどうかを判断し、またできる場合はその条件を判断する。バス・トランザクションに対応し、メモリのコヒーレンシを維持するために、スヌープ及びフォローアップの動作を要するバス・トランザクションはいくつかある。スヌープ操作は、あるバス信号のアサートにより生成された有効なスヌープ・リクエストの受信によってトリガされる。
【０００８】
この通信が必要なのは、キャッシュを有するシステムでは、メモリの所与のブロックの最も最近（most recent）の有効なコピーが、システム・メモリ装置１６からシステム内のキャッシュに移動している可能性があるからである。プロセッサ（例えば１２ａ）が、そのキャッシュ階層内に存在しないメモリ位置にアクセスしようとした場合、そのメモリ位置の実際の（現在の）値を含むブロックの正しいバージョンは、システム・メモリ装置１６内か、（上述したように）他の処理装置（例えば処理装置１２ｂ）のキャッシュ内かいずれかにある可能性がある。正しいバージョンがシステムの他のキャッシュにある場合は、システム・メモリではなく、システム内のキャッシュから正しい値を取得する必要がある。
【０００９】
例えば、プロセッサ１２ａがメモリ内のある位置を読取ろうとしているとする。最初にそれ自体のＬ１キャッシュ（２４または２６）をポーリングする。Ｌ１キャッシュにブロックが存在しない場合、リクエストはＬ２キャッシュ（３０）に転送される。Ｌ２キャッシュにブロックが存在しない場合は、リクエストはより下位のレベルのキャッシュ、例えばＬ３キャッシュに転送される。ブロックが下位レベル・キャッシュに存在しない場合、リクエストは汎用相互接続部（２０）に置かれ、サービスを待機する。操作が汎用相互接続部上にセットされると、他の下位レベルのキャッシュはすべて操作をスヌープし、ブロックがそれらのキャッシュに存在するかどうか確認する。所与の処理装置が、ある処理装置によって要求されたデータのブロックをそのＬ１キャッシュに有し、そのデータが変更されている場合、包含の原理により、Ｌ２キャッシュ及び任意の下位レベル・キャッシュもブロックのコピーを有する（ただしプロセッサのキャッシュ内のコピーは変更されているので、それらのコピーは古くなっている）。従って、処理装置の下位レベル・キャッシュ（Ｌ３等）は、読取り操作をスヌープするとき、要求されたブロックが上位レベル・キャッシュに存在し、変更されていることを確認する。これが起きるとき、メモリ位置の実際の値はメモリ階層のトップのＬ１キャッシュにあり、開始側処理装置の読取りリクエストに応えるためには取得しなければならないので、Ｌ３キャッシュはメッセージを汎用相互接続部にセットすることにより、その操作を後でもう１度"再試行"しなければならないことを処理装置に通知する。
【００１０】
開始側処理装置からのリクエストが再試行されれば、Ｌ３キャッシュはプロセスを開始して、Ｌ１キャッシュから変更されたデータを取得し、本発明には特別には関係しない実施の詳細によるが、Ｌ３キャッシュ、メイン・メモリ、または両方で利用できるようにする。上位レベル・キャッシュからブロックを取得するため、Ｌ３キャッシュはキャッシュ間接続を通して上位レベル・キャッシュにメッセージを送り、ブロックを取得することを要求する。Ｌ１キャッシュに届き、ブロックは階層を下へ移動し、下位レベル（Ｌ３またはメイン・メモリ）に届き、ここで開始側処理装置からのリクエストに応えることができるようになるまで、これらのメッセージは処理装置の階層を上へ伝播する。
【００１１】
開始側処理装置は結局、汎用相互接続部上で読取りリクエストを再試行する。しかしながらこの時点で、変更されたデータは処理装置のＬ１キャッシュから取得され、開始側プロセッサからの読取りリクエストは満足される。ここに示したシナリオは一般的には"スヌープ・プッシュ"と呼ばれる。読取りリクエストは汎用相互接続部上でスヌープされ、これにより処理装置がブロックを階層の下に"プッシュ"し、開始側処理装置によって出された読取りリクエストを満足する。
【００１２】
ここで注目すべき重要なことは、プロセッサは、ブロックの読取りまたは書込みを行うときは、キャッシュのコヒーレンシを維持するために、その意図をシステムの他の処理装置に通信しなければならないということである。これを達成するために、キャッシュ・コヒーレンシ・プロトコルにより、キャッシュ階層の各レベルの各ブロックに、ブロックの現在の"状態"を示すステータス・インジケータが関連付けられる。この状態情報は、汎用相互接続部及びキャッシュ間接続上のメッセージ・トラフィックを減らす、ある最適化をコヒーレンシ・プロトコルで実現するために用いられる。このメカニズムの１つの例として、処理装置は、読取りを行うときに、読取りが後で再試行されなければならないかどうかを示すメッセージを受け取る。読取り操作が再試行されない場合は、普通は、他の処理装置にもまだアクティブなブロックのコピーがあるかどうか処理装置が確認できるようにする情報も、メッセージに含まれる（これは、他の下位レベル・キャッシュが再試行しない読取りについて"共用"または"非共用"の表示をそれら下位レベル・キャッシュによって供給することによって実現される）。従って、処理装置は、システム内の他の任意のプロセッサがブロックのコピーを有するかどうかを確認することができる。他の処理装置がブロックのアクティブなコピーを有さない場合は、読取り側処理装置はブロックの状態を"排他"とマークする。ブロックが排他とマークされた場合は、処理装置が、最初にシステム内の他の処理装置と通信することなく、そのブロックを後で書込むことは許可できる。なぜなら、他の処理装置はブロックのコピーを有さないからである。従って、プロセッサが最初にこの意図を相互接続部に通信することなく位置の読取りまたは書込みを行うことは可能であるが、これは、他のプロセッサがブロックに関心を持たないことがコヒーレンシ・プロトコルによって保証された場合に限られる。
【００１３】
上述のキャッシュ・コヒーレンシ方法は、"ＭＥＳＩ"と呼ばれる特定のプロトコルで実現される。これを図２に示す。このプロトコルのキャッシュ・ブロックは、"Ｍ"（変更、Modified）、"Ｅ"（排他、Exclusive）、"Ｓ"（共用、Shared）、または"Ｉ"（無効、Invalid）の４つの状態のいずれかになる。ＭＥＳＩプロトコルでは、各キャッシュ・エントリ（例えば３２バイト・セクタ）が、４つの可能な状態の中からエントリの状態を示す２つの追加ビットを有する。状態は、エントリの初期状態、及び要求側プロセッサによってシークされるアクセスのタイプに応じて変化し得、要求側プロセッサのキャッシュのエントリに特定の状態がセットされる。例えば、あるセクタが変更状態のとき、アドレスされたセクタは、変更されたセクタを有するキャッシュでのみ有効であり、変更されたデータはシステム・メモリに書戻されていない。セクタが排他のとき、そのセクタは表示されたセクタにしか存在せず、システム・メモリと一貫性を有する。セクタが共用なら、そのセクタはそのキャッシュ、及び少なくとも他の１つのキャッシュ内で有効であり、共用されるセクタはすべてシステム・メモリと矛盾がない。最後に、セクタが無効なとき、これはアドレスされたセクタがキャッシュに存在しないことを示す。図２に示すように、セクタが変更、共用、または無効の状態にある場合は、特定のバス・トランザクションに応じて、状態から状態へ移動することができる。排他状態のセクタは、他の任意の状態に移ることができるが、最初に無効である場合は排他になることしかできない。
【００１４】
キャッシュ・ブロックへのアクセスをさらに改良することは、上述のキャッシュ・コヒーレンシ・プロトコルを使用することによって可能である。"介入"と呼ばれるこの改良法では、メモリ・ブロックに対して制御権を有するキャッシュは、データを要求する他のキャッシュに、そのブロックのデータを、直接提供することができる（読取り型操作（read-type operation）のとき）。言い換えると、データをシステム・メモリに書込み、次に要求側プロセッサにメモリから再び読戻させる必要性を回避する。介入は、状態が変更または排他であるブロックにデータを有するキャッシュによってのみ実行できる。これら両方の状態では、データの有効なコピーを有するキャッシュ・ブロックは１つしかないので、バス２０を通して、最初にシステム・メモリに書込む必要なくデータを供給することは簡単なことである。従って、介入手順は、システム・メモリに書込み、及びそこから読取るという長いプロセス（これは実際にバス操作３回とメモリ操作２回を伴う）を避けることによって、処理を高速化する。この手順により、待ち時間が改良されるだけでなく、使用可能なバス帯域幅が増加する。
【００１５】
従来技術のプロトコルは、データが２つ以上のキャッシュによって共用状態に保たれているときには介入に対応しないが、これは一般的には、どのキャッシュがデータを供給するか確認するのが難しいからである。システムが共用応答をすべて集め、次にデータを供給するキャッシュを（例えば任意に）選択する場合は、共用キャッシュ状態での介入を行えるが、一般にこのアプローチは、データをメモリから取得するより高速ではなく、利点はほとんどない。従って、共用状態でのデータの効率的介入を考慮したキャッシュ・コヒーレンシを維持する方法を考案することが望ましい。
【００１６】
【発明が解決しようとする課題】
本発明の目的は、マルチプロセッサ・コンピュータ・システムでキャッシュ・コヒーレンシを維持するための改良された方法を提供することである。
【００１７】
本発明の他の目的は、改良された介入応答を考慮した方法を提供することである。
【００１８】
本発明の他の目的は、２つ以上のキャッシュが関連データを共用（つまり有効）状態に保つときに、介入を追加処理として可能にする方法を提供することである。
【００１９】
【課題を解決するための手段】
前記の目的は、マルチプロセッサ・コンピュータ・システムの処理装置にデータを供給する方法によって達成される。この方法は、一般的には、それぞれがコンピュータ・システムの複数の処理装置の１つに関連付けられた複数のキャッシュに、データ値をロードするステップ、どのキャッシュが、最も最近（most recently）アクセスされたデータ値のコピーを含むかの表示を供給するステップ、及びデータ値をアクセスしようとする処理装置からの照会に対して表示を転送することによって応答するステップを含む。データ値を格納するブロックを有する少なくとも１つのキャッシュ・ラインが各キャッシュにあり、表示を供給するステップは、データ値を含むブロックを有するキャッシュ・ラインが"最近読取り"状態にあることを示す。データ値を格納する複数の第１ビットが各キャッシュにあり、表示を供給するステップはさらに、最も最近（most recently）アクセスされたデータ値のコピーを含むキャッシュの複数の第２ビットに状態値を割当てるステップを含む。データ値をアクセスしようとする処理装置は表示の転送を検出し、最も最近（most recently）アクセスされたデータのコピーを含むキャッシュからデータが供給される。最も最近（most recently）アクセスされたデータのコピーを最初に持っていたキャッシュは、データを供給した際に、その表示を変えて、そのコピーがそこで共用されたことを示し、データ値をアクセスした処理装置はその後、最も最近（most recently）アクセスされたデータ値のコピーを含むキャッシュを有すると表示される。また、データ値をアクセスしようとする処理装置からの照会により、処理装置がデータ値を書込もうとしていることが示される場合は、最も最近（most recently）アクセスされたデータ値のコピーを最初に持っていたキャッシュが、現在はデータ値の無効なコピーを有するというの表示が出される。上述のプロトコルでは、いくつかのキャッシュに共用されたデータ、つまりこれらのキャッシュで有効なデータを、システム・メモリ（ＲＡＭ）からデータを取得することなく、最も最近（most recently）アクセスされたコピーを有するキャッシュによって直接供給（介入）できる。このアプローチはコンピュータ・システムの処理速度を大幅に改良する。
【００２０】
上述の、並びに本発明の更なる目的、機構、及び利点が、以下の詳細な説明で明らかになろう。
【００２１】
【発明の実施の形態】
本発明は、図１の装置のようなマルチプロセッサ装置でキャッシュ・コヒーレンシを維持する方法を対象とするが、必ずしも従来型ではない、つまり図１には示していない新しいハードウェア・コンポーネントを追加でき、または既存のコンポーネントのための新規な相互接続アーキテクチャを有するコンピュータ・システムにも適用できる。従って、当業者には明らかなように、本発明は、図に示した一般化された装置に限定されるものではない。
【００２２】
図３を参照する。本発明のキャッシュ・コヒーレンシ・プロトコルの１実施例の状態図が示してある。このプロトコルは、同じ４つの状態（変更、排他、共用、無効）を含む点で、従来技術のＭＥＳＩプロトコル（図２）と似ているが、この他、他の場合は共用表示を有する、最も最近（most recently）参照されたブロックの表示を供給するため新しい"Ｒ"（Recent）状態を含む。言い換えると２つ以上のキャッシュが有効なデータのコピーを有するとき、それらはデータに最も最近（most recently）アクセスしたキャッシュを除いて、すべて共用状態にあり、アクセスしたそのキャッシュは「最近」状態にある。これで状態は合計５つになるので、エントリの状態を識別するためには、（従来技術のように２ビット・フィールドではなく）３ビット・フィールドが各キャッシュ・エントリに必要である。
【００２３】
この新しいプロトコルはここでは"Ｒ−ＭＥＳＩ"プロトコルと呼ぶ。このプロトコルでは新しいコヒーレンシ応答、つまり共用介入の応答も与えられる（後述）。従来技術のＭＥＳＩプロトコルと同様、Ｍ−Ｅ−Ｓ−Ｉの４つの状態は、エントリの初期状態、及び要求側プロセッサによってシークされたアクセスのタイプをもとに変化し得る。これら４つの状態が変化する様子は、一般的には従来技術のＭＥＳＩプロトコルと同一である。次に例外を示す。
【００２４】
表１に、”ミス”が生じる場合について、読取り型操作のマスタ・キャッシュの状態遷移を示す。
【表１】
0003888769.tif 000002
【００２５】
最近状態は、コヒーレンシ応答が変更（Ｍｏｄ）、共用（Ｓｈｒ）、または共用介入（ＳｈｒＩ）の場合に、"読取りミス"・バス操作（表１の１行目）で生じる。応答が"読取りミス"操作で変更であれば、変更されたキャッシュは、データをメモリにも送るので「変更」ではなくなる。"読取りミス"操作でコヒーレンシ応答がない（Ｎｕｌｌ）場合（表１の３行目）は、従来技術のＭＥＳＩプロトコルのように排他状態が生じる。"ＲＷＩＴＭミス"操作（ＲＷＩＴＭは「変更予定読取り：Read With Intent To Modify」の略）では、コヒーレンシ応答がＮｕｌｌ、Ｓｈｒ、またはＳｈｒＩ（表１の２行目）の場合は排他状態が生じ、コヒーレンシ応答がＭｏｄ（表１の４行目）なら変更状態が生じる。ＲＷＩＴＭの場合は、まだ実行準備中のデータまたは命令にのみあてはまる。通常、１度実行が準備された命令は変更されないからである。
【００２６】
表２に、読取り型操作（読取りヒット）について、スヌーパとして働くときに、バス・トランザクションがキャッシュに供給する影響の１つの例を示す。
【表２】
0003888769.tif 000003
【００２７】
排他（Exclusive）または最近（Recent）の開始状態（表２の１、２、及び４行目）については、キャッシュは共用介入コヒーレンシ応答を転送する。これはつまり、キャッシュがそのデータのコピーを、システム・メモリからの関与なく、要求側プロセッサに介入を通して直接供給することを意味する。データがこのように供給されるときは、次の状態は"読取りヒット"操作で共用になるか（表２の１及び２行目）、"ＲＷＩＴＭヒット"操作で無効になる（表２の４行目）。開始状態が変更（表２の３及び５行目）の場合には、コヒーレンシ応答は変更であり、それでも介入は生じる。バス操作が"ＲＷＩＴＭ"だった場合、データはキャッシュからキャッシュに転送されるだけであるが、バス操作が読取りあった場合、データはキャッシュ及びメモリの両方に送られる。
【００２８】
先に述べたように、表１及び表２に示していない状態と操作については、遷移とコヒーレンシ応答は従来技術のＭＥＳＩプロトコルに従って実行されるが、１つ資格がある。すなわちキャッシュ・エントリは、書込み操作の影響を受ける"Ｒ"状態になり得、そのエントリは、共用エントリが書込み操作の影響を受けるときと同様に変更状態への遷移を経る。Ｒ−ＭＥＳＩプロトコルについては、さらに次の点を指摘できよう。つまり、エントリは決して無効から共用に移ることはない（代わりに「最近」に移る）。エントリは決して排他から最近に移ることはない（共用に移る）。エントリは決して最近から排他に移ることはない（共用エントリが排他に移行しないのと同じ）。そしてエントリは決して変更から最近に移ることはない（共用に移る。そのとき要求側プロセッサのキャッシュ内のエントリは最近に移る）。
【００２９】
この新しいＲ−ＭＥＳＩプロトコルでは、ブロックの所有権は、データを読取る最後のキャッシュに移行する。これにより最も最近（most recently）用いられた状態にとどまり、従って、キャッシュ置き換え機構のＬＲＵ（least recently used）法が採用された場合に割当て解除される機会が少ないという利点が加わる。"Ｒ"キャッシュ状態にはまた、キャッシュされたＩ／Ｏステータス位置を最も最近（most recently）読取ったプロセッサ／キャッシュに割込む高性能入出力（Ｉ／Ｏ）コントローラ等、他のアプリケーションに用いられるという利点もある。なぜなら、このプロセッサ／キャッシュはＩ／Ｏデバイス・ドライバ・コードをキャッシュした可能性が最大で、従って、コードをそのキャッシュにフェッチする必要のある他のプロセッサよりも高速にコードを実行できるからである。
【００３０】
共用されたデータ（つまり２つ以上のキャッシュに有効に存在するデータ）に介入を供給することにより、メモリ待ち時間が大きく改良される。Ｒ−ＭＥＳＩプロトコルのある評価では、業界標準のベンチマークによると従来技術のＭＥＳＩプロトコルと比較したとき、性能が５３００ＴＰＭc（毎分トランザクション数）から７５００ＴＰＭcに向上した。一般的に、本発明によればメモリ・コントローラが操作から解放され、メモリ帯域幅に対する需要は減少する。
【００３１】
本発明が特定の実施例を参照して述べられたが、この説明は、制限を意味するものではない。当業者には、本発明の説明の参照に際し、開示された実施例の様々な変更が、本発明の代替実施例と同様に明らかになろう。従って、このような変更は、本発明の趣旨または範囲を逸脱することなく実施され得ることが考慮される。
【００３２】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００３３】
（１）マルチプロセッサ・コンピュータ・システムの処理装置にデータを供給する方法であって、
それぞれが前記コンピュータ・システムの複数の処理装置の１つに関連付けられた複数のキャッシュにデータ値をロードするステップと、
前記キャッシュのうちどのキャッシュが最も最近アクセスされたデータ値のコピーを含むかの表示を供給するステップと、
前記データ値をアクセスしようとする処理装置からの照会に対して前記表示を転送することによって応答するステップと、
を含む、前記方法。
（２）前記キャッシュはそれぞれ、前記データ値を格納するブロックを有する少なくとも１つのキャッシュ・ラインを有し、表示を供給する前記ステップは、前記データ値を含むブロックを有するキャッシュ・ラインが、"最近読取り"状態にあることを示す、前記（１）記載の方法。
（３）前記データ値を格納する複数の第１ビットが各キャッシュにあり、
表示を供給する前記ステップは、最も最近アクセスされたデータ値のコピーを含むキャッシュの複数の第２ビットに状態値を割当てるステップを含む、
前記（１）記載の方法。
（４）前記データ値をアクセスしようとする処理装置が前記表示の転送を検出するステップを含む、前記（１）記載の方法。
（５）最も最近アクセスされた前記データ値のコピーを含むキャッシュを有する処理装置が、前記データ値をアクセスしようとする処理装置に前記データ値を供給するステップを含む、前記（１）記載の方法。
（６）前記データ値にアクセスしようとする処理装置からの照会は、前記処理装置が前記データ値を読取ろうとしていることを示し、
前記表示を変更して、前記データ値をアクセスしようとする処理装置のキャッシュが、現在は、最も最近アクセスされたデータ値のコピーを含むキャッシュであることを示すステップを含む、
前記（１）記載の方法。
（７）前記データ値にアクセスしようとする処理装置からの照会は、前記処理装置が前記データ値を書込もうとしていることを示し、
前記表示を変更して、最も最近アクセスされたデータ値のコピーを有していたキャッシュが現在は前記データ値の無効なコピーを有することを示すステップを含む、
前記（１）記載の方法。
（８）最も最近アクセスされた前記データ値のコピーを含むキャッシュの前記データ値を変更するステップと、
前記データ値が変更されていることの新しい表示を供給するステップと、
を含む、前記（１）記載の方法。
（９）前記データ値を含む、最も最近アクセスされたデータ値のコピーを含むキャッシュ以外の、任意のキャッシュに前記データ値の共用コピーがあることの追加表示を供給するステップを含む、前記（２）記載の方法。
（１０）最も最近アクセスされた前記データ値のコピーを先に有していたキャッシュが、現在は前記データ値の共用コピーを有することの追加表示を供給する、前記（６）記載の方法。
（１１）メモリ装置と、
前記メモリ装置に接続されるバスと、
前記バスに接続され、それぞれが前記メモリ装置からのデータ値を格納するキャッシュを有し、さらに、最も最近アクセスされたデータ値のコピーが、どのキャッシュに含まれるかを表示する手段を各キャッシュが有する複数の処理装置と、
を含む、コンピュータ・システム。
（１２）前記キャッシュはそれぞれ、前記データ値を格納する複数の第１ビットと、所与のキャッシュ・エントリの状態を識別する複数の第２ビットとを有するキャッシュ・エントリを含み、前記状態は、最も最近アクセスされた前記データ値のコピーがどのキャッシュに含まれるかの前記表示を供給する、前記（１１）記載のコンピュータ・システム。
（１３）最も最近アクセスされたデータ値のコピーを含むキャッシュから前記データ値を読取ろうとする処理装置に、前記データ値を供給する手段を含む、前記（１１）記載のコンピュータ・システム。
（１４）前記キャッシュはそれぞれ、前記データ値を読取ろうとする処理装置からの照会に応答して、最も最近アクセスされたデータ値のコピーを含むことの表示を変更する手段を含む、前記（１１）記載のコンピュータ・システム。
（１５）前記キャッシュはそれぞれ、前記データ値を変更しようとする処理装置からの照会に応答して、前記データ値のコピーは無効であることを示す手段を含む、前記（１１）記載のコンピュータ・システム。
（１６）前記キャッシュはそれぞれ、最近アクセスされたデータ値のコピーを有する場合は、前記データ値の共用コピーを有することを示す手段を含む、前記（１１）記載のコンピュータ・システム。
（１７）前記複数の第２ビットは、所与のキャッシュ・エントリの状態を最も最近アクセスされたコピーとして識別する他に、所与のキャッシュ・エントリを変更状態、排他状態、共用状態、または無効状態にあると識別するよう適合化される、前記（１２）記載のコンピュータ・システム。
（１８）前記キャッシュはそれぞれ、前記データ値を読取ろうとする処理装置が、現在は最も最近アクセスされたデータ値のコピーを含むキャッシュを有することを示す手段を含む、前記（１４）記載のコンピュータ・システム。
【図面の簡単な説明】
【図１】従来技術のマルチプロセッサ・コンピュータ・システムのブロック図である。
【図２】従来技術のキャッシュ・コヒーレンシ・プロトコル（ＭＥＳＩ）を示す状態図である。
【図３】本発明のキャッシュ・コヒーレンシ・プロトコルを示す状態図である。
【符号の説明】
１０  コンピュータ・システム
１２ａ、１２ｂ  処理装置
１４  入出力（Ｉ／Ｏ）装置
１６  メモリ装置
１８  ファームウェア（ＲＯＳ）
２０  汎用相互接続部
２２  プロセッサ・コア
２４  命令キャッシュ
２６  データ・キャッシュ
２８  集積チップ
３０  キャッシュ
【図１】
0003888769.tif 000004
【図２】
0003888769.tif 000005
【図３】
0003888769.tif 000006