(57)【特許請求の範囲】
【請求項１】
少なくとも第一のコアおよび第二のコアを有するプロセッサと、
前記第一のコアおよび前記第二のコアによって共有されるメモリと、
を有し、
特定の処理を行うための第一のプログラムが前記メモリにロードされ前記第一のコアによって実行されているときに、前記第一のプログラムと同一の第二のプログラムが前記メモリにロードされ、
前記第一のプログラムが前記第一のコアによって実行される代わりに、前記第二のプログラムが前記第二のコアによって実行され、
前記第二のプログラムが前記第二のコアによって実行されるのに伴って前記第一のプログラムを実行するための第一のリソースが解放される、
ことを特徴とする画像処理装置。
【請求項２】
前記特定の処理は、画像の入出力を伴うジョブを制御する処理である、
請求項１に記載の画像処理装置。
【請求項３】
前記第一のリソースは、前記第二のコアが前記第二のプログラムに基づいて前記特定の処理を行うことができる状態になった後に解放される、
請求項１または請求項２に記載の画像処理装置。
【請求項４】
前記第二のコアが前記状態になるまでに前記第一のコアが前記特定の処理を新たに実行する必要が生じた場合に、前記第一のリソースを解放するのを中止し、前記第二のプログラムを実行するための第二のリソースを解放する、
請求項３に記載の画像処理装置。
【請求項５】
前記特定の処理は、他の装置からＴＣＰ／ＩＰの通信によって受信した画像をプリントするプリントジョブ、ＡＤＦ（Auto Document Feeder）を使用して画像をスキャンし用紙に複写する第一のコピージョブ、前記ＡＤＦを使用せずに画像をスキャンし用紙に複写する第二のコピージョブ、前記ＡＤＦを使用して画像をスキャンし画像データを生成する第一のスキャンジョブ、前記ＡＤＦを使用せずに画像をスキャンし画像データを生成する第二のスキャンジョブ、他の装置から電話回線を介して受信した画像をプリントするファックス受信ジョブ、または画像をスキャンして電話回線を介して他の装置へ送信するファックス送信ジョブを制御する処理であり、
前記第二のコアが前記状態になるまでに、前記第一のコアが前記特定の処理として、前記プリントジョブ、前記第一のコピージョブ、または前記第一のスキャンジョブを制御する処理を新たに実行する必要が生じた場合に、前記第一のリソースを解放するのを中止し、前記第二のプログラムを実行するための第二のリソースを解放する、
請求項１ないし請求項３のいずれかに記載の画像処理装置。
【請求項６】
新たに実行する必要が生じた前記特定の処理が完了した後、前記第二のプログラムが前記メモリにロードされる、
請求項４または請求項５に記載の画像処理装置。
【請求項７】
前記第二のプログラムは、前記第一のコアおよび前記第一のプログラムによる前記特定の処理にエラーが発生した場合、当該画像処理装置が前記特定の処理を実行していない場合、前記第一のプログラムが実行され始めてから所定の時間が経過した場合、当該画像処理装置が省電力モードに切り換わった場合、または所定の量以上である前記特定の処理を実行した場合に、前記メモリにロードされる、
請求項１ないし請求項６のいずれかに記載の画像処理装置。
【請求項８】
前記第一のリソースを解放する際に、前記第一のコアおよび前記第一のプログラムが使用する、ハードウェアに関する設定値のデータは、前記メモリに残され、前記第二のコアおよび前記第二のプログラムによって使用される、
請求項１ないし請求項７のいずれかに記載の画像処理装置。
【請求項９】
前記第二のコアが前記状態になるまでに前記第一のコアが前記特定の処理を新たに実行する必要が所定の複数回以上生じた場合または新たに生じた後所定の時間が経過した場合は、前記第一のリソースを解放するのを中止することなく、前記第二のプログラムがロードされ前記第二のコアによって実行される、
請求項６に記載の画像処理装置。
【請求項１０】
前記第一のコアおよび前記第一のプログラムによる前記特定の処理にエラーが発生した場合に、前記第二のコアによって第一のメッセージをディスプレイに表示させ、前記第二のコアが前記第二のプログラムに基づいて前記特定の処理を行うことができる状態になった後に第二のメッセージを前記ディスプレイに表示させる、
請求項７に記載の画像処理装置。
【請求項１１】
少なくとも第一のコアおよび第二のコアを有するプロセッサと、前記第一のコアおよび前記第二のコアによって共有されるメモリと、を有する画像処理装置において、特定の処理を行うための第一のプログラムを再起動するプログラム再起動方法であって、
前記第一のプログラムが前記メモリにロードされ前記第一のコアによって実行されているときに、前記第一のプログラムと同一の第二のプログラムを前記メモリにロードし、
前記第一のプログラムを前記第一のコアによって実行する代わりに、前記第二のプログラムを前記第二のコアによって実行し、
前記第二のプログラムを前記第二のコアによって実行するのに伴って前記第一のプログラムを実行するためのリソースを解放する、
ことを特徴とするプログラム再起動方法。
【請求項１２】
複数のコアを有しかつ前記複数のコアがメモリを共有するように構成されたプロセッサに用いられるコンピュータプログラムであって、
前記複数のコアのうちのいずれかに、
前記複数のコアのうちの他のいずれかによって実行される、当該コンピュータプログラムと同一である第二のコンピュータプログラムのためのリソースを解放する第一の処理を実行させ、
特定の処理が行われるように入力装置または出力装置を制御する第二の処理を実行させ、
当該コンピュータプログラムと同一のコンピュータプログラムである第三のコンピュータプログラムを前記メモリにロードし前記複数のコアのうちの他のいずれかに実行させる第三の処理を実行させる、
ことを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアのＣＰＵを有する画像処理装置におけるプログラムの再起動の技術に関する。
【背景技術】
【０００２】
近年、「ＭＦＰ（Multi Function Peripherals）」または「画像形成装置」などと呼ばれる、多機能な画像処理装置が普及している。
【０００３】
画像処理装置は、ＲＯＭ（Read Only Memory）またはＨＤＤ（Hard Disk Drive）などからプログラムをＲＡＭ（Random Access Memory）上に展開し、このプログラムをＣＰＵ（Central Processing Unit）に実行させることによって処理を行う。
【０００４】
複数のＣＰＵを備えた画像処理装置が提案されている。複数のＣＰＵを設けることによって、画像処理装置全体の管理の処理およびジョブに関する処理などを並列して行うことを従来よりも容易に実現することができる。
【０００５】
また、複数のＣＰＵを備えたシステムにおいて一つのＣＰＵに異常が検出された場合にシステム全体のダウンタイムを低減する技術が提案されている。特許文献１に記載される画像形成装置は、ソフトウェア記憶手段と、プロセッサと、処理の進行結果を記憶する記憶手段と、ソフトウェア暴走検出手段と、外部バスと、を有する複数の情報処理装置を備えた画像形成装置である。第一の情報処理装置は、外部バスを介して他の情報処理装置に暴走通知を通知する暴走通知手段と、を有し、暴走通知を取得した第二の情報処理装置が、第一の情報処理装置から進行結果を読み出す情報読み出し手段と、進行結果を記憶手段に記憶し、第一及び第二の情報処理装置以外の情報処理装置に送信する進行結果送信手段と、再起動後の前記第一の情報処理装置に処理を再開させる復帰手段と、を有する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−５４３１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、近年、画像処理装置のＣＰＵとして、マルチコアのＣＰＵが普及しつつある。マルチコアのＣＰＵによると、複数のＣＰＵを設ける場合と同様に、並列処理が従来よりも容易に実行可能となる。
【０００８】
特許文献１に記載される技術によると、一つのＣＰＵに異常が検出された場合に装置を復帰させることができる。
【０００９】
しかし、マルチコアのＣＰＵにおいては、異常の原因がＲＡＭにある場合に、この技術では画像処理装置を復帰させることができないことがある。マルチコアのＣＰＵにおいては、各コアがＲＡＭを共有するからである。したがって、この技術では、マルチコアのＣＰＵにおいてプログラムを安定して実行させることが難しい。
【００１０】
本発明は、このような問題点に鑑み、従来よりも容易にマルチコアのＣＰＵにおいてプログラムを安定して実行させることを、目的とする。
【課題を解決するための手段】
【００１１】
本発明の一形態に係る画像処理装置は、第一のコアおよび第二のコアを有するプロセッサと、前記第一のコアおよび前記第二のコアによって共有されるメモリと、を有し、特定の処理を行うための第一のプログラムが前記メモリにロードされ前記第一のコアによって実行されているときに、前記第一のプログラムと同一の第二のプログラムが前記メモリにロードされ、前記第一のプログラムが前記第一のコアによって実行される代わりに、前記第二のプログラムが前記第二のコアによって実行され、前記第二のプログラムが前記第二のコアによって実行されるのに伴って前記第一のプログラムを実行するための第一のリソースが解放される。前記特定の処理の一例は、画像の入出力を伴うジョブを制御する処理である。
【００１２】
好ましくは、前記第一のリソースは、前記第二のコアが前記第二のプログラムに基づいて前記特定の処理を行うことができる状態になった後に解放される。
【００１３】
または、前記第二のコアが前記状態になるまでに前記第一のコアが前記特定の処理を新たに実行する必要が生じた場合に、前記第一のリソースを解放するのを中止し、前記第二のプログラムを実行するための第二のリソースを解放する。
【発明の効果】
【００１４】
本発明によると、従来よりも容易にマルチコアのＣＰＵにおいてプログラムの安定化を図ることができる。
【図面の簡単な説明】
【００１５】
【図１】画像処理システムの全体的な構成の例を示す図である。
【図２】画像処理装置のハードウェア構成の例を示す図である。
【図３】スキャンユニットの構成の例を示す図である。
【図４】ＲＡＭの使用の状況の遷移の例を示す図である。
【図５】画像処理装置の機能的構成の例を示す図である。
【図６】中止要否判別処理の流れの例を説明するフローチャートである。
【図７】制御プログラムによる全体的な処理の流れの例を説明するフローチャートである。
【図８】制御プログラムによる全体的な処理の流れの例を説明するフローチャートである。
【図９】一部のリソースを引き継ぐ場合の、ＲＡＭの使用の状況の例を示す図である。
【発明を実施するための形態】
【００１６】
図１は、画像処理システム３の全体的な構成の例を示す図である。図２は、画像処理装置１のハードウェア構成の例を示す図である。図３は、スキャンユニット１０ｉの構成の例を示す図である。
【００１７】
画像処理システム３は、画像に関する種々の処理を実行するシステムであって、図１に示すように、画像処理装置１、端末装置２１、および通信回線２８などによって構成される。
【００１８】
画像処理装置１と端末装置２１とは、通信回線２８を介して通信を行うことができる。通信回線２８として、公衆回線、いわゆるＬＡＮ（Local Area Network）回線、インターネット、または専用線などが用いられる。
【００１９】
画像処理装置１は、コピー、プリント、ファックス、およびスキャナなどの機能を集約した装置である。一般に、「画像形成装置」、「複合機」、または「ＭＦＰ（Multi Function Peripheral）」などと呼ばれることがある。
【００２０】
画像処理装置１は、図２に示すように、ＣＰＵ（Central Processing Unit）１０ａ、ＲＡＭ（Random Access Memory）１０ｂ、ＲＯＭ（Read Only Memory）１０ｃ、大容量記憶装置１０ｄ、タッチパネルディスプレイ１０ｅ、操作キーパネル１０ｆ、ＮＩＣ（Network Interface Card）１０ｇ、モデム１０ｈ、スキャンユニット１０ｉ、およびプリントユニット１０ｊなどによって構成される。
【００２１】
タッチパネルディスプレイ１０ｅは、ユーザに対するメッセージを示す画面、ユーザがコマンドまたは情報を入力するための画面、およびＣＰＵ１０ａが実行した処理の結果を示す画面などを表示する。また、タッチパネルディスプレイ１０ｅは、タッチされた位置を示す信号をＣＰＵ１０ａへ送る。
【００２２】
操作キーパネル１０ｆは、いわゆるハードウェアキーボードであって、テンキー、スタートキー、ストップキー、およびファンクションキーなどによって構成される。
【００２３】
ＮＩＣ１０ｇは、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）などのプロトコルで端末装置２１との間でデータのやり取りを行う。
【００２４】
モデム１０ｈは、ファクシミリ端末との間でＧ３などのプロトコルでファックスデータをやり取りする。
【００２５】
スキャンユニット１０ｉは、スキャンの対象の用紙（以下、「原稿」と記載する。）から画像を読み取って画像データを生成する。スキャンユニット１０ｉは、図３に示すように、イメージセンサ１０ｉ１、読取用スリット１０ｉ２、フラットベッド１０ｉ３、およびＡＤＦ（Auto Document Feeder）１０ｉ４などによって構成される。
【００２６】
ＡＤＦ１０ｉ４は、原稿がセットされると、それを１枚ずつ読取用スリット１０ｉ２へ向けて搬送する。フラットベッド１０ｉ３には、原稿がユーザによってセットされる。
【００２７】
イメージセンサ１０ｉ１は、ＡＤＦ１０ｉ４に原稿がセットされた場合は、原稿が読取用スリット１０ｉ２を通過する際に、原稿をスキャンして画像データを生成する。または、フラットベッド１０ｉ３に原稿がセットされた場合は、フラットベッド１０ｉ３を走査することによって原稿をスキャンして画像データを生成する。
【００２８】
プリントユニット１０ｊは、スキャンユニット１０ｉによって読み取られた画像のほか、ＮＩＣ１０ｇまたはモデム１０ｈによって他の装置から取得した画像を用紙に印刷する。
【００２９】
ＣＰＵ１０ａは、複数のコアを有するマルチコアＣＰＵである。本実施形態では、ＣＰＵ１０ａとして、４つのコア１ＣＲを有するクアッドコアが用いられる。以下、それぞれのコア１ＣＲを「第一のコア１ＣＲ１」、「第二のコア１ＣＲ２」、…、「第四のコア１ＣＲ４」と区別して記載することがある（図４参照）。ＲＡＭ１０ｂは、４つのコア１ＣＲによって共有される。
【００３０】
ＲＯＭ１０ｃまたは大容量記憶装置１０ｄには、制御プログラム１ＰＡが記憶されている。制御プログラム１ＰＡは、ＲＡＭ１０ｂに常駐し、ＣＰＵ１０ａのいずれかのコア１ＣＲによって実現される。大容量記憶装置１０ｄとして、ＨＤＤ（Hard Disk Drive）またはＳＳＤ（Solid State Drive）などが用いられる。
【００３１】
制御プログラム１ＰＡは、画像処理装置１の全体的な制御、例えば、ジョブの実行に関する全体的な制御を行う。
【００３２】
図１に戻って、端末装置２１は、画像処理装置１のサービスを受けるクライアントである。端末装置２１として、パーソナルコンピュータ、スマートフォン、またはタブレットコンピュータなどが用いられる。
【００３３】
図４は、ＲＡＭ１０ｂの使用の状況の遷移の例を示す図である。図５は、画像処理装置１の機能的構成の例を示す図である。図６は、中止要否判別処理の流れの例を説明するフローチャートである。
【００３４】
次に、制御プログラム１ＰＡによって実現される機能について、図４〜図６を参照しながら説明する。
【００３５】
制御プログラム１ＰＡは、ＲＡＭ１０ｂにロードされ、４つのコア１ＣＲのうちのいずれか１つによって実行される。
【００３６】
ところで、一般に、プログラムを実行していると、メモリの分断化またはメモリリークが発生する。これにより、エラーが発生しやすくなったり処理が遅くなったりすることがある。そこで、従来、メモリの分断化またはメモリリークを解消するために、プログラムを再起動する。具体的には、プログラムを終了してメモリからプログラムを解放し、プログラムを再度、メモリにロードして実行する。ところが、再起動によるダウンタイムが生じるので、ユーザにとって不便が生じることがある。
【００３７】
しかし、制御プログラム１ＰＡによると、再起動に伴うダウンタイムを従来よりも短くすることができる。その仕組みの概要を、制御プログラム１ＰＡを第一のコア１ＣＲ１が実行している場合を例に、図４を参照しながら説明する。
次の通りである。
【００３８】
図４に示す状態Ａの通り、ＲＡＭ１０ｂに、制御プログラム１ＰＡがロードされ、第一のコア１ＣＲ１によって実行される。第一のコア１ＣＲ１は、適宜、ジョブの制御などを行うとともに、再起動すべきか否かを判別する。
【００３９】
再起動すべきである場合に、第一のコア１ＣＲ１は、ＲＡＭ１０ｂの空いている領域に制御プログラム１ＰＡをロードし、他のコア１ＣＲに実行させる。本例では、図４に示す状態Ｂのように、第二のコア１ＣＲ２に実行させる。これにより、同じ制御プログラム１ＰＡが２つ、並行して実行される。
【００４０】
ただし、第二のコア１ＣＲ２は、直ちには、ジョブの制御などを行わず、第一のコア１ＣＲ１からのコマンドを待つ。
【００４１】
第一のコア１ＣＲ１は、実行中のジョブが完了したら、ジョブの制御などを開始するように第二のコア１ＣＲ２に対して指令する。すると、図４に示す状態Ｃのように、第二のコア１ＣＲ２は、待機を終了し、適宜、ジョブの制御などを行うとともに、再起動すべきか否かを判別する。第一のコア１ＣＲ１は、制御プログラム１ＰＡを終了する。
【００４２】
そして、図４に示す状態Ｄのように、第一のコア１ＣＲ１が実行していた制御プログラム１ＰＡがＲＡＭ１０ｂから解放される。
【００４３】
以下、並行して実行され得る同一の２つの制御プログラム１ＰＡを区別するために、先に起動されるほうを「先制御プログラム１ＰＡ１」と記載し、後に起動されるほうを「後制御プログラム１ＰＡ２」と記載することがある。
【００４４】
なお、第一のコア１ＣＲ１は先制御プログラム１ＰＡ１のみを実行し、第二のコア１ＣＲ２は後制御プログラム１ＰＡ２のみを実行するのが望ましいが、他のプログラムを並行して実行してもよい。
【００４５】
制御プログラム１ＰＡについて、さらに詳細に説明する。制御プログラム１ＰＡによると、図５に示すジョブ制御部１０１、終了処理部１０２、および引継処理部１０３などが実現される。
【００４６】
ジョブ制御部１０１は、外部からの入力に従ってジョブを生成し、キューに登録する。そして、登録順および各ハードウェアの稼働の状況などに応じて、各ジョブを各ハードウェアに実行させる。
【００４７】
例えば、ユーザが原稿の用紙をセットしコピーのコマンドを入力した場合は、ジョブ制御部１０１は、コピージョブを生成し、キューに登録する。そして、このコピージョブの順番が訪れると、このコピージョブの実行を開始する。
【００４８】
または、ユーザが原稿の用紙をセットしスキャンのコマンドを入力した場合は、ジョブ制御部１０１は、スキャンジョブを生成し、キューに登録する。そして、このスキャンジョブの順番が訪れると、このスキャンジョブの実行を開始する。
【００４９】
または、ユーザが原稿の用紙をセットしファックスによる送信のコマンドを入力した場合は、ジョブ制御部１０１は、ファックス送信ジョブを生成し、キューに登録する。そして、このファックス送信ジョブの順番が訪れると、このファックス送信ジョブの実行を開始する。
【００５０】
または、ＰＤＬ（Page Description Language）で記述された印刷データおよびプリントのコマンドが端末装置２１から送信されてきた場合は、ジョブ制御部１０１は、プリントジョブを生成し、キューに登録する。そして、このプリントジョブの順番が訪れると、このプリントジョブの実行を開始する。
【００５１】
または、ファックスデータがファックス端末から送信されてきた場合は、ジョブ制御部１０１は、ファックス受信ジョブを生成し、キューに登録する。そして、このファックス受信ジョブの順番が訪れると、このファックス受信ジョブの実行を開始する。
【００５２】
これらのジョブを実行する際に、ジョブ制御部１０１は、ＲＡＭ１０ｂの空き領域に、ジョブに応じて作業領域を確保し、適宜、データを記憶させる。また、適宜、作業領域を解放する。作業領域が確保することができない場合は、他の処理が終わって空き領域ができるまでジョブの実行を待つ。
【００５３】
また、ジョブの種類またはジョブの状況などに応じて、他のコア１ＣＲにジョブを割り振って実行させてもよい。意図的に特定のコア１ＣＲに特定のジョブを割り振って実行させることもある。コア１ＣＲおよびＲＡＭ１０ｂのこれらの制御は、公知の方法によって行われる。
【００５４】
なお、ジョブ制御部１０１は、この制御プログラム１ＰＡが先制御プログラム１ＰＡ１として用いられているときに機能する。
【００５５】
終了処理部１０２は、再起動タイミング検知部１２１、プログラム起動処理部１２２、中止要否判別部１２３、リソース解放処理部１２４、および開始指令部１２５などによって構成される。終了処理部１０２は、この制御プログラム１ＰＡが先制御プログラム１ＰＡ１として働く場合に機能する。そして、先制御プログラム１ＰＡ１を終了し、後制御プログラム１ＰＡ２にジョブの制御を引き継がせるための処理を、次のように行う。
【００５６】
再起動タイミング検知部１２１は、制御プログラム１ＰＡを再起動すべきタイミングが訪れたことを検知する。例えば、次の（１）〜（５）の場合に、このタイミングが訪れたことを検知する。（１）ジョブ制御部１０１による処理にエラーが発生した場合。（２）実行待ちのジョブがなくなった場合。（３）この制御プログラム１ＰＡを起動してから所定の時間が経過した場合。（４）省電力モードに移行することになった場合または省電力モードに移行に移行した場合。（５）処理の量が所定の量以上であるジョブを終了した場合。
【００５７】
ジョブの量は、印刷する枚数、スキャンする枚数、取り扱う画像の解像度またはカラーであるかモノクロであるか、などに応じて、予め用意された算出方法によって求めればよい。算出方法は、公知のものを用いればよい。
【００５８】
プログラム起動処理部１２２は、この制御プログラム１ＰＡ（先制御プログラム１ＰＡ１）を終了することなく、新たに制御プログラム１ＰＡ（後制御プログラム１ＰＡ２）を起動させる。すなわち、ＲＡＭ１０ｂの空き領域に新たに制御プログラム１ＰＡを後制御プログラム１ＰＡ２としてロードする。そして、他のコア１ＣＲにこれを実行させる。以下、第二のコア１ＣＲ２が後制御プログラム１ＰＡ２を実行する場合を例に説明する。
【００５９】
すると、第二のコア１ＣＲ２は、後制御プログラム１ＰＡ２に従って処理を開始する。後制御プログラム１ＰＡ２によると、まずは、ジョブ制御部１０１ないし引継処理部１０３のうちの引継処理部１０３が動作する。ジョブ制御部１０１および終了処理部１０２は未だ動作せず、開始の指令を受けるまで待機する。
【００６０】
したがって、この時点においては、先制御プログラム１ＰＡ１および後制御プログラム１ＰＡ２が並行に実行されているが、第一のコア１ＣＲ１および先制御プログラム１ＰＡ１によってジョブ制御部１０１および終了処理部１０２のみが動作し、第二のコア１ＣＲ２および後制御プログラム１ＰＡ２によって引継処理部１０３のみが動作している。
【００６１】
中止要否判別部１２３は、後制御プログラム１ＰＡ２の起動が開始された後、これを中止すべきか継続すべきかを、例えば図６に示す方法で判別する。
【００６２】
中止要否判別部１２３は、カウンタＣｔを有している。カウンタＣｔには、制御プログラム１ＰＡ（本例では、先制御プログラム１ＰＡ１）が起動しジョブ制御部１０１が動作し始めた直後に「０」がセットされる。
【００６３】
中止要否判別部１２３は、後制御プログラム１ＰＡ２の起動が開始された後、ジョブ制御部１０１によってジョブが新たに受け付けられるごとに、そのジョブの種類または条件に応じて、中止すべきか継続すべきかを図６に示す手順で判別する。
【００６４】
そのジョブがファックス送信ジョブまたはファックス受信ジョブである場合は（図６の＃７０１でＹｅｓ）、中止要否判別部１２３は、起動を継続すべきであると判別する（＃７０４）。
【００６５】
そのジョブがコピージョブまたはスキャンジョブである場合、つまり、スキャンユニット１０ｉを使用するジョブである場合は（＃７０１でＮｏ、＃７０２でＹｅｓ）、中止要否判別部１２３は、ＡＤＦ１０ｉ４を使用するか否かによって次のように判別する。
【００６６】
ＡＤＦ１０ｉ４を使用しない場合は（＃７０３でＮｏ）、中止要否判別部１２３は、起動を継続すべきであると判別する（＃７０４）。
【００６７】
一方、ＡＤＦ１０ｉ４を使用する場合は（＃７０３でＹｅｓ）、中止要否判別部１２３は、起動を中止すべきであると判別する（＃７０５）。さらに、カウンタＣｔに「１」を加算する（＃７０６）。
【００６８】
「カウンタＣｔ」は、起動を中止すべきであると判別した回数をカウントするためのカウンタである。カウンタＣｔには、この制御プログラム１ＰＡ（本例では、先制御プログラム１ＰＡ１）の起動の際に「０」がセットされる。
【００６９】
なお、ＡＤＦ１０ｉ４を使用するか否かは、原稿がＡＤＦ１０ｉ４およびフラットベッド１０ｉ３のどちらにセットされたのかによって判別することができる。前者の場合は、ＡＤＦ１０ｉ４を使用すると判別し、後者の場合はＡＤＦ１０ｉ４を使用しないと判別すればよい。
【００７０】
そのジョブがプリントジョブである場合は（＃７０１でＮｏ、＃７０２でＮｏ）、中止要否判別部１２３は、起動を中止すべきであると判別し（＃７０５）、カウンタＣｔに「１」を加算する（＃７０６）。
【００７１】
なお、カウンタＣｔが「１０」に達している場合は、中止要否判別部１２３は、図６に示した判別の処理をスキップする。そして、ジョブの種類およびジョブの状況に関わらず、起動を継続すべきであると判別する。
【００７２】
リソース解放処理部１２４は、起動を中止すべきであると中止要否判別部１２３によって判別された場合に、後制御プログラム１ＰＡ２の起動のためのリソースを解放する。具体的には、ＲＡＭ１０ｂの中の、後制御プログラム１ＰＡ２を起動するための作業領域および後制御プログラム１ＰＡ２を記憶するための領域を解放する。さらに、第二のコア１ＣＲ２が後制御プログラム１ＰＡ２を実行し始めている場合は、これを中止させる。
【００７３】
ところで、上述の通り、第二のコア１ＣＲ２によって後制御プログラム１ＰＡ２が実行され始めると、引継処理部１０３が開始するが、ジョブ制御部１０１および終了処理部１０２は待機する。
【００７４】
開始指令部１２５は、第一のコア１ＣＲ１が管理するジョブがすべて完了しており、かつ、第二のコア１ＣＲ２によって引継処理部１０３が開始すると、第二のコア１ＣＲ２に対して開始コマンド４１を与える。
【００７５】
第二のコア１ＣＲ２において、引継処理部１０３は、開始コマンド４１が与えられると、画像処理装置１の全体的な制御を第一のコア１ＣＲ１から引き継ぐ処理を次のように行う。
【００７６】
引継処理部１０３は、待機解除部１３１およびリソース解放処理部１３２などによって構成される。
【００７７】
待機解除部１３１は、開始コマンド４１が与えられると、ジョブ制御部１０１および終了処理部１０２の待機を解除し、ジョブ制御部１０１および終了処理部１０２による処理を開始させる。
【００７８】
リソース解放処理部１３２は、先制御プログラム１ＰＡ１のためのリソースを解放する。具体的には、第一のコア１ＣＲ１に先制御プログラム１ＰＡ１を終了させる。ＲＡＭ１０ｂの中の、先制御プログラム１ＰＡ１が記憶されている領域を解放する。先制御プログラム１ＰＡ１の作業領域が残っていれば、これも解放する。
【００７９】
図７および図８は、制御プログラム１ＰＡによる全体的な処理の流れの例を説明するフローチャートである。
【００８０】
次に、画像処理装置１の電源がオンになりまたはリセットされてから制御プログラム１ＰＡの再起動が完了するまでの全体的な処理の流れを、図７および図８のフローチャートを参照しながら説明する。
【００８１】
画像処理装置１の電源がオンになりまたはリセットされると、制御プログラム１ＰＡが起動し、第一のコア１ＣＲ１は、この制御プログラム１ＰＡに基づいて、図７および図８に示す手順で処理を実行する。この制御プログラム１ＰＡは、先制御プログラム１ＰＡ１として用いられる。
【００８２】
今回の起動は、電源のオンまたはリセットによるものなので（＃７１１でＹｅｓ）、第一のコア１ＣＲ１は、通常通りのセットアップを行う（＃７１２）。具体的には、ハードウェアの初期化、ドライバの起動、および種々のデータのロードなどを行う。さらに、本実施形態では、カウンタＣｔに「０」をセットする（＃７１６）。
【００８３】
第一のコア１ＣＲ１は、ジョブの実行に関する制御など、画像処理装置１の全体的な制御を適宜、実行する（＃７１７）。さらに、所定の事項（例えば、前に述べた（１）〜（５））が起きたか否かを監視することによって、再起動のタイミングが訪れたか否かの検知を試みる（＃７１８）。
【００８４】
再起動のタイミングが訪れたことを検知したら（＃７１９でＹｅｓ）、第一のコア１ＣＲ１は、制御プログラム１ＰＡの起動を開始させる（＃７２０）。なお、この制御プログラム１ＰＡは、後制御プログラム１ＰＡ２として用いられる。
【００８５】
第二のコア１ＣＲ２および後制御プログラム１ＰＡ２によるセットアップが完了するまでに、第一のコア１ＣＲ１が新たなジョブを生成することがある。
【００８６】
第一のコア１ＣＲ１は、新たなジョブを生成したら（＃７２１でＹｅｓ）、再起動（後制御プログラム１ＰＡ２の起動）を中止すべきか継続すべきかを判別する（＃７２３）。判別の方法は、前に図６で説明した通りである。
【００８７】
ただし、カウンタＣｔの値が１０以上である場合、つまり、中止すべきであると１０回以上判別したことがある場合は（＃７２２でＹｅｓ）、第一のコア１ＣＲ１は、図６に示した方法に依らず、継続すべきであると判別する（＃７２４）。
【００８８】
第一のコア１ＣＲ１は、中止すべきであると判別すると（＃７２５でＹｅｓ）、後制御プログラム１ＰＡ２の起動のためのリソースを解放する（＃７２６）。
【００８９】
そして、このジョブが完了したら（＃７２７でＹｅｓ）、ステップ＃７２０に戻って、第一のコア１ＣＲ１は、後制御プログラム１ＰＡ２の起動を一からやり直す。ステップ＃７１７に戻って、再起動のタイミングの検知からやり直してもよい。
【００９０】
継続すべきであると判別した場合は（＃７２５でＮｏ）、第一のコア１ＣＲ１は、第二のコア１ＣＲ２および後制御プログラム１ＰＡ２によるジョブ等の制御の準備が整い（＃７２８でＹｅｓ）、かつ、すべてのジョブが完了していれば（＃７２９でＹｅｓ）、開始コマンド４１を第二のコア１ＣＲ２に与える（＃７３０）。
【００９１】
一方、第二のコア１ＣＲ２も、後制御プログラム１ＰＡ２に基づいて、図７および図８に示す手順で処理を実行する。
【００９２】
後制御プログラム１ＰＡ２の起動は、電源のオンまたはリセットによるものはなく、再起動のためのものなので（＃７１１でＮｏ）、第二のコア１ＣＲ２は、一部の処理（例えば、特定のハードウェアの初期化または特定のドライバの起動）をスキップしてセットアップを行う（＃７１３）。セットアップ後、開始コマンド４１が与えられるのを待つ。
【００９３】
そして、第一のコア１ＣＲ１から開始コマンド４１を与えられると（＃７１４でＹｅｓ）、第二のコア１ＣＲ２は、第一のコア１ＣＲ１による先制御プログラム１ＰＡ１の実行を終了させ、先制御プログラム１ＰＡ１を実行するためのリソースを解放する（＃７１５）。さらに、カウンタＣｔに「０」をセットし（＃７１６）、画像処理装置１の全体的な制御を適宜、実行し（＃７１７）、再起動のタイミングの検知を試みる（＃７１８）。ステップ＃７１６以降の処理は、電源のオンまたはリセットによる起動の場合と同様である。
【００９４】
また、ステップ＃７１６以降は、この制御プログラム１ＰＡの役割が、後制御プログラム１ＰＡ２から先制御プログラム１ＰＡ１に変わる。そして、上記の（１）〜（５）のいずれかの条件を満たしたときに、制御プログラム１ＰＡをＲＡＭ１０ｂにロードし、他のコア１ＣＲ（第一のコア１ＣＲ１、第三のコア１ＣＲ３、または１ＣＲ４）に実行させる。このように、制御プログラム１ＰＡが、次から次に別々のコア１ＣＲによって実行される。
【００９５】
つまり、Ｎ番目に制御プログラム１ＰＡ（以下、「制御プログラム１ＰＡｂ」と記載する。）が起動すると、（Ｎ−１）番目に起動された同一の制御プログラム１ＰＡ（以下、「制御プログラム１ＰＡａ」と記載する。）が終了し、制御プログラム１ＰＡａのためのリソースが解放される。その後、一定の要件が満たされた場合に、同一の制御プログラム１ＰＡ（以下、「制御プログラム１ＰＡｃ」と記載する。）が起動される。そして、制御プログラム１ＰＡｃの起動後、制御プログラム１ＰＡｂが終了し制御プログラム１ＰＡｂのリソースが解放される。
【００９６】
本実施形態によると、従来よりも容易にマルチコアのＣＰＵにおいてプログラムの安定化を図ることができる。しかも、第二のコア１ＣＲ２および後制御プログラム１ＰＡ２によるジョブの制御が可能になった時点で先制御プログラム１ＰＡ１のリソースを解放するので、ダウンタイムを軽減することができる。
【００９７】
図９は、一部のリソースを引き継ぐ場合の、ＲＡＭ１０ｂの使用の状況の例を示す図である。
【００９８】
本実施形態では、先制御プログラム１ＰＡ１のためのリソースをすべて解放したが、図９に示すように、一部のリソースを継続し、後制御プログラム１ＰＡ２において使用できるようにしてもよい。つまり、ＲＡＭ１０ｂに展開した制御プログラム１ＰＡのイメージのみを再構築してもよい。例えば、タッチパネルディスプレイ１０ｅに表示させる画面のデータが記憶されている領域または種々の事項の設定値のデータが記憶されている領域などを残し、第二のコア１ＣＲ２に引き継いでもよい。この場合は、第一のコア１ＣＲ１は、再起動が必要になった際に、これらの領域のアドレスを第二のコア１ＣＲ２へ通知すればよい。または、これらのデータを所定の領域にコピーし、第二のコア１ＣＲ２へ引き継いでもよい。
【００９９】
本実施形態では、中止要否判別部１２３は、プリントジョブが新たに発生し、またはＡＤＦを使用するコピージョブまたはスキャンジョブが発生した場合に、制御プログラム１ＰＡの再起動を中止すべきと判別したが、ジョブの種類および条件に関わらず中止すべきと判別してもよい。または、画像処理装置１のスペックまたは環境などに応じて、他の種類のジョブの発生した場合に、中止すべきと判別してもよい。
【０１００】
省電力モードの最中に、先制御プログラム１ＰＡ１を終了し後制御プログラム１ＰＡ２を起動した場合は、第二のコア１ＣＲ２は、第一のコア１ＣＲ１から開始コマンド４１を与えられてもジョブ制御部１０１および終了処理部１０２を直ちには開始しないのが望ましい。省電力モードが解除してから、ジョブ制御部１０１および終了処理部１０２を開始するのが望ましい。そして、後制御プログラム１ＰＡ２が起動してから経過した時間を、省電力モードが解除してから計るのが望ましい。
【０１０１】
本実施形態では、中止要否判別部１２３は、カウンタＣｔの値が１０以上になったらジョブの種類に関わらず、再起動を継続すべきと判別したが、カウンタＣｔの代わりに、制御プログラム１ＰＡを再起動すべきタイミングが訪れてからの時間を計るタイマを設け、このタイマによって所定の時間が計時されたら、無条件に再起動を継続すべきと判別してもよい。
【０１０２】
第一のコア１ＣＲ１が制御するジョブにエラーが発生して後制御プログラム１ＰＡ２を起動する場合は、第二のコア１ＣＲ２は、エラーに伴って再起動を行う旨のメッセージをタッチパネルディスプレイ１０ｅに表示してもよい。第二のコア１ＣＲ２および後制御プログラム１ＰＡ２によるジョブの制御が開始したら、第二のコア１ＣＲ２は、再起動を完了した旨のメッセージをタッチパネルディスプレイ１０ｅに表示してもよい。表示の処理は、後制御プログラム１ＰＡ２に記述しておけばよい。
【０１０３】
本実施形態では、４つのコア１ＣＲからなるマルチコアプロセッサをＣＰＵ１０ａとして用いたが、他の個数（例えば、２つ、６つ、または８つなど）のコア１ＣＲからなるマルチコアプロセッサを用いてもよい。
【０１０４】
その他、画像処理システム３、画像処理装置１の全体または各部の構成、処理内容、処理順序などは、本発明の趣旨に沿って適宜変更することができる。
【符号の説明】
【０１０５】
１  画像処理装置
１０ａ  ＣＰＵ（プロセッサ）
１０ｂ  ＲＡＭ（メモリ）
１ＣＲ１  第一のコア
１ＣＲ２  第二のコア
１ＰＡ１  先制御プログラム（第一のプログラム）
１ＰＡ２  後制御プログラム（第二のプログラム）
【図１】
0006464663.tif 000002
【図２】
0006464663.tif 000003
【図３】
0006464663.tif 000004
【図４】
0006464663.tif 000005
【図５】
0006464663.tif 000006
【図６】
0006464663.tif 000007
【図７】
0006464663.tif 000008
【図８】
0006464663.tif 000009
【図９】
0006464663.tif 000010