(57)【要約】【課題】カーネルプログラムをロードする際の安全性を高めると共に、システムの起動時間が長くなる問題を改善する。【解決手段】ＣＰＵ１５０は、ロードプログラム１２４をＲＡＭ１１０にロードする際に、フラッシュＲＯＭ１４０における格納領域情報１４２に応じた位置にロードプログラム１２４を格納する。そして、ＲＡＭ１１０にロードしたロードプログラム１２４を実行してカーネル１３２をＲＡＭ１１０にロードする、カーネル１３２のロード中に、ＣＰＵ１５０は、ロードプログラム１２４とカーネル１３２のＲＡＭ１１０での格納位置が重複する可能性の有無を監視し、該可能性があるときにロードプログラム１２４のＲＡＭ１１０での格納位置を変更すると共に、変更後の格納位置を示す値で、フラッシュＲＯＭ１４０における格納領域情報１４２を更新する。【選択図】図１
2012118801.tif 000002
【特許請求の範囲】
【請求項１】
第１の記憶部と、
第１のプログラムを格納した第２の記憶部と、
第２のプログラムを格納した第３の記憶部と、
前記第２の記憶部から前記第１のプログラムを前記第１の記憶部にロードして実行することにより、前記第２のプログラムを前記第３の記憶部から前記第１の記憶部にロードするプロセッサと、
前記第１のプログラムを前記第１の記憶部に格納する位置を示す格納領域情報を格納する第４の記憶部とを有し、
前記プロセッサは、
前記第１のプログラムをロードする際に、前記第４の記憶部における前記格納領域情報に応じた位置に前記第１のプログラムを格納し、
前記第２のプログラムのロード中に、
前記第１のプログラムと前記第２のプログラムの前記第１の記憶部での格納位置が重複する可能性の有無を監視し、
前記可能性があるときに前記第１のプログラムの前記第１の記憶部での格納位置を変更すると共に、変更後の前記格納位置を示す値で、前記第４の記憶部における前記格納領域情報を更新することを特徴とする半導体集積回路。
【請求項２】
前記プロセッサは、
前記第２のプログラムのロード開始時に前記第４の記憶部における前記格納領域情報がクリアされている場合においてのみ、該第２のプログラムのロード中に、前記可能性の有無の監視と、監視結果に応じた前記第１のプログラムの移動及び前記格納領域情報の更新とを行うことを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
前記プロセッサは、
前記第３の記憶部に格納した前記第２のプログラムを更新する際に、前記第４の記憶部に格納された前記格納領域情報をクリアすることを特徴とする請求項２に記載の半導体集積回路。
【請求項４】
前記プロセッサは、
前記第１の記憶部の先頭位置から前記第２のプログラムを格納し、
前記第１のプログラムの前記第１の記憶部での格納位置を変更する際に、前記先頭位置から遠ざかる方向で前記格納位置を変更し、
前記第２のプログラムのロード完了時に、
前記第２のプログラムの前記第１の記憶部での格納位置の終端アドレスと、前記第１のプログラムの前記第１の記憶部での格納位置の先頭アドレスとの差が所定の閾値以上であるときに、該差が小さくなるように、前記第１のプログラムの前記第１の記憶部での格納位置をさらに変更することを特徴とする請求項１から３のいずれか１項に記載の半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路において、メモリに記憶されたプログラムを他のメモリにロードする技術に関する。
【背景技術】
【０００２】
組込システムにおいて、かつて、ファームウェアが書換え不能なマスクＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）に記憶され、ＣＰＵが直接マスクＲＯＭに記憶されたファームウェアを実行するようになっていた。しかし、製品の出荷後にファームウェアにバグが発見されると、製品の回収またはマスクＲＯＭの交換などの作業が必要であり、コストがかかるという問題があった。そのため、近年は、ファームウェアの記憶装置としてユーザにより書換え可能なフラッシュＲＯＭを用いることが主流となっている。
【０００３】
しかし、フラッシュＲＯＭは、安価、比較的大容量などの利点が挙げられるが、フラッシュＲＯＭ上で直接ファームウェアを動作させると、アクセススピードが遅く、システム動作が遅くなるという問題がある。
【０００４】
この問題を解決するために、フラッシュＲＯＭにファームウェアを記憶しておき、初期化時にファームウェアをＲＡＭ上にロードしてＣＰＵに供する技術が提案されている（特許文献１）。この技術は、具体的には、ファームウェアと、ローダプログラムと、ローダ移動プログラムをフラッシュＲＯＭに記憶しておき、初期化時にまずローダ移動プログラムが起動され、起動されたローダ移動プログラムは、ローダプログラムをＲＡＭへコピーする。そして、ＲＡＭにコピーされたローダプログラムの実行により、ファームウェアをフラッシュＲＯＭからＲＡＭ上にコピーする。
【０００５】
ファームウェアは、通常、オペレーティングシステムの中核となるカーネルプログラム（以下、単にカーネルともいう）が含まれており、このカーネルは、システムのリソースや、ハードウェアとソフトウェアコンポーネントのやりとりを管理するものである。つまり、カーネルがＲＡＭにロードされ、実行されるまでは、システムのリソースが管理されていない状態にある。そのため、ファームウェアは通常ＲＡＭの先頭領域にロードされるようになっている。
【０００６】
ローダプログラムによるファームウェアのロード中に、ファームウェアの格納領域とローダプログラムの格納領域とが重なるとシステムが破綻してしまうので、ローダプログラムをファームウェアの格納領域以外の領域にコピーする必要がある。
【０００７】
ローダプログラムをＲＡＭの終端部分に格納するようにすれば、この問題を解決できると考えられるが、組込システムにおいて、ＲＡＭの終端部分は、通常アプリケーション領域に割り当てられている。
【０００８】
このような背景において、ローダプログラムの格納領域は、ファームウェアの領域と、アプリケーション領域のいずれとも重ならないように、ＲＡＭの先頭と終端の間の適当な中間領域にコピーされるようになっている。
【０００９】
ところで、リソースの管理がなされていない状態において、この適当な領域は、本当にファームウェアの領域と重ならないことを保証するのは難しい。さらに、機能の増加などによりファームウェアが圧縮された状態でＲＯＭに記憶され、ＲＡＭにロードされるときにＲＡＭ上で展開されることが多い。圧縮されたファームウェアはＲＡＭ上でどのぐらいのサイズに展開されるかについて、ローダ移動プログラムにより把握されることは通常行われないので、ローダプログラムの格納領域と、ファームウェアの格納領域とが重なり、システムの破綻を引き起こす恐れがある。
【００１０】
また、製品出荷時にシミュレーションなどによりこの問題をクリアしたとしても、後にファームウェアのバージョンアップによりファームウェアのサイズが変わってしまう場合にも、この問題が生じる可能性がある。
【００１１】
特許文献２には、上述した問題を解決する手法が開示されている。この手法では、初期化時に、ＣＰＵはフラッシュＲＯＭに記憶されたブートローダ（ローダ移動プログラム）を実行する。これによりロードプログラムはＲＡＭに書き込まれる。ＲＡＭに書き込まれたロードプログラムがＣＰＵにより実行されることにより、フラッシュＲＯＭに記憶されたカーネルプログラムはＲＡＭへロードされる。カーネルプログラムのロード中に、ＣＰＵは、ＲＡＭ上におけるカーネルプログラムの格納領域と、ロードプログラムの格納領域とが重複する可能性の有無を監視すると共に、該可能性があるときに、ＲＡＭ上においてロードプログラムを移動する。
【００１２】
この技術によれば、カーネルプログラムをＲＡＭへロードする際の安全性を高め、上述した問題を回避できる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００５−１７８１６９号公報
【特許文献２】特開２００９−１７６１１３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
ところで、カーネルをＲＡＭ上にロードする際に、上記監視の結果が「有る」となることが多い場合に、ＣＰＵは、カーネルをＲＡＭにロードする度に、ロードプログラムの移動を頻繁に繰り返す。この移動が多ければ多いほど、システムの起動時間が長くなる。
【００１５】
本発明は、上記事情に鑑みてなされたものであり、カーネルプログラムをＲＡＭへのロードする際の安全性を高めると共に、システムの起動時間が長くなることを改善できる技術を提供する。
【課題を解決するための手段】
【００１６】
本発明の１つの態様は、第１の記憶部と、第２の記憶部と、第３の記憶部と、第４の記憶部と、プロセッサとを備える半導体集積回路である。第２の記憶部は第１のプログラムを格納しており、第３の記憶部は第２のプログラムを格納している。第４の記憶部は、第１のプログラムを第１の記憶部に格納する位置を示す格納領域情報を格納するものである。
【００１７】
プロセッサは、第２の記憶部から第１のプログラムを第１の記憶部にロードして実行することにより、第２のプログラムを第３の記憶部から第１の記憶部にロードする。
【００１８】
プロセッサは、第１のプログラムをロードする際に、第４の記憶部における格納領域情報に応じた位置に第１のプログラムを格納する。また、プロセッサは、第２のプログラムのロード中に、第１のプログラムと第２のプログラムの第１の記憶部での格納位置が重複する可能性の有無を監視し、可能性があるときに第１のプログラムの第１の記憶部での格納位置を変更すると共に、変更後の格納位置を示す値で、第４の記憶部に格納された格納領域情報を更新する。
【００１９】
なお、上記態様の半導体集積回路を方法やシステムなどに置き換えて表現したものや、上記方法をコンピュータに実行せしめるプログラムなども、本発明の態様としては有効である。
【発明の効果】
【００２０】
本発明にかかる技術によれば、カーネルプログラムをロードする際の安全性を高めると共に、システムの起動時間が長くなる問題を改善できる。
できる。
【図面の簡単な説明】
【００２１】
【図１】本発明の第１の実施の形態にかかるシステムを示す図である。
【図２】図１に示すシステムにおけるＲＡＭの各領域を示す図である。
【図３】図１に示すシステムに用いられるロードプログラムの構成を示す図である。
【図４】図１に示すシステムの処理の流れを示すフローチャートである。
【図５】本発明の第２の実施の形態にかかるシステムの処理の流れを示すフローチャートである。
【図６】本発明の第３の実施の形態にかかるシステムを示す図である。
【図７】図６に示すシステムにおけるフラッシュＲＯＭに記憶されたデータを示す図である。
【図８】図６に示すシステムにおけるメモリ・マネージメント・ユニットを示す図である。
【発明を実施するための形態】
【００２２】
以下、図面を参照して、本発明の原理を具現化した装置を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェアは、ＣＰＵ、メモリ、その他の回路で構成することができ、ソフトウェアは、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００２３】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
＜第１の実施の形態＞
【００２４】
図１は、本発明の第１の実施の形態にかかるシステム１００を示す。このシステム１００は、半導体集積回路であり、携帯電話機や、ゲーム機などに適用される組込システムである。以下において、本発明の主旨が分かりやすいように、本発明にかかる技術と関連がある部分について説明および図示し、関連が特になく、組込システムが通常備える部分について説明および図示を省略する。
【００２５】
図１に示すように、システム１００は、第１の記憶部となるＲＡＭ１１０、第２の記憶部となるＲＯＭ１２０、第３の記憶部となるフラッシュＲＯＭ１３０、第４の記憶部となるフラッシュＲＯＭ１４０、ＣＰＵ１５０を備える。ＣＰＵ１５０は、バス１８０を介して、上記各記憶部にアクセスできる。
【００２６】
ＲＯＭ１２０には、ブートローダ１２２と、ロードプログラム１２４が格納されている。フラッシュＲＯＭ１３０には、カーネル１３２が格納されている。フラッシュＲＯＭ１４０は、ロードプログラム１２４をＲＡＭ１１０にロードする際に、ロードプログラム１２４のＲＡＭ１１０に格納する位置を示す格納領域情報１４２を格納するためのものであり、該格納領域情報１４２は、システム１００の１回目の起動時には、クリアされていることを示す「０」である。
【００２７】
ブートローダ１２２は、電源オン時に、ロードプログラム１２４をＲＡＭ１１０へのコピーを担うプログラムである。ロードプログラム１２４は、カーネル１３２をＲＡＭ１１０へロードするためのプログラムである。
【００２８】
カーネル１３２は、システム１００のリソースや、システム１００における各種ハードウェアとソフトウェアコンポーネントのやりとりを管理するプログラムであり、圧縮されてフラッシュＲＯＭ１３０に格納されている。なお、カーネル１３２は、自己展開機能を備えており、ＲＡＭ１１０へロードされるときに自らを展開する。
【００２９】
格納領域情報１４２は、ロードプログラム１２４をＲＡＭ１１０に格納する位置を示すものであり、初期値は例えば「０」である。
【００３０】
システム１００の電源オン時に、ＣＰＵ１５０は、バス１８０を介してＲＯＭ１２０にアクセスし、ＲＯＭ１２０に記憶されたブートローダ１２２を実行し、ロードプログラム１２４をＲＯＭ１２０からＲＡＭ１１０へコピーする。なお、ＲＡＭ１１０へ書き込まれたロードプログラムは、ＲＯＭ１２０に格納されたロードプログラム１２４と同一のものであるが、区別するために、ＲＡＭ１１０に書き込まれたロードプログラムに、ロードプログラム１２４と別の符号「１１４」を付与する。
【００３１】
次に、ＣＰＵ１５０は、ＲＡＭ１１０に書き込まれたロードプログラム１１４を実行し、カーネル１３２のロードを開始する。なお、ＲＡＭ１１０にロードされたカーネルに、カーネル１３２と別の符号「１１６」を付与する。
【００３２】
図２は、ＲＡＭ１１０を示す。図示のように、ＲＡＭ１１０の終端部分（上位アドレス側）は、アプリケーション領域１１２に割り当てられている。ＣＰＵ１５０は、ロードプログラム１１４を実行することにより、カーネル１１６をＲＡＭ１１０のシステム領域（ここでは先頭領域、すなわち下位アドレス側）に書き込む。なお、カーネル１１６は、ＲＡＭ１１０へのロード中に自己展開するので、ＲＡＭ１１０に書き込まれたカーネル１１６は、展開されたものである。
【００３３】
ＣＰＵ１５０は、ロードプログラム１２４をロードする際に、フラッシュＲＯＭ１４０に格納された格納領域情報１４２を参照して、格納領域情報１４２に応じた位置に、ロードプログラム１２４（ロードプログラム１１４）を格納する。格納領域情報１４２は、ＣＰＵ１５０により書き換えられる場合があるが、システム１００の１回目の起動時には、クリアされたことを示す「０」である。そのため、システム１００の１回目の起動時に、ロードプログラム１１４は、格納領域情報１４２の「０」の場合、アプリケーション領域とカーネルに重ならないと考えられる箇所、例えばＲＡＭ１１０の先頭領域と終端領域の中間部分に書き込まれる。
【００３４】
図３は、ロードプログラム１１４の構成を示す。図示のように、本実施の形態において、ロードプログラム１１４は、ＣＰＵ１５０が実行する処理として、カーネル１３２をＲＡＭ１１０にロードする処理（ロード処理）と、ＲＡＭ１１０上でのロードプログラム１１４がＲＡＭ１１０に転送されるカーネルによって上書きされないように監視する処理（監視処理）と、上書きが発生する可能性がある場合にはＲＡＭ１１０上でのロードプログラム１１４の記憶位置を移動する処理（移動処理）と、移動処理に伴って、フラッシュＲＯＭ１４０に記憶された格納領域情報１４２を更新する処理（領域情報更新処理）を含む。
【００３５】
図３および図４を用いて、本実施の形態に係るＣＰＵ１５０の処理内容を説明する。まずＣＰＵ１５０は、バス１８０を介してＲＯＭ１２０にアクセスし、ブートローダ１２２を実行する（図４のＳ１００）。これにより、ＣＰＵ１５０は、ＲＯＭ１２０に格納されたロードプログラム１２４をＲＡＭ１１０に書き込む（図４のＳ１１０）。この際、ＣＰＵ１５０は、フラッシュＲＯＭ１４０における格納領域情報１４２を参照し、格納領域情報１４２に応じたＲＡＭ１１０の位置にロードプログラム１２４を格納する。具体的には、格納領域情報１４２がクリアされている場合には、ＲＡＭ１１０の中間領域にロードプログラム１１４を格納し、格納領域情報１４２がクリアされていない場合には、該格納領域情報１４２が示す位置にロードプログラム１１４を格納する。なお、格納領域情報１４２がクリアされている場合とは、前の起動時に、ＣＰＵ１５０により格納領域情報１４２が更新された場合である。
【００３６】
そしてＣＰＵ１５０は、ロードプログラム１１４のＲＡＭ１１０上での格納位置を示す情報を、ＣＰＵ１５０の内部にあるレジスタに格納する。例えば、ＲＡＭ１１０が０番地から１００番地までのアドレスを有し、ＣＰＵ１５０は、ロードプログラム１１４を３０番地から４０番地までに連続して書き込んだ場合を考える。この場合、ＣＰＵ１５０は、３０番地と４０番地のアドレスをレジスタに記憶しておく。
【００３７】
次に、ＣＰＵ１５０はこのロードプログラム１１４を実行する（図４のＳ１２０）。これにより、ＣＰＵ１５０は、フラッシュＲＯＭ１３０に記憶されているカーネル１３２をフラッシュＲＯＭ１３０からＲＡＭ１１０へコピーする動作を開始する。
【００３８】
カーネル１３２は、ＣＰＵ１５０の処理によって、ＲＡＭ１１０上に書き込まれていく。具体的には、例えば上述したように、ＲＡＭ１１０が０番地から１００番地までのアドレスを有する場合、ＣＰＵ１５０は、ＲＡＭ１１０の先頭番地である０番地に書き込むことができる量のカーネル、すなわちカーネル１３２の一部分をこの０番地に書き込む。ＲＯＭ１２０に記憶されているカーネル１３２の内、ＲＡＭ１１０の０番地に書き込むことができる量が、０番地に書き込まれることになる。ＣＰＵ１５０は、０番地へのカーネル１３２の一部分の書き込みが完了すると、０番地の次のアドレスである１番地に、カーネル１３２の別の一部分を書き込む。以降、順番に、２番地、３番地、４番地・・・と、ＣＰＵ１５０は、カーネル１３２の一部分を次々と書き込んでいく。例えばＣＰＵ１５０は、カーネル１３２の記述の先頭から順番に、ＲＡＭ１１０上の各アドレスに書き込むことができる量を抽出して、ＲＡＭ１１０のそれぞれのアドレスに順次書き込んでいくことが考えられる。
【００３９】
ＣＰＵ１５０は、ＲＡＭ１１０上の一のアドレスにカーネル１３２の一部を書き込むたびに、カーネル１３２がすべてＲＡＭ１１０にコピーされたかを確認する（図４のＳ１３０）。例えばこの処理は以下のように実現することが考えられる。図４のＳ１１０において、ロードプログラム１１４をＲＡＭ１１０へコピーし、ロードプログラム１１４が書き込まれているアドレスをレジスタに書き込む際に、ＣＰＵ１５０は、フラッシュＲＯＭ１３０上でカーネル１３２がどの領域に書き込まれているかを確認し、フラッシュＲＯＭ１３０上でのカーネル１３２の最終アドレスもあらかじめレジスタに記憶しておくことにする。そしてＣＰＵ１５０は、図４のＳ１３０において、ＲＡＭ１１０に書き込んだカーネル１３２の一部が、フラッシュＲＯＭ１３０の前記最終アドレスから読み出したものか否かを確認すればよい。カーネル１３２をフラッシュＲＯＭ１３０からＲＡＭ１１０へすべてコピーすれば（Ｓ１３０：Ｙｅｓ）、ＣＰＵ１５０は処理を終了する。
【００４０】
一方、カーネル１３２のコピーがまだ完了していなければ（Ｓ１３０：Ｎｏ）、ＣＰＵ１５０は、ロードプログラム１１４のＲＡＭ１１０上での記憶位置と、次にＲＡＭ１１０に書き込むカーネル１３２の一部の記憶位置とが重複する可能性の有無を判断する（図４のＳ１４０）。具体的には、ＣＰＵ１５０は、既にＲＡＭ１１０に書き込まれたカーネル１１６の格納位置の末尾の番地と、ロードプログラム１１４が書き込まれている番地とを比較する。ＣＰＵ１５０は、この比較を、カーネル１３２の一部をＲＡＭ１１０に書き込むたびに行うとすることができる。例えば、ＣＰＵ１５０は、カーネル１３２の一部の書き込みを０番地から順番に行い、現在、カーネルは２０番地にまで書き込まれているとする。この場合、ロードプログラム１１４の記憶位置の先頭アドレスが３０番地であり、カーネルの書き込みが最後に行われた番地が２０番地であることから、ＣＰＵ１５０は、カーネルの現在における最終書き込み位置とロードプログラム１１４の記憶位置の先頭とのアドレス差が１０であると認識する（３０番地−２０番地＝１０番地）。そして、この１０のアドレス差が所定の閾値を下回る場合、ＣＰＵ１５０は、カーネルがロードプログラム１１４を上書きする可能性があると判断する。一方、１０番地の差が所定の閾値を上回る場合、現段階ではカーネル１３２の一部がロードプログラム１１４を上書きする可能性はないとＣＰＵ１５０は判断する。
【００４１】
すなわち、ＣＰＵ１５０は、上記アドレス差に基づく検討結果に従い、ＲＡＭ１１０上でのカーネルの格納領域と、ロードプログラム１１４の格納領域とが重複する可能性の有無を監視結果として求める。なお、ＣＰＵ１５０が、カーネル１３２をＲＡＭ１１０上の一のアドレスに書き込むたびに上述のアドレス差を求めるのではなく、一定時間経過後、割り込みによってアドレス差を求めるとすることもできる。また、カーネルは、自己展開を行うため、ＣＰＵ１５０は、フラッシュＲＯＭ１３０に記憶されたカーネルからは、ＲＡＭ１１０に書き込むために必要となる記憶領域がどの程度になるかは知ることができない。このことから、ＣＰＵ１５０は、前述の監視を行う必要がある。ＣＰＵ１５０は、カーネル１１６の格納領域と、ロードプログラム１１４の格納領域とが重複する可能性があると判断した場合に、カーネル１３２の転送を停止し、ＲＡＭ１１０に書き込まれているロードプログラム１１４の移動を行う（図４のＳ１５０）。
【００４２】
ＣＰＵ１５０は、上記の監視結果に応じて、重複の可能性が無い場合には（Ｓ１４０：Ｎｏ）引き続き上述の監視を続けるが、重複の可能性がある場合には（Ｓ１４０：Ｙｅｓ）、ロードプログラム１１４を、その格納領域がカーネル１１６の格納領域と重複しないようにＲＡＭ１１０のアプリケーション領域１１２側に向かって移動する（例えば上述の具体例では、ロードプログラム１１４の記憶位置を３０番地から４０番地までから、５０番地から６０番地までに移動する）。このように、ＣＰＵ１５０は、ロードプログラム１１４のＲＡＭ１１０上での記憶位置を移動する（Ｓ１５０）。
【００４３】
また、ＣＰＵ１５０は、移動後のロードプログラム１１４の格納位置を示す情報（例えばＲＡＭ１１０上の５０番地から６０番地までに記憶されているというアドレスの情報）を取得し、ＣＰＵ１５０内部のレジスタに書き込んでおく。取得したこのアドレス情報は、ＣＰＵ１５０が、カーネル１１６の最終書き込み位置とロードプログラム１１４の移動後の記憶位置の先頭とのアドレス差を求めるために利用される。
【００４４】
さらに、ＣＰＵ１５０は、移動後のロードプログラム１１４の格納位置を示す情報で、フラッシュＲＯＭ１４０における格納領域情報１４２を更新する（Ｓ１６０）。
【００４５】
そしてＣＰＵ１５０は、再度カーネル１３２の転送を再開すべく、内部に有するプログラムカウンタが保持するアドレスを、指定すべきアドレスに変更する。カーネル１３２の転送にあたって実行すべきロードプログラム１１４のＲＡＭ１１０上での記憶位置が移動しているためである。
【００４６】
その後、ＣＰＵは、カーネル１３２の転送終了（図４のＳ１３０がＹｅｓになる）まで、カーネル１１６がロードプログラム１１４を上書きしないかどうかを監視し続ける（Ｓ１４０）と共に、監視結果に応じたロードプログラム１１４の移動と、移動に伴った格納領域情報１４２の更新を行う（Ｓ１４０：Ｙｅｓ、Ｓ１５０、Ｓ１６０）。
【００４７】
なお、ここでは、ＣＰＵ１５０は前述のアドレス差を用いて監視を行っているが、カーネル１１６の格納領域が分かり、ＣＰＵ１５０が取得しうるものであれば、いかなる情報を用いてもよい。例えば、カーネル１３２の転送開始から計時し、転送時間に基づいてカーネル１１６の格納領域を推算するようにしてもよい。
【００４８】
すなわち、システム１００の１回目の起動後、フラッシュＲＯＭ１４０に記憶された格納領域情報１４２は、クリアされたままなのか、ＣＰＵ１５０により更新された値になる。
【００４９】
格納領域情報１４２がクリアされたままであることは、システム１００の１回目の起動中にロードプログラム１１４を一度も移動されていないことを意味する。すなわち、システム１００の起動中に、図４におけるステップＳ１４０の結果が常に「Ｎｏ」である。そのため、後にシステム１００の再起動が行われる場合にも、このステップＳ１４０の結果が常に「Ｎｏ」である。
【００５０】
一方、格納領域情報１４２は、クリアされていることを示す「０」ではなく、ＣＰＵ１５０が書き込んだ値であることは、システム１００の１回目の起動中に、ロードプログラム１１４は、ＣＰＵ１５０により、カーネル１１６の格納位置と重複しない位置に移動されたことを示す。格納領域情報１４２は、ロードプログラム１１４の移動後の格納位置を示す。そのため、後にシステム１００の再起動が行われる場合に、ＣＰＵ１５０は、格納領域情報１４２が示すＲＡＭ１１０の位置にロードプログラム１２４を格納するため、ロードプログラム１１４とカーネル１１６とのＲＡＭ１１０での格納位置が重複する可能性がなく、図４におけるＳ１４０の結果が常に「Ｎｏ」となる。
【００５１】
すなわち、システム１００の２度目の起動から、ステップＳ１４０の結果が常に「Ｎｏ」となり、ステップＳ１５０、ステップＳ１６０の処理が行われない。
【００５２】
このように、本実施の形態のシステム１００によれば、ＣＰＵ１５０は、格納領域情報１４２に応じた位置に格納領域情報１４２をＲＡＭ１１０に格納し、カーネル１３２のロード中には、展開されたカーネル１１６の格納領域と、ロードプログラム１１４の格納領域とが重複する可能性の有無を監視し、可能性がある場合には、ロードプログラム１１４を移動すると共に、ロードプログラム１１４の移動後の格納位置を示す値でフラッシュＲＯＭ１４０における格納領域情報１４２を更新するので、ロードプログラム１１４が展開されたカーネル１１６により上書きされることを防止すると共に、システムの起動時間が長くなることを回避できる。
【００５３】
システム１００は、起動する度に、カーネル１３２をロードする際にステップ１４０に示す監視を行うので、例えばカーネル１３２の更新によってカーネル１３２のサイズが変更した場合にも、カーネル１１６とロードプログラム１１４のＲＡＭ１１０での格納位置の重複を回避することができる。
＜第２の実施の形態＞
【００５４】
本発明の第２の実施の形態も組込システムである。このシステムは、カーネルをＲＡＭ１１０へのロードの開始時に格納領域情報１４２かクリアされていることを示す値ではない場合に、カーネルとロードプログラムのＲＡＭ１１０での格納位置の重複の可能性の有無の監視を行わない点を除き、第１の実施の形態のシステム１００と同様である。図５を参照して第２の実施の形態のシステムの処理を説明する。説明に当たり、システム１００の各機能ブロックの符号を用いる。また、図５において、図４と同様のステップについては、図４と同様のステップ番号を用いる。
【００５５】
図５に示すように、本第２の実施の形態のシステムは、カーネル１３２をＲＡＭ１１０の実行開始（Ｓ１２０）までの処理が、ＲＡＭ１１０と同様である。また、カーネル１３２のロード開始時に、フラッシュＲＯＭ１４０に格納された格納領域情報１４２がクリアされている場合には（Ｓ２００：Ｙｅｓ）、本第２の実施の形態のシステムは、システム１００と同様に、カーネル１３２のロード中に、カーネル１１６の格納領域と、ロードプログラム１１４の格納領域とが重複する可能性の有無の監視と、監視結果に応じた処理とを行う（Ｓ１３０〜Ｓ１６０）。
【００５６】
一方、カーネル１３２のロード開始時に、フラッシュＲＯＭ１４０に格納された格納領域情報１４２がクリアされた値ではない場合には（Ｓ２００：Ｎｏ）、本第２の実施の形態のシステムは、上述した監視などの処理を行わずに、カーネル１３２のロードの完了までカーネル１３２のロード処理を行う。
【００５７】
本第２の実施の形態のシステムによれば、１回目の起動時に格納領域情報１４２が、カーネル１１６の格納位置と重複しない位置を示す情報に更新されれば、ＣＰＵは、後の起動時に、ステップＳ１４０の監視、及び監視結果に応じた処理を行わずにカーネル１３２をロードするので、システム１００と同様の効果を得ることができると共に、システムの起動時間をより短縮することができる。
【００５８】
本第２の実施の形態は、カーネル１３２の更新があった場合にも適用可能である。この場合、カーネル１３２の更新時に、フラッシュＲＯＭ１４０における格納領域情報１４２をクリアすれば、カーネル１３２の更新後の１回目の起動時に、上記監視や、ロードプログラムの移動などが行われるので、カーネル１１６とロードプログラム１１４のＲＡＭ１１０での格納位置の重複を回避することができる。
＜第３の実施の形態＞
【００５９】
図６は、本発明の第３の実施の形態にかかるシステム２００を示す。システム２００も組込システムである。システム２００は、ブートローダ、ロードプログラム、カーネル、格納領域情報が同一のフラッシュＲＯＭ２２０に格納されている点と、バス１８０に接続されたメモリ・マネージメント・ユニット（以下ＭＭＵという）２５０をさらに備える点以外、図１に示すシステム１００とほぼ同様の構成を有し、これの構成については、システム１００における同じものと同様の符号を付与している。なお、フラッシュＲＯＭ２２０に格納されたロードプログラムは、システム１００のＲＯＭ１２０に記憶されたロードプログラム１２４のロード処理に関するもののみを有する。
【００６０】
図６に示すように、フラッシュＲＯＭ２２０は、ＲＡＭ１１０、フラッシュＲＯＭ２２０、プロセッサユニット２３０を備え、プロセッサユニット２３０は、ＲＡＭ１１０とＭＭＵ２５０を有する。
【００６１】
図７は、フラッシュＲＯＭ２２０に記憶された内容を示す。図示のように、フラッシュＲＯＭ２２０には、ブートローダ１２２、ロードプログラム２２４、カーネル１３２が記憶されている。
【００６２】
本実施の形態において、カーネルのロード中において、ロードプログラムの上書防止は、ＭＭＵ２５０により行われる。図７に示すように、ＭＭＵ２５０は、上書き防止部２５２を備え、上書き防止部２５２は、監視部２５４、移動部２５６、領域情報更新部２５８を有する。
【００６３】
監視部２５４は、カーネルのＲＡＭ１１０へのロードが終了するまで、ＲＡＭ１１０における、カーネルの格納領域と、ロードプログラムの格納領域とが重複する可能性の有無を監視し、移動部２５６は、この可能性があるときにロードプログラムを、その格納領域がカーネルの格納領域と重複しないように移動する。領域情報更新部２５８は、ロードプログラムが移動される度に、移動後のロードプログラムの位置を示す情報でフラッシュＲＯＭ２２０における格納領域情報１４２を更新する。
【００６４】
すなわち、図１に示すシステム１００において、ソフトウェアとＣＰＵ１５０の協働により実現される上書き防止処理（監視処理、移動処理、領域情報更新処理）は、本実施の形態のシステム２００では、ハードウェアにより実現されている。そのため、図１に示すシステム１００と同様の効果を得ることができると共に、ハードウェアによる上書き防止処理を実現することによって、カーネルのロードをより高速にできる。
【００６５】
勿論、第２の実施の形態のシステムと同様に、ＭＭＵ２５０は、カーネルのロード開始時に、フラッシュＲＯＭ２２０に格納された格納領域情報１４２がクリアされているか否かを確認し、クリアされている場合においてのみ監視処理などを行うようにしてもよい。
【００６６】
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した各実施の形態に対してさまざまな変更、増減を行ってもよい。これらの変更、増減が行われた変形例も本発明の範囲にあることは当業者に理解されるところである。
【００６７】
例えば、図１に示すシステム１００において、監視処理と移動処理に関する部分は、ロードプログラムに含まれているが、ロードププログラム以外の別のプログラムとして設けるようにしてもよい。
【００６８】
また、上記２つの実施の形態では、組込みシステムを例にしているが、本発明にかかる技術は、Ｗｉｎｄｏｗｓ（登録商標）などの汎用システムにも適用できる。汎用システムにおいて、カーネルに含まれるシステムファイルは、通常ＣＡＢ形式で圧縮された状態でハードディスクなどの補助記憶装置に記憶されており、システムの起動時にＲＡＭにロードされる。汎用システムにおいてカーネルを補助記憶装置からＲＡＭにロードする際に、本発明にかかる技術を適用すれば、上述した本発明の各効果を得ることができる。
【００６９】
また、上述した実施の形態において、カーネルが圧縮されてＲＯＭやフラッシュＲＯＭに記憶された場合を例にしているが、圧縮されていないカーネルをＲＡＭにロードする際にも本発明にかかる技術を適用することができる。
【符号の説明】
【００７０】
１００  システム
１１０  ＲＡＭ
１１２  アプリケーション領域
１１４  ロードプログラム
１１６  カーネル
１２０  ＲＯＭ
１２２  ブートローダ
１２４  ロードプログラム
１３０  フラッシュＲＯＭ
１３２  カーネル
１４０  フラッシュＲＯＭ
１４２  格納領域情報
１５０  ＣＰＵ
１８０  バス
２００  システム
２２０  フラッシュＲＯＭ
２２４  ロードプログラム
２３０  プロセッサユニット
２５０  ＭＭＵ
２５２  上書防止部
２５４  監視部
２５６  移動部
２５８  領域情報更新部
【図１】
2012118801.tif 000003
【図２】
2012118801.tif 000004
【図３】
2012118801.tif 000005
【図４】
2012118801.tif 000006
【図５】
2012118801.tif 000007
【図６】
2012118801.tif 000008
【図７】
2012118801.tif 000009
【図８】
2012118801.tif 000010