(57)【要約】【課題】キャッシュメモリ内にループを構成する命令を保持することができる半導体装置を提供する。【解決手段】メインメモリ２は、命令を記憶する。キャッシュメモリ５は、命令を一時記憶する。ＣＰＵ３は、メインメモリ２またはキャッシュメモリ５から命令を読み出して実行する。キャッシュ制御部４は、過去に読み出された命令と同一の命令を所定の読出し回数以内に再度読み出した場合に、キャッシュメモリ５内の命令の更新を停止させる。【選択図】図１
2014026443.tif 000002
【特許請求の範囲】
【請求項１】
命令を記憶するメインメモリと、
前記命令を一時記憶するキャッシュメモリと、
前記メインメモリまたは前記キャッシュメモリから命令を読み出して実行するＣＰＵと、
過去に読み出された命令と同一の命令を所定の読出し回数以内に再度読み出した場合に、前記キャッシュメモリ内の命令の更新を停止させるキャッシュ制御部とを備える半導体装置。
【請求項２】
前記キャッシュ制御部は、
レジスタと、
キャッシュミスによって前記メインメモリから読み出され、かつ前記キャッシュメモリに保持されている命令に代えて書き込まれた命令のアドレスを前記レジスタに保持させるロック制御部とを含み、
前記ロック制御部は、前記メインメモリまたは前記キャッシュメモリから読み出された命令のアドレスと前記レジスタに保持されているアドレスとが一致するときに、前記キャッシュメモリ内の命令の更新を停止する、請求項１記載の半導体装置。
【請求項３】
前記キャッシュ制御部は、
レジスタと、
キャッシュミスによって前記メインメモリから読み出された命令の代わりとして、前記キャッシュメモリから削除された命令のアドレスを前記レジスタに保持させるロック制御部とを含み、
前記ロック制御部は、前記メインメモリまたは前記キャッシュメモリから読み出された命令のアドレスと前記レジスタに保持されているアドレスとが一致するときに、前記キャッシュメモリ内の命令の更新を停止する、請求項１記載の半導体装置。
【請求項４】
前記ロック制御部は、前記キャッシュメモリの更新を停止した後に、連続キャッシュミス回数が所定値を超えたときに、前記キャッシュメモリの更新停止を解除する、請求項２または３記載の半導体装置。
【請求項５】
前記キャッシュ制御部は、
カウンタと、
レジスタと、
前記メインメモリまたは前記キャッシュメモリから命令を読み出すごとに前記カウンタをインクリメントするロック制御部と、
前記ロック制御部は、キャッシュミスによって前記メインメモリから読み出され、かつ前記キャッシュメモリに保持されている命令に代えて書き込まれた命令のアドレスを前記レジスタに保持させ、
前記ロック制御部は、前記カウンタが所定値以下であって、かつ前記メインメモリまたは前記キャッシュメモリから読み出された命令のアドレスと前記レジスタに保持されているアドレスとが一致するときに、前記キャッシュメモリ内の命令の更新を停止する、請求項１記載の半導体装置。
【請求項６】
前記キャッシュ制御部は、
カウンタと、
レジスタと、
前記メインメモリまたは前記キャッシュメモリから命令を読み出すごとに前記カウンタをインクリメントするロック制御部とを備え、
前記ロック制御部は、キャッシュミスによって前記メインメモリから読み出された命令の代わりとして、前記キャッシュメモリから削除された命令のアドレスを前記レジスタに保持させ、
前記ロック制御部は、前記カウンタが所定値以下であって、かつ前記メインメモリまたは前記キャッシュメモリから読み出された命令のアドレスと前記レジスタに保持されているアドレスとが一致するときに、前記キャッシュメモリ内の命令の更新を停止する、請求項１記載の半導体装置。
【請求項７】
前記ロック制御部は、前記キャッシュメモリ内の命令の更新を停止する前に、前記カウンタが前記所定値を超えた時点で、前記メインメモリまたは前記キャッシュメモリから読み出された命令のアドレスで前記レジスタ内のデータを更新し、かつ前記カウンタを初期値にリセットする、請求項５または６記載の半導体装置。
【請求項８】
前記ロック制御部は、前記キャッシュメモリの更新を停止したときには、前記カウンタを初期値にリセットし、
前記ロック制御部は、前記更新の停止後、前記メインメモリまたは前記キャッシュメモリから命令を読み出すごとに前記カウンタをインクリメントし、
前記ロック制御部は、前記メインメモリまたは前記キャッシュメモリから読み出された命令のアドレスと前記レジスタに保持されているアドレスとが一致したときに前記カウンタを初期値にリセットし、
前記ロック制御部は、前記カウンタの値が所定値を超えた場合に、前記キャッシュメモリの更新停止を解除する、請求項５または６記載の半導体装置。
【請求項９】
前記ロック制御部は、前記キャッシュメモリの更新を停止したときには、前記カウンタを初期値にリセットし、
前記ロック制御部は、前記更新の停止後、前記キャッシュミスごとに前記カウンタをインクリメントし、
前記ロック制御部は、前記メインメモリまたは前記キャッシュメモリから読み出された命令のアドレスと前記レジスタに保持されているアドレスとが一致したときに前記カウンタを初期値にリセットし、
前記ロック制御部は、前記カウンタの値が所定値を超えた場合に、前記キャッシュメモリの更新停止を解除する、請求項５または６記載の半導体装置。
【請求項１０】
前記ロック制御部は、前記キャッシュメモリの更新を停止したときには、前記カウンタを初期値にリセットし、
前記ロック制御部は、前記更新の停止後、前記キャッシュミスごとに前記カウンタをインクリメントし、キャッシュヒットごとに前記カウンタを初期値にリセットし、
前記ロック制御部は、前記カウンタの値が所定値を超えた場合に、前記キャッシュメモリの更新停止を解除する、請求項５または６記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置に関し、たとえばキャッシュメモリを有する半導体装置に関する。
【背景技術】
【０００２】
近年、マイクロプロセッサシステムの性能向上を図るためにキャッシュメモリを用いられている。面積と性能のトレードオフから小容量でフルアソシアティブ方式の命令キャッシュを搭載することが多い。
【０００３】
たとえば、特許文献１（特開２０００−３３９２２２号公報）のキャッシュメモリは、各エントリに対応してキャッシュヒットまたはキャッシュミスが連続して発生している回数を保持するヒットミスカウント回路（３００）と、キャッシュメモリのエントリのリプレースを禁止するか否かを制御する書込制御回路（４００）とを含む。書込制御回路（４００）は、リプレースを禁止する条件としての連続ヒット回数と、リプレース禁止を解除する条件としての連続ミス回数とを設定され、これら条件に応じてリプレースを禁止するか否かを制御する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−３３９２２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、プログラム中にループが存在する場合には、ループを構成する命令は、繰り返し使用するのでリプレースすることなくキャッシュメモリ内に留めておくことが望ましい。
【０００６】
しかしながら、特許文献１に記載されているようなキャッシュヒットの連続回数に従ってリプレースを禁止する方法では、ループを構成する命令をうまく保持することができない。
【０００７】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかであろう。
【課題を解決するための手段】
【０００８】
一実施の形態の半導体装置は、過去に読み出された命令と同一の命令を所定の読出し回数以内に再度読み出した場合に、前記キャッシュメモリ内の命令の更新を停止させる。
【発明の効果】
【０００９】
一実施の形態の半導体装置によれば、キャッシュメモリ内にループを構成する命令を保持することができる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態の半導体装置の構成を表わす図である。
【図２】第２の実施形態の半導体装置の表わす図である。
【図３】キャッシュロック制御をしない従来の動作を説明するための図である。
【図４】第２の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図５】第２の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図６】第２の実施形態の動作例を説明するための図である。
【図７】第３の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図８】第３の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図９】第３の実施形態の動作例を説明するための図である。
【図１０】第４の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図１１】第４の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図１２】第４の実施形態の動作例を説明するための図である。
【図１３】第５の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図１４】第５の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図１５】第５の実施形態の動作例を説明するための図である。
【図１６】第６の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図１７】第６の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図１８】第６の実施形態の動作例を説明するための図である。
【図１９】第７の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図２０】第７の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【図２１】第７の実施形態の動作例を説明するための図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について、図面を用いて説明する。
［第１の実施形態］
図１は、第１の実施形態の半導体装置１の構成を表わす図である。
【００１２】
図１を参照して、この半導体装置１は、ＣＰＵ３と、メインメモリ２と、キャッシュメモリ５と、キャッシュ制御部４とを備える。
【００１３】
メインメモリ２は、命令を記憶する。
キャッシュメモリ５は、命令を一時的に記憶する。
【００１４】
ＣＰＵ３は、メインメモリ２またはキャッシュメモリ５から命令を読み出して実行する。
【００１５】
キャッシュ制御部４は、過去に読み出された命令と同一の命令を所定の読出し回数以内に再度読み出した場合に、キャッシュメモリ５の更新を停止させる。キャッシュメモリ５の更新を停止することを、本明細書では、キャッシュロックと呼ぶこともある。
【００１６】
以上のように、本実施の形態によれば、ループを有するプログラムを実行する場合において、過去に読み出された命令と同一の命令を所定の読出し回数以内に再度読み出した場合に、キャッシュメモリ５の更新を停止させるので、キャッシュメモリ５内にループを構成する命令を保持することができる。その結果、キャッシュメモリ５の更新によって必要なデータが追い出されるのが防止され、キャッシュメモリ５のヒット率が向上する。
【００１７】
［第２の実施形態］
図２は、第２の実施形態の半導体装置１の表わす図である。
【００１８】
図２を参照して、この半導体装置１は、ＣＰＵ３と、メインメモリ２と、キャッシュメモリ５と、キャッシュ制御部４とを備える。
【００１９】
メインメモリ２は、命令を記憶する。
キャッシュメモリ５は、フルアソシアティブ方式のキャッシュメモリであり、命令を一時的に記憶する。
【００２０】
ＣＰＵ３は、メインメモリ２またはキャッシュメモリ５から命令を読み出して実行する。
【００２１】
キャッシュ制御部４は、ロック制御部６と、カウンタＣＴと、ロックアドレスレジスタ８とを有する。  
【００２２】
カウンタＣＴは、メインメモリ２またはキャッシュメモリ５からの命令の読出し回数をカウントする。カウンタＣＴは、所定値を超えたときにオーバーフロー信号を出力する。カウンタＣＴは、オーバーフローした場合、および読出した命令のアドレスがロックアドレスと一致した場合（ロックアドレスヒット）には、初期化される。
【００２３】
ロックアドレスレジスタ８は、ロックアドレスを格納する。
ロック制御部６は、メインメモリ２またはキャッシュメモリ５から命令を読み出すごとにカウンタＣＴをインクリメントする。
【００２４】
ロック制御部６は、キャッシュミスによってメインメモリ２から読み出され、キャッシュメモリ５に保持されている命令に代えて書き込まれた命令のアドレスをロックアドレスとしてロックアドレスレジスタ８に保持させる。
【００２５】
ロック制御部６は、読み出した命令のアドレスと、ロックアドレスレジスタ８内のロックアドレスとの比較、およびカウンタＣＴからのオーバーフロー信号に基づいて、ロック信号ＬＫのレベルを制御する。ロック信号ＬＫが「Ｈ」レベルになると、キャッシュメモリ５の更新が停止（ロック）される。ロック信号ＬＫは、ロックアドレスヒットした場合に「Ｈ」レベルに活性化される。ロック信号ＬＫが活性化されると、キャッシュミスが発生しても、キャッシュメモリ５内の命令の更新が抑制される。ロック信号ＬＫが活性化された状態で、カウンタＣＴがオーバーフローした場合はロック信号ＬＫが非活性化される。
【００２６】
ロック制御部６は、カウンタＣＴが所定値以下（オーバーフロー信号が出力されない）であって、かつメインメモリ２またはキャッシュメモリ５から読み出された命令のアドレスと、ロックアドレスレジスタ８に保持されているロックアドレスとが一致するときに、キャッシュメモリ５内の命令の更新を停止するために、ロック信号ＬＫを「Ｈ」レベルに活性化する。
【００２７】
ロック制御部６は、カウンタＣＴが所定値を超えた時点で、メインメモリ２またはキャッシュメモリ５から読み出された命令のアドレスでロックアドレスレジスタ８内のデータ（ロックアドレス）を更新し、かつカウンタＣＴを初期値「０」にリセットする。
【００２８】
ロック制御部６は、キャッシュメモリ５の更新を停止したときには、カウンタＣＴを初期値にリセットする。ロック制御部６は、更新の停止後、メインメモリ２またはキャッシュメモリ５から命令を読み出すごとにカウンタＣＴをインクリメントする。さらに、ロック制御部６は、メインメモリ２またはキャッシュメモリ５から読み出された命令のアドレスとロックアドレスレジスタ８に保持されているロックアドレスとが一致したときにカウンタＣＴを初期値にリセットする。ロック制御部６は、カウンタＣＴの値が所定値を超えた場合に、キャッシュメモリ５の更新停止を解除するためにロック信号ＬＫを「Ｌ」レベルに非活性化する。
（キャッシュロック制御をしない従来の動作）  
図３は、キャッシュロック制御をしない従来の動作を説明するための図である。
【００２９】
図３には、エントリ数が「４」のフルアソシアティブキャッシュメモリが示されている。
【００３０】
ループは、命令０〜命令４の５個の命令で構成される。
第１ステップでは、命令０がキャッシュミスのため、命令０がキャッシュメモリのエントリ０に登録される。第２ステップでは、命令１がキャッシュミスのため、命令１がキャッシュメモリのエントリ１に登録される。第３ステップでは、命令２がキャッシュミスのため、命令２がキャッシュメモリのエントリ２に登録される。第４ステップでは、命令３がキャッシュミスのため、命令３がキャッシュメモリのエントリ３に登録される。第５ステップでは、命令４がキャッシュミスのため、命令４がキャッシュメモリのエントリ０に登録される。第６ステップでは、命令０がキャッシュミスのため、命令０がキャッシュメモリのエントリ１に登録される。第７ステップでは、命令１がキャッシュミスのため、命令１がキャッシュメモリのエントリ２に登録される。第８ステップでは、命令２がキャッシュミスのため、命令２がキャッシュメモリのエントリ３に登録される。
【００３１】
このように、キャッシュメモリを有しているにも係わらず、キャッシュメモリのエントリ数を超える命令数のループを有するプログラムを実行する場合、キャッシュメモリに命令をうまく保持することができないという問題がある。
【００３２】
（キャッシュロック制御の動作）
図４および図５は、第２の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【００３３】
ロック制御部６は、カウンタＣＴを「０」に初期化し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ロックアドレスレジスタ８を初期化する（ステップＳ１０１）。
【００３４】
ＣＰＵ３は、プログラムで指定されたアドレスの命令がキャッシュメモリ５に登録されている（キャッシュヒット）場合には（ステップＳ１０２でＹＥＳ）、指定されたアドレスの命令をキャッシュメモリ５から読み出す（ステップＳ１０３）。
【００３５】
ＣＰＵ３は、指定されたアドレスの命令がキャッシュメモリ５に登録されていない（キャッシュミス）場合には（ステップＳ１０２でＮＯ）、指定されたアドレスの命令をメインメモリ２から読み出す（ステップＳ１０４）。
【００３６】
さらに、ＣＰＵ３は、キャッシュメモリ５に空きエントリがあれば（ステップＳ１０５でＹＥＳ）、読み出した命令を空きエントリに登録する（ステップＳ１０６）。
【００３７】
一方、ＣＰＵ３は、キャッシュメモリ５に空きエントリがなければ（ステップＳ１０５でＮＯ）、参照されていない時間が最も長い命令のエントリに読み出した命令を登録する（ステップＳ１０７）。さらに、ロック制御部６は、キャッシュミスによってメインメモリ２から読み出され、参照されていない時間が最も長い命令に代えて書き込まれた命令のアドレスをロックアドレスレジスタ８に登録する。ロック制御部６は、カウンタＣＴの値を「０」に初期化する（ステップＳ１０８）。
【００３８】
次に、ＣＰＵ３は、プログラムで次に指定されたアドレスの命令がキャッシュメモリ５に登録されている（キャッシュヒット）場合には（ステップＳ１０９でＹＥＳ）、指定されたアドレスの命令をキャッシュメモリ５から読み出す（ステップＳ１１０）。
【００３９】
ＣＰＵ３は、指定されたアドレスの命令がキャッシュメモリ５に登録されていない（キャッシュミス）場合には（ステップＳ１０９でＮＯ）、指定されたアドレスの命令をメインメモリ２から読み出す（ステップＳ１１１）。さらに、ＣＰＵ３は、参照されていない時間が最も長い命令のエントリに読み出した命令を登録する（ステップＳ１１２）。
【００４０】
ロック制御部６は、カウンタＣＴをインクリメントする（ステップＳ１１３）。
カウンタＣＴの値が基準値ＴＨ１を超える場合には（ステップＳ１１４でＮＯ）、ロック制御部６は、ステップＳ１０８からの処理が繰り返されるように処理手順を制御する。
【００４１】
カウンタＣＴの値が基準値ＴＨ１以下の場合であって（ステップＳ１１４でＹＥＳ）、指定されたアドレスがロックアドレスレジスタ８に登録されていない場合には（ステップＳ１１５でＮＯ）、ロック制御部６は、ステップＳ１０９からの処理が繰り返されるように処理手順を制御する。
【００４２】
カウンタＣＴの値が基準値ＴＨ１以下の場合であって（ステップＳ１１４でＹＥＳ）、指定されたアドレスがロックアドレスレジスタ８に登録されている場合には（ステップＳ１１５でＹＥＳ）、ロック制御部６は、ロック信号ＬＫを「Ｈ」レベルに活性化し（ステップＳ１１６）、カウンタＣＴの値を「０」に初期化する（ステップＳ１１７）。
【００４３】
次に、ＣＰＵ３は、プログラムで次に指定されたアドレスの命令がキャッシュメモリ５に登録されている（キャッシュヒット）場合には（ステップＳ１１８でＹＥＳ）、指定されたアドレスの命令をキャッシュメモリ５から読み出す（ステップＳ１１９）。
【００４４】
ＣＰＵ３は、指定されたアドレスの命令がキャッシュメモリ５に登録されていない（キャッシュミス）場合には（ステップＳ１１８でＮＯ）、指定されたアドレスの命令をメインメモリ２から読み出す（ステップＳ１２０）。  
【００４５】
ロック制御部６は、カウンタＣＴをインクリメントする（ステップＳ１２２）。
カウンタＣＴの値が基準値ＴＨ２以下の場合であって（ステップＳ１２３でＹＥＳ）、指定されたアドレスがロックアドレスレジスタ８に登録されていない場合には（ステップＳ１２４でＮＯ）、ロック制御部６は、ステップＳ１１８からの処理が繰り返されるように処理手順を制御する。
【００４６】
カウンタＣＴの値が基準値ＴＨ２以下の場合であって（ステップＳ１２３でＹＥＳ）、指定されたアドレスがロックアドレスレジスタ８に登録されている場合には（ステップＳ１２４でＹＥＳ）、ロック制御部６は、ステップＳ１１７からの処理が繰り返されるように処理手順を制御する。
【００４７】
カウンタＣＴの値が基準値ＴＨ２を超える場合には（ステップＳ１２３でＮＯ）、ロック制御部６は、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ＣＰＵ３は、参照されていない時間が最も長い命令のエントリに読み出した命令を登録する（ステップＳ１２５）。さらに、ロック制御部６は、ステップＳ１０８からの処理が繰り返されるように処理手順を制御する。
【００４８】
（動作例）
図６は、第２の実施形態の動作例を説明するための図である。図６では、図３と同様に、キャッシュメモリ５は、エントリ数が「４」のフルアソシアティブキャッシュメモリであり、ループは、命令０〜命令４の５個の命令で構成される。
【００４９】
ステップ（０）において、ロック制御部６は、カウンタＣＴを「０」に初期化し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ロックアドレスレジスタ８を初期化する。
【００５０】
ステップ（１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、キャッシュメモリ５に登録する。  
【００５１】
ステップ（２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出して、キャッシュメモリ５に登録する。  
【００５２】
ステップ（３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令２を読み出して、キャッシュメモリ５に登録する。  
【００５３】
ステップ（４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令３を読み出して、キャッシュメモリ５に登録する。  
【００５４】
ステップ（５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出して、参照されていない時間が最も長い命令０に代えて、命令４をキャッシュメモリ５に登録する。また、ロック制御部６は、キャッシュメモリ５に登録した命令４のアドレスをロックアドレスとしてロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化する。
【００５５】
ステップ（６）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、参照されていない時間が最も長い命令１に代えて、命令０をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００５６】
ステップ（７）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出して、参照されていない時間が最も長い命令２に代えて、命令１をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００５７】
ステップ（８）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令２を読み出して、参照されていない時間が最も長い命令３に代えて、命令２をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「３」にインクリメントする。カウンタＣＴの値「３」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００５８】
ステップ（９）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令３を読み出して、参照されていない時間が最も長い命令４に代えて、命令３をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「４」にインクリメントする。カウンタＣＴの値「４」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００５９】
ステップ（１０）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出して、参照されていない時間が最も長い命令０に代えて、命令４をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「５」にインクリメントする。カウンタＣＴの値「５」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と一致するので、ロック制御部６は、ロック信号ＬＫを「Ｈ」レベルに活性化し、カウンタＣＴの値を「０」に初期化する。
【００６０】
ステップ（１１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００６１】
ステップ（１２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令１を読み出す。ロック制御部６は、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ２（＝「５」）以下であり、かつ、キャッシュメモリ５から読み出された命令１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００６２】
ステップ（１３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令２を読み出す。ロック制御部６は、カウンタＣＴを「３」にインクリメントする。カウンタＣＴの値「３」が基準値ＴＨ２（＝「５」）以下であり、かつ、キャッシュメモリ５から読み出された命令２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００６３】
ステップ（１４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令３を読み出す。ロック制御部６は、カウンタＣＴを「４」にインクリメントする。カウンタＣＴの値「４」が基準値ＴＨ２（＝「５」）以下であり、かつ、キャッシュメモリ５から読み出された命令３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００６４】
ステップ（１５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令４を読み出す。ロック制御部６は、カウンタＣＴを「５」にインクリメントする。カウンタＣＴの値「５」が基準値ＴＨ２（＝５」）以下であり、かつ、キャッシュメモリ５から読み出された命令４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と一致するので、ロック制御部６は、ロック信号ＬＫ、およびロックアドレスレジスタ８の格納アドレスを維持するとともに、カウンタＣＴの値を「０」に初期化する。
【００６５】
ステップ（１６）において、ＣＰＵ３は、命令１０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１０を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００６６】
ステップ（１７）において、ＣＰＵ３は、命令１１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ２（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００６７】
ステップ（１８）において、ＣＰＵ３は、命令１２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１２を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「３」にインクリメントする。カウンタＣＴの値「３」が基準値ＴＨ２（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００６８】
ステップ（１９）において、ＣＰＵ３は、命令１３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１３を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「４」にインクリメントする。カウンタＣＴの値「４」が基準値ＴＨ２（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００６９】
ステップ（２０）において、ＣＰＵ３は、命令１４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１４を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「５」にインクリメントする。カウンタＣＴの値「５」が基準値ＴＨ２（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００７０】
ステップ（２１）において、ＣＰＵ３は、命令１５がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１５を読み出す。ロック制御部６は、カウンタＣＴを「６」にインクリメントする。カウンタＣＴの値「５」が基準値ＴＨ２（＝「５」）を超えるので、ＣＰＵ３は、参照されていない時間が最も長い命令１に代えて、命令１５をキャッシュメモリ５に登録する。ロック制御部６は、キャッシュメモリ５に登録した命令１５のアドレスをロックアドレスレジスタ８に登録し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、カウンタＣＴの値を「０」に初期化する。
【００７１】
以上のように、本実施の形態では、キャッシュのエントリ数よりも少し大きいサイズのループを有するプログラムを実行する場合に、キャッシュメモリ５に登録された命令が再度読み出されるまでの間隔を測定することによって、ループを構成する命令が読み出されたか否かを判断する。ループを構成する命令が読みだされた場合に、キャッシュメモリ５の更新を停止する（ロックする）。これにより、小さいループが含まれるプログラムにおいてキャッシュヒット率が向上し、システム全体の処理性能が向上する。また、キャッシュメモリ５へのヒット率が向上することで、メモリへのアクセス回数が削減でき、システム全体の消費電力を削減することができる。回路面積においても、キャッシュメモリ５のエントリ数を増やすことによる性能向上よりも費用対効果の点で高い性能向上を得ることができる。
【００７２】
［第３の実施形態］
第３の実施形態が、第２の実施形態と相違する点は、ロック制御部６である。
【００７３】
第２の実施形態では、ロック制御部６は、キャッシュメモリ５の更新の停止後、命令をメインメモリ２またはキャッシュメモリ５から読み出すごとにカウンタＣＴをインクリメントした。これに対して、第３の実施形態では、ロック制御部６は、キャッシュメモリ５の更新の停止後、キャッシュミスごとにカウンタＣＴをインクリメントする。
【００７４】
（キャッシュロック制御の動作）
図７および図８は、第３の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【００７５】
図７および図８のフローチャートが、図４および図５のフローチャートと相違する点は以下である。
【００７６】
図４および図５では、ステップＳ１１８において、キャッシュがヒットした（ステップＳ１１８でＹＥＳ）か、キャッシュミスした（ステップＳ１１８でＮＯ）かに係わらず、ステップＳ１２２において、ロック制御部６は、カウンタＣＴをインクリメントした。
【００７７】
これに対して、図７および図８では、ステップＳ１１８において、キャッシュがミスした（ステップＳ１１８でＮＯ）場合に、ロック制御部６は、ステップＳ１２２においてカウンタＣＴをインクリメントする。キャッシュがヒットした（ステップＳ１１８でＹＥＳ）場合に、ロック制御部６は、カウンタＣＴをインクリメントしない。
【００７８】
（動作例）
図９は、第３の実施形態の動作例を説明するための図である。図９では、図３と同様に、キャッシュメモリ５は、エントリ数が「４」のフルアソシアティブキャッシュメモリであり、ループは、命令０〜命令４の５個の命令で構成される。
【００７９】
ステップ（０）において、ロック制御部６は、カウンタＣＴを「０」に初期化し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ロックアドレスレジスタ８を初期化する。
【００８０】
ステップ（１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、キャッシュメモリ５に登録する。
【００８１】
ステップ（２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出して、キャッシュメモリ５に登録する。
【００８２】
ステップ（３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令２を読み出して、キャッシュメモリ５に登録する。
【００８３】
ステップ（４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令３を読み出して、キャッシュメモリ５に登録する。
【００８４】
ステップ（５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出して、参照されていない時間が最も長い命令０に代えて、命令４をキャッシュメモリ５に登録する。また、ロック制御部６は、キャッシュメモリ５に登録した命令４のアドレスをロックアドレスとしてロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化する。
【００８５】
ステップ（６）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、参照されていない時間が最も長い命令１に代えて、命令０をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００８６】
ステップ（７）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出して、参照されていない時間が最も長い命令２に代えて、命令１をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００８７】
ステップ（８）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令２を読み出して、参照されていない時間が最も長い命令３に代えて、命令２をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「３」にインクリメントする。カウンタＣＴの値「３」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００８８】
ステップ（９）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令３を読み出して、参照されていない時間が最も長い命令４に代えて、命令３をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「４」にインクリメントする。カウンタＣＴの値「４」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００８９】
ステップ（１０）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出して、参照されていない時間が最も長い命令０に代えて、命令４をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「５」にインクリメントする。カウンタＣＴの値「５」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と一致するので、ロック制御部６は、ロック信号ＬＫを「Ｈ」レベルに活性化し、カウンタＣＴの値を「０」に初期化する。
【００９０】
ステップ（１１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、メインメモリ２から読み出された命令０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００９１】
ステップ（１２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令１を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００９２】
ステップ（１３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令２を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００９３】
ステップ（１４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令３を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００９４】
ステップ（１５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令４を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と一致するので、ロック制御部６は、ロック信号ＬＫ、およびロックアドレスレジスタ８の格納アドレスを維持するとともに、カウンタＣＴの値を「０」に初期化する。
【００９５】
ステップ（１６）において、ＣＰＵ３は、命令１０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１０を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、メインメモリ２から読み出された命令１０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００９６】
ステップ（１７）において、ＣＰＵ３は、命令１１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ２（＝「２」）以下であり、かつ、メインメモリ２から読み出された命令１１がロックアドレスレジスタ８にアドレスが格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【００９７】
ステップ（１８）において、ＣＰＵ３は、命令１２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１２を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「３」にインクリメントする。カウンタＣＴの値「３」が基準値ＴＨ２（＝「２」）を超えるので、ロック制御部６は、キャッシュメモリ５に登録した命令１２のアドレスをロックアドレスレジスタ８に登録し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、カウンタＣＴの値を「０」に初期化する。ＣＰＵ３は、ロック信号ＬＫが「Ｌ」レベルに非活性化されたことによって、参照されていない時間が最も長い命令１に代えて、命令１２をキャッシュメモリ５に登録する。ロック制御部６は、キャッシュメモリ５に登録された命令１２のアドレスをロックアドレスとしてロックアドレスレジスタ８に登録する。
【００９８】
以上のように、本実施の形態によれば、第２の実施形態と同様に、キャッシュのエントリ数よりも少し大きいサイズのループを有するプログラムを実行する場合に、キャッシュメモリ５に登録された命令が再度読み出されるまでの間隔を測定することによって、ループを構成する命令が読み出されたか否かを判断する。ループを構成する命令が読みだされた場合に、キャッシュメモリ５の更新を停止する（ロックする）。
【００９９】
［第４の実施形態]
第４の実施形態が、第２の実施形態と相違する点は、ロック制御部６である。
【０１００】
第２の実施形態では、ロック制御部６は、キャッシュメモリ５の更新の停止後、命令をメインメモリ２またはキャッシュメモリ５から読み出すごとにカウンタＣＴをインクリメントした。また、ロック制御部６は、キャッシュメモリ５の更新の停止後、メインメモリ２またはキャッシュメモリ５から読み出された命令のアドレスとロックアドレスレジスタ８に保持されているロックアドレスとが一致したときにカウンタＣＴを初期値にリセットした。
【０１０１】
これに対して、第４の実施形態では、ロック制御部は、キャッシュメモリの更新を停止した後に、連続キャッシュミス回数が所定値を超えたときに、キャッシュメモリの更新停止を解除する。すなわち、ロック制御部６は、キャッシュメモリ５の更新の停止後、キャッシュミスごとにカウンタＣＴをインクリメントし、キャッシュヒットごとにカウンタＣＴを初期値「０」にリセットする。また、ロック制御部６は、キャッシュメモリ５の更新の停止後、メインメモリ２またはキャッシュメモリ５から読み出された命令のアドレスとロックアドレスレジスタ８に保持されているロックアドレスとの比較をしない。
【０１０２】
（動作）
図１０および図１１は、第４の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【０１０３】
図１０および図１１のフローチャートが、図４および図５のフローチャートと相違する点は以下である。
【０１０４】
図４および図５では、ステップＳ１１８において、キャッシュがヒットした（ステップＳ１１８でＹＥＳ）か、キャッシュミスした（ステップＳ１１８でＮＯ）かに係わらず、ステップＳ１２２において、ロック制御部６は、カウンタＣＴをインクリメントした。
【０１０５】
これに対して、図１０および図１１では、ステップＳ１１８において、キャッシュがミスした（ステップＳ１１８でＮＯ）場合に、ロック制御部６は、ステップＳ１２２においてカウンタＣＴをインクリメントする。一方、ステップＳ１１８において、キャッシュがヒットした（ステップＳ１１８でＹＥＳ）場合に、ロック制御部６は、ステップＳ１３０においてカウンタＣＴの値を「０」に初期化する。
【０１０６】
図４および図５では、ステップＳ１２３において、カウンタＣＴの値が基準値ＴＨ２以下となった場合には、指定されたアドレスがロックアドレスレジスタ８に登録されていない場合には（ステップＳ１２４でＮＯ）、ロック制御部６は、ステップＳ１１８からの処理が繰り返されるように処理手順を制御し、指定されたアドレスがロックアドレスレジスタ８に登録されている場合には（ステップＳ１２４でＹＥＳ）、ロック制御部６は、ステップＳ１１７からの処理が繰り返されるように処理手順を制御した。
【０１０７】
これに対して、図１０および図１１では、ステップＳ１２３において、カウンタＣＴの値が基準値ＴＨ２以下となった場合には、ロック制御部６は、ロックアドレスレジスタ８を参照することなく、ステップＳ１１８からの処理が繰り返されるように処理手順を制御する。
【０１０８】
（動作例）
図１２は、第４の実施形態の動作例を説明するための図である。図１２では、図３と同様に、キャッシュメモリ５は、エントリ数が「４」のフルアソシアティブキャッシュメモリであり、ループは、命令０〜命令４の５個の命令で構成される。
【０１０９】
ステップ（０）において、ロック制御部６は、カウンタＣＴを「０」に初期化し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ロックアドレスレジスタ８を初期化する。
【０１１０】
ステップ（１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、キャッシュメモリ５に登録する。
【０１１１】
ステップ（２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出して、キャッシュメモリ５に登録する。
【０１１２】
ステップ（３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令２を読み出して、キャッシュメモリ５に登録する。
【０１１３】
ステップ（４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令３を読み出して、キャッシュメモリ５に登録する。
【０１１４】
ステップ（５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出して、参照されていない時間が最も長い命令０に代えて、命令４をキャッシュメモリ５に登録する。また、ロック制御部６は、キャッシュメモリ５に登録した命令４のアドレスをロックアドレスとしてロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化する。
【０１１５】
ステップ（６）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、参照されていない時間が最も長い命令１に代えて、命令０をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１１６】
ステップ（７）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出して、参照されていない時間が最も長い命令２に代えて、命令１をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１１７】
ステップ（８）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令２を読み出して、参照されていない時間が最も長い命令３に代えて、命令２をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「３」にインクリメントする。カウンタＣＴの値「３」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１１８】
ステップ（９）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令３を読み出して、参照されていない時間が最も長い命令４に代えて、命令３をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「４」にインクリメントする。カウンタＣＴの値「４」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１１９】
ステップ（１０）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出して、参照されていない時間が最も長い命令０に代えて、命令３をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「５」にインクリメントする。カウンタＣＴの値「５」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令４と一致するので、ロック制御部６は、ロック信号ＬＫを「Ｈ」レベルに活性化し、カウンタＣＴの値を「０」に初期化する。
【０１２０】
ステップ（１１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１２１】
ステップ（１２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令１を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１２２】
ステップ（１３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令２を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１２３】
ステップ（１４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令３を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１２４】
ステップ（１５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令４を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１２５】
ステップ（１６）において、ＣＰＵ３は、命令１０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１０を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１２６】
ステップ（１７）において、ＣＰＵ３は、命令１１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ２（＝「１」）を超えるので、ロック制御部６は、キャッシュメモリ５に登録した命令１１のアドレスをロックアドレスレジスタ８に登録し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、カウンタＣＴの値を「０」に初期化する。ＣＰＵ３は、ロック信号ＬＫが「Ｌ」レベルに非活性化されたことによって、参照されていない時間が最も長い命令１に代えて、命令１１をキャッシュメモリ５に登録する。ロック制御部６は、キャッシュメモリ５に登録された命令１１のアドレスをロックアドレスとしてロックアドレスレジスタ８に登録する。
【０１２７】
以上のように、本実施の形態によれば、第２の実施形態と同様に、キャッシュのエントリ数よりも少し大きいサイズのループを有するプログラムを実行する場合に、キャッシュメモリ５に登録された命令が再度読み出されるまでの間隔を測定することによって、ループを構成する命令が読み出されたか否かを判断する。ループを構成する命令が読みだされた場合に、キャッシュメモリ５の更新を停止する（ロックする）。
【０１２８】
［第５の実施形態］
第５の実施形態が、第２の実施形態と相違する点は、ロックアドレスレジスタ８に登録される命令である。
【０１２９】
すなわち、第２の実施形態では、ロック制御部６は、キャッシュミスによってメインメモリ２から読み出され、かつキャッシュメモリ５に保持されている命令に代えて書き込まれた命令のアドレスをロックアドレスレジスタ８に保持させた。
【０１３０】
これに対して、第５の実施形態では、ロック制御部６は、キャッシュミスによってメインメモリ２から読み出された命令の代わりとして、キャッシュメモリ５から削除された命令のアドレスをロックアドレスレジスタ８に保持させる。
【０１３１】
（動作）
図１３および図１４は、第５の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【０１３２】
図１３および図１４のフローチャートが、図４および図５のフローチャートと相違する点は以下である。
【０１３３】
図４および図５では、ステップＳ１０８において、ロック制御部６は、読み出した命令（つまり、キャッシュミスによってキャッシュに登録された命令）のアドレスをロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化した。
【０１３４】
これに対して、図では、ステップＳ５０８において、ロック制御部６は、キャッシュミスによって置き換えられた命令（つまり、キャッシュから削除された命令）のアドレスをロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化する。
【０１３５】
（動作例）
図１５は、第５の実施形態の動作例を説明するための図である。図１５では、図３と同様に、キャッシュメモリ５は、エントリ数が「４」のフルアソシアティブキャッシュメモリであり、ループは、命令０〜命令４の５個の命令で構成される。
【０１３６】
ステップ（０）において、ロック制御部６は、カウンタＣＴを「０」に初期化し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ロックアドレスレジスタ８を初期化する。
【０１３７】
ステップ（１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、キャッシュメモリ５に登録する。
【０１３８】
ステップ（２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出して、キャッシュメモリ５に登録する。
【０１３９】
ステップ（３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令２を読み出して、キャッシュメモリ５に登録する。
【０１４０】
ステップ（４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令３を読み出して、キャッシュメモリ５に登録する。
【０１４１】
ステップ（５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出して、参照されていない時間が最も長い命令０に代えて、命令４をキャッシュメモリ５に登録する。また、ロック制御部６は、キャッシュメモリ５から削除した命令０のアドレスをロックアドレスとしてロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化する。
【０１４２】
ステップ（６）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、参照されていない時間が最も長い命令１に代えて、命令０をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と一致するので、ロック制御部６は、ロック信号ＬＫを「Ｈ」レベルに活性化し、カウンタＣＴの値を「０」に初期化する。
【０１４３】
ステップ（７）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１４４】
ステップ（８）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令２を読み出す。ロック制御部６は、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ２（＝「５」）以下であり、かつ、キャッシュメモリ５から読み出された命令２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１４５】
ステップ（９）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令３を読み出す。ロック制御部６は、カウンタＣＴを「３」にインクリメントする。カウンタＣＴの値「３」が基準値ＴＨ２（＝「５」）以下であり、かつ、キャッシュメモリ５から読み出された命令３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１４６】
ステップ（１０）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令４を読み出す。ロック制御部６は、カウンタＣＴを「４」にインクリメントする。カウンタＣＴの値「４」が基準値ＴＨ２（＝「５」）以下であり、かつ、キャッシュメモリ５から読み出された命令４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１４７】
ステップ（１１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令０を読み出す。ロック制御部６は、カウンタＣＴを「５」にインクリメントする。カウンタＣＴの値「５」が基準値ＴＨ２（＝５」）以下であり、かつ、キャッシュメモリ５から読み出された命令０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と一致するので、ロック制御部６は、ロック信号ＬＫ、およびロックアドレスレジスタ８の格納アドレスを維持するとともに、カウンタＣＴの値を「０」に初期化する。
【０１４８】
ステップ（１２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１４９】
ステップ（１３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令２を読み出す。ロック制御部６は、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ２（＝「５」）以下であり、かつ、キャッシュメモリ５から読み出された命令２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１５０】
ステップ（１４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令３を読み出す。ロック制御部６は、カウンタＣＴを「３」にインクリメントする。カウンタＣＴの値「３」が基準値ＴＨ２（＝「５」）以下であり、かつ、キャッシュメモリ５から読み出された命令３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１５１】
ステップ（１５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令４を読み出す。ロック制御部６は、カウンタＣＴを「４」にインクリメントする。カウンタＣＴの値「４」が基準値ＴＨ２（＝「５」）以下であり、かつ、キャッシュメモリ５から読み出された命令４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１５２】
ステップ（１６）において、ＣＰＵ３は、命令１０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１０を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「５」にインクリメントする。カウンタＣＴの値「５」が基準値ＴＨ２（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令１０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１５３】
ステップ（１７）において、ＣＰＵ３は、命令１１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「６」にインクリメントする。カウンタＣＴの値「５」が基準値ＴＨ２（＝「５」）を超えるので、ロック制御部６は、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ＣＰＵ３は、ロック信号ＬＫが「Ｌ」レベルに非活性化されたことによって、参照されていない時間が最も長い命令２に代えて、命令１１をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴの値を「０」に初期化し、キャッシュメモリ５から削除された命令２のアドレスをロックアドレスとしてロックアドレスレジスタ８に登録する。
【０１５４】
以上のように、本実施の形態によれば、第２の実施形態と同様に、キャッシュのエントリ数よりも少し大きいサイズのループを有するプログラムを実行する場合に、キャッシュメモリ５に登録された命令が再度読み出されるまでの間隔を測定することによって、ループを構成する命令が読み出されたか否かを判断する。ループを構成する命令が読みだされた場合に、キャッシュメモリ５の更新を停止する（ロックする）。
【０１５５】
［第６の実施形態］
第６の実施形態が、第３の実施形態と相違する点は、ロックアドレスレジスタ８に登録される命令である。
【０１５６】
すなわち、第３の実施形態では、ロック制御部６は、キャッシュミスによってメインメモリ２から読み出され、かつキャッシュメモリ５に保持されている命令に代えて書き込まれた命令のアドレスをロックアドレスレジスタ８に保持させた。
【０１５７】
これに対して、第６の実施形態では、ロック制御部６は、キャッシュミスによってメインメモリ２から読み出された命令の代わりとして、キャッシュメモリ５から削除された命令のアドレスをロックアドレスレジスタ８に保持させる。
【０１５８】
（動作）
図１６および図１７は、第６の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【０１５９】
図１６および図１７のフローチャートが、図７および図８のフローチャートと相違する点は以下である。
【０１６０】
図７および図８では、ステップＳ１０８において、ロック制御部６は、読み出した命令（つまり、キャッシュミスによってキャッシュに登録された命令）のアドレスをロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化した。
【０１６１】
これに対して、図１６および図１７では、ステップＳ５０８において、ロック制御部６は、キャッシュミスによって置き換えられた命令（つまり、キャッシュから削除された命令）のアドレスをロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化する。
【０１６２】
（動作例）
図１８は、第６の実施形態の動作例を説明するための図である。図１８では、図３と同様に、キャッシュメモリ５は、エントリ数が「４」のフルアソシアティブキャッシュメモリであり、ループは、命令０〜命令４の５個の命令で構成される。
【０１６３】
ステップ（０）において、ロック制御部６は、カウンタＣＴを「０」に初期化し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ロックアドレスレジスタ８を初期化する。
【０１６４】
ステップ（１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、キャッシュメモリ５に登録する。
【０１６５】
ステップ（２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出して、キャッシュメモリ５に登録する。
【０１６６】
ステップ（３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令２を読み出して、キャッシュメモリ５に登録する。
【０１６７】
ステップ（４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令３を読み出して、キャッシュメモリ５に登録する。
【０１６８】
ステップ（５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出して、参照されていない時間が最も長い命令０に代えて、命令４をキャッシュメモリ５に登録する。また、ロック制御部６は、キャッシュメモリ５から削除された命令０のアドレスをロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化する。
【０１６９】
ステップ（６）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、参照されていない時間が最も長い命令１に代えて、命令０をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と一致するので、ロック制御部６は、ロック信号ＬＫを「Ｈ」レベルに活性化し、カウンタＣＴの値を「０」に初期化する。
【０１７０】
ステップ（７）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、メインメモリ２から読み出された命令１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１７１】
ステップ（８）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令２を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１７２】
ステップ（９）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令３を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１７３】
ステップ（１０）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令４を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１７４】
ステップ（１１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令０を読み出す。カウンタＣＴの値「５」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と一致するので、ロック制御部６は、ロック信号ＬＫ、およびロックアドレスレジスタ８の格納アドレスを維持するとともに、カウンタＣＴの値を「０」に初期化する。
【０１７５】
ステップ（１２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、メインメモリ２から読み出された命令１がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１７６】
ステップ（１３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令２を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令２がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１７７】
ステップ（１４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令３を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令３がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１７８】
ステップ（１５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令４を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「１」で維持する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「２」）以下であり、かつ、キャッシュメモリ５から読み出された命令４がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１７９】
ステップ（１６）において、ＣＰＵ３は、命令１０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１０を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ２（＝「２」）以下であり、かつ、メインメモリ２から読み出された命令１０がロックアドレスレジスタ８にアドレス（ロックアドレス）が格納されている命令０と相違するので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１８０】
ステップ（１７）において、ＣＰＵ３は、命令１１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「３」にインクリメントする。カウンタＣＴの値「３」が基準値ＴＨ２（＝「２」）を超えるので、ロック制御部６は、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ＣＰＵ３は、ロック信号ＬＫが「Ｌ」レベルに非活性化されたことによって、参照されていない時間が最も長い命令２に代えて、命令１１をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴの値を「０」に初期化し、キャッシュメモリ５から削除された命令２のアドレスをロックアドレスとしてロックアドレスレジスタ８に登録する。
【０１８１】
以上のように、本実施の形態によれば、第２の実施形態と同様に、キャッシュのエントリ数よりも少し大きいサイズのループを有するプログラムを実行する場合に、キャッシュメモリ５に登録された命令が再度読み出されるまでの間隔を測定することによって、ループを構成する命令が読み出されたか否かを判断する。ループを構成する命令が読みだされた場合に、キャッシュメモリ５の更新を停止する（ロックする）。
【０１８２】
［第７の実施形態］
第７の実施形態が、第４の実施形態と相違する点は、ロックアドレスレジスタ８に登録される命令である。
【０１８３】
すなわち、第４の実施形態では、ロック制御部６は、キャッシュミスによってメインメモリ２から読み出され、かつキャッシュメモリ５に保持されている命令に代えて書き込まれた命令のアドレスをロックアドレスレジスタ８に保持させた。
【０１８４】
これに対して、第７の実施形態では、ロック制御部６は、キャッシュミスによってメインメモリ２から読み出された命令の代わりとして、キャッシュメモリ５から削除された命令のアドレスをロックアドレスレジスタ８に保持させる。
【０１８５】
（動作）
図１９および図２０は、第７の実施形態のキャッシュロック制御の手順を表わすフローチャートである。
【０１８６】
図１９および図２０のフローチャートが、図１０および図１１のフローチャートと相違する点は以下である。
【０１８７】
図１０および図１１では、ステップＳ１０８において、ロック制御部６は、読み出した命令（つまり、キャッシュミスによってキャッシュに登録された命令）のアドレスをロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化した。
【０１８８】
これに対して、図１９および図２０では、ステップＳ５０８において、ロック制御部６は、キャッシュミスによって置き換えられた命令（つまり、キャッシュから削除された命令）のアドレスをロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化する。
【０１８９】
（動作例）
図２１は、第７の実施形態の動作例を説明するための図である。図２１では、図３と同様に、キャッシュメモリ５は、エントリ数が「４」のフルアソシアティブキャッシュメモリであり、ループは、命令０〜命令４の５個の命令で構成される。
【０１９０】
ステップ（０）において、ロック制御部６は、カウンタＣＴを「０」に初期化し、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ロックアドレスレジスタ８を初期化する。
【０１９１】
ステップ（１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、キャッシュメモリ５に登録する。  
【０１９２】
ステップ（２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出して、キャッシュメモリ５に登録する。  
【０１９３】
ステップ（３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令２を読み出して、キャッシュメモリ５に登録する。  
【０１９４】
ステップ（４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令３を読み出して、キャッシュメモリ５に登録する。  
【０１９５】
ステップ（５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令４を読み出して、参照されていない時間が最も長い命令０に代えて、命令４をキャッシュメモリ５に登録する。また、ロック制御部６は、キャッシュメモリ５から削除された命令０のアドレスをロックアドレスレジスタ８に登録し、カウンタＣＴの値を「０」に初期化する。
【０１９６】
ステップ（６）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令０を読み出して、参照されていない時間が最も長い命令１に代えて、命令０をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ１（＝「５」）以下であり、かつ、メインメモリ２から読み出された命令０がロックアドレスレジスタ８にアドレスが格納されている命令０と一致するので、ロック制御部６は、ロック信号ＬＫを「Ｈ」レベルに活性化し、カウンタＣＴの値を「０」に初期化する。
【０１９７】
ステップ（７）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１９８】
ステップ（８）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令２を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０１９９】
ステップ（９）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令３を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０２００】
ステップ（１０）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令４を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０２０１】
ステップ（１１）において、ＣＰＵ３は、命令０がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令０を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０２０２】
ステップ（１２）において、ＣＰＵ３は、命令１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０２０３】
ステップ（１３）において、ＣＰＵ３は、命令２がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令２を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「１」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０２０４】
ステップ（１４）において、ＣＰＵ３は、命令３がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令３を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０２０５】
ステップ（１５）において、ＣＰＵ３は、命令４がキャッシュメモリ５に登録されている（キャッシュヒット）ので、キャッシュメモリ５から命令４を読み出す。ロック制御部６は、キャッシュヒットによって、カウンタＣＴを「０」に初期化する。カウンタＣＴの値「０」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０２０６】
ステップ（１６）において、ＣＰＵ３は、命令１０がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１０を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「１」にインクリメントする。カウンタＣＴの値「１」が基準値ＴＨ２（＝「１」）以下であるので、ロック制御部６は、ロック信号ＬＫ、カウンタＣＴの値、およびロックアドレスレジスタ８の格納アドレスを維持する。
【０２０７】
ステップ（１７）において、ＣＰＵ３は、命令１１がキャッシュメモリ５に登録されていない（キャッシュミス）ので、メインメモリ２から命令１１を読み出す。ＣＰＵ３は、ロック信号ＬＫが「Ｈ」レベルに活性化されているので、キャッシュメモリ５の更新をしない。ロック制御部６は、キャッシュミスによって、カウンタＣＴを「２」にインクリメントする。カウンタＣＴの値「２」が基準値ＴＨ２（＝「１」）を超えるので、ロック制御部６は、ロック信号ＬＫを「Ｌ」レベルに非活性化し、ＣＰＵ３は、ロック信号ＬＫが「Ｌ」レベルに非活性化されたことによって、参照されていない時間が最も長い命令２に代えて、命令１１をキャッシュメモリ５に登録する。ロック制御部６は、カウンタＣＴの値を「０」に初期化し、キャッシュメモリ５から削除された命令２のアドレスをロックアドレスレジスタ８に登録する。
【０２０８】
以上のように、本実施の形態によれば、第２の実施形態と同様に、キャッシュのエントリ数よりも少し大きいサイズのループを有するプログラムを実行する場合に、キャッシュメモリ５に登録された命令が再度読み出されるまでの間隔を測定することによって、ループを構成する命令が読み出されたか否かを判断する。ループを構成する命令が読みだされた場合に、キャッシュメモリ５の更新を停止する（ロックする）。
【０２０９】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０２１０】
１  半導体装置、２  メインメモリ、３  ＣＰＵ、４  キャッシュ制御部、５  キャッシュメモリ、６  ロック制御部、８  ロックアドレスレジスタ、ＣＴ  カウンタ、ＬＫ  ロック信号。
【図１】
2014026443.tif 000003
【図２】
2014026443.tif 000004
【図３】
2014026443.tif 000005
【図４】
2014026443.tif 000006
【図５】
2014026443.tif 000007
【図６】
2014026443.tif 000008
【図７】
2014026443.tif 000009
【図８】
2014026443.tif 000010
【図９】
2014026443.tif 000011
【図１０】
2014026443.tif 000012
【図１１】
2014026443.tif 000013
【図１２】
2014026443.tif 000014
【図１３】
2014026443.tif 000015
【図１４】
2014026443.tif 000016
【図１５】
2014026443.tif 000017
【図１６】
2014026443.tif 000018
【図１７】
2014026443.tif 000019
【図１８】
2014026443.tif 000020
【図１９】
2014026443.tif 000021
【図２０】
2014026443.tif 000022
【図２１】
2014026443.tif 000023