(57)【要約】【課題】  フォールト・トレラント・コンピュータをモジュール間で完全に同期してリセットすることを可能とする。【解決手段】  何れか１つのモジュールでリセット要求信号を生成するステップと、リセット要求信号を第１のリセット要求信号と第２のリセット信号に分岐させるステップと、第２のリセット要求信号を他のモジュールに伝達するステップと、第２のリセット要求信号を他のモジュールに伝達するのに要する時間だけ、第１のリセット要求信号を１つのモジュール内で遅延させるステップと、１つのモジュール内で遅延された第１のリセット要求信号を基に生成された第１のＣＰＵリセット信号で１つのモジュールに含まれるＣＰＵをリセットするステップと、他のモジュールに伝達された第２のリセット要求信号を基に生成された第２のＣＰＵリセット信号で他のモジュールに含まれるＣＰＵをリセットするステップを備える。【選択図】        図１１
2006172391.tif 000002
【特許請求の範囲】
【請求項１】
複数のモジュールを備えるフォールト・トレラント・コンピュータをリセットするための方法であって、
何れか１つのモジュールでリセット要求信号を生成するステップと、
前記リセット要求信号を第１のリセット要求信号と第２のリセット信号に分岐させるステップと、
前記第２のリセット要求信号を他のモジュールに伝達するステップと、
前記第２のリセット要求信号を他のモジュールに伝達するのに要する時間だけ、前記第１のリセット要求信号を前記１つのモジュール内で遅延させるステップと、
前記１つのモジュール内で遅延された前記第１のリセット要求信号を基に生成された第１のＣＰＵリセット信号で前記１つのモジュールに含まれる少なくとも１つのＣＰＵをリセットするステップと、
前記他のモジュールに伝達された前記第２のリセット要求信号を基に生成された第２のＣＰＵリセット信号で前記他のモジュールに含まれる少なくとも１つのＣＰＵをリセットするステップと、
を備えることを特徴とする方法。
【請求項２】
請求項１に記載の方法において、
前記１つのモジュールにおいて、ロック・コマンドを生成するステップと、
前記ロック・コマンドを前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジに伝達するステップと、
前記ロック・コマンドを前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジに伝達するステップと、
前記ロック・コマンドを受けた前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第１のロック・コンプリーションを生成するステップと、
前記ロック・コマンドを受けた前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第２のロック・コンプリーションを生成するステップと、
を更に備え、
前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて前記第１のロック・コンプリーションが生成され、且つ、前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて前記第２のロック・コンプリーションが生成されたならば、前記リセット要求信号を生成することを特徴とする方法。
【請求項３】
請求項１に記載の方法において、
前記１つのモジュール内で遅延された前記第１のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、前記１つのモジュールのメイン・メモリをリフレッシュするステップと、
前記他のモジュールに伝達された前記第２のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、前記他のモジュールのメイン・メモリをリフレッシュするステップと、
を更に備えることを特徴とする方法。
【請求項４】
請求項１に記載の方法において、
前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断するステップと、
両コマンドが一致しない場合に、前記１つのモジュールに含まれる前記少なくとも１つのＣＰＵ及び前記他のモジュールに含まれる前記少なくとも１つのＣＰＵを再度リセットするステップと、
を更に備えることを特徴とする方法。
【請求項５】
請求項４に記載の方法において、
前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを前記１つのモジュールに伝達するステップと、
前記コマンドを前記他のモジュールから前記１つのモジュールに伝達するのに要する時間だけ、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを遅延させるステップと、
を更に備え、
前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断するステップでは、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって遅延されたものと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって伝達されたものとが一致するか否かを判断することを特徴とする方法。
【請求項６】
複数のモジュールを備えるフォールト・トレラント・コンピュータをリセットするためのシステムであって、
何れか１つのモジュールでリセット要求信号を生成する手段と、
前記リセット要求信号を第１のリセット要求信号と第２のリセット信号に分岐させる手段と、
前記第２のリセット要求信号を他のモジュールに伝達する手段と、
前記第２のリセット要求信号を他のモジュールに伝達するのに要する時間だけ、前記第１のリセット要求信号を前記１つのモジュール内で遅延させる手段と、
前記１つのモジュール内で遅延された前記第１のリセット要求信号を基に生成された第１のＣＰＵリセット信号で前記１つのモジュールに含まれる少なくとも１つのＣＰＵをリセットする手段と、
前記他のモジュールに伝達された前記第２のリセット要求信号を基に生成された第２のＣＰＵリセット信号で前記他のモジュールに含まれる少なくとも１つのＣＰＵをリセットする手段と、
を備えることを特徴とするシステム。
【請求項７】
請求項６に記載のシステムにおいて、
前記１つのモジュールにおいて、ロック・コマンドを生成する手段と、
前記ロック・コマンドを前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジに伝達する手段と、
前記ロック・コマンドを前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジに伝達する手段と、
前記ロック・コマンドを受けた前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第１のロック・コンプリーションを生成する手段と、
前記ロック・コマンドを受けた前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第２のロック・コンプリーションを生成する手段と、
を更に備え、
前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて前記第１のロック・コンプリーションが生成され、且つ、前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて前記第２のロック・コンプリーションが生成されたならば、前記リセット要求信号を生成することを特徴とするシステム。
【請求項８】
請求項６に記載のシステムにおいて、
前記１つのモジュール内で遅延された前記第１のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、前記１つのモジュールのメイン・メモリをリフレッシュする手段と、
前記他のモジュールに伝達された前記第２のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、前記他のモジュールのメイン・メモリをリフレッシュする手段と、
を更に備えることを特徴とするシステム。
【請求項９】
請求項６に記載のシステムにおいて、
前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断する手段と、
両コマンドが一致しない場合に、前記１つのモジュールに含まれる前記少なくとも１つのＣＰＵ及び前記他のモジュールに含まれる前記少なくとも１つのＣＰＵを再度リセットする手段と、
を更に備えることを特徴とするシステム。
【請求項１０】
請求項９に記載のシステムにおいて、
前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを前記１つのモジュールに伝達する手段と、
前記コマンドを前記他のモジュールから前記１つのモジュールに伝達するのに要する時間だけ、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを遅延させる手段と、
を更に備え、
前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断する手段は、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって遅延されたものと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって伝達されたものとが一致するか否かを判断することを特徴とするシステム。
【請求項１１】
複数のモジュールを備えるフォールト・トレラント・コンピュータで利用されるフォールト・トレラント・制御装置であって、
リセット要求信号を生成するリセット要求信号生成手段と、
前記リセット要求信号を第１のリセット要求信号と第２のリセット信号に分岐させる分岐手段と、
前記第２のリセット要求信号を当該装置が含まれるモジュール以外のモジュールに含まれるフォールト・トレラント・制御装置に向けて伝達する伝達手段と、
前記第２のリセット要求信号を当該装置が含まれるモジュール以外のモジュールに含まれるフォールト・トレラント・制御装置に伝達するのに要する時間だけ、前記第１のリセット要求信号を遅延させる第１遅延手段と、
遅延された前記第１のリセット要求信号を基に生成された第１のＣＰＵリセット信号で当該装置が含まれるモジュールに含まれる少なくとも１つのＣＰＵをリセットするＣＰＵリセット手段と、
を備えることを特徴とする装置。
【請求項１２】
請求項１１に記載の装置において、
ロック・コマンドを生成するロック・コマンド生成手段と、
前記ロック・コマンドを当該装置に含まれるＩ／Ｏ・インターフェース・ブリッジに伝達する第１ロック・コマンド・伝達手段と、
前記ロック・コマンドを当該装置が含まれるモジュール以外のモジュールに含まれるフォールト・トレラント・制御装置に含まれるＩ／Ｏ・インターフェース・ブリッジに向けて伝達する第２ロック・コマンド・伝達手段と、
前記ロック・コマンドを受けた、当該装置に含まれるＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第１のロック・コンプリーションを生成するロック・コンプリーション生成手段と、
を更に備え、
当該装置に含まれる前記Ｉ／Ｏ・インターフェース・ブリッジにおいて前記第１のロック・コンプリーションが生成され、且つ、当該装置が含まれるモジュール以外のモジュールに含まれる前記フォールト・トレラント・制御装置に含まれるＩ／Ｏ・インターフェース・ブリッジにおいて前記第２のロック・コンプリーションが生成されたならば、前記リセット要求信号生成手段は、前記リセット要求信号を生成することを特徴とする装置。
【請求項１３】
請求項１１に記載の装置において、
前記第１遅延手段で遅延された前記第１のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、当該装置が含まれるモジュールに含まれるメイン・メモリをリフレッシュするリフレッシュ手段を更に備えることを特徴とする装置。
【請求項１４】
請求項１１に記載の装置において、
当該装置が含まれるモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと当該装置が含まれるモジュール以外のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断する一致判断手段と、
両コマンドが一致しない場合に、当該装置が含まれるモジュールに含まれる前記少なくとも１つのＣＰＵを再度リセットする再リセット手段と、
を更に備えることを特徴とする装置。
【請求項１５】
請求項１４に記載の装置において、
前記コマンドを当該装置が含まれるモジュール以外のモジュールから当該装置が含まれるモジュールに伝達するのに要する時間だけ、当該装置が含まれるモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを遅延させる第２遅延手段を更に備え、
前記一致判断手段は、当該装置が含まれるモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって前記第２遅延手段により遅延されたものと当該装置が含まれるモジュール以外のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって伝達されたものとが一致するか否かを判断することを特徴とする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のモジュールを備えるフォールト・トレラント・コンピュータをリセットするためのフォールト・トレラント・コンピュータ・リセット方法及びフォールト・トレラント・コンピュータ・リセット・システムに関する。
【背景技術】
【０００２】
高度な信頼性を提供するコンピュータとして、フォールト・トレラント・コンピュータがある。フォールト・トレラント・コンピュータは、システムを構成するハードウェア・モジュールを二重化、または多重化し、各々全てのモジュールを同期動作させ、たとえある部位で故障が発生したとしても、該モジュールを切り離し、正常なモジュールで処理を続行することにより、耐故障性を向上させたコンピュータである。
【０００３】
フォールト・トレラント・コンピュータの基本構成は、ＣＰＵやメモリ、Ｉ／Ｏ・デバイスといった二重化、三重化されるハードウェア・モジュールと、これらモジュールと接続され、同期動作処理、故障時の切り替え制御などを行うフォールト・トレラント制御部（以下、「ＦＴ制御部」という。）からなる。一例としてＣＰＵ、メモリ、Ｉ／Ｏ・デバイスを二重化したシステムを図１に示す。この図ではＣＰＵ（群）９０１とメイン・メモリ９０２が一つのＣＰＵ・サブシステム９０３−１を構成し、これと全く同じ構成の、もう一つのＣＰＵ・サブシステム９０３−２により二重化されている。同様に、同一構成のＩ／Ｏ・デバイス（群）も二重化されＩ／Ｏ・サブシステム９０４を構成する。ＦＴ制御部はそれらの中心に位置し、各々のモジュール（ＣＰＵ・サブシステム９０３−１、９０３−２、Ｉ／Ｏ・サブシステム９０４）を制御し、ＣＰＵ・サブシステム９０３−１、９０３−２の両系同期動作の維持、故障の検出と、故障モジュールの切り離し制御を行う。
【０００４】
一般的に、フォールト・トレラント・コンピュータは各モジュールをハードウェアで二重化制御する部分と、ソフトウェアで二重化制御する部分とに分かれる。
【０００５】
例えば、ＣＰＵ及びメモリといった、ＣＰＵ・サブシステムはそれ自身ソフトウェアが動作する基盤であり、これらはハードウェアで二重化制御する必要がある。このためＣＰＵ・サブシステム内でエラーが発生した場合、ハードウェア（ＦＴ制御部）が該当ＣＰＵ及びメモリをシステムから切り離し、正常動作しているＣＰＵ及びメモリに影響を及ぼさないように制御を行う。
【０００６】
図１では２個のＣＰＵ・サブシステム９０３−１、９０３−２が存在するが、故障した側はＦＴ制御部で論理的に切り離され、１個のＣＰＵ・サブシステム９０３−１（又は９０３−２）とＩ／Ｏ・サブシステム９０４で動作を継続する。
【０００７】
一方、Ｉ／Ｏ・デバイスの故障の場合、それを検出したＦＴ制御部が、Ｉ／Ｏ・デバイスを制御しているソフトウェア（以下、「Ｉ／Ｏ・デバイス・ドライバ」という。）に対し、エラー通知を行うことで、Ｉ／Ｏ・デバイスの切り替えをソフトウェアで行うことが可能である。この場合、Ｉ／Ｏ・デバイス・ドライバは故障したＩ／Ｏ・デバイスの使用を中止し、代わって二重化されている別のＩ／Ｏ・デバイスを使用することになる。
【０００８】
これらはＩ／Ｏ・サブシステム９０４内での、使用Ｉ／Ｏ・デバイス９０５の切り替えとなる。
【０００９】
フォールト・トレラント・コンピュータのＣＰＵ・サブシステム９０３−１、９０３−２は、全く同一のクロックで動作する必要があり、また、ＣＰＵの動作を開始するためのリセット解除のタイミングの同一性を図ることも重要である。
【００１０】
従来の手法、例えば特許文献１「コンピュータシステムの再同期リセット処理方法」では、双方のプロセッサに接続されている系間同期部が同時にＣＰＵへリセットを発行することが記載されている。
【特許文献１】特開平９−１２８２５８号公報
【特許文献２】特開平７−０７３０５９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
特許文献１に記載されているシステムでは一つの系間制御部がリセットを発行するため、複数のＣＰＵへ同時にリセットを発行することは容易であるが、これにより系間同期部が１つしかないため、これが故障した場合、システムが起動しなく恐れがある。特に系間制御部を二重化した場合については触れられていないため、どのようにＣＰＵへ同時にリセットを発行するのかも触れられてはいない。
【００１２】
またその他の文献においても複数のＣＰＵへの同期リセット制御に関して詳細に触れたものは少ない。その理由として、ＣＰＵの同期手法はリセットが起点ではなく、例えば、特許文献２のように、割り込みの同期性を起点に求めているからである。例えば従来多く用いられる方法としては、ＣＰＵ上で動作するオペレーティングシステムやシステム・ソフトがあるチェック・ポイントで停止し、同期制御部から入力されるインターラプトなどを契機に同期動作を開始するというものがある。
【００１３】
しかしこの方法は、ＣＰＵの内部状態を完璧に把握し、チェック・ポイントで停止した時点でＣＰＵの内部状態が全く同一であることを保証しなければならない。さもなければ、例え同時に割り込みがＣＰＵに印加されたとしても、膨大なＣＰＵの内部論理が全く同じ状態で保たれているとは限らず、その後の動作の同期性は保証しきれない。
【００１４】
つまり、オペレーティングシステムやシステム・ソフトウェアにより、ＣＰＵが割り込み待ちのためのループ処理を行っている場合においても、外部から見ればＣＰＵ停止状態であっても、依然としてＣＰＵはオペレーティングシステム及びシステム・ソフトウェアのループ命令の処理、インターラプト待ちのためのシステム・バス監視などなど、多くの論理が動作しているからである。また、ＣＰＵ内部では、高速化のために予測処理を行うが、各ＣＰＵ毎に予測内容が異なることも生じうる。更に、メインメモリのリフレッシュのタイミング或いはリフレッシュアドレスがＣＰＵサブシステム間で異なるだけでも、各ＣＰＵ毎に内部の状態が異なる場合も生じうる。
【００１５】
旧式のＣＰＵでは割り込みを起点とした同期方法は有効かもしれないが、近年のＣＰＵの内部論理は巨大化、複雑化を増しており、一旦動作を開始したＣＰＵがソフトウェアによって全く同一の状態に遷移させることは事実上不可能となっている。従ってこの問題を解決するには、ＣＰＵ内部の全論理をリセットする、リセット信号を完全に同期化してＣＰＵへ入力する以外に方法はない。
【００１６】
そこで、本発明は、フォールト・トレラント・コンピュータをモジュール間で完全に同期してリセットすることを可能とするフォールト・トレラント・コンピュータ・リセット方法及びフォールト・トレラント・コンピュータ・リセット・システムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明によれば、複数のモジュールを備えるフォールト・トレラント・コンピュータをリセットするための方法であって、何れか１つのモジュールでリセット要求信号を生成するステップと、前記リセット要求信号を第１のリセット要求信号と第２のリセット信号に分岐させるステップと、前記第２のリセット要求信号を他のモジュールに伝達するステップと、前記第２のリセット要求信号を他のモジュールに伝達するのに要する時間だけ、前記第１のリセット要求信号を前記１つのモジュール内で遅延させるステップと、前記１つのモジュール内で遅延された前記第１のリセット要求信号を基に生成された第１のＣＰＵリセット信号で前記１つのモジュールに含まれる少なくとも１つのＣＰＵをリセットするステップと、前記他のモジュールに伝達された前記第２のリセット要求信号を基に生成された第２のＣＰＵリセット信号で前記他のモジュールに含まれる少なくとも１つのＣＰＵをリセットするステップと、を備えることを特徴とする方法が提供される。
【００１８】
上記の方法において、前記１つのモジュールにおいて、ロック・コマンドを生成するステップと、前記ロック・コマンドを前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジに伝達するステップと、前記ロック・コマンドを前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジに伝達するステップと、前記ロック・コマンドを受けた前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第１のロック・コンプリーションを生成するステップと、前記ロック・コマンドを受けた前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第２のロック・コンプリーションを生成するステップと、を更に備え、前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて前記第１のロック・コンプリーションが生成され、且つ、前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて前記第２のロック・コンプリーションが生成されたならば、前記リセット要求信号を生成するようにしてもよい。
【００１９】
上記の方法において、前記１つのモジュール内で遅延された前記第１のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、前記１つのモジュールのメイン・メモリをリフレッシュするステップと、
前記他のモジュールに伝達された前記第２のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、前記他のモジュールのメイン・メモリをリフレッシュするステップと、を更に備えるようにしてもよい。
【００２０】
上記の方法において、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断するステップと、両コマンドが一致しない場合に、前記１つのモジュールに含まれる前記少なくとも１つのＣＰＵ及び前記他のモジュールに含まれる前記少なくとも１つのＣＰＵを再度リセットするステップと、を更に備えるようにしてもよい。
【００２１】
上記の方法において、前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを前記１つのモジュールに伝達するステップと、前記コマンドを前記他のモジュールから前記１つのモジュールに伝達するのに要する時間だけ、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを遅延させるステップと、を更に備え、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断するステップでは、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって遅延されたものと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって伝達されたものとが一致するか否かを判断するようにしてもよい。
【００２２】
本発明の第２の観点によれば、複数のモジュールを備えるフォールト・トレラント・コンピュータをリセットするためのシステムであって、何れか１つのモジュールでリセット要求信号を生成する手段と、前記リセット要求信号を第１のリセット要求信号と第２のリセット信号に分岐させる手段と、前記第２のリセット要求信号を他のモジュールに伝達する手段と、前記第２のリセット要求信号を他のモジュールに伝達するのに要する時間だけ、前記第１のリセット要求信号を前記１つのモジュール内で遅延させる手段と、前記１つのモジュール内で遅延された前記第１のリセット要求信号を基に生成された第１のＣＰＵリセット信号で前記１つのモジュールに含まれる少なくとも１つのＣＰＵをリセットする手段と、前記他のモジュールに伝達された前記第２のリセット要求信号を基に生成された第２のＣＰＵリセット信号で前記他のモジュールに含まれる少なくとも１つのＣＰＵをリセットする手段と、を備えることを特徴とするシステムが提供される。
【００２３】
上記のシステムにおいて、前記１つのモジュールにおいて、ロック・コマンドを生成する手段と、前記ロック・コマンドを前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジに伝達する手段と、前記ロック・コマンドを前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジに伝達する手段と、前記ロック・コマンドを受けた前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第１のロック・コンプリーションを生成する手段と、前記ロック・コマンドを受けた前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第２のロック・コンプリーションを生成する手段と、を更に備え、前記１つのモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて前記第１のロック・コンプリーションが生成され、且つ、前記他のモジュールのＩ／Ｏ・インターフェース・ブリッジにおいて前記第２のロック・コンプリーションが生成されたならば、前記リセット要求信号を生成するようにしてもよい。
上記のシステムにおいて、前記１つのモジュール内で遅延された前記第１のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、前記１つのモジュールのメイン・メモリをリフレッシュする手段と、前記他のモジュールに伝達された前記第２のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、前記他のモジュールのメイン・メモリをリフレッシュする手段と、を更に備えるようにしてもよい。
【００２４】
上記のシステムにおいて、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断する手段と、両コマンドが一致しない場合に、前記１つのモジュールに含まれる前記少なくとも１つのＣＰＵ及び前記他のモジュールに含まれる前記少なくとも１つのＣＰＵを再度リセットする手段と、を更に備えるようにしてもよい。
【００２５】
上記のシステムにおいて、前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを前記１つのモジュールに伝達する手段と、前記コマンドを前記他のモジュールから前記１つのモジュールに伝達するのに要する時間だけ、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを遅延させる手段と、を更に備え、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断する手段は、前記１つのモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって遅延されたものと前記他のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって伝達されたものとが一致するか否かを判断するようにしてもよい。
【００２６】
本発明の第３の観点によれば、複数のモジュールを備えるフォールト・トレラント・コンピュータで利用されるフォールト・トレラント・制御装置であって、リセット要求信号を生成するリセット要求信号生成手段と、前記リセット要求信号を第１のリセット要求信号と第２のリセット信号に分岐させる分岐手段と、前記第２のリセット要求信号を当該装置が含まれるモジュール以外のモジュールに含まれるフォールト・トレラント・制御装置に向けて伝達する伝達手段と、前記第２のリセット要求信号を当該装置が含まれるモジュール以外のモジュールに含まれるフォールト・トレラント・制御装置に伝達するのに要する時間だけ、前記第１のリセット要求信号を遅延させる第１遅延手段と、遅延された前記第１のリセット要求信号を基に生成された第１のＣＰＵリセット信号で当該装置が含まれるモジュールに含まれる少なくとも１つのＣＰＵをリセットするＣＰＵリセット手段と、を備えることを特徴とする装置が提供される。
【００２７】
上記の装置において、ロック・コマンドを生成するロック・コマンド生成手段と、前記ロック・コマンドを当該装置に含まれるＩ／Ｏ・インターフェース・ブリッジに伝達する第１ロック・コマンド・伝達手段と、前記ロック・コマンドを当該装置が含まれるモジュール以外のモジュールに含まれるフォールト・トレラント・制御装置に含まれるＩ／Ｏ・インターフェース・ブリッジに向けて伝達する第２ロック・コマンド・伝達手段と、前記ロック・コマンドを受けた、当該装置に含まれるＩ／Ｏ・インターフェース・ブリッジにおいて、インバウンド・リクエストをロックすると共に、前記ロック・コマンドを受ける前の全てのノン・ポスティド・アウトバウンド・リクエストに対応するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションの返信が完了したならば、第１のロック・コンプリーションを生成するロック・コンプリーション生成手段と、を更に備え、当該装置に含まれる前記Ｉ／Ｏ・インターフェース・ブリッジにおいて前記第１のロック・コンプリーションが生成され、且つ、当該装置が含まれるモジュール以外のモジュールに含まれる前記フォールト・トレラント・制御装置に含まれるＩ／Ｏ・インターフェース・ブリッジにおいて前記第２のロック・コンプリーションが生成されたならば、前記リセット要求信号生成手段は、前記リセット要求信号を生成するようにしてもよい。
【００２８】
上記の装置において、前記第１遅延手段で遅延された前記第１のリセット要求信号を基に生成されたリフレッシュ・コマンド及びリフレッシュ・カウンタ・リセット信号で、当該装置が含まれるモジュールに含まれるメイン・メモリをリフレッシュするリフレッシュ手段を更に備えるようにしてもよい。
【００２９】
上記の装置において、当該装置が含まれるモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドと当該装置が含まれるモジュール以外のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドとが一致するか否かを判断する一致判断手段と、両コマンドが一致しない場合に、当該装置が含まれるモジュールに含まれる前記少なくとも１つのＣＰＵを再度リセットする再リセット手段と、を更に備えるようにしてもよい。
【００３０】
上記の装置において、前記コマンドを当該装置が含まれるモジュール以外のモジュールから当該装置が含まれるモジュールに伝達するのに要する時間だけ、当該装置が含まれるモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドを遅延させる第２遅延手段を更に備え、前記一致判断手段は、当該装置が含まれるモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって前記第２遅延手段により遅延されたものと当該装置が含まれるモジュール以外のモジュールに含まれる前記少なくとも１つのリセットされたＣＰＵが発行するコマンドであって伝達されたものとが一致するか否かを判断するようにしてもよい。
【発明の効果】
【００３１】
本発明によれば、第２のリセット要求信号を他のモジュールに伝達するのに要する時間だけ、第１のリセット要求信号を１つのモジュール内で遅延させるので、１つのモジュールに含まれる少なくとも１つのＣＰＵを他のモジュールに含まれる少なくとも１つのＣＰＵと同時にリセットすることが可能となる。
【発明を実施するための最良の形態】
【００３２】
以下、図面を参照して本発明を実施するための最良の形態について詳細に説明する。
【００３３】
本発明のＣＰＵリセット方法及びＣＰＵリセットシステムは、フォールト・トレラント・コンピュータ・システムにおいて、多重化されたＣＰＵ・サブシステムのリセット信号を完全に同期してＣＰＵへ入力することにより各系のＣＰＵの同期動作を保証するものである。また、近年のＣＰＵのリセットはクロックと同期しない非同期リセットを採用しているものが多く、場合によっては、クロック・ベースで同期的にリセットを入力したとしても、ＣＰＵの完全同期に至らない場合がある。この場合に備え、リセット解除後近傍のＣＰＵからのリクエストを監視し、タイミングにずれを検出した場合は、直ちに再度リセットを入力し、同期性を高める機構を持つ。
【００３４】
さらにこれらリセット制御装置はＣＰＵ・サブシステム毎に存在しており、対故障性を強めた構成とすることが可能となっている。
【００３５】
図２に本発明の実施形態によるフォールト・トレラント・コンピュータ・リセット方法及びフォールト・トレラント・コンピュータ・リセットシステムを実現するフォールト・トレラント・コンピュータの基本構成図を示す。
【００３６】
図２のフォールト・トレラント・コンピュータは二重化システムであり、便宜的にプライマリ／セカンダリと区分けして呼ぶ。装置としては、故障個所の交換を可能とするため、プライマリ／セカンダリは別々のボードで構成される。
【００３７】
ＣＰＵ・サブシステム１２１はＣＰＵ群（ＣＰＵ１０１−１及びＣＰＵ１０１−２を含む）、メイン・メモリ１０２−１、１０２−２、ＦＴ制御部１０３−１、１０３−２のうちのリセット制御部を含む上半分の部分を備え、プライマリ／セカンダリでクロックも含め完全に同期して動作する。ＦＴ制御部１０３は、インテル（登録商標）・アーキテクチャでいうノース・ブリッジの機能部にフォールト・トレラント・コンピュータ・システムを実現するための機能部を追加したものである。
【００３８】
Ｉ／Ｏ・サブシステム１２２もプライマリ／セカンダリに分かれるが、両者は同じ構成を有する。また、Ｉ／Ｏ・サブシステム１２２は、Ｉ／Ｏ・デバイス群からなる。図２には、プライマリ側のＩ／Ｏ・デバイス群がＩ／Ｏ・デバイス１０５−１−１、１０５−１−２を備え、セカンダリ側のＩ／Ｏ・デバイス群がＩ／Ｏ・デバイス１０５−２−１、１０５−２−２を備える例を示している。各Ｉ／Ｏ・デバイスは同期動作はしておらず、両Ｉ／Ｏ・デバイス群とも故障の際は、ソフトウェアによって使用デバイスが切り替えられる。
【００３９】
ＦＴ制御部１０３−１とＦＴ制御部１０３−２との間には、Ｉ／Ｏ・ＦＴ−リンク１１１−１、１１１−２が張られている。Ｉ／Ｏ・ＦＴ−リンク１１１−１は、主に、プライマリ側のＣＰＵサブシステムからセカンダリ側のＩ／Ｏ・デバイスにアクセスするためのものであり、Ｉ／Ｏ・ＦＴ−リンク１１１−２は、主に、セカンダリ側のＣＰＵサブシステムからプライマリ側のＩ／Ｏ・デバイスにアクセスするためのものであるが、これらは、他の用途にも用いられる。
【００４０】
これにより、ＦＴ制御部＃１（１０３−１）から配下のＩ／Ｏ・デバイス＃１ａ、ｂ（１０５−１−１、１０５−１−２）に対するアクセスのみフォワードされ、両系のＩ／Ｏ・アクセスの同期チェックもＩ／Ｏ・コンパレータ２０８−１（図４参照）にフォワードされるＩ／Ｏ・アクセスの範囲に限られる。同様にＦＴ制御部＃２（１０３−２）はＩ／Ｏ・コンパレータ２０８−２配下のＩ／Ｏ・デバイス＃２ａ、ｂ（１０５−２−１、１０５−２−２）に対するアクセスの同期チェックを受け持つことになる。
【００４１】
したがって、本システムではＩ／Ｏ・アクセスの同期チェックはプライマリ系、セカンダリ系の間で分散的に行われることになる。
【００４２】
図３は、図２のシステムでの一方のＣＰＵからの観点で、システムを図式化したものである。ＣＰＵ・サブシステムは二重化されているが、Ｉ／Ｏ・サブシステムは各デバイスごとにソフトウェアで二重化されるため、図のような構成として見える
ＦＴ制御部１０３−１にはＩ／Ｏ・インターフェース・ブリッジ２１０−１が内蔵されており、ＦＴ制御部１０３−２にはＩ／Ｏ・インターフェース・ブリッジ２１０−２が内蔵されている。プライマリ系のＣＰＵ１０１−１は、セカンダリ系のＩ／Ｏ・インターフェース・ブリッジ２１０−２には、Ｉ／Ｏ・ＦＴ・リンク１１１−１を介してアクセスし、セカンダリ系のＣＰＵ１０１−２は、プライマリ系のＩ／Ｏ・インターフェース・ブリッジ２１０−１には、Ｉ／Ｏ・ＦＴ・リンク１１１−２を介してアクセスする。
【００４３】
図４はＦＴ制御部１０３−１、１０３−２内の詳細図である。図４を参照して、プライマリ系を基準として説明を行うが、各部のサフィックス「−１」を「−２」に変更し、各部のサフィックス「−２」を「−１」に変更することにより、セカンダリ系を基準とした場合の説明とすることができる。
【００４４】
システム・バス・コントローラ２０１−１はシステム・バス２０２−１を介してＣＰＵ１０１−１からのリクエストに関連した制御を行う。受信したリクエストはルータ２０３−１へ送られる。また、Ｉ／Ｏ・デバイス１０５−１からのインバウンド・リクエスト(inbound request)や、アウトバウンド・リクエスト(outbound request)に対するコンプリーションはルータ２０３−１から受け付け、ＣＰＵ１０１−１へ返す。ここで、一般的にＣＰＵからＩ／Ｏ・デバイスへ向かうリクエストをアウトバウンド・リクエストと呼び、Ｉ／Ｏ・デバイスからＣＰＵ／メモリへ向かうリクエストをインバウンド・リクエストと呼ぶ。リード等のノン・ポスティド(non-posted)系リクエストに対し、その結果としてデータなどを伴う返事をコンプリーションと呼び、アウトバウンド・リクエストに対するコンプリーションをアウトバウンド・リクエスト・コンプリーション、インバウンド・リクエストに対するコンプリーションをインバウンド・リクエスト・コンプリーションと呼ぶことにする。
【００４５】
リセット・コントローラ２０４−１はルータ２０３−１からの指示で、ＣＰＵ１０１−１へのリセット信号の供給を行う他、メモリ・コントローラ２０５−１に対する同期リセット指示を行う。
【００４６】
メモリ・コントローラ２０５−１はルータ２０３−１からルーティングされたメモリ・リクエストを基に、メイン・メモリ１０２−１に対するリクエストの発行を含むＤＲＡＭ制御を行う。また、リセット・コントローラ２０４−１からの同期リセット指示により、即時ＤＲＡＭリフレッシュと、リフレッシュ・カウンタのクリアを行う。
【００４７】
同期コマンド・ジェネレータ２０６−１はＦＴ制御部１０３−１の内部のＩ／Ｏ・デバイスであり、ＣＰＵ１０１−１からの指示により、特殊なコマンドをインバウンド・リクエストとして発行する。
【００４８】
同期コマンド・ジェネレータ２０６−１は、ＣＰＵの同期リセット・コマンドの発行も行う。
【００４９】
ルータ２０３−１はＦＴ制御部１０３−１の内部を通過するリクエスト及びコンプリーションのルーティングを行う。各リクエスタからリクエストを受け取ると、そのリクエストに記述されているアドレスからルーティング先を決定し、決定されたルーティング先にそのリクエストを渡す処理を行う。
【００５０】
ルーティング先としては、メイン・メモリ１０２−１、ＣＰＵ１０１−１、ローカル（自ＦＴ制御部１０３−１内の）Ｉ／Ｏ・インターフェース・ブリッジ２０７−１、リモート（反対側のＦＴ制御部１０３−２内の）Ｉ／Ｏ・インターフェース・ブリッジ２０７−２、同期コマンド・ジェネレータ２０６−１、リセット・コントローラ２０４−１がある。
【００５１】
リクエスト及びコンプリーションは同期化しやすいようにアドレス／コマンド／データを一まとめにし、パケット化されてＦＴ制御部１０３−１の内部及びＩ／Ｏ・ＦＴ−リンク１１１−１の内部を経由する。以後、リクエスト及びコンプリーションを単純にパケットと呼ぶ。
【００５２】
ルータ２０３−１は全て共通したフォーマットのパケットを受け付ける仕組みとなっており、各リクエスト又はコンプリーションのパケット化はシステム・バス・コントローラ２０１−１、メモリ・コントローラ２０５−１、Ｉ／Ｏ・インターフェース・ブリッジ２０７−１、同期コマンド・ジェネレータ２０６−１、ＬＯＢ／ＲＩＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２０８−１、ＬＯＢ／ＲＩＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２０９−１等のコントローラで行われる。なお、ここで、ＬＯＢは、ローカル・アウトバウンド・リクエストの略称であり、ＲＩＢは、リモート・インバウンド・リクエストの略称である。
【００５３】
アウトバウンド・リクエストがローカル・Ｉ／Ｏ・インターフェース・ブリッジ２０７−１へルーティングされる場合、ルータ２０３−１は自Ｉ／Ｏ・コンパレータ２０８−１へリクエストをルーティングする。
【００５４】
アウトバウンド・リクエストがリモート・Ｉ／Ｏ・インターフェース・ブリッジ２０７−２へルーティングされる場合、ＬＯＢ／ＲＩＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２０９−１へリクエストが渡され、さらにリモート側のＲＯＢ／ＬＩＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０−２を経由してリモート・Ｉ／Ｏ・インターフェース・ブリッジ２０７−２へリクエストが渡る。
【００５５】
各Ｉ／Ｏ・デバイス１０５−１からのインバウンド・リクエストはＩ／Ｏ・インターフェース・ブリッジ２０７−１及びＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０−１を経由してローカル・ルータ２０３−１、リモート・ルータ２０３−２又はその双方へ渡される。
【００５６】
なお、ローカル・ルータ２０３−１及びリモート・ルータ２０３−２へのルーティングはプライマリ系及びセカンダリ系が同期状態か非同期状態かにより異なる。
【００５７】
図５はＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０−１の内部の詳細図である。ＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０−２は、ＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０−１と同様なものであるが、ここでは、ＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０−１を例に取り説明する。
【００５８】
リモート側から受信したパケットはＦＴ−リンク・入力・コントローラ２２１で受信されデコーダ２２２でリクエスト／コンプリーション判断のためにデコードされる。
【００５９】
リモート側から受信したパケットは、アウトバウンド・リクエスト又はインバウンド・リクエスト・コンプリーションと判断された場合、Ｉ／Ｏ・コンパレータ２０８−１に渡され、最終的にはＩ／Ｏ・インターフェース・ブリッジ２０７−１を経由して各Ｉ／Ｏ・デバイス１０５−１にフォワードされる。
【００６０】
また、リモート側から受信したパケットは、インバウンド・リクエスト又はアウトバウンド・リクエスト・コンプリーションと判断された場合、ルータ２０３に渡され、最終的には、ＣＰＵ・サブシステム１２１内のデバイスである、ＣＰＵ１０１−１、メイン・メモリ１０２−１、リセット・コントローラ２０４−１の何れかにフォワードされる。
【００６１】
内部からのインバウンド・リクエストまたはアウトバウンド・リクエスト・コンプリーションのルーティングは３通りが考えられる。
【００６２】
（１）プライマリ系とセカンダリ系が完全同期しており、インバウンド・リクエストまたはアウトバウンド・リクエスト・コンプリーションを両方のＣＰＵ・サブシステムにフォワードする。
【００６３】
（２）プライマリ系とセカンダリ系は同期しておらず、自ＦＴ制御部１０３−１に接続されるＣＰＵ・サブシステムがアクティブ側であり、他ＦＴ制御部１０３−２に接続されるＣＰＵ・サブシステムがスタンバイ側であり、ローカルのＩ／Ｏ・インターフェース・ブリッジ２０７−１及びリモートのＩ／Ｏ・インターフェース・ブリッジ２０７−２からのリクエスト又はコンプリーションは自ＣＰＵ・サブシステムのみにフォワードする。
【００６４】
（３）プライマリ系とセカンダリ系は同期しておらず、自ＦＴ制御部１０３−１に接続されるＣＰＵ・サブシステムがスタンバイ側であり、他ＦＴ制御部１０３−２に接続されるＣＰＵ・サブシステムがアクティブ側であり、ローカルのＩ／Ｏ・インターフェース・ブリッジ２０７−１及びリモートのＩ／Ｏ・インターフェース・ブリッジ２０７−２からのリクエスト又はコンプリーションはリモート側のＣＰＵ・サブシステムのみにフォワードする。
【００６５】
これらの状態は、アクティブ／スタンバイ・レジスタ２２３と同期／非同期・状態・レジスタ２２４に設定される。
【００６６】
両系が完全状態の（１）の場合は、Ｉ／Ｏ・デバイス１０５−２からのリクエスト又はコンプリーションは、アービタ２２５を通過後、ディレイ・コントローラ２２６とＦＴ−リンク・出力・コントローラ２２７の双方に渡される。結果的に、Ｉ／Ｏ・デバイス１０５−２からのリクエスト又はコンプリーションは双方のＦＴ制御部１０３−１、１０３−２のルータ２０３−１、２０３−２に渡される。但し、フォールト・トレラント・コンピュータゆえ、ルータ２０３−１、２０３−２を含むＣＰＵ・サブシステムは完全に同期しており、Ｉ／Ｏ・デバイス１０５−２からのリクエスト又はコンプリーションも完全同期してルータ２０３−１、２０３−２に渡る必要がある。
【００６７】
他系へのパケットのフォワードはＩ／Ｏ・ＦＴ−リンク１１１−２を介するため、ある程度のタイムラグが発生する。このために、自系のルータ２０３−１へパケットが渡る場合は、ディレイ・コントローラ２２６を介することになる。このタイムラグのことをフライト・タイムという。
【００６８】
ＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２０９は、ＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０の構成要素のうち、ＦＴ−リンク・入力・コントローラ２２１とＦＴ−リンク・出力・コントローラ２２７のみを含む。
【００６９】
図６はディレイ・コントローラの詳細図である。
【００７０】
アービタ２２５を通過したリクエスト及びコンプリーションのパケットは毎クロックごとにシフトするＦＩＦＯ構成のシフトレジスタ２３１に格納される。
【００７１】
スイッチ２３３は、シフトレジスタ２３１の複数のノードのうちのＩ／Ｏ・ＦＴ−リンク・フライト・タイム・レジスタ２３２に格納されたフライト・タイムに対応したノードからのリクエスト又はコンプリーションを選択して、ルータ２０３−１へ渡す。
【００７２】
つまり、ルータ２０３−１へ渡されるリクエスト又はコンプリーションは、Ｉ／Ｏ・ＦＴ−リンク１１１−２を介してルータ２０３−２へ渡されるリクエスト又はコンプリーションと同一の時間（フライト・タイム）だけ遅延される。
【００７３】
なお、フライト・タイムは、実装に依存するが、例えば、工場出荷時に、実装状態でフライト・タイムを測定し、測定されたフライト・タイムを所定の領域（ＥＥＰＲＯＭ等）に格納しておき、システム起動時にＩ／Ｏ・ＦＴ−リンク・フライト・タイム・レジスタ２３２に設定される。
【００７４】
以上の機能により、同期状態では、インバウンド・リクエスト又はアウトバウンド・リクエスト・コンプリーションのパケットが完全に同一タイミングでルータ２０３−１、２０３−２に渡ることになる。
【００７５】
仮にフライト・タイムが４Ｔだった場合のパケットのタイミング・チャートを図７に示す。なお、ローカル・ＦＴ−リンク・出力・コントローラ２２７から出力されたパケットは、リモート・ＦＴ−リンク・入力・コントローラ２２２で、クロックと同期するので、フライト・タイムは、クロック周期Ｔの整数倍である。
【００７６】
プライマリ系とセカンダリ系が非同期状態であり、プライマリ系がアクティブである（２）の場合、図５の符号２２８に示す通り、パケットはアービタ２２５から直接ルータ２０３へフォワードされ、ＦＴ−リンク・出力・コントローラ２２７には渡されない。
【００７７】
逆に、プライマリ系とセカンダリ系が非同期状態であり、セカンダリ系がアクティブである（３）の場合、自系のＣＰＵ・サブシステムはスタンバイ状態としてシステムから切り離された状態であるため、ＦＴ−リンク・出力・コントローラ２２７のみにパケットをフォワードする。
【００７８】
図４に示すＣＰＵ・コンパレータ２１２−１、２１２−２はお互いのＣＰＵ・サブシステム間をＣＰＵ・ＦＴ−リンク２１３で接続し、ＣＰＵの発行するリクエスト情報をお互いに送受信し、同期性をチェックする部分である。図８にその詳細を示す。
【００７９】
ＣＰＵコンパレータ２１２は、Ｉ／Ｏ・ＦＴ−リンクの同期性を維持するディレイ・コントローラ（シフトレジスタ２３１、Ｉ／Ｏ・ＦＴ−リンク・フライト・タイム・レジスタ２３２及びスイッチ２３３を備える。）と同様な、ディレイコントローラ（シフトレジスタ２４１、ＣＰＵ・ＦＴ−リンク・フライト・タイム・レジスタ２４２及びスイッチ２４３を備える。）を備える。自系のＣＰＵ１０１−１のコマンドは、１クロックごとにシフトを行うＦＩＦＯ構成のシフトレジスタ２４１に積まれ、ＣＰＵ・ＦＴ−リンク・フライト・タイム・レジスタ２４２に設定されたタイミングでシフトレジスタ２４１からスイッチ２４３により取り出され、チェッカ２４４に渡される。
【００８０】
なお、このフライト・タイムも、実装に依存するが、例えば、工場出荷時に、実装状態でフライト・タイムを測定し、測定されたフライト・タイムを所定の領域（ＥＥＰＲＯＭ等）に格納しておき、システム起動時にＣＰＵ・ＦＴ−リンク・フライト・タイム・レジスタ２４２に設定される。
【００８１】
チェッカ２４４はＣＰＵ・ＦＴ−リンク２１３を経由してリモート系のＣＰＵコマンドも受け取っている。チェッカ２４４は、プライマリ系とセカンダリ系で、同一タイミングで同一のＣＰＵコマンドが発行されたかを監視する。
【００８２】
この機能は主に、ＣＰＵ・リセット解除直後のＣＰＵの同期性を確認するために使用され、リセット解除によるＣＰＵの同期化が失敗したことがチェッカ２４４により確認された場合は、失敗の旨を直ちにローカルのリセット・コントローラ２０４へ通知し、再度ＣＰＵをリセットするよう促す。
【００８３】
Ｉ／Ｏ・インターフェース・ブリッジ２０７−１は、パケットを下位のＩ／Ｏ・インターフェースにフォワードする機能、または下位のＩ／Ｏ・デバイス１０５−１からのリクエスト又はコンプリーションをパケット化してＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０−１へフォワードする機能を持つ。
【００８４】
両系をＣＰＵ１０１−１、１０１−２のリセットで同期化する場合、Ｉ／Ｏ・デバイス１０５−１−１、１０５−１−２、１０５−２−１、１０５−２−２を一旦停止させる必要がある。
【００８５】
例えば、ＣＰＵ１０１−１、１０１−２のリセット中にＩ／Ｏ・デバイス１０５−１−１からのインターラプトやＤＭＡが発生した場合、ＣＰＵ１０１−１、１０１−２はそれらに対応できないからである。但し、停止時間は短く抑える必要がある。長時間に渡るシステムの停止は、サービスの停止を意味し、ユーザーに不利益を与えるからである。
【００８６】
ＣＰＵ１０１−１、１０１−２に対してはシステム・マネジメント・インターラプト・ハンドラ（ＳＭＩ・ハンドラ）など、オペレーティングシステムより上位に位置する、システム・ソフトウェアを呼び出し、オペレーティングシステムを一時的に停止させることが可能である。また、同期処理のための制御も割込コントローラ２２１―１、２１１−２が発生するＳＭＩで呼び出されるシステム・ソフトウェアで行われる。
【００８７】
しかし、各Ｉ／Ｏ・デバイス１０５の素性を知らぬシステム・ソフトウェアは、Ｉ／Ｏ・デバイス１０５を制御することは出来ないため、Ｉ／Ｏ・デバイス１０５は停止させることはできない。
【００８８】
一般的にＩ／Ｏ・デバイス１０５の制御はオペレーティングシステムのインターフェースを介して各Ｉ／Ｏ・デバイス１０５毎に存在するＩ／Ｏ・デバイス・ドライバによって行われる。従ってＩ／Ｏ・デバイス１０５を停止させるためには、各Ｉ／Ｏ・デバイス１０５のドライバを呼び出し、逐一デバイスが停止するよう要請を出す必要がある。
【００８９】
また、同期完了後には再度同様に各Ｉ／Ｏ・デバイス１０５のドライバを呼び出して、デバイスの運用を開始する必要がある。
【００９０】
これは結果的に同期化のために、全てのサービスを止めることに等しく、長時間に渡りシステムが止まることを意味する。
【００９１】
これを避けるために、本システムではＩ／Ｏ・インターフェース・ブリッジ２０７に対し、ロック機能を持たせる。
【００９２】
Ｉ／Ｏ・インターフェース・ブリッジ２０７は各Ｉ／Ｏ・デバイス１０５に対して発行したノン・ポスティド・アウトバウンド・リクエスト（コンプリーションを必要とするリクエスト）を全て記憶し、コンプリーションが返り、それをパケット化して、ＬＯＢ／ＲＩＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０へ渡した時点で該当リクエストのクリアを行う。
【００９３】
アウトバウンド・リクエストとしてシステム・ソフトウェア実行中のＣＰＵ１０１からロックパケットを受信すると、Ｉ／Ｏ・インターフェース・ブリッジ２０７は全ての仕掛中のノン・ポスティド・リクエストが無くなった時点で、一切のインバウンド・リクエストを遮断し、ロック・コンプリーションをルータ２０３へ返す。
【００９４】
つまり、Ｉ／Ｏ・インターフェース・ブリッジ２０７がロックパケットを受信した後は、ロック・コンプリーションがＩ／Ｏインターフェース・ブリッジ２０７から送られる最後のインバウンドのパケットとなる。
【００９５】
これにより、Ｉ／Ｏ・インターフェース・ブリッジ２０７からのパケットは全て遮断され、結果的にＩ／Ｏ・デバイス１０５が一時停止した状態となる。
【００９６】
また、同期化後にはＢＩＯＳを実行中のＣＰＵ１０１からアンロック・コマンドを発行することにより、ロック状態が解除される。
【００９７】
これにより各Ｉ／Ｏ・デバイス１０５を停止処理させるわけではなく、リセット同期をしている期間だけＩ／Ｏ・インターフェースに蓋をするため、デバイス・ドライバを呼び出しての停止、起動を行う場合に比べ、大幅に時間を短縮することが可能となる。
【００９８】
図２のシステムにおいて、両系は非同期状態であり、プライマリ側がアクティブとなっており、オペレーティングシステムによるサービスが稼動している状態であると仮定する。またセカンダリ側はスタンバイであり、故障によるボードの交換などにより、ＣＰＵ１０１−２によるサービスが停止している状態と仮定する。
【００９９】
なお、既にＩ／Ｏ・ＦＴ−リンク１１１−１、１１１−２は既に稼動状態であり、アクティブ側からはスタンバイ側のＩ／Ｏ・デバイス１０５−２は利用できる状態となっていると仮定する。
【０１００】
この場合、同期／非同期・状態・レジスタ２２４は非同期を示す設定になっており、また、プライマリ側のアクティブ／スタンバイ・レジスタ２２３はアクティブに、セカンダリ側のアクティブ／スタンバイ・レジスタ２２３はスタンバイとなっている。
【０１０１】
従って、セカンダリ側のスタンバイ状態のＣＰＵ・サブシステムのルータ２０３−２にはアクティブ側から一切のパケットが到達せず、また、ルータ２０３−２もスタンバイ側からのアウトバウンド・リクエストの一切を遮断するため、論理的に切り離された状態となっている。
【０１０２】
この状態からプライマリ系及びセカンダリ系を同期動作させるための動作手順を図９乃至図１１を参照して以下に示す。
【０１０３】
スタンバイ側の同期化を行うため、オペレーティングシステムより上位のインターラプト（例えば，ＳＭＩ）でシステム・ソフトウェア（例えば、ＳＭＩハンドラ）がコールされる。この時点でオペレーティングシステムの動作は一旦中断される。
【０１０４】
システム・ソフトウェアを実行しているＣＰＵ１０１−１は、ルータ２０３−１に対し、ロック・コマンドの発行を要請する（図９の１）。
【０１０５】
ルータ２０３−１は、ローカル／リモート双方のＩ／Ｏ・インターフェース・ブリッジ２０７−１、２０７−２に対し、ロック・コマンドを発行する（図９の２）。
【０１０６】
これを受け取ったＩ／Ｏ・インターフェース・ブリッジ２０７−１、２０７−２は（図９の３）、仕掛中の全てのノン・ポスティド・アウトバウンド・リクエストに対するノン・ポスティド・アウトバウンド・リクエスト・コンプリーションを返すと同時に、Ｉ／Ｏ・デバイス１０５−１、１０５−２からの全てのインバウンド・リクエストをロックする。そして、Ｉ／Ｏ・インターフェース・ブリッジ２０７−１、２０７−２は、最後のノン・ポスティド・アウトバウンド・リクエスト・コンプリーションを返したならば、ロック・コンプリーションを返す（図１０の４）。
【０１０７】
ルータ２０３−１は、両方のＩ／Ｏ・インターフェース・ブリッジ２０７−１、２０７−２からロック・コンプリーションが返されたことを確認し（図１０の５）、ＣＰＵ１０１−１への通知を行う（図１０の６）。
【０１０８】
ＣＰＵ１０１−１への通知方法としては、ロック・コンプリーションの返却状況を示すルータ２０３−１内のレジスタをシステム・ソフトウェアを実行しているＣＰＵ１０１−１がポーリングすることで行われる。
【０１０９】
なお、本実施形態では詳述しないが、アクティブ側のメイン・メモリ１０２−１の内容はＦＴ制御部１０３−１の内部のＤＭＡ・エンジンによりスタンバイ側のメイン・メモリ１０２−１にコピーされ続けており、これはオペレーティング・システム動作中にバックグラウンドで行われる。
【０１１０】
さらに、同期処理のためのシステム・ソフトウェアが起動してから、Ｉ／Ｏ・インターフェース・ブリッジ２０７−１、２０７−２のロックによるＩ／Ｏ・デバイス１０５−１、１０５−２からメイン・メモリ１０２−１へのＤＭＡが停止するまでの間は、ＤＭＡによりアクティブ側のメモリ１０２−１に書き込まれた内容は、スタンバイ側のメモリ１０２−２へもフォワードされており、自動的に同一性を保つ機構が備わっている。
【０１１１】
つまり、ルータ２０３−１が、両方のＩ／Ｏ・インターフェース・ブリッジ２０７−１、２０７−２からロック・コンプリーションが返されたことを確認し（図１０の５）、ＣＰＵ１０１−１への通知を行う時点では、両ＦＴ制御部１０３−１、１０３−２に接続されるメイン・メモリ１０２−１、１０２−２は全く同一の状態である。
【０１１２】
次に、システム・ソフトウェアを実行しているＣＰＵ１０１−１は、同期・コマンド・ジェネレータ２０６−１に対し、同期・ＣＰＵ・リセット・コマンドの発行を要請する。これは同期・コマンド・ジェネレータ２０６−１の制御レジスタへのライトで行われる（図１１の７）。
【０１１３】
同期・コマンド・ジェネレータ２０６−１は、同期・ＣＰＵ・リセット・コマンドのパケットをＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０−１へ通知する（図１１の８）。
【０１１４】
ＬＩＢ／ＲＯＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ２１０−１は同期・ＣＰＵ・リセット・コマンドを受け取ると、自動的に同期／非同期・状態・レジスタ２２４を同期状態に切り替える。
【０１１５】
これにより、プライマリ系とセカンダリ系は同期動作中と見なされ、同期・ＣＰＵ・リセット・コマンドはディレイ・コントローラ２２６と、Ｉ／Ｏ・ＦＴ−リンク・出力・コントローラ２２７にフォワードされる（図１１の９）。
【０１１６】
アクティブ側はディレイ・コントローラ２２６を通り、スタンバイ側はＩ／Ｏ・ＦＴ−リンク１１１−２を通過するため、ルータ２０３−１、２０３−２には同時に同期・ＣＰＵ・リセット・コマンドが到達する（図１１の１０）。
【０１１７】
さらにルータ２０３−１、２０３−２は、それぞれ、同期・ＣＰＵ・リセット・コマンドをリセット・コントローラ２０４−１、２０４−２へフォワードする（図１１）の１１）。リセット・コントローラ２０４−１、２０４−２は、それぞれ、ＣＰＵ１０１−１、１０１−２に対して、一定期間リセットをアサートする（図１１の１２）。ルータ２０３−１、２０３−２より上の部分は完全に同期して動作しているため、同時にＣＰＵ・リセットが掛けられることになる。
【０１１８】
また、リセット・コントローラ２０４−１、２０４−２は、それぞれ、メモリ・コントローラ２０５−１、２０５−２に対して、同期・リセット・パルスを送る。
【０１１９】
図１２のタイミング・チャートで示す通り、同期・リセット・パルスを受け取ったメモリ・コントローラ２０５−１、２０５−２は、それぞれ、メイン・メモリ１０２−１、１０２−２であるＤＲＡＭに対し、リフレッシュ・コマンドを発行すると共に、ＤＲＡＭ・リフレッシュ・カウンタをリセットする（図１１の１３）。ＤＲＡＭ・リフレッシュ・カウンタをリセットするためには、ＤＲＡＭ・リフレッシュ・カウンタ・リセット信号をメモリ・コントローラ２０５−１、２０５−２から、それぞれ、メインメモリ１０２−１、１０２−２に対して与える。
【０１２０】
これにより、双方のＣＰＵ・サブシステムで非同期に動作するものは無くなり、完全なロックステップの同期状態となる。
【０１２１】
ＣＰＵ１０１−１、１０１−２のリセットが解除されると、ＣＰＵ・コンパレータ２１２−１、２１２−２が動作しだし、双方のＣＰＵ１０１−１、１０１−２のリクエストの発行タイミングを監視する（図１１の１４）。
【０１２２】
ＣＰＵ・コンパレータ２１２−１、２１２−２を用いた再リセットの機能は、前述のとおり、ＣＰＵ１０１−１、１０１−２のリセットは非同期リセットであることが多く、クロックに同期したリセットパルスをＣＰＵ１０１−１、１０１−２に与えても、ＣＰＵ１０１−１、１０１−２が相互に同期しない場合を考慮しての機能である。
【０１２３】
図１３で示す通り、リセット解除後近傍のリクエストがタイミングずれを起こした場合は、ＣＰＵ・コンパレータ２１２−１、２１２−２の双方が同時にエラーを検出することになる。ＣＰＵ・コンパレータ２１２−１、２１２−２は、それぞれ、エラーを直ちにリセット・コントローラ２０４−１、２０４−２へ通知する。これにより、図１１の１２で示す箇所から上述した同期・ＣＰＵ・リセットのシーケンスが再起動される。
【０１２４】
なお、ＣＰＵ・コンパレータ・チェックによるＣＰＵ１０１−１、１０１−２の再同期リセットは、メイン・メモリ・アクセス前のＢＩＯＳによるＲＯＭ・フェッチ段階に限って高速に再同期化を行うための機能である。
【０１２５】
無事に同期化が行われると、ＣＰＵ１０１−１、１０１−２のリセット・ベクトルで示されるアドレスにあるＢＩＯＳのＲＯＭ・フェッチが継続される。ＢＩＯＳを実行しているＣＰＵ１０１−１、１０１−２は、それぞれ、ＣＰＵ・コンパレータ・チェックの結果が肯定的であり、再同期化処理が成功したことを知ると、Ｉ／Ｏ・インターフェース・ブリッジ２０７−１、２０７−２のロックを解除するために、ルータ２０３−１、２０３−２に対し、アンロック・コマンドの発行を要請する。これはルータ２０３−１、２０３−２内の制御レジスタへのライトで行われる。
【０１２６】
アンロック・コマンドを受け取ったＩ／Ｏ・インターフェース・ブリッジ２０７−１、２０７−２は、ロック状態を解除する。これによりＩ／Ｏ・デバイス１０５−１、１０５−２が再度動作しだすことになる。
【０１２７】
また、ＢＩＯＳは自らＳＭＩによりシステム・ソフトウェアを呼び出し、オペレーティングシステム停止前に復帰するためのコンテキスト復帰を行った後、ＳＭＩから戻る形で、停止前に復帰して同期化処理を完了する。
【図面の簡単な説明】
【０１２８】
【図１】フォールト・トレラント・コンピュータの基本構成を示すブロック図である。
【図２】本発明の実施形態によるフォールト・トレラント・コンピュータの構成を示すブロック図である。
【図３】図２に示すフォールト・トレラント・コンピュータを一方のＣＰＵからの観点で描いたブロック図である。
【図４】図２に示すフォールト・トレラント制御部の構成等を示すブロック図である。
【図５】図４に示すＬＯＢ／ＲＩＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラの構成を示すブロック図である。
【図６】図５に示すディレイ・コントローラの構成を示すブロック図である。
【図７】本発明の実施形態により、ローカル・ルータ及びリモート・ルータに同時にコマンドパケットが到着する様子を示すタイミング図である。
【図８】図４に示すＣＰＵコンパレータの構成を示すブロック図である。
【図９】本発明の実施形態によるＣＰＵリセット方法を説明するための第１の図である。
【図１０】本発明の実施形態によるＣＰＵリセット方法を説明するための第２の図である。
【図１１】本発明の実施形態によるＣＰＵリセット方法を説明するための第３の図である。
【図１２】本発明の実施形態によるＣＰＵリセット方法によりＤＲＡＭをリセットする様子を示すタイミング図である。
【図１３】本発明の実施形態により、ＣＰＵコンパレータにより非同期が検出し、ＣＰＵを再リセットする様子を示すタイミング図である。
【符号の説明】
【０１２９】
１２１  ＣＰＵサブシステム
１２２  Ｉ／Ｏサブシステム
１０１−１、１０１−２  ＣＰＵ
１０２−１、１０２−２  メイン・メモリ
１０３−１、１０３−２  フォールト・トレラント制御部（ＦＴ制御部）
１０４−１、１０４−２  サウス・ブリッジ
１０５−１−１、１０５−１−２、１０５−２−１、１０５−２−２
２０１−１、２０１−２  システム・バス・コントローラ
２０２−１、２０２−２  システム・バス
２０３−１、２０３−２  ルータ
２０４−１、２０４−２  リセット・コントローラ
２０５−１、２０５−２  メモリ・コントローラ
２０６−１、２０６−２  同期・コマンド・ジェネレータ
２０７−１、２０７−２  Ｉ／Ｏ・インターフェース・ブリッジ
２０８−１、２０８−２  Ｉ／Ｏ・コンパレータ
２０９−１、２０９−２  ＬＯＢ／ＲＩＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ
２１０−１、２１０−２  ＬＯＢ／ＲＩＢ・Ｉ／Ｏ・ＦＴ−リンク・コントローラ
２１１−１、２１１−２  割込コントローラ
【図１】
2006172391.tif 000003
【図２】
2006172391.tif 000004
【図３】
2006172391.tif 000005
【図４】
2006172391.tif 000006
【図５】
2006172391.tif 000007
【図６】
2006172391.tif 000008
【図７】
2006172391.tif 000009
【図８】
2006172391.tif 000010
【図９】
2006172391.tif 000011
【図１０】
2006172391.tif 000012
【図１１】
2006172391.tif 000013
【図１２】
2006172391.tif 000014
【図１３】
2006172391.tif 000015