図1は、画像形成装置1および端末装置2を有するネットワークの例を示す図である。図2は、画像形成装置1のハードウェア構成の例を示す図である。
図1に示す画像形成装置1は、コピー、PCプリント、ファックス、スキャン、およびボックスなどの機能を集約した装置である。一般に、「複合機」または「MFP(Multi Function Peripherals)」などと呼ばれることがある。画像形成装置1は、いわゆるLAN(Local Area Network)回線を介して端末装置2と通信することができる。端末装置2として、パーソナルコンピュータ、タブレットコンピュータ、またはスマートフォンなどが用いられる。
PCプリント機能は、端末装置2から受信した画像データに基づいて画像を用紙に印刷する機能である。「ネットワークプリンティング」または「ネットワークプリント」などと呼ばれることもある。
ボックス機能は、ユーザごとに「ボックス」または「パーソナルボックス」などと呼ばれる記憶領域を与えておき、各ユーザが自分の記憶領域によって画像データなどを保存し管理するための機能である。グループごとにボックスを設けておき、グループのメンバで共用することもできる。ボックスは、パーソナルコンピュータにおける「フォルダ」または「ディレクトリ」に相当する。
画像形成装置1は、図2に示すように、CPU(Central Processing Unit)10a、メインメモリ10b、NV−RAM(Non Volatile RAM)10c、補助記憶装置10d、eMMC(embedded Multi Media Card)10e、画像描画回路10f、タッチパネルディスプレイ10g、操作キーパネル10h、NIC(Network Interface Card)10i、モデム10j、スキャンユニット10k、画像処理回路10m、プリントユニット10n、認証装置10p、音声出力回路10q、入出力インタフェース10r、タイマ10s、AC/DC(Alternating Current/Direct Current)コンバータ10u、電源スイッチ10w、および電源制御部10yなどのハードウェアモジュールによって構成される。
画像描画回路10fは、グラフィックボードに相当する回路であって、タッチパネルディスプレイ10gに表示させる画面の信号(いわゆる映像信号)を画像データに基づいて生成し、タッチパネルディスプレイ10gへ送る。
タッチパネルディスプレイ10gは、ユーザに対するメッセージを示す画面、ユーザがコマンドまたは情報を入力するための画面、およびCPU10aが実行した処理の結果を示す画面などを、画像描画回路10fからの映像信号を用いて表示する。また、タッチパネルディスプレイ10gは、タッチされた位置を示す信号をCPU10aへ送る。
操作キーパネル10hは、いわゆるハードウェアキーボードであって、テンキー、スタートキー、ストップキー、およびファンクションキーなどによって構成される。
NIC10iは、TCP/IP(Transmission Control Protocol/Internet Protocol)などのプロトコルで他の装置との通信を行う。
モデム10jは、ファックス端末との間でG3などのプロトコルで画像データをやり取りする。
スキャンユニット10kは、プラテンガラスの上にセットされたシートに記されている画像を読み取って画像データを生成する。
画像処理回路10mは、スキャンユニット10kによって読み取られた画像を、目的などに合わせて適宜、補正するASIC(Application Specific Integrated Circuit)である。
プリントユニット10nは、スキャンユニット10kによって読み取られ、画像処理回路10mによって適宜補正された画像のほか、NIC10iまたはモデム10jによって他の装置から受信した画像を用紙に印刷する。
認証装置10pは、ユーザを識別する識別情報を入力しユーザを認証する装置である。識別情報として、ユーザの生体の情報、例えば、指紋、掌の静脈のパターン、または虹彩などが入力される。または、ユーザが携帯するカードからユーザのID(identification)を入力してもよい。識別情報の入力を認証装置10pが行うが、認証はCPU10aに実行させてもよい。
音声出力回路10qは、いわゆる音声合成ICであって、タッチパネルディスプレイ10gまたは操作キーパネル10hが操作された際の音(タッチ音)、ユーザへ警告するための警告音、および処理が完了したことを知らせる完了音などを出力する。
入出力インタフェース10rは、周辺機器との間でデータをやり取りするための装置である。以下、入出力インタフェース10rとしてUSB(Universal Serial Bus)ボードが用いられる場合を例に説明する。タイマ10sは、CPU10aからの指令に応じて時間を計る。
AC/DCコンバータ10uは、一次電電である商用電源から供給される電力を交流から直流に変換し、各ハードウェアモジュールへ電力を共有する。つまり、AC/DCコンバータ10uは、二次電源である。
電源スイッチ10wは、画像形成装置1の電源をオンにしたりオフにしたりするためのスイッチである。電源スイッチ10wは、商用電源とAC/DCコンバータ10uとの間に配置されている。電源スイッチ10wがオンにされると、商用電源とAC/DCコンバータ10uとが接続され、商用電源からAC/DCコンバータ10uへの電力の供給が開始される。そして、AC/DCコンバータ10uによって各ハードウェアモジュールへ直流の電力が供給され始める。電源スイッチ10wをオフにされると、商用電源とAC/DCコンバータ10uとが切断され、商用電源からAC/DCコンバータ10uへの電力の供給が停止される。
電源制御部10yは、CPU10aからの指令に従って、AC/DCコンバータ10uによって得られた直流の電力を上述の各ハードウェアモジュールへ供給する。ハードウェアモジュールごとに電圧を変えて電力を供給することができる。例えば、各ハードウェアモジュールのうちのCPU10a、メインメモリ10b、NV−RAM10c、補助記憶装置10d、eMMC10e、タッチパネルディスプレイ10g、操作キーパネル10h、画像処理回路10m、認証装置10p、音声出力回路10q、およびタイマ10sへ5.1Vの電圧で電力を供給するが、省電力モードに切り換わる際に、補助記憶装置10dおよびタッチパネルディスプレイ10gなど一部のハードウェアモジュールへは5.1Vよりも電圧を下げて電力を供給する。
また、電源制御部10yは、各ハードウェアモジュールへの電力の供給を個別に開始したり停止したりすることができる。
さらに、電源制御部10yは、AC/DCコンバータ10uから出力される電流の電圧を監視し、CPU10aから問合せがあると、電圧をCPU10aへ回答する。
NV−RAM10cまたは補助記憶装置10dには、起動プログラム13Pが記憶されている。起動プログラム13Pは、オペレーティングシステムを起動するためのプログラムである。
さらに、補助記憶装置10dには、シャットダウンプログラム14Pが記憶されている。シャットダウンプログラム14Pは、画像形成装置1の電源(電源スイッチ10w)がオフになった際にオペレーティングシステムをシャットダウンするためのプログラムである。
eMMC10eは、NAND型のフラッシュメモリであって、プログラムおよびデータのほかスナップショットのデータなどが記憶される。
NV−RAM10c、補助記憶装置10d、またはeMMC10eに記憶されているプログラムは、必要に応じてメインメモリ10bにロードされ、CPU10aによって実行される。
メインメモリ10bとして、DRAM(Dynamic Random Access Memory)またはSRAM(Static Random Access Memory)などの揮発性メモリが用いられる。補助記憶装置10dとして、ハードディスクまたはSSD(Solid State Drive)などの大容量のストレージが用いられる。
また、補助記憶装置10dは、仮想メモリとしても用いられる。つまり、メインメモリ10bに記憶しきれなくなったデータ(例えば、画像データ)を一時的に記憶する。
メインメモリ10bは、主に画像形成装置1のメインメモリとして使用されるRAMである。NV−RAM10cは、不揮発性のメモリであって、起動用のプログラムなどが主に記憶されている。
CPU10aは、複数のコアを有するCPUである。つまり、マルチコアCPUである。マルチコアCPUは、「マルチコアプロセッサ」と呼ばれることもある。以下、CPU10aとして、4つのコアを有するマルチコアCPUが用いられる場合を例に説明する。
画像形成装置1において、電源がオンになると、BIOS(Basic Input/Output System)が起動する。そして、BIOSによって、オペレーティングシステムを起動するためのプログラムとして起動プログラム13PがCPU10aのいずれか1つまたは複数のコアによって実行される。起動プログラム13Pによる処理については、後述する。
オペレーティングシステムの起動後、シャットダウンプログラム14Pが起動され、メインメモリ10bに常駐する。ユーザは、上述のコピーなどの機能を使用することができる。その後、電源スイッチ10wをオフにする操作が行われると、シャットダウンプログラム14Pによる処理が開始される。
以下、起動プログラム13Pおよびシャットダウンプログラム14Pそれぞれによる処理を、画像形成装置1においてスナップショットを使用せずにオペレーティングシステムが起動し、電源スイッチ10wがオフにされ、そして、電源がオンにされた場合を例に説明する。
〔電源がオフにされた際の処理〕
図3は、メインメモリ10bに設けられる記憶領域の例を示す図である。図4は、シャットダウンプログラム14Pによって実現される機能的構成の例を示す図である。図5は、最大コア数決定処理の流れの例を説明するフローチャートである。図6は、スナップショット生成処理の流れの例を説明するフローチャートである。図7は、ファイル保存処理の流れの例を説明するフローチャートである。図8は、スナップ対象領域6Sの例を示す図である。図9は、最大コア数Cmaxおよび各コアの動作それぞれの遷移の例を示す図である。
オペレーティングシステムの起動後、画像形成装置1は、種々のハードウェアモジュールによって種々の処理を実行する。例えば、スキャンユニット10kおよびプリントユニット10nなどによってコピーの処理を実行する。または、モデム10jおよびプリントユニット10nなどによってファックスの受信の処理を実行する。
よって、これらのハードウェアモジュールの一部または全部が動作えであったり、アイドリングの状態であったりする。
また、メインメモリ10bには、図3に示すように、オペレーティングシステム領域6Aおよび複数のデバイス領域6Bが確保される。
オペレーティングシステム領域6Aには、オペレーティングシステムが管理する種々の事項の設定値(設定変数)が記憶される。デバイス領域6Bは、ハードウェアモジュールごとに確保され、ハードウェアモジュールごとの種々の事項の設定値が格納される。これらの設定値は、ユーザが画像形成装置1を操作したり、画像形成装置1が処理を実行したりするごとに、適宜、変更される。
さらに、メインメモリ10bは、共有バッファ6Fとしても用いられる。共有バッファ6Fは、後述するスナップショット5Eを一時的に記憶するためのバッファである。
ユーザが電源スイッチ10wを操作して電源をオフにすると、上述の通り、商用電源からAC/DCコンバータ10uへの電力の供給が停止する。
ところで、AC/DCコンバータ10uには、瞬電(瞬断、瞬停)の対策のための回路(以下、「瞬電対策回路」と記載する。)が設けられている。瞬電対策回路は、コンデンサおよびコイルなどによって構成され、商用電源からの電力の供給が止まっても、各ハードウェアモジュールに影響が及ばないように少なくとも保証時間Th、各ハードウェアモジュールへ一定の大きさの電力を供給することができる。保証時間Thは、数十ミリ秒ないし数百ミリ秒程度の時間である。以下、保証時間Thが40ミリ秒である場合を例に説明する。
電源スイッチ10wは、オフにされると、オフにされたことを示すオフ信号5AをCPU10aへ送信する。なお、AC/DCコンバータ10uが、商用電源からの電力の供給が停止されたことを検知した際に、オフ信号5AをCPU10aへ送信してもよい。
CPU10aがオフ信号5Aを受信すると、オペレーティングシステムをシャットダウンするための処理がシャットダウンプログラム14Pに基づいて次のように実行される。
シャットダウンプログラム14Pによると、図4に示す設定対象リスト記憶部141、初期化処理部142、終了デバイスリスト生成部143、最大コア数決定部145、スナップショット取得部146、およびスナップショット保存部147などが画像形成装置1に実現される。
設定対象リスト記憶部141には、設定対象リスト5Bが記憶されている。設定対象リスト5Bには、画像形成装置1のハードウェアモジュールのうちのオペレーティングシステムの起動の際に初期設定を必要とするものが示されている。「初期設定」は、例えば環境設定であって、種々の項目それぞれの条件(設定値)を調整する処理である。
初期化処理部142は、ハードウェアモジュールの初期化のための処理を次のように実行する。
初期化処理部142は、オペレーティングシステムのシャットダウンの準備を行うように各ハードウェアモジュールへ指令する。
すると、各ハードウェアモジュールは、電源の供給が停止してもよい状態にするための準備処理を行う。例えば、現在、処理を実行中であれば、それを終了する。または、保存すべきデータが自らのメモリに記憶されていれば、それを所定の保存場所へ保存する。そして、準備処理が完了したら、終了完了データ5CをCPU10aおよびAC/DCコンバータ10uへ送信することによって、準備処理が完了した旨をCPU10aおよびAC/DCコンバータ10uへ通知する。すると、AC/DCコンバータ10uは、終了完了データ5Cの送信元であるハードウェアモジュールへの電力の供給を終了する。
さらに、初期化処理部142は、設定対象リスト記憶部141から設定対象リスト5Bを読み出す。そして、設定対象リスト5Bに示される各ハードウェアモジュールの各項目について、次回にオペレーティングシステムを起動した際に好ましい値(条件)が設定されるように、初期設定を行う。
例えば、オペレーティングシステムを起動するごとに、毎回、予め決められた値(デフォルト値)が設定される項目については、初期化処理部142は、設定値をデフォルト値に変更する。または、オペレーティングシステムをシャットダウンする際の状態を次回の起動の際にも引き継ぐ項目については、初期化処理部142は、設定値を変更せずに残しておく。
なお、入出力インタフェース10rについては、周辺機器が接続されている場合にのみ、初期化のための処理を行えばよい。この場合は、その周辺機器の初期化のための処理をも行ってもよい。また、初期化処理部142は、オペレーティングシステムについても初期設定を行う。
終了デバイスリスト生成部143は、終了デバイスリスト5Dを生成する。終了デバイスリスト5Dには、設定対象リスト5Bに示されるハードウェアモジュールのうちの、次の条件_1および条件_2の両方を満たすハードウェアモジュールが示される。
条件_1:終了完了データ5CをCPU10aへ送信した。
条件_2:初期設定が初期化処理部142によって行われた。
具体的には、終了デバイスリスト生成部143は、オフ信号5Aが送信されてきたら、終了デバイスリスト5Dを生成し、eMMC10eの所定のディレクトリに保存させる。この時点では、終了デバイスリスト5Dには、いずれのハードウェアモジュールも示されない。そして、あるハードウェアモジュールが条件_1および条件_2の両方を満たした時点で、そのハードウェアモジュールを終了デバイスリスト5Dへ追記する。
または、終了デバイスリスト生成部143は、オフ信号5Aが送信されてきてから所定の時間が経過して時点で条件_1および条件_2の両方を満たすハードウェアモジュールを示すデータを終了デバイスリスト5Dとして生成し、eMMC10eの所定のディレクトリに保存させてもよい。
なお、条件_2を満たしたか否かに関わらず、条件_1を満たしたハードウェアモジュールが終了デバイスリスト5Dに示されるようにしてもよい。または、条件_1を満たしたか否かに関わらず、条件_2を満たしたハードウェアモジュールが終了デバイスリスト5Dに示されるようにしてもよい。
最大コア数決定部145は、オフ信号5Aが受信されると、最大コア数Cmaxを決定する。最大コア数Cmaxは、CPU10aを構成する4つのコアのうちスナップショットのデータを圧縮し共有バッファ6Fに書き込む処理に同時に使用することができるコアの個数の最大値である。例えば、最大コア数Cmaxが「3」であれば、この処理のために、CPU10aのコアを3つまで同時に使用することができることを、意味する。
最大コア数Cmaxは、定期的に決定される。ここで、最大コア数Cmaxの決定の仕方を、図5を参照しながら説明する。
最大コア数決定部145は、オフ信号5Aを受信する前に、予め、最大コア数Cmaxとして所定の値を設定し(図5の#701)、経過時間Twとして「0秒」を設定しておく(#702)。ただし、所定の値は、2以上でありかつCPU10aのコア数以下の値である。「経過時間Tw」は、オフ信号5Aを受信し決定の処理(#703以降の処理)を開始してから経過した時間である。
最大コア数決定部145は、オフ信号5Aが受信されると(#703でYes)、AC/DCコンバータ10uに保証時間Thがあれば(#704でYes)、保証時間Thが経過するのを待つ(#705)。保証時間Thが経過したら、経過時間Twに保証時間Thを加え(#706)、そして、ステップ#707へ進む。保証時間Thがなければ、つまり、瞬電に対応することができない場合は(#704でNo)、直ちにステップ#707へ進む。
最大コア数決定部145は、タイマTmに所定の時間をセットし(#707)、カウントダウンを開始する(#708)。本実施形態では、ステップ#707において100ミリ秒をセットする。
タイマTmが0ミリ秒になったら、つまり、ステップ#708の時点から所定の時間つまり100ミリ秒が経過したら(#709でYes)、最大コア数決定部145は、経過時間Twに所定の時間つまり100ミリ秒を加算する(#710)。
そして、この時点で最大コア数Cmaxが「2」以上であれば(#711でYes)、最大コア数Cmaxを「1」だけ減らす(#712)。
最大コア数決定部145は、ステップ#704〜#712の処理を、次に説明するスナップショット取得部146による処理が継続している間(#713でYes)、繰り返し実行する。ただし、最大コア数Cmaxが「1」になったら、ステップ#704〜#711の処理を終了してもよい。
スナップショット取得部146は、オフ信号5Aが受信されると、メインメモリ10bの全部分または一部の領域のスナップショットを取得する処理を行う。
本実施形態では、スナップショット取得部146は、オペレーティングシステム領域6Aおよび終了デバイスリスト5Dに示されるハードウェアモジュールそれぞれのデバイス領域6Bをスナップ対象領域6Sとして選出し、各スナップ対象領域6Sのスナップショット5Eを取得する。
スナップショット5Eを取得する処理は、CPU10aの4つのコアのうちの複数によって並列的に実行され得る。ここで、この処理を、図6を参照しながら説明する。
スナップショット取得部146は、各スナップ対象領域6Sを、所定のサイズのブロックに分割する(#721)。所定のサイズは、タイマTmにセットされる時間(本例では、100ミリ秒)にCPU10aの1つのコアが圧縮することができるデータのサイズである。
例えば、ある1つのデバイス領域6Bのサイズが「17」であり、所定のサイズが「5」である場合は、そのデバイス領域6Bが、サイズが「5」である3つのブロックおよびサイズが「2」である1つのブロックに分割される。
スナップショット取得部146は、最大コア数決定部145が最後に決定した最大コア数Cmax(つまり、最新の最大コア数Cmax)を最大コア数決定部145から取得する(#722)。
スナップショット取得部146は、スナップショット5Eを未だ生成していないブロックのうちのステップ#722で取得した最大コア数Cmaxのブロックを選出する(#723)。
そして、スナップショット取得部146は、選出したブロックそれぞれのスナップショット5Eを、CPU10aの4つのコアのうちの最大コア数Cmaxのコアによって分担して生成し(#724)、共有バッファ6Fに記憶させる(#725)。なお、あるブロックのスナップショット5Eは、例えば、そのブロックの各番地(アドレス)の現在の値を並べたデータを圧縮することによって、生成される。
例えば、最大コア数Cmaxが「4」である場合は、スナップショット取得部146は、4つのブロックを選出する。そして、これらのブロックそれぞれのスナップショット5Eを、4つのコアによって1つずつ生成し、共有バッファ6Fに記憶させる。
スナップショット取得部146は、スナップショット5Eを未だ生成していないブロックが残っていれば(#726でYes)、ステップ#722に戻って、これらのブロックのうちの最新の最大コア数Cmaxのブロックのスナップショット5Eを生成する。なお、AC/DCコンバータ10uの電圧が所定の水準(ハードウェアモジュールへ必要な電力を供給できない水準)を下回った場合に、スナップショット5Eを生成する処理を終了してもよい。
スナップショット保存部147は、スナップショットファイル5FをeMMC10eに保存する処理を、図7に示す手順で実行する。
スナップショット保存部147は、あるスナップ対象領域6Sのすべてのブロックのスナップショット5Eが共有バッファ6Fに記憶されるごとに(#731でYes)、これらのスナップショット5Eを1つに併合することによってスナップショットファイル5Fを生成し(#732)、そのスナップ対象領域6Sに係るハードウェアモジュールと対応付けてeMMC10eの所定の領域に保存する(#733)。保存後、これらのスナップショット5Eは共有バッファ6Fから削除される。
スナップショット5Eが生成されていないブロックが残っていれば(#734でYes)、ステップ#731に戻る。
このようにして、スナップ対象領域6Sごとのスナップショットファイル5Fが生成され、eMMC10eに記憶される。
ここで、図8のように、3つのオペレーティングシステム領域6Aまたはデバイス領域6Bがスナップ対象領域6Sとして選出された場合を例に、CPU10aの4つのコアそれぞれによるスナップショット5Eの生成の処理を、図9を参照しながら説明する。
以下、各スナップ対象領域6Sを「スナップ対象領域6S1」、「スナップ対象領域6S2」、および「スナップ対象領域6S3」と記載する。スナップ対象領域6S1、6S2、および6S3は、それぞれ、9個、3個、2個のブロックに分割されるものとする。スナップ対象領域6S1の各ブロックを「A−1」、「A−2」、…、「A−9」と記載する。スナップ対象領域6S2の各ブロックを「B−1」、「B−2」、「B−3」と記載する。スナップ対象領域6S2の各ブロックを「C−1」、「C−2」と記載する。また、4つのコアそれぞれを「コア_1」、「コア_2」、「コア_3」、および「コア_4」と記載する。
最大コア数決定部145は、図5に示した通りの処理を実行することによって、図9に示すように、経過時間Twが0ミリ秒である時点において最大コア数Cmaxを「4」に決定する。経過時間Twが140ミリ秒である時点、240ミリ秒である時点、および340ミリ秒である時点において最大コア数Cmaxをそれぞれ「3」、「2」、「1」に決定する。その後は、さらに100ミリ秒が経過するごとに最大コア数Cmaxを「1」に決定する。
経過時間が0ミリ秒以上140ミリ秒未満である間は、上述の通り、最大コア数Cmaxが「4」である。そこで、この間に、コア_1、コア_2、コア_3、およびコア_4は、それぞれ、いずれかのスナップ対象領域6Sのブロックを1つずつ選出し、選出したブロックのスナップショット5Eを生成する。本例では、コア_1、コア_2、コア_3、およびコア_4は、それぞれブロックA−1、A−2、A−3、およびA−4それぞれのスナップショット5Eを生成する。
これら4つのブロックのスナップショット5Eの生成中に、経過時間が140ミリ秒を過ぎる。そして、経過時間が240ミリ秒になるまでに生成が完了したら、この時点における最大コア数Cmaxが「3」なので、コア_1、コア_2、およびコア_3が、スナップ対象領域6S1の残りのいずれかのブロックのスナップショット5Eを生成する。本例では、それぞれブロックA−4、A−5、およびA−6のスナップショット5Eを生成する。
これら3つのブロックのスナップショット5Eの生成中に、経過時間が240ミリ秒を過ぎる。そして、経過時間が340ミリ秒になるまでに生成が完了したら、この時点における最大コア数Cmaxが「2」なので、コア_1およびコア_2が、スナップ対象領域6S1の残りのいずれかのブロックのスナップショット5Eを生成する。本例では、それぞれブロックA−7およびA−8のスナップショット5Eを生成する。
これら2つのブロックのスナップショット5Eの生成中に、経過時間が340ミリ秒を過ぎる。そして、経過時間が440ミリ秒になるまでに生成が完了したら、この時点における最大コア数Cmaxが「1」なので、コア_1が、スナップ対象領域6S1の残りのいずれかのブロックのスナップショット5Eを生成する。本例では、ブロックA−9のスナップショット5Eを生成する。
その後は最大コア数Cmaxが「1」なので、コア_1が、残りのブロック(本例では、ブロックB−1、B−2、B−3、C−1、およびC−2それぞれのスナップショット5Eを順次、生成する。
ブロックA−1ないしA−9それぞれのスナップショット5Eが生成されると、スナップ対象領域6S1のすべてのブロックのスナップショット5Eが揃う。そこで、スナップショット保存部147は、これらのスナップショット5Eを纏めることによってスナップ対象領域6S1のスナップショットファイル5Fを生成する。そして、スナップショットファイル5FのeMMC10eの所定の領域に保存する。同様に、ブロックB−1ないしB−3それぞれのスナップショット5Eが生成されると、スナップ対象領域6S2のスナップショットファイル5Fを生成し、eMMC10eの所定の領域に保存する。ブロックC−1およびC−2それぞれのスナップショット5Eが生成されると、スナップ対象領域6S3のスナップショットファイル5Fを生成し、eMMC10eの所定の領域に保存する。
AC/DCコンバータ10uからCPU10aなどへの電力の供給が不足しまたは停止し、3つのスナップ対象領域6Sのうちの一部またはすべてのスナップショットファイル5Fを生成することができない場合がある。起動プログラム13Pによると、このような場合においても、適宜、ワープ(Warp)起動の機能を部分的に用いてオペレーティングシステムを起動することができる。
以下、起動プログラム13Pによるオペレーティングシステムの起動の処理について、説明する。
〔電源がオンにされた際の処理〕
図10は、起動プログラム13Pによって実現される機能的構成の例を示す図である。
上述の通り、画像形成装置1において、電源スイッチ10wが操作されて電源がオンになると、BIOSが起動し、その後、起動プログラム13Pが実行される。起動プログラム13Pによると、図10に示すスナップショット有無確認部131、スナップショット読出部132、スナップショット展開部133、および通常起動処理部134などが実現される。
スナップショット有無確認部131は、起動プログラム13Pの実行の開始後、eMMC10eから終了デバイスリスト5Dを読み出し、終了デバイスリスト5Dに示される各ハードウェアモジュールのスナップショットファイル5FがeMMC10eに保存されているか否かをチェックする。
スナップショット読出部132、スナップショット展開部133、および通常起動処理部134は、スナップショットファイル5Fの有無(保存されているか否か)に応じて次のように処理を行う。
スナップショット読出部132は、スナップショットファイル5FがeMMC10eに保存されていれば、それをeMMC10eから読み出す。
そして、スナップショット展開部133は、読み出されたスナップショットファイル5Fがオペレーティングシステムに対応するものであれば、そのスナップショットファイル5Fを伸張(解凍)し、メインメモリ10bの中のオペレーティングシステム領域6Aへ展開(ロード)する。
一方、そのスナップショットファイル5Fがいずれかのハードウェアモジュールに対応するものであれば、スナップショット展開部133は、そのスナップショットファイル5Fを伸張し、メインメモリ10bの中の、そのハードウェアモジュールのデバイス領域6Bへ展開する
このように、スナップショットファイル5Fが保存されているハードウェアモジュールについては、オペレーティングシステムの起動の際に、ハイバネーション機能が用いられる。
通常起動処理部134は、スナップショットファイル5Fが保存されていないハードウェアモジュールについては、ハイバネーション機能を用いることなく、通常通りに初期設定などの処理を行う。
図11は、画像形成装置1における電源オフの際の全体的な処理の流れの例を説明するフローチャートである。図12は、画像形成装置1における電源オンの際の全体的な処理の流れの例を説明するフローチャートである。
次に、電源をオフにされた際および電源をオンにされた際それぞれの全体的な処理の流れの例を、フローチャートを参照しながら説明する。
画像形成装置1は、オペレーティングシステムの起動後、シャットダウンプログラム14Pを起動する。そして、CPU10aが1つまたは複数のコアによって、図11に示すように、シャットダウンプログラム14Pに基づいて処理を実行する。
CPU10aは、最大コア数Cmaxを決定する処理を開始する(図11の#741)。この処理の手順は、図5で説明した通りである。
電源スイッチ10wがオフにされると(#742でYes)、CPU10aは、設定対象リスト5Bに基づいて、シャットダウンの準備を行うように各ハードウェアモジュールへ指令するとともにオペレーティングシステム領域6Aおよびデバイス領域6Bの初期設定を行う(#743、#744)。
CPU10aは、初期設定などが完了したハードウェアモジュールを示すリストつまり終了デバイスリスト5Dを生成し、eMMC10eに保存する(#745)。そして、スナップ対象領域6Sを決定し、スナップ対象領域6Sの各ブロックのスナップショット5Eを生成し共有バッファ6Fへ一時的に記憶させる(#746)。スナップショット5Eを生成する手順は、前に図6で説明した通りである。
CPU10aは、1つのスナップ対象領域6Sのすべてのブロックのスナップショット5Eが共有バッファ6Fに保存されるごとに、これらを纏めてファイル化することによってスナップショットファイル5Fを生成し、eMMC10eに保存する(#747)。保存の処理については、図7で説明した通りである。
図5で説明した通り、電源スイッチ10wをオフにされると(#703でYes)、CPU10aは、ステップ#704〜#711の処理を開始する。CPU10aは、この処理のほか、ステップ#704〜#711の処理、ステップ#741の処理、ステップ#743〜#746の処理、およびステップ#747の処理を並行して実行する。
電源スイッチ10wがオンにされると、CPU10aは、図12に示すように、起動プログラム13Pに基づいて処理を実行する。
CPU10aは、eMMC10eから終了デバイスリスト5Dを読み出し(図12の#751)、ハイバネーションの機能による初期化が可能であるハードウェアモジュールおよび可能でないハードウェアモジュールを特定する(#752)。
CPU10aは、可能であるハードウェアモジュールについては(#753でYes)、そのハードウェアモジュールのスナップショットファイル5FをeMMC10eから読み出し(#754)、伸張してメインメモリ10bへ展開(ロード)する(#755)。つまり、ワープ起動のように、そのハードウェアモジュールのための設定を行う。
一方、可能でないハードウェアモジュールについては(#756でYes)、通常通り、つまり、補助記憶装置10dから設定値などを読み出してメインメモリ10bへロードするなどして、そのハードウェアモジュールのための設定を行う(#757)。
本実施形態によると、複数のコアを有するCPUを備える画像処理装置においてスナップショットを従来よりも確実に取得することができる。
図13は、各ハードウェアモジュールの優先度レベルの例を示す図である。図14は、最大コア数Cmaxおよび各コアの動作それぞれの遷移の例を示す図である。図15は、最大コア数決定処理の流れの例を説明するフローチャートである。図16は、スナップ対象領域6Sの例を示す図である。図17は、最大コア数Cmaxおよび各コアの動作それぞれの遷移の例を示す図である。図18は、最大コア数Cmaxおよび各コアの動作それぞれの遷移の例を示す図である。
本実施形態では、スナップショット取得部146は、スナップ対象領域6Sが複数ある場合に、どのスナップ対象領域6Sから優先的にスナップショット5Eを生成するのかの順番を特に決めなかった。しかし、予め順番を決めておいてもよい。
例えば、図13のように、ハードウェアモジュールごとに予め優先度レベルを決めておく。そして、スナップショット取得部146は、優先度レベルの高いハードウェアモジュールのスナップ対象領域6Sから順にスナップショット5Eを生成していく。なお、優先度レベルは、値が小さいものほど高い。
図13に示すように優先度レベルが決められており、図8に示すように3つのスナップ対象領域6S1、6S1、および6S3が選出され、かつ、スナップ対象領域6S1、6S1、および6S3それぞれが画像処理回路10mのデバイス領域6B、補助記憶装置10d、および入出力インタフェース10rである場合は、優先度レベルがスナップ対象領域6S1、6S3、および6S2の順に高い。よって、図14に例示するようにスナップショット5Eが生成される。
本実施形態では、最大コア数決定部145は、経過時間Twが増えるごとに、つまり、電源スイッチ10wがオフにされてから時間が経過するとともに、最大コア数Cmaxを徐々に減らした。しかし、いずれかの特定のハードウェアモジュールへのAC/DCコンバータ10uによる電力の供給が終了した際に、最大コア数Cmaxを増やしてもよい。または、電力の供給が終了したハードウェアモジュールの個数が所定の個数(例えば、3個、6個、9個、…)になるごとに、最大コア数Cmaxを増やしてもよい。
または、最大コア数決定部145は、経過時間Twではなく、AC/DCコンバータ10uの瞬電対策回路の電圧(以下、「電源電圧Es」と記載する。)に応じて最大コア数Cmaxを決定してもよい。
この場合は、電源電圧Esを計測する電圧計を画像形成装置1に設けておく。そして、最大コア数決定部145は、例えば、図15に示す手順で最大コア数Cmaxを決定する。
最大コア数決定部145は、オフ信号5Aを受信する前に、予め、最大コア数Cmaxとして所定の値Caを設定しておく(図15の#762)。
オフ信号5Aが受信されると(#763でYes)、最大コア数決定部145は、タイマTmに所定の時間Taをセットし(#764)、カウントダウンを開始する(#765)。
タイマTmが0ミリ秒になったら、つまり、ステップ#764の時点から所定の時間Taが経過したら(#766でYes)、最大コア数決定部145は、電源電圧Esを電圧計に計測させる(#767)。
そして、電源電圧Esに応じて、最大コア数決定部145は、次のように最大コア数Cmaxを決定する。電源電圧Esが電圧E1以上であれば(#768でYes)、最大コア数Cmaxを「4」に決定する(#769)。電圧E1未満でありかつ電圧E2以上であれば(#768でNo、#770でYes)、「3」に決定する(#771)。電圧E2未満でありかつ電圧E3以上であれば(#770でNo、#772でYes)、「2」に決定する(#773)。電圧E3未満であれば(#772でNo)、「1」に決定する(#774)。ただし、電圧E1>電圧E2>電圧E3、である。
最大コア数決定部145は、ステップ#764〜#774の処理を、スナップショット取得部146による処理が継続している間(#775でYes)、繰り返し実行する。
上述の通り、オペレーティングシステムのシャットダウンのための処理中に、AC/DCコンバータ10uからいずれかのハードウェアモジュールへの電力の供給が終了する。すると、電源電圧Esが上がることがある。これに伴い、最大コア数Cmaxが増え、スナップショット5Eを生成するのに使用されるコアが増えることがある。
ここで、電源電圧Esが上がる場合の、CPU10aの4つのコアそれぞれによるスナップショット5Eの生成の処理を、以下の条件の下で実行される場合を例に、図9を参照しながら説明する。
電圧E1、E2、およびE3は、それぞれ、5.0ボルト、4.8ボルト、および4.6ボルトである。所定の時間Taは、保証時間Thである。よって、所定の時間Taは、40ミリ秒である。所定の値Caは、「4」である。
図16のように、3つのオペレーティングシステム領域6Aまたはデバイス領域6Bがスナップ対象領域6S(6S4、6S5、6S6)してと選出され、スナップ対象領域6S4、6S5、および6S6は、それぞれ13個、3個、3個のブロックに分割される。スナップ対象領域6S4の各ブロックを「A−1」、「A−2」、…、「A−13」と記載する。スナップ対象領域6S5の各ブロックを「B−1」、「B−2」、「B−3」と記載する。スナップ対象領域6S6の各ブロックを「C−1」、「C−2」、「C−3」と記載する。
所定の時間Taが40ミリ秒なので、電源電圧Esは、40ミリ秒ごとに計測される。その結果は、図17に示す通りである。200ミリ秒目において、電源電圧Esが前回の計測値よりも上がっていることが分かる。
このような条件において、図15に示した手順で最大コア数決定部145が処理を実行し、スナップショット取得部146がスナップショット5Eを生成する処理を実行すると、図17のように、最大コア数Cmaxが決定され、CPU10aの各コアによって各ブロックのスナップショット5Eが生成される。
このように、電源電圧Esが前回の計測値よりも上がったときにスナップショット5Eの生成のために使用されるコアが増えることが、ある。
なお、電源電圧Esが前回の計測値よりも上がることがなければ、図18のように、スナップショット5Eの生成のために使用されるコアが増えることはない。
CPU10aの4つのコアの中から、シャットダウンプログラム14Pを実行するためのコアを1つまたは2つ、確保しておき、スナップショット5Eを取得する処理を残りのコアで行ってもよい。
本実施形態では、4つのコアを有するマルチコアCPUがCPU10aとして用いられる場合を例に説明したが、2つ、6つ、または8つのコアを有するマルチコアCPUが用いられる場合にも、本発明を適用することができる。
その他、画像形成装置1の全体または各部の構成、処理の内容、処理の順序、データの構成などは、本発明の趣旨に沿って適宜変更することができる。