(57)【要約】【課題】キャッシュメモリの利用効率を高める。【解決手段】キャッシュメモリ制御工程をプロセッサに実行させるプロセッサ読み取り可能なキャッシュメモリ制御プログラムであって，キャッシュメモリ制御工程は，プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，スタックメモリ用キャッシュ領域群内の複数のキャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と，前記第１のサブルーチンの直前に呼び出された第２の数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域と，第３の数の空きキャッシュ領域とに維持するキャッシュ領域割当工程とを有する。【選択図】図３１
2015060376.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュメモリ制御工程をプロセッサに実行させるプロセッサ読み取り可能なキャッシュメモリ制御プログラムであって，
前記キャッシュメモリ制御工程は，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，
前記スタックメモリ用キャッシュ領域群内の複数のキャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と，前記第１のサブルーチンの直前に呼び出された第２の数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域と，第３の数の空きキャッシュ領域とに維持するキャッシュ領域割当工程とを有するキャッシュメモリ制御プログラム。
【請求項２】
請求項１において，
前記キャッシュ領域割当工程は，
前記第１のサブルーチンが終了して前記第２のサブルーチンのうち前記第１のサブルーチンの直前に呼び出されたサブルーチンが実行開始されるときに，前記第２のサブルーチンより前に呼び出された第３のサブルーチンに前記空きキャッシュ領域を専用キャッシュ領域として割り当てて，前記第３のサブルーチンのスタックメモリ領域内のデータをプリフェッチするキャッシュメモリ制御プログラム。
【請求項３】
請求項２において，
前記キャッシュ領域割当工程は，
前記第２の数を，前記スタックメモリ領域内のデータのメモリアクセスに要する時間を，前記サブルーチンの呼び戻し処理に要する時間で除算した数以上に維持するキャッシュメモリ制御プログラム。
【請求項４】
請求項１において，
前記キャッシュ領域割当工程は，
前記第１のサブルーチンが実行中に新たな第４のサブルーチンが呼び出されたときに，前記第２のサブルーチンのうち最も早く呼び出されたサブルーチンの専用キャッシュ領域内のデータを前記スタックメモリ領域に退避させて，前記最も早く呼び出されたサブルーチンの専用キャッシュ領域を前記空きキャッシュ領域に割り当てるキャッシュメモリ制御プログラム。
【請求項５】
請求項４において，
前記キャッシュ領域割当工程は，
前記第３の数を，前記専用キャッシュ領域内のデータを前記スタックメモリ領域内に退避するのに要する時間を，前記サブルーチンの呼び出し処理に要する時間で除算した数以上に維持するキャッシュメモリ制御プログラム。
【請求項６】
キャッシュメモリ制御工程をプロセッサに実行させるプロセッサ読み取り可能なキャッシュメモリ制御プログラムであって，
前記キャッシュメモリ制御工程は，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，第１の数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，
前記プログラム内で呼び出されたサブルーチンに，前記スタックメモリ用キャッシュ領域群内のキャッシュ領域を専用キャッシュ領域として割り当てると共に，前記割り当てられた専用キャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と前記第１のサブルーチンの直前に呼び出された単数または複数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域とに維持するキャッシュ領域割当工程とを有するキャッシュメモリ制御プログラム。
【請求項７】
キャッシュメモリ制御方法であって，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，
前記スタックメモリ用キャッシュ領域群内の複数のキャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と，前記第１のサブルーチンの直前に呼び出された第２の数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域と，第３の数の空きキャッシュ領域とに維持するキャッシュ領域割当工程とを有するキャッシュメモリ制御方法。
【請求項８】
キャッシュメモリ制御方法であって，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，
前記プログラム内で呼び出されたサブルーチンに，前記スタックメモリ用キャッシュ領域群内のキャッシュ領域を専用キャッシュ領域として割り当てると共に，前記割り当てられた専用キャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と前記第１のサブルーチンの直前に呼び出された単数または複数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域とに維持するキャッシュ領域割当工程とを有するキャッシュメモリ制御方法。
【請求項９】
キャッシュメモリを内蔵するプロセッサであって，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当手段と，
前記スタックメモリ用キャッシュ領域群内の複数のキャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と，前記第１のサブルーチンの直前に呼び出された第２の数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域と，第３の数の空きキャッシュ領域とに維持するキャッシュ領域割当手段とを有するプロセッサ。
【請求項１０】
キャッシュメモリを内蔵するプロセッサであって，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当手段と，
前記プログラム内で呼び出されたサブルーチンに，前記スタックメモリ用キャッシュ領域群内のキャッシュ領域を専用キャッシュ領域として割り当てると共に，前記割り当てられた専用キャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と前記第１のサブルーチンの直前に呼び出された単数または複数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域とに維持するキャッシュ領域割当手段とを有するプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，キャッシュメモリ制御プログラム，キャッシュメモリを内蔵するプロセッサ及びキャッシュメモリ制御方法に関する。
【背景技術】
【０００２】
近年のサーバシステムは，プロセッサの高性能化が進んでいる。しかし，CPUによるメモリアクセス速度が遅く，その点が性能向上のネックになっている。プロセッサはCPUに加えてキャッシュメモリを有し，CPUによるメモリアクセスが発生すると，まずキャッシュメモリがチェクされて，キャッシュヒットすればキャッシュメモリにアクセスが行われる。そして，キャッシュミスヒットした場合にメインメモリにアクセスが行われる。キャッシュメモリへのアクセスは，メインメモリへのアクセスと比べると１００〜３００倍高速である。したがって，CPUによるメモリアクセスの性能を向上させるためには，できるだけキャッシュヒットさせてメインメモリへのアクセスを発生させないことが重要である。
【０００３】
一方で，プログラムでは関数やモジュールなどのサブルーチンが階層的に呼び出される。この関数やモジュール内のローカル変数は，関数やモジュールが呼び出される（call）と必要になり，関数やモジュールが終了して呼び戻される（return）と不要になる。そこで，関数やモジュールが呼び出されるとそれに対するスタックメモリ領域が確保され，そのローカル変数がスタックメモリ領域内に記録される。そして，関数やモジュールが終了すると，そのスタックメモリ領域は開放される。
【０００４】
各プログラムのスタックメモリ領域は，メインメモリ内に形成される。そして，CPUがローカル変数を読み書きする場合は，メインメモリ内のスタックメモリ領域にアクセスする。このメモリアクセスにおいても，CPU内のキャッシュメモリが利用される。すなわち，スタックメモリ領域内のローカル変数に対するメモリアクセス時にも，キャッシュメモリのキャッシュヒット判定が行われ，キャッシュヒットすればキャッシュメモリ内のデータにアクセスされ，キャッシュミスヒットすればメインメモリ内のスタックメモリ領域内のデータにアクセスされる。
【０００５】
スタックメモリ領域内のデータに対するキャッシュメモリの制御については，以下の特許文献などがある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００１−２７３１３７号公報
【特許文献２】特開２００４−３８３４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のようなスタックメモリ領域とキャッシュメモリにおいて次のような課題がある。ローカル変数は呼び出された関数やモジュールを実行する際に特に頻繁に利用されるデータであるので，確実にキャッシュヒットすることが望まれる。
【０００８】
しかしながら，既に呼び出された関数やモジュールのローカル変数は，一旦キャッシュメモリ内に格納されるが，その後呼び出された関数やモジュールが長時間にわたって実行される場合は，実行中の関数やモジュールのローカル関数に対するメモリアクセスにより，キャッシュメモリ内に格納されていた以前に呼び出された関数やモジュールのローカル変数が追い出されてしまう。そのため，実行中の関数やモジュールが終了して以前に呼び出された関数やモジュールの実行が再開したときに，そのローカル変数へのメモリアクセスでキャッシュミスヒットが増大することがある。
【０００９】
また，関数やモジュールが呼び出された直後にローカル変数をアクセスする場合は，キャッシュメモリ内にローカル変数が未だ格納されていないのでキャッシュミスヒットが生じ，キャッシュメモリ内の他のデータをメインメモリに退避した後でなければ呼び出された関数やモジュールのローカル変数をキャッシュメモリ内に書込めず，一定のオーバーヘッドが必要になる。
【００１０】
さらに，短期間で複数の関数やモジュールが連続して呼び出されると，それらのローカル変数が次々にキャッシュメモリ内に格納されることにより，他のデータがキャッシュメモリから追い出されて他のデータに対するキャッシュミスヒットが増大する。
【００１１】
上記の課題は，複数の関数やモジュールがキャッシュメモリを共用しているため，複数のスタックメモリ領域のローカル変数が，共用キャッシュメモリ内で互いに影響し合うことが一つの原因である。
【００１２】
そこで，1つの側面では，本発明の目的は，スタックメモリ領域内のローカル変数に対するキャッシュヒット率を向上させるキャッシュメモリ制御プログラム，キャッシュメモリを内蔵するプロセッサ及びキャッシュメモリ制御方法を提供することにある。
【課題を解決するための手段】
【００１３】
実施の形態の第１の側面は，キャッシュメモリ制御工程をプロセッサに実行させるプロセッサ読み取り可能なキャッシュメモリ制御プログラムであって，
前記キャッシュメモリ制御工程は，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，
前記スタックメモリ用キャッシュ領域群内の複数のキャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と，前記第１のサブルーチンの直前に呼び出された第２の数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域と，第３の数の空きキャッシュ領域とに維持するキャッシュ領域割当工程とを有する。
【発明の効果】
【００１４】
第１の側面によれば，キャッシュメモリの利用効率が上昇する。
【図面の簡単な説明】
【００１５】
【図１】本実施の形態におけるサーバの構成図である。
【図２】本実施の形態におけるサーバのハードウエアとソフトウエアの構成図である。
【図３】本実施の形態におけるキャッシュ領域の動的割当の概略を示すフローチャート図である。
【図４】コンパイラ２１がアプリケーションプログラムのソースコードを機械語にコンパイルする処理を示す図である。
【図５】上記の特性調査で得られたキャッシュサイズ対キャッシュヒット率の特性例である。
【図６】キャッシュ領域の構成と専用領域獲得要求についての割当について示す図である。
【図７】変換テーブルの一例を示す図である。
【図８】図３に示した専用領域獲得要求に対する判定処理S16について第１の例のフローチャート図である。
【図９】専用領域獲得要求に専用キャッシュ領域を割り当てる場合を説明する図である。
【図１０】図３に示した専用領域獲得要求に対する判定処理S16について第２の例のフローチャート図である。
【図１１】専用領域獲得要求と割当済専用領域獲得要求との間で専用キャッシュ領域を入れ替える処理を説明する図である。
【図１２】推定キャッシュヒット率を示す図である。
【図１３】割当済専用領域リストLIST-FREEと未割当専用領域リストLIST-DEMANDとを示す図である。
【図１４】定期割当見直し処理S18の第１の例のフローチャート図である。
【図１５】定期割当見直し処理S18の第１の例を説明するための図である。
【図１６】定期割当見直し処理S18の第２の例のフローチャート図である。
【図１７】定期割当見直し処理S18の第２の例を説明するための図である。
【図１８】定期割当見直し処理S18の第３の例のフローチャート図である。
【図１９】定期割当見直し処理S18の第３の例を説明するための図である。
【図２０】図３の工程S2とS3のサーバシステム内での処理を示す図である。
【図２１】図２０のサーバシステム内の処理に対応するフローチャート図である。
【図２２】図３の工程S13，S16，S19のサーバシステム内での処理を示す図である。
【図２３】図２２のサーバシステム内の処理に対応するフローチャート図である。
【図２４】本専用領域獲得要求判定処理S16（２）のフローチャート図である。
【図２５】アプリケーションプログラムのプロセス２２が切り替わるときのセクタID変換テーブルの入れ替え処理を示す図である。
【図２６】第２の実施の形態におけるキャッシュメモリとスタックメモリ領域との関係を示す図である。
【図２７】関数のローカル変数とスタックメモリ領域内の変数データとを示す図である。
【図２８】プログラム内の関数とスタックメモリ領域とを示す図である。
【図２９】スタックメモリ領域に対するキャッシュメモリの問題点について説明する図である。
【図３０】スタックメモリ領域に対するキャッシュメモリの問題点について説明する図である。
【図３１】第２の実施の形態における，関数Ｅが実行中の時間Ｔ１と関数Ｅが終了して呼び戻された時間Ｔ２のスタックメモリ領域ＳＴとキャッシュメモリ１３０内のスタックメモリ用キャッシュ領域群１３０−ＳＴとを示す図である。
【図３２】第２の実施の形態における，関数Ｅが実行中の時間Ｔ１と関数Ｅが終了して呼び戻された時間Ｔ３のスタックメモリ領域ＳＴとキャッシュメモリ１３０内のスタックメモリ用キャッシュ領域群１３０−ＳＴとを示す図である。
【図３３】実行中の関数の直前に連続して呼び出されたＮ個の関数に割り当てられたＮ個の第２の専用キャッシュ領域の個数Ｎについて説明する図である。
【図３４】実行中の関数の直後に連続して呼び出される予定のＭ個の関数に割り当てられたＭ個の専用空きキャッシュ領域の個数Ｍについて説明する図である。
【図３５】第２の実施の形態におけるキャッシュメモリ制御プログラムによるセクタＩＤ変換テーブルの制御を示す図である。
【図３６】コンパイル工程と対象プロセス起動工程とを示すフローチャート図である。
【図３７】関数呼び戻し処理のフローチャート図である。
【図３８】関数呼び出し処理のフローチャート図である。
【発明を実施するための形態】
【００１６】
以下は，本実施の形態の目次である。
【００１７】
［第１の実施の形態］
［本実施の形態のキャッシュ領域の動的割当の概略］
［専用領域獲得要求での専用キャッシュ領域の割当S15,S16］
［専用キャッシュ領域を利用するメモリアクセスS13］
［専用領域開放要求での専用キャッシュ領域の開放］
［本実施の形態のキャッシュ領域の動的割当処理の詳細］
［キャッシュ領域の割当判定の指標］
［実キャッシュヒット数］
［メモリアクセスの局所性］
［キャッシュ有効利用度，実キャッシュ有効利用度，キャッシュ攪乱力］
［専用領域獲得要求判定処理S16（１）］
［専用領域獲得要求判定処理S16（２）］
［定期割当見直し処理S18］
［定期割当見直し処理S18（１）］
［定期割当見直し処理S18（２）］
［定期割当見直し処理S18（３）］
［プロセス切り替え時のセクタID変換テーブルの入れ替え処理］
［第２の実施の形態］
以下，上記の目次にしたがって本実施の形態を説明する。
【００１８】
［第１の実施の形態］
図１は，本実施の形態におけるサーバの構成図である。サーバは，プロセッサユニット１０と，メインメモリ１６と，キーボードや表示装置などの入出力部１７と，ハードディスクなどの大容量のストレージ１８とを有する。プロセッサユニット１０は，機械語命令を実行するCPU１２と，キャッシュメモリとキャッシュメモリの制御部を有するキャッシュユニット１３と，CPUからメインメモリ１６へのアクセスの制御を行うバスインターフェース１４とを有する。
【００１９】
ストレージ１８には，オペレーションシステム（OS）と，コンパレータなどのミドルウエア（M-Ware）と，アプリケーションプログラム（APL）などが格納されている。これらのプログラムは，サーバ起動時にメインメモリ１６内にロードされ，CPU１２によって実行される。また，メインメモリ１６は，アプリケーションプログラムAPLに含まれるプロセスの実行に必要なデータを記憶する。また，CPU１２によるキャッシュメモリへのアクセス速度と比較すると，メインメモリ１６へのアクセス速度は極端に遅い。一方，キャッシュメモリの容量は，メインメモリ１６の容量に比較すると非常に小さい。
【００２０】
図２は，本実施の形態におけるサーバのハードウエアとソフトウエアの構成図である。ハードウエア１は，図１に示した構成を有し，図２には，特に，メインメモリ１６と，キャッシュシステム１３と，CPU１２とが示されている。
【００２１】
キャッシュシステム１３は，SRAMなど高速の半導体メモリなどで構成されるキャッシュメモリ１３０と，そのキャッシュメモリ１３０へアクセスするときに参照されるセクタID変換テーブル１３１，専用キャッシュ領域のサイズ設定などが行われるキャッシュセクタ情報設定部１３２，キャッシュメモリへアクセスするときに使用されるキャッシュアドレス変換部１３３などを有する。
【００２２】
本実施の形態において，CPU12は，通常の機械語命令に加えて，ローカルセクタIDが付加された機械語命令を実行する。後述するとおり，ローカルセクタIDは，その機械語命令が利用するキャッシュメモリの領域を識別するために使用される。
【００２３】
OS20は，アプリケーションプログラムの様々なプロセスにキャッシュメモリの領域（キャッシュセクタ）を動的に割り当てる場合に，セクタID変換テーブル１３１にローカルセクタIDに対して割り当てるキャッシュセクタIDをひもづける。そして，セクタID変換テーブル１３１は，キャッシュメモリにアクセスするときに参照され，機械語命令に付加されたローカルセクタIDをキャッシュメモリ内の使用領域を示すキャッシュセクタIDに変換する。このような方法により，OS20は，プログラムの様々なプロセスやプロセス内の処理に対して，専用キャッシュ領域を動的に割り当てて，そのプロセスやプロセス内の処理に割り当てた専用キャッシュ領域を使用させることができる。
【００２４】
キャッシュシステム１３内のキャッシュセクタ情報設定部１３２は，キャッシュメモリの領域（キャッシュセクタ）に対してどの程度のキャッシュサイズを割り当てるかが設定される。後述するとおり，OS20は，専用キャッシュ領域を割り当てる場合に，そのキャッシュサイズをキャッシュセクタ情報設定部１３２に設定する。キャッシュアドレス変換部１３３は，CPU12によるメモリアクセスのアドレスをキャッシュメモリのアドレスに変換する。
【００２５】
図２のソフトウエア２は，オペレーションシステム（OS)２０と，アプリケーションプログラムを機械語に変換するコンパイラなどのミドルウエア２１と，複数のアプリケーションプログラムを有するアプリケーションプログラム群２２とを有する。
【００２６】
OS内の関数制御管理部２０１は，アプリケーションプログラムの各プロセス内で呼び出される関数の管理を行う。一般に，関数制御管理部２０１は，関数が呼び出されるとその関数で利用されるデータをスタックデータとして管理し，また，関数が読み戻されるとスタックデータを開放する。
【００２７】
OS20は，マルチタスク（またはマルチプロセス）を切り替えながら各プロセスの処理を実行する。プロセス管理部２０２は，この各プロセスの切替制御を行う。本実施の形態では，特に，プロセス管理部２０２は，プロセスが切り替えられるたびに，キャッシュシステム１３内のセクタID変換テーブル１３１を切り替える。これにより，各プロセスに対応して適切なキャッシュ領域の動的な割当を行うことができる。具体的には後述する。
【００２８】
割り込み処理プロセス２０３は，IO割り込みや内部プログラムからの例外的な割り込みなどが発生したときに，実行されるOS割り込み処理プログラムである。この割り込み処理プロセス内には，専用領域獲得要求と専用領域解放要求が含まれている。具体的には後述する。
【００２９】
本実施の形態では，OS12が，アプリケーションプログラムのプロセス内で発行される専用領域獲得要求に応答して，キャッシュメモリ内の例えば共用キャッシュ領域と，専用キャッシュ領域と，攪乱処理キャッシュ領域などの割当を，動的に実行する。この動的な割り当ては，専用領域獲得要求の対応する処理（以下対応処理）のメモリアクセスの特性や専用領域獲得要求時のキャッシュメモリのアクセス状況などに基づいて行われる。キャッシュ割当管理部２０４は，これらのキャッシュ領域の動的な割当に関する制御を行う。
【００３０】
上記の共用キャッシュ領域（または共用領域）とは，複数のプロセスや対応処理が共有して利用するキャッシュメモリの領域であり，あるプロセスや対応処理が共用キャッシュ領域を利用することで，他のプロセスや対応処理によって共用キャッシュ領域に記憶されたデータが追い出されることがある。
【００３１】
一方，専用キャッシュ領域（または専用領域）とは，ある専用領域獲得要求に対して割り当てられるキャッシュメモリの領域であり，その専用領域獲得要求の対象処理内のメモリアクセスは，それに割り当てられた専用キャッシュ領域を使用する。したがって，他のプロセスや対応処理のメモリアクセスにより専用キャッシュ領域内のデータが追い出されることはないし，専用キャッシュ領域へのアクセスにより，共用キャッシュ領域や他の専用キャッシュ領域のデータが追い出されることもない。
【００３２】
また，攪乱処理キャッシュ領域とは，対応する処理のキャッシュミスヒット率が非常に高い対応処理に対する専用領域獲得要求に対して割り当てられるキャッシュメモリの領域であり，一種の専用キャッシュ領域である。攪乱処理キャッシュ領域では，共用キャッシュ領域や他の専用キャッシュ領域から隔離して，そのキャッシュ制御が行われる。そのため，攪乱処理キャッシュ領域が割り当てられた対応処理の高いキャッシュミスヒット率により，共用キャッシュ領域や他の専用キャッシュ領域内のデータが追い出されてその後のキャッシュミスヒット率が高くなることが回避される。攪乱処理キャッシュ領域は，複数の専用領域獲得要求に割り当てられることがある。攪乱処理キャッシュ領域を設けることで，攪乱処理による高いキャッシュミスヒット率により共用キャッシュ領域や専用キャッシュ領域のデータが追い出されることが抑制され，キャッシュヒット率が極端に低下することが抑制される。
【００３３】
キャッシュ割当管理部２０４が実行する処理工程には，例えば，次のようなものがある。第１に，開発環境下において，各プロセスや専用領域獲得要求が対象とする対象処理などについて，メモリアクセス頻度や，専用キャッシュ領域を割り当てられた場合のキャッシュヒット率などのメモリアクセス特性の調査を行う特性調査工程と，第２に，プロセス切り替え時においてキャッシュシステム１３内のセクタID変換テーブル１３１を入れ替える工程と，第３に，共用キャッシュ領域と，専用キャッシュ領域と，攪乱処理キャッシュ領域間のキャッシュ領域入れ替え判定工程と，第４に，キャッシュ領域入れ替え判定結果に基づくセクタID変換テーブルの更新及びキャッシュセクタ情報設定部１３２の割当キャッシュ領域のサイズ設定の更新工程などである。
【００３４】
ミドルウエア２１のコンパイラは，ソースコードで記述されたアプリケーションプログラムを実行形式の機械語（オブジェクトコード）に変換する。このコンパイラは，一般的なコンパイル処理に加えて，各プロセスにおいて適宜発行される専用キャッシュ領域の割当を要求する専用領域獲得要求の機械語命令と，その割り当てられた専用領域を開放する専用領域開放要求の機械語命令を追加する。また，コンパイラは，発行する各専用領域獲得要求には，プロセス内でユニークなローカルセクタIDを付加する。そして，コンパイラは，獲得した専用キャッシュ領域を利用する機械語命令には，そのローカルセクタIDを付加する。これにより，専用領域獲得要求に対して，その対象処理で利用するキャッシュ領域に専用キャッシュ領域が動的に割り当てられ，キャッシュメモリ領域全体を有効に利用することができる。すなわち，後述するキャッシュ有効利用度や実キャッシュ有効利用度を高くすることができる。
【００３５】
アプリケーションプログラム（APL）２２は，アプリケーションプログラムの実行形式である機械語にコンパイルされている。これにより，CPU12は，このアプリケーションプログラムの機械語を実行する。
【００３６】
［本実施の形態のキャッシュ領域の動的割当の概略］
図３は，本実施の形態におけるキャッシュ領域の動的割当の概略を示すフローチャート図である。まず，サーバにアプリケーションプログラムAPLをインストールした開発環境でシステムを稼働させる（S1)。まず，コンパイラをプロセッサ（CPU)に実行させて，アプリケーションプログラムAPLをコンパイルする（S2)。このコンパイル工程S2におけるキャッシュ領域の動的割当に関連する部分について以下説明する。
【００３７】
図４は，コンパイラ２１がアプリケーションプログラムのソースコードを機械語にコンパイルする処理を示す図である。コンパイラは，アプリケーションプログラムのソースコードAPL_SCを，その実行形式である機械語（オブジェクトコード）APL_OCに変換する。一般的なコンパイラの機能は，オブジェクトコードを命令部とオペランドを有する機械語の命令に変換することである。
【００３８】
本実施の形態では，コンパイラは，さらに，アプリケーションプログラム内の複数のプロセス内に，キャッシュメモリの専用キャッシュ領域への割当を要求する専用領域獲得要求３０と，それに対応する専用領域開放要求３４とを適宜挿入する。この専用領域獲得要求３０は，図４に示されるとおり，例えば，プロセスIDと，ローカルセクタIDと，専用領域獲得要求３０の対象処理の優先度を有する機械語命令である。各プロセスにおいて，キャッシュ領域を占有して処理を行いたい部分で，この専用領域獲得要求３０を発行してOS20に専用キャッシュ領域の割当を要求する。
【００３９】
プロセスIDは，OS20が管理している稼働プロセスPR1の識別情報である。ローカルセクタIDは，この専用領域獲得要求３０の対象処理３２を識別するための，プロセスPR1内におけるローカルな識別情報であり，割り当てられた専用キャッシュ領域を特定する識別情報である。
【００４０】
また，優先度は，対応処理３２の優先度を示す値であり，例えば，０−７の８段階で表す。ただし，OS内部の処理を優先させる必要があるため，ユーザプログラムには例えば０−５までしか優先度が割り当てられないなどの制約をかけることが行われる。
【００４１】
一方，専用領域開放要求３４は，これと対になる専用領域獲得要求３０と同じプロセスIDとローカルセクタIDとを有する。これにより，OS20が割り当てた専用キャッシュ領域が開放され，その対応処理には共用キャッシュ領域が代わりに割り当てられる。
【００４２】
さらに，コンパイラは，専用領域獲得要求３０と専用領域開放要求３４との間の命令に，その命令が利用する専用キャッシュ領域を識別するローカルセクタIDを付与して，ローカルセクタID付き命令を生成する。したがって，専用領域獲得要求が対象とする対象処理３２内の命令は，ローカルセクタIDに基づいて，割り当てられた専用キャッシュ領域を利用してメモリアクセスを実行する。ただし，専用領域獲得要求３０と専用領域開放要求３４との間の全ての命令が，専用キャッシュ領域を利用する必要があるわけではない。そのような命令には，ローカルセクタIDを例えば「０」に指定することで，専用キャッシュ領域ではなく通常の命令と同様に共用キャッシュ領域を利用してメモリアクセスを実行させることができる。
【００４３】
プロセスPR1内には，上記の専用領域獲得要求３０が複数発行されることがある。そして，専用領域獲得要求３０に対応する専用領域解放要求３４は，それぞれ，専用領域を開放するに適切な位置で発行される。
【００４４】
図３に戻り，開発環境下で，専用領域獲得要求の特性調査を実行する（S3）。本実施の形態では，キャッシュメモリ内の一部の領域を専用キャッシュ領域として特定のプロセスまたはプロセス内の一部の処理に動的に割り当てる。動的に割り当てる目的は，適切に専用キャッシュ領域を割り当てることによりキャッシュメモリの単位時間当たりのキャッシュヒット数の総計を向上させ，キャッシュミスヒット数をできるだけ抑制することにある。そのため，専用領域獲得要求に対して専用キャッシュ領域を割り当てるべきか否かを判断するための情報が必要になる。
【００４５】
各プロセスの専用領域獲得要求が対象とする処理には，様々なタイプがある。例えば，次のようなものである。
「プロセス全体が専用領域獲得要求の対象処理であり，そのプロセス全体で利用する専用キャッシュ領域を要求するもの」
「専用領域獲得要求の対象処理がプロセス内の一部の処理であるもの」
「専用領域獲得要求の対象処理がメモリの広範囲にアクセスしてキャッシュ領域内のデータを追い出して攪乱するもの」
「専用領域獲得要求の対象処理がキャッシュ領域にデータを固定的に記憶させ，キャッシュミスヒットがほとんど発生しないもの」
「対象処理が超短時間で終了するもの」
「対象処理が専用キャッシュ領域利用時と共用キャッシュ領域利用時とでキャッシュヒット率が大きく異なるもの」
これらを事前に調査しておくことで，本番稼働時において専用領域獲得要求に対して専用キャッシュ領域を割り当てるべきかを適切に判断することができる。
【００４６】
そこで，工程S3において，開発環境下でコンパイルされた機械語のアプリケーションプログラム内の専用領域獲得要求に専用キャッシュ領域の割当を許可した場合に，どの程度キャッシュヒット率が向上するかの特性調査を実行する。具体的には，特性調査対象の専用領域獲得要求だけに専用キャッシュ領域を割り当て，且つ，その専用キャッシュ領域のサイズを０から徐々に大きくしながら，それぞれの場合の（１）短時間当たりのメモリアクセス回数（メモリアクセス頻度）と，（２）専用キャッシュ領域内のキャッシュヒット率とを取得する。
【００４７】
図５は，上記の特性調査で得られたキャッシュサイズ対キャッシュヒット率の特性例である。横軸のキャッシュサイズｘを０から増大させた場合のそれぞれのキャッシュサイズでのキャッシュヒット率H(x)が縦軸に対応されている。一般的に，このキャッシュサイズ対キャッシュヒット率の特性は，キャッシュサイズが小さい範囲ではキャッシュサイズの増加はそれほどキャッシュヒット率の上昇に貢献しないが，あるキャッシュサイズの範囲ではキャッシュサイズの増加でキャッシュヒット率が急激に上昇し，そして，あるキャッシュサイズより大きいサイズではキャッシュヒット率の上昇はあまりない。
【００４８】
したがって，図５中の原点から延びる直線（一点鎖線）がキャッシュヒット率特性H(x)に接する点のキャッシュサイズｘ１が，キャッシュサイズの増大がキャッシュヒット率の向上に最も寄与する基準点となる。
【００４９】
なお，図５のキャッシュヒット率を調査する段階で，同時に単位時間当たりのメモリアクセス回数（メモリアクセス頻度）とキャッシュヒット数とキャッシュミスヒット数が取得される。
【００５０】
図２０は，図３の工程S2とS3のサーバシステム内での処理を示す図である。また，図２１は，図２０のサーバシステム内の処理に対応するフローチャート図である。これらの図を参照して，図３の工程S2,S3の処理を説明する。
【００５１】
まず，サーバシステムの入力部からアプリケーションプログラムのソースコードが入力される（S201）。そして，コンパイラ２１が，このアプリケーションプログラムのソースコードをコンパイルしてオブジェクトコード（機械語）に変換する（S202）。この機械語命令への変換については，図４で説明したとおりである。
【００５２】
次に，開発環境下でサーバシステムの入力部からシステム稼働が起動される（S301）。これに応答して，OS20内のプロセス管理部２０２がプロセス立ち上げ処理を実施してシステム稼働処理を行う（S302）。
【００５３】
この開発環境下でのプロセス稼働中に，OS20内のキャッシュ割当管理部２０４は，特性調査対象のアプリケーションプログラムに含まれている各専用領域獲得要求に対して，その要求を許可し，割り当てた専用キャッシュ領域を使用しながら命令を実行して，メモリアクセス頻度とキャッシュヒット率を計測する。この場合，キャッシュ割当管理部２０４は，専用キャッシュ領域のサイズを０から最大値まで変化させながらそれぞれのサイズでのメモリアクセス頻度とキャッシュヒット率を計測する（S303）。これにより，図５に示した特性グラフを生成する。
【００５４】
特性調査の開始に当たり，キャッシュ割当管理部２０４は，特性調査対象の専用領域獲得要求に対応したプロセスのセクタID変換テーブル１３１を読み出して，調査対象のローカルセクタIDに，割り当てる専用キャッシュ領域のキャッシュセクタIDを対応付け，その専用キャッシュ領域に設定したサイズを割り当てる（S304）。また，調査対象以外の専用領域獲得要求に対応したローカルセクタIDに対しては，共用キャッシュ領域を示すキャッシュセクタID=0を対応付ける。その結果，キャッシュメモリ１３０には，調査対象の処理のローカルセクタIDに対してのみ指定されたサイズの専用キャッシュ領域が生成される（S305)。
【００５５】
プロセス管理部２０２は，特性調査の開始の準備が整ったところで，調査対象プロセスの起動を行い（S306)，アプリケーションプログラム２２内の調査対象プロセスが実行される（S307)。この調査対象プロセスの実行中は，割り当てられた専用キャッシュ領域を使用してメモリアクセスが実行される。
【００５６】
全プロセスの全専用領域獲得要求の特性調査が終了するまで，処理S303-S307が繰り返し実行される。そして，全てが終了すると，キャッシュ割当管理部２０４は，調査対象プロセスのメモリアクセス頻度とキャッシュヒット率を記録して，特性調査を終了する（S308）。
【００５７】
図３に戻り，本番環境下でシステムを稼働すると（S10），次のような処理が実行される。OS12は，バックグランドで共用キャッシュ領域と専用領域獲得要求で獲得された専用キャッシュ領域のキャッシュヒット率を調査する（S11)。この調査で，共用キャッシュ領域と専用キャッシュ領域でのメモリアクセス頻度なども取得される。具体的には，各領域へのアクセス関数のカウンタや，キャッシュヒット回数のカウンタなどを利用して，調査する。
【００５８】
OS20は，上記の調査結果に基づいて，共用キャッシュ領域と専用キャッシュ領域の適正比率や，専用領域獲得要求毎の実キャッシュ有効利用度などを算出する。共用・専用領域の適正比率は，後で詳述するが，両領域へのメモリアクセス数の比率により算出される。また，実キャッシュ有効利用度は，専用キャッシュ領域を利用している場合と共用キャッシュ領域を利用している場合のキャッシュヒット率の差分に，メモリアクセス頻度を乗算し，さらに，優先度を乗算して求められる。後に詳述する。
【００５９】
そして，CPU12は，図４で説明したローカルセクタID付きの命令を実行する（S13)。この命令の実行については後で詳述する。
【００６０】
さらに，OS20は，キャッシュ領域の動的割当処理を行う（S14)。キャッシュメモリ内の領域の動的割当処理では，第１に，専用領域獲得要求が発行されたときに（S15)，OS20内のキャッシュ割当管理部２０４が専用領域獲得要求について専用キャッシュ領域を割り当てるべきか否かの判定処理を行い，専用キャッシュ領域か，共用キャッシュ領域か，または攪乱処理キャッシュ領域かを割り当てる（S16)。
【００６１】
第２に，定期的な割当見直しタイミングで（S17)，OS20内のキャッシュ割当管理部２０４が，定期割当見直し処理を実行する（S18)。この定期割当見直し処理には，（１）割当済み専用領域獲得要求の割当済み専用キャッシュ領域と未割当専用領域獲得要求が要求する未割当専用キャッシュ領域とを入れ替えるべきか否かの判定処理，（２）共用キャッシュ領域の一部を未割当専用領域獲得要求に専用キャッシュ領域として割り当てるべきか否かの判定処理，（３）その逆の，割当済み専用キャッシュ領域を開放して共用キャッシュ領域に変更すべきか否かの判定処理などが含まれる。そして，定期割当見直し処理S18では，キャッシュ割当管理部２０４が，判定結果に応じて，専用キャッシュ領域の置き換えや，専用キャッシュ領域の割当や開放を行う。
【００６２】
第３に，専用領域開放要求が発行されたときに（S19)，キャッシュ割当管理部２０４が，要求された専用キャッシュ領域を開放して共用キャッシュ領域の一部にする開放要求処理を行う（S20)。
【００６３】
上記の工程S11-S20が，システム稼働が終了するまで繰り返される。
【００６４】
図６は，キャッシュ領域の構成と専用領域獲得要求についての割当について示す図である。キャッシュメモリ１３０は，共用キャッシュ領域130_1と，動的割当領域である専用キャッシュ領域130_2とを有する。専用キャッシュ領域130_2には，専用領域獲得要求に対して割り当てられる複数の専用キャッシュ領域と攪乱処理キャッシュ領域とが含まれる。つまり，攪乱処理キャッシュ領域は，一種の専用キャッシュ領域である。
【００６５】
キャッシュメモリ１３０は，共用キャッシュ領域と専用キャッシュ領域にセクタ分割されていて，各領域にはセクタIDが０から順に割り振られている。共用キャッシュ領域はセクタID=0である。共用キャッシュ領域は，複数のプロセスやプロセス内の対象処理が共通で使用するキャッシュ領域である。一方，専用キャッシュ領域は，判定により許可されたサイズを有し，割り当てられた専用領域獲得要求の対象プロセスが占有して使用するキャッシュ領域である。さらに，専用キャッシュ領域の一形態である攪乱処理キャッシュ領域は，専用領域獲得要求の対象処理のメモリアクセスが広範囲のアドレスに対して行われ，共用キャッシュ領域に割り当てるとその共用キャッシュ領域内の他のデータを追い出して攪乱してしまう場合に割り当てられる。したがって，複数の専用領域獲得要求に対して攪乱処理キャッシュ領域が割り当てられる場合がある。
【００６６】
専用領域獲得要求は，前述したとおり，アプリケーションプログラムAPL内のプロセス毎にあるいはプロセス内の対象処理毎に発行され，判定結果に応じて，専用領域獲得要求に専用キャッシュ領域が割り当てられる。したがって，必ずしも専用キャッシュ領域が割り当てられるとは限らず，共用キャッシュ領域が割り当てられて未割当専用領域獲得要求として専用キャッシュ領域の割当まで待たされる場合がある。キャッシュメモリ１３０は，サイズや分割可能数に上限があるからである。
【００６７】
図６に示した例では，プロセス１の専用領域獲得要求要求０，プロセス２の専用領域獲得要求０，３は，判定の結果共用キャッシュ領域130_1が割り当てられている。また，プロセス２の専用領域獲得要求１，２，４には，それぞれ専用キャッシュ領域であるセクタＩＤ＝１，２，３が割り当てられている。また，プロセス３の専用領域獲得要求０に対しては，判定の結果，攪乱処理キャッシュ領域であるセクタＩＤ＝４が割り当てられている。
【００６８】
図２２は，図３の工程S13，S16，S19のサーバシステム内での処理を示す図である。また，図２３は，図２２のサーバシステム内の処理に対応するフローチャート図である。これらの図を参照して，専用領域獲得要求での専用キャッシュ領域の割当と，その専用キャッシュ領域を利用するメモリアクセスと，専用領域開放要求での専用キャッシュ領域の開放とを説明する。
【００６９】
［専用領域獲得要求での専用キャッシュ領域の割当S15,S16］
まず，アプリケーションプログラム２２のプロセス内で，専用領域獲得要求が発行される（S400）。この専用領域獲得要求にはローカルセクタIDが付与されている。これに応答して，OS20内のキャッシュ割当管理部２０４は，専用キャッシュ領域の割当を許可するか否かの判定を実行する（S401）。この判定処理については，後述する。そして，割当が許可されると，キャッシュ割当管理部２０４は，割り当てる専用キャッシュ領域のキャッシュサイズをキャッシュセクタ情報設定部１３２に設定するとともに，キャッシュシステム１３内のセクタID変換テーブル１３１に，ローカルセクタIDに対応するキャッシュセクタIDの欄に，割り当てた領域のセクタIDを設定する（S402)。
【００７０】
図７は，変換テーブルの一例を示す図である。図７中には，プロセスＩＤ＝２，ローカルセクタＩＤ＝２の専用領域獲得要求３０に対して，プロセスＩＤ＝２の変換テーブル１３１内のローカルセクタＩＤ＝２に対してキャッシュセクタＩＤ＝２の専用キャッシュ領域のセクタＩＤが記入されている。
【００７１】
［専用キャッシュ領域を利用するメモリアクセスS13］
アプリケーションプログラム２２のプロセスが実行される場合，使用する専用キャッシュ領域を識別するローカルセクタID付きの命令（機械語命令）が発行される（S403）。そして，CPU12は，そのローカルセクタID付きの命令を解釈して実行する（S403-1)。この実行に際し，CPU12は，セクタID変換テーブル１３１を参照してローカルセクタIDに対応するキャッシュセクタIDを取得する(S403-2)。すなわち，図７中にS403-2として示す通りである。
【００７２】
そして，キャッシュアドレス変換部133が，メモリアクセスアドレスをキャッシュメモリ内のアドレスに変換して，キャッシュメモリ１３０内のキャッシュセクタＩＤ＝２の専用領域獲得要求キャッシュ領域にキャッシュアクセスする(S403-3)。ここで，キャッシュミスヒットが発生すると，バスインターフェース１４を介してメインメモリ１６にアクセスする（S403-4)。キャッシュヒットの場合は，専用キャッシュ領域内のデータが読み出されまたは専用キャッシュ領域にデータが書き込まれる。
【００７３】
以上のように，専用キャッシュ領域が割り当てられている場合は，プロセス内の命令が割り当てられている専用キャッシュ領域を使用してメモリアクセスする。
【００７４】
［専用領域開放要求での専用キャッシュ領域の開放］
次に，アプリケーションプログラム２２のプロセスで，専用領域開放要求が発行されると（S404），キャッシュ割当管理部２０４は，専用キャッシュ領域の開放処理を実行する（S405）。具体的には，セクタID変換テーブル内のローカルセクタIDに対応するキャッシュセクタIDを共用キャッシュ領域のID=0に変更する（S406）。すなわち，図７中にS406として示す通りである。また，キャッシュセクタ情報設定部１３２内の解放するキャッシュセクタIDのサイズが０に変更される。
【００７５】
［本実施の形態のキャッシュ領域の動的割当処理の詳細］
以下，キャッシュ領域の動的割当処理の詳細について説明する。動的割当処理は，図３で示されるとおり，専用領域獲得要求に対する判定処理S16と，定期的な割当見直しタイミングでの判定処理S18とがある。それらについて順に説明する前に，キャッシュ領域の割当判定の指標を説明する。
【００７６】
［キャッシュ領域の割当判定の指標］
［実キャッシュヒット数］
キャッシュメモリを共用キャッシュ領域と複数の専用キャッシュ領域（攪乱処理キャッシュ領域を含む）とに分割する目的は，キャッシュメモリ全体の単位時間当たりのキャッシュヒット数を最大化することにある。この単位時間当たりのキャッシュヒット数は，次の式により求めることができる。
単位時間当たりのキャッシュヒット数＝キャッシュヒット率＊メモリアクセス頻度（１）
したがって，専用領域獲得要求に専用キャッシュ領域を割り当てた場合に，専用領域獲得要求の対象処理のキャッシュヒット数が高ければ，その要求に専用キャッシュ領域を割り当てることで全体のキャッシュヒット数を高めることができる。そして，キャッシュヒット率が高いがメモリアクセス頻度が低い対象処理に対して専用キャッシュ領域を割り当てるよりも，キャッシュヒット率が多少低くてもメモリアクセス頻度が高い対象処理に専用キャッシュ領域を割り当てた方が，式（１）を大きくすることができ，メインメモリにアクセスする時間を短縮する回数が多くなり，全体としてメモリアクセスが短縮できる。
【００７７】
一方，アプリケーションプログラムの処理には優先度があり，特定のアプリケーションプログラムや特定のプロセスを特に高速化したいなどの要求がある。この要求が高いほど処理の優先度が高い。したがって，実際には以下の実キャッシュヒット数を最大化することがキャッシュ領域の動的割当の目的になる。
実キャッシュヒット数＝Σ（処理のキャッシュヒット数＊処理優先度）      （２）
すなわち，上記式（２）において，Σは，専用領域獲得要求の対象とする処理のキャッシュヒット数にその処理の優先度を乗算したものを，全処理分累積することを意味する。
【００７８】
［メモリアクセスの局所性］
次に，専用領域獲得要求の対象の処理には，メモリアクセスの局所性が高いものと低いものがある。メモリアクセスの局所性は，メモリアクセスのアドレスの領域が狭い範囲に集中していれば局所性は高く，広い範囲に分散していれば局所性は低くなる。対象処理のメモリアクセスの局所性が低いと，キャッシュヒット率は低くなる。ただし，キャッシュサイズを大きくすることで局所性が高まり，キャッシュヒット率が高くなる場合がある。
【００７９】
図５に示されたキャッシュサイズに対するキャッシュヒット率の特性曲線の一例をみれば，上記の局所性とキャッシュサイズとの関係が理解できる。この例では，キャッシュサイズが小さい場合は，メモリアクセスのアドレス範囲に比較してキャッシュサイズが小さいため，キャッシュヒット率は向上していない。しかし，キャッシュサイズを増大させることで，メモリアクセスのアドレス範囲に比較してキャッシュサイズが追いつき，キャッシュヒット率が向上している。そして，キャッシュサイズを基準値ｘよりさらに大きくしてもキャッシュヒット率は向上していない。
【００８０】
さらに，メモリアクセスの局所性が極端に高い場合は，キャッシュサイズを増大しても，キャッシュヒット率を向上させることができず，キャッシュミスヒット率が高止まりする。このようなキャッシュミスヒット率が高い処理を，共用キャッシュ領域に割り当てると，キャッシュミスヒットが頻発して他の処理のデータを追い出してしまうことになる。このような処理を攪乱処理と称する。
【００８１】
したがって，このような攪乱処理に対しては，共用キャッシュ領域を割り当てるよりも専用のキャッシュ領域を割り当てることが，共有キャッシュ領域のキャッシュヒット率向上に有益である。ただし，このような攪乱処理は，専用キャッシュ領域を割り当てられたとしてもキャッシュミスヒットを頻発するので，式（２）の実キャッシュヒット率は上がらない。そこで，攪乱処理には，攪乱処理用のキャッシュ領域を割り当て，しかも，複数の攪乱処理に，共通の攪乱処理用キャッシュ領域を割り当てて，それらの処理を他のキャッシュ領域から隔離することが有効である。
【００８２】
［キャッシュ有効利用度，実キャッシュ有効利用度，キャッシュ攪乱力］
次に，専用領域獲得要求に対して専用のキャッシュ領域を割り当てるか否かの判断の指標として，キャッシュ有効利用度，実キャッシュ有効利用度，キャッシュ攪乱力について説明する。
【００８３】
キャッシュ有効利用度は，専用のキャッシュ領域を割り当てた場合のキャッシュヒット数よりも，共用キャッシュ領域を割り当てた場合のキャッシュヒット数がどのくらい向上するかを示す度合いである。すなわち，キャッシュ有効利用度は次の式（３）のとおりである。
キャッシュ有効利用度＝｛（専用領域時キャッシュヒット率−共用領域時キャッシュヒット率）＊メモリアクセス頻度｝／使用専用キャッシュ領域のサイズ      （３）
つまり，キャッシュ有効利用度（度合い）とは，共用キャッシュ領域を割り当てた場合よりも専用キャッシュ領域を割り当てた場合のほうがどれくらいキャッシュヒット率が増大するかを示すキャッシュヒット率の差分に，メモリアクセス頻度（単位時間当たりのメモリアクセス数）を乗算したキャッシュヒット数の増大を，単位キャッシュ領域当たりで示す指標である。
【００８４】
この場合，専用領域時キャッシュヒット率とメモリアクセス頻度は，事前に行う特性調査結果から取得することができ，共用領域時キャッシュヒット率は，本番稼働時に取得することができる。また，既に専用キャッシュ領域が割り当てられている場合は，その割当済み専用キャッシュ領域について，キャッシュヒット率を取得することが可能である。したがって，割当済み専用キャッシュ領域については，割り当てられたキャッシュサイズに対する実際のキャッシュヒット率を取得し，事前の特性調査での同じキャッシュサイズに対するキャッシュヒット率との比率を，事前特性調査で得た全キャッシュサイズに対するキャッシュヒット率に乗算して，推定キャッシュヒット率を求めることができる。この推定キャッシュヒット率については，後で再度詳述する。
【００８５】
次に，アプリケーションプログラムのプロセスには前述した優先度が存在し，優先度が高い処理ほど，優先的にキャッシュヒット数を向上させることが必要になる。そこで，以下の式（４）に示すとおり，上記のキャッシュ有効利用度に，対応する処理の優先度を乗算することで，実キャッシュ有効利用度を算出することができる。
実キャッシュ有効利用度＝キャッシュ有効利用度＊対応処理優先度      （４）
式（３）（４）において，専用領域時キャッシュヒット率を図５のH(x)に，共用領域時キャッシュヒット率をBASEHに，メモリアクセス頻度をMACCESSに，使用専用キャッシュ領域のサイズをｘに，対応処理優先度をPRIORITYに置き換えると，式（４）の実キャッシュ有効利用度は，次の通りになる。
実キャッシュ有効利用度＝［｛H(x)−BASEH｝*MACCESS*PRIORITY］／ｘ    （４）
この実キャッシュ有効利用度についても，割当済み専用キャッシュ領域に対しては上記の推定キャッシュヒット率を利用することも可能である。
【００８６】
式（３）のキャッシュ有効利用度と，それに優先度を乗じた式（４）の実キャッシュ有効利用度とは，主に，専用領域獲得要求に対して専用領域を割り当てるべきか否かの判断指標として利用される。
【００８７】
次に，前述のメモリアクセスの局所性が極端に高いほど，他の処理と同じ共用キャッシュ領域に割り当てられると他の処理のデータを追い出す力が強くなる。この追い出す力をキャッシュ攪乱力とする。このキャッシュ攪乱力は，以下の式（５）に示したとおり，キャッシュミスヒット率（１−キャッシュヒット率）にメモリアクセス頻度を乗算して算出することができる。
キャッシュ攪乱力＝（１−キャッシュヒット率）＊メモリアクセス頻度    （５）
キャッシュ攪乱力は，キャッシュ有効利用度とは相反する値となる。そして，このキャッシュ攪乱力は，開発環境下での特性調査でキャッシュヒット率とメモリアクセス頻度が取得されるので，予め処理毎にまたはプロセス毎に算出しておくことができる。このキャッシュ攪乱力がある基準値以上の処理は，キャッシュ攪乱処理と見なして，共用キャッシュ領域や他の専用キャッシュ領域から隔離して，攪乱処理キャッシュ領域に割り当てることで，他の処理のキャッシュヒット率の低下を抑制することができる。
【００８８】
キャッシュ攪乱力は，専用領域獲得要求に対して，専用領域を割り当てるべきか判定するときに，攪乱処理用の専用領域に割り当てるべきか否かの判断指標として利用される。
【００８９】
［専用領域獲得要求判定処理S16（１）］
図８は，図３に示した専用領域獲得要求に対する判定処理S16について第１の例のフローチャート図である。この第１の判定処理では，OS20内のキャッシュ割当管理部２０４が，専用領域獲得要求の対象処理のキャッシュ攪乱力（式（５））を算出して判定し（S30），キャッシュ攪乱力がある第１の基準値より高い場合は（S31のYES)，その専用領域獲得要求に攪乱処理キャッシュ領域を割り当てる（S32）。
【００９０】
さらに，キャッシュ割当管理部２０４は，キャッシュ攪乱力が第１の基準値以下の場合は（S31のNO），その専用領域獲得要求の対象処理の実キャッシュ有効利用度（式（４））を算出して判定し（S33)，実キャッシュ有効利用度が第２の基準値より高い場合は（S34のYES)，その専用領域獲得要求に専用キャッシュ領域を割り当て（S35），実キャッシュ有効利用度が第２の基準値以下の場合は（S34のNO)，その専用領域獲得要求に共用キャッシュ領域を割り当てる（S36）。
【００９１】
図９は，専用領域獲得要求に専用キャッシュ領域を割り当てる場合を説明する図である。図９中（１）のキャッシュメモリ１３０の分割状態において，専用領域獲得要求３０が発行されたとする。この場合，専用領域獲得要求の対象処理の実キャッシュ有効度を式（４）に基づいて算出する。そして，その実キャッシュ有効度が第２の基準値より高ければ，図９中（２）のキャッシュメモリ１３０のように，その専用領域獲得要求３０に対してキャッシュセクタＩＤ＝２の専用キャッシュ領域を割り当てる。その結果，この割り当てられた専用キャッシュ領域は，それ以降，割当済み専用領域と称し，割り当てられた専用領域獲得要求は割当済み専用領域獲得要求と称することとする。
【００９２】
さらに，割り当てる専用キャッシュ領域のサイズについて説明する。図５に示したとおり，処理のキャッシュヒット率は，キャッシュサイズを増大することで急激に上昇し，ある基準キャッシュサイズｘ１で飽和する。そこで，実キャッシュ有効利用度は，図５のキャッシュサイズ対キャッシュヒット率の特性曲線の基準キャッシュサイズｘ１でのキャッシュヒット率を元に算出することが望ましい。そして，そのようにして算出した実キャッシュ有効利用度が第２の基準値より大きい場合には，その専用領域獲得要求に対して割り当てる専用キャッシュ領域のサイズは，基準キャッシュサイズｘ１に設定するのが望ましい。
【００９３】
このように，専用キャッシュ領域のキャッシュサイズを自動的に基準キャッシュサイズｘ１に割り当てるようにすることで，最適なキャッシュサイズを割り当てることが可能になる。
【００９４】
図９によれば，実キャッシュ有効利用度が第２の基準値より高い専用領域獲得要求に次々と専用キャッシュ領域を割り当てていくと，キャッシュメモリ１３０が専用キャッシュ領域であふれることになる。そこで，後述する定期割当見直し処理（３）により，共用キャッシュ領域と専用キャッシュ領域とのバランスを適正化することで，キャッシュメモリが専用キャッシュ領域であふれることを回避することができる。
【００９５】
［専用領域獲得要求判定処理S16（２）］
図１０は，図３に示した専用領域獲得要求に対する判定処理S16について第２の例のフローチャート図である。この第２の判定処理では，OS20内のキャッシュ割当管理部２０４が，専用領域獲得要求の対象処理のキャッシュ攪乱力を算出して第１の基準値より大きい場合に攪乱処理キャッシュ領域を割り当てる(S30,S31,S32)ことは同じである。そして，キャッシュ割当管理部２０４は，キャッシュ攪乱力が第１の基準値以下の場合に，専用領域獲得要求の対象処理と割当済専用領域の実キャッシュ有効利用度（望ましくは実キャッシュ有効利用値の増加率）を比較判定して（S37），入れ替えることがより効率的である場合は（S37のYES)，専用領域獲得要求に専用領域を割り当て，割当済専用領域を開放して，両者を入れ替える（S39)。逆に，入れ替えるのが効率的ではない場合は（S37のNO)，専用領域獲得要求に共用キャッシュ領域を割り当てる（S40）。
【００９６】
図１１は，専用領域獲得要求と割当済専用領域獲得要求との間で専用キャッシュ領域を入れ替える処理を説明する図である。図１１中（１）のキャッシュメモリ１３０のような分割状態において，専用領域獲得要求３０が発行されると，その対象処理のキャッシュ攪乱力が第１の基準値以下の場合，割当済み専用領域と入れ替えて新たな専用領域を割り当てることで，キャッシュメモリ全体のキャッシュヒット数を増大できるか否かを判定する。
【００９７】
図１１に示した例では，キャッシュセクタID=2の割当済専用領域の実キャッシュ有効利用度よりも，専用領域獲得要求の対象処理の実キャッシュ有効利用度のほうが，入れ替えに要するオーバーヘッド値を超えて高いため，割当済専用領域を開放して共用キャッシュ領域に移動し，代わりに，専用領域獲得要求に新たな専用キャッシュ領域を割り当てている。
【００９８】
そこで，上記の比較判定S37について説明する。
【００９９】
まず，専用キャッシュ領域が既に割り当てられている場合と，未だ割り当てられていない場合とでキャッシュヒット率の取り扱いを異ならせる。割当済専用領域に対しては，推定キャッシュヒット率を採用し，未割当専用領域に対しては，事前調査で取得したキャッシュヒット率を採用する。
【０１００】
図１２は，推定キャッシュヒット率を示す図である。図中，横軸はキャッシュサイズ，縦軸はキャッシュヒット率である。実線のH(x)は，事前調査で取得したキャッシュサイズに対するキャッシュヒット率の特性曲線である。それに対して，割当済み専用キャッシュ領域の場合は，割り当てられたキャッシュサイズｘ２に対するキャッシュヒット率を，キャッシュシステム内のカウンタなどから取得することができる。
【０１０１】
その場合は，キャッシュサイズｘ２での現在のキャッシュヒット率SH(x2)と，事前調査時のキャッシュヒット率H(x2)との比率SH(x2)/H(x2)を，事前調査時の全キャッシュサイズに対するキャッシュヒット率H(x)に乗じることで，推定キャッシュヒット率SH(x)を得ることができる。即ち，次の式（６）の通りである。
SH(x)＝｛SH(x2)/H(x2)｝＊H(x)      （６）
この推定キャッシュヒット率SH(x)を利用すれば，上記の式（４）から，割当済み専用キャッシュ領域の実キャッシュ有効利用度は，次の式（７）のように導くことができる。
CCn＝［｛SH(x)−BASEH｝*MACCESSn*PRIORITYn］／ｘ    （７）
ここで，ｎは，専用領域獲得要求の対象処理を示す。したがって，式（７）はある一つの対象処理に対する推定キャッシュヒット率SH(x)を利用した実キャッシュ有効利用度である。そして，未割当の専用領域獲得要求に対する実キャッシュ有効利用度は，前述の式（４）のとおりであり，以下のようになる。
実キャッシュ有効利用度n＝［｛H(x)−BASEH｝*MACCESSn*PRIORITYn］／ｘ    （４）
専用領域獲得要求にはあるサイズｘの専用キャッシュ領域が割り当てられる。したがって，割当済み専用キャッシュ領域との入れ替えを判定するためには，単位領域当たりの実キャッシュ有効利用度の増加値（実キャッシュ有効利用度の増加率）を考慮することが有効である。これを利用することで，割当済専用キャッシュ領域のサイズを＋１するか−１するかにより実キャッシュ有効利用度がどの程度変化するかを考慮することができる。
【０１０２】
上記の実キャッシュ有効利用度の増加率CHHn(x)は，割り当てる専用キャッシュ領域のサイズをｘ−１からｘに増加したときの実キャッシュ有効利用度の増加量であり，式（７）から次の式（８）のようになる。
CHHn(x)＝｛SH(x)−SH(x-1)｝*MACCESSn*PRIORITYn      （８）
式（８）からわかるとおり，式（７）のように領域サイズｘで除算していないので，CHHn(x)は，実キャッシュ有効利用数の増加率である。以下，式（８）を実キャッシュ有効利用数の増加率と称する。
【０１０３】
専用領域獲得要求に専用領域が未割当の場合は，推定キャッシュヒット率SH(x)を利用できないので，事前調査でのキャッシュヒット率H(x)を利用して，上記式（８）の実キャッシュ有効数の増加率CHHn(x)は，次の式（９）のようになる。
CHHn(x)＝｛H(x)−H(x-1)｝*MACCESSn*PRIORITYn      （９）
本実施の形態の判定工程S37では，式（８）の実キャッシュ有効利用数の増加率を割当済み専用キャッシュ領域について算出した割当済専用領域リストLIST-FREEを利用する。以下，この割当済専用領域リストLIST-FREEについて説明する。
【０１０４】
図１３は，割当済専用領域リストLIST-FREEと未割当専用領域リストLIST-DEMANDとを示す図である。図１３の右側が割当済専用領域リストLIST-FREEを示す。キャッシュメモリ１３０において，割当済みの専用領域（キャッシュセクタID=1,2）を，共用キャッシュ領域（キャッシュセクタID=0）に入れ替える場合に，実キャッシュ有効利用数の増加率がどうなるかを式（８）によって算出しておき，その増加率が少ない順に割当済専用領域リストLIST-FREEに登録しておく。増加率が少ないとは，割当済専用領域を共用領域に単位領域だけ入れ替えた場合の実キャッシュヒット数の減少が少ないことを意味し，現在のキャッシュメモリの有効利用に寄与していないことを意味する。
【０１０５】
以上のように，図１３の右側の割当済専用領域リストLIST-FREEには，増加率が小さい順にその増加率（LIST-FREE.CHH）が並べられている。
【０１０６】
図１３の左側が未割当専用領域リストLIST-DEMANDを示す。キャッシュメモリ１３０において，専用領域獲得要求に対して専用領域が未割当の場合には共用領域が割り当てられていて，さらに，専用領域獲得要求に対して一部のサイズだけ専用領域が割当られている場合には残りのサイズは共用領域に割り当てられているので，それらの専用領域に割り当てられていない未割当専用領域が，この未割当専用領域リストLIST-DEMANDに含まれる。
【０１０７】
そして，それらの未割当専用領域を共用領域から専用領域に入れ替えた場合に，実キャッシュ有効利用数の増加率がどうなるかを式（９）によって算出しておき，その増加率が多い順に未割当専用領域リストLIST-DEMANDに登録しておく。増加率が多いとは，未割当専用領域を共用領域から専用領域に入れ替えた場合の実キャッシュヒット数の増加が多いことを意味し，入れ替えることによりキャッシュメモリの有効利用に大きく寄与することを意味する。
【０１０８】
以上のように，図１３の左側の未割当専用領域リストLIST-DEMANDには，増加率が大きい順にその増加率（LIST-DEMAND.CHH）が並べられている。
【０１０９】
そこで，本実施の形態の判定工程S37では，専用領域獲得要求３０に対して専用領域を割り当てた場合の実キャッシュ有効利用数の増加と，割当済専用領域リストLIST-FREEに登録されている割当済専用領域の実キャッシュ有効利用数の減少の差分が，入れ替えに要するオーバーヘッド値を超える場合は，入れ替えして専用領域獲得要求に専用領域を割り当てるべきと判断する。
【０１１０】
この判断は，次の式（１０）を満たすか否かにより行われる。
ｙ＊CCn(y)−Σ(m=1-y)LIST-FREEm.CHH＞OVH2*｛Σ(m=1-y)LIST-FREEm.PRIORITY｝      （１０）
ここで，ｙは専用領域のサイズｙを，ｍはリスト内の番号を示し，LIST-FREEm.CHH は実キャッシュ有効利用数の増加率を示し，OVH2は入れ替えに要するオーバーヘッド値を示し，LIST-FREEm.PRIORITYはその処理の優先度を示す。つまり，オーバーヘッド値OVH2が優先度で重み付けされている。
【０１１１】
OS20内のキャッシュ割当部２０４は，y=1から式（１０）を判定していき，式（１０）の条件を満たす最大のサイズｙを，専用領域獲得要求に割り当てる専用領域のサイズとする。すなわち，図１３に示した専用領域獲得要求３０と割当済専用領域リストLIST-FREEとの間の矢印で示した入れ替えを行う。その結果，サイズｙに対応する割当済専用領域が共用領域に開放される。どのサイズｙでも式（１０）を満たさない場合は，専用領域獲得要求には専用領域を割り当てない。
【０１１２】
図１２に示されるとおり，キャッシュヒット率の特性は，キャッシュサイズをある程度大きくすると急激に増加する傾向にある。したがって，新たに割り当てる専用領域のサイズｙを１から大きくすることで，式（１０）の条件を満たすサイズｙが見つかることがある。特に，サイズｙが基準値ｘ１の付近で式（１０）の条件が満たされることがある。
【０１１３】
式（１０）の条件を満たすキャッシュサイズｙと，専用領域獲得要求３０が要求するキャッシュサイズとの関係は，例えば，次の通りである。条件を満たすキャッシュサイズｙが要求するキャッシュサイズ以下であれば，キャッシュサイズｙから要求するキャッシュサイズまでのサイズを割り当てることでキャッシュメモリの効率を向上することができる。一方，キャッシュサイズｙが要求するキャッシュサイズを超えている場合は，式（１０）の条件は満たされないと判定して専用領域を割り当てないのが好ましい。
【０１１４】
図２４は，本専用領域獲得要求判定処理S16（２）のフローチャート図である。図１０と同じ処理には同じ番号を与えている。まず，キャッシュ割当管理部２０４は，キャッシュ攪乱力が第１の基準値を超えるか判定し（S30,31），超えていれば，専用の攪乱処理キャッシュ領域を割り当てる（S32）。その結果，セクタID変換テーブル１３１で，専用領域獲得要求のローカルセクタIDに，攪乱処理キャッシュ領域のキャッシュセクタIDが紐付けられる（S32-1)。
【０１１５】
キャッシュ割当管理部２０４は，キャッシュ攪乱力が第１の基準値を超えていなければ，専用キャッシュ領域を割り当てるべきか否かの判定を，式（１０）を満たすサイズｙが存在するか否かで行う(S37,38）。キャッシュ割当管理部２０４は，条件を満たさない場合は，専用領域獲得要求に対して共用領域を割り当てて（S40)，条件を満たす場合は，専用領域獲得要求に対してサイズｙの専用領域を割り当てることをハードウエアに指示する（S39)。
【０１１６】
ハードウエアでは，キャッシュ割当管理部２０４が，キャッシュセクタ情報設定部１３２に，新規に割り当てる専用キャッシュ領域とそのサイズｙを設定する（S39-1)。また，入れ替え対象の割当済専用領域のキャッシュセクタIDの削除やサイズ変更も同時に行う（S39-1)。そして，キャッシュ割当管理部２０４が，セクタID変換テーブル１３１において，専用領域獲得要求のローカルセクタIDに，割り当てた専用キャッシュ領域のキャッシュセクタIDが紐付けられる（S39-2)。
【０１１７】
［定期割当見直し処理S18］
次に，図３の定期割当見直し処理S18について３つの例を説明する。専用領域獲得要求に応答して，OS20内のキャッシュ割当管理部２０４は，専用キャッシュ領域を割り当てるべきか否か，割当済専用領域と入れ替えすべきか否かを判定した。
【０１１８】
これに対して，キャッシュ割当管理部２０４は，定期的に，例えば２秒毎に，専用領域獲得要求に割り当てた割当済専用領域と，専用領域獲得要求に未だ割り当てていない未割当専用領域とを入れ替えるべきか否かの判定（例１，例２）と，共用領域と全専用領域とのサイズの比率がアクセス頻度の比率に基づく理想値とずれている場合に，共用領域を専用領域として未割当の専用領域獲得要求に新たに割り当てるか，または，割当済専用領域を開放して共用領域に入れ替えるかの判定（例３）とを行う。これらの判定において，前述の割当済専用領域リストLIST-FREEと未割当専用領域リストLIST-DEMANDを利用する。
【０１１９】
［定期割当見直し処理S18（１）］
図１４は，定期割当見直し処理S18の第１の例のフローチャート図である。図１５は，定期割当見直し処理S18の第１の例を説明するための図である。図１４において，定期的割当見直し処理S18では，キャッシュ割当管理部２０４は，未割当専用領域と割当済専用領域の入れ替え判定を行う（S50)。この判定処理では，図１３で説明した未割当専用領域リストLIST-DEMAND内の未割当専用領域の実キャッシュ有効利用数の増加率CHHn(x)と，割当済専用領域リストLIST-FREE内の割当済専用領域の実キャッシュ有効利用数の増加率CHHn(x)とを比較する（S51)。比較対象は，例えば，図１５に矢印で示されるとおり，未割当専用領域リストLIST-DEMAND内の最上位にある最大の増加率と，割当済専用領域リストLIST-FREE内の最上位にある最小の増加率とを比較し，さらに，下位にある増加率どうしを比較する。
【０１２０】
そして，以下の式（１１）の条件を満たす場合は，入れ替えで効率がアップすると見なすことができる（S52)。
LIST-DEMANDm.CHH - LIST-FREEm.CHH ＞ OVH2 * LIST-FREEm.PRIORITY    （１１）
ここで，ｍはリストの順番を示し，OVH2は入れ替えに要するオーバヘッド値を示し，LIST-FREEm.PRIORITYは割当済専用領域リストLIST-FREE内の処理の優先度を示す。つまり，比較対象の未割当専用領域の増加率から割当済専用領域の増加率への差分が，入れ替えに伴うオーバーヘッド値OVH2を優先度で重み付けした値を超える場合は，入れ替えで効率がアップすると見なされる。
【０１２１】
式（１１）の条件が，両リストの先頭（ｍ＝１）から順番に判定され，この条件が満たされなくなる順番まで繰り返し判定される。ただし，式（１１）には優先度LIST-FREEm.PRIORITYが算入されているので，右辺の値は優先度に応じて変動する。したがって，未割当専用領域リストLIST-DEMAND内の最上位にある最大の増加率CHHと比較される対象は，割当済専用領域リストLIST-FREE内の最上位の増加率CHHだけでなく，最上位から順に下位の増加率CHHも含まれる。式（１１）を満たす組み合わせが見つかれば，それらが入れ替え対象になる。そして，未割当専用領域リストLIST-DEMAND内の次の増加率CHHについて，上記と同じ比較が行われ，式（１１）を満たす組み合わせが検出される。
【０１２２】
入れ替えで効率がアップすると見なされる場合は，キャッシュ割当管理部２０４は，未割当専用領域と割当済専用領域とを入れ替える処理を行う（S53)。具体的には，キャッシュセクタ情報設定部１３２に未割当専用領域に新たに専用領域を割り当てさせ，割り当てるサイズを登録させ，セクタID変換テーブル内の未割当専用領域獲得要求のローカルセクタIDに新たに割り当てる専用領域のキャッシュセクタIDを紐づける。逆に，キャッシュセクタ情報設定部１３２に割当済専用領域の登録を抹消させ，セクタID変換テーブル内の割当済専用領域獲得要求のローカルセクタIDに紐づけられているキャッシュセクタIDを共用領域のIDに変更する。
【０１２３】
そして，入れ替え処理を行うと，入れ替えられた専用領域の増加率は，未割当専用領域リストLIST-DEMANDから割当済専用領域リストLIST-FREEに移動させ，同時に，割当済専用領域リストLIST-FREEから未割当専用領域リストLIST-DEMANDに移動させる。さらに，各リスト内で増加率CHHの値に基づいて，ソートし直しておく。
【０１２４】
入れ替えで効率がアップすると見なされない場合は，キャッシュ割当管理部２０４は，未割当専用領域と割当済専用領域とを入れ替える処理は行わない（S54)。
【０１２５】
［定期割当見直し処理S18（２）］
図１６は，定期割当見直し処理S18の第２の例のフローチャート図である。図１７は，定期割当見直し処理S18の第２の例を説明するための図である。図１６において，定期的割当見直し処理S18では，キャッシュ割当管理部２０４は，未割当専用領域と割当済専用領域の入れ替え判定を行う（S60)。この判定処理では，図１７に示したとおり，未割当専用領域リストLIST-DEMAND内の先頭の未割当専用領域の実キャッシュ有効利用数の増加率CHH1(x)の専用キャッシュ領域サイズｘを増加させながら，割当済専用領域リストLIST-FREE内の割当済専用領域の実キャッシュ有効利用数の増加率CHHm(x)を先頭から増加させながら，両者の累積値の比較をする（S61)。
【０１２６】
この判断S61は，次の式（１０）を満たすか否かにより行われる。
Σ(x=1-y)LIST-DEMAND1.CHH(x)−Σ(m=1-y)LIST-FREEm.CHH ＞ 
OVH2*｛Σ(m=1-y)LIST-FREEm.PRIORITY｝                        （１２）
ここで，ｙは専用領域のサイズｙを，ｍはリスト内の番号を示し，LIST-DEMAND1.CHH, LIST-FREEm.CHH は実キャッシュ有効利用数の増加率を示し，OVH2は入れ替えに要するオーバーヘッド値を示し，LIST-FREEm.PRIORITYはその処理の優先度を示す。ここでも，オーバーヘッド値OVH2が優先度で重み付けされている。
【０１２７】
OS20内のキャッシュ割当部２０４は，式（１２）の判定をy=1から増加しながら行い，式（１２）の条件を満たす最大のサイズｙを検出する。すなわち，実キャッシュ有効利用数の増加率CHH1(x)は，単位サイズ増加させたときの実キャッシュ有効利用数の増加量である。そして，図１２に示すとおり，専用キャッシュ領域のサイズｘを増加させるほどキャッシュヒット率が上昇する傾向にあるので，未割当専用領域の実キャッシュ有効利用数の増加率CHH1(x)が最大化できる専用キャッシュ領域のサイズｘに対して，同じサイズの割当済専用領域の増加率と比較して，入れ替え対象にする。式（１０）と同じ考え方である。
【０１２８】
上記式（１２）を満たして入れ替えで効率がアップすると見なされる場合は，キャッシュ割当管理部２０４は，未割当専用領域と割当済専用領域とを入れ替える処理を行う（S63)。入れ替えで効率がアップすると見なされない場合は，キャッシュ割当管理部２０４は，入れ替え処理を行わない（S64)。
【０１２９】
未割当専用領域獲得要求３０が要求するキャッシュサイズと，式（１２）を満たすキャッシュサイズｙとの関係は，専用領域獲得要求判定処理（２）について図１３で説明したのと同様である。つまり，式（１２）を満たすキャッシュサイズｙが要求するキャッシュサイズ以下であれば，サイズｙと要求サイズとの間のサイズを割り当てる。また，キャッシュサイズｙが要求キャッシュサイズを超える場合は，式（１２）が満たされないとして，入れ替え処理は行わない。
【０１３０】
［定期割当見直し処理S18（３）］
図１８は，定期割当見直し処理S18の第３の例のフローチャート図である。図１９は，定期割当見直し処理S18の第３の例を説明するための図である。定期割当見直し処理S18の第３の例では，現実の加重メモリアクセス比に基づく共用キャッシュ領域の理想サイズと，現実の共用キャッシュ領域のサイズとの間に乖離が発生している場合は，共用キャッシュ領域が理想のサイズ比に近づくように，共用キャッシュ領域を未割当専用領域獲得要求に専用キャッシュ領域として割り当てるか，割当済専用キャッシュ領域を開放して共用キャッシュ領域に割り当てるかの入れ替え処理を行う。
【０１３１】
図１９に示した左右のキャッシュメモリ１３０は，実線が実際のサイズ比を示し，破線が理想のサイズ比を示している。左側のキャッシュメモリ１３０は，共用キャッシュ領域が理想サイズよりも大きくなっているので，その分を専用領域として未割当専用領域獲得要求に割り当てることが望ましい。また，逆に，右側のキャッシュメモリ１３０は，共用キャッシュ領域が理想サイズよりも小さくなっているので，その分を割当済専用領域を開放して共用領域に変更することが望ましい。
【０１３２】
共用キャッシュ領域の理想サイズは，次の式（１３）（１４）により求められる。
MACCESSXn＝Σ（m=1-n）MACCESSm * PRIORITYm    （１３）
RSIZESHR＝CEIL{（MACCESSXSHR/MACCESSXALL）* SIZEALL}    （１４）
ここで，MACCESSXnはｎ個の対象処理の加重メモリアクセス量の合計値を示し，MACCESSmは対象処理ｍのメモリアクセス量を示し，PRIORITYmは処理ｍの優先度を示す。さらに，RSIZESHRは共用キャッシュ領域（SHR)の理想的なサイズを示し，MACCESSXSHR，MACCESSXALL，SIZEALLは共有キャッシュ領域（SHR)へのアクセス量，全キャッシュ領域へのアクセス量，全キャッシュ領域のサイズを示す。また，CEILは切り上げを意味する。
【０１３３】
したがって，式（１３）によりｎ個の対象処理の加重メモリアクセス量の合計値が求められるので，共用キャッシュ領域を使用する対象処理全ての加重メモリアクセス量は，式（１３）により算出できる。同様に，全専用キャッシュ領域または全キャッシュ領域を使用する対象処理全ての加重メモリアクセス量も，同様に式（１３）により算出できる。
【０１３４】
そして，式（１４）は，共用キャッシュ領域の理想サイズRSIZESHRを，全キャッシュ領域サイズ（SIZEALL）を共用領域と専用領域への加重メモリアクセス量で按分して（MACCESSXSHR/MACCESSXALL）求めている。したがって，共用キャッシュ領域の理想サイズRSIZESHRは，共用領域と専用領域との加重メモリアクセス数の比率に基づいて求められる。
【０１３５】
そして，前述した，共用キャッシュ領域の理想サイズと，現実のサイズとを比較して，その差分が入れ替えに要するオーバーヘッド値OVH1を超えるか否かの判断が行われる。その判断は，以下の式（１５）が満たされるか否かによって行われる。
ABS{MACCESSXSHR - MACCESSXALL*(SIZESHR/SIZEALL) ＞ OVH1      （１５）
ここで，ABSは絶対値を示している。
【０１３６】
式（１５）は，プロセス実行中における共用キャッシュ領域に割り当てられた対象処理でのメモリアクセス頻度を各対象処理の優先度で重み付けした第１の加重アクセス頻度MACCESSXSHRと，各対象処理のメモリアクセス頻度を各対象処理の優先度で重み付けした加重アクセス頻度の累計値MACCESSXALLを共用キャッシュ領域と前記専用キャッシュ領域のサイズ比(SIZESHR/SIZEALL)で按分した共用キャッシュ領域の第２の加重アクセス頻度MACCESSXALL*(SIZESHR/SIZEALL)との差分が，オーバーヘッド値OVH1より高い場合の条件式である。この条件式が満たされる場合に，その差分に対応したサイズだけ，割当済み専用キャッシュ領域を共用キャッシュ領域に入れ替えるか，または共用キャッシュ領域を未割当専用キャッシュ領域に入れ替える。
【０１３７】
上記式（１５）は，式全体にSIZEALL/MACCESSXALLを乗算すると，次の式（１６）になる。
ABS{(MACCESSXSHR/MACCESSXALL)*SIZEALL - SIZESHR} ＞ OVH1*( SIZEALL/MACCESSXALL)    （１６）
ABS{(RSIZESHR - SIZESHR )} ＞OVH1*( SIZEALL/MACCESSXALL)    （１６）
すなわち，現実の加重アクセス頻度比による共用キャッシュ領域の理想的なサイズRSIZESHRと，現実のサイズSIZESHRとの差分がオーバーヘッド値を超えるか否かを判定することと同じである。
【０１３８】
そこで，上記式（１５）または（１６）が満たされる場合は，共用キャッシュ領域のサイズが理想的なサイズに近づくように，割当済み専用キャッシュ領域を共用キャッシュ領域に入れ替えるか，逆に，共用キャッシュ領域を未割当専用キャッシュ領域ュ領域に入れ替える。
【０１３９】
そのために，本実施の形態では，図１９の左側に示すように，共用領域の理想サイズに比較して現実のサイズが大きい場合は，専用領域候補リストのサイズ（WAY数）を増加し，定期的見直しでは未割当専用領域獲得要求に対して専用領域を割り当てることができることを記録する。逆に，図１９の右側に示すように，共用領域の理想サイズに比較して現実のサイズが小さい場合は，専用領域借りリストのサイズ（WAY数）を増加し，定期的見直しでは割当済専用領域を共用領域を割り当てることができることを記録する。
【０１４０】
そして，定期的見直しでは，図１９の左側に示すように，専用領域候補リストのサイズ（WAY数）分だけ，未割当専用領域リストLIST-DEMANDの先頭から専用領域を割り当てる。あるいは，図１９の右側に示すように，専用領域借りリストのサイズ（WAY数）分だけ，割当済専用領域リストLIST-FREEの先頭から専用領域を開放する。
【０１４１】
図１８のフローチャートにしたがって再度説明すると，キャッシュ割当管理部２０４は，共用領域の理想サイズと現実サイズとの差分に基づいて，共用領域と専用領域の入れ替えの必要性を判定する（S70)。具体的には，専用領域候補リストのサイズが正であれば（S71)，未割当専用領域獲得要求に専用領域を割り当てる（S72)。一方，専用領域借りリストのサイズが正であれば（S73)，割当済専用領域を開放する（S74)。
【０１４２】
キャッシュ割当管理部２０４は，共用領域の理想サイズと現実サイズとの差分がオーバーヘッド値を超えてない場合は，図１４，１６で説明した定期割当見直し処理（１）（２）を実行する（S75)。
【０１４３】
上記の第３の例では， 専用領域候補リストに記録されたキャッシュサイズ（Way数）で割り当てることが望ましい。
【０１４４】
［プロセス切り替え時のセクタID変換テーブルの入れ替え処理］
図２５は，アプリケーションプログラムのプロセス２２が切り替わるときのセクタID変換テーブルの入れ替え処理を示す図である。OS内のプロセス管理部２０２は，切り替え元の稼働プロセス22Aがプロセスを停止するときに，そのプロセスの停止処理を行い（S81)，同時に，キャッシュ割当管理部２０４にセクタID変換テーブルの切替制御を指示し（S83)，切り替え元の稼働プロセス22AのセクタID変換テーブルを，切り替え先の稼働プロセス22BのセクタID変換テーブルに入れ替えさせる（S84)。その後，プロセス管理部２０２は，切り替え先の稼働プロセス22Bのプロセス稼働を開始させる（S86）。
【０１４５】
このように，プロセスが切り替わるときにプロセス管理部２０２がキャッシュ割当管理部２０４にセクタID変換テーブルを入れ替えさせ，切り替え先のプロセスがそのセクタID変換テーブルのキャッシュメモリ分割状態に基づいてメモリアクセスを行う。
【０１４６】
第１の実施の形態では，図８の専用領域獲得要求に対する判定（１）では，専用領域獲得要求の対象処理の実キャッシュ有効利用度が第２の基準値を超えていれば，専用領域を割り当てた。この判定において，式（４）（７）において優先度を乗算していないキャッシュ有効利用度を指標にして専用領域の割当の有無を判断してもよい。
【０１４７】
第１の実施の形態では，図１０−１３の専用領域獲得要求に対する判定（２）では，実キャッシュ有効利用数の増加率を判断指標にして，専用領域獲得要求に対して専用領域を割り当てるか否かを判断した。この判定においても，式（８）（９）において優先度を乗算していないキャッシュ有効利用数の増加率を指標にして専用領域の割当の有無を判断してもよい。
【０１４８】
第１の実施の形態において，定期割当見直し（１）（２）（３）においても，同様に，優先度を考慮しない指標を利用して判断してもよい。
【０１４９】
［第２の実施の形態］
第２の実施の形態は，プログラム内で関数やモジュールなどのサブルーチンが呼び出されたときにサブルーチンのローカル変数を記憶するスタックメモリ領域に対するキャッシュメモリの制御プログラムに関する。
【０１５０】
前述のとおり，ＯＳは，階層的に呼び出されるサブルーチンのローカル変数をメインメモリ内のスタックメモリ領域に一括して格納して管理する。そして，サブルーチンプログラムがローカル変数をリードまたはライトする場合は，メインメモリ内のスタックメモリ領域にメモリアクセスを実行する。このスタックメモリ領域へのメモリアクセスにおいても，通常のメモリアクセスの処理と同様に，まずキャッシュメモリでキャッシュヒット判定が行われ，キャッシュミスヒットの場合のメインメモリ内のスタックメモリ領域へのアクセスが行われる。
【０１５１】
なお，サブルーチンには関数やモジュールが含まれるが，以下の実施の形態では，サブルーチンの一つである関数を例にして説明する。ただし，モジュールが呼び出されたり（コール），呼び戻されたり（リターン）した場合も，関数が呼び出されたり呼び戻されたりした場合と同様である。また，関数の引数はローカル変数として取り扱うことにする。
【０１５２】
図２６は，第２の実施の形態におけるキャッシュメモリとスタックメモリ領域との関係を示す図である。ＣＰＵ（またはＣＰＵコア）１２に隣接してキャッシュメモリ１３０が設けられている。そして，ＣＰＵ１２が関数内のローカル変数についてメモリアクセスを実行すると，キャッシュメモリにキャッシュヒット判定が行われ，キャッシュヒットすればキャッシュメモリ内のデータにアクセスされ，キャッシュミスヒットすれば外部インターフェース１４を介してメインメモリ１６内のスタックメモリ領域内のデータにアクセスされる。
【０１５３】
メインメモリ１６内には，様々なデータやプログラムが記憶されている。例えば，プログラムＰＲが実行されると，各プログラムＰＲ１−ＰＲ４毎に，変数や配列データなどを記憶するヒープ領域と，呼び出される関数のローカル変数を記憶するスタックメモリ領域ＳＴとが，メインメモリ１６内に確保される。
【０１５４】
そして，このスタックメモリ領域は，次のようなスタック構造になっている。すなわち，あるプログラム内で関数Ａ，Ｂ，Ｃ，Ｄ，Ａ，Ｃが順番に階層的に呼び出された場合は，それらの呼び出された関数のローカル変数データがその順番でスタックメモリ領域内に記憶される。図２６に示されるように，関数Ａ，Ｂ，Ｃ，Ｄ，Ａ，Ｃが順番に呼び出された場合，スタックメモリ領域内には，関数Ａ，Ｂ，Ｃ，Ｄ，Ａ１，Ｃ１のローカル変数データが順番に記憶される。そして，関数の実行が終了してその関数が呼び戻されると，呼び出された関数に対応するスタックメモリ領域は開放される。したがって，同じ関数が異なるタイミングで呼び出された場合は，それらの呼び出された関数毎にローカル変数がスタックメモリ領域内に記憶される。
【０１５５】
このようなメインメモリ１６内のスタックメモリ領域内のデータにメモリアクセスが実行されると，メモリアクセスされたデータがキャッシュメモリ１３０内にも記憶される。図２６の例では，関数Ｂ，Ｃ，Ｄのローカル変数データがキャッシュメモリ１３０内に記憶されている。
【０１５６】
図２７は，関数のローカル変数とスタックメモリ領域内の変数データとを示す図である。図２７の例では，関数Ａには，引数in_in1, in_in2と，変数int_va1, String_Va2とが利用されている。この場合，これらの引数と変数が，関数Ａのローカル変数データとして，関数Ａに対応するスタックメモリ領域内にひとまとめにして記憶される。
【０１５７】
図２８は，プログラム内の関数とスタックメモリ領域とを示す図である。図２８に例示したプログラムは，関数Ａが呼び出され，関数Ａ内で関数Ｂが呼び出され，関数Ｂ内で関数Ｃが呼び出され，関数Ｃ内で関数Ｄが呼び出され，その関数Ｄが終了して呼び戻された後に，関数Ｅが読み出される例である。
【０１５８】
この場合，スタックメモリ領域には，図示されるように，関数Ａのローカル変数データ（図２７のローカル変数in1,in2,va1,va2）の領域と，関数Ｂのローカル変数データの領域と，関数Ｃのローカル変数データの領域と，関数Ｄのローカル変数データの領域とが，スタックメモリ内にスタック構造で確保される。そして，関数Ｄが終了して呼び戻されると，スタックメモリ内から関数Ｄのローカル変数データの領域が開放され，その後関数Ｅが呼び出されると，スタックメモリ内に関数Ｅのローカル変数データの領域が新たに確保される。
【０１５９】
図２９，図３０は，スタックメモリ領域に対するキャッシュメモリの問題点について説明する図である。これらの例は，いずれもキャッシュメモリ１３０を複数の関数が共用して使用する例である。
【０１６０】
図２９には，スタックメモリ領域ＳＴの例と，それに対応するキャッシュメモリ１３０の変化の例とが示されている。（１）関数Ｃが長時間実行された例では，関数Ａ，Ｂ，Ｃが順番に階層的に読み出されて，スタックメモリ領域ＳＴ内に関数Ａ，Ｂ，Ｃのローカル変数データの領域が順番に確保されている。それに伴い，関数Ｃが呼び出された直後のキャッシュメモリ１３０−１内には，関数Ａ，Ｂ，Ｃのローカル変数データの領域が書き込まれている。しかし，関数Ｃが長時間実行されると，関数Ｃのプロセスのデータや，スタックメモリ領域以外のメモリ領域のデータのメモリアクセにより，キャッシュメモリ１３０−１内に一旦は書き込まれたがその後アクセスされなかった関数Ａ，Ｂのローカル変数データが追い出されて削除されてしまう。
【０１６１】
このような場合に，実行中の関数Ｃが終了して，その直後に関数Ｂのローカル変数データにメモリアクセスが実行されると，キャッシュメモリ１３０−２内には関数Ｂのローカル変数データは削除されているので，キャッシュミスヒットを連発する。
【０１６２】
（２）関数Ｄを呼び出した例では，関数Ａ，Ｂ，Ｃが順番に階層的に読み出されて，スタックメモリ領域ＳＴ内に関数Ａ，Ｂ，Ｃのローカル変数データが順番に記憶されている状態で，新しい関数Ｄが呼び出されている。その場合，キャッシュメモリ１３０において，既に実行された関数Ｘのローカル変数データがキャッシュメモリ１３０−３に記憶されている場合には，その関数Ｘのローカル変数データをメインメモリ１６に転送して退避させ，その関数Ｘのローカル変数データが記憶されていた領域に，メインメモリ１６から読み出した関数Ｄのローカル変数データを上書きする必要がある。したがって，関数Ｄを読み出したことによる処理に，関数Ｘのローカル変数データをメインメモリに退避する処理が含まれてしまい，オーバーヘッドが大きくなる。
【０１６３】
図３０には，（３）大量の関数を短期的に呼び出した例におけるキャッシュメモリ１３０−５から１３０−６への変化が示されている。この例では，関数Ａを呼び出したことによりキャッシュメモリ１３０−５には関数Ａのローカル変数データが記憶され，更に，関数Ｂ〜Ｚが短時間で連続して階層的に呼び出されることで，キャッシュメモリ１３０−６内の広い領域に，それらの関数のローカル変数データが次々に記憶されている。その結果，キャッシュメモリ１３０−６内の他のプロセスのデータが消去されてキャッシュメモリ１３０−６内が乱されるおそれがある。それに伴い，他のプロセスのキャッシュミスヒット率が低下するおそれがある。
【０１６４】
［第２の実施の形態の概略］
そこで，第２の実施の形態では，キャッシュメモリ制御プログラムにより，図２９，３０で指摘したような問題点を解決する。第２の実施の形態のキャッシュメモリ制御プログラムによれば，キャッシュメモリ内に一旦は記憶された過去に呼び出された関数のローカル変数データが，他のプロセスによるメモリアクセスで消去されないようにするために，呼び出される関数に対してそれぞれ専用キャッシュ領域を割り当てる。
【０１６５】
ただし，連続して多数の関数が呼び出された場合に，キャッシュメモリ内に多数の専用キャッシュ領域が割り当てられることになり，他のプロセスにとり一定の容量しかないキャッシュメモリの利用効率が低下する。つまり，他のプロセスに割り当てられるキャッシュ領域のサイズが小さくなりキャッシュヒット率が低下する。
【０１６６】
そこで，キャッシュメモリ制御プログラムは，プログラム内で呼び出される関数に対するスタックメモリ領域のために，限られた個数のキャッシュ領域をスタックメモリ用キャッシュ領域群として確保する。さらに，そのスタックメモリ用キャッシュ領域群内に，現在実行中の第１の関数に割り当てた第１の専用キャッシュ領域と，実行中の第１の関数の直前に呼び出された単数または複数の第２の関数にそれぞれ割り当てた第２の専用キャッシュ領域と，複数の空きキャッシュ領域とを維持するように，呼び出された関数と呼び戻された関数に対する専用キャッシュ領域の割当制御を行う。
【０１６７】
上記の空きキャッシュ領域とは，メインメモリに退避することが必要などの有効なデータが記憶されていないキャッシュ領域であり，即座に新たなデータを上書きすることが可能なキャッシュ領域である。また，この空きキャッシュ領域には，他の関数やプロセスのメモリアクセスによるデータが書き込まれることがない，一種の専用キャッシュ領域である。
【０１６８】
そして，スタックメモリ用キャッシュ領域群内の複数のキャッシュ領域は，例えば，一定のサイズを有する。通常，関数のローカル変数を格納するスタックメモリ領域の容量は１MB以下と小さいので，スタックメモリ用キャッシュ領域群内に複数の関数それぞれに割り当てるキャッシュ領域を維持しても，それほど多くのメモリ容量を占有することはない。
【０１６９】
図３１は，第２の実施の形態における，関数Ｅが実行中の時間Ｔ１と関数Ｅが終了して呼び戻された時間Ｔ２のスタックメモリ領域ＳＴとキャッシュメモリ１３０内のスタックメモリ用キャッシュ領域群１３０−ＳＴとを示す図である。スタックメモリ領域ＳＴには，関数Ａ，Ｂ，Ｃ，Ｄ，Ｅのローカル変数データが順番に記憶されている。それに対して，キャッシュメモリ制御プログラムは，キャッシュメモリ１３０内に，複数の関数に対するスタックメモリ領域のために，例えば５個のキャッシュ領域（セクタＩＤ＝０−４）をスタックメモリ用キャッシュ領域群１３０−ＳＴとして確保する。
【０１７０】
さらに，キャッシュメモリ制御プログラムは，関数Ｅが実行中の時間Ｔ１では，スタックメモリ用キャッシュ領域群１３０−ＳＴ（１）内に，実行中の関数Ｅに割り当てた第１の専用キャッシュ領域（セクタＩＤ＝４）と，その関数Ｅの直前に連続して読み出された２つの関数Ｃ，Ｄに割り当てた第２の専用キャッシュ領域（セクタＩＤ＝２，３）と，次に呼び出される関数用の空きキャッシュ領域（セクタＩＤ＝０）と，２番目に呼び出される関数用の空きキャッシュ領域（セクタＩＤ＝１）とを維持している。
【０１７１】
つまり，スタックメモリ領域ST側に示したように，実行中の関数Ｅを中心としてその直前に呼び出された関数Ｃ，Ｄとその後呼び出される関数用の２つの空きキャッシュ領域に対応するキャッシュ領域が，スタックメモリ用キャッシュ領域群１３０−ＳＴ（１）内に維持される。
【０１７２】
関数ＥにセクタＩＤ＝４の専用キャッシュ領域が割り当てられている理由は，階層的に呼び出された関数ＡからＥが，スタックメモリ用キャッシュ領域群１３０−ＳＴ内のセクタＩＤ＝０の専用キャッシュ領域から順番に割り当てられるからである。その結果，スタックメモリの深さが０番から始まるとすると，スタックの深さが５番目である関数Ｅには，セクタＩＤ＝４の専用キャッシュ領域が割り当てられる。
【０１７３】
次に，関数Ｅが終了して呼び戻された時間Ｔ２では，キャッシュメモリ制御プログラムは，時間Ｔ１で２番目の関数用の空きキャッシュ領域（セクタＩＤ＝１）を専用キャッシュ領域として関数Ｂに割り当てて，関数Ｂのローカル変数データをメインメモリにメモリアクセス（プリフェッチ）して関数Ｂに割り当てた専用キャッシュ領域（セクタＩＤ＝１）内に展開する。更に，キャッシュメモリ制御プログラムは，時間Ｔ１で関数Ｅに割り当てていた専用キャッシュ領域（セクタＩＤ＝４）を次の関数用の空きキャッシュ領域に割り当て，時間Ｔ１で次の関数用の空きキャッシュ領域（セクタＩＤ＝０）を２番目の関数用の空きキャッシュ領域に割り当てる。このセクタＩＤ＝４，０をそれぞれ次の関数用空きキャッシュ領域，２番目の関数用空きキャッシュ領域に割り当てるのは，後述するとおりＯSのキャッシュ割当管理部２０４がキャッシュセクタ情報設定部１３２に行えばよく，キャッシュメモリ内のデータの書き込みや退避は必要ない。
【０１７４】
その結果，キャッシュメモリ制御プログラムは，関数Ｅが終了して関数Ｄが実行開始される時間Ｔ２では，スタックメモリ用キャッシュ領域群１３０−ＳＴ（２）内に，スタックメモリ領域ＳＴの実行中の関数Ｄに割り当てた第１の専用キャッシュ領域（ＩＤ＝３）を中心として，その直前に呼び出された２個の関数Ｃ，Ｂに割り当てた第２の専用キャッシュ領域（ＩＤ＝２，１）と，その直後に呼び出される予定の２個の関数用の空きキャッシュ領域（ＩＤ＝４，０）とを維持する。したがって，スタックメモリ用キャッシュ領域群１３０−ＳＴのサイズは，時間T1からT2において５個に限定される。
【０１７５】
ここで，直前の関数に割り当てる第２の専用キャッシュ領域の数２と，その後の関数用空きキャッシュ領域の数２は一例であり，スタックメモリ用キャッシュ領域群のキャッシュ領域の数５も一例である。これらの数の設定については後述する。ただし，これらの数は固定の限られた数に設定され，スタックメモリ用キャッシュ領域群１３−ＳＴのサイズがある固定範囲内に限定される。
【０１７６】
図３２は，第２の実施の形態における，関数Ｅが実行中の時間Ｔ１と関数Ｅが終了して呼び戻された時間Ｔ３のスタックメモリ領域ＳＴとキャッシュメモリ１３０内のスタックメモリ用キャッシュ領域群１３０−ＳＴとを示す図である。関数Ｅが実行中の時間Ｔ１でのスタックメモリ用キャッシュ領域群１３０−ＳＴ（１）は，図３１と同じである。
【０１７７】
次に，関数Ｅの次の関数Ｆが呼び出された時間Ｔ３では，キャッシュメモリ制御プログラムは，時間Ｔ１での次の関数用の空きキャッシュ領域（セクタＩＤ＝０）を専用キャッシュ領域として呼び出された関数Ｆに割り当てて，関数Ｆのローカル変数データをメインメモリにアクセス（プリフェッチ）して関数Ｆに割り当てた専用キャッシュ領域（セクタＩＤ＝０）内に書込む。更に，キャッシュメモリ制御プログラムは，時間Ｔ１で関数Ｃに割り当てていた専用キャッシュ領域（セクタＩＤ＝２）内の関数Ｃのローカル変数データをメインメモリに退避し，退避後のキャッシュ領域（セクタＩＤ＝２）を２番目の関数用の空きキャッシュ領域に割り当てる。
【０１７８】
その結果，キャッシュメモリ制御プログラムは，関数Ｆが呼び出されて実行開始される時間Ｔ３では，スタックメモリ用キャッシュ領域群１３０−ＳＴ（３）内に，スタックメモリ領域ＳＴの実行中の関数Ｆに割り当てた第１の専用キャッシュ領域（ＩＤ＝０）を中心として，その直前に呼び出された２個の関数Ｅ，Ｄに割り当てた第２の専用キャッシュ領域（ＩＤ＝４，３）と，その直後に呼び出される２個の関数用の空きキャッシュ領域（ＩＤ１，２）とを，維持する。したがって，スタックメモリ用キャッシュ領域群１３０−ＳＴのサイズは，時間T1からT3において５個に限定される。
【０１７９】
以上のように，キャッシュメモリ制御プログラムは，関数が終了して呼び戻され，または，新たな関数が呼び出された場合に，スタックメモリ用キャッシュ領域群１３０−ＳＴを，スタックメモリ領域ＳＴ内の実行中の関数に割り当てられた第１の専用キャッシュ領域を中心にして，実行中の関数の直前に連続して呼び出されたＮ個の関数に割り当てられたＮ個の第２の専用キャッシュ領域と，実行中の関数の直後に連続して呼び出されるＭ個の関数に割り当てられたＭ個の専用空きキャッシュ領域とに維持する。そのために，必要に応じて，スタックメモリ用キャッシュ領域群から追い出される関数の専用キャッシュ領域内のローカル変数データをメインメモリに退避し，スタックメモリ用キャッシュ領域群内に新たに加えられる関数のローカル変数データをプリフェッチしてメインメモリから専用キャッシュ領域に書き込み展開する。
【０１８０】
上記のように制御することで，限られたサイズのスタックメモリ用キャッシュ領域群１３０−ＳＴ内において，今後実行される可能性が高い関数のローカル変数データが別々の専用キャッシュ領域に格納され，今後呼び出される関数のローカル変数データを他のデータの退避なしで即座に書き込むことができる専用空きキャッシュ領域が維持される。よって，図２９，３０で説明したような問題点は回避される。
【０１８１】
次に，第２の専用キャッシュ領域のＮ個と，空きキャッシュ領域のＭ個の設定について説明する。
【０１８２】
図３３は，実行中の関数の直前に連続して呼び出されたＮ個の関数に割り当てられたＮ個の第２の専用キャッシュ領域の個数Ｎについて説明する図である。図３１で説明したとおり，キャッシュメモリ制御プログラムは，関数Ｅが終了して呼び戻されると，関数Ｂのスタックメモリ領域内のローカル変数データをプリフェッチ開始して，関数Ｂに割り当てられた空きキャッシュ領域にそのローカル変数データを書き込み始める。つまり，関数Ｂのローカル変数データのキャッシュリストア処理である。このスタックメモリ領域へのプリフェッチは，ＣＰＵユニットの外のメインメモリへのメモリアクセスを伴うので，一般に長い時間を要する。
【０１８３】
そして，関数Ｅの終了に続いて，関数Ｄ，Ｃが連続して終了したとすると，関数Ｄ，Ｃの終了処理後に，関数Ｂのローカル変数データへのメモリアクセスが開始される。このとき，関数Ｂのローカル変数データが関数Ｂに割り当てられた空きキャッシュ領域にキャッシュリストアを完了して書込まれていれば，キャッシュヒットミスは生じない。
【０１８４】
さらに，関数Ｅ，Ｄ，Ｃの終了時，つまり呼び戻し時に必要な処理が行われる。例えば，実行中の関数のＣＰＵ内のレジスタやテーブルの退避と復帰処理などのソフトウエアによる処理である。
【０１８５】
そこで，関数Ｅの終了処理後に，関数Ｄ，Ｃの終了処理（呼び戻し処理）中に，関数Ｂのローカル変数データへのメモリアクセスによるキャッシュリストアが完了する必要がある。
【０１８６】
したがって，第２の専用キャッシュ領域の個数Ｎは，以下の式で求められる個数以上であることが必要になる。
Ｎ＝CEIL｛スタックメモリ内の関数のローカル変数データのメモリアクセス時間／関数呼び戻し処理に必要な時間｝          （１７）
ここで，CEILは切り上げを意味する。
【０１８７】
すなわち，第２の専用キャッシュ領域の個数Ｎを，少なくとも式（１７）の数にすることで，スタックメモリ用キャッシュ領域群のキャッシュ領域の個数を最小限に保ちつつ，関数の実行終了後の直前に呼び出された関数のローカル変数データへのメモリアクセスで確実にキャッシュヒットさせることができる。図３１の例では，式１７のＮがＮ＝２の例である。
【０１８８】
この第２の専用キャッシュ領域の個数Ｎは，関数Ｂのスタックメモリ内のローカル変数データをキャッシュ領域に事前にキャッシュリストアするのに要する時間を，プリフェッチ対象関数までの関数の数で示している。そこで，この個数Ｎを，プリフェッチサイズ２（Prefetch_Size2）と称する。
【０１８９】
図３４は，実行中の関数の直後に連続して呼び出される予定のＭ個の関数に割り当てられたＭ個の専用空きキャッシュ領域の個数Ｍについて説明する図である。図３２で説明したとおり，キャッシュメモリ制御プログラムは，関数Ｅの次の関数Ｆが呼び出されると，関数Ｃのローカル変数データをメインメモリ内のスタックメモリ領域内に退避開始する。この退避処理は，スタックメモリ領域への書き込み処理であるので，一般に長い時間を要する。
【０１９０】
そして，関数Ｆの読み出しに続いて，関数Ｇ，Ｈが連続して呼び出されたとすると，関数Ｇ，Ｈの呼び出し処理後に，関数Ｈのローカル変数データへのメモリアクセスが開始される。このときまでに，関数Ｃに割り当てられていた専用キャッシュ領域内のローカル変数データの退避処理が完了していれば，２番目の関数用の空きキャッシュ領域（ＩＤ＝２）に，既存データの退避処理を行うことなく，呼び出された関数Ｈのローカル変数データを書き込むことができる。
【０１９１】
さらに，関数Ｆの呼び出し処理後に，関数Ｇ，Ｈの呼び出し処理中に，空きキャッシュ領域（ＩＤ＝０）の関数Ｃのローカル変数データの退避処理を完了する必要がある。
【０１９２】
したがって，専用空きキャッシュ領域の個数Ｍは，以下の式で求められる個数以上であることが必要になる。
Ｍ＝CEIL｛スタックメモリ内への関数のローカル変数データのメモリアクセス時間（データ転送時間）／関数呼び出し処理に必要な時間｝          （１８）
すなわち，専用空きキャッシュ領域の個数Ｍを，少なくとも式（１８）の数にすることで，スタックメモリ用キャッシュ領域群のキャッシュ領域の個数を最小限にしつつ，関数が呼び出されたときの関数のローカル変数データへのメモリアクセスを，既存データの退避処理を行うことなく即座に開始することができる。図３２の例では，式１８のＭがＭ＝２の例である。
【０１９３】
この専用空きキャッシュ領域の個数Ｍは，個数Ｎと同様に，プリフェッチサイズ１（Prefetch_Size1）と称する。
【０１９４】
図３５は，第２の実施の形態におけるキャッシュメモリ制御プログラムによるセクタＩＤ変換テーブルの制御を示す図である。図３１，図３２の例では，スタックメモリ用キャッシュ領域群１３０−ＳＴ内の５個のキャッシュ領域を，１個の第１の専用キャッシュ領域と２個の第２の専用キャッシュ領域と２個の専用空きキャッシュ領域とに，循環的に変更している。
【０１９５】
すなわち，図３１の関数Ｅが終了して呼び戻されるときは，スタックメモリ用キャッシュ領域群１３０−ＳＴのキャッシュセクタＩＤを−１して５つのキャッシュ領域との対応を変更している。ただし，ＩＤ＝０は−１することでＩＤ＝４にされる。その結果，実行中の関数に割り当てられる専用キャッシュ領域のキャッシュセクタＩＤは，関数ＥのキャッシュセクタＩＤ＝４から関数ＤのキャッシュセクタＩＤ＝３に変更されている。
【０１９６】
逆に，図３２の関数Ｆが読み出されるときは，スタックメモリ用キャッシュ領域群１３０−ＳＴのキャッシュセクタＩＤを＋１して５つのキャッシュ領域との対応を変更している。ただし，ＩＤ＝４は＋１することでＩＤ＝０にされる。その結果，実行中の関数に割り当てられる専用キャッシュ領域のキャッシュセクタＩＤは，関数ＥキャッシュセクタＩＤ＝４から関数ＦのキャッシュセクタＩＤ＝０に変更されている。
【０１９７】
このように循環的に対応関係を変更することで，セクタＩＤ変換テーブルの書き換えが容易になる。図３５には，セクタＩＤ変換テーブル１３１が示されている。この例では，セクタＩＤ変換テーブル１３１のローカルセクタＩＤ＝０は，共用キャッシュメモリ領域に割り当てられ，ローカルセクタＩＤ＝１は，実行中の関数に割り当てられた専用キャッシュメモリ領域が割り当てられ，ローカルセクタＩＤ＝２〜Ｎは，スタックメモリ用キャッシュ領域群とは別の専用キャッシュメモリ領域に割り当てられる。したがって，関数が呼び戻されたり呼び出されたりするたびに，ＯＳ内のキャッシュ割当管理部２０４は，セクタＩＤ変換テーブル１３１内のローカルセクタＩＤ＝１に対応するキャッシュセクタＩＤを，実行中の関数に割り当てられた第１の専用キャッシュ領域のセクタＩＤに書き換える。
【０１９８】
一方，関数内のローカル変数へのメモリアクセス命令は，コンパイルされてローカルセクタＩＤ＝１を有する機械語命令に変換される。例えば，図４の機械語命令３２が，ローカルセクタＩＤがＩＤ＝１，命令文がローカル変数へのメモリアクセス命令になるように変換される。その結果，実行中の関数におけるローカル変数へのメモリアクセス命令が実行されると，図２２に示したように，ＣＰＵによるメモリアクセス命令の実行処理で，セクタＩＤ変換テーブル１３１のローカルセクタＩＤ＝１に対応するキャッシュセクタＩＤが参照され，実行中の関数に割り当てられた第１の専用キャッシュ領域を使用してメモリアクセスが実行される。
【０１９９】
上記のように循環的に対応関係を変更することで，実行中の関数に対してどのキャッシュセクタＩＤが割り当てられているかを簡単に検出することができる。すなわち，対象関数のスタックの深さを，スタックメモリ用キャッシュ領域群のキャッシュ領域の総数（図３１，３２の例では５個）で除算した余りが，対象関数に割り当てられたキャッシュセクタＩＤになる。ただし，スタックメモリ領域の先頭をスタックの深さ０とカウントする。したがって，関数Ｅは，スタックの深さが４であるので，余り（４／５）＝４となり，キャッシュセクタＩＤ＝４の専用キャッシュ領域が割り当てられる。図３１，３２に示した通りである。
【０２００】
したがって，キャッシュ割当管理部２０４は，関数が呼び戻されたら元の関数のスタックの深さから，割り当てられた専用キャッシュメモリのキャッシュセクタＩＤを上記の演算で取得し，セクタＩＤ変換テーブルのローカルセクタＩＤ＝１に対応するキャッシュセクタＩＤを書き換える。これにより，実行中の関数のメモリアクセスは，その関数に割り当てられた専用キャッシュ領域を利用して行われる。
【０２０１】
［第２の実施の形態の詳細］
次に，第２の実施の形態について詳細に説明する。図１，２に示した構成は，第２の実施の形態においても同じである。そして，スタックメモリとキャッシュメモリとの関係は，図２６に示した通りである。
【０２０２】
図３６は，コンパイル工程と対象プロセス起動工程とを示すフローチャート図である。まず，入力部１７が起動するソースプログラムを受け付けると（S611），コンパイラ２１が，ソースプログラムをコンパイルして機械語プログラムに変換する（S612）。このコンパイルにより，各関数のローカル変数へのアクセス命令は，ローカルセクタID=1を付加した機械語命令に変換される。さらに，コンパイルされたプログラムが開発環境下で実行されて，OSのキャッシュ割当管理部２０４が，関数呼び戻しに要する時間と，関数呼び出しに要する時間と，メモリアクセス時間とをテスト計測し，スタックメモリ用キャッシュ領域群のキャッシュ領域数と，前述のＮ個（プリフェッチサイズ２），Ｍ個（プリフェッチサイズ１）を計算する（S613）。
【０２０３】
次に，本番環境下で，入力部１７がコンパイルされたプログラムの起動指令を受け付けると（S614），OSのプロセス管理部２０２が対象プロセスを起動する（S615）。それとともに，キャッシュ割当管理部２０４がスタックメモリ用のキャッシュ領域群を事前に計算したキャッシュ領域の数だけ確保するよう指示する（S616）。この指示に応答して，キャッシュメモリ１３０にスタックメモリ用キャッシュ領域群130-STが確保され，キャッシュセクタ情報設定部１３２にそれが設定される（S617)。そして，プロセス管理部２０２がプログラムの各プロセスを実行する（S618)。この各プロセスの実行中に関数が呼び出されたり，呼び戻されたりすると，プロセス管理部２０２は，関数呼び出し処理と関数呼び戻し処理を実行する（S618)。
【０２０４】
図３７は，関数呼び戻し処理のフローチャート図である。図３７には，呼び出し元関数２２−１と呼び出し先関数２２−２とが示されている。呼び出し元関数２２−１とは，ある関数を呼び出した関数であり，呼び出し先関数２２−２とは，その呼び出された関数である。関数呼び戻し処理は，図３１で概略説明したが，以下ではＯＳによる具体的な処理を説明する。
【０２０５】
まず，関数呼び戻し処理では，呼び出し先関数２２−２がその関数の処理を終了する（S621）。これに応答して，OSの関数制御管理部２０１が呼び出し先関数の終了処理を実行する（S622）。呼び出し先関数の終了処理には，終了する関数についてのCPU内のレジスタやテーブルの退避などが含まれる。呼び出し先関数の終了処理の後に，キャッシュ割当管理部２０４が，呼び出し元関数からプリフェッチサイズ１（Ｎ個）前の関数に，スタックメモリ用キャッシュ領域群130-ST内の空きキャッシュ領域を専用キャッシュ領域として割り当てて，その関数のローカル変数データをメインメモリ内のスタックメモリ領域からプリフェッチ（メモリアクセス）して，割り当てられた空きキャッシュ領域にそのデータを書き込み，展開する（S623）。この空きキャッシュ領域のキャッシュセクタＩＤは，呼び出し元関数に割り当てられる専用キャッシュ領域のキャッシュセクタＩＤよりもプリフェッチサイズ１（Ｎ）前である。
【０２０６】
これに伴い，キャッシュメモリ１３０では，プリフェッチサイズ１（Ｎ）前の関数のローカル変数データが，それに対するプリフェッチのメモリアクセス処理により，割り当てられた空きキャッシュ領域に書き込まれ展開される。ただし，このメモリアクセスはメインメモリに対する処理になるため処理時間が長くなるので，このメモリアクセス処理が完了するのを待つことなく，次の処理が実行される。
【０２０７】
ＯＳのキャッシュ割当管理部２０４が，セクタＩＤ変換テーブルを更新して，ローカルセクタＩＤ＝１に対応するキャッシュセクタＩＤを，呼び出し元関数に対応するキャッシュセクタＩＤに変更する（S625)。すなわち，図３５の時間Ｔ２で示したとおりである。
【０２０８】
そして，ＯＳの関数制御管理部２０１が，呼び出し元関数の再開処理を実行する(S626)。この再開処理には，再開する関数についてのCPU内のレジスタやテーブルの設定などが含まれる。その後，呼び出し元関数２２−１が処理を再開する（S627)。この呼び出し元関数が処理を再開してローカル変数アクセス命令を実行すると，既にキャッシュメモリ１３０内の呼び出し元関数に割り当てられているスタックメモリ用キャッシュ領域群１３０−ＳＴ内の専用キャッシュ領域内にそのローカル変数データが書き込まれたままになっているので，キャッシュミスヒットすることはない。
【０２０９】
図３８は，関数呼び出し処理のフローチャート図である。関数呼び出し処理は，図３２で概略説明したが，以下ではＯＳによる具体的な処理を説明する。
【０２１０】
まず，関数呼び出し処理では，呼び出し元関数１７が関数呼び出しを発生する（S631）。これにより呼び出し先関数が呼び出される。これに応答して，ＯＳの関数制御管理部２０１が，現在の関数を一時的に停止し，呼び出し先関数への引き渡し処理を実行する(S632)。このとき，関数制御管理部２０１が，呼び出し先関数にスタックメモリ用キャッシュ領域群内の次の関数用空きキャッシュ領域が割り当て，呼び出し先関数のローカル変数へのメモリアクセスが開始される。次の関数用空きキャッシュ領域には有効なデータが格納されていないので，この呼び出し先関数のローカル変数のメモリアクセスは，元のデータをスタックメモリへ退避処理することなく，開始することができる。
【０２１１】
そして，ＯＳのキャッシュ割当管理部２０４が，呼び出し先関数からプリフェッチサイズ２（Ｍ個）前の専用キャッシュ領域の関数のデータを，メインメモリ内のスタックメモリ領域に退避開始させ，２番目の関数用空きキャッシュ領域を確保する(S633)。これにより，キャッシュメモリ１３０では，呼び出し先関数からプリフェッチサイズ２（Ｍ）前の専用キャッシュ領域内の関数のローカル変数データがそのスタックメモリ領域に退避され，２番目の関数用空きキャッシュ領域にされる(S634)。ただし，この退避処理はメインメモリへのアクセスを伴うため処理時間が長くなるので，このメモリアクセス処理が完了するのを待つことなく，次の処理が実行される。
【０２１２】
ＯＳのキャッシュ割当管理部２０４が，セクタＩＤ変換テーブルを更新して，ローカルセクタＩＤ＝１に対応するキャッシュセクタＩＤを，呼び出し先関数に対応するキャッシュセクタＩＤに変更する（S635)。すなわち，図３５の時間Ｔ３で示したとおりである。
【０２１３】
そして，ＯＳの関数制御管理部２０１が，呼び出し先関数の開始処理を実行する(S636)。この開始処理には，開始する関数についてのCPU内のレジスタやテーブルの設定などが含まれる。その後，呼び出し先関数２２−２が処理を開始する（S637)。この呼び出し先関数が処理を再開してローカル変数アクセス命令を実行すると，既にデータが退避済みの空きキャッシュ領域を利用してメモリアクセスを開始することができる。
【０２１４】
また，呼び出し元関数の直前に呼び出されていた関数のうち，呼び出し先関数からプリフェッチサイズ１（Ｎ）前より前の関数のローカル変数データが専用キャッシュ領域から退避されて２番目の関数用空きキャッシュ領域として維持されるので，その後更に関数呼び出しが発生してもその関数についてのローカル変数のメモリアクセスを退避処理なしに開始することができる。
【０２１５】
上記の第２の実施の形態では，キャッシュメモリ制御プログラムは，スタックメモリ用キャッシュ領域群１３０−ＳＴ内に，実行中の関数に割り当てた第１の専用キャッシュ領域と，その直前に呼び出された第２の数（Ｎ）の関数に割り当てた第２の専用キャッシュ領域と，第３の数（Ｍ）の専用空きキャッシュ領域とを維持している。
【０２１６】
しかしながら，キャッシュメモリ制御プログラムは，スタックメモリ用キャッシュ領域群１３０−ＳＴ内に，実行中の関数に割り当てた第１の専用キャッシュ領域と，その直前に呼び出された第２の数（Ｎ）の関数に割り当てた第２の専用キャッシュ領域とを維持し，専用空きキャッシュ領域を維持しないようにしても良い。ただし，この場合は，新たな関数が呼び出された場合に，以前に呼び出された関数の専用キャッシュ領域内のデータを一旦退避してから新たな関数のローカル変数データをメモリアクセスしなければならず，メモリアクセスまでの時間が遅れることになる。
【０２１７】
以上の通り，第２の実施の形態によれば，関数やモジュールなどのサブルーチンのローカル変数を格納するスタックメモリ領域について，それぞれのサブルーチンに専用キャッシュ領域が割り当てられ，且つ，そのスタックメモリ用キャッシュ領域群のサイズを最小限の大きさで維持するので，キャッシュメモリの領域を効率的に利用しながら，サブルーチンのローカル変数へのメモリアクセスのキャッシュヒット率を向上させ，また，サブルーチンのローカル変数へのメモリアクセスを効率よく開始させることたできる。
【０２１８】
以上の実施の形態をまとめると，次の付記のとおりである。
【０２１９】
（付記１）
キャッシュメモリ制御工程をプロセッサに実行させるプロセッサ読み取り可能なキャッシュメモリ制御プログラムであって，
前記キャッシュメモリ制御工程は，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，
前記スタックメモリ用キャッシュ領域群内の複数のキャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と，前記第１のサブルーチンの直前に呼び出された第２の数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域と，第３の数の空きキャッシュ領域とに維持するキャッシュ領域割当工程とを有するキャッシュメモリ制御プログラム。
【０２２０】
（付記２）
付記１において，
前記キャッシュ領域割当工程は，
前記第１のサブルーチンが終了して前記第２のサブルーチンのうち前記第１のサブルーチンの直前に呼び出されたサブルーチンが実行開始されるときに，前記第２のサブルーチンより前に呼び出された第３のサブルーチンに前記空きキャッシュ領域を専用キャッシュ領域として割り当てて，前記第３のサブルーチンのスタックメモリ領域内のデータをプリフェッチするキャッシュメモリ制御プログラム。
【０２２１】
（付記３）
付記２において，
前記キャッシュ領域割当工程は，
前記第２の数を，前記スタックメモリ領域内のデータのメモリアクセスに要する時間を，前記サブルーチンの呼び戻し処理に要する時間で除算した数以上に維持するキャッシュメモリ制御プログラム。
【０２２２】
（付記４）
付記１において，
前記キャッシュ領域割当工程は，
前記第１のサブルーチンが実行中に新たな第４のサブルーチンが呼び出されたときに，前記第２のサブルーチンのうち最も早く呼び出されたサブルーチンの専用キャッシュ領域内のデータを前記スタックメモリ領域に退避させて，前記最も早く呼び出されたサブルーチンの専用キャッシュ領域を前記空きキャッシュ領域に割り当てるキャッシュメモリ制御プログラム。
【０２２３】
（付記５）
付記４において，
前記キャッシュ領域割当工程は，
前記第３の数を，前記専用キャッシュ領域内のデータを前記スタックメモリ領域内に退避するのに要する時間を，前記サブルーチンの呼び出し処理に要する時間で除算した数以上に維持するキャッシュメモリ制御プログラム。
【０２２４】
（付記６）
キャッシュメモリ制御工程をプロセッサに実行させるプロセッサ読み取り可能なキャッシュメモリ制御プログラムであって，
前記キャッシュメモリ制御工程は，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，第１の数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，
前記プログラム内で呼び出されたサブルーチンに，前記スタックメモリ用キャッシュ領域群内のキャッシュ領域を専用キャッシュ領域として割り当てると共に，前記割り当てられた専用キャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と前記第１のサブルーチンの直前に呼び出された単数または複数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域とに維持するキャッシュ領域割当工程とを有するキャッシュメモリ制御プログラム。
【０２２５】
（付記７）
付記６において，
前記キャッシュ領域割当工程は，
前記スタックメモリ用キャッシュ領域群内の前記第１及び第２の専用キャッシュ領域以外のキャッシュ領域を，有効なキャッシュデータが記録されていない空きキャッシュ領域として維持するキャッシュメモリ制御プログラム。
【０２２６】
（付記８）
キャッシュメモリ制御方法であって，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，
前記スタックメモリ用キャッシュ領域群内の複数のキャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と，前記第１のサブルーチンの直前に呼び出された第２の数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域と，第３の数の空きキャッシュ領域とに維持するキャッシュ領域割当工程とを有するキャッシュメモリ制御方法。
【０２２７】
（付記９）
キャッシュメモリ制御方法であって，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当工程と，
前記プログラム内で呼び出されたサブルーチンに，前記スタックメモリ用キャッシュ領域群内のキャッシュ領域を専用キャッシュ領域として割り当てると共に，前記割り当てられた専用キャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と前記第１のサブルーチンの直前に呼び出された単数または複数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域とに維持するキャッシュ領域割当工程とを有するキャッシュメモリ制御方法。
【０２２８】
（付記１０）
キャッシュメモリを内蔵するプロセッサであって，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当手段と，
前記スタックメモリ用キャッシュ領域群内の複数のキャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と，前記第１のサブルーチンの直前に呼び出された第２の数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域と，第３の数の空きキャッシュ領域とに維持するキャッシュ領域割当手段とを有するプロセッサ。
【０２２９】
（付記１１）
キャッシュメモリを内蔵するプロセッサであって，
プログラム内で呼び出されるサブルーチンに対するスタックメモリ領域に，複数のキャッシュ領域を有するスタックメモリ用キャッシュ領域群を割り当てるスタックメモリ用キャッシュ領域群割当手段と，
前記プログラム内で呼び出されたサブルーチンに，前記スタックメモリ用キャッシュ領域群内のキャッシュ領域を専用キャッシュ領域として割り当てると共に，前記割り当てられた専用キャッシュ領域を，実行中の第１のサブルーチンに割り当てられた第１の専用キャッシュ領域と前記第１のサブルーチンの直前に呼び出された単数または複数の第２のサブルーチンに割り当てられた第２の専用キャッシュ領域とに維持するキャッシュ領域割当手段とを有するプロセッサ。
【符号の説明】
【０２３０】
１０：プロセッサユニット
１２：CPU
１３：キャッシュユニット
１６：メインメモリ
２０：OS
２１：コンパイラ
２２：アプリケーションプログラム
１３０：キャッシュメモリ
１３０＿１：共用キャッシュ領域
１３０＿２：専用キャッシュ領域
【図１】
2015060376.tif 000003
【図２】
2015060376.tif 000004
【図３】
2015060376.tif 000005
【図４】
2015060376.tif 000006
【図５】
2015060376.tif 000007
【図６】
2015060376.tif 000008
【図７】
2015060376.tif 000009
【図８】
2015060376.tif 000010
【図９】
2015060376.tif 000011
【図１０】
2015060376.tif 000012
【図１１】
2015060376.tif 000013
【図１２】
2015060376.tif 000014
【図１３】
2015060376.tif 000015
【図１４】
2015060376.tif 000016
【図１５】
2015060376.tif 000017
【図１６】
2015060376.tif 000018
【図１７】
2015060376.tif 000019
【図１８】
2015060376.tif 000020
【図１９】
2015060376.tif 000021
【図２０】
2015060376.tif 000022
【図２１】
2015060376.tif 000023
【図２２】
2015060376.tif 000024
【図２３】
2015060376.tif 000025
【図２４】
2015060376.tif 000026
【図２５】
2015060376.tif 000027
【図２６】
2015060376.tif 000028
【図２７】
2015060376.tif 000029
【図２８】
2015060376.tif 000030
【図２９】
2015060376.tif 000031
【図３０】
2015060376.tif 000032
【図３１】
2015060376.tif 000033
【図３２】
2015060376.tif 000034
【図３３】
2015060376.tif 000035
【図３４】
2015060376.tif 000036
【図３５】
2015060376.tif 000037
【図３６】
2015060376.tif 000038
【図３７】
2015060376.tif 000039
【図３８】
2015060376.tif 000040