(57)【要約】【課題】スナップショットからの起動をより高速に行うことが可能な情報処理装置、情報処理装置の起動制御方法、プログラム及び記録媒体を提供する。【解決手段】休止状態への移行時に、主記憶装置のスナップショットをプロセス及びアプリケーションの単位で取得し、休止状態からの復帰時に、取得したスナップショットのうち、自己の装置の起動に必要なプログラムにかかるプロセス又はアプリケーションのスナップショットから優先的に主記憶装置に復元する。【選択図】        図８
2009187134.tif 000002
【特許請求の範囲】
【請求項１】
自己の装置の起動に必要なプログラムを少なくとも記憶するプログラム記憶手段と、
揮発性の主記憶手段と、
前記プログラム記憶手段に記憶されたプログラムを実行し、当該プログラムにより実現される各機能の実行単位を前記主記憶手段に展開する制御手段と、
休止状態への移行を指示する指示信号に応じ、前記主記憶手段の状態をイメージ化したスナップショットを前記実行単位毎に取得する取得手段と、
不揮発性のスナップ記憶手段と、
前記取得手段により取得されたスナップショットを前記スナップ記憶手段に格納した後、自己の装置の電源をオフとする休止手段と、
前記休止状態からの復帰を指示する指示信号に応じて自己の装置の電源をオンとし、前記スナップ記憶手段に記憶されたスナップショットのうち、前記自己の装置の起動に必要なプログラムにかかる実行単位のスナップショットから優先的に前記主記憶手段に復元する復元手段と、
を備えたことを特徴とする情報処理装置。
【請求項２】
前記プログラム記憶手段は、基本ソフトウェアを少なくとも含む自己の装置の起動に必要な第１プログラムと、当該第１プログラム以外の応用ソフトウェアを含む第２プログラムとを記憶し、
前記制御手段は、前記基本ソフトウェアの実行単位となるプロセスと、当該基本ソフトウェア以外の特定の用途に特化したプログラム実行時の実行単位となるアプリケーションとを前記主記憶手段に展開し、
前記取得手段は、前記プロセス及びアプリケーションの単位でスナップショットを取得し、
前記復元手段は、前記スナップ記憶手段に記憶されたスナップショットのうち、前記第１プログラムにかかるプロセス又はアプリケーションのスナップショットから優先的に前記主記憶手段に復元することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記休止手段は、前記取得手段により取得されたスナップショットのうち、前記第１プログラムにかかるプロセス又はアプリケーションのスナップショットから優先的に前記スナップ記憶手段に格納し、
前記復元手段は、前記スナップ記憶手段に記憶された順に前記スナップショットを前記主記憶手段に復元することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記休止手段は、前記取得手段により取得された各スナップショットに対し、自己の装置の起動に必要なプロセス又はアプリケーションにかかるものか否かを識別するための識別情報を夫々付与し、
前記復元手段は、前記スナップ記憶手段に記憶されたスナップショットのうち、自己の装置の起動に必要なプロセス又はアプリケーションであることを指示する識別情報が付与されたスナップショットから優先的に前記主記憶手段に復元することを特徴とする請求項２に記載の情報処理装置。
【請求項５】
前記第１プログラムは、ユーザインターフェースの提供にかかるプログラムを含み、
前記復元手段は、前記第１プログラムにかかるスナップショットのうち、ユーザインターフェースの提供にかかる機能を実現するプロセス又はアプリケーションのスナップショットから優先的に前記主記憶手段に復元することを特徴とする請求項２〜４の何れか一項に記載の情報処理装置。
【請求項６】
前記第１プログラムは、外部装置とのデータの授受にかかるプログラムを含み、
前記復元手段は、前記第１プログラムにかかるスナップショットのうち、外部装置とのデータの授受にかかる機能を実現するプロセス又はアプリケーションのスナップショットから優先的に前記主記憶手段に展開することを特徴とする請求項２〜５の何れか一項に記載の情報処理装置。
【請求項７】
前記休止手段は、前記第１プログラムにかかるプロセス又はアプリケーションのスナップショットと、前記第２プログラムにかかるプロセス又はアプリケーションのスナップショットとを、前記スナップ記憶手段の異なる記憶領域に区分けして記憶することを特徴とする請求項２に記載の情報処理装置。
【請求項８】
前記主記憶手段に展開されたプロセス及びアプリケーション毎にハッシュ値を算出するハッシュ値算出手段と、
前記ハッシュ値算出手段により算出された、前記スナップショット取得前の各ハッシュ値と、前記復元手段により復元された直後の各ハッシュ値とを、同一のプロセス又はアプリケーションについて夫々照合する照合手段と、
を更に備えたことを特徴とする請求項２に記載の情報処理装置。
【請求項９】
前記ハッシュ値算出手段により算出された前記スナップショット取得前の各ハッシュ値を、対応するプロセス又はアプリケーションを一意に識別するための識別情報と関連付けて記憶するハッシュ値記憶手段を更に備え、
前記照合手段は、前記復元手段により復元された直後の各プロセス及びアプリケーションのハッシュ値と、前記ハッシュ値記憶手段に記憶された当該各プロセス及びアプリケーションの識別情報に関連付けられたハッシュ値とを比較することを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記照合手段は、前記復元手段により前記第１プログラムにかかるプロセス又はアプリケーションのスナップショットが前記主記憶手段に復元される毎に、前記ハッシュ値の比較を行うことを特徴とする請求項８又は９に記載の情報処理装置。
【請求項１１】
前記照合手段は、前記復元手段により前記第２プログラムにかかる全てのプロセス及びアプリケーションのスナップショットが前記主記憶手段に復元された後、当該プロセス及びアプリケーションについてのハッシュ値の比較を連続的に行うことを特徴とする請求項８〜１０の何れか一項に記載の情報処理装置。
【請求項１２】
前記照合手段による照合の結果、不一致となるハッシュ値が検出された場合、エラーが発生した旨を提示する提示手段を更に備えたことを特徴とする請求項８〜１１の何れか一項に記載の情報処理装置。
【請求項１３】
前記復元手段は、前記照合手段による照合の結果、不一致となるハッシュ値が検出された場合、このハッシュ値に対応する前記プロセス又はアプリケーションの実行を停止することを特徴とする請求項８〜１２の何れか一項に記載の情報処理装置。
【請求項１４】
自己の装置の起動に必要なプログラムを少なくとも記憶するプログラム記憶手段と、揮発性の主記憶手段と、不揮発性のスナップ記憶手段とを備えた情報処理装置の起動制御方法であって、
制御手段が、前記プログラム記憶手段に記憶されたプログラムを実行し、当該プログラムにより実現される各機能の実行単位を前記主記憶手段に展開する制御工程と、
取得手段が、休止状態への移行を指示する指示信号に応じ、前記主記憶手段の状態をイメージ化したスナップショットを前記実行単位毎に取得する取得工程と、
休止手段が、前記取得工程で取得されたスナップショットを前記スナップ記憶手段に格納した後、自己の装置の電源をオフとする休止工程と、
復元手段が、前記休止状態からの復帰を指示する指示信号に応じて自己の装置の電源をオンとし、前記スナップ記憶手段に記憶されたスナップショットのうち、前記自己の装置の起動に必要なプログラムにかかる実行単位のスナップショットから優先的に前記主記憶手段に復元する復元工程と、
を含むことを特徴とする起動制御方法。
【請求項１５】
自己の装置の起動に必要なプログラムを少なくとも記憶するプログラム記憶手段と、揮発性の主記憶手段と、不揮発性のスナップ記憶手段とを備えたコンピュータを、
前記プログラム記憶手段に記憶されたプログラムを実行し、当該プログラムにより実現される各機能の実行単位を前記主記憶手段に展開する制御手段と、
休止状態への移行を指示する指示信号に応じ、前記主記憶手段の状態をイメージ化したスナップショットを前記実行単位毎に取得する取得手段と、
前記取得手段により取得されたスナップショットを前記スナップ記憶手段に格納した後、自己の装置の電源をオフとする休止手段と、
前記休止状態からの復帰を指示する指示信号に応じて自己の装置の電源をオンとし、前記スナップ記憶手段に記憶されたスナップショットのうち、前記自己の装置の起動に必要なプログラムにかかる実行単位のスナップショットから優先的に前記主記憶手段に復元する復元手段と、
して機能させることを特徴とするプログラム。
【請求項１６】
請求項１５に記載のプログラムが記録されていることを特徴とするコンピュータが読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置の起動制御方法、プログラム及び記録媒体に関し、特に、記憶媒体に記憶された基本ソフトウェア及び応用ソフトウェアを読み出して実行するＣＰＵを備えた情報処理装置、情報処理装置の起動制御方法、起動制御プログラム及び記録媒体に関する。
【背景技術】
【０００２】
近年、低価格で且つ大容量のＮＡＮＤ型フラッシュメモリ（ＮＡＮＤ  Ｆｌａｓｈ  Ｍｅｍｏｒｙ）が各種の電子機器に搭載されるようになってきている。このＮＡＮＤ型フラッシュメモリは、ＮＯＲ型フラッシュメモリ（ＮＯＲ  Ｆｌａｓｈ  Ｍｅｍｏｒｙ）と比較し、記憶セル中に不良（不良セル）が発生する確率が高いという特性を有している。ＮＡＮＤ型フラッシュメモリにプログラムが格納されている場合には、プログラムの読み出し時に記憶されていたデータ値が誤った値で読み出されることがあるため、誤り検出及び訂正が付随して行われることが一般的である。なお、この場合、各種の装置でＣＰＵが最初に実行するブートコードについては、誤り検出及び訂正の実行に必要なプログラム自体をも含んでいるため、自己のブートコードについての誤りを訂正することができないという実情がある。
【０００３】
このような理由から、ＣＰＵが最初に実行するブートコードについては、上述したＮＯＲ型フラッシュメモリ等の比較的信頼度の高い不揮発性メモリに格納することが行われている。また、ブートコード以外の基本ソフトウェアや応用ソフトウェア等のプログラム部分についてもＮＯＲ型フラッシュメモリに格納されることが好ましいが、記憶容量あたりのコストが高額となるため、圧縮した状態でＮＯＲ型フラッシュメモリに格納されることが多い。なお、プログラム部分については比較的大容量となるため、所定の形式で圧縮された状態で格納されることが一般的である。そのため、ブートコード実行後に圧縮されたプログラムを揮発性メモリ（主記憶装置）にコピーした後、主記憶装置上に伸長して実行するという形態が採用されている。
【０００４】
一方、メモリの状態をイメージ化したスナップショットを保持しておき、このスナップショットをメモリの元の位置に展開しなおすことで、当該メモリの状態をスナップショット取得時の状態に復元する技術が知られている。例えば、特許文献１には、パーティション、ファイル、ディレクトリ単位でのスナップショットの取得方法について開示されている。また、ハイバネーションと呼ばれる技術では、主記憶装置の状態を丸ごとイメージ化したスナップショットをハードディスク等に保持することで、省電力モード等の休止状態から復帰する際の起動の高速化が行われている。
【０００５】
【特許文献１】特開２００４−１７８２８９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、主記憶装置の状態をイメージ化したスナップショットには、スナップショット取得時に実行していた基本ソフトウェアや応用ソフトウェア等の実行単位（プロセス、アプリケーション）が含まれることになる。この場合、上述した従来の技術では、主記憶装置の状態が丸ごとイメージ化されているため、自己の装置の起動に必要なプログラム以外の応用ソフトウェア等の実行単位についても復元が完了するまで待機しなければならないという問題がある。なお、特許文献１に記載のスナップショット取得方法では、主記憶装置に適用することはできない。
【０００７】
本発明は、上記に鑑みてなされたものであって、スナップショットからの起動をより高速に行うことが可能な情報処理装置、情報処理装置の起動制御方法、プログラム及び記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、請求項１にかかる発明は、自己の装置の起動に必要なプログラムを少なくとも記憶するプログラム記憶手段と、揮発性の主記憶手段と、前記プログラム記憶手段に記憶されたプログラムを実行し、当該プログラムにより実現される各機能の実行単位を前記主記憶手段に展開する制御手段と、休止状態への移行を指示する指示信号に応じ、前記主記憶手段の状態をイメージ化したスナップショットを前記実行単位毎に取得する取得手段と、不揮発性のスナップ記憶手段と、前記取得手段により取得されたスナップショットを前記スナップ記憶手段に格納した後、自己の装置の電源をオフとする休止手段と、前記休止状態からの復帰を指示する指示信号に応じて自己の装置の電源をオンとし、前記スナップ記憶手段に記憶されたスナップショットのうち、前記自己の装置の起動に必要なプログラムにかかる実行単位のスナップショットから優先的に前記主記憶手段に復元する復元手段と、を備えたことを特徴とする。
【０００９】
また、請求項２にかかる発明は、請求項１にかかる発明において、前記プログラム記憶手段は、基本ソフトウェアを少なくとも含む自己の装置の起動に必要な第１プログラムと、当該第１プログラム以外の応用ソフトウェアを含む第２プログラムとを記憶し、前記制御手段は、前記基本ソフトウェアの実行単位となるプロセスと、当該基本ソフトウェア以外の特定の用途に特化したプログラム実行時の実行単位となるアプリケーションとを前記主記憶手段に展開し、前記取得手段は、前記プロセス及びアプリケーションの単位でスナップショットを取得し、前記復元手段は、前記スナップ記憶手段に記憶されたスナップショットのうち、前記第１プログラムにかかるプロセス又はアプリケーションのスナップショットから優先的に前記主記憶手段に復元することを特徴とする。
【００１０】
また、請求項３にかかる発明は、請求項２にかかる発明において、前記休止手段は、前記取得手段により取得されたスナップショットのうち、前記第１プログラムにかかるプロセス又はアプリケーションのスナップショットから優先的に前記スナップ記憶手段に格納し、前記復元手段は、前記スナップ記憶手段に記憶された順に前記スナップショットを前記主記憶手段に復元することを特徴とする。
【００１１】
また、請求項４にかかる発明は、請求項２にかかる発明において、前記休止手段は、前記取得手段により取得された各スナップショットに対し、自己の装置の起動に必要なプロセス又はアプリケーションにかかるものか否かを識別するための識別情報を夫々付与し、前記復元手段は、前記スナップ記憶手段に記憶されたスナップショットのうち、自己の装置の起動に必要なプロセス又はアプリケーションであることを指示する識別情報が付与されたスナップショットから優先的に前記主記憶手段に復元することを特徴とする。
【００１２】
また、請求項５にかかる発明は、請求項２〜４の何れか一項にかかる発明において、前記第１プログラムは、ユーザインターフェースの提供にかかるプログラムを含み、前記復元手段は、前記第１プログラムにかかるスナップショットのうち、ユーザインターフェースの提供にかかる機能を実現するプロセス又はアプリケーションのスナップショットから優先的に前記主記憶手段に復元することを特徴とする。
【００１３】
また、請求項６にかかる発明は、請求項２〜５の何れか一項にかかる発明において、前記第１プログラムは、外部装置とのデータの授受にかかるプログラムを含み、前記復元手段は、前記第１プログラムにかかるスナップショットのうち、外部装置とのデータの授受にかかる機能を実現するプロセス又はアプリケーションのスナップショットから優先的に前記主記憶手段に展開することを特徴とする。
【００１４】
また、請求項７にかかる発明は、請求項２にかかる発明において、前記休止手段は、前記第１プログラムにかかるプロセス又はアプリケーションのスナップショットと、前記第２プログラムにかかるプロセス又はアプリケーションのスナップショットとを、前記スナップ記憶手段の異なる記憶領域に区分けして記憶することを特徴とする。
【００１５】
また、請求項８にかかる発明は、請求項２にかかる発明において、前記主記憶手段に展開されたプロセス及びアプリケーション毎にハッシュ値を算出するハッシュ値算出手段と、前記ハッシュ値算出手段により算出された、前記スナップショット取得前の各ハッシュ値と、前記復元手段により復元された直後の各ハッシュ値とを、同一のプロセス又はアプリケーションについて夫々照合する照合手段と、を更に備えたことを特徴とする。
【００１６】
また、請求項９にかかる発明は、請求項８にかかる発明において、前記ハッシュ値算出手段により算出された前記スナップショット取得前の各ハッシュ値を、対応するプロセス又はアプリケーションを一意に識別するための識別情報と関連付けて記憶するハッシュ値記憶手段を更に備え、前記照合手段は、前記復元手段により復元された直後の各プロセス及びアプリケーションのハッシュ値と、前記ハッシュ値記憶手段に記憶された当該各プロセス及びアプリケーションの識別情報に関連付けられたハッシュ値とを比較することを特徴とする。
【００１７】
また、請求項１０にかかる発明は、請求項８又は９にかかる発明において、前記照合手段は、前記復元手段により前記第１プログラムにかかるプロセス又はアプリケーションのスナップショットが前記主記憶手段に復元される毎に、前記ハッシュ値の比較を行うことを特徴とする。
【００１８】
また、請求項１１にかかる発明は、請求項８〜１０の何れか一項にかかる発明において、前記照合手段は、前記復元手段により前記第２プログラムにかかる全てのプロセス及びアプリケーションのスナップショットが前記主記憶手段に復元された後、当該プロセス及びアプリケーションについてのハッシュ値の比較を連続的に行うことを特徴とする。
【００１９】
また、請求項１２にかかる発明は、請求項８〜１１の何れか一項にかかる発明において、前記照合手段による照合の結果、不一致となるハッシュ値が検出された場合、エラーが発生した旨を提示する提示手段を更に備えたことを特徴とする。
【００２０】
また、請求項１３にかかる発明は、請求項８〜１２の何れか一項にかかる発明において、前記復元手段は、前記照合手段による照合の結果、不一致となるハッシュ値が検出された場合、このハッシュ値に対応する前記プロセス又はアプリケーションの実行を停止することを特徴とする。
【００２１】
また、請求項１４にかかる発明は、自己の装置の起動に必要なプログラムを少なくとも記憶するプログラム記憶手段と、揮発性の主記憶手段と、不揮発性のスナップ記憶手段とを備えた情報処理装置の起動制御方法であって、制御手段が、前記プログラム記憶手段に記憶されたプログラムを実行し、当該プログラムにより実現される各機能の実行単位を前記主記憶手段に展開する制御工程と、取得手段が、休止状態への移行を指示する指示信号に応じ、前記主記憶手段の状態をイメージ化したスナップショットを前記実行単位毎に取得する取得工程と、休止手段が、前記取得工程で取得されたスナップショットを前記スナップ記憶手段に格納した後、自己の装置の電源をオフとする休止工程と、復元手段が、前記休止状態からの復帰を指示する指示信号に応じて自己の装置の電源をオンとし、前記スナップ記憶手段に記憶されたスナップショットのうち、前記自己の装置の起動に必要なプログラムにかかる実行単位のスナップショットから優先的に前記主記憶手段に復元する復元工程と、を含むことを特徴とする。
【００２２】
また、請求項１５にかかる発明は、自己の装置の起動に必要なプログラムを少なくとも記憶するプログラム記憶手段と、揮発性の主記憶手段と、不揮発性のスナップ記憶手段とを備えたコンピュータを、前記プログラム記憶手段に記憶されたプログラムを実行し、当該プログラムにより実現される各機能の実行単位を前記主記憶手段に展開する制御手段と、休止状態への移行を指示する指示信号に応じ、前記主記憶手段の状態をイメージ化したスナップショットを前記実行単位毎に取得する取得手段と、前記取得手段により取得されたスナップショットを前記スナップ記憶手段に格納した後、自己の装置の電源をオフとする休止手段と、前記休止状態からの復帰を指示する指示信号に応じて自己の装置の電源をオンとし、前記スナップ記憶手段に記憶されたスナップショットのうち、前記自己の装置の起動に必要なプログラムにかかる実行単位のスナップショットから優先的に前記主記憶手段に復元する復元手段と、して機能させることを特徴とする。
【００２３】
また、請求項１６にかかる発明は、請求項１５に記載のプログラムが記録されていることを特徴とする。
【発明の効果】
【００２４】
本発明によれば、スナップ記憶手段に記憶されたスナップショットのうち、自己の装置の起動に必要なプログラムにかかる実行単位のスナップショットから優先的に主記憶手段に復元することができるため、スナップショットからの起動をより高速に行うことができる。
【発明を実施するための最良の形態】
【００２５】
以下に添付図面を参照して、本発明にかかる情報処理装置、情報処理装置の起動制御方法、プログラム及び記録媒体の最良な実施の形態を詳細に説明する。なお、以下の実施形態では、本発明を画像処理装置に適用した例について説明するが、これに限定されるものではなく、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）や携帯端末等の他の情報機器にも適用することが可能である。
【００２６】
［第１の実施形態］
図１は、本実施形態にかかる画像処理装置１００の構成を示したブロック図である。図１に示したように、画像処理装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２と、第１不揮発性メモリ１３と、第２不揮発性メモリ１４と、ＴＰＭ（Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ）１５と、エンジン制御部１６と、エンジン１７と、操作部１８と、表示部１９とを備えている。
【００２７】
ＣＰＵ１０は、ＲＯＭ１１及び第１不揮発性メモリ１３に記憶された所定のプログラムとの協働により、画像処理装置１００の各部を統括的に制御する。
【００２８】
具体的に、ＣＰＵ１０は、画像処理装置１００のコールドスタート時に、第１不揮発性メモリ１３に格納されたブートコードを実行することで画像処理装置１００の各部の初期化を行う。また、ＣＰＵ１０は、ブートコードの実行後、第１不揮発性メモリ１３に格納された各種のプログラムをＲＡＭ１２にコピーし実行することで、当該プログラムとの協働により画像処理装置１００の動作にかかる各種の機能を実現する。
【００２９】
また、ＣＰＵ１０は、操作部１８等を介して画像処理装置１００をスリープモードに移行させる旨の指示を受け付けると、ＲＡＭ１２の状態をプロセス及びアプリケーション単位でイメージ化したスナップショットを夫々取得し、第２不揮発性メモリ１４に格納した後、画像処理装置１００をスリープモードへと移行させる。
【００３０】
ここで「スリープモード」とは、画像処理装置１００の各部への電力供給を停止又は抑制することで画像処理装置１００の消費電力を低下させることを意味する。このとき、画像処理装置１００は停止又は休止状態となるため再度起動処理を行う必要があるが、スリープモード移行時に取得したスナップショットをＲＡＭ１２に戻すことで、このスリープモード移行直前の動作状態に復元することが可能である。なお、スナップショットの格納にかかる動作については後述する。
【００３１】
また、「プロセス」とは、基本ソフトウェアにかかる各種プログラム実行時の実行単位を意味しており、プログラム実行にかかる実行コードやプロセッサ状態（コンテキスト）、物理メモリのアドレッシング等の情報が含まれているものとする。また「アプリケーション」とは、基本ソフトウェア以外の特定の用途に特化した各種プログラム実行時の実行単位を意味し、例えば、プリンタの制御に特化したプリンタアプリや、スキャナの制御に特化したスキャナアプリ等が挙げられる。
【００３２】
また、ＣＰＵ１０は、操作部１８等を介して画像処理装置１００をスリープモードから復帰する旨の指示を受け付けると、各部への電力供給を開始した後、第２不揮発性メモリ１４に格納されたスナップショットのうち、画像処理装置１００の起動に必要なプログラムにかかるプロセス及びアプリケーションのスナップショットから優先的に読み出し、スリープモード移行前のＲＡＭ１２上での従前の位置に展開し直すことで、スリープモード移行時のメモリ状態を復元する。なお、スナップショットの読み出しにかかる動作については後述する。
【００３３】
ここで「起動に必要なプログラム」とは、例えば、基本ソフトウェア等であって、画像処理装置１００が有する機能のうち、画像処理装置１００の起動時において正常に動作することが要求された機能の実現にかかるプログラムである。なお、任意の機能を実現するプログラムを起動に必要と設定することが可能であるものとするが、ユーザインターフェースの提供や外部装置との入出力に関係する機能を実現するプログラムとすることが好ましい。また、本実施形態では、画像処理装置１００の起動に必要なプログラムが、基本プログラム１３２に含まれるものとして説明を進めるが、起動に必要なプログラムか否かを定義した情報を第１不揮発性メモリ１３に予め格納しておき、この情報に基づいて起動に必要なプログラムか否かを判定する態様としてもよい。
【００３４】
また、ＴＰＭ１５の後述する記憶部１５１（起動時検証領域１５１１）には、工場出荷時等においてＣＰＵ１０により算出された、第１不揮発性メモリ１３に記憶された各プログラムについてのハッシュ値（検証用ハッシュ値）が予め格納されている。ＣＰＵ１０は、画像処理装置１００のコールドスタート時において、第１不揮発性メモリ１３に記憶された各プログラムのハッシュ値（被検証用ハッシュ値）を算出し、ＴＰＭ１５の起動時検証領域１５１１に予め保持しておいた各プログラムについての検証用ハッシュ値と比較することで、当該各プログラムの完全性を検証する。
【００３５】
また、ＣＰＵ１０は、画像処理装置１００のスリープモードへの移行時において、ＲＡＭ１２に展開されたプロセス及びアプリケーション毎にハッシュ値（検証用ハッシュ値）を夫々算出し、当該ハッシュ値に対応するプロセス又はアプリケーションを一意に識別することが可能な識別情報と関連付けてＴＰＭ１５の後述する記憶部１５１（復帰時検証領域１５１２）に格納する。そして、ＣＰＵ１０は、スリープモードからの復帰時において、第２不揮発性メモリ１４からＲＡＭ１２に展開したスナップショットのハッシュ値（被検証用ハッシュ値）を夫々算出し、ＴＰＭ１５の復帰時検証領域１５１２に保持した各スナップショットの識別情報に対応する検証用ハッシュ値との比較を夫々行うことで、各スナップショットの完全性を検証する。
【００３６】
ここで、プロセス又はアプリケーションを一意に識別することが可能な識別情報は、特に問わないものとするが、例えば、第２不揮発性メモリ１４に格納したスナップショットの格納アドレス（先頭アドレス）や、ＲＡＭ１２上での展開先アドレス等を用いることができる。
【００３７】
ＲＯＭ１１は、読み出し専用の記憶装置であって、後述するコールドスタート処理、スリープ移行処理、スリープ復帰処理等にかかる種々のプログラムをＣＰＵ１０が読み出し可能に記憶する。
【００３８】
ＲＡＭ１２は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）やＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  ＤＲＡＭ）等の揮発性メモリであって、ＣＰＵ１０のワークエリア、即ち、画像処理装置１００の主記憶装置として機能する。
【００３９】
第１不揮発性メモリ１３は、不揮発性メモリであって、画像処理装置１００の起動にかかるブートコード１３１を記憶するとともに、基本プログラム１３２及び応用プログラム１３３を所定の圧縮形式で圧縮した状態で記憶している。ここで、基本プログラム１３２は、基本ソフトウェア等の画像処理装置１００の起動に必要なプログラム群を含み、応用プログラム１３３は、画像処理装置１００の起動に不必要な、その他のプログラム群（応用ソフトウェア）を含むものとする。なお、第１不揮発性メモリ１３は、ＮＡＮＤ型フラッシュメモリと比較し、より信頼度の高いＮＯＲ型フラッシュメモリ等の不揮発性メモリを用いることが好ましい。
【００４０】
本実施形態では、画像処理装置１００が実行するプログラムを基本ソフトウェアと応用ソフトウェアとに大別する態様としたが、これに限らず、より詳細な単位でプログラムを細分化する態様としてもよい。また、基本プログラム１３２、応用プログラム１３３の圧縮形式は特に問わないものとするが、例えば、ｚｉｐ形式やｃａｂ（ｃａｂｉｎｅｔ）形式等の汎用的な圧縮形式を用いることとしてもよい。
【００４１】
また、本実施形態では、完全性検証の精度をより高くするため、ＣＰＵ１０は、第１不揮発性メモリ１３に格納された基本プログラム１３２及び応用プログラム１３３の夫々について完全性を検証するための被検証用ハッシュ値を算出するものとするが、これに限らず、第１不揮発性メモリ１３の各プログラムに被検証ハッシュ値を予め付帯させておく態様としてもよい。
【００４２】
第２不揮発性メモリ１４は、ＮＡＮＤ型フラッシュメモリやＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等の不揮発性メモリであって、画像処理装置１００のスリープモードへの移行時において、ＣＰＵ１０から転送されるＲＡＭ１２のスナップショットを記憶する。
【００４３】
ＴＰＭ１５は、不揮発性の記憶部１５１を備え、ＣＰＵ１０の制御の下、当該ＣＰＵ１０により算出された完全性検証の為のハッシュ値を記憶する。
【００４４】
図２は、ＴＰＭ１５が備える記憶部１５１の構成を模式的に示した図である。同図に示したように、記憶部１５１は、起動時検証領域１５１１と復帰時検証領域１５１２とを有している。ここで、起動時検証領域１５１１は、コールドスタート時にＣＰＵ１０により生成された各プログラムについての被検証用ハッシュ値と比較するための検証用ハッシュ値を記憶している領域である。また、復帰時検証領域１５１２は、ＣＰＵ１０により生成された各プロセス及びアプリケーションについての検証用ハッシュ値と、当該ハッシュ値に対応するプロセス又はアプリケーションの識別情報とを関連付けて記憶する領域である。
【００４５】
図１に戻り、エンジン制御部１６は、画像処理用に特化したＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）やＣＰＵ等であって、ＣＰＵ１０の制御の下、エンジン１７の動作を制御する。エンジン１７は、スキャナ装置やプリンタ装置等であって、エンジン制御部１６の制御の下、各種の動作を行う。
【００４６】
操作部１８は、各種入力キー等を備え、ユーザから操作入力された情報を入力信号として受け付け、ＣＰＵ１０に出力する。
【００４７】
表示部１９は、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）等により構成され、ＣＰＵ１０からの表示信号に基づいて各種情報を表示する。なお、表示部１９は、操作部１８と一体的にタッチパネルを構成する態様としてもよい。
【００４８】
以下、画像処理装置１００の動作について説明する。まず、画像処理装置１００のコールドスタート時の動作について説明する。
【００４９】
図３は、画像処理装置１００のコールドスタート時において、ＣＰＵ１０により実行されるコールドスタート処理の手順を示したフローチャートである。まず前処理として図示しない主電源のオンに伴い画像処理装置１００の各部に電力が供給されると（ステップＳ１１）、ＣＰＵ１０は、第１不揮発性メモリ１３に記憶されたブートコード１３１を実行し、画像処理装置１００の各部を初期化する（ステップＳ１２）。
【００５０】
続いて、ＣＰＵ１０は、第１不揮発性メモリ１３に記憶された基本プログラム１３２及び応用プログラム１３３を順次読み出し、ＲＡＭ１２の所定の領域に夫々コピーする（ステップＳ１３、Ｓ１４）。次いで、ＣＰＵ１０は、ＲＡＭ１２にコピーした基本プログラム１３２、応用プログラム１３３を、当該ＲＡＭ１２上の所定の領域に順次伸張する（ステップＳ１５、Ｓ１６）。
【００５１】
次に、ＣＰＵ１０は、ＲＡＭ１２上に伸張した基本プログラム１３２及び応用プログラム１３３に対して起動時検証処理を実行する（ステップＳ１７）。以下、図４を参照して、ステップＳ１７の起動時検証処理を説明する。
【００５２】
図４は、起動時検証処理の手順を示したフローチャートである。まず、ＣＰＵ１０は、ステップＳ１５、Ｓ１６の処理で伸張した基本プログラム１３２及び応用プログラム１３３のハッシュ値を夫々算出すると（ステップＳ１７１）、被検証用ハッシュ値としてＲＡＭ１２に格納する（ステップＳ１７２）。
【００５３】
続いて、ＣＰＵ１０は、ＴＰＭ１５の起動時検証領域１５１１に保持されている基本プログラム１３２及び応用プログラム１３３の検証用ハッシュ値と、ＲＡＭ１２に格納した被検証用ハッシュ値とを夫々比較する（ステップＳ１７３）。ステップＳ１７５の比較により、基本プログラム１３２及び応用プログラム１３３の何れか一方又は両方のハッシュ値が異なると判定した場合（ステップＳ１７４；Ｎｏ）、ＣＰＵ１０は、完全性検証にエラーが発生したと判定し（ステップＳ１７５）、図３のステップＳ１８の処理に移行する。
【００５４】
また、ステップＳ１７３の比較により、基本プログラム１３２及び応用プログラム１３３の両ハッシュ値が一致する判定した場合（ステップＳ１７４；Ｙｅｓ）、ＣＰＵ１０は、完全性検証が正常に終了したと判定し（ステップＳ１７６）、図３のステップＳ１８の処理に移行する。
【００５５】
このように、画像処理装置１００のコールドスタート時において、ＣＰＵ１０により、基本プログラム１３２及び応用プログラム１３３の完全性を検証することで、データの破損したプログラムや不正なプログラムが実行されてしまうことを未然に防ぐことが可能となるため、画像処理装置１００の安全性をより向上させることができる。
【００５６】
図３に戻り、ＣＰＵ１０は、ステップＳ１７の起動時検証処理の結果に基づき、当該起動時検証処理が正常に終了したか否かを判定する（ステップＳ１８）。ここで、起動時検証処理にエラーが発生したと判定した場合（ステップＳ１８；Ｎｏ）ＣＰＵ１０は、表示部１９にエラーが発生した旨の情報を表示した後（ステップＳ１９）、本処理を終了する。
【００５７】
一方、ステップＳ１８において、起動時検証処理が成功したと判定した場合（ステップＳ１８；Ｙｅｓ）、ＣＰＵ１０は、ＲＡＭ１２上に伸張した基本プログラム１３２及び応用プログラム１３３を実行し（ステップＳ２０）、本処理を終了する。
【００５８】
図５は、コールドスタート処理時における第１不揮発性メモリ１３とＲＡＭ１２との状態を模式的に示した図である。ＣＰＵ１０は、第１不揮発性メモリ１３に記憶されたブートコード１３１を実行すると（図中（１）参照）、ステップＳ１３、Ｓ１４の処理において、当該第１不揮発性メモリ１３に記憶された基本プログラム１３２と応用プログラム１３３とをＲＡＭ１２にコピーする（図中（２）、（３）参照）。
【００５９】
続いて、ＣＰＵ１０は、ステップＳ１５、Ｓ１６の処理でＲＡＭ１２にコピーした基本プログラム１３２、応用プログラム１３３を伸張し、ＲＡＭ１２上に展開する（図中（４）、（５）参照）。そして、ＣＰＵ１０は、各プログラムのハッシュ値を算出すると、ＴＰＭ１５の起動時検証領域１５１１に格納されているハッシュ値に基づいて、ステップＳ１７の起動時検証処理を実行する（図中（６）参照）。
【００６０】
起動時検証処理の後、ＣＰＵ１０により基本プログラム１３２及び応用プログラム１３３が実行されると、各種のアプリケーションやプロセス実行用の領域がＲＡＭ１２内に動的に確保される。図６は、基本プログラム１３２及び応用プログラム１３３の実行後、画像処理装置１００の動作時におけるＲＡＭ１２の状態の一例を模式的に示した図である。同図に示したように、ＣＰＵ１０により複数のアプリケーションやプロセスの実行に必要なデータがＲＡＭ１２に展開されることになる。
【００６１】
次に、図７を参照して、画像処理装置１００がスリープモードに移行する際の動作について説明する。なお、スリープモード移行の指示は、操作部１８を介してユーザから明示的に指示される態様としてもよいし、画像処理装置１００の無動作状態が所定時間続いた際にＣＰＵ１０が自発的に移行させる態様としてもよい。
【００６２】
図７は、スリープモード移行時において、ＣＰＵ１０により実行されるスリープ移行処理の手順を示したフローチャートである。まず、ＣＰＵ１０は、操作部１８等を介してスリープモードへの移行を指示する要求を受け付けると（ステップＳ３１）、ＲＡＭ１２に展開されたプロセス及びアプリケーションのうち一つを処理対象として選択する（ステップＳ３２）。ここで、処理対象のプロセス又はアプリケーションは、ＲＡＭ１２での格納順序、即ち格納アドレスの昇順に順次選択されるものとする。
【００６３】
次いで、ＣＰＵ１０は、処理対象のプロセス又はアプリケーションのＲＡＭ１２上での格納位置を示す先頭アドレスを、後述するスリープモード復帰処理時の展開先アドレスとして取得する（ステップＳ３３）。次に、ＣＰＵ１０は、処理対象のプロセス又はアプリケーションが、画像処理装置１００の起動に必要なプログラムにかかるものか否かを判定する（ステップＳ３４）。なお、起動に必要なものか否かの判定は、そのプロセス又はアプリケーションが、プログラム１３２にかかるものか否かにより行うものとする。
【００６４】
ステップＳ３４において、処理対象のプロセス又はアプリケーションが画像処理装置１００の起動に必要と判定した場合（ステップＳ３４；Ｙｅｓ）、ＣＰＵ１０は、処理対象のプロセス又はアプリケーションをイメージ化したスナップショットをＲＡＭ１２から取得し、第２不揮発性メモリ１４の第１格納領域１４１に格納する（ステップＳ３５）。
【００６５】
一方、ステップＳ３３において処理対象のプロセス又はアプリケーションが、画像処理装置１００の起動に必要ではないと判定した場合（ステップＳ３３；Ｎｏ）、ＣＰＵ１０は、処理対象のプロセス又はアプリケーションをイメージ化したスナップショットをＲＡＭ１２から取得し、第２不揮発性メモリ１４の第２格納領域１４２に格納する（ステップＳ３６）。
【００６６】
なお、上述した第１格納領域１４１及び第２格納領域１４２は、起動に必要なプログラムにかかるプロセス及びアプリケーションのスナップショットか否かを区分けするため、ＣＰＵ１０により第２不揮発性メモリ１４上に固定的又は動的に確保された記憶領域である。
【００６７】
続いて、ＣＰＵ１０は、ステップＳ３３で取得した展開先アドレスを、ステップＳ３５又はＳ３６で格納したスナップショットと関連付けて、第２不揮発性メモリ１４に格納する（ステップＳ３７）。なお、本実施形態では、展開先アドレスを第２不揮発性メモリ１４に格納する態様としたが、これに限らず、記憶部１５１に格納する態様としてもよい。
【００６８】
ここで、図８、９を参照して、ステップＳ３５、Ｓ３６で、スナップショットが第２不揮発性メモリ１４に格納される際の動作について説明する。
【００６９】
図８は、ステップＳ３５及びステップＳ３６でのスナップショットの格納にかかる動作を模式的に示した図である。同図において、図中左図がＲＡＭ１２のメモリ状態を示しており、右図が第２不揮発性メモリ１４のメモリ状態を示している。また、ハッチングを施したプロセス１〜４及びアプリケーション１は画像処理装置１００の起動に必要なプログラムにかかるプロセス及びアプリケーションを示しており、プロセス５、６及びアプリケーション２、３、ｎ（ｎは１、２、３以外の任意の整数）は画像処理装置１００の起動に不必要なプログラムにかかるプロセス及びアプリケーションを示している。
【００７０】
上記の条件のとき、ＣＰＵ１０は、プロセス１〜４及びアプリケーション１のスナップショットを第２不揮発性メモリ１４の第１格納領域１４１に格納する（実線矢印参照）。また、ＣＰＵ１０は、プロセス５、６及びアプリケーション２、３、ｎのスナップショットを第２不揮発性メモリ１４の第２格納領域１４２に格納する（破線矢印参照）。
【００７１】
なお、起動に必須なデータか否かを示す情報を各スナップショットに関連付けて記憶するような場合には、この関連付けられた情報に基づいて、起動に必須なデータか否かを判定することができる。そのため、このような態様の場合には、第１格納領域１４１、第２格納領域１４２といった領域分けを行わないこととしてもよい。
【００７２】
図９は、スナップショットが格納された第２不揮発性メモリ１４の状態を模式的に示した図である。同図において、ページ１からページｍ（ｍは整数）は、第２不揮発性メモリ１４の記憶単位となる各ページ領域を示している。なお、ここではページ１〜６を第１格納領域１４１としており、ページ７〜ｍを第２格納領域１４２としているが、この態様に限らないものとする。
【００７３】
ここで、ＣＰＵ１０は、各スナップショットを第２不揮発性メモリ１４に格納する際、ページ番号の昇順にスナップショットを順次格納し、格納後のページに余り領域が生じた場合には、この余り領域に次のスナップショットが収まるときのみ、次のスナップショットを同一のページ内に格納する。
【００７４】
図９の例では、プロセス１のスナップショットが３ページ分にまたがるサイズとなっているため、第２不揮発性メモリ１４のページ１〜３に格納されているが、ページ３の余り領域にプロセス２のスナップショットが収まらないため、余り領域は空の状態となっている。そして、続くページ４にプロセス２のスナップショットが格納された後、その余り領域にプロセス３のスナップショットが収まるため、ページ４にプロセス３が格納されている。また、アプリケーション１のスナップショットと、プロセス４のスナップショットとは同一ページ内に収まるサイズではないため、夫々ページ５、６に個別に格納されている。なお、第２格納領域１４２についても、第１格納領域１４１と同様の制御によりスナップショットが順次格納される。
【００７５】
このように、第２不揮発性メモリ１４の記憶の単位となるページに基づいて、スナップショットを順次格納することで、第２不揮発性メモリ１４から各スナップショットの読み出しをより効率的且つ高速に行うことができるため、スリープモードからの復帰をより高速に行うことが可能となる。
【００７６】
なお、第２不揮発性メモリ１４への展開先アドレスの格納方法は種々の形態が可能である。例えば、スナップショットの格納位置の前段（或いは後段）に、このスナップショットの展開先アドレスを格納することで、対となるスナップショットと展開先アドレスとを関連付ける態様としてもよい。
【００７７】
また、図１０に示したように、展開先アドレスと、この展開先アドレスと対応するスナップショットの第２不揮発性メモリ１４での格納アドレスと、当該スナップショットのサイズとを対応付けたテーブルを生成し、第２不揮発性メモリ１４の所定の領域に格納する態様としてもよい。この場合、図１０に示したように、各プロセス及びアプリケーションの単位でテーブルを生成する態様としてもよいが、ＲＡＭ１２での展開先と、第２不揮発性メモリ１４での格納先とが連続したアドレス空間である場合には、複数のプロセスやアプリケーションを一纏めにした単位でテーブルを生成する態様としてもよい。
【００７８】
図７に戻り、ＣＰＵ１０は、処理対象のプロセス又はアプリケーションについてのハッシュ値を算出すると（ステップＳ３８）、後述するスリープモード復帰処理時の検証用ハッシュ値として処理対象のプロセス又はアプリケーションの識別情報と関連付けてＴＰＭ１５の記憶部１５１（復帰時検証領域１５１２）に格納する（ステップＳ３９）。
【００７９】
次いで、ＣＰＵ１０は、ＲＡＭ１２に展開されたプロセス及びアプリケーションの全てを処理対象としたか否かを判定する（ステップＳ４０）。ここで、ＣＰＵ１０は、未処理のプロセス又はアプリケーションが存在すると判定した場合（ステップＳ４０；Ｎｏ）、ステップＳ３２へと再び戻り未処理のプロセス又はアプリケーションを処理対象とする。
【００８０】
一方、ステップＳ４０において、現在稼働中のプロセス、アプリケーションの全てを処理対象としたと判定した場合には（ステップＳ４０；Ｙｅｓ）、ＣＰＵ１０は、図示しない電源供給ユニットを制御することで各部への電力供給を停止又は抑制し（ステップＳ４１）、本処理を終了する。
【００８１】
図１１は、スリープモード移行後の画像処理装置１００への電力供給状態を模式的に示した図である。同図において、ハッチングを施した機能部は、電力供給の停止又は抑制が行われた機能を意味している。ここで、ＲＡＭ１２への電力供給が停止又は抑制されるため、ＲＡＭ１２上に展開されたデータは消去されることになる。なお、電源供給を停止又は抑制する機能部の個数や種別は、図１１の例に限らないものとする。
【００８２】
次に、画像処理装置１００がスリープモードから復帰する際の動作について説明する。図１２は、スリープモードからの復帰時にＣＰＵ１０により実行されるスリープモード復帰処理の手順を示したフローチャートである。
【００８３】
まず、ＣＰＵ１０は、操作部１８や図示しない復帰指示用の電源スイッチ等を介して、スリープ状態からの復帰を指示する信号を受け付けると、図示しない電源供給ユニットを制御することで、画像処理装置１００の各部へ電力の供給を開始し（ステップＳ５１）、第１不揮発性メモリ１３に記憶されたブートコード１３１を実行することで、画像処理装置１００の各部を初期化する（ステップＳ５２）。
【００８４】
次いで、ＣＰＵ１０は、第２不揮発性メモリ１４の第１格納領域１４１からページ番号の昇順で、スナップショットの一つを読み出すと（ステップＳ５３）、このスナップショットを当該スナップショットに関連付けられた展開先アドレスが示すＲＡＭ１２上の領域に展開する（ステップＳ５４）。ここで、ＲＡＭ１２に展開されたスナップショット、即ち、一のプロセス又はアプリケーションは、スリープモード移行直前のＲＡＭ１２での格納位置と同一であるため、スリープモード移行直前の状態が復元されたことになる。
【００８５】
続いて、ＣＰＵ１０は、ステップＳ５４でＲＡＭ１２上に展開したプロセス又はアプリケーションの完全性を検証する復帰時検証処理を実行する（ステップＳ５５）。以下、図１３を参照して、ステップＳ５５の復帰時検証処理について説明する。
【００８６】
図１３は、復帰時検証処理の手順を示したフローチャートである。まず、ＣＰＵ１０は、今回のステップＳ５４の処理でＲＡＭ１２に展開したプロセス又はアプリケーションのハッシュ値を算出する（ステップＳ５５１）。
【００８７】
次いで、ＣＰＵ１０は、ステップＳ５４で展開したプロセス又はアプリケーションの識別情報に基づいて、当該識別情報に関連付けられた検証用ハッシュ値を、ＴＰＭ１５の記憶部１５１（復帰時検証領域１５１２）から読み出すと（ステップＳ５５２）、ステップＳ５５１で算出したハッシュ値との比較を行う（ステップＳ５５３）。ここで、両ハッシュ値が異なると判定した場合（ステップＳ５５４；Ｎｏ）、ＣＰＵ１０は、完全性検証にエラーが発生したと判定し（ステップＳ５５５）、図１２のステップＳ５６の処理に移行する。
【００８８】
一方、両ハッシュ値が一致すると判定した場合（ステップＳ５５４；Ｙｅｓ）、ＣＰＵ１０は、完全性検証が正常に終了したと判定し（ステップＳ５５６）、図１２のステップＳ５６の処理に移行する。
【００８９】
このように、画像処理装置１００のスリープモードからの復帰時において、ＣＰＵ１０により、各スナップショットの完全性を検証することで、データに破損が生じたスナップショットや不正なスナップショットが実行されてしまうことを未然に防ぐことが可能となるため、画像処理装置１００の安全性をより向上させることができる。
【００９０】
図１２に戻り、ＣＰＵ１０は、ステップＳ５５の復帰時検証処理の結果に基づき、当該復帰時検証処理が正常に終了したか否かを判定する（ステップＳ５６）。ここで、復帰時検証処理にエラーが発生したと判定した場合（ステップＳ５６；Ｎｏ）ＣＰＵ１０は、表示部１９にエラーが発生した旨の情報を表示した後（ステップＳ５７）、コールドスタート処理を実行することで画像処理装置１００を再起動し（ステップＳ５８）、本処理を終了する。なお、ステップＳ５８のコールドスタート処理は、上述した図３のコールドスタート処理と同様であるため説明は省略する。
【００９１】
このように、画像処理装置１００の起動に必要なプログラムにかかるプロセス又はアプリケーションの完全性にエラーが発生した場合には、再起動を行うことで画像処理装置１００を正常な状態とすることができる。なお、本処理では、ステップＳ５６においてエラー発生と判定した場合には、再起動を行う態様としたが、これに限らず、例えば、ステップＳ５７で処理を終了し、ユーザが手動で再起動を行う態様としてもよい。
【００９２】
一方、ステップＳ５６において、復帰時検証処理が正常に終了したと判定した場合（ステップＳ５６；Ｙｅｓ）、ＣＰＵ１０は、第２不揮発性メモリ１４の第１格納領域１４１に格納された全てのスナップショットを読み出したか否かを判定する（ステップＳ５９）。ここで、ＣＰＵ１０が未処理のスナップショットが存在すると判定した場合には（ステップＳ５９；Ｎｏ）、ステップＳ５３の処理へと再び戻り未処理のスナップショットを一つ読み出す。
【００９３】
また、ステップＳ５９において、ＣＰＵ１０が、全てのスナップショットを読み出したと判定した場合には（ステップＳ５９；Ｙｅｓ）、続くステップＳ６０の処理へと移行する。
【００９４】
ここまでの処理で、画像処理装置１００の起動に必要なプログラムにかかる全てのプロセス及びアプリケーションが、スリープモード移行直前の状態に復元され（図８参照）、画像処理装置１００は起動完了状態となる。即ち、第２不揮発性メモリ１４に記憶されたプロセス及びアプリケーション単位のスナップショットにおいて、画像処理装置１００の起動に必要なプログラムにかかるプロセス及びアプリケーションのスナップショットから優先的にＲＡＭ１２に復元される。
【００９５】
例えば、ユーザインターフェースの提供や外部装置との入出力に関係する機能を実現するプログラムを、画像処理装置１００の起動に必要なプログラムとしていた場合、ユーザは、この時点で操作部１８を操作することが可能となり、また、外部装置との入出力を行うことが可能となる。このように、ユーザや他の装置との遣り取りにかかる機能を優先的に起動することで、指示情報等を受け付ける間に残りのスナップショットの復元を進めることが可能となるため、ユーザの利便性を向上させることができる。
【００９６】
続いて、ＣＰＵ１０は、第２不揮発性メモリ１４の第２格納領域１４２から一のプロセス又はアプリに対応するスナップショットをページ番号の昇順で一つ読み出すと（ステップＳ６０）、このスナップショットを当該スナップショットに関連付けられた展開先アドレスが示すＲＡＭ１２上の領域に展開する（ステップＳ６１）。
【００９７】
次いで、ＣＰＵ１０は、第２不揮発性メモリ１４の第２格納領域１４２に格納された全てのスナップショットを読み出したか否かを判定する（ステップＳ６２）。ここで、ＣＰＵ１０が、第２格納領域１４２に読み出していないスナップショットが存在すると判定した場合には（ステップＳ６２；Ｎｏ）、ステップＳ６０へと再び戻り、読み出しが完了していないスナップショットを一つ読み出す。
【００９８】
また、ステップＳ６２において、第２格納領域１４２に格納された全てのスナップショットを読み出したと判定した場合（ステップＳ６２；Ｙｅｓ）、ＣＰＵ１０は、ステップＳ６１で展開された各スナップショットについて、復帰時検証処理を実行する（ステップＳ６３）。なお、ステップＳ６３の復帰時検証処理は、上述したステップＳ５５の復帰時検証処理をステップＳ６１で展開した各プロセス及びアプリケーションに対して連続的に実行するのみであるため、説明を省略する。
【００９９】
続いて、ＣＰＵ１０は、ステップＳ６１で展開した全てのプロセス及びアプリケーションについて、ステップＳ６３の復帰時検証処理が正常に終了したか否かを判定する（ステップＳ６４）。ここで、ＣＰＵ１０は、全てのプロセス及びアプリケーションについての復帰時検証処理が正常に終了したと判定すると（ステップＳ６４；Ｙｅｓ）、本処理を終了する。
【０１００】
一方、ステップＳ６４において、何れかのプロセス及び／又はアプリケーションについての復帰時検証処理にエラーが生じたと判定した場合（ステップＳ６４；Ｎｏ）、ＣＰＵ１０は、エラーが発生したプロセス及び／又はアプリケーションを示すための情報を表示部１９に表示し、エラーが発生したプロセス及び／又はアプリケーションを停止した後（ステップＳ６５）、本処理を終了する。
【０１０１】
図１４は、スリープモード復帰処理時における第１不揮発性メモリ１３と、第２不揮発性メモリ１４と、ＲＡＭ１２との状態を模式的に示した図である。まず、ＣＰＵ１０は、第１不揮発性メモリ１３に記憶されたブートコード１３１を実行すると（図中（１）参照）、ステップＳ５３、Ｓ５４の処理において、第２不揮発性メモリ１４の第１格納領域１４１に記憶されたスナップショットをＲＡＭ１２に個別的に復元する（図中（２）参照）。
【０１０２】
続いて、ＣＰＵ１０は、ステップＳ５５において、ステップＳ５３、Ｓ５４の処理でＲＡＭ１２に復元したスナップショット（プロセス又はアプリケーション）に対し、復帰時検証処理を個別的に実行する（図中（３）参照）。
【０１０３】
ＣＰＵ１０は、ステップＳ５６→Ｓ５９の判定処理において、ステップＳ５５の復帰時検証処理が正常に終了したことを確認すると、続くステップＳ６０〜Ｓ６２で、第２不揮発性メモリ１４の第２格納領域１４２に記憶された全てのスナップショットをＲＡＭ１２に復元する（図中（４）参照）。
【０１０４】
続いて、ＣＰＵ１０は、ステップＳ６３において、ステップＳ６０〜Ｓ６２の処理でＲＡＭ１２に復元した全てのスナップショット（プロセス又はアプリケーション）に対し、ステップＳ６２の復帰時検証処理を連続的に実行する（図中（５）参照）。そしてＣＰＵ１０は、ステップＳ６３の判定処理において、復帰時検証処理でエラーが発生したプロセス及び／又はアプリケーションの実行を停止する。
【０１０５】
画像処理装置１００の起動に不必要なプロセス又はアプリケーションの完全性にエラーが発生した場合であっても、使用するアプリケーションによっては画像処理装置１００の動作に支障が生じない場合がある。そのため、本処理では、画像処理装置１００の起動に不必要なプロセス又はアプリケーションの完全性にエラーが発生した場合であっても、再起動を行わず画像処理装置１００の動作を継続する態様としている。なお、画像処理装置１００の起動に必要なプログラムにかかるプロセス又はアプリケーションの場合と同様に、再起動（コールドスタート処理）を行う態様としてもよい。
【０１０６】
また、本処理では、第２不揮発性メモリ１４の第２格納領域１４２に格納された全てのスナップショット、即ち、画像処理装置１００の起動に不必要なプロセス及びアプリケーションについては、ＲＡＭ１２に全て展開した後、完全性検証を連続的に行うこととしたが、完全性検証を行うタイミングはこれに限らないものとする。例えば、第１格納領域１４１に格納されたスナップショット、即ち、画像処理装置１００の起動に必須のプロセス、アプリケーションと同様、スナップショットの展開毎に完全性検証を行う態様としてもよい。
【０１０７】
一般的に完全性検証に要する時間は検証対象のデータが増えるほど長くなる傾向にある。そこで、画像処理装置１００の起動に必須のプロセス及びアプリケーションのスナップショットをＲＡＭ１２に展開し起動完了状態となった後に、ユーザからの操作やネットワークやＵＳＢ等の各種Ｉ／Ｆからの指示により、画像処理装置１００の起動に不必須のプロセス、アプリケーションの完全性検証を行う態様としてもよい。この場合、特定のプロセス及び／又はアプリケーションが選択された場合には、この選択されたプロセス及び／又はアプリケーションについてのみ完全性の検証を行う態様としてもよい。
【０１０８】
また、本処理では、画像処理装置１００の起動に必要なプログラムにかかるプロセス、アプリケーションを復元した後、画像処理装置１００の起動に不必要なプログラムにかかるプロセス、アプリケーションを復元する処理を行う態様としたが、これに限らないものとする。例えば、画像処理装置１００の起動に不必要なプログラムにかかるプロセス、アプリケーションについては、画像処理装置１００の起動に必要なプログラムにかかるプロセス、アプリケーションを復元した後、操作部１８を介して起動が指示された場合に該当するプロセス又はアプリケーションの復元を個別に行う態様としてもよい。
【０１０９】
以上のように、本実施形態によれば、第２不揮発性メモリ１４に記憶されたスナップショットのうち、自己の装置の起動に必要なプログラムにかかる実行単位（プロセス及び／又はアプリケーション）のスナップショットから優先的にＲＡＭ１２に復元することができるため、スナップショットからの起動をより高速に行うことができる。
【０１１０】
なお、第２不揮発性メモリ１４をＮＡＮＤ型フラッシュメモリとした場合、第２不揮発性メモリ１４の各ページはデータ格納領域と、誤り訂正符号（以下、ＥＣＣという）格納用の冗長領域とから構成されるため、この構成に応じた制御が必要となる。以下、第１の実施形態の変形例１として、第２不揮発性メモリ１４をＮＡＮＤ型フラッシュメモリとした場合の動作について説明する。なお、上述した第１の実施形態と同様の構成については、同一の符号を付与しその説明を省略する。
【０１１１】
［変形例］
図１５は、第１の実施形態の変形例にかかる画像処理装置２００の構成を示した図である。同図に示したように、画像処理装置２００は、ＣＰＵ２０と、ＲＯＭ１１、ＲＡＭ１２と、第１不揮発性メモリ１３と、第２不揮発性メモリ２１と、ＴＰＭ１５と、エンジン制御部１６と、エンジン１７と、操作部１８と、表示部１９とを備えている。
【０１１２】
第２不揮発性メモリ２１は、上述した第２不揮発性メモリ１４に対応するものであって、ＮＡＮＤフラッシュメモリから構成されている。ＮＡＮＤフラッシュメモリを用いた場合、第２不揮発性メモリ２１の記憶単位となる各ページ領域は、図１６に示したようにデータ格納領域２１１と冗長領域２１２とから構成される。
【０１１３】
ＣＰＵ２０は、ＣＰＵ１０と同様に画像処理装置２００のスリープモード移行時に、ＲＡＭ１２に展開されているプロセス及び／又はアプリケーションを、画像処理装置２００の起動に必須か否かに応じて、第２不揮発性メモリ２１のデータ格納領域２１１と冗長領域２１２とに区分けして格納する。このとき、ＣＰＵ２０は、データ格納領域２１１にスナップショットを格納するとともに、このスナップショットについて算出した誤り訂正符号（以下、ＥＣＣという）を冗長領域２１２に格納する。
【０１１４】
なお、スナップショットが複数のページにわたるような場合、ＣＰＵ２０は、ページ毎にＥＣＣを算出し、対応するページの冗長領域２１２に夫々格納する。また、同一ページに複数のスナップショットを格納する場合、ＣＰＵ２０は、これら複数のスナップショット分のＥＣＣを纏めて算出する態様としてもよいし、個別に算出する態様としてもよい。
【０１１５】
第２不揮発性メモリ２１に接続される図示しないコントローラに、例えばＤＭＡコントローラが搭載されている場合、このＤＭＡコントローラを用いてスナップショットがＲＡＭ１２に転送される。ここで、ＤＭＡコントローラがＮＡＮＤフラッシュメモリ専用である場合には、冗長領域２１２に格納されたＥＣＣがＲＡＭ１２に転送されることはないが、汎用のＤＭＡコントローラや汎用の制御装置により転送を行う場合、データ格納領域２１１とともに冗長領域２１２を読み出さないと正常な動作が行えないため、冗長領域２１２に格納されたＥＣＣもＲＡＭ１２に転送することになる。
【０１１６】
しかしながら、スナップショットとそのＥＣＣをそのままＲＡＭ１２に転送していくと、第２不揮発性メモリ２１上に格納されていたとおりの配置でＲＡＭ１２に転送されてしまうため、スナップショット→ＥＣＣ→スナップショット→ＥＣＣという順番となり、ＲＡＭ１２に展開されたスナップショット間に間隔が生じる。この場合、スリープモード移行前のデータ配置と同じとならないため、正常に復帰することができない。なお、スナップショットは元々がプログラムであるため、そのデータ配置の間隔を加味してコンパイルを行うことで対応する方策も考えられるが、ＲＡＭ１２のプロセス、アプリケーションの状態は一様でないため、プログラムの配置アドレスを事前に制御することは不可能である。
【０１１７】
そこで、ＣＰＵ２０は、第２不揮発性メモリ２１からスナップショットとＥＣＣとをページ毎に読み出すと、図１７に示したように、このスナップショットの展開先アドレスに基づいて当該スナップショットとＥＣＣとをＲＡＭ１２に展開した後、ＲＡＭ１２に予め確保したＥＣＣ専用の格納領域（ＥＣＣ格納領域１２１）にＥＣＣのみを移動する。なお、スナップショットが複数のページにわたって格納されている場合には、先に転送されたスナップショットの最終アドレスに連続するアドレス位置から、次ぎのスナップショットとＥＣＣとの組を格納した後、このＥＣＣをＥＣＣ格納領域１２１に移動する。なお、ＥＣＣは連続的にＥＣＣ格納領域１２１に格納されるものとする。
【０１１８】
ＣＰＵ２０は、上記の動作を繰り返すことで、図１６に示した第２不揮発性メモリ２１の各スナップショット及びＥＣＣを、図１７に示したように、スナップショット１〜ｍ＋ｎと、ＥＣＣ１〜ｍ＋ｎとを夫々分離した状態でＲＡＭ１２に格納する（ｍ、ｎは整数）。なお、スナップショット１〜ｍ＋ｎまでの誤り訂正を行う場合には、ＥＣＣ１の開始アドレスと何個目のスナップショットか分かっていれば、容易にそのスナップショットの誤り訂正を行うことが可能となる。
【０１１９】
このとき、画像処理装置２００に誤り訂正符号の復号回路が搭載されていないのであれば、ＣＰＵ２０は、第２不揮発性メモリ２１から誤り訂正用のシンドローム生成を行いながらＲＡＭ１２に転送し、このシンドロームとＥＣＣとに基づいてＲＡＭ１２に格納したスナップショットの誤りの検出及び訂正を行う。なお、誤りの検出及び訂正は、ＥＣＣ格納領域１２１にＥＣＣが移動された後に行うものとするが、そのタイミングは特に問わないものとする。例えば、スナップショットの格納毎としてもよいし、画像処理装置２００の起動に必須又は不必須な全てのスナップショットを格納したタイミングで、行う態様としてもよい。
【０１２０】
また、画像処理装置２００が、誤り訂正符号の復号回路を搭載している場合には、この復号回路により、第２不揮発性メモリ２１に先に格納したスナップショットの誤り訂正が実施された後に、次のスナップショットの第２不揮発性メモリ２１への転送が行われるものとする。
【０１２１】
なお、スナップショット１〜ｍ＋ｎの誤り訂正が完了した後には、ＥＣＣ１〜ｍ＋ｎは不必要となるため、ＲＡＭ１２の一部をＥＣＣ格納領域１２１として占有しておくのは無駄である。そこで、ＣＰＵ２０は、誤り訂正の終了を確認すると、ＥＣＣを削除することでＥＣＣ格納領域１２１を他のデータを格納可能な使用可能状態とする。なお、ＥＣＣの削除は、スナップショット単位で行う態様としてもよいし、画像処理装置２００の起動に必須又は不必須な全てのスナップショットの誤り訂正が終了した際に行う態様としてもよい。
【０１２２】
［第２の実施形態］
第２の実施形態では、スナップショットの保持の仕方について他の態様を説明する。なお、上述した第１の実施形態と同様の構成については、同一の符号を付与しその説明を省略する。
【０１２３】
図１８は、第２の実施形態にかかる画像処理装置３００のハードウェア構成を示したブロック図である。図１８に示したように、画像処理装置３００は、ＣＰＵ３０と、ＲＯＭ１１と、ＲＡＭ１２と、第１不揮発性メモリ１３と、第２不揮発性メモリ１４と、ＴＰＭ１５と、エンジン制御部１６と、エンジン１７と、操作部１８とを備えている。
【０１２４】
ＣＰＵ３０は、上述したＣＰＵ１０と同様の機能を有するとともに、操作部１８を介して画像処理装置１００をスリープモードに移行させる旨の指示を受け付けると、ＲＡＭ１２に展開されたプロセス及びアプリケーション単位でイメージ化し、これらスナップショットをＲＡＭ１２と同様の順序（状態）で第２不揮発性メモリ１４に格納する。このとき、ＣＰＵ３０は、各スナップショットに対応するプロセス又はアプリケーションが起動に必要なプログラムにかかるものか否かを示した必要識別情報と、第２不揮発性メモリ１４上でのスナップショットの格納アドレスと、スナップショットの展開先アドレスとを関連付けたテーブル（以下、復帰制御テーブルという）を生成し、第２不揮発性メモリ１４の所定の領域に格納する。なお、本実施形態では、復帰制御テーブルを第２不揮発性メモリ１４に格納する態様としたが、これに限らず、ＴＰＭ１５の記憶部１５１に格納する態様としてもよい。
【０１２５】
図１９は、復帰制御テーブルの一例を示した図である。同図に示したように、復帰制御テーブルには、スナップショットに対応するプロセス又はアプリケーションが起動に必要なプログラムにかかるものか否かを識別するための必要識別情報（必要／不必要）と、第２不揮発性メモリ１４上でのスナップショットの格納アドレスと、スナップショットの展開先アドレスとが関連付けて登録されている。なお、復帰制御テーブルの各行は、スナップショットの各々に対応している。
【０１２６】
また、ＣＰＵ３０は、操作部１８等を介して画像処理装置１００をスリープモードから復帰する旨の指示を受け付けると、復帰制御テーブルに基づいて第２不揮発性メモリ１４から、画像処理装置１００の起動に必須なプロセス及びアプリケーションのスナップショットを優先して読み出し、ＲＡＭ１２上の展開先アドレスに夫々格納することでスリープモード移行時のメモリ状態を復元する。
【０１２７】
以下、図２０を参照して、画像処理装置３００がスリープモードに移行する際の動作について説明する。なお、スリープモード移行の指示は、操作部１８を介してユーザから明示的に指示される態様としてもよいし、画像処理装置３００の無動作状態が所定時間続いた際にＣＰＵ３０が自発的に移行させる態様としてもよい。
【０１２８】
図２０は、ＣＰＵ３０により実行されるスリープモード移行処理の手順を示したフローチャートである。まず、ＣＰＵ３０は、スリープモードへの移行を指示する要求を受け付けると（ステップＳ７１）、ＲＡＭ１２に展開されたプロセス及びアプリケーションのうち一つを処理対象とし（ステップＳ７２）、この処理対象のプロセス又はアプリケーションが、画像処理装置３００の起動に必要なプログラムにかかるものか否かを判定する（ステップＳ７３）。なお、ステップＳ７２において、処理対象となるプロセス又はアプリケーションは、ＲＡＭ１２での格納順序、即ち格納アドレスの昇順に順次選択されるものとする。
【０１２９】
ステップＳ７３において、処理対象のプロセス又はアプリケーションが画像処理装置３００の起動に必須なものと判定した場合（ステップＳ７３；Ｙｅｓ）、ＣＰＵ３０は、復帰管理テーブルの「必要識別情報」に、画像処理装置３００の起動に必要である旨の情報を登録し（ステップＳ７４）、ステップＳ７６の処理に移行する。
【０１３０】
一方、ステップＳ７３において、処理対象のプロセス又はアプリケーションが画像処理装置３００の起動に不必要と判定した場合（ステップＳ７３；Ｎｏ）、ＣＰＵ３０は、復帰制御テーブルの「必須識別情報」に、画像処理装置３００の起動に不必要である旨の情報を登録し（ステップＳ７５）、ステップＳ７６の処理に移行する。
【０１３１】
続くステップＳ７６において、ＣＰＵ１０は、ＲＡＭ１２上における処理対象のプロセス又はアプリケーションの先頭アドレスを、スリープモード復帰時における展開先アドレスとして復帰制御テーブルの「展開先アドレス」に登録する（ステップＳ７６）。
【０１３２】
次いで、ＣＰＵ３０は、処理対象のプロセス又はアプリケーションのイメージ化したスナップショットをＲＡＭ１２から取得し、スナップショットとして第２不揮発性メモリ１４に順次格納する（ステップＳ７７）。そして、ＣＰＵ３０は、この格納先となった第２不揮発性メモリ１４上のアドレス（先頭アドレス）を格納アドレスとして復帰制御テーブルの「格納アドレス」に登録する（ステップＳ７８）。
【０１３３】
続いて、ＣＰＵ１０は、処理対象のプロセス又はアプリケーションについてのハッシュ値（検証用ハッシュ値）を算出すると（ステップＳ７９）、この検証用ハッシュ値を処理対象のプロセス又はアプリケーションの識別情報と関連付けて、ＴＰＭ１５の記憶部１５１（復帰時検証領域１５１２）に格納する（ステップＳ８０）。
【０１３４】
次いで、ＣＰＵ３０は、ＲＡＭ１２に展開されたプロセス及びアプリケーションの全ての処理対象としたか否かを判定し、未処理のプロセス又はアプリケーションが存在すると判定した場合には（ステップＳ８１；Ｎｏ）、ステップＳ７２へと再び戻り未処理のプロセス又はアプリケーションの一つを処理対象とする。
【０１３５】
一方、ステップＳ８１において、ＲＡＭ１２に展開されたプロセス及びアプリケーションの全てを処理対象にしたと判定した場合には（ステップＳ８１；Ｙｅｓ）、ＣＰＵ３０は、図示しない電源供給ユニットを制御することで各部への電力供給を遮断し（ステップＳ８２）、本処理を終了する。
【０１３６】
図２１は、上述した本実施形態のスリープモード移行処理を説明するための図である。ここで、図中左図はＲＡＭ１２の状態を示しており、右図は第２不揮発性メモリ１４の状態を模式的に示している。スリープモード移行処理（ステップＳ７２〜Ｓ８１）により、ＲＡＭ１２に展開された全てのプロセス、アプリケーションが処理されると、同図に示したようにＲＡＭ１２と同様の順序で、第２不揮発性メモリ１４にスナップショットが格納されることになる。
【０１３７】
次に、画像処理装置３００がスリープモードから復帰する際の動作について説明する。図２２は、スリープモードから復帰時にＣＰＵ３０により実行されるスリープモード復帰処理の手順を示したフローチャートである。
【０１３８】
まず、ＣＰＵ３０は、操作部１８や図示しない復帰指示用の電源スイッチ等を介して、スリープ状態からの復帰を指示する信号を受け付けると、図示しない電源供給ユニットを制御することで、画像処理装置３００の各部へ電力の供給を開始し（ステップＳ９１）、第１不揮発性メモリ１３に記憶されたブートコード１３１を実行することで、画像処理装置３００の各部を初期化する（ステップＳ９２）。
【０１３９】
次いで、ＣＰＵ３０は、復帰制御テーブルに含まれた必要識別情報のうち、起動に必要を示す情報が登録されたものを一つ選択すると（ステップＳ９３）、この必要識別情報に関連付けられた格納アドレスに基づいて、第２不揮発性メモリ１４からスナップショットを読み出す（ステップＳ９４）。なお、ステップＳ９３で選択する必要識別情報は、復帰制御テーブルの登録順に応じた順序で順次選択されることが好ましい。
【０１４０】
続いて、ＣＰＵ３０は、ステップＳ９４で読み出したスナップショットをＲＡＭ１２に転送すると、必要識別情報に関連付けられた展開先アドレスに基づいて、ＲＡＭ１２上の展開先アドレスに対応する位置にスナップショットを展開する（ステップＳ９５）。
【０１４１】
ＣＰＵ３０は、ステップＳ９５でＲＡＭ１２上に展開したプロセス又はアプリの完全性を検証する復帰時検証処理を実行する（ステップＳ９６）。なお、ステップＳ９６の復帰時検証処理は、上述したステップＳ５５の復帰時検証処理と同様であるため、説明は省略する。
【０１４２】
次いで、ＣＰＵ３０は、ステップＳ９６の復帰時検証処理が正常に終了したか否かを判定する。ここで、復帰時検証処理にエラーが発生したと判定した場合（ステップＳ９７；Ｎｏ）、ＣＰＵ３０は、表示部１９にエラーが発生した旨の情報を表示した後（ステップＳ９８）、コールドスタート処理を実行することで画像処理装置１００の再起動を行い（ステップＳ９９）、本処理を終了する。なお、ステップＳ９９のコールドスタート処理は、図３で説明したコールドスタート処理と同様であるため説明は省略する。
【０１４３】
また、ステップＳ９７において、ステップＳ９６の復帰時検証処理が正常に終了したと判定した場合（ステップＳ９７；Ｙｅｓ）、ＣＰＵ３０は、復帰制御テーブルに登録された起動に必要を示す全ての必要識別情報についてステップＳ９３の処理を実行したか否かを判定する（ステップＳ１００）。ここで、ＣＰＵ３０が未処理の必要識別情報が存在すると判定した場合には（ステップＳ１００；Ｎｏ）、ステップＳ９３の処理へと再び戻り未処理の必要識別情報を一つ選択する。
【０１４４】
一方、ステップＳ１００において、ＣＰＵ３０が、起動に必要を示す全ての必要識別情報についてステップＳ９３の処理を実行したと判定した場合には（ステップＳ１００；Ｙｅｓ）、続くステップＳ１０１の処理へと移行する。なお、ここまでの処理で、画像処理装置３００の起動に必要なプログラムにかかる全てのプロセス及びアプリケーションが、スリープモード移行直前の状態に復元されたことになる（図２１参照）。即ち、第２不揮発性メモリ１４に記憶されたプロセス及びアプリケーション単位のスナップショットにおいて、画像処理装置１００の起動に必要なプログラムにかかるプロセス及びアプリケーションのスナップショットから優先的にＲＡＭ１２に復元される。
【０１４５】
次いで、ＣＰＵ３０は、復帰制御テーブルに登録された必要識別情報のうち、起動に不必要を示す情報が登録されたものを一つ選択すると（ステップＳ１０１）、この必要識別情報に関連付けられた格納アドレスに基づいて、第２不揮発性メモリ１４からスナップショットを読み出す（ステップＳ１０２）。
【０１４６】
続いて、ＣＰＵ３０は、ステップＳ１０１で読み出したスナップショットをＲＡＭ１２に転送すると、必須識別情報に関連付けられた展開先アドレスに基づいて、ＲＡＭ１２上の展開先アドレスに対応する位置にスナップショットを展開する（ステップＳ１０３）。
【０１４７】
次に、ＣＰＵ３０は、復帰制御テーブルに登録された起動に不必要を示す全ての必要識別情報についてステップＳ１０１の処理を実行したか否かを判定する（ステップＳ１０４）。ここで、ＣＰＵ３０が未処理の必要識別情報が存在すると判定した場合には（ステップＳ１０４；Ｎｏ）、ステップＳ１０１の処理へと再び戻り未処理の必要識別情報を一つ選択する。
【０１４８】
また、ステップＳ１０４において、起動に不必要を示す全ての必要識別情報についてステップＳ１０１の処理を実行したと判定した場合（ステップＳ１０４；Ｙｅｓ）、ＣＰＵ３０は、ステップＳ１０３で展開された各プロセス及びアプリケーションについて、復帰時検証処理を実行する（ステップＳ１０５）。なお、ステップＳ１０５の復帰時検証処理は、上述したステップＳ５５の復帰時検証処理をステップＳ１０３で展開された各プロセス及びアプリケーションに対して連続的に実行するのみであるため、説明を省略する。
【０１４９】
続いて、ＣＰＵ３０は、ステップＳ１０３で展開した全てのプロセス及びアプリケーションについて、ステップＳ１０５の復帰時検証処理が正常に終了したか否かを判定する（ステップＳ１０６）。ここで、ＣＰＵ３０は、全てのプロセス及びアプリケーションについての復帰時検証処理が正常に終了したと判定した場合には（ステップＳ１０６；Ｙｅｓ）、本処理を終了する。
【０１５０】
一方、ステップＳ１０６において、何れかのプロセス及び／又はアプリケーションについての復帰時検証処理にエラーが生じたと判定した場合（ステップＳ１０６；Ｎｏ）、ＣＰＵ３０は、エラーが発生したプロセス及び／又はアプリケーションを示すための情報を表示部１９に表示し、エラーが発生したプロセス及び／又はアプリケーションを停止した後（ステップＳ１０７）、本処理を終了する。
【０１５１】
以上のように、本実施形態によれば、第２不揮発性メモリ２１に記憶されたスナップショットのうち、自己の装置の起動に必要なプログラムにかかる実行単位（プロセス及び／又はアプリケーション）のスナップショットから優先的にＲＡＭ１２に復元することができるため、スナップショットからの起動をより高速に行うことができる。
【０１５２】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。
【０１５３】
例えば、上記実施形態では、ＴＰＭ１５を備えた構成としたが、プログラムやスナップショットの完全性を検証する必要がない場合には、ＴＰＭ１５を除いた構成としてもよい。
【０１５４】
また、上記実施形態で実行される各種処理にかかるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。
【０１５５】
また、上記実施形態で実行される各種処理にかかるプログラムを、インターネット等のネットワーク経由で提供または配布するように構成しても良い。
【０１５６】
また、上記実施形態で実行される各種処理にかかるプログラムを、ＲＯＭ等の不揮発性の記録媒体に予め組み込んで提供するように構成してもよい。
【産業上の利用可能性】
【０１５７】
本発明にかかる情報処理装置、情報処理装置の起動制御方法、プログラム及び記録媒体は、主記憶装置の状態をイメージ化したスナップショットを用いて起動を行う装置に有効であり、特に、プログラムの実行単位毎にスナップショットの取得を行う装置に適している。
【図面の簡単な説明】
【０１５８】
【図１】第１の実施形態にかかる画像形成装置の構成を示したブロック図である。
【図２】図１に示したＴＰＭの記憶部のデータ構成を模式的に示した図である。
【図３】コールドスタート処理の手順を示したフローチャートである。
【図４】図３に示した起動時検証処理の手順を示したフローチャートである。
【図５】コールドスタート処理時における第１不揮発性メモリと、ＲＡＭとの状態を模式的に示した図である。
【図６】画像形成装置の動作時におけるＲＡＭの状態を模式的に示した図である。
【図７】第１の実施形態にかかるスリープモード移行処理の手順を示したフローチャートである。
【図８】スナップショットの格納にかかるＲＡＭと第２不揮発性メモリとの状態を模式的に示した図である。
【図９】第２不揮発性メモリの状態を模式的に示した図である。
【図１０】スナップショットの展開先アドレスと、格納アドレスと、サイズとを対応付けたテーブルを示した図である。
【図１１】スリープモード移行時における電源供給状態の一例を示した図である。
【図１２】第１の実施形態にかかるスリープモード復帰処理の手順を示したフローチャートである。
【図１３】図１２に示した復帰時検証処理の手順を示したフローチャートである。
【図１４】図１２のスリープモード復帰処理時における第１不揮発性メモリと、第２不揮発性メモリと、ＲＡＭとの状態を模式的に示した図である。
【図１５】第１の実施形態の変形例にかかる画像形成装置の構成を示したブロック図である。
【図１６】図１５に示した第２不揮発性メモリの状態を模式的に示した図である。
【図１７】スナップショット展開後のＲＡＭの状態を模式的に示した図である。
【図１８】第２の実施形態にかかる画像形成装置の構成を示したブロック図である。
【図１９】復帰制御テーブルの一例を示した図である。
【図２０】第２の実施形態にかかるスリープモード移行処理の手順を示したフローチャートである。
【図２１】スナップショットの格納にかかるＲＡＭと第２不揮発性メモリとの状態を模式的に示した図である。
【図２２】第２の実施形態にかかるスリープモード復帰処理の手順を示したフローチャートである。
【符号の説明】
【０１５９】
１００  画像処理装置
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
１３  第１不揮発性メモリ
１３１  ブートコード
１３２  基本プログラム
１３３  応用プログラム
１４  第２不揮発性メモリ
１４１  第１格納領域
１４２  第２格納領域
１５  ＴＰＭ
１５１  記憶部
１５１１  起動時検証領域
１５１２  復帰時検証領域
１６  エンジン制御部
１７  エンジン
１８  操作部
１９  表示部
２００  画像処理装置
２０  ＣＰＵ
２１  第２不揮発性メモリ
２１１  データ格納領域
２１２  冗長領域
３００  画像処理装置
３０  ＣＰＵ
【図１】
2009187134.tif 000003
【図２】
2009187134.tif 000004
【図３】
2009187134.tif 000005
【図４】
2009187134.tif 000006
【図５】
2009187134.tif 000007
【図６】
2009187134.tif 000008
【図７】
2009187134.tif 000009
【図８】
2009187134.tif 000010
【図９】
2009187134.tif 000011
【図１０】
2009187134.tif 000012
【図１１】
2009187134.tif 000013
【図１２】
2009187134.tif 000014
【図１３】
2009187134.tif 000015
【図１４】
2009187134.tif 000016
【図１５】
2009187134.tif 000017
【図１６】
2009187134.tif 000018
【図１７】
2009187134.tif 000019
【図１８】
2009187134.tif 000020
【図１９】
2009187134.tif 000021
【図２０】
2009187134.tif 000022
【図２１】
2009187134.tif 000023
【図２２】
2009187134.tif 000024