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