(57)【要約】【課題】  ＰＣＩバスのストール状態に陥ったことを示す応答をさせ、タイムアウトによるシステムダウン動作を抑止する。【解決手段】  コンピュータシステムのバスコントローラ５のストール検出部５５、障害通知制御部５６、及び、Ｉ／Ｏコントローラ４のエラーリプライ生成部４５を備える。ストール検出部５５は、ＰＣＩバスのストール状態を監視・検出する。障害通知制御部５６、エラーリプライ生成部４５を介して、プロセッサ１にエラーリプライを返却する。或いは、ストール検出部５５に代えて、サービスプロセッサ６を用意し、サービスプロセッサ６経由でストール状態を監視・検出させて、エラーリプライを返却させる。【選択図】  図２
2006172218.tif 000002
【特許請求の範囲】
【請求項１】
デバイスドライバを備えるプロセッサと、複数の入出力デバイスを接続する入出力バスを制御するバスコントローラを備えるコンピュータシステムにおいて、
バスのストール状態を検出するストール検出部と、
前記プロセッサに対して、ストール状態が検出されたバスに送出されたトランザクションについてエラーリプライを送信するエラーリプライ生成部と、を備えたこと、
を特徴とするコンピュータシステム。
【請求項２】
前記ストール検出部は、バスコントローラ毎にそれぞれ配設され、
バスの非アイドル時間を計測してストール状態を検出すること、
を特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記エラーリプライ生成部は、コンピュータシステムのＩ／Ｏコントローラに配設され、
前記Ｉ／Ｏコントローラは、トランザクションの実行管理を行って、実行中かつ未応答のトランザクションについて、エラーリプライを送信すること、
を特徴とする請求項１又は２に記載のコンピュータシステム。
【請求項４】
プロセッサ、主記憶装置、及び前記プロセッサと前記主記憶装置を接続するメモリコントローラ、複数の入出力デバイスを接続する入出力バスを制御するバスコントローラ、及び前記バスコントローラとメモリコントローラを接続するＩ／Ｏコントローラとを有するコンピュータシステムにおいて、
前記バスコントローラは、
バスのストール状態を検出するストール検出部と、
前記ストール検出部からのストール検出信号を受信し、前記Ｉ／Ｏコントローラに障害状態を通知する障害通知制御部と、を有し、
前記Ｉ／Ｏコントローラは、少なくとも実行中かつ未応答のトランザクションを管理し、
前記バスコントローラの障害通知制御部からの障害通知を受信し、前記プロセッサに対して、前記障害通知がなされたバスに関わるトランザクションについてエラーリプライを送信するエラーリプライ生成部を備えたこと、
を特徴とするコンピュータシステム。
【請求項５】
前記Ｉ／Ｏコントローラは、
未実行のトランザクションを保持する未実行トランザクションリストと、
実行中かつ未応答のトランザクションを保持する仕掛かりトランザクションリストと、を有し、
前記障害通知がなされたバスに関わるトランザクションを前記未実行トランザクションリストに追記して送信を保留し、エラーリプライを返却したトランザクションを前記仕掛かりトランザクションリストから削除するよう動作して、前記各リストを更新すること、
を特徴とする請求項３又は４に記載のコンピュータシステム。
【請求項６】
更に、複数のバスコントローラに接続されたサービスプロセッサを含み、
前記サービスプロセッサの指示によりバスコントローラの制御レジスタの値を読み出す手段と、前記サービスプロセッサの指示により前記障害通知制御部に対してバスコントローラを障害状態に設定する手段と、を備える診断制御部を前記各バスコントローラに備えたこと、
を特徴とする請求項１乃至５いずれか一に記載のコンピュータシステム。
【請求項７】
前記ストール検出部は、
前記バスコントローラのバス制御部の制御レジスタの値に基づいて、バスのビジー状態が所定時間継続したか否かによってストール状態を検出すること、
を特徴とする請求項１乃至６いずれか一に記載のコンピュータシステム。
【請求項８】
前記入出力バスは、ＰＣＩ（ＰｅｒｉｐｈｅｒａｌＣｏｍｐｏｒｎｅｎｔＩｎｔｅｒｃｏｎｎｅｃｔ）バスであること、
を特徴とする請求項１乃至７いずれか一に記載のコンピュータシステム。
【請求項９】
プロセッサ、主記憶装置、及び前記プロセッサと前記主記憶装置を接続するメモリコントローラ、複数の入出力デバイスを接続する入出力バスを制御するバスコントローラ、及び前記バスコントローラとメモリコントローラを接続するＩ／Ｏコントローラとを有するコンピュータシステムに実行させるシステム監視プログラムであって、
バスのストール状態を検出する処理と、
前記バスのストール状態を検出した場合に、障害通知を行う処理と、
少なくとも実行中かつ未応答のトランザクションを管理する処理と、
前記障害通知に基づいて、前記プロセッサに対して、前記障害通知がなされたバスに関わるトランザクションについてエラーリプライを送信する処理とを、
前記コンピュータシステムに実行させるシステム監視プログラム。
【請求項１０】
デバイスドライバを備えるプロセッサと、複数の入出力デバイスを接続する入出力バスを制御するバスコントローラと、前記プロセッサに対してストール状態が検出されたバスに送出されたトランザクションについてエラーリプライを送信するエラーリプライ生成部と、を備えるコンピュータシステムに実行させるプログラムであって、
前記コンピュータシステムに含まれる複数のバスコントローラと前記プロセッサとを中継するサービスプロセッサと通信して、前記各バスコントローラの制御レジスタの値を読み出し、バスの状態を監視する処理と、
前記サービスプロセッサを介して、バスのストール状態が発生したことを前記エラーリプライ生成部に通報する処理とを実行し、
前記エラーリプライ生成部をして、トランザクションに対するエラーリプライを送信されるシステム監視プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステム及びシステム監視プログラムに関し、特に、入出力バスの障害による影響を受けずに、システムを安定動作できるようにしたコンピュータシステム及びシステム監視プログラムに関する。
【背景技術】
【０００２】
１６乃至３２プロセッサからなるマルチプロセッサシステムや、６４を越えるＰＣＩバススロットを持つマルチプロセッサシステムなど、１システムに多くのプロセッサやＰＣＩデバイスを接続したコンピュータシステムが開発されている。
【０００３】
このようなコンピュータシステムは、一般に、高度な信頼性や耐障害性が必要となる用途（ミッションクリティカルな用途）に用いられることが多い。したがって、高度な可用性（ａｖａｉｌａｂｌｉｔｙ）も求められる。このため、エラーによる影響を最小限に抑えることができるような障害検出及びその処理に関する技術が必要とされている。
【０００４】
なお、ＰＣＩバスにおけるエラーの検出、とりわけ、１つのＰＣＩサイクルに対し、複数のターゲットデバイスが応答してしまう事象の検出（本発明でいうストールとは全く別の事象である）に関するものとして、特開２００２−２１５５５７号公報に記載の技術がある。
【０００５】
【特許文献１】特開２００２−２１５５５７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
始めに、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｒｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスシステムを例にとり、従来技術の問題点を説明する。
【０００７】
図５は、多数のＰＣＩバスを備えるコンピュータシステムの構成を表した図である。図５において、プロセッサ（ＣＰＵ；Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１は、プロセッサバス（ＦＳＢ；Ｆｒｏｎｔ  Ｓｉｄｅ  Ｂｕｓ）を介してメモリコントローラ（ＭＭＣ；Ｍａｉｎ  Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌ）３に接続されている。
【０００８】
メモリコントローラ３は、プロセッサ１とのＩ／Ｆ（インタフェース）の他、主記憶装置（ＭＭＵ；Ｍａｉｎ  Ｍｅｍｏｒｙ  Ｕｎｉｔ）２及びＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）コントローラ（ＩＯＣ；Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  ｃｏｎｔｒｏｌ）４のインタフェース（以下、Ｉ／Ｆともいう）を備えている。
【０００９】
Ｉ／Ｏコントローラ４は、メモリコントローラ３とのＩ／Ｆのほか、バスコントローラ（ＢＵＳＣ；Ｂｕｓ  Ｃｏｎｔｒｏｌ）５のＩ／Ｆを備えている。バスコントローラ５は、配下に接続されるＰＣＩバス１００を有し、ＰＣＩバス仕様に基づいた動作プロトコルによりデータ転送を行う。ＰＣＩバス１００には複数のＰＣＩデバイス（周辺装置）を接続することが可能である。
【００１０】
メモリコントローラ３及びＩ／Ｏコントローラ４は、プロセッサ１及びバスコントローラ５から受けたトランザクションのルーティングを行い、トランザクション毎にその宛先に応じてルーティングを行う。
【００１１】
なお、メモリコントローラ３、Ｉ／Ｏコントローラ４、及び、バスコントローラ５は、システム規模や構成によって１個ないし複数のＬＳＩ（大規模集積回路）で構成されるユニットである。
【００１２】
上述したコンピュータシステムでは、プロセッサ１からＰＣＩデバイスへ直接的なアクセスや、ＰＣＩデバイスを起点とした主記憶装置２へのアクセスが行われる。以下、プロセッサ１からＰＣＩデバイスへの直接的なアクセス動作について図５を参照して説明する。
【００１３】
まず、プロセッサ１からＰＣＩデバイスへのＩ／Ｏリード［アウトバウンド（Ｏｕｔｂｏｕｎｄ）リード］の場合について説明する。
【００１４】
プロセッサ１からのＩ／Ｏリードの場合、プロセッサ１からＰＣＩデバイスへのリードトランザクションは、プロセッサバス（ＦＳＢ）を経由してメモリコントローラ３からＩ／Ｏコントローラ４へ送られる。
【００１５】
Ｉ／Ｏコントローラ４へ到達したリードトランザクションは、更にバスコントローラ５へ送られる。バスコントローラ５にルーティングされたトランザクションは、バスコントローラ５でＰＣＩバストランザクションに変換されてＰＣＩバス１００に送出され、目的のＰＣＩデバイスへと到達する。
【００１６】
なお、このＰＣＩバス１００上でのトランザクションの伝達動作は一般的なＰＣＩバスサイクル（メモリサイクル、Ｉ／Ｏサイクル、コンフィグレーションサイクル等）が用いられる。
【００１７】
その後、ＰＣＩデバイスからのリプライ及びリードデータは、上記と逆の経路を辿って、ＰＣＩバス１００からバスコントローラ５、Ｉ／Ｏコントローラ４、メモリコントローラ３、プロセッサバス（ＦＳＢ）を経てトランザクションの送出元であるプロセッサ１へと返却される。
【００１８】
ＰＣＩバス１００へのトランザクション送出が障害等によって失敗した場合には、以下のような動作となる。アドレス・パリティエラー等のＰＣＩバス１００のエラーが発生した場合には、ＰＣＩデバイスがエラーを検知してシステムエラー線ＳＥＲＲ（Ｓｙｓｔｅｍ  Ｅｒｒｏｒ）＃をドライブし、エラーを検知したバスコントローラ５がプロセッサ１に対してＮＭＩ（Ｎｏｎ  Ｍａｓｋ  Ｉｎｔｅｒｒｕｐｔ）信号線によってエラーを通知する。
【００１９】
また、データ・パリティエラー等のＰＣＩバス１００のエラーを検出した場合には、バスコントローラ５がエラーを検知してパリティエラー線ＰＥＲＲ（Ｐａｒｉｔｙ  Ｅｒｒｏｒ）＃をドライブし、リードリプライの代わりにエラーリプライを返却する。
【００２０】
エラーリプライとは正常リプライと異なり、プロセッサ１から送出されたトランザクションが正常に終了しなかったことをプロセッサ１に通知するためのリプライである。
【００２１】
続いて、プロセッサ１からのＰＣＩデバイスへのＩ／Ｏライト［アウトバウンド（Ｏｕｔｂｏｕｎｄ）ライト］について説明する。
【００２２】
プロセッサ１からＰＣＩデバイスへのライトには２種類のトランザクションが定義される。プロセッサ１がＰＣＩデバイスへの書込み完了応答を待ち合わせるデファード（Ｄｅｆｅｒｒｅｄ）タイプの書込み（Ｄｅｆｅｒｒｅｄライト）と、書込み完了応答を待合せないポステッド（Ｐｏｓｔｅｄ）タイプの書込み（Ｐｏｓｔｅｄライト）とである。
【００２３】
Ｄｅｆｅｒｒｅｄライトトランザクションの場合、上述したＩ／Ｏリードと同様の経路を辿ってバスコントローラ５にルーティングされる。バスコントローラ５にルーティングされたライトトランザクションはバスコントローラ５でＰＣＩバストランザクションに変換されてＰＣＩバス１００に送出され、目的のＰＣＩデバイスへと到達する。
【００２４】
その後、すべてのデータの送信（ＰＣＩバスサイクルの終了）を確認したバスコントローラ５はライトリプライを発行する。このライトリプライが上記と逆の経路を辿って、ＰＣＩバス１００からバスコントローラ５、Ｉ／Ｏコントローラ４、メモリコントローラ３、プロセッサバスを経てトランザクションの送出元であるプロセッサ１へと返却される。
【００２５】
一方、Ｐｏｓｔｅｄライトトランザクションの場合、プロセッサ１はトランザクションの送出を完了した時点で書込み動作を完了と見なし、送出されたＰｏｓｔｅｄライトを目的のＰＣＩデバイスに向けてルーティングし、ＰＣＩバス１００にすべてのデータの送信が完了した時点でトランザクションとしての動作を終了する。
【００２６】
ＰＣＩバス１００へのトランザクション送出が障害等によって失敗した場合には、以下のような動作となる。アドレス・パリティエラー等のＰＣＩバス１００のエラーが発生した場合には、ＰＣＩデバイスがエラーを検知してシステムエラー線ＳＥＲＲ＃をドライブし、エラーを検知したバスコントローラ５がプロセッサ１に対してＮＭＩ信号線によってエラーを通知する。
【００２７】
また、データ・パリティエラー等のＰＣＩバス１００のエラーを検出した場合には、ＰＣＩデバイスがパリティエラー線ＰＥＲＲ＃をドライブし、バスコントローラ５がエラーを検知してプロセッサ１に通知する。ここで、Ｄｅｆｅｒｒｅｄライトのデータ・パリティエラーの場合には、バスコントローラ５は正常リプライの代わりにエラーリプライを送出する。Ｐｏｓｔｅｄライトのデータ・パリティエラーの場合には、バスコントローラ５はＮＭＩ信号線によってエラーを通知する。
【００２８】
図６は、上述したＩ／Ｏコントローラ４と、バスコントローラ５の詳細構成を表した図である。Ｉ／Ｏコントローラ４は、メモリコントローラ３とのインタフェースを制御するメモリコントローラ・インタフェース制御部４１と、バスコントローラ５とのインタフェースを制御するバスコントローラ・インタフェース制御部４２と、プロセッサからの未実行トランザクションに関する情報を保持する未実行トランザクション管理テーブル４３と、プロセッサからの実行中トランザクションに関する情報を保持する実行中トランザクション管理テーブル４４と、を備えている。
【００２９】
また、バスコントローラ５は、Ｉ／Ｏコントローラ４とのインタフェースを制御するＩ／Ｏコントローラ・インタフェース制御部５１と、ＰＣＩバス１００を制御するＰＣＩバス制御部５２と、プロセッサからの実行要求トランザクションに関する情報を保持する要求キュー５３と、プロセッサへの応答トランザクションに関する情報を保持する応答キュー５４と、備えている。
【００３０】
上述の構成において、Ｉ／Ｏコントローラ４へ到達したトランザクションは、メモリコントローラ・インタフェース制御部４１で受信され、プロセッサからの未実行トランザクションに関する情報を保持する未実行トランザクション管理テーブル４３に格納される。前記未実行トランザクション管理テーブル４３に格納されたトランザクションは、バスコントローラ・インタフェース制御部４２を介してバスコントローラ５へ送出される。このとき、該トランザクションがリード要求もしくはＤｅｆｅｒｒｅｄライト要求である場合、バスコントローラ５からのリプライ受信時にリプライを返却すべきトランザクションに関する諸情報（トランザクション種別や応答返却先プロセッサ識別等）が、実行中トランザクション管理テーブル４４に格納される。
【００３１】
バスコントローラ５へ到達したトランザクションは、Ｉ／Ｏコントローラ・インタフェース制御部５１で受信され、プロセッサからの実行要求トランザクションに関する情報を保持する要求キュー５３に格納される。要求キュー５３に格納されたトランザクションは、ＰＣＩバス制御部５２を介してＰＣＩバス１００へ送出される。ＰＣＩバス１００にて該トランザクションに関するデータ転送が終了すると、該トランザクションがリード要求もしくはＤｅｆｅｒｒｅｄライト要求である場合、該トランザクションに関するリプライ情報（実行結果の正常・異常識別とリードデータに関する情報）が、プロセッサへの応答トランザクションに関する情報を保持する応答キュー５４へ格納される。応答キュー５４へ格納されたトランザクションは、Ｉ／Ｏコントローラ・インタフェース制御部５１を介してＩ／Ｏコントローラ４へ送出される。
【００３２】
Ｉ／Ｏコントローラ４へ到達したトランザクションのリプライ情報は、バスコントローラ・インタフェース制御部４２で受信され、先に実行中トランザクション管理テーブル４４に格納している実行中トランザクションに関する情報と結合され、メモリコントローラ・インタフェース制御部４１を介してメモリコントローラ３へ送出される。
【００３３】
ここで、ＰＣＩバス１００にて正常にデータ転送が実施された場合は、リプライ情報は正常終了（ノーマルリプライ）を示すことになるが、プロセッサからＰＣＩデバイスへのアクセス中にＰＣＩバスでパリティエラー等の障害が発生した場合に、システムエラー信号線ＳＥＲＲ＃のアサートによりＮＭＩ信号線、もしくは、エラーリプライによりプロセッサに対してエラーの発生が通知される。これにより、適切な例外ハンドラを実行することで障害復旧処理を行うことができる。
【００３４】
しかしながら、プロセッサからＰＣＩデバイスへのアクセス中にＰＣＩバスでストール状態（非アイドル状態が所定時間継続すること）が発生した場合に、バスコントローラは実行中のトランザクションを終了させることができず、前記実行中のトランザクションに対するリプライを返却することができない。実行中のトランザクションに関するリプライを待ち合わせているプロセッサは、リプライを受信できない状態に陥る。
【００３５】
そしてさらに、これらトランザクションの発行元となるプロセッサは、システムの運用継続が困難な重度の障害が発生したものと判断し、システムを異常停止（システムダウン）させる。これは、プロセッサが発行したトランザクションに対してタイムアウトが発生し、システムが不安定な状態になりうることを示唆している。
【００３６】
以上のように、従来のコンピュータシステムでは、プロセッサからＰＣＩデバイスへ発行したトランザクションが入出力バスのストールに遭遇した場合、もしくは、ストールに巻き込まれた場合、そのトランザクションを発行したプロセッサに対してリプライを返却することができないため、トランザクションのタイムアウトとなってシステムダウン動作が開始されてしまうという問題点があった。
【００３７】
本発明は、上記した事情に鑑みてなされたものであって、その目的とするところは、上述した例に代表されるバスのストール状態に起因してシステムが異常停止することを抑止することができ、信頼性をより向上させることのできるコンピュータシステム及びシステム監視プログラムを提供することにある。
【課題を解決するための手段】
【００３８】
本発明の第１の視点によれば、デバイスドライバを備えるプロセッサと、複数の入出力デバイスを接続する入出力バスを制御するバスコントローラを備えるコンピュータシステムにおいて、バスのストール状態（非アイドル状態の所定時間以上の継続）を検出するストール検出部と、前記プロセッサに対して、ストール状態が検出されたバスに送出されたトランザクションについてエラーリプライを送信するエラーリプライ生成部と、を備えたこと、を特徴とするコンピュータシステムが提供される。
【００３９】
本発明の第２の視点によれば、プロセッサ、主記憶装置、及び前記プロセッサと前記主記憶装置を接続するメモリコントローラ、複数の入出力デバイスを接続する入出力バスを制御するバスコントローラ、及び前記バスコントローラとメモリコントローラを接続するＩ／Ｏコントローラとを有し、上述のエラーリプライを送信可能をしたコンピュータシステムが提供される。このコンピュータシステムにおいて、前記バスコントローラは、バスのストール状態を検出するストール検出部と、前記ストール検出部からのストール検出信号を受信し、前記Ｉ／Ｏコントローラに障害状態を通知する障害通知制御部と、を有する。また、前記Ｉ／Ｏコントローラは、少なくとも実行中かつ未応答のトランザクションを管理し、前記バスコントローラの障害通知制御部からの障害通知を受信し、前記プロセッサに対して、前記障害通知がなされたバスに関わるトランザクションについてエラーリプライを送信するエラーリプライ生成部を備える。
【発明の効果】
【００４０】
本発明によれば、バスがストール状態に陥ったことをプロセッサに報知することができ、適宜対処を行わせる信頼性の高いコンピュータシステムを実現できる。その理由は、バスのストール状態を検知し、プロセッサに異常終了（エラーリプライ）を確実に通知できるよう構成したことにある。
【発明を実施するための最良の形態】
【００４１】
続いて、本発明を実施するための最良の形態について図面を参照して詳細に説明する。図１は、本発明の第１の実施の形態に係るコンピュータシステムの構成を表したブロック図である。図１を参照すると、本発明の第１の実施の形態に係るコンピュータシステムは、上述した従来のコンピュータシステムと同様に、プロセッサ（ＣＰＵ）１、主記憶装置（ＭＭＵ）２、メモリコントローラ（ＭＭＣ）３、Ｉ／Ｏコントローラ（ＩＯＣ）４、バスコントローラ（ＢＵＳＣ）５とを備えて構成されている。
【００４２】
更に、本発明の一実施の形態に係るコンピュータシステムは、メモリコントローラ３、Ｉ／Ｏコントローラ４、及び、バスコントローラ５に接続されたサービスプロセッサ６を備えている。
【００４３】
プロセッサ１は、プロセッサバス（ＦＳＢ）を介してメモリコントローラ３に接続さている。
【００４４】
メモリコントローラ３は、プロセッサ１とのインタフェースのほか、主記憶装置２及びＩ／Ｏコントローラ４のインタフェースを備えている。
【００４５】
Ｉ／Ｏコントローラ４は、メモリコントローラ３とのインタフェースのほか、バスコントローラ５のインタフェースを備えている。
【００４６】
バスコントローラ５は、複数配設され、それぞれの配下に接続されるＰＣＩバス１００を有し、ＰＣＩバス仕様に基づいた動作プロトコルによりデータ転送を行う。ＰＣＩバス１００には複数のＰＣＩデバイスを接続することが可能である。
【００４７】
プロセッサ１上では、ＰＣＩデバイスを制御するためのデバイスドライバが動作し、デバイスドライバの動作に応じてプロセッサはＰＣＩデバイスに対してトランザクションを発行する。プロセッサ１が発行したトランザクションは、メモリコントローラ３及びＩ／Ｏコントローラ４を介して、バスコントローラ５に送信される。
【００４８】
メモリコントローラ３及びＩ／Ｏコントローラ４は、プロセッサ１及びバスコントローラ５から受けたトランザクションを、該トランザクションの宛先となるバスもしくは主記憶装置に到達するよう、トランザクションのルーティング制御を行う。
【００４９】
図２は、上記コンピュータシステムのＩ／Ｏコントローラとバスコントローラの詳細構成を表したブロック図である。図２を参照すると、Ｉ／Ｏコントローラ４は、メモリコントローラ３とのインタフェースを制御するメモリコントローラ・インタフェース制御部４１と、バスコントローラ５とのインタフェースを制御するバスコントローラ・インタフェース制御部４２と、プロセッサからの未実行トランザクションに関する情報を保持する未実行トランザクション管理テーブル（未実行トランザクションリスト）４３と、プロセッサからの実行中トランザクションに関する情報を保持する実行中トランザクション管理テーブル（仕掛かりトランザクションリスト）４４と、バスコントローラ５からの障害通知により仕掛かり中のトランザクションに関して異常終了(エラーリプライ)を返却するよう制御するエラーリプライ生成部４５とを備えて構成されている。
【００５０】
また、バスコントローラ５は、Ｉ／Ｏコントローラ４とのインタフェースを制御するＩ／Ｏコントローラ・インタフェース制御部５１と、ＰＣＩバス１００を制御するＰＣＩバス制御部５２と、プロセッサからの実行要求トランザクションに関する情報を保持する要求キュー５３と、プロセッサへの応答トランザクションに関する情報を保持する応答キュー５４と、内部にタイマを持ちＰＣＩバス制御部のストール状態を監視・検出するストール検出部５５と、ストール検出部５５からのストール検出信号によりＩ／Ｏコントローラ４に対して障害通知を発行する障害通知制御部５６と、を備えて構成されている。
【００５１】
続いて、図１を参照して、上記コンピュータシステムにおけるプロセッサ１からＰＣＩデバイスへの直接的なアクセス動作について説明する。
【００５２】
まず、プロセッサ１からのＩ／Ｏリード・ライト要求の場合、プロセッサ１からＰＣＩデバイスへのトランザクションは、プロセッサバスを経由してメモリコントローラ３からＩ／Ｏコントローラ４へ送られる。Ｉ／Ｏコントローラ４へ到達したトランザクションは、更にバスコントローラ５へ送られる。目的のバスコントローラ５にルーティングされたトランザクションは、バスコントローラ５でＰＣＩバストランザクションに変換されてＰＣＩバス１００に送出され、目的のＰＣＩデバイスへと到達する。これらトランザクションの伝達動作は一般的なＰＣＩバスサイクル（メモリサイクル、Ｉ／Ｏサイクル、コンフィグレーションサイクル等）にて行われる。
【００５３】
その後、トランザクションがリード要求もしくはＤｅｆｅｒｒｅｄライト要求である場合、ＰＣＩデバイスからのリプライ及びリードデータは、上記と逆の経路を辿って、ＰＣＩバス１００からバスコントローラ５、Ｉ／Ｏコントローラ４、メモリコントローラ３、プロセッサバスを経てトランザクションの送出元であるプロセッサ１へと返却される。
【００５４】
続いて、図２を参照して、Ｉ／Ｏコントローラ４とバスコントローラ５の内部動作について説明する。Ｉ／Ｏコントローラ４へ到達したトランザクションは、メモリコントローラ・インタフェース制御部４１で受信され、プロセッサからの未実行トランザクションに関する情報を保持する未実行トランザクション管理テーブル４３に格納される。未実行トランザクション管理テーブル４３に格納されたトランザクションは、バスコントローラ・インタフェース制御部４２を介してバスコントローラ５へ送出される。
【００５５】
トランザクションがリード要求もしくはＤｅｆｅｒｒｅｄライト要求である場合、バスコントローラ５からのリプライ受信時にリプライを返却すべきトランザクションに関する諸情報（トランザクション種別や応答返却先プロセッサ識別等）をプロセッサからの実行中トランザクションに関する情報を保持する実行中トランザクション管理テーブル４４に格納する。
【００５６】
バスコントローラ５へ到達したトランザクションは、Ｉ／Ｏコントローラ・インタフェース制御部５１で受信され、要求キュー５３に格納される。要求キュー５３に格納されたトランザクションは、ＰＣＩバス制御部５２を介してＰＣＩバス１００へ送出される。データ転送が終了したトランザクションがリード要求もしくはＤｅｆｅｒｒｅｄライト要求である場合、該トランザクションに関するリプライ情報（実行結果の正常・異常識別とリードデータに関する情報）が、応答キュー５４に格納される。応答キュー５４に格納されたトランザクションは、Ｉ／Ｏコントローラ・インタフェース制御部５１を介してＩ／Ｏコントローラ４へ送出される。
【００５７】
Ｉ／Ｏコントローラ４へ到達したトランザクションのリプライ情報は、バスコントローラ・インタフェース制御部４２で受信され、先に実行中トランザクション管理テーブル４４に格納している実行中トランザクションに関する情報と結合され、メモリコントローラ・インタフェース制御部４１を介してメモリコントローラ３へ送出される。
【００５８】
以上がＰＣＩデバイスへの直接的なアクセス動作の概要であるが、本実施の形態では、新たに実装した手段によって以下の動作が行なわれる。
【００５９】
バスコントローラ５のストール検出部５５は、タイマを用いてＰＣＩバス制御部５２から示されるＰＣＩバスのバスビジー状態（非アイドル状態）の継続時間を計数する。なお、このタイマは、バスがアイドル状態に戻るとクリアされる。ここで、該タイマが規定時間以上に到達した場合には、ストール検出部５５は、ＰＣＩバスがストール状態であると判断し、ストール検出信号を障害通知制御部５６に通知する。
【００６０】
バスコントローラ５の障害通知制御部５６は、前記ストール検出部５５からのストール検出信号を受信すると、Ｉ／Ｏコントローラ４に対してバスコントローラ５にてストールが発生していることを示す障害通知を送信する。
【００６１】
Ｉ／Ｏコントローラ４のエラーリプライ生成部４５は、バスコントローラ５からの障害通知を受信すると、実行中トランザクション管理テーブル４４に格納されているトランザクション（バスコントローラ５配下のＰＣＩバス１００に送出済みのトランザクション）に関して、発行元のプロセッサ１に対して異常終了を示すリプライ情報（エラーリプライ）を生成し応答として返却する。
【００６２】
その一方で、エラーリプライ生成部４５は、バスコントローラ・インタフェース制御部４２を制御し、未実行トランザクション管理テーブル４３に格納されている未実行のトランザクション（障害通知を受けたバスコントローラ５配下のＰＣＩバス１００に送信していないトランザクション）について、ストールが発生しているバスコントローラ５への送出を抑止するとともに、実行中トランザクション管理テーブル４４に格納する。
【００６３】
このようにして、実行中トランザクション管理テーブル４４に格納されたトランザクションは、前述のバスコントローラ５配下のＰＣＩバス１００に送出済みのトランザクションと同じように、発行元のプロセッサ１に対して異常終了を示すリプライ情報（エラーリプライ）が返される。
【００６４】
上記のように、バスコントローラのストール検出部５５によりバスのストール状態を監視・検出し、ストール検出時はＩ／Ｏコントローラ４のエラーリプライ生成部４５により実行中トランザクション及び未実行トランザクションに関して発行元のプロセッサ１に対して異常終了（エラーリプライ）が返却される。これにより、ＰＣＩバス１００がストール状態に陥っても、プロセッサ１がトランザクションのタイムアウトを検出し、システムダウン動作を開始することに代えて、適切な例外処理を実行させることが可能となる。
【００６５】
［第２の実施の形態］
続いて、新たにサービスプロセッサ６を用いることを特徴とする本発明の第２の実施の形態について図面を参照して詳細に説明する。図３は、本発明の第２の実施の形態に係るコンピュータシステムの構成を表したブロック図である。図３に示されたとおり、本実施の形態は、プロセッサ（ＣＰＵ）１、主記憶装置（ＭＭＵ）２、メモリコントローラ（ＭＭＣ）３、Ｉ／Ｏコントローラ（ＩＯＣ）４、バスコントローラ（ＢＵＳＣ）５といった基本構成は、上述した第１の実施の形態に係るコンピュータシステムと同様である。以下、上記第１の実施の形態で既に説明した事項は省略して説明する。
【００６６】
本実施の形態においてプロセッサ１は、システムの稼動状態を監視するためのシステム監視プログラムが動作しており、バスの状態については、サービスプロセッサ６に対して定期的に照会を行って、バスコントローラ５の稼動状態を監視している。
【００６７】
サービスプロセッサ６は、システムの初期設定や診断処理、及び、ログ採取処理などを行うため、コンピュータシステム内の主要コンポーネントであるメモリコントローラ３、Ｉ／Ｏコントローラ４、及び、バスコントローラ５に接続され、前記コントローラ群の内部レジスタの状態参照や各種設定を実行可能に構成される。プロセッサ１は、メモリコントローラ３を介してサービスプロセッサ６とも接続され、サービスプロセッサ６と通信し情報を送受信することがが可能となっている。
【００６８】
図４は、本実施の形態のＩ／Ｏコントローラとバスコントローラの詳細構成を表したブロック図である。図４を参照すると、バスコントローラ５には、サービスプロセッサ６と接続するための診断制御部５７が設けられている。サービスプロセッサ６は、診断制御部５７を介して、バスコントローラ５内の各種制御回路のレジスタの読み出しと、障害通知制御部５６に対する障害状態の設定を行うことが可能となっている。
【００６９】
本実施の形態では、新たに実装したサービスプロセッサ６によって以下の動作が行なわれる。プロセッサ１は、システム監視プログラムにて設定された時間間隔にて、サービスプロセッサ６にアクセスし、バスコントローラ５内の制御レジスタの値を読み出す。
【００７０】
続いて、プロセッサ１は、前記したシステム監視プログラムに定められた条件に従ってバスコントローラ５がストール状態である否かを判定する。ここで、バスコントローラ５がストール状態であると判断した場合、プロセッサ１は、サービスプロセッサ６にアクセスし、バスコントローラ５内の障害通知制御部５６に対してバスコントローラ５を障害状態に設定するよう指令する。
【００７１】
障害通知制御部５６は、本障害状態の設定により、Ｉ／Ｏコントローラ４に対してバスコントローラ５にてストール障害が発生していることを示す障害通知を送信する。これ以降の処理は、前述した第１の実施の形態と同様で、Ｉ／Ｏコントローラ４のエラーリプライ生成部４５が、障害通知を受け取ったバスに関わる実行中トランザクション及び未実行トランザクションに関して発行元のプロセッサ１に対して異常終了（エラーリプライ）を返却することにより、バスコントローラ５がストール状態に陥っても、プロセッサ１がトランザクションのタイムアウトを検出しないよう制御できるため、システムダウンの発生を抑止し、プロセッサ１により適切な例外処理が実行できる。
【００７２】
なお、上記した実施の形態では、上述したシステム監視プログラムを、サービスプロセッサ６において実行させ、サービスプロセッサ６経由でバスコントローラ５自体のストール状態を監視・検出して、エラーリプライを返却するようにしてもよい。
【００７３】
以上、本発明の実施の形態を説明したが、本発明は、要するに、バスコントローラ５のストール検出部５５（又はサービスプロセッサ６）、障害通知制御部５６、及び、Ｉ／Ｏコントローラ４のエラーリプライ生成部４５を主要構成要素として構成することが可能である。また本構成によって、ＰＣＩバスのストール状態を監視・検出して、エラーリプライを返却し、適切な対処を取ることが可能となる。
【００７４】
また、上記した各実施の形態では、本発明をＰＣＩバスシステムに適用した例を挙げて説明したが、本発明の原理を適用可能なその他の入出力バスシステムにも等しく、或いは、適宜設計変更をなして適用できることはもちろんである。
【図面の簡単な説明】
【００７５】
【図１】本発明の第１の実施の形態に係るコンピュータシステムの構成を表した図である。
【図２】本発明の第１の実施の形態に係るコンピュータシステムのＩ／Ｏコントローラとバスコントローラの構成を表した図である。
【図３】本発明の第２の実施の形態に係るコンピュータシステムの構成を表した図である。
【図４】本発明の第２の実施の形態に係るコンピュータシステムのＩ／Ｏコントローラとバスコントローラの構成を表した図である。
【図５】従来のコンピュータシステムの基本的な構成例を表した図である。
【図６】従来のコンピュータシステムのＩ／Ｏコントローラとバスコントローラの構成を表した図である。
【符号の説明】
【００７６】
１  プロセッサ（ＣＰＵ）
２  主記憶装置（ＭＭＵ）
３  メモリコントローラ（ＭＭＣ）
４  Ｉ／Ｏコントローラ（ＩＯＣ）
５  バスコントローラ（ＢＵＳＣ）
６  サービスプロセッサ
４１  メモリコントローラ・インタフェース制御部
４２  バスコントローラ・インタフェース制御部
４３  未実行トランザクション管理テーブル（未実行トランザクションリスト）
４４  実行中トランザクション管理テーブル（仕掛かりトランザクションリスト）
４５  エラーリプライ生成部
５１  Ｉ／Ｏコントローラ・インタフェース制御部
５２  ＰＣＩバス制御部
５３  要求キュー
５４  応答キュー
５５  ストール検出部
５６  障害通知制御部
５７  診断制御部
１００  ＰＣＩバス
【図１】
2006172218.tif 000003
【図２】
2006172218.tif 000004
【図３】
2006172218.tif 000005
【図４】
2006172218.tif 000006
【図５】
2006172218.tif 000007
【図６】
2006172218.tif 000008