(57)【要約】【課題】キャッシュメモリを有効活用する。【解決手段】  キャッシュメモリは、キャッシュメモリ領域、変換情報記憶部、及び変換回路を備える。キャッシュメモリ領域では、複数のセットが複数のセクタに分割されている。変換情報記憶部は、セクタ内の相対的なセットインデックスをキャッシュメモリ領域におけるセットインデックスに変換するための変換情報を、複数のセクタのそれぞれについて記憶する。変換回路は、アクセス対象であるセクタを識別するセクタ識別情報と変換情報記憶部に記憶されている変換情報を用いて、セクタ識別情報が示すセクタ内での相対的なセットインデックスを、プロセッサがアクセスするキャッシュメモリ領域内のセットを示すセットインデックスに変換する。【選択図】図２
2016091242.tif 000002
【特許請求の範囲】
【請求項１】
複数のセットが複数のセクタに分割されているキャッシュメモリ領域と、
セクタ内の相対的なセットインデックスを前記キャッシュメモリ領域におけるセットインデックスに変換するための変換情報を、前記複数のセクタのそれぞれについて記憶する変換情報記憶部と、
アクセス対象であるセクタを識別するセクタ識別情報と前記変換情報記憶部に記憶されている前記変換情報とを用いて、前記セクタ識別情報が示すセクタにおける相対的なセットインデックスを、前記キャッシュメモリ領域におけるプロセッサがアクセスするセットを示すセットインデックスに変換する変換回路と、
を備えるキャッシュメモリ。
【請求項２】
前記キャッシュメモリ領域に関する第１のタグ情報を記憶するタグ情報記憶部と、
主記憶装置のアドレスのうち、キャッシュライン内のデータを特定するアドレスと前記セクタ内での相対的なセットインデックス以外の部分である第２のタグ情報と、前記第１のタグ情報とを比較する比較回路とを、
更に備えることを特徴とする請求項１に記載のキャッシュメモリ。
【請求項３】
前記変換情報は、各セクタの先頭のセットインデックスを含む
ことを特徴とする請求項１又は２に記載のキャッシュメモリ。
【請求項４】
前記複数のセクタのうち少なくとも１つは所定の数のブロックに分割されており、
前記変換情報は、前記所定の数のブロックそれぞれの先頭のセットインデックスを含む
ことを特徴とする請求項１〜３の何れかに記載のキャッシュメモリ。
【請求項５】
各セクタに含まれるセットの数は、２のべき乗個である
ことを特徴とする請求項１〜４の何れかに記載のキャッシュメモリ。
【請求項６】
複数のセットが複数のセクタに分割されているキャッシュメモリ領域における前記複数のセクタのうちの１つを識別するセクタ識別情報を含むアドレス情報を含んでおり主記憶装置へのアクセスを要求する命令を、プロセッサが実行しようとする際、変換回路が、前記セクタ識別情報により識別されるセクタにおける相対的なセットインデックスを前記キャッシュメモリ領域におけるセットインデックスに変換するための変換情報を、変換情報記憶部から読み出し、
前記変換回路が、前記セクタ識別情報により識別される前記セクタにおける前記相対的なセットインデックスを、前記アドレス情報の中から抽出し、
前記変換回路が、抽出した前記相対的なセットインデックスを、前記変換情報を用いて、前記キャッシュメモリ領域におけるセットインデックスに変換し、
前記プロセッサが、変換された前記セットインデックスが示すセットにアクセスする
ことを特徴とするアクセス方法。
【請求項７】
比較回路が、前記キャッシュメモリ領域に関する第１のタグ情報をタグ情報記憶部から読み出し、
前記比較回路が、前記アドレス情報のうち、キャッシュライン内のデータを特定するアドレスとセクタ内での相対的なセットインデックス以外の部分である第２のタグ情報と、前記第１のタグとを比較することで、アクセス対象のキャッシュラインを特定する
ことを特徴とする請求項６に記載のアクセス方法。
【請求項８】
前記変換情報が、各セクタの先頭のセットインデックスを含む
ことを特徴とする請求項６又は７に記載のアクセス方法。
【請求項９】
前記複数のセクタのうち少なくとも１つは所定の数のブロックに分割されており、
前記変換情報は、前記所定の数のブロックそれぞれの先頭のセットインデックスを含む
ことを特徴とする請求項６〜８の何れかに記載のアクセス方法。
【請求項１０】
各セクタに含まれるセットの数は、２のべき乗個である
ことを特徴とする請求項６〜９の何れかに記載のアクセス方法。
【請求項１１】
複数のセットを複数のセクタに分割可能なキャッシュメモリ領域のうち、使用されていない領域のうちの１つを、他の使用されていない領域のうちの１つに隣接した位置に移動するという仮定の下で得られる、１以上の連続空き領域の各々に含まれるセット数を算出し、
少なくとも異なる数のセットを含む各セクタについて、前記算出したセット数を、当該セクタに含まれるセットの数の所定値による商で割った値である確保可能数を求め、
各連続空き領域についての前記確保可能数の合計に基づいて、使用されていない領域のうちの１つを、他の使用されていない領域のうちの１つに隣接する位置に移動させる
処理をプロセッサに実行させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリの制御に関する。
【背景技術】
【０００２】
キャッシュメモリを有効に活用する方法として、例えば、キャッシュメモリ領域を、各々が少なくとも１つのキャッシュウェイを含む複数の分割領域に分割してプロセッサに利用させる方法が知られている。すると、プロセッサは、キャッシュクリア、プリフェッチ、データ格納などの処理をする場合に、キャッシュメモリ領域内の分割された分割領域を指定して使用できる。これにより、キャッシュメモリ領域の各分割領域を、用途に応じて使いわけることが可能となる。
【０００３】
図１は、キャッシュメモリの利用方法の例を説明する図である。図１は、キャッシュメモリ内のキャッシュメモリ領域１１０の例を示す。キャッシュメモリ領域１１０の各ます目は、キャッシュラインを示す。キャッシュメモリ領域１１０は複数（例えば４０９６個）のセットを含み、各セットは複数（例えば５個）のキャッシュラインを含む。１つのセットに含まれる複数のキャッシュラインは、互いに異なるキャッシュウェイに属する。図１では、各セットが1行に描かれており、各キャッシュウェイが１列に描かれている。
【０００４】
各キャッシュラインには、１〜３の数字が割り当てられている。１〜３の数字は、キャッシュラインを管理するための管理識別番号である。キャッシュメモリの利用方法として、図１には、５個のキャッシュウェイのうち、キャッシュウェイ２個に１という管理識別番号、キャッシュウェイ１個に２という管理識別番号、キャッシュウェイ２個に３という管理識別番号を割り当てる方法が例示されている。例えば、セット＃１のウェイ＃０とウェイ＃１に管理識別番号１、セット＃１のウェイ＃２とウェイ＃３に管理識別番号３、セット＃１のウェイ＃４に管理識別番号２、のように割り当てられる。これにより、キャッシュメモリ領域１１０全体を、複数の管理識別番号で識別される複数の分割領域に分類して管理することができるようになる。なお、それら複数の分割領域の各々のサイズは、キャッシュウェイのサイズの倍数である。図１の例によれば、キャッシュメモリ領域の各分割領域を、用途に応じて使いわけることが可能である。
【０００５】
キャッシュメモリを管理する方法として、プログラムからキャッシュメモリを制御する方法が知られている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−１６３４５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ある用途の処理においてキャッシュメモリが使用される際に、当該処理に用いられるデータの合計サイズは、１つのキャッシュウェイのサイズよりも小さいことがある。キャッシュウェイのサイズよりも小さいサイズのデータが処理される場合、キャッシュウェイのサイズ以上のサイズを有する領域を上記用途に割り当てることは無駄である。そのため、キャッシュメモリの利用効率をより高める余地がある。
【０００８】
１つの側面において、本発明は、冗長な割り当てが行なわれるキャッシュメモリ領域の減少を図ることを目的とする。
【課題を解決するための手段】
【０００９】
キャッシュメモリは、キャッシュメモリ領域、変換情報記憶部、及び変換回路を備える。キャッシュメモリ領域では、複数のセットが複数のセクタに分割されている。変換情報記憶部は、セクタ内の相対的なセットインデックスを前記キャッシュメモリ領域内のセットインデックスに変換するための変換情報を、前記複数のセクタのそれぞれについて記憶する。変換回路は、アクセス対象であるセクタを識別するセクタ識別情報と前記変換情報記憶部に記憶されている前記変換情報を用いて、前記識別情報が示すセクタ内での相対的なセットインデックスを、プロセッサがアクセスする前記キャッシュメモリ領域内のセットを示すセットインデックスに変換する。
【発明の効果】
【００１０】
冗長な割り当てが行なわれるキャッシュメモリ領域の減少を図ることが可能となる。
【図面の簡単な説明】
【００１１】
【図１】キャッシュメモリの利用方法の例を説明する図である。
【図２】本実施形態に係るキャッシュメモリの機能的構成例を説明する図である。
【図３】本実施形態に係るアドレス情報の例を説明する図である。
【図４】変換情報の例（その１）を説明する図である。
【図５】キャッシュメモリを構成する回路の例（その１）を示す図である。
【図６】キャッシュメモリ領域の利用方法の例を説明する図である。
【図７】変換情報の例（その２）を説明する図である。
【図８】キャッシュメモリを構成する回路の例（その２）を示す図である。
【図９】未割り当て領域を纏める方法の例を説明する図である。
【図１０】未割り当て領域情報と未割り当て領域数情報の例を説明する図である。
【図１１】セクタ取得処理の例を説明する図である。
【図１２】セクタ解放処理の例を説明する図である。
【図１３】未割り当て領域を纏める処理の例を説明する図である。
【図１４】セクタ取得処理の例（その１）を説明するフローチャートである。
【図１５】セクタ取得処理の例（その２）を説明するフローチャートである。
【図１６】セクタ解放処理の例（その１）を説明するフローチャートである。
【図１７】セクタ解放処理の例（その２）を説明するフローチャートである。
【図１８】未割り当て領域を纏める処理の例を説明するフローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら、実施形態を詳細に説明する。
図２は、本実施形態に係るキャッシュメモリの機能的構成例を説明する図である。キャッシュメモリ２００は、キャッシュメモリ領域２１０、変換情報記憶部２２０、変換回路２３０を備える。
【００１３】
キャッシュメモリ領域２１０は、複数のセットを含み、各セットは、少なくとも１つのキャッシュラインを含む。１つのセットに複数のキャッシュラインが含まれる場合、各キャッシュラインは、異なるキャッシュウェイに属する。キャッシュメモリ領域２１０では、複数のセットが複数の領域に分割されて使用される。以下、キャッシュメモリ領域２１０の分割された各領域を「セクタ」と称する。すなわち、複数のセットは複数のセクタにグループ化される。キャッシュメモリ領域２１０内の各セクタは、少なくとも１つのセットを含めばよい。図２の例では、キャッシュメモリ領域２１０は、セクタ＃１〜セクタ＃Ｎを備える。セクタ＃１は、Ｓ１個のセットを含む。セクタ＃２は、Ｓ２個のセットを含む。又、セクタ＃Ｎは、ＳＮ個のセットを含む。Ｓ１〜ＳＮで示される各セクタのセット数は、例えば、２のべき乗個であることが好ましい。なぜなら、後述の図４〜８の説明から分かるように、各セクタのセット数が２のべき乗である場合、キャッシュメモリ領域２１０の全体を有効に利用することが可能であり、かつ、変換回路２３０を簡素に構成することが可能であるためである。
【００１４】
変換情報記憶部２２０は、複数のセクタのそれぞれに対応する変換情報を記憶する。変換情報は、セクタ内の相対的なセットインデックスを、キャッシュメモリ領域２１０内のセットインデックス（つまり、キャッシュメモリ領域２１０全体での絶対的なセットインデックス）に変換するための情報である。セクタ内の相対的なセットインデックスは、具体的には、アドレス情報３１０に含まれる。
【００１５】
アドレス情報３１０は、プロセッサ（より具体的には、プロセッサコア内の命令実行回路）から主記憶装置へのアクセス要求（例えば、ロード命令、ストア命令など）に含まれる。より具体的には、本実施形態のアドレス情報３１０は、セクタ識別情報（セクタＩＤ）３１１、タグ３１２、タグ３１３、相対セットインデックス３１４、ライン内アドレス３１５を含む。セクタＩＤのＩＤは、ｉｄｅｎｔｉｆｉｃａｔｉｏｎの略である。タグ３１２、タグ３１３、相対セットインデックス３１４、およびライン内アドレス３１５の組み合わせは、主記憶装置のアドレスを示す。主記憶装置へのアクセスでは、セクタ識別情報３１１は使用されない。
【００１６】
セクタ識別情報３１１は、セクタを識別するために用いられる一意の情報である。セクタ識別情報３１１により、セクタ＃１〜セクタ＃Ｎのうちの、アクセス対象であるセクタが識別される。タグ３１２とタグ３１３は、プロセッサ（より具体的には命令実行回路）のアクセス対象であるセットからキャッシュラインが検索される際に用いられるタグである。相対セットインデックス３１４は、アクセス対象のセットを示すインデックスで、具体的には、セクタ識別情報３１１が示すセクタ内で何番目のセットがアクセス対象のセットなのかを示す。ライン内アドレス３１５は、アクセス対象であるデータの、キャッシュライン内でのアドレスである。ライン内アドレス３１５により、キャッシュライン内のデータが特定される。
【００１７】
変換情報記憶部２２０には、セクタ＃１〜セクタ＃Ｎに対応した変換情報が記憶されている。変換情報は、各セクタの先頭のセットインデックスを含んでいてもよい。
【００１８】
変換回路２３０は、セクタ識別情報３１１と変換情報を用いて、セクタ識別情報３１１が示すセクタ内での相対セットインデックス３１４を、プロセッサがアクセスするキャッシュメモリ領域２１０内のセットを示すセットインデックスに変換する。より具体的には、変換回路２３０は、アドレス情報３１０内のセクタ識別情報３１１と変換情報とから、プロセッサがアクセス対象とするセクタの先頭のセットを示す先頭セットインデックスを求める。変換回路２３０は、相対セットインデックス３１４と先頭セットインデックスとを組み合わせることで、相対セットインデックス３１４を、プロセッサがアクセスするキャッシュメモリ領域２１０内のセットを示すセットインデックスに変換する。この処理により、アクセス対象のキャッシュメモリ領域２１０内のセットを示すセットインデックスが特定される。
【００１９】
ところで、キャッシュメモリ２００は、図２には不図示のタグ情報記憶部（タグアレイ）と比較回路とを更に備えていてもよい。後述の図５には、タグ情報記憶部の例としてタグテーブル２５０が示されており、比較回路の例としてコンパレータ２５１ａ〜２５１ｄが示されている。タグ情報記憶部と比較回路を設けることにより、ダイレクトマップ方式の（direct-mapped）キャッシュメモリだけでなく、セットアソシエイティブ方式の（set-associative）キャッシュメモリにおいても、複数のセクタへの分割が可能となる。
【００２０】
タグ情報記憶部は、キャッシュメモリ領域２１０に関する第１のタグ情報を記憶する。第１のタグ情報は、具体的には、個々のセット内でキャッシュラインを識別するタグを１つ以上含む。以下では説明の便宜上、主記憶装置のアドレスのうち、相対セットインデックス３１４とライン内アドレス３１５以外の部分（すなわち、タグ３１２とタグ３１３の組み合わせ）を、第２のタグ情報ともいう。比較回路は、第２のタグ情報を第１のタグ情報と比較する。比較結果にしたがって、適宜のキャッシュラインがアクセスされる。具体的には、変換回路２３０により得られたセットインデックスにより識別されるセットにおいて、第２のタグ情報と一致するタグで示されるキャッシュラインの中の、ライン内アドレス３１５で示されるデータが、アクセスされる。
【００２１】
第２のタグ情報は、具体的には、変換回路２３０から比較回路に入力されてもよい。具体的には、変換回路２３０は、アドレス情報３１０から相対セットインデックス３１４とライン内アドレス３１５を除いた部分である第２のタグ情報（つまり、タグ３１２とタグ３１３の組み合わせ）を抽出してもよい。そして、変換回路２３０は、抽出した第２のタグ情報を比較回路に出力してもよい。
【００２２】
ここで、アドレス情報３１０における、タグ３１２のサイズ、タグ３１３と相対セットインデックス３１４とを合わせた部分のサイズ、ライン内アドレス３１５のサイズは、予め定められている。相対セットインデックス３１４のサイズは、セクタごとに任意に決められてよい。すると、タグ３１３のサイズは、相対セットインデックス３１４のサイズによって可変である。
【００２３】
キャッシュメモリ領域２１０に含まれるセットの数は任意だが、キャッシュウェイの数に比べてセットの数が十分に多いものとする。したがって、図２のようにキャッシュメモリ領域２１０をセット単位で分割することで、例えば図１のように、キャッシュウェイ単位で分割する場合よりも小さい領域にキャッシュメモリ領域２１０を分割することが可能となる。すなわち、本実施形態によれば、より細かい粒度での分割が可能となる。これにより、キャッシュクリア、プリフェッチ、データ格納処理などにおいてキャッシュメモリ領域２１０を使用する際には、キャッシュウェイ単位よりも容量の小さいセット単位で、キャッシュメモリ領域２１０を使用することが可能となる。その結果、キャッシュメモリ領域２１０をより有効に活用することが可能となる。
【００２４】
図３は、本実施形態に係るアドレス情報の例を説明する図である。以降、プロセッサが主記憶装置にアクセスする際に用いられるアドレスのアドレス空間を、例えば、３２ビットで表される空間であるものとする。また、キャッシュメモリ領域２１０では、セット数が４０９６（＝２１２）個であり、キャッシュラインサイズが２５６（＝２８）バイトであるものとする。なお、アドレス情報は、２進数で表される。
【００２５】
すると、ライン内アドレス３１５のサイズは、キャッシュラインサイズである２５６（＝２８）バイトに基づいて、８ビットである。また、１２ビットのセットインデックスを用いることにより、４０９６個のセットに含まれる１つのセットを特定することが可能である。本実施形態では、１２ビットのセットインデックスの代わりに、タグ３１３と相対セットインデックス３１４が用いられる。なお、タグ３１３と相対セットインデックス３１４とを合わせた部分の長さは１２ビットであり、この部分により示されるアドレス空間のサイズは４０９６である。３２ビットのうち、残りの１２ビットは、タグ３１２に用いられる。
【００２６】
タグ３１３と相対セットインデックス３１４とを合わせた部分が示すアドレス空間は、１２ビットという固定のビット数で表されるものの、相対セットインデックス３１４を表すビットの数は、アクセス対象となるセクタに含まれるセットの数によって異なる。例えば、キャッシュメモリ領域２１０がいくつかのセクタに分割されており、アクセス対象のセクタが１０２４（＝２１０）個のセットを含む場合、相対セットインデックス３１４は１０ビットを使用する。そのため、タグ３１３は、残りの２ビットを使用する。
【００２７】
図４は、変換情報の例（その１）を説明する図である。変換情報は、セクタ内の相対的なセットインデックスを、キャッシュメモリ領域２１０内のセットインデックスに変換するための情報である。変換情報２２１に含まれるセクタ識別情報は、セクタを識別するために用いられる一意の情報である。変換情報２２１の例は、セクタ＃１〜セクタ＃４に対応するセクタ識別情報「００」〜「１１」を含む。なお、図４の例において、「００」というセクタ識別情報で識別されるセクタ＃１は、キャッシュメモリ領域２１０内の先頭のセットから５１２個目のセットまでを含むものとする。「０１」というセクタ識別情報で識別されるセクタ＃２は、セクタ＃１に含まれるセットの次のセットから５１２個目のセットまでを含むものとする。「１０」というセクタ識別情報で識別されるセクタ＃３は、セクタ＃２に含まれるセットの次のセットから１０２４個目のセットまでを含むものとする。「１１」というセクタ識別情報で識別されるセクタ＃４は、セクタ＃３に含まれるセットの次のセットから２０４８個目のセットまでを含むものとする。変換情報２２１は、各セクタ識別情報に対応したサブマスク情報及びオフセット情報を含む。
【００２８】
サブマスク情報は、アドレス情報３１０に含まれるタグ３１３と相対セットインデックス３１４から、相対セットインデックス３１４を抽出するために用いられる。サブマスク情報は、１２桁（１２ビット）に含まれるタグ３１３と相対セットインデックス３１４の内の相対セットインデックス３１４を示す桁部分を有効化した、１２ビットの情報である。セクタ＃１とセクタ＃２は、５１２セットを含むセクタであるため、セクタ＃１とセクタ＃２用の相対セットインデックス３１４は、９桁（９ビット）の情報で表される。つまり、タグ３１３と相対セットインデックス３１４を含む１２桁の情報のうち、下９桁が、相対セットインデックス３１４に該当する。そのため、セクタ＃１やセクタ＃２に対応するサブマスク情報の１２桁のうち下９桁には１が設定されている。また、セクタ＃３に対応するサブマスク情報の１２桁のうち下１０桁には１が設定されており、セクタ＃４に対応するサブマスク情報の１２桁のうち下１１桁には１が設定されている。タグ３１３と相対セットインデックス３１４の１２桁の情報と、サブマスク情報との論理積を取ることで、相対セットインデックス３１４を抽出可能となる。
【００２９】
オフセット情報は、相対セットインデックス３１４からキャッシュメモリ領域２１０内のセットインデックスを求めるために用いられる。相対セットインデックス３１４は、各セクタの先頭のセットから何番目のセットがアクセス対象のセットなのかを示す。オフセット情報は、各セクタの先頭のセットのセットインデックスを示す１２ビットの情報である。例えば、セクタ＃２の先頭のセットは、セット＃５１２であるため、オフセット情報は、２進数で（００１０００００００００）である。抽出された相対セットインデックス３１４と、オフセット情報との論理和を取ることで、キャッシュメモリ領域２１０内のセットインデックスを求めることができる。
【００３０】
図５は、キャッシュメモリを構成する回路の例（その１）を示す図である。キャッシュメモリ２００は、キャッシュメモリ領域２１０、マルチプレクサ２４１、マルチプレクサ２４２、変換情報記憶部２２０、変換回路２３０、タグテーブル２５０、コンパレータ２５１ａ〜２５１ｄ、選択回路２５２を備える。図５のキャッシュメモリ２００において、図２と同じ構成要素には、図２と同じ符号を付す。また、コンパレータ２５１ａ〜２５１ｄをまとめて「コンパレータ２５１」と称する。
【００３１】
キャッシュメモリ領域２１０や変換情報記憶部２２０は、例えば、ＳＲＡＭ（Static Random Access Memory）により実現されてもよい。ＳＲＡＭ等の揮発性メモリにより変換情報記憶部２２０が実現される場合、キャッシュメモリ２００に電力が供給されると、変換情報を記憶する不図示の不揮発性メモリから、変換情報が読み出されて変換情報記憶部２２０に書き込まれる。タグテーブル２５０は、例えば、ＣＡＭ（Content Addressable Memory）により実現されてもよい。
【００３２】
主記憶装置へのアクセスを伴う命令をプロセッサ（具体的には命令実行回路）が実行しようとする際、命令に含まれるアドレス情報３１０がキャッシュメモリ２００に入力される。そして、アドレス情報３１０に含まれるセクタ識別情報３１１に応じて、変換情報記憶部２２０に記憶されている変換情報が読み出される。読み出される変換情報は、オフセット情報及びサブマスク情報である。マルチプレクサ２４１には、変換情報記憶部２２０に記憶されている各オフセット情報とセクタ識別情報３１１が入力される。マルチプレクサ２４１は、入力されたセクタ識別情報３１１に対応するオフセット情報を選択し、選択したオフセット情報を変換回路２３０に出力する。マルチプレクサ２４２には、変換情報記憶部２２０に記憶されている各サブマスク情報とセクタ識別情報３１１が入力される。マルチプレクサ２４２は、入力されたセクタ識別情報３１１に対応するサブマスク情報を選択し、選択したサブマスク情報を変換回路２３０に出力する。
【００３３】
変換回路２３０は、ＡＮＤ回路２３１、ＯＲ回路２３２、ＡＮＤ回路２３３、ＯＲ回路２３４、ＮＯＴ回路２３５、ビットシフト回路２３６を備える。ＡＮＤ回路２３１とＯＲ回路２３２は、アドレス情報３１０からアクセス対象のキャッシュメモリ領域２１０内のセットを示すセットインデックスを特定するために用いられる。
【００３４】
ＡＮＤ回路２３１は、マルチプレクサ２４２から出力されたサブマスク情報と、タグ３１３と相対セットインデックス３１４を含む１２ビットのデータ３１６との論理積をとる。ＡＮＤ回路２３１は、論理積の結果として、１２ビットのデータ３１６から抽出される相対セットインデックス３１４を、ＯＲ回路２３２に出力する。より正確には、ＡＮＤ回路２３１は、上位ビットが適宜「０」でパディングされて１２ビットで表された相対セットインデックス３１４を、ＯＲ回路２３２に出力する。
【００３５】
ＯＲ回路２３２は、マルチプレクサ２４１から出力されたオフセット情報と、ＡＮＤ回路２３１で抽出された相対セットインデックス３１４との論理和をとる。ＯＲ回路２３２は、論理和の結果として、アクセス対象のキャッシュメモリ領域２１０内のセットを示すセットインデックスを出力する。このように、変換情報２２１が各セクタの先頭のセットインデックス（すなわち各セクタのオフセット情報）を含む場合、ＯＲ回路２３２のような簡単な回路によって相対セットインデックス３１４を絶対的なセットインデックスに変換することが可能となる。
【００３６】
ＮＯＴ回路２３５は、マルチプレクサ２４２から出力されたサブマスク情報の各ビットを反転する。すなわち、ＮＯＴ回路２３５は、「０」を「１」に変換し、「１」を「０」に変換する。ＮＯＴ回路２３５は、サブマスク情報の「０」と「１」を反転させた情報を、ＡＮＤ回路２３３に出力する。サブマスク情報の「０」と「１」が反転された情報では、サブマスク情報の１２ビットの内、タグ３１３に該当するビットの部分が「１」となっており、残りの部分が「０」となっている。
【００３７】
ＡＮＤ回路２３３は、ＮＯＴ回路２３５から出力された情報と、タグ３１３と相対セットインデックス３１４を含む１２ビットのデータ３１６との論理積をとる。ＡＮＤ回路２３３は、論理積の結果として、１２ビットのデータ３１６から抽出されるタグ３１３をＯＲ回路２３４に出力する。より正確には、ＡＮＤ回路２３３は、下位ビットが適宜「０」でパディングされて１２ビットで表されたタグ３１３を、ＯＲ回路２３４に出力する。
【００３８】
ビットシフト回路２３６は、タグ３１２が入力されると、タグ３１２のビット数に、タグ３１３と相対セットインデックス３１４のビット数に該当する１２ビットを加えるために、ビットシフトをする。ビットシフトの結果として、タグ３１２の後ろに、１２ビットの「０」がつけられ、２４ビットの結果情報が得られる。
【００３９】
ＯＲ回路２３４は、ビットシフト回路２３６から出力されたビットシフトの結果情報と、ＡＮＤ回路２３３で抽出されたタグ３１３との論理和をとる。より正確には、ＯＲ回路２３４は、ビットシフト回路２３６から出力された２４ビットの結果情報と、下位ビットが適宜「０」でパディングされて１２ビットで表されたタグ３１３の先頭に１２ビットの「０」を連結した２４ビットの情報との論理和をとる。ＯＲ回路２３４は、論理和の結果として、タグ３１２とタグ３１３とを連結したタグ３１７を出力する。より正確には、ＯＲ回路２３４は、下位ビットが適宜０でパディングされて２４ビットで表されたタグ３１７を出力する。
【００４０】
タグテーブル２５０は、キャッシュメモリ領域２１０の各セットに対応するタグ情報を記憶する。１つのセットに対応するタグ情報は複数のタグを含み、各タグは２４ビットで表される。上記のとおり、タグテーブル２５０は、例えばＣＡＭにより実現されてもよい。よって、ＯＲ回路２３２からセットインデックスがタグテーブル２５０へと出力されるのに応じて、出力されたセットインデックスにより識別されるセットに対応するタグ情報が、タグテーブル２５０からコンパレータ２５１へと出力される。
【００４１】
したがって、コンパレータ２５１は、ＯＲ回路２３２で求められたセットインデックスで識別されるセットに対応するタグ情報をタグテーブル２５０から読み出すことができる。コンパレータ２５１は、１つのセットに対応してタグテーブル２５０に記憶されるタグの数と同じ数が設置される。すなわち、コンパレータ２５１の数は、キャッシュメモリ領域２１０の１つのセットに含まれるキャッシュラインの数に等しく、換言すれば、キャッシュウェイの数に等しい。１つのコンパレータ２５１は、タグ情報に含まれる複数のタグのうち、当該コンパレータ２５１に対応する１つのタグを読み出す。各コンパレータ２５１（すなわち、コンパレータ２５１ａ〜２５１ｄの各々）は、タグテーブル２５０から取得したタグと、ＯＲ回路２３４から出力されるタグ３１７とが一致するかを判定する。
【００４２】
選択回路２５２は、各コンパレータ２５１（コンパレータ２５１ａ〜コンパレータ２５１ｄの各々）から、判定結果を受け取る。選択回路２５２は、ＯＲ回路２３２から出力されるセットインデックスで識別されるセットの中から１つのキャッシュラインを選択するための選択信号を、受け取った判定結果に応じて出力する。換言すれば、選択回路２５２は、キャッシュウェイを指定するための選択信号を出力する。
【００４３】
図５の例では、コンパレータ２５１ｃに出力されるタグテーブル２５０内のタグとタグ３１７とが一致するものとする。これにより、キャッシュメモリ領域２１０内のアクセス対象のキャッシュラインが、左側から３番目のキャッシュラインである、と特定される。また、図５の例では、ＯＲ回路２３２から出力されるセットインデックスで識別されるアクセス対象のセットは、キャッシュメモリ領域２１０内の上から３番目のセットであるものとする。プロセッサ（具体的には命令実行回路）は、上から３番目のセット内で上記のように特定された左側から３番目のキャッシュラインの、ライン内アドレス３１５にアクセスする。なお、キャッシュミスが発生した場合に、キャッシュメモリ２００は、Least Recently Used(LRU)などのアルゴリズムを用いて、アクセスの少ないキャッシュラインの入れ替え（リフィル）処理を行う。
【００４４】
図５のキャッシュメモリ２００の回路を用いることで、キャッシュメモリ領域２１０をセット単位で分割して活用することが可能となる。キャッシュメモリ領域２１０に含まれるセットの数は任意だが、キャッシュウェイの数の数に比べてセットの数が十分に多いものとする。したがって、キャッシュメモリ領域２１０をセット単位で分割することで、キャッシュウェイ単位で分割する場合よりも小さい領域にキャッシュメモリ領域２１０を分割することが可能となる。すなわち、本実施形態によれば、より細かい粒度での分割が可能となる。これにより、キャッシュクリア、プリフェッチ、データ格納処理などにおいてキャッシュメモリ領域２１０を使用する際には、キャッシュウェイ単位よりも容量の小さいセット単位で、キャッシュメモリ領域２１０を使用することが可能となる。その結果、キャッシュメモリ領域２１０をより有効に活用することが可能となる。
【００４５】
＜非連続のセットをセクタとして使用する方法＞
図６は、キャッシュメモリ領域の利用方法の例を説明する図である。非連続のセットを、１つのセクタとして利用するキャッシュメモリ領域の利用方法を、以下で説明する。キャッシュメモリ領域４００は、ブロック４０１ａ〜４０１ｄを含む。以下では、ブロック４０１ａ〜４０１ｄを区別せずに「ブロック４０１」と称することがある。ブロック４０１ａ〜４０１ｄは、連続して配置されるのではなく、非連続に配置されている。本実施形態に係るキャッシュメモリ領域４００では、４つのブロック４０１（ブロック４０１ａ〜ブロック４０１ｄ）が１つのセクタとして利用される。キャッシュメモリ領域が、複数のセクタを含む場合、各セクタは、共通の数（例えば４つ）のブロックに分割して利用される。なお、各セクタの分割数は、予め設定されているものとする。詳しくは後述するとおり、所定の分割数のブロックのうち２つ以上のブロックが連続して配置される場合もあり得る。各セクタは、２のべき乗個のセットを含み、その領域のセット数の倍数となるアドレス位置から必ず開始されているという条件を満たす(アラインメント条件とする)。アラインメント条件は、セクタに対してセットを効率的に割り当てるために課す制約条件である。５１２個のセットを含むセクタの各ブロック４０１（ブロック４０１ａ〜４０１ｄの各々）は、１２８個のセットを含む。
【００４６】
図７は、変換情報の例（その２）を説明する図である。変換情報４１０及び変換情報４２０は、セクタ内の相対的なセットインデックスを、キャッシュメモリ領域４００内のセットインデックスに変換するための情報である。変換情報４１０の例は、セクタ＃１〜セクタ＃４に対応するセクタ識別情報「００」〜「１１」を含む。
【００４７】
なお、図７の例において、「００」と「０１」というセクタ識別情報でそれぞれ識別されるセクタ＃１とセクタ＃２の各々は、キャッシュメモリ領域４００内の５１２個のセットを含むものとする。「１０」というセクタ識別情報で識別されるセクタ＃３は、キャッシュメモリ領域４００内の１０２４個のセットを含むものとする。「１１」というセクタ識別情報で識別されるセクタ＃４は、キャッシュメモリ領域４００内の２０４８個のセットを含むものとする。
【００４８】
変換情報４１０は、各セクタ識別情報に対応したサブマスク情報及びブロックマスク情報を含む。なお、図７のセクタ識別情報は、２ビットの情報で表されているものの、各セクタを識別可能な情報であれば、セクタ識別情報は、より長いビット長を有する別の情報でもよい。
【００４９】
サブマスク情報は、アドレス情報３１０に含まれるタグ３１３と相対セットインデックス３１４から、相対セットインデックス３１４を抽出するために用いられる。サブマスク情報は、１２桁（１２ビット）に含まれるタグ３１３と相対セットインデックス３１４の内の、相対セットインデックス３１４を示す桁部分を有効化した、１２ビットの情報である。セクタ＃１とセクタ＃２は、５１２セットを含むセクタであるため、セクタ＃１とセクタ＃２の相対セットインデックス３１４は、９桁（９ビット）の情報で表される。つまり、タグ３１３と相対セットインデックス３１４の１２桁の情報のうち、下９桁が、相対セットインデックス３１４に該当する。そのため、セクタ＃１やセクタ＃２に対応するサブマスク情報の１２桁のうち下９桁には１が設定されている。また、セクタ＃３に対応するサブマスク情報の１２桁のうち下１０桁には１が設定されており、セクタ＃４に対応するサブマスク情報の１２桁のうち下１１桁には１が設定されている。タグ３１３と相対セットインデックス３１４の１２桁の情報と、サブマスク情報との論理積を取ることで、相対セットインデックス３１４を抽出可能となる。
【００５０】
ブロックマスク情報は、セクタが何個のブロックに分割されているかを示した情報を含む１２桁（１２ビット）の情報である。ブロックマスク情報と、アドレス情報３１０に含まれる１２ビットのデータ３１６（つまりタグ３１３と相対セットインデックス３１４を合わせた部分）との論理積を取ることで、アクセス対象であるブロック４０１を示すブロック識別情報を抽出可能となる。１つのセクタ内において、ブロック４０１ａ〜ブロック４０１ｄの各々は、ブロック識別情報により一意に識別される。５１２（＝２９）個のセットを含むセクタ＃１では、タグ３１３が３（＝１２−９）ビットで、相対セットインデックス３１４が９ビットとなる。すると、論理積の演算において、ブロックマスク情報の上３桁がタグ３１３との演算に用いられ、ブロックマスク情報の下９桁が相対セットインデックス３１４との演算に用いられる。相対セットインデックス３１４との論理積の演算により得られる９ビットのうちの２ビットが、ブロック識別情報に該当する。
【００５１】
セクタが何個のブロックに分割されているかを示した情報を、以下では「分割数情報」ともいう。分割数情報は、分割数を表すビットパターンである。分割数は、全セクタ共通である。
【００５２】
より詳しくは、分割数は、予め決められており、２のべき乗である。分割数情報は、分割数に応じた長さのビットパターンで表される。例えば、分割数が２（＝２１）の場合、分割数情報は１ビットの「１」である。また、分割数が４（＝２２）の場合、分割数情報は２ビットの「１１」である。すなわち、分割数が２Ｄの場合、分割数情報はＤ個の「１」が並んだビットパターンである（なお、Ｄは１以上の所定の整数である）。分割数が２Ｄの場合、２Ｄ個のブロックに分割されるセクタがあってもよく、ブロックに分割されないセクタがあってもよい。なお、２Ｄ個のブロックのうちの２つ以上がたまたま連続していてもよい。つまり、見かけ上、２Ｄ個未満の個数のブロックに分割されているセクタがあってもよい。ブロックに分割されないセクタは、連続する２Ｄ個のブロックに分割されている、とも見なせる。
【００５３】
図７の例では、セクタ＃１〜セクタ＃４の各々が４分割される。したがって、セクタ＃１〜セクタ＃４に関する分割数情報は、どれも「１１」である。セクタ＃１において、「１１」という分割数情報は、相対セットインデックス３１４との計算に用いられるブロックマスク情報の下９桁のうちの先頭の２ビットに設定される。そのため、セクタ＃１のブロックマスク情報には、「０００１１０００００００」が設定されている。このように、ブロックマスク情報は、分割数情報以外のビット部分には、「０」が設定される。セクタ＃２において、「１１」という分割数情報は、相対セットインデックス３１４との計算に用いられるブロックマスク情報の下９桁のうちの先頭の２ビットに設定される。そのため、セクタ＃２のブロックマスク情報には、「０００１１０００００００」が設定されている。セクタ＃３において、「１１」という分割数情報は、相対セットインデックス３１４との計算に用いられるブロックマスク情報の下１０桁のうちの先頭の２ビットに設定される。そのため、セクタ＃３のブロックマスク情報には、「００１１００００００００」が設定されている。セクタ＃４において、「１１」という分割数情報は、相対セットインデックス３１４との計算に用いられるブロックマスク情報の下１１桁のうちの先頭の２ビットに設定される。そのため、セクタ＃４のブロックマスク情報には、「０１１０００００００００」が設定されている。
【００５４】
以上のとおり、あるセクタのセット数が２Ｍであり、かつ、当該セクタが２Ｄ個のブロックに分割される場合、当該セクタのブロックマスク情報は、（１２−Ｍ）個の「０」と、Ｄ個の「１」と、（Ｍ−Ｄ）個の「０」が並んだ、１２ビットの情報である。
【００５５】
変換情報４２０は、ブロック識別情報と、各ブロックの先頭のセットのセットインデックスを示すオフセット情報を含む。図８に示す変換情報記憶部２２０ａは、セクタ毎の変換情報４２０を記憶する。そのため、変換情報記憶部２２０ａは、変換情報４１０内のセクタ識別情報の「００」〜「１１」の各々に対応づけて変換情報４２０（変換情報４２０ａ〜４２０ｄ）を記憶している。以下では、変換情報４２０ａ〜４２０ｄを区別せずに「変換情報４２０」と称することがある。
【００５６】
変換情報４２０に含まれるブロック識別情報は、１つのセクタ内で各ブロック４０１を識別するための情報である。分割数が２Ｄの場合、ブロック識別情報はＤビットで表される。一方、上記のとおりデータ３１６からブロック識別情報を抽出することが可能であり、抽出されたブロック識別情報に対応するオフセット情報が使われる。具体的には、ブロック識別情報は、変換情報４１０のブロックマスク情報と、アドレス情報３１０に含まれるタグ３１３と相対セットインデックス３１４との論理積の結果から、一部の情報を抽出することで求められる。論理積の結果から抽出される一部の情報は、ブロックマスク情報のうちの分割数情報を示すビット部分（２ビット）の論理積の結果である。より具体的には、論理積の結果から抽出される一部の情報は、ブロックマスク情報内の分割数情報を示すビット部分（２ビット）と、相対セットインデックス３１４の先頭２ビットの論理積の結果である。
【００５７】
抽出されたブロック識別情報に対応するブロックのオフセット情報が、変換情報４２０に基づいて選択され、変換回路２３０に提供される。変換回路２３０は、オフセット情報を用いて、相対セットインデックス３１４を、キャッシュメモリ領域４００内のセットを示すセットインデックスに変換する。
【００５８】
図８は、キャッシュメモリを構成する回路の例（その２）を示す図である。図８のキャッシュメモリ２００ａにおいて、図５と同じ構成要素には、図５と同じ符号を付す。図８のキャッシュメモリ２００ａは、図４の変換情報２２１を記憶する図５の変換情報記憶部２２０の代わりに、図７の変換情報４１０及び変換情報４２０を記憶する変換情報記憶部２２０ａを備える。また、図８のキャッシュメモリ２００ａは、図５のマルチプレクサ２４１の代わりにマルチプレクサ２４６を備える。キャッシュメモリ２００ａは更に、マルチプレクサ２４３、ＡＮＤ回路２４４、及び抽出部２４５を備える。
【００５９】
なお、図７のキャッシュメモリ領域４００は、その使用方法において（つまり、セクタが複数のブロックに分割されるか否かという点において）、図２及び図５のキャッシュメモリ領域２１０と異なる。しかし、図７のキャッシュメモリ領域４００は、物理的には、図２及び図５のキャッシュメモリ領域２１０と同じであってよい。例えば、図５のキャッシュメモリ領域２１０と同様に、図７のキャッシュメモリ領域４００も、ＳＲＡＭにより実現されてもよく、４０９６個のセットを含んでいてもよい。そのため、図８では、「４００」ではなく「２１０」という参照符号がキャッシュメモリ領域に付与されている。
【００６０】
主記憶装置へのアクセスを伴う命令をプロセッサ（具体的には命令実行回路）が実行しようとする際、命令に含まれるアドレス情報３１０がキャッシュメモリ２００ａに入力される。そして、アドレス情報３１０に含まれるセクタ識別情報３１１に応じて、変換情報記憶部２２０ａに記憶されている変換情報４１０と変換情報４２０が読み出される。読み出される変換情報は、ブロックマスク情報、サブマスク情報、及びオフセット情報である。
【００６１】
マルチプレクサ２４３には、変換情報記憶部２２０ａに記憶されている各ブロックマスク情報と、セクタ識別情報３１１が入力される。マルチプレクサ２４３は、入力されたセクタ識別情報３１１に対応するブロックマスク情報を選択し、選択したブロックマスク情報をＡＮＤ回路２４４に出力する。
【００６２】
ＡＮＤ回路２４４は、マルチプレクサ２４３から出力されたブロックマスク情報と、タグ３１３と相対セットインデックス３１４を含む１２ビットのデータ３１６との論理積をとる。ＡＮＤ回路２４４は、論理積の結果を抽出部２４５に出力する。
【００６３】
抽出部２４５は、ＡＮＤ回路２４４の論理積の結果から、ブロック識別情報を抽出する。例えば、図７の例では、分割数が４なのでブロック識別情報は２ビットで表される。したがって、抽出部２４５は、ＡＮＤ回路２４４から出力された１２ビットの中から、ブロック識別情報を示す２ビットを抽出する。なお、１２ビット中におけるブロック識別情報の先頭のビット位置を検出するために、抽出部２４５には、マルチプレクサ２４２により選択されたサブマスク情報が入力される。
【００６４】
実施形態によっては、ＡＮＤ回路２４４が抽出部２４５の中に含まれていてもよい。図８のようにＡＮＤ回路２４４が抽出部２４５の外部にある場合、ブロック識別情報のビット長を検出するために、抽出部２４５には、マルチプレクサ２４３により選択されたブロックマスク情報がさらに入力されてもよい。ただし、分割数が固定されている場合、ブロック識別情報のビット長も固定されているので、抽出部２４５へのブロックマスク情報の入力が省略されてもよい。
【００６５】
いずれにせよ、抽出部２４５は、抽出したブロック識別情報をマルチプレクサ２４６に出力する。
【００６６】
マルチプレクサ２４６には、変換情報記憶部２２０ａに記憶されているオフセット情報と、抽出部２４５から出力されたブロック識別情報と、セクタ識別情報３１１が入力される。マルチプレクサ２４６は、入力されたセクタ識別情報３１１とブロック識別情報の組み合わせに対応するオフセット情報を選択し、選択したオフセット情報を変換回路２３０に出力する。例えば、セクタ識別情報３１１が「０１」でブロック識別情報が「１０」の場合、マルチプレクサ２４６は、変換情報４２０ｂに含まれるオフセット情報のうち、「１０」というブロック識別情報に対応するオフセット情報を出力する。
【００６７】
マルチプレクサ２４６は、物理的には複数のマルチプレクサにより実現されてもよい。例えば、セクタ識別情報３１１を選択信号として用いるマルチプレクサが、分割数２Ｄと同数あってもよい。この場合、これら２Ｄ個のマルチプレクサの各々には、Ｎ個の異なるセクタにおいて同じブロック識別情報で識別されるＮ個のブロックに対応するＮ個のオフセット情報が入力される。また、これら２Ｄ個のマルチプレクサの出力のうちの１つをブロック識別情報に応じて選択するもう一つのマルチプレクサを更に設けることにより、図８のマルチプレクサ２４６が実現される。
【００６８】
図８のキャッシュメモリ２００においても、変換回路２３０には、図５と同様の情報（すなわち、マルチプレクサ２４６からの出力、マルチプレクサ２４２からの出力、タグ３１２、及びデータ３１６）が入力される。そのため、非連続のセットをセクタとして使用するキャッシュメモリにおいても、キャッシュメモリ領域をセット単位で分割して活用することが可能となる。
【００６９】
本実施形態によれば、非連続に配置された複数のブロックを１つのセクタとして利用することができる。そのため、１つのセクタ用に使いたい所望の数のセットがたとえ連続していなくても、所望の数のセットを含むセクタが利用可能となる。換言すれば、非連続のブロックを利用することで、より効率的にキャッシュメモリ領域を使うことが可能となる。また、各ブロックの先頭のセットインデックス（すなわち各ブロックのオフセット情報）を含む変換情報４２０を使うことで、ＯＲ回路２３２のような簡単な回路によって相対セットインデックス３１４を絶対的なセットインデックスに変換することが可能となる。
【００７０】
キャッシュメモリ領域のセット数は、キャッシュウェイの数よりも多い。そのため、複数のセットをセット単位で複数のセクタに分割する場合（例えば図２〜８を参照）の方が、複数のセットをキャッシュウェイ単位で複数の分割領域に分割する場合（例えば図１を参照）よりも、分割可能な数が多くなる。上記の各実施形態は、１次キャッシュ（Ｌ１キャッシュ）、２次キャッシュ（Ｌ２キャッシュ）のどちらにも適用可能である。しかし、セット数が多い２次キャッシュに上記の各実施形態を適用するほうが、より顕著な効果が得られる。
【００７１】
各セットのサイズは、キャッシュウェイの数のキャッシュラインの領域サイズの合計に等しい。一方、各キャッシュウェイのサイズは、セット総数のキャッシュラインの領域サイズの合計に等しい。セット総数は、キャッシュウェイの数よりも多いため、各セットの領域サイズは、各キャッシュウェイのサイズよりも小さい。そのため、キャッシュメモリ領域をセット単位で分割することで、キャッシュウェイ単位で分割するよりも、より小さい単位で領域を利用可能となる。すなわち、上記の各実施形態によれば、個々のセクタのサイズをより細かい粒度で設定することが可能となる。
【００７２】
例えば図１のようにキャッシュメモリ領域をキャッシュウェイ単位で複数の分割領域に分割した場合、各セットでは、全てのキャッシュウェイを利用できるとは限らない。更に、より多くの分割領域にキャッシュメモリ領域を分割すると、１つの分割領域あたりのキャッシュウェイの数は少なくなる。そのため、同じセットに複数のキャッシュヒットがあると、スラッシングが多発することが考えられる。一方、上記の各実施形態における各セットでは、キャッシュメモリ領域に含まれる全キャッシュウェイを利用可能である。そのため、上記の各実施形態のように、キャッシュメモリ領域をセット単位で分割することで、スラッシングの多発を抑止できる。上記の各実施形態における各セットは、キャッシュメモリ領域に含まれる全キャッシュウェイを利用可能であるため、アクセスが集中しやすいデータの専用領域として利用することにも向いている。
【００７３】
キャッシュウェイ単位で複数の分割領域に分割されているキャッシュメモリ領域で、新しく分割領域を確保する場合には、全セットで、既存のデータが上書されることで新たな分割領域が確保される。そのため、各分割領域のデータは、他分割領域に係る処理に干渉される恐れがある。一方、上記の実施形態によれば、セクタ同士は、セット単位で明確に区切られている。そのため、新しいセクタを確保する処理に伴って、他のセクタ用に使われているセットで既存のデータを上書きする処理（例えばＬＲＵといったアルゴリズムによって一番古いデータを上書きする処理）が行われることはない。そのため、上記の実施形態によるセクタは、アクセスが集中しやすいデータの専用領域として利用することに向いている。
【００７４】
キャッシュメモリ領域の用途によっては、キャッシュデータを退避したい場合もある。キャッシュメモリ領域をキャッシュウェイ単位で複数の分割領域に分割していると、退避させたいデータは、キャッシュメモリ領域内の全セットに分散されて記憶されている可能性がある。そのため、ある分割領域のデータを退避させたい場合、全キャッシュメモリ領域を全探索する処理が行われる。更に、探索が行われている最中にもキャッシュラインが更新される可能性もある。一方、上記の各実施形態では、セクタ又はブロック内の連続したセットにデータが格納されている。そのため、退避させたいキャッシュデータの格納位置（すなわち、退避させたいキャッシュデータが格納されているセットの範囲）は、変換情報から容易に特定される。また、特定された範囲のセットに対するアクセスのみを禁止すれば、退避させたいキャッシュデータが退避処理中に更新されることを防げる。よって、比較的簡易にキャッシュデータの退避が可能である。
【００７５】
例えば図１のように、キャッシュメモリ領域がキャッシュウェイ単位で複数の分割領域に分割される比較例においては、キャッシュメモリは、管理回路と管理用のＳＲＡＭを備える。管理回路は、キャッシュメモリ領域をキャッシュウェイ単位で分割し、各キャッシュウェイを管理するための回路である。管理用のＳＲＡＭは、各セットの所属するキャッシュウェイの識別情報などを記憶する。なお、キャッシュウェイの数が多くなるほど、ＳＲＡＭ及び管理回路の規模は大きくなる。これに対し、上記の各実施形態によれば、少数のＡＮＤ回路やＯＲ回路、少量の変換情報を記憶するための記憶部などを備えることで、キャッシュメモリ領域を複数のセクタに分割することが可能となる。また、上記の各実施形態によれば、分割数が増えたとしても、回路の規模がそれほど大きくはならない。
【００７６】
＜キャッシュメモリ制御プログラム＞
プロセッサで様々なプログラムが実行されると、各プログラムが使用するデータには、キャッシュメモリ領域の一部の領域が割り当てられる。プログラムが使用するデータに割り当てられる領域のサイズは、小さい領域から大きい領域まで様々なサイズである可能性がある。小さい領域から大きい領域まで様々なサイズ領域の割り当てに対応するためには、データが格納されておらず、かつ、連続するセットの数が多い領域があることが望ましい。以下において、データが格納されていない、連続する複数のセットを含む領域を、「未割り当て領域」と称する。
【００７７】
図９は、未割り当て領域を纏める方法の例を説明する図である。図９のキャッシュメモリ領域５００は、未割り当て領域５０１、使用済み領域５０２、使用済み領域５０３、未割り当て領域５０４を含む。未割り当て領域５０１、使用済み領域５０２、使用済み領域５０３、未割り当て領域５０４は、同じサイズ（セット数）のブロックである。未割り当て領域５０１と未割り当て領域５０４は、データが格納されていないセットのみを含む領域である。使用済み領域５０２と使用済み領域５０３は、データが格納されているセットを含む領域である。未割り当て領域５０１、使用済み領域５０２、使用済み領域５０３、未割り当て領域５０４の各々は、Ｘ個のセットを含む領域であるものとする。なお、未割り当て領域５０１と使用済み領域５０２とは、連続して配置されている。また、未割当て領域５０１は、２Ｘの倍数のアドレスから開始され、未割当て領域５０２の末端は２Ｘの倍数のアドレスであるものとする。使用済み領域５０３と未割り当て領域５０４とは、連続して配置されている。また、未割当て領域５０３は２Ｘの倍数のアドレスから開始され、未割当て領域５０４の末端は２Ｘの倍数のアドレスであるものとする。各々がＸ個のセットを含む２つ以上の未割り当て領域と２つ以上の使用済み領域が、キャッシュメモリ領域５００にない場合は、未割り当て領域を纏める処理は行われない。
【００７８】
未割り当て領域を纏める処理は、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ（ＯＳ）上で動作する制御部によって制御される。制御部は、プロセッサ（具体的には命令実行回路）がプログラムを実行することにより実現される。制御部を実現するプログラムモジュールは、ＯＳの一部である。
【００７９】
制御部は、始めに、使用済み領域５０３のデータを未割り当て領域５０１にコピーする。制御部は、使用済み領域５０３のデータのコピーが完了すると、変換情報４２０内の、使用済み領域５０３に対応するオフセット情報を変更する。変更後のオフセット情報は、未割り当て領域５０１の先頭のセットのセットインデックスに等しい。これにより、２Ｘ個のセットを含む使用済み領域５０５と、２Ｘ個のセットを含む未割り当て領域５０６ができる。この入れ替え処理は、隣の領域がX以上の場合、そこで分断して移動できない。しかし、2のべき乗でアラインメント条件を満たすように領域分割した場合、2Xの境界で必ず分断し、入れ替え可能となる。
【００８０】
ある観点によれば、図９の処理は、使用済み領域５０３を未割り当て領域５０１の位置に移動させる処理である。別の観点によれば、図９の処理は、未割り当て領域５０１を使用済み領域５０３の位置に移動させることで、２Ｘ個の連続するセットを含む未割り当て領域５０６を得る処理である。
【００８１】
制御部による未割り当て領域を纏める処理は、プロセッサがメモリアクセス命令を実行する間をぬって実行される。コピー中に処理対象の領域のデータが入れ替わった場合には、更新された情報を主記憶装置内に記憶しておき、更新された部分のみをコピー先の領域に後から転送する処理を、制御部が実行すればよい。
【００８２】
図１０は、未割り当て領域情報と未割り当て領域数情報の例を説明する図である。未割り当て領域情報６０１と未割り当て領域数情報６０２は、制御部が使用する情報であり、主記憶装置に記憶される。未割り当て領域情報６０１は、キャッシュメモリ領域内での未割り当て領域の情報をリスト化したものである。未割り当て領域情報６０１は、各未割り当て領域のサイズ（セット数）及びオフセット情報を含む。未割り当て領域情報６０１内のオフセット情報は、各未割り当て領域の先頭のセットを示すセットインデックスを示す１２ビットの情報である。なお、未割り当て領域情報６０１内のエントリ（すなわちサイズとオフセット情報のペア）は、オフセットを示すセットインデックスの昇順にソートされている。未割り当て領域情報６０１は、例えば、「０００１１０００００００」というセットインデックスが示すセットから始まる１２８個のセットが、未割り当て領域であることを示している。
【００８３】
未割り当て領域数情報６０２は、未割り当て領域のサイズ（セット数）ごとに、当該サイズの各未割り当て領域に対応して未割り当て領域情報６０１において割り当てられたポインタの情報を含む。未割り当て領域情報６０１には、１２８個のセットを含む未割り当て領域についてのエントリが２つと、２５６個のセットを含む未割り当て領域についてのエントリが１つ含まれている。そのため、未割り当て領域数情報６０２において１２８個のセットの未割り当て領域に対応するポインタには、未割り当て領域情報６０１の上から１番目と２番目のエントリを示す情報が含まれる。これにより、１２８個のセットの未割り当て領域がキャッシュメモリ領域内に２つ存在し、かつ、キャッシュメモリ領域内の未割り当て領域のうち１番目と２番目の未割り当て領域が、１２８個のセットの未割り当て領域であることがわかる。ポインタは、２進数など別の形式の情報であってもよく、キャッシュメモリ領域内の各未割り当て領域に識別情報が割り当てられてもよい。なお、２５６個のセットを含む未割り当て領域のように、１２８個のセットのブロックに分割可能な未割り当て領域が多いほうが好ましい。
【００８４】
１２８個のセットを含む未割り当て領域が非連続に４つあるキャッシュメモリ領域では、１２８個のセットを含むブロックを４つ確保可能である。しかし、１２８個のセットを含む未割り当て領域だけが非連続に４つあるキャッシュメモリ領域では、２５６個のセットを含むブロックは１つも確保できない。一方、１２８個のセットを含む未割り当て領域が２つと、２５６個のセットを含む未割り当て領域が１つあるキャッシュメモリ領域では、１２８個のセットを含むブロックを４つ確保可能である。更に、１２８個のセットを含む未割り当て領域が２つと、２５６個のセットを含む未割り当て領域が１つあるキャッシュメモリ領域では、２５６個のセットを含むブロックを１つ確保することも可能である。
【００８５】
以上のように、各々が１２８個のセットを含む２個の非連続な未割り当て領域よりは、２５６個のセットを含む１個の未割り当て領域が存在する方が好ましい。そこで、制御部は、「図９のように領域を移動する」という仮定の下で得られる各未割り当て領域のセット数を算出する。この仮定は、より詳しくは、「キャッシュメモリ領域のうち、使用されていない領域のうちの１つ（例えば未割り当て領域５０１）を、他の使用されていない領域のうちの１つに隣接した位置（例えば使用済み領域５０３の位置）に移動する」という仮定である。説明の便宜上、この仮定の下で得られる未割り当て領域を「連続空き領域」ともいう。例えば、図９の例では、２Ｘ個の連続するセットを含む未割り当て領域５０６が、この仮定の下で得られる連続空き領域である。連続空き領域は、１つ以上得られる可能性がある。制御部は、この仮定の下で得られる各連続空き領域に含まれるセット数（例えば、図９の例では２Ｘ）を算出する。
【００８６】
さらに、制御部は、少なくとも異なる数のセットを含む各セクタについて、「確保可能数」を求める。あるセクタについての確保可能数は、連続空き領域（すなわち未割り当て領域）について上記のように算出されたセット数を、当該セクタに含まれるセットの数の所定値（具体的には分割数）による商で割った値である。
【００８７】
例えば、２Ｍ個のセットが含まれるセクタが将来作成される可能性があり、かつ、分割数が２Ｄであり、かつ、ある連続空き領域のセット数がＹだとする。この場合、当該セクタの各ブロックは、（２Ｍ／２Ｄ）個のセットを含むことになる。そのため、Ｙ個のセットを含む連続空き領域があれば、当該セクタ用にＹ／（２Ｍ／２Ｄ）個のブロックを確保することが可能である。したがって、Ｙ個のセットを含む連続空き領域と２Ｍ個のセットを含むセクタとの組み合わせについて算出される確保可能数は、Ｙ／（２Ｍ／２Ｄ）である。
【００８８】
制御部は、以上のようにして確保可能数を算出する。そして、制御部は、各連続空き領域についての確保可能数の合計に基づいて、使用されていない領域（すなわち未割り当て領域）のうちの１つを、他の使用されていない領域のうちの１つに隣接する位置に移動させる。より具体的には、制御部は、確保可能数の合計が最大となるように、未割り当て領域を纏める処理を行うことが好ましい。すなわち、上記仮定の下で連続空き領域が１つだけ作成され得る場合、当該連続空き領域が得られるように、制御部は未割り当て領域を移動させる。また、上記仮定の下で２つ以上の異なるサイズの連続空き領域が作成され得る場合、制御部は、連続空き領域のサイズごとに、確保可能数の合計値（すなわち、複数の異なるサイズのセクタについてそれぞれ算出した複数の確保可能数の合計値）を算出する。そして、制御部は、合計値が最大の連続空き領域を選び、選んだ連続空き領域が得られるように、未割り当て領域を移動させる。
【００８９】
図１１は、セクタ取得処理の例を説明する図である。セクタ取得処理は、サーバ等のコンピュータ上で動作するソフトウェアから呼び出されるシステムコールや、ＯＳ内に含まれるプログラムモジュールのうち制御部とは異なるモジュールからの指示を契機に、制御部で実行される。セクタ取得処理の契機となるシステムコールや指示のことを、以下では「セクタ取得命令」ともいう。セクタ取得命令には、例えば、１０００キロバイト（ｋＢ）のデータ領域をセクタ＃３に設定するためのサイズ情報が含まれる。
【００９０】
制御部は、まず、セクタ取得命令に含まれるサイズ情報を、セット数に変換する。例えば、キャッシュメモリ領域が、１０個のキャッシュウェイを含み、１つのキャッシュラインが２５６バイトである場合、１つのセットのサイズは２５６０バイトである。そのため、１０００キロバイト（ｋＢ）のデータ領域を確保するためには、制御部は、３９１セットの未割り当て領域がキャッシュメモリ領域内にあるかを判定する。
【００９１】
ここで、制御部は、未割り当て領域情報６０１を参照し、確保したいデータ領域のセット数「ｎ」を分割数「α」で割ったｎ/α個以上のセットを備える領域を、α個、選択する。例えば、確保したいデータ領域のセット数が３９１個であり（ｎ＝３９１）、分割数が４である（α＝４）場合、ｎをαで割ると、約９８セットとなる。制御部は、９８セット以上を含む未割り当て領域を、４つ、キャッシュメモリ領域から選択する。より具体的な例として、制御部は、割り当て領域情報６０１を参照し、１２８セットの未割り当て領域２つと、２５６セットの未割り当て領域を１つ選択する。なお、２５６セットの未割り当て領域は、２つの１２８セットの未割り当て領域として使用可能である。なお、分割数「α」は、セクタが何個のブロックに分割されているかを示す値であり、前述の分割数２Ｄのことである。分割数「α」は、予め設定されている。
【００９２】
制御部は、選択した未割り当て領域に関するエントリを、未割り当て領域情報６０１から削除する。次に、制御部は、図７の変換情報４１０及び変換情報４２０を以下のとおり更新する。なお、図１１の変換情報４１０ａは、制御部がセクタ取得処理を実行することで得られる情報であり、図７の変換情報４１０とは内容が一部異なる。また、図１１の変換情報４２０ｅは、制御部がセクタ取得処理を実行することで得られる情報であり、図７でセクタ＃３に対応する変換情報４３０ｃとは内容が一部異なる。また、図１１の未割り当て領域情報６０１は、図１０の未割り当て領域情報６０１とは内容が一部異なる。
【００９３】
制御部は、セクタ取得命令で指定されているセクタ＃３を示すセクタ識別情報として「１０」を含むエントリを、変換情報４１０ａに追加する。また、上記の例において、セクタ取得命令は、３９１個のセットを取得するための命令である。２８＜３９１＜２９なので、３９１個のセットを含む領域内での相対セットインデックス３１４は、９桁で表すことができる。よって、制御部は、変換情報４１０ａに示すように、セクタ＃３のサブマスク情報（１２桁の情報）として、「０００１１１１１１１１１」を設定する。サブマスク情報（１２桁の情報）のうち、下９桁が、相対セットインデックス３１４に該当する。そのため、セクタ＃３に対応するサブマスク情報の１２桁のうち下９桁には１が設定されている。制御部は、変換情報４１０ａに示すように、セクタ＃３のブロックマスク情報として、「０００１１０００００００」を設定する。なぜなら、分割数「α」が４であるためである。４という分割数に対応する「１１」が、相対セットインデックス３１４との計算に用いられるブロックマスク情報の下９桁の先頭の２ビットに設定される。
【００９４】
制御部は、さらに、セクタ＃３に対応した変換情報４２０ｅを、変換情報記憶部２２０ａに記憶させる。変換情報４２０ｅは、未割り当て領域情報６０１に基づいて設定される。変換情報４２０ｅでは、未割り当て領域情報６０１に記録されている１２８セットの未割り当て領域２つに対応する情報として、ブロック識別情報「００」と「０１」が割り当てられる。１２８セットの未割り当て領域２つのそれぞれのオフセット情報は、未割り当て領域情報６０１におけるオフセット情報と同じものが設定される。２５６セットの未割り当て領域は、連続する２つの１２８セットの未割り当て領域として使用される。そのため、２５６セットの未割り当て領域に対応して、変換情報４２０ｅでは、ブロック識別情報「１０」と「１１」が割り当てられる。ブロック識別情報「１０」に対応するオフセット情報としては、未割り当て領域情報６０１内の、２５６セットの未割り当て領域のオフセット情報が設定される。また、ブロック識別情報「１１」に対応して、未割り当て領域情報６０１に記録されている２５６セットの未割り当て領域を２分割した際の２つ目のブロックの先頭のセットを示すセットインデックスが、オフセット情報として設定される。
【００９５】
図１２は、セクタ解放処理の例を説明する図である。セクタ解放処理は、サーバ等のコンピュータ上で動作するソフトウェアから呼び出されるシステムコールや、ＯＳ内に含まれるプログラムモジュールのうち制御部とは異なるモジュールからの指示を契機に、制御部で実行される。セクタ解放処理の契機となるシステムコールや指示のことを、以下では「セクタ解放命令」ともいう。セクタ解放命令には、解放対象となるセクタに関する情報が含まれる。
【００９６】
図１２の未割り当て領域情報６０１ａは、制御部のセクタ解放処理によって、図１１の未割り当て領域情報６０１が更新された後の情報を示す。つまり、未割り当て領域情報６０１ａは、制御部が図１１を参照して説明した方法により取得したセクタを解放する場合の、更新後の情報の例である。制御部が解放するセクタ＃３は４つのブロックを含み、4つのブロックの各々は１２８セットを含む。４つのブロックに関する情報は、セクタ＃３に対応した図１１の変換情報４２０ｅに含まれている。制御部は、セクタ＃３に対応した変換情報４２０ｅに基づいて、解放するブロックの情報を、未割り当て領域情報６０１aに示すように追加する。未割り当て領域情報６０１aに書き込まれるブロックの情報は、１２８セットのブロック４つのオフセット情報である。すなわち、４つのブロックの解放に応じて、制御部は、未割り当て領域情報６０１aに示すように４つのエントリを追加する。
【００９７】
図１２の未割り当て領域数情報６０２ａは、制御部がセクタ解放処理を実行することによって得られる情報である。制御部は、未割り当て領域数情報６０２ａのうち、解放された各ブロックに対応して未割り当て領域情報６０１において割り当てられたポインタの情報を更新する。具体的には、セクタ＃３が解放される場合、１２８セットのブロックが４つ解放される。そのため、制御部は、未割り当て領域情報６０１aに記録された４つのブロックに対応する４つのポインタの情報を、図１２に示すように未割り当て領域数情報６０２ａに書き込む。
【００９８】
図１２の変換情報４１０ｂは、制御部のセクタ解放処理によって、図１１の変換情報４１０ａが更新された後の情報を示す。制御部は、セクタ解放処理において、変換情報４１０ｂ内のセクタ＃３に対応するサブマスク情報に、無効を示す値を設定する。例えば、制御部は、変換情報４１０ｂに示すように、セクタ＃３に対応するサブマスク情報に、無効を示す値「００００００００００００」を設定する。
【００９９】
図１３は、未割り当て領域を纏める処理の例を説明する図である。未割り当て領域を纏める処理（図９及び後述の図１８も参照）は、セクタ解放処理の最後に、制御部により実行される。図１３の未割り当て領域情報７０１ａは、未割り当て領域を纏める処理が実行される前のキャッシュメモリ領域の状態を示す情報である。
【０１００】
制御部は、未割り当て領域情報７０１ａ内を小さいサイズの未割り当て領域から順にチェックしていき、同一サイズの未割り当て領域が２つ以上ある場合、同一サイズの未割り当て領域２つを選択し、纏める処理を行う。未割り当て領域情報７０１ａは、１２８個のセットを含む未割り当て領域に関するエントリを４つ含む。そのため、制御部は、未割り当て領域情報７０１ａを参照して、１２８個のセットを含む未割り当て領域を２つ選択し、纏める処理を行う。その結果、未割り当て領域情報７０１ｂに示すように、２５６個のセットを含む未割り当て領域が生成される。制御部は、未割り当て領域情報７０１ａ内を小さいサイズの未割り当て領域からチェックしていき、同じサイズの未割り当て領域が２つ以上見つからなくなるまで、纏める処理を繰り返す。
【０１０１】
実施形態によっては、上記のチェック順とは異なる順序で、制御部が未割り当て領域をチェックしてもよい。また、制御部は、纏める対象の２つの未割り当て領域を、サイズに基づく順序にしたがって決める代わりに、上記のように確保可能数の合計に基づいて決めてもよい。
【０１０２】
図１４は、セクタ取得処理の例（その１）を説明するフローチャートである。図１１に関して説明したとおり、セクタ取得処理は、セクタ取得命令を契機に、制御部で実行される。図１４に示すセクタ取得処理のフローチャートは、各セクタがブロックに分割されていないキャッシュメモリ領域を搭載するキャッシュメモリ（例えば図５を参照）に用いられる。
【０１０３】
制御部は、セクタ取得命令に含まれるサイズ情報を参照し、取得したいデータ領域のサイズを、バイト単位のサイズからセット数に変換する（ステップＳ１０１）。制御部は、未割り当て領域情報６０１を参照し、変換により得られたセット数以上の数のセットを含む未割り当て領域があるか判定する（ステップＳ１０２）。
【０１０４】
変換により得られたセット数以上の数のセットを含む未割り当て領域の情報が未割り当て領域情報６０１内にない場合（ステップＳ１０２でＮＯ）、制御部は、セクタ取得処理を終了する。
【０１０５】
変換により得られたセット数以上の数のセットを含む未割り当て領域の情報が未割り当て領域情報６０１内にある場合（ステップＳ１０２でＹＥＳ）、制御部は、変換により得られたセット数以上の数のセットを含む未割り当て領域を選択する（ステップＳ１０３）。そして、制御部は、未割り当て領域情報６０１から、選択した未割り当て領域の情報を削除する（ステップＳ１０４）。
【０１０６】
さらに、制御部は、変換情報記憶部２２０内の変換情報２２１に、セクタ取得命令で指定されるセクタに関する情報（具体的には、セクタ識別情報とサブマスク情報とオフセット情報）を追加する（ステップＳ１０５）。ステップＳ１０５で変換情報２２１に追加されるエントリに設定されるセクタ識別情報は、セクタ取得命令内に指定されているセクタ識別情報である。また、追加されるエントリに設定されるサブマスク情報は、ステップＳ１０３で選択した未割り当て領域のサイズに応じた範囲のビットが「１」に設定された、１２ビットの情報である。そして、追加されるエントリに設定されるオフセット情報は、ステップＳ１０４で未割り当て情報６０１から削除したエントリにおけるオフセット情報と等しい。制御部は、ステップＳ１０５の処理が終了すると、セクタ取得処理を終了する。
【０１０７】
図１５は、セクタ取得処理の例（その２）を説明するフローチャートである。図１１に関して説明したとおり、セクタ取得処理は、セクタ取得命令を契機に、制御部で実行される。図１５に示すセクタ取得処理のフローチャートは、各セクタがブロックに分割されて利用可能なキャッシュメモリ領域を搭載するキャッシュメモリ（例えば図８を参照）に用いられる。
【０１０８】
制御部は、セクタ取得命令に含まれるサイズ情報を参照し、取得したいデータ領域のサイズを、バイト単位のサイズからセット数に変換する（ステップＳ２０１）。変換により得られたセット数は、図１１に関して説明した「ｎ」である。次に、制御部は、変換結果であるセット数「ｎ」を分割数「α」で割り、ブロックあたりのセット数（ｎ／α）を算出する（ステップＳ２０２）。
【０１０９】
制御部は、未割り当て領域情報６０１を参照し、算出された数（ｎ／α）のセットを少なくとも含む未割り当て領域がα個あるかを判定する（ステップＳ２０３）。なお、図１１に関して説明したとおり、制御部は、（ｎｋ／α）個のセットを含む１つの未割り当て領域を、（ｎ／α）個のセットを含むｋ個の未割り当て領域と見なしてよい（ｋは２以上の自然数）。
【０１１０】
未割り当て領域情報６０１を参照した結果、算出された数（ｎ／α）のセットを少なくとも含む未割り当て領域がα個ないと判明した場合（ステップＳ２０３でＮＯ）、制御部は、セクタ取得処理を終了する。
【０１１１】
未割り当て領域情報６０１を参照した結果、算出された数（ｎ／α）のセットを少なくとも含む未割り当て領域がα個あると判明した場合（ステップＳ２０３でＹＥＳ）、制御部は、α個の未割り当て領域を選択する（ステップＳ２０４）。選択は未割り当て領域情報６０１に基づく。そして、制御部は、未割り当て領域情報６０１から、選択したα個の未割り当て領域それぞれの情報を削除する（ステップＳ２０５）。
【０１１２】
さらに、制御部は、変換情報記憶部２２０ａ内の変換情報４１０に、セクタ取得命令で指定されるセクタに関する情報（具体的には、セクタ識別情報とサブマスク情報とブロックマスク情報）を追加する（ステップＳ２０６）。ステップＳ２０６で変換情報４１０に追加されるエントリに設定されるセクタ識別情報は、セクタ取得命令内に指定されているセクタ識別情報である。また、追加されるエントリに設定されるサブマスク情報は、ステップＳ２０１で算出されたセット数「ｎ」に応じた範囲のビットが「１」に設定された、１２ビットの情報である。そして、追加されるエントリに設定されるブロックマスク情報は、セット数「ｎ」と分割数「α」に応じた範囲のビットが「１」に設定された、１２ビットの情報である。
【０１１３】
さらに、制御部は、変換情報記憶部２２０aに、セクタ取得命令で指定されるセクタに対応した変換情報４２０を記憶させる（ステップＳ２０７）。具体的には、セクタ取得命令で指定されるセクタに対応するα個のエントリが追加される。制御部は、各エントリにブロック識別情報を割り当てる。追加される各エントリのオフセット情報は、ステップＳ２０５で未割り当て情報６０１から削除された各エントリにおけるオフセット情報と等しい。制御部は、ステップＳ２０７の処理が終了すると、セクタ取得処理を終了する。
【０１１４】
図１６は、セクタ解放処理の例（その１）を説明するフローチャートである。図１２に関して説明したとおり、セクタ解放処理は、セクタ解放命令を契機に、制御部で実行される。図１６に示すセクタ解放処理のフローチャートは、各セクタがブロックに分割されていないキャッシュメモリ領域を搭載するキャッシュメモリ（例えば図５を参照）に用いられる。
【０１１５】
制御部は、セクタ解放命令に含まれるセクタ識別情報により指定されるセクタに対応した変換情報２２１に基づいて、未割り当て領域情報６０１を更新する（ステップＳ３０１）。つまり、制御部は、解放対象のセクタのセット数と、解放対象のセクタに対応して変換情報２２１に記録されているオフセット情報とを含むエントリを、未割り当て領域情報６０１に追加する。
【０１１６】
また、制御部は、未割り当て領域数情報６０２に、解放するセクタに関する情報を追加する（ステップＳ３０２）。つまり、制御部は、ステップＳ３０１で追加したエントリを指すポインタの情報を未割り当て領域数情報６０２に追加する。
【０１１７】
そして、制御部は、変換情報２２１内で解放対象のセクタに対応づけられているサブマスク情報に、無効を示す値「００００００００００００」を書き込む（ステップＳ３０３）。制御部は、セクタ解放処理を終了する。
【０１１８】
図１７は、セクタ解放処理の例（その２）を説明するフローチャートである。図１２に関して説明したとおり、セクタ解放処理は、セクタ解放命令を契機に、制御部で実行される。図１７に示すセクタ解放処理のフローチャートは、各セクタがブロックに分割されて利用可能なキャッシュメモリ領域を搭載するキャッシュメモリ（例えば図８を参照）に用いられる。
【０１１９】
制御部は、セクタ解放命令に含まれるセクタ識別情報により指定されるセクタに対応した変換情報４１０と変換情報４２０に基づいて、未割り当て領域情報６０１を更新する（ステップＳ４０１）。つまり、制御部は、解放対象のセクタに対応する変換情報４２０から、解放対象のセクタに属する各ブロックに対応するオフセット情報を読み取り、読み取ったオフセット情報を含む新たなエントリを、未割り当て領域情報６０１に追加する。追加される各エントリに設定されるサイズの値は、解放する各ブロックに含まれるセットの数である。よって、追加される各エントリに設定されるサイズの値は、変換情報４１０のサブマスク情報（すなわち解放されるセクタのセット数を示す情報）と、ブロックマスク情報（すなわち分割数を示す情報）とに基づいて決められる。
【０１２０】
また、制御部は、未割り当て領域数情報６０２に、解放する各ブロックに対応して未割り当て領域情報６０１において割り当てられた各ポインタの情報を書き込む（ステップＳ４０２）。つまり、制御部は、ステップＳ４０１で追加した各エントリを指す各ポインタの情報を未割り当て領域数情報６０２に追加する。
【０１２１】
そして、制御部は、変換情報４１０内で解放対象のセクタに対応づけられているサブマスク情報に、無効を示す値「００００００００００００」を書き込む（ステップＳ４０３）。
【０１２２】
さらに、制御部は、未割り当て領域を纏める処理（図９、図１３、及び図１８を参照）を、プロセッサの他の動作を妨げないように、適宜のタイミングで処理を開始させる（ステップＳ４０４）。ステップＳ４０４では、プロセッサの他の動作の終了をまつわけではない。その後、制御部は、セクタ解放処理を終了する。
【０１２３】
図１８は、未割り当て領域を纏める処理の例を説明するフローチャートである。図１８のフローチャートは、図１７のフローチャートのステップＳ４０４の処理を具体的に示す。
【０１２４】
制御部は、未割り当て領域情報６０１を参照し、「同一サイズの未割り当て領域が２つ以上あり、かつ、それらの未割り当て領域のうちの１つに隣接して、同一サイズの使用済み領域がある」という条件が成り立つかを判定する（ステップＳ５０１）
上記条件が成り立たない場合（ステップＳ５０１でＮＯ）、制御部は、処理を終了する。
【０１２５】
同一サイズの未割り当て領域が２つ以上あり、かつ、それらの未割り当て領域のうちの１つに隣接して、同一サイズの使用済み領域がある場合（ステップＳ５０１でＹＥＳ）、制御部は、同一サイズの未割り当て領域を２つ選択し、纏める処理を行う（ステップＳ５０２）。図９に関して説明したとおり、ステップＳ５０２は、選択した一方の未割り当て領域に隣接する使用済み領域のデータを、選択した他方の未割り当て領域にコピーする処理を含む。
【０１２６】
さらに、制御部は、選択した一方の未割り当て領域に隣接する使用済み領域に対応して変換情報４２０に含まれているオフセット情報を更新する（ステップＳ５０３）。更新後の値は、制御部が選択した他方の未割り当て領域に対応して未割り当て領域情報６０１に含まれているオフセット情報に等しい。
【０１２７】
また、制御部は、未割り当て領域情報６０１及び未割り当て領域数情報６０２を、纏める処理後のブロックの状態を反映するように、更新する（ステップＳ５０４）。ステップＳ５０４の処理を詳しく説明すると、以下のとおりである。
【０１２８】
図１８の未割り当て領域を纏める処理の結果、図９のように、２Ｘ個のセットを含む使用済み領域５０５と２Ｘ個のセットを含む未割り当て領域５０６ができる。ステップＳ５０４において、制御部は、ステップＳ５０２で選択した２つの未割り当て領域（つまり未割り当て領域５０１と５０４）に対応する２つのエントリを、未割り当て領域情報６０１から削除する。制御部は、ステップＳ５０４においてさらに、未割り当て領域５０６の先頭のセットを示すセットインデックスであるオフセット情報と、２Ｘ個を示すサイズ情報とを含む新たなエントリを、未割り当て領域情報６０１に追加する。図１３に例示した未割り当て領域情報７０１ａから未割り当て領域情報７０１ｂへの変化は、以上のようなステップＳ５０４における２つのエントリの削除と１つのエントリの追加の結果である。
【０１２９】
また、ステップＳ５０４で、制御部は、未割り当て領域数情報６０２において、Ｘ個というセット数に対応するエントリと、２Ｘ個というセット数に対応するエントリを、更新する。具体的には、制御部は、未割り当て領域情報６０１から削除した２つのエントリに対応するポインタ（つまり未割り当て領域５０１と５０４に対応する２つのポインタ）を、未割り当て領域数情報６０２においてＸ個というセット数に対応するエントリから削除する。また、制御部は、未割り当て領域情報６０１に追加したエントリに対応するポインタ（つまり未割り当て領域５０６に対応するポインタ）を、未割り当て領域数情報６０２において２Ｘ個というセット数に対応するエントリに書き込む。ステップＳ５０４が終了すると、制御部は、図１８の処理をステップＳ５０１から繰り返す。
【０１３０】
以上、種々の実施形態について説明したが、上記実施形態は適宜変形されてよい。例えば、サブマスク情報は、相対セットインデックス３１４の範囲を示す情報であれば、どのような形式の情報であってもよい。また、図５や図８に例示した回路は、例示的回路である。相対セットインデックス３１４を絶対的なセットインデックスに変換するために、図５や図８に例示した回路とは異なる回路が使われてもよい。いくつかフローチャートを例示したが、矛盾が生じない限り、ステップの実行順序が入れ替えられてもよい。
【０１３１】
いずれにせよ、キャッシュメモリ領域２１０をセット単位で分割することで、キャッシュウェイ単位で分割する場合よりも小さい領域にキャッシュメモリ領域２１０を分割することが可能となる。すなわち、上記の各実施形態によれば、より細かい粒度での分割が可能となる。これにより、キャッシュクリア、プリフェッチ、データ格納処理などにおいてキャッシュメモリ領域２１０を使用する際には、キャッシュウェイ単位よりも容量の小さいセット単位で、キャッシュメモリ領域２１０を使用することが可能となる。その結果、キャッシュメモリ領域２１０をより有効に活用することが可能となる。
【符号の説明】
【０１３２】
２００、２００ａ  キャッシュメモリ
１１０、２１０、４００、５００  キャッシュメモリ領域
２２０  変換情報記憶部
２２１、４１０、４２０、４１０ａ、４１０ｂ、４２０ａ〜４２０ｅ  変換情報
２３０  変換回路
２４１、２４２、２４３、２４６  マルチプレクサ
２３１、２３３、２４４  ＡＮＤ回路
２３２、２３４  ＯＲ回路
２３５  ＮＯＴ回路
２３６  ビットシフト回路
２４５  抽出部
２５０  タグテーブル
２５１、２５１ａ〜２５１ｄ  コンパレータ
２５２  選択回路
３１０  アドレス情報
３１１  セクタ識別情報
３１２、３１３、３１７  タグ
３１４  相対セットインデックス
３１５  ライン内アドレス
３１６  データ
４０１ａ〜４０１ｄ  ブロック
５０１、５０４、５０６  未割り当て領域
５０２、５０３、５０５  使用済み領域
６０１、７０１ａ、７０１ｂ  未割り当て領域情報
６０２  未割り当て領域数情報
【図１】
2016091242.tif 000003
【図２】
2016091242.tif 000004
【図３】
2016091242.tif 000005
【図４】
2016091242.tif 000006
【図６】
2016091242.tif 000007
【図７】
2016091242.tif 000008
【図１０】
2016091242.tif 000009
【図１１】
2016091242.tif 000010
【図１２】
2016091242.tif 000011
【図１３】
2016091242.tif 000012
【図１４】
2016091242.tif 000013
【図１５】
2016091242.tif 000014
【図１６】
2016091242.tif 000015
【図１７】
2016091242.tif 000016
【図１８】
2016091242.tif 000017
【図５】
2016091242.tif 000018
【図８】
2016091242.tif 000019
【図９】
2016091242.tif 000020