(57)【特許請求の範囲】
【請求項１】
キャッシュの内容の少なくとも部分を、キャッシュから分離した場所に格納するステップと、
前記キャッシュから電源を切るステップと、
前記キャッシュへ電源を回復するステップと、
前記キャッシュから分離して格納された前記キャッシュの内容の部分で、前記キャッシュを再配置するステップと、を含み、
前記格納するステップが、
回復タグを作成し、それぞれの前記回復タグは前記キャッシュからのいくらかの内容を含むステップと、
前記回復タグを前記キャッシュから分離した場所に格納するステップと、を含み、
前記作成するステップが、
以前のキャッシュアクセスのヒストリリストを用いて前記回復タグを作成するステップと、
以前のキャッシュアクセスの前記ヒストリリストの重複、類似または部分的に一致するエントリを除去するステップと、を含む、キャッシュを再配置する方法。
【請求項２】
前記再配置のステップが、
前記回復タグを読み出すステップと、
前記回復タグを使用してデータを前記キャッシュ内へロードするステップと、を含む、請求項１に記載の方法。
【請求項３】
前記キャッシュが、１つまたは複数のタグメモリおよび１つまたは複数のデータメモリを有し、
前記切断のステップが、前記タグメモリのうち少なくとも１つを電源オンで残すこと、および残りの前記タグメモリおよび全ての前記データメモリの電源オフを含み、
前記再配置のステップが、
前記少なくとも１つの電源オンのタグメモリからタグを読み出すステップと、
前記読み出されたタグを使用してデータを前記キャッシュ内へロードするステップと、を含む、請求項１に記載の方法。
【請求項４】
前記読み出しのステップが、前記少なくとも１つの電源オンのタグメモリからアドレスを読み出すステップを含み、
前記使用のステップが、
前記アドレスからデータを取り出すステップと、
前記取り出されたデータを前記キャッシュへ書き込むステップと、を含む、請求項３に記載の方法。
【請求項５】
前記格納のステップが、
前記キャッシュからタグを読み出し、回復タグを生成するステップと、
前記回復タグを前記キャッシュから分離した場所に格納するステップと、を含み、
前記再配置のステップが、
前記回復タグを読み出すステップと、
前記回復タグを使用してデータを前記キャッシュ内へロードするステップと、を含む、請求項１に記載の方法。
【請求項６】
前記格納のステップが、
前記回復タグを前記キャッシュから分離した場所に格納する前に、前記回復タグを圧縮するステップをさらに含む、請求項５に記載の方法。
【請求項７】
前記キャッシュが、高位レベルキャッシュおよび複数の低位レベルキャッシュを有するマルチレベルキャッシュであり、
前記切断のステップが、前記高位レベルキャッシュの電源オフおよび前記低位レベルキャッシュのうち少なくとも１つの電源維持を含む、請求項１に記載の方法。
【請求項８】
前記再配置のステップが、
電源を維持する少なくとも１つの前記低位レベルキャッシュ内でタグおよびデータ情報を生成するステップと、
前記タグおよびデータ情報を前記高位レベルキャッシュへ送信するステップと、
前記タグおよびデータ情報を前記高位レベルキャッシュへ書き込むステップと、を含む、請求項７に記載の方法。
【請求項９】
前記再配置のステップが、
前記電源を維持する少なくとも１つの低位レベルキャッシュ内で回復タグを生成し、それぞれの前記回復タグは前記低位レベルキャッシュからのいくつかの内容を含むステップと、
前記回復タグによりリロードコマンドを前記高位レベルキャッシュへ発行するステップと、
前記リロードコマンドを使用して、前記高位レベルキャッシュによりデータを要求するステップと、
前記要求されたデータを前記高位レベルキャッシュへ書き込むステップと、を含む、請求項７に記載の方法。
【請求項１０】
前記書き込みのステップが、前記高位レベルキャッシュへの階層ディレクトリ情報の書き込みを含む、請求項８に記載の方法。
【請求項１１】
データおよび前記データに関するタグを格納するよう構成されるキャッシュと、
前記キャッシュから分離して置かれ、前記キャッシュから電源が切られたとき前記キャッシュからタグを格納するよう構成されたメモリと、
前記キャッシュに電源が回復されたとき、前記タグを前記キャッシュから前記メモリへ書き込むよう構成されたメモリコントローラと、
以前のキャッシュアクセスのヒストリリストを用いて前記タグに基き回復タグを作成し、以前のキャッシュアクセスの前記ヒストリリストの重複、類似または部分的に一致するエントリを除去し、前記回復タグを前記メモリに書き込むよう構成されたタグ転送エンジンと、
前記回復タグを前記メモリから読み出し、前記回復タグを使用してデータを前記キャッシュ内へロードするよう構成された電源オンリロードエンジンと、を備える、キャッシュを再配置する機器。
【請求項１２】
前記キャッシュが１つまたは複数のタグメモリ、および１つまたは複数のデータメモリを有し、少なくとも１つの前記タグメモリが電源を保持し、一方で残りの前記タグメモリおよび前記データメモリが電源オフされ、
前記電源オンリロードエンジンが、前記電源を保持する少なくとも１つのタグメモリから前記タグを読み出すようさらに構成される、請求項１１に記載の機器。
【請求項１３】
前記タグ転送エンジンが、前記回復タグを圧縮するようさらに構成される、請求項１１に記載の機器。
【請求項１４】
前記キャッシュが、高位レベルキャッシュおよび複数の低位レベルキャッシュを有し、
前記低位レベルキャッシュのうち少なくとも１つが電源を維持し、前記高位レベルキャッシュおよび残りの前記低位レベルキャッシュは電源オフされ、
前記電源を維持する少なくとも１つの前記低位レベルキャッシュが、前記データおよび前記タグを前記高位レベルキャッシュへ送信するよう構成された、請求項１１に記載の機器。
【請求項１５】
前記電源を維持する少なくとも１つの低位レベルキャッシュが、
そのタグ情報に基き回復タグを生成し、
前記回復タグに基きリロードコマンドを前記高位レベルキャッシュへ発行するようさらに構成された、請求項１４に記載の機器。
【請求項１６】
前記電源オンリロードエンジンが、要求されたデータに前記リロードコマンドを使用するようさらに構成された、請求項１５に記載の機器。
【請求項１７】
プリフェッチコマンドを生成し、前記プリフェッチコマンドはデータをロードする命令を含み、
前記プリフェッチコマンドを前記キャッシュに送信するよう構成されたキャッシュクライアントをさらに備える、請求項１１に記載の機器。
【請求項１８】
キャッシュを再配置するための汎用コンピュータによる実行の命令のセットを格納する一時的でないコンピュータ可読な記憶媒体であって、前記命令のセットは、
前記キャッシュから分離した場所にキャッシュの内容の少なくとも部分を格納するためのコードセグメントの格納と、
回復タグの作成のためのコードセグメント作成であって、それぞれの前記回復タグが前記キャッシュからのいくらかの内容を含み、以前のキャッシュアクセスのヒストリリストを用いるためのコードセグメントの使用と、以前のキャッシュアクセスの前記ヒストリリストの重複、類似または部分的に一致するエントリの除去のための第一のコードセグメントの切断を含むところのコードセグメントの作成と、
前記キャッシュから電源を切るための第二のコードセグメントの切断と、
前記キャッシュへ電源を回復するためのコードセグメントの回復と、
前記キャッシュから分離して格納されたキャッシュの内容の部分で、前記キャッシュを再配置するためのコードセグメントの再配置と、を含み、
前記コードセグメントの格納が、前記キャッシュから前記分離した場所に前記回復タグを格納する、一時的でないコンピュータ可読な記憶媒体。
【請求項１９】
前記命令のセットが、装置の製造に使用されるハードウェア記述言語（ＨＤＬ）命令である、請求項１８に記載の一時的でないコンピュータ可読な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１０年３月３日出願の米国特許出願第１２／７１６，３９１号の権利を主張し、その内容は、参照により本明細書に完全に説明されたように、本明細書に組み込まれる。
【０００２】
本発明は、コンピュータのキャッシュメモリに関し、とりわけ、電源が切られ、それからキャッシュメモリへ回復された後にキャッシュメモリをリロードする方法および機器に関する。
【背景技術】
【０００３】
コンピュータでは、キャッシュは、最近アクセスされたデータを保持する、プロセッサのメインメモリから分離した、小さく、迅速なメモリである。キャッシュを用いることで、同一のデータのその後の要求にかかるアクセス時間が短くなる。要求されたデータまたはメモリの箇所がサーチされるキャッシュ内に見出されるとき、「キャッシュヒット」が起こる。要求されたデータまたはメモリの箇所が見出されないとき、それは「キャッシュミス」とみなされ、そのデータは、おそらくキャッシュ内に新しいエントリを割り当てられる。キャッシュがすでに一杯である場合、既存のエントリの除去に、多くの方策のうちの１つが採用される。
【０００４】
キャッシュは、１つまたは複数のタグ格納部および１つまたは複数のデータ格納部を有してもよい。タグ格納部は、タグを有する。一般的に、タグを使用して、キャッシュされたデータ片を一意的に識別し、キャッシュされたデータが入ってくる要求を満たすために使用できるかどうかを判断してもよい。１つの実施では、タグは、キャッシュされたデータのメインメモリの位置のインデックスを有してもよい。他の実施では、変換索引バッファ（ＴＬＢ）タイプのキャッシュ内で、タグはメインメモリの位置を直接インデックス化しないかもしれないが、仮想アドレス、および特定のメインメモリアドレスに直接関連しない他の要求ベースの情報で構成されてもよい。データ格納部は、メインメモリからのデータのコピーを有する。データ格納部はまた、プロセッサが生成した、メインメモリにまだ書き出されていないデータを（例えば、ライトバックキャッシュで）有してもよい。そのようなデータは、電源がキャッシュから切られる前に、メモリに書き出されなければならない。
【０００５】
コンピュータの電力消費を減少させるため、構成部品（内部に内蔵された構成部品を含む）を、空き時間の間、低電力状態または完全に電源オフの状態においてもよい。揮発性記憶構成要素で構築されたキャッシュメモリの電源オフは、状態を失う結果となる。電源が回復されると、通常のキャッシュアクセスは、キャッシュが空なので失敗し、より長い待ち時間（およびたぶんより低い帯域幅）の持続性補助記憶装置からの取り出しを必要とし、より低い性能をもたらす。これらのアクセスは徐々にキャッシュを再び満たし、その後のアクセスがこれらの再び満たされたエントリにヒットし始めると仮定すると、性能は徐々にその名目上のレベルへ回復する。
【０００６】
いくつかの既存の技術は、キャッシュが、その内容のフラクションと同時に、例えばタグ格納部およびデータ格納部の両方を電源オフすることを可能にする。ある技術では、キャッシュの部分のみに電力を供給することで状態を保持する一方で、電力消費量を減らしてもよい。この特別な解決策は、いくつかのタグメモリおよび対応するデータメモリの状態の保持に電力を消費する。
【０００７】
他の技術は、キャッシュのクロック周波数を減少させて、動的電力消費量を低下させる。静的電力消費を、キャッシュのトランジスタの動作パラメータ（電圧低下、バイアス変化など）への対応する調整により、減少させてもよい。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
既存の技術は、電力消費量を減少させるために電源回復後の性能を犠牲にするか、電源回復後の性能低下を避けるためにデータ格納部のサブセットに電力を保持して最適な電力消費を犠牲にするかを選択する結果となる。よって、キャッシュが電源オンされた後の性能を犠牲にすることなく、多くまたは全てのキャッシュを電源オフするニーズが存在する。
【課題を解決するための手段】
【０００９】
キャッシュを再配置する方法は、キャッシュの内容の少なくとも部分を、キャッシュから分離した場所に格納することで始まる。電源がキャッシュから切られ、いくぶんかの時間の後に回復される。電源がキャッシュに回復された後、それは、キャッシュから分離して格納されたキャッシュの内容の部分で再配置される。
【００１０】
キャッシュを再配置する方法は、キャッシュの電源を切り、いくぶんかの時間の後に回復することで始まる。キャッシュクライアントは、電源がキャッシュに回復され、キャッシュは状態を失ったことを信号で伝えられる。クライアントは、プリフェッチコマンドをキャッシュへ発行し、キャッシュはプリフェッチコマンドを使用してデータをキャッシュ内へロードする。
【００１１】
キャッシュを再配置する機器は、キャッシュ、メモリ、およびメモリコントローラを有する。キャッシュは、データおよびデータに関するタグを格納するよう構成される。メモリは、キャッシュから分離して置かれ、キャッシュから電源が切られたとき、キャッシュからタグを格納するよう構成される。メモリコントローラは、キャッシュに電源が回復されたとき、タグをキャッシュからメモリへ書き込むよう構成される。
【００１２】
キャッシュを再配置するための汎用コンピュータによる実行の命令のセットを格納するコンピュータ可読な記憶媒体、命令のセットは、格納コードセグメント、切断コードセグメント、回復コードセグメント、再配置コードセグメントを含む。格納コードセグメントは、キャッシュから分離した場所にキャッシュの内容の少なくとも部分を格納するためである。切断コードセグメントは、キャッシュから電源を切るためである。回復コードセグメントは、キャッシュへ電源を回復するためである。再配置コードセグメントは、キャッシュから分離して格納されたキャッシュの内容の部分で、キャッシュを再配置するためである。
【００１３】
例示の方法による後述の記載により、本発明はより詳細に理解され、以下の添付の図と併せて理解されるだろう。
【図面の簡単な説明】
【００１４】
【図１】電源回復後、キャッシュをリロードするメモリシステムの第１の実施形態のブロック図である。
【図２】電源回復後、キャッシュをリロードする第１の方法のフローチャートである。
【図３】電源回復後、キャッシュをリロードするメモリシステムの第２の実施形態のブロック図である。
【図４】電源回復後、キャッシュをリロードする第２の方法のフローチャートである。
【図５】電源回復後、キャッシュをリロードするメモリシステムの第３の実施形態のブロック図である。
【図６】電源回復後、キャッシュをリロードする第３の方法のフローチャートである。
【図７】電源回復後、キャッシュをリロードするメモリシステムの第４の実施形態のブロック図である。
【図８】電源回復後、キャッシュをリロードする第４の方法のフローチャートである。
【図９】電源回復後、キャッシュをリロードするメモリシステムの第５の実施形態のブロック図である。
【図１０】電源回復後、キャッシュをリロードする第５の方法のフローチャートである。
【図１１】電源回復後、キャッシュをリロードするメモリシステムの第６の実施形態のブロック図である。
【図１２】電源回復後、キャッシュをリロードする第６の方法のフローチャートである。
【図１３】電源回復後、キャッシュをリロードするメモリシステムの第７の実施形態のブロック図である。
【図１４】電源回復後、キャッシュをリロードする第７の方法のフローチャートである。
【図１５】電源回復後、キャッシュをリロードするメモリシステムの第８の実施形態のブロック図である。
【図１６】電源回復後、キャッシュをリロードする第８の方法のフローチャートである。
【発明を実施するための形態】
【００１５】
通常のキャッシュの強化を、以下に記載する。通常、キャッシュが電源オフのとき、キャッシュをデータで再び満たすのにいくぶんかの時間がかかり、従って、最初のキャッシュアクセスはキャッシュが電源オフされた前より低速である。電源が回復された後、入ってくる要求がキャッシュに失敗し、それが新しいデータがキャッシュを満たす状態を導くにつれ、空のキャッシュは徐々に再び満たされるかもしれない。この再び満たすプロセスは入ってくる要求の割合により制限されるかもしれず、より古い要求がキャッシュミスにより低速で提供されているので、低速かもしれない。
【００１６】
電源が回復された後、ユーザがキャッシュから再度データを要求する前に、同一のデータをキャッシュへ回復してもよいように、データを、電源オフされるキャッシュの外側に格納してもよい。よって、ユーザがキャッシュへそのデータ片を要求する前にデータをキャッシュへ回復してもよいので、キャッシュに電源オン後の性能の劣化は軽減される。再充填のプロセスは、通常のプロセッサの要求と重複してもよく、再充填のプロセスが完了するまで通常のプロセッサの要求を必ずしもブロックする必要はない。
【００１７】
電力消費量を減少させるのにパワーゲートを使用してもよく、電源が回復された後すぐに内容をキャッシュ内にロードすることにより、低性能の期間を最小化してもよい。キャッシュをまた、完全にパワーゲートを行い、全ての動的電力をなくし、パワーゲートを通して漏出する静的電力を減少させてもよい。他の実施形態では、全てのデータ格納部を電源オフし、さらに電力消費を最小化してもよい。
【００１８】
「回復タグ」を生成し、それから保存、維持または格納するよう、メカニズムをキャッシュに追加してもよい。回復タグは、電源回復イベントの後、データを置きキャッシュの補助記録メモリからロードするのに十分な情報を有する。それは、近い将来に１つまたは複数の要求にサービスするのにキャッシュがそれを必要とするという予測のもとにデータが取り出されるプリフェッチ要求に、性質が似ている。
【００１９】
回復タグは、電源を節約するためのいくつかまたは全てのキャッシュの電源オフの前に、持続性記憶場所に置かれる。電源が回復されたとき、データをキャッシュの補助記憶装置からキャッシュ内へロードするために、回復タグが使用される。このデータのロードは、通常のキャッシュ要求が起こすあらゆるロードと分離し、通常、時間的に前である。いくつかまたは全てのキャッシュエントリを、この方法でロードしてもよい。ロードされるデータは、電源オフされる前に以前キャッシュ内にあったものでもよいし、電源が回復された後で有用と予測されるあらゆるデータでもよい。
【００２０】
回復タグは、キャッシュが電源オフされる前にキャッシュに格納された情報を用いて構成してもよい。これは、電源ダウン期間の後、既存のキャッシュデータが必要とされるという仮定に基く。回復タグを、キャッシュ内に以前格納された的確なデータをリロードするのに使用して、キャッシュ内に以前格納されたデータの取得に関連する有用な中間情報をロードし、または電源回復後に有用と予想される他のデータをロードしてもよい。そのようなケースでは、キャッシュエントリの回復タグを、エントリのタグの内容（通常はアドレスの部分だが、おそらく付加的な属性とともに）に基き構成してもよい。キャッシュ内のキャッシュエントリの論理的アドレスのような、付加的な情報も、回復タグの構成に必要とされるかもしれない。回復タグは、キャッシュが電源オンに戻った後すぐに起こるアクセスのタイプの知識または予想のソフトウェアで構成してもよい。
【００２１】
キャッシュが、キャッシュのデータ内容の重複コピーを保持する補助記憶メモリを有すると仮定する。キャッシュが、補助記憶装置内のデータより新しい「ダーティ」書き込みデータを格納する場合、キャッシュから電源が切られる前に補助記憶メモリへダーティデータが書き出される。
【００２２】
本明細書に記載された実施形態は、インストラクションキャッシュ、データキャッシュ、変換索引バッファ（ＴＬＢ）、Ｉ／Ｏ  ＴＬＢ、テクスチャおよび頂点のグラフィックスデータキャッシュなどを含むがそれらに限定されない、多くのタイプのハードウェアキャッシュに適用可能である。
【００２３】
キャッシュのタグを、さまざまなメカニズムを用いて、生成、保存、または維持、およびそれからロードしてもよい。いくつかの実施形態は、電源オフイベントの前、または電源が回復された後のどちらかに回復タグを生成するメカニズムを有する。また、いくつかの実施形態は、電源回復後に回復タグを取り込み、回復タグを使用してキャッシュの補助記憶装置からキャッシュ内へデータをロードする、電源オンリロードエンジンを有する。電源オンリロードエンジンを、プリフェッチまたはロードエンジンのような既存のロジックと組み合わせ、または共用してもよい。
【００２４】
設計のバリエーション
以下の例の実施形態は、案内および説明の目的である。当業者は、これらの実施形態の変形が可能であることを認識する。それぞれの実施形態は、自身の利点および異なる能力、性能、および複雑性のトレードオフを有する。
【００２５】
第１の実施形態
第１の実施形態では、図１および２に示されたように、キャッシュは分離したメモリ内にタグ情報およびデータ情報を格納してもよい。キャッシュはタグメモリのサブセットのために電源を維持してもよいが、データメモリおよび残りのタグメモリが電源オフされるのを可能にする。この実施形態では、維持されたキャッシュタグを用いることにより、電源が回復された後で回復タグが生成される。回復タグは、キャッシュの補助記憶装置からキャッシュ内へデータ内容をロードするために使用される。
【００２６】
図１は、キャッシュ１０２、キャッシュコントローラ１０４、メモリ１０６、およびメモリコントローラ１０８を含むメモリシステム１００の部分を示す。キャッシュ１０２は、第１のタグストレージプール（タグストレージプール１）１１０、第２のタグストレージプール（タグストレージプール２）１１２、第１のデータストレージプール（データストレージプール１）１１４、および第２のデータストレージプール（データストレージプール２）１１６を有する。キャッシュコントローラ１０４は、電源オンリロードエンジン１１８を有する。
【００２７】
キャッシュの電源オフ前に、特別な準備は必要がない。タグストレージプール１  １１０はその状態を保持し、電源オンの状態を保ってもよい。タグストレージプール２  １１２、データストレージプール１  １１４、およびデータストレージプール２  １１６は、電源オフされる（図１で影で示される）。電源が回復された後、キャッシュコントローラ１０４内の電源オンリロードエンジン１１８は、タグストレージプール１  １１０からタグを読み出し、それらのタグを回復タグとして使用する。回復タグは、メモリ１０６からデータを取り出すのに使用され、取り出されたデータは、データストレージプール１  １１４に書き込まれる。
【００２８】
図２は、タグメモリのサブセットの電源を保持し、一方でデータメモリおよび他のタグメモリを電源オフするのを可能にする、方法２００のフローチャートを示す。方法２００は、回復タグの電源オンのままのキャッシュの部分での作成および格納を含み、タグ記憶部のサブセット内で状態を保持することにより遂行される（ステップ２０２）。残りのタグ記憶部は、全てのデータ記憶部とともに電源オフしてもよい（ステップ２０４）。タグ記憶部およびデータ記憶部は、電源オンイベントが受信されるまで、電源オフの状態を保つ。
【００２９】
電源オンイベントを受信すると、電源オフされていたあらゆるキャッシュを電源オンしてもよい（ステップ２０６）。電源オンに続き、回復タグが読み出される（ステップ２０８）。回復タグを用いてメモリからデータを取り出し（ステップ２１０）、取り出されたデータをデータ記憶部に書き戻してもよい（ステップ２１２）。回復タグは、キャッシュ内へデータをロードし戻すための電源オンの後、ユーザがキャッシュから同様のデータを要求する前に使用される。
【００３０】
第１の実施形態は、電源、性能、および複雑性の間のトレードオフを含む。キャッシュ記憶に関連する多くの電源は節約されるが、少量の電源が、１つまたは複数のタグ記憶部の状態を保持するためなお必要である。結果としての性能は、電源オンの状態を保つ記憶部の有用性による。最近に使用されたタグならびにより以前に使用されたタグを収集したものが格納されれば、性能はより低いかもしれない。最近使用されたタグが電源オンの状態を保つタグ記憶部への優先的な割り当てをする１つの実施では、性能はより高いかもしれない。他の実施では、最近に使用されたタグが電源オンの状態を保つタグ記憶部へ転送されるよう、キャッシュラインスワップを電源を切る前に実行してもよい。この実施形態の複雑性のレベルは、相対的に低い。前述のようなキャッシュラインスワップロジックが実施される場合を除いて、電源を切る前に別の場所にデータを保存する必要はない。
【００３１】
第２の実施形態
第２の実施形態では、図３および図４に示されたように、キャッシュが、キャッシュのタグに基き回復タグ情報を生成してもよい。キャッシュは、電源が切られる前に、回復タグを持続性メモリ（オンチップまたはオフチップ）のプール内に書き込んでもよい。この持続性メモリは、完全な運用状態または自己リフレッシュのような低電力状態の保持にあってもよく、一方でキャッシュは電源オフされる。一般的なパーソナルコンピュータ（ＰＣ）では、これはシステムメモリまたは持続性メモリの分離した専用プールであってもよい。回復タグまたは回復タグのグループを、それらの通常のエンコーディング内に格納してもよく、またはメモリサイズおよび電力要求を減少させるために持続性メモリに書き込まれる前に圧縮してもよい。電源がキャッシュに回復されたとき、回復タグはキャッシュ内へ読み戻され、キャッシュの補助記憶装置からキャッシュ内へデータ内容をロードするのに使用される。
【００３２】
図３は、キャッシュ３０２、システムメモリ３０４、メモリコントローラ３０６、内部の持続性記憶メモリ３０８、および処理エンジン３１０を含むメモリシステム３００の部分を示す。キャッシュ３０２は、タグ転送エンジン３１２、キャッシュ記憶アレイ３１４、および電源オンリロードエンジン３１６を有する。システムメモリ３０４は、キャッシュタグ格納部３１８を有する。
【００３３】
電源オフの準備で、回復タグを生成するため、タグ転送エンジン３１２によりキャッシュ記憶アレイ３１４からタグが読み出される。タグ転送エンジン３１２は、回復タグを、（メモリコントローラ３０６を通して）キャッシュタグ格納部３１８または内部の持続性記憶メモリ３０８のどちらかへ書き込む。タグ転送エンジン３１２は、任意選択的に、回復タグを圧縮してもよい。前のステップは任意選択的に重複してもよく、キャッシュタグを読み出してもよく、一方で以前に生成された回復タグはなお書き出されている。
【００３４】
電源が回復された後、電源オンリロードエンジン３１６は、キャッシュタグ格納部３１８または内部の持続性記憶メモリ３０８から回復タグを読み出す。電源オンリロードエンジン３１６は、回復タグ（通常はアドレス）を使用して、キャッシュにシステムメモリ３０４からデータを取り出すよう要求する。キャッシュ３０２は、要求されたデータを取り出し、それをキャッシュ記憶アレイ３１４に格納する。前の３つのステップは重複してもよく、これは回復タグが読み出されると、他の回復タグが読み出される前または間に、その回復タグに関連するデータをシステムメモリ３０４から要求し、キャッシュ記憶アレイ３１４内に格納してもよいことを意味する。
【００３５】
図４は、キャッシュの電源オフの前に、持続性メモリのプールに回復タグを書き込む方法４００のフローチャートを示す。キャッシュの電源オフの準備で、回復タグを生成するためキャッシュからタグが読み出される（ステップ４０２）。回復タグは、それから、持続性メモリに書き込んでもよい（ステップ４０４）。ステップ４０２およびステップ４０４は、キャッシュタグが読み出され（ステップ４０２）、一方で以前に生成された回復タグが持続性メモリに書き込まれる（ステップ４０４）よう、重複してもよい。任意選択的に、回復タグが持続性メモリに書き込まれる（ステップ４０４）前に、回復タグを圧縮してもよい（ステップ４０６）。それから、キャッシュを電源オフしてもよい（ステップ４０８）。キャッシュは、電源オンイベントが受信されるまで、電源オフの状態を保つ。
【００３６】
電源オンイベントを受信すると、キャッシュは電源オンされ（ステップ４１０）、回復タグを持続性メモリから読み出してもよい（ステップ４１２）。回復タグを用いて補助記憶装置からデータを要求してもよく（ステップ４１４）、要求されたデータを取り出してキャッシュ内に格納してもよい（ステップ４１６）。ステップ４１２、４１４、および４１６は、回復タグが読み出されると、他の回復タグが読み出される前または間に、その回復タグに関連するデータが補助記憶装置から要求され、キャッシュ内に格納されてもよいように、重複してもよい。
【００３７】
第２の実施形態も、電源、性能、および複雑性のトレードオフを示す。回復タグがシステムメモリに格納される場合、システムメモリはすでにその状態を保持するために電力を必要とするので、最大の電力が節約される。回復タグが分離したオンチップメモリに格納される場合、比較的少量の追加電力が消費される。実施が、タグの全てか、おそらく最近に使用されたタグを含むタグのサブセットのどちらかへ格納することを優先的に選択してもよいので、第２の実施形態の性能は高い。回復タグをシステム内で生成し移動するので、複雑性のレベルは中程度である。
【００３８】
第３の実施形態
第３の実施形態では、図５および図６に示されたように、キャッシュは回復タグを生成してもよい。キャッシュが電源オフされる前に、システム内のどこかの不揮発性メモリへ回復タグを書き込んでもよい。キャッシュが電源オフされるとき、不揮発性メモリは電源オンの状態を保つ、または電源オフしてもよい。回復タグまたは回復タグのグループは、それらの通常のエンコーディング内に格納してもよく、または不揮発性メモリに書き込まれる前に圧縮してもよい。回復タグの圧縮は、メモリおよび電源要求を減少させるかもしれない。キャッシュが電源オンのとき、回復タグを有する不揮発性記憶装置は電源オンされる。不揮発性記憶装置の内容はキャッシュ内へ読み戻され、データ内容をキャッシュの補助記憶装置からキャッシュ内へロードするのに使用される。
【００３９】
図５は、キャッシュ５０２、不揮発性メモリ５０４、システムメモリ５０６、メモリコントローラ５０８、および処理エンジン５１０を含む、メモリシステム５００の部分を示す。キャッシュ５０２は、タグ転送エンジン５１２、キャッシュ記憶アレイ５１４、および電源オンリロードエンジン５１６を有する。
【００４０】
電源オフの準備で、タグ転送エンジン５１２は、キャッシュ記憶アレイ５１４からタグを読み出す。タグ転送エンジン５１２は、回復タグを生成し、それらを不揮発性メモリ５０４に書き込む。タグ転送エンジン５１２は、任意選択的に、回復タグを圧縮してもよい。前のステップは、キャッシュタグが読み出され、一方で以前に生成された回復タグがなお書き出されるように、任意選択的に重複してもよい。所望のタグが格納された後、キャッシュ５０２を電源オフしてもよい。任意選択的に、付加的な電力を節約するため、不揮発性メモリ５０４を電源オフしてもよい。
【００４１】
電源が回復された後、必要であれば、キャッシュ５０２および不揮発性メモリ５０４を電源オンしてもよい。電源オンリロードエンジン５１６は、不揮発性メモリ５０４から回復タグを読み出す。電源オンリロードエンジン５１６は、回復タグ（通常はアドレス）を使用して、システムメモリ５０６からキャッシュデータを要求する。キャッシュ５０２は、要求されたデータを取り出し、それをキャッシュ記憶アレイ５１４に格納する。回復タグが読み出されると、他の回復タグが読み出される前または間に、その回復タグに関連するデータがシステムメモリ５０６から要求され、キャッシュ記憶アレイ５１４内に格納してもよいように、前の３つのステップは、重複してもよい。
【００４２】
図６は、キャッシュの電源オフ前に、回復タグを不揮発性メモリに書き込む方法６００のフローチャートを示す。電源オフの準備で、回復タグを生成するため、タグをキャッシュから読み出してもよい（ステップ６０２）。回復タグを、それから、不揮発性メモリに書き込んでもよい（ステップ６０４）。ステップ６０２およびステップ６０４は、キャッシュタグが読み出され（ステップ６０２）、一方で以前に生成された回復タグが不揮発性メモリに書き込まれる（ステップ６０４）ように、重複してもよい。任意選択的に、回復タグが不揮発性メモリに書き込まれる（ステップ６０４）前に、回復タグを圧縮してもよい（ステップ６０６）。キャッシュおよび不揮発性メモリを、電源オフしてもよい（ステップ６０８）。キャッシュは、電源オンイベントが受信されるまで、電源オフの状態を保つ。
【００４３】
電源オンイベントを受信すると、キャッシュおよび不揮発性メモリ（電源オフされていれば）を電源オンしてもよい（ステップ６１０）。電源オンに続き、回復タグを不揮発性メモリから読み出してもよい（ステップ６１２）。取り出された回復タグを用いて補助記憶装置からデータを要求してもよく（ステップ６１４）、要求されたデータを取り出してキャッシュ記憶アレイ内に格納してもよい（ステップ６１６）。ステップ６１２、６１４、および６１６は、回復タグが不揮発性メモリから読み出されると、他の回復タグが読み出される前または間に、その回復タグに関連するデータが補助記憶装置から要求され、キャッシュ内に格納されてもよいように、重複してもよい。
【００４４】
第３の実施形態は、電源、性能、および複雑性のトレードオフを示す。第３の実施形態の不揮発性メモリは、第２の実施形態のシステムメモリの実施よりわずかに少ない電力を節約する。しかし、第２の実施形態が回復タグに分離した常にオンのメモリを使用するとき、第２の実施形態より多くの電力が節約される。これは、キャッシュが比較的長い時間電源オフされる場合に、特にあてはまる。実施が、タグの全てか、おそらく最近に使用されたタグを含むサブセットのどちらかへ格納することを優先的に選択してもよいので、第３の実施形態の性能は高い。最後に、第３の実施形態は不揮発性メモリの組み込みを必要とするので、複雑性のレベルは高い。
【００４５】
第４の実施形態
第４の実施形態では、図７および図８に示されたように、マルチレベルキャッシュ設計が使用される。マルチレベルキャッシュは、キャッシュ待ち時間およびヒット率の間のトレードオフをなくすために使用される。小さいキャッシュは待ち時間がより短いが、ヒット率がより低い傾向があり、一方で、大きいキャッシュはヒット率がより高いが、待ち時間がより長い傾向がある。マルチレベルキャッシュは、通常はまず、より小さいキャッシュをチェックし、それから、データがより小さいキャッシュ内に配置されていない場合のみ、より大きいキャッシュのチェックに進む。全てのキャッシュがチェックされるまで高位レベルのキャッシュが徐々にチェックされ、それから外部のメモリがチェックされる。厳密なインクルーシブ設計では、より小さいキャッシュ内の全てのデータは、より大きいキャッシュ内にもある。エクスクルーシブ設計では、全てのデータは最大でキャッシュのうちの１つにある。セミインクルーシブ設計では、より小さい、低位レベルキャッシュからのデータの一部は、より大きい、高位レベルキャッシュにもあってもよい。
【００４６】
第４の実施形態では、低位キャッシュレベルは（例えばインクルーシブまたはセミインクルーシブ設計を用いて）、高位のキャッシュレベルの内容を重複してもよい。この実施形態は、高位のレベルキャッシュを電源オフし、一方で低位のレベルキャッシュは電源オンの状態を保つことを可能にしてもよい。高位レベルキャッシュの電源がオンに戻ったとき、低位レベルキャッシュからの内容を、直接高位のレベルキャッシュ内に転送して戻してもよい。高位レベルキャッシュが、通常はより大きく、容量の問題によりそれらのエントリをより除去しそうにないので、これは性能上利点を有する。
【００４７】
図７は、パワーゲートの高位レベルキャッシュ（レベルＮキャッシュ）７０２、複数の低位レベルキャッシュ（レベルＮ−Ｍキャッシュ）７０４０〜７０４ｎ、メモリ７０６、およびメモリコントローラ７０８を含む、メモリシステム７００の部分を示す。
【００４８】
レベルＮキャッシュ７０２の電源オフ前に、特別な準備は必要がない。レベルＮキャッシュ７０２が電源オフされ、一方でレベルＮ−Ｍキャッシュ７０４０〜７０４ｎの全てまたはサブセットは、電源オンの状態を保つ。電源が回復された後、それぞれのレベルＮ−Ｍキャッシュ７０４０〜７０４ｎはタグおよびデータ情報を生成し、レベルＮキャッシュ７０２に送信して戻す。レベルＮキャッシュ７０２は、タグおよびデータ情報を、そのローカル記憶メモリ内に書き込む。
【００４９】
図８は、データを低位レベルキャッシュから高位レベルキャッシュへ回復する、マルチレベルキャッシュ設計を用いた方法８００のフローチャートを示す。高位レベルキャッシュを、電源オフしてもよい（ステップ８０２）。低位レベルキャッシュのサブセットは、電源オンの状態を保ってもよい（ステップ８０４）。高位レベルキャッシュは、電源オンイベントが受信されるまで、電源オフの状態を保つ。
【００５０】
電源オンイベントを受信すると、高位レベルキャッシュが電源オンされる（ステップ８０６）。低位レベルキャッシュがタグおよびデータ情報を生成し、高位レベルキャッシュに送信して戻す（ステップ８０８）。高位レベルキャッシュは、タグおよびデータ情報を、そのローカル記憶メモリ内に書き込む（ステップ８１０）。
【００５１】
第４の実施形態は、電源、性能、および複雑性のトレードオフを示す。第４の実施形態は、高位レベルキャッシュ全体を電源オフしてもよいので、電力の高度の節約を提供する。しかし、低位レベルキャッシュに含まれるデータのみが高位レベルキャッシュに転送され、そのデータは低位レベルキャッシュではすでに可能であるため、相対的に低い性能が予想される。低位レベルキャッシュからのキャッシュラインが容量の問題により除去され、以前高位レベルキャッシュへ転送されたより古いラインが再び必要とされるとき、性能の利点が予想される。中程度の複雑性が予想される。インクルーシブまたはセミインクルーシブキャッシュ設計では、キャッシュラインはエクスクルーシブキャッシュ設計なので、通常は低位レベルキャッシュから高位レベルキャッシュまで転送されない。よって、インクルーシブまたはセミインクルーシブ設計を含むこの実施形態は、キャッシュラインを低位レベルキャッシュから高位レベルキャッシュに移動するのに、新しいデータパスの追加を必要とするかもしれない。
【００５２】
第５の実施形態
第５の実施形態では、図９および図１０に示されたように、マルチレベルキャッシュ設計が使用される。低位キャッシュレベルは、高位レベルキャッシュの内容を重複してもよい（すなわちインクルーシブまたはセミインクルーシブ設計を用いて）。この実施形態は、高位のレベルキャッシュを電源オフし、一方で低位のレベルキャッシュは電源オンの状態を保つことを可能にしてもよい。高位レベルキャッシュが電源オンされるとき、低位レベルキャッシュの内容に基き回復タグを生成してもよい。データを補助記憶装置から高位レベルキャッシュ内にロードするため、回復タグを使用してもよい。これは、特に、アドレス変換のキャッシュである変換索引バッファ（ＴＬＢ）設計で好都合である。そのような設計では、低位レベルキャッシュ内の変換エントリからの回復タグは、高位レベルキャッシュが実際の変換エントリに加え階層ディレクトリ情報のロードを可能にしてもよい。
【００５３】
図９は、パワーゲートの高位レベルキャッシュ（レベルＮキャッシュ）９０２、複数の低位レベルキャッシュ（レベルＮ−Ｍキャッシュ）９０４０〜９０４ｎ、メモリ９０６、およびメモリコントローラ９０８を含む、メモリシステム９００の部分を示す。レベルＮキャッシュ９０２は、電源オンリロードエンジン９１０を有する。
【００５４】
レベルＮキャッシュ９０２の電源オフ前に、特別な準備は必要がない。レベルＮキャッシュ９０２が電源オフされ、一方でレベルＮ−Ｍキャッシュ９０４０〜９０４ｎの全てまたはサブセットは、電源オンの状態を保つ。電源回復の後、それぞれのレベルＮ−Ｍキャッシュ９０４０〜９０４ｎは、そのローカルキャッシュタグ情報に基き回復タグを生成する。レベルＮ−Ｍキャッシュ９０４０〜９０４ｎは、それから、生成された回復タグに基きリロードコマンドをレベルＮキャッシュ９０２へ発行する。レベルＮキャッシュ９０２内の電源オンリロードエンジン９１０は、レベルＮ−Ｍキャッシュ９０４０〜９０４ｎからのリロードコマンドを使用して、メモリ９０６からデータを要求する。レベルＮキャッシュ９０２は、リロードされたデータを、そのキャッシュ記憶メモリ内に格納する。これらの最後の２つのステップで、レベルＮキャッシュ９０２は、階層データの複数のレベルを行き来しなければならない場合、それぞれのリロード要求に対しメモリ９０６からデータの複数片を要求、取り出し、および格納してもよい。この１つの例は、キャッシュがＴＬＢで、最終変換エントリに到達する前に複数のディレクトリレベルを行き来しなければならない場合である。この方法で取り出された全ての階層情報およびディレクトリエントリも、最終変換とともにレベルＮキャッシュ９０２内に格納してもよい。これは、結果に到達するためにとられるステップの保持と同等物であってもよい。
【００５５】
図１０は、マルチレベルキャッシュ設計を用いて、低位レベルキャッシュの内容に基き回復タグを生成する方法１０００のフローチャートを示す。高位レベルキャッシュを、電源オフしてもよい（ステップ１００２）。低位レベルキャッシュのサブセットは、電源オンの状態を保ってもよい（ステップ１００４）。高位レベルキャッシュは、電源オンイベントが受信されるまで、電源オフの状態を保つ。
【００５６】
電源オンイベントを受信すると、高位レベルキャッシュが電源オンされ（ステップ１００６）、低位レベルキャッシュが、ローカルキャッシュタグ情報に基き回復タグを生成する（ステップ１００８）。低位レベルキャッシュは、回復タグに基きリロードコマンドを高位レベルキャッシュへ発行する（ステップ１０１０）。高位レベルキャッシュは、リロードコマンドを使用して、その補助記憶装置からデータを要求し（ステップ１０１２）、リロードされたデータをその記憶メモリ内に格納する（ステップ１０１４）。高位レベルキャッシュは、任意選択的に、階層ディレクトリ情報を保持し（ステップ１０１６）、その情報をその記憶メモリへ書き込んでもよい。
【００５７】
第５の実施形態は、電源、性能、および複雑性のトレードオフを示す。それは、高位レベルキャッシュ全体を電源オフしてもよいので、電力の高度の節約を提供する。第４の実施形態によるよりも多くの情報が高位レベルキャッシュ内へロードされるので、中程度の性能が予想される。しかし、より小さい、低位レベルキャッシュからの情報のみが保持されるので、性能は、最初の３つの実施形態より低くなりそうである。低い複雑性が予想される。この実施形態では、低位レベルキャッシュのうちの１つから高位レベルキャッシュへの要求は、高位レベルキャッシュからのサービスを要求する低位レベルキャッシュ内のキャッシュミスと同様であってもよい。
【００５８】
第６の実施形態
第６の実施形態では、図１１および図１２に示されたように、回復タグのリストを、システムメモリまたは内部のメモリのような持続性記憶の場所内へソフトウェアによりプログラムしてもよい。キャッシュは持続してプログラムされてもよく、または回復タグが置かれた場所の暗黙の知識を有してもよい。キャッシュが電源オンされるときは常に、回復タグのリストを、アクセスし、データ内容をキャッシュの補助記憶装置からキャッシュ内へロードするのに使用してもよい。
【００５９】
図１１は、キャッシュ１１０２、内部の持続性記憶メモリ１１０４、システムメモリ１１０６、メモリコントローラ１１０８、および処理エンジン１１１０を含む、メモリシステム１１００の部分を示す。キャッシュ１１０２は、電源オンリロードエンジン１１１２およびキャッシュ記憶アレイ１１１４を有する。処理エンジン１１１０は、ソフトウェア１１１６を有する。
【００６０】
キャッシュが電源オフされる前またはその間、ソフトウェア１１１６は回復タグ情報を、持続性記憶に書き込む。この持続性記憶は、例えば、内部の持続性記憶メモリ１１０４またはシステムメモリ１１０６であってもよい。キャッシュ１１０２を、それから電源オフしてもよい。キャッシュ１１０２は、電源オンイベントが受信されるまで、電源オフの状態を保つ。電源オンイベントを受信すると、キャッシュ１１０２が電源オンされ、電源オンリロードエンジン１１１２が、システムメモリ１１０６または内部の持続性記憶メモリ１１０４から回復タグを読み出す。電源オンリロードエンジン１１１２は、回復タグ（通常はアドレス）を使用して、キャッシュにシステムメモリ１１０６からデータを取り出すよう要求する。キャッシュは、要求されたデータを取り出し、それをキャッシュ記憶アレイ１１１４内に格納する。前の３つのステップは、回復タグが読み出されると、他の回復タグが読み出される前または間に、その回復タグに関連するデータがシステムメモリ１１０６から要求され、キャッシュ記憶アレイ１１１４内に格納されてもよいように、重複してもよい。
【００６１】
図１２は、ソフトウェアにプログラムされた回復タグのリストを作成し、回復タグを持続性記憶の場所内に格納する方法１２００のフローチャートを示す。ソフトウェアは、回復タグ情報を持続性記憶に書き込む（ステップ１２０２）。キャッシュを、いつでも電源オフしてよい（ステップ１２０４）。キャッシュは、電源オンイベントが受信されるまで、電源オフの状態を保つ。
【００６２】
電源オンイベントを受信すると、キャッシュが電源オンされ（ステップ１２０６）、回復タグが持続性メモリから読み出される（ステップ１２０８）。回復タグは、補助記憶装置からデータを要求するのに使用され（ステップ１２１０）、要求されたデータが取り出され、キャッシュ内に格納される（ステップ１２１２）。ステップ１２０８、１２１０、および１２１２は、回復タグが読み出されると、他の回復タグが読み出されて処理される前または間に、その回復タグに関連するデータが補助記憶装置から要求され、キャッシュ内に格納されてもよいように、重複してもよい。
【００６３】
第６の実施形態は、回復タグがシステムメモリに格納される場合、システムメモリはすでにその状態を保持するために電力を必要とするので、最大の電力を節約する。回復タグが分離したオンチップメモリに格納される場合、少量の追加の電力が消費される。ソフトウェアが回復タグのリストをハードウェアと同一のアップデート頻度で保持可能でないかもしれないので、最初の３つの実施形態と比較して、この実施形態はより低い性能が予想される。回復タグを保存する必要があるハードウェアがないので、ハードウェアの複雑性は、他の実施形態より低い。しかし、ソフトウェアが回復タグのアクティブリストを保持する必要があるので、中程度のソフトウェアの複雑性が予想される。
【００６４】
第７の実施形態
第７の実施形態では、図１３および図１４に示されたように、回復タグのリストが生成され、通常のキャッシュアクセスに基きアップデートされる。例えば、多数のソースのそれぞれからの全体のＮ件の要求の最後、または最後のＮ件の要求のリストを保存し、継続的にアップデートしてもよい。このリストを、重複、類似または部分的に一致するエントリを取り除くため、フィルタにかけてもよい。回復タグのリストを、キャッシュが電源オフされる間状態を保持する、持続性記憶の場所に格納してもよい。それをまた、非持続性の場所に格納してもよい。非持続性の場所に格納された場合、回復タグのリストを、キャッシュおよび非持続性記憶の電源オフの準備で、持続性記憶の場所に転送してもよい。キャッシュが電源オンされた後、回復タグがデータ内容をキャッシュの補助記憶装置からキャッシュ内へロードするのに使用される。
【００６５】
図１３は、キャッシュ１３０２、処理エンジン１３０４、内部の持続性記憶メモリ１３０６、システムメモリ１３０８、およびメモリコントローラ１３１０を含む、メモリシステム１３００の部分を示す。処理エンジン１３０４は、ソフトウェア１３１２を有する。キャッシュ１３０２は、回復タグリスト１３１４、電源オンリロードエンジン１３１６、およびキャッシュ記憶アレイ１３１８を有する。
【００６６】
通常の作動の間、クライアント（このケースでは処理エンジン１３０４）からキャッシュ１３０２へのアクセスが使用され、持続性記憶場所または非持続性の場所のどちらかに格納される回復タグを生成する。ソフトウェア１３１２は、回復タグ情報を、例えば持続性記憶−内部の持続性記憶メモリ１３０６またはシステムメモリ１３０８に書き込む。キャッシュ１３０２が電源オフされたときに回復タグリスト１３１４が状態を失う場合、キャッシュ１３０２の電源オフ前に、回復タグリスト１３１４を持続性記憶場所に転送しなければならない。キャッシュ１３０２は、それから電源オフされ、電源オンイベントが受信されるまで、電源オフの状態を保つ。
【００６７】
電源オンイベントを受信すると、キャッシュが電源オンされ、電源オンリロードエンジン１３１６が、回復タグを読み出す。電源オンリロードエンジン１３１６は、回復タグ（通常はアドレス）を使用して、システムメモリ１３０８からキャッシュデータを要求する。キャッシュ１３０２は、要求されたデータを取り出し、それをキャッシュ記憶アレイ１３１８内に格納する。前の３つのステップは、回復タグが読み出されると、他の回復タグが読み出される前または間に、その回復タグに関連するデータがシステムメモリ１３０８から要求され、キャッシュ記憶アレイ１３１８内に格納されてもよいように、重複してもよい。
【００６８】
図１４は、通常のキャッシュアクセスに基き、回復タグのリストを生成およびアップデートする方法１４００のフローチャートを示す。キャッシュへのクライアントアクセスが、回復タグを生成するため使用される（ステップ１４０２）。任意選択的に、回復タグを、重複、類似または部分的に一致するエントリを取り除くため、フィルタにかけてもよい（ステップ１４０４）。回復タグは、持続性記憶場所または非持続性記憶場所に格納される（ステップ１４０６）。回復タグリストは、非持続性の場所に格納された場合、持続性記憶場所に転送してもよい（ステップ１４０８）。キャッシュを、それから電源オフしてもよい（ステップ１４１０）。キャッシュは、電源オンイベントが受信されるまで、電源オフの状態を保つ。
【００６９】
電源オンイベントを受信すると、キャッシュが電源オンされ（ステップ１４１２）、回復タグが読み出される（ステップ１４１４）。補助記憶装置からデータを要求するために回復タグが使用され（ステップ１４１６）、要求されたデータが取り出され、キャッシュ内に格納される（ステップ１４１８）。ステップ１４１４、１４１６、および１４１８は、回復タグが読み出されると、他の回復タグが読み出されおよび処理される前または間に、その回復タグに関連するデータが補助記憶装置から要求され、キャッシュ内に格納されてもよいように、重複してもよい。
【００７０】
第７の実施形態は、回復タグがシステムメモリに格納される場合、システムメモリはすでにその状態を保持するために電力を必要とするので、最大の電力を節約する。回復タグが分離したオンチップメモリに格納される場合、少量の追加の電力が消費される。実施が、タグの全てか、おそらく最近に使用されたタグを含むタグのサブセットのどちらかへ格納することを優先的に選択してもよいので、性能は高いと予想される。回復タグを生成しシステム内で移動する必要があるので、複雑性のレベルは中程度である。この実施で、分離した回復タグのリストを保つためにより多くのロジックおよび記憶装置が必要とされる。しかし、どのキャッシュタグを回復タグとして保存するか判断するために、キャッシュタグをスキャンするロジックは必要がない。
【００７１】
第８の実施形態
第８の実施形態では、図１５および図１６に示されたように、キャッシュに要求するキャッシュクライアントを、キャッシュの電源の状態を認識するようにしてもよい。クライアントが、キャッシュの電源投入を誘発するかキャッシュ電源投入イベントを検出する場合、それは、キャッシュへのプリフェッチコマンドの特殊なストリームを生成して送信してもよい。これらのプリフェッチコマンドは回復タグと同様にはたらき、キャッシュのその補助記憶装置からの情報のロードを誘発する。クライアントは、クライアントが近い将来に必要と考えるデータのロードを起こすため、プリフェッチコマンドを生成してもよい。これは、キャッシュ電源投入イベントに関連するので、通常のキャッシュへのプリフェッチコマンドの生成と異なる。またクライアントは、電源切断される前にキャッシュに予め発行されたプリフェッチコマンドを発行してもよい。
【００７２】
図１５は、キャッシュ１５０２、システムメモリ１５０４、およびメモリコントローラ１５０６を含む、メモリシステム１５００の部分を示す。キャッシュ１５０２は、キャッシュ記憶アレイ１５０８を有する。クライアント１５１０は、キャッシュ１５０２およびシステムメモリ１５０４にアクセスしてもよい。１つのクライアントが図１５に示されるが、いずれの数のクライアントがキャッシュ１５０２およびシステムメモリ１５０４と通信してもよい。
【００７３】
キャッシュ１５０２は、電源オフされる。電源が回復された後、キャッシュ１５０２は、クライアント１５１０に今電源オンし、その状態がなくなったことを信号で伝える。クライアント１５１０は、一連のプリフェッチコマンドをキャッシュ１５０２へ発行する。これらのプリフェッチコマンドを、電源オフイベントの前に、キャッシュ１５０２に予め発行してもよい。キャッシュ１５０２は、クライアント１５１０からの実際のアクセスおよび要求より前に、プリフェッチコマンドを使用して、データをシステムメモリ１５０６からキャッシュ１５０２内へロードする。
【００７４】
図１６は、電源オン後プリフェッチコマンドを使用して、キャッシュのその補助記憶装置からの情報のロードを誘発する方法１６００のフローチャートを示す。キャッシュを、いつでも電源オフしてもよい（ステップ１６０２）。キャッシュが電源オンされた（ステップ１６０４）後、キャッシュ１５０２はクライアントに、電源オンが起こり、その状態がなくなったことを信号で伝える（ステップ１６０６）。クライアントは、プリフェッチコマンドをキャッシュへ発行する（ステップ１６０８）。クライアントは、電源オフの前に予め発行されたプリフェッチコマンドを発行してもよい（ステップ１６１０）。キャッシュは、プリフェッチコマンドを使用して、データをキャッシュ内へロードする（ステップ１６１２）。
【００７５】
第８の実施形態は、プリフェッチコマンドから集められた情報がすでにその状態を必ず保持するシステムメモリ内に置かれるので、最大の電力を節約する。この実施形態の性能は、プリフェッチングの正確性による。予測が大きく、より早くプリフェッチングが起こる可能性があるほど、性能はよい。いくつかの適用はこの実施形態でよくなるかもしれず、一方で他の適用は、クライアントのキャッシュアクセスパターンによって、他の実施形態からより多く利点を得るかもしれない。この実施形態のキャッシュ部分の複雑性のレベルは低い。プロセッサがキャッシュ電源状態に応じて起こるプリフェッチングのレベルを動的に制御する必要があるので、プロセッサに複雑性が加わることが予想される。
【００７６】
機能および構成要素を特定の組み合わせで前述したが、それぞれの機能または構成要素を、単独で他の機能および構成要素なしに、または種々の組み合わせで他の機能および構成要素と組み合わせてまたはなしで、使用することが可能である。本明細書で提供される方法またはフローチャートを、コンピュータプログラム、ソフトウェア、または汎用コンピュータまたはプロセッサによる実行のためコンピュータ可読な記憶媒体に包含されるファームウェア内で実行してもよい。コンピュータ可読な記憶媒体の例は、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリ装置、内部のハードディスクおよびリムーバブルディスクのような磁気媒体、光磁気媒体、および、ＣＤ−ＲＯＭディスクおよびデジタル多用途ディスク（ＤＶＤ）のような光学媒体を含む。
【００７７】
適切なプロセッサは、例示の目的で、汎用プロセッサ、特殊用途プロセッサ、従来型プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアを伴った１つまたは複数のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途内蔵回路（ＡＳＩＣ）、フィールドプログラム可能なゲートアレイ（ＦＰＧＡ）回路、あらゆる他のタイプの内蔵回路（ＩＣ）、および／またはステートマシンを含む。そのようなプロセッサを、処理されたハードウェア記述言語（ＨＤＬ）命令（コンピュータ可読な媒体に格納可能なそのような命令）の結果を使用した製造プロセスを構成することにより製造してもよい。そのような処理の結果は、本発明の態様を実行するプロセッサを製造する半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【図１】
0005570621.tif 000002
【図２】
0005570621.tif 000003
【図３】
0005570621.tif 000004
【図４】
0005570621.tif 000005
【図５】
0005570621.tif 000006
【図６】
0005570621.tif 000007
【図７】
0005570621.tif 000008
【図８】
0005570621.tif 000009
【図９】
0005570621.tif 000010
【図１０】
0005570621.tif 000011
【図１１】
0005570621.tif 000012
【図１２】
0005570621.tif 000013
【図１３】
0005570621.tif 000014
【図１４】
0005570621.tif 000015
【図１５】
0005570621.tif 000016
【図１６】
0005570621.tif 000017