(57)【要約】【課題】システムの起動を早期に開始するとともに、システムを起動できない事態の発生を抑制する。【解決手段】情報処理装置１は、起動プログラムデータ、バックアッププログラムデータ、およびバックアッププログラムデータと同一内容の修正用データを記憶する不揮発性メモリ２と、起動プログラムデータを実行してシステムの起動を行う起動部１２と、起動部１２による起動と並行して、起動プログラムデータの異常を検出する異常検出部１３と、起動プログラムデータによってシステムの起動が行われる場合に、バックアッププログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに当該ビットエラーを修正用データにより修正するエラー修正部１４と、異常検出部１３により起動プログラムデータの異常が検出された場合に、バックアッププログラムデータによりシステムの再起動を行う再起動部１５とを備える。【選択図】図４
2014099097.tif 000002
【特許請求の範囲】
【請求項１】
システムを起動するための起動プログラムデータ、前記システムを起動するためのバックアッププログラムデータ、および前記バックアッププログラムデータと同一内容の修正用データを記憶する不揮発性メモリと、
前記起動プログラムデータを実行して前記システムの起動を行う起動手段と、
前記起動手段による起動と並行して、前記起動プログラムデータの異常を検出する異常検出手段と、
前記起動プログラムデータによって前記システムの起動が行われる場合に、前記バックアッププログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに当該ビットエラーを前記修正用データにより修正するエラー修正手段と、
前記異常検出手段により前記起動プログラムデータの異常が検出された場合に、前記バックアッププログラムデータにより前記システムの再起動を行う再起動手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記エラー修正手段は、前記修正用データに対してビットエラーの検出を行い、前記バックアッププログラムデータにビットエラーが検出された場合、前記修正用データのうち前記バックアッププログラムデータのビットエラーに対応する部分にビットエラーが検出されなかったときに、前記ビットエラーの修正を行うことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記エラー修正手段は、前記修正用データに対してビットエラーの検出を行い、前記修正用データにビットエラーが検出された場合、前記バックアッププログラムデータのうち前記修正用データのビットエラーに対応する部分にビットエラーが検出されなかったときに、前記修正用データのビットエラーを前記バックアッププログラムデータにより修正することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記エラー修正手段は、前記バックアッププログラムデータと前記修正用データとが一致するか否かを判定し、一致しないと判定された場合に、前記ビットエラーの検出および修正を行うことを特徴とする請求項１から３のいずれか１項に記載の情報処理装置。
【請求項５】
前記再起動手段は、前記異常検出手段により前記起動プログラムデータの異常が検出された場合、前記バックアッププログラムデータが前記エラー修正手段により検出され修正されなかったビットエラーを有するか否かを判断し、ビットエラーを有しないときに、前記バックアッププログラムデータにより前記システムの再起動を行うことを特徴とする請求項１から４のいずれか１項に記載の情報処理装置。
【請求項６】
前記再起動手段は、前記異常検出手段により前記起動プログラムデータの異常が検出された場合、前記バックアッププログラムデータが前記エラー修正手段により検出され修正されなかったビットエラーを有するか否かを判断し、ビットエラーを有するときには、前記不揮発性メモリに記憶されていない前記システムを起動するための新たなプログラムデータを取得し、前記起動プログラムデータおよび前記バックアッププログラムデータのうち少なくとも１つを前記新たなプログラムデータで書き換えることを特徴とする請求項１から５のいずれか１項に記載の情報処理装置。
【請求項７】
前記エラー修正手段は、前記起動手段による起動と並行して前記処理を行い、
前記再起動手段は、前記異常検出手段により前記起動プログラムデータの異常が検出された場合、当該異常検出と並行して行われる前記エラー修正手段の処理が終了した後に、前記判断以降の処理を行うことを特徴とする請求項５または６に記載の情報処理装置。
【請求項８】
前記再起動手段は、前記再起動を行う際、前記システムの起動に使用するプログラムデータを前記起動プログラムデータから前記バックアッププログラムデータに切り換えて、前記起動手段に前記システムの起動を実行させ、
前記再起動手段により前記起動に使用するプログラムデータが前記バックアッププログラムデータに切り換えられた後は、前記起動手段は、前記バックアッププログラムデータを実行して前記システムの起動を行い、前記異常検出手段は、前記起動と並行して前記バックアッププログラムデータの異常を検出し、前記再起動手段は、前記異常検出手段により前記バックアッププログラムデータの異常が検出された場合、前記不揮発性メモリに記憶されていない前記システムを起動するための新たなプログラムデータを取得し、前記起動プログラムデータおよび前記バックアッププログラムデータのうち少なくとも１つを前記新たなプログラムデータで書き換えることを特徴とする請求項１から７のいずれか１項に記載の情報処理装置。
【請求項９】
システムを起動するための第１のプログラムデータを記憶する第１のプログラムデータ領域と、前記システムを起動するための第２のプログラムデータを記憶する第２のプログラムデータ領域と、前記第１および第２のプログラムデータのうち一方のプログラムデータに異常が検出された場合に使用される他方のプログラムデータと同一内容の修正用データを記憶する修正用データ領域とを有する不揮発性メモリと、
前記第１および第２のプログラムデータのいずれかを前記システムの起動に使用するプログラムデータとして指定する起動情報であって、前記一方のプログラムデータを指定するように予め設定される起動情報を記憶する記憶手段と、
前記起動情報で指定されているプログラムデータを実行して前記システムの起動を行う起動手段と、
前記起動手段による起動と並行して、前記起動情報で指定されているプログラムデータの異常を検出する異常検出手段と、
前記起動情報で指定されているプログラムデータによって前記システムの起動が行われる場合に、前記第１および第２のプログラムデータのうち前記起動情報で指定されていないプログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに、当該ビットエラーを前記修正用データにより修正するエラー修正手段と、
前記異常検出手段により前記プログラムデータの異常が検出された場合に、指定されるプログラムデータが切り換わるように前記起動情報を更新した後に、前記起動手段に前記システムの起動を実行させる再起動手段と、
を備えることを特徴とする情報処理装置。
【請求項１０】
前記起動情報に基づき、前記第１および第２のプログラムデータから前記システムの起動に使用するプログラムデータを選択する選択手段を備え、
前記起動手段は、前記選択手段により選択されたプログラムデータを実行して前記システムの起動を行うことを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
前記第１および第２のプログラムデータについて、前記異常検出手段により検出された異常または前記エラー修正手段により検出され修正されなかったビットエラーを有するか否かを示す異常情報を保持し、
前記再起動手段は、前記異常検出手段により前記プログラムデータの異常が検出された場合、前記異常情報に基づき、前記第１および第２のプログラムデータのうち前記起動情報で指定されていないプログラムデータが、前記異常および前記ビットエラーのいずれも有しないときに、前記起動情報の更新を行い、前記起動手段に前記起動を実行させることを特徴とする請求項９または１０に記載の情報処理装置。
【請求項１２】
前記再起動手段は、前記異常検出手段により前記プログラムデータの異常が検出された場合、前記異常情報に基づき、前記第１および第２のプログラムデータのうち前記起動情報で指定されていないプログラムデータが、前記異常または前記ビットエラーを有するときには、前記不揮発性メモリに記憶されていない前記システムを起動するための新たなプログラムデータを取得し、前記第１のプログラムデータおよび前記第２のプログラムデータのうち少なくとも１つを前記新たなプログラムデータで書き換えることを特徴とする請求項１１に記載の情報処理装置。
【請求項１３】
前記記憶手段は、前記起動情報として、前記第１および第２のプログラムデータのそれぞれのバージョンを示すバージョン情報と、前記再起動手段により更新される再起動情報とを記憶し、
前記起動手段は、前記バージョン情報および前記再起動情報に基づき、前記再起動情報が未更新である場合、前記第１および第２のプログラムデータのうちバージョンが所定の条件を満たすプログラムデータを実行し、前記再起動情報が更新済みである場合、前記第１および第２のプログラムデータのうちバージョンが前記所定の条件を満たさないプログラムデータを実行し、
前記再起動手段は、前記異常検出手段により前記プログラムデータの異常が検出された場合、前記再起動情報が未更新であるとき、前記再起動情報を更新した後に、前記起動手段に前記起動を実行させることを特徴とする請求項９または１０に記載の情報処理装置。
【請求項１４】
前記第１または第２のプログラムデータが前記エラー修正手段により検出され修正されなかったビットエラーを有するか否かを示すエラー情報を保持し、
前記再起動手段は、前記異常検出手段により前記プログラムデータの異常が検出された場合、前記再起動情報が未更新であり、かつ前記エラー情報がビットエラーなしを示すときに、前記再起動情報を更新し、前記起動手段に前記起動を実行させることを特徴とする請求項１３に記載の情報処理装置。
【請求項１５】
前記再起動手段は、前記異常検出手段により前記プログラムデータの異常が検出された場合、前記再起動情報が更新済みであるか、または前記エラー情報がビットエラーありを示すときには、前記不揮発性メモリに記憶されていない前記システムを起動するための新たなプログラムデータを取得し、前記第１のプログラムデータおよび前記第２のプログラムデータのうち少なくとも１つを前記新たなプログラムデータで書き換えることを特徴とする請求項１４に記載の情報処理装置。
【請求項１６】
前記起動手段による前記システムの起動が正常に終了した後、前記不揮発性メモリに記憶されていない前記システムを起動するための新たなプログラムデータを取得し、前記第１および第２のプログラムデータのうち前記起動情報で指定されていないプログラムデータを前記新たなプログラムデータで書き換え、指定されるプログラムデータが切り換わるように前記起動情報を更新した後、前記起動手段に前記起動を実行させ、当該起動の際に前記異常検出手段によって異常が検出されなかった場合、前記修正用データを前記起動情報で指定されていないプログラムデータで書き換え、異常が検出された場合には、指定されるプログラムデータが切り換わるように前記起動情報を更新した後、前記起動手段に前記起動を実行させることを特徴とする請求項９から１５のいずれか１項に記載の情報処理装置。
【請求項１７】
前記異常検出手段は、前記プログラムデータの異常として、前記プログラムデータのビットエラーを検出することを特徴とする請求項１から１６のいずれか１項に記載の情報処理装置。
【請求項１８】
前記異常検出手段は、前記プログラムデータの異常として、前記プログラムデータによる前記システムの起動の失敗を検出することを特徴とする請求項１から１７のいずれか１項に記載の情報処理装置。
【請求項１９】
システムを起動するための起動プログラムデータ、前記システムを起動するためのバックアッププログラムデータ、および前記バックアッププログラムデータと同一内容の修正用データを記憶する不揮発性メモリのうち、前記起動プログラムデータを実行して前記システムの起動を行う起動工程と、
前記起動工程による起動と並行して、前記起動プログラムデータの異常を検出する異常検出工程と、
前記起動プログラムデータによって前記システムの起動が行われる場合に、前記バックアッププログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに当該ビットエラーを前記修正用データにより修正するエラー修正工程と、
前記異常検出工程により前記起動プログラムデータの異常が検出された場合に、前記バックアッププログラムデータにより前記システムの再起動を行う再起動工程と、
を含むことを特徴とする情報処理方法。
【請求項２０】
システムを起動するための第１のプログラムデータを記憶する第１のプログラムデータ領域と、前記システムを起動するための第２のプログラムデータを記憶する第２のプログラムデータ領域と、前記第１および第２のプログラムデータのうち一方のプログラムデータに異常が検出された場合に使用される他方のプログラムデータと同一内容の修正用データを記憶する修正用データ領域とを有する不揮発性メモリのうち、前記第１および第２のプログラムデータのいずれかを前記システムの起動に使用するプログラムデータとして指定する起動情報であって、前記一方のプログラムデータを指定するように予め設定される起動情報で指定されているプログラムデータを実行して前記システムの起動を行う起動工程と、
前記起動工程による起動と並行して、前記起動情報で指定されているプログラムデータの異常を検出する異常検出工程と、
前記起動情報で指定されているプログラムデータによって前記システムの起動が行われる場合に、前記第１および第２のプログラムデータのうち前記起動情報で指定されていないプログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに、当該ビットエラーを前記修正用データにより修正するエラー修正工程と、
前記異常検出工程により前記プログラムデータの異常が検出された場合に、指定されるプログラムデータが切り換わるように前記起動情報を更新した後に、前記起動手段に前記システムの起動を実行させる再起動工程と、
を含むことを特徴とする情報処理方法。
【請求項２１】
システムを起動するための起動プログラムデータ、前記システムを起動するためのバックアッププログラムデータ、および前記バックアッププログラムデータと同一内容の修正用データを記憶する不揮発性メモリのうち、前記起動プログラムデータを実行して前記システムの起動を行う起動工程と、
前記起動工程による起動と並行して、前記起動プログラムデータの異常を検出する異常検出工程と、
前記起動プログラムデータによって前記システムの起動が行われる場合に、前記バックアッププログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに当該ビットエラーを前記修正用データにより修正するエラー修正工程と、
前記異常検出工程により前記起動プログラムデータの異常が検出された場合に、前記バックアッププログラムデータにより前記システムの再起動を行う再起動工程と、
をコンピュータに実行させることを特徴とするコンピュータプログラム。
【請求項２２】
システムを起動するための第１のプログラムデータを記憶する第１のプログラムデータ領域と、前記システムを起動するための第２のプログラムデータを記憶する第２のプログラムデータ領域と、前記第１および第２のプログラムデータのうち一方のプログラムデータに異常が検出された場合に使用される他方のプログラムデータと同一内容の修正用データを記憶する修正用データ領域とを有する不揮発性メモリのうち、前記第１および第２のプログラムデータのいずれかを前記システムの起動に使用するプログラムデータとして指定する起動情報であって、前記一方のプログラムデータを指定するように予め設定される起動情報で指定されているプログラムデータを実行して前記システムの起動を行う起動工程と、
前記起動工程による起動と並行して、前記起動情報で指定されているプログラムデータの異常を検出する異常検出工程と、
前記起動情報で指定されているプログラムデータによって前記システムの起動が行われる場合に、前記第１および第２のプログラムデータのうち前記起動情報で指定されていないプログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに、当該ビットエラーを前記修正用データにより修正するエラー修正工程と、
前記異常検出工程により前記プログラムデータの異常が検出された場合に、指定されるプログラムデータが切り換わるように前記起動情報を更新した後に、前記起動手段に前記システムの起動を実行させる再起動工程と、
をコンピュータに実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、およびコンピュータプログラムに関する。
【背景技術】
【０００２】
近年、不揮発性メモリであるＮＡＮＤ型フラッシュメモリが広く普及している。ＮＡＮＤ型フラッシュメモリは、ＮＯＲ型フラッシュメモリに比べて大容量化が進んでおり、ビット単価が安いというメリットがある。一方で、記憶データの読み出しを繰り返したり、長期間放置したりすると、電荷が抜けてしまうことによりビットエラーが発生する場合があり、データの信頼性に劣るというデメリットがある。このため、ＮＡＮＤ型フラッシュメモリに、システムを起動するためのプログラムを記憶させた場合、ビットエラーにより、システムが起動できない場合や、起動した後にシステムがハングアップしてしまう場合がある。
【０００３】
特許文献１には、システム用不揮発性メモリから第１のブートプログラムを読み出し、当該第１のブートプログラムに対して誤り検出を行い、読み出した第１のブートプログラムが不正に変化していると判定したとき、バックアップ用不揮発性メモリから第２のブートプログラムを読み出し、当該第２のブートプログラムに対して誤り検出を行い、読み出した第２のブートプログラムが不正に変化していると判定したとき、エラーを出力する制御装置が記載されている。この制御装置では、ブートプログラムに対する誤り検出の結果、ブートプログラムが不正に変化していないと判定されると、そのブートプログラムを用いてブート処理が行われる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−２６６５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載された制御装置では、システム用不揮発性メモリから読み出されたブートプログラムに対して誤り検出が行われ、誤り検出の結果、ブートプログラムが不正に変化していないと判定されてから、ブートプログラムを用いたブート処理が開始される。このため、ブート処理の開始が遅くなるという問題がある。また、第２のブートプログラムに不正な変化が一旦発生すると、第１のブートプログラムに不正な変化が発生したときにシステムを起動できない事態が発生する。
【０００６】
本発明は、システムの起動を早期に開始することができるとともに、システムを起動できない事態の発生を抑制することができる情報処理装置、情報処理方法、およびコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る情報処理装置は、システムを起動するための起動プログラムデータ、前記システムを起動するためのバックアッププログラムデータ、および前記バックアッププログラムデータと同一内容の修正用データを記憶する不揮発性メモリと、前記起動プログラムデータを実行して前記システムの起動を行う起動手段と、前記起動手段による起動と並行して、前記起動プログラムデータの異常を検出する異常検出手段と、前記起動プログラムデータによって前記システムの起動が行われる場合に、前記バックアッププログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに当該ビットエラーを前記修正用データにより修正するエラー修正手段と、前記異常検出手段により前記起動プログラムデータの異常が検出された場合に、前記バックアッププログラムデータにより前記システムの再起動を行う再起動手段とを備えることを特徴とする。
【０００８】
また、本発明に係る情報処理装置は、システムを起動するための第１のプログラムデータを記憶する第１のプログラムデータ領域と、前記システムを起動するための第２のプログラムデータを記憶する第２のプログラムデータ領域と、前記第１および第２のプログラムデータのうち一方のプログラムデータに異常が検出された場合に使用される他方のプログラムデータと同一内容の修正用データを記憶する修正用データ領域とを有する不揮発性メモリと、前記第１および第２のプログラムデータのいずれかを前記システムの起動に使用するプログラムデータとして指定する起動情報であって、前記一方のプログラムデータを指定するように予め設定される起動情報を記憶する記憶手段と、前記起動情報で指定されているプログラムデータを実行して前記システムの起動を行う起動手段と、前記起動手段による起動と並行して、前記起動情報で指定されているプログラムデータの異常を検出する異常検出手段と、前記起動情報で指定されているプログラムデータによって前記システムの起動が行われる場合に、前記第１および第２のプログラムデータのうち前記起動情報で指定されていないプログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに、当該ビットエラーを前記修正用データにより修正するエラー修正手段と、前記異常検出手段により前記プログラムデータの異常が検出された場合に、指定されるプログラムデータが切り換わるように前記起動情報を更新した後に、前記起動手段に前記システムの起動を実行させる再起動手段とを備えることを特徴とする。
【０００９】
また、本発明に係る情報処理方法は、システムを起動するための起動プログラムデータ、前記システムを起動するためのバックアッププログラムデータ、および前記バックアッププログラムデータと同一内容の修正用データを記憶する不揮発性メモリのうち、前記起動プログラムデータを実行して前記システムの起動を行う起動工程と、前記起動工程による起動と並行して、前記起動プログラムデータの異常を検出する異常検出工程と、前記起動プログラムデータによって前記システムの起動が行われる場合に、前記バックアッププログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに当該ビットエラーを前記修正用データにより修正するエラー修正工程と、前記異常検出工程により前記起動プログラムデータの異常が検出された場合に、前記バックアッププログラムデータにより前記システムの再起動を行う再起動工程とを含むことを特徴とする。
【００１０】
また、本発明に係る情報処理方法は、システムを起動するための第１のプログラムデータを記憶する第１のプログラムデータ領域と、前記システムを起動するための第２のプログラムデータを記憶する第２のプログラムデータ領域と、前記第１および第２のプログラムデータのうち一方のプログラムデータに異常が検出された場合に使用される他方のプログラムデータと同一内容の修正用データを記憶する修正用データ領域とを有する不揮発性メモリのうち、前記第１および第２のプログラムデータのいずれかを前記システムの起動に使用するプログラムデータとして指定する起動情報であって、前記一方のプログラムデータを指定するように予め設定される起動情報で指定されているプログラムデータを実行して前記システムの起動を行う起動工程と、前記起動工程による起動と並行して、前記起動情報で指定されているプログラムデータの異常を検出する異常検出工程と、前記起動情報で指定されているプログラムデータによって前記システムの起動が行われる場合に、前記第１および第２のプログラムデータのうち前記起動情報で指定されていないプログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに、当該ビットエラーを前記修正用データにより修正するエラー修正工程と、前記異常検出工程により前記プログラムデータの異常が検出された場合に、指定されるプログラムデータが切り換わるように前記起動情報を更新した後に、前記起動手段に前記システムの起動を実行させる再起動工程とを含むことを特徴とする。
【００１１】
また、本発明に係るコンピュータプログラムは、システムを起動するための起動プログラムデータ、前記システムを起動するためのバックアッププログラムデータ、および前記バックアッププログラムデータと同一内容の修正用データを記憶する不揮発性メモリのうち、前記起動プログラムデータを実行して前記システムの起動を行う起動工程と、前記起動工程による起動と並行して、前記起動プログラムデータの異常を検出する異常検出工程と、前記起動プログラムデータによって前記システムの起動が行われる場合に、前記バックアッププログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに当該ビットエラーを前記修正用データにより修正するエラー修正工程と、前記異常検出工程により前記起動プログラムデータの異常が検出された場合に、前記バックアッププログラムデータにより前記システムの再起動を行う再起動工程とをコンピュータに実行させることを特徴とする。
【００１２】
また、本発明に係るコンピュータプログラムは、システムを起動するための第１のプログラムデータを記憶する第１のプログラムデータ領域と、前記システムを起動するための第２のプログラムデータを記憶する第２のプログラムデータ領域と、前記第１および第２のプログラムデータのうち一方のプログラムデータに異常が検出された場合に使用される他方のプログラムデータと同一内容の修正用データを記憶する修正用データ領域とを有する不揮発性メモリのうち、前記第１および第２のプログラムデータのいずれかを前記システムの起動に使用するプログラムデータとして指定する起動情報であって、前記一方のプログラムデータを指定するように予め設定される起動情報で指定されているプログラムデータを実行して前記システムの起動を行う起動工程と、前記起動工程による起動と並行して、前記起動情報で指定されているプログラムデータの異常を検出する異常検出工程と、前記起動情報で指定されているプログラムデータによって前記システムの起動が行われる場合に、前記第１および第２のプログラムデータのうち前記起動情報で指定されていないプログラムデータに対してビットエラーの検出を行い、ビットエラーが検出されたときに、当該ビットエラーを前記修正用データにより修正するエラー修正工程と、前記異常検出工程により前記プログラムデータの異常が検出された場合に、指定されるプログラムデータが切り換わるように前記起動情報を更新した後に、前記起動手段に前記システムの起動を実行させる再起動工程とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、システムの起動を早期に開始することができるとともに、システムを起動できない事態の発生を抑制することができる。
【図面の簡単な説明】
【００１４】
【図１】実施の形態１における情報処理装置の構成を概略的に示すブロック図である。
【図２】実施の形態１における不揮発性メモリの記憶フォーマットを示す概略図である。
【図３】実施の形態１における制御情報のフォーマットを示す概略図である。
【図４】実施の形態１における情報処理装置の機能構成を示すブロック図である。
【図５】実施の形態１における情報処理装置の動作を示すフローチャートである。
【図６】実施の形態１における再起動処理を示すフローチャートである。
【図７】実施の形態１におけるプログラム書き換え処理を示すフローチャートである。
【図８】実施の形態１におけるプログラム更新処理を示すフローチャートである。
【図９】実施の形態２における不揮発性メモリの記憶フォーマットを示す概略図である。
【図１０】実施の形態２における制御情報のフォーマットを示す概略図である。
【図１１】実施の形態３における情報処理装置の動作を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態を図面に従って説明する。
実施の形態１．
図１は、本実施の形態１における情報処理装置１の構成を概略的に示すブロック図である。図１において、情報処理装置１は、不揮発性メモリ２、ワークメモリ３、中央処理装置（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４、通信部５、および外部インタフェース６を備える。
【００１６】
不揮発性メモリ２は、各種のデータを記憶する読み書き可能なメモリであり、例えばＮＡＮＤ型フラッシュメモリである。不揮発性メモリ２は、起動プログラムデータと、バックアッププログラムデータと、修正用データとを記憶する。上記システムは、コンピュータシステムであり、より具体的には情報処理装置１の（ＣＰＵ４を中心とする）コンピュータシステムである。ただし、上記システムは、起動プログラムデータによって起動されるシステムであればよく、例えば情報処理装置１の外部のシステムであってもよい。
【００１７】
起動プログラムデータは、システムを起動するためのプログラムのデータである。バックアッププログラムデータは、起動プログラムデータの異常（本実施の形態ではビットエラー）が検出された場合にシステムの起動に使用されるバックアップ用のプログラムのデータである。バックアッププログラムデータは、起動プログラムデータと同一内容のプログラムデータ（例えばバージョンが同じプログラムのデータ）であってもよいし、起動プログラムデータと内容の異なるプログラムデータ（例えばバージョンの異なるプログラムのデータ）であってもよい。修正用データは、バックアッププログラムデータと同一内容のデータであり、バックアッププログラムデータのビットエラーを修正するためのデータである。本例では、修正用データは、バックアッププログラムデータと同一のデータである。ただし、修正用データは、バックアッププログラムデータを修正できる程度に実質的に同一であればよく、形式的な相違があってもよい。また、修正用データは、システムを起動するための実行可能なプログラムデータであってもよいし、実行可能でなくてもよい。
【００１８】
さらに不揮発性メモリ２には、起動プログラムデータ、バックアッププログラムデータ、および修正用データの各々について、当該データのビットエラー（ビット誤り）を検出するための誤り検出用データが記憶される。なお、不揮発性メモリ２に記憶されているデータのビットエラーは、例えば、不揮発性メモリ２に記憶されたビットの意図しない変化によるものであり、メモリの電荷抜けなどによって発生する。
【００１９】
なお、以下の説明では、起動プログラムデータおよびバックアッププログラムデータをそれぞれ「起動プログラム」および「バックアッププログラム」と略称する。
【００２０】
ワークメモリ３は、ＣＰＵ４の作業領域として使用されるメモリであり、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。ワークメモリ３は、不揮発性メモリ２から読み出されたデータを記憶する。
【００２１】
ＣＰＵ４は、不揮発性メモリ２に記憶されている起動プログラム等のプログラムを実行する。具体的には、ＣＰＵ４は、不揮発性メモリ２に記憶されているプログラムやその他のデータのうち必要となるものをワークメモリ３に読み出し（またはコピーし）、ワークメモリ３にアクセスし、ワークメモリ３に読み出されたプログラムに記述されている処理を実行する。プログラムやその他のデータは、例えば、不揮発性メモリ２においてブロック毎に記憶され、ブロック毎に読み出される。
【００２２】
通信部５は、ＣＰＵ４が情報処理装置１に接続された外部の機器（外部接続機器）と外部インタフェース６を介して通信を行う際に、送受信データを外部接続機器との通信プロトコルに従って変換する。
【００２３】
外部インタフェース６は、情報処理装置１と外部接続機器とを接続するためのインタフェースであり、例えばＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）インタフェースである。
【００２４】
図２は、不揮発性メモリ２の記憶フォーマットを示す概略図である。図２において、不揮発性メモリ２は、第１のプログラムデータ１００を記憶する第１のプログラムデータ領域であるブロックＢ１と、第２のプログラムデータ１０２を記憶する第２のプログラムデータ領域であるブロックＢ２と、修正用データ１０４を記憶する修正用データ領域であるブロックＢ３とを有する。以下の説明では、第１のプログラムデータ１００および第２のプログラムデータ１０２をそれぞれ「プログラム１００」および「プログラム１０２」と略称する。
【００２５】
ブロックＢ１およびＢ２のうち一方に起動プログラムが記憶され、他方にバックアッププログラムが記憶される。ブロックＢ３には、修正用データが記憶される。例えば、ブロックＢ１に起動プログラム、ブロックＢ２にバックアッププログラムが記憶される。この場合、プログラム１００は起動プログラムであり、プログラム１０２はバックアッププログラムであり、修正用データ１０４はプログラム１０２と同一の内容を有する。
【００２６】
プログラム１００、プログラム１０２、および修正用データ１０４には、それぞれ、対応する誤り検出用データとして、チェックサム値１０１、１０３、１０５が付加されている。図２に示されるように、プログラム１００とそのチェックサム値１０１とはブロックＢ１に、プログラム１０２とそのチェックサム値１０３とはブロックＢ２に、修正用データ１０４とそのチェックサム値１０５とはブロックＢ３に記憶されている。
【００２７】
また、不揮発性メモリ２には、制御情報１０６が記録されている。制御情報１０６は、起動情報１０６ａおよび異常情報１０６ｂを含む。起動情報１０６ａは、プログラム１００およびプログラム１０２のいずれかをシステムの起動に使用するプログラムとして指定する情報である。起動情報１０６ａは、プログラム１００および１０２のうち起動プログラムに該当するプログラムを指定するように予め設定される。異常情報１０６ｂは、プログラム１００および１０２について、当該プログラムが異常を有するか否かを示す情報である。上記の異常としては、後述する異常検出部１３により検出された異常（本実施の形態ではビットエラー）、および後述するエラー修正部１４で検出され修正されなかったビットエラーがある。
【００２８】
図３は、制御情報１０６のフォーマットを示す概略図である。図３において、制御情報１０６は、不揮発性メモリ２のアドレスＮおよびアドレスＮ＋１に記録される。起動情報１０６ａは、アドレスＮおよびアドレスＮ＋１の０番目のビットであるビット０に記録され、異常情報１０６ｂは、アドレスＮおよびアドレスＮ＋１の１番目のビットであるビット１に記録される。また、アドレスＮにはプログラム１００に対応する値が記録され、アドレスＮ＋１にはプログラム１０２に対応する値が記録される。
【００２９】
プログラム１００に対応するアドレスＮのビット０には、「０」または「１」が記録され、「０」はプログラム１００がシステムの起動に使用するプログラムでないこと、「１」はプログラム１００がシステムの起動に使用するプログラムであることを示す。同様に、プログラム１０２に対応するアドレスＮ＋１のビット０には、「０」または「１」が記録され、「０」はプログラム１０２がシステムの起動に使用するプログラムでないこと、「１」はプログラム１０２がシステムの起動に使用するプログラムであることを示す。
【００３０】
また、プログラム１００に対応するアドレスＮのビット１には、「０」または「１」が記録され、「０」はプログラム１００が異常を有しないこと、「１」はプログラム１００が異常を有することを示す。同様に、プログラム１０２に対応するアドレスＮ＋１のビット１には、「０」または「１」が記録され、「０」はプログラム１０２が異常を有しないこと、「１」はプログラム１０２が異常を有することを示す。
【００３１】
図３の例では、アドレスＮのビット０が「１」、アドレスＮ＋１のビット０が「０」となっており、プログラム１００を起動に使用することが示されている。また、アドレスＮおよびアドレスＮ＋１のビット１が両方とも「０」となっており、プログラム１００およびプログラム１０２のいずれも異常を有しないことが示されている。
【００３２】
再び図２を参照すると、不揮発性メモリ２には、さらに選択プログラムデータ１０７が記憶されている。この選択プログラムデータ１０７は、プログラム１００および１０２の中からシステムの起動に使用するプログラムを選択するためのプログラムのデータである。以下の説明では、選択プログラムデータを「選択プログラム」と略称する。
【００３３】
なお、図２に示される不揮発性メモリ２の記憶フォーマットおよび図３に示される制御情報１０６のフォーマットは一例であり、これに限るものではない。また、制御情報１０６および選択プログラム１０７は、不揮発性メモリ２よりもビットエラーが発生しにくいメモリなど、不揮発性メモリ２以外の記憶装置に記憶されてもよい。例えば、選択プログラム１０７は、読み出し専用のＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）に記憶されてもよい。
【００３４】
以下、上記の各プログラムについて説明する。
選択プログラム１０７には、プログラム１００および１０２の中からシステムの起動に使用するプログラムを選択するためのプログラム選択処理が記述されている。具体的には、選択プログラム１０７は、ＣＰＵ４に、不揮発性メモリ２に記憶されている選択プログラム１０７自身をワークメモリ３に転送させ、起動情報１０６ａに基づいてプログラム１００および１０２からシステムの起動に使用するプログラムを選択させ、選択されたプログラムのアドレスに読み出し先をジャンプさせるようにプログラムされている。
【００３５】
プログラム１００には、システムを起動するための起動処理（またはブート処理）と、プログラム１００の異常（本実施の形態ではビットエラー）を検出するための異常検出処理と、プログラム１０２のビットエラーを検出して修正するためのエラー修正処理と、これらの処理を並行して行うための並列制御とが記述されている。具体的には、プログラム１００は、ＣＰＵ４に、不揮発性メモリ２に記憶されているプログラム１００自身とそのチェックサム値１０１をワークメモリ３に転送させ、情報処理装置１の初期化処理を行った後、システムを起動させるようにプログラムされている。また、プログラム１００は、ＣＰＵ４に、上記の起動処理と並行して、ワークメモリ３に転送されたプログラム１００についてチェックサム演算を行い、演算の結果とチェックサム値１０１とを比較してプログラム１００のビットエラーの有無を確認するエラー検出処理を実行させるようにプログラムされている。また、プログラム１００は、ＣＰＵ４に、上記の起動処理と並行して、プログラム１０２および修正用データ１０４に対してビットエラーの検出を行い、いずれか一方のデータにビットエラーが検出された場合に、当該ビットエラーを他方のデータにより修正するエラー修正処理を実行させるようにプログラムされている。
【００３６】
同様に、プログラム１０２には、システムを起動するための起動処理と、プログラム１０２の異常を検出するための異常検出処理と、プログラム１００のビットエラーを修正するためのエラー修正処理と、これらの処理を並行して行うための並列制御とが記述されている。具体的には、プログラム１０２は、ＣＰＵ４に、不揮発性メモリ２に記憶されているプログラム１０２自身とそのチェックサム値１０３をワークメモリ３に転送させ、情報処理装置１の初期化処理を行った後、システムを起動させるようにプログラムされている。また、プログラム１０２は、ＣＰＵ４に、上記の起動処理と並行して、ワークメモリ３に転送されたプログラム１０２についてチェックサム演算を行い、演算の結果とチェックサム値１０３とを比較してプログラム１０２のビットエラーの有無を確認するエラー検出処理を実行させるようにプログラムされている。また、プログラム１０２は、ＣＰＵ４に、上記の起動処理と並行して、プログラム１００および修正用データ１０４に対してビットエラーの検出を行い、いずれか一方のデータにビットエラーが検出された場合に、当該ビットエラーを他方のデータにより修正するエラー修正処理を実行させるようにプログラムされている。
【００３７】
さらに、プログラム１００および１０２には、システムを再起動するための再起動処理と、不揮発性メモリ２に記憶されているプログラムを書き換えるための書き換え制御が記述されている。
【００３８】
図４は、本実施の形態１における情報処理装置１の機能構成を示すブロック図である。図４において、情報処理装置１は、プログラム選択部１０、並列処理部１１、起動部１２、異常検出部１３、エラー修正部１４、再起動部１５、および書き換え制御部１６を有する。
【００３９】
本例では、プログラム選択部１０は、選択プログラム１０７に記述されているプログラム選択処理をＣＰＵ４が実行することにより実現される。また、並列処理部１１、起動部１２、異常検出部１３、エラー修正部１４、再起動部１５、および書き換え制御部１６は、それぞれ、プログラム１００およびプログラム１０２のうちプログラム選択部１０によって選択されたプログラムに記述されている、並列制御、起動処理、異常検出処理、エラー修正処理、再起動処理、および書き換え制御をＣＰＵ４が実行することにより実現される。
【００４０】
プログラム選択部１０は、起動情報１０６ａに基づき、プログラム１００および１０２からシステムの起動に使用するプログラムを選択する。すなわち、プログラム選択部１０は、プログラム１００および１０２のうち、起動情報１０６ａで指定されているプログラムをシステムの起動に使用するプログラムとして選択する。
【００４１】
なお、以下の説明では、プログラム１００および１０２のうち、起動情報１０６ａによりシステムの起動に使用するプログラムとして指定されているプログラムを「指定プログラム」と称し、指定されていないプログラムを「非指定プログラム」と称する。
【００４２】
並列処理部１１は、起動処理、異常検出処理、およびエラー修正処理を含む複数の処理を時分割により並行処理するための制御を行う。具体的には、並列処理部１１は、ＣＰＵ４内の処理を並行して行うために、ＣＰＵ４の処理時間を短い単位に分割し、分割された単位時間を順番に各処理に割り当てることによって、複数の処理が並行して行われるようにＣＰＵ４の処理を制御する。
【００４３】
起動部１２は、プログラム選択部１０により選択されたプログラムを実行してシステムの起動を行う。具体的には、起動部１２は、システムリセット後に、不揮発性メモリ２に記憶されている指定プログラムに記述された起動処理を実行し、システムを起動する。
【００４４】
異常検出部１３は、起動部１２によるシステムの起動と並行して、指定プログラム（すなわちプログラム選択部１０で選択されたプログラム）の異常を検出する。本実施の形態では、異常検出部１３は、指定プログラムに対してビットエラーの検出を行い、ビットエラーの有無を確認する。具体的には、異常検出部１３は、指定プログラムに対して誤り検出データを用いてビットエラー検出を行う。より具体的には、異常検出部１３は、不揮発性メモリ２に記憶されている指定プログラムに対してチェックサム値の計算を行い、計算されたチェックサム値を予め不揮発性メモリ２に記憶されている指定プログラムのチェックサム値と比較し、両者が一致しない場合にビットエラーがあると判定する。異常検出部１３は、検出結果を再起動部１５に通知する。
【００４５】
エラー修正部１４は、指定プログラムによってシステムの起動が行われる場合に、非指定プログラム（すなわちプログラム選択部１０で選択されなかったプログラム）に対してビットエラーの検出を行い、ビットエラーが検出された場合に、当該ビットエラーを修正用データ１０４により修正する。
【００４６】
本例では、エラー修正部１４は、起動部１２によるシステムの起動と並行して、上記ビットエラーを検出して修正するエラー修正処理を行う。ただし、エラー修正部１４は、必ずしもシステムの起動と並行して処理を実行する必要はなく、例えば、システムの起動後にエラー修正処理を実行してもよい。
【００４７】
また、エラー修正部１４は、非指定プログラムに対してビットエラーの検出を行うとともに、修正用データ１０４に対してもビットエラーの検出を行い、非指定プログラムにビットエラーが検出された場合、修正用データ１０４のうち非指定プログラムのビットエラーに対応する部分にビットエラーが検出されなかったときに、非指定プログラムのビットエラーの修正を行う。例えば、エラー修正部１４は、修正用データ１０４の全体に対してビットエラーの検出を行い、修正用データ１０４にビットエラーが全く検出されなかったときに非指定プログラムの修正を行う。あるいは、エラー修正部１４は、修正用データ１０４のうち非指定プログラムのビットエラーに対応する部分のみに対してビットエラーの検出を行い、当該部分にビットエラーが検出されなかったときに非指定プログラムの修正を行ってもよい。
【００４８】
また、エラー修正部１４は、修正用データ１０４にビットエラーが検出された場合、非指定プログラムのうち修正用データ１０４のビットエラーに対応する部分にビットエラーが検出されなかったときに、修正用データ１０４のビットエラーを非指定プログラムにより修正する。例えば、エラー修正部１４は、非指定プログラムにビットエラーが全く検出されなかったときに修正用データ１０４の修正を行う。あるいは、エラー修正部１４は、非指定プログラムのうち修正用データ１０４のビットエラーに対応する部分にビットエラーが検出されたか否かを判断し、検出されていないと判断したときに修正用データ１０４の修正を行ってもよい。
【００４９】
さらに、エラー修正部１４は、非指定プログラムと修正用データ１０４とが一致するか否かを判定し、一致しないと判定した場合に、上記ビットエラーを検出して修正する処理を行う。例えば、エラー修正部１４は、不揮発性メモリ２に記憶されている非指定プログラムのバイナリデータと修正用データ１０４のバイナリデータとを比較し、当該２つのバイナリデータが完全に一致するかを判定し、一致しないと判定した場合に、上記ビットエラーを検出して修正する処理を行う。
【００５０】
また、エラー修正部１４は、非指定プログラムのビットエラーを検出し、当該ビットエラーを修正しなかった場合には、非指定プログラムが異常を有する旨を示すように異常情報１０６ｂを更新する。例えば、エラー修正部１４は、プログラム１０２にビットエラーが検出され当該ビットエラーが修正されなかった場合、図３のアドレスＮ＋１のビット１を「０」から「１」に変更する。
【００５１】
また、エラー修正部１４は、異常情報１０６ｂに基づき、非指定プログラムが既に異常を有する場合には、エラー修正処理を実行しない。例えば、エラー修正部１４は、図３のプログラム１０２に対応するアドレスＮ＋１のビット１を参照し、当該ビット１が「０」であればエラー修正処理を実行し、「１」であればエラー修正処理を実行しない。
【００５２】
再起動部１５は、異常検出部１３により指定プログラムの異常が検出された場合に、例えばシステムが起動しないことやフリーズしてしまうことを避けるために、非指定プログラムによりシステムの再起動を行う。すなわち、再起動部１５は、システムの起動に使用するプログラムを指定プログラムから非指定プログラムに切り換えて、システムを再起動する。
【００５３】
具体的には、再起動部１５は、指定プログラムの異常が検出された場合、異常情報１０６ｂに基づき、非指定プログラムが異常を有するか否かを判断し、異常を有しないときに、異常情報１０６ｂを指定プログラムが異常を有する旨を示すように更新し、指定されるプログラムが切り換わるように起動情報１０６ａを更新した後、起動部１２にシステムの起動を実行させる。一方、非指定プログラムが異常を有するときには、再起動部１５は、書き換え制御部１６に後述のプログラム書き換え処理を実行させる。また、再起動部１５は、異常検出部１３により指定プログラムの異常が検出された場合、当該異常検出と並行して行われるエラー修正部１４の処理が終了した後に、上記判断以降の処理を行う。
【００５４】
書き換え制御部１６は、情報処理装置１の外部から、不揮発性メモリ２に記憶されていないシステムを起動するための新たなプログラムを取得し、プログラム１００およびプログラム１０２のうち少なくとも１つを当該新たなプログラムで書き換えるプログラム書き換え処理を行う。このプログラム書き換え処理は、プログラム１００およびプログラム１０２の両方が異常（異常検出部１３により検出された異常、またはエラー修正部１４により検出され修正されなかったビットエラー）を有する場合に実行される。
【００５５】
本例では、書き換え制御部１６は、プログラム１００、プログラム１０２、および修正用データ１０４を新たなプログラムで書き換えた後、プログラム１００または１０２によるシステムの再起動を行う。ただし、書き換え制御部１６は、プログラム１００および１０２を新たなプログラムで書き換えた後、プログラム１００または１０２によりシステムの再起動を行い、異常がない場合に、現在起動に使用されていないプログラムを修正用データ１０４に上書きしてもよい。
【００５６】
また、書き換え制御部１６は、不揮発性メモリ２に記憶されているプログラムを更新（またはアップデート）するプログラム更新処理を行う。このプログラム更新処理では、書き換え制御部１６は、起動部１２によるシステムの起動が正常に終了した後、情報処理装置１の外部から、不揮発性メモリ２に記憶されていないシステムを起動するための新たなプログラムを取得し、非指定プログラム（すなわち現在起動に使用されていないプログラム）を新たなプログラムで書き換える。そして、書き換え制御部１６は、指定されるプログラムが切り換わるように起動情報１０６ａを更新した後、起動部１２にシステムの起動を実行させ、当該起動の際に異常検出部１３によって異常が検出されなかった場合、修正用データ１０４を非指定プログラム（すなわちプログラム１００および１０２のうち書き換えが行われなかったプログラム）で書き換える。一方、異常が検出された場合には、書き換え制御部１６は、指定されるプログラムが切り換わるように起動情報１０６ａを更新した後、起動部１２にシステムの起動を実行させる。
【００５７】
上記のプログラム書き換え処理およびプログラム更新処理において、書き換え制御部１６により外部から取得される新たなプログラムは、現在不揮発性メモリ２に記憶されているプログラム１００または１０２と同じものであってもよいし、異なるものであってもよい。
【００５８】
上記の情報処理装置１では、システムの起動に使用するプログラムが再起動部１５によって切り換えられる前においては、起動プログラムが指定プログラムであり、バックアッププログラムが非指定プログラムである。そして、起動部１２は、起動プログラムを実行してシステムの起動を行い、異常検出部１３は、起動プログラムに対して異常検出を行い、エラー修正部１４は、バックアッププログラムに対してビットエラーの検出および修正を行う。再起動部１５は、異常検出部１３により起動プログラムに異常が検出された場合に、バックアッププログラムによりシステムの再起動を行う。具体的には、再起動部１５は、システムの起動に使用するプログラムを起動プログラムからバックアッププログラムに切り換えて、起動部１２にシステムの起動を実行させる。また、再起動部１５は、起動プログラムに異常が検出された場合に、バックアッププログラムがエラー修正部１４で検出され修正されなかったビットエラーを有するか否かを判断し、ビットエラーを有しないときに、バックアッププログラムにより再起動を行う。一方、バックアッププログラムがビットエラーを有するときには、再起動部１５は、書き換え制御部１６にプログラム書き換え処理を実行させる。
【００５９】
システムの起動に使用するプログラムが再起動部１５によって切り換えられた後においては、バックアッププログラムが指定プログラムとなり、起動プログラムが非指定プログラムとなる。そして、起動部１２は、バックアッププログラムを実行してシステムの起動を行い、異常検出部１３は、バックアッププログラムに対して異常検出を行う。再起動部１５は、異常検出部１３によりバックアッププログラムに異常が検出された場合、書き換え制御部１６にプログラム書き換え処理を実行させる。
【００６０】
図５は、本実施の形態１における情報処理装置１の動作を示すフローチャートである。以下、図５を参照して、情報処理装置１の動作について説明する。
【００６１】
システムリセットが解除されると、ＣＰＵ４は、不揮発性メモリ２内の選択プログラム１０７が記憶されている所定のアドレス（以下、「ブートアドレス」と称す）にアクセスし、ワークメモリ３へ選択プログラム１０７を転送する。そして、ＣＰＵ４は、ワークメモリ３から選択プログラム１０７を読み出し、選択プログラム１０７に記述されているプログラム選択処理を実行する。プログラム選択処理では、ＣＰＵ４は、制御情報１０６を参照し、システムの起動に使用するプログラムとして指定プログラムを選択する（Ｓ１）。図３の例では、プログラム１００に対応するアドレスＮのビット０が「１」となっているので、プログラム１００が選択される。なお、本例では、ブートアドレスは固定のアドレスである。
【００６２】
次に、ＣＰＵ４は、選択プログラム１０７に記述されている命令に従い、ステップＳ１で選択された指定プログラムが記憶されているアドレスへジャンプし、当該指定プログラムとそのチェックサム値をワークメモリ３へ転送する。そして、ＣＰＵ４は、ワークメモリ３から指定プログラムを読み出し、指定プログラムに記述されている初期化処理を含む起動処理を実行する（Ｓ２）。図３の例では、プログラム１００とそのチェックサム値１０１がワークメモリ３へ転送され、プログラム１００の起動処理が実行される。
【００６３】
また、ＣＰＵ４は、選択された指定プログラムに記述されている並列制御を実行することにより、ステップＳ２の起動処理と並行して、指定プログラムに記述されている異常検出処理を実行し、指定プログラムのチェックサム値を計算する（Ｓ３）。そして、ＣＰＵ４は、計算されたチェックサム値と、不揮発性メモリ２に記憶されている指定プログラムのチェックサム値とが一致するか否かを判断し、両者が一致しない場合は（Ｓ４：ＮＯ）、指定プログラムにビットエラー（または意図しないビット変化）があると判定し、再起動処理へと進む（Ｓ８）。この再起動処理については後に詳しく説明する。
【００６４】
一方、両チェックサム値が一致している場合（Ｓ４：ＹＥＳ）、ＣＰＵ４は、指定プログラムにビットエラーがないと判定し、指定プログラムの実行を続行させ、異常検出処理を終了する。
【００６５】
さらに、ＣＰＵ４は、指定プログラムに記述されている並列制御を実行することにより、ステップＳ２の起動処理と並行して、次のエラー修正処理（Ｓ５〜Ｓ７）を行う。
【００６６】
ステップＳ５では、ＣＰＵ４は、制御情報１０６を参照し、非指定プログラムが既に異常を有するか否かを判断し、異常を有する場合（Ｓ５：ＹＥＳ）、エラー修正処理を終了し、異常を有しない場合には（Ｓ５：ＮＯ）、ステップＳ６に進む。具体的には、ＣＰＵ４は、アドレスＮおよびアドレスＮ＋１のうちビット０が「０」となっているアドレスのビット１を参照し、当該ビット１の値が「１」であれば異常を有すると判断し、「０」であれば異常を有しないと判断する。図３の例では、アドレスＮ＋１のビット０が「０」となっており、当該アドレスＮ＋１のビット１が「０」となっているので、異常を有しないと判断され、処理がステップＳ６に進む。
【００６７】
ステップＳ６では、ＣＰＵ４は、非指定プログラムと修正用データ１０４とを比較し、両者が一致しているか否かを判定し、両者が一致する場合は（Ｓ６：ＹＥＳ）、エラー修正処理を終了する。一方、両者が一致しない場合は（Ｓ６：ＮＯ）、ステップＳ７に進む。
【００６８】
ステップＳ７では、ＣＰＵ４は、非指定プログラムおよび修正用データ１０４のそれぞれのチェックサム値を計算する。そして、ＣＰＵ４は、計算された非指定プログラムのチェックサム値と不揮発性メモリ２に記憶されている非指定プログラムのチェックサム値とが一致するか否か、および計算された修正用データ１０４のチェックサム値と不揮発性メモリ２に記憶されている修正用データ１０４のチェックサム値１０５とが一致するか否かを判断する。
【００６９】
そして、非指定プログラムおよび修正用データ１０４のうちどちらか一方のチェックサム値が一致しない場合、ＣＰＵ４は、非指定プログラムおよび修正用データ１０４のうちチェックサム値が一致しているデータによって、もう一方のチェックサム値が一致していないデータを上書きし、エラー修正処理を終了する。
【００７０】
一方、非指定プログラムおよび修正用データ１０４の両方のチェックサム値が一致しない場合には、ＣＰＵ４は、非指定プログラムが異常を有する旨を示すように異常情報１０６ｂを更新し、エラー修正処理を終了する。図３の例では、プログラム１０２が非指定プログラムであり、プログラム１０２に対応するアドレスＮ＋１のビット１の値が「０」から「１」に変更される。
【００７１】
なお、図５のステップＳ１は選択プログラム１０７に記述されているプログラム選択処理をＣＰＵ４が実行することにより実現される。ステップＳ２は指定プログラムに記述されている起動処理をＣＰＵ４が実行することにより実現される。ステップＳ３およびＳ４は、指定プログラムに記述されている異常検出処理をＣＰＵ４が実行することにより実現される。ステップＳ５からＳ７は、指定プログラムに記述されているエラー修正処理をＣＰＵ４が実行することにより実現される。ステップＳ８は、指定プログラムに記述されている再起動処理をＣＰＵ４が実行することにより実現される。また、ステップＳ１はプログラム選択部１０の処理であり、ステップＳ２は起動部１２の処理であり、ステップＳ３およびＳ４は異常検出部１３の処理であり、ステップＳ５からＳ７はエラー修正部１４の処理であり、ステップＳ８は再起動部１５の処理である。
【００７２】
また、図５の例では、非指定プログラムのビットエラーを検出して修正するエラー修正処理（Ｓ５〜Ｓ７）を、システムの起動処理（Ｓ２）および異常検出処理（Ｓ３，Ｓ４）と並行して行っているが、エラー修正処理は、システムの起動が終了した後に、ＣＰＵ４がアイドル状態となった場合など、ＣＰＵ４の処理負荷が低いときに行われてもよい。
【００７３】
図６は、再起動処理を示すフローチャートである。以下、図６を参照して、図５のステップＳ８における再起動処理について説明する。
【００７４】
図６に示されるように、まず、ＣＰＵ４は、起動処理（図５のステップＳ２の処理）を停止する（Ｓ２１）。次に、ＣＰＵ４は、エラー修正処理（図５のステップＳ５〜Ｓ７の処理）が終了するまで待機し（Ｓ２２：ＮＯ）、エラー修正処理が終了すると（Ｓ２２：ＹＥＳ）、ステップＳ２３に進む。
【００７５】
ステップＳ２３では、ＣＰＵ４は、制御情報１０６を参照し、プログラムの切り替えによる再起動が可能か否かを判断する。具体的には、ＣＰＵ４は、非指定プログラムが異常を有するか否かを確認し、異常を有しない場合に、プログラムの切り換えによる再起動が可能であると判断し、異常を有する場合には、可能でないと判断する。より具体的には、ＣＰＵ４は、制御情報１０６のアドレスＮおよびアドレスＮ＋１のうちビット０が「０」となっているアドレスのビット１を参照し、当該ビット１が「０」であれば可能と判断し、当該ビット１が「１」であれば可能でないと判断する。図３の例では、アドレスＮ＋１のビット０が「０」となっており、当該アドレスＮ＋１のビット１が「０」となっているので、プログラムの切り換えによる再起動が可能であると判断される。
【００７６】
ステップＳ２３にて可能と判断された場合（Ｓ２３：ＹＥＳ）、ＣＰＵ４は、指定プログラムが切り換わるように、また現在の指定プログラムが異常を有する旨を示すように制御情報１０６を更新する（Ｓ２４）。具体的には、アドレスＮおよびアドレスＮ＋１のビット０の値を入れ替えるとともに、アドレスＮおよびアドレスＮ＋１のうちビット０が「１」となっているアドレスのビット１を「１」にする。図３の例では、アドレスＮ＋１のビット０が「０」から「１」に、アドレスＮのビット０が「１」から「０」に、アドレスＮのビット１が「０」から「１」に変更される。
【００７７】
上記制御情報１０６の更新が完了すると、ＣＰＵ４は、システムの再起動を行う（Ｓ２５）。具体的には、ＣＰＵ４は、ソフトウェアリセットをかけて、図５の処理を最初から行う。すなわち、図５において、処理がステップＳ８からステップＳ１に戻り、再度、プログラムの選択処理（Ｓ１）、選択されたプログラムによるシステムの起動処理（Ｓ２）、異常検出処理（Ｓ３，Ｓ４）、およびエラー修正処理（Ｓ５〜Ｓ７）が行われる。図３の例では、ステップＳ２４において上記のように制御情報１０６が更新された後、ソフトウェアリセットが行われると、アドレスＮ＋１のビット０が「１」となっているので、プログラム１０２が選択され、プログラム１０２により起動処理が行われることになる。
【００７８】
一方、ステップＳ２３にてプログラムの切り換えによる再起動が可能でないと判断された場合（Ｓ２３：ＮＯ）、ＣＰＵ４は、新たに外部からプログラムを取得する必要がある旨を知らせるメッセージを不図示の表示部などに出力し（Ｓ２６）、不揮発性メモリ２に記憶されているプログラムを書き換えるためのプログラム書き換え処理へと進む（Ｓ２７）。プログラム書き換え処理については以下に詳しく説明する。
【００７９】
図７は、プログラム書き換え処理を示すフローチャートである。以下、図７を参照して、図６のステップＳ２７におけるプログラム書き換え処理について説明する。なお、プログラム書き換え処理は、指定プログラムに記述されている書き換え制御をＣＰＵ４が実行することによって実現される。
【００８０】
プログラム書き換え処理では、ＣＰＵ４は、外部インタフェース６に外部メモリが接続されたことを認識すると、通信部５を介して当該外部メモリから、書き換え用の新たなプログラムおよびそのチェックサム値を読み出し、当該新たなプログラムとチェックサム値で、プログラム１００とチェックサム値１０１、プログラム１０２とチェックサム値１０３、および確認用プログラム１０４とチェックサム値１０５を書き換える（Ｓ３１）。上記外部メモリは、例えば図６のステップＳ２６のメッセージを見たユーザによって情報処理装置１の外部インタフェース６に接続されるものであり、例えばＵＳＢメモリ等の可搬型記憶媒体である。なお、ＣＰＵ４は、上記以外の方法で新たなプログラムを取得してもよく、例えば、ネットワークを介してネットワーク上のプログラム提供装置から取得してもよい。
【００８１】
上記の書き換えが完了すると、ＣＰＵ４は、制御情報１０６を更新する（Ｓ３２）。具体的には、ＣＰＵ４は、プログラム１００および１０２のいずれも異常を有しない旨を示すように異常情報１０６ｂを更新し、プログラム１００および１０２のうちいずれか一方を指定するように起動情報１０６ａを更新する。ここでは、ＣＰＵ４は、制御情報１０６のアドレスＮおよびアドレスＮ＋１の両方のビット１を「０」にするとともに、アドレスＮのビット０を「１」、アドレスＮ＋１のビット０を「０」にする。ただし、アドレスＮのビット０を「０」、アドレスＮ＋１のビット０を「１」としても構わない。
【００８２】
制御情報１０６の更新が完了すると、ＣＰＵ４は、システムの再起動を行う（Ｓ３３）。具体的には、ＣＰＵ４は、ソフトウェアリセットをかけ、図５の処理を最初から行う。すなわち、図５において、処理がステップＳ８からステップＳ１に戻り、再度、プログラムの選択処理（Ｓ１）、選択されたプログラムによるシステムの起動処理（Ｓ２）、異常検出処理（Ｓ３，Ｓ４）、およびエラー修正処理（Ｓ５〜Ｓ７）が行われる。ここでは、アドレスＮのビット０が「１」となっているので、アドレスＮに対応するプログラム１００が選択され、プログラム１００により起動処理が実行されることになる。
【００８３】
図８は、プログラム更新処理を示すフローチャートである。以下、図８を参照して、プログラムを更新（またはアップデート）する処理について説明する。なお、プログラム１００および１０２にはプログラム更新処理が記述されており、図８のプログラム更新処理は、指定プログラムに記述されているプログラム更新処理をＣＰＵ４が実行することによって実現される。
【００８４】
ＣＰＵ４は、システムが正常に起動した後に、外部インタフェース６に外部メモリが接続されたことを認識すると、現在実行中の処理を中止し（Ｓ４１）、制御情報１０６を参照し（Ｓ４２）、通信部５を介して当該外部メモリから、書き換え用の新たなプログラムおよびそのチェックサム値を読み出し、当該新たなプログラムとチェックサム値で、非指定プログラムおよびそのチェックサム値を書き換える（Ｓ４３）。例えば、アドレスＮのビット０が「１」、アドレスＮ＋１のビット０が「０」となっており、プログラム１０２が非指定プログラムである場合、プログラム１０２とそのチェックサム値１０３が、新たなプログラムとそのチェックサム値で書き換えられる。なお、上記ステップＳ４１に関し、システムが正常に起動したかどうかは、例えば、後述する実施の形態３のように、起動完了通知を用いて判断される。
【００８５】
プログラムの書き換えが完了すると、ＣＰＵ４は、制御情報１０６を更新する（Ｓ４４）。具体的には、ＣＰＵ４は、指定プログラムが切り換わるように、すなわち書き換えられたプログラムが指定されるように起動情報１０６ａを更新し、現在の非指定プログラム（すなわち書き換えられたプログラム）が異常を有しない旨を示すように異常情報１０６ｂを更新する。上記の例では、アドレスＮ＋１のビット０が「１」、アドレスＮのビット０が「０」、アドレスＮ＋１のビット１が「０」に設定される。ここで、プログラム１００は、システムを正常に起動させた正常なプログラムであり、プログラム１００に対応するアドレスＮのビット１は「０」となっている。
【００８６】
次に、ＣＰＵ４は、ソフトウェアリセットをかけることでシステムの再起動を行い（Ｓ４５）、図５の処理を最初から行う。すなわち、処理が図５のステップＳ１に戻り、再度、プログラムの選択処理（Ｓ１）、選択されたプログラムによるシステムの起動処理（Ｓ２）、異常検出処理（Ｓ３，Ｓ４）、およびエラー修正処理（Ｓ５〜Ｓ７）が行われる。上記の例では、アドレスＮ＋１のビット０が「１」となっているので、プログラム１０２が選択され、プログラム１０２により起動処理が実行される。すなわち、新たに取得されたプログラムで起動が行われる。
【００８７】
上記起動処理と並行して行われる異常検出処理において指定プログラムに異常が検出されなかった場合（Ｓ４６：ＮＯ）、ＣＰＵ４は、修正用データ１０４とそのチェックサム値１０５を、非指定プログラムとそのチェックサム値で書き換える（Ｓ４７）。上記の例では、アドレスＮのビット０が「０」となっており、プログラム１００が非指定プログラムであるので、修正用データ１０４とチェックサム値１０５は、プログラム１００とチェックサム値１０１で書き換えられる。
【００８８】
一方、異常が検出された場合には（Ｓ４６：ＹＥＳ）、ＣＰＵ４は、図６の再起動処理を行う（Ｓ４８）。この再起動処理では、システムの起動に使用されるプログラムが切り換えられ、プログラム１００および１０２のうちプログラム更新処理で書き換えられなかったプログラム、すなわちシステムを正常に起動することができていたプログラム（上記の例ではプログラム１００）にて再起動が行われることになる。
【００８９】
以上説明した本実施の形態１によれば、下記（１）〜（１２）の効果が得られる。
（１）本実施の形態に係る情報処理装置は、起動プログラムを実行してシステムの起動を行い、このシステムの起動と並行して起動プログラムに対する異常検出処理（本実施の形態ではビットエラー検出処理）を行うように構成されている。このため、本実施の形態によれば、起動プログラムに対して異常検出処理（例えばビットエラー検出処理）を行った後にシステムの起動を開始する構成と比較して、システムの起動を早期に開始することができる。これにより、例えば、システムの起動画面が表示されるタイミングを早くすることができる。
【００９０】
特に、近年、機器の高機能化が進むに伴って起動プログラムのデータ容量が著しく増えており、これにより起動プログラムに対する誤り検出処理の処理時間が長くなっており、起動プログラムに対して誤り検出を行った後にシステムの起動処理を開始する構成では、システムの起動処理の開始が著しく遅くなるという問題がある。本実施の形態によれば、この問題を解決することができる。
【００９１】
（２）本実施の形態に係る情報処理装置は、バックアッププログラムに対してビットエラーの検出を行い、ビットエラーが検出されたときに、当該ビットエラーを修正用データにより修正する。このため、バックアッププログラムにビットエラーが発生した場合に、当該ビットエラーを修正することができ、システムを起動できない事態の発生を抑制することができる。
【００９２】
具体的には、先述したように、特許文献１に記載された技術では、第２のブートプログラムに不正な変化が一旦発生すると、第１のブートプログラムに不正な変化が発生したときにシステムを起動できない事態が発生する。これに対し、本実施の形態によれば、バックアッププログラムにビットエラーが発生した場合、当該ビットエラーを検出して修正することができ、起動プログラムに異常が検出されたときに、バックアッププログラムを用いてシステムを起動することができる。また、ビットエラーを修正することにより、バックアッププログラムの信頼性を高めることができ、起動プログラムに異常が検出されたときに、信頼性の高いプログラムで再起動を行うことができる。さらに、システムの起動毎など、定期的にエラー修正処理を行うことにより、バックアッププログラムを常に信頼性の高い状態に維持することができ、バックアッププログラムによりシステムの再起動を行う場合に、システムが起動しない確率を低く抑えることができる。
【００９３】
（３）エラー修正部は、バックアッププログラムに対してビットエラーの検出を行うとともに、修正用データに対してもビットエラーの検出を行い、バックアッププログラムにビットエラーが検出された場合、修正用データのうちバックアッププログラムのビットエラーに対応する部分にビットエラーが検出されなかったときに、バックアッププログラムのビットエラーの修正を行う。これにより、バックアッププログラムに対し、ビットエラーを含むデータによる不適切な修正が施されることを防止することができる。
【００９４】
（４）エラー修正部は、バックアッププログラムに対してビットエラーの検出を行うとともに、修正用データに対してもビットエラーの検出を行い、修正用データにビットエラーが検出された場合、バックアッププログラムのうち修正用データのビットエラーに対応する部分にビットエラーが検出されなかったときに、修正用データのビットエラーをバックアッププログラムにより修正する。これにより、修正用データにビットエラーが発生した場合に、当該ビットエラーを適切に修正することができ、修正用データの信頼性を高めることができる。
【００９５】
（５）エラー修正部は、バックアッププログラムと修正用データとが一致するか否かを判定し、一致しないと判定された場合に、ビットエラーの検出および修正を行う。本構成によれば、ビットエラー検出よりも一致判定の方が処理負荷が小さい場合に、エラー修正部の処理負荷や処理時間を低減することができる。
【００９６】
（６）再起動部は、起動プログラムの異常が検出された場合、バックアッププログラムがエラー修正部により検出され修正されなかったビットエラーを有するか否かを判断し、ビットエラーを有しないときに、バックアッププログラムによりシステムの再起動を行う。これにより、ビットエラーを含まない信頼性の高いバックアッププログラムで再起動を行うことができる。
【００９７】
（７）再起動部は、起動プログラムの異常が検出された場合、バックアッププログラムがエラー修正部により検出され修正されなかったビットエラーを有するか否かを判断し、ビットエラーを有するときには、外部から新たなプログラムを取得し、起動プログラムおよびバックアッププログラムのうち少なくとも１つを新たなプログラムで書き換える。これにより、バックアッププログラムがビットエラーを含む場合に、外部から取得した新たなプログラムでシステムを起動することが可能となる。
【００９８】
（８）エラー修正部は、起動部による起動と並行してエラー修正処理を行い、再起動部は、異常検出部により起動プログラムの異常が検出された場合、当該異常検出と並行して行われるエラー修正部の処理が終了した後に、上記（６）または（７）の上記判断以降の処理を行う。本構成では、再起動の直前に、バックアッププログラムのビットエラーの検出および修正を行い、ビットエラーがないことが確認されたプログラムや、ビットエラーが修正されたプログラムによりシステムの再起動を行う。このため、起動プログラムの異常が検出された場合に、より信頼性の高いバックアッププログラムによりシステムの再起動を行うことができる。
【００９９】
（９）再起動部は、バックアッププログラムの異常が検出された場合、外部から新たなプログラムデータを取得し、起動プログラムおよびバックアッププログラムのうち少なくとも１つを新たなプログラムデータで書き換える。これにより、バックアッププログラムに異常が検出された場合に、外部から取得した新たなプログラムでシステムを起動することが可能となる。
【０１００】
（１０）不揮発性メモリは、第１のプログラムを記憶する第１のプログラム領域と、第２のプログラムを記憶する第２のプログラム領域とを有し、起動部は、第１および第２のプログラムのうち起動情報で指定されるプログラムを実行してシステムの起動を行う。そして、再起動部は、起動に使用されているプログラムの異常が検出された場合に、指定されるプログラムが切り換わるように起動情報を更新した後に、起動部にシステムの起動を実行させる。本構成によれば、起動情報の更新によってシステムの起動に使用するプログラムを切り換えることができる。このため、プログラムの書き換えによってシステムの起動に使用するプログラムを切り換える構成（例えば、第２のプログラムで第１のプログラムを上書きすることで、システムの起動に使用するプログラムを切り換える構成）と比較して、処理負荷や処理時間を低減することができる。
【０１０１】
（１１）再起動部は、異常検出部によりプログラムの異常が検出された場合、異常情報に基づき、非指定プログラムが、異常検出部により検出された異常およびエラー修正部により検出されたビットエラーのいずれも有しないときに、指定されるプログラムが切り換わるように起動情報を更新して、起動部に起動を実行させる。これにより、異常検出部によりプログラムの異常が検出された場合に、上記異常およびビットエラーを含まない信頼性の高いプログラムで再起動を行うことができる。具体的には、過去に異常検出部により異常が検出されたプログラムや、エラー修正部によりビットエラーが検出され修正されなかったプログラムを使用しないようにし、信頼性の高いプログラムで再起動を行うことができる。
【０１０２】
（１２）情報処理装置は、システムの起動が正常に終了した後、外部から新たなプログラムを取得し、非指定プログラムを新たなプログラムで書き換え、指定されるプログラムが切り換わるように起動情報を更新した後、起動部に起動を実行させ、当該起動の際に異常検出部によって異常が検出されなかった場合、修正用データを非指定プログラムで書き換え、異常が検出された場合には、指定されるプログラムが切り換わるように起動情報を更新した後、起動部に起動を実行させる。本構成によれば、プログラムを更新する際、更新後の新たなプログラムに異常が検出された場合に、起動に使用するプログラムを更新前のものに戻すことができる。このため、新たに取得したプログラムでシステムを起動できない場合に、元のプログラムに戻すことができず、システムの起動ができなくなってしまうことを防ぐことができる。
【０１０３】
実施の形態２．
以下、実施の形態２における情報処理装置について説明する。この情報処理装置は、実施の形態１と異なる制御情報を用いる点を除き、実施の形態１の情報処理装置と同様である。以下の説明では、実施の形態１と同様の構成および処理については、実施の形態１と同一の符号を用い、説明を省略または簡略化する。
【０１０４】
図９は、本実施の形態２における不揮発性メモリ２の記憶フォーマットを示す概略図である。図９に示されるように、本実施の形態では、制御情報１０６は、バージョン情報１０６ｃ、再起動フラグ（再起動情報）１０６ｄ、およびエラーフラグ（エラー情報）１０６ｅを含む。
【０１０５】
バージョン情報１０６ｃは、プログラム１００および１０２のそれぞれのバージョンを示す情報である。再起動フラグ１０６ｄは、再起動部１５により更新される情報であり、再起動の有無を示す。エラーフラグ１０ｅは、プログラム１００および１０２のうち少なくとも１つがエラー修正部１４により検出され修正されなかったビットエラーを有するか否かを示す情報である。
【０１０６】
図１０は、本実施の形態２における制御情報１０６のフォーマットを示す図である。図１０において、バージョン情報１０６ｃは、不揮発性メモリ２のアドレスＭおよびアドレスＭ＋１に記録される。アドレスＭにはプログラム１００のバージョン番号、アドレスＭ＋１にはプログラム１０２のバージョン番号が記録される。本例では、バージョン番号が大きいほど新しいバージョンを表し、バージョン番号が小さいほど古いバージョンを表すこととする。図１０の例では、プログラム１００のバージョン番号が「０００１」、プログラム１０２のバージョン番号が「００００」であり、プログラム１００の方がプログラム１０２よりも新しい。再起動フラグ１０６ｄは、アドレスＬに記録される。アドレスＬには、「０」または「１」が記録され、「０」は未更新（または再起動なし）を示し、「１」は更新済み（または再起動あり）を示す。エラーフラグ１０６ｅは、アドレスＫに記録される。アドレスＫには、「０」または「１」が記録され、「０」はビットエラーなしを示し、「１」はビットエラーありを示す。
【０１０７】
本実施の形態では、プログラム選択部１０は、バージョン情報１０６ｃおよび再起動フラグ１０６ｄに基づき、再起動フラグ１０６ｄが未更新の場合、プログラム１００および１０２のうちバージョンが所定の条件を満たすプログラムを選択し、再起動フラグ１０６ｄが更新済みの場合、プログラム１００および１０２のうちバージョンが上記所定の条件を満たさないプログラムを選択する。本例では、上記所定の条件は、バージョンが他方のプログラムのバージョンよりも新しいことであり、プログラム選択部１０は、再起動フラグ１０６ｄが未更新である場合、プログラム１００および１０２のうちバージョンが新しいプログラムを選択し、再起動フラグ１０６ｄが更新済みである場合には、バージョンが古いプログラムを選択する。
【０１０８】
プログラム１００および１０２のバージョンが互いに同じである場合、プログラム選択部１０は、再起動フラグ１０６ｄが未更新である場合、プログラム１００および１０２のうち不揮発性メモリ２におけるアドレスが所定の条件を満たすプログラムを選択し、再起動フラグ１０６ｄが更新済みである場合、プログラム１００および１０２のうちアドレスが上記所定の条件を満たさないプログラムを選択する。本例では、上記所定の条件は、アドレス（またはブロックの番号）が他方のプログラムよりも小さいことであり、プログラム選択部１０は、再起動フラグ１０６ｄが未更新である場合にはプログラム１００を選択し、再起動フラグ１０６ｄが更新済みである場合にはプログラム１０２を選択する。
【０１０９】
以上のように、バージョン情報１０６ｃおよび再起動フラグ１０６ｄは、システムの起動に使用するプログラムを指定する起動情報としての役割を果たし、再起動フラグ１０６ｄが未更新の場合、バージョンが新しいプログラムが指定プログラムであり、再起動フラグ１０６ｄが更新済みの場合、バージョンが古いプログラムが指定プログラムである。
【０１１０】
再起動部１５は、異常検出部１３によりプログラムの異常が検出された場合、再起動フラグ１０６ｄが未更新であり、かつエラーフラグ１０６ｅがビットエラーなしを示すときに、再起動フラグ１０６ｄを更新して、起動部１２にシステムの起動を実行させる。一方、再起動フラグ１０６ｄが更新済みであるか、またはエラーフラグ１０６ｅがビットエラーありを示すときには、再起動部１５は、書き換え制御部１６にプログラム書き換え処理を実行させる。
【０１１１】
以下、図５を参照して、本実施の形態２における情報処理装置の動作を説明する。
システムリセットが解除されると、ＣＰＵ４は、選択プログラム１０７に記述されているプログラム選択処理を実行する。プログラム選択処理では、ＣＰＵ４は、バージョン情報１０６ｃおよび再起動フラグ１０６ｄを参照し、システムの起動に使用するプログラムとして指定プログラムを選択する。図１０の例では、再起動フラグ１０６ｄが「０」となっているので、バージョンが新しいプログラム１００が選択される。
【０１１２】
次に、ＣＰＵ４は、実施の形態１と同様に、選択された指定プログラムとそのチェックサム値をワークメモリ３へ転送し、指定プログラムに記述されている起動処理を実行する（Ｓ２）。
【０１１３】
また、ＣＰＵ４は、実施の形態１と同様に、ステップＳ２の起動処理と並行して、指定プログラムのチェックサム値を計算する（Ｓ３）。そして、ＣＰＵ４は、計算されたチェックサム値と、不揮発性メモリ２に記憶されているチェックサム値とが一致するか否かを判断し、一致しない場合は（Ｓ４：ＮＯ）、再起動処理へと進む（Ｓ８）。この再起動処理については後に詳しく説明する。一方、チェックサム値が一致している場合（Ｓ４：ＹＥＳ）、ＣＰＵ４は、異常検出処理を終了する。
さらに、ＣＰＵ４は、ステップＳ２の起動処理と並行して、次のエラー修正処理（Ｓ５〜Ｓ７）を行う。
【０１１４】
ステップＳ５では、ＣＰＵ４は、再起動フラグ１０６ｄおよびエラーフラグ１０６ｅを参照し、非指定プログラムが既に異常を有するか否かを判断する。具体的には、ＣＰＵ４は、再起動フラグ１０６ｄおよびエラーフラグ１０６ｅのうち少なくとも１つが「１」となっている場合、異常を有すると判断し（Ｓ５：ＹＥＳ）、エラー修正処理を終了する。一方、再起動フラグ１０６ｄおよびエラーフラグ１０６ｅがいずれも「０」となっている場合には、異常を有しないと判断し（Ｓ５：ＮＯ）、ステップＳ６に進む。
【０１１５】
ステップＳ６では、ＣＰＵ４は、実施の形態１と同様に、非指定プログラムと修正用データ１０４とを比較し、両者が一致する場合は（Ｓ６：ＹＥＳ）、エラー修正処理を終了し、両者が一致しない場合は（Ｓ６：ＮＯ）、ステップＳ７に進む。
【０１１６】
ステップＳ７では、ＣＰＵ４は、非指定プログラムおよび修正用データ１０４のそれぞれのチェックサム値を計算する。そして、ＣＰＵ４は、計算された非指定プログラムのチェックサム値と不揮発性メモリ２に記憶されているチェックサム値とが一致するか否か、および計算された修正用データ１０４のチェックサム値と不揮発性メモリ２に記憶されているチェックサム値１０５とが一致するか否かを判断する。
【０１１７】
そして、非指定プログラムおよび修正用データ１０４のうちどちらか一方のチェックサム値が一致しない場合、ＣＰＵ４は、非指定プログラムおよび修正用データ１０４のうちチェックサム値が一致しているデータによって、もう一方のチェックサム値が一致していないデータを上書きし、エラー修正処理を終了する。
【０１１８】
一方、非指定プログラムおよび修正用データ１０４の両方のチェックサム値が一致しない場合には、ＣＰＵ４は、エラーフラグ１０６ｅを「１」に更新し、エラー修正処理を終了する。
【０１１９】
以下、図６を参照して、本実施の形態２における再起動処理（図５のステップＳ８）について説明する。
まず、ＣＰＵ４は、起動処理を停止した後（Ｓ２１）、エラー修正処理が終了するまで待機し（Ｓ２２：ＮＯ）、エラー修正処理が終了すると（Ｓ２２：ＹＥＳ）、ステップＳ２３に進む。
【０１２０】
ステップＳ２３では、ＣＰＵ４は、再起動フラグ１０６ｄおよびエラーフラグ１０６ｅを参照し、プログラムの切り替えによる再起動が可能か否かを判断する。具体的には、ＣＰＵ４は、再起動フラグ１０６ｄおよびエラーフラグ１０６ｅがいずれも「０」となっている場合には可能と判断し、２つのフラグのうち少なくとも１つが「１」となっている場合には可能でないと判断する。
【０１２１】
ステップＳ２３で可能と判断された場合（Ｓ２３：ＹＥＳ）、ＣＰＵ４は、再起動フラグ１０６ｄを「１」に更新した後に（Ｓ２４）、システムの再起動を行う（Ｓ２５）。具体的には、ＣＰＵ４は、ソフトウェアリセットをかけて、図５の処理を最初から行う。図１０の例では、再起動フラグ１０６ｄが「１」に更新された後、ソフトウェアリセットされると、プログラム１０２が選択され、プログラム１０２により起動処理が実行されることになる。
【０１２２】
一方、ステップＳ２３で可能でないと判断された場合（Ｓ２３：ＮＯ）、ＣＰＵ４は、メッセージを出力し（Ｓ２６）、プログラム書き換え処理へと進む（Ｓ２７）。
【０１２３】
以下、図７を参照して、本実施の形態２におけるプログラム書き換え処理（図６のステップＳ２７）について説明する。
ＣＰＵ４は、実施の形態１と同様に、新たなプログラムとそのチェックサム値を外部メモリから読み出し、当該新たなプログラムとチェックサム値で、プログラム１００とチェックサム値１０１、プログラム１０２とチェックサム値１０３、および確認用プログラム１０４とチェックサム値１０５を書き換える（Ｓ３１）。
【０１２４】
書き換えが完了すると、ＣＰＵ４は、再起動フラグ１０６ｄおよびエラーフラグ１０６ｅを「０」に更新し、バージョン情報１０６ｃにおけるプログラム１００および１０２のバージョンを新たに取得したプログラムのバージョンに更新する（Ｓ３２）。
【０１２５】
制御情報１０６の更新が完了すると、ＣＰＵ４は、システムの再起動を行う（Ｓ３３）。具体的には、ＣＰＵ４は、ソフトウェアリセットをかけ、図５の処理を最初から行う。
【０１２６】
図１０では、例えば、ステップＳ３２においてプログラム１００および１０２のバージョンが「０００２」に更新された後、ステップＳ３３でソフトウェアリセットされると、プログラム１００が選択され、プログラム１００により起動処理が実行されることになる。
【０１２７】
以下、図８を参照して、本実施の形態２におけるプログラム更新処理を説明する。
ＣＰＵ４は、システムが正常に起動した後に、外部メモリが接続されたことを認識すると、現在実行中の処理を中止し（Ｓ４１）、バージョン情報１０６ｃおよび再起動フラグ１０６ｄを参照し（Ｓ４２）、外部メモリから新たなプログラムおよびそのチェックサム値を読み出し、当該新たなプログラムとチェックサム値で、非指定プログラムおよびそのチェックサム値を書き換える（Ｓ４３）。図１０の例では、再起動フラグ１０６ｄが「０」となっているので、バージョンが古いプログラム１０２が新たなプログラムで書き換えられる。
【０１２８】
プログラムの書き換えが完了すると、ＣＰＵ４は、制御情報１０６を更新する（Ｓ４４）。具体的には、ＣＰＵ４は、バージョン情報１０６ｃにおける非指定プログラム（すなわち書き換えられたプログラム）のバージョンを、新たに取得したプログラムのバージョンに更新し、再起動フラグ１０６ｄおよびエラーフラグ１０６ｅを「０」に更新する。図１０の例では、プログラム１０２に対応するアドレスＭ＋１に、新たなプログラムのバージョンが書き込まれる。ここで、新たなプログラムのバージョンは、元々、不揮発性メモリ２に記憶されていたプログラム１００および１０２のバージョンよりも新しいものであり、アドレスＭ＋１には例えば「０００２」が書き込まれる。また、プログラム１００は、システムを正常に起動させた正常なプログラムである。
【０１２９】
次に、ＣＰＵ４は、ソフトウェアリセットをかけることでシステムの再起動を行い（Ｓ４５）、図５の処理を最初から行う。上記の例では、バージョンが新しいプログラム１０２が選択され、プログラム１０２により起動処理が実行される。すなわち、新たに取得されたプログラムで起動が行われる。
【０１３０】
上記起動処理と並行して行われる異常検出処理において指定プログラムに異常が検出されなかった場合（Ｓ４６：ＮＯ）、ＣＰＵ４は、修正用データ１０４とそのチェックサム値１０５を、非指定プログラムとそのチェックサム値で書き換える（Ｓ４７）。上記の例では、再起動フラグ１０６ｄが「０」となっており、バージョンの古いプログラム１００が非指定プログラムであるので、修正用データ１０４とチェックサム値１０５は、プログラム１００とチェックサム値１０１で書き換えられる。
【０１３１】
一方、異常が検出された場合には（Ｓ４６：ＹＥＳ）、ＣＰＵ４は、図６の再起動処理を行う（Ｓ４８）。この再起動処理では、システムの起動に使用されるプログラムが切り換えられ、プログラム１００および１０２のうちプログラム更新処理で書き換えられなかったプログラム、すなわちシステムを正常に起動することができていたプログラム（上記の例ではプログラム１００）にて再起動が行われることになる。
【０１３２】
以上説明した本実施の形態によれば、上記（１）〜（１０）、（１２）の他に、下記（１３）の効果が得られる。
（１３）再起動部は、異常検出部によりプログラムの異常が検出された場合、再起動フラグが未更新であり、かつエラーフラグがビットエラーなしを示すときに、再起動フラグを更新し、起動部にシステムの起動を実行させる。これにより、異常検出部によりプログラムの異常が検出された場合に、信頼性の高いプログラムで再起動を行うことができる。具体的には、過去に異常検出部により異常が検出されたプログラムや、エラー修正部によりビットエラーが検出され修正されなかったプログラムを使用しないようにし、信頼性の高いプログラムで再起動を行うことができる。
【０１３３】
実施の形態３．
以下、実施の形態３における情報処理装置について説明する。この情報処理装置は、プログラムの異常としてシステムの起動の失敗を検出する点を除き、実施の形態１の情報処理装置と同様である。以下の説明では、実施の形態１と同様の構成および処理については、実施の形態１と同一の符号を用い、説明を省略または簡略化する。
【０１３４】
本実施の形態では、異常検出部１３は、指定プログラム（すなわちプログラム選択部１０により選択されたプログラム）の異常として、当該プログラムによるシステムの起動の失敗（またはシステムが正常に起動しなかったこと）を検出する。
【０１３５】
具体的には、起動部１２は、システムの起動が完了すると異常検出部１３に起動完了通知を出力するように構成されている。そして、異常検出部１３は、指定プログラムの実行開始からの経過時間を計測し、起動部１２からの起動完了通知の出力がないまま、経過時間が予め定められたスレッショルド時間に達した場合に、システムの起動が失敗したと判定する。ここで、スレッショルド時間は、システムの起動が失敗したかどうか（またはシステムが正常に起動したかどうか）を判定するための時間であり、システムの起動に要する通常の時間よりも十分に長い時間が設定される。ただし、異常検出部１３は、上記以外の方法でシステムの起動の失敗を検出してもよい。例えば、起動部１２は、起動処理中に定期的に信号を異常検出部１３に出力するように構成され、異常検出部１３は、起動部１２からの信号出力の時間間隔が所定時間を超えたこと、すなわち信号出力が途絶えたことを検出した場合に、システムの起動が失敗したと判定してもよい。また例えば、異常検出部１３は、起動部１２から起動処理の異常を示すエラー信号を受けた場合に、システムの起動が失敗したと判定してもよい。
【０１３６】
図１１は、本実施の形態３における情報処理装置の動作を示すフローチャートである。以下、図１１を参照して、本実施の形態３における情報処理装置の動作を説明する。
【０１３７】
システムリセットが解除されると、ＣＰＵ４は、実施の形態１と同様に、選択プログラム１０７に記述されているプログラム選択処理を実行し、システムの起動に使用するプログラムとして指定プログラムを選択する（Ｓ１）。
【０１３８】
次に、ＣＰＵ４は、実施の形態１と同様に、選択された指定プログラムに記述されている起動処理を実行する（Ｓ２）。
【０１３９】
また、ＣＰＵ４は、ステップＳ２の起動処理と並行して、指定プログラムの異常検出を行う。本実施の形態では、ＣＰＵ４は、指定プログラムの異常として、システムの起動の失敗を検出する。
【０１４０】
具体的には、ＣＰＵ４は、指定プログラムの実行が開始されると、プログラムの実行開始からの経過時間を計測するタイマをスタートさせる（Ｓ３０１）。ついで、ＣＰＵ４は、起動部１２から起動完了通知が出力されたか否かを判断し（Ｓ３０２）、起動完了通知が出力された場合（Ｓ３０２：ＹＥＳ）、異常検出処理を終了する。一方、起動完了通知が出力されていない場合（Ｓ３０２：ＮＯ）、ＣＰＵ４は、タイマの計測時間がスレッショルド時間に達したか否かを判断する（Ｓ３０３）。そして、スレッショルド時間に達していない場合は（Ｓ３０３：ＮＯ）、ステップＳ３０２に戻り、スレッショルド時間に達している場合には（Ｓ３０３：ＹＥＳ）、システムの起動が失敗したと判定し、再起動処理へと進む（Ｓ８）。すなわち、ＣＰＵ４は、プログラムの実行開始からスレッショルド時間が経過しても起動部１２から起動完了通知が出力されない場合には、プログラムが正常に起動しなかったと判断し、再起動処理を行う。この再起動処理は、実施の形態１と同様である。
【０１４１】
さらに、ＣＰＵ４は、実施の形態１と同様に、ステップＳ２の起動処理と並行して、非指定プログラムのエラー修正処理を行う（Ｓ５〜Ｓ７）。
【０１４２】
なお、図１１のステップＳ３０１〜Ｓ３０３は、指定プログラムに記述されている異常検出処理をＣＰＵ４が実行することにより実現される。また、ステップＳ３０１〜Ｓ３０３は、異常検出部１３の処理である。
【０１４３】
以上説明した本実施の形態３によれば、上記（１）〜（１１）の他に、下記（１４）の効果が得られる。
（１４）情報処理装置は、システムの起動が正常に終了した後、外部から新たなプログラムを取得し、非指定プログラムを新たなプログラムで書き換え、指定されるプログラムが切り換わるように起動情報を更新した後、起動部に起動を実行させ、当該起動の際に異常検出部によって異常（本実施の形態ではシステムの起動の失敗）が検出されなかった場合、修正用データを非指定プログラムで書き換え、異常が検出された場合には、指定されるプログラムが切り換わるように起動情報を更新した後、起動部に起動を実行させる。本構成によれば、プログラムを更新する際、更新後の新たなプログラムでのシステム起動が失敗した場合に、起動に使用するプログラムを更新前のものに戻すことができる。このため、例えば、新たに取得したプログラムにバグなどのエラーがあり、システムを正常に起動できない場合に、元のプログラムに戻すことができず、システムの起動ができなくなってしまうことを防ぐことができる。
【０１４４】
実施の形態４．
以下、実施の形態４における情報処理装置について説明する。この情報処理装置は、プログラムの異常としてシステムの起動の失敗を検出する点を除き、実施の形態２の情報処理装置と同様である。また、実施の形態４の情報処理装置は、実施の形態２の情報処理装置に実施の形態３の異常検出部を適用することによって得られる。以下の説明では、実施の形態２と同様の構成および処理については、実施の形態２と同一の符号を用い、説明を省略または簡略化する。
【０１４５】
本実施の形態では、異常検出部１３は、実施の形態３と同様に、指定プログラムの異常として、システムの起動の失敗を検出する。
【０１４６】
以下、図１１を参照して、本実施の形態４における情報処理装置の動作を説明する。
システムリセットが解除されると、ＣＰＵ４は、実施の形態２と同様に、選択プログラム１０７を実行し、バージョン情報１０６ｃおよび再起動フラグ１０６ｄを参照して、システムの起動に使用するプログラムとして指定プログラムを選択する（Ｓ１）。
【０１４７】
次に、ＣＰＵ４は、実施の形態２と同様に、選択された指定プログラムに記述されている起動処理を実行する（Ｓ２）。
【０１４８】
また、ＣＰＵ４は、ステップＳ２の起動処理と並行して、実施の形態３と同様に、異常検出処理として、システムの起動失敗の検出を行い（Ｓ３０１〜Ｓ３０３）、システムの起動の失敗を検出すると（Ｓ３０３：ＹＥＳ）、再起動処理を行う（Ｓ８）。この再起動処理は、実施の形態２と同様である。
【０１４９】
さらに、ＣＰＵ４は、ステップＳ２の起動処理と並行して、実施の形態２と同様に、バージョン情報１０６ｃ、再起動フラグ１０６ｄ、およびエラーフラグ１０６ｅに基づき、非指定プログラムのエラー修正処理を行う（Ｓ５〜Ｓ７）。
【０１５０】
以上説明した本実施の形態４によれば、上記（１）〜（１０）、（１２）〜（１４）の効果が得られる。
【０１５１】
なお、本発明は、上記実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の態様で実施することができる。
【０１５２】
例えば、上記の説明では、プログラム選択部１０がソフトウェアで実現される構成を例示したが、プログラム選択部１０は、ハードウェアのみで実現されてもよい。例えば、情報処理装置１は、プログラムを選択するセレクタ回路を備え、システムリセットが解除された場合に、セレクタ回路が、制御情報１０６に応じて、プログラム１００のアドレスまたはプログラム１０２のアドレスをＣＰＵ４にセットし、ＣＰＵ４が、セレクタ回路によりセットされたアドレスにアクセスして、プログラムを実行するように構成されてもよい。
【０１５３】
また、プログラム選択部１０は、省略可能である。例えば、情報処理装置１は次のように構成されてもよい。情報処理装置１は、ブートアドレスを記憶するレジスタを備え、当初、レジスタにはプログラム１００のアドレスがセットされている。システムリセットが解除されると、ＣＰＵ４は、レジスタに記憶されているプログラム１００のアドレスにアクセスし、プログラム１００を実行する。その後、プログラム１００の異常が検出された場合、再起動処理において、ＣＰＵ４は、レジスタに記憶されているブートアドレスをプログラム１０２のアドレスに変更してソフトウェアリセットをかける。ＣＰＵ４は、レジスタに記憶されているプログラム１０２のアドレスにアクセスし、プログラム１０２を実行する。この構成では、レジスタに記憶されるアドレスが起動情報となる。
【０１５４】
また、上記の説明では、プログラムをワークメモリ３に展開して実行する構成を例示したが、ＣＰＵ４は、プログラムをワークメモリ３に展開せずに不揮発性メモリ２上から直接実行するように構成されてもよい。この構成では、ワークメモリ３の容量を削減することができる。
【０１５５】
また、上記の説明では、図８のプログラム更新処理において、書き換え後の新たなプログラムで起動する際、当該プログラムに異常が検出されなかった場合に（Ｓ４６：ＮＯ）、修正用データ１０４を非指定プログラム（すなわち書き換えられなかったプログラム）で書き換える（Ｓ４７）こととしたが、ステップＳ４７において、修正用データ１０４および非指定プログラムを指定プログラム（すなわち書き換え後の新たなプログラム）で書き換えてもよい。ただし、プログラムをワークメモリ３に展開せずに不揮発性メモリ２上から直接実行する構成では、起動に使用しているプログラムが自分自身をコピーしたり自分自身で他のプログラムを書き換えたりすることが難しいことから、図８に示す処理が有効である。
【０１５６】
また、情報処理装置１は、プログラムの異常検出として、実施の形態１のビットエラーの検出と、実施の形態３の起動失敗の検出との両方を行ってもよい。この場合、例えば、情報処理装置１は、ビットエラーおよび起動失敗のうち少なくとも１つを検出した場合に、再起動処理を行う。
【０１５７】
また、上記の説明では、起動情報１０６ａを変更して起動時にアクセスするブロック（プログラムデータ領域）を切り換えることによって、システムの起動に使用するプログラムの切り換えを行っているが、情報処理装置１は、プログラム１００の異常を検出した場合、プログラム１０２でプログラム１００を書き換え（または上書きし）、書き換え後のプログラム１００で再起動を行ってもよい。すなわち、情報処理装置１は、システムの起動に使用するプログラムを書き換えることにより、プログラムの切り換えを行うように構成されてもよい。
【０１５８】
また、上記の説明では、起動部１２および異常検出部１３が、共通のＣＰＵ４と共通のプログラムにより実現される構成を例示したが、異常検出部１３は、下記（ａ）〜（ｄ）のような態様で実現されることも可能である。
【０１５９】
（ａ）異常検出部１３は、ＣＰＵ４が、起動用のプログラムとは別の異常検出用のプログラムを実行することにより実現される。
【０１６０】
（ｂ）異常検出部１３は、ＣＰＵ４とは別のＣＰＵが、起動用のプログラムまたは起動用のプログラムとは別の異常検出用のプログラムに記述されている異常検出処理を実行することにより実現される。
【０１６１】
（ｃ）ＣＰＵ４は複数個のプロセッサコアを含み、異常検出部１３は、複数個のプロセッサコアのうち、起動部１２を実現するものとは別のプロセッサコアが、起動用のプログラムまたは起動用のプログラムとは別の異常検出用のプログラムに記述されている異常検出処理を実行することにより実現される。
（ｄ）異常検出部１３は、異常検出用のハードウェア回路により実現される。
【０１６２】
上記（ｂ）〜（ｄ）のように、起動処理と異常検出処理とを別々の処理装置で並行して実行する構成では、起動処理と異常検出処理とを実際に並行処理することができ、起動用のプログラムに対して誤り検出を行った後にシステムの起動処理を開始する構成と比較して、起動時間を短くすることができる。
【０１６３】
また、エラー修正部１４、再起動部１５、および書き換え制御部１６についても、異常検出部１３と同様に、上記（ａ）〜（ｄ）のような態様で実現されてもよい。
【０１６４】
また、上記実施の形態１〜４および上記（ａ）〜（ｄ）の構成で用いられる各種のプログラムは、フラッシュメモリや光ディスク等のコンピュータ読み取り可能な記録媒体に記録されて提供されてもよいし、インターネット等の通信回線を介して提供されてもよい。
【符号の説明】
【０１６５】
１  情報処理装置、  ２  不揮発性メモリ、  ３  ワークメモリ、  ４  ＣＰＵ、  ５  通信部、  ６  外部インタフェース、  １０  プログラム選択部、  １１  並列処理部、  １２  起動部、  １３  異常検出部、  １４  エラー修正部、  １５  再起動部、  １６  書き換え制御部。
【図１】
2014099097.tif 000003
【図２】
2014099097.tif 000004
【図３】
2014099097.tif 000005
【図４】
2014099097.tif 000006
【図５】
2014099097.tif 000007
【図６】
2014099097.tif 000008
【図７】
2014099097.tif 000009
【図８】
2014099097.tif 000010
【図９】
2014099097.tif 000011
【図１０】
2014099097.tif 000012
【図１１】
2014099097.tif 000013