(57)【要約】【課題】リロケーション機能を有するＯＳを車載システムに適用する場合に、リロケーションによるシステム起動時間の遅延を軽減させることができる技術を提供する。【解決手段】メインメモリをバッテリーによってバックアップされるように構成し、装置への電力供給が絶たれた場合でも、メインメモリ内の情報が保持されるようにする。そして、初回のプログラムロード時にカーネル情報をカーネル情報テーブルに記憶させるようにし（Ｓ１４０）、当該プログラムを再度起動させる際には、そのカーネル情報をカーネルに渡すようにする（Ｓ１８０）。このようにすることにより、プログラム記憶媒体からプログラムを再度読み出すことなく、また、カーネル情報を再生成することもなく、プログラムの実行を開始することができる。したがって、システムの起動時間を短縮することができる。【選択図】図２
2008158591.tif 000002
【特許請求の範囲】
【請求項１】
電力供給がなくても情報を記憶し続けることができるメモリと、
プログラムが記憶された記憶手段と、
オペレーティングシステムの機能により、前記メモリ中のアドレス位置を決定し、決定したアドレスの場所に、前記記憶手段から前記プログラムを読み出して展開させ、展開させたプログラムを実行する制御手段と、
を備え、
前記制御手段は、
前記記憶手段から前記プログラムを読み出して前記メモリに展開させた際、そのプログラムを特定するための情報と、展開させた領域のアドレス情報とを前記メモリにカーネル情報として記憶させておき、
当該制御手段が初期化された後、前記プログラムを実行させる必要が生じた際に、前記メモリに記憶させておいた前記カーネル情報を参照して前記プログラムが既に前記メモリに展開されているか否かを判定し、展開されている場合には、前記記憶手段から前記プログラムを読み出すことなく、既に前記メモリに展開されている前記プログラムを、前記カーネル情報を用いて実行すること、
を特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記制御手段は、
更に、前記カーネル情報を記憶させる際に前記カーネル情報のＣＲＣ値を計算し、そのＣＲＣ値を前記カーネル情報とともに前記メモリに記憶させておき、
前記判定の際に更に、前記メモリに記憶させておいた前記カーネル情報の整合性を前記ＣＲＣ値を用いて検証し、前記カーネル情報に不整合があった場合には、前記判定の結果にかかわらず、前記メモリに展開されている前記プログラムを実行せずに、前記記憶手段から前記プログラムを再度読み出して実行すること、
を特徴とする情報処理装置。
【請求項３】
請求項１又は請求項２に記載の情報処理装置において、
前記アドレス情報は、前記プログラムのコードが展開された領域のアドレス情報と、前記プログラムの実行時に利用されるデータが展開された領域のアドレス情報とから少なくとも構成されること、
を特徴とする情報処理装置。
【請求項４】
請求項３に記載の情報処理装置において、
前記制御手段は、
前記カーネル情報を記憶させる際、前記プログラムのコードが展開された領域のＣＲＣ値を計算し、そのＣＲＣ値を前記カーネル情報の一つとして前記メモリに記憶させておき、
前記判定において肯定判定された後に、前記プログラムのコードが展開された領域を、前記メモリに記憶させておいた前記ＣＲＣ値を用いて検証し、その領域に不整合があった場合には、前記メモリに展開されている前記プログラムを実行せずに、前記記憶手段から前記プログラムを再度読み出して実行すること、
を特徴とする情報処理装置。
【請求項５】
請求項３又は請求項４に記載の情報処理装置において、
前記制御手段は、
前記カーネル情報を記憶させる際、前記プログラムの実行時に利用されるデータが展開された領域のＣＲＣ値を計算し、そのＣＲＣ値を前記カーネル情報の一つとして前記メモリに記憶させておき、
前記判定において肯定判定された後に、前記データが展開された領域を、前記ＣＲＣ値を用いて検証し、前記領域に不整合があった場合には、前記メモリに展開されている前記プログラムを実行せずに、前記記憶手段から前記プログラムを再度読み出して実行すること、
を特徴とする情報処理装置。
【請求項６】
電力供給がなくても情報を記憶し続けることができるメモリと、
プログラムが記憶された記憶手段と、
オペレーティングシステムの機能により、前記メモリ中のアドレス位置を決定し、決定したアドレスの場所に、前記記憶手段から前記プログラムを読み出して展開させ、展開させたプログラムを実行する制御手段と、
を備える情報処理装置の前記制御手段に実行させる制御プログラムであって、
前記オペレーティングシステムの機能により、前記記憶手段から前記プログラムが読み出されて前記メモリに展開された際、そのプログラムを特定するための情報と、展開された領域のアドレス情報とを前記メモリにカーネル情報として記憶させ、
前記制御手段が初期化された後、前記プログラムを実行させる必要が生じた際に、前記オペレーティングシステムが前記プログラムを前記記憶手段から読み出す前に、前記メモリに記憶させておいた前記カーネル情報を参照して前記プログラムが既に前記メモリに展開されているか否かを判定し、展開されている場合には、前記オペレーティングシステムに前記記憶手段から前記プログラムを読み出させることなく、前記カーネル情報を前記オペレーティングシステムに渡し、既に前記メモリに展開されている前記プログラムを前記オペレーティングシステムに実行させること、
を特徴とする制御プログラム。
【請求項７】
請求項６に記載の制御プログラムにおいて、
前記制御プログラムは、
更に、前記カーネル情報を記憶させる際に前記カーネル情報のＣＲＣ値を計算し、そのＣＲＣ値を前記カーネル情報とともに前記メモリに記憶させておき、
前記判定の際に更に、前記メモリに記憶させておいた前記カーネル情報の整合性を前記ＣＲＣ値を用いて検証し、前記カーネル情報に不整合があった場合には、前記判定の結果にかかわらず、前記メモリに展開されている前記プログラムを前記オペレーティングシステムに実行させずに、前記オペレーティングシステムに前記記憶手段から前記プログラムを再度読み出させて実行させること、
を特徴とする制御プログラム。
【請求項８】
請求項６又は請求項７に記載のプログラムにおいて、
前記アドレス情報は、前記プログラムのコードが展開された領域のアドレス情報と、前記プログラムの実行時に利用されるデータが展開された領域のアドレス情報とから少なくとも構成されること、
を特徴とする制御プログラム。
【請求項９】
請求項８に記載の制御プログラムにおいて、
前記制御プログラムは、
前記カーネル情報を記憶させる際、前記プログラムのコードが展開された領域のＣＲＣ値を計算し、そのＣＲＣ値を前記カーネル情報の一つとして前記メモリに記憶させておき、
前記判定において肯定判定された後に、前記プログラムのコードが展開された領域を、前記メモリに記憶させておいた前記ＣＲＣ値を用いて検証し、その領域に不整合があった場合には、前記メモリに展開されている前記プログラムを前記オペレーティングシステムに実行させずに、前記オペレーティングシステムに前記記憶手段から前記プログラムを再度読み出させて実行させること、
を特徴とする制御プログラム。
【請求項１０】
請求項８又は請求項９に記載の制御プログラムにおいて、
前記制御プログラムは、
前記カーネル情報を記憶させる際、前記プログラムの実行時に利用されるデータが展開された領域のＣＲＣ値を計算し、そのＣＲＣ値を前記カーネル情報の一つとして前記メモリに記憶させておき、
前記判定において肯定判定された後に、前記データが展開された領域を、前記ＣＲＣ値を用いて検証し、前記領域に不整合があった場合には、前記メモリに展開されている前記プログラムを前記オペレーティングシステムに実行させずに、前記オペレーティングシステムに前記記憶手段から前記プログラムを再度読み出させて実行させること、
を特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高速にシステムを起動させることができる技術に関する。
【背景技術】
【０００２】
システム起動時間を短縮させる技術として様々な技術が知られている。例えば、メモリ（ＲＡＭ）の内容をそのまま保持（バッテリバックアップ等）させながらＣＰＵのみを停止させ、必要に応じてＣＰＵを起動させる方法（レジューム）や、メモリの内容をＨＤＤ等へそのまま保存し、復帰時にそれをメモリに展開させる方法（ハイバネーション）がある。
【０００３】
しかし、これらを実現させるためには、これらの機能に対応したドライバを開発する必要がある。また復帰の際には、ネットワークコントローラ等の他のハードウェアは通常と同様に初期化されるが、実行途中であったプログラムは待機開始時点の状態から続けて実行することになる。このため、車載ＬＡＮを介して他の装置との通信を行う処理のような動作シーケンスを有している処理については、シーケンスに不整合が生じて復帰出来ないケースも多い。したがって、車載システムにおいては、レジュームやハイバネーションといった高速起動技術の適応は困難であり、車載システムにおいては、これらの高速起動技術とは別の観点で高速化を図ることが必要である。
【０００４】
他の技術として、特許文献１に記載された情報処理装置がある。この情報処理装置は、フラッシュメモリとＲＡＭとを備え、フラッシュメモリにＯＳ（オペレーティングシステム）を含むプログラムを記憶させている。そして、起動時にＲＡＭにプログラムがロード済みであるか否かをチェックし、ロード済みであれば、そのプログラムがＲＡＭ上で正常に起動できるか否かをチェックし、正常であれば当該プログラムを実行する。これにより、起動時におけるプログラムのフラッシュメモリからのロード処理を省略して起動時間の短縮化が図れる。
【特許文献１】特開２００３−１３１８８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ここで、ＭＭＵ（Memory Management Unit）機能を利用するＯＳ（例えば、Linux、Windows(登録商標)等）に注目してみると、これらのＯＳでは、プログラムをロードするアドレスをカーネルが決定する（「リロケーション」と称す）。したがって、アプリケーションプログラムやドライバプログラムを起動させる場合には、カーネルが、毎回、これらのプログラムの使用するメモリのアドレスを決定してプログラムをロードする必要がある。このため、ＭＭＵ機能を利用するＯＳは固定アドレス方式の従来のシステムに比べて、システムの起動に時間がかかる。
【０００６】
車載システムに対して上述した特許文献１に記載された技術を適用すればプログラムのロードは回避出来るが、ＭＭＵ機能を有するＯＳの場合、プログラム実行（起動）させるためには、更にカーネル情報が必要である。例えば、ファイルからロードを前提とするＯＳ（Linux、Windows（登録商標）、T-Kernel等）で言えば、ロード時にカーネル情報が生成されるため、カーネルによるロード方法以外の方法でプログラムがロードされるとカーネル情報が生成されないため、プログラムの実行（起動）ができない。したがって、何らかの方法によりカーネル情報を再生成するためのプログラムが必要となる。
【０００７】
本発明は、このような問題にかんがみなされたものであり、リロケーション機能を有するＯＳを車載システムに適用する場合に、リロケーションによるシステム起動時間の遅延を軽減させることができる技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するためになされた請求項１に記載の情報処理装置は、電力供給がなくても情報を記憶し続けることができるメモリと、プログラムが記憶された記憶手段と、制御手段とを備える。制御手段は、オペレーティングシステムの機能により、メモリ中のアドレス位置を決定し、決定したアドレスの場所に、記憶手段からプログラムを読み出して展開させ、展開させたプログラムを実行する。そして、制御手段は、記憶手段からプログラムを読み出してメモリに展開させた際、当該プログラムを特定するための情報と、展開させた領域のアドレス情報とをメモリにカーネル情報として記憶させておき、当該制御手段が初期化された後、プログラムを実行させる必要が生じた際に、メモリに記憶させておいたカーネル情報を参照してプログラムが既にメモリに展開されているか否かを判定し、展開されている場合には、記憶手段からプログラムを読み出すことなく、既にメモリに展開されているプログラムを、カーネル情報を用いて実行する。
【０００９】
なお、「電力供給がなくても情報を記憶し続けることができるメモリ」というのは、フラッシュメモリ等の不揮発性のメモリや、バッテリーによってバックアップされたメモリを意味する。また、「初期化」というのは、制御手段への電力供給が開始された際や、リセットされた際に行われる処理を意味し、制御手段内のレジスタ等の内容が初期化されることを意味する。
【００１０】
このようになっていれば、記憶手段からプログラムの再度の読み出しを回避できる上、カーネル情報の再生成も必要ない。したがって、リロケーション機能を有するオペレーティングシステムを情報処理装置に実行させる場合にも、システムの起動時間を短縮することができる。また、このような情報処理装置を車両に搭載する場合には、車両では情報処理装置の停止及び起動が頻繁に発生するため、起動時間の短縮効果は特に大きい。
【００１１】
ところで、制御手段は、更に、カーネル情報を記憶させる際にカーネル情報のＣＲＣ値を計算し、そのＣＲＣ値をカーネル情報とともにメモリに記憶させておき、上記判定の際に更に、メモリに記憶させておいたカーネル情報の整合性をＣＲＣ値を用いて検証し、カーネル情報に不整合があった場合には、上記判定の結果にかからず、メモリに展開されているプログラムを実行せずに、記憶手段からプログラムを再度読み出して実行するようになっているとよい（請求項２）。
【００１２】
このようになっていれば、何らかの理由によってカーネル情報が破壊されたとしても、その破壊されたカーネル情報に基づいてプログラムが実行されることがない。つまり、プログラムが暴走してしまうことを効果的に防止することができる。
【００１３】
また、「アドレス情報」というのは、当該プログラムのコードが展開された領域のアドレス情報と、当該プログラムの実行時に利用されるデータが展開された領域のアドレス情報とから少なくとも構成されているとよい（請求項３）。なお、データの領域には、例えば、初期値付き変数が格納される。
【００１４】
アドレス情報がこのような情報から構成されていれば、プログラムのコードが展開された領域のアドレスと、プログラムの実行時に利用されるデータが格納された領域のアドレスとをオペレーティングシステムは即座に把握できる。したがって、これらのアドレス情報を別途収集する必要がなく、プログラムの開始速度が速まる。
【００１５】
また、制御手段は、カーネル情報を記憶させる際、プログラムのコードが展開された領域のＣＲＣ値を計算し、そのＣＲＣ値をカーネル情報の一つとしてメモリに記憶させておき、上記判定において肯定判定された後に、プログラムのコードが展開された領域を、メモリに記憶させておいたＣＲＣ値を用いて検証し、その領域に不整合があった場合には、メモリに展開されているプログラムを実行せずに、記憶手段からプログラムを再度読み出して実行するようになっているとよい（請求項４）。
【００１６】
このようになっていれば、何らかの理由によってプログラムコードが破壊されたとしても、その破壊されたプログラムコードに基づいてプログラムが実行されることがない。つまり、プログラムが暴走してしまうことを効果的に防止することができる。
【００１７】
また、制御手段は、カーネル情報を記憶させる際、プログラムの実行時に利用されるデータが展開された領域のＣＲＣ値を計算し、そのＣＲＣ値をカーネル情報の一つとしてメモリに記憶させておき、上記判定において肯定判定された後に、データが展開された領域を、ＣＲＣ値を用いて検証し、領域に不整合があった場合には、メモリに展開されているプログラムを実行せずに、記憶手段からプログラムを再度読み出して実行するようになっているとよい（請求項５）。
【００１８】
このようになっていれば、何らかの理由によってプログラムの実行時に利用されるデータが破壊されたとしても、その破壊されたデータに基づいてプログラムが実行されることがない。つまり、プログラムが暴走してしまうことを効果的に防止することができる。
【００１９】
なお、上述した制御手段の機能の一部を制御プログラムとして構成してもよい（請求項６〜請求項１０）。これらの制御プログラムは、周知のオペレーティングシステムとは別のプログラムであるが、オペレーティングシステムの一部として組み込まれていてもよい。このような制御プログラムを、情報処理装置が内蔵するＣＰＵに実行させれば、その情報処理装置は、上述した情報処理装置と同様の作用及び効果を奏する。また、プログラムはネットワーク等を用いて流通させることも可能である上、情報処理装置におけるプログラムの入れ替えは、部品の入れ替えに比較して容易である。したがって、情報処理装置の機能向上を容易に行うこともできる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明が適用された実施形態について図面を用いて説明する。尚、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。
【００２１】
［構成の説明］
図１は、本発明の情報処理装置の機能を備えたナビゲーション装置２０の概略構成を示すブロック図である。
【００２２】
ナビゲーション装置２０は車両に搭載され、車両の現在位置を検出する位置検出器２１と、利用者からの各種指示を入力するための操作スイッチ群２２と、操作スイッチ群２２と同様に各種指示を入力可能であってナビゲーション装置２０とは別体となったリモートコントロール端末（以下、リモコンと称す）２３ａと、リモコン２３ａからの信号を入力するリモコンセンサ２３ｂと、パケット通信網等に接続して外部と通信を行う外部通信機２４と、地図データや音声データ等が記録された地図記憶媒体からデータを入力する地図データ入力器２５と、地図や各種情報の表示を行うための表示部２６と、各種のガイド音声等を出力するための音声出力部２７と、利用者が発話した音声に基づく電気信号を出力するマイクロフォン２８と、車内ＬＡＮに接続された各種ＥＣＵ等と通信を行う車内ＬＡＮ通信部３３と、上述した位置検出器２１，操作スイッチ群２２，リモコンセンサ２３ｂ，外部通信機２４，地図データ入力器２５，マイクロフォン２８,車内ＬＡＮ通信部３３からの入力に応じて各種処理を実行し、外部通信機２４，表示部２６，音声出力部２７，車内ＬＡＮ通信部３３を制御する制御部２９とを備えている。
【００２３】
位置検出器２１は、ＧＰＳ（Global Positioning System）用の人工衛星からの電波を図示しないＧＰＳアンテナを介して受信してその受信信号を出力するＧＰＳ受信機２１ａと、車両に加えられる回転運動の大きさを検出するジャイロスコープ２１ｂと、車両の前後方向の加速度等から走行した距離を検出するための距離センサ２１ｃとを備えている。そして、これら各センサ等２１ａ〜２１ｃからの出力信号に基づいて制御部２９が、車両の位置，方位，速度等を算出する。なお、ＧＰＳ受信機２１ａからの出力信号に基づいて現在位置を求める方式は様々な方式があるが、単独測位方式、相対測位方式の何れであってもよい。
【００２４】
操作スイッチ群２２は、表示部２６の表示面と一体に構成されたタッチパネル及び表示部２６の周囲に設けられたメカニカルなキースイッチ等から構成される。尚、タッチパネルと表示部２６とは積層一体化されており、タッチパネルには、感圧方式，電磁誘導方式，静電容量方式，あるいはこれらを組み合わせた方式など各種の方式があるが、その何れを用いてもよい。
【００２５】
リモコン２３ａは、複数のボタンから構成されており、何れかのボタンが押下されるとそのボタンの種類に応じた信号が赤外線等の近距離無線通信を介してリモコンセンサ２３ｂに届くように構成されている。
【００２６】
リモコンセンサ２３ｂは、リモコン２３ａから送られる信号を受信し、受信した信号を制御部２９へ出力するようになっている。
外部通信機２４は、路側に設置された光ビーコンや電波ビーコン等を介してＶＩＣＳの情報センタから事故情報や渋滞情報等を取得する。
【００２７】
地図データ入力器２５は、図示しない地図データ等記憶媒体（例えばハードディスクやＤＶＤ−ＲＯＭ等）に記憶された各種データやプログラムを入力するための装置である。地図データ等記憶媒体には、地図データ（ノードデータ、リンクデータ、コストデータ、背景データ、道路データ、名称データ、マークデータ、交差点データ、施設のデータ等）、案内用の音声データ、音声認識データ、各種のプログラム等が記憶されている。なお、地図データ等記憶媒体からこれらのデータやプログラムを入力する代わりに、通信ネットワークを介してこれらのデータやプログラムを入力するようになっていてもよい。
【００２８】
表示部２６は、液晶ディスプレイや有機ＥＬディスプレイ等からなり、表示部２６の表示画面には、位置検出器２１にて検出した車両の現在位置と地図データ入力器２５より入力された地図データとから特定した現在地を示すマーク、目的地までの誘導経路、名称、目印、各種施設のマーク等の付加データとを重ねて表示することができる。また、施設のガイド等も表示できる。
【００２９】
マイクロフォン２８は、利用者が音声を入力（発話）するとその入力した音声に基づく電気信号（音声信号）を制御部２９に出力するものである。利用者はこのマイクロフォン２８に様々な音声を入力することにより、ナビゲーション装置２０を操作することができる。
【００３０】
車内ＬＡＮ通信部３３は、車内ＬＡＮに接続された各種のＥＣＵ（エンジンＥＣＵ、ＡＴ−ＥＣＵ、ブレーキＥＣＵ等）や各種のセンサ（方向指示器センサ、ドア開閉センサ等）との通信を担う。
【００３１】
制御部２９は、ＣＰＵ，ＲＯＭ，ＲＡＭ，Ｉ／Ｏ及びこれらの構成を接続するバスラインなどからなる周知のマイクロコンピュータを中心に構成されており、ＲＯＭや上述した地図データ等記憶媒体から読み出したプログラムに基づいてＣＰＵが主体となって各種処理を実行する。例えば、位置検出器２１からの各検出信号に基づき座標及び進行方向の組として車両の現在位置を算出し、地図データ入力器２５を介して読み込んだ現在位置付近の地図等を表示部２６に表示する現在地表示処理や、地図データ入力器２５に格納された地図データと、操作スイッチ群２２やリモコン２３ａ等の操作に従って設定された目的地とに基づいて現在位置から目的地までの最適な経路を算出する経路算出処理や、その算出した経路を表示部２６に表示させたり音声出力部２７に音声として出力させることにより経路を案内する経路案内処理等を実行する。
【００３２】
なお、制御部２９のＲＡＭ（メインメモリ）は、図示しないバッテリーの電力によってバックアップされており、ナビゲーション装置２０への電力供給が絶たれた状態であっても、メインメモリの内容が保持されるようになっている。また、制御部２９は、ＭＭＵ（Memory Management Unit）機能を有したＯＳを実行し、そのＯＳ上で各処理を実行する。また、このＯＳは、プログラムが終了した場合にも、メインメモリ（ＲＡＭ）上でプログラムが使用していた領域（プログラムコードが展開された領域及びプログラムの実行時に利用されるデータが展開された領域）を開放せず、可能な限り当該領域を残しておくように動作するＯＳである。
【００３３】
［動作の説明］
次に、制御部２９が実行する処理のうち、本発明に特に関連するプログラムロード処理について、図２のフローチャートを用いて説明する。なお、一般的なナビゲーション装置の制御部が実行する現在地表示処理や、経路案内処理等の広く知られた処理については説明を省略する。
【００３４】
制御部２９が実行するプログラムロード処理は、ユーザインターフェースを司るプログラムをはじめとする他のプログラムから実行指令を受けた際に実行が開始される。
制御部２９は、プログラムロード処理の実行を開始すると、まずロードするプログラム（以下、「起動対象プログラム」とも称す。）の情報を取得する（Ｓ１１０）。これは、実行指令を発したプログラムからファイル名、ディレクトリ名等を取得することである。
【００３５】
続いて、制御部２９は、ロードするプログラムは初回起動であるか否かを判定する（Ｓ１１５）。具体的には、メインメモリ（ＲＡＭ）内のカーネル情報テーブルを参照し、起動対象プログラムについてのカーネル情報が存在するか否かを判定する。そして、起動対象プログラムについてのカーネル情報は存在しない（つまり、初回起動である）と判定した場合は（Ｓ１１５：Ｙｅｓ）、Ｓ１２０へ処理を移行し、起動対象プログラムについてのカーネル情報は存在する（つまり、初回起動でない）と判定した場合は（Ｓ１１５：Ｎｏ）、Ｓ１５０へ処理を移行する。なお、カーネル情報の詳細については後述する。また、カーネル情報テーブルは、カーネル情報を格納可能なテーブルであり、カーネル情報を構成する各情報を、カーネル情報単位で複数記憶することができるように構成されている。そして、メインメモリからプログラムコード等が消去された場合には、該当するカーネル情報もカーネル情報テーブルから消去されるようになっている。
【００３６】
初回起動であると判定した場合に進むＳ１２０では、起動対象プログラムをメインメモリ（ＲＡＭ）にロードする。このステップで行うロードは、既存の方法によるロードであり、ＯＳが当該プログラムのためにメインメモリの領域を割り当て、地図データ入力器２５を介して地図データ等記憶媒体や、制御部２９内のＲＯＭから起動対象プログラムを読み出してメインメモリにロードし、起動対象プログラムを実行可能な状態にすることである。
【００３７】
ここで、カーネル情報について説明する。カーネル情報というのは、カーネルがプログラムの実行を制御する際に利用する情報であって、プログラム（モジュール）単位に設定された情報である。カーネル情報の一例を、図３のデータ構造図を用いて説明する。この例のカーネル情報は、module構造体と、このmodule構造体自体のＣＲＣ値を格納するための変数crc32とから構成される。module構造体は、pathname、entry、text_paddr、text_crc32、data_cache、data_cache_crc32の各変数から構成される。pathnameは、モジュールのパス名を格納するための変数である。entryは、モジュールがロードされたメモリの先頭物理アドレスを格納するための変数である。text_paddrは、プログラムコードが格納されるプログラムコード領域の先頭物理アドレスを格納するための変数である。text_crc32は、プログラムコード領域のＣＲＣ値を格納するための変数である。data_cacheは、プログラムが実行時に使用するデータの領域であるプログラムデータ領域の先頭物理アドレスを格納するための変数である。なお、プログラムデータ領域は、例えば、初期値付き変数が格納される領域として利用される。data_cache_crc32は、プログラムデータ領域のＣＲＣ値を格納するための変数である。このうち、pathname、entry、text_paddr、data_cache、の各変数にセットされるデータについては、Ｓ１２０でメインメモリにプログラムがロードされた際に生成される。
【００３８】
説明を図２に戻し、続いて、プログラムのＣＲＣ値を計算するか否かを判定する（Ｓ１２５）。ここで言う「プログラムのＣＲＣ値」というのは、メインメモリ内に記憶されている起動対象プログラムのプログラムコード領域及び当該プログラムが使用するプログラムデータ領域のそれぞれのＣＲＣ値であり、図３の例で言えば、text_crc32にセットするためのプログラムコード領域のＣＲＣ値であり、data_cache_crc32にセットするためのプログラムデータ領域のＣＲＣ値である。この判定は、所定の設定ファイルの記述や、起動時の引数に基づいて行う。なお、プログラムのＣＲＣ値の算出は、デバッグを想定したものである。通常デバッカは、停止させたい位置（Breakポイント）のプログラムコードを「（デバック）例外を発生させる」コードに変更し、その例外を発生させることにより、プラグラムを目的の位置で停止させるようにしている。よってデバック時にBreakポイントを設定した状態で本発明を実行した場合、最初にＣＲＣ値を算出した場合とプログラムコードが異なり、毎回プログラムのロードが発生してしまう。このため「ＣＲＣ判定をする／しない」を用意している（ＣＲＣ値の算出有無の判定は本ステップ（Ｓ１２５）にて行い、ＣＲＣ値のチェックの有無は後述するＳ１６０にて行う）。
【００３９】
プログラムのＣＲＣ値を計算すると判定した場合は（Ｓ１２５：Ｙｅｓ）、Ｓ１３０へ処理を移行し、プログラムのＣＲＣ値を計算すると判定した場合は（Ｓ１２５：Ｎｏ）、Ｓ１３５へ処理を移行する。
【００４０】
プログラムのＣＲＣ値を計算すると判定した場合に進むＳ１３０では、プログラムのＣＲＣ値を計算して記憶する。
続いて、カーネル情報（図３の例で言えば、module構造体部分のデータ）のＣＲＣ値を求める（Ｓ１３５）。カーネル情報のＣＲＣ値を求めると、そのＣＲＣ値をカーネル情報に付加する（図３の例で言えば、変数crc32にセットする）。そしてＣＲＣ値が付加されたカーネル情報を、制御部２９内のメインメモリ内のカーネル情報テーブルに格納し（Ｓ１４０）、Ｓ１４５へ処理を移行する。
【００４１】
Ｓ１４５では、本処理（プログラムロード処理）の実行指令を発したプログラムに対してロードを完了した旨の通知を行う（Ｓ１４５）。そして、本処理（プログラムロード処理）を終了する。
【００４２】
一方、初回起動でないと判定した場合に進むＳ１５０では、メインメモリ内のカーネル情報テーブルから起動対象プログラムのカーネル情報を特定し、そのカーネル情報のＣＲＣ値をチェックする。具体的には、カーネル情報のうちＣＲＣ値を除いた部分（図３の例で言えば、module構造体の部分）のＣＲＣ値を計算し、その計算結果とカーネル情報に付加されているＣＲＣ値（図３の例で言えば、変数crc32に格納されている値）とが同一であるか否かを比較する。
【００４３】
続いて、チェック結果によって処理を分岐する（Ｓ１５５）。チェック結果が正当（ＣＲＣ値が一致）である場合には（Ｓ１５５：Ｙｅｓ）、Ｓ１６０へ処理を移行し、チェック結果が不当（ＣＲＣ値が不一致）である場合には（Ｓ１５５：Ｎｏ）、Ｓ１７５へ処理を移行する。
【００４４】
チェック結果が正当であったと判定した場合に進むＳ１６０では、プログラムのＣＲＣ値をチェックするか否かを判定する。この判定は、所定の設定ファイルの記述や、起動時の引数に基づいて行う。なお、プログラムのＣＲＣチェックは、デバッグを想定したものであり、通常はプログラムのＣＲＣチェックは行われないようになっているとよい。プログラムのＣＲＣチェックを実行すると判定した場合は（Ｓ１６０：Ｙｅｓ）、Ｓ１６５へ処理を移行し、プログラムのＣＲＣチェックを実行しないと判定した場合は（Ｓ１６０：Ｎｏ）、Ｓ１８０へ処理を移行する。
【００４５】
起動プログラムのＣＲＣチェックを実行すると判定した場合に進むＳ１６５では、プログラムのＣＲＣ値をチェックする。ここで言う「プログラムのＣＲＣ値をチェック」というのは、メインメモリ内に記憶されている起動対象プログラムのプログラムコード領域及び当該プログラムが使用していたプログラムデータ領域のそれぞれのＣＲＣ値を計算し、起動対象プログラムのカーネル情報にセットされているそれぞれのＣＲＣ値と比較することによって行う。図３の例で言えば、プログラムコード領域のＣＲＣ値とtext_crc32にセットされている値とを比較するとともに、プログラムデータ領域のＣＲＣ値とdata_cache_crc32にセットされている値とを比較することである。
【００４６】
続いて、ＣＲＣ値のチェック結果によって処理を分岐する（Ｓ１７０）。チェック結果が正当（いずれのＣＲＣ値も一致）である場合には（Ｓ１７０：Ｙｅｓ）、Ｓ１８０へ処理を移行し、チェック結果が不当（いずれかのＣＲＣ値が不一致）である場合には（Ｓ１７０：Ｎｏ）、Ｓ１７５へ処理を移行する。
【００４７】
チェック結果が不当（いずれのＣＲＣ値も不一致）であると判定した場合に進むＳ１７５では、メインメモリ内のカーネル情報テーブルに記憶させておいた当該プログラムのカーネル情報を削除する。そして、Ｓ１２０へ処理を戻す。
【００４８】
Ｓ１６０で起動プログラムのＣＲＣチェックを実行しないと判定した場合、Ｓ１７０でチェック結果が正当であると判定した場合に進むＳ１８０では、Ｓ１５０で特定したカーネル情報をカーネルに渡し、Ｓ１４５へ処理を移行する。
【００４９】
［実施形態の効果］
上記実施形態のナビゲーション装置２０では、メインメモリはバッテリーによってバックアップされているため、ナビゲーション装置２０への電力供給が絶たれた場合でも、メインメモリ内の情報が保持される。そして、上述したプログラムロード処理による機能により、初回のプログラムロード時にカーネル情報をカーネル情報テーブルに記憶させるようになっており（Ｓ１４０）、当該プログラムを再度起動させる際には、そのカーネル情報をカーネルに渡すようになっている（Ｓ１８０）。
【００５０】
このため、オペレーティングシステムは、制御部２９内のＲＯＭや地図データ等記憶媒体からプログラムを再度読み出すことなく、また、カーネル情報を再生成することもなく、プログラムの実行を開始することができる。したがって、システムの起動時間を短縮することができる。
【００５１】
また、プログラムロード処理では、カーネル情報をカーネルに渡す前に、カーネル情報のＣＲＣ値をチェックするようになっている（Ｓ１５０）。そして、ＣＲＣ値に異常がある場合には（Ｓ１５５：Ｎｏ）、プログラムをＲＯＭや地図データ等記憶媒体から再ロードするようになっている（Ｓ１２０）。
【００５２】
このため、何らかの理由によってカーネル情報が破壊されていたとしても、その破壊されたカーネル情報に基づいてプログラムが実行されることがない。
また、プログラムロード処理では、メインメモリ中におけるプログラムコード領域の先頭物理アドレスとプログラムデータ領域の先頭物理アドレスとを、カーネル情報として記憶するようになっている（Ｓ１４０，図３参照）。そして、それらの情報がカーネルに渡されるようになっている（Ｓ１８０）。このため、プログラムコード領域の先頭物理アドレスと、プログラムデータ領域の先頭物理アドレスとをオペレーティングシステムは即座に把握できるため、これらのアドレス情報を別途収集する必要がなく、プログラムの開始速度が早い。
【００５３】
また、プログラムロード処理では、メインメモリ中におけるプログラムコード領域のＣＲＣ値、及び、プログラムデータ領域のＣＲＣ値をチェックすることもできる（Ｓ１６５）。したがって、何らかの理由によってプログラムコードやプログラムが利用するデータが破壊されたとしても、その破壊されたプログラムコード等に基づいてプログラムが実行されることがない。
【００５４】
［特許請求の範囲との対応］
上記実施形態で用いた用語と、特許請求の範囲に記載した用語との対応を示す。
制御部２９のＲＡＭがメモリに相当し、制御部２９のＲＯＭ及び地図データ等記憶媒体が記憶手段に相当し、制御部２９のＣＰＵが制御手段に相当する。また、図３における、変数crc32に格納される値が、カーネル情報のＣＲＣ値である。変数text_paddrに格納される値が、プログラムコードが展開された領域（プログラムコード領域）のアドレス情報である。変数text_crc32に格納される値が、プログラムコード領域のＣＲＣ値である。変数data_cacheに格納される値が、プログラムの実行時に利用されるデータが展開された領域（プログラムデータ領域）のアドレス情報である。変数data_cache_crc32に格納される値が、プログラムデータ領域のＣＲＣ値である。
【図面の簡単な説明】
【００５５】
【図１】実施形態のナビゲーション装置の概略構成を示すブロック図である。
【図２】プログラムロード処理を説明するためのフローチャートである。
【図３】カーネル情報を説明するためのデータ構造図である。
【符号の説明】
【００５６】
２０…ナビゲーション装置、２１…位置検出器、２１ａ…ＧＰＳ受信機、２１ｂ…ジャイロスコープ、２１ｃ…距離センサ、２２…操作スイッチ群、２３ａ…リモコン、２３ｂ…リモコンセンサ、２４…外部通信機、２５…地図データ入力器、２６…表示部、２７…音声出力部、２８…マイクロフォン、２９…制御部、３３…車内ＬＡＮ通信部。
【図１】
2008158591.tif 000003
【図２】
2008158591.tif 000004
【図３】
2008158591.tif 000005