(57)【要約】【課題】ロックされたキャッシュ内のセットの置換を管理するための方法、装置、コンピュータ・プログラムおよびプロセッサを提供すること。【解決手段】プログラムによるキャッシュ・アクセスに応答して、基底ノードによってポイントされている２分木の側を識別する。２分木の識別された側へのアクセスの回数が、識別された側のプログラムに関連するセットの個数と等しいかどうかに関する判定を行う。識別された側へのアクセスの回数が、識別された側のプログラムに関連するセットの個数と等しい場合に、基底ノードは、２分木の反対側をポイントするように変更される。【選択図】図４
2007293839.tif 000002
【特許請求の範囲】
【請求項１】
ロックされたキャッシュ内のセットの置換を管理するための方法であって、
プログラムによるキャッシュ・アクセスに応答して、基底ノードによってポイントされる２分木の側を識別するステップと、
前記識別された側へのアクセスの回数が、前記識別された側の前記プログラムに関連するセットの個数と等しいかどうかを判定するステップと、
前記識別された側へのアクセスの回数が、前記識別された側の前記プログラムに関連するセットの前記個数と等しい場合に、前記２分木の反対側をポイントするように前記基底ノードを変更するステップと、
を含む、方法。
【請求項２】
前記基底ノードの値を使用して、ＬＲＵアレイを更新するステップ
をさらに含む、請求項１に記載の方法。
【請求項３】
仮想カウンタが、前記識別された側へのアクセスの回数をトラッキングする、請求項１に記載の方法。
【請求項４】
前記アクセスが、キャッシュ・ヒットまたは前記ロックされたキャッシュ内のセットの置換である、請求項１に記載の方法。
【請求項５】
前記キャッシュは、前記２分木がアンバランスになるようにロックされる、請求項１に記載の方法。
【請求項６】
前記キャッシュが、８つのセットを有する、請求項１に記載の方法。
【請求項７】
前記識別ステップ、前記判定ステップ、および前記変更ステップが、ＬＲＵコントロールによって実行される、請求項１に記載の方法。
【請求項８】
ロックされたキャッシュ内のセットを管理するためのコンピュータ・プログラムであって、
プログラムによるキャッシュ・アクセスに応答して、基底ノードによってポイントされる２分木の側を識別するステップと、
前記識別された側へのアクセスの回数が、前記識別された側の前記プログラムに関連するセットの個数と等しいかどうかを判定するステップと、
前記識別された側へのアクセスの前記回数が、前記識別された側の前記プログラムに関連するセットの前記個数と等しい場合に、前記２分木の反対側をポイントするように前記基底ノードを変更するステップと、
をコンピュータ・システムに実行させる、コンピュータ・プログラム。
【請求項９】
データのセットが保管されるキャッシュ・アレイであって、前記キャッシュが、ロックされたキャッシュである、キャッシュ・アレイと、
２分木を含む、ＬＲＵアレイと、
プログラムによるキャッシュ・アクセスに応答して、基底ノードによってポイントされる前記２分木の側を識別し、前記識別された側へのアクセスの回数が、前記識別された側の前記プログラムに関連するセットの個数と等しいかどうかを判定し、前記識別された側へのアクセスの前記回数が、前記識別された側の前記プログラムに関連するセットの前記個数と等しい場合に、前記２分木の反対側をポイントするように前記基底ノードを変更する、制御ユニットと、
を備える、キャッシング・システム。
【請求項１０】
実行ユニットと、
前記実行ユニットに結合されたメモリ・サブシステムを備えるプロセッサであって、前記メモリ・サブシステムが、
キャッシュ・アレイと、
前記実行ユニットによる前記キャッシュ・アレイのキャッシュ・アクセスに応答して、基底ノードによってポイントされる２分木の側を識別し、前記識別された側へのアクセスの回数が、前記識別された側のプログラムに関連するセットの個数と等しいかどうかを判定し、前記識別された側へのアクセスの前記回数が、前記識別された側のプログラムに関連するセットの前記個数と等しい場合に、前記２分木の反対側をポイントするように前記基底ノードを変更する、前記キャッシュ・アレイに結合されたコントローラと、
を備える、プロセッサ。
【請求項１１】
前記メモリ・サブシステムが、
前記実行ユニットから受け取られる要求に応答して前記キャッシュ・アレイにアクセスする、前記キャッシュ・アレイに結合されたロード・アンド・ストア・キュー・コントロール
をさらに含む、請求項１０に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、改良されたデータ処理システムに関し、具体的には、データを処理する方法および装置に関する。より具体的には、本発明は、キャッシュ内のデータを管理するための方法、コンピュータ・プログラム、システムおよびプロセッサに関する。
【背景技術】
【０００２】
キャッシュは、より長いアクセス時間を要するストレージ・ロケーション内のデータと比較して頻繁に使用されるデータを保管するために使用されるメモリのセクションである。プロセッサは、通常、キャッシュを使用してメモリにアクセスするために必要な平均時間を減少させる。プロセッサが、メインメモリ内のあるロケーションについて読み取りまたは書き込みをしようとする場合に、プロセッサは、まず、そのメモリ・ロケーションがキャッシュ内に存在するかどうかを調べる。プロセッサが、そのメモリ・ロケーションがキャッシュ内に存在することを見つけた場合、キャッシュ・ヒットが発生する。そうでない場合には、キャッシュ・ミスが存在することになる。プロセッサは、キャッシュ・ヒットの結果として、キャッシュ・ライン内のデータを即座に読み取るかまたは書き込む。キャッシュ・ラインとは、キャッシュに保管されているメインメモリ内のデータのインデックスを含むタグを有する、キャッシュ内のロケーションである。キャッシュ・ラインは、キャッシュ・ブロックとも称される。
【０００３】
現在、プロセッサの開発において発生している設計上の問題の１つは、メモリ待ち時間である。多くのプロセッサ設計において、メインメモリから実行ユニットへのデータ移送に要するサイクル・タイムが４００サイクルを超える可能性がある。この問題を回避するために、ローカル・レベル１（Ｌ１）キャッシュおよびローカル・レベル２（Ｌ２）キャッシュが使用される。ローカル・レベル・キャッシュは、データの時間的局所性および空間的局所性という２つの一般的なアーキテクチャ上の問題を助けるのに使用されるメモリのサブセットである。
【０００４】
ローカル・メモリ競合の問題および偽共有（ｆａｌｓｅ  ｓｈａｒｉｎｇ）の問題は、オペレーティング・システムがマルチタスキング環境、マルチスレッディング環境のような技法を使用するときに発生する可能性がある。これらの応用例は、キャッシュのスラッシングを引き起こす可能性がある。この非決定的メモリ再割振り（ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ｍｅｍｏｒｙ  ｒｅａｌｌｏｃａｔｉｏｎ）は、プリフェッチおよびキャストアウトのようなデータ技法の局所性の効率を下げる。
【０００５】
応用例は、３つのデータ・パターン・タイプに分類することができる。その３つのデータ・パターン・タイプは、「ストリーミング」、「ロッキング」、および「ｏｐｐｏｒｔｕｎｉｓｔｉｃ（便宜的）」である。「ストリーミング」は、シーケンシャルにアクセスされ、あるいは変更され、そしてその後は参照されないデータである。「ロッキング」は、複数回参照されるかまたは長いアイドル時間の後に参照される可能性がある、特にアソシアティブなデータである。割振り（ａｌｌｏｃａｔｉｏｎ）および置換（ｒｅｐｌａｃｅｍｅｎｔ）は、通常、なんらかのランダム・アルゴリズム、ラウンド・ロビン・アルゴリズム、または最長未使用時間（ＬＲＵ：Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムによって処理される。ソフトウェアは、それが使用しているデータ・パターン・タイプを検出し、ハードウェアがメモリ待ち時間を最小にするようにリソース管理アルゴリズムを使用しなければならない。セット・アソシアティブ・キャッシュでのソフトウェアによって指示されるセット割振りおよび置換の方法では、アプリケーションごとに「仮想」操作スペースが作成される。いくつかの場合に、ソフトウェアは、８ウェイ・セット・アソシアティブ・キャッシュを、５ウェイと３ウェイ、６ウェイと２ウェイ、７ウェイと１ウェイの組合せに分割することができる。キャッシュ構造は、エントリ（行（ｒｏｗ）に類似）およびウェイ（列（ｃｏｌｕｍｎ）に類似）に分割される。各エントリは、複数のウェイを有することができる。８ウェイ・セット・アソシアティブ・キャッシュでは、各エントリに８つのウェイがある。したがって、データを、１エントリ内の８つのウェイのうちの１つに保管することができる。ウェイは、セットとも称される。「ｏｐｐｏｒｔｕｎｉｓｔｉｃ（便宜的）」は、ランダム・データ・アクセスを記述する。
【０００６】
擬似ＬＲＵ（ｐ−ＬＲＵ）は、キャッシュ合同クラス（ｃａｃｈｅ ｃｏｎｇｒｕｅｎｃｅ ｃｌａｓｓ）内のラインがアクセスされる順序を記憶し、その結果、キャッシュ・ミスがあるときに、最も以前にアクセスされたラインが新しいデータに置換されるようにする、近似された置換ポリシである。キャッシュ・アクセスごとに、擬似ＬＲＵは、最後にアクセスされたアイテムが、現在は最も最近に使用されたアイテムになり、最も以前から２番目に使用されたアイテムが、現在は最も以前に使用されたデータになるように更新される。
【０００７】
完全なＬＲＵは、実施が非常に高価である。完全なＬＲＵは、Ｎウェイ・セット・アソシアティブ・キャッシュの合同クラス１つあたり少なくともｌｏｇ２（Ｎ！）ビットを必要とする（たとえば、４ウェイの場合に５ビット）。そのため、擬似ＬＲＵが一般的に妥協策として使用されている。伝統的に、擬似ＬＲＵは、Ｎ−１ビットだけ、すなわち、８ウェイ・セット・アソシアティブ・キャッシュでは７ビットだけを使用することとなる２分木アルゴリズムを用いて実施される。各ビットは、そのノードがＮ個のセットを表す、２分木の１つの内部ノードを表す。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
擬似ＬＲＵ置換の目標は、完全なＬＲＵプロセスで得られるものとできる限り近い性能を維持しながら、必要なスペース量を節約することである。しかし、擬似ＬＲＵプロセスが８ウェイ・セット・アソシアティブ・キャッシュを５ウェイと３ウェイの組合せまたは６ウェイと２ウェイの組合せのようにアンバランスな形で分割する場合、擬似ＬＲＵプロセスは、連続的なキャッシュ・ミスの場合に、完全なＬＲＵと比較して約４０％の性能しか達成することができない。さらに、現在のプロセスは、キャッシュ・ミスとキャッシュ・ヒットが組み合わされたキャッシュ・アクセスにおいて、完全なＬＲＵプロセス性能の約４０％しか達成することができない。
【課題を解決するための手段】
【０００９】
本発明は、ロッキング・キャッシュでのセットの置換を管理するためのコンピュータ実施される方法、装置、およびコンピュータ・プログラムおよびプロセッサを提供する。プログラムによるキャッシュ・アクセスに応答して、２分木の、基底ノード（base leaf）によってポイントされる側を識別する。２分木の識別された側へのアクセスの回数が、識別された側のプログラムに関連するセットの個数と等しいかどうかに関する判定を行う。識別された側へのアクセスの回数が、識別された側のプログラムに関連するセットの個数と等しい場合に、基底ノードは、２分木の反対側をポイントするように変更される。
【００１０】
例示的な実施形態に特有と思われる新規な特徴を、添付の特許請求の範囲に示す。しかし、例示的な実施形態自体ならびにその使用の好ましい態様、さらなる目的、および利点は、例示的実施形態の次の詳細な説明を添付図面とともに参照することによって最もよく理解されるであろう。
【発明を実施するための最良の形態】
【００１１】
今は図１を参照すると、本発明の諸態様を実施できるデータ処理システムのブロック図が示されている。データ処理システム１００は、本発明の実施形態のプロセスを実施することができるコンピュータの例である。図示の例では、データ処理システム１００は、ノース・ブリッジおよびメモリ・コントローラ・ハブ（ＭＣＨ）１０２と、サウス・ブリッジおよび入出力（Ｉ／Ｏ）コントローラ・ハブ（ＩＣＨ）１０４とを含むハブ・アーキテクチャを使用する。プロセッサ・ユニット１０６、メインメモリ１０８、およびグラフィックス・プロセッサ１１０は、ノース・ブリッジおよびメモリ・コントローラ・ハブ１０２に接続される。
【００１２】
グラフィックス・プロセッサ１１０を、たとえばＡｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）を介してＭＣＨに接続することができる。プロセッサ・ユニット１０６には、１以上のプロセッサのセットが含まれる。複数のプロセッサが存在するときに、これらのプロセッサを、別々のパッケージ内の別々のプロセッサとすることができる。その代わりに、これらのプロセッサを、１パッケージ内の複数のコアとすることができる。さらに、これらのプロセッサを、複数のマルチコア・ユニットとすることができる。
【００１３】
このタイプのプロセッサの例が、ヘテロジニアス・プロセッサであるＣｅｌｌ  Ｂｒｏａｄｂａｎｄ  Ｅｎｇｉｎｅ（商標）プロセッサである。このプロセッサは、分散処理を対象とするプロセッサ・アーキテクチャを有する。この構造は、多数の異なるシステム要件およびアプリケーション要件に最適に対処するために、広範囲の単一プロセッサまたは複数プロセッサとメモリとの構成の実施を可能にする。このタイプのプロセッサは、使用されるテクノロジと実施態様のコスト／性能特性とに応じて、マザーボード上その他の第２レベル・パッケージ上の、シングル・チップ、１以上のマルチチップ・モジュール、あるいは複数のシングルチップ・モジュールからなるものとすることができる。Ｃｅｌｌ Ｂｒｏａｄｂａｎｄ Ｅｎｇｉｎｅ（商標）は、１つのＰｏｗｅｒＰＣ Ｐｒｏｃｅｓｓｏｒ Ｅｌｅｍｅｎｔ（ＰＰＥ）および複数のＳｙｎｅｒｇｉｓｔｉｃ Ｐｒｏｃｅｓｓｏｒ Ｕｎｉｔ（ＳＰＵ）を有する。ＰＰＥは、メモリ保護テーブルのアドレッシングなど、システム管理機能を実行できる汎用処理ユニットである。ＳＰＵは、システム管理機能を有しない、より単純な計算ユニットである。その代わり、ＳＰＵは、アプリケーションに計算処理を提供し、ＰＰＥによって管理される。
【００１４】
図示の例では、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ１１２は、サウス・ブリッジおよびＩ／Ｏコントローラ・ハブ１０４に接続され、オーディオ・アダプタ１１６と、キーボードおよびマウス・アダプタ１２０と、モデム１２２と、読取専用メモリ（ＲＯＭ）１２４と、ハード・ディスク・ドライブ（ＨＤＤ）１２６と、ＣＤ−ＲＯＭドライブ１３０と、ユニバーサル・シリアル・バス（ＵＳＢ）ポートおよび他の通信ポート１３２と、ＰＣＩ／ＰＣＩｅデバイス１３４とは、バス１３８およびバス１４０を介してサウス・ブリッジおよびＩ／Ｏコントローラ・ハブ１０４に接続される。ＰＣＩ／ＰＣＩｅデバイスには、たとえば、イーサネット（登録商標）・アダプタ、アドイン・カード、およびノートブック・コンピュータ用のＰＣカードを含めることができる。ＰＣＩは、カード・バス・コントローラを使用するが、ＰＣＩｅは使用しない。ＲＯＭ１２４は、たとえば、フラッシュ基本入出力システム（ＢＩＯＳ）とすることができる。ハード・ディスク・ドライブ１２６およびＣＤ−ＲＯＭドライブ１３０は、たとえば、Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ（ＩＤＥ）インターフェースまたはＳｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ（ＳＡＴＡ）インターフェースを使用することができる。スーパーＩ／Ｏ（ＳＩＯ）デバイス１３６を、サウス・ブリッジおよびＩ／Ｏコントローラ・ハブ１０４に接続することができる。
【００１５】
プロセッサ・ユニット１０６上で稼動するオペレーティング・システムが、図１のデータ処理システム１００内のさまざまなコンポーネントを調整し、その制御を実施する。オペレーティング・システムは、Ｍｉｃｒｏｓｏｆｔ（Ｒ）Ｗｉｎｄｏｗｓ（Ｒ）ＸＰなどの市販オペレーティング・システムとすることができる（ＭｉｃｒｏｓｏｆｔおよびＷｉｎｄｏｗｓは、米国その他の国におけるＭｉｃｒｏｓｏｆｔ Ｃｏｒｐｏｒａｔｉｏｎの商標）。Ｊａｖａ（登録商標）プログラミング・システムなどのオブジェクト指向プログラミング・システムが、オペレーティング・システムとあいまって稼動し、データ処理システム１００上で実行されるＪａｖａプログラムまたはＪａｖａアプリケーションからオペレーティング・システムへの呼出しを提供することができる（Ｊａｖａは、米国その他の国におけるＳｕｎ Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．の商標）。
【００１６】
オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムの命令は、ハード・ディスク・ドライブ１２６などのストレージ・デバイスに配置され、プロセッサ・ユニット１０６による実行のためにメインメモリ１０８にロードすることができる。本発明の実施形態のプロセスは、コンピュータ実施される命令を使用してプロセッサ・ユニット１０６によって実行され、このコンピュータ実施される命令は、たとえばメインメモリ１０８、ＲＯＭ  １２４などのメモリ内に、または１以上の周辺デバイス内に配置することができる。
【００１７】
当業者は、このハードウェアを実施態様に応じて変更できることを諒解するであろう。フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブおよび類似物などの他の内蔵ハードウェアまたは周辺デバイスを、このハードウェアに加えてまたはその代わりに使用することができる。また、本発明の実施形態のプロセスを、マルチプロセッサ・データ処理システムに適用することができる。
【００１８】
ある例示的な実施形態においては、データ処理システム１００を携帯情報端末（ＰＤＡ）とすることができ、このＰＤＡは、オペレーティング・システム・ファイルおよび／またはユーザ生成データを保管する不揮発性メモリを提供するためにフラッシュ・メモリを用いて構成される。バス・システムは、システム、バス、Ｉ／Ｏバス、およびＰＣＩバスなど、１以上のバスからなるものとすることができる。もちろん、バス・システムを、通信ファブリックまたは通信アーキテクチャに接続された異なるコンポーネントまたはデバイスの間でのデータの転送をもたらす、任意のタイプの通信ファブリックまたは通信アーキテクチャを使用して実施することができる。通信ユニットには、モデムまたはネットワーク・アダプタなど、データを送受信するために使用される１以上のデバイスを含めることができる。メモリは、たとえば、メインメモリ１０８またはノース・ブリッジおよびメモリ・コントローラ・ハブ１０２内に見られるものなどのキャッシュとすることができる。処理ユニットには、１以上のプロセッサまたはＣＰＵを含めることができる。図１に示された例および上で説明した例は、アーキテクチャの限定を意図することを意味するものではない。たとえば、データ処理システム１００を、ＰＤＡの形をとることに加えて、タブレット・コンピュータ、ラップトップ・コンピュータ、または電話とすることもできる。
【００１９】
ここで図２に移ると、例示的実施形態によるプロセッサ・システムを示す図が示されている。プロセッサ・システム２００は、図１のプロセッサ・ユニット１０６内に存在し得るプロセッサの例である。この例では、プロセッサ・システム２００には、フェッチ・ユニット２０２と、デコード・ユニット２０４と、発行ユニット２０６と、分岐ユニット２０８と、実行ユニット２１０と、完了ユニット２１２とが含まれる。プロセッサ・システム２００には、メモリ・サブシステム２１４も含まれる。メモリ・サブシステム２１４には、キャッシュ・アレイ２１６と、ＬＲＵアレイ２１８と、ＬＲＵコントロール２２０と、Ｌ２ロード・アンド・ストア・キュー・コントロール２２２と、ディレクトリ・アレイ２２４と、置換管理テーブル（ＲＭＴ）２２６とが含まれる。プロセッサ・システム２００は、ホスト・バス２２８に接続される。さらに、メインメモリ・ユニット２３０と、バス制御ユニット２３２と、さらなるプロセッサおよび外部デバイス２３４とも、ホスト・バス２２８に接続される。
【００２０】
これらの例では、フェッチ・ユニット２０２は、プログラムの実行を高速化するために、メモリ・サブシステム２１４またはメインメモリ・ユニット２３０から命令をフェッチする。フェッチ・ユニット２０２は、命令が必要になる前に、その命令をメモリから取り出して、メモリ・サブシステム２１４またはメインメモリ・ユニット２３０などのメモリが命令に関する要求に応答するのをプロセッサが待つ必要を回避する。デコード・ユニット２０４は、実行のために命令をデコードする。言い換えると、デコード・ユニット２０４は、実行されるコマンドならびにそのコマンドが適用されるオペランドを識別する。発行ユニット２０６は、デコードされた命令を、たとえば実行ユニット２１０など、実行のためのユニットに送る。実行ユニット２１０は、発行ユニット２０６から受け取られた命令を実行するユニットの例である。実行ユニット２１０は、命令によって要求された動作および計算を実行する。たとえば、実行ユニット２１０に、浮動小数点ユニット、算術論理ユニット（ＡＬＵ）、またはなんらかの他のユニットなど、内部ユニットを含めることができる。完了ユニット２１２は、実行ユニット２１０によってアウト・オブ・オーダーで実行される可能性がある命令について、プログラム順で動作の妥当性検査をする。分岐ユニット２０８は、命令内の分岐を処理する。
【００２１】
キャッシュ・アレイ２１６には、プロセッサ・システム２００が必要とするデータのセットが含まれる。これらのセットは、ウェイとも呼ばれ、アレイ内の列に類似する。本発明の実施形態では、キャッシュ・アレイ２１６は、Ｌ２キャッシュである。ＬＲＵアレイ２１８は、Ｎウェイ・セット・アソシアティブ・キャッシュのビットを保持する。セット・アソシアティブ・キャッシュとは、同一のキャッシュ・エントリにマッピングできる、２次メモリ内の異なるデータを有するキャッシュである。８ウェイ・セット・アソシアティブ・キャッシュには、１エントリあたり８つの異なるウェイまたはセットがある。したがって、同一のエントリにマッピングされる８つの異なるデータがある可能性がある。このシステムは、キャッシュ・ヒット率性能を改善するために使用される。このアレイ内の各ビットは、対応するキャッシュ・エントリのウェイまたはセットごとにＬＲＵ情報を表すノードを有する２分木の１つの内部ノードを表す。ＬＲＵコントロール２２０は、キャッシュ・アレイ２１６に保管されたデータを管理するために使用されるこの例示的実施形態のプロセスを実施する。ＲＭＴ２２６は、セット・アソシアティブ・キャッシュ内のどのセットが置換に使用されるかを定義する。８ウェイ・セット・アソシアティブ・キャッシュでは、ＲＭＴ２２６を、８ビット幅で８エントリの深さのテーブルとすることができる。１つのエントリ内の各ビットに、１つのキャッシュ・ウェイのロッキング情報を保管することができる。その値が「１」の場合には、そのウェイを置換することができる。その値が「０」の場合には、そのウェイは置換からロックされている。ＲＭＴ２２６内の各エントリを、異なるプログラムまたは異なるメモリ空間のために割り当てることができる。ＲＭＴは、オペレーティング・ソフトウェアなど、特権モード・ソフトウェアによってプログラムされる。Ｌ２ロード・アンド・ストア・キュー・コントロール２２２は、Ｌ２キャッシュすなわちキャッシュ・アレイ２１６内のキャッシュ・セットのストレージおよび保存を制御する。
【００２２】
ディレクトリ・アレイ２２４には、キャッシュ・アレイ２１６内の対応するキャッシュ・エントリ内のデータの、キャッシュ・コヒーレンス情報、実アドレス、および有効ビットが保管される。このアレイは、キャッシュ・アレイ２１６と同一のセット・アソシアティブ構造をも有する。たとえば、８ウェイ・セット・アソシアティブ・キャッシュでは、ディレクトリ・アレイ２２４も８ウェイを有する。ウェイは、セットとも称される。このディレクトリは、１対１の一致を有する。キャッシュ・アレイ２１６がアクセスされるたびに、ディレクトリ・アレイ２２４が同時にアクセスされて、キャッシュ・ヒットまたはキャッシュ・ミスが発生するかどうか、およびエントリが有効であるかどうかが判定される。
【００２３】
メインメモリ・ユニット２３０には、実行のためにプロセッサ・システム２００によってフェッチするか取り出すことができる命令およびデータが含まれる。データがキャッシュ・アレイ２１６にフェッチされていない場合に、バス制御ユニット２３２は、バスのトラフィック・コントローラとして実行して、バスに接続されたデバイスからの要求および応答を調停する。この例では、実行ユニット２１０は、実行ユニット２１０内のＬ１データ・キャッシュ（図示せず）でミスが発生するときに、要求およびアドレスをメモリ・サブシステム２１４に送る。その結果、実行ユニット２１０は、Ｌ２ロード・アンド・ストア・キュー・コントロール２２２に、ＬＲＵアレイ２１８、ディレクトリ・アレイ２２４、およびキャッシュ・アレイ２１６にアクセスさせる。ディレクトリ・アレイ２２４内のデータを、Ｌ１キャッシュ内のキャッシュ・ミスによって持ち込むことができる。ディレクトリ・アレイ２２４は、Ｌ１キャッシュ内のミスで要求されたデータが、この例ではＬ２キャッシュとして働くキャッシュ・アレイ２１６内に置かれているかどうかを示すためにデータを返す。ディレクトリ・アレイ２２４から返されるデータには、ヒットまたはミスと、キャッシュ・エントリのウェイ内のデータが有効または無効であることと、共用、排他的、変更など、エントリのメモリ・コヒーレンス状態とが含まれる。ＬＲＵアレイ２１８は、ＬＲＵデータをＬＲＵコントロール２２０に返す。ＬＲＵコントロール２２０は、セットのロッキング情報もＲＭＴ  ２２６から取り出す。ＲＭＴ２２６は、キャッシュ・アレイ２１６内の異なる要求メモリ・アドレス範囲に関する置換の管理ストラテジ（戦略）を提供する。
【００２４】
例示的な実施形態では、キャッシュ・システムは、「ロッキング」ストラテジを使用してロッキング・キャッシュを形成する。ロッキング・キャッシュとは、１以上のキャッシュ・セットが置換されないようにされ得るキャッシュである。これらのキャッシュ・セットは、「ロックされている」と考えられる。１つの例が、オペレーティング・システムがキャッシュ・アレイ２１６内の所与のセットをロックすることを選択する第１レベル割込みハンドラである。この情報を用いて、ＬＲＵコントロール２２０は、キャッシュ・アレイ２１６について最も更新されている、最も以前に使用されたキャッシュ・セットおよび最も最近に使用されたキャッシュ・セットを計算する。
【００２５】
データに関する要求が、ディレクトリ・アレイ２２４内のヒットをもたらす場合に、ＬＲＵコントロール２２０は、ＬＲＵアレイ２１８に保管されたＬＲＵデータを更新する。この場合に、キャッシュ・アレイ２１６は、データを含み、他の情報を有しない。ディレクトリ・アレイ２２４は、アドレス、妥当性、およびキャッシュ・コヒーレンス状態など、キャッシュ・アレイ内の他のすべての情報を保持するアレイと見なすことができる。ディレクトリ・アレイおよびキャッシュ・アレイにアクセスするためのアドレスを伴うＬ１キャッシュ・ミス要求があるときに、そのアドレスが、ディレクトリ・アレイ２２４内の対応するエントリに保管されたアドレスと一致するならば、それは、Ｌ２キャッシュ・アレイ内にヒットが存在することを意味する。そうでなければ、ミスが発生する。ＬＲＵデータに対するこの更新は、Ｌ２キャッシュすなわちキャッシュ・アレイ２１６内の最も最近に使用されたセットおよび最も以前に使用されたセットである。ＬＲＵコントロール２２０は、ＬＲＵアレイ２１８に書き戻すことによって、本明細書で説明する２分木方式からＬＲＵデータを更新する。キャッシュ・アレイ２１６は、ディレクトリ・アレイ２２４でのヒットに応答して、実行ユニット２１０にデータを返す。
【００２６】
ディレクトリ・アレイ２２４でのミスが生じると、実行ユニット２１０がＬ２ロード・アンド・ストア・キュー・コントロール２２２に要求を配置することとなる。要求は、Ｌ２ロード・アンド・ストア・キュー・コントロール２２２がホスト・バス２２８からデータを取り出すまで、このコンポーネント内に留まる。このミスに応答して、ＬＲＵコントロール２２０は、ＬＲＵアレイ２１８に書き戻すことによって、２分木方式からＬＲＵデータを更新する。ＬＲＵデータのこの更新には、キャッシュ・アレイ２１６内の最も最近に使用されたキャッシュ・セットおよび最も以前に使用されたキャッシュ・セットが含まれる。ミス・データがホスト・バス２２８からＬ２キャッシュに返されたならば、ＬＲＵコントロール２２０は、このデータをＬ１キャッシュおよび実行ユニット２１０に戻して転送する。
【００２７】
ここで図３を参照すると、例示的実施形態によるキャッシュの管理に使用されるコンポーネントを示す図が示されている。この例では、これらのコンポーネントに、キャッシュ・アレイ３００、ディレクトリ・アレイ３０２、ＬＲＵアレイ３０４、および擬似ＬＲＵ（ｐ−ＬＲＵ）コントロール３０６が含まれる。キャッシュ・アレイ３００は、図２のキャッシュ・アレイ２１６に類似する。ディレクトリ・アレイ３０２は、図２のディレクトリ・アレイ２２４として実施することができる。ＬＲＵアレイ３０４は、図２のＬＲＵアレイ２１８として実施することができる。ｐ−ＬＲＵコントロール３０６は、図２のＬＲＵコントロール２２０またはその一部として実施することができる。
【００２８】
図３には、ｐ−ＬＲＵコントロール３０６が、キャッシュ・アレイ３００、ディレクトリ・アレイ３０２、およびＬＲＵアレイ３０４とどのように相互作用するかが示されている。ｐ−ＬＲＵコントロール３０６が、アドレスと一緒にロード／ストア要求を実行ユニットまたはＬ２ロード・アンド・ストア・キュー（図示せず）から受け取るときに、必ず、ｐ−ＬＲＵコントロール３０６は、ＬＲＵアレイ３０４内のデータを検査する。具体的に言うと、ｐ−ＬＲＵコントロール３０６は、ＬＲＵアレイ３０４からＬＲＵビットを取り出す。同一の個数のエントリが、Ｌ２キャッシュ・アレイ内、ディレクトリ・アレイ３０２内、およびＬＲＵアレイ３０４内に存在する。Ｌ１キャッシュ・ミス要求が、ｐ−ＬＲＵコントロール３０６まで送られるときに、この要求には、アドレスも含まれる。ｐ−ＬＲＵコントロール３０６は、３つのすべてのアレイすなわち、キャッシュ・アレイ３００、ディレクトリ・アレイ３０２、およびＬＲＵアレイ３０４でのルック・アップにこのアドレスを使用する。ディレクトリ・アレイでのヒットは、Ｌ２キャッシュ・アレイ内の対応するエントリに、キャッシュ・データを返させる。ＬＲＵアレイ３０４内の対応するエントリは、更新および置換のためにｐ−ＬＲＵコントロール３０６にＬＲＵビットを返す。ディレクトリ・アレイ３０２内でミスが発生する場合には、キャッシュ・アレイ３００内の対応するＬ２キャッシュ・アレイ・エントリからのデータは、無視される。対応するＬＲＵアレイ・エントリからのＬＲＵデータは、ミス・データが返された時の置換に使用される。
【００２９】
対応するＬＲＵエントリ内の全ビットが、置換を計算するために使用される。ｐ−ＬＲＵコントロール３０６は、これらのビットを検査して、キャッシュ・ミスの場合の置換のために、キャッシュ・アレイ３００内で最も以前に使用されたセットを選択する。キャッシュ内のセットの選択は、後で図４を参照して説明する選択プロセスを使用して行われる。新しいＬＲＵビットは、キャッシュ・ヒットまたはキャッシュ・ミスのいずれかについて、次の最も以前に使用されたセットをポイントするように更新される。次に、ｐ−ＬＲＵコントロール３０６は、新しいＬＲＵビットおよびそのアレイ書込イネーブルをＬＲＵアレイ３０４に送り返す。
【００３０】
ここで図４に移ると、例示的実施形態による２分木を示す図が示されている。２分木またはルート木４００には、ノード４０２〜４１４が含まれる。２分木４００は、図３のＬＲＵアレイ３０４など、ＬＲＵアレイ内で実施できる２分木の絵図表現である。この木は、これらの例では、キャッシュ内のどのセットを置換しなければならないかを判定するために使用される。ノード４０２は、基底ノードであり、ビット０に対応し、ノード４０４は、ビット１に対応し、ノード４０６は、ビット２に対応し、ノード４０８は、ビット３に対応し、ノード４１０は、ビット４に対応し、ノード４１２は、ビット５に対応し、ノード４１４は、ビット６に対応する。
【００３１】
末端のノードであるノード４０８〜４１４は、これらの例ではセットＡ〜Ｈをポイントする。もちろん、特定の実施形態に応じて、異なる個数のセットを実施することができる。ノード４０２のビット０が、０と等しくなるようにセットされている場合には、このプロセスは、左側のノード４０４に進む。ノード４０２のビット０が、１と等しくなるようにセットされている場合には、このプロセスは、この木の右側のノード４０６に進む。２分木４００内で表されるセットがアクセスされるときに、必ず、図３のｐ−ＬＲＵコントロール３０６などのｐ−ＬＲＵコントロールが、そのセットから離れてポイントするように、対応するＬＲＵビットをセットする。
【００３２】
例示的な実施形態では、２分木４００は、ｐ−ＬＲＵ内の２分木アルゴリズムによる使用のために実施される。キャッシュ内にロッキングが存在するときには、セットのアンバランスな置換が発生し得る。というのは、２分木４００の片側が、２分木４００内のセットがアプリケーションによる使用のためにロックされるときに、より多くのアクセスを有する可能性があるからである。２分木４００は、２つの側を有する。一方の側すなわち左側は、ノード４０４、４０８、および４１０を含み、他方の側すなわち右側は、ノード４０６、４１２、および４１４を含み、左側に対する反対側である。重い側は、２分木のうちで、ロックされたより多くのセットを有した側である。
【００３３】
現在の擬似ＬＲＵシステムは、図３のキャッシュ・アレイ３００などのキャッシュを、アンバランスな組合せに分割する。たとえば、８ウェイ・アソシアティブ・キャッシュが、５ウェイと３ウェイまたは６ウェイと２ウェイに分割される場合がある。たとえば、セットＡ、Ｂ、Ｃ、Ｄ、およびＥが、プログラムＸによる使用のためにロックされ、セットＦ、Ｇ、およびＨが、プログラムＹによる使用のためにロックされる。プログラムＸは、セットＡ、Ｂ、Ｃ、Ｄ、およびＥだけを置換できるので、ＬＲＵビット（０，１，３，４）だけが、置換のためにｐ−ＬＲＵによって更新され得る。ＬＲＵビット（２，５，６）は、無視される。その結果、セットＥは、この例では１つおきのキャッシュ・ミスについて置換のために選択される。キャッシュ・ミスが発生する場合に、セットＤが選択される。Ｐ−ＬＲＵは、セットＤにつながるビットを反対の値に反転し、ビット０が論理１になることをもたらす。
【００３４】
この例に存在するロッキングのゆえに、ビット０が論理１であるときには、ｐ−ＬＲＵによって、セットＥだけが置換のために選択される。次のミスの時には、ｐ−ＬＲＵ制御ビット０は、論理０に戻ってセットされ、セットＢが選択される。次のミスは、ビット０を論理１に変化させ、もう一度セットＥが選択されることをもたらす。ミスが発生するときに、ｐ−ＬＲＵコントロールは、ビット０が論理０と等しくなるようにセットされている側の異なるセットを選択するが、ビット０が論理１と等しくなるようにセットされているときには、ｐ−ＬＲＵコントロールは、必ずセットＥを選択する。
【００３５】
同一の合同クラスへの１０回の連続するキャッシュ・ミスについて、各セットは、完全なＬＲＵでは２回だけ置換のために選択されなければならない。この例では、ｐ−ＬＲＵは、セットＥを５回選択する。したがって、完全なＬＲＵ性能の約４０％だけが、連続するキャッシュ・ミスの場合に達成される。このワースト・ケースは、２分木の左側または右側のいずれかの４つのセットが予約されるかロックされ、２分木の反対側で１つのセットだけが予約されるかロックされる、すべての事例にあてはまる可能性がある。
【００３６】
例示的実施形態は、仮想カウンタ４１６を使用することによって、セットのロッキングが存在するキャッシュ内のセットのこのアンバランスな置換を減らす。仮想カウンタ４１６は、これらの例では図３のＬＲＵアレイ３０４内に置かれる。これらの例では、仮想カウンタ４１６は、図３のＬＲＵアレイ３０４内のエントリごとにビット０、１、および４を使用することによって形成される。このカウンタは、通常のカウンタと同一の形ではカウントしない仮想カウンタである。たとえば、ＬＲＵアレイの各エントリのビット０は、ビット０、１、４＝「０１１」でない限り、「１」に変化する。仮想カウンタ４１６は、ノード４０２のビット０が同一の合同クラスへのすべてのキャッシュ・アクセスで更新されないことを強制するために使用される。これらの例では、合同クラスは、キャッシュ・アレイのエントリまたは行である。
【００３７】
さらに、アドレスの同一のより低いセットを有するデータについて、同一のキャッシュ・エントリにマッピングされる。８ウェイ・セット・アソシアティブ・キャッシュでは、同一キャッシュ・エントリ内に８つの異なるデータ・ストアを設けることができる。これらの例では、キャッシュ・アクセスは、あるセットのキャッシュ・ヒットまたは置換が発生する場合に発生する。
【００３８】
これらの例示的な例では、ノード４０２のビット０は、軽い側よりも重い側へのより多くのアクセスが発生したことを仮想カウンタ４１６が示すときに、更新される。具体的に言うと、この例では、仮想カウンタ４１６は、重い側で４つのヒットが発生した後に、ノード４０２のビット０を論理１に変更する。図示の例では、４つのセットが、ＬＲＵビット０の片側でロックされ、１つのセットが、反対側でロックされている。ＬＲＵビット１、３、および４など、残りのビットは、普通のＬＲＵ方式と同一の形で切り替えられる。これらの例示的な例では、ビット０だけが、仮想カウンタによって実施される。
【００３９】
図示の実施形態は、追加ＬＲＵビットを追加せずに、この擬似ＬＲＵシステムの性能を改善する。これらの例示的な例では、仮想カウンタ４１６によって示されているように、既存のビットが仮想カウンタとして使用される。２分木４００に使用される仮想カウンタは、これらの例でｐ−ＬＲＵコントロールがＬＲＵビット０の重い側を４回選択した後に、ｐ−ＬＲＵコントロール内のロジックが、ＬＲＵビット０のビット・サイズを選択することを保証する。この例では、ノード４０２内のＬＲＵビット０、ノード４０４内のビット１、およびビット４を有する仮想カウンタ４１６が「０１１」と等しくなるようにセットされているときに、ｐ−ＬＲＵは、ノード４０２内のＬＲＵビット０を論理１に切り替えて、置換に関する次の最近に使用されたセットとしてセットＥを選択する。その結果、これらの例では、ｐ−ＬＲＵコントロールがノード４０２内のビット０を４回選択した後に、そのｐ−ＬＲＵコントロールは、セットＡ〜Ｄ内のデータの選択を繰り返すのではなく、次に最近に使用されたセット置換としてセットＥを選択する。
【００４０】
次に図５に移ると、例示的実施形態によるキャッシュ・ミスの場合の式を示す図が示されている。セクション５００および５０２の式は、図３のｐ−ＬＲＵコントロール３０６などのｐ−ＬＲＵコントロール内で実施できる式の例である。新しいＬＲＵビットを計算する式が、セクション５００に見られ、書込パルス式が、セクション５０２に見られる。セクション５００の式は、キャッシュ・ミスの場合に新しいＬＲＵビット０、１、３、および４を計算するためにｐ−ＬＲＵコントロールによって使用される式を示す。ＬＲＵビット１、３、および４の式は、普通のｐ−ＬＲＵコントロールによって使用されるものと同一である。
【００４１】
キャッシュ・ミスまたはキャッシュ・ヒットが発生するたびに、ＬＲＵデータが、置換について計算するために使用される。このデータは、同一キャッシュ・エントリへの次のアクセスのために更新するためにも必要である。これらの式は、更新されたＬＲＵビットがｐ−ＬＲＵコントロールによってどのように生成されるかを示す。ＬＲＵビット０について、ｐ−ＬＲＵコントロールは、古いＬＲＵビット０、１、および４の値＝「０１１」のときに限って１に変更される。書込パルス式は、キャッシュ・アレイへのアクセスが発生するのでＬＲＵアレイを更新する必要が存在するときに、必ず使用される。
【００４２】
セクション５０２の書込パルス式は、更新される必要があるＬＲＵビットだけがＬＲＵアレイに書き戻されるようにし、電力を節約するために使用される。更新される必要がないＬＲＵビットについて、これらのＬＲＵビットは、ＬＲＵアレイに書き戻されない。書込パルス式は、Ｌ２キャッシュへのアクセスが発生するときに、必ず、更新されるＬＲＵごとに電力トークンを生成する。これらのトークンは、どのビットをｐ−ＬＲＵコントロールによってＬＲＵアレイに書き戻さなければならないかを判定するために使用される。したがって、Ｌ２キャッシュへのアクセスが発生しないときには、ＬＲＵアレイを更新する必要は存在しない。
【００４３】
ここで図６に移ると、例示的実施形態によるキャッシュ・ヒットの場合の式を示す図が示されている。セクション６００および６０２の式は、ＬＲＵビットを実施する際に使用される式の例である。これらの式は、図３のｐ−ＬＲＵコントロール３０６などのＬＲＵコントロール内で実施することができる。新しいＬＲＵビットを計算する式が、セクション６００に見られ、書込パルス式が、セクション６０２に見られる。図６のセクション６００の式は、キャッシュ・ヒットの場合のｐ−ＬＲＵコントロールによる新しいＬＲＵビット０、１、３、および４の計算の式を示す。
【００４４】
たとえば、ＬＲＵ＿ｂｉｔ０には、「０」または「１」のいずれかである、ＬＲＵビット０の値が含まれる。ＬＲＵビット１、３、および４の式は、普通のｐ−ＬＲＵコントロールによって使用されるものと同一である。その結果、ＬＲＵビットが何であるかにかかわりなく、セットＡ、Ｂ、またはＣでキャッシュ・ヒットがあるときには必ず、ｐ−ＬＲＵコントロールＬＲＵビット１、３、および４が、更新される。ＬＲＵビット０は、セットＤがヒットであり、かつ、ＬＲＵビット０、１、および４が「０１１」と等しいときに限って更新される。セクション６０２の書込パルス式は、キャッシュ・アレイへのアクセスが発生するのでＬＲＵアレイを更新する必要が存在するときに、必ず使用される。たとえば、ＬＲＵ０＿ＷＲ＿ＥＮは、ＬＲＵ＿ｂｉｔ０の電力トークンである。
【００４５】
ここで図７に移ると、例示的実施形態によるＬＲＵビットの定義を示す図が示されている。この例では、テーブル７００は、異なるセット名に関するＬＲＵアレイ内のＬＲＵビットを示す。これらのセット名は、この例では、図４の２分木４００からのセットＡ〜Ｈに対応する。この例では、エントリ７０２〜７１６が、それぞれセットＡ〜Ｈに対応する。これらのエントリ内のＬＲＵビットの値は、図４の２分木４００内で特定のセットに達するために必要な値に対応する。
【００４６】
ここで図８に移ると、例示的実施形態による、図５および６で説明した式に基づくＬＲＵビットに対する更新を示す図が示されている。テーブル８００では、エントリ８０２〜８１０に、それぞれセットＢ、Ｃ、Ａ、Ｄ、およびＥの更新されたＬＲＵビットが含まれる。これらのビットは、図３のＬＲＵアレイ３０４に見られるビットの例である。ｐ−ＬＲＵコントロールは、これらの例ではＬＲＵビット０、ビット１、およびビット４を用いる仮想カウンタを使用してこれらの更新を行う。この形で、実際のＬＲＵの実施態様に関して高められた性能が達成される。この高められた性能は、通常はチップ上の追加スペースを必要とするはずである。
【００４７】
キャッシュ・ヒットの場合に、ｐ−ＬＲＵコントロールは、キャッシュ・ヒットがセットＤに存在し、セットＤが最も以前に使用されたセットであるときに限ってＬＲＵビット０に１をセットする。この例では、セットＤは、図４で説明した例を参照しなおすと、この２分木の重い側にある。その例から、セットＡ、Ｂ、Ｃ、Ｄ、およびＥは、プログラムＸによる使用のためにロックされ、セットＦ、Ｇ、およびＨは、プログラムＹによる使用のためにロックされている。より軽い側は、２分木の、特定のプログラムのためにロックされているより少数のセットを有する側である。ｐ−ＬＲＵコントロールが、論理１と等しくなるようにＬＲＵビット０をセットしたならば、このビットは、より軽い側のセットが置換のために選択されるまで、１と等しいままになる。
【００４８】
ここで図９に移ると、例示的実施形態によるセットを置換するための仮想カウンタの使用を示すテーブルが示されている。この例では、テーブル９００は、ＬＲＵビット０、ビット１、およびビット４を用いる仮想カウンタの使用を示す。この例では、エントリ９０２〜９１４が存在する。各エントリには、アクション、現在のＬＲＵビット、置換されるセット、および更新されたＬＲＵビットが含まれる。ｐ−ＬＲＵコントロールは、仮想カウンタを使用してＬＲＵビットを更新する。この特定の例からわかるように、ｐ−ＬＲＵコントロールは、現在使用されているプロセスについて発生するはずの４回ではなく、２回、置換のためにセットＥを選択する。その結果、この仮想カウンタ方式は、通常の擬似ＬＲＵ実施態様に対する５０％の改善をもたらす。
【００４９】
ここで図１０に移ると、例示的実施形態によるＬＲＵアレイを管理するプロセスの流れ図が示されている。図１０に示されたプロセスは、図３のｐ−ＬＲＵコントロール３０６などのＬＲＵユニット内で実施することができる。具体的に言うと、このプロセスは、ＬＲＵコントロールがＬＲＵアレイおよび置換管理テーブルとどのように相互作用するかのタイミングを示す。
【００５０】
このプロセスは、要求側からロード／ストア要求およびアドレスを受け取ること（ステップ１０００）によって開始される。これらの例では、要求側は、たとえば、実行ユニットまたはＬ２ロード・アンド・ストア・キュー・コントロールのいずれかである。次に、このプロセスは、ＬＲＵアレイおよびＲＭＴテーブルにアクセスする（ステップ１００２）。このアクセスは、第１プロセッサ・サイクル中に発生する。ＬＲＵデータおよびＲＭＴデータが、入手され、このプロセスは、ＬＲＵデータおよびＲＭＴデータを検査して、キャッシュ・アレイ内の最も以前に使用されたセットを識別する（ステップ１００４）。このステップは、第２プロセッサ・サイクル中に発生する。
【００５１】
その後、このプロセスは、ＬＲＵデータおよびＲＭＴデータを使用して、次に最も以前に使用されたセットおよびそのセットに関連するＬＲＵデータを識別する（ステップ１００６）。この特定のステップは、これらの例ではプロセッサ内のサイクル３で発生する。次に、このプロセスは、新しいデータを用いてＬＲＵアレイを更新し（ステップ１００８）、このプロセスは、その後、終了する。新しいデータとは、すべてのキャッシュ・アクセス時に図５および図６に示された式によって生成される新しいＬＲＵデータである。図５で生成されるデータは、キャッシュ・ミス用であり、図６で生成されるデータは、キャッシュ・ヒット用である。
【００５２】
ここで図１１を参照すると、例示的実施形態による仮想カウンタを用いて２分木の側を選択するプロセスの流れ図が示されている。図１１に示されたプロセスは、図３のｐ−ＬＲＵコントロール３０６などのコンポーネント内で実施することができる。
【００５３】
このプロセスは、セットがキャッシュ内でロックされているときのセットへのキャッシュ・アクセスに応答して開始される。これらの例でのアクセスは、セットでのキャッシュ・ヒットまたはセットの置換である。このプロセスは、セットへのキャッシュ・アクセスが発生するのを待つこと（ステップ１１００）によって開始される。これらの例では、キャッシュ・アクセスは、実行されつつあるプログラムに関する。キャッシュ・アクセスが発生するときに、このプロセスは、２分木の基底ノードによってポイントされている側を識別する（ステップ１１０２）。基底ノードは、ビット０を含む、２分木内のノードである。その後、このプロセスは、仮想カウンタを増分する（ステップ１１０４）。仮想カウンタは、たとえば図４の仮想カウンタ４１６であり、図３のＬＲＵアレイ３０４などのＬＲＵアレイ内で維持される。このプロセスは、セットへのアクセスが発生するたびに、このカウンタを増分する。仮想カウンタが、識別された側のセットの個数と等しいかどうかに関する判定を行う（ステップ１１０６）。
【００５４】
仮想カウンタが、セットの個数と等しい場合に、このプロセスは、２分木の反対側をポイントするように、基底ノードの値を変更する（ステップ１１０８）。その後、このプロセスは、０と等しくなるように仮想カウンタをリセットし（ステップ１１１０）、終了する。ステップ１１０６で行われる判定に戻って、仮想カウンタがセットの個数と等しくない場合には、このプロセスは終了する。
【００５５】
例示的な実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェア要素とソフトウェア要素の両方を含む実施形態の形をとることができる。この例示的実施形態は、ソフトウェアで実施され、このソフトウェアは、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むが、これらに限定はされない。
【００５６】
さらに、例示的な実施形態は、コンピュータまたは任意の命令実行システムによってまたはこれらとともに使用されるプログラム・コードを供給するコンピュータ使用可能媒体またはコンピュータ可読媒体からアクセス可能なコンピュータ・プログラム製品の形をとることができる。この説明において、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、命令実行装置、または命令実行デバイスによってまたはこれらとともに使用されるプログラムを含み、保管し、通信し、伝搬し、または転送することができるすべての有形の装置とすることができる。
【００５７】
媒体は、電子の、磁気の、光の、電磁気の、赤外線の、または半導体のシステム（または装置もしくはデバイス）、あるいは伝搬媒体とすることができる。コンピュータ可読媒体の例に、半導体メモリまたはソリッド・ステート・メモリ、磁気テープ、取外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、磁気ディスク、および光ディスクが含まれる。光ディスクの現在の例には、コンパクト・ディスク読取専用メモリ（ＣＤ−ＲＯＭ）、書き換え可能なコンパクト・ディスク（ＣＤ−Ｒ／Ｗ）、およびＤＶＤが含まれる。
【００５８】
プログラム・コードの保管および／または実行に適切なデータ処理システムには、システム・バスを介してメモリ要素に直接にまたは間接に結合された少なくとも１つのプロセッサが含まれる。メモリ要素には、プログラム・コードの実際の実行中に使用されるローカル・メモリと、大容量記憶装置と、実行中にコードを大容量記憶装置から取り出さなければならない回数を減らすために少なくとも一部のプログラム・コードの一時的保管を提供するキャッシュ・メモリとを含めることができる。
【００５９】
入出力（Ｉ／Ｏ）デバイス（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれに限定されない）を、直接にまたはＩ／Ｏコントローラを介してのいずれかでこのシステムに結合することができる。
【００６０】
データ処理システムが私有ネットワークまたは公衆ネットワークを介して他のデータ処理システム、リモート・プリンタ、またはストレージ・デバイスに結合されることを可能にするために、ネットワーク・アダプタをこのシステムに結合することもできる。現在使用可能なタイプのネットワーク・アダプタのごく一部の例として、モデム、ケーブル・モデム、およびイーサネット（登録商標）・カードを挙げることができる。
【００６１】
例示的実施形態の説明は、例示および説明のために提示されたものであり、網羅的であること、開示される形態での例示的実施形態に限定されることは意図されていない。多数の修正形態および変形形態が、当業者に明白であろう。実施形態は、例示的実施形態の原理、実用的応用例を最もよく説明するため、および企図される特定の使用に適するさまざまな変更を伴うさまざまな実施形態のために例示的実施形態を当業者が理解できるようにするために選択され、説明された。
【図面の簡単な説明】
【００６２】
【図１】例示的実施形態を実施できるデータ処理システムを示すブロック図である。
【図２】例示的実施形態によるプロセッサ・システムを示す図である。
【図３】例示的実施形態によるキャッシュの管理に使用されるコンポーネントを示す図である。
【図４】例示的実施形態による２分木を示す図である。
【図５】例示的実施形態によるキャッシュ・ミスの場合の式を示す図である。
【図６】例示的実施形態によるキャッシュ・ヒットの場合の式を示す図である。
【図７】例示的実施形態によるＬＲＵビットの定義を示す図である。
【図８】例示的実施形態による、図５および６で説明した式に基づくＬＲＵビットに対する更新を示す図である。
【図９】例示的実施形態によるセットを置換するための仮想カウンタの使用を示すテーブルである。
【図１０】例示的実施形態によるＬＲＵアレイを管理するプロセスを示す流れ図である。
【図１１】例示的実施形態による仮想カウンタを用いて２分木の側を選択するプロセスを示す流れ図である。
【符号の説明】
【００６３】
１００  データ処理システム
１０２  ノース・ブリッジおよびメモリ・コントローラ・ハブ
１０４  サウス・ブリッジおよび入出力（Ｉ／Ｏ）コントローラ・ハブ
１０６  プロセッサ・ユニット
１０８  メインメモリ
１１０  グラフィックス・プロセッサ
１１２  ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ
１１６  オーディオ・アダプタ
１２０  キーボードおよびマウス・アダプタ
１２２  モデム
１２４  読取専用メモリ（ＲＯＭ）
１２６  ハード・ディスク・ドライブ（ＨＤＤ）
１３０  ＣＤ−ＲＯＭドライブ
１３２  ＵＳＢポートその他の通信ポート
１３４  ＰＣＩ／ＰＣＩｅデバイス
１３６  スーパーＩ／Ｏ（ＳＩＯ）デバイス
１３８  バス
１４０  バス
２００  プロセッサ・システム
２０２  フェッチ・ユニット
２０４  デコード・ユニット
２０６  発行ユニット
２０８  分岐ユニット
２１０  実行ユニット
２１２  完了ユニット
２１４  メモリ・サブシステム
２１６  キャッシュ・アレイ
２１８  ＬＲＵアレイ
２２０  ＬＲＵコントロール
２２２  Ｌ２ロード・アンド・ストア・キュー・コントロール
２２４  ディレクトリ・アレイ
２２６  置換管理テーブル（ＲＭＴ）
２２８  ホスト・バス
２３０  メインメモリ・ユニット
２３２  バス制御ユニット
２３４  さらなるプロセッサおよび外部デバイス
３００  キャッシュ・アレイ
３０２  ディレクトリ・アレイ
３０４  ＬＲＵアレイ
３０６  擬似ＬＲＵ（ｐ−ＬＲＵ）コントロール
４００  ２分木
４０２  ノード
４０４  ノード
４０６  ノード
４０８  ノード
４１０  ノード
４１２  ノード
４１４  ノード
４１６  仮想カウンタ
５００  セクション
５０２  セクション
６００  セクション
６０２  セクション
７００  テーブル
７０２  エントリ
７０４  エントリ
７０６  エントリ
７０８  エントリ
７１０  エントリ
７１２  エントリ
７１４  エントリ
７１６  エントリ
８００  テーブル
８０２  エントリ
８０４  エントリ
８０６  エントリ
８０８  エントリ
８１０  エントリ
９００  テーブル
９０２  エントリ
９０４  エントリ
９０６  エントリ
９０８  エントリ
９１０  エントリ
９１２  エントリ
９１４  エントリ
１０００  要求側からロード／ストア要求およびアドレスを受け取るステップ
１００２  ＬＲＵアレイおよびＲＭＴテーブルにアクセスするステップ
１００４  ＬＲＵデータおよびＲＭＴデータを検査するステップ
１００６  新しいＬＲＵデータを識別するステップ
１００８  新しいデータを用いてＬＲＵを更新するステップ
１１００  キャッシュ・アクセスを待つステップ
１１０２  基底ノードによってポイントされている側を識別するステップ
１１０４  仮想カウンタを増分するステップ
１１０６  仮想カウンタがセットの個数と等しいかどうかを判定するステップ
１１０８  反対側をポイントするように基底ノードの値を変更するステップ
１１１０  仮想カウンタをリセットするステップ
【図１】
2007293839.tif 000003
【図２】
2007293839.tif 000004
【図３】
2007293839.tif 000005
【図４】
2007293839.tif 000006
【図５】
2007293839.tif 000007
【図６】
2007293839.tif 000008
【図７】
2007293839.tif 000009
【図８】
2007293839.tif 000010
【図９】
2007293839.tif 000011
【図１０】
2007293839.tif 000012
【図１１】
2007293839.tif 000013