(57)【要約】【課題】複数のプロセッサコアの、どのプロセッサコアに異常が生じても確実に復旧する制御装置を提供する。【解決手段】サブコア３２は、メインコア３１に所定コマンドを所定送信間隔で送信し、その応答を受信する第１動作状態監視部５３と、所定応答時間内に応答を受信できない場合、メインコア３１に異常が発生したと判定する第１異常判定部５４と、異常の発生を判定した場合、動作ログを不揮発性メモリー２３に記録後、リセット処理を指令する第１リセット指令部５５とを備え、メインコア３１は、サブコア３２から所定コマンドを受信し、その応答を送信する第２動作状態監視部６４と、所定受信時間内に次の所定コマンドを受信できない場合、サブコア３２に異常が発生したと判定する第２異常判定部６５と、異常の発生を判定した場合、動作ログを不揮発性メモリー２３に記録後、リセット処理を指令する第２リセット指令部６６とを備える。【選択図】図３
2011159136.tif 000002
【特許請求の範囲】
【請求項１】
制御対象物を制御する複数のプロセッサコアと、当該複数のプロセッサコアによって共用されるリセットレジスターと、当該複数のプロセッサコアが自身の動作ログを記録するための揮発性の共有メモリーと、当該複数のプロセッサコアがアクセス可能な不揮発性メモリーと、を有し、前記各プロセッサコアは、メインコアおよびサブコアの少なくとも一方として機能し、且つ、前記複数のプロセッサコアの間で、前記メインコアおよび前記サブコアの主従関係が成立している制御装置であって、
前記サブコアは、
前記メインコアに対して、当該メインコアの動作状態を取得するための所定コマンドを所定の送信間隔で送信し、その応答を受信する第１動作状態監視部と、
前記応答を、所定の応答時間内に受信できなかった場合、前記メインコアに異常が発生したと判定する第１異常判定部と、
前記第１異常判定部により異常の発生を判定した場合、前記共有メモリー内の前記動作ログを前記不揮発性メモリーに記録した後、前記リセットレジスターに対し装置全体のリセット処理を指令する第１リセット指令部と、を備え、
前記メインコアは、
前記サブコアから前記所定コマンドを受信すると共に、前記サブコアに対し応答を送信する第２動作状態監視部と、
前記所定コマンドを受信してから、所定の受信時間内に次の前記所定コマンドを受信できなかった場合、前記サブコアに異常が発生したと判定する第２異常判定部と、
前記第２異常判定部により異常の発生を判定した場合、前記共有メモリー内の前記動作ログを前記不揮発性メモリーに記録した後、前記リセットレジスターに対し装置全体のリセット処理を指令する第２リセット指令部と、を備えたことを特徴とする制御装置。
【請求項２】
前記第１および第２動作状態監視部によるコア間通信を実行するか否かを示すフラグをさらに有し、
前記第１または第２リセット指令部の指令によりリセット処理が実行された場合、前記フラグを、コア間通信をしないことを示す無効状態に設定することを特徴とする請求項１に記載の制御装置。
【請求項３】
前記動作ログは、
前記共有メモリー上の所定領域に、所定時間間隔で記録され、
前記所定領域は、リングバッファとして構成されることを特徴とする請求項１または２に記載の制御装置。
【請求項４】
前記送信間隔、前記応答時間および前記受信時間のうちの、少なくとも１つを設定する時間設定部を、さらに備えたことを特徴とする請求項１ないし３のいずれか１項に記載の制御装置。
【請求項５】
前記フラグを無効状態に設定するまでのリセット処理の回数を設定するリセット回数設定部を、さらに備えたことを特徴とする請求項２ないし４のいずれか１項に記載の制御装置。
【請求項６】
前記サブコアは、外部装置から送信される指示を受信し、
前記メインコアは、前記指示に基づき前記制御対象物を制御することを特徴とする請求項１ないし５のいずれか１項に記載の制御装置。
【請求項７】
請求項１ないし６のいずれか１項に記載の制御装置を備えたことを特徴とする電子機器。
【請求項８】
制御対象物を制御する複数のプロセッサコアと、当該複数のプロセッサコアによって共用されるリセットレジスターと、当該複数のプロセッサコアが自身の動作ログを記録するための揮発性の共有メモリーと、当該複数のプロセッサコアがアクセス可能な不揮発性メモリーと、を有し、前記各プロセッサコアは、メインコアおよびサブコアの少なくとも一方として機能し、且つ、前記複数のプロセッサコアの間で、前記メインコアおよび前記サブコアの主従関係が成立している制御装置であって、の異常検出・復旧方法であって、
前記サブコアは、
前記メインコアに対して、当該メインコアの動作状態を取得するための所定コマンドを所定の送信間隔で送信し、その応答を受信する第１動作状態監視ステップと、
前記応答を、所定の応答時間内に受信できなかった場合、前記メインコアに異常が発生したと判定する第１異常判定ステップと、
前記第１異常判定ステップにより異常の発生を判定した場合、前記共有メモリー内の前記動作ログを前記不揮発性メモリーに記録した後、前記リセットレジスターに対し装置全体のリセット処理を指令する第１リセット指令ステップと、を実行し、
前記メインコアは、
前記サブコアから前記所定コマンドを受信すると共に、前記サブコアに対し応答を送信する第２動作状態監視ステップと、
前記所定コマンドを受信してから、所定の受信時間内に次の前記所定コマンドを受信できなかった場合、前記サブコアに異常が発生したと判定する第２異常判定ステップと、
前記第２異常判定ステップにより異常の発生を判定した場合、前記共有メモリー内の前記動作ログを前記不揮発性メモリーに記録した後、前記リセットレジスターに対し装置全体のリセット処理を指令する第２リセット指令ステップと、を実行することを特徴とする制御装置の異常検出・復旧方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、１つのパッケージ内に複数のプロセッサコアが集積されたマルチコアプロセッサを備えた制御装置、制御装置の異常検出・復旧方法および電子機器に関するものである。
【背景技術】
【０００２】
従来、複数の機器から構成されるシステムにおいて、これら各機器の状態を監視し、異常を検出した場合に復旧する方法として、特許文献１が提案されている。当該特許文献１に記載のシステムは、クライアントとプリンターとプリントサーバーからなり、プリンターはプリントサーバーを介してクライアントと通信を行う。このシステムでは、プリンターが、クライアントから送信されるコマンド（リセット確認コマンド）を所定時間内に受信した場合、プリンターとクライアントとの間に介在するプリントサーバーは正常に動作していると判断する。一方、クライアントからのコマンドを所定時間内に受信できなかった場合、プリンターは、プリントサーバーの状態が機能不全状態（ハングアップ状態）であると判断し、プリントサーバーをリセットする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−１７１３０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記の監視方法、即ち、機器間（ＣＰＵ間）のコマンドの授受により状態を監視するという方法は、複数のプロセッサコアを１つのパッケージに集約したマルチコアプロセッサにも適用することが可能である。例えば、デュアルコアプロセッサに適用する場合、２つのプロセッサコアのうちの一方（コアＡとする）を上記プリンターに見立て、他方（コアＢとする）を上記プリントサーバーに見立てることで、プロセッサコア間でコマンドの授受による監視を実現することができる。
しかしながら、上記引用文献１では、プリントサーバーに異常が発生した場合、プリンターからプリントサーバーをリセットすることはできるが、プリンターに異常が発生した場合、プリントサーバーからプリンターをリセットできないという問題がある。つまり、プリンターに異常が発生した場合に復旧することができない。これは、デュアルコアプロセッサに適用した場合も同様であり、コアＢに異常が発生した場合、コアＡはリセット処理を実行できるが、その逆はできない。即ち、２つのプロセッサコアのうち、一方のプロセッサコアの異常時にはリセット処理を行い復旧できるが、他方のプロセッサコアの異常時にはリセット処理が行えないため、復旧できないという問題が発生する。
【０００５】
本発明は、上記の問題に鑑み、マルチコアプロセッサを構成する複数のプロセッサコアのうち、どのプロセッサコアに異常が生じても確実に復旧することができる制御装置、制御装置の異常検出・復旧方法および電子機器を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の制御装置は、制御対象物を制御する複数のプロセッサコアと、当該複数のプロセッサコアによって共用されるリセットレジスターと、当該複数のプロセッサコアが自身の動作ログを記録するための揮発性の共有メモリーと、当該複数のプロセッサコアがアクセス可能な不揮発性メモリーと、を有し、各プロセッサコアは、メインコアおよびサブコアの少なくとも一方として機能し、且つ、複数のプロセッサコアの間で、メインコアおよびサブコアの主従関係が成立している制御装置であって、サブコアは、メインコアに対して、当該メインコアの動作状態を取得するための所定コマンドを所定の送信間隔で送信し、その応答を受信する第１動作状態監視部と、応答を、所定の応答時間内に受信できなかった場合、メインコアに異常が発生したと判定する第１異常判定部と、第１異常判定部により異常の発生を判定した場合、共有メモリー内の動作ログを不揮発性メモリーに記録した後、リセットレジスターに対し装置全体のリセット処理を指令する第１リセット指令部と、を備え、メインコアは、サブコアから所定コマンドを受信すると共に、サブコアに対し応答を送信する第２動作状態監視部と、所定コマンドを受信してから、所定の受信時間内に次の所定コマンドを受信できなかった場合、サブコアに異常が発生したと判定する第２異常判定部と、第２異常判定部により異常の発生を判定した場合、共有メモリー内の動作ログを不揮発性メモリーに記録した後、リセットレジスターに対し装置全体のリセット処理を指令する第２リセット指令部と、を備えたことを特徴とする。
【０００７】
また、本発明の制御装置の異常検出・復旧方法は、制御対象物を制御する複数のプロセッサコアと、当該複数のプロセッサコアによって共用されるリセットレジスターと、当該複数のプロセッサコアが自身の動作ログを記録するための揮発性の共有メモリーと、当該複数のプロセッサコアがアクセス可能な不揮発性メモリーと、を有し、各プロセッサコアは、メインコアおよびサブコアの少なくとも一方として機能し、且つ、複数のプロセッサコアの間で、メインコアおよびサブコアの主従関係が成立している制御装置の異常検出・復旧方法であって、サブコアは、メインコアに対して、当該メインコアの動作状態を取得するための所定コマンドを所定の送信間隔で送信し、その応答を受信する第１動作状態監視ステップと、応答を、所定の応答時間内に受信できなかった場合、メインコアに異常が発生したと判定する第１異常判定ステップと、第１異常判定ステップにより異常の発生を判定した場合、共有メモリー内の動作ログを不揮発性メモリーに記録した後、リセットレジスターに対し装置全体のリセット処理を指令する第１リセット指令ステップと、を実行し、メインコアは、サブコアから所定コマンドを受信すると共に、サブコアに対し応答を送信する第２動作状態監視ステップと、所定コマンドを受信してから、所定の受信時間内に次の所定コマンドを受信できなかった場合、サブコアに異常が発生したと判定する第２異常判定ステップと、第２異常判定ステップにより異常の発生を判定した場合、共有メモリー内の動作ログを不揮発性メモリーに記録した後、リセットレジスターに対し装置全体のリセット処理を指令する第２リセット指令ステップと、を実行することを特徴とする。
【０００８】
これらの構成によれば、マルチコアプロセッサを構成する複数のプロセッサコアを、メインコアおよびサブコアの少なくとも一方として割り当て、当該メインコアおよびサブコア間で、所定コマンドおよびその応答の送受信を行うことでコア間の相互監視を行う。そして、メインコアに異常が発生した場合、サブコアが当該メインコアの異常を検出してリセット処理を実行し、サブコアに異常が発生した場合、メインコアが当該サブコアの異常を検出してリセット処理を実行する。また、複数のプロセッサコアの間では、メインコアとサブコアの主従関係が成立しているため、これら複数のプロセッサコアのうち、どのプロセッサコアに異常が発生しても、対となる他方のプロセッサコアが自動的にリセット処理を行うことができ、確実に装置全体（特に、異常状態のプロセッサコア）を復旧することができる。
また、リセット処理を行う前に、異常を検出したプロセッサコアが、異常が発生したプロセッサコアを含む全てのプロセッサコアの動作ログを不揮発性メモリーに記録するため、ユーザーは記録された情報を元に、容易に障害発生原因の解析を行うことができる。
【０００９】
本発明の制御装置において、第１および第２動作状態監視部によるコア間通信を実行するか否かを示すフラグをさらに有し、第１または第２リセット指令部の指令によりリセット処理が実行された場合、フラグを、コア間通信をしないことを示す無効状態に設定することが好ましい。
【００１０】
この構成によれば、第１または第２リセット指令部の指令によりリセット処理が実行された場合、次回起動時はコア間通信による相互監視を行わないようにする。言い換えれば、１度リセット処理を行った後は、コア間通信による相互監視を停止する。これにより、例えば、ハードウェア障害等によりリセット処理が繰り返し行われることを防止でき、結果として、障害時の動作ログが上書きされ障害発生原因の解析に必要な情報が消失するといったことを防止できる。また、ユーザーが障害の発生自体に気づかず、異常な状態で装置を使い続けてしまう等の事象も回避できる。
【００１１】
本発明の制御装置において、動作ログは、共有メモリー上の所定領域に、所定時間間隔で記録され、所定領域は、リングバッファとして構成されることが好ましい。
【００１２】
この構成によれば、動作ログを記録する際のオーバーフローを防止することができる。
【００１３】
本発明の制御装置において、送信間隔、応答時間および受信時間のうちの、少なくとも１つを設定する時間設定部を、さらに備えたことが好ましい。
【００１４】
また、本発明の制御装置において、フラグを無効状態に設定するまでのリセット処理の回数を設定するリセット回数設定部を、さらに備えたことが好ましい。
【００１５】
これらの構成によれば、マルチコアプロセッサを搭載する装置の特性（利用頻度や重要性等）に応じた時間設定、あるいはリセット回数の設定を行うことができる。これにより、より多くの装置に柔軟に対応でき、利便性が良い。
【００１６】
本発明の制御装置において、サブコアは、外部装置から送信される指示を受信し、メインコアは、前記指示に基づき制御対象物を制御することが好ましい。
【００１７】
この構成によれば、プリンター等の出力に関わるメカニズム（制御対象物）や、スキャナーや磁気読取器等の入力に関わるメカニズム（制御対象物）を備えた装置に適応が可能である。
【００１８】
本発明の電子機器は、上記に記載の制御装置を備えたことを特徴とする。
【００１９】
この構成によれば、複数のプロセッサコアのうち、どのプロセッサコアに異常が発生しても、確実に装置全体を復旧することができる電子機器を提供することができる。
【図面の簡単な説明】
【００２０】
【図１】本実施形態のプリンターの制御ブロック図である。
【図２】共有メモリーの記録領域の構成を説明する図である。
【図３】メインコアおよびサブコアの機能ブロック図である。
【図４】メインコアに異常が発生した場合のシーケンス図である。
【図５】サブコアに異常が発生した場合のシーケンス図である。
【発明を実施するための形態】
【００２１】
以下、添付の図面を参照して、本発明の一実施形態に係る制御装置および制御装置の異常検出・復旧方法について説明する。なお、本実施形態では、制御装置を備えた機器として、プリンターを例に挙げて説明する。また、制御装置の中核を成すプロセッサ（ＣＰＵ）は、２つのプロセッサコアが１つのパッケージに集積された、所謂デュアルコアプロセッサ（デュアルコアＣＰＵ）により構成されているものとする。
【００２２】
図１は、本実施形態に係るプリンター１（電子機器）の構成を示す制御ブロック図である。同図に示すように、プリンター１は、制御部１１（制御装置）、プリンター機構部１２（制御対象物、メカニズム）およびネットワークインターフェイス部（ネットワークＩ／Ｆ部）１３を主要な構成要素とする。プリンター機構部１２は、印刷機構、印刷媒体搬送機構、印刷媒体切断機構およびインク供給機構など（いずれも図示省略）、プリンター１としての主要な機能を実現するための各種機構を有している。ネットワークＩ／Ｆ部１３は、パーソナルコンピュータ等の外部装置２との接続および通信を行うためのインターフェイスであり、例えば、ＬＡＮインターフェイスやＵＳＢ（Universal  Serial  Bus）インターフェイス等を有している。
【００２３】
制御部１１は、デュアルコアプロセッサ２１、共有メモリー（共有ＲＡＭ）２２、およびフラッシュＲＯＭ（不揮発性メモリー）２３を主要な構成要素とする。デュアルコアプロセッサ２１は、２つのプロセッサコア（ここでは、メインコア３１およびサブコア３２とする）およびリセットレジスター３３を有している。
【００２４】
メインコア３１は、主にプリンター機構部１２を構成する各機構を制御するものであり、例えば、印刷ヘッド制御、印刷媒体の送り制御、印刷媒体の切断制御、およびインクの供給制御などを行う。一方、サブコア３２は、主にネットワークＩ／Ｆ１３を介した外部装置２との通信制御を行う。このメインコア３１およびサブコア３２は、それぞれ独立したプログラムを実行可能であり、ＯＳ（Operating  System）もそれぞれ独立したプロセスとなっている。このため、２つのプロセッサコアは、他のプロセッサコアの状態に影響されること無くプログラムを実行する。また、これらメインコア３１およびサブコア３２は、共有メモリー２２を介してコア間通信を行う機構を備えている。このコア間通信により、後述する状態取得コマンドおよびその応答の授受を行うことで、双方のプロセッサコアの状態を相互に監視する機能を実現する（詳細は後述する）。
【００２５】
リセットレジスター３３は、プリンター１（デュアルコアプロセッサ２１全体）のリセット処理（リブート処理）を行うためのリセット信号を出力するものであり、メインコア３１およびサブコア３２の双方からアクセス可能と成っている。
【００２６】
共有メモリー２２は、各プロセッサコアによる各種処理を行う際の作業領域（ワーク領域）として使用される。また、共有メモリー２２は、各プロセッサコアのコア間通信による相互監視に関する情報を記憶する領域（以下、「相互監視用領域４１（図２参照）」と称す。）を有している。以下、図２を参照して説明する。
【００２７】
図２は、相互監視用領域４１を説明する図である。同図に示すように、相互監視用領域４１は、相互監視有効／無効フラグ領域４２、識別フラグ領域４３、ログ管理情報領域４４、メインコア用動作ログ保存領域４５およびサブコア用動作ログ保存領域４６を有している。
【００２８】
相互監視有効／無効フラグ領域４２は、メインコア３１とサブコア３２との間で相互監視を行うか否か（相互監視を有効にするか無効にするか）を示すフラグ（相互監視有効／無効フラグ）を記録する領域である。この領域４２は、メインコア３１の起動時に参照され、当該参照結果に基づいて、コア間の相互監視を行うか否かが判定される。なお、このフラグの値は、外部装置２等からユーザーが所定の指示コマンドを発行することにより任意に設定することが可能である。本実施形態では、相互監視有効／無効フラグ領域４２には、デフォルトの値として、「有効」を示すフラグが設定されているものとする。
【００２９】
識別フラグ領域４３は、どちらのプロセッサコアが異常（ハングアップ）を検出してプリンター１のリセット処理を行ったのかを示すフラグ（識別フラグ）を記憶する領域である。この識別フラグとしては、例えば、メインコア３１およびサブコア３２を特定する値を予め定義しておき、異常を検出した方のプロセッサコアを示す値を記録するようにしても良いし、どちらか一方のプロセッサコアだけが（例えば、メインコア３１だけが）この識別フラグを記録するようにしても良い。後者の場合、識別フラグが記録されているか否かで、どちらのプロセッサコアがリセット処理を行ったのかを知ることができる。
【００３０】
ログ管理情報領域４４は、異常発生時のログ解析に必要な情報のうち、両プロセッサコア３１、３２で共通の情報（ログ管理情報）を記録する領域である。例えば、異常を検出した日時情報などが挙げられる。
【００３１】
メインコア用動作ログ保存領域４５は、異常発生時のログ解析時にメインコア３１の動作状況を分析するための情報（動作ログ）を、定期的に（所定時間間隔で）記録する領域である。一方、サブコア用動作ログ保存領域４６は、異常発生時のログ解析時にサブコア３２の動作状況を分析するための情報（動作ログ）を、定期的に記録する領域である。記録する動作ログとしては、例えば、内部レジスタ情報、プログラム内で管理している状態情報、ユーザー操作情報、エラー情報などが挙げられる。なお、これらメインコア用動作ログ保存領域４５およびサブコア用動作ログ保存領域４６は、リングバッファとして構成されている。これにより、定期的に動作ログを記録し、複数の動作ログを保持する場合のオーバーフローを防止することができる。
【００３２】
図１の説明に戻る。フラッシュＲＯＭ２３は、共有メモリー２２の相互監視用領域４１に保存された情報を不揮発に記録するものであり、当該フラッシュＲＯＭ２３への記録は、メインコア３１およびサブコア３２のいずれか一方で異常が発生した場合に、当該異常を検出した側のプロセッサコアにより行われる。このフラッシュＲＯＭ２３の情報は、リセット処理によりプリンター１が再起動した際、メインコア３１により共有メモリー２２の所定領域（図示省略）に展開され、ユーザーによる障害発生原因の解析に利用される。また、フラッシュＲＯＭ２３に記録された相互監視有効／無効フラグの値は、リセット処理によりプリンター１が再起動した際、共有メモリー２２の相互監視有効／無効フラグ領域４２に設定される。
【００３３】
以上の構成により、制御部１１は、２つのプロセッサコアの間で相互監視を実行し、いずれかのプロセッサコアで異常が発生した場合、他方のプロセッサコア（正常動作しているプロセッサコア）が当該異常を検出し、リセットレジスター３３によってプリンター１のリセット処理を行う。以下、プロセッサコア間での相互監視／異常検出／復旧を実現するための機能構成およびその手順について、図３ないし図５を参照して詳細に説明する。
【００３４】
図３は、メインコア３１およびサブコア３２の機能構成について詳細に説明する図である。同図に示すように、サブコア３２は、第１動作ログ記録部５１、相互監視有無問い合わせ部５２、第１動作状態監視部５３、第１異常判定部５４、および第１リセット指令部５５を有している。
【００３５】
第１動作ログ記録部５１は、定期的に、自身（サブコア３２）の動作ログを共有メモリー２２のサブコア用動作ログ保存領域４６に記録する。相互監視有無問い合わせ部５２は、メインコア３１に対し、コア間通信による相互監視を実行するか否かを問い合わせ、当該問い合わせに対する応答を受信する。
【００３６】
第１動作状態監視部５３は、メインコア３１に対して、当該メインコア３１の動作状態を取得するための状態取得コマンドを所定の送信間隔で送信し、その応答を受信する。この状態取得コマンドの送信は、上記相互監視有無問い合わせ部５２による問い合わせに対し、メインコア３１から「相互監視有効」を示す応答を受信した場合に行われ、これによりコア間の相互監視が開始される。一方、メインコア３１から「相互監視無効」を示す応答を受信した場合は、状態取得コマンドの送信を行わない。つまり、相互監視を実行しない。
【００３７】
第１異常判定部５４は、メインコア３１からの状態取得コマンドに対する応答を、所定の応答時間内に受信できなかった場合、メインコア３１に異常が発生したと判定する。
【００３８】
第１リセット指令部５５は、第１異常判定部５４によりメインコア３１の異常を検出（判定）した場合、プリンター１（デュアルコアプロセッサ２１全体）のリセット処理を行う。この第１リセット指令部５５は、実際にリセット処理を行う前に、まず、共有メモリー２２に記録されている相互監視有効／無効フラグを「無効」に設定すると共に、現時点の自身の動作ログを記録し、その後、共有メモリー２２の相互監視用領域４１に記録された全ての情報（相互監視有効／無効フラグ（無効）、識別フラグ、異常検出日時、メインコア３１およびサブコア３２の動作ログなど）をフラッシュＲＯＭ２３に記録（コピー）する。そして、リセットレジスター３３に対して指令を出し、プリンター１のリセット処理を行う。
【００３９】
上記のように、第１リセット指令部５５によりリセット処理を行う場合、相互監視有効／無効フラグを「無効」に設定することで、当該リセット処理により再起動した時に、コア間通信による相互監視を開始しないようにすることができる。言い換えれば、１度リセット処理を行った後は、コア間通信による相互監視を停止する。これにより、例えば、ハードウェア障害等によりリセット処理が繰り返し行われることを防止でき、結果として、障害時の動作ログが上書きされ障害発生原因の解析に必要な情報が消失するといったことを防止できる。また、ユーザーが障害の発生自体に気づかず、異常な状態で装置を使い続けてしまうといった事象も回避できる。
【００４０】
一方、メインコア３１は、第２動作ログ記録部６１、相互監視有無判別部６２、相互監視有無応答部６３、第２動作状態監視部６４、第２異常判定部６５、および第２リセット指令部６６を有している。
【００４１】
第２動作ログ記録部６１は、定期的に、自身（メインコア３１）の動作ログを共有メモリー２２のメインコア用動作ログ保存領域４５に記録する。相互監視有無判別部６２は、自身の起動時に、共有メモリー２２の相互監視有効／無効フラグ領域４２を参照し、当該領域４２に記録されたフラグの状態を判別する。
【００４２】
相互監視有無応答部６３は、サブコア３２（相互監視有無問い合わせ部５２）からの問い合わせに対し、上記相互監視有無判別部６２による判別結果に基づく応答を返す。つまり、相互監視有無判別部６２でフラグが「有効」に設定されていると判別した場合は、「相互監視有効」を示す応答を返し、フラグが「無効」に設定されていると判別した場合は、「相互監視無効」を示す応答を返す。
【００４３】
第２動作状態監視部６４は、サブコア３２（第１動作状態監視部５３）から状態取得コマンドを受信し、サブコア３２に対して当該状態取得コマンドに対する応答を送信する。第２異常判定部６５は、サブコア３２から状態取得コマンドを受信した後、所定の受信時間内に、次の状態取得コマンドを受信できなかった場合、サブコア３２に異常が発生したと判定する。
【００４４】
第２リセット指令部６６は、第２異常判定部６５によりサブコア３２の異常を検出した場合、プリンター１（デュアルコアプロセッサ２１全体）のリセット処理を行う。この第２リセット指令部６６においても、上記第１リセット指令部５５と同様、実際にリセット処理を行う前に、まず、共有メモリー２２に記録されている相互監視有効／無効フラグを「無効」に設定すると共に、現時点の自身の動作ログを記録し、その後、共有メモリー２２の相互監視用領域４１に記録された全ての情報（相互監視有効／無効フラグ（無効）、識別フラグ、異常検出日時、メインコア３１およびサブコア３２の動作ログなど）をフラッシュＲＯＭ２３に記録（コピー）する。そして、リセットレジスター３３に対して指令を出し、プリンター１のリセット処理を行う。つまり、第２リセット指令部６６によりリセット処理を行う場合においても、相互監視有効／無効フラグを「無効」に設定することで、当該リセット処理により再起動した時に、コア間通信による相互監視を開始しないようにする。
【００４５】
ここで、図４のシーケンス図を参照し、メインコア３１に異常が発生した場合の異常検出および復旧手順の一例について説明する。なお、特に図示しないが、メインコア３１およびサブコア３２は、正常動作中は、自身の動作ログを定期的に共有メモリー２２に書き込む処理を行っているものとする（図５においても同様とする）。
【００４６】
まず、メインコア３１は、相互監視有効／無効フラグ領域４２を参照し、当該領域４２に記録された相互監視有効／無効フラグの状態を判別する（Ｓ０１）。ここでは、当該フラグは「有効」に設定されているものとする。次に、サブコア３２は、メインコア３１に対して相互監視有無の問い合わせを実行し（Ｓ０２）、メインコア３１は、この問い合わせを受け、サブコア３２に対してＳ０１の判別結果、つまり「相互監視有効」を示す応答を返す（Ｓ０３）。
【００４７】
続いて、サブコア３２は、メインコア３１から「相互監視有効」を示す応答を受信したことにより相互監視が有効であると判別し、メインコア３１に対して、所定の送信間隔（例えば、１０秒間隔）で状態取得コマンドを送信する（Ｓ０４、Ｓ０６）。そして、状態取得コマンドを受信したメインコア３１は、サブコア３２から状態取得コマンドを受信する度に、サブコア３２に対して当該状態取得コマンドに対する応答を送信する（Ｓ０５、Ｓ０７）。
【００４８】
ここで、メインコア３１に異常が発生しハングアップした場合（Ｓ０８）、サブコア３２は、通常通りメインコア３１に対して状態取得コマンドを送信するが、メインコア３１から当該コマンドに対する応答が返ってこない状況に陥る（Ｓ０９）。この時、サブコア３２は、メインコア３１からの応答を受け取れない状態が、予め定めた所定の応答時間（例えば、５分間）継続したか否かを判定し、メインコア３１からの応答が上記応答時間内（５分以内）に受信できなかった場合、メインコア３１に異常が発生したと判定する（Ｓ１０）。
【００４９】
そして、メインコア３１の異常を検出したサブコア３２は、相互監視有効／無効フラグを「無効」に設定すると共に、識別フラグ、ログ管理情報、および現時点の自身の動作ログを共有メモリー２２の相互監視用領域４１に記録した後、当該相互監視用領域４１に記録した情報をフラッシュＲＯＭ２３にコピーする（Ｓ１１）。その後、サブコア３２は、リセットレジスター３３によるリセット処理を行う（Ｓ１２）。これにより、プリンター１の再起動が実行される。
【００５０】
続いて、図５のシーケンス図を参照し、サブコア３２に異常が発生した場合の、異常検出および復旧手順の一例について説明する。なお、Ｓ２１からＳ２７までの処理は、図４のＳ０１からＳ０７までの処理と同様であるため、説明を省略する。
【００５１】
Ｓ２７の処理が終了した時点で、サブコア３２に異常が発生しハングアップした場合（Ｓ２８）、メインコア３１は、サブコア３２から次の状態取得コマンドを受信できない状況に陥る。この時、メインコア３１は、Ｓ２６でサブコア３２から状態取得コマンドを受信してから、次の状態取得コマンドを受信できない状態が、予め定めた所定の受信時間（例えば、５分間）継続したか否かを判定する。そして、メインコア３１は、サブコア３２からの状態取得コマンドが上記受信時間内（５分以内）に受信できなかった場合、サブコア３２に異常が発生したと判定する（Ｓ２９）。
【００５２】
サブコア３２の異常を検出したメインコア３１は、相互監視有効／無効フラグを「無効」に設定すると共に、識別フラグ、ログ管理情報、および現時点の自身の動作ログを共有メモリー２２の相互監視用領域４１に記録した後、当該相互監視用領域４１に記録した情報をフラッシュＲＯＭ２３にコピーする（Ｓ３０）。その後、サブコア３２は、リセットレジスター３３によるリセット処理を行う（Ｓ３１）。これにより、プリンター１の再起動が実行される。
【００５３】
なお、上記リセット処理（Ｓ１２およびＳ３１）によりプリンター１が再起動された後、メインコア３１とサブコア３２との間で、再度Ｓ０１〜Ｓ０３（またはＳ２１〜Ｓ２３）の処理が行われるが、この時、相互監視有効／無効フラグは「無効」に設定されているため（再起動時にフラッシュＲＯＭ２３に記憶した相互監視有効／無効フラグの情報が適用されるため）、Ｓ０４（またはＳ２４）以降の処理、つまり、コア間の相互監視は実行されない。相互監視の再開は、ユーザー（外部装置２）から指定コマンドが発行されることで行われる。
【００５４】
以上のように、本実施形態によれば、デュアルコアプロセッサ２１を構成する２のプロセッサコアを、メインコア３１およびサブコア３２として割り当て、当該メインコア３１およびサブコア３２間で、状態取得コマンドおよびその応答の送受信を行うことでコア間の相互監視を行う。そして、メインコア３１に異常が発生した場合、サブコア３２が当該メインコア３１の異常を検出してリセット処理を実行し、サブコア３２に異常が発生した場合、メインコア３１が当該サブコア３２の異常を検出してリセット処理を実行する。このように、２つのプロセッサコアのうち、どちらプロセッサコアに異常が発生しても、対となる他方のプロセッサコアが自動的にリセット処理を行うことができ、確実に装置全体を復旧することができる。
【００５５】
また、リセット処理を行う前に、異常を検出したプロセッサコアが、異常が発生したプロセッサコアの動作ログもフラッシュＲＯＭ２３に記録するため、ユーザーは記録された情報を元に、容易に障害発生原因の解析を行うことができる。
【００５６】
なお、本実施形態では、状態取得コマンドの送信間隔、状態取得コマンドに対する応答を受信できない場合に他方のプロセッサコア（メインコア３１）に異常が発生したと判定するまでの時間（応答時間）、および状態取得コマンドが受信できない場合に他方のプロセッサコア（サブコア３２）に異常が発生したと判定するまでの時間（受信時間）を予め所定の時間に設定するようにしているが、これに限るものではなく、ユーザーにより任意の時間を設定する機能（時間設定部）を設けることも可能である。
【００５７】
また、本実施形態において、メインコア３１およびサブコア３２による相互監視により一度リセット処理が行われた場合、相互監視有効／無効フラグを「無効状態」に設定するようにしているが、これに限るものではなく、ユーザーにより相互監視有効／無効フラグを「無効状態」にするまでのリセット回数を設定する機能（リセット回数設定部）を設けることも可能である。
【００５８】
これらの機能を設けることにより、デュアルコアプロセッサ２１を搭載する装置の特性（利用頻度や重要性など）に応じた時間設定、あるいはリセット回数の設定を行うことができる。これにより、より多くの装置に柔軟に対応でき、利便性が良い。
【００５９】
また、本実施形態では、デュアルコアプロセッサ２１を例に挙げて説明したが、プロセッサコアが３個以上搭載されたマルチコアプロセッサにも適用することができる。例えば、プロセッサコアが４つ搭載されたクアッドコアプロセッサ（コア１〜コア４を搭載）に適用する場合、コア１とコア２との間、およびコア３とコア４との間で、それぞれ本実施形態のメインコア３１とサブコア３２との関係を構成するようにすれば良い。あるいは、コア１とコア２との間では、コア１がメインコア３１、コア２がサブコア３２となる関係を構成し、コア２とコア３との間では、コア２がメインコア３１、コア３がサブコア３２となる関係を構成するという様に、全てのプロセッサコア間で循環するように相互関係を構成するようにしても良い。または、コア１をメインコア３１とし、コア２からコア４をサブコア３２とする構成にしても良い。
【００６０】
また、本実施形態の異常検出・復旧方法は、マルチコアプロセッサのみならず、マルチプロセッサにも適用することが可能である。
【００６１】
また、本実施形態では、電子機器としてプリンター１を例示したが、これに限るものではない。
【００６２】
また、上述した実施例によらず、制御部１１（プリンター１）の構成や処理工程等について、本発明の要旨を逸脱しない範囲で、適宜変更も可能である。
【符号の説明】
【００６３】
１…プリンター  １１…制御部  ２１…デュアルコアプロセッサ  ２２…共有メモリー  ２３…フラッシュＲＯＭ  ３１…メインコア  ３２…サブコア  ３３…リセットレジスター  ４１…相互監視用領域  ４３…相互監視有効／無効フラグ領域  ４５…メインコア用動作ログ保存領域  ４６…サブコア用動作ログ保存領域  ５３…第１動作状態監視部  ５４…第１異常判定部  ５５…第１リセット指令部  ６４…第２動作状態監視部  ６５…第２異常判定部  ６６…第２リセット指令部
【図１】
2011159136.tif 000003
【図２】
2011159136.tif 000004
【図３】
2011159136.tif 000005
【図４】
2011159136.tif 000006
【図５】
2011159136.tif 000007