(57)【要約】【課題】書き込みの処理が遅いメモリに対するアクセスを効率化する。【解決手段】メインメモリから読み出したデータ、および、メインメモリに書き込むデータをキャッシュする記憶装置であって、複数のキャッシュセグメントを有し、メインメモリと一致するデータを保持する１以上のキャッシュセグメントを、予め定められた基準数を上限に、書き換えから保護される状態である保護状態に設定しているキャッシュメモリと、書込みのキャッシュミスに応じ、保護状態でないキャッシュセグメントの中から選択したキャッシュセグメントを、書込みデータをキャッシュするために割り当てて、その選択したキャッシュセグメントにデータを書き込むキャッシュ制御部とを備える記憶装置を提供する。【選択図】図２
2008269224.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリから読み出したデータ、および、メインメモリに書き込むデータをキャッシュする記憶装置であって、
複数のキャッシュセグメントを有し、メインメモリと一致するデータを保持する１以上のキャッシュセグメントを、予め定められた基準数を上限に、書き換えから保護される状態である保護状態に設定しているキャッシュメモリと、
書込みのキャッシュミスに応じ、保護状態でないキャッシュセグメントの中から選択したキャッシュセグメントを、書込みデータをキャッシュするために割り当てて、その選択したキャッシュセグメントにデータを書き込むキャッシュ制御部と
を備える記憶装置。
【請求項２】
前記キャッシュメモリは、さらに、メインメモリと一致しておらず、メインメモリに書き込むべきデータを含む状態である更新状態のキャッシュセグメントを含み、
前記キャッシュ制御部は、読出しのキャッシュミスに応じ、更新状態でないキャッシュセグメントの中から選択したキャッシュセグメントを、読み出したデータをキャッシュするために割り当てて、メインメモリからその選択したキャッシュセグメントにデータを読み出す、請求項１に記載の記憶装置。
【請求項３】
前記キャッシュ制御部は、読出しのキャッシュミスに応じ、さらに、割り当てたそのキャッシュセグメントを保護状態に設定して、保護状態のキャッシュセグメントが前記基準数を超えたことを条件に、保護状態の他のキャッシュセグメントを選択して、メインメモリと一致しているが書込みに対しリプレースされ得る状態である共有状態に設定する
請求項２に記載の記憶装置。
【請求項４】
前記キャッシュ制御部は、保護状態のキャッシュセグメントが前記基準数を超えたことを条件に、保護状態のキャッシュセグメントの中から、未使用の期間を示す指標値であるＬＲＵ値が最も長い期間を示すキャッシュセグメントを選択して、共有状態に設定する
請求項３に記載の記憶装置。
【請求項５】
前記キャッシュ制御部は、読出しのキャッシュミスに応じ、さらに、割り当てたそのキャッシュセグメント以外の保護状態のキャッシュセグメントに対応するＬＲＵ値のそれぞれを、より長い未使用期間を示す値に更新する
請求項４に記載の記憶装置。
【請求項６】
前記キャッシュ制御部は、読出しのキャッシュヒットに応じ、さらに、読出しの対象が保護状態のキャッシュセグメントであることを条件に、保護状態の他のキャッシュセグメントに対応するＬＲＵ値のそれぞれを、より長い未使用期間を示す値に更新する
請求項４に記載の記憶装置。
【請求項７】
それぞれのキャッシュセグメントは、有効なデータを含まない状態である無効状態、保護状態、メインメモリと一致しているが書込みに対しリプレースされ得る状態である共有状態、および、メインメモリに書き込むべきデータを含む状態である更新状態、を少なくとも含む、複数の状態の何れかであり、
前記キャッシュ制御部は、書込みのキャッシュミスに応じ、無効状態のキャッシュセグメントがあればそのキャッシュセグメントを選択し、無効状態のキャッシュセグメントが無く共有状態のキャッシュセグメントがあればそのキャッシュセグメントを選択し、共有状態のキャッシュセグメントが無ければ更新状態のキャッシュセグメント内のデータをメインメモリに書き戻してからそのキャッシュセグメントを選択して、書込みデータをキャッシュするために割り当てる
請求項１に記載の記憶装置。
【請求項８】
前記キャッシュ制御部は、書込みのキャッシュミスに応じ、共有状態のキャッシュセグメントがあればそれらのキャッシュセグメントのうち、未使用の期間を示す指標値であるＬＲＵ値がもっとも長い未使用期間を示すキャッシュセグメントを選択し、共有状態のキャッシュセグメントが無ければ更新状態のキャッシュセグメントのうちＬＲＵ値が最も長い未使用期間を示す少なくとも１つのキャッシュセグメント内のデータを書き戻してからそのうちの１つのキャッシュセグメントを選択する
請求項７に記載の記憶装置。
【請求項９】
前記キャッシュ制御部は、選択した更新状態のキャッシュセグメントを、書込みデータをキャッシュするために割り当てたことを条件に、その割り当てたキャッシュセグメントのＬＲＵ値をリセットし、更新状態にある他のキャッシュセグメントのＬＲＵ値のそれぞれを、より長い未使用期間を示す値に更新する
請求項８に記載の記憶装置。
【請求項１０】
前記メインメモリは、ブロック単位で書き込みをすることができ、
ブロックは、複数のキャッシュセグメントに対応しており、
前記キャッシュ制御部は、選択した更新状態のキャッシュセグメントを、書込みデータをキャッシュするために割り当てたことを条件に、その割り当てたキャッシュセグメントのＬＲＵ値をリセットすると共に、さらに、その割り当てたキャッシュセグメントと同一のブロックのデータを記憶する、更新状態にある他のキャッシュセグメントのＬＲＵ値をリセットする
請求項９に記載の記憶装置。
【請求項１１】
前記キャッシュ制御部は、書込みのキャッシュヒットに応じ、書込みの対象が保護状態のキャッシュセグメントであることを条件に、そのキャッシュセグメントにデータを書込むと共に、メインメモリに書き込むべきデータを含む状態である更新状態にそのキャッシュセグメントを設定する
請求項７に記載の記憶装置。
【請求項１２】
前記メインメモリを更に備える請求項１に記載の記憶装置。
【請求項１３】
前記メインメモリとして、フラッシュメモリを備える請求項１２に記載の記憶装置。
【請求項１４】
前記メインメモリとして、ハードディスクドライブ、光磁気ディスクドライブ、および、テープドライブの少なくとも１つを備える請求項１２に記載の記憶装置。
【請求項１５】
それぞれのキャッシュセグメントは、複数のセクタを含み、
前記キャッシュメモリは、それぞれのキャッシュセグメントに対応付けて、割り当てられているメインメモリ中のセグメントの最上位から予め定められた桁数のアドレス値、および、含んでいる各セクタが有効なデータを含むかどうかを示すセクタ情報、を記憶しており、
前記キャッシュ制御部は、書込みの要求されるアドレスの最上位から予め定められた桁数のアドレス値が、前記キャッシュメモリに記憶されている何れのアドレス値にも一致しないことを条件に、書込みのキャッシュミスと判断し、アドレス値の一致するキャッシュセグメントにおいて対応するセクタが有効なデータを含まないことを条件に、そのセクタにデータを書き込む
請求項１に記載の記憶装置。
【請求項１６】
前記キャッシュメモリは、それぞれのキャッシュセグメントに対応付けて、さらに、そのキャッシュセグメントの状態、および、そのキャッシュセグメントの未使用の期間を示す指標値であるＬＲＵ値を記憶しており、
前記キャッシュ制御部は、ある状態のキャッシュセグメントを他の状態に変更する場合において、その状態のキャッシュセグメントのうちＬＲＵ値が最も長い期間を示すキャッシュセグメントを選択して、当該他の状態に変更する
請求項１５に記載の記憶装置。
【請求項１７】
それぞれのキャッシュセグメントは複数のセクタを含み、
前記キャッシュ制御部は、セクタへの書込みがキャッシュミスしたことを条件に、前記複数のキャッシュセグメントの中から選択したキャッシュセグメントを、書込み対象のセクタをキャッシュするために割り当てて、書込み対象以外のセクタを無効セクタに設定し、
その選択したキャッシュセグメントをメインメモリに書き戻す場合において、その選択したキャッシュセグメントの無効セクタについてはメインメモリの対応するセクタからデータを取得してから、その選択したキャッシュセグメント内のデータをメインメモリに書き戻す、
請求項１に記載の記憶装置。
【請求項１８】
メインメモリから読み出したデータ、および、メインメモリに書き込むデータをキャッシュする記憶装置であって、
複数のキャッシュセグメントを有し、それぞれのキャッシュセグメントが複数のセクタを含むキャッシュメモリと、
前記キャッシュメモリを制御するキャッシュ制御部と
を備え、
前記キャッシュ制御部は、
セクタへの書込みがキャッシュミスしたことを条件に、前記複数のキャッシュセグメントの中から選択したキャッシュセグメントを、書込み対象のセクタをキャッシュするために割り当てて、書込み対象以外のセクタを無効セクタに設定し、
その選択したキャッシュセグメントをメインメモリに書き戻す場合において、その選択したキャッシュセグメントの無効セクタについてはメインメモリの対応するセクタからデータを取得してから、その選択したキャッシュセグメント内のデータをメインメモリに書き戻す、記憶装置。
【請求項１９】
電子回路によりキャッシュメモリの動作を制御する方法であって、
キャッシュメモリは、複数のキャッシュセグメントを有し、メインメモリと一致するデータを保持する１以上のキャッシュセグメントを、予め定められた基準数を上限に、書き換えから保護される状態である保護状態に設定しており、
電子回路のキャッシュ制御部が、保護状態でないキャッシュセグメントの中から選択したキャッシュセグメントを、書込みデータをキャッシュするために割り当てて、その選択したキャッシュセグメントにデータを書き込むステップ、
を備えた方法。
【請求項２０】
前記キャッシュメモリは、さらに、メインメモリと一致しておらず、メインメモリに書き込むべきデータを含む状態である更新状態のキャッシュセグメントを含み、
読出しのキャッシュミスに応じ、
電子回路のキャッシュ制御部が、更新状態でないキャッシュセグメントの中から選択したキャッシュセグメントを、読み出したデータをキャッシュするために割り当てるステップと、
電子回路のキャッシュ制御部が、メインメモリから、割り当てたそのキャッシュセグメントにデータを読み出すステップと、
電子回路のキャッシュ制御部が、割り当てたそのキャッシュセグメントを保護状態に設定するステップと、
電子回路のキャッシュ制御部が、保護状態のキャッシュセグメントが前記基準数を超えたことを条件に、保護状態の他のキャッシュセグメントを選択して、メインメモリと一致しているが書込みに対しリプレースされ得る状態である共有状態に設定するステップと、
書込みのキャッシュヒットに応じ、
電子回路のキャッシュ制御部が、書込みの対象が保護状態のキャッシュセグメントであることを条件に、そのキャッシュセグメントにデータを書込むと共に、メインメモリに書き込むべきデータを含む状態である更新状態にそのキャッシュセグメントを設定するステップと
を更に備えた請求項１９に記載の方法。
【請求項２１】
電子回路によりキャッシュメモリの動作を制御する方法であって、
キャッシュメモリは複数のキャッシュセグメントを有し、それぞれのキャッシュセグメントが複数のセクタを含み、
電子回路のキャッシュ制御部が、セクタへの書込みがキャッシュミスしたことを条件に、前記複数のキャッシュセグメントの中から選択したキャッシュセグメントを、書込み対象のセクタをキャッシュするために割り当てて、書込み対象以外のセクタを無効セクタに設定するステップと、
電子回路のキャッシュ制御部が、その選択したキャッシュセグメントをメインメモリに書き戻す場合において、その選択したキャッシュセグメントの無効セクタについてはメインメモリの対応するセクタからデータを取得してから、その選択したキャッシュセグメント内のデータをメインメモリに書き戻すステップと
を備える方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データをキャッシュする技術に関する。特に、本発明は、メインメモリから読み出したデータ、および、メインメモリに書き込むデータをキャッシュメモリに記憶する技術に関する。
【背景技術】
【０００２】
近年、ＮＡＮＤ型フラッシュメモリなどの不揮発性のメモリデバイスが用いられている。このようなメモリデバイスでは、データの書込みの所要時間がデータの読出しの所要時間と比較して非常に長い場合がある。これは、ブロックという大きなデータサイズでのみ消去動作が可能であるので、データサイズが小さなデータを書き込む場合であっても、（ａ）ブロック全体からの読出し、（ｂ）読み出したデータの変更、および、（ｃ）ブロック全体の書込み、という３処理が必要だからである。
【０００３】
【特許文献１】特開２００４−３０３２３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
これを解決するために、ＣＰＵからメインメモリへのアクセスを効率化するためのキャッシュメモリに関する技術が応用できるとも考えられる。例えば、データサイズの小さなデータを書き込む場合には、それをキャッシュメモリに一旦書き込んだ上で、キャッシュメモリにある程度のサイズのデータが蓄積された場合に初めてフラッシュメモリに書込みを行うことで、書込みの回数を減らして高速化が図られるとも考えられる。データの書込みをキャッシュする技術としては、具体的には、いわゆるライトバックキャッシュと呼ばれる技術が挙げられる。
【０００５】
しかしながら、ライトバックキャッシュの技術をフラッシュメモリに応用すると不都合な場合がある。具体的には、キャッシュメモリが、メインメモリに書き込むべきであるがまだ書き込まれていないデータで満たされた場合である。この場合、その後に読出しが要求されると、読み出したデータをキャッシュするための領域を確保するために、キャッシュメモリ中の何れかのデータをメインメモリに書き戻さなければならない。この書き戻しの処理は、フラッシュメモリをメインメモリとした場合には非常に長い時間を要する。このため、本来は迅速に完了する読出しの処理が、非常に長い時間を要してしまう。
【０００６】
また、書込み前のデータによりキャッシュメモリが満たされないようにするため、読出し専用のキャッシュメモリおよび書込み専用のキャッシュメモリを独立して設ける技術を応用することも考えられる。しかしながら、この技術ではデータの一貫性の制御の処理のため、回路構成が複雑になるおそれがある。
さらに、キャッシュ装置に関する参考技術文献として上記の特許文献１を挙げる。この技術は、演算ユニットが出力するアドレス（例えばスタックポインタのアドレス）に基づき、その後にアクセスされ得る記憶領域（例えばアドレスの減少方向にある領域）を予想して、予めそこからデータを読み込むものである。この技術はスタックポインタなどの特定のアドレス値の存在が前提であり、様々な種類の読出し処理に対し広く応用することはできない。また、この技術をもってしても、書込みが連続した場合にはその後の読出は非常に長い時間を要する。
【０００７】
そこで本発明は、上記の課題を解決することのできる記憶装置および方法を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明の一側面においては、メインメモリから読み出したデータ、および、メインメモリに書き込むデータをキャッシュする記憶装置であって、複数のキャッシュセグメントを有し、メインメモリと一致するデータを保持する１以上のキャッシュセグメントを、予め定められた基準数を上限に、書き換えから保護される状態である保護状態に設定しているキャッシュメモリと、書込みのキャッシュミスに応じ、保護状態でないキャッシュセグメントの中から選択したキャッシュセグメントを、書込みデータをキャッシュするために割り当てて、その選択したキャッシュセグメントにデータを書き込むキャッシュ制御部とを備える記憶装置、および、当該記憶装置を制御する方法を提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明を実施するための最良の形態】
【０００９】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１０】
図１は、本実施の形態に係るコンピュータ１０の全体構成を示す。コンピュータ１０は、ホストコントローラ１０８２により相互に接続されるＣＰＵ１０００、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部を備える。また、コンピュータ１０は、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、記憶装置２０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部を備える。また、コンピュータ１０は、入出力コントローラ１０８４に接続されるＲＯＭ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部を更に備えてもよい。
【００１１】
ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスするＣＰＵ１０００及びグラフィックコントローラ１０７５とを接続する。ＣＰＵ１０００は、ＲＯＭ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ１０７５は、ＣＰＵ１０００等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、ＣＰＵ１０００等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【００１２】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、記憶装置２０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。記憶装置２０は、コンピュータ１０が使用するプログラム及びデータを格納する。記憶装置２０は不揮発にデータを保持することのできるデバイス、例えば、フラッシュメモリ又はハードディスクドライブであってもよい。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０又は記憶装置２０に提供する。
【００１３】
また、入出力コントローラ１０８４には、ＲＯＭ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＲＯＭ１０１０は、コンピュータ１０の起動時にＣＰＵ１０００が実行するブートプログラムや、コンピュータ１０のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、入出力チップ１０７０を介してＲＡＭ１０２０または記憶装置２０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【００１４】
コンピュータ１０に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して、記録媒体から読み出されコンピュータ１０にインストールされて実行される。以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。
【００１５】
なお、本実施の形態においては記憶装置２０を備えるものとしてコンピュータ１０を例示したが、この記憶装置２０は他の如何なる装置やシステムに備えられてもよい。記憶装置２０を備える装置・システムは、例えば、ＵＳＢメモリデバイス、携帯電話装置、ＰＤＡ装置、オーディオ・プレーヤ、またはカーナビゲーション・システムなどの、携帯型あるいは移動体に設けられた機器であってもよいし、ファイルサーバやＮＡＳなどの据置型機器であってもよい。
【００１６】
図２は、記憶装置２０の機能構成を示す。記憶装置２０は、メインメモリ２００と、キャッシュメモリ２１０と、キャッシュ制御部２２０とを有し、上述のホストコントローラ１０８２または入出力コントローラ１０８４を介してＣＰＵ１０００からアクセスされる。メインメモリ２００は、例えばフラッシュメモリなどの不揮発性の半導体デバイスであり、ＣＰＵ１０００から出力されるデータを格納する。これに代えて、メインメモリ２００は、ハードディスクドライブ、光磁気ディスクドライブ、および、テープドライブの少なくとも１つを含んでもよい。キャッシュメモリ２１０は、ＣＰＵ１０００に提供するためにメインメモリ２００から読み出したデータをキャッシュし、または、ＣＰＵ１０００からメインメモリ２００に書き込むデータをキャッシュする。キャッシュメモリ２１０は、メインメモリ２００と比較して特にデータの書込みにおいて極めて高速に動作する。このため、書込むべきデータをキャッシュメモリ２１０に蓄積してから一括してメインメモリ２００に書き戻すことで、記憶装置２０全体としての処理効率を高めることができる。
【００１７】
キャッシュ制御部２２０は、論理回路、プログラマブル回路、または、マイクロコントローラなどの電子回路によって実現され、具体的にはホスト側回路２２５Ａおよびメモリ側回路２２５Ｂを有する。ホスト側回路２２５Ａは、ＣＰＵ１０００から受けた読出し要求に応じ、データをキャッシュメモリ２１０から読み出してＣＰＵ１０００に出力する。また、ホスト側回路２２５Ａは、ＣＰＵ１０００から受けた書込み要求に応じ、データをキャッシュメモリ２１０に書き込む。メモリ側回路２２５Ｂは、読出しの要求されたデータがキャッシュメモリ２１０に記憶されていない場合に、メインメモリ２００からそのデータを読み出してキャッシュメモリ２１０に格納する。また、メモリ側回路２２５Ｂは、キャッシュメモリ２１０に書き込まれたデータを、所定の条件が成立した場合にメインメモリ２００に書き戻す。
【００１８】
図３は、キャッシュメモリ２１０のデータ構造の概略を示す。キャッシュメモリ２１０は、複数のキャッシュセグメント３００を有し、これら複数のキャッシュセグメント３００のそれぞれに対応付けられたタグ３１０を記憶している。キャッシュメモリ２１０の記憶領域は、このキャッシュセグメントを単位としてメインメモリ２００に割り当てられる。即ち、キャッシュメモリ２１０の記憶領域はメインメモリ２００の記憶領域と比較してデータサイズが小さく、それぞれのキャッシュセグメント３００は、メインメモリ２００内の何れかのセグメントに対し必要に応じて割り当てられる。割り当ての対象となるキャッシュセグメント３００と、このキャッシュセグメント３００に割り当てられるメインメモリ２００中のセグメントとは、同一のデータサイズである。
【００１９】
また、それぞれのキャッシュセグメント３００は複数のセクタ３２０を含んでよい。１つのキャッシュセグメント３００に含まれるセクタ３２０の数は、好ましくは２の整数乗であり、一例としては４個である。この場合、キャッシュセグメント３００と他のキャッシュセグメント３００との境界アドレスの値は、セクタ３２０のデータサイズの２の整数乗であり、一例としてはデータサイズの４倍である。キャッシュセグメント３００のデータサイズは、例えばメインメモリ２００に対するデータの書込み単位と同一であってもよい。即ちこの場合、キャッシュセグメント３００が書込むべきデータをその一部のみに含む場合には、キャッシュメモリ２１０は、キャッシュセグメント３００の他の部分にメインメモリ２００からデータを読み出したうえで、このキャッシュセグメント３００内のデータをメインメモリ２００に書き戻す。これに代えて、データの書込み単位は、アドレスの連続する２以上のキャッシュセグメント３００を含むブロックであってもよい。また、メインメモリ２００における読出しの単位は、この書き込みの単位よりも小さく、一例としては１または複数のセクタがこれに相当する。
【００２０】
タグ３１０は、対応するキャッシュセグメント３００がメインメモリ２００内の何れのセグメントに割り当てられているかを示す情報を少なくとも含んでいる。詳しくは次の通りである。
図４は、タグ３１０のデータ構造の一例を示す。キャッシュメモリ２１０は、タグ３１０を記憶するためのデータフィールドとして、上位アドレスフィールド４００と、セクタ情報フィールド４１０と、ＬＲＵ値フィールド４２０と、状態フィールド４３０とを有する。上位アドレスフィールド４００は、対応するキャッシュセグメント３００が割り当てられているメインメモリ２００内のセグメントについて、そのアドレス値のうち最上位から予め定められた桁数のアドレス値を記憶する。たとえば、メインメモリ２００内のアドレスが２４ビットで表される場合に、そのうちの下位のｎビットを除外した、上位の（２４−ｎ）ビットのアドレス値が上位アドレスフィールド４００に記憶される。このアドレス値のことを上位アドレス、または、上位アドレス値と称す。また、上位アドレスを除外したアドレスのことを下位アドレス、または、下位アドレス値と称す。
【００２１】
上位アドレス値が（２４−ｎ）ビットで表され、各セクタは下位アドレス値によって一意に定まる場合には、１つのキャッシュセグメント３００に含まれるセクタ３２０の数は２のｎ乗個である。従って、あるキャッシュセグメント３００に含まれる各セクタ３２０が有効なデータを含むかどうかを示す情報は、２のｎ乗ビットで表現される。この情報をセクタ情報と称し、セクタ情報フィールド４１０はこのセクタ情報を記憶する。また、ＬＲＵ値フィールド４２０は、ＬＲＵ値を記憶するためのフィールドである。ＬＲＵ値は、Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄという名称のごとく、未使用の期間を示す指標値である。
【００２２】
具体的には、ＬＲＵ値は、対応するキャッシュセグメント３００についての、未使用期間の長さの順序、あるいは、未使用期間の短さの順序を示してもよい。ここで、「使用」とは、ＣＰＵ１０００による読出し、および、書込みの少なくとも１つの処理の対象となったことをいう。より詳細には、複数のキャッシュセグメント３００に未使用期間の長さまたは短さに応じて順序を付した場合において、ＬＲＵ値は、キャッシュセグメント３００の数を上限とした数値と成る。従って、これを記憶するＬＲＵ値フィールド４２０は、２を底とするセグメント数Ｓの対数だけのビットが必要となる。
【００２３】
状態フィールド４３０は、対応するキャッシュセグメント３００に設定している状態を記憶している。状態は例えば３ビットで表され、各キャッシュセグメント３００は無効状態、共有状態、保護状態、変更状態、および、修正状態を含む複数の状態の何れかに設定されている。各状態の概要は次の通りである。無効状態は、含んでいる全てのセクタ３２０が無効セクタであるキャッシュセグメント３００の状態を示す。無効セクタは、メインメモリ２００と一致するデータを保持しておらず、かつ、メインメモリ２００に書込むべきとしてＣＰＵ１０００から要求されたデータの保持もしていないセクタである。コンピュータ１０を起動した場合等の初期状態において、全てのキャッシュセグメント３００は無効状態である。
【００２４】
共有状態は、有している全てのセクタ３２０が共有セクタであるが、書込みに対しリプレースされ得ることを示す、キャッシュセグメント３００の状態のことをいう。共有セクタは有効セクタであり、メインメモリ２００と一致するデータを保持している。保護状態は、有している全てのセクタ３２０が共有セクタであり、なおかつ、書き換えから保護される、キャッシュセグメント３００の状態を示す。変更状態および修正状態は、それぞれ、本発明に係る更新状態の一例であり、メインメモリ２００と一致しておらず、メインメモリ２００に書込むべきデータを含む状態である。変更状態のキャッシュセグメント３００は、一部のセクタ３２０に、メインメモリ２００に書込むべきデータを含むのに対し、修正状態のキャッシュセグメント３００は、有しているすべてのセクタ３２０に、メインメモリ２００に書込むべきデータを含む。このようなセクタ３２０のことを変更セクタと呼ぶ。変更セクタは有効セクタである。
【００２５】
なお、キャッシュセグメントに状態を定義して遷移させる技術一般については、例えばＭＳＩプロトコル、ＭＥＳＩプロトコル、またはＭＯＥＳＩプロトコルとして知られているように周知であるから、他の実装例やその他の詳細についてはこれらの技術のものを参照されたい。
【００２６】
図５は、キャッシュ制御部２２０による処理のフローチャートを示す。キャッシュ制御部２２０は、ＣＰＵ１０００から書込みまたは読出しの要求を受けたことに応じて、あるいは、予め定められたインターバルで定期的に、以下の処理を行う。キャッシュ制御部２２０は、読出しの要求を受信した場合に（Ｓ５００：ＹＥＳ）、読出しの処理を行う（Ｓ５１０）。具体的には、キャッシュ制御部２２０は、要求されたデータがキャッシュメモリ２１０に記憶されていればキャッシュメモリ２１０から、要求されたデータがキャッシュメモリ２１０に記憶されていなければメインメモリ２００から、そのデータを読み出して、ＣＰＵ１０００に出力する。
【００２７】
また、キャッシュ制御部２２０は、書込みの要求を受信した場合に（Ｓ５２０：ＹＥＳ）、書込みの処理を行う（Ｓ５３０）。具体的には、キャッシュ制御部２２０は、書込みの要求されたデータを書き込むためのキャッシュセグメント３００が既に割り当てられていれば、そのキャッシュセグメント３００にそのデータを書き込む。一方、割り当てられていなければ、キャッシュ制御部２２０は、新たにそのデータを書き込むためのキャッシュセグメント３００を割り当てて、その割り当てたキャッシュセグメント３００にそのデータを書き込む。また、キャッシュ制御部２２０は、要求の受信に関わらず、予め定められた条件が成立したかどうかを判断する（Ｓ５４０）。
【００２８】
予め定められた条件が成立した場合に（Ｓ５４０：ＹＥＳ）、キャッシュ制御部２２０は、上記の変更状態または上記の修正状態のキャッシュセグメント３００を、メインメモリ２００に書き戻す。書き戻されたキャッシュセグメント３００は共有状態に遷移する。条件の具体例とは、たとえば、前回に条件が成立してから予め定められた時間が経過したかどうかである。また、条件とは、変更状態または修正状態のキャッシュセグメント３００の総数が予め定められた基準数を超えたかどうかであってもよい。他の例として、条件とは、共有状態又は保護状態のキャッシュセグメント３００の少数が予め定められた基準数を下回ったかどうかであってもよい。このように、要求に関わらず変更状態または修正状態を解消すれば、その後に新たにキャッシュセグメント３００を割り当てる場合であっても、その時点で書き戻しは必要とならず、割り当て処理の完了待ちに要する時間を短縮できる。
【００２９】
図６は、Ｓ５１０における処理の詳細を示す。キャッシュ制御部２２０は、読出しの要求されたセクタの上位アドレスが、無効状態でない何れかのキャッシュセグメント３００の上位アドレスと一致するかを判断する（Ｓ６００）。これは、たとえば、各キャッシュセグメント３００に対応する上位アドレスフィールド４００および状態フィールド４３０を順次走査して、無効状態のキャッシュセグメント３００を除外したうえで、読出しの要求されたアドレスと比較することによって実現される。何れのキャッシュセグメント３００とも一致しないことを条件に（Ｓ６００：ＮＯ）、キャッシュ制御部２２０は、何れかのキャッシュセグメント３００を、読み出したデータをキャッシュするために割り当てて、その割り当てたキャッシュセグメント３００にそのデータをメインメモリ２００から読み出す（Ｓ６１０）。
【００３０】
このように、読出しの要求されたセクタの上位アドレスが、無効状態でない何れのキャッシュセグメント３００の上位アドレスとも一致しないことを、読出しのキャッシュミスの発生、あるいは、単に読出しのキャッシュミスと呼ぶ。そして、キャッシュ制御部２２０は、読み出したデータをＣＰＵ１０００に対し出力する（Ｓ６５０）。なお、データの出力処理（Ｓ６５０）およびデータをキャッシュメモリ２１０に読み出す処理（Ｓ６１０）の順序はこの順序に限定されず、かつ、同時であってもよい。
【００３１】
一方、キャッシュ制御部２２０は、読出しの要求されたセクタの上位アドレスが、無効状態でない何れかのキャッシュセグメント３００の上位アドレスと一致した場合に（Ｓ６００：ＹＥＳ）、読出しの要求されたアドレスが有効セクタかどうかを判断する（Ｓ６２０）。これは、たとえば、このキャッシュセグメント３００に対応するタグ３１０のセクタ情報フィールド４１０を参照することで実現される。有効セクタの場合に（Ｓ６２０：ＹＥＳ）、キャッシュ制御部２２０は、その有効セクタからデータを読み出して（Ｓ６４０）、ＣＰＵ１０００に出力する。一方有効セクタでない場合には（Ｓ６２０：ＮＯ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００の無効セクタについてはメインメモリ２００の対応するセクタからデータを取得して（Ｓ６３０）、そのデータのうち要求されたデータを出力する（Ｓ６５０）。これらのキャッシュメモリに対する処理、および、データ出力の順序についても、この順序には限定されない。
【００３２】
図７ａは、Ｓ６１０における処理の詳細を示す。図７ｂは、Ｓ６１０の処理において発生し得る状態遷移を示す。これらの図を参照して、上記Ｓ６１０における処理の詳細について説明する。まず、キャッシュ制御部２２０は、キャッシュメモリ２１０が無効状態のキャッシュセグメント３００を含むかどうか判断する（Ｓ７００）。この判断は状態フィールド４３０を参照することで実現される。以降の説明において、あるキャッシュセグメント３００の状態を判断する処理や、ある状態のキャッシュセグメント３００がキャッシュメモリ２１０に含まれるか判断する処理、あるいはキャッシュセグメント３００をある状態に遷移させる処理（設定する処理ともいう）は、状態フィールド４３０を参照または更新することで実現されるので説明を省略する。
【００３３】
キャッシュメモリ２１０が無効状態のキャッシュセグメント３００を含むことを条件に（Ｓ７００：ＹＥＳ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００を選択して、読み出したデータをキャッシュするために割り当てて、その選択したキャッシュセグメント３００にメインメモリ２００からデータを読み出し、そのキャッシュセグメント３００の状態を保護状態に設定する（Ｓ７１０）。キャッシュセグメント３００の割り当ては、例えば、読出しの要求されたメインメモリ２００中のセクタの上位アドレスを、そのキャッシュセグメント３００に対応する上位アドレスフィールド４００に書き込むことによって実現される。また、この割り当てに応じ、キャッシュ制御部２２０は、そのキャッシュセグメント３００に対応するＬＲＵ値を、未使用期間が最も短いことを示す値にリセットする。なお、メインメモリ２００からキャッシュメモリ２１０へのこの読出しのことを、必要に応じて、キャッシュメモリ２１０からの読み出しと区別するためにキャッシュインと称する。
【００３４】
無効状態のキャッシュセグメント３００が含まれていなければ（Ｓ７００：ＮＯ）、キャッシュ制御部２２０は、キャッシュメモリ２１０が共有状態のキャッシュセグメント３００を含むかどうか判断する（Ｓ７２０）。この判断時点で読出しのキャッシュミスが発生しているので、この判断の対象となるのは、読出しの要求されているデータではない他のデータを記憶するために割り当てられているキャッシュセグメント３００である。共有状態のキャッシュセグメント３００を含むことを条件に（Ｓ７２０：ＹＥＳ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００を選択して、読み出したデータをキャッシュするために割り当てて、その選択したキャッシュセグメント３００にメインメモリ２００からデータを読み出し、そのキャッシュセグメント３００の状態を保護状態に設定する（Ｓ７３０）。この割り当てに応じ、キャッシュ制御部２２０は、そのキャッシュセグメント３００に対応するＬＲＵ値を、未使用期間が最も短いことを示す値にリセットする。
【００３５】
次に、キャッシュセグメント３００の割り当てに応じて、キャッシュ制御部２２０は、保護状態のキャッシュセグメント３００が予め定められた基準数を超えたかどうかを判断する（Ｓ７４０）。超えた場合に（Ｓ７４０：ＹＥＳ）、キャッシュ制御部２２０は、保護状態の他のキャッシュセグメント３００を選択して、共有状態に設定する（Ｓ７５０）。好ましくは、キャッシュ制御部２２０は、ＬＲＵ値が最も長い未使用期間を示すキャッシュセグメント３００を選択する。これにより、キャッシュメモリ２１０は、メインメモリと一致するデータを保持する１以上のキャッシュセグメントを、予め定められた基準数を上限に、保護状態に設定しておくことができる。
【００３６】
一方、キャッシュメモリ２１０が無効状態のキャッシュセグメント３００も共有状態のキャッシュセグメント３００も含んでいなければ（Ｓ７２０：ＮＯ）、キャッシュ制御部２２０は、キャッシュメモリ２１０が保護状態のキャッシュセグメント３００を含むかどうか判断する（Ｓ７６０）。この判断時点で読出しのキャッシュミスが発生しているので、この判断の対象となるのは、読出しの要求されているデータではない他のデータを記憶するために割り当てられているキャッシュセグメント３００である。保護状態のキャッシュセグメント３００を含むことを条件に（Ｓ７６０：ＹＥＳ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００を、読み出したデータをキャッシュするために割り当てて、そのキャッシュセグメント３００にメインメモリ２００からデータを読み出し、そのキャッシュセグメント３００の状態を保護状態のまま維持する（Ｓ７７０）。この割り当てに応じ、キャッシュ制御部２２０は、そのキャッシュセグメント３００に対応するＬＲＵ値を、未使用期間が最も短いことを示す値にリセットする。
【００３７】
このように、キャッシュ制御部２２０は、読出しのキャッシュミスに応じ、ひとまず更新状態でないキャッシュセグメント３００の中から新たに割り当てるべきキャッシュセグメント３００を選択し、そのキャッシュセグメント３００をデータ読出しのために新たに割り当てる。そして、その場合、キャッシュ制御部２２０は、遷移先の状態と同一状態の他のキャッシュセグメント３００については、対応するＬＲＵ値を、より長い未使用期間を示す値に更新、例えばインクリメントする（Ｓ７８０）。例えば、遷移先の状態が保護状態ならば、キャッシュ制御部２２０は、新たに割り当てたそのキャッシュセグメント３００以外の保護状態のキャッシュセグメント３００に対応するＬＲＵ値のそれぞれを、より長い未使用期間を示す値に変更する。なお、元々保護状態にあるキャッシュセグメント３００を割り当てに用いた場合には、割り当て前のそのキャッシュセグメント３００のＬＲＵ値よりも未使用期間が短いキャッシュセグメント３００についてのみ、そのＬＲＵ値を更新することが望ましい。これにより、ＬＲＵ値が際限なく増加することを防ぎ、ＬＲＵ値フィールド４２０のビット数を予め決定しておくことができる。
【００３８】
続いて、キャッシュ制御部２２０は、無効状態、共有状態および保護状態の何れのキャッシュセグメント３００もキャッシュメモリ２１０に含まれていないことを条件に（Ｓ７６０：ＹＥＳ）、変更状態または修正状態にある何れかのキャッシュセグメント３００を書き戻しの対象となるキャッシュセグメント３００として選択する（Ｓ７６５）。具体的には、キャッシュ制御部２２０は、その選択したキャッシュセグメント３００の無効セクタにメインメモリ２００からデータを読み出したうえで、その選択したキャッシュセグメント３００内のデータをメインメモリ２００に書き戻す。変更状態および修正状態の何れのキャッシュセグメント３００も存在する場合には、修正状態のキャッシュセグメント３００が変更状態のキャッシュセグメント３００よりも優先して書き戻しの対象となる。同一状態のキャッシュセグメント３００の中ではＬＲＵ値がより長い未使用期間を示すキャッシュセグメント３００が書き戻しの対象として選択される。ＬＲＵ値の等しいキャッシュセグメント３００は同時に書き戻しの対象となる。そして、キャッシュ制御部２２０は、書き戻した１又は複数のキャッシュセグメント３００を共有状態に設定し、Ｓ７００に処理を戻す。
【００３９】
図８は、Ｓ５３０における処理の詳細を示す。キャッシュ制御部２２０は、書込みの要求されたセクタの上位アドレスが、無効状態でない何れかのキャッシュセグメント３００の上位アドレスと一致するかを判断する（Ｓ８００）。何れのキャッシュセグメント３００とも一致しないことを条件に（Ｓ８００：ＮＯ）、キャッシュ制御部２２０は、保護状態でないキャッシュセグメント３００の中から何れかのキャッシュセグメント３００を選択して、書込み対象のセクタをキャッシュするために割り当て、変更状態に遷移させる（Ｓ８１０）。このように、書込みの要求されたセクタの上位アドレスが、無効状態でない何れのキャッシュセグメント３００の上位アドレスとも一致しないことを、書込みのキャッシュミスの発生、あるいは、単に書込みのキャッシュミスと呼ぶ。
【００４０】
キャッシュ制御部２２０は、新たに割り当てるために選択したキャッシュセグメント３００、または、上位アドレスの一致した無効状態でないキャッシュセグメント３００にデータを書き込む（Ｓ８２０）。次に、キャッシュ制御部２２０は、データを書き込んだセクタを有効セクタに設定するべく、データを書き込んだキャッシュセグメント３００に対応するセクタ情報フィールド４１０を更新する（Ｓ８３０）。次に、キャッシュ制御部２２０は、このセクタを有効セクタに設定したことによってこのキャッシュセグメント３００中の全セクタが有効セクタになったかどうかに応じて、このキャッシュセグメント３００の状態を遷移させる（Ｓ８４０）。この状態の遷移に応じて、キャッシュ制御部２２０は、このキャッシュセグメント３００のＬＲＵ値を、最も未使用期間の短い値にリセットする。
【００４１】
そして、キャッシュ制御部２２０は、遷移先の状態と同一状態の他のキャッシュセグメント３００については、対応するＬＲＵ値を、より長い未使用期間を示す値に更新する（Ｓ８５０）。なお、メインメモリ２００への書込み単位が１つのキャッシュセグメント３００ではなく、複数のキャッシュセグメント３００を含むブロックである場合においては、同一ブロックに属するキャッシュセグメント３００を同時に書き戻しの対象とするため、これらのキャッシュセグメント３００のＬＲＵ値は同一であることが望ましい。このため、キャッシュ制御部２２０は更に次の手順でＬＲＵ値を更新することが望ましい。
【００４２】
キャッシュ制御部２２０は、新たにキャッシュセグメント３００を割り当てて、そのキャッシュセグメント３００を変更状態に遷移させた場合や、既に割り当てられていたキャッシュセグメント３００に新たにデータを書き込んだ場合に、そのキャッシュセグメント３００のＬＲＵ値を、最も未使用期間の短いことを示す値にリセットする。そして次に、キャッシュ制御部２２０は、このキャッシュセグメント３００と同一のブロックのデータを記憶する、変更状態にある他のすべてのキャッシュセグメント３００を選択する。そして、キャッシュ制御部２２０は、選択したキャッシュセグメント３００のＬＲＵ値についても、最も未使用期間の短いことを示す値にリセットする。このようにすることで、同一のブロックについては同時に書き戻しの対象とし、書き戻しの必要回数を減少させて処理を全体として効率化できる。
【００４３】
図９ａは、Ｓ８１０における処理の詳細を示す。図９ｂは、Ｓ８１０の処理において発生し得る状態遷移を示す。これらの図を参照して、Ｓ８１０における処理の詳細を説明する。まず、キャッシュ制御部２２０は、キャッシュメモリ２１０が無効状態のキャッシュセグメント３００を含むかどうか判断する（Ｓ９００）。キャッシュメモリ２１０が無効状態のキャッシュセグメント３００を含むことを条件に（Ｓ９００：ＹＥＳ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００を、書き込むデータをキャッシュするために割り当てて、そのキャッシュセグメント３００の状態を変更状態に設定する（Ｓ９１０）。この割り当てに応じ、キャッシュ制御部２２０は、書込み対象以外のセクタを無効セクタに設定する。この時点ではメインメモリ２００からのキャッシュインは行わない。
【００４４】
無効状態のキャッシュセグメント３００が無ければ（Ｓ９００：ＮＯ）、キャッシュ制御部２２０は、キャッシュメモリ２１０が共有状態のキャッシュセグメント３００を含むかどうか判断する（Ｓ９２０）。この判断時点で書込みのキャッシュミスが発生しているので、この判断の対象となるのは、書込みの要求されているアドレスではなく他のアドレスのデータを記憶するために割り当てられているキャッシュセグメント３００である。共有状態のキャッシュセグメント３００を含むことを条件に（Ｓ９２０：ＹＥＳ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００を、書き込むデータをキャッシュするために割り当てて、そのキャッシュセグメント３００の状態を変更状態に設定する（Ｓ９３０）。この時点ではメインメモリ２００からのキャッシュインは行わない。
このように、この割り当ての時点ではメインメモリ２００からのキャッシュインを行わず、後の書き戻し時点（例えばＳ７６５、Ｓ９２５またはＳ１３１０など）までキャッシュインを遅らせることで、読み出されるデータの量を低減して処理を効率化できる。
【００４５】
キャッシュメモリ２１０が共有状態のキャッシュセグメント３００を複数含む場合には、そのうち割り当てに用いられるキャッシュセグメント３００はＬＲＵ値に基づいて選択されてもよい。例えば、キャッシュ制御部２２０は、それらのキャッシュセグメント３００のうち、ＬＲＵ値が最も長い未使用期間を示すキャッシュセグメント３００を選択して、書込みデータをキャッシュするために割り当てる。この割り当てに応じ、キャッシュ制御部２２０は、そのキャッシュセグメント３００に対応するＬＲＵ値を、未使用期間が最も短いことを示す値にリセットする。
【００４６】
一方、キャッシュメモリ２１０が無効状態のキャッシュセグメント３００も共有状態のキャッシュセグメント３００も含んでいなければ（Ｓ９２０：ＮＯ）、キャッシュ制御部２２０は、変更状態または修正状態にある何れかのキャッシュセグメント３００を選択して、そのキャッシュセグメント３００の無効セクタにメインメモリ２００からデータを読み出したうえで、そのデータをメインメモリ２００に書き戻し、そのキャッシュセグメント３００を共有状態に設定する（Ｓ９２５）。そして、キャッシュ制御部２２０は、そのキャッシュセグメント３００を、書き込むデータをキャッシュするために割り当てて、そのキャッシュセグメント３００の状態を変更状態に設定する（Ｓ９３０）。変更状態または修正状態のキャッシュセグメント３００が複数ある場合には、変更状態よりも修正状態のキャッシュセグメント３００が優先して選択され、同一状態のキャッシュセグメント３００が複数ある場合にはＬＲＵ値が最も長い未使用期間を示すキャッシュセグメント３００が選択される。
【００４７】
このように、キャッシュ制御部２２０は、書込みのキャッシュミスに応じて、保護状態でないキャッシュセグメントの中から選択したキャッシュセグメントを、書込みデータをキャッシュするために割り当てる。この結果、既にデータが読み出されて一旦保護状態に設定されたキャッシュセグメントについては、その後に書込みのキャッシュミスが連続した場合であっても、読出しのためのデータを保持するために書込みに対する書き換え（リプレース、置き換え、キャッシュアウト、あるいは、再割り当てとも称される）から保護することができる。
【００４８】
図１０ａは、Ｓ８４０における処理の詳細を示す。図１０ｂは、Ｓ８４０の処理において発生し得る状態遷移を示す。まず、キャッシュ制御部２２０は、書き込みの対象が共有又は保護状態のキャッシュセグメント３００であるか判断する（Ｓ１０００）。共有または保護状態のキャッシュセグメント３００であれば（Ｓ１０００：ＹＥＳ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００の状態を修正状態に設定する（Ｓ１０１０）。この場合にはこのキャッシュセグメント３００はその後も読出しのためのデータをキャッシュし続けることができる。また、キャッシュ制御部２２０は、そのキャッシュセグメント３００の状態が共有状態でも保護状態でもなければ（Ｓ１０００：ＮＯ）、その状態が変更状態かどうかを判断する（Ｓ１０２０）。変更状態でなければ（Ｓ１０２０：ＮＯ）、修正状態ということなので、キャッシュ制御部２２０は、そのキャッシュセグメント３００の状態を修正状態のまま維持する（Ｓ１０３０）。もともと有効セクタのみを含むキャッシュセグメント３００に新たに有効なデータを書き込んでも、有効セクタのみを含む状態には変わりがないからである。
【００４９】
一方、変更状態であれば（Ｓ１０２０：ＹＥＳ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００がまだ無効セクタを含むかどうか判断する（Ｓ１０４０）。即ち、この書込みによって全ての無効セクタに有効なデータが書き込まれたかどうかが判断される。無効セクタが含まれることを条件に（Ｓ１０４０：ＹＥＳ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００の状態を変更状態のまま維持する（Ｓ１０５０）。そのキャッシュセグメント３００が無効セクタを含まないことを条件に（Ｓ１０４０：ＮＯ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００を修正状態に設定する（Ｓ１０１０）。
【００５０】
図１１ａは、Ｓ６３０における処理の詳細を示す。図１１ｂは、Ｓ６３０の処理において発生し得る状態遷移を示す。読出しの要求されたアドレスがキャッシュセグメント３００中の無効セクタであることを条件に、キャッシュ制御部２２０は、そのキャッシュセグメント３００中のその無効セクタも含む全ての無効セクタにメインメモリ２００からデータを読み出す（Ｓ１１００）。これにより、読出しの連続性や局所性といった、一般的に知られるデータアクセスの性質を利用して、その後の読出しを高速化できる。この場合、そのキャッシュセグメント３００に含まれる全てのセクタが有効セクタになるので、そのキャッシュセグメント３００の状態は変更状態から修正状態に遷移する。
【００５１】
次に、キャッシュ制御部２２０は、そのキャッシュセグメント３００のＬＲＵ値を、未使用期間が最も短いことを示す値に更新する（Ｓ１１１０）。キャッシュ制御部２２０は、他のキャッシュセグメント３００のＬＲＵ値を、未使用期間がより長いことを示す値に更新する。これに加えて、キャッシュ制御部２２０は、全てのセクタを有効セクタとしたこのキャッシュセグメント３００中のデータを、メインメモリ２００に書き戻してもよい。この結果、このキャッシュセグメント３００は、メインメモリ２００と一致するデータを保持することを示す共有状態に遷移する。これに加えてさらに、このキャッシュセグメント３００に保持されたデータを以降の読出しのために効果的に使用可能とさせるべく、キャッシュ制御部２２０は、このキャッシュセグメント３００を保護状態に設定してもよい。この場合にはさらに、保護状態のキャッシュセグメント３００の総数を基準数以下に維持する処理が必要となる。この処理は図７ａのＳ７４０、Ｓ７５０およびＳ７８０を参照して説明した処理と略同一であるから説明を省略する。
【００５２】
図１２ａは、Ｓ６４０における処理の詳細を示す。図１２ｂは、Ｓ６４０の処理において発生し得る状態遷移を示す。読出しの要求されたセクタがキャッシュセグメント３００中の有効セクタであることを条件に、キャッシュ制御部２２０は、その有効セクタをデータ出力のために読み出したうえで（Ｓ１２００）、以下の処理を行う。まず、キャッシュ制御部２２０は、そのキャッシュセグメント３００の状態を判断する（Ｓ１２１０）。そのキャッシュセグメント３００の状態が共有状態であることを条件に（Ｓ１２１０：共有）、キャッシュ制御部２２０は、そのキャッシュセグメント３００を保護状態に設定して（Ｓ１２３０）、そのＬＲＵ値を最も短い未使用期間を示す値にリセットする。
【００５３】
この設定に応じ、キャッシュ制御部２２０は、保護状態のキャッシュセグメント３００が予め定められた基準数を超えたかどうかを判断する（Ｓ１２４０）。超えた場合に（Ｓ１２４０：ＹＥＳ）、キャッシュ制御部２２０は、保護状態の他のキャッシュセグメント３００の中から、ＬＲＵ値が最も長い未使用期間を示すキャッシュセグメント３００を選択して、共有状態に設定する（Ｓ１２５０）。そして、キャッシュ制御部２２０は、共有状態の他のキャッシュセグメント３００のＬＲＵ値を、未使用期間がより長いことを示す値に更新する（Ｓ１２６０）。
【００５４】
一方、読出しの対象となったキャッシュセグメント３００が保護状態であることを条件に（Ｓ１２１０：保護）、キャッシュ制御部２２０は、そのキャッシュセグメント３００の状態を保護状態のまま維持する（Ｓ１２２０）。そして、キャッシュ制御部２２０は、保護状態の他のキャッシュセグメント３００に対応するＬＲＵ値のそれぞれを、より長い未使用期間を示す値に更新する（Ｓ１２２５）。ここでも、キャッシュ制御部２２０は、アクセス前のキャッシュセグメント３００よりも未使用期間が短い他のキャッシュセグメント３００についてのみ、そのＬＲＵ値を更新することが望ましい。これにより、ＬＲＵ値が際限なく増加することを防ぎ、ＬＲＵ値フィールド４２０のビット数を予め決定しておくことができる。
【００５５】
一方、読出し他の対象となったキャッシュセグメント３００が他の状態（変更又は修正状態）であることを条件に（Ｓ１２１０：それ以外）、キャッシュ制御部２２０は、そのキャッシュセグメント３００の状態を変更状態又は修正状態のまま維持する（Ｓ１２７０）。そして、キャッシュ制御部２２０は、そのキャッシュセグメント３００のＬＲＵ値を、未使用期間が最も短いことを示す値に更新し（Ｓ１２８０）、それと同一状態の他のキャッシュセグメント３００のＬＲＵ値を、未使用期間がより長いことを示す値に更新する。
【００５６】
図１３ａは、Ｓ５５０における処理の詳細を示す。図１３ｂは、Ｓ５５０の処理において発生し得る状態遷移を示す。キャッシュメモリ２１０にキャッシュされているがメインメモリ２００に書き込まれていないデータを書き込むべき条件が成立した場合に、まず、キャッシュ制御部２２０は、書き戻すべきキャッシュセグメント３００を、修正状態または変更状態のキャッシュセグメント３００の中から選択する（Ｓ１３００）。選択の優先順序は例えば次の通りである。まず、キャッシュ制御部２２０は、修正状態のキャッシュセグメント３００をキャッシュメモリ２１０から検索する。複数検索された場合には、キャッシュ制御部２２０は、ＬＲＵ値が最も未使用期間が長いことを示すキャッシュセグメント３００を選択する。ＬＲＵ値が同じ複数のキャッシュセグメント３００があればそれらは同一のブロックに所属するので、それらはまとめて選択される。一方、修正状態のキャッシュセグメント３００が検索されなければ、キャッシュ制御部２２０は、変更状態のキャッシュセグメント３００を検索する。複数検索された場合には、キャッシュ制御部２２０は、ＬＲＵ値が最も未使用期間が長いことを示すキャッシュセグメント３００を選択する。ＬＲＵ値が同じ複数のキャッシュセグメント３００があればそれらは同一のブロックに所属するので、それらはまとめて選択される。
【００５７】
次に、キャッシュ制御部２２０は、選択したキャッシュセグメント３００が変更状態かどうかを判断する（Ｓ１３０５）、変更状態であることを条件に（Ｓ１３０５：ＹＥＳ）、キャッシュ制御部２２０は、そのキャッシュセグメント３００の無効セクタについてはメインメモリ２００の対応するセクタからデータを取得する（Ｓ１３１０）。この時点でキャッシュセグメント３００は修正状態に遷移する。そして、キャッシュ制御部２２０は、データを無効セクタのために取得したキャッシュセグメント３００内、または、既に修正状態であったキャッシュセグメント３００内のデータを、メインメモリ２００に書き戻す（Ｓ１３２０）。そしてこの場合、キャッシュ制御部２２０は、このキャッシュセグメント３００を共有状態に設定する。
【００５８】
以上、本実施の形態に沿って説明したように、記憶装置２０によれば、書込みの処理速度が遅いメインメモリ２００のために、同一のキャッシュセグメントに対する複数回の書込みをキャッシュして、その後にそれらをまとめてメインメモリ２００に書き戻すことができる。また、一旦読出しの対象となったキャッシュセグメントを、その後の書込みによりリプレースの対象とならない保護状態に設定することで、書込みが連続した場合であっても読出しのためのデータを保持し続けることができる。これにより、読出しおよび書込みのためのキャッシュメモリを別々に設けなくとも、読出し処理の効率を低下させることなく書込みの処理速度を大幅に向上させることができ、結果として記憶装置２０へのアクセスを総合的に効率化できる。
【００５９】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることのできることが当業者にとって明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００６０】
【図１】図１は、本実施の形態に係るコンピュータ１０の全体構成を示す。
【図２】図２は、記憶装置２０の機能構成を示す。
【図３】図３は、キャッシュメモリ２１０のデータ構造の概略を示す。
【図４】図４は、タグ３１０のデータ構造の一例を示す。
【図５】図５は、キャッシュ制御部２２０による処理のフローチャートを示す。
【図６】図６は、Ｓ５１０における処理の詳細を示す。
【図７ａ】図７ａは、Ｓ６１０における処理の詳細を示す。
【図７ｂ】図７ｂは、Ｓ６１０の処理において発生し得る状態遷移を示す。
【図８】図８は、Ｓ５３０における処理の詳細を示す。
【図９ａ】図９ａは、Ｓ８１０における処理の詳細を示す。
【図９ｂ】図９ｂは、Ｓ８１０の処理において発生し得る状態遷移を示す。
【図１０ａ】図１０ａは、Ｓ８４０における処理の詳細を示す。
【図１０ｂ】図１０ｂは、Ｓ８４０の処理において発生し得る状態遷移を示す。
【図１１ａ】図１１ａは、Ｓ６３０における処理の詳細を示す。
【図１１ｂ】図１１ｂは、Ｓ６３０の処理において発生し得る状態遷移を示す。
【図１２ａ】図１２ａは、Ｓ６４０における処理の詳細を示す。
【図１２ｂ】図１２ｂは、Ｓ６４０の処理において発生し得る状態遷移を示す。
【図１３ａ】図１３ａは、Ｓ５５０における処理の詳細を示す。
【図１３ｂ】図１３ｂは、Ｓ５５０の処理において発生し得る状態遷移を示す。
【符号の説明】
【００６１】
１０  コンピュータ
２０  記憶装置
２００  メインメモリ
２１０  キャッシュメモリ
２２０  キャッシュ制御部
２２５Ａ  ホスト側回路
２２５Ｂ  メモリ側回路
３００  セグメント
３１０  タグ
３２０  セクタ
４００  上位アドレスフィールド
４１０  セクタ情報フィールド
４２０  ＬＲＵ値フィールド
４３０  状態フィールド
１０００  ＣＰＵ
【図１】
2008269224.tif 000003
【図２】
2008269224.tif 000004
【図３】
2008269224.tif 000005
【図４】
2008269224.tif 000006
【図５】
2008269224.tif 000007
【図６】
2008269224.tif 000008
【図７ａ】
2008269224.tif 000009
【図７ｂ】
2008269224.tif 000010
【図８】
2008269224.tif 000011
【図９ａ】
2008269224.tif 000012
【図９ｂ】
2008269224.tif 000013
【図１０ａ】
2008269224.tif 000014
【図１０ｂ】
2008269224.tif 000015
【図１１ａ】
2008269224.tif 000016
【図１１ｂ】
2008269224.tif 000017
【図１２ａ】
2008269224.tif 000018
【図１２ｂ】
2008269224.tif 000019
【図１３ａ】
2008269224.tif 000020
【図１３ｂ】
2008269224.tif 000021