デジタル・データ処理システムは、例えば、家庭電子機器、コンピュータ、車等を含む多くの応用で用いられている。例えば、パーソナル・コンピュータ(PC)は、広い多種多様のユーザ・アプリケーション用のプラットフォームを与えるため複雑なデジタル処理機能を使用する。
デジタル・データ処理システムは、典型的には、入力/出力機能、命令及びデータ・メモリ、及び1又はそれより多くのデータ・プロセッサ、例えば、マイクロコントローラ、マイクロプロセッサ、又はデジタル信号プロセッサのようなものを備える。
処理システムの性能の重要なパラメータは、メモリ性能である。最適な性能のため、メモリが大きく且つ速く、そして好ましくは安価であることが希望される。不都合にも、これらの特性は、要件同士を衝突させがちであり、そして適切なトレードオフが、デジタル・システムを設計するとき要求される。
処理システムのメモリ性能を改善するため、異なるタイプのメモリの個々の利点を活用しようとする複雑なメモリ構造が、開発されてきた。特に、より大きくより遅くてより安価なメイン・メモリと関連して速いキャッシュ・メモリを用いることが一般的になった。
例えば、PCにおいて、メモリは、典型的に異なるサイズ及び速度のメモリをからなる記憶階層に組織化される。従って、PCは、典型的には、低コストであるがしかし遅いメイン・メモリを備え、その上、比較的小さいく高価であるが速いメモリを備える1又はそれより多いキャッシュ・メモリ・レベルを有する。動作中に、メイン・メモリからのデータは、速い読み出しサイクルを可能にするためキャッシュ・メモリに動的にコピーされる。同様に、データは、メイン・メモリよりむしろキャッシュ・メモリに書き込まれ、それにより、速い書き込みサイクルを可能にする。
従って、キャッシュ・メモリは、メイン・メモリの異なるメモリ場所と動的に関連付けられ、そしてメイン・メモリとキャッシュ・メモリとの間のインターフェース及び相互作用が許容可能な性能にとって重要であることが、明らかである。従って、キャッシュ動作についての重要な研究が、行われ、そしてデータがメイン・メモリではなくキャッシュ・メモリへ書き込まれ又はそれから読み出されるときを、並びにデータがキャッシュ・メモリとメイン・メモリとの間で転送されるときを制御する様々な方法及びアルゴリズムが、開発されてきた。
典型的には、プロセッサが読み出し動作を実行するときは常に、キャッシュ・メモリ・システムは、最初に、対応するメイン・メモリ・アドレスがキャッシュと現在関連付けられているかどうかを検査する。キャッシュ・メモリがメイン・メモリ・アドレスに関する有効なデータ値を含む場合、このデータ値は、キャッシュによりシステムのデータ・バス上に置かれ、そして読み出しサイクルは、いずれの待ちサイクル無しに実行する。しかしながら、キャッシュ・メモリがメイン・メモリ・アドレスに関する有効なデータ値を含まない場合、メイン・メモリ読み出しサイクルが、実行され、そしてデータが、メイン・メモリから検索される。典型的には、メイン・メモリ読み出しサイクルは、1又はそれより多い待ち状態を含み、それによりプロセスを遅くする。
プロセッサがデータをキャッシュ・メモリから受け取ることができるメモリ動作は、通常、キャッシュ・ヒットと呼ばれ、そしてプロセッサがデータをキャッシュ・メモリから受け取ることができないメモリ動作は、通常、キャッシュ・ミスと呼ばれる。典型的には、キャッシュ・ミスは、プロセッサがデータをメイン・メモリから検索することをもたらすばかりでなく、メイン・メモリとキャッシュとの間の多数のデータ転送ももたらす。例えば、所与のデータがアクセスされ、キャッシュ・ミスをもたらす場合、後続のメモリ場所が、キャッシュ・メモリへ転送される。プロセッサが頻繁に連続したメモリ場所にアクセスするので、それにより所望のデータを有するキャッシュ・メモリの確率は、通常増大する。
キャッシュのヒット率を改善するため、Nウエイ・キャッシュ(N−way caches)が用いられ、そこにおいて、命令及び/又はデータが、N個の格納ブロック(即ち、複数の「ウエイ」)の1つに格納される。
キャッシュ・メモリ・システムは、典型的には、キャッシュ・メモリの解像度に対応する複数のキャッシュ・ラインに分割される。セットアソシエイティブ・キャッシュ・システムとして知られているキャッシュ・システムにおいては、多数のキャッシュ・ラインが、異なるセットに一緒にグループ化され、そこにおいて、各セットは、メイン・メモリ・アドレスのより低いデータ・ビットに対しての固定マッピングに対応する。1つのセットを形成する各キャッシュ・ラインの極端なケースは、直接マッピング・キャッシュとして知られ、そして各メイン・メモリ・アドレスが1つの特定のキャッシュ・ラインにマッピングされることをもたらす。全てのキャッシュ・ラインが単一のセットに属する他の極端なケースは、フルアソシエイティブ・キャッシュとして知られ、そしてこれは、各キャッシュ・ラインをいずれのメイン・メモリ場所にマッピングすることを可能にする。
どのメイン・メモリ・アドレス(有るならば)に各キャッシュ・ラインが関連付けられているかの経過を追うため、キャッシュ・メモリ・システムは、典型的には、各キャッシュ・ラインに関してそのキャッシュ・ラインとメイン・メモリとの間の現在のマッピングを指示するデータを保持するためのデータ・アレイを備える。詳細には、データ・アレイは、典型的には、関連のメイン・メモリ・アドレスのより高いデータ・ビットを備える。この情報は、通常、タグとして知られ、そしてデータ・アレイは、タグアレイとして知られている。その上、より大きいキャッシュ・メモリについては、アドレスのサブセット(即ち、インデックス)を用いて、キャッシュ内のライン位置を指示し、そこにおいて、アドレスの最上位ビット(即ち、タグ)が、データと共に格納される。インデクッシング(indexing)を用いるキャッシュにおいては、特定のアドレスを有するアイテムが、関連のインデックスにより指示されたラインのセット内にのみ配置されることができる。
プロセッサがデータをメモリから読み出し及びそれへ書き込むのを可能にするため、プロセッサは、典型的には、仮想アドレスを生成するであろう。物理アドレスは、メイン(即ち、より高いレベル)メモリのアドレスであって、プロセッサにより発生される仮想アドレスと関連付けられるアドレスである。マルチタスク環境は、プロセッサが異なるタスクを異なる時間にサービス提供する環境である。マルチタスク環境内では、異なるタスクにより発生された同じ仮想アドレスは、必ずしも同じ物理アドレスと関連付けられるわけではない。異なるタスク間で共用されるデータは、このデータを共用する全てのタスクのため同じ物理的場所に格納される一方で、異なるタスク間で共用されないデータ(即ち、プライベート・データ)は、そのタスクに対して一意である物理的場所に格納されるであろう。
このことは、図1により明瞭に示されており、そこにおいては、Y軸は、仮想アドレス空間を定義し、そしてX軸は、時間を定義する。図1に示されるように、4つのタスク151、152、153、154と関連付けられたプライベート・データ150は、同じ仮想アドレスを有するよう構成される。しかしながら、外部メモリに格納された関連のデータは、異なる物理アドレスに格納されるであろう。4つのタスク151、152、153、154の共用されるデータ155は、同じ仮想アドレス及び同じ物理アドレスを有するよう構成される。
その結果、仮想アドレス・キャッシュは、プロセッサにより発生された仮想アドレスを参照してデータを格納する一方で、外部メモリに格納されるべきデータは、物理アドレス空間に格納される。
更に、マルチタスキング環境で動作する仮想アドレス・キャッシュは、格納されたデータと関連したアドレス/タグを格納するためのアドレス又はタグ・フィールドと、どのタスクにアドレス/タグ及びデータが関連付けられるかについて識別するためタスク識別子IDフィールドとを有するであろう。
その結果、マルチタスク環境内で、「ヒット」は、キャッシュに格納されたデータに関するアドレス/タグがプロセッサにより要求された仮想アドレスに一致し、且つキャッシュに格納されたデータと関連したタスクID識別子フィールドがプロセッサにより実行されている現在のアクティブ・タスクに一致することを要求する。
図2は、仮想アドレス・データ・キャッシュ100を示す。仮想アドレス・データ・キャッシュ100は、プロセッサ101により発生され受け取られた仮想アドレスと仮想アドレス・データ・キャッシュ100内のキャッシュ・メモリに格納された仮想アドレスと関連したデータとの間に仮想アドレス・マッチ(一致)が存在するかどうかを決定することができ、そこにおいて、共用されるデータ・インディケータが与えられる場合、タスクIDマッチが要求されない。これは、仮想アドレス・データ・キャッシュ100の中で共用されるデータ(以下、「共用データ」という。)を保持し、そしてプロセッサ101により実行される様々なタスク間で用いられることを可能にする。しかしながら、共用データ・インディケータが与えられない(即ち、プライベート・データであることを指示する)場合、タスクIDマッチが、仮想アドレス・マッチに加えて要求される。
図2は、並列プロセッサ・バス102を介してシステム・プロセッサ101に結合された仮想アドレス・データ・キャッシュ100及びメモリ・コントローラ104を示し、仮想アドレス・データ・キャッシュ100は、更に並列システム・バス103を介してシステム・メモリ113(即ち、外部メモリ)に結合されている。しかしながら、この実施形態が仮想アドレス・データ・キャッシュに言及しているが、当該実施形態が等しく仮想アドレス命令キャッシュに適用することができるであろうことが注目されるべきである。
仮想アドレス・データ・キャッシュ100は、システム・プロセッサ101により発生された仮想アドレスを参照してデータを格納するよう構成されている。
メモリ・コントローラ104は、並列バス111を介して仮想アドレス・データ・キャッシュ100に結合される。
メモリ・コントローラ104は、外部メモリ・アクセスを制御し、そして仮想アドレスを物理アドレスに変換するよう構成されている。
メモリ・コントローラ104は、メモリ再配置をサポートするため仮想アドレスから物理アドレスへ変換する高速変換機構を実現するよう構成されている。
その上、メモリ・コントローラ104は、メモリ管理のためのキャッシュ及びバス制御を与える。
メモリ・コントローラ104は、以下で説明するように、タスクID情報を格納してマルチタスク・キャッシュ・メモリ管理をサポートして、共用されたタスク及びプライベート・タスクの識別を可能にするよう構成されている。
現在の実施形態は仮想アドレス・データ・キャッシュ100が並列バスを介してシステム・プロセッサ101に結合されているのを示しているが、仮想アドレス・データ・キャッシュ100は、プロセッサ内に物理的に統合化されることができる。
図3は、仮想アドレス・データ・キャッシュ100が仮想アドレスを並列プロセッサ・バス102を介してプロセッサ101から受け取る第1の入力301と、タスクIDをメモリ・コントローラ104から受け取る第2の入力302とを有することを示す。受け取られた仮想アドレスは、プロセッサ101が複数のタスクのうちの1つを実行するため必要とするデータと関連付けられる。タスクIDを用いて、プロセッサが実行している実際のタスクを識別し、そのため、仮想アドレスと関連したデータが、必要とされる。
この実施形態内で、メモリ・コントローラ104は、255個の異なるタスクを区別することができる。しかしながら、異なる数のタスクをサポートすることができる。
現在の実施形態は、タスクIDがメモリ・コントローラ104により与えられることを示すが、仮想アドレス・データ・キャッシュ100は、タスクIDを計算システム内の他の構成要素、例えば、プロセッサ101から受け取ることができるであろう。
仮想アドレス・データ・キャッシュ100は、第1の加算ノード303、第2の加算ノード304、一連の比較器305(即ち、複数の比較器)、キャッシュ・メモリ306及びNウエイ・メモリ・ブロック307を含み、当該Nウエイ・メモリ・ブロック307は、タグ・メモリ308、有効ビット・メモリ309及び有効ビット・チェッカ・モジュール310を含む。
第1の加算ノード303は、仮想アドレスのタグ部分をプロセッサ101から受け取る第1の入力301と、タスクIDをメモリ・コントローラ104から受け取る第2の入力302とに結合される。第1の加算ノード303は、受け取られたタグ及びタスクIDを組み合わせて、拡張されたタグを生成し、当該拡張されたタグは、一連の比較器305のそれぞれの比較器上の第1の入力へ入力される。
Nウエイ・メモリ・ブロック307は、上記で説明したように、メモリ・アドレッシングを可能にするインデックシング・システムを用いる。そのようにして、タグ・フィールドを有するプロセッサ101により発生された仮想アドレスに加えて、仮想アドレスはまた、上記で説明したようなそして当業者に周知であるようなインデックス・フィールドを含む。しかしながら、他のアドレッシング・フォーマットを用いることができるであろう。
Nウエイ・メモリ・ブロック307は、キャッシュ・メモリ306に格納された全てのデータのステータス(状態)及び場所(位置)を定義するため用いられる。このNウエイ・メモリ・ブロック307は、N個のメモリ・ブロックを含み、そのそれぞれのメモリ・ブロックが複数のインデックス、例えば16個のインデックスを有し、そして各インデックスは、拡張されたタグ・フィールド308と、有効ビット・メモリ309を形成する複数の有効ビット・フィールドを含む。拡張されたタグ・フィールド308は、タスクID及びタグ・アドレスを所与のインデックスに関して含み、それは、アクセスをキャッシュ・メモリ306の中のキャッシュ・ラインにマッピングさせるのを可能にする。なお、キャッシュ・ラインは、キャッシュ・ウエイ及びインデックスの組み合わせにより定義される。複数の有効ビット解像度フィールド309は、当業者に周知のように、アクセスがマッピングされるキャッシュ・ライン内の対応のデータ・ビットが有効かダーティであるかについてのステータス情報を含む。
Nウエイ・メモリ・ブロック307は、一連の比較器305のそれぞれの比較器上の第2の入力に結合され、それによりNウエイ・メモリ・ブロック307における各インデックスは、関連した比較器に結合される。従って、比較器305の数は、Nウエイ・メモリ・ブロック307のインデックス・フィールドの数に等しい。しかしながら、マルチプレクサの使用は、必要な比較器の数を低減するため用いられることができるであろう。
その上、Nウエイ・メモリ・ブロック307は、各インデックスに関する拡張されたタグ情報を、それぞれのインデックスと関連付けられた比較器305に入力するよう構成される。
メモリ・コントローラ104からの制御ライン311は、一連の比較器305のそれぞれの比較器上の第3の入力に結合され、そこにおいてメモリ・コントローラ104は、プロセッサ101により発生された仮想アドレスが共用データ(即ち、タスク間で共用されるべきデータ)又はプライベート・データ(即ち、単一のタスクに限定されたデータ)のいずれかを指示するための制御信号を発生するよう構成されている。制御信号は、いずれの予め決められた信号であることができるであろう。
この実施形態内においては、メモリ・コントローラ104は、プロセッサ101により発生された仮想アドレスが共用データ又はプライベート・データのいずれに対応するかを、発生された仮想アドレスが所定の範囲のアドレス内であるかどうかに基づいて決定し、そこにおいて、1つの範囲の仮想アドレスは、共用データに対応し、そして別の範囲の仮想アドレスは、プライベート・データに対応する。しかしながら、仮想アドレスが共用データ又はプライベート・データのいずれに対応するかを決定する他の手段を用いることができ、例えば、プロセッサ101から直接の制御信号又は仮想アドレス・キャッシュ100からの制御信号は、共用データ又はプライベート・データに対応する1つの範囲の仮想アドレス空間内に事前プログラムされることができるであろう。
Nウエイ・メモリ・ブロック307は更に、有効ビット・チェッカ・モジュール310に結合されて、有効ビット・チェッカがNウエイ・メモリ・ブロック307の各インデックスに関して各有効ビット・フィールドのステータスをモニタリングすることを可能にして、有効ビット・チェッカ・モジュール310がキャッシュ・メモリ306に格納されたいずれの所与のビットが有効か又はダーティであるかを決定することを可能にする。
キャッシュ・メモリ306は、プロセッサにより発生された仮想アドレス内に含まれるインデックス情報を受け取るための仮想アドレス・データ・キャッシュ100の第1の入力301に結合された第1の入力を有して、アクセスと関連のキャッシュ・ラインとの間の連想を形成することを可能にする。
キャッシュ・メモリ306は、複数の比較器305からの出力に結合された第2の入力を有し、当該複数の比較器305においては、個々の比較器は、それぞれキャッシュ・メモリのキャッシュ・ラインと関連付けられる。
キャッシュ・メモリ306は、プロセッサ・バス102及びシステム・バス103のそれぞれを介してプロセッサ101とシステム・メモリ113との間でデータを交換するための第1の出力を有する。
一連の比較器305は、以下で説明するように、キャッシュ・メモリ306内のデータと関連付けられる仮想アドレスとプロセッサ101により発生された仮想アドレスとの間にマッチ(一致)があるかどうかについて決定するよう構成されている。
図4は、比較器400の個々の構成要素を示す。比較器400は、第1の比較器要素401、第2の比較器要素402、ORゲート403及びANDゲート404を含む。
第1の比較器要素401は、プロセッサ101により発生された仮想アドレスに関するタグ情報を受け取る第1の加算ノード303と、キャッシュ・メモリ306に格納されたデータに関するタグ情報を受け取るNウエイ・メモリ・ブロック307との両方に結合されて、プロセッサ101により発生された仮想アドレスに関するタグ情報と、比較器400が関連付けられるキャッシュ・ライン、即ちキャッシュ・メモリ306に格納されたデータと関連したタグ情報とを比較することを可能にする。
第2の比較器要素402は、メモリ・コントローラ104により与えられるタスクID情報を受け取る第1の加算ノード303と、キャッシュ・メモリ306に格納されたデータに関するタスクID情報を受け取るNウエイ・メモリ・ブロック307との両方に結合されて、プロセッサ101により発生された仮想アドレスに関するタスクID情報と、比較器400が関連付けられるキャッシュ・ライン、即ちキャッシュ・メモリに格納されたデータと関連したタスクID情報とを比較することを可能にする。
ORゲート403は、第2の比較器要素402の出力及びメモリ・コントローラ信号311に結合されて、第2の比較器要素402からの出力とメモリ・コントローラ信号311とに対してOR演算を実行する。
ANDゲート404は、第1の比較器要素401の出力及びORゲート403からの出力に結合される。
従って、比較器400は、第1の比較器要素401がプロセッサ101により発生された仮想アドレス・タグが比較器400が関連付けられるNウエイ・メモリ・ブロック307の拡張されたタグ308に格納されたタグ情報と同じである場合、プロセッサ101により発生され受け取られた仮想アドレスと、キャッシュ・ライン、即ちキャッシュ・メモリの中のデータの仮想アドレスとの間の肯定出力マッチを与えるよう構成されている。そして、メモリ・コントローラ制御信号311が、仮想アドレスと関連したデータを共用している(即ち、2以上のタスクがそのデータを用いる。)ことを指示するよう設定されるか、又はメモリ・コントローラ104により与えられるタスクIDが、キャッシュ・メモリ306に格納されたデータと関連付けられたタスクIDと同じであるかのいずれかである。
従って、異なるタスク間で共用されるべきであるキャッシュ・メモリ306に格納されたデータは、プロセッサ101が異なるタスク間を切り替えているとき保持されることができ、それによりプロセッサが異なるタスク間を切り替えているとき全てのキャッシュ・メモリをフラッシュする必要を避けることができる。これは、「ヒット」アクセスが既にキャッシュ・メモリに格納されているデータをタスク切り替え後に直接共用することを可能にする。
この実施形態においては、個々の比較器305は、Nウエイ・メモリ・ブロック307内の拡張されたタグのそれぞれに割り当てられる。従って、プロセッサ101により発生された仮想アドレスを受け取ると直ぐに、比較器305のそれぞれは、その受け取られた仮想アドレスと、それらが関連付けられるNウエイ・メモリ・ブロック307の拡張されたタグ308との比較を実施する。
比較器305のそれぞれからの出力は、上記で説明したようにキャッシュ・メモリに、そして第2の加算ノード304に結合される。
有効ビット・チェッカ・モジュール310は、キャッシュ・メモリに格納されたいずれの所与のビットが有効又はダーティのいずれであるかを決定するための有効ビット解像度フィールド309のそれぞれに結合される。有効ビット・チェッカ・モジュール310からの出力は、第2の加算ノード304に結合される。そして、第2の加算ノード304は、有効ビット・チェッカ・モジュール310がマッチング(一致)された仮想アドレスと関連したキャッシュ・ラインのビットが有効であることを特定し、且つそのキャッシュ・ラインについて関連の比較器305がプロセッサ101により発生された仮想アドレスが共用データとして指示されたか又はマッチングされたタスクIDを有すると決定した場合に、「ヒット」指示をプロセッサ101に対して発生するよう構成されている。
「ヒット」条件が特定された場合、そのマッチを特定した比較器305からの出力を用いて、「ヒット」データをキャッシュ・メモリ306からプロセッサ101へ出力することを開始する。