(57)【特許請求の範囲】
【請求項１】
共有されるシステム・メモリ（１０５Ａ、１０５Ｂ）と、当該システム・メモリとバスシステム（１０３Ａ、１０３Ｂ）を介して相互接続された複数のデータ・キャッシュ・メモリ（１２１Ａ、１２１Ｂ）と、状態キャッシュ・メモリ（２０３Ａ、２０３Ｂ）と、を有し、キャッシュ整合スキームを備えたディレクトリベースのマルチプロセッサ・コンピュータ・システムにおいて、前記システム・メモリと前記複数のデータ・キャッシュ・メモリの各ライン間におけるデータの一貫性を維持するためのデータ整合方法であって、前記状態キャッシュ・メモリは、前記システム・メモリにセーブされているメモリの予め設定されたライン数に対するシステム・メモリ・ライン状態を含み、
前記システム・メモリのあるラインに関する情報が、前記状態キャッシュ・メモリのいずれのエントリにも登録されていない場合には、当該あるラインの前記システム・メモリ・ライン状態を、当該あるラインが複数のデータ・キャッシュ・メモリ間において「共有」されている状態であるとして取り扱うようにし、
前記状態キャッシュ・メモリのあるエントリにおいて置き換えを行う前に、当該置き換えを行うエントリから前記システム・メモリ・ライン状態を読み取り、この読み取った前記システム・メモリ・ライン状態が「占有」を示す場合には、この「占有」に係るラインを該当するデータ・キャッシュ・メモリから前記システム・メモリに書き戻すことにより、この「占有」に係るラインの前記システム・メモリ・ライン状態を前記「共有」として扱えるようにする、ことを特徴とするデータ整合方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のデータ・キャッシュ・メモリおよび共有メモリを含むマルチプロセッサ・コンピュータ・システム、特にキャッシュとの整合を維持するために、ディレクトリをベースとするプロトコルを使用するマルチプロセッサ・コンピュータ・システムに関する。
【０００２】
【従来の技術、及び、発明が解決しようとする課題】
ここ数年間の間に、コンピュータ・システムの性能、速度、集積度および容量はほぼ指数的に進歩している。このような進歩は、コンピュータ・システムのコストの低下とあいまって、コンピュータ・システムの利用のさらなる拡大をもたらし、より進歩したリソースが豊富なコンピュータのアプリケーションが開発された。最近の歴史的傾向により、アプリケーションのメモリに対する要件は、毎年二倍に増大している。コンピュータ・システムおよび部材のコストは、ここ数年確実に下がってきているが、システムの主メモリで使用される高速ＲＡＭメモリおよびキャッシュ・メモリのコストは、ほとんどのコンピュータ・システムにおいて最も高い状態のまま安くならない。
【０００３】
主に、データ、アプリケーション・ソフトウェアおよびオペレーティング・システム・ソフトウェアの一時的な記憶装置として使用されるシステム・メモリおよびキャッシュ・メモリは、またパリテイ・ビット、キャッシュ整合状態情報およびエラー検出および／または修正シンドローム・ビットを記憶するために、より進歩したマルチプロセッサ・システムでも使用されている。マルチプロセッサ・システムの追加メモリ要件、および高度のオペレーティング・システムおよびアプリケーションに対するより高度のメモリ要求により、高速ＲＡＭに対する要求およびコストが増大している。
【０００４】
高速システムおよびキャッシュ・メモリを使用し、システムおよびキャッシュ・メモリ要件を低減するための、もっと効率的な方法が待望されている。
【０００５】
それ故、本発明の一つの目的は、ディレクトリをベースとするキャッシュ整合を使用する、コンピュータ・システムでのメモリの使用を改善する新しく、有益な方法を提供することである。
【０００６】
【課題を解決するための手段】
このため、本発明は、その一態様として、共有されるシステム・メモリ（１０５Ａ、１０５Ｂ）と、当該システム・メモリとバスシステム（１０３Ａ、１０３Ｂ）を介して相互接続された複数のデータ・キャッシュ・メモリ（１２１Ａ、１２１Ｂ）と、状態キャッシュ・メモリ（２０３Ａ、２０３Ｂ）と、を有し、キャッシュ整合スキームを備えたディレクトリベースのマルチプロセッサ・コンピュータ・システムにおいて、前記システム・メモリと前記複数のデータ・キャッシュ・メモリの各ライン間におけるデータの一貫性を維持するためのデータ整合方法であって、前記状態キャッシュ・メモリは、前記システム・メモリにセーブされているメモリの予め設定されたライン数に対するシステム・メモリ・ライン状態を含み、前記システム・メモリのあるラインに関する情報が、前記状態キャッシュ・メモリのいずれのエントリにも登録されていない場合には、当該あるラインの前記システム・メモリ・ライン状態を、当該あるラインが複数のデータ・キャッシュ・メモリ間において「共有」されている状態であるとして取り扱うようにし、前記状態キャッシュ・メモリのあるエントリにおいて置き換えを行う前に、当該置き換えを行うエントリから前記システム・メモリ・ライン状態を読み取り、この読み取った前記システム・メモリ・ライン状態が「占有」を示す場合には、この「占有」に係るラインを該当するデータ・キャッシュ・メモリから前記システム・メモリに書き戻すことにより、この「占有」に係るラインの前記システム・メモリ・ライン状態を前記「共有」として扱えるようにする、ことを特徴とするデータ整合方法を提供するものである。
【０００７】
メモリのラインの状態に関する情報は、状態キャッシュ・メモリおよびデータ・キャッシュ・メモリに維持される。各データ・キャッシュ・メモリは、データ・キャッシュ・メモリにセーブされたメモリの各ラインと共に、データ・キャッシュ・メモリ・ライン状態を含み、データ・キャッシュ・メモリ・ライン状態は、ＭＥＳＩ（修正−排他−共有−無効）状態、すなわち、修正、排他、共有または無効の中の任意の一つである。状態キャッシュ・メモリは、システム・メモリにセーブされているメモリの、予め定めた数のラインに対する、システム・メモリ・ライン状態を含む。システム・メモリ・ライン状態は、下記の状態、すなわち、共有バスＡ、共有バスＢ、両者共有、占有バスＡおよび占有バスＢの中の任意の一つである。
【０００８】
状態キャッシュ・ライン置換動作を行う方法は、下記のステップを含む。すなわち、上記状態キャッシュ・メモリに表示されるメモリのラインに対して、デフォールト・システム・メモリ状態を「共有」状態にするステップと；上記共有メモリ、および少なくとも一つのデータ・キャッシュ・メモリに記憶されているメモリのラインに関連する、予め記憶した状態キャッシュ入力の置き換えを行う前に、予め記憶した状態キャッシュ入力に対するシステム・メモリ・ライン状態を読み取るステップと；上記共有メモリのメモリのラインを更新するために放出動作を行い、上記予め記憶した状態キャッシュ入力に対する上記システム・メモリ・ライン状態が、「占有」（占有バスＡまたは占有バスＢ）である場合には、「共有」のデータ・キャッシュ・メモリ・ライン状態を、メモリの上記ラインを含む各データ・キャッシュ・メモリのメモリの上記ラインに割り当てるステップとを含む。
【０００９】
上記方法は、状態キャッシュ・メモリで置き換えを行うことにより生じる整合動作の回数を低減する。メモリの大部分のラインは共有状態にあるので、デフォールト状態をキャッシュに記憶していない状態にセットするのではなく、共有状態にセットすると、状態キャッシュ・ライン置換中に行わなければならない無効な整合動作の回数が減少る。
【００１０】
添付の図面を参照しながら以下に本発明を説明するが、これは単に例示としてのものに過ぎない。
【００１１】
【発明の実施の形態】
ＮＣＲ社は、自らが開発したシステム技術を使用する、高度マルチプロセッサ・アーキテクチャを開発し、一方、インテル・ペンティアム・プロ・プロセッサ、ＰＣＩ  Ｉ／Ｏチップセット、ペンティアム・プロ・チップセット、ペンティアム・プロ・バス・トポロジィ（Ｐ６）のような標準大容量（ＳＨＶ）構成部材および標準メモリ・モジュール（ＳＩＭＭおよびＤＩＭＭ）を巧みに利用している。ＮＣＲシステム技術と標準ＳＨＶ構成部材とを注意深く融合することにより、ＮＣＲは世界的規模の拡張性と機能を供給することができ、一方、全面的なカスタム開発に関連する不利益を避け、ＳＨＶに資本を投入している。図１はこのアーキテクチャの実施形態である。
【００１２】
＜システムの概略＞
図１について説明すると、この図は参照記号ＡおよびＢで示す、二組の四つのプロセッサからなる構築ブロック、すなわち、複合体で形成されている８プロセッサＳＭＰシステムである。各複合体は、それぞれ複合体「Ａ］および複合体「Ｂ」のように、ＡまたはＢで終わる参照番号がついている、同一の構造体および構成部品を含む。
【００１３】
複合体Ａに設置されているシステムのこの部分は、高帯域幅、分割処理プロセッサ・バス１０３Ａに接続している、１−４のプロセッサ１０１Ａを含む。各プロセッサ３０１Ａは、キャッシュ・メモリ３２１Ａと関連している。システム・メモリ１０５Ａは、高度二重ポート付きメモリ・コントローラ１０７Ａを通して、バス１０３Ａに接続している。プロセッサ・バス１０３Ａは、メモリ・コントローラ１０７Ａ第一のポートに接続している。第二のメモリ・コントローラ・ポートは、本明細書では拡張バスと呼ぶ、高帯域幅  Ｉ／Ｏバス１１５に接続している。この拡張バスは、多重ＰＣＩ  Ｉ／Ｏインターフェース１０９Ａへの接続に使用されている。これらの構成部材すべては、高度メモリ・コントローラ１０７Ａを除いて、現在入手可能な市販の構成部材である。例えば、プロセッサ１０１Ａとしては、インテル・ペンティアム・プロ・プロセッサを使用できるし、バス１０３Ａとしては、ペンティアム・プロ（Ｐ６）バス・トポロジィを使用することができる。
【００１４】
高度メモリ・コントローラ（ＡＭＣ）１０７Ａは、プロセッサ・バス１０３ＡとＩ／Ｏバス１１５との間のすべての方向の制御およびデータの流れを管理する。上記Ｉ／Ｏバスは、後で説明するように、ＰＣＩ  Ｉ／ＯブリッジへのＰ６、および他のプロセッサへ接続するための、他のＡＭＣ  ＡＳＩＣを含むことができる。ＡＭＣ１０７Ａは、また整合ＤＲＡＭメモリ・アレイへのアクセスを制御する。このＡＭＣは、制御およびデータ・スライスＡＳＩＣペアからなる。
【００１５】
すでに説明したように、複合体Ｂは複合体Ａと同じ構造をしている。二つの複合体は、拡張バス１１５により相互に接続していて、プロセッサ１０１Ａおよび１０１Ｂ、システム・メモリ１０５Ａおよび１０５Ｂ、ならびに共有Ｉ／Ｏ装置、キャッシュ・メモリおよび他の構成部材との間で通信を行うことができる。
【００１６】
各複合体において、プロセッサは、プロセッサ・バス上で、バス監視プロトコルを使用する。バス監視プロトコルは、プロセッサとメモリとの間のデータの移動を絶えず追跡する方法である。少数の緊密に結合したプロセッサを含むこのシステムは、優れた性能を持つ。プロセッサが、同じバス上の他のプロセッサのデータ・キャッシュで使用することができるデータを必要とする場合には、そのデータを両方のプロセッサで共有することができる。そうでない場合には、そのデータは、主メモリ１０５Ａまたは１０５Ｂから検索しなければならないが、これはシステム・バス・トラフィックを必要とする時間の掛かる動作である。この方法は、システム・バスの取り合いを少なくすることにより、システムの性能を向上させる。
【００１７】
図１のＮＣＲアーキテクチャの特徴は下記の通りである。
【００１８】
ｏ  工業ＳＨＶアーキテクチャおよびサポートする物資チップ（ＩＯＢ等）への投資。
【００１９】
ｏ  二重ポート付きメモリ・コントローラ１０７Ａおよび１０７Ｂによる、それぞれが、６４ビットの帯域幅で６６ＭＨｚで動作し、５３３ＭＢ／ｓの持続データ転送速度で動作する複数の二重バスの接続と利用の実現。
【００２０】
ｏ  二重バス方式による、バス・ローディングの低減と、ＩＯＢトラフィックへのＩＯＢから独立して動作することができる、メモリ・パスへの私的プロセッサの設置による、拡張性の増進。
【００２１】
ｏ  拡張バス１１５への追加プロセッサおよびＩ／Ｏ装置への接続が可能。
【００２２】
上記システムは、コンピュータ工業のＳＨＶの動きに焦点を合わせながら、高利用度取引処理（ＨＡＴＰ）および拡張可能なデータ・ウェアハウス（ＳＤＷ）サーバのニーズを満足させることができる。
【００２３】
＜メモリをベースとする整合＞
データ・キャッシュ・メモリを使用するすべての装置、特に多重データ・キャッシュ・メモリおよび多重レベルのデータ・キャッシュ・メモリを使用するシステムの場合には、特定のメモリ位置からのデータは、主メモリおよび一つまたはそれ以上のデータ・キャッシュ・メモリに同時に常駐することができる。しかし、主メモリおよびデータ・キャッシュ・メモリのデータは、何時でも同じではない。このようなことは、マイクロプロセッサが、主メモリおよび他のデータ・キャッシュ・メモリを更新しないで、関連データ・キャッシュ・メモリに含まれているデータを更新した場合、または他のバス・マスタが、マイクロプロセッサのデータ・キャッシュ・メモリのそのコピーを更新しないで、主メモリのデータを変更した場合に起こる。
【００２４】
プロセッサ、システム・メモリ・モジュール１０５Ａおよび１０５Ｂ、および種々のデータ・キャッシュ・メモリ間を移動するデータを追跡するために、システムは、メモリとキャッシュをベースにする整合のハイブリッドを使用する。システム・メモリとキャッシュイング・エージェント、すなわち、第一および恐らく第二のレベルのデータ・キャッシュを含む、システム・バス・プロセッサとの間の整合は、集中／分散型のディレクトリをベースとするキャッシュの整合の組み合わせを通して維持される。
【００２５】
ディレクトリをベースとするキャッシュ整合スキームは、プロセッサとメモリとの間のデータの動きを絶えず追跡する方法である。データの整合に対するこの方法により、メモリ状態表は、どのプロセッサが、その関連データ・キャッシュ・メモリに、メモリのどのラインを持っているのかを識別する。プロセッサがデータを要求した場合には、状態表は、主メモリまたはプロセッサ・データ・キャッシュの、そのデータの最も新しいコピーが常駐している場所を識別する。この方法の利点は、プロセッサが監視によりアクセスすることができないデータ・キャッシュに常駐するデータを必要とするまで、追加の作業をする必要がないということである。ディレクトリをベースとするキャッシュの整合は、システム・バス上で多数の緊密に結合しているプロセッサを使用した場合に、最も効果がある。
【００２６】
図１のシステムで使用される、集中／分散型のディレクトリをベースとする、キャッシュ整合スキームは、二つのディレクトリ素子からなる。ディレクトリ・スキームの中央素子は、それぞれシステム・メモリ・モジュール１０５Ａおよび１０５Ｂに関連する、状態キャッシュ・メモリ２０３Ａおよび２０３Ｂに常駐する。この素子は、メモリ・ライン状態表（ＭＬＳＴ）と呼ばれる。システム・メモリのそれぞれのアクティブな（キャッシュ・メモリに記憶された）メモリ・ラインは、ＭＬＳＴに対応する入力を含む。この対応する入力は、メモリ・ラインがキャッシュ・メモリに記憶されているかどうかを示す情報を含み、もし記憶されている場合には、一つのプロセッサ（またはバス）または共有アクロスマルチプロセッサ（またはバス）により、排他的に占有されているかどうかを示す情報を含む。ディレクトリ・スキームおよびＭＬＳＴは、システム・バスまたはプロセッサによるメモリ・ラインの占有権を識別するように設定することができる。「ビット・パア・バス」ＭＬＳＴは、バスに基づいて占有権を識別し、一方、もっと粗い「ビット・パア・プロセッサ」ＭＬＳＴは、プロセッサに基づいて占有権を識別する。この識別はメモリ設計の際に行うべきものなので、システム・バス上のすべての他の装置には何の影響も与えない。
【００２７】
分散型のディレクトリ素子は、各プロセッサのデータ・キャッシュ・ディレクトリに局部的に常駐している。特定のプロセッサに関連するこの素子は、そのプロセッサのライン状態表（ＰＬＳＴ）と呼ばれる。各キャッシュ・ラインは、ＰＬＳＴに対応する入力を持つ。局部的プロセッサから見た場合、この入力は、ラインが主メモリ・ラインの有効なコピーを含んでいるかどうかを示す情報を含み、含んでいる場合には、そのラインを修正すべきかどうかをシステムの残りの部分に報告しなければならない。システムから見た場合、各プロセッサのＰＬＳＴは、メモリ介入コマンド（ＭＩＣ）と呼ばれる特殊なシステム・バス・サイクルに対するスレーブである。これらサイクルは、特定の隣接するのローカル状態についてＰＬＳＴに問い合わせを行い、および／またはＰＬＳＴにそのローカル状態を変更するように命令する。
【００２８】
＜メモリおよびキャッシュ状態の定義＞
修正−排他−共有−無効（ＭＥＳＩ）キャッシュ整合プロトコルは、主メモリの内容とデータ・キャッシュ・メモリの内容とを同じ状態に維持するための、ハードウェア実行プロトコルである。ＭＥＳＩハードウェア・キャッシュ整合プロトコルの通常の実行の際には、下記の機能を持つキャッシュ・コントローラを使用する必要がある。
【００２９】
１．メモリ・バス上の、すべてのキャッシュ・メモリに対して、同じライン・サイズを使用することができること。
【００３０】
２．メモリ・バス上のすべての活動を、観察することができること。
【００３１】
３．キャッシュ・メモリの、すべての各ラインに対する状態情報を、維持することができること。
【００３２】
４．キャッシュ・メモリと、主メモリの内容を同じ状態に維持するために、適当な行動をとることができること。
【００３３】
ＭＥＳＩは、ラインが有効であるかどうか、他のキャッシュで使用することができるかどうか、修正済みであるかどうかを定義する四つの状態を表す。データ・キャッシュのデータの各ラインは、データのラインが修正済みか、排他的か、共有か、または無効かを示す関連フィールドを含む。プロセッサ・ライン状態表の各ラインは、四つの可能なＭＥＳＩ状態の中の一つにマークがつけられている。
【００３４】
ｏ  修正済み−この状態は、このキャッシュだけで排他的に使用することができ、修正されるデータのラインを示す。修正済みのラインは、共有メモリ・バスを獲得しなくても、キャッシュで局部的に更新することができる。システムの他の装置が、このラインを必要とする場合には、占有中のキャッシュがデータを供給しなければならない。
【００３５】
ｏ  排他（ＰＥ）−この状態は、このキャッシュだけで排他的に使用できるデータのラインが修正されていないこと（主メモリも有効なコピーを持つ。）、ローカル・プロセッサが、システムに通知しないで、このラインを自由に修正できることを示す。排他的データは、ある種の方法で働きかけられるまで、他のいかなるプロセッサも使用することはできない。排他的ラインに書き込みを行うと、他のキャッシュに通知しなくても、状態が修正された状態に変化する。そのため、メモリ・バスの活動は発生しない。以下に説明するように、（ＰＥ）状態にあるラインには、ＭＬＳＴで（ＭＯ）のマークがつけられることに留意されたい。
ｏ  共有（ＰＳ）−この状態は、他のキャッシュと潜在的に共有しているデータのライン（同じラインが、一つまたはそれ以上のキャッシュに存在する。）を示す。共有データは、複数のプロセッサの間で共有することができ、複数のキャッシュに記憶することができる。ローカル・プロセッサは、主メモリにアクセスしないで、共有ラインを読むことができる。プロセッサが、局部的に共有とマークされているラインに書き込みを行った場合には、そのプロセッサは、システムにも、その書き込みを放送しなければならない。
【００３６】
ｏ  無効（ＰＩ）−この状態は、キャッシュで使用することができないデータのラインを示す。特定のキャッシュの無効データは、診断または類似の用途以外には、将来の処理用に使用することはできない。このラインを読出すと、「ミス」（使用不能）となる。このラインに書き込みを行うと、メモリ・バスへのライト・スルー・サイクルとなる。すべてのキャッシュ・ラインは、システムが初期化された時、（ＰＩ）状態になる。
【００３７】
ＭＥＳＩプロトコルによれば、プロセッサがメモリのラインを占有すると、修正であろうと、排他であろうと、主メモリのメモリの占有ラインへ書き込みを行った場合には、その書き込みが何であろうとも、プロセッサのデータ・キャッシュ・メモリに含まれている同じデータは直ちに更新される。
【００３８】
メモリ・ライン状態表は、三つの可能な状態、すなわち、「キャッシュに記憶されていない（ＭＮＣ）」、共有（ＭＳ）および占有（ＭＯ）の一つの状態になっているメモリ・ラインをマークする。文字Ｍは、文字Ｐで識別されるＰＬＳＴ状態から、これらの状態を区別するためのものである。さらに、バスまたはプロセッサをベースとする共有または占有を示すバスおよび／またはプロセッサ状態ビットも使用される。
【００３９】
ｏ  キャッシュに記憶されていない（ＭＮＣ）：この状態は、キャッシュがそのラインのコピーを持っていないことを示す。システムが初期化された時には、すべてのメモリ・ラインを（ＭＮＣ）状態にリセットしなければならない。
【００４０】
ｏ  共有状態（ＭＳ）：この状態は、一つまたはそれ以上のキャッシュが、潜在的にそのラインのコピーを持っていることを示す。
【００４１】
ｏ  占有状態（ＭＯ）：この状態は、一つそして唯一のキャッシュが、潜在的にそのラインのコピーを持っていて、メモリのデータが潜在的にそれと一致していないことをしめす。（メモリ・データは、失効したと呼ばれる。）
共有および占有状態の定義に使用された「潜在的」という用語に留意されたい。ＭＬＳＴが、特定のメモリ・ラインについての最新の情報を持っていない状況がいくつかある。例えば、ＭＬＳＴは、一本のラインを、二つの特定のプロセッサにより共有されているとマークする場合がある。何故なら、ＭＬＳＴが二つの特定プロセッサがそのラインを読んだと見なしたからである。しかし、両方のプロセッサが、（「無言の置換」と呼ばれる）ＭＬＳＴに通知しないで、新しいデータのために空きを作るために、そのラインをずっと前から放棄している場合がある。ＭＬＳＴは、当然、あるマスタの力、ＭＩＣがそのラインにアクセスする度に、特定のラインの最新の状態に「追いつこう（ｃａｔｃｈ  ｕｐ）」とする。この例の場合、第三のプロセッサがこのラインに書き込みを行うと、他のキャッシュに記憶されていコピーを無効にするために、（現在不必要な）ＭＩＣを初期化し、ＭＬＳＴを更新する。しかし、ＭＬＳＴは、何時でも、キャッシュ・ラインの状態を前の状態に保持しようとすることに留意されたい。すなわち、プロセッサが占有または共有しているラインは、何時でも、ＭＬＳＴに正確にマークされている。ＭＬＳＴの「失効した」情報は、もはやどのプロセッサのデータ・キャッシュにも存在しない占有または共有とマークされたラインの形をとる。
【００４２】
システム・メモリの内容とデータ・キャッシュ・メモリの内容を同じに維持するために、上記システムで使用される三つの異なるＭＩＣ動作がある。
【００４３】
ｏ  無効（ＭＢＩ）  このサイクルがスタートすると、アドレスされたラインを持つすべてのデータ・キャッシュは無効状態（ＰＩ）になる。このサイクルは、通常、ＭＬＳＴの共有とマークされた（ＭＳ）ラインにアクセスする、ある種のメモリ動作に応えて発生する。他のＭＩＣ動作とは異なり、ＭＢＩは、ローカル・キャッシュのアドレスされたラインの現在の状態に関して、ＰＬＳＴからのフィ−ドバックを要求しない。それどころか、ＭＢＩは、単に、そのラインがキャッシュに存在する場合には、その無効化を要求する。ＭＢＩは、論理的フィ−ドバックは要求しないが、そのサイクルを終了するために、目標プロセッサから積極的な承認を要求する。ＭＢＩは、単に、プロセッサが無効なアドレスを受け入れ、他のアドレスを受け入れることができることを表示する。
【００４４】
ｏ  放棄無効（ＭＢＣＯＩ）  このサイクルがスタートすると、アドレスされたラインの潜在的に修正されたコピーを持つキャッシュは、システム・メモリに送られ、無効状態（ＰＩ）になる。このサイクルは、ＭＬＳＴで占有とマークされた（ＭＯ）メモリ・ラインにアクセスする、ある種のメモリ動作に応えて発生する。占有キャッシュが修正（ＰＭ）状態のラインを持っている場合には、そのキャッシュは、データを供給し、無効になる。占有キャッシュが排他（ＰＥ）状態のラインを持っている場合には、そのキャッシュは、ＭＢＣＯＩに通知し、無効になるが、データの供給は行わない。占有キャッシュがもはやラインを持っていない場合には、このキャッシュは、単に、サイクルが終了したことをＭＢＣＯＩ通知するだけである。
【００４５】
ｏ  放棄共有（ＭＢＣＯＳ）  このサイクルは、アドレスされたラインの潜在的に修正されたコピーを持つキャッシュをシステム・メモリに送り、共有状態（ＰＳ）になる。このサイクルは、ＭＬＳＴの占有とマークされた（ＭＯ）、メモリ・ラインにアクセスする、ある種のメモリ動作に応えて発生する。占有キャッシュが修正された状態（ＰＭ）のラインを持っている場合には、そのキャッシュはデータを供給し、共有になる。占有キャッシュが排他状態（ＰＥ）のラインを持っている場合には、そのキャッシュはＭＢＣＯＳに通知して、共有状態になるが、データの供給は行わない。占有キャッシュが、もはやラインを持っていない場合には、このキャッシュは、サイクルが終了したことをＭＢＣＯＩ通知する。最後の場合には、ラインがキャッシュに記憶されていなくても、ＭＬＳＴは共有状態（ＭＳ）になる。何故なら、ＭＬＳＴは、無効状態（ＰＩ）のラインと、占有者のキャッシュの排他状態（ＰＥ）のラインとを区別することができないからである。
【００４６】
すでに説明したように、ＭＬＳＴは、バスまたはプロセッサを基準とする共有または占有を示す、追加のバスおよび／またはプロセッサ状態ビットを含む。
【００４７】
ビット・パア・バス・プロトコルは、ラインの現在の状態を表示するために、一つのライン語との三つのメモリ状態ビットを使用する。一つのビットは共有または占有を示し、他の二つのビットはどのバス（ＡまたはＢ）またはバス（ＡおよびＢ）が、共有または占有ラインを持っているのかを示す。バスの占有権は、そのバス上のプロセッサの中の一つが、そのラインを占有していることを示す。六つの状態、すなわち、「キャッシュに記憶されていない」、「共有バスＡ」、「共有バスＢ」、「両者共有」、「占有バスＡ」および「占有バスＢ」が可能である。一本のラインを占有できるのは一台のプロセッサだけ、すなわち、一本のバスだけであることに留意されたい。共有ラインは、各バス上の一台またはそれ以上のプロセッサにより共有することができる。
【００４８】
0003974983.tif 000002
ビット・パー・プロセッサ・プロトコルは、そのラインの現在の状態を表示するための一本のラインに対して、ｎ＋１個のビット（ｎはプロセッサの数に等しい）からなるＭＬＳＴを持つ。一つのビットは、そのラインが共有（ＭＳ）または占有（ＭＯ）かを示し、他のｎ個のビットは、どの一台のプロセッサまたは複数のプロセッサが、キャッシュに記憶されているラインを持っているかを示す。特定のプロセッサにはＰｉの番号がつけられるが、この場合ｉは０からｎ−１の数字である。ｉが偶数であるすべてのＰｉはバスＡ上に存在し、ｉが奇数であるすべてのＰｉはバスＢ上に存在する。プロセッサの占有権は、どのプロセッサ（一台だけ）がそのラインを占有しているかを示す。共有ラインは、どちらか一方または両方のバスにより共有することができる。
【００４９】
0003974983.tif 000003
＜メモリ状態キャッシュ＞
すでに説明したように、システム・メモリ１０５Ａおよび１０５Ｂに関連する状態情報を含むＭＬＳＴは、それぞれ状態キャッシュ・メモリ２０３Ａおよび２０３Ｂに維持されている。状態キャッシュ・メモリは、どのような場合でも、一度にすべてのシステム・メモリが使用（キャッシュに記憶される）ことは滅多にないことを考慮して、システム・メモリに含まれているメモリ・ラインの一部だけに対する状態情報を記憶することができるだけの容量を持っている。例示としての状態キャッシュ・メモリ２０３Ａの構造および動作を、図２および図３に示す。
【００５０】
図２は、例えば、各ラインが３２バイトの大きさを持つ、３３兆５５４４億３２００万（２25）のメモリ・ブロック、すなわち、ラインに分割された１ギガバイト（２29）の容量を持つシステム・メモリ１０５Ａである。メモリ１０５Ａに記憶されているデータには、２９ビットのアドレス２０１によりアクセスする。「Ｘ」ビットと呼ばれる、このアドレスの２５の最上位のビットは、メモリ・ブロック番号、すなわち、ライン番号を示す。「Ｗ」ビットと呼ばれる、次の四つのアドレス・ビットは、メモリ・ブロックの語を示し、最下位のアドレス・ビット「Ｂ」は、語の中のバイトを示す。
【００５１】
状態情報を記憶するためのキャッシュ・メモリ２０３Ａは、「キャッシュ・タグＲＡＭ」２０５Ａ、および「キャッシュ・データＲＡＭ」２０７Ａと呼ばれる二つのセクションを含む。状態キャッシュ・メモリ２０３Ａの各ライン入力は、キャッシュ・データＲＡＭにセーブされた状態情報、およびキャッシュ・タグＲＡＭに記憶された四つのビット・タグを含む。
【００５２】
状態キャッシュ・メモリ２０３Ａは、全部の数のメモリ・アドレス・ビットのサブセットにより索引される。アドレス・ビットまたはタグ・ビットの残りは、記憶装置の各入力に対する内容の一部である。索引ビットは、状態キャッシュの入力の数を指定し、タグ・ビットは状態キャッシュの同じ入力を取り合うことができるメモリ・ラインの数を決定する。索引ビットにタグ・ビットを加えたものは、サポートすることができるメモリ・ラインの全数を指定する。本質的には、状態記憶装置の低減は、タグ・ビットの数により決まる。例えば、タグ・ビットの数が４である場合には、このコンセプトに対する状態記憶装置の要件は、従来のアーキテクチャの１／１６である。
【００５３】
図３は、状態キャッシュ２０３Ａの構造および動作に関するもっと詳細な情報である。状態キャッシュの入力には、主メモリ１０５Ａにアクセスした時に使用したのと同じアドレス２０１によりアクセスできる。このアドレスの四つの最上位のビットは、タグ・ビットと呼ばれ、次の２１のアドレス・ビットは、索引ビットと呼ばれる。これら２５のアドレス・ビットは、図４のＸビットと同じビットであり、主メモリ１０５Ａのメモリ・ブロックを識別するのに使用される。
【００５４】
状態キャッシュの読出し動作中、上記アドレスの索引フィールドは、チェックするキャッシュの特定の入力またはラインを指定するのに使用される。次に、上記アドレスのタグ・ビットは、選択したキャッシュ・ラインのタグと比較される。一致する場合には、キャッシュ的中が起こり、選択したキャッシュ・ラインに関連する状態ビットが検索される。
【００５５】
状態キャッシュ・メモリの状態情報を記憶する際には、タグおよび状態情報記憶装置に対する特定の入力、またはキャッシュ・ラインを識別するために、アドレスの索引フィールドが使用される。最初の四つのアドレス・ビットは、キャッシュ・タグＲＡＭにセーブされ、そのアドレスに関連する状態情報は、キャッシュ・データＲＡＭにセーブされる。オプションとして、エラー検出および／または修正シンドローム・ビット、またはパリテイ・ビットを、状態キャッシュ・メモリに内蔵させることができる。
【００５６】
上記状態キャッシュは、直接マップされたキャッシュである。しかし、状態キャッシュは、データ・キャッシュに従って、結合型、セクタ型、または直接マップ型にすることができることに留意されたい。
【００５７】
メモリ・システムの動作を以下に説明する。システム・メモリの読み出しまたは書き込み動作が要求されると、プロトコルに従って、必要な整合サイクルを決定するために、状態キャッシュがアクセスされる。状態キャッシュのタグ情報が、メモリ・アドレスの対応するビットと一致する場合には、対応する整合サイクルが実行され、状態が更新される。タグが一致しない場合には、デフォールト状態に対する整合動作が実行され（恐らく、実行されることはないが）、新しいライン・アドレスおよび状態が、状態キャッシュに割り当てられる。恐らく、現存する入力は新しいラインにより置き換えられることになる。整合動作は、置き換えられたライン状態を、デフォールト状態にするために必要になる場合がある。これらの置換整合動作は、状態記憶装置の容量を少なくするためのパーフォーマンス費用であるが、すでに説明したように、妥当な状態キャッシュ容量および通常の作業量の場合には、無視することができる。状態キャッシュは、結合型、セクタ型、またはデータ・キャッシュの場合と同じように直接マップ型にすることができることに留意されたい。
【００５８】
下記の例を使用して、状態キャッシュ・メモリの使用によるメモリ・スペースの節約を説明する。上記の、１ギガバイトのメモリと、メモリの一つのラインに対して必要な、４ビットの整合状態フィールドを持つシステムについて考えてみよう。メモリの基本的な整合ブロック、すなわち、ラインは３２バイトである。すべてのメモリに対する４ビット状態を記憶するためには、１６ＭＢの状態メモリ（一つのラインにつき、３２００万のライン × ４ビット）が必要になる。状態メモリの各入力が、４ビットのタグを含んでいる場合には、状態メモリは一本のライン当たり８ビットの情報を含んでいて、これは従来の量の二倍である。しかし、４ビット・タグのおかげで、ラインの数は１／１６ですむ。それ故、必要な全状態メモリは２ＭＢで、これは従来の容量の１／８である。折り合いは、比較的少ない状態キャッシュ入力の可能な置き換えにより行われる。この例の場合には、状態キャッシュは、６４ＭＢデータ・キャッシュ（それぞれが３２バイトのラインを表す２００万の入力）に等しい。
【００５９】
上記プロセスのように、メモリ状態キャッシュを使用する際の不利な点は、キャッシュに記憶されている、状態入力の置き換えにより生じる追加の整合動作が、通常の転送と干渉することである。本発明は、ディレクトリをベースとするメモリ状態キャッシュの置き換えにより生じる整合動作の数を減らすための方法を提供する。
【００６０】
＜置換動作の低減＞
すでに説明したように、状態キャッシュに記憶されていないアドレスに関する情報が必要な場合に、新しいアドレスの割当ができるようにするために、前の記憶している状態キャッシュ入力を置き換えなければならない。アート・プロトコルの現在の状態は、メモリ・ライン（基本的な整合素子）のシステム状態を、キャッシュに記憶されていない（共有または占有）状態に復帰させる。この動作は、プロセッサ・データ・キャッシュに対する無効化動作および放棄動作を含む。
【００６１】
今まで説明してきた、ディレクトリをベースとするキャッシュ整合システム、および多くの類似のシステムにおいては、大部分の状態キャッシュ・ラインは、ウオームアップ期間を過ぎると、共有としてマークされることを認識しておく必要がある。そのため、共有のデフォールト・メモリ状態を指定することにより、置き換えの結果生じる整合動作の数を低減することができる。それ故、キャッシュ状態入力の置き換えの結果生じる動作を処理するために使用する置換アルゴリズムは、共有状態を単に確実に生じさせるためのものでなければならない。キャッシュの大部分のラインは、共有状態にあるので、このことは無効を意味しない。また、データ・キャッシュは、共有状態でメモリ情報を継続して保持している。置換したラインが占有状態である場合には、放棄動作が発生するが、そのラインはデータ・キャッシュで、共有状態に遷移することができる。
【００６２】
この方法に対する折り合いは、ラインが、（書き込みミスにより生じた）占有状態にある、状態キャッシュ・メモリに割り当てられた場合、すべてのデータ・キャッシュのそのラインのすべての可能な共有者に、無効が必要になる。しかし、書き込みミスおよび読取りミスは、割当を生じさせ、割当は置換を生じさせる。ミスの数の半分以下が書き込みサイクルである場合には、書き込みサイクルにより生じた無効より、セーブされた置換無効のほうが多い。何故なら、読取りサイクルが、キャッシュの共有入力を割り当てるからである。
【００６３】
一つの例として、二つのキャシング・エーゲントに対して、メモリ・ライン（整合素子）当たり、３ビットの状態情報を持つディレクトリをベースとするメモリ・システムを考えてみよう。通常使用される八つの可能な状態の中の六つは、キャッシュに記憶されていない、共有エージェントＡ、共有エージェンントＢ、両者共有、占有エージェントＡ、および占有エージェントＢである。図４は、従来のアルゴリズムに対する置換されたライン動作、および「両者共有」または「共有だけ」デフォールト状態を持つ本発明の方法を示す表である。一方のエージェントがメモリに対してより高速でより高い優先権アクセスを持っている場合には、共有エージェントＡまたは共有エージェントＢデフォールトはメリットがあることに留意されたい。それ故、無効は、状態キャッシュに対する割当に対してはより迅速である。
【００６４】
両者共有デフォールト状態プロトコルの場合には、入力が占有者状態である場合に限って、置換動作が必要になり、エージェントは、局部的にラインを共有状態に維持することができる。「共有Ａ」デフォールト状態プロトコルの場合には、ラインが「エージェントＡによって共有」または「両者によって共有」の場合に、無効が必要になる。しかし、このケースに対する状態キャッシュへの割当の間、余計な無効は少なくてすむ。図５の表は、キャッシュに記憶していないデフォールト状態を持つ、３ビットのディレクトリをベースとするメモリに対する整合状態表である。図６および図７の表は、「両者共有」および「共有エージェントＡ」デフォールト状態に対する整合状態である。ある種の追加無効を起こす状態は、太字で示してある。「両者共有」デフォールトの場合には、書き込みミスにより対向するエージェントを無効にし、ＤＭＡ書き込みを行うと両方のエージェントを無効にする。「共有Ａ」デフォールトの場合には、エージェントＡが書き込みミスを起こすと、局部的な整合サイクルを起こし、ＤＭＡ書き込みはエージェントＡだけを無効にするだけである。それ故、このケースの場合には、より少ない無効しか生じない。（注：Ｉ／Ｏインターフェースが、どちらかのエージェントだけのものである場合には、そのエージェント、すなわち、ローカル監視プロトコルに対して無効は局部的に処理され、この場合、メモリは対向するエージェントを無効にする。）
それ故、本発明は、集中／分散型のディレクトリをベースとするキャッシュ整合および状態キャッシュ・メモリを使用するコンピュータ・システムでのメモリ使用を改善するための新しい有用な方法を提供する。上記方法は、状態キャッシュ・メモリでの置換により生じる整合（無効）動作の数を減少する。
【図面の簡単な説明】
【図１】現在入手可能な市販構成部材を使用する、８プロセッサ超大容量（ＳＨＶ）対称多重処理（ＳＭＰ）コンピュータ・システムの簡単なブロック図である。
【図２】状態情報を記憶するためのシステム・メモリ１０５Ａとキャッシュ・メモリのブロック図である。
【図３】状態キャッシュ２０３の構造および動作をさらに詳細に示す、図２の状態キャッシュ・メモリ２０３のブロック図である。
【図４】本発明の三つの可能なデフォールト・メモリ・ライン状態に対する、置換メモリ・ライン整合動作の低減を示す表である。
【図５】従来の置換手順による「キャッシュに記憶していない」デフォールト状態を含む、３ビットのディレクトリをベースとするメモリに対する整合状態表である。
【図６】本発明の第一の実施形態による、「両方共有」デフォールト状態を含む、３ビットのディレクトリをベースとするメモリに対する整合状態表である。
【図７】本発明の第二の実施形態による、「共有エージェントＡ」デフォールト状態を含む、３ビットのディレクトリをベースとするメモリに対する整合状態表である。
【図１】
0003974983.tif 000004
【図２】
0003974983.tif 000005
【図３】
0003974983.tif 000006
【図４】
0003974983.tif 000007
【図５】
0003974983.tif 000008
【図６】
0003974983.tif 000009
【図７】
0003974983.tif 000010