(57)【要約】【課題】ＣＰＵと主記憶装置との間にキャッシュメモリを備えるシステムにおいて、電源投入からシステム起動完了までの時間を短縮することができる起動高速化装置を提供する。【解決手段】起動高速化装置は、１回目のシステム起動時に、キャッシュメモリから主記憶装置へのアクセスを監視して、電源投入からアクセスが行われるまでのアクセス時間とアクセス先の主記憶装置のアドレスを取得する監視装置と、監視装置により取得されたアクセス時間とアドレスをテーブルデータとして記憶するテーブル記憶装置とを備える。監視装置は、２回目以降のシステム起動時に、テーブル記憶装置に記憶されたテーブルデータに含まれるアクセス時間の順序に従って、対応するテーブルデータのアドレスに対応する主記憶装置のアドレスから読み出しデータを読み出し、読み出した読み出しデータをキャッシュメモリに書き込む。【選択図】図１
2010231701.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、該ＣＰＵが使用する読み出しデータが記憶された主記憶装置と、該主記憶装置から読み出した読み出しデータを前記ＣＰＵに供給するとともに、一時的に記憶するキャッシュメモリとを備えるシステムの起動高速化装置であって、
１回目のシステム起動時に、前記キャッシュメモリから前記主記憶装置へのアクセスを監視して、電源投入から前記アクセスが行われるまでのアクセス時間とアクセス先の前記主記憶装置のアドレスを取得する監視装置と、
前記監視装置により取得されたアクセス時間とアドレスをテーブルデータとして記憶するテーブル記憶装置とを備え、
前記監視装置は、２回目以降のシステム起動時に、前記テーブル記憶装置に記憶されたテーブルデータに含まれるアクセス時間の順序に従って、該アクセス時間到達までに、前記テーブルデータに含まれるアドレスに対応する前記主記憶装置のアドレスから読み出しデータを読み出し、該読み出した読み出しデータを前記キャッシュメモリに書き込むことを特徴とする起動高速化装置。
【請求項２】
前記監視装置は、２回目以降のシステム起動時に、前記キャッシュメモリから前記主記憶装置へのアクセスがあったことを検出し、かつ、該アクセス先のアドレスを含むテーブルデータが前記テーブル記憶装置に記憶されている場合、該アクセス先のアドレスを含むテーブルデータに含まれるアクセス時間を、前記検出されたアクセスが行われたアクセス時間に書き換えることを特徴とする請求項１に記載の起動高速化装置。
【請求項３】
ＣＰＵと、該ＣＰＵが使用する読み出しデータが記憶された主記憶装置と、該主記憶装置から読み出した読み出しデータを前記ＣＰＵに供給するとともに、一時的に記憶するキャッシュメモリとを備えるシステムの起動高速化装置であって、
１回目のシステム起動時に、前記キャッシュメモリから前記主記憶装置へのアクセスを監視して、一定の時間毎に、アクセス先の前記主記憶装置のアドレスの一部のビットからなる各々のインデックスに含まれる複数のアドレスへのアクセス回数を取得する監視装置と、
電源投入から前記一定の時間毎までのアクセス時間と前記監視装置により取得されたアクセス回数が最大のインデックスをテーブルデータとして記憶するテーブル記憶装置とを備え、
前記監視装置は、２回目以降のシステム起動時に、前記テーブル記憶装置に記憶されたテーブルデータに含まれるアクセス時間の順序に従って、前記テーブルデータに含まれるインデックスに対応する前記主記憶装置の複数のアドレスから読み出しデータを読み出し、該読み出した複数の読み出しデータのうちの一部を前記キャッシュメモリに書き込むことを特徴とする起動高速化装置。
【請求項４】
前記監視装置は、２回目以降のシステム起動時に、前記一定の時間毎に、前記テーブルデータに含まれるインデックスとは異なるインデックスに含まれる複数のアドレスへのアクセス回数が閾値を超えた場合、前記テーブルデータに含まれるインデックスを、前記閾値を超えたインデックスに書き換えることを特徴とする請求項３に記載の起動高速化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵと主記憶装置との間にキャッシュメモリを備えるシステムにおいて、キャッシュメモリの制御を工夫することにより、システム起動時の処理時間を短縮する起動高速化装置に関するものである。
【背景技術】
【０００２】
電気製品等の組み込みシステムとして、ＣＰＵ（コンピュータ）と、キャッシュメモリ（キャッシュコントローラを含む）と、主記憶装置（メインメモリ）とを含むシステムが用いられている。
【０００３】
キャッシュメモリは、ＣＰＵから主記憶装置へのアクセスの遅延を減らすために、ＣＰＵと主記憶装置との間に配置される揮発性メモリである。ＣＰＵが一度ロードした（読み出した）命令コードやデータ（以下、両者を纏めて読み出しデータともいう）をキャッシュメモリに保存しておき、ＣＰＵが同じ読み出しデータを再利用する際に、主記憶装置からではなくキャッシュメモリから再ロードすることにより、ロード時間を短縮し、ＣＰＵの処理速度を上昇させることができる。
【０００４】
システムの起動直後には、揮発性のキャッシュメモリにはどのような読み出しデータも記憶されていない。その結果、システムの起動直後には、ＣＰＵが初期化プログラム（初期化ルーチンないし起動プログラムとも呼ばれる）を実行する時に主記憶装置への多くのアクセスが生じてしまう。また、初期化プログラムには繰り返し命令が少なく、これにより主記憶装置へのアクセスが頻繁に発生し、その都度、ＣＰＵに待ち時間が発生することが分かった。
【０００５】
このような問題に対応するため、従来、いくつかの方法が提案されている。
１つの方法は、データ先読み制御方式であり、ＣＰＵが実行した命令コードの後続の命令コードないしデータを先読みして次回の読み出しに備えるというものである（特許文献１）。
【０００６】
ところが、この方法では、プログラムの分岐命令などによって、先読みした後続の命令コードやデータが必ずしも使用されるとは限らない。そのため、これによりキャッシュメモリに不必要なキャッシュデータがロードされ、他の必要なキャッシュデータが削除されてしまうため、その結果、それらの命令コードおよびデータの再ロードが発生してしまうリスクがある。
【０００７】
また、他の方法として、電源投入時にあらかじめロードすることが分かっているデータをキャッシュメモリにロードしておき、ＣＰＵが初期化プログラムを実行するとき、キャッシュメモリにロードしたデータを利用して初期化プログラムのキャッシュ時間を短縮するものがある（特許文献２）。
【０００８】
しかしながら、この方法も、キャッシュメモリの容量の範囲に限ってのみの高速化であるため、それを超えるサイズの初期化プログラムである場合、それを超えた分については高速化できない。また、電源投入時からＣＰＵが起動するまでの時間が短い場合には、初期化プログラムを十分にキャッシュできないか、キャッシュが終わるまでＣＰＵの始動を待たせなければならないという問題がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平１−３１４３２７号公報
【特許文献２】特開平７−３６７８４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、ＣＰＵと主記憶装置との間にキャッシュメモリを備えるシステムにおいて、電源投入からシステム起動完了までの時間を短縮することができる起動高速化装置を提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明は、ＣＰＵと、該ＣＰＵが使用する読み出しデータが記憶された主記憶装置と、該主記憶装置から読み出した読み出しデータを前記ＣＰＵに供給するとともに、一時的に記憶するキャッシュメモリとを備えるシステムの起動高速化装置であって、
１回目のシステム起動時に、前記キャッシュメモリから前記主記憶装置へのアクセスを監視して、電源投入から前記アクセスが行われるまでのアクセス時間とアクセス先の前記主記憶装置のアドレスを取得する監視装置と、
前記監視装置により取得されたアクセス時間とアドレスをテーブルデータとして記憶するテーブル記憶装置とを備え、
前記監視装置は、２回目以降のシステム起動時に、前記テーブル記憶装置に記憶されたテーブルデータに含まれるアクセス時間の順序に従って、該アクセス時間到達までに、前記テーブルデータに含まれるアドレスに対応する前記主記憶装置のアドレスから読み出しデータを読み出し、該読み出した読み出しデータを前記キャッシュメモリに書き込むことを特徴とする起動高速化装置を提供するものである。
【００１２】
ここで、前記監視装置は、２回目以降のシステム起動時に、前記キャッシュメモリから前記主記憶装置へのアクセスがあったことを検出し、かつ、該アクセス先のアドレスを含むテーブルデータが前記テーブル記憶装置に記憶されている場合、該アクセス先のアドレスを含むテーブルデータに含まれるアクセス時間を、前記検出されたアクセスが行われたアクセス時間に書き換えることが好ましい。
【００１３】
また、本発明は、ＣＰＵと、該ＣＰＵが使用する読み出しデータが記憶された主記憶装置と、該主記憶装置から読み出した読み出しデータを前記ＣＰＵに供給するとともに、一時的に記憶するキャッシュメモリとを備えるシステムの起動高速化装置であって、
１回目のシステム起動時に、前記キャッシュメモリから前記主記憶装置へのアクセスを監視して、一定の時間毎に、アクセス先の前記主記憶装置のアドレスの一部のビットからなる各々のインデックスに含まれる複数のアドレスへのアクセス回数を取得する監視装置と、
電源投入から前記一定の時間毎までのアクセス時間と前記監視装置により取得されたアクセス回数が最大のインデックスをテーブルデータとして記憶するテーブル記憶装置とを備え、
前記監視装置は、２回目以降のシステム起動時に、前記テーブル記憶装置に記憶されたテーブルデータに含まれるアクセス時間の順序に従って、前記テーブルデータに含まれるインデックスに対応する前記主記憶装置の複数のアドレスから読み出しデータを読み出し、該読み出した複数の読み出しデータのうちの一部を前記キャッシュメモリに書き込むことを特徴とする起動高速化装置を提供する。
【００１４】
ここで、前記監視装置は、２回目以降のシステム起動時に、前記一定の時間毎に、前記テーブルデータに含まれるインデックスとは異なるインデックスに含まれる複数のアドレスへのアクセス回数が閾値を超えた場合、前記テーブルデータに含まれるインデックスを、前記閾値を超えたインデックスに書き換えることが好ましい。
【発明の効果】
【００１５】
本発明によれば、初期化プログラムを２回目以降に実行する場合、監視装置が、前回の実行時に保存したテーブルデータに含まれるアクセス時間を参照して、順次、テーブルデータに含まれるアドレスに対応する主記憶装置のアドレスからデータを読み出してキャッシュメモリへ書き込む。そのため、基本的に、ＣＰＵから主記憶装置へのアクセスは発生せず、初期化プログラムの実行が高速化され、システムの起動時間を短縮することができる。
【００１６】
また、本発明によれば、アクセスがあった毎にテーブルデータを記憶するのではなく、一定の時間毎にテーブルデータを記憶することもできる。そのため、必要となるテーブル記憶装置のメモリ容量を適宜低減することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明に関わる起動高速化装置を搭載する組み込みシステムの構成を表す一実施形態のブロック図である。
【図２】図１に示すキャッシュメモリの構成を表す概念図である。
【図３】キャッシュメモリに記憶されるキャッシュセットの構成を表す概念図である。
【図４】テーブル記憶装置に記憶されるテーブルデータの構成を表す概念図である。
【図５】図１に示す組み込みシステムの動作を表すフローチャートである。
【図６】テーブル記憶装置に記憶されるテーブルデータの構成を表す別の概念図である。
【図７】キャッシュメモリで使用されるインデックスとテーブルデータで使用されるインデックスとの関係を表す概念図である。
【図８】図１に示す組み込みシステムの動作を表す別のフローチャートである。
【発明を実施するための形態】
【００１８】
以下に、添付の図面に示す好適実施形態に基づいて、本発明の起動高速化装置を詳細に説明する。
【００１９】
図１は、本発明に関わる起動高速化装置を搭載する組み込みシステムの構成を表す一実施形態のブロック図である。同図に示す組み込みシステム１０は、ＣＰＵ１２と、キャッシュメモリ１４と、主記憶装置１６と、監視装置１８と、テーブル記憶装置２０とによって構成されている。ここで、監視装置１８およびテーブル記憶装置２０は、本発明に関わる起動高速化装置を構成するものである。
【００２０】
ＣＰＵ１２とキャッシュメモリ１４は相互に接続されている。また、キャッシュメモリ１４、主記憶装置１６および監視装置１８は、内部バス２２を介して相互に接続されている。さらに、監視装置１８とテーブル記憶装置２０は相互に接続されている。
【００２１】
組み込みシステム１０において、ＣＰＵ１２は、システム全体の動作を制御する制御手段であり、初期化プログラムを含む、各種のプログラム（ソフトウェア）をロードして、実行する。
【００２２】
ここで、初期化プログラムは、組み込みシステム１０に電源が投入された時に、ＣＰＵが最初に実行することで組み込みシステム１０を初期化するためのプログラムであり、あらかじめ主記憶装置１６に記憶されている。
【００２３】
続いて、キャッシュメモリ１４は、主記憶装置１６と比べると容量は小さいが高速に動作する揮発性の半導体メモリである。キャッシュメモリ１４は、内蔵されているキャッシュコントローラ（図示省略）の制御により、ＣＰＵ１２が使用する読み出しデータを主記憶装置１６から内部バス２２を介して読み出してＣＰＵ１２に供給するとともに、キャッシュセット（キャッシュデータ）として一時的に記憶する。ＣＰＵ１２が同じ読み出しデータを再利用する場合、その読み出しデータがキャッシュメモリ１４に記憶されていれば、主記憶装置１６からではなく、キャッシュメモリ１４に記憶されている読み出しデータがＣＰＵ１２に供給されることにより、読み出し動作が高速化される。
【００２４】
主記憶装置１６は、キャッシュメモリ１４と比べると大容量であるが低速な揮発性の半導体メモリである。主記憶装置１６には、初期化プログラムを含む、ＣＰＵ１２が使用する各種の読み出しデータが、電源投入直後にフラッシュメモリなどの不揮発性メモリ（図示省略）からコピーされることにより、あらかじめ記憶されている。
【００２５】
監視装置１８は、１回目（初回）のシステム起動時に、ＣＰＵ１２（実際には、キャッシュメモリ１４）から主記憶装置１６へのアクセスを監視して、電源投入からアクセスが行われるまでのアクセス時間（本実施形態では、電源投入からのクロック数）と、アクセス先の主記憶装置１６のアドレスを取得し、テーブルデータとしてテーブル記憶装置２０に書き込む。また、監視装置１８は、２回目以降のシステム起動時に、テーブル記憶装置２０に記憶されたテーブルデータに含まれるアクセス時間の順序に従って、そのアクセス時間に到達するまでに、あるいは所定時間おきに、テーブルデータに含まれるアドレスに対応する主記憶装置１６のアドレスから読み出しデータを読み出し、これをキャッシュセットとしてキャッシュメモリ１４に書き込む。この様な処理を行うことにより、必要とするデータが必要な時刻までに効率よくキャッシュメモリ１４に書き込まれる。監視装置１８には初期化完了レジスタ２４が設けられている。電源投入直後の初期化完了レジスタ２４の初期値は、初期化が完了していないことを意味する‘０’であり、監視装置１８は、初期化プログラム（すなわち、ＣＰＵ１２）によって、初期化完了レジスタ２４が初期化完了を意味する‘１’に変更されるまで上記動作を続ける。
【００２６】
テーブル記憶装置２０は、不揮発性の書き換え可能な半導体メモリであり、上記の通り、監視装置１８により取得されたアクセス時間とアドレスをテーブルデータとして記憶する。テーブル記憶装置２０には、ＣＰＵ１２が初期化プログラムを初めて実行したか否かを表す初回実行フラグレジスタ２６が設けられている。初回実行フラグレジスタ２６は、例えば、初期化プログラムが変更された場合等に、初期化プログラムのアップデートプログラム（すなわち、ＣＰＵ１２）によって、初期化プログラムの実行が１回目の実行であることを意味する‘１’に設定され、１回目の初期化プログラムの終了後、初期化プログラムの実行が１回目の実行ではない（２回目以降の実行である）ことを意味する‘０’に書き換えられる。
【００２７】
次に、キャッシュメモリ１４について説明する。
【００２８】
図２は、図１に示すキャッシュメモリ１４の構成を表す概念図である。キャッシュメモリ１４は、図２に示すように、複数のラインを備えており、１つのラインに４つまでのキャッシュセットが記憶できるように構成されている。キャッシュセットは、キャッシュメモリ１４に読み出しデータを記憶する場合の最小単位である。各々のキャッシュセットが記憶されるメモリ領域はウェイ（Ｗａｙ）と呼ばれる。図２に示すキャッシュメモリ１４は、各ラインが４つのウェイ（Ｗａｙ１〜４）によって構成されている。
【００２９】
ここで、キャッシュセットについて説明する。
図３は、キャッシュメモリ１４に記憶されるキャッシュセットの構成を表す概念図である。キャッシュセットは、図３に示すように、有効（Ｖａｌｉｄ）ビット、ロック（Ｌｏｃｋ）ビット、および、データ（ＤＡＴＡ）を含む。
【００３０】
ここで、有効ビットは、対応するキャッシュセットの記憶内容が利用可能な有効なものか、意味のない無効なものかを表す。有効ビットは、例えば、キャッシュセットが有効なものである時に‘１’に設定され、無効なものである時に‘０’に設定される。以下の説明では有効ビットの更新については言及しないが、有効ビットは、キャッシュコントローラもしくは監視装置１８により随時更新（変更）される。
【００３１】
ロックビットは、対応するキャッシュセットの内容を、ＣＰＵ１２もしくは監視装置１８のどちらが変更できるかを表す。ロックビットは監視装置１８により更新され、本実施形態では、ロックビットが‘０’に設定されると、ＣＰＵ１２がキャッシュセットの内容を変更することができ、‘１’に設定されると、監視装置１８がキャッシュセットの内容を変更できる。なお、ロックビットによる制限はキャッシュセットの書き込みについてだけであり、その読み出しは制限されない。
【００３２】
データは、主記憶装置１６からの読み出しデータであり、例えば、６４ビットで構成される命令コード列またはデータ列を含む。また、データには、このデータが記憶されている主記憶装置１６のアドレス（ＡＤＤＲＥＳＳ）も含まれる。
【００３３】
キャッシュメモリ１４では、キャッシュセットに含まれるデータのアドレスのインデックス（アドレスの最上位ビットから一定のビット数で構成される部分）が同一の場合には、それらのキャッシュセットは同じラインに記憶される。例えば、アドレスが８ビットであり、インデックスがアドレスの上位５ビットで構成される場合、キャッシュメモリ１４には、同一インデックスの８つ（残り３ビットに対応）のキャッシュセットのうちの４つまでのアドレスに対応するキャッシュセットが同じラインに記憶される。
【００３４】
なお、例えば、ウェイの１つが利用不可能になったとしても、それは３つのウェイによって構成されるキャッシュメモリとして機能するだけであり、極端な性能の低下は発生しないことに留意すべきである。
【００３５】
次に、テーブル記憶装置２０に記憶されるテーブルデータについて説明する。
図４は、テーブル記憶装置２０に記憶されるテーブルデータの構成を表す概念図である。テーブルデータは、図４に示すように、アクセス時間（ＡｃｃｅｓｓＴｉｍｅ）とアドレス（ＡＤＤＲＥＳＳ）を含む。
【００３６】
ここで、アクセス時間は、組み込みシステム１０に電源が投入されてから、ＣＰＵ１２から主記憶装置１６へのアクセスが発生するまでの時間である。図４の例では、アクセス時間はクロック数（ｃｌｋｓ）で表されている。ｃｌｋｓは、ＣＰＵ１２の動作クロックである。また、アドレスは、キャッシュセットに含まれるデータが記憶されている主記憶装置１６のアドレスである。なお、キャッシュセットに含まれるデータのアドレスと、これに対応するテーブルデータに含まれるアドレスは同じでものある。
【００３７】
次に、図５に示すフローチャートに従って、組み込みシステム１０の動作を説明する。
【００３８】
電源投入後（Ｓ１）、初期化完了レジスタ２４は、初期化が完了していないことを意味する‘０’に設定される。また、初回実行フラグレジスタ２６は、１回目の初期化プログラムの実行である場合には‘１’、２回目以降の実行である場合には‘０’に設定される。
【００３９】
また、電源投入後、監視装置１８は、キャッシュメモリ１４の４つのウェイ１〜４のうち、ウェイ１，２の全てのキャッシュセットのロックビットを‘０’、ウェイ３，４の全てのキャッシュセットのロックビットを‘１’に設定する（Ｓ２）。
【００４０】
これにより、ウェイ１，２はＣＰＵ１２によってキャッシュセットの書き込みが管理され、ウェイ３，４は管理装置１８によってキャッシュセットの書き込みが管理されることになる。
【００４１】
続いて、監視装置１８は、初回実行フラグレジスタ２６の値を確認し、今回の初期化プログラムの実行が１回目の実行であるか否かを判断する（Ｓ３）。つまり、監視装置１８は、初回実行フラグレジスタの値が‘１’であれば、今回の初期化プログラムの実行は１回目の実行であり、初回実行フラグレジスタの値が‘０’であれば、今回の初期化プログラムの実行が２回目以降の実行であると判断する。
【００４２】
ここで、今回の初期化プログラムの実行が１回目の実行である場合（Ｓ３で‘ＹＥＳ’）、ステップＳ５へ進む。
【００４３】
一方、今回の初期化プログラムの実行が２回目以降の実行である場合（Ｓ３で‘ＮＯ’）、監視装置１８は、テーブルデータに含まれるアクセス時間を参照して（アクセス時間が短いものから順に）、そのアクセス時間に到達するまでに、あるいは所定時間おきに、テーブル記憶装置２０からテーブルデータを読み出し、読み出したテーブルデータに含まれるアドレスに対応する主記憶装置１６のアドレスから所定ビット長の読み出しデータを読み出し、これをキャッシュセットとして、テーブルデータに含まれるアドレスに対応するキャッシュメモリ１４のライン（インデックス）のウェイ３または４に書き込む（Ｓ４）。
【００４４】
上記のように、初期化プログラムを２回目以降に実行する場合、監視装置１８が、前回の実行時に保存したテーブルデータに含まれるアクセス時間を参照して、順次、そのアクセス時間に到達するまでに、あるいは所定時間おきに、テーブルデータに含まれるアドレスに対応する主記憶装置１６のアドレスからデータを読み出してキャッシュメモリ１４へ書き込む。そのため、初期化プログラムの実行が高速化され、システムの起動時間を短縮することができる。
【００４５】
なお、キャッシュセットをウェイ３ないし４に上書きする時の制御方式は、何ら限定されず、例えば、ＬＲＵ（Least Recently Used）制御でもよいし、単純にウェイ３とウェイ４に交互に上書きしてもよい。
【００４６】
続いて、監視装置１８は、ＣＰＵ１２から主記憶装置１６へのアクセスがあったか否かを検出する（Ｓ５）。
【００４７】
ここで、ＣＰＵ１２から主記憶装置１６へのアクセスがなかった場合（Ｓ５で‘ＮＯ’）、ステップＳ３へ戻り、監視装置１８は前述の動作を繰り返す。
【００４８】
一方、ＣＰＵ１２から主記憶装置１６へのアクセスがあった場合（Ｓ５で‘ＹＥＳ’）、監視装置１８は、ＣＰＵ１２がアクセスした主記憶装置１６のアドレスと同じアドレスを含むテーブルデータがテーブル記憶装置２０に記憶されているか否かを検出する（Ｓ６）。
【００４９】
ここで、同じアドレスを含むテーブルデータが記憶されていない場合（Ｓ６で‘ＮＯ’）、監視装置１８は、取得したアクセス時間とアドレスから新たなテーブルデータを作成し、これをテーブル記憶装置２０に追加する（Ｓ７）。ＣＰＵ１２から主記憶装置１６へのアクセスがあったということは、キャッシュメモリ１４においてキャッシュミスが発生したということであるから、テーブル記憶装置２０に同じアドレスを含むテーブルデータが記憶されていない場合、これを２回目以降の初期化プログラムの実行に備えてテーブル記憶装置２０に記憶しておく必要がある。
【００５０】
一方、同じアドレスを含むテーブルデータが記憶されている場合（Ｓ６で‘ＹＥＳ’）、テーブル記憶装置２０に記憶されているテーブルデータが効果的に機能していない（例えば、監視装置１８によりキャッシュメモリ１４にデータが書き込まれるのが遅かった）ということであるから、監視装置１８は、アクセス先のアドレスを含むテーブルデータに含まれるアクセス時間を、検出されたアクセスが行われたアクセス時間に書き換える（アクセス時間を短縮する）（Ｓ８）。この場合、対応するテーブルデータ以後の全てのテーブルデータのアクセス時間を同様に書き換える必要がある。
【００５１】
ＣＰＵ１２（実際にはキャッシュメモリ１４）が主記憶装置１６にアクセスする時間は、監視装置１８が、主記憶装置１６からキャッシュメモリ１４へ読み出しデータを書き込んで（コピーして）おくことにより、キャッシュメモリ１４から主記憶装置１６へのアクセスがなくなるため短縮される。このため、テーブルデータに設定されたアクセス時間を、２回目以降の初期化プログラムの実行時に、適宜調整する（アクセス時間を書き換える）必要がある。
【００５２】
ここで、アクセス時間を調整する方法は、何ら限定されないが、例えば、各々のテーブルデータの前（各々のテーブルデータに含まれるアクセス時間よりも短いアクセス時間を含むテーブルデータ）に存在するテーブルデータの個数を計算しておき、計算したテーブルデータの個数とテーブルデータ１つ当たりの推定高速化時間とを乗算して累積高速化時間を算出し、算出した累積高速化時間を、現在のアクセス時間から減算したものを新たなアクセス時間として設定する方法を例示することができる。
【００５３】
続いて、監視装置１８は、初期化完了レジスタ２４の値を確認し、初期化プログラムによるシステムの初期化が完了したか否か（初期化完了レジスタ２４が‘１’にセットされたか否か）を検出する（Ｓ９）。
【００５４】
ここで、初期化完了レジスタ２４が‘０’の場合（Ｓ９で‘ＮＯ’）、初期化が完了していないことを意味するから、ステップＳ３へ戻り、監視装置１８は前述の動作を繰り返す。
【００５５】
一方、初期化完了レジスタ２４が‘１’の場合（Ｓ９で‘ＹＥＳ’）、初期化が完了したことを意味するから、監視装置１８は、キャッシュメモリ１４のウェイ３，４の全てのキャッシュセットのロックビットを‘０’に設定して動作を終了する（Ｓ１０）。
【００５６】
ここで、本実施形態によるシステムの起動高速化の効果を具体的に考えてみる。例えば、ある初期化プログラムの実行時に、以下のような命令が実行されるものとする。
【００５７】
繰り返しのない命令  −  一定時間当たりＣｓｅｑ回
繰り返しのある命令  −  一定時間当たりＣｒｐｔ回
平均繰り返し回数  −  Ｒｒｐｔ回
１回の命令を主記憶装置１６から読み出すための時間  −  Ｆｍａｉｎ
１回の命令をキャッシュメモリ１４から読み出すための時間  −  Ｆｃａｃｈｅ
【００５８】
この場合、組み込みシステム１０の高速化率は以下の計算式で表される。
【００５９】
【数１】
2010231701.tif 000003
【００６０】
ここで、Ｃｓｅｑ、Ｃｒｐｔ、Ｒｒｐｔ、Ｆｍａｉｎ、Ｆｃａｃｈｅの回数として、例えば、表１に示すような数値を仮に考えてみる。
【００６１】
【表１】
2010231701.tif 000004
【００６２】
表１の値を前述の計算式に代入して高速化率を計算すると約７２％となる。つまり、本実施形態の組み込みシステム１０は、本発明を適用していない従来の組み込みシステムと比べて３倍以上高速化され、十分な効果を期待できることが分かる。
【００６３】
なお、この計算結果は理想値であり、実際にはＣＰＵ１２による命令実行が高速で行われた場合、主記憶装置１６からキャッシュメモリ１４への読み出しデータの転送が間に合わないことにより、最大限の効果を発揮できない場合も考えられなくはない。しかし、この点を考慮しても十分な高速化が期待できるといえる。また、この場合でも、図２のウェイ１，２に代表されるように、ＣＰＵ１２が管理するキャッシュ領域での高速化も見込めるため、大きな速度低下にはならない。
【００６４】
次に、別の実施形態を挙げて、本発明に関わる起動高速化装置を説明する。
【００６５】
本実施形態の組み込みシステムは、図１に示すものと同じ構成のものであるが、監視装置１８とテーブル記憶装置２０の機能が異なっている。
【００６６】
本実施形態において、監視装置１８は、１回目のシステム起動時に、キャッシュメモリ１４から主記憶装置１６へのアクセスを監視して、一定の時間毎に、アクセス先の主記憶装置１６のアドレスのインデックスと、各々のインデックスに含まれる複数のアドレスへのアクセス回数を取得し、テーブル記憶装置２０に、電源投入から一定の時間毎までのアクセス時間と、監視装置１８により取得されたアクセス回数が最大のインデックスをテーブルデータとして記憶させる。また、監視装置１８は、２回目以降のシステム起動時に、テーブル記憶装置２０に記憶されたテーブルデータに含まれるアクセス時間の順序に従って、例えば、所定時間おきに、テーブルデータに含まれるインデックスに対応する主記憶装置１６の複数のアドレスから読み出しデータを読み出し、読み出した複数の読み出しデータのうちの一部をキャッシュメモリ１４に書き込む。
【００６７】
テーブル記憶装置２０に記憶されるテーブルデータは、図４とは異なる形式のものである。本実施形態で使用するテーブルデータは、図６に示すように、アクセス時間（ＡｃｃｅｓｓＴｉｍｅ）とインデックス（Ｉｎｄｅｘ）を含む。
【００６８】
ここで、アクセス時間は、組み込みシステム１０に電源が投入されてから、一定の時間毎までの時間である。図６の例では、アクセス時間は、クロック数（１Ｍｃｌｋｓ）で表されている。１Ｍｃｌｋｓは、ＣＰＵ１２の動作クロックを基準とし、そのクロックが１００万回発振するまでの時間である。また、インデックスは、キャッシュメモリ１４で使用されているインデックスよりも、そのビット数（アドレスの上位ビット側のビット数）が少ないものである。
【００６９】
例えば、アドレスが８ビットの場合を考える。キャッシュメモリ１４で使用されるインデックスがアドレスの上位５ビットで構成される場合、１つのインデックスには８つ（残り３ビット相当）のアドレスが含まれる。図７に示すように、キャッシュメモリ１４で使用されるインデックスが、例えば、１００００ＸＸＸ（インデックス１００００は、２進数表示）の場合、このインデックスに含まれるアドレスは、ＸＸＸ＝０００〜１１１（ＸＸＸは２進数表示）までの複数（８つ）のアドレスを含む。
【００７０】
一方、テーブルデータで使用されるインデックスがアドレスの上位４ビットで構成される場合、１つのインデックスに１６個のアドレスが含まれる。同様に、図７に示すように、テーブルデータで使用されるインデックスが、例えば、１０００ＸＸＸＸの場合、このインデックスに含まれるアドレスは、ＸＸＸＸ＝００００〜１１１１までの複数（１６個）のアドレスを含む。
【００７１】
つまり、テーブルデータで使用されるインデックスは、キャッシュメモリ１４で使用されるインデックスと比べて、１つのインデックスに含まれるアドレスの数が多くなるように設定されている。
【００７２】
本実施形態では、初期化プログラムを１回目に実行する時に、テーブルデータとして、１００万回に１回（１Ｍｃｌｋｓ）、言い換えると、１Ｍｃｌｋｓの整数倍の時間毎に、１つのインデックスを記憶する。
【００７３】
次に、図８に示すフローチャートに従って、組み込みシステム１０の動作を説明する。
【００７４】
ステップＳ１１からステップＳ１３までの動作は、図５におけるステップＳ１からステップＳ３までの動作と同じである。
【００７５】
ここで、今回の初期化プログラムの実行が１回目の実行である場合（Ｓ１３で‘ＹＥＳ’）、監視装置１８は、次の１Ｍｃｌｋｓの間に、ＣＰＵ１２から主記憶装置１６へのアクセスがあった時のインデックスとそのアクセス回数を取得する（Ｓ１４）。
【００７６】
続いて、監視装置１８は、次の１Ｍｃｌｋｓの境界に到達したか否かを検出する（Ｓ１５）。
【００７７】
ここで、次の１Ｍｃｌｋｓの境界に到達していない場合（Ｓ１５で‘ＮＯ’）、ステップＳ１４へ戻り、監視装置１８は前述の動作を繰り返す。
【００７８】
一方、次の１Ｍｃｌｋｓの境界に到達した場合（Ｓ１５で‘ＹＥＳ’）、監視装置１８は、その時のアクセス時間と、取得したインデックスのうち、最もアクセス回数が多かったものを代表インデックスとしてテーブル記憶装置２０に記憶する（Ｓ１６）。
【００７９】
一方、今回の初期化プログラムの実行が２回目以降の実行である場合（Ｓ１３で‘ＮＯ’）、監視装置１８は、テーブルデータのアクセス時間を参照して（アクセス時間が短いものから順に）、所定時間おきに、テーブル記憶装置２０からテーブルデータを読み出し、読み出したテーブルデータに含まれるインデックスに対応する主記憶装置１６の複数のアドレスから所定ビット長の読み出しデータを読み出し、これら複数のアドレスの読み出しデータのうちの２つの読み出しデータを、キャッシュセットとして、テーブルデータのインデックスに対応するキャッシュメモリ１４のライン（キャッシュメモリ１４のインデックス）のウェイ３または４に書き込む（Ｓ１７）。
【００８０】
ステップＳ１８，Ｓ１９の動作は、ステップＳ１４，Ｓ１５の動作と同じである。
【００８１】
続いて、監視装置１８は、ＣＰＵ１２から主記憶装置１６への他のインデックス（対応するアクセス時間のテーブルデータに含まれるインデックスとは異なるインデックスに含まれる複数のアドレス）へのアクセス回数が閾値を超えたか否かを検出する（Ｓ２０）。閾値は、対応するアクセス時間のテーブルデータに含まれるインデックスを取得した時に検出したアクセス回数以上の値に設定することが望ましい。
【００８２】
ここで、他のインデックスへのアクセス回数が閾値を超えていない場合（Ｓ２０で‘ＮＯ’）、ステップＳ２２へ進む。閾値を超えていないということは、ステップＳ１７でキャッシュメモリ１４に書き込んだキャッシュセットが効果的に機能しており、キャッシュメモリ１４で発生したキャッシュミスは閾値よりも少ないということであるから、キャッシュメモリ１４に書き込んだキャッシュセットを入れ替える必要はない。
【００８３】
一方、アクセス回数が閾値を超えた場合（Ｓ２０で‘ＹＥＳ’）、監視装置１８は、対応するアクセス時間のテーブルデータに含まれるインデックスを、閾値を超えたインデックスに書き換える（Ｓ２１）。閾値を超えたということは、ステップＳ１７でキャッシュメモリ１４に書き込んだキャッシュセットが効果的に機能しておらず、キャッシュメモリ１４で閾値を超える回数のキャッシュミスが発生したということであるから、テーブルデータに含まれるインデックスを、閾値を超えたインデックスに書き換える必要がある。
【００８４】
このため、テーブルデータに設定されたインデックスを、２回目以降の初期化プログラムの実行時に、適宜調整する（代表インデックスを適宜変更する）。
【００８５】
これにより、次回の初期化プログラムの実行時に、対応するテーブルデータのインデックスに応じて、このインデックスに対応する複数のアドレスの中から所定のアドレス（本実施形態の場合、先頭の２つのアドレスあるいは所定間隔があいたアドレス等）に対応するキャッシュセットがキャッシュメモリ１４に書き込まれる。
【００８６】
これ以後のステップＳ２２，Ｓ２３の動作は、図５におけるステップＳ９，Ｓ１０の動作と同じである。
【００８７】
図４に示すテーブルデータを使用する実施形態では、全てのアクセスについてテーブルデータを記憶するため、大きなメモリ容量のテーブル記憶装置２０を必要とする。これに対し、本実施形態では、１Ｍｃｌｋｓという一定の時間毎にテーブルデータを記憶するため、必要となるテーブル記憶装置２０のメモリ容量を適宜低減することができる。なお、一定の時間は、高速化率とメモリ容量とを考慮して適宜設定することが望ましい。
【００８８】
その一方で、本実施形態では、主記憶装置１６から１６個のうちの２個の１／８と全ての読み出しデータをキャッシュすることはできないため、図４に示すテーブルデータを使用する実施形態の場合と比べると高速化率は低下する。しかしこの場合も、キャッシュできるデータ数を増やすことは可能であり、また、監視装置１８によってキャッシュされないものについては、ＣＰＵ１２が管理するキャッシュメモリによってキャッシュが行われるはずであるから、高速化率は十分に得られる。
【００８９】
なお、本発明は、組み込みシステムに限らず、ＣＰＵと、主記憶装置と、両者の間に接続されたキャッシュメモリとを備える様々なシステムに適用可能である。また、監視装置の具体的な構成は何ら限定されず、同様の機能を果たすものであれば、どのような構成のものであっても利用可能である。また、テーブルデータに含まれるアクセス時間は、クロック数で表すことに限定されず、電源投入からの時間を表すことができれば、どのような表現方法を用いてもよい。
【００９０】
本発明は、基本的に以上のようなものである。
以上、本発明について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【符号の説明】
【００９１】
１０  組み込みシステム
１２  ＣＰＵ
１４  キャッシュメモリ
１６  主記憶装置
１８  監視装置
２０  テーブル記憶装置
２２  内部バス
２４  初期化完了レジスタ
２６  初回実行フラグレジスタ
【図１】
2010231701.tif 000005
【図２】
2010231701.tif 000006
【図３】
2010231701.tif 000007
【図４】
2010231701.tif 000008
【図５】
2010231701.tif 000009
【図６】
2010231701.tif 000010
【図７】
2010231701.tif 000011
【図８】
2010231701.tif 000012