(57)【要約】【課題】データの過去の使用頻度に応じて、キャッシングの要否を判断できるようにする。【解決手段】上位レベルメモリ２上で各データのアクセス回数が計数される。上位レベルメモリ２で無効化された置き換え対象データのアクセス回数は、下位レベルメモリ３のアクセス回数ログ３ｃに設定される。そして、上位レベルメモリ２でミスヒットした場合、アクセス対象データに対応するアクセス回数ログの値が所定値以上であれば、アクセス対象データが上位レベルメモリ２に格納される。【選択図】        図１
2004355365.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵからのアクセス要求に応じたキャッシュ処理を制御するキャッシュ管理装置において、
前記ＣＰＵに接続された上位レベルメモリと、
前記上位レベルメモリに格納された各データのアクセス回数を計数するカウンタと、
前記ＣＰＵと前記上位レベルメモリとに接続され、前記上位レベルメモリに格納された各データに対応するデータを格納する下位レベルメモリと、
前記下位レベルメモリに格納された各データに対応づけて設けられたアクセス回数ログと、
前記ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが前記上位レベルメモリにヒットすると、前記アクセス対象データに対応する前記カウンタの値をカウントアップし、前記上位レベルメモリ内の置き換え対象データを無効化したとき、前記置き換え対象データに対応する前記カウンタの値を、前記下位レベルメモリ内の前記置き換え対象データに対応する前記アクセス回数ログに設定し、前記アクセス対象データが前記上位レベルメモリにミスヒットしたとき、前記下位レベルメモリ内の前記アクセス対象データの前記アクセス回数ログの値が所定値より大きければ、前記アクセス対象データを前記上位レベルメモリに格納するメモリコントローラと、
を有することを特徴とするキャッシュ管理装置。
【請求項２】
前記メモリコントローラは、前記下位レベルメモリに格納された各データのアクセス回数を計数し、前記アクセス回数ログに合算することを特徴とする付記１記載のキャッシュ管理装置。
【請求項３】
前記メモリコントローラは、前記アクセス要求がライト要求である場合、前記アクセス対象データが前記上位レベルメモリにミスヒットしたとき、前記下位レベルメモリ内の前記アクセス対象データの前記アクセス回数が所定値より大きければ、前記アクセス対象データを前記上位レベルメモリに格納することを特徴とする付記１記載のキャッシュ管理装置。
【請求項４】
ＣＰＵからのアクセス要求に応じたキャッシュ処理を制御するキャッシュ管理装置において、
前記ＣＰＵに接続された上位レベルメモリと、
前記上位レベルメモリに格納された各データのアクセス回数を計数するカウンタと、
前記ＣＰＵと前記上位レベルメモリとに接続され、前記上位レベルメモリに格納された各データに対応するデータを格納する下位レベルメモリと、
前記ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが前記上位レベルメモリにヒットすると、前記アクセス対象データに対応する前記カウンタの値をカウントアップするとともに、前記アクセス要求がデータライト要求である場合、前記上位レベルメモリへデータの書き込みを行い、前記アクセス要求がデータライト要求であり、且つ前記アクセス対象データの前記カウンタの値が前記所定値以下である場合、前記下位レベルメモリへもデータの書き込みを行うメモリコントローラと、
を有することを特徴とするキャッシュ管理装置。
【請求項５】
上位レベルメモリと、前記上位レベルメモリに格納されたデータに対応するデータを格納する下位レベルメモリとへのＣＰＵからのアクセス要求に応じたキャッシュ処理を制御するためのキャッシュメモリ管理方法において、
前記ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが前記上位レベルメモリにヒットすると、前記アクセス対象データに対応するカウンタの値をカウントアップし、
前記上位レベルメモリ内の置き換え対象データを無効化したとき、前記置き換え対象データに対応する前記カウンタの値を、前記下位レベルメモリ内の前記置き換え対象データに対応するアクセス回数ログに設定し、
前記アクセス対象データが前記上位レベルメモリにミスヒットしたとき、前記下位レベルメモリ内の前記アクセス対象データの前記アクセス回数ログの値が所定値より大きければ、前記アクセス対象データを前記上位レベルメモリに格納する、
ことを特徴とするキャッシュメモリ管理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はキャッシュ管理装置およびキャッシュメモリ管理方法に関し、特に使用頻度の高いデータを上位レベルメモリに格納することができるキャッシュ管理装置およびキャッシュメモリ管理方法に関する。
【０００２】
【従来の技術】
一般に、コンピュータシステムの高速化のためにキャッシュメモリが利用されている。キャッシュメモリは、ＣＰＵと主記憶装置との間に配置される。キャッシュメモリには、主記憶装置に使用されるメモリよりも高速なメモリが用いられる。そのため、ＣＰＵは、キャッシュメモリに格納されたデータに対し高速にアクセスできる。なお、キャッシュメモリは、ブロック単位の領域に分割して管理されており、ブロック単位でデータの書き込みや書き出し等の処理が行われる。
【０００３】
ところで、データのキャッシングは、データの読み込み時（リードキャッシュ）だけでなく、データの書き出し時（ライトキャッシュ）にも行われる。
主記憶装置へのデータの書き出し方式には、ライトスルー方式とライトバック方式とがある。ライトスルー方式では、ＣＰＵがデータの書き出しを行うとき、キャッシュメモリへの書き込みと同時に主記憶装置にも書き込む。一方、ライトバック方式では、ＣＰＵがデータの書き出しを行うとき、書き込みはキャッシュメモリに行う。そして、任意のタイミングでキャッシュメモリに書き込まれたデータを主記憶装置に書き出す。ライトスルー方式とライトバック方式とを適時選択し、選択した方式によりデータの書き出しを行うこともできる（たとえば、特許文献１、特許文献２参照）。
【０００４】
【特許文献１】
米国特許５，４６９，５５５号
【特許文献２】
米国特許５，５２２，０５７号
【０００５】
【発明が解決しようとする課題】
しかし、従来技術では、キャッシュにミスヒットした場合、アクセス対象のデータを含む全てのブロックを無差別にキャッシングする。そのため、キャッシングされてもほとんど参照されることなく追い出されてしまうようなブロックもキャッシュメモリに格納される。このような再利用性のないブロックをキャッシュメモリに入れることは、以下のような不利益を生む。
【０００６】
・ほとんど参照されないデータをキャッシュメモリ内に格納することで、そのデータより参照頻度の高いデータが追い出されてしまいアクセス速度向上の恩恵を得る機会が減る。
【０００７】
・平均アクセス時間の短縮に寄与しないブロックの転送に、時間とバスの使用帯域を費やすことで、システムの処理効率の低下を招く。
なお、プログラムを組む段階で再利用性のないことがあらかじめ分かっているデータについては、プログラマが意図的にキャッシングしないように指定することも可能である。ただし、キャッシュブロックの再利用性はキャッシュ容量、データ規模等によって異なってくるため、多くの場合は実行時でないと把握できない。
【０００８】
このように、使用頻度の少ないデータをキャッシュメモリに書き込むことは、コンピュータシステムの性能に悪影響を及ぼす。そのため、過去の使用頻度が高いデータにアクセスした場合にのみ、そのデータ（あるいは、そのデータを含むブロック）をキャッシュメモリに書き込むことができるシステムが求められている。
【０００９】
なお、上記特許文献１および特許文献２に記載された技術では、データの書き込み方式の切り替えに際し、データの使用頻度を考慮していない。そのため、システムの運用中に、各データの使用頻度に応じたデータの書き込み方式の切り替えはできない。
【００１０】
本発明はこのような点に鑑みてなされたものであり、データの過去の使用頻度に応じて、キャッシングの要否を判断できるキャッシュ管理装置およびキャッシュメモリ管理方法を提供することを目的とする。
【００１１】
【課題を解決するための手段】
本発明では上記課題を解決するために、図１に示すようなキャッシュ管理装置が提供される。本発明に係るキャッシュ管理装置は、ＣＰＵ１からのアクセス要求に応じたキャッシュ処理を制御するようにしたものであるキャッシュ管理装置は、以下の要素で構成される。
【００１２】
上位レベルメモリ２は、ＣＰＵ１に接続されている。カウンタ２ｃは、上位レベルメモリ２に格納された各データのアクセス回数を計数する。下位レベルメモリ３は、ＣＰＵ１と上位レベルメモリ２とに接続され、上位レベルメモリ２に格納された各データに対応するデータを格納する。アクセス回数ログ３ｃは、下位レベルメモリ３に格納された各データに対応づけて設けられている。メモリコントローラ１ａは、ＣＰＵ１が出力するアクセス要求で指定されたアクセス対象データが上位レベルメモリ２にヒットすると、アクセス対象データに対応するカウンタ２ｃの値をカウントアップし、上位レベルメモリ２内の置き換え対象データを無効化したとき、置き換え対象データに対応するカウンタ２ｃの値を、下位レベルメモリ３内の置き換え対象データに対応するアクセス回数ログ３ｃに設定し、アクセス対象データが上位レベルメモリ２にミスヒットしたとき、下位レベルメモリ３内のアクセス対象データのアクセス回数ログ３ｃの値が所定値より大きければ、アクセス対象データを上位レベルメモリに格納する。
【００１３】
このようなキャッシュ管理装置によれば、上位レベルメモリ２上で各データのアクセス回数が計数される。上位レベルメモリ２で無効化された置き換え対象データのアクセス回数は、下位レベルメモリ３のアクセス回数ログ３ｃに設定される。そして、上位レベルメモリ２でミスヒットした場合、アクセス対象データに対応するアクセス回数ログの値が所定値以上であれば、アクセス対象データが上位レベルメモリ２に格納される。
【００１４】
また、上記課題を解決するために、ＣＰＵからのアクセス要求に応じたキャッシュ処理を制御するキャッシュ管理装置において、前記ＣＰＵに接続された上位レベルメモリと、前記上位レベルメモリに格納された各データのアクセス回数を計数するカウンタと、前記ＣＰＵと前記上位レベルメモリとに接続され、前記上位レベルメモリに格納された各データに対応するデータを格納する下位レベルメモリと、前記ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが前記上位レベルメモリにヒットすると、前記アクセス対象データに対応する前記カウンタの値をカウントアップするとともに、前記アクセス要求がデータライト要求である場合、前記上位レベルメモリへデータの書き込みを行い、前記アクセス要求がデータライト要求であり、且つ前記アクセス対象データの前記カウンタの値が前記所定値以下である場合、前記下位レベルメモリへもデータの書き込みを行うメモリコントローラと、を有することを特徴とするキャッシュ管理装置が提供される。
【００１５】
このようなキャッシュ管理装置によれば、ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが上位レベルメモリにヒットすると、アクセス対象データに対応するカウンタの値がカウントアップされる。また、アクセス要求がデータライト要求である場合、上位レベルメモリへデータの書き込みが行われる。さらに、アクセス要求がデータライト要求であり、且つアクセス対象データのカウンタの値が所定値以下である場合、下位レベルメモリへもデータの書き込みが行われる。
【００１６】
また、上記課題を解決するために、上位レベルメモリと、前記上位レベルメモリに格納されたデータに対応するデータを格納する下位レベルメモリとへのＣＰＵからのアクセス要求に応じたキャッシュ処理を制御するためのキャッシュメモリ管理方法において、前記ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが前記上位レベルメモリにヒットすると、前記アクセス対象データに対応するカウンタの値をカウントアップし、前記上位レベルメモリ内の置き換え対象データを無効化したとき、前記置き換え対象データに対応する前記カウンタの値を、前記下位レベルメモリ内の前記置き換え対象データに対応するアクセス回数ログに設定し、前記アクセス対象データが前記上位レベルメモリにミスヒットしたとき、前記下位レベルメモリ内の前記アクセス対象データの前記アクセス回数ログの値が所定値より大きければ、前記アクセス対象データを前記上位レベルメモリに格納する、ことを特徴とするキャッシュメモリ管理方法が提供される。
【００１７】
このようなキャッシュメモリ管理方法によれば、上位レベルメモリ上で各データのアクセス回数が計数される。上位レベルメモリで無効化された置き換え対象データのアクセス回数は、下位レベルメモリのアクセス回数ログに設定される。そして、上位レベルメモリでミスヒットした場合、アクセス対象データに対応するアクセス回数ログの値が所定値以上であれば、アクセス対象データが上位レベルメモリに格納される。
【００１８】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
まず、実施の形態に適用される発明の概要について説明し、その後、実施の形態の具体的な内容を説明する。
【００１９】
図１は、実施の形態に適用される発明の概念図である。図１に示すように、キャッシュ管理装置では、ＣＰＵ１、上位レベルメモリ２、および下位レベルメモリ３間のデータ入出力を制御する。すなわち、キャッシュ管理装置は、ＣＰＵ１からのアクセス要求に応じたキャッシュ処理を制御するようにしたものである。上位レベルメモリ２は、キャッシュメモリである。また、下位レベルメモリ３は、メインメモリであってもよいし、二次キャッシュメモリであってもよい。
【００２０】
上位レベルメモリ２は、ＣＰＵ１に接続されている。また、上位レベルメモリ２には、タグ情報２ａが設けられている。タグ情報２ａには、上位レベルメモリ２に格納されている入出力単位データ毎のタグ２ｂが設けられ、そのタグ２ｂにカウンタ２ｃが関連づけられている。タグ２ｂには、対応するデータのメモリアドレス等の情報が設定される。
【００２１】
カウンタ２ｃは、上位レベルメモリ２に格納された各データのアクセス回数を計数する。なお、アクセス回数の計数は、ブロック単位で行うことができる。ここで言うブロックは、キャッシュ処理における処理単位である。すなわち、複数のデータで構成されるブロック単位で、上位レベルメモリ２に格納される。
【００２２】
下位レベルメモリ３は、ＣＰＵ１と上位レベルメモリ２とに接続され、上位レベルメモリ２に格納された各データに対応するデータを格納する。すなわち、下位レベルメモリ３に格納されているデータの一部が、上位レベルメモリ２にも格納されている。なお、対応するデータとは、メモリアドレスが共通のデータである。下位レベルメモリ３にはタグ情報３ａが設けられている。タグ情報３ａには、下位レベルメモリ３に格納されているデータ毎のタグ３ｂが設けられ、そのタグ３ｂにアクセス回数ログ３ｃが関連付けられている。
【００２３】
アクセス回数ログ３ｃは、下位レベルメモリ３に格納された各データに対応づけて設けられている。なお、アクセス回数ログ３ｃは、たとえば、ブロック毎に設けられる。アクセス回数ログ３ｃには、対応するデータへのアクセス回数が格納される。このアクセス回数は、少なくとも上位レベルメモリ２上でアクセスされた回数である。
【００２４】
メモリコントローラ１ａは、ＣＰＵ１が出力するアクセス要求で指定されたアクセス対象データが上位レベルメモリ２にヒットすると、アクセス対象データに対応するカウンタ２ｃの値をカウントアップする。また、メモリコントローラ１ａは、上位レベルメモリ２内の置き換え対象データを無効化したとき、置き換え対象データに対応するカウンタ２ｃの値を、下位レベルメモリ３内の置き換え対象データに対応するアクセス回数ログ３ｃに設定する。なお、上位レベルメモリ２内の置き換え対象データの無効化は、上位レベルメモリ２内に空き領域がない状態で、下位レベルメモリ３内のデータを上位レベルメモリ２に取り込む際に実行される。
【００２５】
さらに、メモリコントローラ１ａは、アクセス対象データが上位レベルメモリ２にミスヒットしたとき、下位レベルメモリ３内のアクセス対象データのアクセス回数ログ３ｃの値が所定値より大きければ、アクセス対象データを上位レベルメモリに格納する。
【００２６】
このようなキャッシュ管理装置によれば、上位レベルメモリ２上で各データのアクセス回数が計数される。上位レベルメモリ２で無効化された置き換え対象データのアクセス回数は、下位レベルメモリ３のアクセス回数ログ３ｃに設定される。そして、上位レベルメモリ２でミスヒットした場合、アクセス対象データに対応するアクセス回数ログ３ｃの値が所定値より大きければ、アクセス対象データが上位レベルメモリ２に格納される。すなわち、上位レベルメモリ２でミスヒットしても、アクセス対象データに対応するアクセス回数ログ３ｃの値が所定値以下であれば、アクセス対象データの上位レベルメモリ２への格納は行われない。
【００２７】
このように上位レベルメモリ２上でのアクセス回数をカウントし、データが上位レベルメモリ２を追い出された後は、アクセス回数が所定値より多い場合にのみ下位レベルメモリ３から上位レベルメモリ２へのキャッシングを行うようにした。そのため、再利用性の高いデータに限定したキャッシングが可能となる。すなわち、再利用性の良否をミスヒット発生時に知ることで、そのデータをキャッシュメモリに置くか否かの切り替えを動的に行うことができる。その結果、記憶資源の浪費、ブロック転送による時間の無駄を防ぐことができる。
【００２８】
また、上記の処理は、データの参照（リード）のみについて適用してもよいし、データのリードとライトの双方について適用してもよい。データライトのアクセス要求に適用した場合、データライト方式の切り替えが行われることになる。すなわち、データライトのミスヒット時に上位レベルメモリ２にデータを取り込む方式（ライトアロケート方式）と、データライト時にはミスヒットしても上位レベルメモリ２にデータを取り込まない方式（ノーライトアロケート方式）とが切り替えられる。これにより、ブロックの再利用性を表すアクセス回数ログ３ｃの値に応じて、ライトミス時の動作としてライトアロケート方式、ノーライトアロケート方式のうちより適したものを動的に選択することが可能となる。
【００２９】
また、上位レベルメモリへのデータライトの回数をカウンタで計数すれば、データの書き込み頻度を取得することができる。これを利用することで、データの聞き込み頻度に応じて、そのデータに対する書き込み時の方式としてライトスルー方式とライトバック方式のうち、より適したものを選択することができるようになる。
【００３０】
さらに、下位レベルメモリ３を複数のＣＰＵで共有するシステムにおいては、下位レベルメモリのタグに対して、各ＣＰＵに応じたアクセス回数ログを関連付けることができる。これにより、当該ブロックがどのＣＰＵから何回参照されたかを、下位レベルメモリ３で記録できる。その結果、各データに関して、上位レベルメモリ滞在中のアクセス回数をＣＰＵ毎に知ることができる。ＣＰＵ毎のアクセス回数を知ることができれば、各ＣＰＵからの再利用性の低いブロックを察知でき、キャッシングの有効性を判断できる。有効でないと判断されたときにはそのブロックのキャッシングをＣＰＵ毎に抑制することで、キャッシングに伴うブロック転送や、有効なブロックのキャッシュメモリからの追い出しを避けることができる。
【００３１】
以下に、本発明の実施の形態を具体的に説明する。なお、実施の形態では、キャッシュ処理の処理単位であるブロック毎にアクセス回数をカウントするものとする。また、実施の形態に示すシステムは、ＣＰＵと主記憶装置との間に２段のキャッシュメモリ（一次キャッシュと二次キャッシュ）が設けられており、一次キャッシュと二次キャッシュとの間のデータの入出力制御に、本発明を適用する。
【００３２】
［第１の実施の形態］
図２は、第１の実施の形態のシステム構成例を示す図である。この例では、２段階のキャッシュメモリを有するＣＰＵモジュールを複数実装したコンピュータシステムの例である。各ＣＰＵモジュールは、それぞれＣＰＵ１１０，２１０，３１０，４１０を有している。ここで、ＣＰＵ１１０の識別名を「ＣＰＵ０」、ＣＰＵ２１０の識別名を「ＣＰＵ１」、ＣＰＵ３１０の識別名を「ＣＰＵ２」、ＣＰＵ４１０の識別名を「ＣＰＵ３」とする。
【００３３】
ＣＰＵ１１０には、ＣＰＵ０用の一次キャッシュ１２０とＣＰＵ０用の二次キャッシュ１３０とが接続されている。ＣＰＵ１１０には、メモリコントローラ１１１が内蔵されている。メモリコントローラ１１１は、ＣＰＵ１１０へのデータの取り込みやデータの書き出しを制御する。ＣＰＵ０用の一次キャッシュ１２０は、タグ情報１２１を有している。タグ情報１２１は、一次キャッシュ１２０内の記憶領域にブロック単位で格納されているデータを管理するための情報である。ＣＰＵ０用の二次キャッシュ１３０は、タグ情報１３１を有している。タグ情報１３１は、二次キャッシュ１３０内の記憶領域にブロック単位で格納されているデータを管理するための情報である。
【００３４】
ＣＰＵ２１０には、ＣＰＵ１用の一次キャッシュ２２０とＣＰＵ１用の二次キャッシュ２３０とが接続されている。ＣＰＵ２１０はメモリコントローラ２１１を有している。一次キャッシュ２２０はタグ情報２２１を有している。二次キャッシュ２３０はタグ情報２３１を有している。
【００３５】
ＣＰＵ３１０には、ＣＰＵ２用の一次キャッシュ３２０とＣＰＵ２用の二次キャッシュ３３０とが接続されている。ＣＰＵ３１０はメモリコントローラ３１１を有している。一次キャッシュ３２０はタグ情報３２１を有している。二次キャッシュ３３０はタグ情報３３１を有している。
【００３６】
ＣＰＵ４１０には、ＣＰＵ２用の一次キャッシュ４２０とＣＰＵ２用の二次キャッシュ４３０とが接続されている。ＣＰＵ４１０はメモリコントローラ４１１を有している。一次キャッシュ４２０はタグ情報４２１を有している。二次キャッシュ４３０はタグ情報４３１を有している。
【００３７】
各二次キャッシュ１３０，２３０，３３０，４３０は、主記憶装置１０に接続されている。
なお、一次キャッシュ１２０，２２０，３２０，４２０は、二次キャッシュ１３０，２３０，３３０，４３０よりも高速にアクセス可能なメモリである。また、二次キャッシュ１３０，２３０，３３０，４３０は、主記憶装置１０よりも高速にアクセス可能なメモリである。
【００３８】
図３は、一次キャッシュのタグ情報のデータ構造例を示す図である。図３には、ＣＰＵ０用の一次キャッシュ１２０のタグ情報１２１を代表的に示している。タグ情報１２１には、一次キャッシュ１２０内のブロック毎にタグ１２２ａ，１２２ｂ，・・・が設けられている。タグ１２２ａ，１２２ｂ，・・・は、対応するブロックに格納されたデータのアドレス（ブロックフレームアドレス）を示している。タグ１２２ａ，１２２ｂ，・・・には、状態１２３ａ，１２３ｂ，・・・とカウンタ１２４ａ，１２４ｂ，・・・とが関連付けられている。
【００３９】
状態１２３ａ，１２３ｂ，・・・は、対応するブロックに格納されているデータの状態を示す情報である。たとえば、データが有効か否か、データの書き込みの有無等が設定される。状態１２３ａ，１２３ｂ，・・・の内容は、ＣＰＵ１１０内のメモリコントローラ１１１によって設定される。
【００４０】
カウンタ１２４ａ，１２４ｂ，・・・は、対応するブロックに格納されているデータがアクセス（参照や書き込み）された回数を示す数値（アクセス回数情報）が設定される。カウンタ１２４ａ，１２４ｂ，・・・の値は、ＣＰＵ１１０内のメモリコントローラ１１１によって更新される。具体的には、カウンタ１２４ａ，１２４ｂ，・・・の値は、対応するブロック内のデータがアクセスされる度に１ずつ増やされる。
【００４１】
図３には、ＣＰＵ０用の一次キャッシュ１２０のタグ情報１２１の例を示したが、他のＣＰＵ用のタグ情報２２１，３２１，４２１も同様のデータ構造である。
【００４２】
図４は、二次キャッシュのタグ情報のデータ構造例を示す図である。図４には、ＣＰＵ０用の二次キャッシュ１３０のタグ情報１３１を代表的に示している。タグ情報１３１には、二次キャッシュ１３０内のブロック毎にタグ１３２ａ，１３２ｂ，・・・が設けられている。タグ１３２ａ，１３２ｂ，・・・は、対応するブロックに格納されたデータのアドレス（ブロックフレームアドレス）を示している。タグ１３２ａ，１３２ｂ，・・・には、状態１３３ａ，１３３ｂ，・・・とアクセス回数ログ１３４ａ，１３４ｂ，・・・とが関連付けられている。
【００４３】
状態１３３ａ，１３３ｂ，・・・は、対応するブロックに格納されているデータの状態を示す情報である。たとえば、データが有効か否か、データの書き込みの有無等が設定される。状態１３３ａ，１３３ｂ，・・・の内容は、ＣＰＵ１１０内のメモリコントローラ１１１によって設定される。
【００４４】
アクセス回数ログ１３４ａ，１３４ｂ，・・・は、対応するブロックに格納されているデータが一次キャッシュ上でアクセスされた回数を示す数値（参照回数）が格納される。アクセス回数ログ１３４ａ，１３４ｂ，・・・の値は、ＣＰＵ１１０内のメモリコントローラ１１１によって更新される。具体的には、アクセス回数ログ１３４ａ，１３４ｂ，・・・の値は、対応するブロック内が一次キャッシュ１２０から追い出されたとき、そのブロックの一次キャッシュ１２０におけるカウンタの値が加算される。
【００４５】
図４には、ＣＰＵ０用の二次キャッシュ１３０のタグ情報１３１の例を示したが、他のＣＰＵ用のタグ情報２３１，３３１，４３１も同様のデータ構造である。
【００４６】
このようなタグ情報を用いて、メモリコントローラ１１１，２１１，３１１，４１１がデータアクセス処理を制御する。以下、アクセス要求に応じたデータアクセス処理の内容をメモリコントローラ１１１の例を用いて説明する。なお、以下の例では、アクセス対象のデータが二次キャッシュ１３０内に格納されている場合を想定している。
【００４７】
図５は、第１の実施の形態に係るアクセス処理の手順を示すフローチャートである。以下、図５に示す処理をステップ番号に沿って説明する。
［ステップＳ１１］メモリコントローラ１１１は、ＣＰＵ１１０からデータ参照のアクセス要求を受け付ける。
【００４８】
［ステップＳ１２］メモリコントローラ１１１は、一次キャッシュ１２０にヒットしたか否かを判断する。すなわち、アクセス要求で指定されたアドレスが一次キャッシュ１２０に存在するか否かを判断する。具体的には、メモリコントローラ１１１はアクセス要求で指定されたアドレスのブロックフレームアドレス部分と、タグ情報１２１内の各タグ１２１ａ，１２１ｂ，・・・とを比較する。そして、値の一致するタグがある場合には、一次キャッシュ１２０にヒットしたと判断する。
【００４９】
一次キャッシュ１２０にヒットした場合には、処理がステップＳ１３に進められる。一次キャッシュ１２０にヒットしなかった場合（ミスヒット）には、処理がステップＳ１５に進められる。
【００５０】
［ステップＳ１３］メモリコントローラ１１１は、一次キャッシュ１２０からデータを読み出す。具体的には、メモリコントローラ１１１は、一次キャッシュ内の該当するブロックからアクセス要求で指定されているアドレスのデータを読み出す。ブロック内における該当するデータの位置は、アドレス内のブロック内オフセットアドレスの部分（アドレスからブロックフレームアドレスを除いた値）によって判別できる。読み出されたデータは、ＣＰＵ１１０に渡される。
【００５１】
［ステップＳ１４］メモリコントローラ１１１は、一次キャッシュ１２０のアクセス対象のブロックに対応するカウンタを更新（１だけカウントアップ）する。その後、処理が終了する。
【００５２】
［ステップＳ１５］一次キャッシュ１２０にミスヒットした場合、メモリコントローラ１１１は、二次キャッシュ１３０の該当ブロックのアクセス回数ログの値（Ｎ２）と予め設定されている閾値（Ｔ）とを比較する。そして、アクセス回数ログの値（Ｎ２）の方が閾値（Ｔ）よりも大きければ、処理がステップＳ１７に進められる。アクセス回数ログの値（Ｎ２）が閾値（Ｔ）以下であれば、処理がステップＳ１６に進められる。
【００５３】
［ステップＳ１６］アクセス回数ログの値（Ｎ２）が閾値（Ｔ）以下の場合、ブロックの入れ替えが行われない。そのため、メモリコントローラ１１１は、二次キャッシュ１３０からデータを読み出し、ＣＰＵ１１０に渡す。その後、処理が終了する。
【００５４】
［ステップＳ１７］アクセス回数ログの値（Ｎ２）が閾値（Ｔ）より大きい場合、ブロックの入れ替えが行われる。そこで、メモリコントローラ１１１は、まず、一次キャッシュ１２０の各ブロックのカウンタを参照する。
【００５５】
［ステップＳ１８］メモリコントローラ１１１は、一次キャッシュ１２０の各ブロックのカウンタのうち、最も値の小さいカウンタに対応するブロックを１つ選択し、そのブロックを追い出す。ブロックの追い出しとは、そのブロックを無効化し、他のブロックを格納できるようにすることである。たとえば、該当するブロックの状態に、無効を示す値を設定する。
【００５６】
［ステップＳ１９］メモリコントローラ１１１は、追い出されたブロックの二次キャッシュ１３０におけるタグ情報１３１内のアクセス回数ログに、追い出されたブロックの一次キャッシュ１２０におけるタグ情報１２１内のカウンタの値を加算する。
【００５７】
［ステップＳ２０］メモリコントローラ１１１は、アクセス要求で指定されたアドレスのデータを二次キャッシュ１３０から読み出し、ＣＰＵ１１０に渡す。［ステップＳ２１］メモリコントローラ１１１は、一次キャッシュ１２０へアクセスの対象となったブロックの書き込みを行う。書き込み場所は、ステップＳ１８で追い出されたブロックが格納されていた領域である。その後、処理が終了する。
【００５８】
このように、一次キャッシュ１２０のリードミスが発生して二次キャッシュ１３０へのアクセスがあったとき、二次キャッシュ１３０上のカウンタ値が大きければ多く参照される（参照頻度が高い）ブロックであると判断され、一次キャッシュ１２０に入れられる。カウンタ値が小さければあまり参照されない（参照頻度が低い）ブロックであると判断され、一次キャッシュ１２０に入れずに直接ＣＰＵ１１０へデータが送られる。
【００５９】
なお、従来の技術では、一次キャッシュにミスヒットした場合、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）テーブルを参照して、最も過去に参照されたブロックが追い出されるのが一般的である。なお、ＬＲＵテーブルには、各ブロックを示すが、最近のアクセスからの経過時間に応じて並べられている。このＬＲＵテーブルは、一次キャッシュにヒットしたときに並べ替えられる。このように、ＬＲＵテーブルを参照した追い出し対象のブロックを判定した場合、アクセス頻度の高いブロックであっても、たまたま最近のアクセスから間が空くと追い出されてしまう。
【００６０】
第１の実施の形態のように、過去のアクセス回数の少ないブロックを追い出すことで、アクセス頻度の高いブロックを一次キャッシュ内に継続して保持させることができる。
【００６１】
次に、任意のブロックに関し、多くアクセスされた場合とあまりアクセスされなかった場合とのタグ情報の更新例について説明する。
図６は、一次キャッシュ上で多くアクセスされた場合のタグ情報の更新例を示す図である。この例は、カウンタが３ビット（最大７までカウント）のとき、一次キャッシュ１２０上での参照回数が多かった場合のタグ情報の内容の変化を時系列で示している。
【００６２】
（ＳＴ１）ここで、一次キャッシュ１２０と二次キャッシュ１３０とにミスヒットしてブロック転送が発生した場合を想定する。この場合、一次キャッシュ１２０と二次キャッシュ１３０とに該当ブロックが格納される。これにより、一次キャッシュ１２０のタグ情報１２１には、格納されたブロックに対応するタグ１２２ａ，状態１２３ａ，カウンタ１２４ａが登録される。同様に、二次キャッシュ１３０のタグ情報１３１には、格納されたブロックに対応するタグ１３２ａ，状態１３３ａ，アクセス回数ログ１３４ａが登録される。このとき、書き込まれたブロックのカウンタ１２４ａが０にリセットされる。その後、カウンタ１２４ａの値は、ＣＰＵ１１０によって参照される毎にカウントアップされる。
【００６３】
（ＳＴ２）該当ブロックに対して７回以上の参照等のアクセスがあると、一次キャッシュ１２０のタグ情報１２１におけるカウント値が７（上限）になる。
（ＳＴ３）該当するブロックが一次キャッシュ１２０から追い出されると、二次キャッシュ１３０上のアクセス回数ログ１３４ａの値が７に更新される。すなわち、追い出されたブロックの一次キャッシュ１２０におけるカウンタ１２４ａの値が、該当ブロックの二次キャッシュ１３０におけるアクセス回数ログ１３４ａに加算される。
【００６４】
その後、一次キャッシュ１２０でのリードミスにより二次キャッシュ１３０上の当該ブロックにアクセスがあったとき、アクセス回数ログ１３４ａが参照される。アクセス回数ログ１３４ａの値（Ｎ２）が閾値（Ｔ）より大きければ一次キャッシュ１２０に載せたときの再利用性があると判断され、一次キャッシュ１２０へのブロック転送が許可される。その結果、アクセス要求で指定されたデータがＣＰＵ１１０に送られると共に、そのデータを含むブロックが一次キャッシュ１２０に転送される。
【００６５】
図７は、一次キャッシュ上でのアクセス回数が少なかった場合のタグ情報の更新例を示す図である。この例は、カウンタが３ビット（最大７までカウント）のとき、一次キャッシュ１２０上でのアクセス回数が少なかった場合のタグ情報の内容の変化を時系列で示している。
【００６６】
（ＳＴ１１）一次キャッシュ１２０と二次キャッシュ１３０とにミスヒットしてブロック転送が発生し、一次キャッシュ１２０と二次キャッシュ１３０とにブロックが格納される。一次キャッシュ１２０に格納されたブロックのカウンタ１２４ａの値は０にリセットされる。二次キャッシュ１３０に格納されたブロックのアクセス回数ログ１３４ａの値は０にリセットされる。
【００６７】
（ＳＴ１２）該当するブロックに対してアクセスが行われない場合、カウント値は０のままである。
（ＳＴ１３）該当ブロックが一次キャッシュ１２０から追い出されると、二次キャッシュ１３０上のアクセス回数ログ１３４ａの値は変更されず「０」のままである。
【００６８】
その後、一次キャッシュ１２０でのミスヒットにより二次キャッシュ１３０上の当該ブロックにアクセスがあったとき、アクセス回数ログ１３４ａが参照される。アクセス回数ログ１３４ａの値（Ｎ２）が閾値（Ｔ）以下であれば一次キャッシュ１２０に載せたときの再利用性がないと判断され、一次キャッシュ１２０へのブロック転送を禁じ、データが直接ＣＰＵ１１０へ送られる。
【００６９】
このように、再利用性の高いブロックのみを上位のキャッシュに格納することで、処理効率やキャッシュヒット率を向上させることができる。
すなわち、再利用性のないブロックをキャッシュに入れても、その効果は得られない。逆に、ブロックの転送に時間とバス帯域を費やし、性能の低下を招いてしまう。そこで、第１の本実施の形態に示すように、一次キャッシュに格納されたときのブロックのアクセス回数をカウントし、二次キャッシュに追い出された際にもそのアクセス回数を関連付けておくことで、二次キャッシュの中から再利用性のないブロックを判別可能となる。これにより、無駄なブロック転送を抑制し、時間とバスの使用帯域を節約することができる。
【００７０】
しかも、従来の技術では、再利用性のないブロックが一次キャッシュに格納され、それと入れ替わりに再利用性のあるブロックを追い出してしまう可能性がある。第１の実施の形態では再利用性のないブロックをキャッシュに入れないため、再利用性のあるブロックを一次キャッシュ内に留めておくことができる。その結果、キャッシュヒット率が向上する。
【００７１】
なお、第１の実施の形態では、ブロックへのデータリード（参照）とデータライト（書き込み）とのアクセス回数をカウントしているが、データリードのアクセス要求のみをカウントしてもよい。たとえば、データの書き込み方式としてライトスルー方式を固定的に採用している場合、あるブロックへの書き込みの頻度が高くても、参照頻度が低ければ再利用性は低いと判断できる。
【００７２】
［第２の実施の形態］
次に第２の実施の形態について説明する。第２の実施の形態は、複数のＣＰＵモジュールに個別の一次キャッシュが搭載され、別に共有の二次キャッシュが設けられた計算機の例である。
【００７３】
図８は、第２の実施の形態に係るコンピュータのシステム構成例を示す図である。この例では、各ＣＰＵモジュールは、それぞれＣＰＵ６１０，７１０，８１０，９１０を有している。ここで、ＣＰＵ６１０の識別情報を「ＣＰＵ０」、ＣＰＵ７１０の識別情報を「ＣＰＵ１」、ＣＰＵ８１０の識別情報を「ＣＰＵ２」、ＣＰＵ９１０の識別情報を「ＣＰＵ３」とする。
【００７４】
ＣＰＵ６１０には、ＣＰＵ０用の一次キャッシュ６２０が接続されている。ＣＰＵ６１０には、メモリコントローラ６１１が内蔵されている。メモリコントローラ６１１は、ＣＰＵ６１０へのデータの取り込みやデータの書き出しを制御する。ＣＰＵ０用の一次キャッシュ６２０は、タグ情報６２１を有している。タグ情報６２１は、一次キャッシュ６２０内のブロック単位の記憶領域に格納されているデータを管理するための情報である。
【００７５】
ＣＰＵ７１０には、ＣＰＵ１用の一次キャッシュ７２０が接続されている。ＣＰＵ７１０はメモリコントローラ７１１を有している。一次キャッシュ７２０はタグ情報７２１を有している。
【００７６】
ＣＰＵ８１０には、ＣＰＵ２用の一次キャッシュ８２０が接続されている。ＣＰＵ８１０はメモリコントローラ８１１を有している。一次キャッシュ８２０はタグ情報８２１を有している。
【００７７】
ＣＰＵ９１０には、ＣＰＵ３用の一次キャッシュ９２０が接続されている。ＣＰＵ９１０はメモリコントローラ９１１を有している。一次キャッシュ９２０はタグ情報９２１を有している。
【００７８】
各一次キャッシュ６２０，７２０，８２０，９２０は、二次キャッシュ２０に接続されている。二次キャッシュ２０は、タグ情報２１を有している。二次キャッシュ２０は、主記憶装置３０に接続されている。
【００７９】
なお、一次キャッシュ６２０，７２０，８２０，９２０は、二次キャッシュ２０よりも高速にアクセス可能なメモリである。また、二次キャッシュ２０は、主記憶装置３０よりも高速にアクセス可能なメモリである。
【００８０】
ここで、各一次キャッシュ６２０，７２０，８２０，９２０のタグ情報６２１，７２１，８２１，９２１のデータ構造は、図３に示した第１の実施の形態におけるタグ情報１２１と同様である。一方、二次キャッシュ２０のタグ情報２１には、複数の一次キャッシュ６２０，７２０，８２０，９２０における参照頻度を示すカウンタの格納領域が設けられている。
【００８１】
図９は、二次キャッシュのタグ情報のデータ構造例を示す図である。タグ情報２１には、二次キャッシュ２０内のブロック毎にタグ２２ａ，２２ｂ，・・・が設けられている。タグ２２ａ，２２ｂ，・・・は、対応するブロックに格納されたデータのアドレス（ブロックフレームアドレス）を示している。タグ２２ａには、状態２３ａと複数のアクセス回数ログ２４ａ，２５ａ，２６ａ，２７ａとが関連付けられている。同様に、タグ２２ｂには、状態２３ｂと複数のアクセス回数ログ２４ｂ，２５ｂ，２６ｂ，２７ｂとが関連付けられている。
【００８２】
状態２３ａ，２３ｂ，・・・は、対応するブロックに格納されているデータの状態を示す情報である。たとえば、データが有効か否か、データの書き込みの有無等が設定される。状態２３ａ，２３ｂ，・・・の内容は、ＣＰＵ６１０、７１０，８１０，９１０内のメモリコントローラ６１１，７１１，８１１，９１１によって設定される。
【００８３】
アクセス回数ログは、対応するブロックに格納されているデータがアクセスされた回数を示す数値（アクセス頻度情報）が設定される。ここで、アクセス回数ログ２４ａ，２４ｂ，・・・は、ＣＰＵ６１０から一次キャッシュ６２０と二次キャッシュ２０との対応ブロックに対するアクセス回数を示す値である。アクセス回数ログ２５ａ，２５ｂ，・・・は、ＣＰＵ７１０から一次キャッシュ７２０と二次キャッシュ２０との対応ブロックに対するアクセス回数を示す値である。アクセス回数ログ２６ａ，２６ｂ，・・・は、ＣＰＵ８１０から一次キャッシュ８２０と二次キャッシュ２０の対応ブロックに対するアクセス回数を示す値である。アクセス回数ログ２７ａ，２７ｂ，・・・は、ＣＰＵ９１０から一次キャッシュ９２０と二次キャッシュ２０との対応ブロックに対するアクセス回数を示す値である。このように、各タグには、各ＣＰＵから各ブロックへのアクセス回数が関連付けられている。
【００８４】
アクセス回数ログ２４ａ，２４ｂ，・・・の値は、ＣＰＵ６１０内のメモリコントローラ６１１によって更新される。具体的には、アクセス回数ログ２４ａ，２４ｂ，・・・の値は、対応するブロックが一次キャッシュ６２０から追い出されたとき、そのブロックの一次キャッシュ６２０におけるカウンタの値が加算される。そして、ＣＰＵ６１０から二次キャッシュ２０にアクセスされたとき、アクセスされたブロックに対応するアクセス回数ログの値がカウントアップされる。
【００８５】
同様に、カウンタ２５ａ，２５ｂ，・・・の値は、ＣＰＵ７１０内のメモリコントローラ７１１によって更新される。カウンタ２６ａ，２６ｂ，・・・の値は、ＣＰＵ８１０内のメモリコントローラ８１１によって更新される。カウンタ２７ａ，２７ｂ，・・・の値は、ＣＰＵ９１０内のメモリコントローラ９１１によって更新される。
【００８６】
このように、カウンタの更新は、ＣＰＵ６１０，７１０，８１０，９１０からのメモリアクセスに伴って、メモリコントローラ６１１，７１１，８１１，９１１によって行われる。そのときのメモリコントローラ６１１，７１１，８１１，９１１の処理は、図５に示した第１の実施の形態の処理と同様である。
【００８７】
次に、任意のブロックに関し、多くアクセスされた場合とあまりアクセスされなかった場合とのタグ情報の更新例について説明する。
図１０は、一次キャッシュ上で多くアクセスされた場合のタグ情報の更新例を示す図である。この例は、カウンタが３ビット（最大７までカウント）のとき、一次キャッシュ６２０上でのアクセス回数が多かった場合のタグ情報の内容の変化を時系列で示している。
【００８８】
（ＳＴ２１）ここで、一次キャッシュ６２０にミスヒットしてブロック転送が発生し、一次キャッシュ６２０にデータが格納された場合を想定する。この場合、該当するブロックは、一次キャッシュ６２０に格納される。これにより、一次キャッシュ６２０に格納されたブロックに対応するタグ６２２ａ，状態６２３ａ，カウンタ６２４ａがタグ情報６２１に登録される。同様に、二次キャッシュ２０に格納されたブロックに対応するタグ２２ａ，状態２３ａ，カウンタ２４ａがタグ情報２１に登録される。このとき、書き込まれたブロックのカウンタが０にリセットされる。その後、カウンタ６２４ａの値は、ＣＰＵ６１０によって参照される毎にカウントアップされる。
【００８９】
（ＳＴ２２）該当ブロックに対して、７回以上の参照等のアクセスがあると、一次キャッシュ６２０のタグ情報６２１におけるカウント値が７（上限）になる。
【００９０】
（ＳＴ２３）該当するブロックが一次キャッシュ６２０から追い出されるか、キャッシュプロトコルによって無効化されると、二次キャッシュ２０上のアクセス回数ログ２４ａの値が７に更新される。すなわち、追い出されたブロックの一次キャッシュ６２０におけるカウンタ６２４ａの値が、該当ブロックの二次キャッシュ２０におけるアクセス回数ログ２４ａに加算される。
【００９１】
（ＳＴ２４）同様に他のＣＰＵ７１０，８１０，９１０においても該当するブロックに対して７回以上の参照等のアクセスがあり、一次キャッシュ７２０，８２０，９２０から追い出されるかキャッシュプロトコルによって無効化されると、二次キャッシュ２０上のカウンタ２５ａ，２６ａ，２７ａの値が７に更新される。
【００９２】
その後、ＣＰＵ０用の一次キャッシュ６２０でのリードミスにより二次キャッシュ２０上の当該ブロックにアクセスがあったとき、ＣＰＵ０用のアクセス回数ログ２４ａの値が参照され、データを一次キャッシュ６２０に入れるか、一次キャッシュ６２０に入れずに直接ＣＰＵ６１０へデータを送るかが判断される。図１０の例では、アクセス回数ログ２４ａの値が「７」であるため一次キャッシュ６２０に載せたときの再利用性があると判断され、一次キャッシュ６２０へのブロック転送が許可される。
【００９３】
図１１は、一次キャッシュ上でのアクセス回数が少なかった場合のタグ情報の更新例を示す図である。この例は、カウンタが３ビット（最大７までカウント）のとき、一次キャッシュ６２０上でのアクセス回数が少なかった場合のタグ情報の内容の変化を時系列で示している。
【００９４】
（ＳＴ３１）ＣＰＵ６１０からのリード要求に対して一次キャッシュ６２０にミスヒットしてブロック転送が発生し、一次キャッシュ６２０にブロックが格納される。該当ブロックのカウンタ６２４ａの値は０にリセットされる。
【００９５】
（ＳＴ３２）ＣＰＵ６１０から該当するブロックに対して参照等のアクセスが行われない場合、カウント値は０のままである。
（ＳＴ３３）該当ブロックが一次キャッシュ６２０から追い出されるか、またはキャッシュプロトコルによりブロックが無効化される。この場合、二次キャッシュ２０上のＣＰＵ０用のアクセス回数ログ２４ａの値は０のままである。
【００９６】
（ＳＴ３４）ここで、他のＣＰＵ７１０，８１０，９１０からの該当ブロックへの参照等のアクセスが多数（７回以上）あったものとする。すると、該当ブロックが各ＣＰＵ７１０，８１０，９１０の一次キャッシュ７２０，８２０，９２０から追い出されたとき、または無効化されたときには、二次キャッシュ２０におけるそれぞれに対応するアクセス回数ログ２５ａ，２６ａ，２７ａが更新される。この例では、アクセス回数ログ２５ａ，２６ａ，２７ａの値が全て「７」になる。
【００９７】
その後、ＣＰＵ６１０からのリード要求に対して一次キャッシュ６２０でのミスヒットにより二次キャッシュ２０上の当該ブロックにアクセスがあったとき、アクセス回数ログ２４ａが参照される。アクセス回数ログ２４ａの値（Ｎ２）が閾値（Ｔ）以下であれば一次キャッシュ６２０に載せたときの再利用性がないと判断され、一次キャッシュ６２０へのブロック転送を禁じ、データが直接ＣＰＵ６１０へ送られる。
【００９８】
以上のように、二次キャッシュ２０が共有の場合であっても、二次キャッシュ２０のタグ情報２１にＣＰＵ毎のアクセス回数ログを関連付けておくことで、各ブロックに対するＣＰＵ毎の参照頻度が分かる。その結果、各ＣＰＵから二次キャッシュにアクセスがあったとき、そのＣＰＵにおける該当ブロックへの参照頻度に応じて、一次キャッシュへの格納の是非を判断することができる。
【００９９】
［第３の実施の形態］
次に、第３の実施の形態について説明する。第３の実施の形態は、第１の実施の形態に示す構成に基づき、二次キャッシュにおけるブロックへのアクセス頻度をカウントするようにしたものである。
【０１００】
すなわち、第１の実施の形態では、二次キャッシュ１３０，２３０，３３０，４３０のブロック毎のタグには、アクセス回数ログが関連付けられている。このアクセス回数ログは、該当ブロックが一次キャッシュから追い出されたときに更新され、二次キャッシュにアクセスがあっても更新されない。そのため、アクセス回数ログの値が小さいとき、対応するブロックが二次キャッシュから一次キャッシュへ取り込まれる機会がなくなってしまう。なお、該当ブロックが二次キャッシュからも追い出されれば、その後、該当するブロックへのアクセスは主記憶装置に対して行われ、一次キャッシュと二次キャッシュと取り込むことができる。
【０１０１】
そこで、第３の実施の形態では、二次キャッシュ上の各ブロックでのアクセス回数をカウントし、一次キャッシュでのアクセス回数（第１の実施の形態におけるアクセス回数ログの値）に合算する。
【０１０２】
第３の実施の形態におけるシステム構成は、図２に示す第１の実施の形態の構成とほぼ同じである。ただし、二次キャッシュにおけるタグ情報のデータ構造およびメモリコントローラの処理が異なる。以下、図２に示す第１の実施の形態の各要素（二次キャッシュのタグ情報を除く）の符号を用いて、ＣＰＵ０用の二次キャッシュ１３０におけるタグ情報のデータ構造を説明する。
【０１０３】
図１２は、第３の実施の形態における二次キャッシュのタグ情報の例を示す図である。図１２には、ＣＰＵ０用の二次キャッシュ１３０のタグ情報１３１ａを代表的に示している。
【０１０４】
タグ情報１３１ａには、二次キャッシュ１３０内のブロック毎にタグ１３２ｃ，１３２ｄ，・・・が設けられている。タグ１３２ｃ，１３２ｄ，・・・は、対応するブロックに格納されたデータのアドレス（ブロックフレームアドレス）を示している。タグ１３２ｃ，１３２ｄ，・・・には、状態１３３ｃ，１３３ｄ，・・・とカウンタ１３４ｃ，１３４ｄ，・・・とが関連付けられている。
【０１０５】
状態１３３ｃ，１３３ｄ，・・・は、対応するブロックに格納されているデータの状態を示す情報である。たとえば、データが有効か否か、データの書き込みの有無等が設定される。状態１３３ｃ，１３３ｄ，・・・の内容は、ＣＰＵ１１０内のメモリコントローラ１１１によって設定される。
【０１０６】
カウンタ１３４ｃ，１３４ｄ，・・・は、二次キャッシュ１３０内の対応するブロックに格納されているデータがアクセス（参照や書き込み）された回数を示す数値（アクセス回数情報）が設定される。また、カウンタ１３４ｃ，１３４ｄ，・・・は、対応するブロックが一次キャッシュから追い出されたとき、そのブロックが一次キャッシュ上でアクセスされた回数を示す数値（参照回数）が加算される。このカウンタ１３４ｃ，１３４ｄ，・・・の値の更新は、ＣＰＵ１１０内のメモリコントローラ１１１によって行われる。
【０１０７】
このように、第１の実施の形態において二次キャッシュ１３０の各ブロックに関連付けられたアクセス回数ログが、第３の実施の形態ではカウンタ１３４ｃ，１３４ｄに置き換えられている。このカウンタ１３４ｃ，１３４ｄの有する機能は、アクセス回数ログの機能と同様に情報の記憶機能であるが、二次キャッシュへのアクセスに応じてカウントアップされるため、カウンタと称している。
【０１０８】
図１３は、第３の実施の形態かかるメモリコントローラのアクセス処理の手順を示すフローチャートである。このフローチャートは、図５に示す第１の実施の形態のアクセス処理とほぼ同じであるため、同じ処理には同じステップ番号を付し、説明を省略する。
【０１０９】
第３の実施の形態では、図５のステップＳ１５の処理が以下の様に変更される。
［ステップＳ３１］一次キャッシュ１２０にミスヒットした場合、メモリコントローラ１１１は、二次キャッシュ１３０の該当ブロックのカウンタの値（Ｎ２）と予め設定されている閾値（Ｔ）とを比較する。そして、アクセス回数ログの値（Ｎ２）の方が閾値（Ｔ）よりも大きければ、処理がステップＳ１７に進められる。アクセス回数ログの値（Ｎ２）の方が閾値（Ｔ）以下であれば、処理がステップＳ１６に進められる。
【０１１０】
また、第３の実施の形態では、二次キャッシュ１３０からデータを読み出した後の処理が第１の実施の形態と異なる。すなわち、第１の実施の形態では、二次キャッシュ１３０からデータを読み出すと処理が終了する（ステップＳ１６）が、第３の実施の形態では、ステップＳ１６の処置の次に以下のようなステップＳ３１の処理が実行される。
【０１１１】
［ステップＳ３２］メモリコントローラ１１１は、二次キャッシュのカウンタを更新する。すなわち、読み出した対象のデータが格納されているブロックに対応するカウンタの値を、１だけ増加させる。その後、処理が終了する。
【０１１２】
さらに、第３の実施の形態では、図５のステップＳ１９の処理が以下の様に変更される。
［ステップＳ３２］メモリコントローラ１１１は、一次キャッシュ１２０から追い出されたブロックのカウンタの値を、二次キャッシュ１３０の対応するブロックのカウンタに加算する。
【０１１３】
このように、第３の実施の形態では、全ての一次キャッシュと二次キャッシュのタグにはアクセス回数を記録するカウンタが含まれ、このカウント値は各キャッシュにて当該ブロックが参照される度に１ずつ増やされる。その後、一次キャッシュのリードミスが発生して二次キャッシュアクセスがあったとき、二次キャッシュ上の当該ＣＰＵ用カウンタ値を見て、データを一次キャッシュに入れるか、一次キャッシュに入れずに直接ＣＰＵへデータを送るかが判断される。
【０１１４】
これにより、第１の実施の形態では、二次キャッシュ上で再利用性がないと判定されたブロックは二次キャッシュを出ない限りその判定を覆すことはできず、一次キャッシュに入ることができない。一方、第３の実施の形態では、一次キャッシュと同様に、二次キャッシュにアクセスがあった場合には二次キャッシュ上のカウンタを増やす。そのため、一旦再利用性がないと判定されたブロックでも、二次キャッシュ上で多くアクセスされれば、リードミス時に一次キャッシュへの転送が許されるようになる。
【０１１５】
［第４の実施の形態］
次に、第４実施の形態について説明する。第４の実施の形態は、第２の実施の形態に示す構成に基づき、二次キャッシュにおけるブロックへのアクセス頻度をカウントするようにしたものである。
【０１１６】
すなわち、第２の実施の形態では、二次キャッシュ２０のブロック毎のタグには、アクセス回数ログが関連付けられている。このアクセス回数ログは、該当ブロックが一次キャッシュから追い出されたときに更新され、二次キャッシュにアクセスがあっても更新されない。そのため、アクセス回数ログの値が小さいとき、対応するブロックが二次キャッシュから一次キャッシュへ取り込まれる機会がなくなってしまう。なお、該当ブロックが二次キャッシュからも追い出されれば、その後、該当するブロックへのアクセスは主記憶装置に対して行われ、一次キャッシュと二次キャッシュと取り込むことができる。
【０１１７】
そこで、第４の実施の形態では、二次キャッシュ上の各ブロックでのアクセス回数を、一次キャッシュでのアクセス回数（第１の実施の形態におけるアクセス回数ログの値）に加算してカウントする。
【０１１８】
第４の実施の形態におけるシステム構成は、図８に示す第２の実施の形態の構成とほぼ同じである。ただし、二次キャッシュにおけるタグ情報のデータ構造およびメモリコントローラの処理が異なる。また、第４の実施の形態におけるタグ情報のデータ構造は以下の通りである。
【０１１９】
図１４は、第４の実施の形態における二次キャッシュのタグ情報の例を示す図である。
タグ情報２１ａには、二次キャッシュ２０内のブロック毎にタグ２２ｃ，２２ｄ，・・・が設けられている。タグ２２ｃ，２２ｄ，・・・は、対応するブロックに格納されたデータのアドレス（ブロックフレームアドレス）を示している。タグ２２ｃ，２２ｄ，・・・には、状態２３ｃ，２３ｄ，・・・とカウンタ２４ｃ，２４ｄ，・・・とが関連付けられている。
【０１２０】
状態２３ｃ，２３ｄ，・・・は、対応するブロックに格納されているデータの状態を示す情報である。たとえば、データが有効か否か、データの書き込みの有無等が設定される。状態２３ｃ，２３ｄ，・・・の内容は、ＣＰＵ６１０内のメモリコントローラ６１１によって設定される。
【０１２１】
カウンタ２４ｃ，２４ｄ，・・・は、二次キャッシュ２０内の対応するブロックに格納されているデータがアクセス（参照や書き込み）された回数を示す数値（アクセス頻度情報）が設定される。カウンタ２４ｃ，２４ｄ，・・・の値は、ＣＰＵ６１０内のメモリコントローラ６１１によって更新される。具体的には、カウンタ２４ｃ，２４ｄ，・・・の値は、対応するブロック内のデータが参照される度に１ずつ増やされる。
【０１２２】
第４の実施の形態におけるメモリコントローラの処理は、図１３に示す第３の実施の形態のアクセス処理と同じである。
このように、一次キャッシュ、二次キャッシュの各ブロックにそれぞれ図３、図１４のようなタグを持たせる。全ての一次キャッシュと二次キャッシュのタグにはアクセス回数を記録するカウンタが含まれ、このカウント値は各キャッシュにて当該ブロックが参照される度に１ずつ増やされる。当該ブロックが一次キャッシュを追い出されるか、キャッシュプロトコルによって無効化されたときに、二次キャッシュの当該ＣＰＵ用のカウンタにこの値が加算される。
【０１２３】
その後一次キャッシュのリードミスが発生して二次キャッシュアクセスがあったとき、二次キャッシュ上の当該ＣＰＵ用カウンタ値を見て、データを一次キャッシュに入れるか、一次キャッシュに入れずに直接ＣＰＵへデータを送るかを判断する。
【０１２４】
第２の実施の形態では、二次キャッシュ上で再利用性がないと判定されたブロックは二次キャッシュを出ない限りその判定を覆すことはできず、一次キャッシュに入ることができない。一方、第４の実施の形態では、一次キャッシュと同様に、二次キャッシュにアクセスがあった場合には二次キャッシュ上のカウンタを増やす（例えばＣＰＵ０から要求で二次キャッシュにアクセスが来たときには、ＣＰＵ０に対応するカウンタの値を増やす）ことで、一旦再利用性がないと判定されたブロックでも、二次キャッシュ上で多くアクセスされればリードミス時に一次キャッシュへの転送が許されるようになる。
【０１２５】
［第５の実施の形態］
次に、第５の実施の形態について説明する。第５の実施の形態は、第１の実施の形態に基づき、一次キャッシュにライトミスしたときの処理方式を一次キャッシュにおけるブロックのアクセス回数に応じて判断するようにしたものである。
【０１２６】
ライトミスしたときの処理方式には、たとえば、ライトアロケートとノーライトアロケートとがある。ここで、ライトアロケートとは、一次キャッシュでライトミスしたときに、二次キャッシュからブロックを一次キャッシュにロードする処理方式である。また、ノーライトアロケートとは、一次キャッシュでライトミスしたときに、二次キャッシュからデータを読み取り、該当ブロックの一次キャッシュへのロードを行わない処理方式である。
【０１２７】
第５の実施の形態におけるシステム構成は、図２に示す第１の実施の形態の構成とほぼ同じである。ただし、メモリコントローラのデータライト時の処理が異なる。なお、メモリコントローラのデータリード（参照）時の処理は、図５に示した第１の実施の形態と同じである。そこで、図２に示す構成を参照してメモリコントローラの処理におけるデータライト時の処理を説明する。
【０１２８】
図１５は、第５の実施の形態に係るライト処理の手順を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
［ステップＳ４１］メモリコントローラ１１１は、ＣＰＵ１１０からのデータライトのアクセス要求を受け付ける。
【０１２９】
［ステップＳ４２］メモリコントローラ１１１は、一次キャッシュ１２０にヒットしたか否かを判断する。すなわち、アクセス要求で指定されたアドレスが一次キャッシュ１２０に存在するか否かを判断する。一次キャッシュ１２０にヒットした場合には、処理がステップＳ４３に進められる。一次キャッシュ１２０にヒットしなかった場合（ミスヒット）には、処理がステップＳ４５に進められる。
【０１３０】
［ステップＳ４３］メモリコントローラ１１１は、一次キャッシュ１２０からにデータを書き込む。具体的には、メモリコントローラ１１１は、一次キャッシュ内の該当するブロックからアクセス要求で指定されているアドレスのデータの領域へ、ＣＰＵ１１０から送られたデータを書き込む。
【０１３１】
［ステップＳ４４］メモリコントローラ１１１は、一次キャッシュ１２０のデータの書き込みが行われたブロックに対応するカウンタを更新する。すなわち、カウンタの値を１だけ増加させる。その後、処理が終了する。
【０１３２】
［ステップＳ４５］一次キャッシュ１２０にミスヒットした場合、メモリコントローラ１１１は、二次キャッシュ１３０の該当ブロックのアクセス回数ログの値（Ｎ２）と予め設定されている閾値（Ｔ）とを比較する。そして、アクセス回数ログの値（Ｎ２）の方が閾値（Ｔ）よりも大きければ、処理がステップＳ４７に進められる。アクセス回数ログの値（Ｎ２）が閾値（Ｔ）以下であれば、処理がステップＳ４６に進められる。
【０１３３】
［ステップＳ４６］アクセス回数ログの値（Ｎ２）が閾値（Ｔ）以下の場合、ノーライトアロケート処理が行われる。そのため、メモリコントローラ１１１は、二次キャッシュ１３０内のライト要求で指示されたアドレスに該当するデータの記憶領域へ、ＣＰＵ１１０から送られたデータを書き込む。その後、処理が終了する。
【０１３４】
［ステップＳ４７］アクセス回数ログの値（Ｎ２）が閾値（Ｔ）より大きい場合、ブロックの入れ替えが行われる。そこで、メモリコントローラ１１１は、まず、一次キャッシュ１２０の各ブロックのカウンタを参照する。
【０１３５】
［ステップＳ４８］メモリコントローラ１１１は、一次キャッシュ１２０の各ブロックのカウンタのうち、最も参照頻度の小さいカウンタの１つに対応するブロックを追い出す。
【０１３６】
［ステップＳ４９］メモリコントローラ１１１は、追い出されたブロックの二次キャッシュ１３０にけるタグ情報１３１内のアクセス回数ログに、追い出されたブロックの一次キャッシュ１２０におけるタグ情報１２１内のカウンタの値を加算する。
【０１３７】
［ステップＳ５０］メモリコントローラ１１１は、二次キャッシュ１３０の該当ブロックを、一次キャッシュ１２０の追い出されたブロックが格納されていた領域へ書き込む。
【０１３８】
［ステップＳ５１］メモリコントローラ１１１は、一次キャッシュ１２０内のライト要求で指定されたアドレスのデータの領域へ、ＣＰＵ１１０から送られたデータを書き込む。その後、処理が終了する。
【０１３９】
このように、第５の実施の形態では、一次キャッシュのタグにはアクセス回数を記録するカウンタを関連付け、このカウント値は当該ブロックが参照される度に１ずつ増やされる。当該ブロックが一次キャッシュを追い出されると、二次キャッシュのカウンタにこの値が加算される。その後一次キャッシュ１２０のライトミスが発生して二次キャッシュ１３０にアクセスがあったとき、二次キャッシュ１３０上のアクセス回数ログの値を見て、ライトアロケートにするか、ノーライトアロケートにするかが判断される。
【０１４０】
このようにして、再利用性の高いブロックのみをライトアロケートにすることができる。その結果、一次キャッシュ内に再利用性の高いブロックを優先格納することができ、データアクセスの効率を向上させることができる。
【０１４１】
［第６の実施の形態］
次に、第６の実施の形態について説明する。第６の実施の形態は、第２の実施の形態に基づき、一次キャッシュにライトミスしたときの処理方式を一次キャッシュにおけるブロックのアクセス回数に応じて判断するようにしたものである。ライトミスしたときの処理方式には、たとえば、ライトアロケートとノーライトアロケートとがある。
【０１４２】
第６の実施の形態におけるシステム構成は、図８に示す第２の実施の形態の構成とほぼ同じである。ただし、メモリコントローラのデータライト時の処理が異なる。なお、メモリコントローラのデータリード（参照）時の処理は、図５に示した第１の実施の形態と同じである。また、メモリコントローラのデータライト時の処理は、図１５に示した第５の実施の形態と同じである。
【０１４３】
これにより、全ての一次キャッシュのタグにはアクセス回数を記録するカウンタが含まれ、このカウント値は当該ブロックが参照される度に１ずつ増やされる。当該ブロックが一次キャッシュを追い出されるか、キャッシュプロトコルによって無効化されたときに、二次キャッシュの当該ＣＰＵ用のカウンタにこの値が加算される。その後一次キャッシュのライトミスが発生して二次キャッシュアクセスがあったとき、二次キャッシュ上の当該ＣＰＵ用カウンタ値を見て、ライトアロケートにするか、ノーライトアロケートにするかが判断される。
【０１４４】
［第７の実施の形態］
次に、第７の実施の形態について説明する。第７の実施の形態は、第３の実施の形態に基づき、一次キャッシュにライトミスしたときの処理方式を、一次キャッシュと二次キャッシュとにおけるブロックのアクセス回数に応じて判断するようにしたものである。ライトミスしたときの処理方式には、たとえば、ライトアロケートとノーライトアロケートとがある。
【０１４５】
第７の実施の形態におけるシステム構成は、図２に示す第１の実施の形態の構成とほぼ同じである。ただし、二次キャッシュのタグ情報のデータ構造は、図１２に示す第３の実施の形態のタグ情報と同様である。また、メモリコントローラのデータリード（参照）時の処理は、図１３に示した第３の実施の形態と同じである。また、メモリコントローラのデータライト時の処理は、図１５に示した第５の実施の形態と同じである。
【０１４６】
これにより、全ての一次キャッシュと二次キャッシュのタグにはアクセス回数を記録するカウンタが含まれ、このカウント値は各キャッシュにて当該ブロックが参照される度に１ずつ増やされる。その後一次キャッシュのライトミスが発生して二次キャッシュアクセスがあったとき、二次キャッシュ上のカウンタ値を見て、ライトアロケートにするか、ノーライトアロケートにするかを判断する。
【０１４７】
第５の実施の形態では、二次キャッシュ上で再利用性がないと判定されたブロックは二次キャッシュを出ない限りその判定を覆すことはできず、一次キャッシュに入ることができない。そこで、第７の実施の形態では、一次キャッシュと同様に、二次キャッシュにアクセスがあった場合には二次キャッシュ上のカウンタを増やすようにした。これにより一旦再利用性がないと判定されたブロックでも、二次キャッシュ上で多くアクセスされれば、ライトミス時に一次キャッシュへの転送後に書き込みを行わせる（ライトアロケート方式）ことができる。
【０１４８】
［第８の実施の形態］
次に、第８の実施の形態について説明する。第８の実施の形態は、第４の実施の形態に基づき、一次キャッシュにライトミスしたときの処理方式を、一次キャッシュと二次キャッシュとにおけるブロックのアクセス回数に応じて判断するようにしたものである。ライトミスしたときの処理方式には、たとえば、ライトアロケートとノーライトアロケートとがある。
【０１４９】
第８の実施の形態におけるシステム構成は、図８に示す第２の実施の形態の構成とほぼ同じである。ただし、二次キャッシュのタグ情報のデータ構造は、図１４に示す第４の実施の形態のタグ情報と同様である。また、メモリコントローラのデータリード（参照）時の処理は、図１５に示した第４の実施の形態と同じである。また、メモリコントローラのデータライト時の処理は、図１５に示した第５の実施の形態と同じである。
【０１５０】
これにより、全ての一次キャッシュと二次キャッシュのタグにはアクセス回数を記録するカウンタが含まれ、このカウント値は各キャッシュにて当該ブロックが参照等される度に１ずつ増やされる。当該ブロックが一次キャッシュを追い出されるか、キャッシュプロトコルによって無効化されたときに、二次キャッシュの当該ＣＰＵ用のカウンタにこの値が加算される。その後一次キャッシュのライトミスが発生して二次キャッシュアクセスがあったとき、二次キャッシュ上の当該ＣＰＵ用カウンタ値を見て、ライトアロケートにするか、ノーライトアロケートにするかを判断する。
【０１５１】
第６の実施の形態では、二次キャッシュ上で再利用性がないと判定されたブロックは二次キャッシュを出ない限りその判定を覆すことはできず、一次キャッシュに入ることができない。そこで、第８の実施の形態では、一次キャッシュと同様に、二次キャッシュにアクセスがあった場合には二次キャッシュ上のカウンタを増やす（たとえば、ＣＰＵ６１０からの要求で二次キャッシュにアクセスが来たときには、ＣＰＵ６１０に対応するカウンタの値を増やす）ことで、一旦再利用性がないと判定されたブロックでも、二次キャッシュ上で多くアクセスされればライトミス時に一次キャッシュへの転送後に書き込みを行わせる（ライトアロケート方式）ことができる。
【０１５２】
［第９の実施の形態］
次に、第９の実施の形態について説明する。第９の実施の形態は、第１の実施の形態に基づき、ライト要求に応じたデータの書き込み方式を一次キャッシュにおけるブロックのアクセス回数に応じて動的に切り替えるものである。
【０１５３】
データの書き込み方式には、たとえば、ライトバックとライトスルーとがある。ここで、ライトバックでは、ライト要求に応答して、データの書き込みを一次キャッシュのブロックに対して行う。そして、そのブロックが一次キャッシュから追い出されるとき、そのブロックのデータを二次キャッシュに書き込む。ライトスルーでは、ライト要求に応答して、一次キャッシュと二次キャッシュとの双方にデータを書き込む。
【０１５４】
第９の実施の形態におけるシステム構成は、図２に示す第１の実施の形態の構成とほぼ同じである。ただし、メモリコントローラのデータライト時の処理が異なる。なお、メモリコントローラのデータリード（参照）時の処理は、図５に示した第１の実施の形態とほぼ同じである。ただし、ステップＳ１４における一次キャッシュのカウンタの更新処理は行わないものとする。すなわち、図３に示したカウンタ１２４ａ，１２４ｂは、書き込み回数のみをカウントするカウンタとして使用される。同様に、図４に示したアクセス回数ログ１３４ａ，１３４ｂには、書き込みの回数を示す値が格納される。
【０１５５】
そこで、図２に示す構成を参照してメモリコントローラの処理におけるデータライト時の処理を説明する。
図１６は、第９の実施の形態に係るライト処理の手順を示すフローチャートである。以下、図１６に示す処理をステップ番号に沿って説明する。
【０１５６】
［ステップＳ６１］メモリコントローラ１１１は、ＣＰＵ１１０からのデータライトのアクセス要求を受け付ける。
［ステップＳ６２］メモリコントローラ１１１は、一次キャッシュ１２０にヒットしたか否かを判断する。すなわち、アクセス要求で指定されたアドレスが一次キャッシュ１２０に存在するか否かを判断する。一次キャッシュ１２０にヒットしなかった場合（ミスヒット）には、処理がステップＳ６３に進められる。一次キャッシュ１２０にヒットした場合には、処理がステップＳ６４に進められる。
【０１５７】
［ステップＳ６３］一次キャッシュ１２０にミスヒットした場合、メモリコントローラ１１１は、二次キャッシュ１３０内のライト要求で指示されたアドレスに該当するデータの記憶領域へ、ＣＰＵ１１０から送られたデータを書き込む。その後、処理が終了する。
【０１５８】
［ステップＳ６４］一次キャッシュ１２０にヒットした場合、メモリコントローラ１１１は、一次キャッシュ１２０にデータを書き込む。具体的には、メモリコントローラ１１１は、一次キャッシュ内の該当するブロックからアクセス要求で指定されているアドレスのデータの領域へ、ＣＰＵ１１０から送られたデータを書き込む。
【０１５９】
［ステップＳ６５］メモリコントローラ１１１は、一次キャッシュ１２０のデータの書き込みが行われたブロックに対応するカウンタを更新する。すなわち、カウンタの値を１だけ増加させる。その後、処理が終了する。
【０１６０】
［ステップＳ６６］メモリコントローラ１１１は、一次キャッシュ１２０の該当ブロックのカウンタの値（Ｎ１）と予め設定されている閾値（Ｔ１）とを比較する。そして、カウンタの値（Ｎ１）の方が閾値（Ｔ１）よりも大きければライトバック方式が採用され、処理が終了する。カウンタの値（Ｎ１）が閾値（Ｔ１）以下であればライトスルー方式が採用され、処理がステップＳ６７に進められる。
【０１６１】
［ステップＳ６７］メモリコントローラ１１１は、二次キャッシュ１３０内のライト要求で指示されたアドレスに該当するデータの記憶領域へ、ＣＰＵ１１０から送られたデータを書き込む。その後、処理が終了する。
【０１６２】
このように、一次キャッシュのタグには書き込み頻度情報を記録するカウンタが含まれ、このカウント値は当該ブロックに対する書き込みを行われる度に１ずつ増やされる。当該ブロックが一次キャッシュを追い出されると、二次キャッシュのカウンタにこの値が加算される。その後、ライト要求が出され一次キャッシュにヒットした場合、カウンタの値が所定の閾値（Ｎ）より大きければ、書き込みの多いブロックであると判断できるのでライトバック方式での書き込みが行われる。そうでなければライトスルー方式での書き込みが行われる。
【０１６３】
このように、ライトバック方式とライトスルー方式とを、カウンタの値（Ｎ１）に応じて動的に変更することができる。アクセスが多いブロックは、ライトバック方式を採用することで、二次キャッシュへの書き込み回数を減らすことができる。その結果、平均アクセス時間が短縮される。また、アクセスが少ないブロックは、ライトスルー方式を採用することで、一次キャッシュと二次キャッシュとの一貫性を維持することができる。
【０１６４】
なお、第９の実施の形態では、データ書き込みの回数をカウントするためにカウンタを用いるものとして説明したが、一次キャッシュ１２０のタグ情報１２１に、書き込み用のカウンタと参照用のカウンタとを設けることもできる。その場合、二次キャッシュ１３０のタグ情報１３１には、書き込み用のアクセス回数ログと参照用のアクセス回数ログとを設ける。これにより、１つのシステム内で、書き込み回数に応じた書き込み方式の判断と、アクセス回数に応じた一次キャッシュへの書き込み要否判断とを行うことができる。
【０１６５】
なお、第９の実施の形態の説明では、メモリコントローラのデータリード（参照）時の処理は、図５に示した第１の実施の形態とほぼ同じであるとしている。したがって、一次キャッシュからブロックが追い出されると、そのブロックのカウンタ値が二次キャッシュの対応するブロックのアクセス回数ログに加算される。そこで、ブロックを一次キャッシュに読み込む際に、アクセス回数ログの値に応じて書き込み方式を決定することもできる。この場合、アクセス回数ログの値が所定の閾値より大きければ、一次キャッシュに読み込んだ該当ブロックへのデータライトに関して、ライトバック方式を採用する。一方、アクセス回数ログの値が所定の閾値以下であれば、一次キャッシュに読み込んだ該当ブロックへのデータライトに関して、ライトスルー方式を採用する。
【０１６６】
また、一次キャッシュに新たなブロックを取り込んだとき、そのブロックに対する書き込み方式の初期設定として、ライトスルー方式を採用することとしてもよい。参照頻度の多いブロックであれば、カウンタ数が閾値を超えることでライトバック方式に切り替えられる。
【０１６７】
［第１０の実施の形態］
次に、第１０の実施の形態について説明する。第１０の実施形態は、二次キャッシュから一次キャッシュにブロックを取り込むか否かの判定を、追い出されるブロックのカウンタ値を用いて行うものである。具体的には、一次キャッシュ上で最もカウンタ値の小さなブロックのカウンタ値と、二次キャッシュ上の取り込み対象ブロックのアクセス回数ログの値とを比較する。そして、二次キャッシュ上の取り込み対象ブロックのアクセス回数ログの値の方が大きければ、そのブロックを一次キャッシュに取り込む。
【０１６８】
図１７は、第１０の実施の形態に係るアクセス処理の手順を示すフローチャートである。なお、図１７に示す処理のうちステップＳ７１，Ｓ７２以外の処理は図５に示した第１の実施の形態におけるアクセス処理を同じであるため同じステップ番号を付し説明を省略する。
【０１６９】
［ステップＳ７１］メモリコントローラ１１１は、一次キャッシュ１２０の各ブロックのカウンタを参照する。
［ステップＳ７２］そして、メモリコントローラ１１１は、一次キャッシュ１２０の各ブロックのうち、カウンタ値が最も小さなブロックを追い出し対象ブロックとする。そして、そのブロックのカウンタ値（Ｎ１）と、二次キャッシュ１３０内のアクセス対象のブロックのアクセス回数ログの値（Ｎ２）との大小を比較する。追い出し対象ブロックのカウンタ値（Ｎ１）の方が大きければブロックの入れ替えが不要と判断され、処理がステップＳ１６に進められる。追い出し対象ブロックのカウンタ値（Ｎ１）が、アクセス対象のブロックのアクセス回数ログの値（Ｎ２）以下であれば、ブロックの入れ替えが必要と判断され、処理がステップＳ１８に進められる。
【０１７０】
このように、一次キャッシュの最小のカウンタ値よりも大きなアクセス回数ログを有するブロックのみを一次キャッシュに格納することで、アクセス頻度の高いブロックのみを一次キャッシュに取り込むことができる。
【０１７１】
なお、上記の各実施の形態では、キャッシュメモリ制御における記憶対象の最小単位であるブロック毎にカウンタを設けているが、このブロックの大きさは任意に設定することができる。従って、ブロックのサイズを、ＣＰＵに対するデータ入出力のデータ長と同じにすることもできる。一般に、ブロックサイズはメモリアクセス処理における平均アクセス時間が最短になるような値に設定される。
【０１７２】
従来の技術のように、再利用性のないブロックをキャッシュに入れても、ヒット率上昇の効果は得られず、逆に、ブロックの転送に時間とバス帯域を費し、性能の低下を招いてしまう。一方、本実施の形態では再利用性のないブロックを察知することで無駄なブロック転送を抑制し、時間とバスの使用帯域を節約することができる。
【０１７３】
また、再利用性のないブロックをキャッシュに入れると、それと入れ替わりに、再利用性のあるブロックを追い出してしまう可能性がある。上記実施の形態では再利用性のないブロックをキャッシュに入れないため、そのようなことは生じない。
【０１７４】
また、キャッシュへの書き込み方式には大きく分けてライトスルー方式とライトバック方式がある。従来はこの二つは切り替えることができないが、上記実施の形態ではこの二つを切り替えることで、書き込みの多いブロックや、書き込みの少ないブロックや、時間によって両方の性質を示すブロックも柔軟に扱うことができる。
【０１７５】
（付記１）  ＣＰＵからのアクセス要求に応じたキャッシュ処理を制御するキャッシュ管理装置において、
前記ＣＰＵに接続された上位レベルメモリと、
前記上位レベルメモリに格納された各データのアクセス回数を計数するカウンタと、
前記ＣＰＵと前記上位レベルメモリとに接続され、前記上位レベルメモリに格納された各データに対応するデータを格納する下位レベルメモリと、
前記下位レベルメモリに格納された各データに対応づけて設けられたアクセス回数ログと、
前記ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが前記上位レベルメモリにヒットすると、前記アクセス対象データに対応する前記カウンタの値をカウントアップし、前記上位レベルメモリ内の置き換え対象データを無効化したとき、前記置き換え対象データに対応する前記カウンタの値を、前記下位レベルメモリ内の前記置き換え対象データに対応する前記アクセス回数ログに設定し、前記アクセス対象データが前記上位レベルメモリにミスヒットしたとき、前記下位レベルメモリ内の前記アクセス対象データの前記アクセス回数ログの値が所定値より大きければ、前記アクセス対象データを前記上位レベルメモリに格納するメモリコントローラと、
を有することを特徴とするキャッシュ管理装置。
【０１７６】
（付記２）  前記カウンタは、前記上位レベルメモリの記憶管理の最小単位であるブロック毎にアクセス回数をカウントすることを特徴とする付記１記載のキャッシュメモリ装置。
【０１７７】
（付記３）  前記ＣＰＵが複数ある場合、前記ＣＰＵそれぞれに対応する前記上位レベルメモリ、前記カウンタ、前記下位レベルメモリ、前記アクセス回数ログ、および前記メモリコントローラを有することを特徴とする付記１記載のキャッシュメモリ装置。
【０１７８】
（付記４）  前記ＣＰＵが複数ある場合、前記ＣＰＵそれぞれに対応する前記上位レベルメモリ、前記カウンタ、前記アクセス回数ログ、および前記メモリコントローラを有し、複数の前記ＣＰＵにより前記下位レベルメモリを共有することを特徴とする付記１記載のキャッシュメモリ装置。
【０１７９】
（付記５）  前記メモリコントローラは、前記下位レベルメモリに格納された各データのアクセス回数を計数し、前記アクセス回数ログに合算することを特徴とする付記１記載のキャッシュ管理装置。
【０１８０】
（付記６）  前記メモリコントローラは、前記アクセス要求がライト要求である場合、前記アクセス対象データが前記上位レベルメモリにミスヒットしたとき、前記下位レベルメモリ内の前記アクセス対象データの前記アクセス回数が所定値より大きければ、前記アクセス対象データを前記上位レベルメモリに格納することを特徴とする付記１記載のキャッシュ管理装置。
【０１８１】
（付記７）  前記メモリコントローラは、前記アクセス対象データが前記上位レベルメモリにミスヒットしたとき、前記下位レベルメモリ内の前記アクセス対象データの前記アクセス回数ログの値が、前記上位レベルメモリ内で置き換えられるデータに対応するカウンタの値より大きければ、前記アクセス対象データを前記上位レベルメモリに格納することを特徴とする付記１記載のキャッシュ管理装置。
【０１８２】
（付記８）  ＣＰＵからのアクセス要求に応じたキャッシュ処理を制御するキャッシュ管理装置において、
前記ＣＰＵに接続された上位レベルメモリと、
前記上位レベルメモリに格納された各データのアクセス回数を計数するカウンタと、
前記ＣＰＵと前記上位レベルメモリとに接続され、前記上位レベルメモリに格納された各データに対応するデータを格納する下位レベルメモリと、
前記ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが前記上位レベルメモリにヒットすると、前記アクセス対象データに対応する前記カウンタの値をカウントアップするとともに、前記アクセス要求がデータライト要求である場合、前記上位レベルメモリへデータの書き込みを行い、前記アクセス要求がデータライト要求であり、且つ前記アクセス対象データの前記カウンタの値が前記所定値以下である場合、前記下位レベルメモリへもデータの書き込みを行うメモリコントローラと、
を有することを特徴とするキャッシュ管理装置。
【０１８３】
（付記９）  上位レベルメモリと、前記上位レベルメモリに格納されたデータに対応するデータを格納する下位レベルメモリとへのＣＰＵからのアクセス要求に応じたキャッシュ処理を制御するためのキャッシュメモリ管理方法において、前記ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが前記上位レベルメモリにヒットすると、前記アクセス対象データに対応するカウンタの値をカウントアップし、
前記上位レベルメモリ内の置き換え対象データを無効化したとき、前記置き換え対象データに対応する前記カウンタの値を、前記下位レベルメモリ内の前記置き換え対象データに対応するアクセス回数ログに設定し、
前記アクセス対象データが前記上位レベルメモリにミスヒットしたとき、前記下位レベルメモリ内の前記アクセス対象データの前記アクセス回数ログの値が所定値より大きければ、前記アクセス対象データを前記上位レベルメモリに格納する、
ことを特徴とするキャッシュメモリ管理方法。
【０１８４】
（付記１０）  上位レベルメモリと、前記上位レベルメモリに格納されたデータに対応するデータを格納する下位レベルメモリとへのＣＰＵからのアクセス要求に応じたキャッシュ処理を制御するためのキャッシュメモリ管理方法において、
前記ＣＰＵが出力するアクセス要求で指定されたアクセス対象データが前記上位レベルメモリにヒットすると、前記アクセス対象データに対応する前記カウンタの値をカウントアップし、
前記アクセス要求がデータライト要求である場合、前記上位レベルメモリへデータの書き込みを行い、
前記アクセス要求がデータライト要求であり、且つ前記アクセス対象データの前記カウンタの値が前記所定値以下である場合、前記下位レベルメモリへもデータの書き込みを行う、
ことを特徴とするキャッシュメモリ管理方法。
【０１８５】
【発明の効果】
以上説明したように本発明では、上位レベルメモリでのアクセス回数をカウントし、データが上位レベルメモリを追い出された後は、アクセス回数が所定値より多い場合にのみ下位レベルメモリから上位レベルメモリへのキャッシングを行うようにしたため、再利用性の高いデータに限定したキャッシングが可能となる。
【０１８６】
また、別の発明では、上位レベルメモリでのアクセス回数をカウントし、データライト要求が出された際、アクセス回数が所定値以下の場合にのみ下位レベルメモリへの書き込みを行うようにしたため、再利用性の高いデータに関してはライトバック方式による高速のアクセスが可能となる。
【図面の簡単な説明】
【図１】実施の形態に適用される発明の概念図である。
【図２】第１の実施の形態のシステム構成例を示す図である。
【図３】一次キャッシュのタグ情報のデータ構造例を示す図である。
【図４】二次キャッシュのタグ情報のデータ構造例を示す図である。
【図５】第１の実施の形態に係るアクセス処理の手順を示すフローチャートである。
【図６】一次キャッシュ上で多くアクセスされた場合のタグ情報の更新例を示す図である。
【図７】一次キャッシュ上でのアクセス回数が少なかった場合のタグ情報の更新例を示す図である。
【図８】第２の実施の形態に係るコンピュータのシステム構成例を示す図である。
【図９】二次キャッシュのタグ情報のデータ構造例を示す図である。
【図１０】一次キャッシュ上で多くアクセスされた場合のタグ情報の更新例を示す図である。
【図１１】一次キャッシュ上でのアクセス回数が少なかった場合のタグ情報の更新例を示す図である。
【図１２】第３の実施の形態における二次キャッシュのタグ情報の例を示す図である。
【図１３】第３の実施の形態かかるメモリコントローラのアクセス処理の手順を示すフローチャートである。
【図１４】第４の実施の形態における二次キャッシュのタグ情報の例を示す図である。
【図１５】第５の実施の形態に係るライト処理の手順を示すフローチャートである。
【図１６】第９の実施の形態に係るライト処理の手順を示すフローチャートである。
【図１７】第１０の実施の形態に係るアクセス処理の手順を示すフローチャートである。
【符号の説明】
１  ＣＰＵ
１ａ  メモリコントローラ
２  上位レベルメモリ
２ａ  タグ情報
２ｂ  タグ
２ｃ  カウンタ
３  下位レベルメモリ
３ａ  タグ情報
３ｂ  タグ
３ｃ  アクセス回数ログ
１０  主記憶装置
１１０，２１０，３１０，４１０  ＣＰＵ
１１１，２１１，３１１，４１１  メモリコントローラ
１２０，２２０，３２０，４２０  一次キャッシュ
１２１，２２１，３２１，４２１  タグ情報
１３０，２３０，３３０，４３０  二次キャッシュ
１３１，２３１，３３１，４３１  タグ情報
【図１】
2004355365.tif 000003
【図２】
2004355365.tif 000004
【図３】
2004355365.tif 000005
【図４】
2004355365.tif 000006
【図５】
2004355365.tif 000007
【図６】
2004355365.tif 000008
【図７】
2004355365.tif 000009
【図８】
2004355365.tif 000010
【図９】
2004355365.tif 000011
【図１０】
2004355365.tif 000012
【図１１】
2004355365.tif 000013
【図１２】
2004355365.tif 000014
【図１３】
2004355365.tif 000015
【図１４】
2004355365.tif 000016
【図１５】
2004355365.tif 000017
【図１６】
2004355365.tif 000018
【図１７】
2004355365.tif 000019