(57)【特許請求の範囲】
【請求項１】
データ処理装置およびデータユニットの間のデータ転送を制御する装置であって、
前記データ処理装置および前記データユニットの間のデータ転送を制御する機能を持つ第１の制御装置と、
前記データ処理装置および前記データユニットの間のデータ転送を制御する第２の制御装置と、を備え、
前記第１の制御装置は、
第１のアドレス信号、第１の制御信号、および第１の切替制御信号を生成する第１のメモリコントローラと、
第１のメモリデバイスと、
前記第１のアドレス信号を受信し、該第１のアドレス信号を前記第１のメモリデバイスに送信する第１のアドレスバッファと、
第１のデータ信号に接続され、該第１のデータ信号を前記第１のメモリデバイスに送信する第１のデータバッファと、
前記第１の制御信号に接続され、該第１の制御信号を前記第１のメモリデバイスに送信する第１の制御バッファと、
前記第１のメモリコントローラおよび前記第１のアドレスバッファの間に位置づけられた第１のアドレススイッチであって、前記第１の切替制御信号により制御されることによって該第１のアドレス信号のデータ値の受信をイネーブルする第１のアドレススイッチと、
前記第１のデータバッファおよび前記第１のメモリデバイスの間に位置づけられた第１のデータスイッチであって、前記第１の切替制御信号により制御されることによって該第１のデータ信号のデータ値の受信をイネーブルする第１のデータスイッチと、
前記第１のメモリコントローラおよび前記第１の制御バッファの間に位置づけられた第１の制御スイッチであって、前記第１の切替制御信号により制御されることによって該第１の制御信号のデータ値の受信をイネーブルする第１の制御スイッチと、を含み、
前記第２の制御装置は、
第２のアドレス信号、第２の制御信号、および第２の切替制御信号を生成する第２のメモリコントローラと、
第２のメモリデバイスと、
前記第２のアドレス信号を受信し、該第２のアドレス信号を前記第２のメモリデバイスに送信する第２のアドレスバッファと、
第２のデータ信号に接続され、該第２のデータ信号を前記第２のメモリデバイスに送信する第２のデータバッファと、
前記第２の制御信号に接続され、該第２の制御信号を前記第２のメモリデバイスに送信する第２の制御バッファと、
前記第２のメモリコントローラおよび前記第２のアドレスバッファの間に位置づけられた第２のアドレススイッチであって、該第２のアドレス信号のデータ値が前記第１のアドレス信号になるように、前記第２の切替制御信号により制御されることによって該第２のアドレス信号のデータ値の前記第１のアドレススイッチへの送信をイネーブルする、第２のアドレススイッチと、
前記第２のデータバッファおよび前記第２のメモリデバイスの間に位置づけられた第２のデータスイッチであって、該第２のデータ信号のデータ値が前記第１のデータ信号になるように、前記第２の切替制御信号により制御されることによって該第２のデータ信号のデータ値の前記第１のデータスイッチへの送信をイネーブルする、第２のデータスイッチと、
前記第２のメモリコントローラおよび前記第２の制御バッファの間に位置づけられた第２の制御スイッチであって、該第２の制御信号のデータ値が前記第１の制御信号になるように、前記第２の切替制御信号により制御されることによって該第２の制御信号のデータ値の前記第1の制御スイッチへの送信をイネーブルする、第２の制御スイッチと、を含む、
装置。
【請求項２】
前記第１の制御装置は、さらに、
前記第１のメモリコントローラおよび前記第１のデータバッファに接続された第１のバスを含み、
前記第１のデータバッファは、前記第１のバスから前記第１のデータ信号のデータ値を受信し、
前記第２の制御装置は、さらに、
前記第２のメモリコントローラおよび前記第２のデータバッファに接続された第２のバスを含み、
前記第２のデータバッファは、前記第２のバスから前記第２のデータ信号のデータ値を受信する、請求項１に記載の装置。
【請求項３】
前記データ処理装置と、前記第１および第２の制御装置とに接続され、該データ処理装置と、該第１と第２の制御装置との間のデータ転送を提供する第１の通信リンクと、
前記データユニットと、前記第１および第２の制御装置とに接続され、該データユニットと、該第１および第２の制御装置の間のデータ転送を提供する第２の通信リンクと、
をさらに備える、請求項１に記載の装置。
【請求項４】
前記第１の通信リンクはファイバーチャネルであり、
前記第２の通信リンクはＳＣＳＩチャネルである、
請求項３に記載の装置。
【請求項５】
前記第２のメモリコントローラは、前記第１および第２のメモリデバイスへのアクセスを制御する第１の論理ユニットを含み、
前記第１のメモリコントローラは、前記第２のメモリコントローラから前記第１のメモリデバイスへのアクセスを要求する第１の論理ユニットを含む、
請求項１に記載の装置。
【請求項６】
前記第１のメモリコントローラは、該第１のメモリコントローラの操作を制御する第２の論理ユニットを含み、該第２の論理ユニットは、前記第１のメモリデバイスに対するメモリ故障を示す第１の故障信号を受信し、ローカルな該第１の故障信号に応答して、該第１のメモリコントローラの操作を終了させ、
前記第２のメモリコントローラは、該第２のメモリコントローラの操作を制御する第２の論理ユニットを含み、該第２の論理ユニットは、前記第１のメモリコントローラから前記第１の故障信号を受信して、前記第１のメモリデバイスへのアクセスを終了させる、
請求項１に記載の装置。
【請求項７】
前記第１のメモリコントローラにおける前記第２の論理ユニットは、リセット信号を受信して、該第１のメモリコントローラの操作を初期化し、
前記第２のメモリコントローラにおける前記第２の論理ユニットは、前記リセット信号を受信して、該第２のメモリコントローラの操作を初期化する、
請求項６に記載の装置。
【請求項８】
前記第２のメモリコントローラは、該第２のメモリコントローラの操作を制御する第２の論理ユニットを含み、該第２の論理ユニットは、前記第２のメモリデバイスに対する故障を示す第２の故障信号を受信して、該第２のメモリコントローラの操作を終了させ、
前記第１のメモリコントローラは、該第１のメモリコントローラの操作を制御する第２の論理ユニットを含み、該第２の論理ユニットは、前記第２の故障信号を受信して、前記データ処理装置および前記データユニットの間のデータ転送の制御を再開する、
請求項１に記載の装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、入出力制御装置を使用するコンピュータシステムに関する。より具体的には、この発明は、冗長な同期メモリを持つフォルトトレラント入出力制御装置に関する。
【０００２】
【従来の技術】
サーバーシステムの性能は、入出力サブシステムに関連する低いバンド幅により制限されてきた。この性能のボトルネックを改良しようと、入出力のバンド幅を増やすことを目指してきた。しかし、このことは、サーバーにより受け取られる入出力割り込みの数を増やす。増大した数の入出力割り込みは、不必要にサーバーの時間を消費し、それによりサーバー全体の性能を劣化させる。
【０００３】
このボトルネックを克服するため、個別の入出力プロセッサすなわち制御装置が通常使用され、通常はサーバーにより実行されるタスクを実行し、入出力処理を制御する。入出力制御装置の使用は、サーバーがこうむるオーバーヘッドを減らして入出力割込みおよび関連する入出力処理タスクを処理し、それにより入出力スループットを増やし、サーバーの性能を向上させる。これらの理由のため、ほとんどのサーバシステムは入出力制御装置を使用し、外部周辺装置とサーバーとの間のインターフェースをとる。
【０００４】
図１は、入出力制御装置１０２を使用する典型的なコンピュータシステム１００を示す。図には、一次のペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バス１０４と、スモール・コンピュータ・システム・インターフェース（ＳＣＳＩ）チャネル１０８を介して外部入出力装置１０６とに接続される入出力制御装置１０２が示される。入出力制御装置１０２は、二次のＰＣＩバス１１０を備え、これに、プロセッサ１１２、メモリコントローラ１１４、ＳＣＳＩコントローラ１１６およびＰＣＩからＰＣＩへのブリッジ１１８が接続される。ＰＣＩからＰＣＩへのブリッジ１１８は、二次のＰＣＩバス１１０に連結された装置を、一次のＰＣＩバス１０４に接続される装置と接続する。ホスト中央処理装置（ＣＰＵ）（図示せず）は、一次のＰＣＩバス１０４と通信する。メモリコントローラ１１４は、外部記憶装置１２０に接続される。
【０００５】
プロセッサ１１２は、ホストＣＰＵから受け取られる入出力要求を制御するのに専用である。これらの入出力要求は、外部の入出力装置１０６のうちの１つからのデータアクセスでも良い。ＳＣＳＩコントローラ１１６は、外部の入出力装置１０６とインターフェースをとり、これらの装置１０６にデータを転送し、これらの装置からデータを受け取る。メモリ１２０は、一時記憶領域として使用され、ホストＣＰＵと外部入出力装置１０６との間を転送中のデータを記憶する。たとえば、外部の入出力装置１０６に書かれるデータはメモリ１２０に記憶され、データが、記憶される前にパリティバイトで符号化されることができるようにする。同様に、外部の入出力装置１０６から読み出されたデータはメモリ１２０に記憶され、ホストＣＰＵに送られる前に復号されることができるようにする。
【０００６】
【発明が解決しようとする課題】
この特定の入出力制御装置１０２の設計に伴う欠点は、フォールトトレラントでないことである。メモリ１２０が故障する場合、すべての入出力が中止する。このようなメモリの故障は、許容できない数のパリティエラーが検出される時に明らかである。入出力制御装置１０２が冗長なメモリを持たないので、すべての入出力が中止し、これによりコンピュータシステム１００の性能を著しく劣化させる。したがって、メモリ故障に対応することのできる信頼性のある入出力制御装置が必要である。
【０００７】
【課題を解決するための手段】
この発明は、冗長な同期メモリをサポートする高信頼性のフォールトトレラント入出力制御装置に関する。入出力制御装置は、ファイバーチャネル（Fibre Channel）を介してホストサーバに接続され、ウルトラ２（Ultra2）SCSIチャネルを介して外部の周辺装置またはデータユニットに接続される。入出力制御装置は複数の入出力制御論理ユニットを持ち、それぞれの入出力制御論理ユニットは、ファイバーチャネルリンクを介してホストサーバーに接続され、ウルトラ２ SCSI チャネルを介して外部の周辺装置に接続される。
【０００８】
２個の入出力制御論理ユニットがあり、それぞれが、同じ構成要素を持ち、そのうちの１つが故障した場合に互いに置き換わるためのものであるのが好ましい。マスタ入出力制御論理ユニットは、ホストサーバと外部の周辺装置からの入出力トランザクションを受け取るマスタユニットとして動作する。スレーブ入出力制御論理ユニットは、マスタ装置が操作不能になるまで、小さなタスクを実行する静止状態にあるスレーブユニットとして動作する。れぞれの入出力制御論理ユニットのメモリは同期がとられ、マスタ入出力制御論理ユニッが故障した場合に、スレーブ入出力制御論理ユニットが、入出力トランザクションを再開できるようにする。
【０００９】
それぞれの入出力制御論理ユニットは、ＰＣＩバスに接続される他の構成要素と同様に、プロセッサ、メモリコントローラを備える。それぞれの入出力制御論理ユニットのメモリコントローラは、それぞれのメモリバスを介してメモリデバイスに接続される。マスタ入出力制御論理ユニットのメモリコントローラは、マスタおよびスレーブメモリの両方に、メモリ書き込み操作を実行する。同時に発生するメモリ書き込み操作は、両方の入出力制御論理ユニットにあるメモリが整合性ある状態にあり、マスタメモリデバイスが故障した場合に、スレーブ入出力制御論理ユニットがデータの少しの損失もなく処理を再開できるようにすることを確実にする。
【００１０】
それぞれのメモリバスは、アドレス、制御およびデータ信号経路を含み、これらが、それぞれのメモリデバイスへのメモリアクセスをイネーブルする。マスタメモリコントローラはアドレスおよび制御信号を生成し、マスタおよびスレーブメモリデバイスへのメモリ書き込みアクセスを実行する。データ信号は、プロセッサバスから、マスタ入出力制御装置で受け取られる。両方の入出力制御装置のそれぞれの信号経路は、それぞれのバス切替を持ち、バス切替がイネーブルされるとき、マスタメモリバスからスレーブメモリバスへの信号を伝搬することができるようになり、これにより、マスタおよびスレーブメモリデバイスの両方のメモリアクセスを開始する。
【００１１】
それぞれのメモリコントローラは、アービトレーション論理ユニット、バス切替制御ユニットおよびリセットとフェイル論理ユニットとを備える。マスタメモリコントローラのアービトレーション論理ユニットは、マスタおよびスレーブメモリバスへのアクセスを制御する。スレーブメモリコントローラのアービトレーション論理ユニットは、マスタアービトレーション論理ユニットからスレーブメモリバスへのアクセスを獲得する。バス切替制御論理ユニットは、それぞれのメモリバスに関連するそれぞれのバス切替の操作を制御する。
【００１２】
それぞれのリセットとフェイル論理ユニットは、それぞれのメモリコントローラの操作状態を制御するのに使用される。マスタメモリコントローラのリセットとフェイル論理ユニットが、スレーブメモリデバイスがメモリ故障を経験したという表示を受け取るとき、マスタのリセットとフェイル論理ユニットは、マスタメモリコントローラに唯一の制御モードを操作するよう準備させる。唯一の制御モードでは、マスタメモリコントローラは、スレーブメモリデバイスに対して同時発生のメモリ書き込み操作を実行しない。スレーブメモリコントローラのリセットとフェイル論理ユニットが、マスタメモリデバイスがメモリ故障を経験したという表示を受け取るとき、スレーブリセットとフェイル論理ユニットは、スレーブメモリコントローラにマスタとして動作するよう準備させ、これにより、サーバおよび外部の周辺装置からの入出力を処理する。
【００１３】
【発明の実施の形態】
図２は、この発明の技術を使用するコンピュータシステム２００を示す。図には、ホストサーバ２０２、入出力制御装置２０４、および外部周辺装置２０６を備えるコンピュータシステム２００が示されている。ホストサーバ２０２は、パーソナルコンピュータ、ワークステーション、サーバマシン、メインフレーム、およびこれらと同様のもの（しかし、これらに制限されない）の任意の種類のコンピュータまたはデータ処理装置であることができる。ホストサーバ２０２は、ヒューレット・パッカードの（Hewlett Packard）NetServer製品ラインのサーバコンピュータであるのが好ましい。入出力制御装置２０４は、外部プロセッサと周辺装置との間でデータの交換を制御する能力を持つ任意の種類の処理装置である。好ましい実施形態では、入出力制御装置２０４は、Ｉ２Ｏ仕様をサポートするインテリジェント入出力（Ｉ２Ｏ）制御装置である。外部周辺装置２０６は、記憶装置、ディスクドライブ、テープドライブ、ＣＤ  ＲＯＭ装置、および同様のもの（しかし、これらに制限されない）の任意の種類のデータユニットであることができる。
【００１４】
ホストサーバ２０２は、第１の通信リンク２０８により入出力制御装置２０４に接続される。第１の通信リンク２０８は、ネットワーク、バス、チャネルおよび同様のもの（しかし、これらに制限されない）の任意の種類の相互接続機構であることができる。第１の通信リンク２０８は、ファイバーチャネル（Fibre Channel）であるのが好ましい。入出力制御装置２０４は、第２の通信リンク２１０を介して１または複数の外部周辺装置２０６に接続される。第２の通信リンク２１０は、ネットワーク、バス、チャネル、および同様のもの（しかし、これらに制限されない）の任意の種類の相互接続機構であることができる。第２の通信リンク２１０は、ウルトラ２  SCSIチャネルであるのが好ましい。
【００１５】
図３は、入出力制御装置２０４を示す。図には、第１の入出力制御論理ユニット２１２Ａ、第２の入出力制御論理ユニット２１２Ｂおよび管理制御論理ユニット２１６が示されている。第１および第２の入出力制御論理ユニット２１２Ａ、２１２Ｂは、ホストサーバ２０２と外部周辺装置２０６との間のデータ交換を制御するのに使用される。管理制御論理ユニット２１６は、他のタスクを実行するだけでなく、第１および第２の入出力制御論理ユニット２１２Ａ、２１２Ｂの操作状態を監視する。第１の入出力制御論理ユニット２１２Ａ、第２の入出力制御論理ユニット２１２Ｂおよび管理制御論理ユニット２１６は、いくつかの信号経路２１８Ａ、２１８Ｂを介して接続される。それぞれの論理ユニット２１２、２１６は、別々のプリント回路基板として実現されるのが好ましい。
【００１６】
第１の入出力制御論理ユニット２１２Ａは、第１の通信リンク２０８および第２の通信リンク２１０に接続される。また、第２の入出力制御論理ユニット２１２Ｂは、第１および第２の通信リンク２０８、２１０に接続される。第１および第２の入出力制御論理ユニット２１２は、以下に詳細に説明するいくつかの側波帯信号２１４を介して通信する。
【００１７】
第１および第２の制御論理ユニット２１２Ａ、２１２Ｂは同じ構成要素を有し、入出力制御論理ユニット２１２のうちの１つが故障する場合に、互いを置きかえることができるようになっている。好ましい実施形態では、入出力制御論理ユニット２１２のうちの１つが、ホストサーバ２０２から入出力トランザクションを受け取るマスタユニットとして動作する。代替の入出力制御論理ユニット２１２は、マスタユニットが操作不能となるまで、小さなタスクを実行する静止状態にあるスレーブユニットとして動作する。
【００１８】
それぞれの入出力制御論理ユニット２１２のメモリは同期がとられ、マスタ入出力制御論理ユニット２１２が故障した場合に、スレーブすなわち代替の入出力制御論理ユニット２１２が入出力トランザクション処理を再開できるようにする。説明する目的のみのため、第１の入出力制御論理ユニット２１２Ａを、ここではマスタ入出力制御論理ユニット２１２Ａと呼び、第２の入出力制御論理ユニット２１２Ｂを、ここではスレーブ入出力制御論理ユニット２１２Ｂと呼ぶ。
【００１９】
図４は、第１および第２の入出力制御論理ユニット２１２Ａ、２１２Ｂの構成要素を示す。それぞれの入出力制御論理ユニット２１２は、プロセッサ２１９、周辺装置コントローラ２２０、ホストインタフェースコントローラ２２２、メモリコントローラ２２４、フェイルセーフ論理ユニット２２６、データバッファ２２９、アドレスバッファ２３１、制御バッファ２３３、メモリ２３４およびパリティ論理ユニット２３６を備える。プロセッサ２１９、周辺装置コントローラ２２０、ホストインタフェースコントローラ２２２およびメモリコントローラ２２４は、内部のＰＣＩバス２２８に接続される。
【００２０】
プロセッサ２１９は、入出力制御論理ユニット２１２の操作を管理する。プロセッサ２１９は、デジタル・イクイップメント・コーポレーション（Digital Equipment Corporation）により製造されたストロングアーム（StrongArm）プロセッサであるのが好ましい。
【００２１】
周辺装置コントローラ２２０は、第２の通信リンク２１０を介して、外部周辺装置２０６とインターフェースをとる。周辺装置コントローラ２２０は、ウルトラ２  ＳＣＳＩチャネル２１０を介した通信を制御するよう適応されたＳＣＳＩコントローラであるのが好ましい。このようなコントローラ２２０に、例えばAdaptecの「ＰＣＩとＳＣＳＩとのコントローラ（パーツ番号AIC-7896）」を含むことができるが、これに制限されない。
【００２２】
ホストインタフェースコントローラ２２２は、第１の通信リンク２０８を介してホストサーバ２０２とインターフェースをとる。ホストインタフェースコントローラ２２２は、ファイバーチャネル２１０を介した通信を制御するよう調整された ファイバーチャネルのコントローラであるのが好ましい。このようなコントローラ２２２に、例えばAdaptecの「ＰＣＩからファイバーチャネルへのコントローラ（パーツ番号AIC-1160）」を含むことができるが、これに制限されない。
【００２３】
メモリコントローラ２２４は、メモリ２３４へのアクセスを制御する。メモリ２３４は、ホストサーバ２０２と外部周辺装置２０６との間で転送されるデータの一時記憶領域として使用され、自動ＲＡＩＤ機能（たとえば、ストリッピング(stripping)、パリティバイトのコード化、インターリービング、ミラーリングなど）に従って、また他の目的のため、データを操作する。メモリコントローラ２２４は、以下に説明するメモリバス２３０を介して、一組のバッファ２２９、２３１、２３３およびメモリ２３４に接続される。メモリコントローラ２２４は、任意の種類のプログラマブル論理デバイスであることができ、好ましい実施形態では、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）として実現される。
【００２４】
メモリ２３４は、シンクロナス・ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、メモリ技術の任意の組合せおよび同様のものの任意の種類のメモリデバイスであることができる。メモリ２３４は、２５６メガバイト（ＭＢ）のＳＤＲＡＭであるのが好ましい。
【００２５】
一組のバッファが提供され、メモリ２３４をアクセスするのに使用される信号を増幅する。データバッファ２２９、アドレスバッファ２３１、制御バッファ２３３がある。アドレスバッファ２３１は、メモリコントローラ２２４から生成されたアドレス信号を受け取る。制御バッファ２３３は、メモリコントローラ２２４から生成された制御信号を受け取り、データバッファ２２９は、ＰＣＩバス２２８またはメモリ２３４から受信したデータを受け取る。バッファ２２９、２３１、２３３は、３値(three-state；３つの状態)の論理バッファとして実現され、データバッファ２２９は双方向であるのが好ましい。
【００２６】
フェイルセーフ論理ユニット２２６は、入出力制御論理ユニット２１２の構成要素の操作状態を監視するのに使用される。とりわけ、フェイルセーフ論理ユニット２２６は、メモリ故障または他の場所に故障がある時にこれらを検出するのに使用される。これは、伝送エラーの回復不可能な数が検出される時にしばしば生じる。この例では、故障したメモリ２３４に関連する入出力制御論理ユニット２１２が操作を終了し、代替の入出力制御論理ユニット２１２が、失敗した入出力制御論理ユニット２１２のタスクを再開する。
【００２７】
フェイルセーフ論理ユニット２２６は、パリティ論理ユニット２３６に接続される。パリティ論理ユニット２３６は、データをパリティバイトで符号化し、またメモリ２３４から読み出されたデータを復号するのに使用される。パリティ論理ユニット２３６は、周知のエラー訂正符号化および復号化技術のうちのいずれかひとつを使用する。メモリ２３４から読み出されたデータが予め決められた閾値を超えるエラー数を含む場合には、パリティ論理ユニット２３６は、フェイルセーフ論理ユニット２２６に送られるエラー信号２３８をアサートする。それに応答して、フェイルセーフ論理ユニット２２６は、ローカルフェイル信号２８２および外部フェイル信号２８４を生成する。ローカルフェイル信号２８２はメモリコントローラ２２４に送られ、外部フェイル信号２８４は代替の入出力制御論理ユニット２１２のメモリコントローラ２２４に送られる。これらの信号の操作を、以下に詳細に説明する。
【００２８】
図５は、第１すなわちマスタメモリコントローラ２２４Ａを示し、図６は、第２すなわちスレーブメモリコントローラ２２４Ｂを示す。両方のメモリコントローラ２２４は同一の構成要素を持ち、アービトレーション要求信号２６２および許可信号２６４の伝送方向に関してのみ異なる。このように、メモリコントローラ２２４の説明は図５に関して行われるが、違いを言及した部分を除いて両方のメモリコントローラ２２４のための説明である。
【００２９】
メモリコントローラ２２４の仕事は、メモリ２３４の両方のデータが確実に整合性あるようにすることである。マスタ入出力制御論理ユニット２１２Ａは、ホストサーバ２０２から入出力トランザクションを受け取るのが好ましい。マスタ入出力制御論理ユニット２１２Ａに関連するメモリ２３４Ａは、スレーブ入出力制御論理ユニット２１２Ｂに関連するメモリ２３４Ｂとは異なる入出力トランザクションを処理する。マスタメモリコントローラ２２４Ａは、メモリ２３４Ａに対する読み出しおよび書き込みアクセスを要求するコマンドを受け取る。メモリ読み出しコマンドの場合には、マスタメモリコントローラ２２４Ａが、そのローカルメモリ２３４Ａから読み出すのが好ましい。しかし、メモリコントローラ２２４Ａは、ローカルメモリ２３４Ａの代わりにリモートメモリ２３４Ｂから読み出す能力を持ち、このことは、ある状況では望ましいということに注意すべきである。メモリ書き込みコマンドの場合には、マスタメモリコントローラ２２４Ａは、両方のメモリ２３４Ａ、２３４Ｂに同時にメモリ書き込みを実行するのが望ましい。しかし、メモリコントローラ２２４Ａが、望むならば、どちらかのメモリ２３４に書き込む能力を持つことに注意すべきである。
【００３０】
図５を参照すると、それぞれのメモリコントローラは、ＰＣＩバスインターフェース２４０Ａ、復号器／状態機械２４２Ａ、メモリ制御論理ユニット２４４Ａ、アービトレーション論理ユニット２４６Ａ、リセットおよびフェイル検出論理ユニット２４８Ａおよびバス切替制御装置２５０Ａを備える。メモリコントローラ２２４Ａ用のトランザクションを受け取るため、ＰＣＩバスインタフェース２４０Ａは、ＰＣＩバスプロトコルに従ってＰＣＩバス２２８Ａと対話する。これらのトランザクションを、メモリ２３４Ａに記憶されたデータにアクセスするのに使用することができる。ＰＣＩバスインタフェース２４０Ａは、制御、アドレスおよびコマンド信号２５２Ａを、ＰＣＩバス２２８Ａから受け取る。さらに、ＰＣＩバスインタフェース２４０Ａは、バスサイクルの完了を示す制御信号２５２Ａを送る。制御信号２５２Ａは、３２ビットのアドレス／データ信号、８ビットのコマンド／バイトイネーブル信号、１１ビットの制御信号、２ビットのリセットおよびクロック信号、２ビットのパリティ信号を含むのが好ましい。ＰＣＩバスインタフェース２４０Ａは、復号器／状態機械２４２Ａに接続され、この復号器／状態機械２４２Ａに、ＰＣＩバス２２８Ａから受け取ったアドレスおよびコマンドデータを送る。
【００３１】
コマンドをサービスするため、復号器／状態機械２４２Ａは、起動される必要のある適切な一組の動作を決めるのに使用される。復号器／状態機械２４２Ａは、アービトレーション論理ユニット２４６Ａおよびメモリ制御論理ユニット２４４Ａに接続される。復号器／状態機械２４２ＡはＰＣＩバスインタフェース２４０Ａからアドレスおよびコマンド信号２５４Ａを受け取り、メモリ制御論理ユニット２４４Ａに伝送されるアドレス／コマンド信号２６０Ａを生成する。メモリ書き込みコマンドの場合には、復号器／状態機械２４２Ａは、アービトレーション論理ユニット２４６Ａにリクエスト信号２５６Ａをアサートすることにより、スレーブ入出力制御論理ユニット２１２Ｂのメモリバス２３０Ｂへのアクセスを要求する。このようなアクセスが得られるとき、復号器／状態機械２４２Ａは、アービトレーション論理ユニット２４６Ａから許可信号２５８Ａを受け取る。
【００３２】
マスタアービトレーション論理ユニット２４６Ａは、両方のメモリバス２３０へのアクセスを制御するのに使用される。既定値によってマスタとして動作する入出力制御論理ユニット２１２Ａは、スレーブメモリバス２３０Ｂに優先する。両方のメモリで同時にメモリ書き込み操作を実行することが必要なので、マスタが優先される。両方の入出力制御論理ユニット２１２のアービトレーション論理ユニット２４６は側波帯信号２１４を介して接続され、側波帯信号２１４は、１ビットのリクエスト信号２６４であるARB_REQ、および１ビットの許可信号２６２であるARB_GNTを有する。
【００３３】
ARB_REQ信号２６２は、スレーブ入出力制御論理ユニット２１２Ｂにより使用され、マスタアービトレーション論理ユニット２４６Ａから、マスタまたはスレーブメモリバス２３０のどちらかへのアクセスを要求する。ARB_GNT信号２６４は、マスタまたはスレーブメモリバス２３０へのスレーブ入出力制御論理ユニット２１２Ｂのアクセスを許可するのに使用される。スレーブ入出力制御論理ユニット２１２Ｂへの許可期間中、マスタ入出力制御論理ユニット２１２Ａが、マスタまたはスレーブメモリバス２３０のどちらかへのアクセスを要求するならば、マスタアービトレーション論理ユニット２４６Ａは、ARB_GNT信号２６４をデアサート(de-assert；アサート解除)する。この場合には、スレーブ入出力制御論理ユニット２１２Ｂはバスサイクルを中止して、ARB_REQ信号２６２をデアサートする。 ARB_REQ信号２６２がデアサートされると、マスタ入出力制御論理ユニット２１２Ａはメモリバス２３０Ｂを駆動する。ARB_REQ信号２６２がデアサートされて１クロックサイクル後に、ARB_REQスレーブアービトレーション論理ユニット２４６Ｂは、ARB_REQ信号２６２を再度アサートすることができる。
【００３４】
アービトレーション論理ユニット２４６は、管理制御論理ユニット２１６から、ＰＣＩスロット識別信号２１８であるslot_idを受け取る。このslot_idは、入出力制御論理ユニット２１２が、マスタまたはスレーブのどちらの入出力制御論理ユニット２１２であるのかを判断するのに使用される。１ビットの第１のslot_id信号２１８Ａは、第１の入出力制御論理ユニット２１２Ａのアービトレーション論理ユニット２４６Ａに送られ、第１の入出力制御論理ユニット２１２Ａがマスタ装置であることを示すのに使用される。同様に、１ビットの第２のslot_id信号２１８Ｂは、第２の入出力制御論理ユニット２１２Ｂのアービトレーション論理ユニット２４６Ｂに送られ、第２の入出力制御論理ユニット２１２Ｂがスレーブ装置であることを、第２の入出力制御論理ユニット２１２Ｂに示す。
【００３５】
他の実施形態では、slot_id信号に加えて、メモリコントローラ２２４のレジスタが、メモリコントローラ２２４がマスタ装置であるか、またはスレーブ装置であるかを示すビットパターンを記憶する。システムの初期化、またはマスタ入出力制御論理ユニット２１２Ａからスレーブ入出力制御論理ユニット２１２Ｂへの制御の切り換えの間、またはそれと同様のときに、プロセッサ２１９は、ビットパターンをメモリコントローラ２２４のレジスタに書き込む。プロセッサがビットパターンをレジスタに書き込むのに従事しているとき、メモリコントローラ２２４は、slot_id信号の代わりにレジスタに記憶された値を使用する。
【００３６】
メモリ制御論理ユニット２４４Ａは、リセットおよびフェイル検出論理ユニット２４８Ａ、復号器／状態機械２４２Ａ、およびメモリ２３４Ａに接続される。メモリ制御論理ユニット２４４Ａは、読み出しメモリアクセスまたは書き込みメモリアクセスのどちらかを要求する信号２６０Ａを受け取り、対応する信号を生成して、要求されたアクセスをイネーブルする。メモリ制御論理ユニット２４４Ａは、入出力制御論理ユニット２１２Ａにローカルなメモリ２３４Ａに対して作られる読み出しアクセスのため、ローカルメモリ選択信号２６２Ａをアサートする。スレーブ入出力制御論理ユニット２１２Ｂのメモリ２３４Ｂを選択するには、リモートメモリ選択信号２６４Ａが、マスタ入出力制御論理ユニット２１２Ａによりアサートされる。また、読み出し／書き込み制御信号２６８Ａに加えて、アドレス信号２６６Ａが生成され、これは目的のメモリアドレスを表す。また、メモリコントローラ２２４Ａが、関連するメモリバス２３０Ａへのアクセスを持つとき、データバッファ２２９Ａをイネーブルするため、バッファイネーブル信号２６９Ａが、メモリ制御論理ユニット２４４Ａにより生成される。これらの信号２６２Ａ、２６６Ａ、２６８Ａ、２６９Ａは、それぞれのバッファ２２９Ａ、２３１Ａ、２３３Ａに送られる。リモートメモリ選択信号２６４Ａが２ビット幅であり、ローカルメモリ選択信号２６２Ａが２ビット幅であり、アドレス信号２６６Ａが１４ビット幅であり、読み出し／書き込み信号２６８Ａが４ビット幅であり、バッファイネーブル信号２６９Ａが３ビット幅であるのが好ましい。
【００３７】
メモリアクセスサイクルの完了時に、メモリ制御論理ユニット２４４Ａは、復号器／状態機械２４２Ａに送られる第１の完了信号２７０Ａをアサートする。完了信号２７０Ａの受信時に、復号器／状態機械２４２Ａは、第２の完了信号２７２Ａを、ＰＣＩバスインタフェース２４０Ａにアサートする。ＰＣＩバスインタフェース２４０Ａは、第２の完了信号２７２Ａを受け取るとき、適切なＰＣＩバス信号をアサートしてメモリアクセスコマンドの完了を表す。
【００３８】
リセットおよびフェイル論理ユニット２４８Ａは、メモリコントローラ２２４Ａの操作状態すなわちモードを制御するのに役立つ。リセットおよびフェイル論理ユニット２４８Ａは、３つの操作モード、すなわち初期化モード、シャットダウンモード、単独制御モードのうちの１つを示す３つの入力信号を受け取る。初期化モードでは、メモリコントローラ２２４Ａは、すべてのレジスタをデフォルト値に設定したり、状態機械を開始またはアイドル位置に設定したりというような操作を起動するのに必要な処理を行う。このモードは、電源を入れたとき、または入出力制御論理ユニット２１２Ａがリブート(reboot)される時に設定される。シャットダウンモードは、メモリコントローラ２２４Ａの操作を終了するのに使用される。これは、メモリ故障またはそれと同様のものに応答して行うことができる。単独制御モードでは、代替の入出力制御論理ユニット２１２Ｂがもはや動いていないので、メモリコントローラ２２４は、メモリの書き込みアクセスを、代替の入出力制御装置２１２Ｂと同期させる必要がない。
【００３９】
リセットおよびフェイル論理ユニット２４８Ａは、３つの入力信号、すなわち１ビットのリセット信号２８１Ａ、１ビットのローカルフェイル信号２８２Ａであるlocal_fail、および１ビットの外部フェイル信号２８４Ａであるext_failを受け取る。リセット信号２８１Ａは、管理制御論理ユニット２１６から送られ、メモリコントローラ２２４Ａが初期化モードの操作シーケンスを起動することになっているということを、リセットおよびフェイル論理ユニット２４８Ａに知らせるのに役立つ。ローカルフェイル信号local_fail２８２Ａは、フェイルセーフ論理ユニット２２６Ａから送られ、入出力制御論理ユニット２１２Ａに関連するメモリ故障を示す。この場合には、メモリコントローラ２２４Ａは、シャットダウンモードに入る。外部フェイル信号２８４Ａは、代替の入出力制御論理ユニット２１２Ｂからのメモリ故障を示す。この場合には、故障していない入出力制御論理ユニット２１２のメモリコントローラ２２４が、単独操作モードに入る。
【００４０】
リセット信号２８１Ａまたはローカルフェイル信号２８２Ａのどちらかがアサートされるとき、リセットおよびフェイル論理ユニット２４８Ａは、シャットダウンモードのためにメモリコントローラ２２４Ａを準備する。この場合には、 リセットおよびフェイル論理ユニット２４８Ａは、メモリ制御論理ユニット２４４Ａに第１のフェイル信号２７４Ａをアサートし、アービトレーション論理ユニット２４６Ａに第２のフェイル信号をアサートし、バス切替制御ユニット２５０Ａに第３のフェイル信号２７８Ａをアサートし、ＰＣＩバスインタフェース２４０Ａに第４のフェイル信号２８０Ａをアサートする。これらの信号２７４Ａ、２７６Ａ、２７８Ａ、２８０Ａに応答して、対応するユニット２４０Ａ、２４４Ａ、２４６Ａ、２５０Ａは、処理を中止してメモリコントローラ２２４Ａのすべてのレジスタ（図示せず）をデフォルト値に初期化するのに必要な処理を行う。
【００４１】
リセット信号がデアサートされるとき、リセットおよびフェイル論理ユニット２４８Ａは、初期化モードのためにメモリコントローラ２２４Ａを準備する。この場合には、 リセットおよびフェイル論理ユニット２４８Ａは、メモリ制御論理ユニット２４４Ａに第１のフェイル信号２７４Ａをデアサートし、アービトレーション論理ユニット２４６Ａに第２のフェイル信号２７６Ａをデアサートし、バス切替制御ユニット２５０Ａに第３のフェイル信号２７８Ａをデアサートし、ＰＣＩバスインタフェース２４０Ａに第４のフェイル信号２８０Ａをデアサートする。これらの信号２７４Ａ、２７６Ａ、２７８Ａ、２８０Ａに応答して、対応するユニット２４０Ａ、２４４Ａ、２４６Ａ、２５０Ａは、それぞれのユニットを初期化する操作を実行する。
【００４２】
外部フェイル信号２８４Ａがアサートされるとき、リセットおよびフェイル論理ユニット２４８Ａは、単独制御モードのためにメモリコントローラ２２４Ａを準備する。この場合には、リセットおよびフェイル論理ユニット２４８Ａが第２のフェイル信号２７６Ａをデアサートするとき、アービトレーション論理ユニット２４６Ａがディスエーブルされる。スレーブメモリコントローラ２２４Ｂが、そのメモリバス２３０Ｂを仲裁する(arbitrate)必要がないので、または、マスタメモリコントローラがスレーブメモリバス２３０Ｂにアクセスする必要がないので、アービトレーション論理ユニット２４６Ａはディスエーブルされる。それに応答して、アービトレーション論理ユニット２４６Ａは、バス切替制御ユニット２５０Ａに送られる第３のフェイル信号２７８Ａをアサートすることにより、バス切替（図示せず）をディスエーブルする。この場合には、２つのメモリバス２３０Ａ、２３０Ｂの間でデータを交換する必要がないので、バス切替がディスエーブルされる。
【００４３】
バス切替制御ユニット２５０Ａは、２つのメモリバス２３０Ａと２３０Ｂの間のデータ転送を制御する一組のバス切替操作を制御するのに使用される。バス切替制御ユニット２５０Ａは、１ビットのバス切替制御信号２８８Ａである bus_switch_ctlの状態を制御するのに使用されるアービトレーション論理ユニット２４６Ａからの制御信号２８６Ａを受け取る。バス切替制御信号２８８Ａは、メモリバス２３０Ａに関連するバス切替を制御する。第３のフェイル信号２７８Ａがデアサートされるとき、バス切替制御ユニット２５０Ａは、バス切替制御信号２８８Ａをイネーブルし、これによりバス切替をイネーブルする。第３のフェイル信号２７８Ａがアサートされるとき、バス切替制御ユニット２５０Ａはバス切替制御信号２８８Ａをディスエーブルし、これによりバス切替をディスエーブルする。バス切替の操作を、以下に詳細に説明する。
【００４４】
図７は、メモリバス２３０およびそれぞれの入出力制御論理ユニット２１２のバス切替２９０、２９２、２９４を示す。それぞれのメモリバス２３０は、アドレス、データおよび制御信号を運ぶ多数の信号経路（すなわち、ラインまたはトレース）から構成される。アドレス信号２６６は、メモリコントローラ２２４により生成される。データ信号２２５は、ＰＣＩバス２２８から受け取られる。制御信号は、ローカルメモリ選択信号２６２、リモートメモリ選択信号２６４および読み出し／書き込み制御信号２６８Ａを含む。
【００４５】
それぞれの入出力制御論理ユニット２１２は、そのメモリバス２３０の信号経路に接続される一組のバス切替を持つ。バス切替は、２つのメモリバス２３０Ａ、２３０Ｂの間でデータを交換するのに使用される。それぞれの入出力制御論理ユニット２１２は、アドレス信号バス切替２９０、制御信号バス切替２９２およびデータ信号バス切替２９４を持つ。それぞれのスイッチ２９０、２９２、２９４は、スイッチ２９０、２９２、２９４を同時にイネーブルまたはディスエーブルするのに使用されるバス切替制御信号２８８に接続される。バス切替の操作は、当該技術分野で周知である。バス切替はQuality Semiconductor,Inc.から提供される32QX861 QuickSwitch（商標）のバス切替であるのが好ましい。
【００４６】
第１のアドレス信号バス切替２９０Ａは、第１のメモリバス２３０Ａのアドレス信号経路２６６Ａと、第２のメモリバス２３０Ｂに関連する第２のアドレス信号バス切替２９０Ｂに接続される。第１のアドレス信号バス切替２９０Ａは、第１のメモリコントローラ２２４Ａにより生成される第１のバス切替制御信号２８８Ａの制御下にある。同様に、第２のアドレス・バス切替２９０Ｂは、第２のメモリコントローラ２２４Ｂにより生成される第２のバス切替制御信号２８８Ｂの制御下にある。両方のアドレス信号バス切替２９０Ａ、２９０Ｂが結合されるとき、第１のアドレス信号２６６Ａのデータ値が、第２のメモリバス２３０Ｂのアドレス信号経路２６６Ｂに転送される。
【００４７】
第１の制御信号バス切替２９２Ａは、第１のメモリバス２３０Ａの制御信号経路２６４Ａ、２６８Ａと、第２のメモリバス２３０Ｂに関連する第２の制御信号バス切替２９２Ｂに接続される。第１の制御信号バス切替２９２Ａは、第１のメモリコントローラ２２４Ａにより生成される第１のバス切替制御信号２８８Ａの制御下にある。同様に、第２の制御信号バス切替２９０Ｂは、第２のメモリコントローラ２２４Ｂから生成される第２のバス切替制御信号２８８Ｂの制御下にある。両方の制御信号バス切替２９０Ａ、２９０Ｂが結合されるとき、リモートメモリ選択制御信号２６４Ａの値が、第２のメモリバス２３０Ｂのローカルメモリ選択信号経路２６２Ｂに送られ、読み出し／書き込み制御信号２６８Ａの値が、第２のメモリバス２３０Ｂの読み出し／書き込み制御信号パス２６８Ｂに送られる。
【００４８】
第１のデータ信号バス切替２９４Ａは、第１のメモリバス２３０Ａのデータ信号経路２２５Ａと、第２のメモリバス２３０Ｂに関連する第２のデータ信号バス切替２９４Ｂに送られる。第１のデータ信号バス切替２９４Ａは、第１のメモリコントローラ２２４Ａにより生成される第１のバス切替制御信号２８８Ａの制御下にある。同様に、第２のデータ信号バス切替２９４Ｂは、第２のメモリコントローラ２２４Ｂから生成される第２のデータスイッチ制御信号２８８Ｂの制御下にある。両方のデータ信号バス切替２９４Ａ、２９４Ｂが結合される時、第１のデータ信号２２５Ａの値が、第２のメモリバス２３０Ｂのデータ信号経路２２５Ｂに送られる。
【００４９】
いくつかの理由により、このバス切替２９０、２９２、２９４の配置は有利な点をもつ。アドレス信号および制御信号バス切替２９０、２９２は、それらがそれぞれのメモリ２３４に達する時にこれらの信号の整合性を保持するため、アドレスおよび制御バッファ２３１、２３３の前に置かれる。データ信号バス切替２９４は、データバッファ２２９の後ろに置かれ、データ信号が、ＰＣＩバス２２８の操作を妨害しないようにする。
【００５０】
それぞれのバッファは、それぞれのイネーブル制御信号により制御される。それぞれのメモリコントローラ２２４は、データバッファ２２９をイネーブルまたはディスエーブルするのに使用されるデータバッファ制御信号２６９を生成する。リセット信号２８１は、アドレスおよび制御バッファの両方を制御するのに使用される。それぞれの入出力制御論理ユニット２１２のアドレスおよび制御バッファは、システムの初期化でイネーブルされる。それぞれの入出力制御論理ユニット２１２のデータバッファは、それぞれのメモリコントローラ２２４が、それ自身のメモリバス２３０へのアクセスを持つ時にイネーブルされる。たとえば、マスタメモリコントローラ２２４Ａがマスタおよびスレーブメモリバス２３０Ａ、２３０Ｂの両方へのアクセスを持つとき、マスタデータバッファ２２９Ａがイネーブルされ、スレーブデータバッファ２２９Ｂはディスエーブルされる。スレーブメモリコントローラ２２４がそれ自身のメモリバス２３０Ｂへのアクセスを持つとき、スレーブデータバッファ２２９Ｂはイネーブルされる。
【００５１】
前述したものは、現在の技術の入出力制御装置２０４の一部である電子構成要素およびデバイスについて説明してきた。入出力制御装置２０４が動作する方法、とりわけ冗長メモリの同期がとられる方法について説明する。
【００５２】
入出力制御装置２０４は、ホストサーバ２０２または外部周辺装置２０６のいずれかから入出力トランザクションを受け取る。これらの入出力トランザクションは、メモリ２３４に対する読み出しまたは書き込みアクセスを要求することができる。マスタメモリコントローラ２２４Ａは、ＰＣＩバス２２８からメモリ読み出しおよび書き込みコマンドを受け取る。メモリ読み出しコマンドは、マスタ入出力制御論理ユニット２１２Ａにローカルなメモリ２３４Ａをアクセスし、スレーブメモリ２３４Ｂとのいかなる対話も要求しない。メモリ書き込みコマンドは、整合性ある状態でメモリ２３４を維持するため、両方のメモリ２３４Ａ、２３４Ｂで同時に実行される。この同時に発生するメモリ書き込みアクセスを容易にするため、メモリバス２３０およびアービトレーション信号２６２、２６４は、使用される回路の量を最小にしながらこのアクセスを容易にするプロトコルに従い、さらにスレーブメモリ２３０Ｂにアクセスする際にこうむる伝送遅延を最小にすることにより、操作される。
【００５３】
図８は、両方のメモリ２３４における同時発生のメモリ書き込みアクセスに関して入出力制御装置２０４の操作を示す。しかし、この発明の技術が、この特定の操作に制約されないことに注意すべきである。マスタメモリコントローラ２２４Ａは、テスト目的または同様のもののため、スレーブメモリ２３４Ｂに対するメモリ読み出し操作を実行することができる。さらに、スレーブメモリコントローラ２２４Ｂは、図８に示される同じステップを使用して、両方のメモリ２３４に対するメモリ書き込み操作を起動することができ、マスタメモリ２３４Ａに対する読み出しアクセスを実行することができる。
【００５４】
図８を参照すると、入出力制御装置２０４は、電源が入ったときに初期化される（ステップ３００）。この時、管理制御論理ユニット２１６は、適切な操作シーケンスを開始し、入出力制御論理ユニット２１２のプロセッサ２１９のそれぞれを初期化する（ステップ３００）。それぞれのプロセッサ２１９は、その関連するメモリコントローラ２２４を初期化する。特に、それぞれのプロセッサ２１９は、そのそれぞれのメモリコントローラ２２４が、その内部回路を初期化するため、リセット信号２８１をデアサートする（ステップ３００）。それぞれのメモリコントローラ２２４のリセットおよびフェイル論理ユニット２４８は、リセット信号２８１を受け取って適切な動作をとり（図５に関して上記説明したように）、その関連するメモリコントローラ２２４を初期化する。さらに、アドレスおよび制御バッファ２３１、２３３は、リセット信号２８１がデアサートされる時にイネーブルされる。それぞれのアービトレーション論理ユニット２４６は、slot_id信号２１８および（または）記憶されたビットパターンを使用し、それが、マスターまたはスレーブ入出力制御論理ユニット２１２のどちらとして動作するか判断する。この判断が行われると、マスタアービトレーション論理ユニット２４６Ａは、メモリ制御論理ユニット２４４Ａに送られる信号２７５をアサートする。この信号２７５は、マスタメモリ制御論理ユニット２４４Ａに、バッファイネーブル信号２６９Ａをアサートするよう命令し、これにより、マスタデータバッファ２２９Ａをイネーブルする。既定値として、マスタメモリコントローラ２２４Ａは、スレーブメモリバス２３０Ｂへのアクセスを持つ。こうして、スレーブデータバッファ２２９Ｂは、スレーブメモリコントローラ２２４Ｂがスレーブメモリバス２３０Ｂへのアクセスを許可されるまで、イネーブルされない。メモリコントローラ２２４が初期化されると、入出力が開始される。
【００５５】
マスタ入出力制御論理ユニット２１２Ａは、外部周辺装置２０６またはホストサーバ２０２のどちらかから受け取った入出力を扱うのが好ましい（ステップ３０２）。スレーブ入出力制御論理ユニット２１２Ｂは静止状態で動作し、マスタ入出力制御論理ユニット２１２Ａが故障を経験した場合に、スレーブ入出力制御論理２１２Ｂが、入出力制御を再開する。このため、マスタ入出力制御論理ユニット２１２Ａに関連するメモリ２３４Ａは、入出力を処理するのに使用される。マスタメモリコントローラ２２４Ａの仕事は、両方のメモリ２３４Ａ、２３４Ｂの同期を確実にとることである（ステップ３０４）。
【００５６】
図９および図１０は、同時発生のメモリ書き込み操作を実行する（ステップ３０４）のに使用されるステップを示す。マスタメモリコントローラ２２４Ａは、ＰＣＩバス２２８からメモリ書き込みコマンドおよび関連するメモリアドレスを受け取る（ステップ３０６）。マスタＰＣＩバスインタフェース２４０は、ＰＣＩバスプロトコルに従って、アドレスおよびコマンドデータをＰＣＩバス２２８Ａから受け取る（ステップ３０６）。その後、アドレスおよびコマンドデータは、マスタ復号器／状態機械２４２Ａに送られる（ステップ３０６）。さらに、書き込みデータ２２５Ａが、ＰＣＩバス２２８Ａからデータバッファ２２９Ａに直接送られる（ステップ３０８）。
【００５７】
マスタ復号器／状態機械２４２Ａは、アドレスおよびコマンドデータを復号し、それがスレーブメモリバス２３０Ｂへのアクセスを持つかどうか判断する（ステップ３１０）。既定値として、マスタメモリコントローラ２２４Ａは、許可信号２５８Ａがアサートされる時に示されるスレーブメモリバス２３０Ｂへのアクセスを持つ。マスタメモリコントローラ２２４Ａがスレーブメモリバス２３０Ｂへのアクセスを持たないならば、マスタ復号器／状態機械２４２Ａはリクエスト信号２５６Ａをアサートし、その信号は、マスタアービトレーション論理ユニット２４６Ａに送られる。マスタアービトレーション論理ユニット２４６Ａは、許可信号２５８Ａをアサートし、その信号が、バス２３０Ｂへのアクセスが得られる時に、マスタ復号器／状態機械２４２Ａに送られる。
【００５８】
図５に関して説明したように、マスタ入出力制御論理ユニット２１２Ａは、スレーブメモリバス２３０Ｂへのアクセスを優先して持つ。マスタアービトレーション論理ユニット２４６Ａは、ARB_GNT信号２６４がアサートされないならば、許可信号２５８をアサートする。通常、マスタ入出力制御論理ユニット２１２Ａがスレーブメモリバス２３０Ｂへの優先アクセスを持つので、許可信号２５８Ａがアサートされる。許可信号２５８Ａが通常アサートされるので、スレーブメモリバス２３０Ｂを仲裁するペナルティが全く無い。ARB_GNT信号２６４がアサートされる場合には、スレーブメモリコントローラ２２４Ｂがスレーブメモリバス２３０Ｂへのアクセスを持ち、マスタアービトレーション論理ユニット２４６Ａは、信号２６４をデアサートする。ARB_GNT信号２６４がデアサートされるのに応答して、スレーブアービトレーション論理ユニット２４６Ｂは、ARB_REQ信号２６２をデアサートし、これにより、マスタアービトレーション論理ユニット２４６Ａが許可信号２５８をアサートする。
【００５９】
スレーブメモリバス２３０Ｂへのアクセスが許可されると、マスタ復号器／状態機械２４２Ａは適切なアドレスおよびコマンド信号２６０Ａを生成し、この信号は、メモリ制御論理ユニット２４４Ａに送られる（ステップ３１０）。それに応答して、メモリ制御論理ユニット２４４Ａは、適切なアドレスおよび制御信号を生成し、メモリ書き込み操作を実行する（ステップ３１２）。これらの信号は、アドレス信号２６６Ａ、ローカルメモリ選択信号２６２Ａ、リモートメモリ選択信号２６４Ａおよび読み出し／書き込み制御信号２６８Ａを含み、これらの信号は、図７を参照して前に説明した。
【００６０】
マスタメモリバス２３０Ａに関連するアドレスおよび制御信号が生成されると、これらの信号の値が、スレーブメモリバス２３０Ｂに送られる（ステップ３１４）。マスタメモリバス２３０Ａからスレーブメモリバス２３０Ｂへのこれらの信号の転送をイネーブルするアドレスおよび制御バッファ２３１、２３３だけでなく、それぞれのメモリバス２３０Ａ、２３０Ｂに関連するアドレスおよび制御バス切替２９０、２９２がイネーブルされる。図７に見られるように、マスタメモリバス２３０Ａに関連するアドレス信号２６６Ａは、スレーブメモリバス２３０Ｂのアドレス信号２６６Ｂになり、マスタメモリバス２３０Ａのリモートメモリ選択信号２６４Ａは、スレーブメモリバス２３０Ｂのローカルメモリの選択信号２６２Ｂになり、マスタメモリバス２３０Ａの読み出し／書き込み制御信号２６８Ａは、スレーブメモリバス２３０Ｂの読み出し／書き込み制御信号２６８Ｂになる。
【００６１】
さらに、書き込みデータ２２５Ａが、マスタメモリバス２３０Ａからスレーブメモリバス２３０Ｂのデータ信号２２５Ｂに送られる（ステップ３１６）。読み出し／書き込み制御信号２６８は、データバッファの流れの方向を制御する。読み出し／書き込み制御信号２６８が書き込みアクセスを示す場合には、データバッファ２２９はＰＣＩバス２２８からデータを受け取り、データをメモリ２３４に出力する。読み出し／書き込み制御信号２６８が読み出しアクセスを示す場合には、データバッファ２２９はメモリ２３４からデータを受け取り、データをＰＣＩバス２２８に出力する。
【００６２】
その後、メモリ書き込み操作が実行され（図１０のステップ３１８）、メモリ書き込み操作の完了のアクノレッジ(acknowledgement)が起動される。マスタメモリ制御論理ユニット２４４は、復号器／状態機械２４２に送られる実行済信号２７０をアサートし（ステップ３２０）、復号器／状態機械２４２は、ＰＣＩバスインタフェース２４０への実行済信号２７２をアサートする（ステップ３２２）。実行済信号２７２に応答して、ＰＣＩバスインタフェース２４０は、ＰＣＩバスプロトコルに従って操作の完了をアクノレッジし（ステップ３２４）、これによりメモリ書き込み操作を完了する。
【００６３】
図８を再び参照すると、マスタ入出力制御論理ユニット２１２Ａは、メモリ故障が検出される（ステップ３２６のＹes）まで、入出力（ステップ３２６のＮo）を処理し続ける。メモリ故障は、マスタまたはスレーブ入出力制御論理ユニット２１２のどちらにも起こる可能性がある。ローカルフェイル信号２８２がアサートされるとき、関連するメモリコントローラ２２４が、その関連するメモリ２３４内のメモリ故障の警告をうける。外部フェイル信号２８４がアサートされるとき、関連するメモリコントローラ２２４が、もう片方の入出力制御論理ユニット２１２に関連するメモリ２３４で起こったメモリ故障について警告をうける。どちらの場合でも、メモリ故障に関連する入出力制御論理ユニット２１２はシャットダウンモードに入り、他方の入出力制御論理ユニット２１２は、単独制御モードに入る（ステップ３２８）。
【００６４】
図５を参照して前述したように、メモリ故障に関連するリセットおよびフェイル論理ユニット２４８は、アサートされたローカルフェイル信号２８２を受け取り、フェイル信号２７４、２７６、２７８、２８０をアサートする。これらのフェイル信号は、メモリ制御論理ユニット２４４、アービトレーション論理ユニット２４６、バス切替制御ユニット２５０およびＰＣＩバスインタフェース２４０に、適切な動作を起動させて操作を中止するよう指示する。バス切替制御ユニット２５０は、バス切替制御信号２８８をディスエーブルし、これにより、関連するバス切替２９０、２９２、２９４をディスエーブルする。メモリ制御論理ユニット２４４は、バッファイネーブル制御信号２６９をデアサートし、この信号が、データバッファ２２９をディスエーブルする。
【００６５】
メモリ故障を経験しなかったメモリ２３４に関連するリセットおよびフェイル論理ユニット２４８は、アサートされた外部フェイル信号２８４を受け取る。この信号２８４に応答して、リセットおよびフェイル論理ユニット２４８は、単独制御モードのためメモリコントローラ２２４を準備する。この場合には、スレーブメモリコントローラ２２４Ｂが、そのメモリバス２３０Ｂについて仲裁する必要がないので、またはマスタメモリコントローラがスレーブメモリバス２３０Ｂをアクセスする必要がないので、アービトレーション論理ユニット２４６は、第２のフェイル信号２７６を介してディスエーブルされる。それに応答して、アービトレーション論理ユニット２４６は、バス切替制御ユニット２５０に送られる第３のフェイル信号２７８をアサートすることにより、バス切替２９０、２９２、２９４をディスエーブルする。この場合には、バス切替２９０、２９２、２９４は、２つのメモリバス２３０Ａ、２３０Ｂの間でデータを交換する必要がないので、ディスエーブルされる。
【００６６】
こでまで述べてきたものは、冗長な同期記憶を持つフォルトトレラント入出力制御装置についての説明である。ここで説明したフォルトトレラント入出力制御装置は、いくつかの理由により有利である。第１に、１つのメモリコントローラが、２つのメモリバスを同時に制御することができる。これにより、同時発生のメモリ書き込み操作が最小の遅延を持つ方法で起こるので、冗長メモリが同期した状態で保持されることができるようになる。これは、バス切替の使用およびバス切替の位置決めに、ある程度起因する。
【００６７】
さらに、メモリコントローラが使用する入出力信号線が小数である。メモリコントローラは、ＰＣＩバス２２８から５５ビットを受け取り、制御機能に７ビット使用し、メモリを制御するのに使用される２５ビットを生成する。これにより、９０本のピンより少ない数のピンをもつＦＰＧＡとしてメモリコントローラを実現されることができる。ＦＰＧＡのコストはピン数の減少に応じて減少するので、入出力制御装置の全体のコストが減少する。さらに、最小限のピン数により、メモリコントローラの複雑さおよびメモリコントローラにより消費されるスペースが減る。
【００６８】
第２に、入出力制御論理ユニットの設計が、リモートメモリアクセスを実行するのにかかる時間量を最小にする。これは、入出力制御装置がバス・ブリッジを使用しないことに、ある程度起因する。両方のメモリが、それぞれのメモリコントローラからは、特定のメモリコントローラに事実上ローカルであり、バスブリッジまたはそれと同様のものを横切るのに必要な追加のアクセス時間をこうむらないように見える。
【００６９】
さらに、入出力制御装置は、冗長な入出力制御論理ユニットを使用するので、高い信頼性を持つ。これにより、入出力制御装置はメモリ故障の場合に操作を継続する能力を与えられ、サーバーの全体の性能が向上する。
【００７０】
説明するため上記に述べてきたものは、特定の用語を使用して、この発明の全体の理解を提供した。しかし、当該技術分野の当業者には明らかなように、この特定の詳細は、この発明を実行するのに必ずしも必要ではない。別の例では、周知の回路およびデバイスが、基本的な発明から不必要な混乱を避けるため、ブロック図の形で示される。このように、この発明の特定の実施形態の前述した説明は、説明および例示のために提供される。それらは、大変な作業であることを意図したものではなく、また開示された精密な形にこの発明を限定するものでもなく、多くの修正および様々な変更が、上記技術の観点から可能であることは明らかである。この実施形態は、この発明の原則およびその実際のアプリケーションを最も良く説明するために選択されて説明されたものであり、これにより、当該技術分野の当業者が、この発明および考えられる特定の使用に合わせて様々な修正で様々な実施形態を最も良く利用することができるようになる。この発明の範囲は、特許請求の範囲およびそれらと均等なものにより定められる。
【００７１】
この発明の入出力制御装置が、２個の入出力制御論理ユニットに制約されず、任意の数の入出力制御論理ユニットにも適していることに注意すべきである。さらに、この発明は、入出力制御装置に関して説明してきた。しかしながら、この発明は、この特定の使用に制限されず、サーバーと周辺装置との間の、ネットワークインタフェースのコントローラおよびそれと同様なものといった他のインターフェースに適用することができる（しかし、これに制限されるわけではない）。
【００７２】
さらに、当該技術分野の当業者は、入出力制御論理ユニットを改良して、両方の入出力制御論理ユニットがマスタ制御装置ユニットとして動作し、それぞれが入出力トランザクションを独立に処理するような場合に対応するよう容易に改良することができる。入出力制御論理ユニットのうちの１つのメモリ故障の場合には、故障してないユニットが単独制御の入出力トランザクションを引き継ぐ。この実施形態は、それぞれのメモリコントローラが他方の入出力制御論理ユニットのメモリバスへのアクセスを獲得することができるように、追加の信号経路を必要とするであろう。このアクセスは、それぞれの入出力制御論理ユニットが同時発生のメモリ書き込み操作を実行できるようにするために必要である。
【００７３】
本発明は例として次の実施態様を含む。
【００７４】
（１）データ処理装置(202)およびデータユニット(206)を持つコンピュータシステム(200)であって、
データ処理装置とデータユニットとの間のデータ転送を制御し、第１のメモリデバイス(234A)を有する第１の制御装置(212A)と、
データ処理装置とデータユニットとの間のデータ転送を制御し、第２のメモリデバイス(234B)を有する第２の制御装置(212B)であって、前記第１および第２のメモリデバイスへの該第２の制御装置のアクセスをイネーブルするメモリコントローラ(224B)を有する第２の制御装置と、
を備えるコンピュータシステム。
【００７５】
（２）前記メモリコントローラ(224B)が、
第１のメモリデバイス(234A)へのアクセスを獲得する第１の論理ユニットと、
該第１(234A)のメモリデバイスおよび第２のメモリデバイス(234B)へのデータ転送を同時にイネーブルする第２の論理ユニットと、
を備える上記（１）に記載のコンピュータシステム。
【００７６】
（３）前記メモリコントローラ(224B)が、
第１のメモリデバイスに対するメモリ故障の表示を受け取り、第１のメモリデバイス(234A)をメモリコントローラ(224B)がアクセスするのをディスエーブルする第３の論理ユニットを備える上記（１）に記載のコンピュータシステム。
【００７７】
（４）前記メモリコントローラ(224B)が、
第２のメモリデバイス(234B)に対するメモリ故障の表示を受け取り、データプロセッサ(202)とデータユニット(206)との間のデータ転送を前記第２の制御ユニットが制御するのをディスエーブルする第４の論理ユニットを備える上記（１）に記載のコンピュータシステム。
【００７８】
（５）データ処理装置と第１(212A)および第２(212B)の制御装置との間でデータを転送する第１の通信リンクと、
データユニットと第１および第２の制御装置との間でデータを転送する第２の通信リンクとを備える上記（１）に記載のコンピュータシステム。
【００７９】
（６）データ処理装置(202)とデータユニット(206)との間のデータ転送を制御する方法において、
複数の制御装置(212)を提供し、それぞれの制御装置が、前記データ処理装置と前記データユニットとの間のデータ転送を制御する能力を持ち、メモリデバイス(234)と、該メモリデバイスに接続される信号経路を持ち、該信号経路が、関連するメモリデバイスへのアクセスをイネーブルするステップと、
前記制御装置のうちの１つをマスタ制御装置(212A)として選択し、前記データ処理装置とデータユニットとの間のデータ転送を制御するステップと、
前記制御装置のうちの別の１つをスレーブ制御装置(212B)として指定するステップと、
前記マスタ制御装置のメモリデバイス(234A)を使用して、前記データ処理装置とデータユニットとの間でデータ転送するステップと、
前記マスタ制御装置のメモリデバイスと、前記スレーブ制御装置のメモリデバイス(234B)との同期をとるステップとを含む方法。
【００８０】
（７）前記同期をとるステップが、
前記マスタ制御装置(212A)において、前記マスタメモリデバイスに関連する信号経路の値を生成し、該マスタメモリデバイス(234A)にデータを転送するステップと、
前記生成された信号経路のサブセットを、前記スレーブメモリデバイス(234B)に関連する信号経路に転送するステップと、
前記生成された信号が、前記マスタメモリデバイスおよび前記スレーブメモリデバイスへのデータ転送を実行できるようにするステップとを含む上記（６）に記載の方法。
【００８１】
（８）データ処理装置とデータユニットとの間のデータ転送を前記マスタ制御装置(212A)が制御するのを中断するステップと、
前記データ処理装置とデータユニットとの間のデータ転送を前記スレーブ制御装置(212B)が制御するのをイネーブルするステップと、
スレーブ制御装置のメモリデバイス(234B)を使用して、前記データ処理装置とデータユニットとの間でデータ転送するステップとを含む上記（６）に記載の方法。
【００８２】
（９）前記スレーブメモリデバイス(234B)を前記マスタ制御装置(212A)がアクセスするのをディスエーブルするステップと、
前記スレーブ制御装置(212B)の操作を中断するステップとを含む上記（６）に記載の方法。
【００８３】
【発明の効果】
冗長な同期メモリをサポートする高信頼性のフォールトトレラント入出力制御装置を提供するので、メモリ故障に対応することのできる信頼性の高い入出力制御を行うことができる。
【図面の簡単な説明】
【図１】典型的な従来技術の入出力制御装置を示す図。
【図２】この発明の好ましい実施形態によるコンピュータシステムの構成要素を示すブロック図。
【図３】この発明の好ましい実施形態による図２に示される入出力制御装置の構成要素を示すブロック図。
【図４】この発明の好ましい実施形態による図３に示される入出力制御論理ユニットの構成要素を示すブロック図。
【図５】この発明の好ましい実施形態による図４に示される第１のメモリコントローラの構成要素を示すブロック図。
【図６】この発明の好ましい実施形態による図４に示される第２のメモリコントローラの構成要素を示すブロック図。
【図７】この発明の好ましい実施形態によるメモリバス信号経路を示す図。
【図８】この発明の好ましい実施形態による入出力制御装置の操作を示すフローチャート。
【図９】この発明の好ましい実施形態による同時発生のメモリ書き込み操作を実行するのに使用されるステップを示すフローチャート。
【図１０】図９に示されるフローチャートの続きであり、この発明の好ましい実施形態による同時発生のメモリ書き込み操作を実行するのに使用されるステップを示すフローチャート。
【符号の説明】
２００  コンピュータシステム
２０２  データ処理装置
２０６  データユニット
２１２  制御装置
２２４  メモリコントローラ
２３４  メモリデバイス
【図１】
0003669558.tif 000002
【図２】
0003669558.tif 000003
【図３】
0003669558.tif 000004
【図４】
0003669558.tif 000005
【図５】
0003669558.tif 000006
【図６】
0003669558.tif 000007
【図７】
0003669558.tif 000008
【図８】
0003669558.tif 000009
【図９】
0003669558.tif 000010
【図１０】
0003669558.tif 000011