(57)【要約】【課題】  ＰＣＩバス障害によるシステムダウンの発生を抑止し、ＰＣＩデバイスドライバで全てのＰＣＩバス障害処理を可能とするＰＣＩバスコントローラを提供する。【解決手段】  バス信号制御部１６１はＰＣＩバスプロトコルに従ってＰＣＩバス２００上のＰＣＩデバイスとのトランザクション制御を行い、バス障害検出時にバス障害インジケータ１６４ａをセットしてＰＣＩバスを縮退状態として扱い、ＰＣＩデバイスへの指示要求を受付ける。コンフィグレーション部１６４はバス障害インジケータ１６４ａを持ち、コンフィグレーションレジスタを更新し、リプライトランザクションをインバウンドコントローラ部１６３に送信する。アービトレーション部１６５はＰＣＩバス２００の調停を行い、バス縮退状態時にＰＣＩデバイスからのバス使用要求をマスクする。【選択図】      図３                                                  
2005215809.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、主記憶と、複数の入出力デバイスとを接続する入出力バスを制御するバスコントローラを含み、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）にて制御されるコンピュータシステムであって、前記入出力バスで発生した障害の前記ＯＳへの伝搬を抑止する手段と、当該障害の復旧処理を指示する手段とを有することを特徴とするコンピュータシステム。
【請求項２】
プロセッサと、主記憶と、複数の入出力デバイスとを入出力バスにて接続し、前記入出力バスを制御するバスコントローラを含むコンピュータシステムであって、
前記入出力バスの縮退状態の監視及び前記入出力バスの復旧処理の指示を行うブリッジドライバを有し、
前記バスコントローラに、障害が発生した入出力バスを縮退状態として扱う手段と、前記障害の伝搬を抑止しかつ当該障害の発生時及び発生後のトランザクションを処理する手段とを有し、
前記ブリッジドライバと前記バスコントローラとを連携させて前記入出力デバイスに前記入出力バスの障害検出から復旧処理までを行わせることを特徴とするコンピュータシステム。
【請求項３】
前記入出力バスでのエラー検出時に点灯させるバス障害インジケータを前記バスコントローラに含み、
前記バスコントローラは、前記バス障害インジケータの点灯時に前記入出力バスを縮退状態とすることを特徴とする請求項２記載のコンピュータシステム。
【請求項４】
前記入出力バスの障害を検出したトランザクションに対して、前記入出力デバイスへの書込み系の処理のエラー時に全て正常リプライを返却するとともに、前記入出力デバイスからの読出し系の処理のエラー時に全て正常リプライを返却しかつ前記入出力デバイスからの読出し系の処理を再度行わせるために全ての値が予め設定した所定値のデータを読出す入出力バス制御手段を前記バスコントローラに含むことを特徴とする請求項２または請求項３記載のコンピュータシステム。
【請求項５】
前記入出力バス制御手段は、前記入出力バスの縮退後に送られてくる後続のトランザクションに対して、前記入出力デバイスへのトランザクションを実行可能とし、前記入出力デバイスからのトランザクションの受付けを抑止することを特徴とする請求項４記載のコンピュータシステム。
【請求項６】
前記ブリッジドライバは、前記バスコントローラの縮退状態を監視することによって前記障害を検出し、対応する前記入出力デバイスに障害発生を通知する機能と、前記入出力デバイスからの要求によって前記入出力バスの縮退状態を復旧させるための指示を前記バスコントローラに発行しかつその結果を要求元の前記入出力デバイスへ通知する機能とを含むことを特徴とする請求項２から請求項５のいずれか記載のコンピュータシステム。
【請求項７】
前記入出力デバイスは、前記復旧の通知を受取った時に自デバイスに対して初期設定処理を行って再びシステムへの組込みを行うことを特徴とする請求項６記載のコンピュータシステム。
【請求項８】
前記入出力バスは、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスであることを特徴とする請求項１から請求項７のいずれか記載のコンピュータシステム。
【請求項９】
ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）にて制御されるコンピュータシステムにおいて、プロセッサと主記憶と複数の入出力デバイスとを接続する入出力バスを制御するバスコントローラであって、前記入出力バスで発生した障害の前記ＯＳへの伝搬を抑止する手段を有し、前記ＯＳへの前記障害の伝搬を抑止する際に当該障害の復旧処理を指示させることを特徴とするバスコントローラ。
【請求項１０】
プロセッサと、主記憶と、複数の入出力デバイスとを入出力バスにて接続するシステムにおいて前記入出力バスを制御するバスコントローラであって、
障害が発生した入出力バスを縮退状態として扱う手段と、
前記障害の伝搬を抑止しかつ前記障害の発生時及び発生後のトランザクションを処理する手段とを有し、
前記縮退状態の監視及び前記入出力バスの復旧処理の指示を行うブリッジドライバと連携して前記入出力デバイスに前記入出力バスの障害検出から復旧処理までを行わせることを特徴とするバスコントローラ。
【請求項１１】
前記入出力バスでのエラー検出時に点灯させるバス障害インジケータを含み、前記バス障害インジケータの点灯時に前記入出力バスを縮退状態とすることを特徴とする請求項１０記載のバスコントローラ。
【請求項１２】
前記入出力バスの障害を検出したトランザクションに対して、前記入出力デバイスへの書込み系の処理のエラー時に全て正常リプライを返却するとともに、前記入出力デバイスからの読出し系の処理のエラー時に全て正常リプライを返却しかつ前記入出力デバイスからの読出し系の処理を再度行わせるために全ての値が予め設定した所定値のデータを読出す入出力バス制御手段を含むことを特徴とする請求項１０または請求項１１記載のバスコントローラ。
【請求項１３】
前記入出力バス制御手段は、前記入出力バスの縮退後に送られてくる後続のトランザクションに対して、前記入出力デバイスへのトランザクションを実行可能とし、前記入出力デバイスからのトランザクションの受付けを抑止することを特徴とする請求項１２記載のバスコントローラ。
【請求項１４】
前記入出力バスは、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスであることを特徴とする請求項９から請求項１３のいずれか記載のバスコントローラ。
【請求項１５】
プロセッサと、主記憶と、複数の入出力デバイスとを接続する入出力バスを制御するバスコントローラを含み、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）にて制御されるコンピュータシステムのバス障害処理方法であって、前記バスコントローラ側において、前記入出力バスで発生した障害の前記ＯＳへの通知を抑止しかつ当該障害の復旧処理を指示することを特徴とするバス障害処理方法。
【請求項１６】
プロセッサと、主記憶と、複数の入出力デバイスとを入出力バスにて接続し、前記入出力バスを制御するバスコントローラを含むコンピュータシステムのバス障害処理方法であって、前記バスコントローラ側において、障害が発生した入出力バスを縮退状態として扱い、前記障害の伝搬を抑止しかつ前記障害の発生時及び発生後のトランザクションを処理するとともに、前記入出力バスの縮退状態の監視及び前記入出力バスの復旧処理の指示を行うブリッジドライバと前記バスコントローラとを連携させて前記入出力デバイスに前記入出力バスの障害検出から復旧処理までを行わせることを特徴とするバス障害処理方法。
【請求項１７】
前記入出力バスでのエラー検出時に点灯させるバス障害インジケータを前記バスコントローラに設け、前記バスコントローラが前記バス障害インジケータの点灯時に前記入出力バスを縮退状態とすることを特徴とする請求項１６記載のバス障害処理方法。
【請求項１８】
前記バスコントローラに設けた入出力バス制御手段で、前記入出力バスの障害を検出したトランザクションに対して、前記入出力デバイスへの書込み系の処理のエラー時に全て正常リプライを返却するとともに、前記入出力デバイスからの読出し系の処理のエラー時に全て正常リプライを返却しかつ前記入出力デバイスからの読出し系の処理を再度行わせるために全ての値が予め設定した所定値のデータを読出させることを特徴とする請求項１６または請求項１７記載のバス障害処理方法。
【請求項１９】
前記入出力バス制御手段が、前記入出力バスの縮退後に送られてくる後続のトランザクションに対して、前記入出力デバイスへのトランザクションを実行可能とし、前記入出力デバイスからのトランザクションの受付けを抑止することを特徴とする請求項１８記載のバス障害処理方法。
【請求項２０】
前記ブリッジドライバが、前記バスコントローラの縮退状態を監視することによって前記障害を検出し、対応する前記入出力デバイスに障害発生を通知し、前記入出力デバイスからの要求によって前記入出力バスの縮退状態を復旧させるための指示を前記バスコントローラに発行しかつその結果を要求元の前記入出力デバイスへ通知することを特徴とする請求項１６から請求項１９のいずれか記載のバス障害処理方法。
【請求項２１】
前記入出力デバイスが、前記復旧の通知を受取った時に自デバイスに対して初期設定処理を行って再びシステムへの組込みを行うことを特徴とする請求項２０記載のバス障害処理方法。
【請求項２２】
前記入出力バスが、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスであることを特徴とする請求項１５から請求項２１のいずれか記載のバス障害処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータシステム、バスコントローラ及びそれらに用いるバス障害処理方法に関し、特にコンピュータシステムにおいてＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスを制御するＰＣＩバスコントローラに関する。
【背景技術】
【０００２】
今日では多くのコンピュータシステムが開発されており、さまざまな分野で使用されている。図１１にはコンピュータシステムとしては最小構成の構成例を示しているが、この構成をさらに発展させ、１システムにさらに多くのプロセッサやＰＣＩデバイスを接続し、３２ないし６４プロセッサからなるマルチプロセッサシステムや、１００を越えるＰＣＩバススロットを持つマルチプロセッサシステムも開発されている。
【０００３】
このような大規模コンピュータシステムは、一般に、高度な信頼性や耐障害性が必要となる用途（ミッションクリティカルな用途）に用いられることが多い。したがって、そこで用いられるコンピュータシステムには高度な可用性が求められる。このため、近年、障害検出時のエラー伝播による影響を最小限に抑えるための技術が必要とされている。
【０００４】
従来のＰＣＩバスを備えるコンピュータシステムの構成の一例を図１１に示す。図１１において、プロセッサ（ＣＰＵ：中央処理装置）６１はプロセッサバス（ＦＳＢ：Ｆｒｏｎｔ  Ｓｉｄｅ  Ｂｕｓ）１００を介してメモリコントローラ（ＭＭＣ：Ｍａｉｎ  Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌ）６２に接続さている。
【０００５】
メモリコントローラ６２はプロセッサ６１とのＩ／Ｆ（インタフェース）の他、主記憶（ＤＩＭＭ：Ｄｕａｌ  Ｉｎ−ｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）６３及びＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）コントローラ（ＩＯＣ：Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  ｃｏｎｔｒｏｌ）６４のＩ／Ｆを備えている。
【０００６】
メモリコントローラ６２はプロセッサ６１及びＩ／Ｏコントローラ６４から受けたトランザクションのルーティングを行い、システム規模や構成によって１個ないし複数のＬＳＩ（大規模集積回路）で構成されるユニットである。主記憶６３にはＰＣＩデバイスドライバ６３２を含むＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）６３１が格納されている。
【０００７】
Ｉ／Ｏコントローラ６４はメモリコントローラ６２とのＩ／Ｆを備え、配下に接続されるＰＣＩバス２００を制御するＰＣＩバスコントローラ（ＰＢＣ：ＰＣＩ  Ｂｕｓ  Ｃｏｎｔｒｏｌ）６５を内蔵し、システム規模や構成によって１個ないし複数のＬＳＩで構成されるユニットである。ＰＣＩバス２００には複数のＰＣＩデバイス（周辺装置）（図示せず）を接続することが可能である。
【０００８】
ここで、上記のＯＳ６３１及びＰＣＩデバイスドライバ６３２は、図１２に示すように、アプリケーションプログラム７１とＰＣＩデバイス［ハードウェア（ＨＷ）７２］との間の信号やデータの入出力を制御しており、ＯＳ６３１はＰＣＩデバイスドライバ６３２とアプリケーションプログラム７１との間の信号やデータの流れを監視してＰＣＩバス２００の障害を検出している。
【０００９】
上述したコンピュータシステムでは、プロセッサ６１からＰＣＩデバイスへ直接的なアクセスや、ＰＣＩデバイスを起点とした主記憶６３へのアクセスが行われる。このアクセス動作について図１１を参照して説明する。
【００１０】
まず、プロセッサ６１からＰＣＩデバイスへ直接的なアクセス動作について、プロセッサ６１からのＩ／Ｏリード［アウトバウンド（Ｏｕｔｂｏｕｎｄ）リード］の場合について説明する。プロセッサ６１からのＩ／Ｏリードの場合、プロセッサ６１からＰＣＩデバイスへのリードトランザクションは、プロセッサバス１００を経由してメモリコントローラ６２からＩ／Ｏコントローラ６４へ入る。
【００１１】
Ｉ／Ｏコントローラ６４へ到達したリードトランザクションは、ＰＣＩバスコントローラ６５でＰＣＩバストランザクションに変換されてＰＣＩバス２００に送出され、目的のＰＣＩデバイスへと到達する。このＰＣＩバス２００上でのトランザクションの伝達動作は一般的なＰＣＩサイクル（メモリサイクル、Ｉ／Ｏサイクル、コンフィグレーションサイクル等）であり、その動作が公知であるので、その説明については省略する。
【００１２】
その後、ＰＣＩデバイスからのリプライ及びリードデータは、上記と逆の経路を辿って、ＰＣＩバス２００からＰＣＩバスコントローラ６５、メモリコントローラ６２、プロセッサバス１００を経てトランザクションの送出元であるプロセッサ６１へと返却される。
【００１３】
ＰＣＩバス２００へのトランザクション送出が障害等によって失敗した場合には、以下のような動作となる。つまり、アドレス・パリティエラー等のＰＣＩバス２００のエラーが発生した場合には、ＰＣＩデバイスがエラーを検知してシステムエラー線ＳＥＲＲ（Ｓｙｓｔｅｍ  Ｅｒｒｏｒ）＃をドライブし、エラーを検知したＰＣＩバスコントローラ６５がプロセッサ６１に対してＮＭＩ（Ｎｏｎ  Ｍａｓｋ  Ｉｎｔｅｒｒｕｐｔ）信号線によってエラーを通知する。
【００１４】
また、データ・パリティエラー等のＰＣＩバス２００のエラーを検出した場合には、ＰＣＩバスコントローラ６５がエラーを検知してパリティエラー線ＰＥＲＲ（Ｐａｒｉｔｙ  Ｅｒｒｏｒ）＃をドライブし、リードリプライの代わりにエラーリプライを返却する。エラーリプライとは正常リプライと異なり、プロセッサ６１から送出されたトランザクションが正常に終了しなかったことをプロセッサ６１に通知するためのリプライである。
【００１５】
続いて、プロセッサ６１からのＰＣＩデバイスへの直接的なアクセス動作のＩ／Ｏライト［アウトバウンド（Ｏｕｔｂｏｕｎｄ）ライト］について説明する。プロセッサ６１からＰＣＩデバイスへのライトには２種類のトランザクションが定義される。プロセッサ６１がＰＣＩデバイスへの書込み完了応答を待ち合わせるデファード（Ｄｅｆｅｒｒｅｄ）タイプの書込み（Ｄｅｆｅｒｒｅｄライト）と、書込み完了応答を待合せないポステッド（Ｐｏｓｔｅｄ）タイプの書込み（Ｐｏｓｔｅｄライト）とである。
【００１６】
Ｄｅｆｅｒｒｅｄライトトランザクションの場合、上述したＩ／Ｏリードと同様の経路を辿ってＰＣＩバスコントローラ６５にルーティングされる。ルーティングされたライトトランザクションはＰＣＩバスコントローラ６５でＰＣＩバストランザクションに変換されてＰＣＩバス２００に送出され、目的のＰＣＩデバイスへと到達する。このＰＣＩバス２００上でのトランザクションの伝達動作は、一般的なＰＣＩサイクルのため、公知であるので、その説明については省略する。
【００１７】
その後、全てのデータの送信（ＰＣＩサイクルの終了）を確認したＰＣＩバスコントローラ６５はライトリプライを発行する。このライトリプライが上記と逆の経路を辿って、メモリコントローラ６２、プロセッサバス１００を経てトランザクションの送出元であるプロセッサ６１へと返却される。
【００１８】
尚、Ｐｏｓｔｅｄライトトランザクションの場合、プロセッサ６１はトランザクションの送出を完了した時点で書込み動作を完了と見なし、送出されたＰｏｓｔｅｄライトを目的のＰＣＩデバイスに向けてルーティングし、ＰＣＩバス２００に全てのデータの送信が完了した時点でトランザクションとしての動作を終了する。
【００１９】
ＰＣＩバス２００へのトランザクション送出が障害等によって失敗した場合には、以下のような動作となる。つまり、アドレス・パリティエラー等のＰＣＩバス２００のエラーが発生した場合には、ＰＣＩデバイスがエラーを検知してシステムエラー線ＳＥＲＲ＃をドライブし、エラーを検知したＰＣＩバスコントローラ６５がプロセッサ６１に対してＮＭＩ信号線によってエラーを通知する。
【００２０】
また、データ・パリティエラー等のＰＣＩバス２００のエラーを検出した場合には、ＰＣＩデバイスがパリティエラー線ＰＥＲＲ＃をドライブし、ＰＣＩバスコントローラ６５がエラーを検知してプロセッサ６１に通知する。ここで、Ｄｅｆｅｒｒｅｄライトのデータ・パリティエラーの場合には、ＰＣＩバスコントローラ６５は正常リプライの代わりにエラーリプライを送出する。Ｐｏｓｔｅｄライトのデータ・パリティエラーの場合には、ＰＣＩバスコントローラ６５はＮＭＩ信号線によってエラーを通知する。
【００２１】
ＰＣＩデバイスを起点とした主記憶へのアクセス動作のＰＣＩバス２００配下のＰＣＩデバイスからのメモリリード［インバウンド（Ｉｎｂｏｕｎｄ）リード］について説明する。ＰＣＩバス２００に送出されたリードトランザクションはＩ／Ｏコントローラ６４のＰＣＩバスコントローラ６５に入力される。リードトランザクションを受信したＰＣＩバスコントローラ６５はＰＣＩトランザクションをプラットフォームの内部形式のトランザクションへ変換し、メモリコントローラ６２へトランザクションを送出する。メモリコントローラ６２はＩ／Ｏコントローラ６４から受取ったトランザクションにしたがって主記憶６３をアクセスする。
【００２２】
主記憶６３からのリプライデータは、上記と逆の経路を辿ってメモリコントローラ６２からＩ／Ｏコントローラ６４へ送出され、要求元のＰＣＩデバイスが接続されているＰＣＩバスコントローラ６５に送信される。ルーティングされたリプライデータはＰＣＩバスコントローラ６５でＰＣＩバストランザクションに変換され、ＰＣＩバス２００へ送出され、リード送出元のＰＣＩデバイスへと送信される。このＰＣＩバス２００上でのリードデータの伝達動作は、一般的なＰＣＩサイクルのため、公知であるので、その説明については省略する。
【００２３】
ＰＣＩバス２００へのトランザクション送出が障害等によって失敗した場合には、以下のような動作となる。つまり、アドレス・パリティエラー等のＰＣＩバスのエラーが発生した場合には、ＰＣＩバスコントローラ６５がエラーを検出してシステムエラー線ＳＥＲＲ＃をドライブするとともに、プロセッサ６１に対してＮＭＩ信号線によってエラーを通知する。
【００２４】
また、ＰＣＩバスコントローラ６５がリードデータをＰＣＩバス２００に送出中にデータ・パリティエラーが発生した場合には、ＰＣＩデバイスがエラーを検出してパリティエラー線ＰＥＲＲ＃をドライブしてＰＣＩバスコントローラ６５にエラーを通知する。データ・パリティエラーを検出したＰＣＩデバイスは、デバイス固有のエラー処理を行う。
【００２５】
ＰＣＩデバイスを起点とした主記憶６３へのアクセス動作のＰＣＩバス２００配下のＰＣＩデバイスからのメモリライト［インバウンド（Ｉｎｂｏｕｎｄ）ライト］について説明する。ＰＣＩバス２００配下のＰＣＩデバイスからのライトトランザクションは、ＰＣＩバス２００からＩ／Ｏコントローラ６４のＰＣＩバスコントローラ６５に入力される。
【００２６】
ライトトランザクションを受信したＰＣＩバスコントローラ６５はＰＣＩトランザクションをプラットフォームの内部形式のトランザクションへ変換し、メモリコントローラ６２へトランザクションを送出する。メモリコントローラ６２はＩ／Ｏコントローラ６４から受取ったトランザクションにしたがって、主記憶６３に対して書込みを行う。このＰＣＩバス２００上でのライトデータの伝達動作は、一般的なＰＣＩサイクルのため、公知であるので、その説明については省略する。
【００２７】
ＰＣＩバス２００へのトランザクション送出が障害等によって失敗した場合には、以下のような動作となる。つまり、アドレス・パリティエラー等のＰＣＩバス２００のエラーが発生した場合には、ＰＣＩバスコントローラ６５がエラーを検出してシステムエラー線ＳＥＲＲ＃をドライブするとともに、プロセッサ６１に対してＮＭＩ信号線によってエラーを通知する。
【００２８】
また、ＰＣＩデバイスがライトデータをＰＣＩバス２００に送出中にデータ・パリティエラーが発生した場合には、ＰＣＩバスコントローラ６５がエラーを検出してパリティエラー線ＰＥＲＲ＃をドライブしてＰＣＩデバイスにエラーを通知する。通知を受けたＰＣＩデバイスは、デバイス固有のエラー処理を行う。
【００２９】
【特許文献１】特開２００１−２７３２００号公報
【発明の開示】
【発明が解決しようとする課題】
【００３０】
上述した従来のコンピュータシステムでは、プロセッサからＰＣＩデバイスへのアクセス中、もしくはＰＣＩデバイスから主記憶へのアクセス中に、ＰＣＩバスで障害が発生したトランザクションを特定できないアドレス・パリティエラー等のエラーを検出した場合に、システムエラー信号線ＳＥＲＲ＃をアクティブにする。
【００３１】
通常、システムエラー信号線ＳＥＲＲ＃がアサートされると、プロセッサ（ＯＳ）に対してＮＭＩ信号線によってエラーの発生が通知される。システムエラー信号線ＳＥＲＲ＃はクロックに同期していれば、複数のデバイスが同時に、いつでもドライブすることができる。これによって、プロセッサはエラー発生を知ることができるが、エラーの発生源を特定することができない。このため、プロセッサでは有効なエラー処理を行うことができず、エラー伝搬を抑えるために、ＮＭＩ発生時にはシステムを異常停止（システムダウン）させている。
【００３２】
また、ＰＣＩバスのデータ・パリティエラーを検出し、エラーリプライとしてプロセッサに報告した場合には、例外ハンドラによる特殊なエラー処理が必要となる。しかしながら、接続されるＰＣＩデバイスの仕様や制御方法はＰＣＩデバイスによって大きく異なるため、例外ハンドラが単独で全てのＰＣＩデバイスのエラー処理を完全に行うことはできない。このため、有効なエラー処理を行うことがてきない場合、例外ハンドラはエラー伝搬を抑えるために、システムを異常停止（システムダウン）させている。
【００３３】
このように、エラーの発生元を特定できないＮＭＩ信号線による障害通知の場合、及びエラーリプライによる障害通知に対して例外ハンドラが十分なエラー処理を行うことができない場合には、システムへのエラー伝播を抑えるために、システムダウンさせている。これはＰＣＩバス障害時に有効な障害処理手段がないことに起因する。
【００３４】
上記のように、従来のコンピュータシステムでは、ＰＣＩバス障害をＮＭＩ信号線やエラーリプライとしてプロセッサに通知し、ＯＳの例外ハンドラに処理させる場合、例外ハンドラが十分なエラー処理を行うことができなければ、システムへのエラー伝播を抑えるためにシステムダウンさせてしまうという問題がある。
【００３５】
そこで、本発明の目的は上記の問題点を解消し、ＰＣＩバス障害によるシステムダウンの発生を抑止することができ、全てのＰＣＩバス障害処理をＰＣＩデバイスドライバによって行うことができるコンピュータシステム、バスコントローラ及びそれらに用いるバス障害処理方法を提供することにある。
【課題を解決するための手段】
【００３６】
本発明によるコンピュータシステムは、プロセッサと、主記憶と、複数の入出力デバイスとを接続する入出力バスを制御するバスコントローラを含み、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）にて制御されるコンピュータシステムであって、前記入出力バスで発生した障害の前記ＯＳへの伝搬を抑止しかつ当該障害の復旧処理を指示する手段を備えている。
【００３７】
本発明による他のコンピュータシステムは、プロセッサと、主記憶と、複数の入出力デバイスとを入出力バスにて接続し、前記入出力バスを制御するバスコントローラを含むコンピュータシステムであって、
前記入出力バスの縮退状態の監視及び前記入出力バスの復旧処理の指示を行うブリッジドライバを備え、
前記バスコントローラに、障害が発生した入出力バスを縮退状態として扱う手段と、前記障害の伝搬を抑止しかつ当該障害の発生時及び発生後のトランザクションを処理する手段とを備え、
前記ブリッジドライバと前記バスコントローラとを連携させて前記入出力デバイスに前記入出力バスの障害検出から復旧処理までを行わせている。
【００３８】
本発明によるバスコントローラは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）にて制御されるコンピュータシステムにおいて、プロセッサと主記憶と複数の入出力デバイスとを接続する入出力バスを制御するバスコントローラであって、前記入出力バスで発生した障害の前記ＯＳへの伝搬を抑止しかつ当該障害の復旧処理を指示する手段を備えている。
【００３９】
本発明による他のバスコントローラは、プロセッサと、主記憶と、複数の入出力デバイスとを入出力バスにて接続するシステムにおいて前記入出力バスを制御するバスコントローラであって、
障害が発生した入出力バスを縮退状態として扱う手段と、
前記障害の伝搬を抑止しかつ前記障害の発生時及び発生後のトランザクションを処理する手段とを備え、
前記縮退状態の監視及び前記入出力バスの復旧処理の指示を行うブリッジドライバと連携して前記入出力デバイスに前記入出力バスの障害検出から復旧処理までを行わせている。
【００４０】
本発明によるバス障害処理方法は、プロセッサと、主記憶と、複数の入出力デバイスとを接続する入出力バスを制御するバスコントローラを含み、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）にて制御されるコンピュータシステムのバス障害処理方法であって、前記バスコントローラ側において、前記入出力バスで発生した障害の前記ＯＳへの通知を抑止しかつ当該障害の復旧処理を指示している。
【００４１】
本発明による他のバス障害処理方法は、プロセッサと、主記憶と、複数の入出力デバイスとを入出力バスにて接続し、前記入出力バスを制御するバスコントローラを含むコンピュータシステムのバス障害処理方法であって、前記バスコントローラ側において、障害が発生した入出力バスを縮退状態として扱い、前記障害の伝搬を抑止しかつ前記障害の発生時及び発生後のトランザクションを処理するとともに、前記入出力バスの縮退状態の監視及び前記入出力バスの復旧処理の指示を行うブリッジドライバと前記バスコントローラとを連携させて前記入出力デバイスに前記入出力バスの障害検出から復旧処理までを行わせている。
【００４２】
すなわち、本発明のコンピュータシステムは、プロセッサと、主記憶と、入出力バス［ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス］及びそれらを接続するチップセット［メモリコントローラ及びＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）コントローラ］とから構成され、ＰＣＩバスコントローラとブリッジドライバとを設けることによって、ＰＣＩバスの障害をプロセッサ及びＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の例外ハンドラに通知することなく、ＰＣＩデバイスドライバによって障害検出から復旧処理までを行うことで、システムダウンさせずに運用を継続することが可能となる。
【００４３】
本発明のコンピュータシステムでは、上記の問題を解決するために、ＰＣＩバスコントローラ（ＰＢＣ：ＰＣＩ  Ｂｕｓ  Ｃｏｎｔｒｏｌ）内に、ＰＣＩバスでのエラー検出時に点灯させるバス障害インジケータ（ＥＲＩ：Ｅｒｒｏｒ  Ｉｎｄｉｃａｔｏｒ）を備え、バス障害インジケータの点灯時にＰＣＩバスを縮退状態とし、ＰＣＩバス障害を検出したトランザクションに対して以下のように動作するＰＣＩバス制御部（ＰＸＣ：ＰＣＩ−Ｘ  Ｃｏｎｔｒｏｌｌｅｒ）を備えている。
【００４４】
ＰＣＩバス制御部は、（１）アウトバウンド（Ｏｕｔｂｏｕｎｄ）ライト（プロセッサからのＰＣＩデバイスへの直接的なアクセス動作のＩ／Ｏライト）系の処理のエラー時に全て正常リプライを返却し、（２）アウトバウンドリード（プロセッサからのＰＣＩデバイスへの直接的なアクセス動作のＩ／Ｏリード）系の処理のエラー時に全て正常リプライを返却し、ＡＬＬ“１”データを読出す。
【００４５】
また、ＰＣＩバス制御部は、（３）インバウンド（Ｉｎｂｏｕｎｄ）アドレス（ＰＣＩデバイスを起点とした主記憶へのアクセス動作のＰＣＩバス配下のＰＣＩデバイスからのアドレス）系の処理のエラー時にトランザクションを破棄またはリトライし、（４）インバウンドライト（ＰＣＩデバイスを起点とした主記憶へのアクセス動作のＰＣＩバス配下のＰＣＩデバイスからのメモリライト）系の処理エラー時にトランザクションを破棄し、（５）インバウンドリード（ＰＣＩデバイスを起点とした主記憶へのアクセス動作のＰＣＩバス配下のＰＣＩデバイスからのメモリリード）系の処理のエラー時にデータ・パリティエラーを通知（ＰＥＲＲ＃検出のみ）する。
【００４６】
一方、ＰＣＩバス制御部はＰＣＩバス縮退後に送られてくる後続のトランザクションに対して、（１）アウトバウンド系トランザクションを実行可能とし［但し、実際にはＰＣＩバスに出力されずに正常リプライ（読出しデータはＡＬＬ“１”）を返却する］、（２）インバウンド系のトランザクションを受付けない。
【００４７】
さらに、本発明のコンピュータシステムでは、ＰＣＩバスコントローラの縮退状態の監視及び復旧処理を提供するブリッジドライバを備えている。ブリッジドライバはＰＣＩバスコントローラの縮退状態を監視することによって障害を検出し、対応するＰＣＩデバイスドライバに障害発生を通知する機能と、ＰＣＩデバイスドライバからの要求によってバスの縮退状態を復旧させるための指示をＰＣＩバスコントローラに発行し、その結果を要求元のＰＣＩデバイスドライバへ通知する機能とを備えている。復旧通知を受取ったＰＣＩデバイスドライバは、自ＰＣＩデバイスに対して初期設定処理を行い、再びシステムへの組込みを行う。
【００４８】
本発明のコンピュータシステムでは、上記のＰＣＩバスコントローラとブリッジドライバとが連携して動作することによって、ＰＣＩデバイスドライバに障害発生を通知することが可能となり、ＰＣＩデバイスドライバによって障害検出から復旧までを行うことが可能となる。
【００４９】
これによって、本発明のコンピュータシステムでは、ＰＣＩバス障害に対して有効な障害復旧手段を提供することで、障害発生時にシステムダウンさせることなく、障害からの復旧及び継続運転が可能となる。
【００５０】
つまり、本発明のコンピュータシステムでは、ブリッジドライバとＰＣＩバスコントローラとが連携して動作することによって、障害が発生したＰＣＩバスを縮退状態として扱い、障害伝搬することなく、障害発生時及び発生後のトランザクションを処理することが可能となるため、ＰＣＩバス障害の発生をＮＭＩ信号線やエラーリプライとしてＣＰＵに通知することなく検出することが可能となり、十分な機能を持たない例外ハンドラ実行によるシステムダウンを回避し、コンピュータシステムを継続運転することが可能となる。
【００５１】
また、本発明のコンピュータシステムでは、ＰＣＩバスの障害（種別は問わない）発生時に、ＰＣＩバスコントローラがＰＣＩバスを縮退状態とし、ブリッジドライバが障害が発生したＰＣＩバスのＰＣＩデバイスドライバに対して障害発生を通知することが可能となるため、ＰＣＩバスの障害種別にかかわらず、ＰＣＩデバイスドライバ主導による障害復旧処理を行うことが可能となる。
【００５２】
ＰＣＩデバイスドライバはブリッジドライバとＰＣＩバスコントローラの機能とを使用し、該当ＰＣＩバスを初期化することによってバス縮退状態を復旧し、自ＰＣＩデバイスを再度組込むことによって、障害から復旧させることが可能となる。
【発明の効果】
【００５３】
本発明は、以下に述べるような構成及び動作とすることで、ＰＣＩバス障害によるシステムダウンの発生を抑止することができ、全てのＰＣＩバス障害処理をＰＣＩデバイスドライバによって行うことができるという効果が得られる。
【発明を実施するための最良の形態】
【００５４】
次に、本発明の実施例について図面を参照して説明する。図１は本発明の一実施例によるコンピュータシステムの構成を示すブロック図である。図１において、本発明の一実施例によるコンピュータシステムは、上述した従来のコンピュータシステムと同様に、プロセッサ（ＣＰＵ：中央処理装置）２がプロセッサバス（ＦＳＢ：Ｆｒｏｎｔ  Ｓｉｄｅ  Ｂｕｓ）１００を介してメモリコントローラ（ＭＭＣ：Ｍａｉｎ  Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌ）３に接続さている。
【００５５】
メモリコントローラ３はプロセッサ２とのＩ／Ｆ（インタフェース）の他、主記憶（ＤＩＭＭ：Ｄｕａｌ  Ｉｎ−ｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）４及びＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）コントローラ（ＩＯＣ：Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  ｃｏｎｔｒｏｌ）５のＩ／Ｆを備え、プロセッサ２及びＩ／Ｏコントローラ５から受けたトランザクションのルーティングを行い、システム規模や構成によって１個ないし複数のＬＳＩ（大規模集積回路）で構成されるユニットである。主記憶４にはＰＣＩデバイスドライバ４１１及びブリッジドライバ４１２を含むＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）４１が格納されている。
【００５６】
Ｉ／Ｏコントローラ５はメモリコントローラ３とのＩ／Ｆを備え、配下に接続されるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス２００を制御するＰＣＩバスコントローラ（ＰＢＣ：ＰＣＩ  Ｂｕｓ  Ｃｏｎｔｒｏｌ）１を内蔵し、システム規模や構成によって１個ないし複数のＬＳＩで構成されるユニットである。ＰＣＩバス２００には複数のＰＣＩデバイス（周辺装置）（図示せず）を接続することが可能である。
【００５７】
図２は図１のＯＳ４１に対する信号の入出力を示す概念図である。図２において、ＯＳ４１はアプリケーションプログラム４２とＰＣＩデバイス［ハードウェア（ＨＷ）４３］との間の信号やデータの入出力を制御しており、ＰＣＩデバイスドライバ４１１とアプリケーションプログラム４２との間の信号やデータの流れを監視してＰＣＩバス２００の障害を検出している。
【００５８】
ブリッジドライバ４１２はＰＣＩデバイスドライバ４１１とＰＣＩデバイスとの間における信号やデータの中継を行っており、ＯＳ４１によるアプリケーションプログラム４２とＰＣＩデバイスとの間の要求及び応答の監視において矛盾が生じないように、つまりＯＳ４１で障害が検出されないように動作する。
【００５９】
図３は図１のＰＣＩバスコントローラ１の構成を示すブロック図である。図３において、ＰＣＩバスコントローラ１はインプットＩ／Ｆ制御部（ＩＮＣ：Ｉｎｐｕｔ  Ｃｏｎｔｒｏｌｌｅｒ）１１と、アウトプットＩ／Ｆ制御部（ＯＴＣ：Ｏｕｔｐｕｔ  Ｃｏｎｔｒｏｌｌｅｒ）１２と、アウトバウンドバッファ制御部（ＯＢＱ：Ｏｕｔｂｏｕｎｄ  Ｑｕｅｕｅ）１３と、インバウンドバッファ制御部（ＩＢＱ：Ｉｎｂｏｕｎｄ  Ｑｕｅｕｅ）１４と、インバウンドリードデータ制御部（ＤＲＱ：Ｄｅｌａｙｅｄ  Ｒｅｑｕｅｓｔ  Ｑｕｅｕｅ）１５と、ＰＣＩバス制御部（ＰＸＣ：ＰＣＩ−Ｘ  Ｃｏｎｔｒｏｌｌｅｒ）１６とから構成されている。
【００６０】
インプットＩ／Ｆ制御部１１はメモリコントローラ３からのトランザクションを受信し、トランザクション種別によってＰＣＩバスコントローラ１内の格納先にルーティングする。
【００６１】
アウトプットＩ／Ｆ制御部１２はインバウンドバッファ制御部１４とのＩ／Ｆを有し、インバウンドバッファ制御部１４からのトランザクションをメモリコントローラ３へと送出する。
【００６２】
アウトバウンドバッファ制御部１３はインプットＩ／Ｆ制御部１１とのＩ／Ｆを有し、インプットＩ／Ｆ制御部１１からのアウトバウンドリクエストトランザクションを受信し、受信したトランザクションを格納するバッファ（Ｂｕｆｆｅｒ）１３ａと、アービトレーション部（ＡＲＢ：Ａｒｂｉｔｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ）１６５とのＩ／Ｆと、ＰＣＩバス制御部１６とのＩ／Ｆとを有している。
【００６３】
アウトバウンドバッファ制御部１３はトランザクションを格納すると、アービトレーション部１６５に対してＰＣＩバス使用要求を発行し、アービトレーション部１６５によってＰＣＩバス使用許可が下りると、バッファ１３ａに格納しているトランザクションをＰＣＩバス制御部１６に送信する。
【００６４】
インバウンドバッファ制御部１４はＰＣＩバス制御部１６とのＩ／Ｆを有し、ＰＣＩバス制御部１６からのアウトバウンドリプライトランザクションと、インバウンドリクエストトランザクションとを受信する。
【００６５】
また、インバウンドバッファ制御部１４はインバウンドリードデータ制御部１５とのＩ／Ｆを有し、インバウンドリードデータ制御部１５からのインバウンドリクエストトランザクションを受信し、受信した各トランザクションを格納するバッファ１４ａを有している。
【００６６】
さらに、インバウンドバッファ制御部１４はアウトプットＩ／Ｆ制御部１２とのＩ／Ｆを有し、受信したトランザクションをアウトプットＩ／Ｆ制御部１２に送信する。
【００６７】
インバウンドリードデータ制御部１５はインプットＩ／Ｆ制御部１１とのＩ／Ｆを有し、インプットＩ／Ｆ制御部１１からインバウンドリプライトランザクション（主記憶４からのリードデータ）を受信し、受信したトランザクションを格納するバッファ１５ａを有している。
【００６８】
また、インバウンドリードデータ制御部１５はＰＣＩバス制御部１６とのＩ／Ｆを有し、ＰＣＩバス制御部１６からのインバウンドリクエストトランザクションを受信する。
【００６９】
さらに、インバウンドリードデータ制御部１５はトランザクションで要求されたデータがバッファ１５ａに存在するかをチェックし、データが存在しなければインバウンドバッファ制御部１４にインバウンドリクエストトランザクションを送信すると同時に、ＰＣＩバス制御部１６にリトライ指示を発行し、データが存在していたならば該当データをバッファ１５ａから読出してＰＣＩバス制御部１６に送信する。
【００７０】
ＰＣＩバス制御部１６はバス信号制御部（ＢＳ：Ｂｕｓ  ｃｏｎｔｒｏｌｌｅｒ）１６１と、アウトバウンドコントローラ部（ＯＢＣ：Ｏｕｔｂｏｕｎｄ  Ｃｏｎｔｒｏｌｌｅｒ）１６２と、インバウンドコントローラ部（ＩＢＣ：Ｉｎｂｏｕｎｄ  Ｃｏｎｔｒｏｌｌｅｒ）１６３と、コンフィグレーション部（ＣＦＧ：Ｃｏｎｆｉｇｕｒａｒｉｏｎ  ｒｅｇｉｓｔｅｒ）１６４と、アービトレーション部１６５とから構成され、プラットフォームとＰＣＩデバイスとのトランザクション制御機能を有する。
【００７１】
バス信号制御部１６１はアウトバウンドコントローラ部１６２とインバウンドコントローラ部１６３とＰＣＩバス２００とのＩ／Ｆと、ＰＣＩバスプロトコルにしたがってＰＣＩバス２００上に接続されたＰＣＩデバイスとのトランザクション制御機能とを有し、バス障害検出時にバス障害インジケータ（ＥＲＩ：Ｅｒｒｏｒ  Ｉｎｄｉｃａｔｏｒ）１６４ａをセットする。また、バス信号制御部１６１はインバウンドリードデータ制御部１５とのＩ／Ｆを有し、ＰＣＩデバイスへのリトライ指示要求を受付ける。
【００７２】
アウトバウンドコントローラ部１６２はアウトバウンドバッファ制御部１３とインバウンドリードデータ制御部１５とバス信号制御部１６１とインバウンドコントローラ部１６３とコンフィグレーション部１６４とのＩ／Ｆを有し、アウトバウンドバッファ制御部１３もしくはインバウンドリードデータ制御部１５から受信するトランザクションを、バス信号制御部１６１とインバウンドコントローラ部１６３とコンフィグレーション部１６４とにルーティングする。ルーティング先はトランザクション種別及びバス障害インジケータ１６４ａの点灯状態によって決定される。
【００７３】
アウトバウンドバッファ制御部１３から受信するＰＣＩバスコントローラ１宛てのコンフィグレーションリクエストトランザクションはコンフィグレーション部１６４に送信され、インバウンドリードデータ制御部１５から受信するインバウンドリードリプライトランザクションはバス信号制御部１６１に送信される。
【００７４】
また、バス障害インジケータ１６４ａの未点灯時にアウトバウンドバッファ制御部１３から受信するアウトバウンドリクエストトランザクションはバス信号制御部１６１に送信される。バス障害インジケータ１６４ａの点灯時にアウトバウンドバッファ制御部１３から受信するアウトバウンドリードリクエストトランザクションに関しては、リードデータをＡＬＬ“１”としたリードリプライトランザクションに変換する。このＡＬＬ“１”のデータはＯＳ４１に対して正常であることを認識させるとともに、ＰＣＩデバイスドライバ４１１に対してはバス状態に障害が発生していることを認識させ、アプリケーションプログラム４２に対してはリードデータエラーを通知する契機となる。つまり、ＯＳ４１はＡＬＬ“１”のデータによって障害が発生していることを認識せずに動作し、アプリケーションプログラム４２はＯＳ４１経由でＰＣＩデバイスドライバ４１１からのリードデータエラー通知を受けることによって、再度、所望のデータの読出し動作を行うこととなる。
【００７５】
アウトバウンドＤｅｆｆｅｒｒｅｄライトリクエストトランザクションに関しては、ライトリプライトランザクションをインバウンドコントローラ部１６３に送信される。アウトバウンドＰｏｓｔｅｄライトリクエストトランザクションに関してはアウトバウンドコントローラ部１６２内で破棄する。
【００７６】
インバウンドコントローラ部１６３はインバウンドバッファ制御部１４、インバウンドリードデータ制御部１５、バス信号制御部１６１、アウトバウンドコントローラ部ＯＢＣ１６２、コンフィグレーション部１６４とのＩ／Ｆを有し、バス信号制御部１６１、アウトバウンドコントローラ部ＯＢＣ１６２、コンフィグレーション部１６４から受信するトランザクションを、インバウンドバッファ制御部１４もしくはインバウンドリードデータ制御部１５にルーティングする。ルーティング先はトランザクション種別によって決定される。
【００７７】
コンフィグレーション部１６４から受信するコンフィグレーションリプライトランザクション、及びバス信号制御部１６１とアウトバウンドコントローラ部１６２とから受信するアウトバウンドリプライトランザクション、及びバス信号制御部１６１から受信するインバウンドライトリクエストトランザクションはインバウンドバッファ制御部１４に送信する。バス信号制御部１６１から受信するインバウンドリードリクエストトランザクションはインバウンドリードデータ制御部１５に送信される。
【００７８】
コンフィグレーション部１６４はコンフィグレーションレジスタ（図示せず）と、その一部としてＰＣＩバス２００に障害が発生したことを保持するバス障害インジケータ１６４ａとを有している。
【００７９】
また、コンフィグレーション部１６４はアウトバウンドコントローラ部１６２とインバウンドコントローラ部１６３とのＩ／Ｆを有し、アウトバウンドコントローラ部１６２から受信するリクエストトランザクションの指示にしたがってコンフィグレーションレジスタを更新し、必要に応じてリプライトランザクションをインバウンドコントローラ部１６３に送信する。
【００８０】
バス障害インジケータ１６４ａはバス信号制御部１６１とアウトバウンドコントローラ部１６２とアービトレーション部１６５とのＩ／Ｆを有し、バス信号制御部１６１がバス障害を検出時にセットされる。また、バス障害インジケータ１６４ａをリセットすることによって、ＰＣＩバスリセットを含む障害状態からの復旧が行われる。
【００８１】
アービトレーション部１６５はＰＣＩバス２００上に接続されたＰＣＩデバイスと、アウトバウンドバッファ制御部１３からのバス使用要求とに対してバス使用権の調停を行う。
【００８２】
また、アービトレーション部１６５はバス障害インジケータ１６４ａとのＩ／Ｆを有し、バス障害インジケータ１６４ａのセット時にＰＣＩデバイスからのバス使用要求をマスクし、インバウンド系トランザクションを受付けない。
【００８３】
ブリッジドライバ４１２は各ＰＣＩデバイスドライバ４１１へ提供するＰＣＩバスアクセス用の各種関数群を有し、各ＰＣＩデバイスドライバ４１１からのＰＣＩバスアクセス要求時（提供関数コール時）にアクセス要求に応じたトランザクションを送信する。
【００８４】
また、ブリッジドライバ４１２はアウトバウンドリードトランザクション処理でＡＬＬ“１”の読出しデータを検知した場合に、ＰＣＩバスコントローラ１のバス障害インジケータ１６４ａを確認し、ＰＣＩデバイスドライバ４１１からの要求によってバス障害インジケータ１６４ａを確認し、定期的にバス障害インジケータ１６４ａを確認し、バス障害インジケータ１６４ａの点灯を検出した場合に、エラー状態を各ＰＣＩデバイスドライバ４１１に通知する。
【００８５】
さらに、ブリッジドライバ４１２は各ＰＣＩデバイスドライバ４１１からのＰＣＩバス障害復旧要求によって、ＰＣＩバスコントローラ１に対して障害復旧動作を要求するトランザクションを送り、障害復旧が完了したら各ＰＣＩデバイスドライバ４１１に通知する。
【００８６】
本発明の障害復旧手段を利用するためには、ＰＣＩデバイスドライバ４１１がデバイスへのアクセス時にブリッジドライバ４１１から提供される関数群を用い、ブリッジドライバ４１２からエラー状態を通知された場合に適切な障害復旧処理を実施する必要がある。
【００８７】
図４は本発明の一実施例によるブリッジドライバ４１２から提供されるＰＣＩバスアクセス用の各種関数群を示す図である。図４において、関数名「ｐｃｉ＿ｃｏｎｆｉｇ＿ｒｅａｄ（）」は「コンフィグレーション空間のリード」の機能を持ち、関数名「ｐｃｉ＿ｃｏｎｆｉｇ＿ｗｒｉｔｅ（）」は「コンフィグレーション空間のライト」の機能を持ち、関数名「ｐｃｉ＿ｍｅｍ＿ｒｅａｄ（）」は「ＰＣＩ  Ｍａｐｐｅｄ  Ｍｅｍｏｒｙ空間のリード」の機能を持ち、関数名「ｐｃｉ＿ｍｅｍ＿ｗｒｉｔｅ（）」は「ＰＣＩ  Ｍａｐｐｅｄ  Ｍｅｍｏｒｙ空間のライト」の機能を持ち、関数名「ｐｃｉ＿ｂｕｓ＿ｃｈｅｃｋ（）」は「ＰＣＩバスの縮退状態チェック」の機能を持ち、関数名「ｐｃｉ＿ｂｕｓ＿ｒｅｃｏｖｅｒｙ（）」は「ＰＣＩバスの縮退状態からの復旧要求の機能を持っている。
【００８８】
図５は本発明の一実施例によるプロセッサ２からのＩ／Ｏリードの動作を示すシーケンスチャートであり、図６は本発明の一実施例によるプロセッサ２からのＩ／Ｏライトの動作を示すシーケンスチャートであり、図７は本発明の一実施例によるＰＣＩデバイスからのメモリリードの動作を示すシーケンスチャートであり、図８は本発明の一実施例によるＰＣＩデバイスからのメモリライトの動作を示すシーケンスチャートである。これら図１〜図８を参照して本発明の一実施例の動作について説明する。
【００８９】
本発明の一実施例によるコンピュータシステムにおいては、（１）プロセッサ２からのＩ／Ｏリード（アウトバウンドリード）（プロセッサ２からのＰＣＩデバイスへの直接的なアクセス動作のＩ／Ｏリード）、（２）プロセッサ２からのＩ／Ｏライト（アウトバウンドライト）（プロセッサ２からのＰＣＩデバイスへの直接的なアクセス動作のＩ／Ｏライト）、（３）ＰＣＩデバイスからのメモリリード（インバウンドリード）（ＰＣＩデバイスを起点とした主記憶４へのアクセス動作のＰＣＩバス配下のＰＣＩデバイスからのメモリリード）、（４）ＰＣＩデバイスからのメモリライト（インバウンドライト）（ＰＣＩデバイスを起点とした主記憶４へのアクセス動作のＰＣＩバス配下のＰＣＩデバイスからのメモリライト）、（５）縮退状態でのトランザクション処理、（６）ブリッジドライバ４１２による障害検出処理がそれぞれ実行される。
【００９０】
まず、（１）プロセッサ２からのＩ／Ｏリード（アウトバウンドリード）について説明する。ＰＣＩデバイスドライバ４１１がＰＣＩデバイスからデータを読出す場合、ブリッジドライバ４１２が提供するリード関数［ｐｃｉ＿ｍｅｍ＿ｒｅａｄ（）］をコールする。これによって、ブリッジドライバ４１２は目的のＰＣＩデバイスに対してアウトバウンドリードリクエストトランザクションを送信する。
【００９１】
このアウトバウンドリードリクエストトランザクションはプロセッサバス１００を経由してメモリコントローラ３からＩ／Ｏコントローラ５へと送出される。Ｉ／Ｏコントローラ５へ送出されたアウトバウンドリードリクエストトランザクションはＰＣＩバスコントローラ１内のインプットＩ／Ｆ制御部１１で受信される。
【００９２】
トランザクションを受信したインプットＩ／Ｆ制御部１１はトランザクション種別によってトランザクションの格納先を決定する。ここではアウトバウンド系のトランザクションのため、格納先はアウトバウンドバッファ制御部１３のバッファ１３ａとなる。
【００９３】
トランザクションを格納したアウトバウンドバッファ制御部１３は、アービトレーション部１６５に対してＰＣＩバス２００の使用権を要求する。これを受取ったアービトレーション部１６５はＰＣＩバス２００の調停を行い、ＰＣＩバス２００の使用許可をアウトバウンドバッファ制御部１３に通知する。
【００９４】
通知を受けたアウトバウンドバッファ制御部１３はバッファ１３ａに格納されているトランザクションをアウトバウンドコントローラ部１６２に送信する。アウトバウンドコントローラ部１６２はアウトバウンドリードリクエストトランザクションを受取ったので、バス信号制御部１６１に受信したトランザクションを送出する。バス信号制御部１６１は受取ったトランザクションをＰＣＩバストランザクションに変換してＰＣＩバス２００へ送出し、目的のＰＣＩデバイスへと到達させる。
【００９５】
リードリクエストトランザクション（この場合はアドレス）を受取ったＰＣＩデバイスは対応するリードデータをＰＣＩバス２００上に送出する。リードデータはバス信号制御部１６１によって受信される。このＰＣＩバス２００上でのデータの伝達動作は一般的なＰＣＩサイクル（メモリサイクル、Ｉ／Ｏサイクル、コンフィグレーションサイクル等）であり、その動作は公知であるので、その説明については省略する。
【００９６】
リードデータを受信したバス信号制御部１６１はリードデータをインバウンドコントローラ部１６３に送信する。インバウンドコントローラ部１６３は受取ったリードデータをインバウンドバッファ制御部１４のバッファ１４ａに格納する。ＰＣＩデバイスから要求したデータの受信完了を確認したバス信号制御部１６１は、正常リプライをインバウンドコントローラ部１６３経由でインバウンドバッファ制御部１４に送信する。
【００９７】
リプライを受取ったインバウンドバッファ制御部１４はバッファ１４ａに格納されたリードデータとリプライとをリードリプライトランザクションとしてアウトプットＩ／Ｆ制御部１２に送出する。アウトプットＩ／Ｆ制御部１２は受信したリードリプライトランザクションをメモリコントローラ３に送出する。以降、リードリプライトランザクションは上記と逆の経路を辿ってメモリコントローラ３、プロセッサバス１００を経てトランザクションの送出元であるプロセッサ２に返却され、ブリッジドライバ４１２に返却され、関数をコールしたＰＣＩデバイスドライバ４１１にリードデータを返却する。
【００９８】
ＰＣＩバス２００上でのアウトバウンドリードトランザクション実行中にＰＣＩバスエラー（アドレス・パリティエラー、データ・パリティエラー、ＳＥＲＲ＃検出）が発生した場合には、ＰＣＩバス制御部１６内のバス信号制御部１６１がエラーを検出してバス障害インジケータ１６４ａを点灯させる。同時に、バス信号制御部１６１はアウトバウンドコントローラ部１６２から受信したリードリクエストトランザクションに対して、リードデータをＡＬＬ“１”とした正常リードリプライトランザクションをインバウンドコントローラ部１６３に送出する。
【００９９】
インバウンドコントローラ部１６３は受取ったリードリプライトランザクションをインバウンドバッファ制御部１４のバッファ１４ａに格納する。インバウンドバッファ制御部１４はバッファ１４ａに格納されたリードリプライトランザクションをアウトプットＩ／Ｆ制御部１２に送出する。アウトプットＩ／Ｆ制御部１２は受信したリードリプライトランザクションをメモリコントローラ３に送出する。
【０１００】
以降、リードリプライトランザクションは上記と逆の経路を辿ってメモリコントローラ３、プロセッサバス１００を経てトランザクションの送出元であるプロセッサ２に返却され、リードトランザクション発行元のブリッジドライバ４１２に返却される。バス障害インジケータ１６４ａの点灯後には、ＰＣＩバス２００の縮退状態となる。
【０１０１】
続いて、（２）プロセッサ２からのＩ／Ｏライト（アウトバウンドライト）について説明する。ＰＣＩデバイスドライバ４１１がＰＣＩデバイスにデータを転送する場合には、ブリッジドライバ４１２が提供するライト関数［ｐｃｉ＿ｍｅｍ＿ｗｒｉｔｅ（）］がコールされる。これによって、ブリッジドライバ４１２は目的のＰＣＩデバイスに対してアウトバウンドライトリクエストトランザクションを送信する。
【０１０２】
まず、Ｐｏｓｔｅｄライトトランザクションに関して説明する。Ｐｏｓｔｅｄのアウトバウンドライトリクエストトランザクションはプロセッサバス１００を経由してメモリコントローラ３からＩ／Ｏコントローラ５へと送出される。Ｉ／Ｏコントローラ５へ送出されたアウトバウンドライトリクエストトランザクションは、ＰＣＩバスコントローラ１内のインプットＩ／Ｆ制御部１１で受信される。
【０１０３】
トランザクションを受信したインプットＩ／Ｆ制御部１１はトランザクション種別によってトランザクション格納先を決定する。ここでは、アウトバウンド系のトランザクションのため、格納先はアウトバウンドバッファ制御部１３のバッファ１３ａとなる。
【０１０４】
トランザクションを格納したアウトバウンドバッファ制御部１３はアービトレーション部１６５に対してＰＣＩバス２００の使用権を要求する。これを受取ったアービトレーション部１６５はＰＣＩバス２００の調停を行い、ＰＣＩバス２００の使用許可をアウトバウンドバッファ制御部１３に通知する。
【０１０５】
通知を受けたアウトバウンドバッファ制御部１３はバッファ１３ａに格納されているトランザクションをアウトバウンドコントローラ部１６２に送信する。アウトバウンドコントローラ部１６２はアウトバウンドライトリクエストトランザクションを受取ったので、バス信号制御部１６１に受信したトランザクションを送出する。
【０１０６】
バス信号制御部１６１は受取ったトランザクションをＰＣＩバストランザクションに変換してＰＣＩバス２００へ送出し、そのＰＣＩバストランザクションを目的のＰＣＩデバイスへ到達させる。このＰＣＩバス２００上でのトランザクションの伝達動作は、一般的なＰＣＩサイクルであり、その動作は公知であるので、その説明については省略する。
【０１０７】
次に、Ｄｅｆｅｒｒｅｄライトトランザクションに関して説明する。ＤｅｆｅｒｒｅｄのアウトバウンドライトリクエストトランザクションのＰＣＩデバイスへの伝達動作は、上述したＰｏｓｔｅｄライトトランザクションと同様に行われる。
【０１０８】
Ｄｅｆｅｒｒｅｄライトトランザクションの場合、リプライが必要であるため、バス信号制御部１６１は目的のＰＣＩデバイスへ全てのデータ送出完了を確認した後、インバウンドコントローラ部１６３に対して正常ライトリプライトランザクションを発行する。インバウンドコントローラ部１６３はライトリプライトランザクションをインバウンドバッファ制御部１４に送信する。
【０１０９】
インバウンドバッファ制御部１４はライトリプライトランザクションをアウトプットＩ／Ｆ制御部１２に送出する。アウトプットＩ／Ｆ制御部１２は受信したライトリプライトランザクションをメモリコントローラ３に送出する。以降、ライトリプライトランザクションは上記と逆の経路を辿って、メモリコントローラ３、プロセッサバス１００を経てトランザクションの送出元であるプロセッサ２に返却される。
【０１１０】
ＰＣＩバス２００上でのアウトバウンドライトトランザクション実行中にＰＣＩバスエラー（アドレス・パリティエラー、データ・パリティエラー、ＳＥＲＲ＃検出）が発生した場合には、ＰＣＩバス制御部１６内のバス信号制御部１６１がエラーを検出してバス障害インジケータ１６４ａを点灯させる。同時に、バス信号制御部１６１はアウトバウンドコントローラ部１６２から受信したＰｏｓｔｅｄのライトリクエストトランザクションを破棄する。
【０１１１】
また、バス信号制御部１６１はアウトバウンドコントローラ部１６２から受信したＤｅｆｅｒｒｅｄのライトリクエストトランザクションを破棄し、正常ライトリプライトランザクションをインバウンドコントローラ部１６３に送出する。インバウンドコントローラ部１６３は受取ったライトリプライトランザクションをインバウンドバッファ制御部１４のバッファ１４ａに格納する。
【０１１２】
インバウンドバッファ制御部１４はバッファ１４ａに格納されたライトリプライトランザクションをアウトプットＩ／Ｆ制御部１２に送出する。アウトプットＩ／Ｆ制御部１２は受信したライトリプライトランザクションをメモリコントローラ３に送出する。以降、ライトリプライトランザクションは上記と逆の経路を辿ってメモリコントローラ３、プロセッサバス１００を経てトランザクションの送出元であるプロセッサ２に返却される。バス障害インジケータ１６４ａの点灯後はＰＣＩバス縮退状態となる。
【０１１３】
次に、（３）ＰＣＩデバイスからのメモリリード（インバウンドリード）について説明する。メモリリードを行うＰＣＩバス２００配下のＰＣＩデバイスは、リクエスト信号線ＲＥＱ＃をドライブし、アービトレーション部１６５に対してＰＣＩバス２００の使用権を要求する。これに対して、アービトレーション部１６５は調停を行い、要求元のＰＣＩデバイスに対してＰＣＩバス２００の使用を許可する。
【０１１４】
ＰＣＩバス２００の使用権を獲得したＰＣＩデバイスは、インバウンドリードリクエストトランザクションをＩ／Ｏコントローラ５のＰＣＩバスコントローラ１に送信する。リードリクエストトランザクションを受信したバス信号制御部１６１は受信したＰＣＩトランザクションをプラットフォームの内部形式へと変換し、インバウンドコントローラ部１６３に送信する。
【０１１５】
インバウンドコントローラ部１６３は受信したトランザクションがインバウンドリードリクエストトランザクションであるため、インバウンドリードデータ制御部１５に送信する。
【０１１６】
リードリクエストトランザクションを受取ったインバウンドリードデータ制御部１５はバッファ１５ａにリードリクエストトランザクションに対応するリードデータがあるかをチェックする。ここでは、最初のリードリクエストトランザクションであるため、該当するリードデータがバッファ１５ａには存在しない。
【０１１７】
このため、インバウンドリードデータ制御部１５は主記憶４からリクエストトランザクションに対応するデータを読出すためにリードリクエストトランザクションをインバウンドバッファ制御部１４に送る。これと並行して、インバウンドリードデータ制御部１５は該当するデータが存在していない旨をバス信号制御部１６１に対して通知する。
【０１１８】
通知を受けたバス信号制御部１６１は要求元のＰＣＩデバイスに対してリトライの指示を出す。リードリクエストトランザクションを受取ったインバウンドバッファ制御部１４はそのリードリクエストトランザクションをアウトプットＩ／Ｆ制御部１２に送る。アウトプットＩ／Ｆ制御部１２はメモリコントローラ３へリードリクエストトランザクションを送信する。
【０１１９】
メモリコントローラ３はＩ／Ｏコントローラ５から受取ったトランザクションにしたがって主記憶４をアクセスする。主記憶４からのリプライデータはインバウンドリプライトランザクションとして、上記と逆の経路を辿ってメモリコントローラ３からＩ／Ｏコントローラ５へと送出され、ＰＣＩバスコントローラ１内のインプットＩ／Ｆ制御部１１にて受信される。
【０１２０】
インバウンドリードリプライトランザクションを受信したインプットＩ／Ｆ制御部１１はインバウンドトランザクションのため、インバウンドリードリプライトランザクションをインバウンドリードデータ制御部１５にルーティングする。インバウンドリードデータ制御部１５はそのインバウンドリードリプライトランザクションをバッファ１５ａに格納する。
【０１２１】
その後、バス信号制御部１６１はＰＣＩデバイスから前回と同じリードリクエストトランザクションを受信すると、上述した動作と同様に、リードリクエストトランザクションをインバウンドリードデータ制御部１５に送信する。トランザクションを受信したインバウンドリードデータ制御部１５はバッファ１５ａに対応するリードデータがあるかをチェックする。
【０１２２】
今回はデータが存在するため、リードリクエストトランザクションに対応するリードデータをアウトバウンドコントローラ部１６２に送信する。アウトバウンドコントローラ部１６２は受信したリードデータをバス信号制御部１６１に送信する。バス信号制御部１６１は受信したリードデータをＰＣＩバストランザクションに変換してＰＣＩバス２００へ送出し、リード要求元のＰＣＩデバイスへと到達させる。このＰＣＩバス２００上でのリトライやリードデータの伝達動作は、一般的なＰＣＩサイクルであり、その動作は公知であるので、その説明については省略する。
【０１２３】
ＰＣＩバス２００上でのインバウンドリードトランザクション実行中にＰＣＩバスエラー（アドレス・パリティエラー、データ・パリティエラー、ＳＥＲＲ＃検出）が発生した場合には、ＰＣＩバス制御部１６内のバス信号制御部１６１がエラーを検出してバス障害インジケータ１６４ａを点灯させる。同時に、バス信号制御部１６１はＰＣＩバス２００から受信したインバウンドリードトランザクションを破棄する。バス障害インジケータ１６４ａの点灯後はＰＣＩバス縮退状態となる。
【０１２４】
また、（４）ＰＣＩデバイスからのメモリライト（インバウンドライト）について説明する。メモリライトを行うＰＣＩバス２００配下のＰＣＩデバイスはリクエスト信号線ＲＥＱ＃をドライブし、アービトレーション部１６５に対してＰＣＩバス２００の使用権を要求する。これに対して、アービトレーション部１６５はＰＣＩバス２００の調停を行い、要求元のＰＣＩデバイスに対してＰＣＩバス２００の使用を許可する。
【０１２５】
ＰＣＩバス２００の使用権を獲得したＰＣＩデバイスは、インバウンドライトリクエストトランザクションをＩ／Ｏコントローラ５のＰＣＩバスコントローラ１に送信する。ライトリクエストトランザクションを受信したバス信号制御部１６１は受信したＰＣＩトランザクションをプラットフォームの内部形式へ変換し、インバウンドコントローラ部１６３に送信する。
【０１２６】
インバウンドコントローラ部１６３は受信したライトリクエストトランザクションをインバウンドバッファ制御部１４に送信する。インバウンドバッファ制御部１４は受取ったライトリクエストトランザクションをバッファ１４ａに格納する。
【０１２７】
ＰＣＩデバイスから全てのライトリクエストトランザクションの受信を完了した後、インバウンドバッファ制御部１４はバッファ１４ａに格納していたトランザクションをアウトプットＩ／Ｆ制御部１２に送信する。アウトプットＩ／Ｆ制御部１２は受信したライトリクエストトランザクションをメモリコントローラ３へと送出する。メモリコントローラ３はＩ／Ｏコントローラ５から受取ったトランザクションにしたがって主記憶４に対して書込みを行う。このＰＣＩバス２００上でのライトデータの伝達動作は、一般的なＰＣＩサイクルであり、その動作は公知であるので、その説明については省略する。
【０１２８】
ＰＣＩバス２００上でのインバウンドライトトランザクション実行中にＰＣＩバスエラー（アドレス・パリティエラー、データ・パリティエラー、ＳＥＲＲ＃検出）が発生した場合には、ＰＣＩバス制御部１６内のバス信号制御部１６１がエラーを検出してバス障害インジケータ１６４ａを点灯させる。バス障害インジケータ１６４ａを点灯させたバス信号制御部１６１はＰＣＩバス２００から受信するインバウンドライトリクエストトランザクションを破棄する。バス障害インジケータ１６４ａの点灯後はＰＣＩバス縮退状態となる。
【０１２９】
さらに、（５）縮退状態でのトランザクション処理について説明する。上述した（１）〜（４）の処理で説明したように、ＰＣＩバスコントローラ１はバス障害インジケータ１６４ａの点灯後、配下のＰＣＩバス２００を縮退状態として扱い、後続のトランザクションを以下のように処理する。
【０１３０】
つまり、ＰＣＩデバイスへのアウトバウンドリードトランザクションに関しては、上述した動作と同様の動作でＰＣＩバスコントローラ１に送信される。送信されたトランザクションはインプットＩ／Ｆ制御部１１からアウトバウンドバッファ制御部１３を経由してアウトバウンドコントローラ部１６２に到達する。
【０１３１】
アウトバウンドコントローラ部１６２は受取ったトランザクションをバス信号制御部１６１経由でＰＣＩバス２００に出力せずに、アウトバウンドコントローラ部１６２内でリードデータをＡＬＬ“１”としたリードリプライトランザクションに変換し、インバウンドコントローラ部１６３経由でインバウンドバッファ制御部１４のバッファ１４ａに格納する。
【０１３２】
インバウンドバッファ制御部１４はバッファ１４ａに格納されたリードリプライトランザクションをアウトプットＩ／Ｆ制御部１２に送出する。アウトプットＩ／Ｆ制御部１２は受信したリードリプライトランザクションをメモリコントローラ３に送出する。以降、リードリプライトランザクションは上記と逆の経路を辿って、メモリコントローラ３、プロセッサバス１００を経てトランザクションの送出元であるプロセッサ２に返却され、リードトランザクション発行元のブリッジドライバに返却される。
【０１３３】
また、ＰＣＩデバイスへのアウトバウンドライトトランザクションに関しては、上述した動作と同様の動作でＰＣＩバスコントローラ１に送信される。送信されたトランザクションはインプットＩ／Ｆ制御部１１からアウトバウンドバッファ制御部１３を経由してアウトバウンドコントローラ部１６２に到達する。
【０１３４】
アウトバウンドコントローラ部１６２は受取ったトランザクションがＰｏｓｔｅｄライトの場合、受信したトランザクションをバス信号制御部１６１経由でＰＣＩバス２００に出力せずに破棄する。
【０１３５】
また、アウトバウンドコントローラ部１６２は受取ったトランザクションがＤｅｆｅｒｒｅｄライトの場合、受信したトランザクションをバス信号制御部１６１経由でＰＣＩバス２００に出力せずに破棄し、正常ライトリプライトランザクションをインバウンドコントローラ部１６３経由でインバウンドバッファ制御部１４のバッファ１４ａに格納する。
【０１３６】
インバウンドバッファ制御部１４はバッファ１４ａに格納されたライトリプライトランザクションをアウトプットＩ／Ｆ制御部１２に送出する。アウトプットＩ／Ｆ制御部１２は受信したライトリプライトランザクションをメモリコントローラ３に送出する。以降、ライトリプライトランザクションは上記と逆の経路を辿って、メモリコントローラ３、プロセッサバス１００を経てトランザクションの送出元であるプロセッサ２に返却される。
【０１３７】
また、ＰＣＩデバイスからのインバウンドトランザクションに関しては、アービトレーション部１６５が配下のＰＣＩバス２００に接続されているＰＣＩデバイスからのリクエスト信号線ＲＥＱ＃をマスクする。これによって、インバウンドトランザクションを受付けないようにし、ＰＣＩバス２００の障害伝搬によるさらなるエラー発生を抑止する。
【０１３８】
続いて、（６）ブリッジドライバ４１２による障害検出処理について説明する。アウトバウンドリードトランザクションに関しての障害検出処理は次のように行われる。ブリッジドライバ４１２は返却されたリードデータをチェックする。ここで受取ったリードデータがＡＬＬ“１”である場合、ブリッジドライバ４１２はＰＣＩバス２００のエラーが発生した可能性があることを検知する。
【０１３９】
ＰＣＩバス２００のエラー発生の可能性を検知したブリッジドライバ４１２はＰＣＩバスコントローラ１宛てにコンフィグレーションリードトランザクションを送信し、バス障害インジケータ１６４ａの点灯状況の確認を行う。ここで、バス障害インジケータ１６４ａが点灯していた場合、ブリッジドライバ４１２はＰＣＩデバイスドライバ４１１に対して障害発生を通知する。障害発生の通知を受けたＰＣＩデバイスドライバ４１１は、自身の障害復旧プログラムを起動する。この障害復旧プログラムの動作については後述する。
【０１４０】
また、アウトバウンドライトトランザクションに関しての障害検出処理は次のように行われる。ＰＣＩデバイスドライバ４１１はトランザクションが正常終了したかが不明のため、適切なタイミングでブリッジドライバ４１２が提供する縮退チェック関数［ｐｃｉ＿ｂｕｓ＿ｃｈｅｃｋ（）］をコールし、ＰＣＩバス２００の状態確認を行う。
【０１４１】
これによって、ブリッジドライバ４１２はＰＣＩバスコントローラ１宛てにコンフィグレーションリードトランザクションを送信し、バス障害インジケータ１６４ａの点灯状況の確認を行う。ここで、バス障害インジケータ１６４ａが点灯していた場合、ブリッジドライバ４１２はＰＣＩデバイスドライバ４１１に対して障害発生を通知する。障害発生の通知を受けたＰＣＩデバイスドライバ４１１は、自身の障害復旧プログラムを起動する。
【０１４２】
さらに、インバウンドトランザクションに関しての障害検出処理は次のように行われる。ＰＣＩバス縮退時はインバウンドトランザクションがＰＣＩデバイスから送信されないために、ＰＣＩデバイスドライバ４１１が障害を検出するタイミングがない。
【０１４３】
障害を検出するために、ブリッジドライバ４１２は定期的にＰＣＩバスコントローラ１宛てにコンフィグレーションリードトランザクションを送信し、バス障害インジケータ１６４ａの確認を行う。ここで、バス障害インジケータ１６４ａが点灯していた場合、ブリッジドライバ４１２はＰＣＩデバイスドライバ４１１に対して障害発生を通知する。障害発生の通知を受けたＰＣＩデバイスドライバ４１１は、自身の障害復旧プログラムを起動する。
【０１４４】
最後に、（７）縮退状態の復旧処理について説明する。バス縮退状態からの復旧は次のように行われる。上述したように、障害発生が通知されたＰＣＩデバイスドライバ４１１は、自身の障害復旧プログラムの中でＰＣＩバス縮退状態復旧要求関数［ｐｃｉ＿ｂｕｓ＿ｒｅｃｏｖｅｒｒｙ（）］をコールする。
【０１４５】
復旧要求を受取ったブリッジドライバ４１２はバス障害インジケータ１６４ａをリセットするために、ＰＣＩバスコントローラ１に対して復旧動作を要求するコンフィグレーションライトリクエストトランザクションを送信し、ＰＣＩデバイスドライバ４１１に対しては復旧処理中を通知する。
【０１４６】
また、該当するＰＣＩバス２００が既に復旧処理中ならば、ＰＣＩデバイスドライバ４１１に対して復旧処理中のみを通知する。コンフィグレーションライトリクエストトランザクションは、アウトバウンドトランザクションと同様の動作でＰＣＩバスコントローラ１に到達する。
【０１４７】
ＰＣＩバスコントローラ１に到達したトランザクションは、ＰＣＩバスコントローラ１内のインプットＩ／Ｆ制御部１１で受信される。トランザクションを受信したインプットＩ／Ｆ制御部１１はコンフィグレーションライトリクエストトランザクションであるため、そのトランザクションをアウトバウンドバッファ制御部１３にルーティングし、トランザクションをバッファ１３ａに格納する。
【０１４８】
トランザクションを格納したアウトバウンドバッファ制御部１３は、アービトレーション部１６５に対してＰＣＩバス２００の使用権を要求する。これを受け取ったアービトレーション部１６５はＰＣＩバス２００の調停を行い、ＰＣＩバス２００の使用許可をアウトバウンドバッファ制御部１３に通知する。
【０１４９】
通知を受けたアウトバウンドバッファ制御部１３はバッファ１３ａに格納されているトランザクションをアウトバウンドコントローラ部１６２に送信する。アウトバウンドコントローラ部１６２は自ＰＣＩバスコントローラ１宛てのコンフィグレーションライトリクエストトランザクションを受取ったので、コンフィグレーション部１６４にトランザクションを送出する。
【０１５０】
コンフィグレーション部１６４は受信したトランザクションにしたがって、バス障害インジケータ１６４ａのリセットを行い、ＰＣＩバス２００のリセット信号をドライブすることで、ＰＣＩバス関連部分の初期化を行い、縮退状態からの復旧を行う。縮退状態からの復旧完了後、コンフィグレーション部１６４はコンフィグレーションライトリプライトランザクションをインバウンドコントローラ部１６３に送信する。
【０１５１】
インバウンドコントローラ部１６３は受取ったコンフィグレーションライトリプライトランザクションをインバウンドバッファ制御部１４のバッファ１４ａに格納する。インバウンドバッファ制御部１４はバッファ１４ａに格納されたコンフィグレーションライトリプライトランザクションをアウトプットＩ／Ｆ制御部１２に送出する。
【０１５２】
アウトプットＩ／Ｆ制御部１２は受信したコンフィグレーションライトリプライトランザクションをメモリコントローラ３に送出する。以降、コンフィグレーションライトリプライトランザクションは上記と逆の経路を辿って、メモリコントローラ３、プロセッサバス１００を経てトランザクションの送出元であるプロセッサ２に返却される。
【０１５３】
コンフィグレーションライトの完了を確認したブリッジドライバ４１２は、復旧要求を指示したＰＣＩデバイスドライバ４１１へ復旧完了を通知する。復旧完了を通知されたＰＣＩデバイスドライバ４１１は、自ＰＣＩデバイスをシステムに再組込みするための処理を行う。
【０１５４】
このように、本実施例では、ブリッジドライバ４１２とＰＣＩバスコントローラ１とが連携して動作することによって、障害が発生したＰＣＩバス２００を縮退状態として扱い、障害発生時及び発生後のトランザクションを障害伝搬することなく処理することができるため、ＰＣＩバス障害の発生をＮＭＩ信号線やエラーリプライとしてプロセッサ２に通知することなく、検出することができ、十分な機能を持たない例外ハンドラ実行によるシステムダウンを回避し、コンピュータシステムを継続運転することができる。
【０１５５】
また、本実施例では、ＰＣＩバス２００の障害（種別は問わない）発生時に、ＰＣＩバスコントローラ１がＰＣＩバス２００を縮退状態とし、ブリッジドライバ４１２が障害が発生したＰＣＩバス２００のＰＣＩデバイスドライバ４１１に対して障害発生を通知することができるため、ＰＣＩバス２００の障害種別にかかわらず、ＰＣＩデバイスドライバ４１１主導による障害復旧処理を行うことができる。
【０１５６】
ＰＣＩデバイスドライバ４１１はブリッジドライバ４１２とＰＣＩバスコントローラ１の機能とを使用し、該当ＰＣＩバス２００を初期化することによって、バス縮退状態を復旧し、自ＰＣＩデバイスを再度組込むことで障害から復旧させることができる。
【０１５７】
図９は本発明の他の実施例によるコンピュータシステムの構成を示すブロック図であり、図１０は図９のセル（Ｃｅｌｌ）の構成を示すブロック図である。図１０において、本発明の他の実施例によるコンピュータシステムは、本発明の一実施例よりも大規模なシステムに適用したシステムである。
【０１５８】
図１にはコンピュータシステムとしては最小構成の構成例を示しているが、この最小構成におけるプロセッサ２／プロセッサバス１００／メモリコントローラ３／主記憶４をセル６という構成単位にまとめ、このセル６内のＣＰＵ数を増やし（図９では４個のプロセッサ２−１〜２−４）、メモリコントローラ３とＩ／Ｏコントローラ５のＩ／Ｆとをクロスバー（ＸＢＣ）７に集約し、Ｉ／Ｏコントローラ５、ＰＣＩバス２００の数を増やすことによって（図９では９個のＩ／Ｏコントローラ５−１〜５−９）、さらに大規模なコンピュータシステム（マルチプロセッサシステム）を構築している。
【０１５９】
この場合、クロスバー７には８個のセル６−１〜６−８が接続されている。このようなクロスバー７を用いたシステムに関しては、公知であるため、その説明については省略する。
【０１６０】
図９に示すシステムは、クロスバー７を用いた大規模マルチプロセッサシステムであり、４つのプロセッサ２−１〜２−４を１つのセル６にまとめ、８つのセル６−１〜６−８で構成した３２ウェイプロセッサ機である。
【０１６１】
このような大規模なマルチプロセッサシステムにおいても、プロセッサ２からのＩ／Ｏリード、プロセッサ２からのＩ／Ｏライト、ＰＣＩデバイスからのメモリリード、ＰＣＩデバイスからのメモリライトという動作は、上述したようなアウトバウンドリード／アウトバウンドライト／インバウンドリード／インバウンドライトといったトランザクションの送受信によって行われる。大規模なマルチプロセッサシステムでは構成要素としてクロスバー７が追加されているが、各種トランザクションはクロスバー７を経由するだけであり、本発明によるＰＣＩバス障害処理方法の動作に影響を与えるものではない。
【０１６２】
よって、本発明によるＰＣＩバス障害処理方法は、図９に示すような大規模なマルチプロセッサシステムの構成規模に左右されず、本発明の一実施例と同様な効果を発揮することが可能である。
【図面の簡単な説明】
【０１６３】
【図１】本発明の一実施例によるコンピュータシステムの構成を示すブロック図である。
【図２】図１のＯＳに対する信号の入出力を示す概念図である。
【図３】図１のＰＣＩバスコントローラの構成を示すブロック図である。
【図４】本発明の一実施例によるブリッジドライバから提供されるＰＣＩバスアクセス用の各種関数群を示す図である。
【図５】本発明の一実施例によるプロセッサからのＩ／Ｏリードの動作を示すシーケンスチャートである。
【図６】本発明の一実施例によるプロセッサからのＩ／Ｏライトの動作を示すシーケンスチャートである。
【図７】本発明の一実施例によるＰＣＩデバイスからのメモリリードの動作を示すシーケンスチャートである。
【図８】本発明の一実施例によるＰＣＩデバイスからのメモリライトの動作を示すシーケンスチャートである。
【図９】本発明の他の実施例によるコンピュータシステムの構成を示すブロック図である。
【図１０】図９のセルの構成を示すブロック図である。
【図１１】従来例によるコンピュータシステムの構成を示すブロック図である。
【図１２】図１１のＯＳに対する信号の入出力を示す概念図である。
【符号の説明】
【０１６４】
１  ＰＣＩバスコントローラ
２，２−１〜２−４  プロセッサ
３  メモリコントローラ
４  主記憶
５，５−１〜５−９  Ｉ／Ｏコントローラ
６  セル
７  クロスバー
１１  インプットＩ／Ｆ制御部
１２  アウトプットＩ／Ｆ制御部
１３  アウトバウンドバッファ制御部
１３ａ，１４ａ，１５ａ  バッファ
１４  インバウンドバッファ制御部
１５  インバウンドリードデータ制御部
１６  ＰＣＩバス制御部
４１  ＯＳ
１００  プロセッサバス
１６１  バス信号制御部
１６２  アウトバウンドコントローラ部
１６３  インバウンドコントローラ部
１６４  コンフィグレーション部
１６４ａ  バス障害インジケータ
１６５  アービトレーション部
２００  ＰＣＩバス
４１１  ＰＣＩデバイスドライバ
４１２  ブリッジドライバ
【図１】
2005215809.tif 000003
【図２】
2005215809.tif 000004
【図３】
2005215809.tif 000005
【図４】
2005215809.tif 000006
【図５】
2005215809.tif 000007
【図６】
2005215809.tif 000008
【図７】
2005215809.tif 000009
【図８】
2005215809.tif 000010
【図９】
2005215809.tif 000011
【図１０】
2005215809.tif 000012
【図１１】
2005215809.tif 000013
【図１２】
2005215809.tif 000014