(57)【要約】      （修正有）【課題】大容量のキャッシュメモリのキャッシュ処理を高速でおこなう。【解決手段】  キャッシュ処理部がおこなうキャッシュ処理は、まず、サーチ処理Ｐ１で、ステップ１０１にて各インデックス表とタグ表とを用いてキャッシュメモリ上に要求されたタグがあるかどうかのサーチをおこなう。タグがあった場合、ステップ１０３にてこのタグのキャッシュメモリ上のデータアドレスをＣＰＵとその周辺へ渡す。タグがなかった場合、ステップ１０２にて事前に用意されている最終ＬＲＵのタグのキャッシュメモリ上のデータアドレスをＣＰＵとその周辺へ渡す。後処理Ｐ２では、ステップ２０１にてタグに新しいデータのタグを挿入するのと、最終ＬＲＵのデータのタグの削除するのとに関連した各表の整理作業をおこなう。【選択図】  図３
2006012006.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュメモリに記憶しているデータのタグをサーチする手段と、前記サーチの結果、ヒットであればヒットしたタグのアドレスを出力し、ヒットではない場合には事前に用意したＬＲＵであるタグのアドレスを出力する手段と、次回のサーチのため、現時点でのＬＲＵであるタグを決定する手段とを含む、キャッシュ装置。
【請求項２】
請求項１記載のキャッシュ装置において、アクセスされたデータのタグに対応させた形で、アクセスされる度に、アクセス順に増加するポインタ値を記憶する手段と含み、前記ＬＲＵであるタグは、前記ポインタ値を用いて決定され、さらに、全てのポインタ値のうちの最大値が所定の値に達したときに、全てのポインタ値を修正する手段を含む、キャッシュ装置。
【請求項３】
キャッシュメモリに記憶しているデータのタグをサーチする段階と、前記サーチの結果、ヒットであればヒットしたタグのアドレスを出力し、ヒットではない場合には事前に用意したＬＲＵであるタグのアドレスを出力する段階と、次回のサーチのため、現時点でのＬＲＵであるタグを決定する段階とを含む、キャッシュ方法。
【請求項４】
請求項３記載のキャッシュ方法において、アクセスされたデータのタグに対応させた形で、アクセスされる度に、アクセス順に増加するポインタ値を記憶し、前記ＬＲＵであるタグは、前記ポインタ値を用いて決定され、全てのポインタ値のうちの最大値が所定の値に達したときに、全てのポインタ値を修正する段階を含む、キャッシュ方法。
【請求項５】
請求項４記載のキャッシュ方法において、現在の時間に対応したグローバルポインタ値を有するグローバルポインタを設け、前記アクセスされたデータに対応して記憶されるポインタ値として、前記グローバルポインタが現在有するグローバルポインタ値を与える段階と、前記グローバルポインタが有するグローバルポインタ値に１を加える段階と、前記グローバルポインタ値が所定の値に達したときに、前記グローバルポインタ値と、前記データに対応して記憶された全てのポインタ値から、所定の値だけ減ずるシフト処理を行う段階とを含む、キャッシュ方法。
【請求項６】
請求項５記載のキャッシュ方法において、前記シフト処理は分散して順次行われる、キャッシュ方法。
【請求項７】
請求項４乃至６のいずれか１に記載のキャッシュ方法において、前記記憶されたポインタ値は、その大きさに基づいて、ポインタ値が大きいグループであるＭＲＵグループと、小さいグループであるＬＲＵグループと、ＭＲＵグループとＬＲＵグループとの間の中間グループとに分類し、前記ＭＲＵグループに属するタグがヒットされた場合には、該ヒットされたタグのポインタ値は更新せず、前記中間グループとＬＲＵグループに属するタグがヒットされたときには該ヒットされたタグのポインタ値を更新し、前記ＭＲＵグループに属するポインタ値のうちの最小のポインタ値を前記中間グループに移す、キャッシュ方法。
【請求項８】
請求項４乃至７のいずれか１に記載のキャッシュ方法において、前記ポインタ値は、各データのタグを用いてＬＲＵ表として記憶され、前記ＬＲＵ表を同サイズのサブＬＲＵ表に分割する段階と、前記各サブＬＲＵ表から最小のポインタ値を抽出して、該抽出されたポインタ値により中間ＬＲＵ表を作成する段階と、該中間ＬＲＵ表を同サイズの中間サブＬＲＵ表に分割する段階と、さらに前記各中間サブＬＲＵ表から最小のポインタ値を抽出して次の中間ＬＲＵ表を作成する段階を繰り返し、最終ＬＲＵであるタグを抽出する段階を含む、キャッシュ方法。
【請求項９】
請求項８記載のキャッシュ方法において、データがアクセスされることにより前記ＬＲＵ表のポインタ値のいずれかが更新されたとき、前記サブＬＲＵ表と各中間サブＬＲＵ表のうち該変更されたポインタ値に関係する表のみを更新する段階を含む、キャッシュ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データのキャッシュ処理をおこなうキャッシュ装置および方法に関する。さらに詳細にいえば、キャッシュメモリの利用率を従来よりもはるかに高めると共に、大容量のキャッシュメモリにおいてもキャッシュ処理を高速でおこなえるキャッシュ装置および方法に関する。さらには、ホストＰＣと記憶装置とのアクセスの高速化を実現できるキャッシュ装置および方法に関する。
【背景技術】
【０００２】
一般に、ＣＰＵあるいはホストＰＣの処理速度に対して、これらと外部主記憶メディアとのデータのアクセス速度は低速である。従って、ＣＰＵやホストＰＣの能力をいかに向上させても、外部主記憶メディアとのデータのアクセス速度が全体の処理の高速化におけるボトルネックとなってしまう。
【０００３】
この問題を解決するために、従来、ＣＰＵと外部主記憶メディアとの間に、ローカルキャッシュメモリが用いられている。これは、外部主記憶メディアよりも容量は小さいものの、比較的に高速でアクセスすることができるので、一度外部主記憶メディアから読み込んだデータをここに格納することで、全体の処理の速度向上を図ることができる。
【０００４】
一般に、ＣＰＵと、外部主記憶メディアとの間のデータのアクセスは、数バイトからなるデータの単位、即ち、ブロック（あるいはライン）で行なわれている。このブロックは数ビットからなるアドレスを持ち、これが外部主記憶メディアにおけるデータのデータアドレスである。
【０００５】
外部主記憶メディアのデータをキャッシュメモリに対応づけるには、例えば、特開２００４−３８８０７に見られるような、ｎウェイセットアソシアティブ方式が用いられている。この公報の従来例で説明されているように、キャッシュメモリは数ウェイからなり、各々のウェイは複数のブロックからなる。さらに、ウェイ内における各々のブロックには、ウェイ内における位置を示すインデックスが与えられている。このキャッシュメモリに対して、データのデータアドレスの下位数ビットａ１をインデックスとして、また、上位数ビットａ２をこのデータのタグとして使用する。このように、外部主記憶メディアのデータをデータアドレスを元にしてキャッシュメモリ内のブロックに対応づける方法である。
【０００６】
この方法は、データアドレスの下位数ビットａ１が同じであるデータ、即ち、同じインデックスを持つデータをウェイ数分だけ複数格納することができる。しかし、同じインデックスの新しいデータをウェイ数分以上格納するには、各々のウェイに格納されている同じインデックスのデータのうちより、例えば、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）等で選択し、これと置き換えなければならなかった。このとき、他のインデックスに空のブロックがあっても、そこに格納することはできない。なぜなら、外部主記憶メディアのデータのデータアドレスの下位数ビットａ１は、キャッシュメモリにおける特定のインデックスを指定しており、この場所に限定されているからである。従って、この方法では、キャッシュメモリ全体では空所があるにもかかわらず、新しいデータを格納するためにキャッシュメモリ上のデータを削除しなくてはならない場合があり、キャッシュメモリの使用率を低下させていた。
【０００７】
この他の方法に、キャッシュメモリにおけるブロックの全てをウェイとみなす方法がある。この場合、外部主記憶メディアのデータはキャッシュメモリ上における特定の位置に限定されず、このデータをキャッシュメモリ上の全ての位置に格納することができる。しかし、キャッシュメモリ容量やブロック容量の条件を同じとして、前述の方法と比較すると、この方法はタグの個数が多くなってしまう。従って、目的のタグを抽出する処理に時間が掛かってしまう点が問題であった。
【０００８】
【特許文献１】特開２００４−３８８０７
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本願発明は上記従来の問題点に鑑みなされたものであり、大容量のキャッシュメモリにおいてもキャッシュ処理を高速でおこなうキャッシュ装置および方法を提供することを課題とする。さらには、キャッシュメモリの利用率を従来よりはるかに高めることができるキャッシュ装置および方法を提供することを課題とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために本発明は、キャッシュメモリに記憶しているデータのタグをサーチする手段と、前記サーチの結果、ヒットであればヒットしたタグのアドレスを出力し、ヒットではない場合には事前に用意したＬＲＵであるタグのアドレスを出力する手段と、次回のサーチのため、現時点でのＬＲＵであるタグを決定する手段とを含む、キャッシュ装置を提供する。
【００１１】
ある実施の形態においてそのキャッシュ装置は、アクセスされたデータのタグに対応させた形で、アクセスされる度に、アクセス順に増加するポインタ値を記憶する手段と含み、前記ＬＲＵであるタグは、前記ポインタ値を用いて決定され、さらに、全てのポインタ値のうちの最大値が所定の値に達したときに、全てのポインタ値を修正する手段を含んでいる。
【００１２】
上記課題を解決するために本発明は、キャッシュメモリに記憶しているデータのタグをサーチする段階と、前記サーチの結果、ヒットであればヒットしたタグのアドレスを出力し、ヒットではない場合には事前に用意したＬＲＵであるタグのアドレスを出力する段階と、次回のサーチのため、現時点でのＬＲＵであるタグを決定する段階とを含む、キャッシュ方法をも提供する。
【００１３】
ある実施の形態でのそのキャッシュ方法は、アクセスされたデータのタグに対応させた形で、アクセスされる度に、アクセス順に増加するポインタ値を記憶し、前記ＬＲＵであるタグは、前記ポインタ値を用いて決定され、全てのポインタ値のうちの最大値が所定の値に達したときに、全てのポインタ値を修正する段階を含んでいる。
【００１４】
さらに他の実施の形態でのキャッシュ方法は、現在の時間に対応したグローバルポインタ値を有するグローバルポインタを設け、前記アクセスされたデータに対応して記憶されるポインタ値として、前記グローバルポインタが現在有するグローバルポインタ値を与える段階と、前記グローバルポインタが有するグローバルポインタ値に１を加える段階と、前記グローバルポインタ値が所定の値に達したときに、前記グローバルポインタ値と、前記データに対応して記憶された全てのポインタ値から、所定の値だけ減ずるシフト処理を行う段階とを含んでいる。そのより具体的な実施例では、前記シフト処理は分散して順次行われる。
【００１５】
さらに他の実施の形態でのキャッシュ方法においては、前記記憶されたポインタ値は、その大きさに基づいて、ポインタ値が大きいグループであるＭＲＵグループと、小さいグループであるＬＲＵグループと、ＭＲＵグループとＬＲＵグループとの間の中間グループとに分類し、前記ＭＲＵグループに属するタグがヒットされた場合には、該ヒットされたタグのポインタ値は更新せず、前記中間グループとＬＲＵグループに属するタグがヒットされたときには該ヒットされたタグのポインタ値を更新し、前記ＭＲＵグループに属するポインタ値のうちの最小のポインタ値を前記中間グループに移すようになっている。
【００１６】
さらに他の実施の形態でのキャッシュ方法においては、前記ポインタ値は、各データのタグを用いてＬＲＵ表として記憶され、前記ＬＲＵ表を同サイズのサブＬＲＵ表に分割する段階と、前記各サブＬＲＵ表から最小のポインタ値を抽出して、該抽出されたポインタ値により中間ＬＲＵ表を作成する段階と、該中間ＬＲＵ表を同サイズの中間サブＬＲＵ表に分割する段階と、さらに前記各中間サブＬＲＵ表から最小のポインタ値を抽出して次の中間ＬＲＵ表を作成する段階を繰り返し、最終ＬＲＵであるタグを抽出する段階を含んでいる。
【００１７】
さらに他の実施の形態でのキャッシュ方法においては、データがアクセスされることにより前記ＬＲＵ表のポインタ値のいずれかが更新されたとき、前記サブＬＲＵ表と各中間サブＬＲＵ表のうち該変更されたポインタ値に関係する表のみを更新する段階を含んでいる。
【発明の効果】
【００１８】
本発明における上記に述べたキャッシュ装置および方法は、最終ＬＲＵのデータのタグ、即ち、キャッシュメモリ上で最も遠い過去に使用されたデータのタグを高速で抽出することができる。さらに、本発明は、キャッシュメモリのブロック全てを常に使用できるのでキャッシュメモリにおけるヒット率を高めることができる。従って、タグの個数が大量となる大容量のキャッシュメモリのキャッシュ処理を高速でおこなうことができるとともに、ヒット率の高いキャッシュ装置および方法を提供することができる。
【００１９】
従って、本発明は、特にＨＤＤアレーやＤＶＤアレー等、比較的にオーバーヘッドの高いメディアを利用する場合、データのアクセス速度を向上させるに有効である。また、本発明は、多数のクライアントのアプリケーションから同一の外部主記憶メディアにアクセスするネットワークシステム等に利用することで、高速処理ができるシステムを比較的低価格で構築することができる。さらに、本発明は、比較的に高速なサーチ手法、例えばＣＡＭ（Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓｅｄ  Ｍｅｍｏｒｙ）等を用いることで、より高速なシステムとすることができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の具体的な実施の形態について図面を参照しながら説明する。図１は、本発明を用いたシステムの概略図である。符号１は、ホストであり、データのアクセスを命令するＰＣやワークステーション等である。符号２は、キャッシュ装置であり、キャッシュ装置２はキャッシュ制御部７ａとキャッシュメモリ７ｂとからなる。符号３は、記憶装置であり、データを保存するＨＤＤアレーやＤＶＤアレー等の外部主記憶メディアである。キャッシュ装置２は、ホスト１と記憶装置３の間でデータの受け渡し等をする役割を果たす。ホスト１とのデータの受け渡しはホストインターフェイス７ｃを経由しておこない、記憶装置３とのデータの受け渡しはターゲットインターフェイス７ｄを経由しておこなう。
【００２１】
ホスト１からデータを書き込む命令が出された時、キャッシュ装置２は、ホスト１から指示されたデータを受け取り、記憶装置３にこれを書き込むと共にキャッシュ装置２内のキャッシュメモリ７ｂにも、これを最も最近に使用されたデータ、即ち、ＭＲＵ（Ｍｏｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）データとして格納する。
【００２２】
これとは逆に、ホスト１からデータを読み込む命令が出された時、キャッシュ装置２は、まず、キャッシュメモリ７ｂに指示されたデータがあるかどうかを確認する。このデータがある場合は、キャッシュ装置２はそのデータを即時にホスト１に渡す。そして、このデータは今までのＭＲＵよりも最近に使用されたこととなり、今までのＭＲＵデータに代わって新しいＭＲＵデータとしてキャッシュメモリ７ｂ内にそのまま格納される。指示されたデータがない場合、キャッシュ装置２は記憶装置３よりこのデータを得て、これを新しいＭＲＵデータとしてキャッシュメモリ７ｂ内に格納する。そして、このデータをホスト１に渡す。ところで、新しいデータをキャッシュメモリ７ｂに格納する際、キャッシュメモリ７ｂにそのスペースがない場合、この新しいデータは、キャッシュメモリ７ｂに格納しているデータの中で遠い過去に使用されたデータの中から、キャッシュメモリ７ｂから除去すべきデータ、即ち、ＬＲＵデータと置き換わって格納される。
【００２３】
図のシステムにおけるキャッシュ装置２の主な働きは以上に述べた通りである。つまり、キャッシュ装置２は、キャッシュメモリ７ｂにデータを格納し、これを利用する処理をおこなう、即ち、キャッシュ処理をおこなうことで、システムの高速化を図るものである。このキャッシュ処理は、データが持つ数ビットからなるデータアドレスから得るタグを利用することで実現され、このタグを利用したキャッシュ処理についての詳細な説明は、後述する。
【００２４】
図２は、キャッシュ装置２の、より詳細な構成を示す図である。キャッシュ装置２におけるキャッシュ制御部７ａは、符号４で示されたＣＰＵとその周辺部（以下、単にＣＰＵ４という）と、符号５で示された制御回路とからなる。制御回路５は、データの受け渡しをおこなうインターフェース部６ａと、詳細な説明は後述するキャッシュ処理をおこなうキャッシュ処理部６ｂとからなる。
【００２５】
キャッシュ装置２は、ホスト１からの書き込みおよび読み込み命令を、ホストインターフェイス７ｃを経由して、インターフェイス部６ａの橋渡しにより、ＣＰＵインターフェイス６ｃを経由してＣＰＵ４に送る。ＣＰＵ４はこの命令に従い、キャッシュ処理の命令を、ＣＰＵインターフェイス６ｃを経由してインターフェイス部６ａの橋渡しにより、キャッシュ処理部６ｂに与える。キャッシュ処理部６ｂは、この命令によりキャッシュ処理をおこなう。その後、キャッシュ処理部６ｂは、キャッシュ処理の結果をＣＰＵ４に渡す。そして、ＣＰＵ４はインターフェイス部６ａを橋渡しとして、ホスト１に、あるいは、記憶装置３に、あるいは、キャッシュメモリ７ｂに対して書き込みおよび読み込みの制御をおこなう。尚、ここで取り上げた制御回路５は、例えば、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）等を利用することで実現することができる。また、本実施の形態においては制御回路としたが、必ずしも回路として構成する必要はない。例えば、これをソフトウェアを用いて実現することもできる。
【００２６】
図３は、キャッシュ処理部６ｂでおこなわれるキャッシュ処理のフローチャートである。前述の通り、ＣＰＵ４はキャッシュ処理の命令をキャッシュ処理部６ｂに与える。ここでの命令は所定のタグの要求であり、図における符号３０のサーチ要求で示される。キャッシュ処理部６ｂがおこなう本願発明のキャッシュ処理は、図において破線で囲まれたサーチ処理Ｐ１と後処理Ｐ２とによる２段階の処理からなることを特徴とする。即ち、サーチ処理Ｐ１ではサーチ要求３０によりキャッシュメモリ７ｂ内のタグのサーチをおこない、その結果を符号３１、３２が示すサーチ結果として先にＣＰＵ４に渡す。そして、ＣＰＵ４にサーチ結果を渡した後に、後処理Ｐ２では次回のキャッシュ処理の準備をおこなう。これらの処理の詳細な説明は、後述する。
【００２７】
図４では、キャッシュ処理をおこなう際に使用するインデックス１表８ａ、インデックス２表９ａ、・・・、インデックスｎ表１０ａとタグ表１１ａとを示している。前述のサーチ処理Ｐ１はこれらを用いておこなわれる。タグ表１１ａは、同サイズの複数のサブタグ表１１ｂ、１１ｃ、１１ｄ・・・からなる。そして、目標のタグがどのサブタグ表１１ｂ、１１ｃ、１１ｄ・・・にあるかどうかを調べるために、インデックス１表８ａから次の段階のインデックス２表９ａ、さらに次の段階へと続き、最後にインデックスｎ表１０ａを用いた各段階の絞り込み処理をおこなう。
【００２８】
タグを絞り込むために用いるインデックス１表８ａは、複数のセル８ｂ、８ｃ、８ｄ、・・・からなる。これらは、キャッシュメモリ７ｂ内のタグを所定の範囲のタグ値ごとにグループ分けするための情報を備えている。このグループ分けは、グループの区切りとなるタグ値にはキャッシュメモリ７ｂ内にあるデータのタグのタグ値を用いることと、グループにおけるタグの個数は所定の個数以内とすることを条件としておこなわれる。従って、各々のセル８ｂ、８ｃ、８ｄ、・・・は、グループに分けられた次の段階であるインデックス２表のサブ表９ｂ、９ｃ、９ｄ・・・における先頭のタグ値と、インデックス２のサブ表９ｂ、９ｃ、９ｄ・・・の番号からなる。また、これらのセル８ｂ、８ｃ、８ｄ、・・・は、タグ値の大きさ順にソートされている。各々のセル８ｂ、８ｃ、８ｄ、・・・より示される所定の範囲に目標のタグのタグ値が含まれる時、その範囲のインデックス２表のサブ表の番号を得ることで、このタグの見つけるための絞り込みがおこなわれる。
【００２９】
そして、次の段階となるインデックス２表９ａにより更なる絞り込みがおこなわれる。インデックス２表９ａは複数のインデックス２のサブ表９ｂ、９ｃ、９ｄ・・・からなる。これらのインデックス２のサブ表９ｂ、９ｃ、９ｄ、・・・は、インデックス１表８ａと同様に、次の段階であるインデックス３表のサブ表における先頭のタグ値と、インデックス３のサブ表の番号からなる複数のセルで構成されている。これらの内、インデックス１表８ａの段階で選択されたインデックス２表のサブ表の各々のセルより示される所定の範囲に目標のタグのタグ値が含まれる時、その範囲のインデックス３表のサブ表の番号を得ることができる。これにより、このタグを見つけるための絞り込みが更におこなわれる。
【００３０】
このように、目標のタグに達するためにインデックス１表８ａから最終的にはインデックスｎ表１０ａへと段階ごとに絞り込んでいく。このインデックスｎ表１０ａは、複数のインデックスｎのサブ表１０ｂ、１０ｃ、１０ｄ、・・・からなる。これらのインデックスｎのサブ表１０ｂ、１０ｃ、１０ｄ・・・は、サブタグ表１１ｂ、１１ｃ、１１ｄ、・・・の先頭タグ値と、サブタグ表１１ｂ、１１ｃ、１１ｄ、・・・の番号からなる複数のセルで構成されている。従って、目標のタグのタグ値を含んだサブタグ表の番号を得て、これに到達することができる。サブタグ表１１ｂ、１１ｃ、１１ｄ・・・内における各々のタグは、タグ値の大きさ順にソートされており、ここで目標のタグがあるかどうかを調べることができる。
【００３１】
要求されたタグがある、即ち、ヒットであると、このタグのキャッシュメモリ７ｂのデータアドレスを得ることができる。要求されたタグがなかった、即ち、ヒットされなかった場合、タグ表１１ａにおける表の整理処理が必要となる。前述の通り、キャッシュ処理によりＬＲＵデータに新たなデータであるＭＲＵデータが置き換わる。この時、ＭＲＵデータのタグは、このタグ値によりタグ表１１ａの各サブタグ表１１ｂ、１１ｃ、１１ｄ、・・・のいずれかに挿入される。そして、このＭＲＵデータと置き換わったデータのタグ、即ち、ＬＲＵデータのタグは、このタグが記入されていたサブタグ表より削除されるからである。
【００３２】
通常は、このようにサブ表１１ａの表の整理処理だけがおこなわれる。ところが、この表の整理処理により、サブタグ表１１ｂ、１１ｃ、１１ｄ・・・の増減が発生する場合があり、この時は、これに伴い各インデックス表の表の整理処理もおこなわなければならない。これらの各表の増減は、各表に対応するマッピング表１３、・・・、１４、１５により管理されている。
【００３３】
サブタグ表１１ｂ、１１ｃ、１１ｄ・・・の増減は以下の条件で発生する。即ち、ＭＲＵデータのタグが挿入されたサブタグ表におけるタグの個数が所定の個数を超えた場合である。この場合、使用していないサブタグ表をサブ表のマッピング表１５から得て、これにタグの個数の半分を分けることになり、サブタグ表の増加となる。また、ＬＲＵデータのタグが削除されたサブタグ表におけるタグの個数が所定の個数の、例えば、４分の１になった場合は、サブタグ表の減少となる。この場合、そのサブタグ表は、論理的に隣接する、すなわち、その先頭タグ値に最も近い先頭タグ値を有するサブタグ表と合併し、これにより１つのサブタグ表は使用されない状態になる。しかし、合併したときのタグの合計数が前述の所定の個数を越えてしまう場合は、合計したタグの個数を半分に分けて２つのサブタグ表に分けるので、このタグの削除する作業に関連するサブタグ表の増減はない。
【００３４】
図５では、キャッシュ処理をおこなう際に使用するＬＲＵ表１６と中間１ＬＲＵ表１７と中間ｎＬＲＵ表１８を示している。これらの表は、キャッシュメモリ７ｂ上において最も遠い過去にアクセスされたデータを示すタグ、即ち、最終ＬＲＵ１９のタグを抽出するために用いられる。
【００３５】
ＬＲＵ表１６は、キャッシュメモリ７ｂに格納されている全てのデータのタグからなり、これらのタグはＬＲＵを抽出するためのポインタ値を備えている。ポインタ値とは、アクセスがおこなわれたデータに与えられる数値で、これは、符号２３に示されるグローバルポインタから与えられ、キャッシュ処理における現時刻に対応するものである。このグローバルポインタ２３の値は、常に現段階のＭＲＵのポインタ値＋１の値となっている。このポインタ値を備えたこれらのタグは、所定の個数ごとに同サイズからなる複数のサブＬＲＵ表２０ａ、２０ｂ、・・・に分けられており、ＬＲＵ表１６は複数のサブＬＲＵ表２０ａ、２０ｂ、・・・からなる。
【００３６】
最終ＬＲＵ１９のタグを抽出するにあたり、先ず、ＬＲＵ表１６の各サブＬＲＵ表２０ａ、２０ｂ・・・より最も小さいポインタ値を持つタグが抽出される。そして、これらが集まり中間１ＬＲＵ表１７となる。中間１ＬＲＵ表１７の内容は、ＬＲＵ表から抽出されたタグのポインタ値と、これに対応するデータアドレスで構成されている。中間１ＬＲＵ表１７は、同サイズからなる複数の中間１サブＬＲＵ表２１ａ、２１ｂ、・・・に分けられている。この各中間１サブＬＲＵ表２１ａ、２１ｂ、・・・より最も小さいポインタ値が抽出される。そして、これらが集まり中間２ＬＲＵ表となる。このように、ＬＲＵ表１６から、最終的には１つの中間ｎサブＬＲＵ表２２を有する中間ｎＬＲＵ表１８へと段階ごとに絞り込んでいくことで、最終ＬＲＵ１９が抽出され、これのキャッシュメモリ上のアドレスとタグを知ることができる。
【００３７】
ところで、この最終ＬＲＵ１９の抽出ために毎回全ての表の処理をする必要はない。即ち、最終ＬＲＵ１９を抽出するには、前の処理において変化のあったサブＬＲＵ表と、中間１サブＬＲＵ表と、・・・、中間ｎサブＬＲＵ表の処理をするのみでよい。
【００３８】
例えば、タグの個数が全部で１,０００個とし、サブＬＲＵ表２０ａ、２０ｂ、・・・と各中間サブＬＲＵ表とにおけるタグの個数を１０個と設定した場合、サブＬＲＵ表２１ａ、２１ｂ、・・・の数は１００個となり、中間１サブＬＲＵ表２１ａ、２１ｂ、・・・の数は１０個となり、そして、中間２サブＬＲＵ表は１個となり、これより最終ＬＲＵ１９が抽出される。この条件で、ＬＲＵ表１６の１５番目のタグが新しいＭＲＵデータのタグを置き換わった場合、新たな最終ＬＲＵ１９を抽出するために処理が必要な表は変化のあった表、即ち、（２番目の）サブＬＲＵ表２０ｂと、（１番目の）中間１サブＬＲＵ表２１ａと、中間２サブＬＲＵ表のみである。これらの３つの各表の処理は次のようにおこなわれる。（２番目の）サブＬＲＵ表２０ｂから最小のポインタ値であるＬＲＵ１を抽出すると共に、（１番目の）中間１サブＬＲＵ表２１ａと、中間２サブＬＲＵ表とのそれぞれから最小のポインタ値であるＬＲＵ２とＬＲＵ３とを抽出する。そして、このＬＲＵ１を（１番目の）中間１サブＬＲＵ表２１ａに記入するとともに、ＬＲＵ１とＬＲＵ２とを比較する。そして、その小さい方を中間２サブＬＲＵ表に記入するとともに、これとＬＲＵ３とを比較する。その小さい方が最も小さいＬＲＵ、即ち、新たな最終ＬＲＵ１９となる。
【００３９】
図６は、ＬＲＵ表１６とキャッシュメモリ７ｂとの関係を示している。図のように、ＬＲＵ表１６におけるサブＬＲＵ表２０は、キャッシュメモリ７ｂ上のメモリ大ブロックに対応している。さらに、サブＬＲＵ表２０ａ、２０ｂ、・・・における１つのタグが示すデータは、キャッシュメモリ７ｂ上のメモリ小ブロックに対応している。
【００４０】
例えば、１つのタグが６４ＫＢのデータを代表する場合、メモリ小ブロックのサイズは６４ＫＢである。これと同時に、サブＬＲＵ表２０のサイズを１０とした場合、メモリ大ブロックのサイズは６４０ＫＢである。キャッシュメモリ７ｂの全容量が６４ＧＢであれば、ＬＲＵ表１６は１０万個のサブＬＲＵ表２０からなる。
【００４１】
図７は、ポインタ値のシフト処理前とシフト処理後を示している。シフト処理とは、キャッシュメモリ７ｂ上における全てのタグのポインタ値を所定の数値だけ減少させる処理である。即ち、キャッシュ処理により最終ＬＲＵ１９のポインタ値を持つタグがＭＲＵのポインタ値を持つタグに置き換わることで、キャッシュメモリ７ｂ内における各タグが備えるポインタ値は常に増える方向となっている。従って、一定の期間の経過によりおこるＭＲＵのポインタ値のオーバーフローを防ぐため、ＭＲＵのポインタ値の上限値を基準として定期的におこなう処理である。
【００４２】
この処理は、各サブＬＲＵ表２０ａ、２０ｂ・・・と、各中間１サブＬＲＵ表２１ａ、２１ｂ、・・・と、・・・、中間ｎサブＬＲＵ表２２とに対して、表単位でおこなう。例えば、１回のキャッシュ処理の後に、予め決められた順番でこれらの１つの表をシフト処理する。そのため、最終ＬＲＵ１９を抽出する処理において、シフト処理済みの表からシフト処理をまだしていない表にポインタ値を移すときには、これをシフト処理前の数値に戻してからおこなう。シフト処理の回数は、ＬＲＵ表１６におけるタグの個数が１，０００個で、各サブＬＲＵ表のタグの個数が１０個の場合、１１１回の処理になる。ポインタ値の上限値を１０，０００，０００に設定し、シフト処理する数値を８，０００，０００とした場合、８，０００，０００回のキャッシュ処理の中で１１１回のシフト処理をすることとなる。
【００４３】
次に、キャッシュ処理部６ｂにおけるキャッシュ処理の流れを図３のフローチャートを用いて説明をする。キャッシュ処理部６ｂの入口ではステップ９１のサーチ要求待ちの処理により、ＣＰＵ４のサーチ要求３０を受け取る。サーチ要求待ち処理は、サーチ要求３０を受け取らなければ先の処理に進むことができないようにループしている。ステップ９１でサーチ要求３０を受けることによりキャッシュ処理は開始され、前述の通り、本願発明ではこの処理をサーチ処理Ｐ１と後処理Ｐ２の２段に分けておこなう。
【００４４】
サーチ処理Ｐ１では、ステップ１０１にて、ＣＰＵ４のサーチ要求３０であるタグのサーチをおこなう。前述の通り、先ず、各インデックス表８ａ、９ａ、・・・、１０ａとタグ表１１ａを用いて、目的のタグがキャッシュメモリ７ｂ上にあるかどうかを調べる。
【００４５】
目的のタグがあった場合、即ちヒットの場合、ステップ１０３にてそのサーチ結果３１を、即ち、タグ表１１ａを用いて得た目的のタグのキャッシュメモリ７ｂ上のデータアドレスをＣＰＵ４に渡す。そして、後述するステップ２０３へ進む。目的のタグがなかった場合、即ちヒットしなかった場合、ステップ１０２にて事前に用意されているサーチ結果３２を、即ち、最終ＬＲＵのタグのキャッシュメモリ７ｂ上のデータアドレスをＣＰＵ４に渡す。このように目的のタグの有無に係らず、本願発明のキャッシュ処理は、まず、サーチ処理Ｐ１にてＣＰＵ４にサーチ要求３０のサーチ結果をすぐに渡し、その後に次のキャッシュ処理の準備としての後処理Ｐ２をおこなうこととしたので、システム全体としての高速化が図れる。
【００４６】
後処理Ｐ２は、初めにタグ表１１ａの表の整理処理をおこなう。ステップ２０１では、前述したように、キャッシュメモリ７ｂに格納された新しいデータのタグをタグ表１１ａに挿入する。そして、ステップ２０２にて、この新しいデータと置き換わったＬＲＵのデータのタグをタグ表１１ａから削除する。そして、前述した各表の整理作業をおこなう。この後、ステップ２０３へ進む。
【００４７】
ステップ２０３にて、次回のキャッシュ処理のために最終ＬＲＵ１９のタグを用意する。また、この処理は、サーチ処理Ｐ１にて目的のタグがヒットした場合でも、ステップ１０３を経て実行される。ここでは、ＬＲＵ表１６を用いて最終ＬＲＵ１９のタグを抽出する。そして、この処理の後、ＭＲＵのポインタ値が所定の基準値に達したかどうかの判断がなされる。基準値に達していない場合はキャッシュ処理の入口、即ち、ステップ９１へ戻る。基準値に達した場合はステップ２０４に進む。
【００４８】
ステップ２０４ではポインタ値のシフト処理がおこなわれる。即ち、限りなく増加するポインタ値がオーバーフローとなる前に、前述の通り、ポインタ値を減少させる方向にシフトする処理である。
【００４９】
ところで、キャッシュ処理の中で常にヒットがない、あるいは、ヒットとなってもＬＲＵのタグのみである場合、ＬＲＵ表１６の中のＭＲＵのポインタ値とＬＲＵのポインタ値との差がＬＲＵ表１６におけるタグの個数と等しくなる。しかし、ＭＲＵのポインタ値とＬＲＵ以外のポインタ値を持つタグがヒットした場合、そのタグは新しいＭＲＵになり、ＭＲＵのポインタ値と最終ＬＲＵのポインタ値との差がＬＲＵ表１６におけるタグの個数より大きくなって行く。この場合の極端な例では、ＭＲＵのタグとＭＲＵ−1のタグが交互に繰り返してヒットされると、この２つのポインタ値だけが増加する。この状態でシフト処理がおこなわれると、他のポインタ値はゼロに近い値に、あるいは、ゼロ以下となってしまう。
【００５０】
この問題を解決するために、ＬＲＵ表１６の全てのタグをグループ分けし、それぞれのグループに対して異なったポインタ値の処理をおこなう。即ち、ＭＲＵのポインタ値を一番として、以下順番に最近に使用された所定の個数のタグの集団をＭＲＵグループとする。そして、このＭＲＵグループのタグがヒットされた場合は、そのタグのポインタ値はグローバルポインタ２３の値に書き換えないことにする。また、例えば、ずっとヒットされないタグのポインタ値がシフト処理によりゼロ以下になった場合、そのポインタ値はゼロとする。そして、ポインタ値がゼロのタグをＬＲＵグループとする。従って、このＬＲＵグループ内におけるタグには優先順位がないため、最終ＬＲＵは、ＬＲＵ表１６内における所定の順番により選出される。そして、ＭＲＵグループとＬＲＵグループ以外のタグを中間グループとする。ＬＲＵグループと中間グループとにおけるタグがヒットされた場合は、このタグのポインタ値はグローバルポインタ２３の値に書き換えられ、新しいＭＲＵのポインタ値となる。
【００５１】
例えば、全部で１，０００個のタグがあって、ＭＲＵグループを５００個に設定した場合、このＭＲＵグループのタグがヒットされたとき、このタグのポインタ値はＭＲＵのポインタ値に更新されない。このとき、ＬＲＵ表１６における全てのタグのポインタ値には変化がない。ＭＲＵのポインタ値より５００番目以上に小さいポインタ値を持つタグは、中間グループとＬＲＵグループとなる。これらのタグがヒットされると、そのタグのポインタ値はＭＲＵのポインタ値に更新されて、このタグはＭＲＵグループに追加される。このとき、ＭＲＵグループのタグのポインタ値は自然数で連続した値となっている。従って、ＭＲＵグループにおける５００番目のタグが自動的に中間グループとなる。キャッシュメモリ７ｂ内になかったデータがキャッシュメモリ７ｂに追加されるときは、ＬＲＵデータとこのデータが置き換わる。このデータのタグはＭＲＵのポインタ値を持つタグとなるので、これはＭＲＵグループに追加される。そして、次のキャッシュ処理の準備のために、ＬＲＵグループにおける所定の順番により最終ＬＲＵが抽出される。
【００５２】
尚、本発明の実施例の説明においては、ホストとなるＰＣ等と記憶装置となる外部主記憶装置等とにおけるキャッシュ装置および方法として取り上げている。しかし、本発明はこれに限定されるものではない。例えば、ＣＰＵと、ＣＰＵコア付近となり一般にＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）からなるキャッシュメモリとにおいても本発明の方法を用いることができる。また、ＯＳによりメインメモリ上でおこなわれる各種のキャッシュ処理、例えば、マップキャッシュといった技術においても本発明の方法を用いることができる。
【図面の簡単な説明】
【００５３】
【図１】本発明の実施の形態に係るシステムの概略図である。
【図２】本発明の実施の形態に係るキャッシュ処理装置のより詳細な構成を示す図である。
【図３】本発明の実施の形態に係るキャッシュ処理部でおこなわれるキャッシュ処理のフローチャートである。
【図４】本発明の実施の形態に係るキャッシュ処理をおこなう際に使用するインデックス１表と、インデックス２表と、インデックスｎ表と、タグ表とを示した図である。
【図５】本発明の実施の形態に係るキャッシュ処理をおこなう際に使用するＬＲＵ表と、中間１ＬＲＵ表と、中間ｎＬＲＵ表とを示した図である。
【図６】本発明の実施の形態に係るＬＲＵ表とキャッシュメモリとの関係を示した図である。
【図７】本発明の実施の形態に係るポインタ値のシフト処理前とシフト処理後を示した図である。
【符号の説明】
【００５４】
１    ホスト
２    キャッシュ装置
３    記憶装置
４    ＣＰＵとその周辺
５    制御回路
６ａ  インターフェース部
６ｂ  キャッシュ処理部
７ｂ  キャッシュメモリ
８ａ  インデックス１表
８ｂ、８ｃ、８ｄ  インデックス１表のセル
１１ａ  タグ表
１１ｂ、１１ｃ、１１ｄ  サブタグ表
１６    ＬＲＵ表
１９    最終ＬＲＵ
２０ａ、２０ｂ  サブＬＲＵ表
２３    グローバルポインタ
【図１】
2006012006.tif 000003
【図２】
2006012006.tif 000004
【図３】
2006012006.tif 000005
【図４】
2006012006.tif 000006
【図５】
2006012006.tif 000007
【図６】
2006012006.tif 000008
【図７】
2006012006.tif 000009