(57)【要約】【課題】既存のＯＳ又はＩ/Ｏデバイスドライバを改造することなく、Ｉ/Ｏデバイスの二重化制御を行うことができるＦＴコンピュータシステムを提供すること【解決手段】ＦＴコンピュータシステム１は、第１システム１ａと、第１システム１ａと同期して動作する第２システム１ｂとを備える。第１システム１ａ及び第２システム１ｂの各々は、ＣＰＵ２と、ＣＰＵ２に接続されたルーティングコントローラ４とを備える。また、第１システム１ａは、アクティブＩ/Ｏデバイスとしての第１Ｉ/Ｏデバイス８ａを備え、第２システム１ｂは、スタンバイＩ/Ｏデバイスとしての第２Ｉ/Ｏデバイス８ｂを備える。ルーティングコントローラ４は、ＣＰＵ２と第１Ｉ/Ｏデバイス８ａ及び第２Ｉ/Ｏデバイス８ｂとの間のルーティングを制御する。第１Ｉ/Ｏデバイス８ａが故障した場合、そのルーティングコントローラ４は、ＣＰＵ２から受け取った第１Ｉ/Ｏデバイス８ａに対するリクエストデータを、第２Ｉ/Ｏデバイス８ｂへルーティングする。【選択図】      図２
2006172220.tif 000002
【特許請求の範囲】
【請求項１】
第１システムと、
前記第１システムと同期して動作する第２システムと
を具備し、
前記第１システム及び前記第２システムの各々は、
ＣＰＵと、
前記ＣＰＵに接続されたルーティングコントローラと
を備え、
前記第１システムは、アクティブＩ/Ｏデバイスとしての第１Ｉ/Ｏデバイスを備え、
前記第２システムは、スタンバイＩ/Ｏデバイスとしての第２Ｉ/Ｏデバイスを備え、
前記ルーティングコントローラは、前記ＣＰＵと前記第１Ｉ/Ｏデバイス及び前記第２Ｉ/Ｏデバイスとの間のルーティングを制御し、
前記第１Ｉ/Ｏデバイスが故障した場合、
前記ルーティングコントローラは、前記ＣＰＵから受け取った前記第１Ｉ/Ｏデバイスに対するリクエストデータを、前記第２Ｉ/Ｏデバイスへルーティングする
フォールトトレラント・コンピュータシステム。
【請求項２】
請求項１に記載のフォールトトレラント・コンピュータシステムであって、
前記ルーティングコントローラは、
前記ＣＰＵに接続されたアドレスコンバータと、
前記ＣＰＵに接続されたレスポンスデータコンバータと、
前記アドレスコンバータ及び前記レスポンスデータコンバータに接続されたルータと
を有し、
前記第１Ｉ/Ｏデバイスが故障した場合、
前記アドレスコンバータは、前記ＣＰＵから前記リクエストデータを受け取った時、前記第１Ｉ/Ｏデバイスを示すデバイス情報を前記第２Ｉ/Ｏデバイスを示すデバイス情報に置換することによって、前記リクエストデータから変換リクエストデータを生成し、前記変換リクエストデータを前記ルータにフォワードし、
前記ルータは、前記変換リクエストデータに含まれる前記デバイス情報に基づいて、前記変換リクエストデータを前記第２Ｉ/Ｏデバイスへルーティングする
フォールトトレラント・コンピュータシステム。
【請求項３】
請求項２に記載のフォールトトレラント・コンピュータシステムであって、
前記デバイス情報は、ＰＣＩヒエラルキー構造におけるＰＣＩバス番号、デバイス番号、及びファンクション番号である
フォールトトレラント・コンピュータシステム。
【請求項４】
請求項３に記載のフォールトトレラント・コンピュータシステムであって、
前記ルーティングコントローラは、
前記アドレスコンバータから参照され、前記ＰＣＩバス番号、前記デバイス番号、及び前記ファンクション番号を格納するレジスタを更に有する
フォールトトレラント・コンピュータシステム。
【請求項５】
請求項２に記載のフォールトトレラント・コンピュータシステムであって、
前記デバイス情報は、システムメモリマップ空間におけるアドレスである
フォールトトレラント・コンピュータシステム。
【請求項６】
請求項５に記載のフォールトトレラント・コンピュータシステムであって、
前記ルーティングコントローラは、
前記アドレスコンバータから参照され、前記アドレスを格納するレジスタを更に有する
フォールトトレラント・コンピュータシステム。
【請求項７】
請求項２乃至６のいずれかに記載のフォールトトレラント・コンピュータシステムであって、
前記第１Ｉ/Ｏデバイス及び前記第２Ｉ/Ｏデバイスが正常に動作している場合、
前記レスポンスデータコンバータは、前記ルータを介して前記第２Ｉ/Ｏデバイスからレスポンスデータを受け取った時、前記レスポンスデータの一部を書き換えることによって、前記レスポンスデータから変換レスポンスデータを生成し、前記変換レスポンスデータを前記ＣＰＵに出力する
フォールトトレラント・コンピュータシステム。
【請求項８】
請求項７に記載のフォールトトレラント・コンピュータシステムであって、
前記レスポンスデータコンバータは、前記レスポンスデータに含まれる前記第２Ｉ/Ｏデバイスのクラスコードを別のクラスコードに置換することによって、前記変換レスポンスデータを生成する
フォールトトレラント・コンピュータシステム。
【請求項９】
請求項８に記載のフォールトトレラント・コンピュータシステムであって、
前記ルーティングコントローラは、
前記レスポンスデータコンバータから参照され、前記別のクラスコードを格納するレジスタを更に有する
フォールトトレラント・コンピュータシステム。
【請求項１０】
請求項２乃至９のいずれかに記載のフォールトトレラント・コンピュータシステムであって、
前記第１システムの前記ルーティングコントローラと前記第１Ｉ/Ｏデバイスとの間に介在する第１ＰＣＩブリッジと、
前記第２システムの前記ルーティングコントローラと前記第２Ｉ/Ｏデバイスとの間に介在する第２ＰＣＩブリッジと
を更に具備し、
前記第１ＰＣＩブリッジのＶＧＡ  Ｅｎａｂｌｅ  ｂｉｔと、前記第２ＰＣＩブリッジのＶＧＡ  Ｅｎａｂｌｅ  ｂｉｔは、共にＥｎａｂｌｅに設定されている
フォールトトレラント・コンピュータシステム。
【請求項１１】
請求項１０に記載のフォールトトレラント・コンピュータシステムであって、
前記第２ＰＣＩブリッジの前記ＶＧＡ  Ｅｎａｂｌｅ  ｂｉｔへのアクセスが発生した場合、
前記レスポンスデータコンバータは、前記ルータを介して前記第２ＰＣＩブリッジから前記ＶＧＡ  Ｅｎａｂｌｅ  ｂｉｔを受け取り、前記受け取ったＶＧＡ  Ｅｎａｂｌｅ  ｂｉｔをＤｉｓａｂｌｅに変更する
フォールトトレラント・コンピュータシステム。
【請求項１２】
請求項１０又は１１に記載のフォールトトレラント・コンピュータシステムであって、
前記第１Ｉ/Ｏデバイス、前記第２Ｉ/Ｏデバイス、前記第１ＰＣＩブリッジ、及び前記第２ＰＣＩブリッジは、オープン系のデバイスである
フォールトトレラント・コンピュータシステム。
【請求項１３】
請求項１乃至１２のいずれかに記載のフォールトトレラント・コンピュータシステムであって、
前記第１Ｉ/Ｏデバイス及び前記第２Ｉ/Ｏデバイスは、ＶＧＡデバイスである
フォールトトレラント・コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フォールトトレラント（FT; Fault Tolerant）コンピュータシステムに関する。特に、本発明は、ＦＴコンピュータシステムにおいてＩ/Ｏデバイスを制御する技術に関する。
【背景技術】
【０００２】
交通管制、金融、証券などの基幹業務で使用されるサーバは、社会生活の基盤を担っており、それらのサーバには、高い信頼性と耐故障性が求められる。また、企業の業務サーバや、インターネットを利用したホスティング・サービスなどにおいても、故障によるサービスの停止が大きな営業的損失を招く恐れがある。このように、幅広い分野において、高信頼性サーバの需要が高まっている。
【０００３】
高度な信頼性を提供するコンピュータとして、「フォールトトレラント（FT; Fault Tolerant）コンピュータ」が知られている。ＦＴコンピュータにおいては、システムを構成するハードウェアモジュール（ＣＰＵやメモリ）が二重化、または多重化されており、各モジュールは、同一クロックで同期動作するように制御される。ある部位（モジュール）で故障が発生した場合、その故障モジュールは論理的に切り離され、正常に動作しているモジュールが処理を続行する。これにより、耐故障性が向上する。 
【０００４】
図１は、一般的なＦＴコンピュータ（システム）の構成を示す概念図である。このＦＴコンピュータ１００は、二重化されたハードウェアモジュールと、それらハードウェアモジュールに接続されたフォールトトレラント制御部（ＦＴ制御部）１１０を備えている。図１においては、ＣＰＵ１２０、メインメモリ１３０、Ｉ/Ｏデバイス１４０が二重化されている。１つのＣＰＵ１２０ａ（１２０ｂ）と１つのメインメモリ１３０ａ（１３０ｂ）が、１つのＣＰＵサブシステム１５０を構成している。つまり、このＦＴコンピュータ１００は、２つのＣＰＵサブシステム１５０によって二重化されている。この２つのＣＰＵサブシステム１５０は、同一クロックで同期動作するように制御される。また、二重化されたＩ/Ｏデバイス（群）１４０が、ＩＯサブシステム１６０を構成している。ＦＴ制御部１１０は、ＣＰＵサブシステム１５０及びＩＯサブシステム１６０を制御する。具体的には、ＦＴ制御部１１０は、２つのＣＰＵサブシステム１５０の同期動作（両系同期動作）の維持、故障の検出、故障モジュールの切り離し制御などを行う。 
【０００５】
一般的に、ＦＴコンピュータシステムは、ハードウェアで二重化制御（dual control）される部分と、ソフトウェアで二重化制御される部分とに区分される。例えば、ＣＰＵサブシステム１５０（ＣＰＵ１２０、メインメモリ１３０）は、それ自身ソフトウェアが動作する基盤である。従って、ＣＰＵサブシステム１５０は、ハードウェアで二重化制御する必要がある。ＣＰＵサブシステム１５０内でエラーが発生した場合、ＦＴ制御部１１０（ハードウェア）は、故障したＣＰＵやメモリをシステムから論理的に瞬時に切り離す。これにより、システムが停止することなく、１個のＣＰＵサブシステム１５０とＩ/Ｏサブシステム１６０により、処理が継続する。
【０００６】
一方、ＩＯサブシステム１６０は、ソフトウェアで二重化制御される。例えば、Ｉ/Ｏデバイス１４０ａが故障した場合、その故障を検出したＦＴ制御部１１０は、Ｉ/Ｏデバイス１４０を制御しているソフトウェア（以下、「Ｉ/Ｏデバイスドライバ」と参照される）に対して、エラー通知を行う。この時、Ｉ/Ｏデバイスドライバは、故障したＩ/Ｏデバイス１４０ａの使用を中止し、代わって二重化されている別のＩ/Ｏデバイス１４０ｂを使用することになる。このように、Ｉ/Ｏサブシステム１６０内のＩ/Ｏデバイス１４０の切り替えは、ソフトウェアで行われる。
【０００７】
以上に示されたＩ/Ｏデバイス１４０の切り替え制御を行うためには、Ｉ/Ｏデバイスドライバに、ＦＴ制御部１１０からのエラー通知を認識する機能と、代替Ｉ/Ｏデバイスへ切り替える処理を行う機能が実装されている必要がある。すなわち、Ｉ/Ｏデバイス１４０を司るＩ/Ｏデバイスドライバや、それらを統括管理するオペレーティングシステム(ＯＳ)が、ＦＴコンピュータに対応している必要がある。
【０００８】
特許文献１には、２ポートコンソールを有するＦＴコンピュータにおける、Ｉ/Ｏの切り替え技術が開示されている。この従来技術は、ケーブルの接続切り替え作業を行うことなく、単一のコンソール装置でシステム監視や保守を行うことを目的とする。この従来技術によるＦＴコンピュータは、コンソール出力を２系統持ち、障害が発生した場合、その入出力バスが切り替えられる。その入出力バスの切り替えは、ＯＳからの指示に応じて行われる。ここでは、専用ＯＳが使用されると考えられる。
【０００９】
近年、サーバの分野では、Ｉｎｔｅｌ（登録商標）系のＣＰＵをベースとした、いわゆる「オープン系システム（ＰＣサーバ）」が採用される傾向が強まってきている。オープン系のＰＣサーバには、独立系ハードウェアベンダが製造したＩ/Ｏデバイスが搭載され、そのＩ/Ｏデバイスの制御には、同じベンダが作成したＩ/Ｏデバイスドライバが使用されるのが主流である。しかしながら、そのようなＩ/Ｏデバイスドライバのほとんどは、ＦＴコンピュータを意識して作成されていない。そのようなＩ/Ｏデバイスドライバで、上記Ｉ/Ｏデバイスの切り替え処理機能が実装されたものは皆無である。また、ビデオアダプタ（VGA: Video Graphics Adapter）等のオープン系コンピュータに標準的に搭載されたＩ/Ｏデバイスは、ＯＳから直接アクセスされることが多い。オープン系コンピュータで主に使用されるＯＳに、フォールトトレラント・コンピュータ用の改造を加えることは、現実的に不可能である。
【００１０】
オープン系のハードウェア・ソフトウェアに対応した高信頼性サーバが望まれる。オープン系のＯＳ又はＩ/Ｏデバイスドライバに基づいて、フォールトトレラント・コンピュータシステムを実現することができる技術が望まれる。特に、オープン系のサーバにおいて、耐故障性・信頼性を向上させるために、Ｉ/Ｏデバイスの二重化制御を行うことができる技術が望まれる。
【００１１】
【特許文献１】特開平９−１６４２６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明の目的は、オープン系のハードウェア・ソフトウェアをベースとしたＦＴコンピュータシステムを提供することにある。
【００１３】
本発明の他の目的は、既存のＯＳ又はＩ/Ｏデバイスドライバを改造することなく、Ｉ/Ｏデバイスの二重化制御を行うことができるＦＴコンピュータシステムを提供することにある。
【００１４】
本発明の更に他の目的は、オープン系のサーバの耐故障性・信頼性を向上させることにある。
【課題を解決するための手段】
【００１５】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を用いて、［課題を解決するための手段］を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１６】
本発明に係るＦＴコンピュータシステム（１）は、第１システム（１ａ）と、第１システム（１ａ）と同期して動作する第２システム（１ｂ）とを備える。第１システム（１ａ）及び第２システム（１ｂ）の各々は、ＣＰＵ（２）と、ＣＰＵ（２）に接続されたルーティングコントローラ（４）とを備える。また、第１システム（１ａ）は、アクティブＩ/Ｏデバイスとしての第１Ｉ/Ｏデバイス（８ａ）を備え、第２システム（１ｂ）は、スタンバイＩ/Ｏデバイスとしての第２Ｉ/Ｏデバイス（８ｂ）を備える。ルーティングコントローラ（４）は、ＣＰＵ（２）と第１Ｉ/Ｏデバイス（８ａ）及び第２Ｉ/Ｏデバイス（８ｂ）との間のルーティングを制御する。第１Ｉ/Ｏデバイス（８ａ）が故障した場合、そのルーティングコントローラ（４）は、ＣＰＵ（２）から受け取った第１Ｉ/Ｏデバイス（８ａ）に対するリクエストデータを、第２Ｉ/Ｏデバイス（８ｂ）へルーティングする。
【００１７】
このＦＴコンピュータシステム（１）において、ルーティングコントローラ（４）は、ＣＰＵ（２）に接続されたアドレスコンバータ（４３）と、ＣＰＵ（２）に接続されたレスポンスデータコンバータ（４４）と、アドレスコンバータ（４３）及びレスポンスデータコンバータ（４４）に接続されたルータ（４５）とを有する。第１Ｉ/Ｏデバイス（８ａ）が故障した場合、このアドレスコンバータ（４３）は、ＣＰＵ（２）から第１Ｉ/Ｏデバイス（８ａ）に対するリクエストデータを受け取った時、第１Ｉ/Ｏデバイス（８ａ）を示す「デバイス情報」を第２Ｉ/Ｏデバイス（８ｂ）を示す「デバイス情報」に置換する。これにより、リクエストデータから変換リクエストデータが生成される。アドレスコンバータ（４３）は、その変換リクエストデータをルータ（４５）にフォワードする。ルータ（４５）は、変換リクエストデータに含まれる「デバイス情報」に基づいて、その変換リクエストデータを第２Ｉ/Ｏデバイス（８ｂ）へルーティングする。
【００１８】
その「デバイス情報」は、ＰＣＩヒエラルキー構造におけるＰＣＩバス番号、デバイス番号、及びファンクション番号であってもよい。この時、ルーティングコントローラ（４）は、それらＰＣＩバス番号、デバイス番号、及びファンクション番号を格納するレジスタ（５３ａ、５３ｂ）を更に有する。そのレジスタ（５３ａ、５３ｂ）は、アドレスコンバータ（４３）から参照される。
【００１９】
また、その「デバイス情報」は、システムメモリマップ空間におけるアドレスであってもよい。この時、ルーティングコントローラ（４）は、そのアドレスを格納するレジスタ（５７、５８）を更に有する。そのレジスタ（５７、５８）は、アドレスコンバータ（４３）から参照される。
【００２０】
このＦＴコンピュータシステム（１）において、第１Ｉ/Ｏデバイス（８ａ）及び第２Ｉ/Ｏデバイス（８ｂ）が正常に動作している場合、レスポンスデータコンバータ（４４）は、次のように動作する。第２Ｉ/Ｏデバイス（８ｂ）へのアクセスが発生した場合、レスポンスデータコンバータ（４４）は、ルータ（４５）を介して第２Ｉ/Ｏデバイス（８ｂ）からレスポンスデータを受け取る。この時、レスポンスデータコンバータ（４４）は、そのレスポンスデータの一部を書き換えることによって、レスポンスデータから変換レスポンスデータを生成する。そして、レスポンスデータコンバータ（４４）は、その変換レスポンスデータをＣＰＵ（２）に出力する。
【００２１】
具体的には、レスポンスデータコンバータ（４４）は、レスポンスデータに含まれる第２Ｉ/Ｏデバイス（８ｂ）の「クラスコード」を「別のクラスコード」に置換することによって、変換レスポンスデータを生成する。ルーティングコントローラ（４）は、その別のクラスコードを格納するレジスタ（５５）を更に有してもよい。そのレジスタ（５５）は、レスポンスデータコンバータ（４４）から参照される。
【００２２】
このＦＴコンピュータシステム（１）は、第１システム（１ａ）のルーティングコントローラ（４ａ）と第１Ｉ/Ｏデバイス（８ａ）との間に介在する第１ＰＣＩブリッジ（６ａ）と、第２システム（１ｂ）のルーティングコントローラ（４ｂ）と第２Ｉ/Ｏデバイス（８ｂ）との間に介在する第２ＰＣＩブリッジ（６ｂ）とを更に備える。第１ＰＣＩブリッジ（６ａ）の「VGA Enable bit」と、第２ＰＣＩブリッジ（６ｂ）の「VGA Enable bit」は、共に“Enable”に設定されている。
【００２３】
第２ＰＣＩブリッジ（６ｂ）の「VGA Enable bit」へのアクセスが発生した場合、レスポンスデータコンバータ（４４）は、ルータ（４５）を介して第２ＰＣＩブリッジ（６ｂ）から「VGA Enable bit」を受け取り、その受け取った「VGA Enable bit」を“Ｄｉｓａｂｌｅ”に変更する。
【００２４】
第１Ｉ/Ｏデバイス（８ａ）、第２Ｉ/Ｏデバイス（８ｂ）、第１ＰＣＩブリッジ（６ａ）、及び第２ＰＣＩブリッジ（６ｂ）は、オープン系のデバイスである。第１Ｉ/Ｏデバイス（８ａ）及び第２Ｉ/Ｏデバイス（８ｂ）は、例えば、ＶＧＡデバイスである。
【００２５】
このように、本発明に係るＦＴコンピュータシステム（１）によれば、アクティブ系とスタンバイ系の２個のＩ/Ｏデバイス（ＶＧＡデバイス）の二重化制御が実現される。障害時には、ハードウェアによる切り替え処理が実行され、通常処理の続行が可能となる。ここで、そのような二重化制御は、ＯＳに対して隠蔽された形で実行され、また、ＶＧＡデバイスのエラー等は、ＯＳからは完全に隠蔽される。
【００２６】
具体的には、ＶＧＡデバイスの「PCI Configuration Register」へのアクセスに際し、クラスコードの置換が行われたり、ＰＣＩブリッジへのアクセスに際し、「VGA Enable bit」の隠蔽が行われたり、障害時にアドレスの付替えが行われる。つまり、常にアクティブ側の標準ＶＧＡデバイスを使い続けているという状況が、ＯＳに対して擬似的に作り出されている。ＯＳから見えているＶＧＡデバイスは、常に一個（標準ＶＧＡデバイス）である。よって、特にＯＳに修正を施すことなく、ＶＧＡデバイス８の二重化制御が可能となる。また、Ｉ/ＯデバイスやＰＣＩブリッジとして、一般的なオープン系のデバイスが採用されたとしても、二重化制御が可能となる。すなわち、ＦＴコンピュータを意識せずに作成された既存のＯＳ、Ｉ/Ｏデバイス、Ｉ/Ｏデバイスドライバを搭載したサーバにおいても、Ｉ/Ｏデバイスの二重化及びフェイルオーバーを実現することが可能となる。
【発明の効果】
【００２７】
本発明によれば、オープン系のハードウェア・ソフトウェアをベースとしたＦＴコンピュータシステムが実現される。特に、本発明に係るＦＴコンピュータシステムによれば、既存のＯＳ又はＩ/Ｏデバイスドライバを改造することなく、Ｉ/Ｏデバイス（ハードウェア）の二重化制御を行うことが可能となる。よって、オープン系のサーバの耐故障性・信頼性が向上する。
【発明を実施するための最良の形態】
【００２８】
添付図面を参照して、本発明によるフォールトトレラント（FT; Fault Tolerant）コンピュータシステムを説明する。
【００２９】
（構成）
図２は、本発明に係るＦＴコンピュータシステムの構成を示すブロック図である。このＦＴコンピュータシステム１は、二重化された第１システム１ａと第２システム１ｂを備えている。以下の説明においては、便宜上、第１システム１ａがプライマリ（Primary）システムと参照され、第２システム１ｂがセカンダリ（Secondary）システムと参照されることがある。
【００３０】
第１システム１ａは、ＣＰＵ２ａ、メインメモリ３ａ、ルーティングコントローラ（Routing Controller）４ａ、ＦＴ制御部５ａ（第１ＦＴ制御部）、ＰＣＩブリッジ（PCI Bridge）６ａ、ＰＣＩバス７ａ、ＶＧＡデバイス８ａ、及びＩ/Ｏデバイス９ａを有している。第２システム１ｂは、第１システム１ａと同一の構成を有しており、ＣＰＵ２ｂ、メインメモリ３ｂ、ルーティングコントローラ４ｂ、ＦＴ制御部５ｂ（第２ＦＴ制御部）、ＰＣＩブリッジ６ｂ、ＰＣＩバス７ｂ、ＶＧＡデバイス８ｂ、及びＩ/Ｏデバイス９ｂを有している。両系（第１及び第２システム）において、ＣＰＵ２、メインメモリ３、ルーティングコントローラ４、及びＦＴ制御部５の一部は、ＣＰＵサブシステム１１を構成している。両系のＣＰＵサブシステム１１は、クロックも含めて完全に同期して動作する。また、ＦＴ制御部５の一部、ＰＣＩブリッジ６、及び二重化されたＩ/Ｏデバイス群（８ａ、９ａ、８ｂ、９ｂ）は、Ｉ/Ｏサブシステム１２を構成する。そのＩ/Ｏサブシステム１２と１つのＣＰＵサブシステム１１が、１つのシステムとして動作する。
【００３１】
ルーティングコントローラ４は、ＣＰＵ２、メインメモリ３、及びＦＴ制御部５に接続されている。このルーティングコントローラ４は、ノースブリッジ（North Bridge）とも呼ばれ、ＣＰＵ２からのリクエスト（Request）をメモリ系またはＩ/Ｏ系へとルーティングする役割を果たす。ここで、ルーティングコントローラ４は、ＦＴ制御部５に２本のパスを介して接続されている。それは、Ｉ/Ｏデバイス群（８ａ、９ａ、８ｂ、９ｂ）が二重化されているためである。つまり、ルーティングコントローラ４は、あるアクセスがプライマリ側のＩ/Ｏデバイス（８ａ、９ａ）に対するものか、セカンダリ側のＩ/Ｏデバイス（８ｂ、９ｂ）に対するものかを判断する。そして、その判断の結果に基づいて、ルーティングコントローラ４は、別のパスを用いてルーティングを実行する。
【００３２】
ＦＴ制御部５は、両系（２つのＣＰＵサブシステム１１）の動作の比較・チェックなどを行うことにより、プライマリ/セカンダリＣＰＵサブシステム１１の同期性を維持する。また、ＦＴ制御部５は、エラーチェックによる故障の検出や、故障モジュールの切り離し制御などを行う。 
【００３３】
ＰＣＩブリッジ６は、各Ｉ/Ｏデバイス８、９とＦＴ制御部５を接続する。本発明によれば、Ｉ/Ｏデバイスの二重化制御が実現される。その二重化制御のターゲットとなるＩ/Ｏデバイスとして、ＶＧＡ(Video Graphics Adapter)デバイス８が例示される。このＶＧＡデバイスは、レガシーＩ/Ｏデバイスの１つであり、ＯＳから直接アクセスされる場合が多い。尚、本実施の形態で用いられているＰＣＩブリッジ６やＩ/Ｏデバイス８、９は、一般的なオープン系サーバで使用されるものである。フォールトトレラント用の特殊な機能を有するのは、上述のルーティングコントローラ４及びＦＴ制御部５である。
【００３４】
また、図２に示されるように、第１ＦＴ制御部５ａと第２ＦＴ制御部５ｂは、ＦＴリンク（FT-Link）１０を介して接続されている。このＦＴリンク１０は、ＣＰＵサブシステム１１から、他系のＩ/Ｏデバイス８、９へのアクセスに使用される。つまり、第１システム１ａのＣＰＵサブシステム１１から第２システムのＩ/Ｏデバイス８ｂ、９ｂへのアクセス、及び第２システム１ｂのＣＰＵサブシステム１１から第１システムのＩ/Ｏデバイス８ａ、９ａへのアクセスに、このＦＴリンク１０は使用される。つまり、第１ＦＴ制御部５ａは、両系のＣＰＵサブシステム１１からのＰＣＩブリッジ６ａ及びその配下のＩ/Ｏデバイス８ａ、９ａに対するアクセスを受け持つ。一方、第２ＦＴ制御部５ｂは、両系のＣＰＵサブシステム１１からのＰＣＩブリッジ６ｂ及びその配下のＩ/Ｏデバイス８ｂ、９ｂに対するアクセスを受け持つ。両系の同期チェックは、ＦＴ制御部５が受け持つ範囲に限られる。したがって、本システムでは、ＦＴ制御部５による同期チェックは分散的に行われることになる。
【００３５】
また、図２に示されるように、２つのＶＧＡデバイス８ａ、８ｂは、スイッチ１３を介して表示装置（Display）１４に接続される。本実施の形態に係るＦＴコンピュータシステム１は、二重化されるＶＧＡデバイス８ａ、８ｂを有しているので、本来２つのＶＧＡ出力を有している。しかしながら、表示装置１４は一つに限られるため、このスイッチ１３が、ＶＧＡ出力を切り替える役割を果たす。通常時、表示装置１４は、優先的に使用される側（例えば、プライマリ側）のＶＧＡデバイス８の出力に接続される。障害発生時においては、表示装置１４とＶＧＡ出力との接続は、ＦＴ制御部５の制御によって適宜切り替えられる。接続されるＶＧＡデバイス８は、標準ＶＧＡデバイスとして、システムに唯一存在することになる。
【００３６】
図３は、本実施の形態に係るＦＴコンピュータシステム１における、ＰＣＩ（Peripheral Component Interconnect）のヒエラルキー構造を示す概念図である。全てのアクセス可能なデバイスには、“ＰＣＩ  Ｂｕｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ”に従って、ＰＣＩバス番号、デバイス番号、及びファンクション番号が与えられる。これにより、ＣＰＵ２を頂点としたヒエラルキー構造が得られる。
【００３７】
例えば、ルーティングコントローラ４内に存在するメモリコントローラデバイス（Memory Controller Device）２１には、“Device#0”が付与されている。ＦＴ制御部５内に存在するＦＴコントロールデバイス（FT Control Device）２２には、“Device#1”が付与されている。第１システム１ａのＰＣＩブリッジ６ａ（第１ＰＣＩブリッジ；PCI Bridge#1）には、“Device#2”が付与されている。第２システム１ｂのＰＣＩブリッジ６ｂ（第２ＰＣＩブリッジ；PCI Bridge#２）には、“Device#3”が付与されている。これらメモリコントローラデバイス２１、ＦＴコントロールデバイス２２、第１ＰＣＩブリッジ６ａ、及び第２ＰＣＩブリッジ６ｂは、ＣＰＵ２の下層に位置し、“Bus#0”が付与されたバスを介してＣＰＵ２に接続されている。
【００３８】
また、第１ＰＣＩブリッジ６ａの配下には、ＶＧＡデバイス（Video Device#1）８ａ及びＩ/Ｏデバイス（I/O Device#1）９ａが存在しており、それらＶＧＡデバイス８ａ及びＩ/Ｏデバイス９ａは、“Bus#1”が付与されたバスを介して第１ＰＣＩブリッジ６ａに接続されている。ＶＧＡデバイス８ａには、“Device#0”が付与され、Ｉ/Ｏデバイス９ａには、“Device#1”が付与されている。また、第２ＰＣＩブリッジ６ｂの配下には、ＶＧＡデバイス（Video Device#2）８ｂ及びＩ/Ｏデバイス（I/O Device#2）９ｂが存在しており、それらＶＧＡデバイス８ｂ及びＩ/Ｏデバイス９ｂは、“Bus#2”が付与されたバスを介して第２ＰＣＩブリッジ６ｂに接続されている。ＶＧＡデバイス８ｂには、“Device#0”が付与され、Ｉ/Ｏデバイス９ｂには、“Device#1”が付与されている。
【００３９】
ＣＰＵ２上のＯＳを含むソフトウェアがＶＧＡデバイス８やＩ/Ｏデバイス９にアクセス手段としては、（１）PCI Configuration Access、（２）IO Mapped Access、及び（３）Memory Mapped PCI Accessの３通りが存在する。これらのうち、「PCI Configuration Access」が発生した場合、該アクセスは、図３に示されたヒエラルキー構造を参照することによってフォワードされる。つまり、該アクセスは、ルーティングコントローラ４、ＰＣＩブリッジ６を経て、該当するＰＣＩバス番号を有するバスへフォワードされていく。そして、最終的には、ターゲットであるＶＧＡデバイス８やＩ/Ｏデバイス９に、該アクセスが到達する。
【００４０】
また、図４は、本実施の形態に係るシステムメモリマップを示す概念図である。ＶＧＡデバイス８やＩ/Ｏデバイス９は、それぞれアドレス空間を有している。オープン系サーバで標準的に使用されるＩｎｔｅｌ（登録商標）系のシステムの場合、図4に示されるように、ＶＧＡデバイス８やＩ/Ｏデバイス９は、４ギガバイト以下のアドレスのシステムメモリ空間にマップされる。例えば、“Address A-low”から“Address A-hi”で規定される空間へのアクセスは、ルーティングコントローラ４によって、第１ＰＣＩブリッジ６ａへフォワードされる。第１ＰＣＩブリッジ６ａは、それをＰＣＩバス“Bus#1”へフォワードする。この時、“PCI Bus#1”に接続された各デバイスは、バス上に発行されたアドレスを参照し、自アドレス空間に一致した場合、このアクセスを受け入れる。
【００４１】
また、Ｉｎｔｅｌ系システムでは、“A0000h〜BFFFFh空間”へのアクセスは、図４に示されるように、「標準ＶＧＡ空間」として扱われる。この標準ＶＧＡ空間に対するアクセスは、システムに唯一存在する標準ＶＧＡデバイスへフォワードされる。この場合、前提条件として、システム起動時にＢＩＯＳのシステム・ソフトウェア等によって、標準ＶＧＡデバイスが決められる。そして、配下に標準ＶＧＡデバイスが存在するＰＣＩブリッジ６には、「VGA Enable bit」と呼ばれるＰＣＩコンフィグレーションレジスタ（PCI Configuration Register）がセットされる。“A0000h〜BFFFFh空間”へのアクセスが検出された場合、ルーティングコントローラ４は、この“VGA Enable bit”がセットされているＰＣＩブリッジ６に該アクセスをフォワードする。これにより、標準ＶＧＡデバイスへのアクセスが実現されている。上述の「Memory Mapped PCI Access」が発生した場合、該アクセスは、図４に示されたシステムメモリマップを参照することによってフォワードされる。
【００４２】
図５Ａは、一般的なＩ/ＯデバイスのＰＣＩコンフィグレーションレジスタ空間の一部を概念的に示している。また、図５Ｂは、クラスコードレジスタ（Class Code Register）を概念的に示している。一般的に、ドライバやＯＳは、システム内の全デバイスの本空間にアクセスを行い、デバイスの製造者や種別のアドレス空間へのマッピングを行っている。例えば、クラスコード（Class Code）フィールドは、どのようなＩ/Ｏデバイスかを示す識別子である。このクラスコードフィールドは、ＶＧＡデバイス８の場合は“030000h”であり、あらゆる範疇に入らないＩ/Ｏデバイスの場合は“FF0000h”となることが、「ＰＣＩ  Ｂｕｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」で定義されている。
【００４３】
以上に示された、図３、図４、図５Ａ及び図５Ｂに関する事項は、「ＰＣＩ  Ｂｕｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」で規定されている。
【００４４】
本発明に係るルーティングコントローラ４は、ＶＧＡデバイス８の二重化制御を、ハードウェアによって実現する。図６は、本発明に係るルーティングコントローラ４の構成を示すブロック図である。ルーティングコントローラ４は、ターゲットであるＩ/Ｏデバイス（８、９）のアドレスをデコードし、ＣＰＵ２からのリクエストがそのターゲットにフォワードされるように、適切なルーティングを行う。図６に示されるように、本発明に係るルーティングコントローラ４は、制御部４０と、その制御部４０に接続されたルーティングコントロールレジスタ群（Routing Control Registers）４１及びエラー検出器（Error Detector）４２を備えている。また、制御部４０は、アドレスコンバータ（Address Converter）４３、レスポンスデータコンバータ（Response Data Converter）４４、及びルータ（Router）４５を備えている。
【００４５】
ルーティングコントロールレジスタ群４１は、後述されるように、ルーティングコントローラ４の各種設定を行う。エラー検出器４２は、ＰＣＩブリッジ６、ＶＧＡデバイス８及びＩ/Ｏデバイス９で検出されたエラー情報を保持し、また、制御部４０にエラー検出を通知する。
【００４６】
アドレスコンバータ４３は、ＣＰＵ２とルータ４５に接続されている。このアドレスコンバータ４３は、ＣＰＵ２からリクエストデータを受け取る。この時、アドレスコンバータ４３は、そのリクエストに対応するアドレス（リクエストアドレス）を、ルーティングコントロールレジスタ群４１の設定に基づいて変換し、「変換アドレス情報」を生成する。そして、アドレスコンバータ４３は、生成された変換アドレス情報を含む「変換リクエストデータ」を、ルータ４５に出力する。ＦＴ制御部５ａ、５ｂに接続されたルータ４５は、その変換アドレス情報に基づいてルーティングを行う。
【００４７】
レスポンスデータコンバータ４４は、ＣＰＵ２とルータ４５に接続されている。このレスポンスデータコンバータ４４は、Ｉ/Ｏデバイス９やＶＧＡデバイス８からのレスポンスデータをルータ４５を経由して受け取る。この時、レスポンスデータコンバータ４４は、ルーティングコントロールレジスタ群４１の設定に基づいて、受け取ったレスポンスデータの一部の内容を書き換え、「変換レスポンスデータ」を生成する。そして、レスポンスデータコンバータ４４は、その変換レスポンスデータを、レスポンスデータとしてＣＰＵ２に出力する。
【００４８】
図７は、本発明に係るルーティングコントロールレジスタ群４１の構成を示す概念図である。このルーティングコントロールレジスタ群４１は、以下の複数のレジスタ５１〜５８から構成されている。
【００４９】
Config Address Routing Control Enable：
本レジスタ５１は、ＶＧＡデバイス８等のデバイスを二重化制御する機能そのものを活性化／非活性化させるためのレジスタである。本レジスタ５１が“Disable”に設定されると、ハードウェアの二重化制御は停止する。この場合、ルーティングコントローラ４は、従来の一般的なノースブリッジと同様の動作を行う。本レジスタ５１が“Enable”に設定されると、ハードウェアの二重化制御はが開始する。
【００５０】
Default Target Device：
本レジスタ５２は、２つあるＶＧＡデバイス８ａ、８ｂのうち、実際に使用する「標準ＶＧＡデバイス」を指定するためのレジスタである。システム起動時にＢＩＯＳによって、このレジスタ５２には、“Primary”と“Secondary”のいずれかが指定される。“Primary”が設定された場合、ＶＧＡデバイス８ａが標準ＶＧＡデバイスとして採用され、“Secondary”が設定された場合、ＶＧＡデバイス８ｂが標準ＶＧＡデバイスとして採用され、エラー検出器４２からＰＣＩブリッジ６あるいはＶＧＡデバイス８のエラーが通知された場合、ルーティングコントローラ４は、本レジスタ５２を参照して、ＶＧＡデバイス８へのルーティングを切り替える。
【００５１】
Primary Device PCI Configuration Number:
Secondary Device PCI Configuration Number:
本レジスタ５３ａ及び５３ｂのそれぞれには、二重化制御されるＶＧＡデバイス８ａ及び８ｂのＰＣＩバス番号、デバイス番号、ファンクション番号が設定される。ＣＰＵ２からリクエストとして上述の「PCI Configuration Access」を受け取った場合、ルーティングコントローラ４は、本レジスタ５３ａ及び５３ｂに格納された値との比較を行う。これにより、ルーティングコントローラ４は、ＶＧＡデバイス８へのアクセスを認識することができる。
【００５２】
Primary Device Class Code Replace Enable：
Secondary Device Class Code Replace Enable：
本レジスタ５４ａ及び５４ｂのそれぞれは、クラスコードレジスタへのアクセスの際にクラスコードを置換する機能を活性化／非活性化させるためのレジスタである。本レジスタ５４が“Enable”に設定された場合、ルーティングコントローラ４（レスポンスデータコンバータ４４）は、次に示される“Replace Class Code”レジスタ５５に設定された値を用いて上記「変換レスポンスデータ」を生成する。つまり、レスポンスデータコンバータ４４は、ＶＧＡデバイス８ａあるいは８ｂのクラスコードレジスタへのアクセスに対するレスポンスデータを、“Replace Class Code”レジスタ５５に設定されたクラスコードを用いて書き換える。本レジスタ５４が“Disable”に設定された場合、このような置換は行われない。
【００５３】
一般的に、システムに２個のＶＧＡデバイス８が存在する場合、ＯＳは両者を異なるＶＧＡデバイス８として捉え、独立に制御しようと動作する。しかし、本発明に係るシステムは、フォールトトレラント・コンピュータシステムであり、一方のＶＧＡデバイス８を使用している場合は、他方のＶＧＡデバイス８をＯＳから隠蔽する必要がある。そして、一方のＶＧＡデバイス８が故障した場合に、他方のＶＧＡデバイス８を代替として使用する必要がある。ここで、ＶＧＡデバイス８そのものを隠蔽した場合、デバイスそのものがＯＳから不可視となってしまい、隠蔽されたＶＧＡデバイス８のアドレスがシステムメモリ空間へ登録されなくなる。その結果、ＰＣＩブリッジ６へのアドレス範囲の設定も行われなくなるため、代替ＶＧＡデバイスへのアクセスが物理的に不可能になってしまう。そのため、本発明によれば、クラスコードのみを他の値に置換するという手段が採用される。これにより、使用されていないＶＧＡデバイス８を、擬似的に隠蔽することが可能となる。
【００５４】
Replace Class Code：
本レジスタ５５には、上述の置換に用いられる値が設定される。上記「Default Target Device」に設定された側ではないＶＧＡデバイス８のクラスコードレジスタに対するアクセスが発生した場合、ルーティングコントローラ４（レスポンスデータコンバータ４４）は、レスポンスデータを本レジスタ５５に設定された値で置換する。ＶＧＡデバイス８のクラスコードは“030000h”と定められているが、本発明によれば、本レジスタ５５には、例えば「その他のデバイス（Other Device）」を示すクラスコード“FF0000h”が設定される。結果として、ＯＳは、上記「Default Target Device」に設定された側ではないＶＧＡデバイス８を、一般的なＩ/Ｏデバイスとして認識する。
【００５５】
Primary VGA Enable bit Hide Enable：
Secondary VGA Enable bit Hide Enable：
本レジスタ５６ａ、５６ｂは、オープン系デバイスであるＰＣＩブリッジ６の上記「VGA Enable bit」を隠蔽するためのレジスタである。一般的なＷｉｎｄｏｗｓ（登録商標）等のＯＳは、複数のＰＣＩブリッジ６の「VGA Enable bit」が“Enable”にセットされている場合の動作を保証していない。よって、従来のシステムの場合、ＰＣＩブリッジ６ａ及び６ｂのいずれかのみに、「VGA Enable bit」がセットされるべきである。「VGA Enable bit」が“Enable”にセットされていない場合、ＰＣＩブリッジ６は、標準ＶＧＡ空間（A0000h〜BFFFFh）へのアクセスを下位のＰＣＩバスへフォワードしない。しかしながら、本発明に係るシステムは、ＦＴコンピュータシステムである。上記「Default Target Device」に設定されたＶＧＡデバイス８が故障した場合は、代替ＶＧＡデバイスが使用されなければならない。よって、代替ＶＧＡデバイス側のＰＣＩブリッジ６で標準ＶＧＡ空間へのアクセスが遮断されないようにする必要がある。すなわち、両系のＰＣＩブリッジ６ａ、６ｂの「VGA Enable bit」が“Enable”にセットされなければならない。一般的なＷｉｎｄｏｗｓ（登録商標）等のＯＳを本システムに適用する際の矛盾を解消するために、本レジスタ５６ａ、５６ｂは、「VGA Enable bit」を隠蔽する機能を提供する。本レジスタ５６が“Enable”に設定されたＰＣＩブリッジ６の「VGA Enable bit」へのアクセスが検出された場合、ルーティングコントローラ４（レスポンスデータコンバータ４４）は、レスポンスデータを置換することによって、その「VGA Enable bit」を隠蔽する。
【００５６】
Primary Base Address：
Secondary Base Address：
Primary Address Size：
Secondary Address Size：
本レジスタ５７ａ、５７ｂ、５８ａ、５８ｂは、それぞれのＶＧＡデバイス８に割り当てられたベースアドレス（Base Address）及びそのサイズを設定するためのレジスタである。ＶＧＡデバイス８は、メモリ空間を有しており、Ｉｎｔｅｌ（登録商標）系のシステムの場合、システムメモリ中の４ギガバイトより下のアドレスの何れかにマップされる。本レジスタ５７ａ、５７ｂには、双方（Primary/Secondary）のＶＧＡデバイス８ａ、８ｂがどのアドレスにマップされたかが設定される。本レジスタ５７、５８は、「Default Target Device」に設定されたＶＧＡデバイス８が故障した際、ＣＰＵ２からのアクセスを代替ＶＧＡデバイスへのアクセスへ変更するために、アドレスコンバータ４３から参照される。つまり、デフォルトのＶＧＡデバイス８が故障した際、引き続き同一のＶＧＡデバイス８を使用している様にＯＳに見せる必要があるため、アドレスコンバータ４３はアドレスの付け替えを行う。これにより、ＯＳに対してはデフォルトのＶＧＡデバイス８の故障を隠蔽しつつ、実際には異なる代替デバイスへのアクセス・ルーティングを実行することが可能となる。
【００５７】
以上に説明されたルーティングコントローラ４により、デフォルトのＶＧＡデバイス８が故障した際に、ハードウェアによるアドレス変換及び切り替え制御を実行することが可能となる。これにより、ＦＴコンピュータシステム１は、処理を続行することが可能となる。ここで、そのような制御は、ＯＳに対して隠蔽された形で実行され、また、ＶＧＡデバイス８のエラー等は、ＯＳからは完全に隠蔽される。つまり、常に正常なデバイスを使い続けているという状況が、ＯＳに対して擬似的に作り出されている。ＯＳから見えているＶＧＡデバイス８は、常に一個である。よって、特にＯＳに修正を施すことなく、ＶＧＡデバイス８の二重化制御が可能となる。また、Ｉ/Ｏデバイス（８、９）やＰＣＩブリッジ６として、一般的なオープン系のデバイスが採用されたとしても、二重化制御が可能となる。すなわち、ＦＴコンピュータを意識せずに作成された既存のＯＳ、Ｉ/Ｏデバイス、Ｉ/Ｏデバイスドライバを搭載したサーバにおいても、Ｉ/Ｏデバイスの二重化を実現することが可能となる。
【００５８】
（動作例）
以下、本発明に係るＦＴコンピュータシステム１の動作の一例が詳細に示される。図２及び図３に示されたＦＴコンピュータシステム１において、プライマリ側のＩ/Ｏデバイス群８、９がアクティブＩ/Ｏ（Active I/O）であり、セカンダリ側のＩ/Ｏデバイス群８、９がスタンバイＩ/Ｏ（Stand-by I/O）であるとする。アクティブＩ/Ｏは、処理に使用されるＩ/Ｏデバイス群であり、スタンバイＩ/Ｏは、アクティブＩ/Ｏが故障した際に代わって使用されるＩ/Ｏデバイス群である。つまり、第１システム１ａのＶＧＡデバイス８ａは、通常使用されるアクティブＶＧＡデバイス（標準ＶＧＡデバイス）であり、第２システム１ｂのＶＧＡデバイス８ｂは、スタンバイＶＧＡデバイス（代替ＶＧＡデバイス）である。
【００５９】
図７に示されたルーティングコントロールレジスタ群４１は、以下の通り設定されたとする。
【００６０】
Config Address Routing Control Enable：“Enable”
これにより、本発明に係るハードウェアによるＩ/Ｏデバイスの二重化制御がアクティブになる。
【００６１】
Default Target Device：“Primary”
上述の通り、プライマリ側のＶＧＡデバイス８ａがアクティブに設定されている。本レジスタ５２に設定された側のＶＧＡデバイス８（Ｉ/Ｏデバイス）が、以下、「デフォルト」と参照される場合がある。
【００６２】
Primary Device PCI Config. Number  ：“Bus#1, Dev#0, Func#0”
Secondary Device PCI Config. Number：“Bus#2, Dev#0, Func#0”
図３に示されたＰＣＩヒエラルキー下におけるデバイス情報が、本レジスタ５３に設定される。レジスタ５３ａには、プライマリ側のＶＧＡデバイス８ａのデバイス情報が設定され、レジスタ５３ｂには、セカンダリ側のＶＧＡデバイス８ｂのデバイス情報が設定されている。
【００６３】
Primary Device Class Code Replace Enable  ：“Disable”
Secondary Device Class Code Replace Enable：“Enable”
Replace Class Code：“FF0000h”
プライマリ側のＶＧＡデバイス８ａは、ＯＳに見せられるＶＧＡデバイスである。一方、セカンダリ側のＶＧＡデバイス８ｂは、ＯＳから隠蔽されるべきＶＧＡデバイスであり、ＯＳに「その他のデバイス」として認識させる必要がある。そのため、セカンダリ側のクラスコード（Class Code）が“FF0000h”に置換されるという設定が行われている。
【００６４】
Primary VGA Enable bit Hide Enable  ：“Disable”
Secondary VGA Enable bit Hide Enable：“Enable”
アクティブ／スタンバイに関わらず、ＰＣＩブリッジ６ａ及び６ｂの「VGA Enable bit」は、ＢＩＯＳにより“Enable”に設定される。但し、本実施の形態によれば、スタンバイ側のＰＣＩブリッジ６ｂの「VGA Enable bit」へのアクセスが発生した場合、そのビット情報が隠蔽される必要がある。そのため、セカンダリ側に対するレジスタ５６ｂは、“Enable”にセットされている。
【００６５】
Primary Base Address  ：FD00_0000h
Primary Address Size  ：200_0000h
Secondary Base Address：F800_0000h
Secondary Address Size：200_0000h
本レジスタ５７、５８の値は、ＶＧＡデバイス８が有するＰＣＩコンフィグレーションレジスタ（図５Ａ参照）のベースアドレスレジスタ（Base Address Register）の値に依存する。ここでは、仮に上記値がセットされたとする。
【００６６】
以上の設定により、ＯＳから見たシステムのＰＣＩヒエラルキーは、図８に示されたような構造を有することになる。アクティブ側及びスタンバイ側のＰＣＩブリッジ６ａ及び６ｂの「VGA Enable bit（VGA_En）」は、双方とも“Enable”に設定されている。また、スタンバイ側のＶＧＡデバイス８ｂは、ＯＳからは「その他のデバイス６０」として認識されている。また、図９Ａは、システムメモリマップを示しており、図９Ｂは、ＰＣＩコンフィグレーションマップを示している。アクティブＶＧＡデバイスは、“FD00_0000h 〜 FFFF_FFFFh”にマッピングされ、スタンバイＶＧＡデバイスは、“F800_0000h 〜 FAFF_FFFh”にマッピングされている。また、アドレス“A0000h〜BFFFFh”は、標準ＶＧＡ空間（Compatible VGA Space）として扱われている。
【００６７】
ＣＰＵ２上のＯＳを含むソフトウェアがＶＧＡデバイス８にアクセス手段としては、少なくとも（１）PCI Configuration Access、（２）Memory Mapped PCI Access、及び（３）IO Mapped Accessの３通りが存在する。以下の説明においては、特に、「PCI Configuration Access」に対するルーティングと、「Memory Mapped PCI Access」に対するルーティングについて示される。尚、「IO Mapped Access」に関しては、「Memory Mapped PCI Access」に対するルーティングとほぼ同じ制御が行われるため、ここではその説明は省略される。
【００６８】
図１０は、本発明に係るＦＴコンピュータシステム１（ルーティングコントローラ４）の動作を示すフローチャートである。まず、ＣＰＵ２は、あるデバイス（ターゲット）に対するリード・リクエストを発行する。ＣＰＵ２からリクエスト（リード・リクエスト）を受け取った時、アドレスコンバータ４３は、そのアクセスの形態を調べる（ステップＳ１）。アクセスの形態が上記３種類の形態以外の場合、アドレスコンバータ４３は、そのリクエストを単にルータ４５へフォワードする（ステップＳ３００）。ルータ４５は、ターゲットであるデバイスへのルーティングを実行する（ステップＳ３０１）。
【００６９】
（１）PCI Configuration Access
ステップＳ１において、アクセスの形態が「PCI Configuration Access」の場合、図１１に示されるフローが実行される。ＣＰＵ２からＰＣＩコンフィグレーション（図８参照）に対するリード・リクエストが発行された場合、制御部４０（アドレスコンバータ４３）は、そのリクエストデータからバス番号、デバイス番号、ファンクション番号、及びレジスタオフセットアドレスを抽出する。そして、制御部４０は、抽出された値を、「Primary/Secondary Device PCI Config. Number（レジスタ５３ａ、５３ｂ）」に設定された値と比較する（ステップＳ１０１）。
【００７０】
例えば、抽出された値が、「Secondary Device PCI Config. Number」に設定された値と一致した場合（ステップＳ１０１；Ｙｅｓ）、制御部４０（アドレスコンバータ４３）は、エラー検出器４２に格納されたエラー情報に基づいて、その一致したデバイスが正常かどうか判定する（ステップＳ１０２）。一致したデバイスが正常である場合（ステップＳ１０２；Ｙｅｓ）、制御部４０は、更に、レジスタオフセットアドレスを調べ、そのアドレスがクラスコードレジスタのアドレス（09h〜0Bh；図５参照）の範囲内にあるかどうかを判定する（ステップＳ１０３）。
【００７１】
クラスコードレジスタへのアクセスが含まれない場合（ステップＳ１０３；Ｎｏ）、上記ステップＳ３００が実行される。クラスコードレジスタへのアクセスが含まれる場合（ステップＳ１０３；Ｙｅｓ）、制御部４０は、「Secondary Device Class Code Replace」の設定を確認する（ステップＳ１０４）。ここで、「Secondary Device Class Code Replace」は“Enable”に設定されているので（ステップＳ１０４；Ｙｅｓ）、制御部４０は、レスポンスデータコンバータ４４に対して、クラスコードの置換を指示する（ステップＳ１０５）。その後、上記ステップＳ３００が実行される。
【００７２】
その後、セカンダリＶＧＡデバイス８ｂからレスポンスデータが返される。レスポンスデータコンバータ４４は、レスポンスデータを受け取った時、そのレスポンスデータに示されているクラスコードを、「Replace Class Code」に設定された“FF0000h”に置換する。そして、レスポンスデータコンバータ４４は、置換により生成された変換レスポンスデータを、ＣＰＵ２に渡す。以上のシーケンスにより、ＯＳがスタンバイＶＧＡデバイス８ｂのクラスコードにアクセスした場合、必ず“FF0000h（Other Device）”が返される。そのため、ＯＳが２個のＶＧＡデバイス８ａ、８ｂを認識することはなくなる。
【００７３】
また、ＣＰＵ２からのリクエストが、セカンダリＰＣＩブリッジ６ｂの「VGA Enable bit」を参照するリード・リクエストであるとする（ステップＳ１０１；Ｎｏ、ステップＳ１１１；Ｙｅｓ）。「VGA Enable bit」は、“PCI-to-PCI Bridge Specification”で規定されており、ブリッジコントロールレジスタ（Bridge Control Register；オフセットアドレス：3Eh）に存在する。その領域に対するアクセスを認識した場合（ステップＳ１１２；Ｙｅｓ）、制御部４０（アドレスコンバータ４３）は、「Secondary VGA Enable bit Hide」を参照する（ステップＳ１１３）。ここで、「Secondary VGA Enable bit Hide」は、“Enable”にセットされているので（ステップＳ１１３；Ｙｅｓ）、制御部４０は、レスポンスデータコンバータ４４に対して、「VGA Enable bit」の隠蔽を指示する（ステップＳ１１４）。その後、上記ステップＳ３００が実行される。
【００７４】
その後、セカンダリＰＣＩブリッジ６ｂからレスポンスデータが返される。レスポンスデータコンバータ４４は、レスポンスデータを受け取った時、そのレスポンスデータに示されている「VGA Enable bit」を、“Disable(=0)”に置換する。そして、レスポンスデータコンバータ４４は、置換により生成された変換レスポンスデータを、ＣＰＵ２渡す。以上のシーケンスにより、ＯＳがスタンバイ側のＰＣＩブリッジ６ｂの「VGA Enable bit」にアクセスした場合、必ず“Disable”が返される。これにより、スタンバイ側のＰＣＩブリッジ６ｂがＯＳから隠蔽される。実際には複数のＰＣＩブリッジ６において「VGA Enable bit」がセットされているが、ＯＳから「VGA Enable bit」がセットされているように見えるＰＣＩブリッジは、プライマリ側のＰＣＩブリッジ６ａに限られる。従って、ＯＳにとって、不整合は何ら発生しない。
【００７５】
次に、アクティブＶＧＡデバイス８ａが故障した場合、またはアクティブＶＧＡデバイス８ａにおいて何らかのエラーが発生した場合を考える。この障害に関する情報は、エラー検出器４２によって、制御部４０に通知されている。
【００７６】
ＣＰＵ２からアクティブＶＧＡデバイス８ａに対するリード・リクエストが発行された場合、制御部４０（アドレスコンバータ４３）は、そのリクエストデータからバス番号、デバイス番号、ファンクション番号、及びレジスタオフセットアドレスを抽出する。そして、制御部４０は、抽出された値を、「Primary/Secondary Device PCI Config. Number」に設定された値と比較する（ステップＳ１０１）。ここでは、抽出された値が、「Primary Device PCI Config. Number」に設定された値と一致する（ステップＳ１０１；Ｙｅｓ）。また、アクセスターゲットであるアクティブＶＧＡデバイス８ａは故障している（ステップＳ１０２；Ｎｏ）。
【００７７】
この時、制御部４０は、そのアクセスターゲットであるアクティブＶＧＡデバイス８ａが、「デフォルト」に一致しているかどうか判定する（ステップＳ１２１）。不一致の場合（ステップＳ１２１；Ｎｏ）、ステップＳ３００が実行される。この例においては、アクセスターゲットがデフォルトに一致する（ステップＳ１２１；Ｙｅｓ）。この場合、アドレスコンバータ４３は、「Secondary Device PCI Config. Number」を参照し、上記抽出された値を、デフォルトではないスタンバイＶＧＡデバイス８ｂのバス番号、デバイス番号、ファンクション番号に置換する（ステップＳ１２２）。このようにして、変換アドレス情報が生成される。そして、アドレスコンバータ４３は、生成された変換アドレス情報を含む「変換リクエストデータ」を、ルータ４５に出力する（ステップＳ３００）。
【００７８】
この例では、「Bus#1：Dev#0：Func#0」へのリクエストが、「Bus#2:Dev#0:Func#0」へのリクエストに書き換えられることとなる。その結果、図１３に示されるように、該リード・リクエストは、セカンダリＶＧＡデバイス８ｂ（６０）へルーティングされることとなる。図１４に示されるように、プライマリＶＧＡデバイス８ａへのアクセスが、セカンダリＶＧＡデバイス８ｂ（６０）へのアクセスに置き換えられる。これにより、プライマリＶＧＡデバイス８ａの障害を、ＯＳに対して隠蔽することが可能となり、処理を続行することが可能となる。ＯＳは、プライマリＶＧＡデバイス８ａにアクセスし続けているように認識する。
【００７９】
（２）Memory Mapped PCI Access
ステップＳ１において、アクセスの形態が「Memory Mapped PCI Access」の場合、図１２に示されるフローが実行される。この「Memory Mapped PCI Access」の場合は、図９Ａ及び図９Ｂに示されたシステムメモリマップが参照される。まず、ＣＰＵ２からリード・リクエストを受け取った場合、制御部４０（アドレスコンバータ４３）は、そのリクエストアドレス（Request Address）をチェックする（ステップＳ２０１、ステップＳ２１１）。
【００８０】
例えば、標準ＶＧＡ空間（A0000h〜BFFFFh)へのリードリクエストがＣＰＵ２によって発行された場合（ステップＳ２０１；Ｎｏ、ステップＳ２１１；Ｙｅｓ）、制御部４０（アドレスコンバータ４３）は、「Default Target Device」で指定されたデフォルトにエラーが発生しているかどうか確認する（ステップＳ２１２）。デフォルトが正常な場合（ステップＳ２１２；Ｎｏ）、アドレスコンバータ４３は、ルータ４５に対して、デフォルト側のＰＣＩブリッジ６ａにリクエストを強制的にルーティングするように指示を出す（ステップＳ２１３）。これにより、該リクエストは、プライマリ側のＰＣＩブリッジ６ａへルーティングされ、結果的にプライマリ側のアクティブＶＧＡデバイス８ａにルーティングされる。
【００８１】
デフォルトに障害が発生している場合（ステップＳ２１２；Ｙｅｓ）、アドレスコンバータ４３は、ルータ４５に対して、非デフォルト側（スタンバイ側）のＰＣＩブリッジ６ｂにリクエストを強制的にルーティングするように指示を出す（ステップＳ２３０）。これにより、該リクエストは、セカンダリ側のＰＣＩブリッジ６ｂへルーティングされ、結果的にセカンダリ側のスタンバイＶＧＡデバイス８ｂにルーティングされる。
【００８２】
また例えば、リクエストアドレスが、ＶＧＡデバイス８のアドレス空間に含まれる場合（ステップＳ２０１；Ｙｅｓ）、制御部４０（アドレスコンバータ４３）は、そのターゲットであるＶＧＡデバイス８に障害が発生しているか確認する（ステップＳ０２）。ターゲットであるプライマリＶＧＡデバイス８ａが、正常に動作している場合（ステップＳ２０２；Ｎｏ）、ステップＳ３００が実行される。
【００８３】
ターゲットであるプライマリＶＧＡデバイス８ａに障害が発生している場合（ステップＳ２０２；Ｙｅｓ）、制御部４０は、そのターゲットがデフォルトに一致しているかどうか判定する（ステップＳ２２１）。この例の場合、プライマリＶＧＡデバイス８ａは、デフォルトである（ステップＳ２２１；Ｙｅｓ）。この場合、アドレスコンバータ４３は、リクエストアドレスを、非デフォルト側（セカンダリＶＧＡデバイス８ｂ）のアドレスに置換する（ステップＳ２２２）。この例では、図１５に示されるように、“FE00_0000h”へのリクエストが、“F900_0000h”へのリクエストに書き換えられることになる。これらアドレス値は、「Primary/Secondary Base Address」及び「Primary/Secondary Address Size」に基づいて計算される。このような書き換えの結果、図１３に示されるように、該リード・リクエストは、セカンダリＶＧＡデバイス８ｂ（６０）へルーティングされることとなる。これにより、プライマリＶＧＡデバイス８ａの障害を、ＯＳに対して隠蔽することが可能となり、処理を続行することが可能となる。ＯＳは、プライマリＶＧＡデバイス８ａにアクセスし続けているように認識する。
【００８４】
なお、通常の場合、ＯＳは、機能が未知の「Other Device」（スタンバイＶＧＡデバイス８ｂ）に直接アクセスを行うことはない。たとえ、その「Other Device」に障害が発生したとしても、ルーティングコントローラ４は、アクティブ系の障害を隠蔽するのと同様に、その障害をＣＰＵ２へ通知しない。よって、二次的な障害がシステムのダウンを招くことはない。
【００８５】
（効果）
以上に説明されたように、本発明に係るＦＴコンピュータシステム１によれば、アクティブ系とスタンバイ系の２個のＶＧＡデバイス８の二重化制御が実現される。障害時には、ハードウェアによる切り替え処理が実行され、通常処理の続行が可能となる。ここで、そのような二重化制御は、ＯＳに対して隠蔽された形で実行され、また、ＶＧＡデバイス８のエラー等は、ＯＳからは完全に隠蔽される。
【００８６】
具体的には、ＶＧＡデバイス８の「PCI Configuration Register」へのアクセスに際し、クラスコードの置換が行われたり、ＰＣＩブリッジ６へのアクセスに際し、「VGA Enable bit」の隠蔽が行われたり、障害時にアドレスの付替えが行われる。つまり、常にアクティブ側の標準ＶＧＡデバイスを使い続けているという状況が、ＯＳに対して擬似的に作り出されている。ＯＳから見えているＶＧＡデバイス８は、常に一個（標準ＶＧＡデバイス）である。よって、特にＯＳに修正を施すことなく、ＶＧＡデバイス８の二重化制御が可能となる。また、Ｉ/Ｏデバイス（８、９）やＰＣＩブリッジ６として、一般的なオープン系のデバイスが採用されたとしても、二重化制御が可能となる。すなわち、ＦＴコンピュータを意識せずに作成された既存のＯＳ、Ｉ/Ｏデバイス、Ｉ/Ｏデバイスドライバを搭載したサーバにおいても、Ｉ/Ｏデバイスの二重化及びフェイルオーバーを実現することが可能となる。よって、オープン系のサーバの耐故障性・信頼性が向上する。
【００８７】
尚、実施の形態においては、ＶＧＡデバイス８がＩ/Ｏデバイスの一例として示されたが、本発明は、ＶＧＡデバイス８以外のデバイスに対しても有効である。つまり、ＶＧＡデバイス以外のデバイスに対して、同様の切り替え機能や隠蔽機能が適用される。これにより、オープン系デバイスをハードウェアで二重化制御することが可能となる。
【図面の簡単な説明】
【００８８】
【図１】図１は、一般的なフォールトトレラント（ＦＴ）コンピュータシステムの構成を概略的に示すブロック図である。
【図２】図２は、本発明に係るフォールトトレラント（ＦＴ）コンピュータシステムの構成を示すブロック図である。
【図３】図３は、システム内のＰＣＩヒエラルキーを示す概念図である。
【図４】図４は、システムメモリマップを示す概念図である。
【図５Ａ】図５Ａは、ＰＣＩコンフィグレーションレジスタの内容を示す概念図である。
【図５Ｂ】図５Ｂは、クラスコードレジスタの内容を示す概念図である。
【図６】図６は、本発明に係るルーティングコントローラの構成を示すブロック図である。
【図７】図７は、本発明に係るルーティングコントロールレジスタ群の構成を示す概念図である。
【図８】図８は、本発明に係るＰＣＩヒエラルキーの一例を示す概念図である。
【図９Ａ】図９Ａは、本発明に係るシステムメモリマップの一例を示す概念図である。
【図９Ｂ】図９Ｂは、本発明に係るＰＣＩコンフィグレーションマップの一例を示す概念図である。
【図１０】図１０は、本発明に係るＦＴコンピュータシステムの動作を示すフローチャートである。
【図１１】図１１は、本発明に係るＦＴコンピュータシステムの動作を示すフローチャートである。
【図１２】図１２は、本発明に係るＦＴコンピュータシステムの動作を示すフローチャートである。
【図１３】図１３は、本発明に係るＦＴコンピュータシステムの動作の一例を説明するための図である。
【図１４】図１４は、本発明に係るＦＴコンピュータシステムの動作の一例を説明するための図である。
【図１５】図１５は、本発明に係るＦＴコンピュータシステムの動作の一例を説明するための図である。
【符号の説明】
【００８９】
１    フォールトトレラント（ＦＴ）コンピュータシステム
１ａ  第１システム
１ｂ  第２システム
２    ＣＰＵ
３    メインメモリ
４    ルーティングコントローラ
５    ＦＴ制御部
６    ＰＣＩブリッジ
７    ＰＣＩバス
８    ＶＧＡデバイス
９    Ｉ/Ｏデバイス
１０    ＦＴリンク
１１    ＣＰＵサブシステム
１２    ＩＯサブシステム
１３    スイッチ
１４    表示装置
２１    メモリコントローラデバイス
２２    ＦＴコントロールデバイス
４０    制御部
４１    ルーティングコントロールレジスタ群
４２    エラー検出器
４３    アドレスコンバータ
４４    レスポンスデータコンバータ
４５    ルータ
６０    その他のデバイス
【図１】
2006172220.tif 000003
【図２】
2006172220.tif 000004
【図３】
2006172220.tif 000005
【図４】
2006172220.tif 000006
【図５Ａ】
2006172220.tif 000007
【図５Ｂ】
2006172220.tif 000008
【図６】
2006172220.tif 000009
【図７】
2006172220.tif 000010
【図８】
2006172220.tif 000011
【図９Ａ】
2006172220.tif 000012
【図９Ｂ】
2006172220.tif 000013
【図１０】
2006172220.tif 000014
【図１１】
2006172220.tif 000015
【図１２】
2006172220.tif 000016
【図１３】
2006172220.tif 000017
【図１４】
2006172220.tif 000018
【図１５】
2006172220.tif 000019