(57)【特許請求の範囲】
【請求項１】
複数のキャッシュドラインを格納することのできるそれぞれのキャッシュを、各々有する複数のプロセッサと、
前記複数のキャッシュドラインの状態を格納するためのディレクトリと、
前記キャッシュおよび前記ディレクトリと通信を行うメモリ制御機構と、を備えるデータ処理システムであって、
該メモリ制御機構は、新しいメモリ要求のためのディレクトリエントリを割当てる置換アルゴリズムを実行するように構成され、該置換アルゴリズムは、前記複数のキャッシュドラインの少なくとも１つの状態が「共用」状態であるならば共用ディレクトリエントリを選択し、該「共用」状態でないならばダーティディレクトリエントリを選択するアルゴリズムであって、ここに該「共用」状態とは、前記キャッシュドラインが少なくとも１つの前記キャッシュ内で有効である状態を表すことを特徴とするデータ処理システム。
【請求項２】
前記アルゴリズムは、最低使用頻度（ＬＲＵ）エントリを選択する請求項１に記載のシステム。
【請求項３】
前記アルゴリズムは、前記共用ディレクトリエントリか前記ダーティディレクトリエントリかのいずれかを選択する前に、現在使用中でないディレクトリエントリがもしあればこれを選択する請求項１に記載のシステム。
【請求項４】
前記アルゴリズムは、前記プロセッサのうちの少なくとも１つにおいて有効であるキャッシュドラインを表すディレクトリエントリを選択する請求項１に記載のシステム。
【請求項５】
前記アルゴリズムは、前記プロセッサのうちの１つにおいてダーティなキャッシュドラインを表すディレクトリエントリを選択する請求項１に記載のシステム。
【請求項６】
前記アルゴリズムがメモリラインを表す全てのディレクトリエントリが遷移状態にあることを決定した場合、次に要求を再試行する請求項１に記載のシステム。
【請求項７】
前記アルゴリズムは、前記割当てられたキャッシュディレクトリエントリにより表されたキャッシュドラインを無効にする請求項１に記載のシステム。
【請求項８】
新しいメモリ要求のためのディレクトリエントリを割当てるために、状態情報をもつ複数のディレクトリエントリの中から１つのディレクトリエントリを選択する方法において、
前記ディレクトリエントリを選択するために前記状態情報を使用して、
前記複数のディレクトリエントリの少なくとも１つの状態が「共用」状態であるならば、共用ディレクトリエントリを選択するようにする第１の段階と、
上記第１の段階に代え、もし前記複数のディレクトリエントリの少なくとも１つの状態が「ダーティ」状態であるならば、ダーティディレクトリエントリを選択する第２の段階と、
上記第２の段階に代え、もし前記複数のディレクトリエントリの全てが、遷移状態のキャッシュドラインを表す場合には、前記ディレクトリエントリの再要求を許可する段階と、を含んでなり、ここに前記「共用」状態とは、前記キャッシュドラインが少なくとも１つの前記キャッシュ内で有効である状態を表す方法。
【請求項９】
「無効」状態にあるエントリが存在する場合は、かかるエントリを選択する段階をさらに含んでなる請求項８に記載の方法。
【請求項１０】
前記共用ディレクトリエントリを選択する段階は、最低使用頻度（ＬＲＵ）アルゴリズムを使用する請求項８に記載の方法。
【請求項１１】
前記ダーティディレクトリエントリを選択する段階は、最低使用頻度（ＬＲＵ）アルゴリズムを使用する請求項８に記載の方法。
【請求項１２】
前記選択されたディレクトリエントリにより表されるキャッシュドラインを無効にする段階をさらに含んでなる請求項１１に記載の方法。
【請求項１３】
新しいメモリ要求のためのディレクトリエントリを割当てるために、状態情報をもつ複数のディレクトリエントリの中から１つのディレクトリエントリを選択する方法において、
少なくとも１つの「利用可能な」エントリが利用可能な場合、使用されていないキャッシュディレクトリエントリの中からその「利用可能な」エントリを選択する第１の段階と、
上記第１の段階に代え、少なくとも１つの「共用」エントリが利用可能な場合には、少なくとも１つのプロセッサにより共用されているキャッシュドラインを表すキャッシュディレクトリエントリの中から１つの「共用」エントリを選択する第２の段階と、
上記第２の段階に代え、少なくとも１つの「ダーティ」エントリが利用可能な場合には、少なくとも１つのプロセッサのうちの１つにおいて、ダーティなキャッシュドラインを表す前記キャッシュディレクトリエントリの中からその「ダーティ」エントリを選択する第３の段階、
を含んでなり、ここに前記の「共用」とは、前記キャッシュドラインが少なくとも１つの前記キャッシュ内で有効であることを表すことを特徴とする方法。
【請求項１４】
前記の１つの「共用」エントリを選択する第２の段階は、最低使用頻度（ＬＲＵ）アルゴリズムを使用する請求項１３に記載の方法。
【請求項１５】
前記の１つの「ダーティ」エントリを選択する第３の段階は、最低使用頻度（ＬＲＵ）アルゴリズムを使用する請求項１３に記載の方法。
【請求項１６】
付随するキャッシュを伴う少なくとも１つのプロセッサを各々有する多数のプロセッサノードを含むデータ処理システム内で使用するためのキャッシュコヒーレンスユニットであって、
前記キャッシュとメモリとの間でデータを転送するためのバスインタフェースと、
前記キャッシュ内に格納された複数のキャッシュドラインについての状態情報を格納するためのディレクトリと、
新しいメモリ要求のためのディレクトリエントリを割当てる置換アルゴリズムであって、前記複数のキャッシュドラインの少なくとも１つの状態が「共用」状態であるならば共用ディレクトリエントリを選択し、該「共用」状態でないならばダーティディレクトリエントリを選択するような置換アルゴリズムを用いることによってキャッシュコヒーレンスを維持すると共に前記バスインタフェースに結合されるメモリ制御機構と、
を備え、ここに前記の「共用」状態とは、前記キャッシュドラインが少なくとも１つの前記キャッシュ内で有効である状態を表すことを特徴とするキャッシュコヒーレンスユニット。
【請求項１７】
前記メモリ制御機構が、
前記ディレクトリから状態情報を読取るための手段および
前記ディレクトリ内で前記状態情報を更新するための手段
を備える請求項１６に記載のキャッシュコヒーレンスユニット。
【請求項１８】
前記置換アルゴリズムは、前記状態情報を使用するための手段が、最低使用頻度の「共用」エントリまたは「ダーティ」エントリを使用する請求項１６に記載のキャッシュコヒーレンスユニット。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般に、マルチプロセッサデータ処理システムにおけるキャッシュコヒーレンス（ｃｏｈｅｒｅｎｃｅ）、特に、キャッシュディレクトリエントリを選択するためのアルゴリズムでキャッシュの動作を増強することに関する。
なお本願は、１９９８年５月８日付けの米国仮出願による利益を請求するものである。
【０００２】
また本願は、次の同時係属出願と関連している。同時係属米国特許出願番号０９／００３，７２１、「分散共有メモリマルチプロセッサシステムのための統合されたメッセージパッシングおよびメモリ保護を備えるキャッシュコヒーレンスユニット」の名称で、１９９８年１月７日に出願、同時係属米国特許出願番号０９／００３，７７１、「統合されたメッセージパッシングサポートを備える分散共有メモリマルチプロセッサのためのメモリ保護メカニズム」の名称で、１９９８年１月７日に出願、同時係属米国特許出願番号０９／０４１，５６８、「パイプライン化されたスヌーピープロトコルを有する相互接続用マルチプロセッサノードのためのキャッシュコヒーレンスユニット」の名称で、１９９８年３月１２日に出願、同時係属米国特許出願番号０９／２８１，７１４、「分散共有メモリマルチプロセッサのための分割疎ディレクトリ」の名称で、１９９８年３月３０日に出願、同時係属米国特許出願番号０９／２８５，３１６、「ネットワーク通信におけるデッドロックを回避するためのコンピュータアーキテクチャ」の名称で、１９９９年４月２日に出願、同時係属米国特許出願番号０９／２８７，６５０、「マルチプロセッサコンピュータシステムにおけるオーバラン保護用クレジットベースドメッセージプロトコル」の名称で、１９９９年４月７日に出願。参考として、上記の米国特許出願番号の０９／００３，７２１は米国特許６，２０９，０６４に対応し、０９／００３，７７１は米国特許６，２１２，６１０に対応し、０９／０４１，５６８はＷＯ９９／４６６８１（特表２００１−５２５０９５および米国特許６，６３１，４４８）に対応し、０９／２８１，７１４は特表２００１−５２５０９５および米国特許６，５６０，６８１に対応し、０９／２８５，３１６は特表２０００−６７０２３および米国特許６，４９０，６３０に対応し、０９／２８７，６５０は特表２０００−９００６０および米国特許６，７１５，００８に対応する。
【０００３】
【従来の技術】
コンピュータシステムノードは、メモリサブシステムとプロセッササブシステムに分割することができる。メモリサブシステムは、メインダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含み、任意の数の接続されたプロセッサからの要求に応えてメモリからのデータを提供する。通常、メモリサブシステム内のデータにアクセスするのに費す時間はプロセッサの速度に比べてかなり長いものであり、従って、プロセッサは往々にして自らの性能を改善するべくキャッシュを備えて構築されている。プロセッササブシステムは、プロセッサと単数または複数のキャッシュを含んでいる。キャッシュというのは、プロセッサとメインメモリの間に接続され、メインメモリから最近使用されたデータを格納する小形メモリである。キャッシュは、メインメモリサブシステムに比べてはるかにアクセス速度が速く、通常ははるかに小形である。キャッシュ内へおよびキャッシュから外へ転送され得る最小のデータ単位は、キャッシュド「ライン」（ｃａｃｈｅｄ“ｌｉｎｅ”）と呼ばれる。１キャッシュドラインに対応するメモリ内のデータは、メモリラインと呼ばれる。１データラインというのは、１キャッシュドラインまたは１メモリラインのいずれかを指す。
【０００４】
全てのキャッシュアーキテクチャは、その多くが複数のキャッシュドラインに対応する１又は一連のメモリラインを含む物理的に連続したセグメントへと、メインメモリを分割する。キャッシュドラインにアクセスするには、そのラインに対応するセグメントを識別するためのセグメントタグおよびセグメント内のラインを識別するためのラインインデックスが必要である。当業者であれば、１セグメントが１つのラインしかもたない場合、ラインインデックスが不要であることがわかるだろう。プロセッサが、ローカルキャッシュ内にすでに含まれているデータラインを要求する場合、そのデータラインはプロセッサに受渡し（ｄｅｌｉｖｅｒ）される。そうでない場合、プロセッサはメインメモリからデータラインを獲得する。
【０００５】
セットアソシエティブおよびフルアソシエティブキャッシュは「多」ウェイ（“ｍｕｌｔｉｐｌｅ”ｗａｙｓ）であり、これはすなわちディレクトリエントリが、同じメモリセグメントインデックスを有するが異なるセグメントに帰属する多数のキャッシュドラインを参照することを意味する。これは、直接マッピングされたキャッシュと比較して、多方向ディレクトリが同じ方向にマッピングするアクティブキャッシュライン間のコンテンションを低減させることから、キャッシュヒット率を改善することができる。キャッシュラインの直接マッピングでは、新たに要求されたキャッシュドラインを参照するのにディレクトリが必要とされるとき、置換（ｒｅｐｌａｃｅ）すべきディレクトリを選択するという問題が回避されるが、フルアソシエイティブおよびセットアソシエティブキャッシュマッピングスキームは、置換すべき特定のキャッシュドラインを参照するディレクトリを選択するのに、置換プロトコルを必要とする。最も一般的なプロトコルは、未使用時間が最も長いキャッシュラインを置換する最低使用頻度（ＬＲＵ）プロトコルである。
【０００６】
標準的には、セットアソシエティブキャッシュは、４〜８ウェイであり、一方フルアソシエティブキャッシュは３２〜６４ウェイである。
共用メモリマルチプロセッサシステムにおいては、各プロセッサは通常、それ自身のキャッシュを有し、従ってシステムは多数のキャッシュをもつ。各キャッシュは、与えられたデータラインのコピーを保持できることから、全ての異なるキャッシュドラインの状態を一貫性ある状態に保ち、いずれか１つのプロセッサにより書込まれた最新バージョンで更新することが重要である。通常、キャッシュ動作を支配するべく１組の規則をもつキャッシュのコヒーレンスプロトコルを含むプロセッサのメモリモデルによって規定される通りの正しい値を、キャッシュまたはメインメモリから戻すことを担当するのは、メモリサブシステムである。
【０００７】
システム中でキャッシュコヒーレンスを維持するために、キャッシュコヒーレンスプロトコルは、キャッシュコヒーレンス制御情報を収納するディレクトリを使用する。通常メモリサブシステムの一部である、このディレクトリは、メモリデータがシステム内のどこかのキャッシュ内に存在しうるか否かを示す状態情報を伴う各メインメモリロケーションのためのエントリを有する。コヒーレンスプロトコルは、メモリ要求に応えてとるべき全ての遷移およびトランザクションを特定する。キャッシュライン上でとられるいかなる動作も、ディレクトリ内に格納された状態の中に反映される。共通のキャッシュコヒーレンススキームはこれを達成するために次の３つの常駐（ｐｅｒｍａｎｅｎｔ）状態を使用する。すなわち、
無効（ｉｎｖａｌｉｄ）：ラインはキャッシュ内のどこにも入れられていない。メインメモリは、コピーしか持っていない。
【０００８】
共用（ｓｈａｒｅｄ）：ラインは、遠隔ノードにおいて少なくとも１つのキャッシュ内で有効である。
ダーティ（ｄｉｒｔｙ）：ラインは、遠隔ノードにおいて１つのキャッシュ内で有効である。その遠隔ノード内でプロセッサによりそのコピーを修正することが可能である。メインメモリには古いデータが含まれている可能性がある。
【０００９】
コヒーレンスプロトコルは、ラインが遷移中であることを示すため、他の非常駐（ｔｒａｎｓｉｅｎｔ）状態を使用することができる。充分な時間があれば、これらの非常駐状態は、上述の常駐状態の１つへと戻る。
プロセッサからのメモリ要求毎に、メモリサブシステムは、キャッシュドラインに対応するメモリラインを格納するセグメントを識別するために全てのキャッシュタグ（ｃａｃｈｅ  ｔａｇ）を見なくてはならない。「スヌーピープロトコル」（ｓｎｏｏｐｙ  ｐｒｏｔｏｃｏｌ）内の各キャッシュは、全ての要求を「のぞき回り」（ｓｎｏｏｐ）し、次にメモリサブシステムに対し、それがキャッシュドラインの最新バージョンを有するか否かの信号を送る。あるいは、メモリ−サブシステムは、キャッシュドラインの最新バージョンのロケーションを見い出すため各キャッシュのタグの複製を保持することができる。複製タグベースの方法は、時として「ディレクトリベースのキャッシュコヒーレンスプロトコル」と呼ばれる。
【００１０】
【発明が解決しようとする課題】
図１は、メインＤＲＡＭメモリ１２２のためのメモリ制御機構（ＭＣ）１２０に対しバス１１８により接続されたそれぞれのローカルキャッシュ１１０Ａ，１１０Ｂ，１１０Ｃおよび１１０Ｄを有する多数のＣＰＵ１０２Ａ，１０２Ｂ，１０２Ｃおよび１０２Ｄを含む従来のシステム１００を示す。この例においては、メインメモリ１２２は各々のメモリラインについて、ディレクトリ１２４エントリ専用の空間を持ち、従って、ディレクトリ１２４内のエントリ数を決定するキャッシュドラインの合計数が通常メモリ１２２内のメモリラインの合計数よりもはるかに少ないことから、メモリ空間が浪費される。さらに、従来のシステム１００用のキャッシュコヒーレンスプロトコルは、キャッシュ１１０の数およびメモリ１２２のサイズが増大するにつれて、ディレクトリ１２４のサイズは異常に大きくなるという点で不完全である。
【００１１】
システム１００は、ディレクトリエントリのキャッシュである疎な（ｓｐａｒｓｅ）ディレクトリを用いることによって改善することができる。しかしながら、既存のキャッシュドラインの状態の如何に関わらず、新しいキャッシュドラインを参照するためのディレクトリエントリを見つけ出すための置換アルゴリズムが、メモリ１２２とキャッシュ１１０との間の大量のデータ通信量をひき起こし、かくしてシステムの性能を劣化させる可能性がある。
【００１２】
従って、必要とされているのは、上述の欠点を解決できる疎なディレクトリにおいて使用するための置換アルゴリズムである。
【００１３】
【課題を解決するための手段】
本発明は、プロセッサからのメモリ要求に応えて、キャッシュドラインの状態を格納するべくディレクトリエントリを割当てるアルゴリズムを提供する。かくして該アルゴリズムは、エントリのためのディレクトリをサーチする。少なくとも１つのフリーエントリが利用可能である場合、アルゴリズムは利用可能なエントリのうちの１つを使用する。そうでなければ、アルゴリズムは「共用」（ｓｈａｒｅｄ）エントリをサーチし、少なくとも１つの共用エントリが発見された場合、アルゴリズムは、好ましくは利用可能な共用エントリの間でサーチするために「最低使用頻度」（ＬＲＵ）基準を使用する。そうでなければ、アルゴリズムは「ダーティ」エントリをサーチする。少なくとも１つのダーティエントリが発見された場合には、アルゴリズムは好ましくは、利用可能なダーティエントリの中からサーチするためにＬＲＵ基準を使用する。アルゴリズムは、かなり以前に割当てられ最近使用されていないエントリが失効する確率が比較的高いという理由から、ＬＲＵ基準を使用する。システムの性能を増大させるためには、アルゴリズムは好ましくは、ダーティエントリをサーチする前に、共用エントリをサーチする。
【００１４】
かくして、本発明は、セットアソシエティブおよびフルアソシエティブ式のディレクトリベースのキャッシュコヒーレンスプロトコルの性能を高め、それぞれのキャッシュを備える少なくとも１つのプロセッサを、各々が含む、複数のプロセッサノードを有するデータ処理システムにおいて、有用である。
本発明のこれらのおよびその他の利点は、以下の詳細な説明および添付図面から、当業者にとって明らかなものとなるであろう。
【００１５】
【発明の実施の形態】
図２は、本発明を利用するシステム２００を示すブロック図である。システム２００は、メモリ１２２の一部となる代りにＭＣ１２０に接続されているディレクトリ２２４を含んでいるという点を除いて、システム１００と同様のものである。通常「疎」（ｓｐａｒｓｅ）ディレクトリと呼ばれるディレクトリ２２４は、メモリ１２２内のメモリライン数より少ない数のディレクトリエントリを収納し、ディレクトリ１２４よりも小さくかつ高速であり、標準的に、より高い速度のためのスタティックランダムアクセスメモリ（ＳＲＡＭ）の中にある。
【００１６】
ディレクトリ２２４は、複数のエントリＤＩＲ１〜ＤＩＲＮを含んでいる。セットアソシエティブキャッシュにおいては、１つのＤＩＲエントリは、メモリ１２２のセグメント（ＳＥＧ０〜ＳＥＧＭ）の各々の中の１つのデータラインに対応する。従って、ＳＥＧがＫ本のデータラインを有する場合、ディレクトリ２２４はＫ個のエントリを有する。１つのＳＥＧ内でメモリラインはＳＥＧベースからのオフセットによって識別され、かくして「セット」（ｓｅｔ）というのは、同じオフセットを有するものの異なるＳＥＧの中に格納される全てのデータラインを指す。その結果、例えばＤＩＲ１は、全てのＳＥＧ０〜ＳＥＧＭ内でオフセット１を持つ全てのデータラインを指すセット１に対応する。同様にして、ＤＩＲ２は、全てのＳＥＧ０〜ＳＥＧＭ内でオフセット２を持つ全てのデータラインを指すセット２に対応する。図２の例において、ＤＩＲ３は、ＳＥＧ５のライン３（またはオフセット３またはセット３）（および図示していないその他のＳＥＧのライン３）に対応する。各ＤＩＲエントリは、「状態情報」（ｓｔａｔｅ  ｉｎｆｏｒｍａｔｉｏｎ）フィールド３２６，ビット−ベクトル（ＢＶ）フィールド３２８，「タグ」フィールド３３０および、該当する場合には、ＬＲＵフィールド３３６を含む。矢印３０１０は、ＤＩＲ３とそのフィールド３２６，３２８，３３０および３３６を示す。
【００１７】
状態情報フィールド３２６は、好ましくは「無効」、「共用」、「ダーティ」および「非常駐」を含むキャッシュドラインの状態を示している。「無効」状態は、ＤＩＲが利用可能であり、かくして使用できることを表わす。「共用」状態は、キャッシュドラインが少なくとも１つのキャッシュ１１０内で有効であることを表す。「ダーティ」状態は、メモリ１２２内のデータラインがキャッシュ１１０の１つにおいて修正されたことを表し、「非常駐」状態は、ラインがメモリ１２２とキャッシュ１１０との間で遷移中であることを表す。
【００１８】
ＢＶフィールド３２８は、どのキャッシュ１１０がメモリ１２２からのラインのコピーを有するかを識別するため、キャッシュ１１０Ａ，１１０Ｂ，１１０Ｃおよび１１０Ｄにそれぞれ対応する複数のサブフィールド３２８Ａ，３２８Ｂ，３２８Ｃおよび３２８Ｄを含む。例えば、フィールド３２８Ａ内のＢＶビットが「１」（論理ｈｉｇｈ）である場合、キャッシュ１１０Ａは、メモリ１２２のデータラインのコピーを有する。換言すると、フィールド３２８Ａ内の同じＢＶビットが「０」（論理ｌｏｗ）である場合、キャッシュ１１０Ａはメモリ１２２のデータラインのコピーを持たない。
【００１９】
タグフィールド３３０は、ＤＩＲエントリが結びつけられるキャッシュドラインに対応するメモリセグメントを識別する。例えば、タグフィールド３３０が値「５」を示す場合、そのＤＩＲエントリは、矢印３００８により表示されるメモリ１２２のセグメント５内のメモリラインに対応するキャッシュドラインに対応する。
【００２０】
セットアソシエティブキャッシュまたはフルアソシエティブキャッシュにおいては、ディレクトリ２２４は、「多」ウェイであってよい。すなわち、１つのＤＩＲエントリは多数のキャッシュドラインを参照することができる。そうである場合、ＤＩＲエントリは、「最低使用頻度」（ＬＲＵ）基準に基づいて、どのキャッシュドラインが、プロセッサによる使用頻度が最低であるかを識別するＬＲＵフィールド３３６を含んでいる。ＬＲＵフィールド３３６内の値は通常符号化され、システム設計中に割り当てられた予め定められた値と結びつけて、このＬＲＵフィールド３３６を評価することにより、メモリ１２２のデータラインを参照するためのＤＩＲエントリをアクセスする、正確な順序が明らかになる。
【００２１】
ＤＩＲエントリが、例えば２本のキャッシュドラインにマッピングできる場合、ディレクトリ２２４は、２ウェイ（２−ｗａｙ）アソシエティブダイレクトリと呼ばれる。同様にして、ＤＩＲエントリが、ｎ本のキャッシュドラインにマッピングできる場合、ディレクトリ２２４は、ｎウェイアソシエティブディレクトリと呼ばれる。本発明に関係する一実施形態においては、アソシエティブディレクトリは、通常４〜８ウェイである。
【００２２】
メモリ１２２は、多数の、つまり通常は数百万個にも至るセグメントを含み、これらはＳＥＧ０，ＳＥＧ１，…ＳＥＧＭと呼ばれる。セットアソシエティブキャッシュ内の各ＳＥＧは、一連のメモリラインを含む一方、フルアソシエティブキャッシュ内の各ＳＥＧはわずか１本のメモリラインしか含んでいない。セットアソシエティブキャッシュの各ＳＥＧ内では、メモリラインはロケーションオフセットにより識別されている。上述のとおり、１つのＳＥＧ内で同じロケーションオフセットを持つ全てのラインが、１つの「セット」を構成する。かくして、メモリアドレス３０２は、メモリ１２２のどのセグメント（ＳＥＧ０，ＳＥＧ１，ＳＥＧ２等）をメモリアドレス３０２がポイントしているかを識別するためのタグ部分３０６およびアドレス３０２がポイントしているＳＥＧ内の１本のラインのロケーションオフセットを決定するためのセット番号部分３０８を含んでいる。従って、例えば図２において、アドレス３０２−１は３というオフセット（またはセット）を持つＳＥＧ５内のメモリラインをポイントする。同様に、アドレス３０２−２は、８というオフセットをもつＳＥＧＭ内のメモリラインをポイントする。
【００２３】
図３は、ＤＩＲ１により表されたキャッシュドラインＬ１が、例えば、２つのキャッシュ１１０Ａおよび１１０Ｄにより共用されているシステム例２００を示す。その結果、ラインＬ１についての状態フィールド３２６は「共用」（ｓｈａｒｅｄ）とマーキングされ、キャッシュ１１０Ａおよび１１０Ｄに対応するＢＶフィールド３２８内の２つのビット３２８Ａおよび３２８Ｄは、「１」という値をもつ。
【００２４】
図４は、ＤＩＲ２により表されているキャッシュドラインＬ２がキャッシュ１１０Ｃ内で修正された、同じシステム２００を示している。従ってラインＬ２のための状態情報フィールド３２６は「ダーティ」（ｄｉｒｔｙ）とマーキングされ、キャッシュ１１０Ｃに対応するフィールド３２８Ｃ内のＢＶビットは「１」という値を有する。
【００２５】
好ましいシステム２００においては、キャッシュ１１０内の有効なキャッシュドラインは、ディレクトリ２２４内に対応する有効エントリを有するはずである。しかしながら、さまざまな理由から、キャッシュ１１０は、対応するディレクトリ２２４のエントリを更新せずにそのキャッシュドラインを置換することができ、その結果、対応する有効キャッシュドライン無しの「有効な」（ｖａｌｉｄ）ディレクトリエントリ、または換言すると「失効」ディレクトリエントリとなる。
【００２６】
図５は、「失効」ディレクトリエントリを有するシステム２００を示す。ＤＩＲ５により表わされるキャッシュドラインＬ５は、当初２つのキャッシュ１１０Ａおよび１１０Ｃにより共用されている。従って、状態フィールド３２６は「共用」（ｓｈａｒｅｄ）を示し、２つのビット３２８Ａおよび３２８Ｃは「１」を示す。ただし、キャッシュ１１０Ｃは後にそのラインＬ５をＤＩＲ５を更新せずに置換することから、キャッシュ１１０ＣのラインＬ５は「無効」（ｉｎｖａｌｉｄ）と示され、ＤＩＲ５は「失効」（ｓｔａｌe ）している。
【００２７】
図６は、２ウェイセットアソシエティブディレクトリ２２４をもつシステム２００を示す。かくして、ディレクトリＤＩＲ６は、「ウェイ１」および「ウェイ２」と呼ばれる２つのキャッシュドラインのための情報を含んでいる。ウェイ１では、メモリＳＥＧ２内のキャッシュドラインＬ６は４つのキャッシュ１１０Ａ，１１０Ｂ，１１０Ｃおよび１１０Ｄによって共用され、従ってラインＬ６のための状態情報フィールド３２６−１は「共用」とマーキングされる。キャッシュ１１０Ａ，１１０Ｂ，１１０Ｃ，および１１０Ｄに対応するＢＶビット３２８Ａ，３２８Ｂ，３２８Ｃおよび３２８Ｄは、「１」という値を含み、タグフィールド３３０−１は「２」という値を示す。ウェイ２においては、ＳＥＧ０内のメモリラインＬ７がキャッシュ１１０Ｂにより修正されている。かくしてラインＬ７の状態フィールド３２６−２は「ダーティ」（ｄｉｒｔｙ）とマークされ、キャッシュ１１０Ｂに対応するＢＶフィールド３２８Ｂ内のビットは、「１」という値を有し、タグフィールド３３０−２はＳＥＧ「０」を示す。
【００２８】
プロセッサ１０２がメモリ１２２からのデータラインを要求したときに、ＭＣ１２０はディレクトリ２２４内のエントリを割当てる。ディレクトリ２２４が満杯である場合には、古いエントリを「追い出さ」なくてはならない。すなわち、新たに要求されたキャッシュドラインについてのディレクトリ情報を保持するため、そのディレクトリが選択されることになる。
【００２９】
図７のフローチャートは、新しいメモリ要求のためのＤＩＲエントリを割当てるために本発明が使用する置換アルゴリズムを例示している。ステップ１００２では、プロセッサ１０２は、ＤＩＲエントリにより表されたメモリラインＬを戻すためメモリ１２２を要求する。ステップ１００３でＭＣ１２０は、利用可能なエントリ、すなわち「無効」とマーキングされた状態フィールド３２６を含むＤＩＲエントリのためのディレクトリ２２４をサーチする。ステップ１００４でＭＣ１２０が、ＤＩＲエントリが利用可能であると判断した場合、ステップ１００６で、ＭＣ１２０は、新たに要求されたラインＬについていずれか１つの利用可能なＤＩＲエントリを割当てる。ステップ１００７で、ＭＣ１２０は、新しいラインＬを参照するため、利用可能なＤＩＲエントリを用いる。しかしながらステップ１００４で、ＭＣ１２０が利用可能なＤＩＲエントリを見い出すことができない場合、そのときはステップ１００８でＭＣ１２０は、少なくとも１つの「共用」ＤＩＲエントリ（すなわち「共用」とマーキングされた状態フィールド３２６をもつエントリ）が存在するか否かを判断する。その場合、ステップ１０１２でＭＣ１２０は、ＬＲＵ基準を用いて最低使用頻度（ＬＲＵ）共用ＤＩＲエントリを発見し、ステップ１０１４で、発見されたＬＲＵ共用ＤＩＲエントリを無効化し、ステップ１０１５で、無効化されたＤＩＲエントリを用いて新しいラインＬを参照する。
【００３０】
ステップ１００８でＭＣ１２０が共用エントリを発見できない場合、ステップ１０１０でＭＣ１２０は、「ダーティ」とマーキングされた状態フィールド３２６をもつ少なくとも１つのＤＩＲエントリが存在するか否かをテストする。存在する場合、ＭＣ１２０は、ステップ１０１８でＬＲＵ基準を用いてＬＲＵダーティＤＩＲエントリを発見する。次にＭＣ１２０は、ステップ１０２０で、発見されたＬＲＵダーティエントリをフラッシュ（ｆｌｕｓｈ）する。すなわち、ＭＣ１２０は、発見されたエントリを無効化し、データをメモリ１２２内の対応するキャッシュドライン内に戻す。ステップ１０２２において、ＭＣ１２０は、新しいラインＬを参照するために、この発見されたエントリを用いる。
【００３１】
ステップ１０１０でＭＣ１２０がダーティＤＩＲエントリを発見できない場合、ＭＣ１２０はステップ１０２４で、メモリラインＬの要求を後で再試行するようプロセッサ１０２に依頼する。ステップ１０１０でダーティＤＩＲエントリが発見されないということは、ディレクトリ２２４内の全てのＤＩＲエントリにより表されたキャッシュドラインが現在メモリ１２２およびキャッシュ１１０間の遷移中にあることを表している。遷移ラインを表すＤＩＲエントリは置換から除外される。ステップ１０２６で、アルゴリズムは終了する。
【００３２】
上述のアルゴリズムでは、メモリ１２２とキャッシュ１１０の間のデータ通信量を低減させるため、ＭＣ１２０は、新しいメモリラインを参照するためダーティＤＩＲエントリをサーチする前に、共用ＤＩＲエントリをサーチする。共用ＤＩＲエントリを使用するためには、対応するメモリラインの無効化が必要とされるだけであるのに対し、ダーティＤＩＲエントリの使用には、メモリ１２２へのキャッシュドラインの戻し（または書込み）が必要である。さらに、共用ＤＩＲエントリは、より「失効する」確率が高い。かくして、本発明は、このアルゴリズムを使用して、付加的なコストを負うことなく、システム性能を増強させる。本発明は同様に、ディレクトリ２２４により表される全てのデータラインがメモリ１２２とキャッシュ１１０間で遷移状態にあるとき、新しいデータラインに対する要求を再試行できるようにするため、コヒーレンスプロトコルをも単純化している。
【００３３】
従って、本発明は、キャッシュドラインの状態の如何に関わらず、新しいメモリラインＬのために使用済みＤＩＲエントリを選択するのにＬＲＵアルゴリズムのみを使用する従来技術の解決法に比べ有利である。本発明は、最近使用されていない（つまり最低使用頻度の）ＤＩＲエントリが最近使用されたエントリに比べ失効する確率が高いことから、共用（ステップ１０１２）またはダーティ（ステップ１０１８）ＤＩＲエントリを選択するのにＬＲＵ基準を使用する。ステップ１０１４または１０２０で発見されたエントリを無効化すると、無効化メッセージが、その無効化されたキャッシュドラインと結びつけられた全てのキャッシュ１１０に送られる。本発明は同様に、その他のキャッシュ全体にわたる包含（ｉｎｃｌｕｓｉｏｎ）を維持しようと試みる全てのキャッシュ構造（Ｌ３，スヌープフィルタタグ等）においても有用である。キャッシュ包含は、１本のデータラインが多重レベルのキャッシュシステムの１つのキャッシュレベル内に存在する場合、そのラインがより高いキャッシュレベルでも存在するということを意味している。
【００３４】
本発明について、好ましい一実施形態を参考にして記述してきた。本開示に照らし合わせて、当業者にはその他の実施形態も明らかになることだろう。例えば、本発明は、ここで記述されたもの以外の構成を利用しても容易に実現可能である。さらに、本発明は記述されたもの以外のシステムと組合わせて有効に使用することができる。従って、好ましい実施形態に対するこれらのおよびその他の変形形態は、添付の請求項によってのみ制限される本発明の特許請求の範囲内のものである。
【図面の簡単な説明】
【図１】バスを介してメインメモリに接続されたローカルキャッシュを各々有する多重ＣＰＵを含む先行技術システムを示す図である。
【図２】本発明を利用するより小形でより高速のキャッシュディレクトリを示す図である。
【図３】２つのキャッシュにより共用されるメモリラインの例を示す図である。
【図４】「ダーティ」状態情報フィールドを含む修正されたキャッシュの一例を示す図である。
【図５】２つのプロセッサが共用する１つのメモリラインとそのそれぞれのキャッシュとを示し、両方のキャッシュは後に共に、ディレクトリ情報を更新することなくその内容を無効化していることを示す図である。
【図６】２ウェイセットアソシエティブディレクトリエントリを示す図である。
【図７】本発明による置換アルゴリズムのフローチャートである。
【符号の説明】
１０２…ＣＰＵ
１１０…キャッシュ
１２０…メモリ制御機構
１２２…メモリ
１２４…ディレクトリ
【図１】
0003866447.tif 000002
【図２】
0003866447.tif 000003
【図３】
0003866447.tif 000004
【図４】
0003866447.tif 000005
【図５】
0003866447.tif 000006
【図６】
0003866447.tif 000007
【図７】
0003866447.tif 000008