(57)【特許請求の範囲】
【請求項１】
対象装置に対して複数の処理を所定の実行順序で実行する、冗長化された第１の制御装置及び第２の制御装置と、
前記第１の制御装置と前記第２の制御装置との間に介設された転送記憶部と、をそなえ、
前記第１の制御装置は、
前記複数の処理の実行に用いる情報を記憶する第１の記憶部をそなえ、
前記複数の処理のうちの実行対象の処理の状態を示す状態情報を、前記第１の記憶部及び前記転送記憶部にそれぞれ反映し、
前記第２の制御装置に対して前記第２の制御装置の動作を開始させる開始通知を送信し、
前記第２の制御装置は、
前記複数の処理の実行に用いる情報を記憶する第２の記憶部をそなえ、
前記第２の制御装置の動作が停止した状態で前記第１の制御装置から前記開始通知を受信すると、前記第２の制御装置の動作を開始するとともに、前記転送記憶部から前記状態情報を読み出して、読み出した前記状態情報を前記第２の記憶部に反映する
ことを特徴とする、制御システム。
【請求項２】
前記第２の制御装置は、
前記第２の制御装置の動作が停止した状態において、所定のタイミングで前記動作を開始し、前記第１の制御装置の監視を行なうともに、前記第１の制御装置の異常を検出すると、前記対象装置に対する前記複数の処理の実行を、前記第１の制御装置から引き継ぐ
ことを特徴とする、請求項１記載の制御システム。
【請求項３】
前記第１及び第２の記憶部は、それぞれ、前記複数の処理の各々について、当該処理が実行中に中断された場合の再開ポイントを示す再開情報を記憶し、
前記第２の制御装置は、
前記第１の制御装置の監視において前記第１の制御装置の異常を検出すると、前記第２の記憶部に格納された前記状態情報と前記再開情報とに基づいて、前記第１の制御装置による実行中に中断された処理に対応する再開ポイントの処理を実行する
ことを特徴とする、請求項２記載の制御システム。
【請求項４】
前記第２の制御装置は、
前記第１の制御装置の監視において前記第１の制御装置の異常を検出しない場合、前記第２の制御装置の動作を停止させる
ことを特徴とする、請求項２又は請求項３記載の制御システム。
【請求項５】
前記第１の制御装置は、
前記転送記憶部の空き記憶領域が所定の閾値未満の場合、前記第２の制御装置に対して前記開始通知を送信し、
前記第２の制御装置は、
前記開始通知に応じて前記転送記憶部から読み出した前記状態情報を前記第２の記憶部に反映すると、前記第１の制御装置に対して応答を送信し、
前記第１の制御装置は、
前記第１の制御装置から前記応答を受信すると、前記第２の制御装置に対して前記第２の制御装置の動作を停止させる停止通知を送信する
ことを特徴とする、請求項１〜４のいずれか１項記載の制御システム。
【請求項６】
前記第１の制御装置は、
前記第１の制御装置と前記第２の制御装置とを接続する信号線を介して前記開始通知を送信し、
前記第２の制御装置は、
プロセッサをそなえ、
前記開始通知を受信すると前記プロセッサに割り込みを発生させる
ことを特徴とする、請求項１〜５のいずれか１項記載の制御システム。
【請求項７】
対象装置に対して複数の処理を所定の実行順序で実行する、冗長化された第１の制御装置及び第２の制御装置と、前記第１の制御装置と前記第２の制御装置との間に介設された転送記憶部と、をそなえる制御システムの処理方法であって、
前記第１の制御装置は、
前記複数の処理のうちの実行対象の処理の状態を示す状態情報を、前記複数の処理の実行に用いる情報を記憶する第１の記憶部、及び、前記転送記憶部にそれぞれ反映し、
前記第２の制御装置に対して前記第２の制御装置の動作を開始させる開始通知を送信し、
前記第２の制御装置は、
前記第２の制御装置の動作が停止した状態で前記第１の制御装置から前記開始通知を受信すると、前記第２の制御装置の動作を開始し、
前記転送記憶部から前記状態情報を読み出して、読み出した前記状態情報を、前記複数の処理の実行に用いる情報を記憶する第２の記憶部に反映する
ことを特徴とする、処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御システム及び同システムの処理方法に関する。
【背景技術】
【０００２】
図２８に示すような情報処理システム、例えばサーバ１００では、サーバ１００の制御及び監視を行なう制御装置の一例として、Service Processor（ＳＰ；サービスプロセッサ）２００と呼ばれるボード（モジュール）が搭載されることがある。
【０００３】
ＳＰ２００は、Central Processing Unit（ＣＰＵ）２００ａやメモリ２００ｂ等をそなえることができる。ＳＰ２００は、高可用性を保つために冗長化され、運用系及び待機系に役割が分けられることがある。なお、冗長化されたＳＰ２００（図２８の例ではＳＰ２００−１（ＳＰ＃０）及びＳＰ２００−２（ＳＰ＃１））は、Local Area network（ＬＡＮ）等のネットワークにより相互に通信可能に接続され、データ等をＬＡＮ経由で他系のＳＰ２００へ送信することができる。
【０００４】
運用系ＳＰ２００（例えばＳＰ２００−１）は、例えばComplex Programmable Logic Device（ＣＰＬＤ）２００ｅ等の論理回路に設けられたInter-Integrated Circuit（Ｉ２Ｃ）コントローラ２００ｇにより、バススイッチ２００ｈを介してSystem Board（ＳＢ；システムボード）３００等の各種ハードウェアの制御や監視等を行なう。
【０００５】
なお、ＳＢ３００は、情報処理装置の一例であり、サーバ１００本体のOperating System（ＯＳ）を実行するＣＰＵ３００ａやメモリ３００ｂ等を実装することができる。図２８の例では、サーバ１００にはｎ個（ｎは自然数）のＳＢ３００−１〜３００−ｎがそなえられ、運用系ＳＰ２００−１はＳＢ３００−１〜３００−ｎの各々について制御を行なう。
【０００６】
待機系ＳＰ２００（例えば２００−２）は、例えば自系のＳＰボード内のハードウェアの監視や運用系ＳＰ２００−１の監視を行なう。運用系ＳＰ２００−１がハードウェアの故障やファームウェアの障害等でダウンした場合、待機系ＳＰ２００−２が運用系に切り替わることで、サーバ１００内の制御や監視を継続して行なうことができる。
【０００７】
サーバ１００本体の電源投入等の制御は運用系ＳＰ２００−１が行なうが、電源投入シーケンス処理中等に運用系ＳＰ２００−１がダウンし、運用系が待機系ＳＰ２００−２に切り替わった場合、待機系ＳＰ２００−２が処理を引き継ぎ、実行中の電源投入シーケンス処理の続きを実行することになる。このため、どのタイミングで運用系ＳＰ２００−１がダウンしても対応できるように、運用系ＳＰ２００−１と待機系ＳＰ２００−２とはＬＡＮ経由で制御に係るデータの同期を行なっている。
【０００８】
なお、関連する技術として、二重化された制御装置の両系からアクセスできる共用の不揮発メモリを設け、運用系は動作時の情報を共用メモリに書き込むことで、待機系の電源をオフにする手法等が知られている（例えば特許文献１参照）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平１０−２０７８５５号公報
【特許文献２】特開２０１３−１２５４９３号公報
【特許文献３】特表２０１３−５３１８２２号公報
【特許文献４】特開２００８−２４２７０１号公報
【特許文献５】国際公開第２０１２／０２３２００号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【００１０】
待機系ＳＰ２００−２は、サーバ１００等の製品本体（ＳＢ３００等）の制御を行なっていないため、製品全体の消費電力を低減するために待機系ＳＰ２００−２をサスペンドすることが考えられる。
【００１１】
なお、サスペンドとは、ＳＰ２００がそなえるＣＰＵ２００ａの処理内容をメモリ２００ｂに格納（退避）しＣＰＵ２００ａの動作を停止させる（電源をオフにする）ことである。ＳＰ２００のサスペンド状態では、ＣＰＵ２００ａのほか、ＬＡＮの制御を行なうＬＡＮコントローラ２００ｃ等についても動作を停止させることができ、製品全体の消費電力を低減することができる。
【００１２】
しかし、待機系ＳＰ２００−２は、例えば下記の（ａ）〜（ｅ）に示す処理を行なうため、待機系ＳＰ２００−２をサスペンド状態に移行させた場合、これらの処理が実行されず、運用系ＳＰ２００−１が故障した場合にはシステムの制御や監視等が行なえなくなる可能性がある。
【００１３】
（ａ）データ同期
待機系ＳＰ２００−２は、電源投入シーケンス処理中に運用系ＳＰ２００−１が停止した場合に待機系ＳＰ２００−２が処理の続きを引き継ぐために、運用系ＳＰ２００−１との間でＬＡＮ経由で制御に係るデータの同期を行なう。
【００１４】
（ｂ）運用系ＳＰ２００−１（他系ＳＰ２００）の生存監視
待機系ＳＰ２００−２は、運用系ＳＰ２００−１が動作していることをＬＡＮ経由で監視し、運用系ＳＰ２００−１の動作が停止した場合は、待機系ＳＰ２００−２が運用系に切り替わり、製品本体（ＳＢ３００）の制御を行なう。
【００１５】
（ｃ）待機系ＳＰ２００−２（自系ＳＰ２００）の生存監視
待機系ＳＰ２００−２は、ＣＰＬＤ２００ｅに設けられたWatchdog Timer（ウォッチドッグタイマ）２００ｆ等を用いて、待機系ＳＰ２００−２の生存監視を行なう。例えば待機系ＳＰ２００−２は、Real Time Clock（ＲＴＣ）２００ｄからの周期的な割り込みをトリガとしてウォッチドッグタイマ２００ｆを定期的にリセットする。ウォッチドッグタイマ２００ｆは、リセットが滞りタイマのカウント値が所定値（所定時間）に達すると、待機系ＳＰ２００−２を再起動する（例えばＣＰＵ２００ａへ再起動を指示する信号を出力する）ため、リセットにより再起動を抑止する。
【００１６】
（ｄ）待機系ＳＰ２００−２（自系ＳＰ２００）のハードウェア監視
待機系ＳＰ２００−２は、待機系ＳＰ２００−２の電源（電圧）や温度等を定期的に読み出すこと等により、待機系ＳＰ２００−２内のハードウェアの監視を行なう。
【００１７】
（ｅ）運用系ＳＰ２００−１からの切り替え指示の待ち受け
運用系ＳＰ２００−１がハードウェアの異常を検出した場合やユーザからの指示があった場合、待機系ＳＰ２００−２は速やかに運用系／待機系の切り替えを行なうことが好ましい。
【００１８】
このように、サーバ１００本体（ＳＢ３００等）の制御を行なうＳＰ２００では、待機系ＳＰ２００−２で行なわれる複数の処理があり、これらの処理を行ないつつ、待機系ＳＰ２００−２を効率良くサスペンド化することが困難であるという課題がある。
【００１９】
１つの側面では、本発明は、複数の制御装置をそなえる制御システムにおける消費電力を削減することを目的とする。
【００２０】
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の１つとして位置付けることができる。
【課題を解決するための手段】
【００２１】
１つの態様では、本件の制御システムは、対象装置に対して複数の処理を所定の実行順序で実行する、冗長化された第１の制御装置及び第２の制御装置と、前記第１の制御装置と前記第２の制御装置との間に介設された転送記憶部と、をそなえる。前記第１の制御装置は、前記複数の処理の実行に用いる情報を記憶する第１の記憶部をそなえる。また、前記第１の制御装置は、前記複数の処理のうちの実行対象の処理の状態を示す状態情報を、前記第１の記憶部及び前記転送記憶部にそれぞれ反映し、前記第２の制御装置に対して前記第２の制御装置の動作を開始させる開始通知を送信する。さらに、前記第２の制御装置は、前記複数の処理の実行に用いる情報を記憶する第２の記憶部をそなえる。また、前記第２の制御装置は、前記第２の制御装置の動作が停止した状態で前記第１の制御装置から前記開始通知を受信すると、前記第２の制御装置の動作を開始するとともに、前記転送記憶部から前記状態情報を読み出して、読み出した前記状態情報を前記第２の記憶部に反映する。
【発明の効果】
【００２２】
１つの側面では、複数の制御装置をそなえる制御システムにおける消費電力を削減することができる。
【図面の簡単な説明】
【００２３】
【図１】一実施形態に係るサーバの構成例を示す図である。
【図２】ＳＰのハードウェア構成例を示す図である。
【図３】図１に示すＳＰの機能構成例を示す図である。
【図４】シーケンステーブルのデータ構造の一例を示す図である。
【図５】シーケンス管理キューのデータ構造の一例を示す図である。
【図６】データ転送キューのデータ構造の一例を示す図である。
【図７】シーケンス処理部によるシーケンス管理キューの同期手法の一例を示す図である。
【図８】シーケンス処理部によるシーケンス管理キューの同期手法の一例を示す図である。
【図９】シーケンス処理部によるシーケンス管理キューの同期手法の一例を示す図である。
【図１０】シーケンス処理部によるシーケンス管理キューの同期手法の一例を示す図である。
【図１１】運用系ＳＰに障害が発生した場合の運用系／待機系の切替処理の一例を示す図である。
【図１２】運用系ＳＰに障害が発生した場合の運用系／待機系の切替処理の一例を示す図である。
【図１３】運用系ＳＰに障害が発生した場合の運用系／待機系の切替処理の一例を示す図である。
【図１４】運用系ＳＰに障害が発生した場合の運用系／待機系の切替処理の一例を示す図である。
【図１５】運用系ＳＰに障害が発生した場合の運用系／待機系の切替処理の一例を示す図である。
【図１６】運用系ＳＰのシーケンス処理部によるシーケンス登録処理の動作例を示すフローチャートである。
【図１７】待機系ＳＰのシーケンス処理部によるデータ同期処理の動作例を示すフローチャートである。
【図１８】運用系ＳＰ及び待機系ＳＰにおけるシーケンス登録時の動作例を示すシーケンス図である。
【図１９】運用系ＳＰ及び待機系ＳＰにおけるシーケンス登録時の動作例を示すシーケンス図である。
【図２０】運用系ＳＰ及び待機系ＳＰにおけるシーケンス登録時の動作例を示すシーケンス図である。
【図２１】運用系ＳＰのシーケンス処理部によるシーケンス更新処理の動作例を示すフローチャートである。
【図２２】運用系ＳＰのシーケンス処理部によるシーケンス完了処理の動作例を示すフローチャートである。
【図２３】待機系ＳＰによる他系ＳＰの生存監視処理の動作例を示すフローチャートである。
【図２４】待機系ＳＰによる運用系の切替処理の動作例を示すフローチャートである。
【図２５】運用系ＳＰに異常が発生した場合の運用系ＳＰ及び待機系ＳＰの動作例を示すシーケンス図である。
【図２６】待機系ＳＰによる他系ＳＰの生存監視処理の動作例を示すフローチャートである。
【図２７】運用系ＳＰに異常が発生した場合の運用系ＳＰ及び待機系ＳＰの動作例を示すシーケンス図である。
【図２８】複数のＳＰを搭載するサーバの構成例を示す図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００２５】
〔１〕一実施形態
〔１−１〕情報処理システムについて
図１に例示するように、一実施形態に係るサーバ１は、複数（図１の例では２つ）のサービスプロセッサ（ＳＰ）２−１及び２−２、１つ以上（図１の例ではｎ個）のシステムボード（ＳＢ）３−１〜３−ｎ、及びElectrically Erasable Programmable Read-Only Memory（ＥＥＰＲＯＭ）４をそなえることができる。なお、以下の説明においてＳＰ２−１及び２−２を区別しない場合には単にＳＰ２と表記し、ＳＢ３−１〜３−ｎを区別しない場合には単にＳＢ３と表記する。
【００２６】
サーバ１は、情報処理システムの一例であり、１つ以上のＳＢ３によりユーザへ種々のサービスを提供することができる。
【００２７】
ＳＰ２は、サーバ１の制御や監視を行なうことができる。ＳＰ２は、高可用性を保つために冗長化されている。以下、運用系として機能するＳＰ２がＳＰ２−１であり、待機系として機能するＳＰ２がＳＰ２−２であるものとする。なお、以下の説明において、ＳＰ２−１を＃０系のＳＰ＃０、ＳＰ２−２を＃１系のＳＰ＃１と表記する場合がある。
【００２８】
運用系ＳＰ２−１は、例えばＳＢ３等の各種ハードウェアの制御や監視等を行なう。図１の例では、運用系ＳＰ２−１は、ｎ個のＳＢ３−１〜３−ｎの各々を含む製品本体、例えばサーバ１を格納するラック全体について制御や監視等を行なう。
【００２９】
ＳＢ３を含む製品本体の制御や監視には、電源投入や電源切断等のシーケンス処理の実行が含まれてよい。シーケンスは、電源投入等の制御の実行単位であり、１つのシーケンス処理では制御対象のモジュールの初期化やレジスタへの値の設定等の複数の処理（ステップ）が所定の実行順序で実行される。
【００３０】
このように、運用系ＳＰ２−１は、制御を行なう対象装置としてのＳＢ３に対して複数の処理を所定の実行順序で実行する第１の制御装置の一例である。
【００３１】
待機系ＳＰ２−２は、例えば自系のＳＰボード内のハードウェアの監視や運用系ＳＰ２−１の監視を行なうことができる。運用系ＳＰ２−１がハードウェアの故障やファームウェアの障害等でダウンした場合、待機系ＳＰ２−２が運用系に切り替わることで、サーバ１内の制御や監視を継続して行なうことができる。
【００３２】
このように、待機系ＳＰ２−２は、第１の制御装置の一例としての運用系ＳＰ２−１を監視し、所定の切替条件に応じて、ＳＢ３に対する複数の処理の実行を運用系ＳＰ２−１から引き継ぐ第２の制御装置の一例である。
【００３３】
ＳＢ３は、情報処理装置の一例であり、サーバ１本体のＯＳを実行するＣＰＵ３ａやメモリ３ｂ等を実装することができる。一実施形態において、ＳＢ３は、ＳＰ２による制御対象である対象装置の一例である。
【００３４】
ＥＥＰＲＯＭ４は、不揮発性メモリの一例である。ＥＥＰＲＯＭ４は、運用系ＳＰ２−１及び待機系ＳＰ２−２にそれぞれ接続され、これらのＳＰ２間でデータ同期を行なうためのキューとして用いられる。
【００３５】
このように、ＥＥＰＲＯＭ４は、ＳＰ２−１とＳＰ２−２との間に介設された転送記憶部の一例である。なお、ＥＥＰＲＯＭ４は、複数のＳＰ２からアクセス可能とするため、ＳＰ２の数（図１の場合２つ）と同数のポート（この場合デュアルポート）をそなえることが好ましい。
【００３６】
以下、サーバ１におけるＳＰ２の詳細について説明する。
【００３７】
〔１−２〕ＳＰのハードウェア構成例
まず、図１及び図２を参照して、図１に示すＳＰ２のハードウェア構成例について説明する。図２はＳＰ２のハードウェア構成例を示す図である。図１に示すように、ＳＰ２は、例示的に、ＣＰＵ２ａ、メモリ２ｂ、ＬＡＮコントローラ２０ａ、ＲＴＣ２０ｂ、ＣＰＬＤ２０ｃ、バススイッチ２０ｆ、及びGeneral Purpose Input/Output（ＧＰＩＯ；汎用入出力）２０ｇをそなえることができる。これらに加えて、図２に示すように、ＳＰ２は、例示的に、記憶部２ｃ、インタフェース部２ｄ、及び入出力部２ｅをそなえることができる。
【００３８】
図１及び図２に示すＣＰＵ２ａは、種々の制御や演算を行なう演算処理装置（プロセッサ）の一例である。ＣＰＵ２ａは、ＳＰ２内の各ブロックとバスで相互に通信可能に接続されてもよい。なお、演算処理装置としては、ＣＰＵ２ａに代えて、電子回路、例えばMicro Processing Unit（ＭＰＵ）、Application Specific Integrated Circuit（ＡＳＩＣ）、Field Programmable Gate Array（ＦＰＧＡ）等の集積回路（ＩＣ）が用いられてもよい。
【００３９】
メモリ２ｂは、種々のデータやプログラムを格納するハードウェアの一例である。メモリ２ｂとしては、例えばRandom Access Memory（ＲＡＭ）等の揮発性メモリが挙げられる。
【００４０】
図２に示す記憶部２ｃは、種々のデータやプログラム等を格納するハードウェアの一例である。記憶部２ｃとしては、例えばHard Disk Drive（ＨＤＤ）等の磁気ディスク装置、Solid State Drive（ＳＳＤ）等の半導体ドライブ装置、フラッシュメモリやRead Only Memory（ＲＯＭ）等の不揮発性メモリ等の各種記憶装置が挙げられる。
【００４１】
例えば記憶部２ｃは、ＳＰ２の各種機能の全部若しくは一部を実現する制御プログラム２０を格納することができる。ＣＰＵ２ａは、例えば記憶部２ｃに格納された制御プログラム２０をメモリ２ｂに展開して実行することにより、ＳＰ２の機能を実現することができる。
【００４２】
インタフェース部２ｄは、他系のＳＰ２、ＳＢ３、及びＥＥＰＲＯＭ４等との間の接続及び通信の制御等を行なう通信インタフェースの一例である。例えばインタフェース部２ｄは、図１に示す後述するＬＡＮコントローラ２０ａ、バススイッチ２０ｆ、及びＧＰＩＯ２０ｇ等をそなえることができる。なお、制御プログラム２０は、図示しないネットワークからインタフェース部２ｄを介してＳＰ２にダウンロードされてもよい。
【００４３】
また、ＳＰ２は、ＥＥＰＲＯＭ４へのアクセスを行なうこともできるため、インタフェース部２ｄは、さらにＣＰＵ２ａからＥＥＰＲＯＭ４へアクセスするためのインタフェースをそなえてもよい。
【００４４】
さらに、インタフェース部２ｄは、記録媒体２ｆに記録されたデータやプログラムを読み出す読取部をそなえてもよい。読取部は、コンピュータ読取可能な記録媒体２ｆを接続又は挿入可能な接続端子又は装置を含んでよい。読取部としては、例えばUniversal Serial Bus（ＵＳＢ）等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、ＳＤカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体２ｆには制御プログラム２０が格納されてもよい。
【００４５】
記録媒体２ｆとしては、例えばフレキシブルディスク、ＣＤ、ＤＶＤ、ブルーレイディスク等の光ディスクや、ＵＳＢメモリやＳＤカード等のフラッシュメモリ等の非一時的な記録媒体が挙げられる。なお、ＣＤとしては、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等が挙げられる。また、ＤＶＤとしては、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等が挙げられる。
【００４６】
入出力部２ｅは、マウス、キーボード、操作ボタン等の入力部、並びにディスプレイ等の出力部の少なくとも一部を含むことができる。例えば入力部は、オペレータ等による設定の登録や変更、システムのモード選択（切替）等の各種操作やデータの入力等の作業に用いられてもよく、出力部は、オペレータ等による設定の確認や各種通知等の出力に用いられてもよい。
【００４７】
図１に示すＬＡＮコントローラ２０ａは、他系のＳＰ２との間のＬＡＮ接続及び通信の制御等を行なう通信インタフェースの一例である。ＬＡＮコントローラ２０ａは、例えばＬＡＮケーブルを挿抜可能なアダプタ又は無線アンテナを有し、他系のＳＰ２とＬＡＮケーブル又は無線ＬＡＮによって接続されてもよい。
【００４８】
ＲＴＣ２０ｂは、クロックジェネレータ等によって時刻を管理することができる。一実施形態に係るＲＴＣ２０ｂは、周期的に又は設定された時刻にＣＰＵ２ａへ割り込みを発生させるように設定されている。
【００４９】
ＣＰＬＤ２０ｃは、集積回路の一例であり、ウォッチドッグタイマ２０ｄ及びＩ２Ｃコントローラ２０ｅとしての機能をそなえることができる。
【００５０】
ウォッチドッグタイマ２０ｄは、計時を行なうタイマの一例であり、カウント値が所定値（所定時間）に達すると、例えばＣＰＵ２ａへ再起動を指示する信号を出力する等によって、ＳＰ２を再起動することができる。ウォッチドッグタイマ２０ｄのカウント値は、ＣＰＵ２ａによってリセットされてよい。
【００５１】
Ｉ２Ｃコントローラ２０ｅは、Ｉ２Ｃバスを介して接続されたＩ２Ｃデバイスから監視に用いる情報を取得することができる。Ｉ２Ｃデバイスとしては、例えばＳＢ３や自系ＳＰ２の電源、温度センサ、ファン等の各種デバイスが挙げられる。
【００５２】
バススイッチ２０ｆは、ＳＢ３との間の接続及び通信の制御等を行なう通信インタフェースの一例である。バススイッチ２０ｆは、例えば複数のＳＢ３の各々と制御及び監視を行なうためのケーブル又はバス等によって接続されてもよい。バススイッチ２０ｆは、例えば運用系ＳＰ２に対してはＳＢ３への接続を許容し、待機系ＳＰ２に対してはＳＢ３への経路（パス）を閉じてもよい。
【００５３】
ＧＰＩＯ２０ｇは、他系ＳＰ２との間の接続及び通信の制御等を行なう通信インタフェースの一例である。一実施形態に係るＧＰＩＯ２０ｇは、ＣＰＵ２ａからの指示に応じて、待機系ＳＰ２のサスペンド／レジューム処理を制御することができる。
【００５４】
ＧＰＩＯ２０ｇは、例えば４本の信号線（ケーブル又はバス）１０ａ〜１０ｄを介して他系ＳＰ２のＧＰＩＯ２０ｇと接続される。一例として、図１に示すように、信号線１０ａ及び１０ｃはＳＰ＃０からＳＰ＃１への通信に用いられる信号線であり、それぞれWakeup信号（0_1_Wakeup）及びACK信号（0_1_ACK）が出力（設定）される。また、信号線１０ｂ及び１０ｄはＳＰ＃１からＳＰ＃０への通信に用いられる信号線であり、それぞれWakeup信号（1_0_Wakeup）及びACK信号（1_0_ACK）が出力（設定）される。
【００５５】
運用系ＳＰ２から待機系ＳＰ２へのWakeup信号は、待機系ＳＰ２がサスペンドしてもよいか否かを表す。一例として、待機系ＳＰ２がサスペンド可能な場合、運用系ＳＰ２のＣＰＵ２ａは、ＧＰＩＯ２０ｇを制御してWakeup信号（運用系から待機系；信号線１０ａ又は１０ｃ）の出力レベルを例えばLowに設定する。一方、サスペンド状態の待機系ＳＰをレジューム（再開）する場合は、運用系ＳＰ２のＣＰＵ２ａは、ＧＰＩＯ２０ｇを制御してWakeup信号の出力レベルを例えばHighに設定する。
【００５６】
なお、運用系ＳＰ２のＧＰＩＯ２０ｇからのWakeup信号の変化を待機系ＳＰ２のＣＰＵ２ａがＧＰＩＯ２０ｇ経由で認識した場合、待機系ＳＰ２のＣＰＵ２ａは、ＧＰＩＯ２０ｇを制御してACK信号（待機系から運用系；信号線１０ｂ又は１０ｄ）の出力レベルをWakeup信号に合わせて、Low又はHighに設定する。
【００５７】
上述したＳＰ２のハードウェア構成は例示である。従って、ＳＰ２内でのハードウェアの増減（例えば任意のブロックの追加や省略）、分割、任意の組み合わせでの統合、バスの追加又は省略等は適宜行なわれてもよい。
【００５８】
〔１−３〕ＳＰ及びＥＥＰＲＯＭを含む制御システムについて
次に、一実施形態に係るＳＰ２及びＥＥＰＲＯＭ４を含む制御システムの処理の一例について簡単に説明する。
【００５９】
一実施形態に係るＳＰ２は、ＧＰＩＯ２０ｇをそなえることにより、運用系ＳＰ２が待機系ＳＰ２をサスペンド／レジュームさせることができる。
【００６０】
例えば、待機系ＳＰ２は、サスペンド状態に移行する場合、ＣＰＵ２ａの処理内容をメモリ２ｂへ退避（格納）し、ＬＡＮコントローラ２０ａ等のコンポーネントを停止させるとともに、ＣＰＵ２ａ自身も停止することができる。
【００６１】
また、待機系ＳＰ２は、レジュームする場合、割り込みにより動作を開始したＣＰＵ２ａがメモリ２ｂから処理内容を読み出すとともに、停止させたＬＡＮコントローラ２０ａ等のコンポーネントを起動することができる。
【００６２】
しかし、上述したように、図２８に示す待機系ＳＰ２００−２では、上記（ａ）〜（ｅ）に示す処理を行なうため、待機系ＳＰ２００−２をサスペンド状態に移行させた場合、これらの処理が実行されない。
【００６３】
そこで、一実施形態に係る制御システムでは、待機系ＳＰ２をサスペンドさせるものの、例えば以下の（Ａ）〜（Ｅ）の処理を行なうときにレジュームさせるように制御することができる。
【００６４】
（Ａ）データ同期（ＥＥＰＲＯＭ４上のデータ転送キュー４０（図３参照）がFullの場合）
（Ｂ）運用系ＳＰ２（他系ＳＰ２）の生存監視
（Ｃ）待機系ＳＰ２（自系ＳＰ２）の生存監視
（Ｄ）待機系ＳＰ２（自系ＳＰ２）のハードウェア（電圧／温度等）監視
（Ｅ）運用系ＳＰ２（他系ＳＰ２）との運用系／待機系の切替処理
【００６５】
上記の処理を行なうために、待機系ＳＰ２は、例示的に、サスペンド中に以下の（ｉ）〜（iii）に示す契機でレジュームすることができる。
【００６６】
（ｉ）ＧＰＩＯ２０ｇのWakeup信号（input）からの割り込み（レジューム要因：運用系ＳＰ２からのWakeup指示）
運用系ＳＰ２がＧＰＩＯ２０ｇのWakeup信号（運用系から待機系）の出力レベルを変更すると、出力レベルの変化を契機に待機系ＳＰ２のＧＰＩＯ２０ｇから待機系ＳＰ２のＣＰＵ２ａに割り込みが上がる。ＣＰＵ２ａは割り込みを契機に動作を開始（再開）し、待機系ＳＰ２のレジュームを行なう。このとき、待機系ＳＰ２は、レジューム後にＥＥＰＲＯＭ４上のデータ転送キュー４０からデータを取得するデータ同期（上記（Ａ）参照）を行なうことができる。データ転送キュー４０を含むデータ同期の手法については後述する。
【００６７】
また、待機系ＳＰ２は、上記（Ｅ）の処理（運用系ＳＰ２からの切り替え指示に応じた切替処理）についても、運用系ＳＰ２からのWakeup指示を契機に所定の切替条件を判断することによって実現することができる。換言すれば、待機系ＳＰ２は、サスペンド状態で運用系ＳＰ２からの切り替え指示を待ち受けることができる。
【００６８】
（ii）ＲＴＣ２０ｂからの割り込み（レジューム要因：周期的な（スケジュールされた）アラーム）
待機系ＳＰ２は、自系ＳＰ２のハードウェア（電圧／温度等）監視の周期又は次回の監視までの時間（若しくは次回の監視の時刻）をＲＴＣ２０ｂに設定することができる。これにより、指定した間隔又はタイミングでＲＴＣ２０ｂから待機系ＳＰ２のＣＰＵ２ａに割り込みが上がる。ＣＰＵ２ａは割り込みを契機に動作を開始（再開）し、待機系ＳＰ２のレジュームを行ない、ハードウェア監視を実行する。このとき、待機系ＳＰ２は、自系ＳＰ２及び他系ＳＰ２の生存監視も行なうことができる。なお、待機系ＳＰ２は、これらの監視を完了すると、再びサスペンド状態に移行することができる。
【００６９】
このように、待機系ＳＰ２は、ＲＴＣ２０ｂによる割り込みを契機に上記（Ｂ）〜（Ｄ）の処理を行なうことができる。このため、ＣＰＵ２ａは、サスペンド状態に移行する際に、予めハードウェア等の監視の周期又は時間等をＲＴＣ２０ｂに設定し、割り込みを発生させるようにすることが好ましい。このときＣＰＵ２ａがＲＴＣ２０ｂに設定する周期又は時間等は、自系ＳＰ２及び他系ＳＰ２の生存監視の実行周期、並びに、自系ＳＰ２のハードウェア監視の実行周期（ウォッチドッグタイマ２０ｄのタイムアウト時間よりも短い周期）のうちの最も短い周期と同様又はそれ未満であることが好ましい。
【００７０】
（iii）ウォッチドッグタイマ２０ｄからの割り込み（レジューム要因：ウォッチドッグタイムアウト）
待機系ＳＰ２のＣＰＵ２ａは、上記（ii）におけるＲＴＣ２０ｂからの割り込みを契機に自系ＳＰ２の生存監視を行なうことができる。このとき待機系ＳＰ２のＣＰＵ２ａは、ウォッチドッグタイマ２０ｄのリセットを行なうことができるが、ＣＰＵ２ａのハングアップ等によりウォッチドッグタイマ２０ｄのリセットが滞ると、ウォッチドッグタイマ２０ｄがタイムアウトすることになる。この場合、ウォッチドッグタイマ２０ｄからＣＰＵ２ａに割り込み（例えばNon-Maskable Interrupt（ＮＭＩ）割り込み）が上がり、待機系ＳＰ２では、ＣＰＵ２ａが割り込みを契機にレジュームして自系ＳＰ２の再起動を行なう。
【００７１】
なお、待機系ＳＰ２が上記（iii）に示す契機でレジュームするのは、ＣＰＵ２ａのハングアップ等の発生により、上記（Ｃ）に示す自系ＳＰ２の生存監視が失敗（自系ＳＰ２に異常が発生）したことを意味する。換言すれば、待機系ＳＰ２が正常に動作している場合、サスペンド中の待機系ＳＰ２がレジュームする契機は、上記（ｉ）又は（ii）に示す場合となる。
【００７２】
ここまで、待機系ＳＰ２の処理について説明したが、運用系ＳＰ２は、ＳＢ３の制御及び監視に加えて、自系ＳＰ２のハードウェア監視を行なうことができる（上記（Ｄ）参照）。この場合、運用系ＳＰ２は、待機系ＳＰ２と同様に、ＲＴＣ２０ｂに対して監視を行なう周期又は時間等を設定し、ＲＴＣ２０ｂからの割り込みを契機に当該監視を行なうことができる。また、運用系ＳＰ２は、さらに自系ＳＰ２及び他系ＳＰ２の生存監視を行なってもよい（上記（Ｂ）及び（Ｃ）参照）。
【００７３】
〔１−４〕制御システムの機能構成例
次に、図３を参照して、一実施形態に係る制御システムの機能構成例について説明する。図３は、図１に示すＳＰ２の機能構成の一例を示している。なお、ＳＰ２−１及び２−２は、いずれも運用系／待機系として機能することが可能であるため、運用系／待機系の機能は、ＳＰ２−１及び２−２の双方がそなえてもよい。
【００７４】
図３に示すように、ＳＰ２は、例示的に、監視処理部２１、二重化処理部２２、及びシーケンス処理部２３をそなえることができる。これらの機能は、ＣＰＵ２ａが実行する制御プログラム２０により実現されてもよい。
【００７５】
監視処理部２１は、サーバ１を含む製品全体のハードウェアの監視を行なうことができる。監視処理部２１による監視は、例えばＲＴＣ２０ｂからの割り込みによりレジュームしたときに実行される。一例として、監視処理部２１は、自ボード監視部２１ａ及びサーバ監視部２１ｂをそなえることができる。
【００７６】
自ボード監視部２１ａは、自系ＳＰ２内のハードウェアの監視を行なうことができる。例えば自ボード監視部２１ａは、Ｉ２Ｃバスに接続されたデバイスやＣＰＵ２ａに接続されたデバイスから監視に用いる情報、例えば電圧や温度等の情報を取得することによって監視を行なうことができる。なお、自ボード監視部２１ａは、ＳＰ２が運用系及び待機系のいずれの場合にも動作することができる。
【００７７】
運用系ＳＰ２の自ボード監視部２１ａは、自系ＳＰ２（運用系ＳＰ２）内のハードウェアの異常を検出すると、例えばシーケンス処理部２３を通じて運用系／待機系を切り替えるための通知を行なうことができる。通知を行ない、待機系ＳＰ２で運用系への切替処理が完了すると、ＳＰ２（自ボード監視部２１ａ）はサーバ１から自系ＳＰ２の切り離し、例えばシャットダウン（縮退）を実行してもよい。なお、待機系ＳＰ２の自ボード監視部２１ａは、自系ＳＰ２（待機系ＳＰ２）内のハードウェアの異常を検出すると、他系ＳＰ２（運用系ＳＰ２）へ通知を行ない、シャットダウンを実行してもよい。
【００７８】
サーバ監視部２１ｂは、ＳＢ３を含む製品本体の電源（電圧）、温度（吸気温度やＣＰＵ３ａの温度等）、ファン回転数、記憶装置（ＨＤＤ等）等のハードウェアの監視を、Ｉ２Ｃコントローラ２０ｅを用いて行なうことができる。なお、サーバ監視部２１ｂは、ＳＰ２が運用系の場合に動作することができる。
【００７９】
サーバ監視部２１ｂは、ＳＢ３内のハードウェアの異常（電圧異常、温度異常、ＨＤＤアクセス異常等）を検出すると、サーバ１から等がＳＢ３の切り離し、例えばＳＢ３のシャットダウン（縮退）を実行してもよい。
【００８０】
二重化処理部２２は、運用系及び待機系のＳＰ２間でのデータ転送や、自系ＳＰ２及び他系ＳＰ２の生存監視等、制御システムにおけるＳＰ２の冗長化に係る種々の処理を行なうことができる。一例として、二重化処理部２２は、自系監視部２２ａ、他系監視部２２ｂ、及びデータ転送部２２ｃをそなえることができる。
【００８１】
自系監視部２２ａは、自系ＳＰ２の生存監視を行なうことができる。この生存監視は、例えば自系監視部２２ａがウォッチドッグタイマ２０ｄをリセットし、自系ＳＰ２の再起動を抑止することにより行なわれる。ウォッチドッグタイマ２０ｄを正常にリセットできた場合（再起動を抑止できた場合）、自系ＳＰ２の生存が確認できた（監視結果が正常である）といえる。
【００８２】
他系監視部２２ｂは、他系ＳＰ２の生存監視を行なうことができる。この生存監視は、例えば自系ＳＰ２のＣＰＵ２ａが他系ＳＰ２のＣＰＵ２ａに対してＬＡＮを介して生存確認の通知を行ない、規定時間内に応答を受信したか否かを判断することにより行なわれる。一例として、規定時間内に応答が返ってきた場合、ＣＰＵ２ａは他系ＳＰ２の生存が確認できた（監視結果が正常である）と判断することができる。なお、この生存監視にはハートビート通信等が用いられてもよい。
【００８３】
なお、自系監視部２２ａ及び他系監視部２２ｂによる監視は、それぞれ例えばＲＴＣ２０ｂからの割り込みによりレジュームしたときに実行される。なお、自系監視部２２ａ及び他系監視部２２ｂは、ＳＰ２が待機系の場合に動作することができるが、ＳＰ２が運用系の場合にも動作してもよい。
【００８４】
データ転送部２２ｃは、ＬＡＮ経由で運用系ＳＰ２及び待機系ＳＰ２間でのデータ転送を行なうことができる。例えばデータ転送部２２ｃは、二重化の制御に係る同期データや、シーケンス処理部２３による実行中のシーケンスに関するデータを転送することができる。これにより、運用系ＳＰ２と待機系ＳＰ２とを同期することができ、運用系ＳＰ２に異常が発生した場合でも待機系ＳＰ２が運用系ＳＰ２の処理を正しく引き継ぐことができる。
【００８５】
なお、データ転送部２２ｃによるデータの転送は、例えば後述するシーケンス処理部２３においてシーケンス処理が行なわれたとき（データが更新されたとき）であって、待機系ＳＰ２がデータを受信できる状態であるとき（動作中）に行なうことができる。
【００８６】
シーケンス処理部２３は、ＳＢ３を含む製品本体の電源投入や電源切断等の複数の制御シーケンスの実行を管理することができる。一例として、シーケンス処理部２３は、シーケンステーブル２３ａ、シーケンス管理キュー２３ｂ、他系データ転送部２３ｃ、及びシーケンス管理部２３ｄをそなえることができる。
【００８７】
シーケンステーブル２３ａは、電源投入や電源切断等のシーケンス（種別）ごとに、当該シーケンスで実行される複数の処理（ステップ）定義するテーブルである。シーケンス処理部２３は、電源投入等のシーケンスを実行する場合にシーケンステーブル２３ａを参照し、何の処理をどの順番で実行するかを認識することができる。なお、シーケンステーブル２３ａは、制御を行なうシーケンス種別ごとにそなえられる。
【００８８】
図４にシーケンステーブル２３ａのデータ構造の一例を示す。図４に示すように、シーケンステーブル２３ａには、ヘッダ部と複数（例えばＭ＋１個；Ｍは自然数）のデータ部＃０〜＃Ｍとが含まれる。なお、データ部の数は、当該シーケンスにおいて実行される処理の数に相当する。
【００８９】
ヘッダ部には、例えば実行するシーケンスの処理の数を示すシーケンスステップ数が設定されてよい。
【００９０】
各データ部には、例えばシーケンスステップ番号、シーケンス処理実行関数の関数ポインタ、運用系ＳＰ２切替後の再開ポイント、及びパラメータが設定されてよい。
【００９１】
シーケンスステップ番号はシーケンスのステップに割り振られたユニークな番号である。なお、シーケンスステップ番号は他のデータ部のシーケンスステップ番号と連番でなくてもよい。
【００９２】
シーケンス処理実行関数の関数ポインタは、シーケンス処理の各ステップの処理を実行する関数（機能モジュール）の関数ポインタを表す情報である。関数ポインタで指定される関数はステップの処理内容を含んでおり、シーケンス処理部２３は、この関数を呼び出すことで当該ステップの処理を実行することができる。
【００９３】
運用系ＳＰ２切替後の再開ポイントは、運用系ＳＰ２が切り替わった場合に、新たに運用系になったＳＰ２が中断されたシーケンスのどのステップから処理を再開するかを表す情報である。再開ポイントには、再開するステップのシーケンスステップ番号が格納されている。
【００９４】
換言すれば、シーケンステーブル２３ａは、複数の処理（ステップ）の各々について、当該処理が実行中に中断された場合の再開ポイントを示す再開情報の一例である。
【００９５】
中断されたシーケンスを再開する場合、中断されたステップによっては、当該ステップをやり直す（ステップを再実行する）のではなく、リカバリ処理を行なうことが好ましい場合がある。このため、リカバリ処理を行なう場合に再開するステップを再開ポイントに設定することができる。なお、リカバリ処理を行なわず、中断されたステップと同じステップを再度実行すればよい場合、再開ポイントには例えば“−１”が設定されてもよい。
【００９６】
例えば電源投入等の制御シーケンスを実行中の場合、ＳＰ２は、処理を継続するためにシーケンスステップの再実行を行なうことができる。一方、ハードウェアへの制御を行なっている最中に運用系が切り替わった場合、処理の継続が困難な場合があるため、ＳＰ２は、電源切断等のリカバリ処理を行なうことができる。なお、リカバリ処理では、１つ以上前のステップからシーケンスをやり直したり、中断したステップの前に他のステップを実行するといった処理が行なわれる。
【００９７】
パラメータは、シーケンス処理実行関数を呼び出す際に関数に渡すパラメータを表す情報である。
【００９８】
以上のように、シーケンステーブル２３ａは、シーケンスの各ステップの処理と切替時の再開ポイントとを定義することができる。これにより、シーケンス処理部２３は、各ステップの実行中に切り替えが発生した場合のリカバリ処理の要否とリカバリ処理の内容とを取得することができる。
【００９９】
シーケンス管理キュー２３ｂは、シーケンス処理部２３が実行中のシーケンス処理に用いられるデータを管理する情報であり、例えばキュー構造で管理される。
【０１００】
図５にシーケンス管理キュー２３ｂのデータ構造の一例を示す。図５に示すように、シーケンス管理キュー２３ｂには、ヘッダ部と複数（例えばＮ＋１個；Ｎは自然数）のデータ部＃０〜＃Ｎとが含まれる。
【０１０１】
ヘッダ部には、キューの先頭エントリ及び末尾エントリのインデックス（データ部のインデックス）が設定されてよい。
【０１０２】
先頭エントリインデックスは、キューの先頭（ＨＥＡＤ）のインデックスを表し、末尾エントリインデックスは、キューの末尾（ＴＡＩＬ）のインデックスを表す。シーケンス処理部２３は、キューを処理する（実行する）際に先頭エントリインデックスを参照してキューを読み出すことができ、新たにキューを格納する際に末尾エントリインデックスを参照して格納先を判定することができる。
【０１０３】
各データ部には、実行するシーケンスの状態を表すシーケンスデータ（状態情報）の一例として、シーケンス状態、シーケンスＩＤ、シーケンス種別、シーケンスステップ番号、及び制御対象ハードウェア情報が設定されてよい。
【０１０４】
シーケンス状態はシーケンスの状態を表す情報である。シーケンス状態には、以下の状態が含まれてよい。
・INVALID：無効（シーケンス実行前の状態）
・RUNNING：シーケンス実行中
・HOLD：シーケンス保留中（先行するシーケンスの処理完了を待っている状態）
・SUSPENDED：シーケンス中断中（二重化切替を実施するために運用系ＳＰ２で実行中のシーケンス処理を中断している最中の場合）
・STOP：シーケンス停止中（シーケンス中断処理が完了した場合。SUSPENDEDから遷移する）
・CANCELED：シーケンスキャンセル（後続処理により先行処理がキャンセルされた場合。例えば先行する電源投入のシーケンスの後に電源切断のシーケンスがシーケンス管理キュー２３ｂに登録された場合、先行する電源投入の処理がキャンセルされる）
【０１０５】
シーケンスＩＤはシーケンス処理の識別情報の一例である。ＩＤは実行中の他のシーケンスと重複しないように割り当てられる。
【０１０６】
シーケンス種別はシーケンス処理で行なう処理の種別を表す情報である。シーケンス種別には、電源の投入、切断、リセット等が含まれてよい。
【０１０７】
シーケンスステップ番号は、シーケンス処理がどこまで進んだかを表す情報であり、当該シーケンスについて最後に実行されたシーケンスステップ番号が設定される。シーケンス実行中に運用系ＳＰ２が待機系に切り替わった場合、切替後の運用系ＳＰ２は、このシーケンスステップ番号が示すシーケンステーブル２３ａのエントリに設定された、運用系ＳＰ２切替後の再開ポイントからシーケンス処理を再開することができる。
【０１０８】
制御対象ハードウェア情報は、このデータ部に設定されているシーケンス処理が対象としているハードウェアを表す情報である。制御対象ハードウェア情報には例えば制御対象のＳＢ３のユニークな識別情報等が設定される。
【０１０９】
なお、上述したシーケンステーブル２３ａ及びシーケンス管理キュー２３ｂは、それぞれメモリ２ｂの記憶領域の少なくとも一部を用いて記憶・管理されてよい。このように、メモリ２ｂは、シーケンスにおける複数の処理（ステップ）の実行に用いる情報を記憶する記憶部の一例である。
【０１１０】
以上のように、シーケンス種別及びシーケンスＩＤを含むシーケンス管理キュー２３ｂは、複数の処理（ステップ）のうちの実行対象の処理の状態を示す状態情報の一例である。
【０１１１】
他系データ転送部２３ｃは、他系ＳＰ２との間でシーケンス管理キュー２３ｂの情報を送受信することができる。例えば運用系ＳＰ２の他系データ転送部２３ｃは、待機系ＳＰ２がレジュームしているとき（動作中）に、シーケンス管理キュー２３ｂの情報をＬＡＮ経由で待機系ＳＰ２へ転送することができる。このとき他系データ転送部２３ｃは、シーケンス管理キュー２３ｂに登録されたキューを二重化処理部２２のデータ転送部２２ｃへ出力し、データ転送部２２ｃに待機系ＳＰ２へ当該キューを転送させることができる。
【０１１２】
また、待機系ＳＰ２の他系データ転送部２３ｃは、運用系ＳＰ２からシーケンス管理キュー２３ｂの情報を受信すると、受信した情報をシーケンス管理キュー２３ｂへ登録することができる。なお、シーケンス管理キュー２３ｂへのアクセスはシーケンス管理部２３ｄを介してもよい。
【０１１３】
シーケンス管理部２３ｄは、シーケンスの管理を行なうことができる。例えば運用系ＳＰ２のシーケンス管理部２３ｄは、シーケンス処理部２３によるシーケンスの実行に応じてシーケンス管理キュー２３ｂを更新することができる。
【０１１４】
ここで、一実施形態においては待機系ＳＰ２のサスペンドが許容されているが、待機系ＳＰ２がサスペンド状態である場合、ＬＡＮコントローラ２０ａも停止するため、他系データ転送部２３ｃは、シーケンス管理キュー２３ｂの情報をＬＡＮ経由で待機系ＳＰ２へ転送することができない。また、二重化処理部２２においても、冗長化に係る同期データをＬＡＮ経由で待機系ＳＰ２へ転送することができない。
【０１１５】
そこで、一実施形態に係るシーケンス管理部２３ｄは、待機系ＳＰ２がサスペンドしている場合、データ転送キュー４０経由で、待機系ＳＰ２へデータを転送することができる。
【０１１６】
データ転送キュー４０は、待機系ＳＰ２がサスペンドしている場合に、ＳＰ２間でデータ同期を行なうための情報であり、例えばＥＥＰＲＯＭ４の記憶領域の少なくとも一部を用いて記憶され、キュー構造で管理される。データ転送キュー４０にエンキューされたデータは、例えば待機系ＳＰ２がレジュームしたタイミングで待機系ＳＰ２のシーケンス処理部２３（シーケンス管理部２３ｄ）によりデキューされ、待機系ＳＰ２のシーケンス管理キュー２３ｂに反映される。
【０１１７】
図６にデータ転送キュー４０のデータ構造の一例を示す。図６に示すように、データ転送キュー４０には、ヘッダ部と複数（例えばｉ＋１個；ｉは自然数）のデータ部＃０〜＃ｉとが含まれる。
【０１１８】
ヘッダ部には、キューの先頭エントリ及び末尾エントリのインデックス（データ部のインデックス）が設定されてよい。
【０１１９】
各データ部には、運用系ＳＰ２から待機系ＳＰ２へ転送される情報の一例として、転送データ種別及び転送データが設定されてよい。
【０１２０】
転送データ種別は、待機系ＳＰ２に転送するデータの種別を表す情報である。転送データ種別には以下の種別が含まれてよい。
・シーケンスキュー
・二重化同期データ
【０１２１】
転送データは待機系ＳＰ２に転送するデータである。例えば転送データ種別がシーケンスキューである場合、転送データには転送するシーケンスキュー（シーケンス管理キュー２３ｂにおける１つ以上のデータ部）そのものが設定されてもよいし、シーケンスキューにおける更新部分の差分データが設定されてもよい。
【０１２２】
差分データには、シーケンスＩＤ、シーケンス管理キュー２３ｂにおける更新部分のオフセット（当該データ部の先頭からのオフセット）、及び更新後のデータが含まれてよい。
【０１２３】
一例として、運用系ＳＰ２において、シーケンスＩＤ“３”のシーケンスキューのシーケンスステップ番号が“４”から“５”に更新された場合であって、シーケンスステップ番号がデータ部の先頭から１２バイト目である場合、差分データは以下のようになる。
・シーケンスＩＤ：３
・オフセット：１２
・データ：５
【０１２４】
なお、シーケンスの完了によって運用系ＳＰ２のシーケンス管理キュー２３ｂからシーケンスキューが削除された場合、シーケンスキューの削除を示す転送データ（差分データ）が設定されてよい。この転送データには、例えば削除するシーケンスキューのシーケンスＩＤと、それぞれに“−１”が設定されたオフセット及びデータとが含まれてよい。
【０１２５】
また、例えば転送データ種別が二重化同期データである場合、転送データには、ＬＡＮ経由で転送されるものと同様のデータ（例えばファイル）が設定されてよい。
【０１２６】
シーケンス管理部２３ｄは、上述のように待機系ＳＰ２のサスペンド中にデータ転送キュー４０へシーケンス管理キュー２３ｂのデータを格納することができるが、このとき、データ転送キュー４０に空きがなくなる（ＦＵＬＬになる）場合がある。この場合、シーケンス管理部２３ｄは、ＧＰＩＯ２０ｇにWakeup信号をHighに設定させ、待機系ＳＰ２をレジュームさせることができる。
【０１２７】
Wakeup信号によりレジュームした待機系ＳＰ２のシーケンス管理部２３ｄは、データ転送キュー４０にキューイングされた全てのデータを待機系ＳＰ２のシーケンス管理キュー２３ｂへ反映して同期を完了する。同期が完了すると、待機系ＳＰ２のシーケンス管理部２３ｄは、ＧＰＩＯ２０ｇにACK信号をHighに設定させ、運用系ＳＰ２へ応答を返す。
【０１２８】
ACK応答を受けた運用系ＳＰ２のシーケンス管理部２３ｄは、再度待機系ＳＰ２をサスペンドさせるために、ＧＰＩＯ２０ｇにWakeup信号をLowに設定させる。これを受けた待機系ＳＰ２は、ＧＰＩＯ２０ｇにACK信号をLowに設定させ、サスペンド状態に移行する。
【０１２９】
このように、待機系ＳＰ２がサスペンド中にデータ転送キュー４０の空きがなくなっても、運用系ＳＰ２はデータ転送キュー４０にキューイングされたデータを取り込ませる間だけ待機系ＳＰ２をレジュームさせることができる。これにより、待機系ＳＰ２を効率的にサスペンドさせることができ、消費電力を削減することができる。
【０１３０】
〔１−４−１〕シーケンス管理キューの同期手法の説明
次に、図７〜図１０を参照して、運用系及び待機系のＳＰ２のシーケンス処理部２３によるシーケンス管理キュー２３ｂの同期手法の一例について説明する。なお、図７〜図１０では、説明の簡略化のため、ＳＰ２内にシーケンス管理キュー２３ｂのみを図示している。
【０１３１】
図７に例示するように、運用系及び待機系両系のＳＰ２が動作中の場合、運用系ＳＰ２は、データ転送キュー４０を使用せず、ＬＡＮ経由で待機系ＳＰ２とシーケンス管理キュー２３ｂの同期を行なう。
【０１３２】
待機系ＳＰ２がサスペンド状態に移行した場合、ＬＡＮ経由でシーケンス管理キュー２３ｂを同期できないため、運用系ＳＰ２は、図８に例示するように、シーケンス管理キュー２３ｂの更新箇所のデータをデータ転送キュー４０に格納する。一例として、図８に示す運用系ＳＰ２のシーケンス処理部２３は、シーケンスＩＤ“３”のシーケンスステップ番号を“４”から“５”に更新した場合、以下の転送データをデータ転送キュー４０の空きエントリ（例えばＨＥＡＤ）に格納する。
・転送データ種別：シーケンスキュー
・転送データ：
シーケンスＩＤ：３
オフセット：１２
データ：５
【０１３３】
運用系ＳＰ２から待機系ＳＰ２へのＧＰＩＯ２０ｇのWakeup指示等により、待機系ＳＰ２がレジュームした直後は、図９に例示するように、直前までサスペンドしていた待機系ＳＰ２と、運用系ＳＰ２との間でシーケンス管理キュー２３ｂの同期が行なわれていない。一例として、図９に示すように、シーケンスＩＤ“３”のシーケンスステップ番号は待機系ＳＰ２では“４”、運用系ＳＰ２では“６”になっている。また、シーケンスＩＤ“４”のシーケンスステップ番号は待機系ＳＰ２では“１０”、運用系ＳＰ２では“１１”になっている。なお、図９の例では、データ転送キュー４０の空きがなくなり、運用系ＳＰ２が待機系ＳＰ２へWakeup信号（High）を出力した場合を示している。
【０１３４】
このため、待機系ＳＰ２のシーケンス処理部２３（シーケンス管理部２３ｄ）は、レジュームした後、データ転送キュー４０のデータをＨＥＡＤから順に読み出し、待機系ＳＰ２のシーケンス管理キュー２３ｂに反映する。
【０１３５】
待機系ＳＰ２がデータ転送キュー４０にキューイングされたデータをシーケンス管理キュー２３ｂに全て（格納順に）反映すると、図１０に例示するように、運用系及び待機系のＳＰ２のシーケンス管理キュー２３ｂの同期が完了する。図１０の例では、シーケンスＩＤ“３”のシーケンスステップ番号が待機系ＳＰ２でも運用系ＳＰ２と同じ“６”になっており、シーケンスＩＤ“４”のシーケンスステップ番号が待機系ＳＰ２でも運用系ＳＰ２と同じ“１１”になっている。なお、同期完了後、待機系ＳＰ２から運用系ＳＰ２へＧＰＩＯ２０ｇのACK応答（High）が行なわれる。
【０１３６】
なお、図９の例では、データ転送キュー４０にシーケンスＩＤ“３”のエントリが２つキューイングされている（データ“５”のシーケンス情報及びデータ“６”のシーケンス情報）。例えばシーケンス管理部２３ｄは、データ転送キュー４０にシーケンス情報を登録する際に、データ転送キュー４０からシーケンスＩＤに基づきエントリを検索し、同一のシーケンスＩＤを持つエントリが存在する場合、当該エントリにシーケンス情報を反映（上書き）してもよい。これにより、データ転送キュー４０の記憶領域の利用効率を向上させることができる。
【０１３７】
〔１−４−２〕運用系／待機系の切替処理の説明
次に、図１１〜図１５を参照して、運用系ＳＰ２に障害が発生した場合の運用系／待機系の切替処理の一例について、シーケンス管理キュー２３ｂ及びデータ転送キュー４０の状態に着目して説明する。なお、図１１〜図１５では、説明の簡略化のため、ＳＰ２内にシーケンス管理キュー２３ｂのみを図示している。
【０１３８】
以下、図１１に例示するように、待機系ＳＰ２がサスペンド状態のときに、運用系ＳＰ２の自ボード監視部２１ａが自系ＳＰ２の故障を検出した場合について説明する。この場合、自ボード監視部２１ａは、シーケンス処理部２３に対して自系ＳＰ２の故障（待機系への切り替え）を通知することができる。
【０１３９】
自ボード監視部２１ａから故障の通知を受けたシーケンス処理部２３（シーケンス管理部２３ｄ）は、実行中のシーケンスを停止させるために、図１２に例示するように、シーケンス管理キュー２３ｂの実行中のシーケンスに対してシーケンス状態をSUSPENDEDに変更する。また、シーケンス処理部２３は、変更内容をデータ転送キュー４０にもエンキューする。一例として、図１２に示す運用系ＳＰ２のシーケンス処理部２３は、シーケンス管理キュー２３ｂにおけるシーケンスＩＤ“３”のシーケンス状態をRUNNINGからSUSPENDEDに更新し、以下の転送データをデータ転送キュー４０の空きエントリ（ＴＡＩＬの次のエントリ）に格納する。
・転送データ種別：シーケンスキュー
・転送データ：
シーケンスＩＤ：３
オフセット：０
データ：SUSPENDED
【０１４０】
運用系ＳＰ２のシーケンス処理部２３は、図１３に例示するように、電源投入等のシーケンス処理が中断できた場合、シーケンス状態をSUSPENDEDからSTOPに変更し、変更内容をデータ転送キュー４０にも反映する。このとき、シーケンス処理部２３は、待機系ＳＰ２へのWakeup指示を行ない、待機系ＳＰ２をレジュームさせる。
【０１４１】
待機系ＳＰ２のシーケンス処理部２３は、レジューム後、図１４に例示するように、データ転送キュー４０内のデータを待機系ＳＰ２のシーケンス管理キュー２３ｂに反映し、同期が完了する。
【０１４２】
同期が完了すると、図１５に例示するように、運用系ＳＰ２と待機系ＳＰ２とが切り替わり、切替後の運用系ＳＰ２によりシーケンス処理が再開される。なお、運用系ＳＰ２と待機系ＳＰ２との切り替えでは、待機系ＳＰ２（切替後の運用系ＳＰ２）は、バススイッチ２０ｆをオンに切り替えて、待機系ＳＰ２からＳＢ３等へアクセスできるように設定することができる。バススイッチ２０ｆの設定は、シーケンス処理の開始前（例えば同期の完了前又は完了後）に行なわれることが好ましい。
【０１４３】
また、切替後の運用系ＳＰ２は、シーケンス管理キュー２３ｂのシーケンスステップ番号を参照することで、対応するシーケンステーブル２３ａの再開ポイントからシーケンス処理の再開を行なうことができる。
【０１４４】
なお、切替前の運用系ＳＰ２は、上述した切替処理が完了すると、ＯＳのシャットダウン等を行ない停止状態となる（図１５参照）。
【０１４５】
〔１−５〕動作例
次に、上述の如く構成されたＳＰ２及びＥＥＰＲＯＭ４を含む制御システムの動作例を、図１６〜図２７を参照して説明する。
【０１４６】
〔１−５−１〕シーケンスの登録・更新・完了〜同期処理の動作例
はじめに、図１６〜図２２を参照して、制御システムによるシーケンスの登録・更新・完了〜同期処理の動作例について説明する。
【０１４７】
図１６は運用系ＳＰ２のシーケンス処理部２３によるシーケンス登録処理の動作例を示すフローチャートであり、図１７は待機系ＳＰ２のシーケンス処理部２３によるデータ同期処理の動作例を示すフローチャートである。図２１及び図２２は、それぞれ運用系ＳＰ２のシーケンス処理部２３によるシーケンス更新処理及びシーケンス完了処理の動作例を示すフローチャートである。また、図１８〜図２０は、運用系ＳＰ２及び待機系ＳＰ２におけるシーケンス登録時の動作例を示すシーケンス図である。
【０１４８】
図１６に示すように、シーケンス管理部２３ｄは、ＳＢ３等に対するシーケンスの実行条件を確認し（ステップＳ１；図１８の処理Ｔ１）、シーケンスが実行条件を満たすか否かを判定する（ステップＳ２）。実行条件としては、例えば実行しようとするシーケンスを無効にする（打ち消す）後続のシーケンス（例えば電源投入のシーケンスの後に電源切断のシーケンス）が存在しないこと等が挙げられる。
【０１４９】
シーケンスが実行条件を満たさない場合（ステップＳ２のＮｏルート）、運用系ＳＰ２の処理が終了する。一方、シーケンスが実行条件を満たす場合（ステップＳ２のＹｅｓルート；図１８の処理Ｔ２）、シーケンス管理部２３ｄは、シーケンス管理キュー２３ｂがFullであるか否かを判定する（ステップＳ３）。
【０１５０】
シーケンス管理キュー２３ｂがFullである場合（ステップＳ３のＹｅｓルート）、これ以上シーケンスを登録できないため、処理が終了する。一方、シーケンス管理キュー２３ｂがFullではない場合（ステップＳ３のＮｏルート；図１８の処理Ｔ３）、シーケンス管理部２３ｄは、シーケンス管理キュー２３ｂへシーケンス情報をエンキューし（ステップＳ４；図１８の処理Ｔ４）、処理がステップＳ５に移行する。
【０１５１】
ステップＳ５では、シーケンス管理部２３ｄは、待機系ＳＰ２からのＧＰＩＯ２０ｇのACK信号がLowであるか否かを判定する。ACK信号がLowではない（Highである）場合（ステップＳ５のＮｏルート）、待機系ＳＰ２は動作中（レジュームしている）可能性があるため、データ転送部２２ｃがＬＡＮ経由で待機系ＳＰ２にデータを転送し（ステップＳ６）、運用系ＳＰ２の処理が終了する。
【０１５２】
一方、ACK信号がLowである場合（ステップＳ５のＹｅｓルート；図１８の処理Ｔ５）、待機系ＳＰ２はサスペンドしている可能性がある。そこで、シーケンス管理部２３ｄは、待機系ＳＰ２に同期させるデータをデータ転送キュー４０に格納するために、データ転送キュー４０がFullであるか否かを判定する（ステップＳ７）。
【０１５３】
データ転送キュー４０がFullではない場合（ステップＳ７のＮｏルート；図１８の処理Ｔ６）、シーケンス管理部２３ｄは、データをデータ転送キュー４０へエンキューし（ステップＳ１２；図１８の処理Ｔ７）、運用系ＳＰ２の処理が終了する。
【０１５４】
一方、データ転送キュー４０がFullである場合（ステップＳ７のＹｅｓルート；図１９の処理Ｔ１１）、これ以上データ転送キュー４０にデータを格納することができない。そこで、シーケンス管理部２３ｄは、待機系ＳＰ２をレジュームさせ、データ転送キュー４０のデータを取得させるために、待機系ＳＰ２へのＧＰＩＯ２０ｇのWakeup信号をHighに設定する（ステップＳ８；図１９の処理Ｔ１２）。
【０１５５】
このとき、待機系ＳＰ２は、図１７に示すように、運用系ＳＰ２からＧＰＩＯ２０ｇのWakeup信号（High）を受信し（ステップＳ２１）、レジューム処理を行なう（図１９の処理Ｔ１３）。そして、待機系ＳＰ２のシーケンス管理部２３ｄは、データ転送キュー４０にエントリがあるか否かを判定する（ステップＳ２２）。
【０１５６】
データ転送キュー４０にエントリがある場合（ステップＳ２２のＹｅｓルート）、シーケンス管理部２３ｄは、データ転送キュー４０からデータをデキューする（ステップＳ２３；図１９の処理Ｔ１５）。そして、シーケンス管理部２３ｄは、デキューしたデータをシーケンス管理キュー２３ｂに反映し（ステップＳ２４；図１９の処理Ｔ１６）、処理がステップＳ２２に移行する（データ転送キュー４０にエントリがある場合、図１９の処理Ｔ１５及びＴ１６がループする）。
【０１５７】
一方、ステップＳ２２においてデータ転送キュー４０にエントリがない場合（ステップＳ２２のＮｏルート）、シーケンス管理部２３ｄは運用系ＳＰ２へのＧＰＩＯ２０ｇのACK信号をHighに設定することで（ステップＳ２５；図１９の処理Ｔ１７）、運用系ＳＰ２に処理の完了を通知する。
【０１５８】
図１６に戻り、運用系ＳＰ２は、待機系ＳＰ２からのＧＰＩＯ２０ｇのACK信号がHighに変化するのを待ち受ける（ステップＳ９及びＳ１０；図１９の処理Ｔ１４）。規定時間内にＧＰＩＯ２０ｇのACK信号がHighに変化した場合（ステップＳ１０のＹｅｓルート）、運用系ＳＰ２は、待機系ＳＰ２に依頼する処理がない場合には待機系ＳＰ２をサスペンドさせるために、待機系ＳＰ２へのWakeup信号をLowに設定する（ステップＳ１１；図１９の処理Ｔ１８）。そして、運用系ＳＰ２のシーケンス管理部２３ｄは、データ転送キュー４０へシーケンス情報をエンキューし（ステップＳ１２；図１９の処理Ｔ１９）、運用系ＳＰ２の処理が完了する。
【０１５９】
このとき、待機系ＳＰ２は、図１７に示すように、運用系ＳＰ２からのＧＰＩＯ２０ｇのWakeup信号がLowに変化するのを待ち受け（ステップＳ２６）、Wakeup信号がLowに変化すると、運用系ＳＰ２へのＧＰＩＯ２０ｇのACK信号をLowに設定する（ステップＳ２７；図１９の処理Ｔ２０）。
【０１６０】
そして、待機系ＳＰ２は、サスペンド処理を実行し（ステップＳ２８；図１９の処理Ｔ２１）、待機系ＳＰ２の処理が完了する。
【０１６１】
また、図１６に戻り、ステップＳ１０において、規定時間内にＧＰＩＯ２０ｇのACK信号がHighに変化しない場合もある（ステップＳ１０のＮｏルート）。このような場合としては、図２０の処理Ｔ３１に示すように、待機系ＳＰ２がレジューム処理等でハングアップした場合が挙げられる。このとき、運用系ＳＰ２では、ACK信号（Low）受信待ちのタイムアウトを検出する（図２０の処理Ｔ３２）。
【０１６２】
この場合、運用系ＳＰ２は、待機系ＳＰ２への同期処理を行なえないため、図１６に示すように、サーバ１の構成情報等に対して待機系ＳＰ２をエラー（エラー状態）に設定する（ステップＳ１３；図２０の処理Ｔ３３）。また、運用系ＳＰ２のシーケンス管理部２３ｄは、データ転送キュー４０内のエントリを全てクリアし（ステップＳ１４；図２０の処理Ｔ３４）、データ転送キュー４０へシーケンス情報をエンキューし（ステップＳ１２；図２０の処理Ｔ３５）、運用系ＳＰ２の処理が完了する。なお、この場合、ＳＰ２の冗長構成は解除され、運用系ＳＰ２単体で処理を継続する。
【０１６３】
以上の処理により、運用系ＳＰ２及び待機系ＳＰ２によるシーケンスの同期が行なわれる。なお、図１６〜図２０の例ではシーケンス登録時の処理について説明したが、シーケンス管理キュー２３ｂのシーケンス情報を更新する場合や、シーケンスが完了した場合（シーケンス情報を削除する場合）についても基本的に同様である。
【０１６４】
例えば図２１に示すように、シーケンス情報の更新では、運用系ＳＰ２のシーケンス管理部２３ｄは、シーケンス管理キュー２３ｂ内のエントリを検索し（ステップＳ３１）、シーケンス管理キュー２３ｂ内の更新対象のエントリのデータを更新する（ステップＳ３２）。
【０１６５】
その他の処理（ステップＳ５〜Ｓ１１、Ｓ１３、Ｓ１４）は図１６と基本的に同様であるが、データ転送キュー４０へエンキューする際に（図１６のステップＳ１２に対応）、シーケンス管理部２３ｄは、例えば差分データをデータ転送キュー４０へエンキューすることができる（ステップＳ３３）。
【０１６６】
また、図２２に示すように、シーケンスが完了した場合、運用系ＳＰ２のシーケンス管理部２３ｄは、シーケンス管理キュー２３ｂ内のエントリを検索し（ステップＳ４１）、シーケンス管理キュー２３ｂ内の削除対象のエントリをデキューする（ステップＳ４２）。
【０１６７】
その他の処理（ステップＳ５〜Ｓ１１、Ｓ１３、Ｓ１４）は図１６と基本的に同様であるが、データ転送キュー４０へエンキューする際に（図１６のステップＳ１２に対応）、シーケンス管理部２３ｄは、例えばシーケンス情報を削除することを示すデータ（差分データ）をデータ転送キュー４０へエンキューすることができる（ステップＳ４３）。
【０１６８】
〔１−５−２〕運用系／待機系の切替処理の動作例
次に、図２３〜図２７を参照して、制御システムによる運用系／待機系の切替処理の動作例について説明する。
【０１６９】
図２３及び図２６は待機系ＳＰ２による他系ＳＰ２の生存監視処理の動作例を示すフローチャートであり、図２４は待機系ＳＰ２による運用系の切替処理の動作例を示すフローチャートである。また、図２５及び図２７は、運用系ＳＰ２に異常が発生した場合の運用系ＳＰ２及び待機系ＳＰ２の動作例を示すシーケンス図である。
【０１７０】
図２３に示すように、待機系ＳＰ２は、ＲＴＣ２０ｂからの割り込みを受信すると（ステップＳ５１；図２５の処理Ｔ４１）、レジューム処理を実行する（ステップＳ５２；図２５の処理Ｔ４２）。
【０１７１】
次いで、待機系ＳＰ２の他系監視部２２ｂは、運用系ＳＰ２に例えばＬＡＮ経由で生存確認通知を行ない（ステップＳ５３；図２５の処理Ｔ４３）、規定時間内にレスポンスを受信したか否かを判定する（ステップＳ５４）。
【０１７２】
規定時間内にレスポンスを受信した場合（ステップＳ５４のＹｅｓルート；図２５の処理Ｔ４４）、シーケンス管理部２３ｄは、データ転送キュー４０が空であるか否かを判定する（ステップＳ５５）。
【０１７３】
データ転送キュー４０が空でない場合（ステップＳ５５のＮｏルート）、シーケンス管理部２３ｄは、データ転送キュー４０からデータを読み出す（ステップＳ５６；図２５の処理Ｔ４５）。そして、シーケンス管理部２３ｄは、読み出したデータをシーケンス管理キュー２３ｂに反映して運用系ＳＰ２と同期し（ステップＳ５７）、処理がステップＳ５８に移行する。
【０１７４】
ステップＳ５８では、待機系ＳＰ２は、例えば指定時間後に割り込むようにＲＴＣ２０ｂを設定し（図２５の処理Ｔ４６）、サスペンド処理を実行し（ステップＳ５９；図２５の処理Ｔ４７）、処理がステップＳ５１に移行する。
【０１７５】
なお、ステップＳ５５において、データ転送キュー４０が空である場合（ステップＳ５５のＹｅｓルート）、処理がステップＳ５８に移行する。
【０１７６】
また、ステップＳ５４において、待機系ＳＰ２は規定時間内に運用系ＳＰ２からのレスポンスを受信しない場合もある（ステップＳ５４のＮｏルート）。このような場合としては、図２５の処理Ｔ４８に示すように、運用系ＳＰ２がハングアップした場合が挙げられる。このとき、待機系ＳＰ２は、生存確認（図２５の処理Ｔ４３）に対する運用系ＳＰ２からのレスポンス受信待ちのタイムアウトを検出し（図２５の処理Ｔ４９）、運用系／待機系の切替処理に移行することができる（図２５の処理Ｔ５０）。
【０１７７】
切替処理では、図２４に示すように、待機系ＳＰ２は、待機系ＳＰ２からＳＢ３等へアクセスできるようにバススイッチ２０ｆを切り替え（ステップＳ６１；図２５の処理Ｔ５１）、データ転送キュー４０が空であるか否かを判定する（ステップＳ６２）。
【０１７８】
データ転送キュー４０が空でない場合（ステップＳ６２のＮｏルート）、シーケンス管理部２３ｄは、データ転送キュー４０からデータを読み出す（ステップＳ６３；図２５の処理Ｔ５２）。そして、シーケンス管理部２３ｄは、読み出したデータをシーケンス管理キュー２３ｂに反映して運用系ＳＰ２と同期し（ステップＳ６４）、処理がステップＳ６５に移行する。
【０１７９】
なお、ステップＳ６２において、データ転送キュー４０が空である場合（ステップＳ６２のＹｅｓルート）、処理がステップＳ６５に移行する。
【０１８０】
ステップＳ６５では、待機系ＳＰ２のシーケンス管理部２３ｄは、例えばシーケンス管理キュー２３ｂを確認し（ステップＳ６５）、シーケンス処理が実行中であるか否かを判定する（ステップＳ６６）。シーケンス処理が実行中でなければ（ステップＳ６６のＮｏルート）、運用系ＳＰ２から引き継ぐ実行中のシーケンスが存在しないため、切替処理が完了する。
【０１８１】
一方、シーケンス処理が実行中であれば（ステップＳ６６のＹｅｓルート）、シーケンス管理部２３ｄは、シーケンス管理キュー２３ｂからシーケンスステップ番号を取得し（ステップＳ６７）、シーケンステーブル２３ａから再開ポイントを取得する（ステップＳ６８）。
【０１８２】
そして、シーケンス管理部２３ｄは、リカバリ処理を行なうか否かを再開ポイントに基づいて判定する（ステップＳ６９）。例えば再開ポイントがステップＳ６７で取得したシーケンスステップ番号（中断された処理のステップ番号）よりも前である場合、シーケンス管理部２３ｄはリカバリ処理を行なうと判定し（ステップＳ６９のＹｅｓルート）、シーケンスのリカバリ処理を実行する（ステップＳ７０；図２５の処理Ｔ５３）。また、シーケンス管理部２３ｄは、新たな運用系ＳＰ２としてシーケンス処理を継続し（ステップＳ７１；図２５の処理Ｔ５４）、待機系ＳＰ２（新たな運用系ＳＰ２）の処理が完了する。
【０１８３】
なお、再開ポイントが中断された処理と同じ処理である場合、シーケンス管理部２３ｄはリカバリ処理を行なわないと判定し（ステップＳ６９のＮｏルート）、シーケンスステップの再実行を行ない（ステップＳ７２）、処理がステップＳ７１に移行する。
【０１８４】
以上の処理により、運用系ＳＰ２及び待機系ＳＰ２による運用系／待機系の切り替えが行なわれる。なお、図２３〜図２５に示す例は運用系ＳＰ２がハングアップした場合の処理である。
【０１８５】
以下、他の例として、運用系ＳＰ２の自ボード監視部２１ａで故障が検出された場合における運用系ＳＰ２及び待機系ＳＰ２による動作例を説明する。
【０１８６】
例えば図２７に示すように、運用系ＳＰ２の自ボード監視部２１ａが自系ＳＰ２のハードウェアの故障を検出すると（処理Ｔ６１）、故障をシーケンス処理部２３へ通知する。シーケンス処理部２３（シーケンス管理部２３ｄ）は、実行中のシーケンス処理を中断し（処理Ｔ６２）、中断したシーケンスに係るデータ（シーケンス情報）をデータ転送キュー４０に設定する（処理Ｔ６３）。また、運用系ＳＰ２は、運用系を切り替えるため、ＧＰＩＯ２０ｇのWakeup信号をHighに設定し（処理Ｔ６４）、待機系ＳＰ２のレジュームが完了するのを待つ（処理Ｔ６６）。
【０１８７】
図２６に示すように、待機系ＳＰ２は、ＧＰＩＯ２０ｇのWakeup信号からの割り込み（High）を受信すると（ステップＳ８１）、割り込みを契機にレジューム処理を行なう（ステップＳ８２；図２７の処理Ｔ６５）。
【０１８８】
次いで、待機系ＳＰ２のシーケンス管理部２３ｄは、データ転送キュー４０が空であるか否かを判定する（ステップＳ８３）。データ転送キュー４０が空ではない場合（ステップＳ８３のＮｏルート）、シーケンス管理部２３ｄは、データ転送キュー４０からデータを読み出す（ステップＳ８４；図２７の処理Ｔ６７）。そして、シーケンス管理部２３ｄは、読み出したデータをシーケンス管理キュー２３ｂに反映して運用系ＳＰ２と同期し（ステップＳ８５）、処理がステップＳ８６に移行する。
【０１８９】
なお、ステップＳ８３において、データ転送キュー４０が空である場合（ステップＳ８３のＹｅｓルート）、処理がステップＳ８６に移行する。
【０１９０】
ステップＳ８６では、待機系ＳＰ２は、ＧＰＩＯ２０ｇのACK信号をHighに設定する（図２７の処理Ｔ６８）。
【０１９１】
ACK信号により待機系ＳＰ２のレジューム完了を認識した運用系ＳＰ２は、運用系切り替え指示を待機系ＳＰ２へ送信する（図２７の処理Ｔ６９）。
【０１９２】
待機系ＳＰ２では、切り替え指示の受信待ちをしており（ステップＳ８７及びＳ８８）、規定時間内に運用系から切り替え指示を受信すると（ステップＳ８８のＹｅｓルート）、処理が図２４の運用系切替処理に移行する。例えば図２７のシーケンス図において、待機系ＳＰ２が運用系への切り替えを開始し（処理Ｔ７０）、バススイッチの切り替えを行ない（処理Ｔ７１）、ＳＢ３へのアクセス権を取得する。そして、シーケンス処理部２３は、同期したシーケンス管理キュー２３ｂを用いてシーケンスリカバリ処理（又はシーケンスステップの再実行）を行ない（処理Ｔ７２）、シーケンス処理を継続する（処理Ｔ７３）。
【０１９３】
一方、規定時間内に運用系から切り替え指示を受信しない場合（ステップＳ８８のＮｏルート）、待機系ＳＰ２は、ＧＰＩＯ２０ｇのWakeup信号からの割り込み（Low）を待ち受ける。Wakeup信号からの割り込み（Low）を受信すると（ステップＳ８９）、待機系ＳＰ２は、運用系ＳＰ２へのＧＰＩＯ２０ｇのACK信号をLowに設定し（ステップＳ９０）、サスペンド処理を行なう（ステップＳ９１）。これにより、待機系ＳＰ２はサスペンド状態に移行し、待機系ＳＰ２の処理が完了する。
【０１９４】
なお、ステップＳ８８のＮｏルートにおいて、例えば運用系ＳＰ２がハングアップしたことにより、規定時間内に運用系から切り替え指示を受信できなかったという場合も考えられる。この場合、上述のように図２６に示す処理では切替処理が実行されないものの、待機系ＳＰ２は、図２３を参照して説明したように、運用系ＳＰ２のハングアップを検出できるため、適切に切替処理を行なうことができる。
【０１９５】
図２３〜図２７を参照して説明したように、待機系ＳＰ２は、動作が停止したサスペンド状態において、所定のタイミングで動作を開始し、運用系ＳＰ２の監視を行なうともに、運用系ＳＰ２の異常を検出すると、ＳＢ３等に対するシーケンス（複数の処理（ステップ））の実行を、運用系ＳＰ２から引き継ぐことができる。なお、所定のタイミングとしては、例えばＧＰＩＯ２０ｇのWakeup信号（High）やＲＴＣ２０ｂからの割り込みが発生したタイミングが挙げられる。
【０１９６】
以上のように、一実施形態に係るサーバ１によれば、運用系ＳＰ２は、シーケンスの実行対象のステップの状態を示す状態情報を、メモリ２ｂ及びＥＥＰＲＯＭ４にそれぞれ反映することができる。また、運用系ＳＰ２は、待機系ＳＰ２に対して待機系ＳＰ２の動作を開始させる開始通知を送信することができる。さらに、待機系ＳＰ２は、動作が停止した状態で運用系ＳＰ２から開始通知を受信すると、その動作を開始するとともに、ＥＥＰＲＯＭ４から状態情報を読み出して、読み出した状態情報をメモリ２ｂに反映することができる。
【０１９７】
このように、制御システムには、運用系／待機系の両ＳＰ２からアクセスできるデータ同期用のＥＥＰＲＯＭ４と、待機系ＳＰ２のサスペンド／レジューム制御用のＧＰＩＯ２０ｇとが追加されている。これにより、待機系ＳＰ２が動作を停止（サスペンド）している場合でも、運用系ＳＰ２はＥＥＰＲＯＭ４にデータを格納でき、ＧＰＩＯ２０ｇによる開始通知により待機系ＳＰ２を起動（レジューム）させることでＥＥＰＲＯＭ４内のデータを待機系ＳＰ２に同期させることができる。
【０１９８】
従って、ＳＰ２が冗長構成の組み込みシステムにおける待機系ＳＰ２のサスペンドを行なうことができ、待機系ＳＰ２の消費電力を低減することができる。
【０１９９】
また、サスペンドしていた待機系ＳＰ２は、運用系に切り替わった後に速やかに電源投入等のシーケンス処理の引き継ぎ及びリカバリ処理を行なうことができ、待機系ＳＰ２がサスペンドしない場合と比較して、同等の時間で運用系／待機系の切り替えを行なうことができる。従って、待機系ＳＰ２がサスペンドすることに起因してシステムの性能が低下することを抑制できる。
【０２００】
さらに、ＧＰＩＯ２０ｇ間は信号線を介して接続されており、Wakeup信号を受信した待機系ＳＰ２では、ＣＰＵ２ａに割り込みが発生する。従って、待機系ＳＰ２においてＣＰＵ２ａ等のコンポーネントを停止させるサスペンドを行なうことができ、運用系ＳＰ２の所望のタイミングで待機系ＳＰ２をレジュームさせることができる。
【０２０１】
〔２〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、かかる特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
【０２０２】
例えば、サーバ１は２つのＳＰ２をそなえるものとしたが、これに限定されるものではなく、任意の数のＳＰ２をそなえることができる。
【０２０３】
また、図３に示すＳＰ２の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
【０２０４】
〔３〕付記
以上の実施形態に関し、更に以下の付記を開示する。
【０２０５】
（付記１）
対象装置に対して複数の処理を所定の実行順序で実行する、冗長化された第１の制御装置及び第２の制御装置と、
前記第１の制御装置と前記第２の制御装置との間に介設された転送記憶部と、をそなえ、
前記第１の制御装置は、
前記複数の処理の実行に用いる情報を記憶する第１の記憶部をそなえ、
前記複数の処理のうちの実行対象の処理の状態を示す状態情報を、前記第１の記憶部及び前記転送記憶部にそれぞれ反映し、
前記第２の制御装置に対して前記第２の制御装置の動作を開始させる開始通知を送信し、
前記第２の制御装置は、
前記複数の処理の実行に用いる情報を記憶する第２の記憶部をそなえ、
前記第２の制御装置の動作が停止した状態で前記第１の制御装置から前記開始通知を受信すると、前記第２の制御装置の動作を開始するとともに、前記転送記憶部から前記状態情報を読み出して、読み出した前記状態情報を前記第２の記憶部に反映する
ことを特徴とする、制御システム。
【０２０６】
（付記２）
前記第２の制御装置は、
前記第２の制御装置の動作が停止した状態において、所定のタイミングで前記動作を開始し、前記第１の制御装置の監視を行なうともに、前記第１の制御装置の異常を検出すると、前記対象装置に対する前記複数の処理の実行を、前記第１の制御装置から引き継ぐ
ことを特徴とする、付記１記載の制御システム。
【０２０７】
（付記３）
前記第１及び第２の記憶部は、それぞれ、前記複数の処理の各々について、当該処理が実行中に中断された場合の再開ポイントを示す再開情報を記憶し、
前記第２の制御装置は、
前記第１の制御装置の監視において前記第１の制御装置の異常を検出すると、前記第２の記憶部に格納された前記状態情報と前記再開情報とに基づいて、前記第１の制御装置による実行中に中断された処理に対応する再開ポイントの処理を実行する
ことを特徴とする、付記２記載の制御システム。
【０２０８】
（付記４）
前記第２の制御装置は、
前記第１の制御装置の監視において前記第１の制御装置の異常を検出しない場合、前記第２の制御装置の動作を停止させる
ことを特徴とする、付記２又は付記３記載の制御システム。
【０２０９】
（付記５）
前記第１の制御装置は、
前記転送記憶部の空き記憶領域が所定の閾値未満の場合、前記第２の制御装置に対して前記開始通知を送信し、
前記第２の制御装置は、
前記開始通知に応じて前記転送記憶部から読み出した前記状態情報を前記第２の記憶部に反映すると、前記第１の制御装置に対して応答を送信し、
前記第１の制御装置は、
前記第１の制御装置から前記応答を受信すると、前記第２の制御装置に対して前記第２の制御装置の動作を停止させる停止通知を送信する
ことを特徴とする、付記１〜４のいずれか１項記載の制御システム。
【０２１０】
（付記６）
前記第１の制御装置は、
前記第１の制御装置と前記第２の制御装置とを接続する信号線を介して前記開始通知を送信し、
前記第２の制御装置は、
プロセッサをそなえ、
前記開始通知を受信すると前記プロセッサに割り込みを発生させる
ことを特徴とする、付記１〜５のいずれか１項記載の制御システム。
【０２１１】
（付記７）
対象装置に対して複数の処理を所定の実行順序で実行する、冗長化された第１の制御装置及び第２の制御装置と、前記第１の制御装置と前記第２の制御装置との間に介設された転送記憶部と、をそなえる制御システムの処理方法であって、
前記第１の制御装置は、
前記複数の処理のうちの実行対象の処理の状態を示す状態情報を、前記複数の処理の実行に用いる情報を記憶する第１の記憶部、及び、前記転送記憶部にそれぞれ反映し、
前記第２の制御装置に対して前記第２の制御装置の動作を開始させる開始通知を送信し、
前記第２の制御装置は、
前記第２の制御装置の動作が停止した状態で前記第１の制御装置から前記開始通知を受信すると、前記第２の制御装置の動作を開始し、
前記転送記憶部から前記状態情報を読み出して、読み出した前記状態情報を、前記複数の処理の実行に用いる情報を記憶する第２の記憶部に反映する
ことを特徴とする、処理方法。
【０２１２】
（付記８）
前記第２の制御装置は、
前記第２の制御装置の動作が停止した状態において、所定のタイミングで前記動作を開始し、
前記第１の制御装置の監視を行ない、
前記第１の制御装置の異常を検出すると、前記対象装置に対する前記複数の処理の実行を、前記第１の制御装置から引き継ぐ
ことを特徴とする、付記７記載の処理方法。
【０２１３】
（付記９）
前記第１及び第２の記憶部は、それぞれ、前記複数の処理の各々について、当該処理が実行中に中断された場合の再開ポイントを示す再開情報を記憶し、
前記第２の制御装置は、
前記第１の制御装置の監視において前記第１の制御装置の異常を検出すると、前記第２の記憶部に格納された前記状態情報と前記再開情報とに基づいて、前記第１の制御装置による実行中に中断された処理に対応する再開ポイントの処理を実行する
ことを特徴とする、付記８記載の処理方法。
【０２１４】
（付記１０）
前記第２の制御装置は、
前記第１の制御装置の監視において前記第１の制御装置の異常を検出しない場合、前記第２の制御装置の動作を停止させる
ことを特徴とする、付記８又は付記９記載の処理方法。
【０２１５】
（付記１１）
前記第１の制御装置は、
前記転送記憶部の空き記憶領域が所定の閾値未満の場合、前記第２の制御装置に対して前記開始通知を送信し、
前記第２の制御装置は、
前記開始通知に応じて前記転送記憶部から読み出した前記状態情報を前記第２の記憶部に反映すると、前記第１の制御装置に対して応答を送信し、
前記第１の制御装置は、
前記第１の制御装置から前記応答を受信すると、前記第２の制御装置に対して前記第２の制御装置の動作を停止させる停止通知を送信する
ことを特徴とする、付記７〜１０のいずれか１項記載の処理方法。
【０２１６】
（付記１２）
前記第１の制御装置は、
前記第１の制御装置と前記第２の制御装置とを接続する信号線を介して前記開始通知を送信し、
前記第２の制御装置は、
前記開始通知を受信すると、前記第２の制御装置がそなえるプロセッサに割り込みを発生させる
ことを特徴とする、付記７〜１１のいずれか１項記載の処理方法。
【符号の説明】
【０２１７】
１    サーバ
２，２−１，２−２    サービスプロセッサ
２ａ，３ａ    ＣＰＵ
２ｂ，３ｂ    メモリ
２ｃ    記憶部
２ｄ    インタフェース部
２ｅ    入出力部
２ｆ    記録媒体
３    システムボード
４    ＥＥＰＲＯＭ
１０ａ〜１０ｄ    信号線
２０    制御プログラム
２０ａ    ＬＡＮコントローラ
２０ｂ    リアルタイムクロック
２０ｃ    ＣＰＬＤ
２０ｄ    ウォッチドッグタイマ
２０ｅ    Ｉ２Ｃコントローラ
２０ｆ    バススイッチ
２０ｇ    ＧＰＩＯ
２１    監視処理部
２１ａ    自ボード監視部
２１ｂ    サーバ監視部
２２    二重化処理部
２２ａ    自系監視部
２２ｂ    他系監視部
２２ｃ    データ転送部
２３    シーケンス処理部
２３ａ    シーケンステーブル
２３ｂ    シーケンス管理キュー
２３ｃ    他系データ転送部
２３ｄ    シーケンス管理部
４０    データ転送キュー
【図１】
0006468079.tif 000002
【図２】
0006468079.tif 000003
【図３】
0006468079.tif 000004
【図４】
0006468079.tif 000005
【図５】
0006468079.tif 000006
【図６】
0006468079.tif 000007
【図７】
0006468079.tif 000008
【図８】
0006468079.tif 000009
【図９】
0006468079.tif 000010
【図１０】
0006468079.tif 000011
【図１１】
0006468079.tif 000012
【図１２】
0006468079.tif 000013
【図１３】
0006468079.tif 000014
【図１４】
0006468079.tif 000015
【図１５】
0006468079.tif 000016
【図１６】
0006468079.tif 000017
【図１７】
0006468079.tif 000018
【図１８】
0006468079.tif 000019
【図１９】
0006468079.tif 000020
【図２０】
0006468079.tif 000021
【図２１】
0006468079.tif 000022
【図２２】
0006468079.tif 000023
【図２３】
0006468079.tif 000024
【図２４】
0006468079.tif 000025
【図２５】
0006468079.tif 000026
【図２６】
0006468079.tif 000027
【図２７】
0006468079.tif 000028
【図２８】
0006468079.tif 000029