(57)【要約】【課題】余剰資源を有効活用し、かつ、アクセス遅延の発生を抑制する。【解決手段】本発明のキャッシュ制御装置１０１は、キャッシュメモリ５０に含まれる複数のウェイ５１を、複数のプロセッサ１０及び１１により実行される複数のタスクに割り当てるキャッシュ配分制御部４０を備える。キャッシュ配分制御部４０は、１つのグループ５２に、いずれのタスクにも割り当てられていない未割当ウェイが含まれ、かつ、当該グループ５２にプロセッサ１０及び１１の一方により実行されるタスクに割り当てられたウェイ５１が含まれる場合、当該グループ５２に含まれる未割当ウェイを、当該一方のプロセッサ１０又は１１により実行される複数のタスクのうちいずれかのタスクに割り当てる。【選択図】図１
2010244435.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサにより共有されるセットアソシアティブ方式のキャッシュメモリを制御するキャッシュ制御装置であって、
前記キャッシュメモリは複数のウェイを含み、
前記複数のウェイは、１以上のウェイを含む複数のグループに分割されており、
前記キャッシュ制御装置は、
前記複数のプロセッサにより実行される複数のタスクに前記ウェイを割り当てるキャッシュ配分処理を行うキャッシュ配分制御部を備え、
前記キャッシュ配分制御部は、１つの前記グループに、いずれのタスクにも割り当てられていない未割当ウェイが含まれ、かつ、当該グループに前記複数のプロセッサに含まれる一のプロセッサにより実行されるタスクに割り当てられたウェイが含まれる場合、当該グループに含まれる前記未割当ウェイを、前記一のプロセッサにより実行される複数のタスクのうちいずれかのタスクに割り当てる
キャッシュ制御装置。
【請求項２】
前記キャッシュ配分制御部は、１つの前記グループに含まれる全てのウェイが、いずれのタスクにも割り当てられていない場合、当該キャッシュ配分処理により既に割り当てられたタスクの数である割当タスク数が最も少ないプロセッサが実行するタスクに、当該グループに含まれるウェイを割り当てる
請求項１記載のキャッシュ制御装置。
【請求項３】
前記キャッシュ制御装置は、さらに、
前記複数のタスクのそれぞれに割り当てられたウェイを示すウェイ情報を記憶する記憶部を備え、
前記キャッシュ配分制御部は、前記ウェイ情報を参照して前記未割当ウェイを判定する
請求項１記載のキャッシュ制御装置。
【請求項４】
前記記憶部は、さらに、前記各プロセッサに対応して設けられ、前記複数のウェイのうちいずれかを指定するサーチポインタを記憶し、
前記キャッシュ配分制御部は、
前記サーチポインタに、対応するプロセッサのタスクに割り当てられているウェイを指定させるウェイ指定部と、
前記プロセッサが実行する複数のタスクのうち、当該プロセッサに対応する前記サーチポインタで指定されているウェイに割り当てられているタスクに、未割当ウェイを割り当てる割当部とを備え、
前記ウェイ指定部は、前記割当部により当該プロセッサのタスクにウェイが割り当てられるごとに、前記サーチポインタが指定するウェイを、当該プロセッサのタスクが割り当てられているウェイのうち、予め定められた順で次に位置するウェイに移動させる
請求項３記載のキャッシュ制御装置。
【請求項５】
前記キャッシュ配分制御部は、さらに、
前記各プロセッサに対応して設けられ、ビット列を含む空きウェイ情報を生成したうえで、前記記憶部に記憶する空きウェイ情報生成部を備え、
前記ビット列は、前記複数のウェイのそれぞれに対応し、対応するウェイが、当該プロセッサが実行する複数のタスクに割り当てられているか否かを示すビットを含み、
前記ウェイ指定部は、前記割当部により当該プロセッサのタスクにウェイを割り当てるごとに、前記サーチポインタが指定するウェイを、当該プロセッサのタスクが割り当てられているウェイのうち、前記ビット列の順で次に位置するウェイに移動させる
請求項４記載のキャッシュ制御装置。
【請求項６】
前記サーチポインタの値は、前記ウェイ指定部により移動された前記ビット列におけるビット数の和であり、
キャッシュ配分制御部は、１つの前記グループに含まれる全てのウェイが、いずれのタスクにも割り当てられていない場合、前記サーチポインタの値が最も少ないプロセッサが実行するタスクに、当該グループに含まれるウェイを割り当てる
請求項５記載のキャッシュ制御装置。
【請求項７】
前記キャッシュ配分制御部は、一の前記プロセッサにより実行される複数のタスクのいずれにも、前記ウェイが割り当てられていない場合、当該一のプロセッサの前記サーチポインタの値を最大値に設定する
請求項６記載のキャッシュ制御装置。
【請求項８】
前記キャッシュ配分制御部は、前記タスクの生成又は削除時に、前記キャッシュ配分処理を行う
請求項１記載のキャッシュ制御装置。
【請求項９】
複数のプロセッサにより共有されるセットアソシアティブ方式のキャッシュメモリを制御するキャッシュ制御方法であって、
前記キャッシュメモリは複数のウェイを含み、
前記複数のウェイは、１以上のウェイを含む複数のグループに分割されており、
前記キャッシュ制御方法は、
前記複数のプロセッサにより実行される複数のタスクに前記ウェイを割り当てるキャッシュ配分処理を行うキャッシュ配分制御ステップを含み、
前記キャッシュ配分制御ステップでは、１つの前記グループに、いずれのタスクにも割り当てられていない未割当ウェイが含まれ、かつ、当該グループに前記複数のプロセッサに含まれる一のプロセッサにより実行されるタスクに割り当てられたウェイが含まれる場合、当該グループに含まれる前記未割当ウェイを、前記一のプロセッサにより実行される複数のタスクのうちいずれかのタスクに割り当てる
キャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュ制御装置及びキャッシュ制御方法に関し、特に、複数のプロセッサにより共有されるセットアソシアティブ方式のキャッシュメモリを制御するキャッシュ制御装置に関する。
【背景技術】
【０００２】
複数のプロセッサを含むプロセッサシステムには、メモリ空間を共有することにより同一データを相互にアクセスする密結合システムと、通信を介することで相互にデータを受け渡しする疎結合システムとがある。また、密結合システムとして、キャッシュメモリを共有する構成と、プロセッサ個別にキャッシュメモリを保有する構成とがある。
【０００３】
図９は、キャッシュメモリを共有する密結合システムのマルチプロセッサシステムの構成を示すブロック図である。図９に示すプロセッサシステム２００は、プロセッサ１０及び１１と、メモリバス２０と、キャッシュ制御装置２０１と、キャッシュメモリ５０と、メインメモリ６０とを備える。
【０００４】
プロセッサ１０及び１１はメモリバス２０を介してメインメモリ６０へアクセスする。
【０００５】
キャッシュ制御装置２０１は、キャッシュメモリ５０を制御する。このキャッシュ制御装置２０１は、キャッシュ制御部３０と、キャッシュ配分制御部２４０とを備える。
【０００６】
キャッシュ制御部３０は、プロセッサ１０及び１１からメインメモリ６０へのアクセスに対して以下のような制御を行う。メインメモリ６０への読み出しアクセスが発生した場合、アクセスするデータがキャッシュメモリ５０に存在すれば（キャッシュヒット）、キャッシュ制御部３０は、キャッシュメモリ５０へアクセスし、メインメモリ６０へはアクセスしない。ここでキャッシュメモリ５０へのアクセスはメインメモリ６０へのアクセスに比べて高速である。よって、キャッシュメモリ５０を用いることで、メモリアクセスに要する時間を短縮できるので、システム全体の性能を向上できる。
【０００７】
一方、アクセスするデータがキャッシュメモリ５０に存在しなければ（キャッシュミス）、キャッシュ制御部３０は、メインメモリ６０からデータを読み出すと共にキャッシュメモリ５０へ当該データを書き込む。これにより次に同じデータへのアクセスが発生した際には、キャッシュ制御部３０は、キャッシュメモリ５０へアクセスできる。
【０００８】
また、メインメモリ６０への書き込みアクセスが発生した場合、キャッシュ制御部３０は、メインメモリ６０へデータを書き込むと共に、キャッシュメモリ５０へ当該データを書き込む。これによりキャッシュメモリ５０とメインメモリ６０とのデータの整合性が保証される。
【０００９】
キャッシュ配分制御部２４０は、キャッシュメモリ５０のキャッシュ容量を処理単位又はタスクに配分する。ここでタスクとは、オペレーティングシステムの管理下で動作するプログラムの起動、その実行、及び終了などの流れを一括管理する制御単位のことである。キャッシュ容量の配分方法は構成によりさまざまである。例えばキャッシュメモリ５０がセットアソシアティブ方式の構成を取る場合、キャッシュメモリ５０は「ウェイ」と呼ばれる固定容量単位で分割されている。キャッシュ配分制御部２４０は、このウェイ５１ａ〜５１ｆを処理単位又はタスクに配分する。
【００１０】
また、キャッシュメモリ５０は「メモリマクロセル」と呼ばれるハードウェア単位によって構成されている。キャッシュ制御装置２０１は、アドレス演算器、バッファ回路、及びバス調停回路などをこの単位ごとに備える。ここでメモリマクロセルの数が増大すると回路が増大する。これによりＬＳＩの面積が増加すると共に高速な伝送ができなくなる。結果として周波数向上が期待できなくなる。この問題に対して、複数のウェイを含む１つのメモリマクロセルを構成することで、メモリマクロセル数を削減することができる。例えば図９では、ウェイ５１ａ及び５１ｂが１つのメモリマクロセルに含まれており、同様にウェイ５１ｃ及び５１ｄと、ウェイ５１ｅ及び５１ｆとがそれぞれの１つのメモリマクロセルに含まれる。
【００１１】
ただし、各種回路がメモリマクロセルごとに共通になるため、同一のメモリマクロセルに含まれる異なるウェイへのアクセスが同時に発生した場合は、調停によりアクセス待ちが発生することになる。よって、多くのウェイを１つのメモリマクロセルで構成すると、アクセス待ちが頻出することになるため速度面で不利となるという課題を有する。
【００１２】
この課題に対して、キャッシュ配分制御部２４０は、キャッシュメモリ５０を共有する複数のプロセッサ１０及び１１の処理優先度に応じて、各プロセッサ１０及び１１に割り当てるキャッシュ容量を動的に変更できるようにしている。これにより、従来のキャッシュ制御装置２０１では、高優先度の処理を実行するプロセッサが多くのキャッシュ容量を使用できる（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開平７−２４８９６７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、従来のキャッシュ制御装置２０１では処理優先度に応じてキャッシュ容量を割り当てるが、割当量が優先度にのみ依存する。これにより、処理が必要とするキャッシュ容量を柔軟に割り当てることができない。そのため、処理性能を保証する必要があるシステムでは容量が足りなくなる場合があり、性能を保証することができない。
【００１５】
また、従来のキャッシュ制御装置２０１では、キャッシュ容量が余る場合には使用できない余剰資源が発生してしまう。これにより、従来のキャッシュ制御装置２０１は、キャッシュ容量を有効活用することができないという課題を有する。
【００１６】
さらに、従来のキャッシュ制御装置２０１では、ウェイが割り当てられた複数のタスクがそれぞれ異なるプロセッサ上で動作し、かつ、それらのウェイが同じメモリマクロセルに存在する場合、これらの複数のタスクからのキャッシュアクセスが同時に発生すると、アクセス先のウェイが異なっていてもアクセスが衝突して片方が待たされる。これにより、従来のキャッシュ制御装置２０１は、アクセスが遅延するという課題がある。
【００１７】
そこで本発明は、余剰資源を有効活用でき、かつアクセス遅延の発生を抑制できるキャッシュ制御装置及びキャッシュ制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１８】
上記課題を解決するために、本発明に係るキャッシュ制御装置は、複数のプロセッサにより共有されるセットアソシアティブ方式のキャッシュメモリを制御するキャッシュ制御装置であって、前記キャッシュメモリは複数のウェイを含み、前記複数のウェイは、１以上のウェイを含む複数のグループに分割されており、前記キャッシュ制御装置は、前記複数のプロセッサにより実行される複数のタスクに前記ウェイを割り当てるキャッシュ配分処理を行うキャッシュ配分制御部を備え、前記キャッシュ配分制御部は、１つの前記グループに、いずれのタスクにも割り当てられていない未割当ウェイが含まれ、かつ、当該グループに前記複数のプロセッサに含まれる一のプロセッサにより実行されるタスクに割り当てられたウェイが含まれる場合、当該グループに含まれる前記未割当ウェイを、前記一のプロセッサにより実行される複数のタスクのうちいずれかのタスクに割り当てる。
【００１９】
この構成により、本発明に係るキャッシュ制御装置は、余っている未割当ウェイをタスクに割り当てることができるので、余剰資源を有効活用できる。さらに、本発明に係るキャッシュ制御装置は、未割当ウェイを、当該未割当ウェイと同一のグループ（メモリマクロセル）に含まれるウェイが割り当てられているタスクと同じプロセッサに属するタスクに割り当てる。これにより、１つのグループに含まれるウェイは、同一のプロセッサが実行するタスクに割り当てられる。よって、本発明に係るキャッシュ制御装置は、異なるプロセッサが同一のグループに含まれるウェイにアクセスした場合に発生するキャッシュアクセスの衝突を回避できる。このように、本発明に係るキャッシュ制御装置は、アクセス遅延の発生を抑制できる。
【００２０】
また、前記キャッシュ配分制御部は、１つの前記グループに含まれる全てのウェイが、いずれのタスクにも割り当てられていない場合、当該キャッシュ配分処理により既に割り当てられたタスクの数である割当タスク数が最も少ないプロセッサが実行するタスクに、当該グループに含まれるウェイを割り当ててもよい。
【００２１】
この構成により、本発明に係るキャッシュ制御装置は、ウェイが割り当てられている数が少ないプロセッサのタスクに、優先的にウェイを割り当てることができる。これにより、本発明に係るキャッシュ制御装置は、各プロセッサに均等にウェイを配分できる。
【００２２】
また、前記キャッシュ制御装置は、さらに、前記複数のタスクのそれぞれに割り当てられたウェイを示すウェイ情報を記憶する記憶部を備え、前記キャッシュ配分制御部は、前記ウェイ情報を参照して前記未割当ウェイを判定してもよい。
【００２３】
この構成により、本発明に係るキャッシュ制御装置は、予めタスクごとのキャッシュ容量をウェイ情報に設定することにより、処理性能を容易に保証できる。
【００２４】
また、前記記憶部は、さらに、前記各プロセッサに対応して設けられ、前記複数のウェイのうちいずれかを指定するサーチポインタを記憶し、前記キャッシュ配分制御部は、前記サーチポインタに、対応するプロセッサのタスクに割り当てられているウェイを指定させるウェイ指定部と、前記プロセッサが実行する複数のタスクのうち、当該プロセッサに対応する前記サーチポインタで指定されているウェイに割り当てられているタスクに、未割当ウェイを割り当てる割当部とを備え、前記ウェイ指定部は、前記割当部により当該プロセッサのタスクにウェイが割り当てられるごとに、前記サーチポインタが指定するウェイを、当該プロセッサのタスクが割り当てられているウェイのうち、予め定められた順で次に位置するウェイに移動させてもよい。
【００２５】
この構成により、本発明に係るキャッシュ制御装置は、各プロセッサが実行する複数のタスクに、均等にウェイを配分できる。
【００２６】
また、前記キャッシュ配分制御部は、さらに、前記各プロセッサに対応して設けられ、ビット列を含む空きウェイ情報を生成したうえで、前記記憶部に記憶する空きウェイ情報生成部を備え、前記ビット列は、前記複数のウェイのそれぞれに対応し、対応するウェイが、当該プロセッサが実行する複数のタスクに割り当てられているか否かを示すビットを含み、前記ウェイ指定部は、前記割当部により当該プロセッサのタスクにウェイを割り当てるごとに、前記サーチポインタが指定するウェイを、当該プロセッサのタスクが割り当てられているウェイのうち、前記ビット列の順で次に位置するウェイに移動させてもよい。
【００２７】
この構成により、本発明に係るキャッシュ制御装置は、各プロセッサが実行する複数のタスクに均等にウェイが配分されるように、各タスクを順時選択できる。
【００２８】
また、前記サーチポインタの値は、前記ウェイ指定部により移動された前記ビット列におけるビット数の和であり、キャッシュ配分制御部は、１つの前記グループに含まれる全てのウェイが、いずれのタスクにも割り当てられていない場合、前記サーチポインタの値が最も少ないプロセッサが実行するタスクに、当該グループに含まれるウェイを割り当ててもよい。
【００２９】
この構成により、本発明に係るキャッシュ制御装置は、各プロセッサに均等にウェイを配分できる。
【００３０】
また、前記キャッシュ配分制御部は、一の前記プロセッサにより実行される複数のタスクのいずれにも、前記ウェイが割り当てられていない場合、当該一のプロセッサの前記サーチポインタの値を最大値に設定してもよい。
【００３１】
この構成により、本発明に係るキャッシュ制御装置は、初期状態としてウェイが割り当てられていないプロセッサに対しては、ウェイを割り当てないようにできる。
【００３２】
また、前記キャッシュ配分制御部は、前記タスクの生成又は削除時に、前記キャッシュ配分処理を行ってもよい。
【００３３】
この構成により、タスクの処理に影響を与えることなくウェイを配分できる。
【００３４】
なお、本発明は、このようなキャッシュ制御装置として実現できるだけでなく、キャッシュ制御装置に含まれる特徴的な手段をステップとするキャッシュ制御方法として実現したり、そのような特徴的なステップをコンピュータに実行させるプログラムとして実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ等の記録媒体及びインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
【００３５】
さらに、本発明は、このようなキャッシュ制御装置の機能の一部又は全てを実現する半導体集積回路（ＬＳＩ）として実現したり、このようなキャッシュ制御装置を含むプロセッサシステムとして実現したりできる。
【発明の効果】
【００３６】
以上より、本発明は、余剰資源を有効活用でき、かつアクセス遅延の発生を抑制できるキャッシュ制御装置及びキャッシュ制御方法を提供できる。
【図面の簡単な説明】
【００３７】
【図１】本発明の実施の形態に係るプロセッサシステムの構成を示すブロック図である。
【図２】本発明の実施の形態に係るキャッシュ配分制御部の構成を示すブロック図である。
【図３】本発明の実施の形態に係るウェイ情報記憶部の初期状態の一例を示す図である。
【図４】本発明の実施の形態に係るキャッシュ配分制御部によるキャッシュ配分手順を示すフローチャートである。
【図５】本発明の実施の形態に係る有効位置探索部の動作を示すフローチャートである。
【図６】本発明の実施の形態に係るビット割当部の動作を示すフローチャートである。
【図７】本発明の実施の形態に係るウェイ情報記憶部の処理途中における状態の一例を示す図である。
【図８】本発明の実施の形態に係るウェイ情報記憶部の処理完了後の状態の一例を示す図である。
【図９】従来のプロセッサシステムの構成を示すブロック図である。
【発明を実施するための形態】
【００３８】
以下、本発明のキャッシュ制御装置の実施の形態について図面を参照して説明する。
【００３９】
本発明の実施の形態に係るキャッシュ制御装置は、余っているウェイを、当該ウェイと同一のグループ（メモリマクロセル）のウェイが割り当てられているタスクと同じプロセッサのタスクに割り当てる。これにより、本発明に係るキャッシュ制御装置は、異なるプロセッサ間のキャッシュアクセスの衝突を回避できるので、アクセス遅延の発生を抑制できるとともに、余剰資源を有効活用できる。
【００４０】
まず、本発明の実施の形態に係るキャッシュ制御装置を含むプロセッサシステムの構成を説明する。
【００４１】
図１は、本発明の実施の形態に係るプロセッサシステム１００の構成を示す図である。
【００４２】
図１に示すプロセッサシステム１００は、プロセッサ１０及び１１と、メモリバス２０と、キャッシュ制御装置１０１と、キャッシュメモリ５０と、メインメモリ６０とを備える。なお、図９と同様の要素には同一の符号を付している。
【００４３】
また、この例ではプロセッサシステム１００が２つのプロセッサ１０及び１１を備える例を記載しているが、プロセッサの数は２つに限定するものではなく、プロセッサシステム１００は、３つ以上のプロセッサを備えてもよい。
【００４４】
プロセッサ１０及び１１はメモリバス２０を介してメインメモリ６０へアクセスする。
【００４５】
キャッシュ制御装置１０１はキャッシュメモリ５０を制御する。このキャッシュ制御装置１０１は、キャッシュ制御部３０と、キャッシュ配分制御部４０とを備える。
【００４６】
キャッシュ制御部３０は、プロセッサ１０及び１１からメインメモリ６０へのアクセスに対して以下のような制御を行う。メインメモリ６０からの読み出しアクセスが発生した場合、アクセスするデータがキャッシュメモリ５０に存在すれば（キャッシュヒット）、キャッシュ制御部３０は、キャッシュメモリ５０へアクセスし、メインメモリ６０へはアクセスしない。ここでキャッシュメモリ５０へのアクセスはメインメモリ６０へのアクセスに比べて高速である。よって、キャッシュメモリ５０を用いることにより、メモリアクセスに要する時間を短縮できるので、システム全体の性能を向上できる。
【００４７】
一方、アクセスするデータがキャッシュメモリ５０に存在しなければ（キャッシュミス）、キャッシュ制御部３０は、メインメモリ６０からデータを読み出すと共にキャッシュメモリ５０へ当該データを書き込む。これにより次に同じデータへのアクセスが発生した際には、キャッシュ制御部３０は、キャッシュメモリ５０へアクセスできる。
【００４８】
また、メインメモリ６０への書き込みアクセスが発生した場合、キャッシュ制御部３０は、メインメモリ６０へデータを書き込むと共に、キャッシュメモリ５０への当該データを書き込む。これによりキャッシュメモリ５０とメインメモリ６０とのデータの整合性が保証される。
【００４９】
キャッシュメモリ５０は、セットアソシアティブ方式の構成を有する。このキャッシュメモリ５０は、複数のウェイ５１ａ〜５１ｆを含む。なお、複数のウェイ５１ａ〜５１ｆを特に区別しない場合にはウェイ５１と記す。
【００５０】
また、キャッシュメモリ５０は、メモリマクロセルと呼ばれるハードウェア単位によって構成されている。キャッシュ制御装置１０１は、アドレス演算器、バッファ回路、及びバス調停回路などをこの単位ごとに備える。例えば、図１では、ウェイ５１ａ及び５１ｂが１つのメモリマクロセルに含まれており、同様にウェイ５１ｃ及び５１ｄと、ウェイ５１ｅ及び５１ｆとがそれぞれの１つのメモリマクロセルに含まれる。つまり、複数のウェイ５１は、それぞれが複数のウェイ５１を含む複数のグループ５２ａ〜５２ｃ（メモリマクロセル）に分割されている。なお、グループ５２ａ〜５２ｃを特に区別しない場合にはグループ５２と記す。
【００５１】
キャッシュ配分制御部４０は、キャッシュメモリ５０に含まれる複数のウェイ５１のうち、いずれのタスクにも割り当てられていないウェイ５１を、プロセッサ１０及び１１に実行される複数のタスクに割り当てるキャッシュ配分処理を行う。ここでタスクとは、オペレーティングシステムの管理下で動作するプログラムの起動、その実行、及び終了などの流れを一括管理する制御単位のことである。
【００５２】
また、キャッシュ配分制御部４０は、グループ５２ごとに、未割当ウェイをタスクに割り当てる処理を順時行う。
【００５３】
具体的には、キャッシュ配分制御部４０は、１つのグループ５２に未割当ウェイ（いずれのタスクにも割り当てられていないウェイ５１）が含まれ、かつ、当該グループ５２に複数のプロセッサ１０及び１１のうち一方のプロセッサにより実行されるタスクに割り当てられたウェイ５１が含まれる場合、当該グループ５２に含まれる未割当ウェイを、当該一方のプロセッサにより実行される複数のタスクのうちいずれかのタスクに割り当てる。
【００５４】
また、キャッシュ配分制御部４０は、１つのグループ５２に含まれる全てのウェイ５１が、いずれのタスクにも割り当てられていない場合、当該キャッシュ配分処理により既に割り当てられたタスクの数が最も少ないプロセッサ１０又は１１が実行するタスクに、当該グループ５２に含まれるウェイ５１を割り当てる。
【００５５】
以下、キャッシュ配分制御部４０について詳細に説明する。
【００５６】
図２は、本発明の実施の形態に係るキャッシュ配分制御部４０の構成を示すブロック図である。また、図２は、プロセッサ１０又は１１がソフトウェア（プログラム）を実行することにより、オペレーティングシステムの一部の機能としてキャッシュ配分制御を行う場合の、キャッシュ配分制御部４０の機能を模式的に表している。なお、キャッシュ配分制御部４０の機能のうち一部又は全てをハードウェア（専用回路）で実現してもよい。
【００５７】
図２に示すようにキャッシュ配分制御部４０は、ウェイ情報記憶部４１０と、有効位置探索部４４０と、ビット割当部４５０と、空きウェイ情報生成部４６０と、判定部４７０と、プロセッサ選択部４８０と、初期値設定部４９０とを備える。
【００５８】
ウェイ情報記憶部４１０は、本発明の記憶部に相当し、ウェイ情報４１１ａ、４１１ｂ、４１１ｃ…、４１２ａ、４１２ｂ、４１２ｃ…と、空きウェイ情報４２１及び４２２と、サーチポインタ４３１及び４３２とを記憶する。ここで、ウェイ情報４１１ａ、４１１ｂ、４１１ｃ…と、空きウェイ情報４２１と、サーチポインタ４３１とはプロセッサ１０に対応し、４１２ａ、４１２ｂ、４１２ｃ…と、空きウェイ情報４２２と、サーチポインタ４３２とはプロセッサ１１に対応する。
【００５９】
また、ウェイ情報４１１ａ、４１１ｂ、４１１ｃ…を特に区別しない場合には、ウェイ情報４１１と記し、ウェイ情報４１２ａ、４１２ｂ、４１２ｃ…を特に区別しない場合には、ウェイ情報４１２と記す。
【００６０】
ウェイ情報４１１及び４１２は、対応するプロセッサ１０又は１１が実行する複数のタスクのそれぞれに割り当てられたウェイ５１を示す。
【００６１】
空きウェイ情報４２１及び４２２は、複数のウェイ５１のそれぞれが、対応するプロセッサ１０又は１１が実行する複数のタスクに割り当てられているか否かを示す。
【００６２】
サーチポインタ４３１及び４３２は、プロセッサ１０又は１１ごとに設けられ、それぞれ複数のウェイ５１のいずれかを指定する有効位置を示す。この有効位置は、後述する、ウェイ５１を割り当てるプロセッサ１０又は１１の選択処理と、ウェイ５１を割り当てるタスクの選択処理とに用いられる。
【００６３】
図３は、ウェイ情報記憶部４１０の初期状態の一例を示す図である。
【００６４】
図３に示すように、複数のウェイ情報４１１及び４１２は、プロセッサ１０及び１１上で動作するタスクごとに設けられる。各ウェイ情報４１１及び４１２は、ビット列を含む。このビット列は、右からビット０、１、２…の順で並んでいる。また、各ビットは、キャッシュメモリ５０に含まれる各ウェイ５１に対応しており、ビットｎが有効（１を示す）ならばウェイｎを当該タスクが使用できることを示す。また、ビットｎが無効（０を示す）ならばウェイｎを当該タスクが使用できないことを示す。このウェイ情報４１１及び４１２のビット幅はキャッシュメモリ５０に含まれるウェイの数と同一である。例えば、図３に示す例では、ウェイの数は１６であり、ウェイ情報４１１及び４１２も１６ビットである。
【００６５】
空きウェイ情報４２１及び４２２はプロセッサ１０及び１１ごとに設けられる。この空きウェイ情報４２１及び４２２はビット列を含む。このビット列は、右からビット０、１、２…の順で並んでいる。また、各ビットは、キャッシュメモリ５０に含まれる各ウェイ５１に対応している。対応するプロセッサ１０又は１１に属するいずれかのタスクに割り当てられているウェイに対応するビットは「１」であり、いずれのタスクも割り当てられていないウェイに対応するビットは「０」となる。なお、図３では、ウェイ情報４１１及び４１２と、空きウェイ情報４２１及び４２２とに含まれるビット列の「０」は省略している。
【００６６】
サーチポインタ４３１及び４３２はプロセッサごとに設けられ、０以上の整数を保持する。サーチポインタ４３１が保持する数値は、ウェイ情報４１１及び空きウェイ情報４２１のビットの位置を表し、サーチポインタ４３２が保持する数値は、ウェイ情報４１２及び空きウェイ情報４２２のビットの位置を表している。また、サーチポインタ４３１及び４３２の値は、当該キャッシュ配分処理の間に、当該サーチポインタ４３１又は４３２が移動したビット数の和を示す。
【００６７】
また、サーチポインタ４３１及び４３２がウェイ情報４１１及び４１２のビット幅を超える数値を保持している場合は、ウェイ情報４１１及び４１２のビット幅に対する剰余の数値に当たるビットの位置を表す。例えば図３において、プロセッサ１１のサーチポインタ４３２は「３」を保持し、ビット３を示している。また、例えば、プロセッサ１０のサーチポインタ４３１が「３８」を保持している場合、ビット幅は１６であることから、３８ｍｏｄ１６＝６となる。よって、サーチポインタ４３１は、ビット６を表している。
【００６８】
初期値設定部４９０は、各タスクの処理性能を保証するために、当該タスクの生成時に当該タスクが使用するウェイ５１を決定する。また、初期値設定部４９０は、決定した各タスクが使用するウェイ５１の情報を、ウェイ情報４１１及び４１２に初期値として設定する。例えば初期値設定部４９０は、図３に示すウェイ情報４１１及び４１２を、タスク生成時に初期値として設定する。
【００６９】
空きウェイ情報生成部４６０は、空きウェイ情報４２１及び４２２を生成し、ウェイ情報記憶部４１０に記憶する。具体的には、空きウェイ情報生成部４６０は、プロセッサ１０（又は１１）に含まれるタスクに対応する全てのウェイ情報４１１（又は４１２）の初期値の論理和を算出することにより、空きウェイ情報４２１及び４２２を生成する。
【００７０】
判定部４７０は、ウェイ情報４１１及び４１２の初期値を参照して、各グループ５２に含まれる未割当ウェイの有無、及び割当状態を判定する。
【００７１】
プロセッサ選択部４８０は、判定部４７０の判定結果を用いて、未割当ウェイを割り当てるプロセッサ１０又は１１を選択する。
【００７２】
ビット割当部４５０は、本発明の割当部に相当し、プロセッサ選択部４８０により選択されたプロセッサ１０又は１１が実行する複数のタスクのうち１以上のタスクを選択し、選択したタスクに未割当ウェイを割り当てる。具体的には、ビット割当部４５０は、対応するサーチポインタ４３１又は４３２で指定される有効位置のウェイ５１が割り当てられているタスクを選択する。
【００７３】
有効位置探索部４４０は、本発明のウェイ指定部に相当し、サーチポインタ４３１又は４３２に、対応するプロセッサ１０又は１１のタスクに割り当てられているウェイ５１を指定させる。また、有効位置探索部４４０は、ビット割当部４５０により、プロセッサ１０又は１１のタスクにウェイ５１が割り当てられるごとに、サーチポインタ４３１又は４３２が指定するウェイ５１を、対応するプロセッサのタスクが割り当てられているウェイ５１のうち、空きウェイ情報４２１及び４２２のビット列の順で次に位置するウェイ５１に移動させる。
【００７４】
具体的には、有効位置探索部４４０は、ビット割当部４５０によりタスクにウェイ５１が割り当てられる毎に、有効位置探索処理によりプロセッサ１０（又は１１）の有効位置を探索し、探索した有効位置をサーチポインタ４３１（又は４３２）にセットする。
【００７５】
ここで、有効位置探索処理とは、サーチポインタ４３１及び４３２を順時１ずつインクリメントしていき、次に空きウェイ情報４２１又は４２２が有効「１」となるビットを探索する処理である。
【００７６】
言い換えると、有効位置探索部４４０は、各プロセッサ１０又は１１の、割当済みタスク（初期値においてウェイが割り当てられているタスク）をビット列の順に順番に選択することを繰り返す。
【００７７】
以下、キャッシュ配分制御部４０の動作を、具体例を交えて説明する。
【００７８】
図４は、キャッシュ配分制御部４０によるキャッシュ配分制御処理の動作の流れを示すフローチャートである。
【００７９】
まず、初期値設定部４９０は、図３に示すウェイ情報４１１及び４１２を初期値として設定する。また、図３に示すように、ウェイ５１は１６個あり、各メモリマクロセルは２個のウェイ５１を含むとする。つまり、１６個のウェイ５１は、２個ずつ８個のグループ５２に分割されているとする。また、各プロセッサ１０及び１１は、それぞれ３個のタスクを実行するとする。
【００８０】
まず、空きウェイ情報生成部４６０は、空きウェイ情報４２１及び４２２をプロセッサ１０及び１１ごとに作成する（ステップＳ１００１）。この処理により図３に示す空きウェイ情報４２１及び４２２が生成される。具体的には、プロセッサ１０のタスク０、１、２のウェイ情報４１１ａ〜４１１ｃの論理和は、ビット０、６、７で「１」となり、それ以外のビットで「０」となる。また、プロセッサ１１のタスク０、１、２のウェイ情報４１２ａ〜４２１ｃの論理和は、ビット３及び１０で「１」となり、それ以外のビットで「０」となる。
【００８１】
次に、有効位置探索部４４０は、有効位置探索処理によりプロセッサ１０の有効位置を探索し、探索した有効位置をサーチポインタ４３１にセットする（ステップＳ１００２）。
【００８２】
以下、有効位置探索処理について詳細に説明する。
【００８３】
図５は、有効位置探索部４４０による有効位置探索処理の流れを示すフローチャートである。
【００８４】
まず、有効位置探索部４４０は、指定されたプロセッサｎのサーチポインタ４３１又は４３２を取り出し（ステップＳ１１０１）、取り出したサーチポインタ４３１又は４３２がウェイ幅を一周するまで以下に示すステップＳ１１０３及びＳ１１０４の処理を繰り返す（ステップＳ１１０２）。
【００８５】
ここでは、有効位置探索部４４０は、プロセッサ１０のサーチポインタ４３１の初期値「０」を取り出す。
【００８６】
まず、有効位置探索部４４０は、指定されたプロセッサｎのサーチポインタ４３１又は４３２で指定されるビットのウェイ５１が、割当済みウェイであるか否かを判定する（ステップＳ１１０３）。具体的には、有効位置探索部４４０は、空きウェイ情報４２１又は４２２に含まれる、サーチポインタ４３１又は４３２で指定されるビットが、有効「１」であるか、無効「０」であるかを判定する。
【００８７】
ここでは、サーチポインタ４３１は「０」であり、空きウェイ情報４２１のビット０は、有効「１」なので（ステップＳ１１０３でＹｅｓ）、有効位置探索部４４０は、当該ビット０をプロセッサ１０の有効位置とし、サーチポインタ４３１に「０」をセットする。
【００８８】
再度、図４を参照して説明を行う。
【００８９】
次に、有効位置探索部４４０は、有効位置探索処理によりプロセッサ１１の有効位置を探索し、探索した有効位置をサーチポインタ４３２にセットする（ステップＳ１００３）。
【００９０】
この場合、図５に示すように、まず、有効位置探索部４４０は、プロセッサ１１のサーチポインタ４３２の初期値「０」を取り出す（ステップＳ１１０１）。
【００９１】
次に、有効位置探索部４４０は、空きウェイ情報４２２の、サーチポインタ４３２で指定されるビット０が有効「１」であるか、無効「０」であるかを判定する（ステップＳ１１０３）。ここでは、空きウェイ情報４２２のビット０は、無効「０」なので（ステップＳ１１０３でＮｏ）、有効位置探索部４４０は、サーチポインタ４３２に１を加算する（ステップＳ１１０４）。
【００９２】
次に、有効位置探索部４４０は、サーチポインタ４３２で指定されるビット１が有効「１」であるか、無効「０」であるかを判定する（ステップＳ１１０３）。ここでは、空きウェイ情報４２２のビット１は、無効「０」なので（ステップＳ１１０３でＮｏ）、有効位置探索部４４０は、サーチポインタ４３２に更に１を加算する（ステップＳ１１０１）。
【００９３】
有効位置探索部４４０は、サーチポインタ４３２が、空きウェイ情報４２２で有効「１」が示されるビットに到達するまで、順時、ステップＳ１１０３及びＳ１１０４の処理を繰り返す。この例では、サーチポインタ４３２が「３」になるまで、ステップＳ１１０３及びＳ１１０４の処理が繰り返される。これにより、有効位置探索部４４０は、ビット３をプロセッサ１１の有効位置とし、サーチポインタ４３２に「３」をセットする。
【００９４】
また、サーチポインタ４３１又は４３２が一周した場合（ステップＳ１１０２でＹｅｓ）、有効位置探索部４４０は、サーチポインタ４３１又は４３２に最大値を設定したうえでループを終了する（ステップＳ１１０５）。これは有効なビットが存在しないことを示しており、サーチポインタ４３１又は４３２に最大値を設定することにより、後述する大小比較（ステップＳ１００６）の際に必ず大きいと判断され、他の有効なビットが存在するタスクが選択されるようになる。例えば、この最大値は（ビット幅）×（ビット幅）である。
【００９５】
再度、図４を参照して説明を行う。
【００９６】
次に、キャッシュ配分制御部４０は、空きウェイ情報４２１及び４２２を、各グループに対応する２ビットずつに区切り、各２ビットに対して、以下に示すステップＳ１００５からステップＳ１０１９までの処理を順時行う（ステップＳ１００４）。
【００９７】
まず、判定部４７０は、空きウェイ情報４２１及び４２２のビットｉ及びｉ＋１の状態（有効又は無効）を判定する（ステップＳ１００５）。以下、空きウェイ情報４２１及び４２２のビットｉ及びｉ＋１の状態を、「（ビットｉ＋１状態、ビットｉ状態）」として表す。
【００９８】
ここで判定部４７０は、ウェイ情報４１１及び４１２の初期値において、１つのグループ５２に含まれる複数のウェイ５１がいずれもタスクに割り当てられていない（ステップＳ１００５で、プロセッサ１０＝（０、０）かつプロセッサ１１＝（０、０））か、１以上のウェイ５１がタスクに割り当てられ、かつ１以上のウェイ５１がタスクに割り当てられていない（ステップＳ１００５で、プロセッサ１０＝（０、１）かつプロセッサ１１＝（０、０）、又は、プロセッサ１０＝（１、０）かつプロセッサ１１＝（０、０）、又は、プロセッサ１０＝（０、０）かつプロセッサ１１＝（０、１）、又は、プロセッサ１０＝（０、０）かつプロセッサ１１＝（１、０））か、全てのウェイ５１がタスクに割り当てられている（ステップＳ１００５で、それ以外）かを判定する。
【００９９】
また、プロセッサ選択部４８０は、１以上のウェイ５１がタスクに割り当てられ、かつ１以上のウェイ５１がタスクに割り当てられていない場合、当該割り当てられているタスクを実行するプロセッサ１０又は１１を選択する。
【０１００】
また、プロセッサ選択部４８０は、１つのグループ５２に含まれるウェイ５１がいずれもタスクに割り当てられていない場合、サーチポインタ４３１及び４３２の数値が小さいプロセッサ１０又は１１を選択する（ステップＳ１００６）。
【０１０１】
また、全てのウェイ５１がタスクに割り当てられている場合、キャッシュ配分制御部４０は、タスクの配分を行わず、次のグループ５２の処理に移行する。
【０１０２】
この例では、キャッシュ配分制御部４０は、グループ０に含まれるビット０及びビット１の状態を判定する。プロセッサ１０の空きウェイ情報４２１のビット１及びビット０は、（０、１）であり、プロセッサ１１の空きウェイ情報４２２のビット１及びビット０は、（０、０）である。つまり、プロセッサ１０が実行するタスクにウェイ５１が割り当てられているので、プロセッサ選択部４８０は、プロセッサ１０を選択する。次に、ビット割当部４５０は、タスクが割り当てられていないビットｉ＋１（ビット１）に、プロセッサ選択部４８０により選択されたプロセッサ１０のタスクを割り当てるビット割当処理を行う（ステップＳ１０１１）。
【０１０３】
ここでビット割当処理とは、未割当ウェイをタスクに割り当てる処理である。
【０１０４】
以下、ビット割当処理について詳細に説明する。
【０１０５】
図６は、ビット割当部４５０によるビット割当処理の流れを示すフローチャートである。
【０１０６】
ビット割当部４５０は、プロセッサ選択部４８０により選択されたプロセッサｎの全てのタスク０〜ｍについて、ステップＳ１２０２からステップＳ１２０４までの処理を順時行う（ステップＳ１２０１）。
【０１０７】
まず、ビット割当部４５０は、プロセッサｎのタスク０〜ｍのうちタスクｉ（ｉ＝０〜ｍ）を選択する。ビット割当部４５０は、選択したタスクｉの、サーチポインタ４３１又は４３２で指定されるビットが有効「１」であるか、無効「０」であるかをウェイ情報４１１又は４１２を参照して判定する（ステップＳ１２０２）。
【０１０８】
タスクｉの、サーチポインタ４３１又は４３２で指定されるビットが有効「１」である場合（ステップＳ１２０２でＹｅｓ）、ビット割当部４５０は、空きビットに有効ビットをコピーする（ステップＳ１２０３）。すなわち、ビット割当部４５０は、タスクｉのウェイ情報４１１又は４１２の空きビットを有効「１」に変更する。ここで、空きビットとは、ビットｉ及びビットｉ＋１のうち、いずれのタスクも割り当てられていない（空きウェイ情報４２１又は４２２で無効「０」の）ビットである。
【０１０９】
次に、ビット割当部４５０は、プロセッサｎの別のタスクを選択し、選択したタスクに対して、ステップＳ１２０２の処理を行う。
【０１１０】
一方、タスクｉの、サーチポインタ４３１又は４３２で指定されるビットが無効「０」である場合（ステップＳ１２０２でＮｏ）、ビット割当部４５０は、当該タスクｉのウェイ情報４１１又は４１２を変更せず、次のタスクに対して、ステップＳ１２０２の処理を行う。
【０１１１】
この例では、図３に示すように、プロセッサ１０のサーチポインタ４３１は「０」であり、ウェイ情報４１１ａ〜４１１ｃのビット０のうち、ウェイ情報４１１ａのビット０のみが有効「１」なので、ビット割当部４５０は、図７に示すように、ウェイ情報４１１ａのビット１を有効「１」にすることにより、ビット１のウェイ５１をプロセッサ１０のタスク０に割り当てる。
【０１１２】
再度、図４を参照して説明する。
【０１１３】
次に、有効位置探索部４４０は、プロセッサ１０の有効位置を探索する（ステップＳ１０１２）。ここでは、図７に示すように有効位置探索部４４０は、ビット６をプロセッサ１０の有効位置とし、サーチポインタ４３１に「６」をセットする。なお、ここでの有効位置探索処理は、上述した図５に示す処理と同様であるが、ステップＳ１１０１において、元にセットされているサーチポインタ４３１又は４３２の値（この例では「０」）に、１を加算した後、ステップＳ１１０２以降の処理を行う。また、ステップＳ１００８、Ｓ１０１０、Ｓ１０１４、Ｓ１０１６及びＳ１０１８も同様である。
【０１１４】
以上により、グループ０に対する処理は終了し、次に、グループ１に対する処理が行われる。
【０１１５】
まず、判定部４７０は、グループ１に含まれるビット３及びビット２の状態を判定する（ステップＳ１００５）。プロセッサ１０の空きウェイ情報４２１のビット３及びビット２は、（０、０）であり、プロセッサ１１の空きウェイ情報４２２のビット３及びビット２は、（１、０）であるので、プロセッサ選択部４８０はプロセッサ１１を選択する。次に、ビット割当部４５０は、ビットｉ（ビット２）に、プロセッサ１１のタスクを割り当てるビット割当処理を行う（ステップＳ１０１７）。
【０１１６】
ここで、図３に示すように、プロセッサ１１のサーチポインタ４３２は「３」であり、ウェイ情報４１２ａ〜４１２ｃのビット３のうち、ウェイ情報４１２ａのビット３のみが有効「１」なので、ビット割当部４５０は、ウェイ情報４１２ａのビット２を有効「１」にすることにより、ビット２のウェイ５１をプロセッサ１１のタスク０に割り当てる。
【０１１７】
次に、有効位置探索部４４０は、プロセッサ１１の有効位置を探索する（ステップＳ１０１８）。ここでは、図７に示すように有効位置探索部４４０は、ビット１０をプロセッサ１１の有効位置とし、サーチポインタ４３２に「１０」をセットする。
【０１１８】
以上により、グループ１に対する処理は終了し、次に、グループ２に対する処理が行われる。
【０１１９】
まず、判定部４７０は、グループ２に含まれるビット５及びビット４の状態を判定する（ステップＳ１００５）。プロセッサ１０の空きウェイ情報４２１のビット５及びビット４は、（０、０）であり、プロセッサ１１の空きウェイ情報４２２のビット５及びビット４は、（０、０）である。つまり、１つのグループ５２に含まれるウェイ５１がいずれもタスクに割り当てられていないので、プロセッサ選択部４８０は、プロセッサ１０のサーチポインタ４３１と、プロセッサ１１のサーチポインタ４３２とを比較し、サーチポインタの数値が小さいプロセッサを、空きビットを割り当てるプロセッサｘに決定する（ステップＳ１００６）。
【０１２０】
ここでは、図７に示すように、プロセッサ１０のサーチポインタ４３１は「６」であり、プロセッサ１１のサーチポインタ４３２は「１０」であるので、プロセッサ選択部４８０は、プロセッサ１０を空きビットを割り当てるプロセッサｘに決定する。
【０１２１】
次に、ビット割当部４５０は、プロセッサｘ（プロセッサ１０）のタスクにビットｉ（ビット４）を割り当てる（ステップＳ１００７）。ここでは、図７に示すように、プロセッサ１０のサーチポインタ４３１は「６」であり、ウェイ情報４１１ａ〜４１１ｃのビット６のうち、ウェイ情報４１１ｂのビット６のみが有効「１」なので、ビット割当部４５０は、図８に示すように、ウェイ情報４１１ｂのビット４を有効「１」にすることにより、ビット４のウェイ５１をプロセッサ１０のタスク１に割り当てる。
【０１２２】
次に、有効位置探索部４４０は、プロセッサｘ（プロセッサ１０）の有効位置を探索する（ステップＳ１００８）。ここでは、有効位置探索部４４０は、ビット７をプロセッサ１０の有効位置とし、サーチポインタ４３１に「７」をセットする。
【０１２３】
次に、ビット割当部４５０は、プロセッサｘ（プロセッサ１０）のタスクにビットｉ＋１（ビット５）を割り当てる（ステップＳ１００９）。ここでは、プロセッサ１０のサーチポインタ４３１は「７」であり、ウェイ情報４１１ａ〜４１１ｃのビット７のうち、ウェイ情報４１１ｃのビット７のみが有効「１」なので、ビット割当部４５０は、ウェイ情報４１１ｃのビット５を有効「１」にすることにより、ビット５のウェイ５１をプロセッサ１０のタスク２に割り当てる。
【０１２４】
次に、有効位置探索部４４０は、プロセッサｘ（プロセッサ１０）の有効位置を探索する（ステップＳ１０１０）。ここでは、有効位置探索部４４０は、ビット０をプロセッサ１０の有効位置とし、サーチポインタ４３１に「１６」をセットする。
【０１２５】
以上により、グループ２に対する処理は終了し、次に、グループ３に対する処理が行われる。
【０１２６】
まず、判定部４７０は、グループ３に含まれるビット７及びビット６の状態を判定する（ステップＳ１００５）。プロセッサ１０の空きウェイ情報４２１のビット７及びビット６は、（１、１）であり、プロセッサ１１の空きウェイ情報４２２のビット７及びビット６は、（０、０）である。つまり、全てのウェイ５１がタスクに割り当てられているので、キャッシュ配分制御部４０は、ウェイ情報４１１及び４１２を変更しない。
【０１２７】
以上により、グループ３に対する処理は終了し、次に、グループ４に対する処理が行われる。
【０１２８】
まず、判定部４７０は、グループ４に含まれるビット９及びビット８の状態を判定する（ステップＳ１００５）。プロセッサ１０の空きウェイ情報４２１のビット９及びビット８は、（０、０）であり、プロセッサ１１の空きウェイ情報４２２のビット９及びビット８は、（０、０）であるので、次に、プロセッサ選択部４８０は、プロセッサ１０のサーチポインタ４３１「１６」と、プロセッサ１１のサーチポインタ４３２「６」とを比較し、サーチポインタの数値が小さいプロセッサ１１を、ビット９及びビット８を割り当てるプロセッサｘに決定する（ステップＳ１００６）。
【０１２９】
次に、ビット割当部４５０は、プロセッサ１０のタスクにビット８を割り当てる（ステップＳ１００７）。ここでは、プロセッサ１１のサーチポインタ４３２は「１０」であり、ウェイ情報４１２ａ〜４１２ｃのビット１０のうち、ウェイ情報４１２ｂ及び４１２ｃのビット１０が有効「１」なので、ビット割当部４５０は、図８に示すように、ウェイ情報４１２ｂ及び４１２ｃのビット８を有効「１」にすることにより、ビット８のウェイ５１をプロセッサ１１のタスク２及びタスク３に割り当てる。
【０１３０】
次に、有効位置探索部４４０は、プロセッサ１１の有効位置を探索する（ステップＳ１００８）。ここでは、有効位置探索部４４０は、ビット３をプロセッサ１１の有効位置とし、サーチポインタ４３２に「１９」をセットする。
【０１３１】
次に、ビット割当部４５０は、プロセッサ１１のタスクにビット９を割り当てる（ステップＳ１００９）。ここでは、プロセッサ１１のサーチポインタ４３２は「１９」（ビット３）であり、ウェイ情報４１２ａ〜４１２ｃのビット３のうち、ウェイ情報４１２ａのビット３のみが有効「１」なので、ビット割当部４５０は、図８に示すように、ウェイ情報４１２ａのビット９を有効「１」にすることにより、ビット９のウェイ５１をプロセッサ１１のタスク０に割り当てる。
【０１３２】
次に、有効位置探索部４４０は、プロセッサ１１の有効位置を探索する（ステップＳ１０１０）。ここでは、有効位置探索部４４０は、ビット１０をプロセッサ１１の有効位置とし、サーチポインタ４３２に「２６」をセットする。
【０１３３】
以上により、グループ４に対する処理は終了する。以降、グループ５〜７に対して、同様の処理が行われる。
【０１３４】
なお、ステップＳ１００５において、プロセッサ１０の空きウェイ情報４２１のビットｉ＋１及びビットｉが、（１、０）であり、プロセッサ１１の空きウェイ情報４２２のビットｉ＋１及びビットｉが、（０、０）の場合には、次に、ビット割当部４５０は、ビットｉに、プロセッサ１０のタスクを割り当てるビット割当処理を行う（ステップＳ１０１３）。次に、有効位置探索部４４０は、プロセッサ１０の有効位置を探索し（ステップＳ１０１４）、キャッシュ配分制御部４０は、次のグループに対する処理を行う（ステップＳ１００４）。
【０１３５】
また、ステップＳ１００５において、プロセッサ１０の空きウェイ情報４２１のビットｉ＋１及びビットｉが、（０、０）であり、プロセッサ１１の空きウェイ情報４２２のビットｉ＋１及びビットｉが、（０、１）の場合には、次に、ビット割当部４５０は、ビットｉ＋１に、プロセッサ１１のタスクを割り当てるビット割当処理を行う（ステップＳ１０１６）。次に、有効位置探索部４４０は、プロセッサ１１の有効位置を探索し（ステップＳ１０１７）、キャッシュ配分制御部４０は、次のグループに対する処理を行う（ステップＳ１００４）。
【０１３６】
また、ステップＳ１００５において、上記以外の場合、つまり、ビットｉ＋１及びビットｉのウェイが、共にタスクに割り当てられている場合、キャッシュ配分制御部４０は、タスクの割り当てを行わず、次のグループに対する処理を行う（ステップＳ１００４）。
【０１３７】
以上説明したように、本発明の実施の形態に係るキャッシュ制御装置１０１は、各タスクの処理性能を保証できるように、ウェイ情報４１１及び４１２に初期値を設定する。こにより、キャッシュ制御装置１０１は、理性能を保証する必要があるシステムにおいてタスクごとにキャッシュ容量を確保できる。
【０１３８】
また、キャッシュ制御装置１０１は、余っている未割当ウェイをタスクに割り当てることができるので、余剰資源をタスクに割り当てることができる。
【０１３９】
さらに、キャッシュ制御装置１０１は、未割当ウェイを、当該未割当ウェイと同一のグループ５２（メモリマクロセル）のウェイ５１が割り当てられているタスクと同じプロセッサ１０又は１１のタスクに割り当てる。これにより、１つのグループ５２に含まれるウェイ５１は、同一のプロセッサ１０又は１１が実行するタスクに割り当てられる。よって、キャッシュ制御装置１０１は、異なるプロセッサ１０及び１１が同一のグループ５２に含まれるウェイ５１にアクセスした場合に発生するキャッシュアクセスの衝突を回避できる。このように、本発明の実施の形態に係るキャッシュ制御装置１０１は、アクセス遅延の発生を抑制できる。
【０１４０】
また、キャッシュ制御装置１０１は、１つのグループ５２に含まれる全てのウェイ５１が、いずれのタスクにも割り当てられていない場合、サーチポインタ４３１又は４３２の数値が最も小さいプロセッサ１０又は１１が実行するタスクに、当該グループ５２に含まれるウェイ５１を割り当てる。これにより、キャッシュ制御装置１０１は、ウェイ５１が割り当てられている数が少ないプロセッサ１０又は１１のタスクに、優先的にウェイ５１を割り当てることができる。これにより、キャッシュ制御装置１０１は、各プロセッサ１０又は１１に均等にウェイ５１を配分できる。
【０１４１】
また、有効位置探索部４４０は、ウェイ５１をタスクに割り当てるたびに、サーチポインタ４３１及び４３２を更新することにより、対応するプロセッサ１０又は１１が実行する複数のタスクを予め定められた順に順番に選択することを繰り返す。また、ビット割当部４５０は、選択されたタスクに、空きウェイ５１を割り当てる。これにより、キャッシュ制御装置１０１は、各プロセッサ１０又は１１が実行する複数のタスクに、均等にウェイ５１を配分できる。
【０１４２】
なお、キャッシュ配分制御部４０がキャッシュ配分制御処理を実施する契機を特定していないが、タスクの起動又はタスクの終了時に当該処理を実施することにより、タスクの処理に影響を与えることなく未割当ウェイを配分できる。
【０１４３】
また、上記説明では、各グループ５２は、それぞれ２個のウェイ５１を含むとしたが、３個以上のウェイ５１を含んでもよい。また、各グループ５２が異なる数のウェイ５１を含んでもよい。
【０１４４】
また、上記実施の形態に係るキャッシュ制御装置１０１に含まれる各処理部は典型的には、ＣＰＵ等のプロセッサがプログラム（ソフトウェア）を実行することにより実現される。
【０１４５】
さらに、本発明は上記プログラムであってもよいし、上記プログラムが記録されたＣＤ−ＲＯＭ等の記録媒体であってもよい。また、上記プログラムは、インターネット等の伝送媒体を介したソフトウェアダウンロード等により流通させることができるのは言うまでもない。
【０１４６】
なお、上記実施の形態に係るキャッシュ制御装置１０１に含まれる各処理部の一部又は全てを集積回路であるＬＳＩとして実現してもよい。これらは個別に１チップ化されてもよいし、一部又はすべてを含むように１チップ化されてもよい。
【０１４７】
ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
【０１４８】
また、集積回路化はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後にプログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、又はＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。
【０１４９】
また、本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【産業上の利用可能性】
【０１５０】
以上のように、本発明は、キャッシュ制御装置及びキャッシュ制御方法に適用できる。また、本発明は、複数のプロセッサ及びキャッシュメモリを含むプロセッサシステムに適用できる。
【符号の説明】
【０１５１】
１０、１１  プロセッサ
２０  メモリバス
３０  キャッシュ制御部
４０、２４０  キャッシュ配分制御部
５０  キャッシュメモリ
５１、５１ａ、５１ｂ、５１ｃ、５１ｄ、５１ｅ、５１ｆ  ウェイ
５２、５２ａ、５２ｂ、５２ｃ  グループ
６０  メインメモリ
１００、２００  プロセッサシステム
１０１、２０１  キャッシュ制御装置
４１０  ウェイ情報記憶部
４１１、４１１ａ、４１１ｂ、４１１ｃ、４１２、４１２ａ、４１２ｂ、４１２ｃ  ウェイ情報
４２１、４２２  空きウェイ情報
４３１、４３２  サーチポインタ
４４０  有効位置探索部
４５０  ビット割当部
４６０  空きウェイ情報生成部
４７０  判定部
４８０  プロセッサ選択部
４９０  初期値設定部
【図１】
2010244435.tif 000003
【図２】
2010244435.tif 000004
【図３】
2010244435.tif 000005
【図４】
2010244435.tif 000006
【図５】
2010244435.tif 000007
【図６】
2010244435.tif 000008
【図７】
2010244435.tif 000009
【図８】
2010244435.tif 000010
【図９】
2010244435.tif 000011