(57)【特許請求の範囲】
【請求項１】
メモリ・デバイスと、前記メモリ・デバイスに接続されたバスと、前記バスに接続された複数の処理装置とを備え、前記処理装置の各々が少なくとも第１のレベルのキャッシュ（以下「Ｌ１キャッシュ」と表記）及び第２のレベルのキャッシュ（以下「Ｌ２キャッシュ」と表記）を含んでいるキャッシュ階層を有し、各処理装置内のＬ１キャッシュがＬ２キャッシュの上流に設けられ、Ｌ１キャッシュが複数のＬ１キャッシュ・ラインを有し、Ｌ２キャッシュが複数のＬ２キャッシュ・ラインを有し、Ｌ１キャッシュの各Ｌ１キャッシュ・ライン及びＬ２キャッシュの各Ｌ２キャッシュ・ラインがそれぞれ複数のセクタを有し、Ｌ２キャッシュの各Ｌ２キャッシュ・ラインの各セクタがそれぞれＬ１キャッシュの各Ｌ１キャッシュ・ラインの各セクタに対応しうるマルチプロセッサ・コンピュータ・システム内でキャッシュ・コヒーレンシを維持する方法であって、
一の処理装置において、
該処理装置上で実行される特定の命令に応答して、前記メモリ・デバイスからのデータを読み取ることなく、Ｌ１キャッシュ内の一のＬ１キャッシュ・ラインの一のセクタの値をゼロに変更するステップと、
値が変更された前記一のＬ１キャッシュ・ラインの前記一のセクタに対応するＬ２キャッシュ内のセクタを有するＬ２キャッシュ・ラインの状態を指示するステップであって、該Ｌ２キャッシュ・ラインが、該Ｌ２キャッシュ・ラインには有効な値がない状態でかつ該Ｌ２キャッシュ・ラインの各セクタの少なくとも一つのセクタに対応する前記一のＬ１キャッシュ・ラインの少なくとも一つのセクタが存在し該セクタには有効な値が格納されている状態であることを示す上流未定義状態であることを指示するステップを含み、
前記指示するステップが、前記一のＬ１キャッシュ・ラインにアクセスする要求に関する他の処理装置からの照会が前記バス上でスヌープされることに応答して、前記一のＬ１キャッシュ・ラインの前記一のセクタの内容をＬ１キャッシュからフラッシュするとともに、前記Ｌ２キャッシュ・ラインの状態を前記上流未定義状態から無効状態に遷移させるステップを含む、マルチプロセッサ・コンピュータ・システム内でキャッシュ・コヒーレンシを維持する方法。
【請求項２】
メモリ・デバイスと、
前記メモリ・デバイスに接続されたバスと、
前記バスに接続された複数の処理装置とを備え、
前記処理装置の各々が少なくとも第１のレベルのキャッシュ（以下「Ｌ１キャッシュ」と表記）及び第２のレベルのキャッシュ（以下「Ｌ２キャッシュ」と表記）を含んでいるキャッシュ階層を有し、各処理装置内のＬ１キャッシュがＬ２キャッシュの上流に設けられ、Ｌ１キャッシュが複数のＬ１キャッシュ・ラインを有し、Ｌ２キャッシュが複数のＬ２キャッシュ・ラインを有し、Ｌ１キャッシュの各Ｌ１キャッシュ・ライン及びＬ２キャッシュの各Ｌ２キャッシュ・ラインがそれぞれ複数のセクタを有し、Ｌ２キャッシュの各Ｌ２キャッシュ・ラインの各セクタがそれぞれＬ１キャッシュの各Ｌ１キャッシュ・ラインの各セクタに対応しうるものであり、
前記処理装置の各々が、
該処理装置上で実行される特定の命令に応答して、前記メモリ・デバイスからのデータを読み取ることなく、Ｌ１キャッシュ内の一のＬ１キャッシュ・ラインの一のセクタの値をゼロに変更する手段と、
値が変更された前記一のＬ１キャッシュ・ラインの前記一のセクタに対応するＬ２キャッシュ内のセクタを有するＬ２キャッシュ・ラインの状態を指示する手段であって、該Ｌ２キャッシュ・ラインが、該Ｌ２キャッシュ・ラインには有効な値がない状態でかつ該Ｌ２キャッシュ・ラインの各セクタの少なくとも一つのセクタに対応する前記一のＬ１キャッシュ・ラインの少なくとも一つのセクタが存在し該セクタには有効な値が格納されている状態であることを示す上流未定義状態であることを指示する手段を備え、
前記指示する手段が、前記一のＬ１キャッシュ・ラインにアクセスする要求に関する他の処理装置からの照会が前記バス上でスヌープされることに応答して、前記一のＬ１キャッシュ・ラインの前記一のセクタの内容をＬ１キャッシュからフラッシュするとともに、前記Ｌ２キャッシュ・ラインの状態を前記上流未定義状態から無効状態に遷移させる手段を含む、コンピュータ・システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にはコンピュータ・システムに関し、具体的にはスヌープ操作を上流であるより上位レベルのキャッシュに転送する必要があるかどうかを判断するキャッシュ・コヒーレンシ・プロトコルに係わる。
【０００２】
【従来の技術】
従来のマルチプロセッサ・コンピュータ・システム１０の基本構造を図１に示す。コンピュータ・システム１０は、いくつかの処理装置（以下「プロセッサ」とも称する）を有することができ、そのうちの２つの処理装置１２ａ及び１２ｂが図示されている。処理装置は、入出力（Ｉ／Ｏ）装置１４（表示モニタ、キーボード、グラフィカル・ポインタ（マウス）、永続記憶装置（ハード・ディスク）など）、処理装置がプログラム命令を実行するために使用するメモリ・デバイス１６（ランダム・アクセス・メモリ、またはＲＡＭ）、及び、コンピュータに最初に電源を入れたときに周辺装置の１つ（通常は永続記憶装置）からオペレーティング・システムを探し出してロードすることを主な目的とするファームウェア１８を含む様々な周辺装置に接続されている。処理装置１２ａ及び１２ｂは、汎用相互接続線またはバス２０、あるいはダイレクト・メモリ・アクセス・チャネル（図示せず）を含む様々な手段によって周辺装置と通信する。コンピュータ・システム１０は、たとえばモデムやプリンタなどに接続するためのシリアル・ポートやパラレル・ポートなど、図示されていない多くの追加の構成要素を有することができる。当業者ならさらに、図１のブロック図に図示されている構成要素と共に使用可能な他の構成要素もあることがわかるであろう。たとえば、ビデオ表示モニタを制御するためにディスプレイ・アダプタを使用したり、メモリ１６にアクセスするためにメモリ・コントローラを使用することができる。コンピュータは３個以上の処理装置を有することもできる。
【０００３】
対称マルチプロセッサ（ＳＭＰ）コンピュータでは、すべての処理装置は一般に同じである。すなわち、すべての処理装置が命令及びプロトコルの共通のセットまたはサブセットを使用して動作し、一般に同じアーキテクチャを有する。典型的なアーキテクチャは図１に示す通りである。処理装置は、複数のレジスタと、コンピュータを動作させるためにプログラム命令を実行する実行ユニットとを含むプロセッサ・コア２２を含む。処理装置の例としては、インターナショナル・ビジネス・マシーンズ・コーポレイション（ＩＢＭ）が販売するＰｏｗｅｒＰＣＴＭプロセッサがある。処理装置は、高速メモリ・デバイスを使用して実装された命令キャッシュ２４やデータ・キャッシュ２６などの１つまたは複数のキャッシュも有することができる。キャッシュは、メモリ１６から値をロードする長いステップを回避することによって処理を高速化することを目的として、プロセッサによって繰り返しアクセスされる可能性がある値を一時的に記憶するために一般に使用される。これらのキャッシュは、単一の集積チップ２８上にプロセッサ・コアと一体にパッケージされているときは、「オンボード」キャッシュと呼ばれる。各キャッシュには、プロセッサ・コアとキャッシュ・メモリとの間のデータの転送を管理するキャッシュ・コントローラ（図示せず）が付随している。
【０００４】
処理装置は、オンボード（一次）キャッシュ２４及び２６をサポートするため二次キャッシュ（Ｌ２）と呼ばれるキャッシュ３０などの追加のキャッシュを備えることができる。言い換えると、キャッシュ３０はメモリ１６とオンボード・キャッシュとの間の媒介として機能し、オンボード・キャッシュよりもはるかに大量の情報（命令及びデータ）を記憶することができるが、アクセス・ペナルティは長い。たとえば、キャッシュ３０は、２５６キロバイトまたは５１２キロバイトの記憶容量を有するチップとすることができ、プロセッサは６４キロバイトの合計記憶容量を持つオンボード・キャッシュを有するＩＢＭ  ＰｏｗｅｒＰＣＴＭ６０４シリーズのプロセッサとすることができる。キャッシュ３０はバス２０に接続され、メモリ１６からプロセッサ・コア２２への情報のロードはすべてキャッシュ３０を介して行わなければならない。図１には二次キャッシュ階層しか図示されていないが、多くのレベル（Ｌ３、Ｌ４、など）の直列接続されたキャッシュを備えたマルチレベル・キャッシュ階層を設けることもできる。
【０００５】
ＳＭＰコンピュータでは、コヒーレントなメモリ・システムを備えること、すなわち、すべてのプロセッサについて各個別の記憶場所への書込みが何らかの順序で順次化されるようにすることが重要である。たとえば、値１、２、３、４をとるように１シーケンスの操作によってメモリ内の場所が変更されるものとする。キャッシュ・コヒーレント・システムでは、すべてのプロセッサが、所与の場所への書込みを前記の順序で行われるように守る。しかし、１つの処理要素がその記憶場所への書込みをミスすることがある。その記憶場所を読み取る所与の処理要素が１、３、４というシーケンスに遭遇し、値２に加えられた更新を読取り損なうことがある。これらの特性を実装するシステムを「コヒーレント」と言う。実質的には、すべてのコヒーレンシ・プロトコルはキャッシュ・ブロックのサイズの粒度に対してのみ作用する。すなわち、コヒーレンシ・プロトコルはデータの移動と書込み許可をキャッシュ・ブロック単位で制御し、個々の記憶場所ごとに別々に制御するわけではない。
【０００６】
当業者に周知の、キャッシュ・コヒーレンシを実現するためのプロトコル及び技法がいくつかある。コヒーレンシを維持するためのそれらのすべての機構の中心にあるのは、プロトコルによって、所与の時点で所与の記憶場所（キャッシュ・ブロック）への書込みを行うことができる「許可」を１つのプロセッサだけが持てるようにするという必要条件である。この必要条件の結果として、処理要素が記憶場所への書込みを試みるときは常に、まず、その場所への書込みを行いたいということを他のすべての処理要素に通知し、他のすべての処理要素から許可を受け取ってから書込みを行わなければならない。重要な問題は、書込みが行われる前に開始プロセッサがシステム内の他のすべてのプロセッサに書込みを通知しなければならないということである。さらに、ブロックが所与の処理装置の一次キャッシュ内にある場合、そのブロックはその処理装置の二次キャッシュ及び三次キャッシュにも存在する。この特性は包含と呼ばれ、当業者には周知である。以下では、本発明に関係するキャッシュにこの包含の原理が適用されるものとする。
【０００７】
システムにおけるキャッシュ・コヒーレンシを実現するために、プロセッサは共通の汎用相互接続線（すなわちバス２０）を介して通信する。プロセッサは、記憶場所の読取りまたは書込みを行いたいことを示すメッセージをこの相互接続線で渡す。相互接続線上に操作が送り込まれると、他のすべてのプロセッサはその操作を「スヌープ」（監視）し、それらのキャッシュの状態が要求された操作を行うことができる状態であるかどうかを決定し、できる場合にはどのような条件下で行えるかを決定する。バス・トランザクションを受け入れ、メモリ・コヒーレンシを維持するためにスヌープとフォローアップ処置を必要とするいくつかのバス・トランザクションがある。スヌープ操作は、特定のバス信号のアサートによって生成される適格なスヌープ要求の受信によってトリガされる。
【０００８】
この通信は、キャッシュを備えたシステムでは、メモリの所与のブロックの最も最近の有効コピーがシステム・メモリ１６からシステム内の（前述のような）１つまたは複数のキャッシュに移動している可能性があるために必要なものである。プロセッサ（たとえば１２ａ）がそのプロセッサのキャッシュ階層内にない記憶場所にアクセスを試みた場合、その記憶場所の実際の（現行）値が入っているブロックの正しいバージョンは、システム・メモリ１６内にあるか、または別の処理装置（たとえば処理装置１２ｂ）内の１つまたは複数のキャッシュ内にある可能性がある。正しいバージョンがシステム内の他の１つまたは複数のキャッシュにある場合、システム・メモリではなく、システム内のその１つまたは複数のキャッシュから正しい値を入手する必要がある。
【０００９】
たとえば、プロセッサ（たとえば１２ａ）がメモリ内の記憶場所を読み取ろうと試みる場合を考えてみる。プロセッサはまず、そのプロセッサ自体の一次キャッシュ（２４または２６）をポーリングする。そのブロックが一次キャッシュにない場合、要求は二次キャッシュ（３０）に転送される。そのブロックが二次キャッシュにない場合、それより下位のキャッシュがあればその下位キャッシュ（たとえば三次キャッシュ）に要求が転送される。ブロックがその下位キャッシュにもない場合、要求は処理のために汎用相互接続線（２０）上に流される。汎用相互接続線上に操作が流されると、他のすべての処理装置がその操作をスヌープし、それぞれのキャッシュにそのブロックがあるかどうかを判断する。処理装置によって要求されたそのデータのブロックを所与の処理装置がその一次キャッシュ内に持っており、そのデータが変更されている場合、包含の原理により二次キャッシュ及びそれより下位レベルのキャッシュもそのブロックのコピーを持っている（しかし、そのプロセッサのキャッシュ内のコピーが変更されているためそれらのコピーは陳腐化している可能性がある）。したがって、処理装置の下位レベルのキャッシュ（たとえば三次キャッシュ）がこの読取り操作をスヌープした場合、要求されたブロックがより上位レベルのキャッシュ内にあり、変更されていると判断する。これが起こると、三次キャッシュは、その記憶場所の実際の値がメモリ階層の最上部の一次キャッシュ内にあり、開始処理装置の読取り要求の処理に使用できるようにするためにそれを取り出さなければならないため、その操作を後でもう一度「再試行」しなければならないことをその処理装置に対して通知するメッセージを汎用相互接続線上に送る。
【００１０】
開始処理装置からの要求が再試行されると、前出の三次キャッシュは一次キャッシュから変更されたデータを取り出し、本発明の要旨には関係のない実現上の細目に依存して、それを三次キャッシュまたはメイン・メモリあるいはその両方で使用可能にするプロセスを開始する。より上位のキャッシュからブロックを取り出すために、三次キャッシュはキャッシュ間接続を介してより上位のキャッシュにメッセージを送り、ブロックの取り出しを要求する。これらのメッセージが処理装置のキャッシュ階層を上方に伝播して一次キャッシュに達すると、このブロックはキャッシュ階層を下方に移動し、最下位レベル（三次キャッシュまたはメイン・メモリ）に達するので、ここで開始処理装置からの要求を処理することができるようになる。
【００１１】
開始処理装置は、最終的に読取り要求を汎用相互接続線上に再提示する。しかし、この時点で処理装置の一次キャッシュから変更されたデータが取り出されており、開始プロセッサからの読取り要求は満たされることになる。この事例を一般に「スヌープ・プッシュ」と呼ぶ。汎用相互接続線上で読取り要求がスヌープされ、それによって処理装置が「ブロック」を階層の最下部まで「プッシュ」して、開始処理装置によって行われた読取り要求が満たされる。
【００１２】
留意すべき重要な点は、処理装置がブロックの読取りまたは書込みを行いたい場合、キャッシュ・コヒーレンシを維持するために、この処理装置はその希望をシステム内の残りの処理装置に伝えなければならないことである。これを実現するために、キャッシュ・コヒーレンシ・プロトコルは、キャッシュ階層の各レベル内の各ブロックに、ブロックの現在の「状態」を示す状況標識を関連づける。この状態情報を使用して、汎用相互接続線とキャッシュ間接続線上のメッセージ・トラフィックを少なくするコヒーレンシ・プロトコルにおける特定の最適化が可能になる。この機構の一例として、処理装置が読取りを実行するとき、この処理装置はその読取りが後で再試行されなければならないかどうかを示すメッセージを受け取る。この読取り操作が再試行されない場合、メッセージには、通常、他の処理装置にもまだそのブロックのアクティブ・コピーがあるかどうかをこの処理装置が判断することができるようにする情報も含まれる（これは、他の最下位キャッシュにそれらのキャッシュが再試行しない読取りについて「共用」または「非共用」標識を提供させることによって行われる）。したがって、処理装置は、システム内の他の処理装置がブロックのコピーを持っているかどうかを判断することができる。他の処理装置がブロックのアクティブ・コピーを持っていない場合、読取り側処理装置はそのブロックの状態を「排他的」とマークする。ブロックが排他的とマークされた場合、システム内の他の処理装置にはそのブロックのコピーが存在しないために、読取り側処理装置は、最初にシステム内の他の処理装置と通信することなく、そのブロックへの書き込みを後で行うことができる。したがって、一般に、処理装置は読み書きの意図を相互接続線上に流してからでなくても、メモリ内の記憶場所を対象とする読取りまたは書込みを行うことができる。しかし、これは他の処理装置がそのブロックに関心がないことがコヒーレンシ・プロトコルによって保証された場合にのみ起こる。
【００１３】
上述のキャッシュ・コヒーレンシ技法は、「ＭＥＳＩ」と呼ばれる特定のプロトコルで実施され、これを図２に示す。このプロトコルでは、キャッシュ・ブロックは、「Ｍ」（変更済み）、「Ｅ」（排他的）、「Ｓ」（共用）、または「Ｉ」（無効）の４つの状態のうちの１つを取ることができる。ＭＥＳＩプロトコルでは、各キャッシュ項目（たとえば３２バイト・セクタ）は、項目がとることができる４つの状態のうちの状態を示す２ビットを持つ。状態は、要求プロセッサが求める項目の初期状態及びアクセスのタイプに応じて変化することができ、要求プロセッサのキャッシュ内の項目について特定の状態が設定される。たとえば、セクタが「変更済み」状態の場合、アドレスされたセクタは変更されたセクタを持っているキャッシュ内でのみ有効であり、変更されたデータはまだシステム・メモリに書き戻されていない。セクタが「排他的」の場合、それはそのセクタのみにあり、システム・メモリと整合している。セクタが「共用」の場合、そのキャッシュ内と少なくとも１つの他のキャッシュ内で有効であり、すべての共用セクタはシステム・メモリと整合している。最後に、セクタが無効な場合、アドレスされたセクタはキャッシュ内にないことを示す。図２に示すように、セクタが「変更済み」、「共用」、または「無効」状態のいずれかである場合、特定のバス・トランザクションに応じて状態間を移行することができる。「排他的」状態のセクタは他のいずれの状態にも移行することができるが、セクタはまず「無効」になってからでなければ「排他的」になることができない。
【００１４】
プロセッサの高速化したときにＳＭＰパフォーマンスを維持する際の難点の一つは、システム・メモリ・バスの負荷の増大である。その影響を緩和する１つの方法は、バス幅と、１回のトランザクションごとのデータ伝送量（伝送バースト・サイズ）を増やすことである。残念ながら、この伝送サイズはシステムのキャッシュ・ライン・サイズとコヒーレンシ・サイズになり、ほとんどの縮小命令セット・コンピュータ（ＲＩＳＣ）プロセッサがそうであるように、キャッシュ制御命令がある場合にはソフトウェア・モデルに影響を与える。ソフトウェアへの影響を防止するために、プロセッサとシステム・バスの間にセクタ化キャッシュが実装される。セクタ化キャッシュはメモリ及びシステム伝送サイズと同じライン・サイズを持ち、セクタ・サイズはプロセッサ・キャッシュ・ライン・サイズと同じである。この構成によって、ソフトウェア影響問題は解決されるが、包含性とコヒーレンシを維持しようとする下位レベルのキャッシュについてはいくつかの設計上の問題が生じる。
【００１５】
第１に、より上位のキャッシュ（一次）が、アロケート・アンド・ゼロ命令と呼ぶ特定の命令（ＰｏｗｅｒＰＣＴＭ命令セットの「ＤＣＢＺ」）を実行するときは常に、メモリから古いデータをフェッチせずにそれ自体のキャッシュに入っているデータを変更する（ゼロにする）。この操作は、一般に新しいプロセスにメモリ領域を割振りし直すときに行われる。下位レベル・キャッシュもそれ自体のキャッシュ・ラインを割り振り、ゼロにする必要があるが、下位レベルのキャッシュはより大きなキャッシュ・ラインを有する。このプロシージャを実施する従来の方法は、メモリからより大きなラインを読取り、次にそのプロセッサ・キャッシュ・ラインに対応する部分をゼロにするものである。しかしこの手法は、いずれにしても再割り振りしようとしているメモリからのデータの読み取りを回避するという操作の目的全体を損なう。さらに、プロセッサは、きわめて短い期間に、追加のキャッシュ・ラインのアロケート・アンド・ゼロを行う可能性が高く、そしてこれらのキャッシュ・ラインが下位レベルのキャッシュ内のより大きなキャッシュ・ラインの残りの部分に入ることがある（もっとも、下位レベルのキャッシュはそうであると呈示することができない）。したがって、第１の問題は、上位レベルの（たとえば一次）キャッシュ内では有効であるが下位レベルのキャッシュ（たとえば二次または三次）ではまだ有効になっていないセクタを追跡することである。
【００１６】
第２の問題は、たとえばグラフィック・デバイス・ドライバ（ビデオ表示モニタなど）などによって一般的に使用されるキャッシュ可能ライトスルー操作を効率的にサポートする方法である。この場合、大量のデータが参照されることが多いが、変更される量はわずかに過ぎない。変更されたデータはプロセッサの外部にあるグラフィック装置に適時に見えるようになる必要があり、したがってキャッシュ可能ライトスルー・プロトコルが使用される。このプロトコルは、包含を維持するために、変更されたデータを含むラインをすべてのレベルのキャッシュで割り振る必要があるが、キャッシュの整合性を維持するのに部分ライン書込み機能（コストがかかる複雑な機能）を必要とすることになるライトスルー操作のため、または、ラインを次に参照するときにラインを再度フェッチする必要があるためパフォーマンスに悪影響を与えることになる書き込み時のラインのフラッシュと無効化のために、実施が複雑になる。
【００１７】
したがって、無用なバス操作を回避するために、そのレベルで未定義のまま、所与のキャッシュ・レベルの上流でキャッシュラインが割り振られて有効であることを示す方法を考案することが望ましい。さらに、そのような上流の変更済みセクタに対するスヌープ・ヒットが発生するまれな場合をこの方法によって効率的に処理することができればさらに有利であろう。
【００１８】
【発明が解決しようとする課題】
したがって、本発明の目的は、セクタ化された下位レベル・キャッシュを有するマルチプロセッサ・システムにおいてキャッシュ・コヒーレンシを維持する改良された方法を提供することである。
【００１９】
本発明の他の目的は、キャッシュ・ラインに対するゼロ割振り操作のパフォーマンスを向上させる方法を提供することである。
【００２０】
【課題を解決するための手段】
上記の目的は、マルチプロセッサ・コンピュータ・システムにおけるキャッシュ・コヒーレンシを維持する方法であって、一般に、第１の値を処理装置の第１のレベルのキャッシュ（以下「Ｌ１キャッシュ」と表記）内のキャッシュ・ライン・ブロックと、処理装置の第２のレベルのキャッシュ（以下「Ｌ２キャッシュ」と表記）内のキャッシュ・ラインのセクタとにロードするステップと、処理装置のＬ１キャッシュ内のキャッシュ・ライン・ブロック内の値を変更するステップと、Ｌ２キャッシュ内のキャッシュ・ラインが上流のＬ１キャッシュで変更されたことをＬ２キャッシュで表示するステップとを含む方法で達成される。この表示は、Ｌ２キャッシュ内のキャッシュ・ラインのセクタを変更せずに行われる。この方法は、処理装置のＬ１キャッシュのキャッシュ・ライン・ブロックをゼロ化するアロケート・アンド・ゼロ（ＤＣＢＺ）命令に応答して実行することができる。前記表示するステップは、Ｌ２キャッシュ内のキャッシュ・ライン内の複数のセクタのうちのどのセクタが、変更されたＬ１キャッシュ内のキャッシュ・ライン・ブロックに対応するかを示す表示を含む。Ｌ２キャッシュ内のキャッシュ・ラインが２つのセクタしか持たない実施例では、どのセクタが変更されたか、またはＬ１キャッシュのキャッシュ・ラインに対していずれかのキャッシュ可能ライトスルー操作が実行されたかどうかを示すために３つの新しい状態を設ける。この新しいプロトコルでは、無用なバス操作を実行せずに、より上位のレベルで有効であるセクタを正しく追跡することができ、キャッシュ可能ライトスルー操作がより効率的にサポートされる。
【００２１】
【発明の実施の形態】
本発明は、図１のシステムのようなマルチプロセッサ・システムにおいてキャッシュ・コヒーレンシを維持する方法を対象とするが、本発明は必ずしも従来のコンピュータ・システムではないコンピュータ・システムにも適用可能である。すなわち、コンピュータ・システムは図１に図示されていない新しいハードウェア構成要素を含んでいたり、既存の構成要素のための新規な相互接続アーキテクチャを有していてもよい。したがって、当業者なら、本発明は図に示す汎用システムには限定されないことがわかるであろう。
【００２２】
次に図３を参照すると、本発明のキャッシュ・コヒーレンシ・プロトコルの一実施例を示す状態図が図示されている。このプロトコルは、図２に示す従来技術のＭＥＳＩプロトコルと同じ４つの状態（変更済み、排他的、共用、及び無効）を含む点ではＭＥＳＩプロトコルと類似しているが、以下で詳述する上流の未定義セクタの３つの新しい「Ｕ」状態も含む。この新しいプロトコルを本明細書では「Ｕ−ＭＥＳＩ」プロトコルと呼ぶ。従来技術のプロトコルと同様に、この４つのＭ−Ｅ−Ｓ−Ｉ状態は、要求プロセッサが求める項目の初期状態とアクセスのタイプに基づいて変化することができる。この４つの状態が変化する方式は、従来技術のＭＥＳＩプロトコルと一般には同じであるが、以下で述べるような異なる点がある。
【００２３】
図の実施例では、Ｕ−ＭＥＳＩプロトコルは２つのセクタを備えたキャッシュ・ラインを有するキャッシュに合わせて適合化されている。この実施例では、（１）２つのセクタのうちの第１のセクタ（「奇数」セクタ）が変更される場合、（２）２つのセクタのうちの第２のセクタ（「偶数」セクタ）が変更される場合、及び（３）どちらのセクタも変更されない場合（両方ともキャッシュ可能ライトスルー読み取り操作の結果として共用される）の３つの事例が可能であるため３つの「Ｕ」状態がある。本明細書では、これらの状態のうちの第１の状態を「ＵＭＩ」と呼び、第２の状態を「ＵＩＭ」と呼び、第３の状態を「ＵＳＳ」と呼ぶ。Ｕ−ＭＥＳＩプロトコルのこの実施例では、各キャッシュ項目は項目がとることができる７つの状態（従来の４つの状態と、３つの新しい「Ｕ」状態）のうちの１つの状態を示す３ビットを有する。キャッシュ・ライン内の３つ以上のセクタがある場合は、追加の「Ｕ」状態（及びキャッシュ項目内の追加のビット）が必要になる。
【００２４】
表１に、最上位（Ｌ１）操作にかかわるキャッシュ遷移を示す。
【表１】
0003627037.tif 000002
【００２５】
表１の第１項では、Ｌ１キャッシュのキャッシュ・ライン内の偶数セクタ（第２のセクタ）に対してＤＣＢＺ操作（書込みタイプの操作）が行われると、それに対応する「Ｉ」（無効）状態のより下位レベルのキャッシュが「ＵＩＭ」に遷移する。すなわち、第２のセクタだけが変更済みとして示される。表１の第２項では、Ｌ１キャッシュのキャッシュ・ライン内の奇数セクタ（第１のセクタ）に対してＤＣＢＺ操作が行われると、それに対応する「Ｉ」（無効）状態のより下位のキャッシュが「ＵＭＩ」に遷移する。すなわち、第１のセクタだけが変更済みとして示される。
【００２６】
同じラインの奇数セクタに前にＤＣＢＺ操作が行われ、それに対応するより下位のキャッシュが「ＵＭＩ」状態であるときに偶数セクタにＤＣＢＺ操作が行われるか（表１の第３項）、または同じラインの偶数セクタに前にＤＣＢＺ操作が行われ、対応するより下位のキャッシュが「ＵＩＭ」状態のときに第２のセクタに対してＤＣＢＺ操作が行われた場合（表１の第４項）、下位レベルのキャッシュは「Ｍ」（変更済み）状態に状態遷移して、そのライン全体が変更されたことを示す。しかし、所与のラインのセクタについて前に１つのＤＣＢＺだけが行われ、下位レベルのキャッシュのそのラインが「ＵＩＭ」または「ＵＭＩ」状態であり、他方の（無効）セクタに対して「読取り」または「変更を意図した読取り」（ＲＷＩＴＭ）操作を受ける場合、下位レベルのキャッシュ・ラインは「Ｉ」（無効）になり、変更されたセクタ（Ｍセクタ）はより上位のキャッシュからフラッシュされる（表１の第５項）。
【００２７】
表１の第６項で、対象ブロックに対するＬ１「ヒット」が発生し、より下位のキャッシュが「ＵＳＳ」状態の場合、それらはその状態のままである。すなわち、無効であるかのように扱われ、キャッシュされない。ブロックに対してキャッシュ可能／ライトスルー読取り操作が行われた場合（表１の第７項）であって、より下位のキャッシュが対応する「Ｉ」（無効）状態のブロックを持っている場合、それらのキャッシュは「ＵＳＳ」状態に遷移する。最後に、表１の第８項に示すように、上記で示されていない他のすべてのＬ１操作は通常の遷移を受ける。すなわち従来技術のＭＥＳＩプロトコルに従う。
【００２８】
表２に、システム・バス・スヌープ・トランザクションが「Ｕ」状態のキャッシュにどのように影響するかを示す。
【表２】
0003627037.tif 000003
【００２９】
「Ｕ」状態では、キャッシュは処置を行わなければならないと認識しているが、スヌープを上流に転送して適切な処置を判断しなければならない。表２には、「Ｕ」状態の１つに対するスヌープ・ヒットが発生するまれな場合だけが示されている。これらの状況では、より下位のキャッシュは上流キャッシュの内容をフラッシュして「Ｉ」（無効）状態に移行し、「再試行」応答を出す。ただし、「ＵＳＳ」状態に対する読取りスヌープ・ヒットが起こった場合は、コヒーレンシ応答は「共用」になる。
【００３０】
上述のＵ−ＭＥＳＩプロトコルによって、前述の問題が両方とも解決される。すなわち、無用なバス操作を実行せずにより上位のレベルで有効なセクタが追跡され、キャッシュ可能ライトスルー操作が効率的にサポートされる。その結果、メモリ帯域幅が増大し、アドレス帯域幅が解放されると共に、バイト書込みが可能になる。
【図面の簡単な説明】
【図１】従来技術のマルチプロセッサ・コンピュータ・システムのブロック図である。
【図２】従来技術のキャッシュ・コヒーレンシ・プロトコル（ＭＥＳＩ）を示す状態図である。
【図３】本発明のキャッシュ・コヒーレンシ・プロトコルを示す状態図である。
【符号の説明】
１２  処理装置
１４  入出力装置
１６  システム・メモリ
１８  ファームウェア
２０  バス
２２  プロセッサ・コア
２４  一次キャッシュ
３０  二次キャッシュ
【図１】
0003627037.tif 000004
【図２】
0003627037.tif 000005
【図３】
0003627037.tif 000006