(57)【特許請求の範囲】
【請求項１】
各々がプロセッサと入出力部とを有する少なくとも２つのシステムを備えるデータ処理装置であって、
各前記システムは、
クロック信号を出力するクロック源と、
前記クロック源から出力されたクロック信号の周波数を調整して前記プロセッサに入力する調整部と、
前記調整部から出力されるクロック信号に基づいて計時を行う時刻カウンタと、
前記入出力部から入力されたデータを前記プロセッサに送信する際に、送信時の前記時刻カウンタの第１のカウント値と、前記プロセッサにより当該データが処理される実行予定時刻に相当する第２のカウント値とを前記データに付加して送信し、前記第１、第２のカウント値が付加されたデータを、他のシステムにも送信する第１の送信部と、
前記第１の送信部から送信されたデータを受信するととともに、受信時の前記時刻カウンタの第３のカウント値を取得し、前記他のシステムの前記第１の送信部から送信されたデータを受信するとともに、受信時の前記時刻カウンタの第４のカウント値を取得する第１の受信部と、
付加された前記第１のカウント値が同一であるデータ同士の前記第３、第４のカウント値に基づいて、前記時刻カウンタのカウント値と前記他のシステムの前記時刻カウンタのカウント値とのカウントずれを算出する算出部と、
前記算出部で算出されたカウントずれが小さくなるように、前記調整部を制御する制御部と、
前記時刻カウンタのカウント値が第２のカウント値となるまで、前記プロセッサに対する、前記第１の受信部で受信されたデータの入力を保留する保留部と、
前記プロセッサから入力されたデータを前記入出力部に送信する第２の送信部と、
前記第２の送信部から送信されたデータを受信して前記入出力部に出力する第２の受信部と、を備えるデータ処理装置。
【請求項２】
前記保留部は、
前記データに付加された第２のカウント値と、前記時刻カウンタのカウント値との差分を算出し、
前記制御部は、
前記保留部で算出された差分が小さくなるように、前記調整部を制御することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記第１の送信部は、
前記システム間でのデータの送受信に要する時間と、前記システム間でのプロセッサの処理の時間差の許容値とに基づいて、前記第２のカウント値を付加することを特徴とする請求項１又は２に記載のデータ処理装置。
【請求項４】
前記算出部は、
前記システム間でのデータの送受信に要する時間を考慮して、前記カウントずれを算出することを特徴とする請求項１乃至３のいずれか一項に記載のデータ処理装置。
【請求項５】
前記算出部によって算出された前記カウントずれが所定値を超える場合には、前記時刻カウンタをリセットするリセット部をさらに備えることを特徴とする請求項１乃至４のいずれか一項に記載のデータ処理装置。
【請求項６】
付加された前記第１のカウント値が同一であるデータ同士を比較することにより、障害の発生を検出する障害検出部をさらに備えることを特徴とする請求項１乃至５のいずれか一項に記載のデータ処理装置。
【請求項７】
前記第２の送信部は、
前記プロセッサから入力されたデータを前記入出力部に送信する際に、送信時の前記時刻カウンタの第５のカウント値を付加して送信し、前記第５のカウント値が付加されたデータを、前記他のシステムにも送信し、
前記第２の受信部は、
前記第２の送信部から送信されたデータを受信するととともに、受信時の前記時刻カウンタの第６のカウント値を取得し、前記他のシステムの前記第２の送信部から送信されたデータを受信するとともに、受信時の前記時刻カウンタの第７のカウント値を取得し、
前記算出部は、
付加された前記第５のカウント値が同一であるデータ同士の前記第６、第７のカウント値に基づいて、前記時刻カウンタのカウント値と前記他のシステムの前記時刻カウンタのカウント値とのカウントずれを算出し、
前記制御部は、
前記算出部で算出された前記カウントずれが小さくなるように、前記調整部を制御することを特徴とする請求項１に記載のデータ処理装置。
【請求項８】
前記算出部は、
前記システム間でのデータの送受信に要する時間を考慮して、前記カウントずれを算出することを特徴とする請求項７に記載のデータ処理装置。
【請求項９】
前記算出部によって算出された前記カウントずれが所定値を超える場合には、前記時刻カウンタをリセットするリセット部をさらに備えることを特徴とする請求項７又は８に記載のデータ処理装置。
【請求項１０】
付加された前記第５のカウント値が同一であるデータ同士を比較することにより、障害の発生を検出する障害検出部をさらに備えることを特徴とする請求項７乃至９のいずれか一項に記載のデータ処理装置。
【請求項１１】
各々がプロセッサと入出力部と時刻カウンタとを有し、異なるクロック源からのクロック信号で動作する少なくとも２つのシステムの同期をとる同期方法であって、
前記入出力部から入力されたデータを前記プロセッサに送信する際に、送信時の前記時刻カウンタの第１のカウント値と、前記プロセッサにより当該データが処理される実行予定時刻に相当する第２のカウント値とを前記データに付加して送信し、前記第１、第２のカウント値が付加されたデータを、他のシステムにも送信する第１の工程と、
前記第１の工程で送信されたデータを受信するととともに、受信時の前記時刻カウンタの第３のカウント値を取得し、前記他のシステムから送信されたデータを受信するとともに、受信時の前記時刻カウンタの第４のカウント値を取得する第２の工程と、
付加された前記第１のカウント値が同一であるデータ同士の前記第３、第４のカウント値に基づいて、前記時刻カウンタのカウント値と前記他のシステムの前記時刻カウンタのカウント値とのカウントずれを算出する第３の工程と、
前記第３の工程で算出されたカウントずれが小さくなるように、前記クロック信号の周波数を調整する第４の工程と、
前記時刻カウンタのカウント値が前記第２のカウント値となるまで、前記プロセッサに対する、前記第２の工程で受信されたデータの入力を保留する第５の工程と、を含む同期方法。
【請求項１２】
前記データに付加された第２のカウント値と、前記時刻カウンタのカウント値との差分を算出する第６の工程と、
前記第６の工程で算出された差分が小さくなるように、前記クロック信号の周波数を調整する第７の工程と、をさらに含むことを特徴とする請求項１１に記載の同期方法。
【請求項１３】
前記プロセッサから入力されたデータを前記入出力部に送信する際に、送信時の前記時刻カウンタの第５のカウント値を付加して送信し、前記第５のカウント値が付加されたデータを、前記他のシステムにも送信する第８の工程と、
前記第８の工程で送信されたデータを受信するととともに、受信時の前記時刻カウンタの第６のカウント値を取得し、前記他のシステムから送信されたデータを受信するとともに、受信時の前記時刻カウンタの第７のカウント値を取得する第９の工程と、
付加された前記第５のカウント値が同一であるデータ同士の前記第６、第７のカウント値に基づいて、前記時刻カウンタのカウント値と前記他のシステムの前記時刻カウンタのカウント値とのカウントずれを算出する第１０の工程と、
前記第１０の工程で算出された前記カウントずれが小さくなるように、前記クロック信号の周波数を調整する第１１の工程と、をさらに含むことを特徴とする請求項１１又は１２に記載の同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、各々がプロセッサと入出力部とを有する少なくとも２つのシステムを備えるデータ処理装置と、各々がプロセッサと入出力部と時刻カウンタとを有し、異なるクロック源からのクロック信号で動作する少なくとも２つのシステムの同期をとる同期方法とに関する。
【背景技術】
【０００２】
高度な信頼性を提供するコンピュータとして、フォールト・トレラント・コンピュータ（以下、「ＦＴコンピュータ」と略述する）がある（例えば、特許文献１参照）。ＦＴコンピュータは、同一のハードウエア構成を有するモジュールが二重化又は多重化された冗長構成となっている。二重化又は多重化された全てのモジュールは同期して動作する。そのため、例えばあるモジュールで故障が発生したとしても、そのモジュールを切り離し、正常なモジュールだけで処理を続行することができる。これにより、モジュールの故障に対する耐性が向上し、高度な信頼性が得られるようになる。
【０００３】
ＦＴコンピュータの各モジュールには、プロセッサ及びメモリを有するＣＰＵサブシステムが含まれている。各ＣＰＵサブシステムには、同一のソフトウエアが組み込まれている。各ＣＰＵサブシステムは、同じタイミングのクロック信号と同一のデータとを与えると、正常であれば必ず同じ動作をする。この特性を、デターミニズムと呼ぶ。このデターミニズムに基づき、複数のＣＰＵサブシステムが全く同じ動作をしている状態を、ロックステップ同期と呼ぶ。ＦＴコンピュータでは、各モジュールのＣＰＵサブシステムをロックステップ同期させることにより、二重化処理又は多重化処理が実現されている。
【０００４】
各ＣＰＵサブシステムに入力される同じタイミングのクロック信号を入力させる方法としては、ＣＰＵサブシステム間でクロック源を共通化する方法と、出力周波数が同じ複数のクロック源を用いる方法との２つが考えられる。
【０００５】
しかしながら、クロック源を共通化した場合には、そのクロック源が故障すれば、ＦＴコンピュータのすべてのモジュールを停止せざるをえなくなる。また、１つのクロック信号をすべてのモジュールに入力するための配線が必要となるため、装置の機構設計の自由度が著しく制限されるようになる。
【０００６】
一方、複数のクロック源を用いた場合には、各クロック源の出力周波数の微小なばらつきにより、時間経過とともに、それぞれのクロック源から出力されるクロック信号にずれが生じてくる。そこで、各ＣＰＵサブシステムが同時に実行する命令については、クロック信号の周波数が最も低く、実行速度の遅いＣＰＵサブシステムにすべてのＣＰＵサブシステムの実行タイミングを合わせる方法が開示されている（例えば、特許文献２参照）。また、クロック信号の位相差を検出し、その位相差に基づいてクロック信号の周波数を調整するデータ処理装置が開示されている（例えば、特許文献３参照）。さらに、時刻カウンタのカウント値を定期的にリセットするなどして、クロック信号の位相差を最小限に止め、ロックステップ同期を維持するデータ処理装置が開示されている（例えば、特許文献４、５参照）。
【０００７】
【特許文献１】特開２００６−１７２３９１号公報
【特許文献２】特表２００６−５１２６３４号公報
【特許文献３】特開２００５−１８２６９３号公報
【特許文献４】特開平７−７３０５９号公報
【特許文献５】特開２００７−２４９５１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、実行速度の遅いＣＰＵサブシステムにすべてのＣＰＵサブシステムの実行タイミングを合わせた場合には、装置全体の処理速度の低下が懸念される。
【０００９】
また、クロック信号のずれを検出する場合には、各ＣＰＵサブシステムに入力されるクロック信号を比較するための専用のハードウエアが必要となるうえ、各モジュールのハードウエアの独立性が低下する。
【００１０】
また、各ＣＰＵサブシステムに入力されるクロック信号を、タイマ割り込みなどをかけて定期的にリセットする場合には、タイマ割り込みをかける時間が適切に設定されていなかったり、複数のクロック源の出力周波数のばらつきが大きすぎたりすると、ロックステップ同期を維持することが困難になる。
【００１１】
本発明は、上記事情に鑑みてなされたもので、より信頼性の高いデータ処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、本発明の第１の観点に係るデータ処理装置は、各々がプロセッサと入出力部とを有する少なくとも２つのシステムを備えるデータ処理装置であって、各前記システムは、クロック信号を出力するクロック源と、前記クロック源から出力されたクロック信号の周波数を調整して前記プロセッサに入力する調整部と、前記調整部から出力されるクロック信号に基づいて計時を行う時刻カウンタと、前記入出力部から入力されたデータを前記プロセッサに送信する際に、送信時の前記時刻カウンタの第１のカウント値と、前記プロセッサにより当該データが処理される実行予定時刻に相当する第２のカウント値とを前記データに付加して送信し、前記第１、第２のカウント値が付加されたデータを、他のシステムにも送信する第１の送信部と、前記第１の送信部から送信されたデータを受信するととともに、受信時の前記時刻カウンタの第３のカウント値を取得し、前記他のシステムの前記第１の送信部から送信されたデータを受信するとともに、受信時の前記時刻カウンタの第４のカウント値を取得する第１の受信部と、付加された前記第１のカウント値が同一であるデータ同士の前記第３、第４のカウント値に基づいて、前記時刻カウンタのカウント値と前記他のシステムの前記時刻カウンタのカウント値とのカウントずれを算出する算出部と、前記算出部で算出されたカウントずれが小さくなるように、前記調整部を制御する制御部と、前記時刻カウンタのカウント値が第２のカウント値となるまで、前記プロセッサに対する、前記第１の受信部で受信されたデータの入力を保留する保留部と、前記プロセッサから入力されたデータを前記入出力部に送信する第２の送信部と、前記第２の送信部から送信されたデータを受信して前記入出力部に出力する第２の受信部と、を備える。
【００１３】
また、本発明の第２の観点に係る同期方法は、各々がプロセッサと入出力部と時刻カウンタとを有し、異なるクロック源からのクロック信号で動作する少なくとも２つのシステムの同期をとる同期方法であって、前記入出力部から入力されたデータを前記プロセッサに送信する際に、送信時の前記時刻カウンタの第１のカウント値と、前記プロセッサにより当該データが処理される実行予定時刻に相当する第２のカウント値とを前記データに付加して送信し、前記第１、第２のカウント値が付加されたデータを、他のシステムにも送信する第１の工程と、前記第１の工程で送信されたデータを受信するととともに、受信時の前記時刻カウンタの第３のカウント値を取得し、前記他のシステムから送信されたデータを受信するとともに、受信時の前記時刻カウンタの第４のカウント値を取得する第２の工程と、付加された前記第１のカウント値が同一であるデータ同士の前記第３、第４のカウント値に基づいて、前記時刻カウンタのカウント値と前記他のシステムの前記時刻カウンタのカウント値とのカウントずれを算出する第３の工程と、前記第３の工程で算出されたカウントずれが小さくなるように、前記クロック信号の周波数を調整する第４の工程と、前記時刻カウンタのカウント値が前記第２のカウント値となるまで、前記プロセッサに対する、前記第２の工程で受信されたデータの入力を保留する第５の工程と、を含む。
【発明の効果】
【００１４】
本発明によれば、より信頼性の高いデータ処理装置を提供することができる。
【発明を実施するための最良の形態】
【００１５】
≪第１の実施形態≫
次に、本発明の第１の実施形態について図面を参照して詳細に説明する。
【００１６】
図１には、本発明の第１の実施形態に係るデータ処理装置１００の構成が示されている。図１に示されるように、データ処理装置１００は、システム１Ａと、システム１Ｂと、クロスリンク２とを備えている。システム１Ａとシステム１Ｂは、同一のハードウエア構成及びソフトウエア構成を有する同型のモジュールである。すなわち、データ処理装置１００は、ハードウエア構成が同一で、そのハードウエア上で動作するソフトウエアも同一であるシステムが二重化された冗長構成を有するＦＴコンピュータである。
【００１７】
クロスリンク２は、システム１Ａとシステム１Ｂとの間における相互のデータ送受信を可能とするデータ伝送路である。システム１Ａの各構成要素の符号には、数字にＡを付け足したものが用いられている。また、その構成要素に対応するシステム１Ｂの構成要素には、同一の数字にＢを付け足したものが用いられている。以下では、主としてシステム１Ａの構成要素について説明するが、システム１Ｂの各構成要素については、システム１Ａの対応する構成要素と同じ機能を有しているものとして必要に応じて説明する。
【００１８】
システム１Ａは、クロック源１０Ａ、調整部としてのＰＬＬ（位相同期回路）１１Ａ、ＣＰＵサブシステム１２Ａ、Ｉ／Ｏサブシステム１３Ａと、を備えている。
【００１９】
クロック源１０Ａは、例えば、水晶発振子などを備え、所定の周波数のクロック信号を出力している。
【００２０】
ＰＬＬ１１Ａは、設定されたパラメータに従って、クロック源１０Ａから出力されたクロック信号の周波数を微調整する。ＰＬＬ１１Ａからは、周波数が調整されたクロック信号が出力される。ＰＬＬ１１Ａによって周波数が調整されたクロック信号は、ＣＰＵサブシステム１２Ａに入力されている。
【００２１】
ＣＰＵサブシステム１２Ａは、ＣＰＵ（中央処理装置）とメモリ（主記憶装置）とを備えるＣＰＵ部２０Ａを中心として構成されたシステム１Ａのサブシステムである。ＣＰＵ部２０Ａは、一連の命令列を実行するもので、任意の数のＣＰＵ、任意の容量のメモリと、それらを相互接続する内部バス（いずれも不図示）とを有している。ＣＰＵ部２０ＡのＣＰＵは、クロック源１０ＡからＰＬＬ１１Ａを介して入力されるクロック信号に従って、入力されたデータを用いて、メモリに格納された一連の命令列（プログラム）を実行する。このような命令列には、データの入出力命令や、データの演算命令や、分岐などのプログラムの制御命令などが含まれている。
【００２２】
ＣＰＵサブシステム１２Ａには、時刻カウンタ２１Ａがさらに設けられている。時刻カウンタ２１Ａは、ＰＬＬ１１Ａを介して入力されるクロック信号に基づいて、計時を行う。時刻カウンタ２１Ａは、不図示のリセット信号が入力された場合には、カウント値をリセットする。時刻カウンタ２１Ａは、リセット後、クロック源１０ＡからＰＬＬ１１Ａを介して入力されるクロック信号の例えば立ち上がりで、カウント値をインクリメントする。時刻カウンタ２１Ａは、リセットされてからのクロックサイクル数を保持している。時刻カウンタ２０Ａのカウント値は、ＣＰＵサブシステム１２Ａを構成するＣＰＵ部２０Ａ、後述する送信部２２Ａ、受信部２３Ａ、パケット処理部２４Ａ、ＰＬＬ制御部２５Ａなどから常に参照することができるようになっている。さらに、時刻カウンタ２１Ａのカウント値は、専用のサイドバンド信号により、ＣＰＵサブシステム１２Ａから、Ｉ／Ｏサブシステム１３Ａに常時送信されている。
【００２３】
なお、ＣＰＵ部２０Ａでは、後述するもう一方のシステム１ＢのＣＰＵ部２０Ｂが実行するプログラムと同じプログラムが実行される。ＣＰＵサブシステム１２Ａは、プロセッサとしてのＣＰＵ部２０Ａの他に、送信部２２Ａと、受信部２３Ａと、パケット処理部２４Ａと、ＰＬＬ制御部２５Ａと、を備えているが、これらの詳細については後述する。
【００２４】
Ｉ／Ｏサブシステム１３Ａは、入出力部としてのＩ／Ｏデバイス（図では、単にＩ／Ｏ）３０Ａを中心として構成されたシステム１Ａのサブシステムである。Ｉ／Ｏデバイス３０Ａは、不図示の外部機器との間でデータの入出力を行う入出力インターフェイスである。Ｉ／Ｏデバイス３０Ａは、ＳＣＳＩコントローラ、ＬＡＮアダプタ等の任意の複数のデバイスであってもよい。Ｉ／Ｏサブシステム１３Ａは、Ｉ／Ｏデバイス３０Ａの他に、送信部３２Ａと、受信部３３Ａとを備えているが、これらの詳細については後述する。
【００２５】
システム１Ａでは、ＣＰＵサブシステム１２ＡのＣＰＵ部２０Ａと、Ｉ／Ｏサブシステム１３ＡのＩ／Ｏデバイス３０Ａとの間で、データパケットの送受信が行われることにより、全体の動作が実現される。図２に示されるように、データパケット５０には、パケット種別フィールド５１、パケット長フィールド５２、データフィールド５３、送信時刻フィールド５４、実行時刻フィールド５５という複数のフィールドが設けられている。
【００２６】
パケット種別フィールド５１には、データパケット５０の種別が格納されている。パケット長フィールド５２には、そのデータパケット５０のパケット長が格納されている。データフィールド５３には、外部機器からＩ／Ｏデバイス３０Ａに入力されたデータや、ＣＰＵ部２０Ａのプログラムの実行により生成されたデータなどの実体的なデータが格納されている。パケット種別フィールド５１、パケット長フィールド５２と、データフィールド５３とで一般データフィールドが構成されている。
【００２７】
データパケット５０には、この一般データフィールドに加え、送信時刻フィールド５４と実行時刻フィールド５５とが設けられている。送信時刻フィールド５４には、Ｉ／Ｏサブシステム１３ＡからＣＰＵサブシステム１２Ａへデータが送信される時点での時刻カウンタ２１Ａのカウント値（第１のカウント値）が格納される。実行時刻フィールド５５には、ＣＰＵ部２０Ａによってそのデータパケット５０のデータフィールド５３に含まれるデータが実行されるべき時点の時刻カウンタのカウント値（第２のカウント値）が格納される。なお、ＣＰＵ部２０Ｂにおいても、同じカウント値が、データパケット５０の実行時刻フィールド５５に格納される。
【００２８】
このようなデータパケット５０の送受信及びシステム１Ａとシステム１Ｂとのロックステップ同期（以下、単に「同期」という）を確立するために、ＣＰＵサブシステム１２Ａは、ＣＰＵ部２０Ａ及び時刻カウンタ２１Ａの他に、送信部２２Ａと、受信部２３Ａと、パケット処理部２４Ａと、ＰＬＬ制御部２５Ａとを備えている。また、Ｉ／Ｏサブシステム１３Ａは、Ｉ／Ｏデバイス３０Ａの他に、送信部３２Ａと、受信部３３Ａとを備えている。本実施形態に係るシステム１Ａでは、Ｉ／Ｏサブシステム１３Ａの送信部３２Ａが第１の送信部に対応し、ＣＰＵサブシステム１２Ａの受信部２３Ａが第１の受信部に対応する。また、ＣＰＵサブシステム１２Ａの送信部２２Ａが第２の送信部に対応し、Ｉ／Ｏサブシステム１３Ａの受信部３３Ａが第２の受信部に対応する。
【００２９】
Ｉ／Ｏサブシステム１３Ａを構成する送信部３２Ａは、Ｉ／Ｏデバイス３０から入力されたデータパケット５０の送信時刻フィールド５４に、送信時の時刻カウンタ２１Ａのカウント値（第１のカウント値）を格納する。そして、送信部３２Ａは、そのデータパケット５０の実行時刻フィールド５５に、ＣＰＵ部２０Ａによってそのデータパケット５０が処理される実行予定時刻に相当するカウント値（第２のカウント値）を格納する。さらに、送信部３２Ａは、これらのカウント値が付加されたデータパケット５０を、受信部２３Ａに送信するとともにクロスリンク２を介して他のシステム１Ｂの受信部２３Ｂにも送信する。
【００３０】
ＣＰＵサブシステム１２Ａを構成する、受信部２３Ａは、送信部３２Ａから送信されたデータパケット５０を受信するととともに、そのデータパケット５０の受信時の時刻カウンタ２１Ａのカウント値（第３のカウント値）を取得する。また、受信部２３Ａは、他のシステム１Ｂの送信部３２Ｂから送信されたデータパケット５０を受信するとともに、そのデータパケット５０の受信時の時刻カウンタ２１Ａのカウント値（第４のカウント値）を取得する。
【００３１】
図３には、受信部２３Ａの詳細な構成が示されている。図３に示されるように、受信部２３Ａは、ＦＩＦＯ（ファースト・イン・ファースト・アウト）メモリ４０Ａ、４０Ｂ、４１Ａ、４１Ｂを備えている。
【００３２】
受信部２３Ａは、Ｉ／Ｏサブシステム１３Ａの送信部３２Ａから送信されたデータパケット５０をＦＩＦＯメモリ４０Ａに保持する。受信部２３Ａは、第３のカウント値を、ＦＩＦＯメモリ４１Ａに保持する。
【００３３】
また、受信部２３Ａは、もう一方のシステム１Ｂにおける送信部３２Ｂから送信されたデータパケット５０をＦＩＦＯメモリ４０Ｂに保持する。受信部２３Ａは、第４のカウント値を、ＦＩＦＯメモリ４１Ｂに保持する。
【００３４】
なお、クロスリンク２のレイテンシ（システム１Ａとシステム１Ｂのデータの送受信に要する潜在的な時間）のために、第３のカウント値と第４のカウント値との間には、時間差が生じる。したがって、システム１Ｂにおける送信部３２Ｂからのデータパケット５０が受信される前に、送信部３２Ａから新たなデータパケット５０が送られてくる場合も想定される。このため、受信部２３Ａには、受信データが消失することのないように、ＦＩＦＯメモリ４０Ａ、４０Ｂ、４１Ａ、４１Ｂが設けられている。ＦＩＦＯメモリ４０Ａ、４０Ｂ、４１Ａ、４１Ｂの容量は、クロスリンク２のレイテンシと、Ｉ／Ｏサブシステム１３ＡからＣＰＵサブシステム１２Ａへ送信されるデータの送信頻度とのバランスを考慮して設定されるのが望ましい。また、これらの容量は、受信部２３Ａとパケット処理部２４Ａと間でのデータの入出力を過度に遅延させることがない程度とするのが望ましい。
【００３５】
また、受信部２３Ａは、ＦＩＦＯメモリ４１Ａに格納されたデータパケット５０の第３のカウント値と、ＦＩＦＯメモリ４１Ｂに格納されたデータパケット５０の第４のカウント値とに基づいて、時刻カウンタ２１Ａのカウント値と、他のシステム１Ｂの時刻カウンタ２１Ｂのカウント値とのカウントずれを算出する。カウントずれの算出のために考慮される第３のカウント値と、第４のカウント値とは、送信時刻フィールドに格納されたカウント値（第１のカウント値）が同一なデータパケット５０のものが用いられる。
【００３６】
より具体的には、受信部２３Ａは、まず、第４のカウント値からクロスリンク２のレイテンシ分を差し引く。そして、受信部２３Ａは、その差し引かれたカウント値と、第３のカウント値との差分を算出することにより、時刻カウンタ２１Ａのカウント値と他のシステム１Ｂの時刻カウンタ２１Ｂのカウント値とのカウントずれを算出する。このカウントずれは、データパケット５０とともに、パケット処理部２４Ａに出力される。
【００３７】
パケット処理部２４Ａは、時刻カウンタ２１Ａのカウント値が、データパケット５０の実行時刻フィールド５５に格納されたカウント値（第２のカウント値）となるまで、受信部２３Ａで受信されたデータパケット５０のＣＰＵ部２０Ａへの入力を保留する。
【００３８】
また、パケット処理部２４Ａは、受信部２３Ａから出力されたカウントずれが、許容値を上回っている場合には、このカウントずれを、ＰＬＬ制御部２５Ａに出力する。
【００３９】
ＰＬＬ制御部２５Ａは、パケット処理部２４Ａから出力されたカウントずれに基づいて、ＰＬＬ１１Ａのパラメータを変更することにより、ＰＬＬ１１Ａを制御する。これにより、ＰＬＬ１１Ａから出力されるクロック信号の周波数が微調整され、システム１Ａの時刻カウンタ２１Ａとシステム１Ｂの時刻カウンタ２１Ｂとのカウントずれが小さくなる。
【００４０】
一方、ＣＰＵサブシステム１２Ａを構成する送信部２２Ａは、ＣＰＵ部２０Ａから出力されたデータパケット５０を入力する。送信部２２Ａは、入力されたデータパケット５０を、Ｉ／Ｏサブシステム１３Ａの受信部３３Ａに送信するとともに、クロスリンク２を介して、他のシステム１Ｂの受信部３３Ｂにも送信する。
【００４１】
Ｉ／Ｏサブシステム１３Ａを構成する受信部３３Ａは、送信部２２Ａから送信されたデータパケット５０を受信してＩ／Ｏデバイス３０Ａに出力する。なお、受信部３３Ａでは、他のシステム１Ｂの送信部２２Ｂからもデータパケット５０を受信するが、本実施形態では、受信部３３Ａにおいて、他のシステム１Ｂから送信されたデータパケット５０に対しての処理は、特に行われないものとする。
【００４２】
上述したように、システム１Ｂの構成は、システム１Ａの構成と同一である。すなわち、システム１Ｂは、クロック源１０Ｂ、ＰＬＬ１１Ｂ、ＣＰＵサブシステム１２Ｂ、Ｉ／Ｏサブシステム１３Ｂと、を備えている。ＣＰＵサブシステム１２Ｂは、ＣＰＵ部２０Ｂと、時刻カウンタ２１Ｂと、送信部２２Ｂと、受信部２３Ｂと、パケット処理部２４Ｂと、ＰＬＬ制御部２５Ｂと、を備えている。Ｉ／Ｏサブシステム１３Ｂは、Ｉ／Ｏデバイス３０Ｂと、送信部３２Ｂと、受信部３３Ｂとを備えている。
【００４３】
クロック源１０Ａとクロック源１０Ｂとは、同一規格のクロック源であり、同じ周波数のクロック信号を出力している。これらクロック信号は、それぞれのＰＬＬ１１Ａ、１１Ｂを介して、ＣＰＵサブシステム１２Ａ、１３Ａに入力されている。すなわち、ＣＰＵサブシステム１２Ａ、１２Ｂは、周波数が実質的に等しいクロック信号の下で動作している。
【００４４】
また、Ｉ／Ｏサブシステム１３Ａ、１３Ｂには、外部機器から、全く同じデータが同じタイミングで入力されている。これらのデータは、正常であれば、同じタイミングで、Ｉ／Ｏサブシステム１３Ａ、１３ＢからＣＰＵサブシステム１２Ａ、１２Ｂに送信される。そして、ＣＰＵサブシステム１２ＡのＣＰＵ部２０Ａ、ＣＰＵサブシステム１２ＢのＣＰＵ部２０Ｂには、同じデータが同じタイミングで入力される。ＣＰＵ部２０Ａ、２０Ｂは、同じプログラムを実行する。したがって、ＣＰＵ部２０Ａ、２０Ｂは、デターミニズムに基づき、全く同じ動作をし、同じタイミングで同じデータを出力する。この結果、システム１Ａ、１Ｂ間の同期が実現される。
【００４５】
次に、本発明の第１の実施形態に係るデータ処理装置１００の動作について図４〜図６のフローチャート及び図７（Ａ）〜図７（Ｃ）を参照して詳細に説明する。本実施形態では、システム１Ａの動作とシステム１Ｂの動作とは同じであるため、主としてシステム１Ａの動作について説明する。まず、外部機器からＩ／Ｏデバイス３０Ａに入力されたデータが、ＣＰＵ部２０Ａに入力されるまでのシステム１Ａの動作について説明する。
【００４６】
送信部３２Ａの動作について説明する。図４には、送信部３２Ａの動作のフローチャートが示されている。電源投入後、不図示のリセット信号が入力されると、送信部３２Ａの動作が開始される。まず、ステップ２０１において、送信部３２Ａは、初期化処理を行う。初期化処理後、ステップ２０３において、送信部３２Ａは、Ｉ／Ｏデバイス３０Ａからデータパケット５０が入力されるまで待つ。
【００４７】
Ｉ／Ｏデバイス３０Ａからデータパケット５０が入力されると、ステップ２０３における判定が肯定され、送信部３２Ａは、ステップ２０５に進む。ステップ２０５において、送信部３２Ａは、送信時刻フィールド５４に時刻カウンタ２１Ａの現在のカウント値を格納し、実行時刻フィールド５５にＣＰＵ部２０の実行時刻に相当するカウント値を格納し、そのデータパケット５０を、受信部２３Ａに送信するとともに、他のシステム１Ｂの受信部２３Ｂにも送信する。
【００４８】
図７（Ａ）には、送信部３２Ａにおけるデータパケット５０の送信時刻フィールド５４に格納されるカウント値、実行時刻フィールド５５に格納されるカウント値の設定例が示されている。図７（Ａ）に示されるクロックパルスは、ＣＰＵサブシステム１２Ａに入力されるクロック信号を示している。
【００４９】
ここで、送信部３２Ａにおけるデータパケット５０の送信時がカウント値ｔ１の時点であったとする。この場合、送信部３２Ａは、カウント値ｔ１を、送信時刻フィールド５４に格納する。
【００５０】
送信部３２Ａから受信部２３Ａへのデータの送信に要する時間を時間Ｓとし、クロスリンクのレイテンシをＬとする。これらの時間Ｓ、Ｌは、既知である。また、ＣＰＵ部２０Ａ、２０Ｂの処理の時間差の許容値をＰとする。送信部３２Ａは、カウント値ｔ１に、時間Ｓと、時間Ｌと、許容値Ｐとを加算することにより得られるカウント値ｔ２を、実行時刻フィールド５５に格納する。すなわち、実行時刻フィールド５５に格納されるカウント値としては、現在の時刻カウンタ２１Ａのカウント値に、クロスリンク２のレイテンシとＣＰＵ部２０Ａ、２０Ｂ間のずれの許容値とを加算した値が設定されるのが望ましい。
【００５１】
なお、受信部２３Ａで送信部３２Ａから送信されたデータパケット５０が受信されるのは、時間Ｓ経過後の時点、すなわち時刻カウンタ２１Ａのカウント値がｔ３となる時点となる。また、受信部２３Ａで、システム１Ｂの送信部３２Ｂから送信されたデータパケット５０が受信されるのは、時刻カウンタ２１Ａ、２１Ｂの間にカウントずれがなければ、時刻カウンタ２１Ａのカウント値がｔ４となる時点となる。
【００５２】
図４に戻り、データパケット５０の送信後は、再びステップ２０３に戻り、次のデータパケット５０がＩ／Ｏデバイス３０Ａから入力されるまで待つ。
【００５３】
このように、送信部３２Ａは、Ｉ／Ｏデバイス３０Ａからデータパケット５０が入力される度に、そのデータパケット５０の送信時刻フィールド５４と実行時刻フィールド５５とに、それぞれのカウント値を格納して、データパケット５０を受信部２３Ａ、２３Ｂに送信している。
【００５４】
次に、受信部２３Ａの動作について説明する。図５には、受信部２３Ａの動作を示すフローチャートが示されている。図５に示されるように、電源投入後、不図示のリセット信号が入力されると、受信部２３Ａの動作が開始され、まず、ステップ３０１において、受信部２３Ａは、初期化処理を行う。初期化処理後、ステップ３０３において、受信部２３Ａは、データパケット５０が受信されるまで待つ。
【００５５】
送信部３２Ａからデータパケット５０が受信され、ＦＩＦＯメモリ４０Ａに格納されると、ステップ３０３における判定が肯定され、受信部２３Ａはステップ３０５に進む。なお、受信部２３Ａでは、送信部３２Ａからデータパケット５０の受信が完了すると同時に、その受信時の時刻カウンタ２１Ａのカウント値（第３のカウント値、図７（Ａ）のｔ３）が、ＦＩＦＯメモリ４１Ａに格納される。
【００５６】
ステップ３０５では、受信部２３Ａは、送信時刻フィールド５４に格納されたカウント値（第１のカウント値）が同じデータパケット５０が、他のシステム１Ｂから受信されたか否かを判定する。受信部２３Ａは、この判定が肯定されればステップ３０９に進み、否定されればステップ３０３に戻る。
【００５７】
ステップ３０３では、受信部２３Ａは、再びデータパケット５０の受信待ちとなる。ここで、送信部３２Ａからのデータパケット５０が受信されるか、他のシステム１Ｂの送信部３２Ｂからのデータパケット５０が受信されると、受信部２３Ａは、ステップ３０５に進む。
【００５８】
送信部３２Ａからのデータパケット５０が受信された場合には、受信されたデータパケット５０が、ＦＩＦＯメモリ４０Ａに格納され、その受信時の時刻カウンタ２１Ａのカウント値がＦＩＦＯメモリ４１Ａに格納される。そして、ステップ３０５の判定が否定され、受信部２３Ａは、ステップ３０３に戻る。
【００５９】
一方、他のシステム１Ｂの送信部３２Ｂからのデータパケット５０が受信されると、そのデータパケット５０は、ＦＩＦＯメモリ４０Ｂに格納され、受信時の時刻カウンタ２１Ａのカウント値（第４のカウント値、図７（Ａ）のｔ４）がＦＩＦＯメモリ４１Ｂに格納される。受信された他のシステム１Ｂからのデータパケット５０は、正常な状態であれば、ＦＩＦＯメモリ４０Ａに先に格納されたデータパケット５０と、送信時刻フィールド５４に格納されたカウント値（第１のカウント値）が同一のデータパケットである。ＦＩＦＯメモリ４０Ｂに格納されたデータパケット５０の送信時刻フィールド５４に格納されたカウント値が、ＦＩＦＯメモリ４０Ａに格納されたデータパケット５０のそれと同一であった場合には、ステップ３０５における判定が肯定され、受信部２３Ａは、ステップ３０９に進む。
【００６０】
ステップ３０９では、ＦＩＦＯメモリ４１Ａに格納された第３のカウント値と、そのデータと送信時刻フィールドが同一であるＦＩＦＯ４１Ｂに格納された第４のカウント値とに基づいて、時刻カウンタ２１Ａのカウント値と、他のシステム１Ｂの時刻カウンタ２１Ｂのカウント値とのカウントずれを算出する。
【００６１】
図７（Ａ）に示されるように、ＦＩＦＯメモリ４１Ａに格納されたカウント値がｔ３であり、ＦＩＦＯメモリ４１Ｂに格納されたカウント値がｔ４であったとする。受信部２３Ａは、カウント値ｔ４からクロスリンク２のレイテンシＬを差し引いた値と、カウント値ｔ３との差を、時刻カウンタ２１Ａのカウント値と、時刻カウンタ２１Ｂのカウント値とのカウントずれとして算出する。図７（Ａ）では、このカウントずれは０となる。
【００６２】
これに対して、図７（Ｂ）に示されるように、ＣＰＵサブシステム１２Ａに入力されるクロック信号（上段の信号）に対して、ＣＰＵサブシステム１２Ｂに入力されるクロック信号（下段の信号）が遅れていた場合を考える。このような遅れは、両システムのクロック信号の周波数の違いによりもたらされる。クロック源１０Ａのクロック信号の周波数と、クロック源１０Ｂのクロック信号の周波数とが、わずかに異なっていると、時刻カウンタ２１Ａがカウントされるタイミングと、時刻カウンタ２１Ｂがカウントされるタイミングとの間にはずれが生じ、そのずれが累積して、カウントずれとなって現れるのである。
【００６３】
図７（Ｂ）に示される例では、システム１Ｂからのデータパケット５０が受信部２３Ａで受信される時点は、カウント値ｔ４に相当する時点ではなく、その時点からクロック信号の時間差ｄだけ遅れた時点、すなわちカウント値ｔ４’に相当する時点となる。受信部２３Ａは、カウント値ｔ４’からクロスリンク２のレイテンシＬを差し引いた値と、カウント値ｔ３との差を、時刻カウンタ２１Ａのカウント値と、時刻カウンタ２１Ｂのカウント値とのカウントずれとして算出する。ステップ３０９では、このようにして、カウントずれｄが算出される。
【００６４】
図５に戻り、次のステップ３１１では、受信部２３Ａは、ＦＩＦＯメモリ４０Ａに格納されたデータパケット５０をパケット処理部２４Ａに出力する。このとき、ステップ３０９で算出されたカウントずれも、あわせてパケット処理部２４Ａに出力される。
【００６５】
次に、パケット処理部２４Ａの動作について説明する。図６には、パケット処理部２４Ａの動作のフローチャートが示されている。図６に示されるように、電源投入後、不図示のリセット信号が入力されると、パケット処理部２４Ａの動作が開始され、まず、ステップ４０１において、パケット処理部２４Ａは、初期化処理を行う。初期化処理後、ステップ４０３において、パケット処理部２４Ａは、受信部２３Ａからデータパケット５０及びカウントずれが入力されるまで待つ。
【００６６】
データパケット５０が入力されると、パケット処理部２４Ａは、ステップ４０５に進む。ステップ４０５では、パケット処理部２４Ａは、時刻カウンタ２１Ａのカウント値が、実行時刻フィールド５５に格納されたカウント値となるまで待つ。時刻カウンタ２１Ａのカウント値が、実行時刻フィールド５５に格納されたカウント値となると、パケット処理部２４Ａは、ステップ４０７に進む。ステップ４０７では、ＣＰＵ部２０Ａにデータパケット５０を入力する。これにより、ＣＰＵ部２０Ａでは、実行時刻フィールド５５に格納されたカウント値に相当する時点で、データパケット５０に基づく処理が実行されるようになる。例えば、図７（Ａ）に示される例では、時刻カウンタ２１Ａのカウント値がｔ２となった時点で、ＣＰＵ部２０Ａにデータパケット５０が入力され、このデータパケット５０のデータフィールド５３に格納されたデータを用いた処理が実行されるようになる。
【００６７】
次のステップ４０９では、パケット処理部２４Ａは、受信部２３Ａから入力したカウントずれの絶対値が閾値を超えるか否かを判定する。この判定が肯定された場合にのみステップ４１１が実行される。ステップ４１１では、パケット処理部２４Ａは、カウントずれを、ＰＬＬ制御部２５Ａに出力する。ＰＬＬ制御部２５Ａは、このカウントずれが小さくなるように、ＰＬＬ１１Ａのパラメータを変更し、ＰＬＬ１１Ａから出力されるクロック信号の周波数を調整する。
【００６８】
このように、パケット処理部２４Ａは、受信部２３Ａからデータパケット５０が入力される度に、ＣＰＵ部２０Ａへのデータパケット５０の入力の時間調整と、必要な場合におけるＰＬＬ１１Ａの制御とを行っている。
【００６９】
図７（Ｂ）では、システム１Ａのクロック信号の周波数の方が、システム１Ｂのクロック信号の周波数よりも高い場合が高くなっている。この場合、パケット処理部２４Ａは、このカウントずれに基づいて、ＰＬＬ制御部２５Ａを制御し、システム１Ａのクロック信号の周波数が低くなるように、すなわち、その周波数が下段のクロック信号の周波数に近づくように、ＰＬＬ１１Ａを調整する。
【００７０】
なお、システム１Ａで、このようなカウントずれが検出された場合には、システム１Ｂでも、正負が逆のカウントずれが検出されており、システム１Ｂにおけるクロック信号も調整されるようになるので、両システム１Ａ、１Ｂのクロック信号の周波数は、それまでの両信号の周波数の中間の周波数に調整されるようにするのが望ましい。
【００７１】
図７（Ｃ）には、ＣＰＵサブシステム１２Ａに入力されるクロック信号と、ＣＰＵサブシステム１２Ｂに入力されるクロック信号とにずれがなく、完全に同期している場合が示されている。この場合には、ＣＰＵ部２０Ａ、２０Ｂは、同じ実時刻（カウント値ｔ４に相当する時刻）で同じ処理を実行するようになる。ＣＰＵ部２０Ａ、２０Ｂは、デターミニズムに基づき、同じ時刻に、同じデータを送信部２２Ａ、２２Ｂに出力するようになり、送信部２２Ａ、２２Ｂに出力されたデータは、同じ時間に、受信部３３Ａ、３３Ｂに送信され、Ｉ／Ｏデバイス３０Ａ、３０Ｂから同時に出力されるようになる。本実施形態に係るデータ処理装置１００では、通常は、図７（Ｃ）に示される状態が維持される。そして、クロック源１０Ａ、１１Ｂ等の特性、すなわちクロック信号の微妙なばらつきにより、図７（Ｂ）に示される状態となりかけると、上述したクロック信号の調整が行われて、図７（Ｃ）に示される状態に復帰する。これにより、ロックステップ同期が実現される。
【００７２】
以上詳細に説明したように、本実施形態に係るデータ処理装置１００は、各々がＣＰＵ部２０Ａ、２０ＢとＩ／Ｏデバイス３０Ａ、３０Ｂとを有する少なくとも２つのシステム１Ａ、１Ｂを備えている。システム１Ａでは、Ｉ／Ｏデバイス３０ＡとＣＰＵ部２０Ａとの間でデータパケット５０の送受信が行われるが、Ｉ／Ｏデバイス３０ＡからＣＰＵ部２０Ａへ送信されるデータパケット５０は、送信時の時刻カウンタ２１Ａのカウント値（第１のカウント値）が付加されて、他のシステム１Ｂにも送信されるようになっている。さらに、受信部２３Ａは、Ｉ／Ｏデバイス３０ＡからＣＰＵ部２０Ａに送信されるデータパケット５０を受信するとともに、他のシステム１Ｂから送信されたデータパケット５０も受信するが、それぞれのデータパケット５０の受信時に時刻カウンタ２１Ａのカウント値（第３、第４のカウント値）を取得する。そして、第１のカウント値が同一であるデータ同士の第３のカウント値と、第４のカウント値とに基づいて、時刻カウンタ２１Ａと時刻カウンタ２１Ｂとのカウントずれが算出され、算出されたカウントずれに基づいて、時刻カウンタ２１ＡやＣＰＵ部２０に入力されるクロック信号の周波数が調整される。
【００７３】
本実施形態では、システム１Ｂも、システム１Ａと同様に動作する。
【００７４】
このようにすれば、各システム１Ａ、１ＢのＣＰＵ部２０Ａ、２０Ｂに入力されるクロック信号の周波数がわずかに異なり時刻カウンタ２１Ａ、２１Ｂにカウントずれが発生しても、そのカウントずれが小さくなる方向に、両クロック信号の周波数を調整することができる。この結果、各システム１Ａ、１Ｂのクロック源として異なるクロック源を用いたとしても、ロックステップ同期を維持することができるようになる。
【００７５】
また、本実施形態では、時刻カウンタ２１Ａ、２１Ｂのカウント値が、データパケット５０の実行時刻フィールド５５に格納されたカウント値となった時点で、ＣＰＵ部２０Ａ、２０Ｂが実行されるので、ＣＰＵ部２０Ａ、２０Ｂは、同じ処理と同じ時刻に行うことができるようになる。
【００７６】
なお、図６のステップ４０９、４１１は、ステップ４０５における実行時刻待ちの間に行うようにしてもよい。
【００７７】
≪第２の実施形態≫
次に、本発明の第２の実施形態について図８のフローチャートと、図９のタイミングチャートを参照して、詳細に説明する。本実施形態に係るデータ処理装置は、上記第１の実施形態に係るデータ処理装置１００の構成と同一であるため、その構成についての詳細な説明を省略する。本実施形態に係るデータ処理装置１００は、パケット処理部２４Ａ、２４Ｂの動作が、上記第１の実施形態と異なっている。
【００７８】
図８には、本実施形態に係るパケット処理部２４Ａの動作のフローチャートが示されている。図８に示されるように、本実施形態では、ステップ４１３、４１５、４１７の処理が、新たに追加されている点が、図６のフローチャートと異なっている。その他の点は、上記第１の実施形態と同様であるので、詳細な説明を省略する。
【００７９】
データパケット５０が、受信部２３Ａから入力され、ステップ４０３の判定が肯定されると、パケット処理部２４Ａは、ステップ４１３に進む。ステップ４１３では、パケット処理部２４Ａは、データパケット５０の実行時刻フィールド５５に格納されたカウント値と、現在の時刻カウンタ２１Ａのカウント値との差（マージン）を算出する。図９のタイミングチャートでは、データパケット５０の実行時刻フィールド５５に格納されたカウント値がｔ２であり、時刻カウンタ２１Ａのカウント値がｔ２’であったときの例が示されている。この場合、パケット処理部２４Ａは、カウント値ｔ２とカウント値ｔ２’との差Ｍを算出する。
【００８０】
図８に戻り、ステップ４１３の後、パケット処理部２４Ａは、上記第１の実施形態と同様に、実行時刻待ち（ステップ４０５）→ＣＰＵ部２０Ａへのデータ入力（ステップ４０７）→カウントずれの判定（ステップ４０９）→上記判定が肯定された場合のカウントずれの出力（ステップ４１１）が行われる。
【００８１】
ステップ４０９で判定が否定された後、又はステップ４１１が実行された後は、パケット処理部２４Ａは、ステップ４１５に進む。ステップ４１５では、パケット処理部２４Ａは、マージンが閾値を超えたか否かを判定する。なお、この閾値は、上記ステップ４０９の閾値とは別の閾値である。この判定が肯定されれば、ステップ４１７に進み、マージンをＰＬＬ制御部２５Ａに出力する。ＰＬＬ制御部２５Ａは、このマージンが小さくなるように、ＰＬＬ１１Ａのパラメータを変更し、クロック信号の周波数が高くなるように微調整する。このようにすれば、ＣＰＵ部２０Ａの実行時刻を速めることができるようになるので、データ処理装置１００の処理速度が向上する。
【００８２】
なお、パケット処理部２４Ｂも、パケット処理部２４Ａと同じように動作し、マージンをＰＬＬ制御部２５Ｂに出力する。ＰＬＬ制御部２５Ｂも、ＰＬＬ制御部２５Ａと同様に、このマージンが小さくなるように、ＰＬＬ１１Ｂのパラメータを変更し、クロック信号の周波数が高くなるように微調整する。これにより、ＣＰＵ部２０Ｂの実行時刻は、ＣＰＵ部２０Ａの実行時刻と同じように速まり、ＣＰＵ部２０Ａの実行時刻とＣＰＵ部２０Ｂの実行時刻との間にずれは生じない。
【００８３】
なお、ステップ４０９、４１１と、ステップ４１５，４１７とは、順番が逆であってもよい。また、図８のステップ４０９、４１１、４１５、４１７は、ステップ４０５における実行時刻待ちの間に行うようにしてもよい。
【００８４】
≪第３の実施形態≫
次に、本発明の第３の実施形態について図１０、図１１を参照して詳細に説明する。図１０には、本実施形態に係るデータ処理装置１００の構成が示されている。図１０に示されるように、本実施形態に係るデータ処理装置１００は、受信部２３Ａ、２３Ｂの代わりに、受信部２３Ａ’、２３Ｂ’が、備えられている点が、上記各実施形態と異なっている。本実施形態に係る受信部２３Ａ’、２３Ｂ’が、リセット部に対応する。
【００８５】
受信部２３Ａ’は、リセット信号を時刻カウンタ２１Ａに出力する点が、受信部２３Ａと異なっており、受信部２３Ｂ’は、リセット信号を時刻カウンタ２１Ｂに出力する点が、受信部２３Ｂと異なっている。リセット信号が出力されると、時刻カウンタ２１Ａ、２２Ｂのカウント値は、０にリセットされる。
【００８６】
図１１には、本実施形態に係る受信部２３Ａ’の動作のフローチャートが示されている。図１１に示されるように、本実施形態では、ステップ３１３、３１５の処理が、新たに追加されている点が、図５のフローチャートと異なっている。
【００８７】
ステップ３０９において、時刻カウンタ２１Ａと時刻カウンタ２１Ｂとのカウントずれが算出された後、受信部２３Ａ’は、ステップ３１３に進む。ステップ３１３では、受信部２３Ａ’は、カウントずれの絶対値が、閾値を超えたか否かを判定する。受信部２３Ａ’は、この判定が肯定されればステップ３１５に進み、否定されればステップ３１１に進む。なお、この閾値としては、図８のステップ４０９の閾値よりも大きい値、すなわち同期エラーとみなせるほどの値が設定されるようになる。
【００８８】
ステップ３１５では、受信部２３Ａ’は、リセット処理を行う。すなわち、送信部３２Ａからデータパケット５０の受信時刻と、他のシステム１Ｂからのデータパケット５０の受信時刻との時間差が大すぎる場合には、同期エラーが生じたものとして、受信部２３Ａ’は、時刻カウンタ２１Ａにリセット信号を出力する。これにより、時刻カウンタ２１Ａのカウント値は０となり、０からのカウントアップが開始される。
【００８９】
なお、このステップ３１５では、受信部２３Ａ’は、すでに受信し、ＦＩＦＯメモリ４０Ａに保持されているデータパケット５０の実行時刻フィールド５５に格納されたカウント値を、リセット後のカウント値に書き換える。
【００９０】
このように、受信部２３Ａ’において、同期エラーが検出された場合には、システム１Ｂの受信部２３Ｂ’においても、同期エラーが検出されている。したがって、受信部２３Ｂ’も、時刻カウンタ２１Ｂにリセット信号を出力するようになる。これにより、時刻カウンタ２１Ａ、２１Ｂのカウント値は、ほぼ同時にリセットされ、クロック信号の周波数による両者のカウント値のドリフトが解消されるようになる。
【００９１】
ステップ３１５実行後は、ステップ３１１に進み、受信部２３Ａ’は、ＦＩＦＯメモリ４０Ａに格納されたデータパケット５０を、格納された順番に、パケット処理部２４Ａに出力する。このとき、時刻カウンタ２１Ａはリセットされているので、カウントずれは、パケット処理部２４Ａに出力されない。パケット処理部２４Ａは、上記各実施形態と同様の処理を行う。
【００９２】
なお、本実施形態では、送信部３２Ａからデータパケット５０の受信時刻と、他のシステム１Ｂからのデータパケット５０の受信時刻との時間差で、同期エラーを検出したが、例えば、ＦＩＦＯメモリ４０Ａがオーバーフローしたら、同期エラーが発生したものとして、時刻カウンタ２１Ａをリセットするようにしてもよい。
【００９３】
≪第４の実施形態≫
次に、本発明の第４の実施形態について図１２を参照して詳細に説明する。本実施形態に係るデータ処理装置は、上記第３の実施形態に係るデータ処理装置の構成と同一であるため、その構成についての詳細な説明を省略する。本実施形態に係るデータ処理装置１００は、受信部２３Ａ’、２３Ｂ’の動作が、上記第３の実施形態と異なっている。本実施形態に係る受信部２３Ａ’、２３Ｂ’が、障害検出部に対応する。
【００９４】
図１２には、本実施形態に係る受信部２３Ａ’の動作のフローチャートが示されている。図１２に示されるように、本実施形態では、ステップ３１７、３１９の処理が、新たに追加されている点が、図１１のフローチャートと異なっている。
【００９５】
ステップ３１３又はステップ３１５実行後、受信部２３Ａ’は、ステップ３１７に進む。ステップ３１７では、ＦＩＦＯメモリ４０Ａに格納されたデータパケット５０と、ＦＩＦＯメモリ４０Ｂに格納されたデータパケット５０とが一致するか否かを判定する。受信部２３Ａ’は、この判定が肯定されれば、ステップ３１１に進み、否定されれば、ステップ３１９に進む。
【００９６】
ステップ３１９では、エラー処理を行う。このエラー処理では、まず、システム１Ａが故障したのか、システム１Ｂが故障したのかの切り分けが行われる。例えば、データパケット５０に、誤り訂正符号が付加されていた場合には、その誤り訂正符号に基づいて、データパケット５０の誤りを検出することができる。これにより、ＦＩＦＯメモリ４０Ａに保持されたデータパケット５０と、ＦＩＦＯメモリ４０Ｂに保持されたデータパケット５０とのいずれに誤りがあるのかを検出し、故障したシステムを特定することができる。
【００９７】
例えば、Ｉ／Ｏサブシステム１３Ａから送信されたデータパケット５０の誤りが検出されたとする。この場合には、システム１Ａが停止され、この後は、システム１Ｂだけで処理が続行されるようになる。逆に、Ｉ／Ｏサブシステム１３Ｂから送信されたデータパケットの誤りが検出された場合には、システム１Ｂが停止され、この後は、システム１Ａだけで処理が続行されるようになる。そして、故障が検出された方のシステムについては、保守や修理が行われる。なお、Ｉ／Ｏサブシステム１３Ａ、１３Ｂのいずれかの故障が検出された場合には、そのＩ／Ｏサブシステムのみを停止し、そのＩ／Ｏサブシステムと同じシステム内のＣＰＵサブシステムは、他のシステムのＩ／Ｏサブシステムと連携して、処理を続行するようにしてもよい。
【００９８】
≪第５の実施形態≫
次に、本発明の第５の実施形態について図１３〜図１５を参照して詳細に説明する。図１３には、本実施形態に係るデータ処理装置１００の構成が示されている。本実施形態に係るデータ処理装置１００は、受信部３３Ａ、３３Ｂの代わりに、受信部３３Ａ’、３３Ｂ’を備えている点が上記第４の実施形態に係るデータ処理装置１００の構成と異なっており、送信部２２Ａ、２２Ｂの動作が、上記第４の実施形態と異なっている。その他の部分については、上記第４の実施形態と同様であるので、詳細な説明を省略する。
【００９９】
図１３に示されるように、受信部３３Ａ’は、時刻カウンタ２１Ａ、ＰＬＬ制御部２５Ａに接続され、受信部３３Ｂ’は、時刻カウンタ２１Ｂ、ＰＬＬ制御部２５Ｂに接続されている。受信部３３Ａ’、３３Ｂ’は、パケット処理部２４Ａ、２４Ｂと同様に、ＰＬＬ制御部２５Ａ、２５Ｂを制御可能である点と、時刻カウンタ２１Ａ、２１Ｂにリセット信号を出力している点が、受信部３３Ａ、３３Ｂと異なっている。
【０１００】
図１４には、送信部２２Ａの動作のフローチャートが示されている。図１４に示されるように、送信部２２Ａの動作は、ステップ２０５の代わりに、ステップ２０５’を実行する点が、送信部３２Ａの動作と異なっている。ステップ２０５’では、送信部２２Ａは、データパケット５０の送信時刻フィールド５４に現在の時刻カウンタ２１Ａのカウント値を格納して、データパケット５０を受信部３３Ａ’、３３Ｂ’に送信する。すなわち、送信部２２Ａにおいては、実行時刻フィールド５５には、カウント値を格納せずに、データパケット５０を送信している。
【０１０１】
図１５には、受信部３３Ａ’の動作のフローチャートが示されている。図１５に示されるように、受信部３３Ａ’の動作は、ステップ５０１〜ステップ５０９、ステップ５１３、５１５、ステップ５１７、５１９の処理は、図１２の受信部２３Ａの動作、すなわち、ステップ３０１〜ステップ３０９、ステップ３１３、３１５、ステップ３１７、３１９の処理と同じである。また、ステップ５１１では、受信部３３Ａ’は、Ｉ／Ｏデバイス３０Ａに、データパケット５０を出力している。
【０１０２】
ステップ５１１実行後、受信部３３Ａ’は、上記ステップ５０９で算出されたカウントずれの絶対値が閾値以上であるか否かを判定し、この判定が肯定された場合にのみ、ステップ５２３にて、カウントずれをＰＬＬ制御部２５Ａに出力する。これにより、ＣＰＵサブシステム１２Ａに入力されるクロック信号の周波数が調整される。なお、ステップ５１３における閾値は、同期エラーの判定に用いられる閾値であるため、ステップ５２１における閾値よりも大きい値が設定される。
【０１０３】
なお、受信部３３Ａ’では、ステップ５１３、５１５の処理と、ステップ５１７、５１９の処理については、必ずしも行う必要はない。また、本実施形態に係るデータ処理装置１００では、受信部２３Ａ’、受信部２３Ｂ’の代わりに、上記第１、第２の実施形態と同様に、受信部２３Ａ、受信部２３Ｂを備えるようにしてもよい。
【０１０４】
また、図１５のステップ５１３、５１５と、ステップ５１７、５１９は、順番が逆であってもよい。
【０１０５】
これまでの説明から明らかなように、上記各実施形態では、図４のステップ２０３、２０５が第１の工程に対応し、図５のステップ３０３が第２の工程に対応し、ステップ３０５、３０９が第３の工程に対応し、図６のステップ４０９、４１１が第４の工程に対応し、ステップ４０５、４０９が第５の工程に対応する。また、図８のステップ４１３が第６の工程に対応し、ステップ４１５、４１７が第７の工程に対応する。また、図１４のステップ２０５’が第８の工程に対応し、図１５のステップ５０３が第９の工程に対応し、ステップ５０５、５０９が第１０の工程に対応し、ステップ５２１、５２３が第１１の工程に対応する。
【０１０６】
以上詳細に説明したように、上記各実施形態によれば、ＣＰＵ部２０Ａ、２０Ｂと、Ｉ／Ｏデバイス３０Ａ、３０Ｂとの間で送受信されるデータパケット５０の受信タイミングの違いで、時刻カウンタ２１Ａと時刻カウンタ２１Ｂとのカウントずれを検出し、そのカウントずれに基づいて、それぞれのシステム１Ａ、１Ｂのクロック信号の周波数を調整する。これにより、ＣＰＵ部２０Ａ、３０Ａにおける実時間における実行時刻の相対的な時間差を一定範囲内に保つことができる。この結果、両システム１Ａ、１Ｂの同期が維持されるようになる。
【０１０７】
上記各実施形態によれば、クロック信号の周波数を調整するので、実行速度の遅いＣＰＵサブシステムにすべてのＣＰＵサブシステムの実行タイミングを合わせる必要がなくなる。このため、装置全体の処理速度が低下することはない。逆に、上記第２の実施形態に係るデータ処理装置のように、ＣＰＵ部２０Ａ、２０Ｂの実行時刻を最適化することができるようになるので、装置全体の処理能力が向上する。
【０１０８】
また、上記各実施形態によれば、各システムの故障を検出するために必須のクロスリンク２を介して送受信されるデータを用いて、ロックステップ同期を実現する。すなわち、上記各実施形態によれば、また、クロック信号のずれを検出するのに、各ＣＰＵサブシステムに入力されるクロック信号を比較するための専用のハードウエアを必要としないので、各モジュールのハードウエアの独立性が担保される。
【０１０９】
また、上記各実施形態によれば、クロック信号の周波数を調整しているので、タイマ割り込みなどをかけて各ＣＰＵサブシステム１２Ａ、１２Ｂに入力されるクロック信号を定期的にリセットする必要がなくなる。このため、複数のクロック源の出力周波数のばらつきが大きい場合でも、各ＣＰＵサブシステム１２Ａ、１２Ｂに入力されるクロック信号の周波数は速やかに調整され、ロックステップ同期を維持することができるようになる。
【０１１０】
すなわち、上記各実施形態に係るデータ処理装置によれば、クロスリンク２を介してシステム間を双方向に送受信されるデータパケット５０を用いて、デターミニズムに基づくシステム１Ａ、１Ｂ間の緩やかな同期を実現しつつ、そのデータパケット５０の受信タイミングを計測して、各システム１Ａ、１Ｂに入力されるクロック信号の周波数を調整しているので、両システム１Ａ、１Ｂを、実時間においても、同期させることができるようになっている。この結果、装置の耐故障性が向上し、その信頼性は極めて高いものとなっている。
【０１１１】
また、上記各実施形態によれば、例えば、受信部２３Ａ等でのシステム１Ａ内のデータパケット５０の受信時刻と他のシステム１Ｂからのデータパケット５０の受信時刻との時間差が大きくなりすぎて、受信されたデータパケット５０が保持されるＦＩＦＯメモリ４０Ａ等がオーバーフローしてしまうのを防止することも可能となる。
【０１１２】
また、上記第２の実施形態によれば、ＣＰＵ部２０Ａ、２０Ｂの実行時刻のマージンを算出し、そのマージンが大きい場合には、そのマージンに基づいて、クロック信号の周波数を調整する。これにより、ＣＰＵ部２０Ａ、２０Ｂの実行時刻をできるだけ早くすることができるようになる。この結果、データ処理装置全体の処理速度を向上させることができる。
【０１１３】
また、上記各実施形態によれば、クロスリンク２のレイテンシを考慮して、ＣＰＵ２０Ａ、２０Ｂの実行予定時刻を設定している。これにより、システム１Ａ、１Ｂ間の同期が保たれていることを確認した後に、ＣＰＵ２０Ａ、２０Ｂの処理を実行させることができるようになる。この結果、ＣＰＵ２０Ａ、２０Ｂを、より確実に同期させることができるようになる。
【０１１４】
また、上記各実施形態によれば、クロスリンク２のレイテンシを考慮して、時刻カウンタ２１Ａ、２１Ｂのカウントずれを検出するので、そのカウントずれを正確に検出することができるようになる。この結果、ＣＰＵ２０Ａ、２０Ｂを、より確実に同期させることができるようになる。
【０１１５】
また、上記第３の実施形態によれば、時刻カウンタ２１Ａ、２１Ｂのカウントずれが、所定レベルを超えた場合には、時刻カウンタ２１Ａ、２１Ｂをリセットする。これにより、システム１Ａ、１Ｂを速やかに同期状態にリカバリさせることができるようになる。この結果、ＣＰＵ２０Ａ、２０Ｂを、より確実に同期させることができるようになる。
【０１１６】
また、上記第４の実施形態によれば、両システム１Ａ、１Ｂのデータパケット５０を比較して、各システムに発生した障害を検出するので、障害が発生したシステムを除外し、残りのシステムだけで処理を続行することができるようになる。この結果、装置全体の信頼性が向上する。
【０１１７】
また、上記第１〜第４の実施形態によれば、Ｉ／Ｏデバイス３０Ａ、３０Ｂに入力されたデータを用いて、システム１Ａ、１Ｂを同期させたが、上記第５の実施形態のように、ＣＰＵ２０Ａ、３０Ｂから出力されたデータも用いて、システム１Ａ、１Ｂを同期させるようにすれば、両システム１Ａ、１Ｂは、より正確に同期するようになり、装置の信頼性がさらに向上する。
【０１１８】
なお、上記各実施形態では、ＣＰＵサブシステム１２Ａ、１２Ｂの受信部２３Ａ、２３Ｂとパケット処理部２４Ａ、２４Ｂとは、統合されていてもよい。逆に、Ｉ／Ｏサブシステム１３Ａ、１３Ｂの受信部３３Ａ、３３Ｂは、ＣＰＵサブシステム１２Ａ、１３Ｂと同様に、その機能が受信部とパケット処理部とに別れていても良い。
【０１１９】
なお、上記各実施形態に係るデータ処理装置１００では、システムが二重化された装置であったが、システムを三重化以上、すなわち多重化する場合にも、本発明を適用することができるのは勿論である。
【図面の簡単な説明】
【０１２０】
【図１】本発明の第１の実施形態に係るデータ処理装置の構成を示すブロック図である。
【図２】データパケットのデータ構造を示す図である。
【図３】図１の受信部の構成を示すブロック図である。
【図４】図１の送信部の動作を示すフローチャートである。
【図５】図１の受信部の動作を示すフローチャートである。
【図６】図１のパケット処理部の動作を示すフローチャートである。
【図７】図７（Ａ）〜図７（Ｃ）は、データの送受信に関するタイミングを示すタイミングチャートである。
【図８】本発明の第２の実施形態に係るパケット処理部の動作を示すフローチャートである。
【図９】データの送受信に関するタイミングのタイミングチャートである。
【図１０】本発明の第３の実施形態に係るデータ処理装置の構成を示すブロック図である。
【図１１】図１０の受信部の動作を示すフローチャートである。
【図１２】本発明の第４の実施形態に係る受信部の動作を示すフローチャートである。
【図１３】本発明の第５の実施形態に係るデータ処理装置の構成を示すブロック図である。
【図１４】図１３の送信部の動作を示すフローチャートである。
【図１５】図１３の受信部の動作を示すフローチャートである。
【符号の説明】
【０１２１】
１Ａ、１Ｂ  システム
２  クロスリンク
１０Ａ、１０Ｂ  クロック源
１１Ａ、１１Ｂ  ＰＬＬ
１２Ａ、１２Ｂ  ＣＰＵサブシステム
１３Ａ、１３Ｂ  Ｉ／Ｏサブシステム
２０Ａ、２０Ｂ  ＣＰＵ部
２１Ａ、２１Ｂ  時刻カウンタ
２２Ａ、２２Ｂ  送信部
２３Ａ、２３Ｂ、２３Ａ’、２３Ｂ’  受信部
２４Ａ、２４Ｂ  パケット処理部
２５Ａ、２５Ｂ  ＰＬＬ制御部
３０Ａ、３０Ｂ  Ｉ／Ｏデバイス
３２Ａ、３２Ｂ  送信部
３３Ａ、３３Ｂ、３３Ａ’、３３Ｂ’  受信部
４０Ａ、４０Ｂ、４１Ａ、４１Ｂ  ＦＩＦＯメモリ
５０  データパケット
５１  パケット種別フィールド
５２  パケット長フィールド
５３  データフィールド
５４  送信時刻フィールド
５５  実行時刻フィールド
１００  データ処理装置
【図１】
0005380884.tif 000002
【図２】
0005380884.tif 000003
【図３】
0005380884.tif 000004
【図４】
0005380884.tif 000005
【図５】
0005380884.tif 000006
【図６】
0005380884.tif 000007
【図７】
0005380884.tif 000008
【図８】
0005380884.tif 000009
【図９】
0005380884.tif 000010
【図１０】
0005380884.tif 000011
【図１１】
0005380884.tif 000012
【図１２】
0005380884.tif 000013
【図１３】
0005380884.tif 000014
【図１４】
0005380884.tif 000015
【図１５】
0005380884.tif 000016