以下、本発明の実施の形態を図面に従って説明する。
実施の形態1.
図1は、本実施の形態1における情報処理装置1の構成を概略的に示すブロック図である。図1において、情報処理装置1は、不揮発性メモリ2、ワークメモリ3、中央処理装置(CPU:Central Processing Unit)4、通信部5、および外部インタフェース6を備える。
不揮発性メモリ2は、各種のデータを記憶する読み書き可能なメモリであり、例えばNAND型フラッシュメモリである。不揮発性メモリ2は、起動プログラムデータと、バックアッププログラムデータと、修正用データとを記憶する。上記システムは、コンピュータシステムであり、より具体的には情報処理装置1の(CPU4を中心とする)コンピュータシステムである。ただし、上記システムは、起動プログラムデータによって起動されるシステムであればよく、例えば情報処理装置1の外部のシステムであってもよい。
起動プログラムデータは、システムを起動するためのプログラムのデータである。バックアッププログラムデータは、起動プログラムデータの異常(本実施の形態ではビットエラー)が検出された場合にシステムの起動に使用されるバックアップ用のプログラムのデータである。バックアッププログラムデータは、起動プログラムデータと同一内容のプログラムデータ(例えばバージョンが同じプログラムのデータ)であってもよいし、起動プログラムデータと内容の異なるプログラムデータ(例えばバージョンの異なるプログラムのデータ)であってもよい。修正用データは、バックアッププログラムデータと同一内容のデータであり、バックアッププログラムデータのビットエラーを修正するためのデータである。本例では、修正用データは、バックアッププログラムデータと同一のデータである。ただし、修正用データは、バックアッププログラムデータを修正できる程度に実質的に同一であればよく、形式的な相違があってもよい。また、修正用データは、システムを起動するための実行可能なプログラムデータであってもよいし、実行可能でなくてもよい。
さらに不揮発性メモリ2には、起動プログラムデータ、バックアッププログラムデータ、および修正用データの各々について、当該データのビットエラー(ビット誤り)を検出するための誤り検出用データが記憶される。なお、不揮発性メモリ2に記憶されているデータのビットエラーは、例えば、不揮発性メモリ2に記憶されたビットの意図しない変化によるものであり、メモリの電荷抜けなどによって発生する。
なお、以下の説明では、起動プログラムデータおよびバックアッププログラムデータをそれぞれ「起動プログラム」および「バックアッププログラム」と略称する。
ワークメモリ3は、CPU4の作業領域として使用されるメモリであり、例えばRAM(Random Access Memory)である。ワークメモリ3は、不揮発性メモリ2から読み出されたデータを記憶する。
CPU4は、不揮発性メモリ2に記憶されている起動プログラム等のプログラムを実行する。具体的には、CPU4は、不揮発性メモリ2に記憶されているプログラムやその他のデータのうち必要となるものをワークメモリ3に読み出し(またはコピーし)、ワークメモリ3にアクセスし、ワークメモリ3に読み出されたプログラムに記述されている処理を実行する。プログラムやその他のデータは、例えば、不揮発性メモリ2においてブロック毎に記憶され、ブロック毎に読み出される。
通信部5は、CPU4が情報処理装置1に接続された外部の機器(外部接続機器)と外部インタフェース6を介して通信を行う際に、送受信データを外部接続機器との通信プロトコルに従って変換する。
外部インタフェース6は、情報処理装置1と外部接続機器とを接続するためのインタフェースであり、例えばUSB(Universal Serial Bus)インタフェースである。
図2は、不揮発性メモリ2の記憶フォーマットを示す概略図である。図2において、不揮発性メモリ2は、第1のプログラムデータ100を記憶する第1のプログラムデータ領域であるブロックB1と、第2のプログラムデータ102を記憶する第2のプログラムデータ領域であるブロックB2と、修正用データ104を記憶する修正用データ領域であるブロックB3とを有する。以下の説明では、第1のプログラムデータ100および第2のプログラムデータ102をそれぞれ「プログラム100」および「プログラム102」と略称する。
ブロックB1およびB2のうち一方に起動プログラムが記憶され、他方にバックアッププログラムが記憶される。ブロックB3には、修正用データが記憶される。例えば、ブロックB1に起動プログラム、ブロックB2にバックアッププログラムが記憶される。この場合、プログラム100は起動プログラムであり、プログラム102はバックアッププログラムであり、修正用データ104はプログラム102と同一の内容を有する。
プログラム100、プログラム102、および修正用データ104には、それぞれ、対応する誤り検出用データとして、チェックサム値101、103、105が付加されている。図2に示されるように、プログラム100とそのチェックサム値101とはブロックB1に、プログラム102とそのチェックサム値103とはブロックB2に、修正用データ104とそのチェックサム値105とはブロックB3に記憶されている。
また、不揮発性メモリ2には、制御情報106が記録されている。制御情報106は、起動情報106aおよび異常情報106bを含む。起動情報106aは、プログラム100およびプログラム102のいずれかをシステムの起動に使用するプログラムとして指定する情報である。起動情報106aは、プログラム100および102のうち起動プログラムに該当するプログラムを指定するように予め設定される。異常情報106bは、プログラム100および102について、当該プログラムが異常を有するか否かを示す情報である。上記の異常としては、後述する異常検出部13により検出された異常(本実施の形態ではビットエラー)、および後述するエラー修正部14で検出され修正されなかったビットエラーがある。
図3は、制御情報106のフォーマットを示す概略図である。図3において、制御情報106は、不揮発性メモリ2のアドレスNおよびアドレスN+1に記録される。起動情報106aは、アドレスNおよびアドレスN+1の0番目のビットであるビット0に記録され、異常情報106bは、アドレスNおよびアドレスN+1の1番目のビットであるビット1に記録される。また、アドレスNにはプログラム100に対応する値が記録され、アドレスN+1にはプログラム102に対応する値が記録される。
プログラム100に対応するアドレスNのビット0には、「0」または「1」が記録され、「0」はプログラム100がシステムの起動に使用するプログラムでないこと、「1」はプログラム100がシステムの起動に使用するプログラムであることを示す。同様に、プログラム102に対応するアドレスN+1のビット0には、「0」または「1」が記録され、「0」はプログラム102がシステムの起動に使用するプログラムでないこと、「1」はプログラム102がシステムの起動に使用するプログラムであることを示す。
また、プログラム100に対応するアドレスNのビット1には、「0」または「1」が記録され、「0」はプログラム100が異常を有しないこと、「1」はプログラム100が異常を有することを示す。同様に、プログラム102に対応するアドレスN+1のビット1には、「0」または「1」が記録され、「0」はプログラム102が異常を有しないこと、「1」はプログラム102が異常を有することを示す。
図3の例では、アドレスNのビット0が「1」、アドレスN+1のビット0が「0」となっており、プログラム100を起動に使用することが示されている。また、アドレスNおよびアドレスN+1のビット1が両方とも「0」となっており、プログラム100およびプログラム102のいずれも異常を有しないことが示されている。
再び図2を参照すると、不揮発性メモリ2には、さらに選択プログラムデータ107が記憶されている。この選択プログラムデータ107は、プログラム100および102の中からシステムの起動に使用するプログラムを選択するためのプログラムのデータである。以下の説明では、選択プログラムデータを「選択プログラム」と略称する。
なお、図2に示される不揮発性メモリ2の記憶フォーマットおよび図3に示される制御情報106のフォーマットは一例であり、これに限るものではない。また、制御情報106および選択プログラム107は、不揮発性メモリ2よりもビットエラーが発生しにくいメモリなど、不揮発性メモリ2以外の記憶装置に記憶されてもよい。例えば、選択プログラム107は、読み出し専用のROM(Read Only Memory)に記憶されてもよい。
以下、上記の各プログラムについて説明する。
選択プログラム107には、プログラム100および102の中からシステムの起動に使用するプログラムを選択するためのプログラム選択処理が記述されている。具体的には、選択プログラム107は、CPU4に、不揮発性メモリ2に記憶されている選択プログラム107自身をワークメモリ3に転送させ、起動情報106aに基づいてプログラム100および102からシステムの起動に使用するプログラムを選択させ、選択されたプログラムのアドレスに読み出し先をジャンプさせるようにプログラムされている。
プログラム100には、システムを起動するための起動処理(またはブート処理)と、プログラム100の異常(本実施の形態ではビットエラー)を検出するための異常検出処理と、プログラム102のビットエラーを検出して修正するためのエラー修正処理と、これらの処理を並行して行うための並列制御とが記述されている。具体的には、プログラム100は、CPU4に、不揮発性メモリ2に記憶されているプログラム100自身とそのチェックサム値101をワークメモリ3に転送させ、情報処理装置1の初期化処理を行った後、システムを起動させるようにプログラムされている。また、プログラム100は、CPU4に、上記の起動処理と並行して、ワークメモリ3に転送されたプログラム100についてチェックサム演算を行い、演算の結果とチェックサム値101とを比較してプログラム100のビットエラーの有無を確認するエラー検出処理を実行させるようにプログラムされている。また、プログラム100は、CPU4に、上記の起動処理と並行して、プログラム102および修正用データ104に対してビットエラーの検出を行い、いずれか一方のデータにビットエラーが検出された場合に、当該ビットエラーを他方のデータにより修正するエラー修正処理を実行させるようにプログラムされている。
同様に、プログラム102には、システムを起動するための起動処理と、プログラム102の異常を検出するための異常検出処理と、プログラム100のビットエラーを修正するためのエラー修正処理と、これらの処理を並行して行うための並列制御とが記述されている。具体的には、プログラム102は、CPU4に、不揮発性メモリ2に記憶されているプログラム102自身とそのチェックサム値103をワークメモリ3に転送させ、情報処理装置1の初期化処理を行った後、システムを起動させるようにプログラムされている。また、プログラム102は、CPU4に、上記の起動処理と並行して、ワークメモリ3に転送されたプログラム102についてチェックサム演算を行い、演算の結果とチェックサム値103とを比較してプログラム102のビットエラーの有無を確認するエラー検出処理を実行させるようにプログラムされている。また、プログラム102は、CPU4に、上記の起動処理と並行して、プログラム100および修正用データ104に対してビットエラーの検出を行い、いずれか一方のデータにビットエラーが検出された場合に、当該ビットエラーを他方のデータにより修正するエラー修正処理を実行させるようにプログラムされている。
さらに、プログラム100および102には、システムを再起動するための再起動処理と、不揮発性メモリ2に記憶されているプログラムを書き換えるための書き換え制御が記述されている。
図4は、本実施の形態1における情報処理装置1の機能構成を示すブロック図である。図4において、情報処理装置1は、プログラム選択部10、並列処理部11、起動部12、異常検出部13、エラー修正部14、再起動部15、および書き換え制御部16を有する。
本例では、プログラム選択部10は、選択プログラム107に記述されているプログラム選択処理をCPU4が実行することにより実現される。また、並列処理部11、起動部12、異常検出部13、エラー修正部14、再起動部15、および書き換え制御部16は、それぞれ、プログラム100およびプログラム102のうちプログラム選択部10によって選択されたプログラムに記述されている、並列制御、起動処理、異常検出処理、エラー修正処理、再起動処理、および書き換え制御をCPU4が実行することにより実現される。
プログラム選択部10は、起動情報106aに基づき、プログラム100および102からシステムの起動に使用するプログラムを選択する。すなわち、プログラム選択部10は、プログラム100および102のうち、起動情報106aで指定されているプログラムをシステムの起動に使用するプログラムとして選択する。
なお、以下の説明では、プログラム100および102のうち、起動情報106aによりシステムの起動に使用するプログラムとして指定されているプログラムを「指定プログラム」と称し、指定されていないプログラムを「非指定プログラム」と称する。
並列処理部11は、起動処理、異常検出処理、およびエラー修正処理を含む複数の処理を時分割により並行処理するための制御を行う。具体的には、並列処理部11は、CPU4内の処理を並行して行うために、CPU4の処理時間を短い単位に分割し、分割された単位時間を順番に各処理に割り当てることによって、複数の処理が並行して行われるようにCPU4の処理を制御する。
起動部12は、プログラム選択部10により選択されたプログラムを実行してシステムの起動を行う。具体的には、起動部12は、システムリセット後に、不揮発性メモリ2に記憶されている指定プログラムに記述された起動処理を実行し、システムを起動する。
異常検出部13は、起動部12によるシステムの起動と並行して、指定プログラム(すなわちプログラム選択部10で選択されたプログラム)の異常を検出する。本実施の形態では、異常検出部13は、指定プログラムに対してビットエラーの検出を行い、ビットエラーの有無を確認する。具体的には、異常検出部13は、指定プログラムに対して誤り検出データを用いてビットエラー検出を行う。より具体的には、異常検出部13は、不揮発性メモリ2に記憶されている指定プログラムに対してチェックサム値の計算を行い、計算されたチェックサム値を予め不揮発性メモリ2に記憶されている指定プログラムのチェックサム値と比較し、両者が一致しない場合にビットエラーがあると判定する。異常検出部13は、検出結果を再起動部15に通知する。
エラー修正部14は、指定プログラムによってシステムの起動が行われる場合に、非指定プログラム(すなわちプログラム選択部10で選択されなかったプログラム)に対してビットエラーの検出を行い、ビットエラーが検出された場合に、当該ビットエラーを修正用データ104により修正する。
本例では、エラー修正部14は、起動部12によるシステムの起動と並行して、上記ビットエラーを検出して修正するエラー修正処理を行う。ただし、エラー修正部14は、必ずしもシステムの起動と並行して処理を実行する必要はなく、例えば、システムの起動後にエラー修正処理を実行してもよい。
また、エラー修正部14は、非指定プログラムに対してビットエラーの検出を行うとともに、修正用データ104に対してもビットエラーの検出を行い、非指定プログラムにビットエラーが検出された場合、修正用データ104のうち非指定プログラムのビットエラーに対応する部分にビットエラーが検出されなかったときに、非指定プログラムのビットエラーの修正を行う。例えば、エラー修正部14は、修正用データ104の全体に対してビットエラーの検出を行い、修正用データ104にビットエラーが全く検出されなかったときに非指定プログラムの修正を行う。あるいは、エラー修正部14は、修正用データ104のうち非指定プログラムのビットエラーに対応する部分のみに対してビットエラーの検出を行い、当該部分にビットエラーが検出されなかったときに非指定プログラムの修正を行ってもよい。
また、エラー修正部14は、修正用データ104にビットエラーが検出された場合、非指定プログラムのうち修正用データ104のビットエラーに対応する部分にビットエラーが検出されなかったときに、修正用データ104のビットエラーを非指定プログラムにより修正する。例えば、エラー修正部14は、非指定プログラムにビットエラーが全く検出されなかったときに修正用データ104の修正を行う。あるいは、エラー修正部14は、非指定プログラムのうち修正用データ104のビットエラーに対応する部分にビットエラーが検出されたか否かを判断し、検出されていないと判断したときに修正用データ104の修正を行ってもよい。
さらに、エラー修正部14は、非指定プログラムと修正用データ104とが一致するか否かを判定し、一致しないと判定した場合に、上記ビットエラーを検出して修正する処理を行う。例えば、エラー修正部14は、不揮発性メモリ2に記憶されている非指定プログラムのバイナリデータと修正用データ104のバイナリデータとを比較し、当該2つのバイナリデータが完全に一致するかを判定し、一致しないと判定した場合に、上記ビットエラーを検出して修正する処理を行う。
また、エラー修正部14は、非指定プログラムのビットエラーを検出し、当該ビットエラーを修正しなかった場合には、非指定プログラムが異常を有する旨を示すように異常情報106bを更新する。例えば、エラー修正部14は、プログラム102にビットエラーが検出され当該ビットエラーが修正されなかった場合、図3のアドレスN+1のビット1を「0」から「1」に変更する。
また、エラー修正部14は、異常情報106bに基づき、非指定プログラムが既に異常を有する場合には、エラー修正処理を実行しない。例えば、エラー修正部14は、図3のプログラム102に対応するアドレスN+1のビット1を参照し、当該ビット1が「0」であればエラー修正処理を実行し、「1」であればエラー修正処理を実行しない。
再起動部15は、異常検出部13により指定プログラムの異常が検出された場合に、例えばシステムが起動しないことやフリーズしてしまうことを避けるために、非指定プログラムによりシステムの再起動を行う。すなわち、再起動部15は、システムの起動に使用するプログラムを指定プログラムから非指定プログラムに切り換えて、システムを再起動する。
具体的には、再起動部15は、指定プログラムの異常が検出された場合、異常情報106bに基づき、非指定プログラムが異常を有するか否かを判断し、異常を有しないときに、異常情報106bを指定プログラムが異常を有する旨を示すように更新し、指定されるプログラムが切り換わるように起動情報106aを更新した後、起動部12にシステムの起動を実行させる。一方、非指定プログラムが異常を有するときには、再起動部15は、書き換え制御部16に後述のプログラム書き換え処理を実行させる。また、再起動部15は、異常検出部13により指定プログラムの異常が検出された場合、当該異常検出と並行して行われるエラー修正部14の処理が終了した後に、上記判断以降の処理を行う。
書き換え制御部16は、情報処理装置1の外部から、不揮発性メモリ2に記憶されていないシステムを起動するための新たなプログラムを取得し、プログラム100およびプログラム102のうち少なくとも1つを当該新たなプログラムで書き換えるプログラム書き換え処理を行う。このプログラム書き換え処理は、プログラム100およびプログラム102の両方が異常(異常検出部13により検出された異常、またはエラー修正部14により検出され修正されなかったビットエラー)を有する場合に実行される。
本例では、書き換え制御部16は、プログラム100、プログラム102、および修正用データ104を新たなプログラムで書き換えた後、プログラム100または102によるシステムの再起動を行う。ただし、書き換え制御部16は、プログラム100および102を新たなプログラムで書き換えた後、プログラム100または102によりシステムの再起動を行い、異常がない場合に、現在起動に使用されていないプログラムを修正用データ104に上書きしてもよい。
また、書き換え制御部16は、不揮発性メモリ2に記憶されているプログラムを更新(またはアップデート)するプログラム更新処理を行う。このプログラム更新処理では、書き換え制御部16は、起動部12によるシステムの起動が正常に終了した後、情報処理装置1の外部から、不揮発性メモリ2に記憶されていないシステムを起動するための新たなプログラムを取得し、非指定プログラム(すなわち現在起動に使用されていないプログラム)を新たなプログラムで書き換える。そして、書き換え制御部16は、指定されるプログラムが切り換わるように起動情報106aを更新した後、起動部12にシステムの起動を実行させ、当該起動の際に異常検出部13によって異常が検出されなかった場合、修正用データ104を非指定プログラム(すなわちプログラム100および102のうち書き換えが行われなかったプログラム)で書き換える。一方、異常が検出された場合には、書き換え制御部16は、指定されるプログラムが切り換わるように起動情報106aを更新した後、起動部12にシステムの起動を実行させる。
上記のプログラム書き換え処理およびプログラム更新処理において、書き換え制御部16により外部から取得される新たなプログラムは、現在不揮発性メモリ2に記憶されているプログラム100または102と同じものであってもよいし、異なるものであってもよい。
上記の情報処理装置1では、システムの起動に使用するプログラムが再起動部15によって切り換えられる前においては、起動プログラムが指定プログラムであり、バックアッププログラムが非指定プログラムである。そして、起動部12は、起動プログラムを実行してシステムの起動を行い、異常検出部13は、起動プログラムに対して異常検出を行い、エラー修正部14は、バックアッププログラムに対してビットエラーの検出および修正を行う。再起動部15は、異常検出部13により起動プログラムに異常が検出された場合に、バックアッププログラムによりシステムの再起動を行う。具体的には、再起動部15は、システムの起動に使用するプログラムを起動プログラムからバックアッププログラムに切り換えて、起動部12にシステムの起動を実行させる。また、再起動部15は、起動プログラムに異常が検出された場合に、バックアッププログラムがエラー修正部14で検出され修正されなかったビットエラーを有するか否かを判断し、ビットエラーを有しないときに、バックアッププログラムにより再起動を行う。一方、バックアッププログラムがビットエラーを有するときには、再起動部15は、書き換え制御部16にプログラム書き換え処理を実行させる。
システムの起動に使用するプログラムが再起動部15によって切り換えられた後においては、バックアッププログラムが指定プログラムとなり、起動プログラムが非指定プログラムとなる。そして、起動部12は、バックアッププログラムを実行してシステムの起動を行い、異常検出部13は、バックアッププログラムに対して異常検出を行う。再起動部15は、異常検出部13によりバックアッププログラムに異常が検出された場合、書き換え制御部16にプログラム書き換え処理を実行させる。
図5は、本実施の形態1における情報処理装置1の動作を示すフローチャートである。以下、図5を参照して、情報処理装置1の動作について説明する。
システムリセットが解除されると、CPU4は、不揮発性メモリ2内の選択プログラム107が記憶されている所定のアドレス(以下、「ブートアドレス」と称す)にアクセスし、ワークメモリ3へ選択プログラム107を転送する。そして、CPU4は、ワークメモリ3から選択プログラム107を読み出し、選択プログラム107に記述されているプログラム選択処理を実行する。プログラム選択処理では、CPU4は、制御情報106を参照し、システムの起動に使用するプログラムとして指定プログラムを選択する(S1)。図3の例では、プログラム100に対応するアドレスNのビット0が「1」となっているので、プログラム100が選択される。なお、本例では、ブートアドレスは固定のアドレスである。
次に、CPU4は、選択プログラム107に記述されている命令に従い、ステップS1で選択された指定プログラムが記憶されているアドレスへジャンプし、当該指定プログラムとそのチェックサム値をワークメモリ3へ転送する。そして、CPU4は、ワークメモリ3から指定プログラムを読み出し、指定プログラムに記述されている初期化処理を含む起動処理を実行する(S2)。図3の例では、プログラム100とそのチェックサム値101がワークメモリ3へ転送され、プログラム100の起動処理が実行される。
また、CPU4は、選択された指定プログラムに記述されている並列制御を実行することにより、ステップS2の起動処理と並行して、指定プログラムに記述されている異常検出処理を実行し、指定プログラムのチェックサム値を計算する(S3)。そして、CPU4は、計算されたチェックサム値と、不揮発性メモリ2に記憶されている指定プログラムのチェックサム値とが一致するか否かを判断し、両者が一致しない場合は(S4:NO)、指定プログラムにビットエラー(または意図しないビット変化)があると判定し、再起動処理へと進む(S8)。この再起動処理については後に詳しく説明する。
一方、両チェックサム値が一致している場合(S4:YES)、CPU4は、指定プログラムにビットエラーがないと判定し、指定プログラムの実行を続行させ、異常検出処理を終了する。
さらに、CPU4は、指定プログラムに記述されている並列制御を実行することにより、ステップS2の起動処理と並行して、次のエラー修正処理(S5〜S7)を行う。
ステップS5では、CPU4は、制御情報106を参照し、非指定プログラムが既に異常を有するか否かを判断し、異常を有する場合(S5:YES)、エラー修正処理を終了し、異常を有しない場合には(S5:NO)、ステップS6に進む。具体的には、CPU4は、アドレスNおよびアドレスN+1のうちビット0が「0」となっているアドレスのビット1を参照し、当該ビット1の値が「1」であれば異常を有すると判断し、「0」であれば異常を有しないと判断する。図3の例では、アドレスN+1のビット0が「0」となっており、当該アドレスN+1のビット1が「0」となっているので、異常を有しないと判断され、処理がステップS6に進む。
ステップS6では、CPU4は、非指定プログラムと修正用データ104とを比較し、両者が一致しているか否かを判定し、両者が一致する場合は(S6:YES)、エラー修正処理を終了する。一方、両者が一致しない場合は(S6:NO)、ステップS7に進む。
ステップS7では、CPU4は、非指定プログラムおよび修正用データ104のそれぞれのチェックサム値を計算する。そして、CPU4は、計算された非指定プログラムのチェックサム値と不揮発性メモリ2に記憶されている非指定プログラムのチェックサム値とが一致するか否か、および計算された修正用データ104のチェックサム値と不揮発性メモリ2に記憶されている修正用データ104のチェックサム値105とが一致するか否かを判断する。
そして、非指定プログラムおよび修正用データ104のうちどちらか一方のチェックサム値が一致しない場合、CPU4は、非指定プログラムおよび修正用データ104のうちチェックサム値が一致しているデータによって、もう一方のチェックサム値が一致していないデータを上書きし、エラー修正処理を終了する。
一方、非指定プログラムおよび修正用データ104の両方のチェックサム値が一致しない場合には、CPU4は、非指定プログラムが異常を有する旨を示すように異常情報106bを更新し、エラー修正処理を終了する。図3の例では、プログラム102が非指定プログラムであり、プログラム102に対応するアドレスN+1のビット1の値が「0」から「1」に変更される。
なお、図5のステップS1は選択プログラム107に記述されているプログラム選択処理をCPU4が実行することにより実現される。ステップS2は指定プログラムに記述されている起動処理をCPU4が実行することにより実現される。ステップS3およびS4は、指定プログラムに記述されている異常検出処理をCPU4が実行することにより実現される。ステップS5からS7は、指定プログラムに記述されているエラー修正処理をCPU4が実行することにより実現される。ステップS8は、指定プログラムに記述されている再起動処理をCPU4が実行することにより実現される。また、ステップS1はプログラム選択部10の処理であり、ステップS2は起動部12の処理であり、ステップS3およびS4は異常検出部13の処理であり、ステップS5からS7はエラー修正部14の処理であり、ステップS8は再起動部15の処理である。
また、図5の例では、非指定プログラムのビットエラーを検出して修正するエラー修正処理(S5〜S7)を、システムの起動処理(S2)および異常検出処理(S3,S4)と並行して行っているが、エラー修正処理は、システムの起動が終了した後に、CPU4がアイドル状態となった場合など、CPU4の処理負荷が低いときに行われてもよい。
図6は、再起動処理を示すフローチャートである。以下、図6を参照して、図5のステップS8における再起動処理について説明する。
図6に示されるように、まず、CPU4は、起動処理(図5のステップS2の処理)を停止する(S21)。次に、CPU4は、エラー修正処理(図5のステップS5〜S7の処理)が終了するまで待機し(S22:NO)、エラー修正処理が終了すると(S22:YES)、ステップS23に進む。
ステップS23では、CPU4は、制御情報106を参照し、プログラムの切り替えによる再起動が可能か否かを判断する。具体的には、CPU4は、非指定プログラムが異常を有するか否かを確認し、異常を有しない場合に、プログラムの切り換えによる再起動が可能であると判断し、異常を有する場合には、可能でないと判断する。より具体的には、CPU4は、制御情報106のアドレスNおよびアドレスN+1のうちビット0が「0」となっているアドレスのビット1を参照し、当該ビット1が「0」であれば可能と判断し、当該ビット1が「1」であれば可能でないと判断する。図3の例では、アドレスN+1のビット0が「0」となっており、当該アドレスN+1のビット1が「0」となっているので、プログラムの切り換えによる再起動が可能であると判断される。
ステップS23にて可能と判断された場合(S23:YES)、CPU4は、指定プログラムが切り換わるように、また現在の指定プログラムが異常を有する旨を示すように制御情報106を更新する(S24)。具体的には、アドレスNおよびアドレスN+1のビット0の値を入れ替えるとともに、アドレスNおよびアドレスN+1のうちビット0が「1」となっているアドレスのビット1を「1」にする。図3の例では、アドレスN+1のビット0が「0」から「1」に、アドレスNのビット0が「1」から「0」に、アドレスNのビット1が「0」から「1」に変更される。
上記制御情報106の更新が完了すると、CPU4は、システムの再起動を行う(S25)。具体的には、CPU4は、ソフトウェアリセットをかけて、図5の処理を最初から行う。すなわち、図5において、処理がステップS8からステップS1に戻り、再度、プログラムの選択処理(S1)、選択されたプログラムによるシステムの起動処理(S2)、異常検出処理(S3,S4)、およびエラー修正処理(S5〜S7)が行われる。図3の例では、ステップS24において上記のように制御情報106が更新された後、ソフトウェアリセットが行われると、アドレスN+1のビット0が「1」となっているので、プログラム102が選択され、プログラム102により起動処理が行われることになる。
一方、ステップS23にてプログラムの切り換えによる再起動が可能でないと判断された場合(S23:NO)、CPU4は、新たに外部からプログラムを取得する必要がある旨を知らせるメッセージを不図示の表示部などに出力し(S26)、不揮発性メモリ2に記憶されているプログラムを書き換えるためのプログラム書き換え処理へと進む(S27)。プログラム書き換え処理については以下に詳しく説明する。
図7は、プログラム書き換え処理を示すフローチャートである。以下、図7を参照して、図6のステップS27におけるプログラム書き換え処理について説明する。なお、プログラム書き換え処理は、指定プログラムに記述されている書き換え制御をCPU4が実行することによって実現される。
プログラム書き換え処理では、CPU4は、外部インタフェース6に外部メモリが接続されたことを認識すると、通信部5を介して当該外部メモリから、書き換え用の新たなプログラムおよびそのチェックサム値を読み出し、当該新たなプログラムとチェックサム値で、プログラム100とチェックサム値101、プログラム102とチェックサム値103、および修正用データ104とチェックサム値105を書き換える(S31)。上記外部メモリは、例えば図6のステップS26のメッセージを見たユーザによって情報処理装置1の外部インタフェース6に接続されるものであり、例えばUSBメモリ等の可搬型記憶媒体である。なお、CPU4は、上記以外の方法で新たなプログラムを取得してもよく、例えば、ネットワークを介してネットワーク上のプログラム提供装置から取得してもよい。
上記の書き換えが完了すると、CPU4は、制御情報106を更新する(S32)。具体的には、CPU4は、プログラム100および102のいずれも異常を有しない旨を示すように異常情報106bを更新し、プログラム100および102のうちいずれか一方を指定するように起動情報106aを更新する。ここでは、CPU4は、制御情報106のアドレスNおよびアドレスN+1の両方のビット1を「0」にするとともに、アドレスNのビット0を「1」、アドレスN+1のビット0を「0」にする。ただし、アドレスNのビット0を「0」、アドレスN+1のビット0を「1」としても構わない。
制御情報106の更新が完了すると、CPU4は、システムの再起動を行う(S33)。具体的には、CPU4は、ソフトウェアリセットをかけ、図5の処理を最初から行う。すなわち、図5において、処理がステップS8からステップS1に戻り、再度、プログラムの選択処理(S1)、選択されたプログラムによるシステムの起動処理(S2)、異常検出処理(S3,S4)、およびエラー修正処理(S5〜S7)が行われる。ここでは、アドレスNのビット0が「1」となっているので、アドレスNに対応するプログラム100が選択され、プログラム100により起動処理が実行されることになる。
図8は、プログラム更新処理を示すフローチャートである。以下、図8を参照して、プログラムを更新(またはアップデート)する処理について説明する。なお、プログラム100および102にはプログラム更新処理が記述されており、図8のプログラム更新処理は、指定プログラムに記述されているプログラム更新処理をCPU4が実行することによって実現される。
CPU4は、システムが正常に起動した後に、外部インタフェース6に外部メモリが接続されたことを認識すると、現在実行中の処理を中止し(S41)、制御情報106を参照し(S42)、通信部5を介して当該外部メモリから、書き換え用の新たなプログラムおよびそのチェックサム値を読み出し、当該新たなプログラムとチェックサム値で、非指定プログラムおよびそのチェックサム値を書き換える(S43)。例えば、アドレスNのビット0が「1」、アドレスN+1のビット0が「0」となっており、プログラム102が非指定プログラムである場合、プログラム102とそのチェックサム値103が、新たなプログラムとそのチェックサム値で書き換えられる。なお、上記ステップS41に関し、システムが正常に起動したかどうかは、例えば、後述する実施の形態3のように、起動完了通知を用いて判断される。
プログラムの書き換えが完了すると、CPU4は、制御情報106を更新する(S44)。具体的には、CPU4は、指定プログラムが切り換わるように、すなわち書き換えられたプログラムが指定されるように起動情報106aを更新し、現在の非指定プログラム(すなわち書き換えられたプログラム)が異常を有しない旨を示すように異常情報106bを更新する。上記の例では、アドレスN+1のビット0が「1」、アドレスNのビット0が「0」、アドレスN+1のビット1が「0」に設定される。ここで、プログラム100は、システムを正常に起動させた正常なプログラムであり、プログラム100に対応するアドレスNのビット1は「0」となっている。
次に、CPU4は、ソフトウェアリセットをかけることでシステムの再起動を行い(S45)、図5の処理を最初から行う。すなわち、処理が図5のステップS1に戻り、再度、プログラムの選択処理(S1)、選択されたプログラムによるシステムの起動処理(S2)、異常検出処理(S3,S4)、およびエラー修正処理(S5〜S7)が行われる。上記の例では、アドレスN+1のビット0が「1」となっているので、プログラム102が選択され、プログラム102により起動処理が実行される。すなわち、新たに取得されたプログラムで起動が行われる。
上記起動処理と並行して行われる異常検出処理において指定プログラムに異常が検出されなかった場合(S46:NO)、CPU4は、修正用データ104とそのチェックサム値105を、非指定プログラムとそのチェックサム値で書き換える(S47)。上記の例では、アドレスNのビット0が「0」となっており、プログラム100が非指定プログラムであるので、修正用データ104とチェックサム値105は、プログラム100とチェックサム値101で書き換えられる。
一方、異常が検出された場合には(S46:YES)、CPU4は、図6の再起動処理を行う(S48)。この再起動処理では、システムの起動に使用されるプログラムが切り換えられ、プログラム100および102のうちプログラム更新処理で書き換えられなかったプログラム、すなわちシステムを正常に起動することができていたプログラム(上記の例ではプログラム100)にて再起動が行われることになる。
以上説明した本実施の形態1によれば、下記(1)〜(12)の効果が得られる。
(1)本実施の形態に係る情報処理装置は、起動プログラムを実行してシステムの起動を行い、このシステムの起動と並行して起動プログラムに対する異常検出処理(本実施の形態ではビットエラー検出処理)を行うように構成されている。このため、本実施の形態によれば、起動プログラムに対して異常検出処理(例えばビットエラー検出処理)を行った後にシステムの起動を開始する構成と比較して、システムの起動を早期に開始することができる。これにより、例えば、システムの起動画面が表示されるタイミングを早くすることができる。
特に、近年、機器の高機能化が進むに伴って起動プログラムのデータ容量が著しく増えており、これにより起動プログラムに対する誤り検出処理の処理時間が長くなっており、起動プログラムに対して誤り検出を行った後にシステムの起動処理を開始する構成では、システムの起動処理の開始が著しく遅くなるという問題がある。本実施の形態によれば、この問題を解決することができる。
(2)本実施の形態に係る情報処理装置は、バックアッププログラムに対してビットエラーの検出を行い、ビットエラーが検出されたときに、当該ビットエラーを修正用データにより修正する。このため、バックアッププログラムにビットエラーが発生した場合に、当該ビットエラーを修正することができ、システムを起動できない事態の発生を抑制することができる。
具体的には、先述したように、特許文献1に記載された技術では、第2のブートプログラムに不正な変化が一旦発生すると、第1のブートプログラムに不正な変化が発生したときにシステムを起動できない事態が発生する。これに対し、本実施の形態によれば、バックアッププログラムにビットエラーが発生した場合、当該ビットエラーを検出して修正することができ、起動プログラムに異常が検出されたときに、バックアッププログラムを用いてシステムを起動することができる。また、ビットエラーを修正することにより、バックアッププログラムの信頼性を高めることができ、起動プログラムに異常が検出されたときに、信頼性の高いプログラムで再起動を行うことができる。さらに、システムの起動毎など、定期的にエラー修正処理を行うことにより、バックアッププログラムを常に信頼性の高い状態に維持することができ、バックアッププログラムによりシステムの再起動を行う場合に、システムが起動しない確率を低く抑えることができる。
(3)エラー修正部は、バックアッププログラムに対してビットエラーの検出を行うとともに、修正用データに対してもビットエラーの検出を行い、バックアッププログラムにビットエラーが検出された場合、修正用データのうちバックアッププログラムのビットエラーに対応する部分にビットエラーが検出されなかったときに、バックアッププログラムのビットエラーの修正を行う。これにより、バックアッププログラムに対し、ビットエラーを含むデータによる不適切な修正が施されることを防止することができる。
(4)エラー修正部は、バックアッププログラムに対してビットエラーの検出を行うとともに、修正用データに対してもビットエラーの検出を行い、修正用データにビットエラーが検出された場合、バックアッププログラムのうち修正用データのビットエラーに対応する部分にビットエラーが検出されなかったときに、修正用データのビットエラーをバックアッププログラムにより修正する。これにより、修正用データにビットエラーが発生した場合に、当該ビットエラーを適切に修正することができ、修正用データの信頼性を高めることができる。
(5)エラー修正部は、バックアッププログラムと修正用データとが一致するか否かを判定し、一致しないと判定された場合に、ビットエラーの検出および修正を行う。本構成によれば、ビットエラー検出よりも一致判定の方が処理負荷が小さい場合に、エラー修正部の処理負荷や処理時間を低減することができる。
(6)再起動部は、起動プログラムの異常が検出された場合、バックアッププログラムがエラー修正部により検出され修正されなかったビットエラーを有するか否かを判断し、ビットエラーを有しないときに、バックアッププログラムによりシステムの再起動を行う。これにより、ビットエラーを含まない信頼性の高いバックアッププログラムで再起動を行うことができる。
(7)再起動部は、起動プログラムの異常が検出された場合、バックアッププログラムがエラー修正部により検出され修正されなかったビットエラーを有するか否かを判断し、ビットエラーを有するときには、外部から新たなプログラムを取得し、起動プログラムおよびバックアッププログラムのうち少なくとも1つを新たなプログラムで書き換える。これにより、バックアッププログラムがビットエラーを含む場合に、外部から取得した新たなプログラムでシステムを起動することが可能となる。
(8)エラー修正部は、起動部による起動と並行してエラー修正処理を行い、再起動部は、異常検出部により起動プログラムの異常が検出された場合、当該異常検出と並行して行われるエラー修正部の処理が終了した後に、上記(6)または(7)の上記判断以降の処理を行う。本構成では、再起動の直前に、バックアッププログラムのビットエラーの検出および修正を行い、ビットエラーがないことが確認されたプログラムや、ビットエラーが修正されたプログラムによりシステムの再起動を行う。このため、起動プログラムの異常が検出された場合に、より信頼性の高いバックアッププログラムによりシステムの再起動を行うことができる。
(9)再起動部は、バックアッププログラムの異常が検出された場合、外部から新たなプログラムデータを取得し、起動プログラムおよびバックアッププログラムのうち少なくとも1つを新たなプログラムデータで書き換える。これにより、バックアッププログラムに異常が検出された場合に、外部から取得した新たなプログラムでシステムを起動することが可能となる。
(10)不揮発性メモリは、第1のプログラムを記憶する第1のプログラム領域と、第2のプログラムを記憶する第2のプログラム領域とを有し、起動部は、第1および第2のプログラムのうち起動情報で指定されるプログラムを実行してシステムの起動を行う。そして、再起動部は、起動に使用されているプログラムの異常が検出された場合に、指定されるプログラムが切り換わるように起動情報を更新した後に、起動部にシステムの起動を実行させる。本構成によれば、起動情報の更新によってシステムの起動に使用するプログラムを切り換えることができる。このため、プログラムの書き換えによってシステムの起動に使用するプログラムを切り換える構成(例えば、第2のプログラムで第1のプログラムを上書きすることで、システムの起動に使用するプログラムを切り換える構成)と比較して、処理負荷や処理時間を低減することができる。
(11)再起動部は、異常検出部によりプログラムの異常が検出された場合、異常情報に基づき、非指定プログラムが、異常検出部により検出された異常およびエラー修正部により検出されたビットエラーのいずれも有しないときに、指定されるプログラムが切り換わるように起動情報を更新して、起動部に起動を実行させる。これにより、異常検出部によりプログラムの異常が検出された場合に、上記異常およびビットエラーを含まない信頼性の高いプログラムで再起動を行うことができる。具体的には、過去に異常検出部により異常が検出されたプログラムや、エラー修正部によりビットエラーが検出され修正されなかったプログラムを使用しないようにし、信頼性の高いプログラムで再起動を行うことができる。
(12)情報処理装置は、システムの起動が正常に終了した後、外部から新たなプログラムを取得し、非指定プログラムを新たなプログラムで書き換え、指定されるプログラムが切り換わるように起動情報を更新した後、起動部に起動を実行させ、当該起動の際に異常検出部によって異常が検出されなかった場合、修正用データを非指定プログラムで書き換え、異常が検出された場合には、指定されるプログラムが切り換わるように起動情報を更新した後、起動部に起動を実行させる。本構成によれば、プログラムを更新する際、更新後の新たなプログラムに異常が検出された場合に、起動に使用するプログラムを更新前のものに戻すことができる。このため、新たに取得したプログラムでシステムを起動できない場合に、元のプログラムに戻すことができず、システムの起動ができなくなってしまうことを防ぐことができる。
実施の形態2.
以下、実施の形態2における情報処理装置について説明する。この情報処理装置は、実施の形態1と異なる制御情報を用いる点を除き、実施の形態1の情報処理装置と同様である。以下の説明では、実施の形態1と同様の構成および処理については、実施の形態1と同一の符号を用い、説明を省略または簡略化する。
図9は、本実施の形態2における不揮発性メモリ2の記憶フォーマットを示す概略図である。図9に示されるように、本実施の形態では、制御情報106は、バージョン情報106c、再起動フラグ(再起動情報)106d、およびエラーフラグ(エラー情報)106eを含む。
バージョン情報106cは、プログラム100および102のそれぞれのバージョンを示す情報である。再起動フラグ106dは、再起動部15により更新される情報であり、再起動の有無を示す。エラーフラグ10eは、プログラム100および102のうち少なくとも1つがエラー修正部14により検出され修正されなかったビットエラーを有するか否かを示す情報である。
図10は、本実施の形態2における制御情報106のフォーマットを示す図である。図10において、バージョン情報106cは、不揮発性メモリ2のアドレスMおよびアドレスM+1に記録される。アドレスMにはプログラム100のバージョン番号、アドレスM+1にはプログラム102のバージョン番号が記録される。本例では、バージョン番号が大きいほど新しいバージョンを表し、バージョン番号が小さいほど古いバージョンを表すこととする。図10の例では、プログラム100のバージョン番号が「0001」、プログラム102のバージョン番号が「0000」であり、プログラム100の方がプログラム102よりも新しい。再起動フラグ106dは、アドレスLに記録される。アドレスLには、「0」または「1」が記録され、「0」は未更新(または再起動なし)を示し、「1」は更新済み(または再起動あり)を示す。エラーフラグ106eは、アドレスKに記録される。アドレスKには、「0」または「1」が記録され、「0」はビットエラーなしを示し、「1」はビットエラーありを示す。
本実施の形態では、プログラム選択部10は、バージョン情報106cおよび再起動フラグ106dに基づき、再起動フラグ106dが未更新の場合、プログラム100および102のうちバージョンが所定の条件を満たすプログラムを選択し、再起動フラグ106dが更新済みの場合、プログラム100および102のうちバージョンが上記所定の条件を満たさないプログラムを選択する。本例では、上記所定の条件は、バージョンが他方のプログラムのバージョンよりも新しいことであり、プログラム選択部10は、再起動フラグ106dが未更新である場合、プログラム100および102のうちバージョンが新しいプログラムを選択し、再起動フラグ106dが更新済みである場合には、バージョンが古いプログラムを選択する。
プログラム100および102のバージョンが互いに同じである場合、プログラム選択部10は、再起動フラグ106dが未更新である場合、プログラム100および102のうち不揮発性メモリ2におけるアドレスが所定の条件を満たすプログラムを選択し、再起動フラグ106dが更新済みである場合、プログラム100および102のうちアドレスが上記所定の条件を満たさないプログラムを選択する。本例では、上記所定の条件は、アドレス(またはブロックの番号)が他方のプログラムよりも小さいことであり、プログラム選択部10は、再起動フラグ106dが未更新である場合にはプログラム100を選択し、再起動フラグ106dが更新済みである場合にはプログラム102を選択する。
以上のように、バージョン情報106cおよび再起動フラグ106dは、システムの起動に使用するプログラムを指定する起動情報としての役割を果たし、再起動フラグ106dが未更新の場合、バージョンが新しいプログラムが指定プログラムであり、再起動フラグ106dが更新済みの場合、バージョンが古いプログラムが指定プログラムである。
再起動部15は、異常検出部13によりプログラムの異常が検出された場合、再起動フラグ106dが未更新であり、かつエラーフラグ106eがビットエラーなしを示すときに、再起動フラグ106dを更新して、起動部12にシステムの起動を実行させる。一方、再起動フラグ106dが更新済みであるか、またはエラーフラグ106eがビットエラーありを示すときには、再起動部15は、書き換え制御部16にプログラム書き換え処理を実行させる。
以下、図5を参照して、本実施の形態2における情報処理装置の動作を説明する。
システムリセットが解除されると、CPU4は、選択プログラム107に記述されているプログラム選択処理を実行する。プログラム選択処理では、CPU4は、バージョン情報106cおよび再起動フラグ106dを参照し、システムの起動に使用するプログラムとして指定プログラムを選択する。図10の例では、再起動フラグ106dが「0」となっているので、バージョンが新しいプログラム100が選択される。
次に、CPU4は、実施の形態1と同様に、選択された指定プログラムとそのチェックサム値をワークメモリ3へ転送し、指定プログラムに記述されている起動処理を実行する(S2)。
また、CPU4は、実施の形態1と同様に、ステップS2の起動処理と並行して、指定プログラムのチェックサム値を計算する(S3)。そして、CPU4は、計算されたチェックサム値と、不揮発性メモリ2に記憶されているチェックサム値とが一致するか否かを判断し、一致しない場合は(S4:NO)、再起動処理へと進む(S8)。この再起動処理については後に詳しく説明する。一方、チェックサム値が一致している場合(S4:YES)、CPU4は、異常検出処理を終了する。
さらに、CPU4は、ステップS2の起動処理と並行して、次のエラー修正処理(S5〜S7)を行う。
ステップS5では、CPU4は、再起動フラグ106dおよびエラーフラグ106eを参照し、非指定プログラムが既に異常を有するか否かを判断する。具体的には、CPU4は、再起動フラグ106dおよびエラーフラグ106eのうち少なくとも1つが「1」となっている場合、異常を有すると判断し(S5:YES)、エラー修正処理を終了する。一方、再起動フラグ106dおよびエラーフラグ106eがいずれも「0」となっている場合には、異常を有しないと判断し(S5:NO)、ステップS6に進む。
ステップS6では、CPU4は、実施の形態1と同様に、非指定プログラムと修正用データ104とを比較し、両者が一致する場合は(S6:YES)、エラー修正処理を終了し、両者が一致しない場合は(S6:NO)、ステップS7に進む。
ステップS7では、CPU4は、非指定プログラムおよび修正用データ104のそれぞれのチェックサム値を計算する。そして、CPU4は、計算された非指定プログラムのチェックサム値と不揮発性メモリ2に記憶されているチェックサム値とが一致するか否か、および計算された修正用データ104のチェックサム値と不揮発性メモリ2に記憶されているチェックサム値105とが一致するか否かを判断する。
そして、非指定プログラムおよび修正用データ104のうちどちらか一方のチェックサム値が一致しない場合、CPU4は、非指定プログラムおよび修正用データ104のうちチェックサム値が一致しているデータによって、もう一方のチェックサム値が一致していないデータを上書きし、エラー修正処理を終了する。
一方、非指定プログラムおよび修正用データ104の両方のチェックサム値が一致しない場合には、CPU4は、エラーフラグ106eを「1」に更新し、エラー修正処理を終了する。
以下、図6を参照して、本実施の形態2における再起動処理(図5のステップS8)について説明する。
まず、CPU4は、起動処理を停止した後(S21)、エラー修正処理が終了するまで待機し(S22:NO)、エラー修正処理が終了すると(S22:YES)、ステップS23に進む。
ステップS23では、CPU4は、再起動フラグ106dおよびエラーフラグ106eを参照し、プログラムの切り替えによる再起動が可能か否かを判断する。具体的には、CPU4は、再起動フラグ106dおよびエラーフラグ106eがいずれも「0」となっている場合には可能と判断し、2つのフラグのうち少なくとも1つが「1」となっている場合には可能でないと判断する。
ステップS23で可能と判断された場合(S23:YES)、CPU4は、再起動フラグ106dを「1」に更新した後に(S24)、システムの再起動を行う(S25)。具体的には、CPU4は、ソフトウェアリセットをかけて、図5の処理を最初から行う。図10の例では、再起動フラグ106dが「1」に更新された後、ソフトウェアリセットされると、プログラム102が選択され、プログラム102により起動処理が実行されることになる。
一方、ステップS23で可能でないと判断された場合(S23:NO)、CPU4は、メッセージを出力し(S26)、プログラム書き換え処理へと進む(S27)。
以下、図7を参照して、本実施の形態2におけるプログラム書き換え処理(図6のステップS27)について説明する。
CPU4は、実施の形態1と同様に、新たなプログラムとそのチェックサム値を外部メモリから読み出し、当該新たなプログラムとチェックサム値で、プログラム100とチェックサム値101、プログラム102とチェックサム値103、および修正用データ104とチェックサム値105を書き換える(S31)。
書き換えが完了すると、CPU4は、再起動フラグ106dおよびエラーフラグ106eを「0」に更新し、バージョン情報106cにおけるプログラム100および102のバージョンを新たに取得したプログラムのバージョンに更新する(S32)。
制御情報106の更新が完了すると、CPU4は、システムの再起動を行う(S33)。具体的には、CPU4は、ソフトウェアリセットをかけ、図5の処理を最初から行う。
図10では、例えば、ステップS32においてプログラム100および102のバージョンが「0002」に更新された後、ステップS33でソフトウェアリセットされると、プログラム100が選択され、プログラム100により起動処理が実行されることになる。
以下、図8を参照して、本実施の形態2におけるプログラム更新処理を説明する。
CPU4は、システムが正常に起動した後に、外部メモリが接続されたことを認識すると、現在実行中の処理を中止し(S41)、バージョン情報106cおよび再起動フラグ106dを参照し(S42)、外部メモリから新たなプログラムおよびそのチェックサム値を読み出し、当該新たなプログラムとチェックサム値で、非指定プログラムおよびそのチェックサム値を書き換える(S43)。図10の例では、再起動フラグ106dが「0」となっているので、バージョンが古いプログラム102が新たなプログラムで書き換えられる。
プログラムの書き換えが完了すると、CPU4は、制御情報106を更新する(S44)。具体的には、CPU4は、バージョン情報106cにおける非指定プログラム(すなわち書き換えられたプログラム)のバージョンを、新たに取得したプログラムのバージョンに更新し、再起動フラグ106dおよびエラーフラグ106eを「0」に更新する。図10の例では、プログラム102に対応するアドレスM+1に、新たなプログラムのバージョンが書き込まれる。ここで、新たなプログラムのバージョンは、元々、不揮発性メモリ2に記憶されていたプログラム100および102のバージョンよりも新しいものであり、アドレスM+1には例えば「0002」が書き込まれる。また、プログラム100は、システムを正常に起動させた正常なプログラムである。
次に、CPU4は、ソフトウェアリセットをかけることでシステムの再起動を行い(S45)、図5の処理を最初から行う。上記の例では、バージョンが新しいプログラム102が選択され、プログラム102により起動処理が実行される。すなわち、新たに取得されたプログラムで起動が行われる。
上記起動処理と並行して行われる異常検出処理において指定プログラムに異常が検出されなかった場合(S46:NO)、CPU4は、修正用データ104とそのチェックサム値105を、非指定プログラムとそのチェックサム値で書き換える(S47)。上記の例では、再起動フラグ106dが「0」となっており、バージョンの古いプログラム100が非指定プログラムであるので、修正用データ104とチェックサム値105は、プログラム100とチェックサム値101で書き換えられる。
一方、異常が検出された場合には(S46:YES)、CPU4は、図6の再起動処理を行う(S48)。この再起動処理では、システムの起動に使用されるプログラムが切り換えられ、プログラム100および102のうちプログラム更新処理で書き換えられなかったプログラム、すなわちシステムを正常に起動することができていたプログラム(上記の例ではプログラム100)にて再起動が行われることになる。
以上説明した本実施の形態によれば、上記(1)〜(10)、(12)の他に、下記(13)の効果が得られる。
(13)再起動部は、異常検出部によりプログラムの異常が検出された場合、再起動フラグが未更新であり、かつエラーフラグがビットエラーなしを示すときに、再起動フラグを更新し、起動部にシステムの起動を実行させる。これにより、異常検出部によりプログラムの異常が検出された場合に、信頼性の高いプログラムで再起動を行うことができる。具体的には、過去に異常検出部により異常が検出されたプログラムや、エラー修正部によりビットエラーが検出され修正されなかったプログラムを使用しないようにし、信頼性の高いプログラムで再起動を行うことができる。
実施の形態3.
以下、実施の形態3における情報処理装置について説明する。この情報処理装置は、プログラムの異常としてシステムの起動の失敗を検出する点を除き、実施の形態1の情報処理装置と同様である。以下の説明では、実施の形態1と同様の構成および処理については、実施の形態1と同一の符号を用い、説明を省略または簡略化する。
本実施の形態では、異常検出部13は、指定プログラム(すなわちプログラム選択部10により選択されたプログラム)の異常として、当該プログラムによるシステムの起動の失敗(またはシステムが正常に起動しなかったこと)を検出する。
具体的には、起動部12は、システムの起動が完了すると異常検出部13に起動完了通知を出力するように構成されている。そして、異常検出部13は、指定プログラムの実行開始からの経過時間を計測し、起動部12からの起動完了通知の出力がないまま、経過時間が予め定められたスレッショルド時間に達した場合に、システムの起動が失敗したと判定する。ここで、スレッショルド時間は、システムの起動が失敗したかどうか(またはシステムが正常に起動したかどうか)を判定するための時間であり、システムの起動に要する通常の時間よりも十分に長い時間が設定される。ただし、異常検出部13は、上記以外の方法でシステムの起動の失敗を検出してもよい。例えば、起動部12は、起動処理中に定期的に信号を異常検出部13に出力するように構成され、異常検出部13は、起動部12からの信号出力の時間間隔が所定時間を超えたこと、すなわち信号出力が途絶えたことを検出した場合に、システムの起動が失敗したと判定してもよい。また例えば、異常検出部13は、起動部12から起動処理の異常を示すエラー信号を受けた場合に、システムの起動が失敗したと判定してもよい。
図11は、本実施の形態3における情報処理装置の動作を示すフローチャートである。以下、図11を参照して、本実施の形態3における情報処理装置の動作を説明する。
システムリセットが解除されると、CPU4は、実施の形態1と同様に、選択プログラム107に記述されているプログラム選択処理を実行し、システムの起動に使用するプログラムとして指定プログラムを選択する(S1)。
次に、CPU4は、実施の形態1と同様に、選択された指定プログラムに記述されている起動処理を実行する(S2)。
また、CPU4は、ステップS2の起動処理と並行して、指定プログラムの異常検出を行う。本実施の形態では、CPU4は、指定プログラムの異常として、システムの起動の失敗を検出する。
具体的には、CPU4は、指定プログラムの実行が開始されると、プログラムの実行開始からの経過時間を計測するタイマをスタートさせる(S301)。ついで、CPU4は、起動部12から起動完了通知が出力されたか否かを判断し(S302)、起動完了通知が出力された場合(S302:YES)、異常検出処理を終了する。一方、起動完了通知が出力されていない場合(S302:NO)、CPU4は、タイマの計測時間がスレッショルド時間に達したか否かを判断する(S303)。そして、スレッショルド時間に達していない場合は(S303:NO)、ステップS302に戻り、スレッショルド時間に達している場合には(S303:YES)、システムの起動が失敗したと判定し、再起動処理へと進む(S8)。すなわち、CPU4は、プログラムの実行開始からスレッショルド時間が経過しても起動部12から起動完了通知が出力されない場合には、プログラムが正常に起動しなかったと判断し、再起動処理を行う。この再起動処理は、実施の形態1と同様である。
さらに、CPU4は、実施の形態1と同様に、ステップS2の起動処理と並行して、非指定プログラムのエラー修正処理を行う(S5〜S7)。
なお、図11のステップS301〜S303は、指定プログラムに記述されている異常検出処理をCPU4が実行することにより実現される。また、ステップS301〜S303は、異常検出部13の処理である。
以上説明した本実施の形態3によれば、上記(1)〜(11)の他に、下記(14)の効果が得られる。
(14)情報処理装置は、システムの起動が正常に終了した後、外部から新たなプログラムを取得し、非指定プログラムを新たなプログラムで書き換え、指定されるプログラムが切り換わるように起動情報を更新した後、起動部に起動を実行させ、当該起動の際に異常検出部によって異常(本実施の形態ではシステムの起動の失敗)が検出されなかった場合、修正用データを非指定プログラムで書き換え、異常が検出された場合には、指定されるプログラムが切り換わるように起動情報を更新した後、起動部に起動を実行させる。本構成によれば、プログラムを更新する際、更新後の新たなプログラムでのシステム起動が失敗した場合に、起動に使用するプログラムを更新前のものに戻すことができる。このため、例えば、新たに取得したプログラムにバグなどのエラーがあり、システムを正常に起動できない場合に、元のプログラムに戻すことができず、システムの起動ができなくなってしまうことを防ぐことができる。
実施の形態4.
以下、実施の形態4における情報処理装置について説明する。この情報処理装置は、プログラムの異常としてシステムの起動の失敗を検出する点を除き、実施の形態2の情報処理装置と同様である。また、実施の形態4の情報処理装置は、実施の形態2の情報処理装置に実施の形態3の異常検出部を適用することによって得られる。以下の説明では、実施の形態2と同様の構成および処理については、実施の形態2と同一の符号を用い、説明を省略または簡略化する。
本実施の形態では、異常検出部13は、実施の形態3と同様に、指定プログラムの異常として、システムの起動の失敗を検出する。
以下、図11を参照して、本実施の形態4における情報処理装置の動作を説明する。
システムリセットが解除されると、CPU4は、実施の形態2と同様に、選択プログラム107を実行し、バージョン情報106cおよび再起動フラグ106dを参照して、システムの起動に使用するプログラムとして指定プログラムを選択する(S1)。
次に、CPU4は、実施の形態2と同様に、選択された指定プログラムに記述されている起動処理を実行する(S2)。
また、CPU4は、ステップS2の起動処理と並行して、実施の形態3と同様に、異常検出処理として、システムの起動失敗の検出を行い(S301〜S303)、システムの起動の失敗を検出すると(S303:YES)、再起動処理を行う(S8)。この再起動処理は、実施の形態2と同様である。
さらに、CPU4は、ステップS2の起動処理と並行して、実施の形態2と同様に、バージョン情報106c、再起動フラグ106d、およびエラーフラグ106eに基づき、非指定プログラムのエラー修正処理を行う(S5〜S7)。
以上説明した本実施の形態4によれば、上記(1)〜(10)、(12)〜(14)の効果が得られる。
なお、本発明は、上記実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の態様で実施することができる。
例えば、上記の説明では、プログラム選択部10がソフトウェアで実現される構成を例示したが、プログラム選択部10は、ハードウェアのみで実現されてもよい。例えば、情報処理装置1は、プログラムを選択するセレクタ回路を備え、システムリセットが解除された場合に、セレクタ回路が、制御情報106に応じて、プログラム100のアドレスまたはプログラム102のアドレスをCPU4にセットし、CPU4が、セレクタ回路によりセットされたアドレスにアクセスして、プログラムを実行するように構成されてもよい。
また、プログラム選択部10は、省略可能である。例えば、情報処理装置1は次のように構成されてもよい。情報処理装置1は、ブートアドレスを記憶するレジスタを備え、当初、レジスタにはプログラム100のアドレスがセットされている。システムリセットが解除されると、CPU4は、レジスタに記憶されているプログラム100のアドレスにアクセスし、プログラム100を実行する。その後、プログラム100の異常が検出された場合、再起動処理において、CPU4は、レジスタに記憶されているブートアドレスをプログラム102のアドレスに変更してソフトウェアリセットをかける。CPU4は、レジスタに記憶されているプログラム102のアドレスにアクセスし、プログラム102を実行する。この構成では、レジスタに記憶されるアドレスが起動情報となる。
また、上記の説明では、プログラムをワークメモリ3に展開して実行する構成を例示したが、CPU4は、プログラムをワークメモリ3に展開せずに不揮発性メモリ2上から直接実行するように構成されてもよい。この構成では、ワークメモリ3の容量を削減することができる。
また、上記の説明では、図8のプログラム更新処理において、書き換え後の新たなプログラムで起動する際、当該プログラムに異常が検出されなかった場合に(S46:NO)、修正用データ104を非指定プログラム(すなわち書き換えられなかったプログラム)で書き換える(S47)こととしたが、ステップS47において、修正用データ104および非指定プログラムを指定プログラム(すなわち書き換え後の新たなプログラム)で書き換えてもよい。ただし、プログラムをワークメモリ3に展開せずに不揮発性メモリ2上から直接実行する構成では、起動に使用しているプログラムが自分自身をコピーしたり自分自身で他のプログラムを書き換えたりすることが難しいことから、図8に示す処理が有効である。
また、情報処理装置1は、プログラムの異常検出として、実施の形態1のビットエラーの検出と、実施の形態3の起動失敗の検出との両方を行ってもよい。この場合、例えば、情報処理装置1は、ビットエラーおよび起動失敗のうち少なくとも1つを検出した場合に、再起動処理を行う。
また、上記の説明では、起動情報106aを変更して起動時にアクセスするブロック(プログラムデータ領域)を切り換えることによって、システムの起動に使用するプログラムの切り換えを行っているが、情報処理装置1は、プログラム100の異常を検出した場合、プログラム102でプログラム100を書き換え(または上書きし)、書き換え後のプログラム100で再起動を行ってもよい。すなわち、情報処理装置1は、システムの起動に使用するプログラムを書き換えることにより、プログラムの切り換えを行うように構成されてもよい。
また、上記の説明では、起動部12および異常検出部13が、共通のCPU4と共通のプログラムにより実現される構成を例示したが、異常検出部13は、下記(a)〜(d)のような態様で実現されることも可能である。
(a)異常検出部13は、CPU4が、起動用のプログラムとは別の異常検出用のプログラムを実行することにより実現される。
(b)異常検出部13は、CPU4とは別のCPUが、起動用のプログラムまたは起動用のプログラムとは別の異常検出用のプログラムに記述されている異常検出処理を実行することにより実現される。
(c)CPU4は複数個のプロセッサコアを含み、異常検出部13は、複数個のプロセッサコアのうち、起動部12を実現するものとは別のプロセッサコアが、起動用のプログラムまたは起動用のプログラムとは別の異常検出用のプログラムに記述されている異常検出処理を実行することにより実現される。
(d)異常検出部13は、異常検出用のハードウェア回路により実現される。
上記(b)〜(d)のように、起動処理と異常検出処理とを別々の処理装置で並行して実行する構成では、起動処理と異常検出処理とを実際に並行処理することができ、起動用のプログラムに対して誤り検出を行った後にシステムの起動処理を開始する構成と比較して、起動時間を短くすることができる。
また、エラー修正部14、再起動部15、および書き換え制御部16についても、異常検出部13と同様に、上記(a)〜(d)のような態様で実現されてもよい。
また、上記実施の形態1〜4および上記(a)〜(d)の構成で用いられる各種のプログラムは、フラッシュメモリや光ディスク等のコンピュータ読み取り可能な記録媒体に記録されて提供されてもよいし、インターネット等の通信回線を介して提供されてもよい。