(57)【特許請求の範囲】
【請求項１】
上位装置から受信した指令情報群のうちの各指令情報に割り当てられた識別子に関連づけられた第一の記憶領域に、前記識別子が使用中であるか否かを示す情報を記憶する識別子記憶手段と、
前記第一の記憶領域に記憶された各前記識別子に関連づけられた第二の記憶領域に、前記識別子が割り当てられた前記指令情報が下位装置へ送信された時刻を起点とする経過時間を記憶する経過時間記憶手段と、
前記識別子が使用中でない場合には、当該識別子を前記指令情報に割り当てることを許可し、
前記識別子が使用中である場合には、当該識別子を前記指令情報に割り当てることを禁止し、
前記識別子が使用中であり、且つ当該識別子に関連づけられた前記経過時間が予め定めた閾値に達していない場合には、当該識別子を割り当てられた前記指令情報の前記下位装置への送信に対する応答を受信したときに、当該応答の前記上位装置への送信、及び当該識別子に関連づけられた前記第一の記憶領域のリセットを行い、
前記識別子が使用中であり、且つ当該識別子に関連づけられた前記経過時間が前記閾値に達している場合には、当該識別子を割り当てられた前記指令情報の前記下位装置への送信に対する応答を受信したときに、当該応答の破棄、及び当該識別子に関連づけられた前記第一の記憶領域のリセットを行う
制御手段と
を備える障害処理装置。
【請求項２】
上位装置が出力した指令に対する下位装置からの応答情報を一時記憶する応答情報緩衝記憶装置と前記下位装置が出力する前記上位装置に対する要求情報を一時記憶する要求情報緩衝記憶装置とを更に備え、前記制御手段が前記応答情報緩衝記憶装置及び前記要求情報緩衝記憶装置から前記応答情報及び前記要求情報を順次読み出す請求項１の障害処理装置。
【請求項３】
請求項１乃至２のいずれかに記載の障害処理装置と、
ＰＣＩｅの規格を採用して情報の伝達を行う情報処理手段と
ＰＣＩｅ規格の信号を各々の周辺機器のインターフェースに変換して接続するＰＣＩｅカードと、
前記情報処理手段から前記ＰＣＩｅカードとの接続先を切り替えるＰＣＩｅ切り替え手段と、
各々のＰＣＩｅカードに接続された周辺機器と
を包含する障害処理システム。
【請求項４】
上位装置から受信した指令情報群のうちの各指令情報に割り当てられた識別子に関連づけられた第一の記憶領域に、前記識別子が使用中であるか否かを示す情報を記憶する識別子記憶手段と、
前記第一の記憶領域に記憶された各前記識別子に関連づけられた第二の記憶領域に、前記識別子が割り当てられた前記指令情報が下位装置へ送信された時刻を起点とする経過時間を記憶する経過時間記憶手段と
を有する障害処理装置における障害処理方法であって、
前記識別子が使用中でない場合には、当該識別子を前記指令情報に割り当てることを許可し、
前記識別子が使用中である場合には、当該識別子を前記指令情報に割り当てることを禁止し、
前記識別子が使用中であり、且つ当該識別子に関連づけられた前記経過時間が予め定めた閾値に達していない場合には、当該識別子を割り当てられた前記指令情報の前記下位装置への送信に対する応答を受信したときに、当該応答の前記上位装置への送信、及び当該識別子に関連づけられた前記第一の記憶領域のリセットを行い、
前記識別子が使用中であり、且つ当該識別子に関連づけられた前記経過時間が前記閾値に達している場合には、当該識別子を割り当てられた前記指令情報の前記下位装置への送信に対する応答を受信したときに、当該応答の破棄、及び当該識別子に関連づけられた前記第一の記憶領域のリセットを行う
障害処理方法。
【請求項５】
上位装置が出力した指令に対する下位装置からの応答情報を一時記憶し、前記下位装置が出力する前記上位装置に対する要求情報を一時記憶し、記憶した前記応答情報と前記要求情報とを順次読み出す請求項４の障害処理方法。
【請求項６】
上位装置から受信した指令情報群のうちの各指令情報に割り当てられた識別子に関連づけられた第一の記憶領域に、前記識別子が使用中であるか否かを示す情報を記憶する識別子記憶手段と、
前記第一の記憶領域に記憶された各前記識別子に関連づけられた第二の記憶領域に、前記識別子が割り当てられた前記指令情報が下位装置へ送信された時刻を起点とする経過時間を記憶する経過時間記憶手段と
を有する障害処理装置が備えるコンピュータに、
前記識別子が使用中でない場合には、当該識別子を前記指令情報に割り当てることを許可し、
前記識別子が使用中である場合には、当該識別子を前記指令情報に割り当てることを禁止し、
前記識別子が使用中であり、且つ当該識別子に関連づけられた前記経過時間が予め定めた閾値に達していない場合には、当該識別子を割り当てられた前記指令情報の前記下位装置への送信に対する応答を受信したときに、当該応答の前記上位装置への送信、及び当該識別子に関連づけられた前記第一の記憶領域のリセットを行い、
前記識別子が使用中であり、且つ当該識別子に関連づけられた前記経過時間が前記閾値に達している場合には、当該識別子を割り当てられた前記指令情報の前記下位装置への送信に対する応答を受信したときに、当該応答の破棄、及び当該識別子に関連づけられた前記第一の記憶領域のリセットを行う
処理を実行させる障害処理プログラム。
【請求項７】
上位装置が出力した指令に対する下位装置からの応答情報を一時記憶し、前記下位装置が出力する前記上位装置に対する要求情報を一時記憶し、記憶した前記応答情報と前記要求情報とを順次読み出す処理を更に前記コンピュータに実行させる請求項６の障害処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、障害処理装置、その装置を使用する情報処理装置、障害処理方法及び障害処理プログラムに関する。
【背景技術】
【０００２】
高速インターフェース、とりわけシリアル伝送では、情報をパケット化して伝達することが良く用いられている。パケットを用いた伝送方式は周辺装置との接続に用いられ、さらに情報処理の機器内でプロセッサと周辺装置との接続にも用いられる。情報処理装置の機器内の接続方式は、例えばＰＣＩ  Ｅｘｐｒｅｓｓ（登録商標）（以後ＰＣＩｅと記述する）のバスアーキテクチャがある。
【０００３】
ＰＣＩｅは高速動作を実現できることから、一般的な情報処理装置に用いられている。しかしながら何等かの障害により、パケット送信に対する応答の受信が正常に完結しない場合に、障害の処理が正確に行われずに上位の情報処理装置のホスト等が、後から受け取った誤った情報を基に処理を続行する。結果としてシステムが不安定になる欠点が存在する。
【０００４】
このＰＣＩｅは、汎用機を始めとして、種々の情報処理装置に広く用いられており、近年ではシステムの安定動作が重要視されるメインフレームにも用いられることが多くなった。システムの安定稼働が必要なメインフレームにＰＣＩｅを適用するには、前述のＰＣＩｅの欠点を克服してシステムの安定動作を確保することが求められている。
【０００５】
例えば、特許文献１には、ＰＣＩｅにおいて上位装置からの要求パケットに対して下位装置から規定の時間内に応答がない場合に、下位装置に対するインターフェースを行っているインターフェース装置がタイムアウトであると判断して上位装置に通知する。上位装置は、その通知を受け取ることでタイムアウトした要求パケットに代わる新たなパケットの再送を行う。この時に、上位装置は、再送の為に新たに作成したパケット自体に、最初に要求したパケットとは異なるパケットであることを示すフラグを書き込む。この書き込まれた情報により、再送が実行された後に下位装置から最初の要求パケットに対する応答パケットが送出されたとしても、インターフェース装置は、受け取ったパケットのフラグを見て古いパケットであるか否かを認識する。インターフェース装置が、当該パケットが古い要求に対する下位装置からの応答であると認識した場合、このパケットを無視し、新たに再送したパケットを正規のパケットと認識する。
【０００６】
また、特許文献２に記載されている技術において、上位装置に接続した下位装置の正常性を確認する為に、入出力接続装置は検査専用のパケットを生成して対象となる下位装置に送出する。入出力接続装置は、その応答が検査用パケットの応答である場合に受信パケットを解析して、当該下位装置が異常であるか否かを判定する。また、検査用のパケットと同一のタグを有するパケットに対して当該下位装置の検査が終了するまで、入出力接続装置は、ホストから当該下位装置に対するパケットを抑止する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−２４９６４６号公報
【特許文献２】特開２０１１−１９２２１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１の技術は、ＰＣＩｅの仕様として明確には規定されていないパケットを構成するヘッダーの予備の情報記載領域に、再送した旨の情報（前述のフラグ）を記述し、この情報を基にパケットの識別を行う技術である。しかしながら、ヘッダーの予備の情報記載領域に記載した当該情報は、ＰＣＩｅの規格には明確には規定されていない。従って、当該情報がこれらの機器に予期しない動作を引き起こす、あるいは不正の情報であるとして動作を停止させる等の不具合を発生させる懸念がある。また、上位装置においても、ＰＣＩｅの仕様に準拠することを前提に作成された各種のソフトウェアが、予期しない情報を検出したとして異常終了するなど、意図しない動作を引き起こす懸念がある。したがって、安定稼働が必要なメインフレームに特許文献１の技術を適用することはできないという問題がある。
【０００９】
特許文献２には、下位装置からの応答が遅れて、タイムアウトを判断して応答の遅れたパケットを廃棄した後に当該パケットを受け取った場合に発生する障害を回避する技術の記載がない。したがって、下位装置から応答が遅れ、その結果上位装置において下位装置からの応答等の情報入手待ちによる動作の大幅な遅延が生じる場合には、受け取った情報が不正であることから発生する各種の障害を解消することができないという問題がある。
【００１０】
本発明の目的は、上述した問題点を解決する障害処理装置、その装置を使用する情報処理装置、障害処理方法及び障害処理プログラムを提供することにある。
【００１１】
具体的に、本発明は、上位装置が要求した指令に対する下位装置からの応答が遅延する等の障害が原因で発生した誤ったデータが、上位装置および上位装置で稼働するソフトウェアによって読み出されることを防止することを主たる目的とする。
【課題を解決するための手段】
【００１２】
障害処理装置は、情報群の中から当該情報を一意に区別する為に付与する識別子の一覧と前記識別子に関連づけられた第一の記憶領域とを備え、前記第一の記憶領域は、前記識別子を付与した前記当該情報を特徴付ける情報を前記当該情報自体から抽出した第二の情報と、当該識別子が使用中であるか否かを示す情報とを記憶する識別子記憶手段と、前記識別子記憶手段の前記識別子の一覧に記載された各々の識別子と関連づけられた第二の記憶領域を備え、前記第二の記憶領域は、当該前記識別子を付与した時刻を起点として測定した経過時間と、前記経過時間が予め定められた閾値に達したか否かを示す情報と、を記憶する経過時間記憶手段と、前記識別子が未使用の場合には前記当該識別子を他の情報の識別子として割り当てることを許可し、前記識別子が使用中であり且つ当該前記識別子に関連づけられた前記経過時間が前記閾値に達した場合には当該識別子を他の情報の識別子として割り当てることを許可しない制御手段と、を備える。
【００１３】
障害処理方法は、情報群の中から当該情報を一意に区別する為に付与する識別子の一覧と前記識別子に関連づけられた第一の記憶領域とを備え、前記第一の記憶領域に前記識別子を付与した前記当該情報を特徴付ける情報を前記当該情報自体から抽出した第二の情報と、当該識別子が使用中であるか否かを示す情報とを記憶し、前記識別子記憶手段の前記識別子の一覧に記載された各々の識別子と関連づけられた第二の記憶領域を備え、前記第二の記憶領域に当該前記識別子を付与した時刻を起点として測定した経過時間と、前記経過時間が予め定められた閾値に達したか否かを示す情報と、を記憶し、前記識別子が未使用の場合には前記当該識別子を他の情報の識別子として割り当てることを許可し、前記識別子が使用中であり且つ当該前記識別子に関連づけられた前記経過時間が前記閾値に達した場合には当該識別子を他の情報の識別子として割り当てることを許可しない。
【００１４】
障害処理プログラムは、情報群の中から当該情報を一意に区別する為に付与する識別子の一覧と前記識別子に関連づけられた第一の記憶領域とを備え、前記第一の記憶領域に前記識別子を付与した前記当該情報を特徴付ける情報を前記当該情報自体から抽出した第二の情報と、当該識別子が使用中であるか否かを示す情報とを記憶し、前記識別子記憶手段の前記識別子の一覧に記載された各々の識別子と関連づけられた第二の記憶領域を備え、前記第二の記憶領域に当該前記識別子を付与した時刻を起点として測定した経過時間と、前記経過時間が予め定められた閾値に達したか否かを示す情報と、を記憶し、前記識別子が未使用の場合には前記当該識別子を他の情報の識別子として割り当てることを許可し、前記識別子が使用中であり且つ当該前記識別子に関連づけられた前記経過時間が前記閾値に達した場合には当該識別子を他の情報の識別子として割り当てることを許可する処理をコンピュータに実行させる。
【発明の効果】
【００１５】
本発明は、上位装置が要求した指令に対する下位装置からの応答が遅延する等の障害が原因で発生した誤ったデータが、上位装置および上位装置で稼働するソフトウェアによって読み出されることを防止できる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の第１の実施の形態における障害処理装置を示すブロック図である。
【図２】本発明の実施の第２の実施の形態における障害処理装置を示すブロック図である。
【図３】識別子（タグエントリー）記憶部２０を示す図である。
【図４】経過時間（タイマーエントリー）記憶部３０を示す図である。
【図５】リード処理を示すフロー図である。
【図６】応答処理のフロー図である。
【図７】タイムアウト処理のフロー図である。
【図８】メモリリードの動作を説明する図である。
【図９】応答タイムアウトを検出した時の動作を説明する図である。
【図１０】応答タイムアウトにより障害が発生した時の動作を説明する図である。
【図１１】識別子（タグエントリー）記憶部２０を示す図である。
【図１２】応答処理フロー図である。
【図１３】タイムアウトｏ処理フロー図である。
【図１４】タグエントリー解放処理フロー図である。
【図１５】メモリリードが応答タイムアウトした後に後続のメモリリードを行った場合の動作を説明する図である。
【図１６】６４ビットアドレス形式のメモリアクセスリクエストで使用されるＴＬＰヘッダーの図である。
【図１７】３２ビットアドレス形式のメモリアクセスリクエストで使用されるＴＬＰヘッダーの図である。
【図１８】応答アクセスリクエストで使用されるＴＬＰヘッダーの図である。
【図１９】メモリリードリクエストや構成アクセスリクエストに対する応答のＴＬＰヘッダーの図である。
【図２０】本発明の実施の第３の実施の形態における障害処理システムを示すブロック図である。
【図２１】本発明の障害処理装置１０１の機能ブロック図である。
【図２２】識別子（タグエントリー）記憶部２２を示す図である。
【図２３】経過時間（タイマーエントリー）記憶部３２を示す図である。
【発明を実施するための形態】
【００１７】
[第１の実施の形態]
本発明の第１の実施の形態について、図面を参照して詳細に説明する。
【００１８】
図１は本発明の第１の実施の形態の障害処理装置１８０を示すブロック図である。
【００１９】
障害処理装置１８０は、制御部６と、識別子記憶部２１と、経過時間記憶部３１とを備えている。識別子記憶部２１と、経過時間記憶部３１は、制御部６に接続されている。制御部６は上位装置２から指令情報を受け取り、それを下位装置３へ出力する。制御部６は下位装置３からの応答情報を受け取り、上位装置２へ出力する。本発明は図１の構成に限定されるものではない。
【００２０】
識別子記憶部２１は識別子が付された記憶領域を含む。識別子記憶部２１の上位装置２が送出した指令（指令情報）に関連付けした識別子の記憶領域は、当該指令情報から抽出した下位装置３を特徴付ける情報と、当該指令情報に関連する識別子が使用中であるか否かを示す識別子使用フラグとを記憶する。
【００２１】
経過時間記憶部３１は識別子記憶部２１に配置された各々の識別子と関連づけられて、経過時間を記憶するカウンターを含む。すなわち、識別子ごとにカウンターが設定されている。経過時間記憶部３１のカウンターは、当該識別子が付与された指令情報が制御部１から下位装置３に送出された時を起点としてカウントされる経過時間を、識別子ごとに記憶する。
【００２２】
制御部６は、上位装置２から下位装置３に向けた指令情報を受け取ると、識別子記憶部２１から、使用フラグがＯＦＦ、すなわち未使用である識別子を選択する。制御部６は、当該指令情報の一部を、識別子記憶部２１の、選択した識別子の記憶領域に書き込む。さらに制御部６は、下位装置３に、選択した識別子が付与された指令情報を出力すると同時に、選択した識別子に関連付けられた経過時間記憶部３１のカウンターを、一定時間経過するごとに経過した時間が加算された数値に更新する。
【００２３】
経過時間記憶部３１の当該識別子のカウンターが予め定めた閾値と一致した場合に、制御部６が当該識別子のカウンターがタイムアウトしたと判断する。
【００２４】
経過時間記憶部３１の当該識別子のカウンターがタイムアウトしていない期間に制御部６が下位装置３から、指令情報に対する応答情報を受け取ると、当該応答情報に付与されている識別子が識別子記憶部２１の記憶領域に存在するか否かを検索する。その検索の結果、識別子記憶部２１に記憶されている当該識別子使用フラグが有効である場合、制御部６は受け取った応答情報（以降、単に「応答」ともいう）を上位装置２に送信し、識別子記憶装置２１の当該識別子の記憶領域をリセットする。この操作で、制御部６は、当該識別子を新たに発生した上位装置２からの次の処理の識別のために割り当てることが可能となる。
【００２５】
次に、経過時間記憶部３１の当該識別子に関連づけられた当該経過時間の数値がタイムアウトの閾値を超えた場合を説明する。
【００２６】
制御部６は、当該識別子に関連づけられた当該経過時間の値が別に定める閾値に達すると、当該識別子の指令に対する応答待ちが規定の時間を経過したと認識する。この場合、制御部６は、識別子記憶部２１の当該識別子の記憶領域に配置されたタイムアウトフラグをＯＮに設定して、タイムアウトであることを記録する。さらに制御部６は、当該識別子に関連する指令情報に対する応答がなくタイムアウトしたことを上位装置２に通知する。この処理により、当該識別子は、当該指令情報に対する処理が完了するまで保持され、他の指令に割り当てされない。上位装置２は当該識別子の処理が当該タイムアウトの通知を受け取り、タイムアウトしたことを認識する。
【００２７】
さらに、当該識別子のカウンターがタイムアウトした後に、制御部６が下位装置３から当該識別子に対応する応答を受け取った場合に、制御部６が受け取った当該応答の情報を廃棄する。制御部６が、識別子記憶部２１経過時間記憶部３１の当該識別子に対応する記憶領域を消去して、記憶内容のリセットを行う。この処理により、上位装置２からの新な指令に対して、前述のタイムアウトした識別子が割り当てられることを防止する。
【００２８】
以上説明した様に、本発明の第１の実施の形態によれば、タイムアウトした識別子が別の指令に割り当てられて、先に割り当てた時点の指令の応答が、後に割り当てた同じ識別子の情報であると誤認識されることを防止することが出来る。なぜなら、制御部６は、タイムアウトした識別子に対して、当該識別子の再割り当てを禁止し、前に割り当てられた識別子の応答が完結した後に当該識別子の再割り当てを許可するからである。
【００２９】
[第２の実施の形態]
第２の実施の形態について説明する。第２の実施の形態では、本発明の障害処理装置をＰＣＩｅに適用した場合を説明する。
【００３０】
ＰＣＩｅではパケットベースのプロトコルが採用されている。また互いに関連・依存する複数の処理をまとめ、一体不可分の処理単位として扱うことをトランザクション処理と呼び、そのような処理単位をトランザクションと呼ぶ。ＰＣＩｅにおけるプロトコル階層においてもトランザクション層があり、その層は、トランザクション層パケットの構築と処理を行っている。トランザクション層のパケットはＴｒａｎｓａｃｔｉｏｎ＿Ｌａｙｅｒ＿Ｐａｃｋｅｔ（以下ＴＬＰ）と呼ばれ、そのＴＬＰのヘッダーに、接続した周辺機器に対する要求の情報が格納されている。
【００３１】
図２、図２２及び図２３を参照して本発明の第２の実施の形態について説明する。図２は本発明の第２の実施の形態における障害処理装置１５０を示すブロック図である。
【００３２】
障害処理装置１５０は、制御部１と、識別子記憶部２２（以後タグエントリー記憶部２２と呼ぶ）と、経過時間記憶部３２（以後タイマーエントリー記憶部３２と呼ぶ）とを備えている。
【００３３】
タグエントリー記憶部２２と、タイマーエントリー記憶部３２は制御部１に接続されている。制御部１はリクエストバッファー４と応答バッファー５を含む。制御部１は上位装置２から指令情報を受け取り、下位装置３へ出力する。制御部１は下位装置３からの応答情報を受け取り上位装置２へ出力する。本発明は図２の構成に限定されるものではない。
【００３４】
なお、本例では上位装置２はプロセッサあるいはプロセッサを搭載したカードである。下位装置３はＰＣＩｅスイッチ等に代表される周辺機器との接続を行うインターフェース装置である。
【００３５】
図２２に示すタグエントリー記憶部２２は、上位装置２から下位装置３に送出する指令情報の識別子であるタグエントリー番号（０、１、２、３、・・・、ｎ；ｎは整数）と、その番号が付与された記憶領域２２−０から記憶領域２２−ｎを含む記憶装置である。各々の記憶領域２２−０から記憶領域２２−ｎは、上位装置２が下位装置３に送出する当該指令情報から抽出した下位装置３を特徴付ける情報、を記憶するデータ領域２２−ｎ−ｍと、当該タグエントリー番号が使用中であるか否かを示す有効フラグ２２−ｎ−１と、当該タグエントリー番号が付与された応答待ちでタイムアウトが発生したことを示すタイムアウトフラグ２２−ｎ−４を含む。
【００３６】
図２３に示すタイマーエントリー記憶部３２はタグエントリー記憶部２２と関連づけられた当該タグエントリー番号と、当該タグエントリー番号が付与されたタイマー領域３２−０からタイマー領域３２−ｎを含む記憶装置である。タイマー領域３２−０からタイマー領域３２−ｎは、制御部１が下位装置３に指令を送出した時刻を起点として計る経過時間を記憶するタイマーカウント（タイマーカウント値と呼ぶ）３２−ｎ−２と当該タイマーカウント３２−ｎ−２が有効か否かを示す有効フラグ３２−ｎ−１とを含む。
【００３７】
図２に示すリクエストバッファー４は、下位装置３から上位装置２に対するリクエストＴＬＰを一時記憶する。図２に示す応答バッファー５は、下位装置３から上位装置２に対する応答ＴＬＰを一時記憶する。前述のリクエストバッファー４および応答バッファー５に一時記憶された各々の情報は、その後制御部１により順次読み出される。
【００３８】
制御部１は上位装置２から下位装置３に向けた指令情報を受け取ると、タグエントリー記憶部２２の記憶領域を検索し、有効フラグ２２−ｎ−１が未使用であるタグエントリー番号を選択する。制御部１は、当該指令情報の一部を当該タグエントリー番号が付与された記憶領域に書き込む。制御部１は、タグエントリー番号を付与した指令情報を下位装置３に出力する。更に、制御部１は、前述のタグエントリー番号と関連付けられた当該タイマーエントリー記憶部３２にある当該タイマー領域３２−ｎの記憶内容を、一定時間経過するごとに経過した時間を加算した数値に更新する。
【００３９】
制御部１は、当該タグエントリー番号に関連づけられたタイマー領域の当該経過時間を記憶するタイマーカウンターの数値が、予め定めた閾値を超えていない期間中に、制御部１が下位装置３から応答情報を受け取ると、当該応答情報に付与されているタグエントリー番号と同じ番号がタグエントリー記憶部２２の記憶領域に存在するか否かを検索する。
【００４０】
制御部１が検索した結果、タグエントリー記憶部２２に記憶されている当該タグエントリー番号の記憶領域にある有効フラグ２２−ｎ−１が有効である場合は、制御部１が受け取った応答情報を上位装置２に送信する。
【００４１】
さらに、制御部１が、タグエントリー記憶部２２の当該タグエントリー番号の記憶領域の情報をリセットする。この操作で、制御部１が当該タグエントリー番号は新たに発生した上位装置２からの次の指令の識別に当該タグエントリー番号を割り当てすることを可能にする。
【００４２】
次に、タイマーエントリー記憶部３２の当該タグエントリー番号に関連づけられたタイマー領域のタイマーカウントの値がタイムアウトの閾値を超えた場合を説明する。
【００４３】
制御部１は、当該タグエントリー番号に関連づけられたタイマー領域のタイマーカウントの値が別に定める閾値に達すると、当該タグエントリー番号の指令に対する応答待ちが規定の時間を経過したと認識する。制御部１が、タグエントリー記憶部２２の当該タグエントリー番号の記憶領域に配置されたタイムアウトフラグをＯＮに設定して、タイムアウトであることを表示する。制御部１が上位装置２に当該タグエントリー番号の指令に対する応答がタイムアウトしたことを通知する。この処理により、当該タグエントリー番号は、当該指令に対する処理が完了するまで保持され、他の指令に割り当てされない。上位装置２は当該タグエントリー番号の処理が、当該タイムアウトの通知を受け取り、タイムアウトしたことを認識する。
【００４４】
さらに、当該タグエントリー番号に関連づけられたタイマー領域のタイマーカウントがタイムアウトした後に、制御部１が、下位装置３から当該タグエントリー番号に対応する応答を受け取った場合は、制御部１が、下位装置３から受け取った当該応答の情報を廃棄する。制御部１が、タグエントリー記憶部２２及びタイマーエントリー記憶部３２の当該タグエントリー番号に対応する記憶領域およびタイマー領域の記憶を消去する。この処理により、制御部１が上位装置２からの新な指令に対して、前述のタイムアウトしたタグエントリー番号を割り当てられることを防止できる。なお、本例ではリクエストバッファー４と応答バッファー５が制御部１の内部に配置した例を説明したが、制御部１の外部に配置した構成にしてもよい。
【００４５】
以上説明した様に、本発明の第２の実施形態によれば、パケットの応答が何等かの理由で遅れたことで、当該トランザクション処理がタイムアウトにより完結しない場合に、タグエントリー番号に関連づけられた記憶領域の記憶内容を廃棄し、廃棄前の記憶領域に記憶した応答情報を上位装置が誤って受け取ることによる誤動作を防止することが出来る。なぜなら、タイムアウトしたタグエントリー番号に対して、当該タグエントリー番号の再割り当てを禁止し、前に割り当てられたタグエントリー番号が付与された指令の応答が完結した後に当該タグエントリー番号の再割り当てを許可するからである。
【００４６】
[第３の実施の形態]
本発明の第３の実施の形態について図を参照して説明する。図２０は情報処理装置１０００の本発明の障害処理装置を適用した情報処理装置のブロック図である。
【００４７】
情報処理装置１０００は、中央処理装置３００、デバイス（ＤＥＶ）１３０、ＰＣＩｅスイッチ１２０、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３、および外部記憶装置２０００、外部記憶装置３０００を含む。
【００４８】
中央処理装置３００は、演算処理を行うプロセッサ１００、障害処理装置１０１、障害処理装置１０２及びデータを格納するメモリ（ＭＥＭ）１１０を含む。
【００４９】
プログラム２００はプロセッサ１００の上に展開され、プロセッサ１００を制御して各種処理を行う。（プログラム２００は図示していない。）
図２１は障害処理装置１０１の機能ブロック図である。障害処理装置（以後ＰＣＩｅコントローラと呼ぶ）１０１は、制御部１と、識別子記憶部２０（以後、タグエントリー記憶部２０と呼ぶ）と、経過時間記憶部３０（以後、タイマーエントリー記憶部３０と呼ぶ）とを備えている。
【００５０】
タグエントリー記憶部２０と、タイマーエントリー記憶部３０は、制御部１に接続されている。制御部１はリクエストバッファー４と応答バッファー５を含む。制御部１はプロセッサ１００から指令情報を受け取り、ＰＣＩｅスイッチ１２０へ出力する。
【００５１】
図３を用いてタグエントリー記憶部２０を説明する。タグエントリー記憶部２０は、上位装置であるプロセッサ１００から下位装置３であるＰＣＩｅスイッチ１２０に送出する指令情報の識別子であるタグエントリー番号と、その番号が付与された複数の記憶領域２０−０から記憶領域２０−ｎを含む記憶装置である。前述の記憶領域は、当該記憶領域２０−ｎが使用され有効であることを示す有効フラグ２０−ｎ−１と、プロセッサ１００から指示された要求情報を格納するリクエスト情報部２０−ｎ−２と、プロセッサ１００からの指示に従って作成しＰＣＩｅスイッチ１２０に送信したＴＬＰのＨｅａｄｅｒを格納するＴＬＰヘッダー部２０−ｎ−３を含む。
【００５２】
図４を用いてタイマーエントリー記憶部３０を説明する。
タイマーエントリー記憶部３０は、制御部１がＰＣＩｅスイッチ１２０へのリクエストに対する応答のタイムアウト監視を行うための情報を記憶する記憶装置である。タイマーエントリー記憶部３０は、前述のタグエントリー番号と、そのタグエントリー番号に関連づけられたタイマー領域３０−０からタイマー領域３０−ｎを含む。タイマーエントリー記憶部３０は、タイマー領域３０−ｎのタイマーが有効化どうかを示す有効フラグ３０−ｎ−１と、タイマーカウント（タイマーカウント値と呼ぶ）３０−ｎ−２を含む。
【００５３】
制御部１はＰＣＩｅスイッチ１２０からの応答情報を受け取りプロセッサ１００へ出力する。
【００５４】
ＰＣＩｅスイッチ１２０は、障害処理装置１０１を経由したプロセッサ１００と、ネットワーク（図示していない）、ＰＣＩｅカード１４０からＰＣＩｅカード１４３の各々に接続された外部記憶装置２０００及び外部記憶装置３０００との接続の切り替えを行う。
【００５５】
ＰＣＩｅコントローラ１０１は、プロセッサ１００とＰＣＩｅスイッチとの中間に位置し、プロセッサ１００とＰＣＩｅカード１４０からＰＣＩｅカード１４３とのパケット通信で発生する障害の処理を行う。
【００５６】
障害処理装置（ＰＣＩｅコントローラと呼ぶ）１０２は、ＰＣＩｅスイッチ１２０を経由しない特定の処理を行うデバイス１３０とプロセッサ１００とを接続するとともに、当該装置間のパケット通信で生じる障害の処理を行う。
【００５７】
図２０において、外部記憶装置２０００及び外部記憶装置３０００はＰＣＩｅカードと各々に接続した磁気ディスク装置などであり、データを記憶し、プロセッサ１００からの指令に基づきデータの書き込み、読出しを行う。
【００５８】
ＰＣＩｅカード１４０からＰＣＩｅカード１４３は、パケットベースのシリアルインターフェースの信号を、接続する先の周辺装置等各々のインターフェース信号及びコネクタ形状に変換する。
【００５９】
ＰＣＩｅコントローラ１０２とデバイス１３０はＰＣＩｅ＿Ｉ／Ｆ１３１で接続する。ＰＣＩｅコントローラ１０１とＰＣＩｅスイッチ１２０はＰＣＩｅ＿Ｉ／Ｆ１２１で接続する。ＰＣＩｅスイッチ１２０とデバイス１３０はＰＣＩｅ＿Ｉ／Ｆ１２２で接続する。ＰＣＩｅスイッチ１２０とＰＣＩｅカード１４０はＰＣＩｅ＿Ｉ／Ｆ１２３で接続する。ＰＣＩｅスイッチ１２０とＰＣＩｅカード１４１はＰＣＩｅ＿Ｉ／Ｆ１２４で接続する。ＰＣＩｅスイッチ１２０とＰＣＩｅカード１４２はＰＣＩｅ＿Ｉ／Ｆ１２５で接続する。ＰＣＩｅスイッチ１２０とＰＣＩｅカード１４３はＰＣＩｅ＿Ｉ／Ｆ１２６で接続する。ＰＣＩｅカード１４０と外部記憶装置２０００はインターフェース２００１で接続する。ＰＣＩｅカード１４１と外部記憶装置２０００はインターフェース２００２で接続する。ＰＣＩｅカード１４２と外部記憶装置３０００はインターフェース３００１で接続する。ＰＣＩｅカード１４３と外部記憶装置２０００はインターフェース３００２で接続する。
【００６０】
入出力デバイスとのデータ交換の方法について説明する。
【００６１】
上位装置２から外部記憶装置２０００又は外部記憶装置３０００に指令を出力する場合、ＰＣＩｅカード１４０からＰＣＩｅカード１４３のいずれかを経由して指令が伝達される。
【００６２】
プロセッサ１００からＰＣＩｅカード１４０からＰＣＩｅカード１４３に対する指令はプロセッサ１００が入出力デバイスにアクセスする為の命令をＭＥＭ１１０にアクセスする為の命令と同じアドレス空間で扱うことで入出力デバイに対する操作を実現する。この方法は、Ｍｅｍｏｒｙ＿Ｍａｐｐｅｄ＿Ｉｎｐｕｔ＿Ｏｕｔｐｕｔ（以後ＭＭＩＯと呼ぶ）と呼ばれる。以後、本発明の動作説明では、このＭＭＩＯを前提として説明する。
【００６３】
ここで、ＰＣＩｅのＴＬＰヘッダーの内容を図１６、図１７、図１８及び図１９に示す。
【００６４】
ある装置から他の装置に対して行う指令をリクエストとする。またその指令に対する他の装置からの出力を応答とする。ＴＬＰの内容は、要求内容やリクエストか応答かに応じて形式がそれぞれ異なっている。ＴＬＰヘッダーの詳細やＴＬＰを受信したときの動作はＰＣＩｅスペックに記載されているので、本発明に関係があることについてのみ説明する。
【００６５】
図１６、１７は主にメモリアクセスリクエストで使用されるＴＬＰヘッダーで、図１６が６４ｂｉｔアドレス形式で図１７が３２ｂｉｔアドレス形式となっている。図１６、１７及び１８に記載のＦｍｔ（フォーマット）とＴｙｐｅ（タイプ）が要求内容を示し、アドレスが要求先を示している。図１８は構成アクセスリクエストで使用されるＴＬＰヘッダーで、要求先がＢｕｓ＿Ｎｕｍｂｅｒ（バス番号）とＤｅｖｉｃｅ＿Ｎｕｍｂｅｒ（デバイス番号）、Ｆｕｎｃｔｉｏｎ＿Ｎｕｍｂｅｒ（機能番号）、Ｒｅｇｉｓｔｅｒ＿Ｎｕｍｂｅｒ（レジスタ番号）によって指定されている。
【００６６】
図１７のリクエスターＩＤ（ＩＤｅｎｔｉｆｉｅｒ）４１、図１８のリクエスターＩＤ５１及び図１９のリクエスターＩＤ６１は要求元を示す識別子を示す。図１７のタグ４２、図１８のタグ５２及び図１９のタグ６２はパケットに付与されたタグエントリー番号を示す。このリクエスターＩＤとタグの情報がそれぞれ抽出されて、図１７、図１８、図１９に示すトランザクションＩＤ７０を形成し、応答がリクエストに対応するものかどうかを制御部１が判断する際に使用される。
【００６７】
なお、本例のトランザクションＩＤ７０は、前述のリクエスターＩＤとタグとを組み合わせた情報である。制御部１が、各種のリクエストのＴＬＰや応答のＴＬＰに含まれるリクエスターＩＤや関連するタグを索引して認識する。しかし、制御部１が、トランザクションＩＤ７０用に専用に記憶領域を準備して、その領域に前述のリクエストのＴＬＰや応答のＴＬＰから必要な情報を抽出して書き込み、その情報を利用することでもよい。
【００６８】
図１９はメモリリードリクエストや構成アクセスリクエストに対する応答のＴＬＰヘッダーの詳細を示す図である。応答のＴＬＰヘッダーは、制御部１が応答に対応するリクエストを参照して、制御部１が識別するためのリクエスターＩＤ６１とタグ６２、応答元を示す応答ＩＤや要求の結果を示す応答ステータスを持っている。リクエスターＩＤ６１とタグ６２は、応答に対応するリクエストのＴＬＰに格納されていたリクエスターＩＤ４１、リクエスターＩＤ５１とタグ４２、タグ５２の情報をコピーして、持ちまわったものである。ＰＣＩｅコントローラ１０１が、リクエストと応答のトランザクションＩＤ７０を比較することでリクエストに対する応答が応答されたかどうかを判断する。
【００６９】
次に、情報処理装置１０００における、ＰＣＩｅのインターフェースの動作について説明する。
【００７０】
まず、図８を用いて、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３からのメモリリードの動作を説明する。
【００７１】
プロセッサ１００上で動作するソフトウェア２００が、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のレジスタなどを読み出す場合、プロセッサ１００の読出し命令をＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のレジスタを示すアドレスを指定して、読出し指令を実行する（ａ−１）。
【００７２】
プロセッサ１００は、読出し命令を実行されるとＰＣＩｅコントローラ１０１に前記アドレスを指定してメモリリードのＴＬＰコマンドの送信を指示する（ａ−２）。
ＰＣＩｅコントローラ１０１は、メモリリードを指示されるとタグ番号をタグエントリー記憶部２０から取得し（ａ−３）、リードリクエストＴＬＰを作成してＰＣＩｅ＿Ｉ／Ｆ１２１にＴＬＰコマンドを送信する（ａ−４）。この時、リクエスターＩＤにはＰＣＩｅコントローラを識別する値が格納され、リクエストに対する応答を制御部１が識別する。その為、トランザクションＩＤを含むリクエストＴＬＰが、タグエントリー記憶部２０の当該タグエントリー番号の記憶領域に記憶される。また、応答受信時に要求元のプロセッサ１００に応答を返すためプロセッサ１００の要求情報が、タグエントリー記憶部２０の当該タグエントリー番号の記憶領域に保持される。
【００７３】
次に、ＰＣＩｅ＿Ｉ／Ｆ１２１に送信されたリードリクエストＴＬＰのＴＬＰコマンドがＰＣＩｅスイッチ１２０を介して目的のＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のいずれかに送信される（ａ−５）。
【００７４】
ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３はリードリクエストＴＬＰを受信すると対応する処理を行い、応答ＴＬＰを作成して読み出したデータを付けてＰＣＩｅコントローラ１０１に応答ＴＬＰを送信する（ａ−６）。この時、トランザクションＩＤはリードリクエストＴＬＰのものが持ちまわされ、応答ＩＤにはＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のいずれであるかを識別する値が格納される。
【００７５】
ＰＣＩｅコントローラ１０１はＰＣＩｅスイッチ１２０を介してＰＣＩｅカード１４０〜ＰＣＩｅカード１４３からの応答ＴＬＰを受信すると記憶していたリクエストＴＬＰと応答ＴＬＰのトランザクションＩＤを比較する。前述の比較した結果が、一致した場合はリクエストに対する応答であると判断する。ＰＣＩｅコントローラ１０１は、付随していた応答データをプロセッサ１００に送信し（ａ−９）、リクエストで使用していたタグエントリー番号を解放する（ａ−８）。この解放処理によりタグエントリー記憶部２０の当該タグエントリー番号は他の処理に割り当てすることが出来るようになる。また、ＰＣＩｅコントローラ１０１が、リクエストＴＬＰの記憶などに使用していた記憶領域の情報を消去する。そして、プロセッサ１００はＰＣＩｅコントローラ１０１からの応答情報を受けると、読出し命令を完了してソフトウェア２００に読み出したデータを返す（ａ−１０）。
【００７６】
次に、図９を用いて、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３が何らかの理由によりリードリクエストＴＬＰに対して応答ＴＬＰを返えさない、あるいは応答が遅くなる等の場合の動作を説明する。
【００７７】
ソフトウェア２００がＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のレジスタなどを読み出すために読出し命令を実行し、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３にリードリクエストＴＬＰが送信されるまでは図８に示す動作と同じである（ｂ−１〜ｂ−５）。
【００７８】
ここで、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３が一定時間内に応答ＴＬＰを送信しないとＰＣＩｅコントローラ１０１がタイムアウトを検出する（ｂ−１０）。ＰＣＩｅコントローラ１０１が記憶していたプロセッサ１００からの要求情報に基づいて、プロセッサ１００にエラーデータを送信し（ｂ−８）、確保していたタグエントリー番号及びタグエントリー番号に関連づけられた記憶領域、タイマー領域を解放する（ｂ−１１）。この解放処理によりタグエントリー記憶部２０の当該タグエントリー番号は他の処理に割り当てすることが出来るようになる。また、同時にリクエストＴＬＰ等の記憶に使用していた当該タグエントリー番号に関連づけられた記憶領域の情報が消去される。プロセッサ１００はＰＣＩｅコントローラ１０１よりエラーデータを受信するとソフトウェア２００にそのエラーデータを通知する（ｂ−９）。
【００７９】
その後、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３が遅れて応答ＴＬＰを返した場合（ｂ−６、ｂ−７）、ＰＣＩｅコントローラ１０１がその応答ＴＬＰを受信する。ＰＣＩｅコントローラ１０１が、応答ＴＬＰに付与されたタグエントリー番号がタグエントリー記憶部２０の各々の記憶領域に存在するか検索する。しかし、応答ＴＬＰに付与されたタグエントリー番号に対応するトランザクションＩＤを持つタグエントリー番号が存在しないため、無効なＴＬＰと判断し、予期しない応答として、制御部１が受け取った応答ＴＬＰを廃棄する等の処理を行う（ｂ−１２）。
【００８０】
以上が、応答が正常に出力され、定常的にデータの授受が行われた場合の動作である。
【００８１】
次に、図５のフローチャートを用いて、プロセッサ１００からリードの指令を実行した場合の動作を説明する。
【００８２】
制御部１はプロセッサ１００からメモリリードを指示されるとリード処理（ステップ３００）を実行する。
【００８３】
リード処理（ステップ３００）では、制御部１が、タグエントリー記憶部２０より記憶領域２０−ｎの各々を読み出す（ステップ３０１）。制御部１が、各々のタグエントリー２０−ｎの有効フラグ２０−ｎ−１を参照して未使用の記憶領域２０−ｎがあるか否かを判断する（ステップ３０２）。制御部１が、有効フラグ２０−ｎ−１を設定して記憶領域２０−ｎを確保する（ステップ３０３）。
【００８４】
そして、制御部１が、プロセッサ１００からのメモリリードの要求情報に従ってリードリクエストＴＬＰを作成する（ステップ３０４）。この時、制御部１が、トランザクションＩＤのタグ番号に記憶領域２０−ｎの番号ｎを格納する。
【００８５】
その後、プロセッサ１００からのメモリリードの要求情報を、制御部１が記憶領域２０−ｎのリクエスト情報部２０−ｎ−２に格納する。制御部１が、作成したリードリクエストＴＬＰのＴＬＰヘッダーを記憶領域２０−ｎのＴＬＰヘッダー部２０−ｎ−３に格納する（ステップ３０５）。
【００８６】
また、制御部１が、記憶領域２０−ｎに対応するタイマー領域３０−ｎの有効フラグ３０−ｎ−１とタイマーカウント値３０−ｎ−２を設定する。制御部１が、タイマーを起動する（ステップ３０６）。制御部１が、最後に作成したリードリクエストのＴＬＰコマンドをＰＣＩｅスイッチ１２０に送信して処理を終える（ステップ３０７、ステップ３０８）。
【００８７】
これにより、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３がリードリクエストＴＬＰを受信すると、読み出されたデータを付けて応答ＴＬＰをＰＣＩｅコントローラ１０１に対して送信する。
【００８８】
次に、図６のフローチャートを用いて応答処理の動作を説明する。ＰＣＩｅコントローラ１０１の制御部１が応答ＴＬＰを受信すると応答の処理を実行する。
【００８９】
応答処理（ステップ４００）では、制御部１が、応答バッファー５から受信した応答ＴＬＰを読み出し（ステップ４０１）、制御部１が、タグエントリー２０−ｎの各々を読み出す（ステップ４０１）。制御部１が、応答ＴＬＰと同じトランザクションＩＤを持つ有効な記憶領域２０−ｎがあるか否かを判断（ステップ４０３）。
【００９０】
ここで同じトランザクションＩＤを持つ記憶領域２０−ｎが無い場合は、制御部１が、応答ＴＬＰを予期しない応答として処理し（ステップ４０８）、処理を終える（ステップ４０９）。
【００９１】
応答ＴＬＰと同じトランザクションＩＤを持つ記憶領域２０−ｎ（タグエントリーの記憶領域）がある場合（ステップ４０３：ＹＥＳ）、その記憶領域２０−ｎに格納されたリクエストに対する応答に対する処理になる。この場合、制御部１が、記憶領域２０−ｎに対応するタイマー領域３０−ｎの有効フラグ３０−ｎ−１をクリアしてタイマーを停止し（ステップ４０４）、記憶領域２０−ｎのリクエスト情報部２０−ｎ−２に従って応答ＴＬＰのデータをプロセッサ１００に送信する（ステップ４０５）。
【００９２】
そして、制御部１が、記憶領域２０−ｎの有効フラグ２０−ｎ−１をクリアして記憶領域２０−ｎを解放して（ステップ４０６）、処理を終える（ステップ４０７）。
【００９３】
次に、図７のフローチャートを用いて、ＰＣＩｅカードからの応答が遅延したことによって応答タイムアウトになった場合の動作を説明する。
【００９４】
応答タイムアウトは、制御部１が、有効なタイマー領域３０−ｎのタイマーカウント値３０−ｎ−２の数値を減算してその数値が０になった時に、発生させる。
【００９５】
タイムアウト処理（５００）では、制御部１が、該当するタイマー領域３０−ｎの有効フラグ３０−ｎ−１をクリアしてタイマーの停止と解放を行い（ステップ５０１）、タイマー領域３０−ｎに対応する記憶領域２０−ｎのリクエスト情報部２０−ｎ−２に従ってエラーデータをプロセッサ１００に送信する（ステップ５０２）。その後、制御部１が、記憶領域２０−ｎの有効フラグ２０−ｎ−１をクリアすることで当該２０−ｎのタグエントリー番号を解放し（ステップ５０３）、処理を終える（ステップ５０４）。
【００９６】
次に、図１０を用いて、本発明の障害処理装置の動作を行わない場合に、情報処理装置１０００に障害が発生する状況を説明する。図１０は、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３に対して複数のメモリリードが行われている状態で任意のメモリリードが応答タイムアウトになった場合の動作を示す。
【００９７】
ソフトウェア２００が、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のメモリリードを行う為に、プロセッサ１００に読出し指令を実行する（ｃ−１）。プロセッサ１００がＰＣＩｅコントローラにコマンドを送信する（ｃ−２）。ＰＣＩｅコントローラ１０１がリードリクエストのＴＬＰコマンドをＰＣＩｅスイッチ１２０に送信する（ｃ−３）。ＰＣＩｅスイッチ１２０がＴＬＰコマンドをＰＣＩｅカード１４０〜ＰＣＩｅカード１４３にＴＬＰコマンドを送信してＰＣＩｅカード１４０〜ＰＣＩｅカード１４３がそれを受信する（ｃ−４）。しかし、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３が何らかの理由により応答の送信が遅れると、ＰＣＩｅコントローラ１０１は応答タイムアウトを検出して（ｃ−１７）タグエントリー番号を解放し（ｃ−１８）、プロセッサ１００にエラーデータ（ｃ−５）を返す。ソフトウェア２００は、エラーデータを受け取り、読み出しが失敗したことが分かる（ｃ−６）。
【００９８】
しかし、この後、ソフトウェア２００がＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のメモリリードを行うことがある。この場合に、ＰＣＩｅコントローラ１０１が応答タイムアウトになったリクエストと同じタグエントリー番号を取得してしまう。そして、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３にリードリクエストＴＬＰを発行した後（ｃ−７からｃ−１０）に、前回のリードリクエストＴＬＰに対する応答ＴＬＰが遅れてＰＣＩｅコントローラ１０１に到着する現象（ｃ−１１、ｃ−１２）が発生する。この結果、後続のリードリクエストＴＬＰにおけるトランザクションＩＤと応答タイムアウトになった応答ＴＬＰのトランザクションＩＤが一致してしまう。従って、この場合には、ＰＣＩｅコントローラ１０１は先行のリードリクエストＴＬＰに対する応答ＴＬＰを後続のリードリクエストＴＬＰに対する応答ＴＬＰとして誤って処理してしまう。そして、制御部１がプロセッサ１００に間違った応答データを出力して（ｃ−１３）、ソフトウェア２００に間違った読み出しデータを渡してしまう（ｃ−１４）。これは、制御部１が、ソフトウェア２００に間違ったデータを渡すことになり、ソフトウェアが誤動作する原因となる。
【００９９】
次に、図１５及び図１１を用いて、本発明の障害処理装置を動作させて、ソフトウエア２００が誤動作することを回避する動作について説明する。本例は、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のメモリリードが応答タイムアウトした後に後続のメモリリードを行った場合で説明する。
【０１００】
まず、図２１のＰＣＩｅコントローラ１０１の制御部１において、記憶領域２０−ｎに応答タイムアウトが発生したことを示すタイムアウトフラグ２０−ｎ−４（図１１参照）を設ける。
【０１０１】
最初にソフトウェア２００がＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のメモリリードを行ってＰＣＩｅカード１４０〜ＰＣＩｅカード１４３の応答が遅れることによって応答タイムアウトが発生する状況である。この状況は、図１５において、状態（ｄ−１〜ｄ−４、ｄ−２０）である。この状態は、図１０の状態（ｃ−１〜ｃ−４、ｃ−１７、）による説明と同じである。
【０１０２】
ここで、ＰＣＩｅコントローラ１０１が応答タイムアウトを検出したとき、制御部１はタイムアウト処理（ステップ７００）を実行する。
【０１０３】
図１３のタイムアウト処理のフローチャートを参照すると、タイムアウト処理（７００）では、制御部１が、タイマー領域３０−ｎのタイマーを停止する。制御部１が、有効フラグ３０−ｎ−１をクリアしてタイマー領域３０−ｎを解放する（ステップ７０１）。制御部１が、タイマー領域３０−ｎに対応する記憶領域２０−ｎのリクエスト情報部２０−ｎ−２の要求情報に従い、エラーデータをプロセッサ１００に送信する（ステップ７０２）、状態（ｄ−５）。そして、制御部１が、記憶領域２０−ｎのタイムアウトフラグ２０−ｎ-４を設定して処理を終える（ステップ７０３、ステップ７０４）、状態（ｄ−２０）。これにより、応答タイムアウトになったリクエストＴＬＰで使用されていたタグエントリー番号は保持されたままとなり、応答タイムアウトでは、タグエントリー番号は解放されない。
【０１０４】
次に、ソフトウェア２００が後続のメモリリードを行ってＰＣＩｅコントローラ１０１がその指示を受けたとき、制御部１は図５のリード処理（３００）を実行する。これは図１５における状態（ｄ−７、ｄ−８）の動作である。
【０１０５】
このとき、応答タイムアウトになったリクエストＴＬＰで使用された記憶領域２０−ｎは確保されたままなので、制御部１は、保留したタグエントリー番号以外の記憶領域２０−ｎが選択される。これは、状態（ｄ−２１）である。これにより、後続のメモリリードのリードリクエストＴＬＰにおけるトランザクションＩＤは先行の応答タイムアウトになったリードリクエストＴＬＰとは異なったものになる。これは、状態（ｄ−９、ｄ−１０）である。
【０１０６】
ここで、先行のリードリクエストＴＬＰに対する応答ＴＬＰをＰＣＩｅコントローラが受けた場合には、図１２のフローチャートに示す応答処理（６００）が実行される。制御部１が、応答バッファー５から受信した応答ＴＬＰを取り出す（ステップ６０１）。状態（ｄ−１１、ｄ−１２）。制御部１が、タグエントリー２０−ｎの各々を読み出す（６０２）。制御部１が、応答ＴＬＰと同じトランザクションＩＤを持つタグエントリー２０−ｎがあるか判断する（ステップ６０３）。
【０１０７】
このとき、対応する記憶領域２０−ｎは確保されたままなのでトランザクションＩＤは一致する（ステップ６０３：Ｙｅｓ）。制御部１が記憶領域２０−ｎのタイムアウトフラグ２０−ｎ-４が設定されていることを確認する（ステップ６０４）。制御部１が、タイムアウトフラグ２０−ｎ−４が設定されていることを認識して、応答ＴＬＰは予期しない応答であると判断（ステップ６０５：Ｙｅｓ）。そして予期しない応答に対する処理を行う（ステップ６１２）。その後、当該処理を終了する（ステップ６１３）。
【０１０８】
これにより、応答タイムアウトになったリードリクエストＴＬＰに対する応答ＴＬＰは、予期しない応答として破棄され、プログラムに間違ったデータを送信することが防止される。状態（ｄ−２２）。
【０１０９】
そして、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３から後続のリードリクエストＴＬＰに対する応答ＴＬＰが送信される。これは状態（ｄ−１３）である。ＰＣＩｅコントローラ１０１がその情報を受信すると、状態（ｄ−１４）、制御部１は図１２の応答処理（６００）を実行する。制御部１が、応答バッファー５から応答ＴＬＰを取り出し（ステップ６０１）、タグエントリー記憶部２０より同じトランザクションＩＤを持つタグエントリー２０−ｎがあるか判断する（ステップ６０３）。
【０１１０】
このとき、対応する記憶領域２０−ｎは確保されているので、制御部１が、記憶領域２０−ｎのタイムアウトフラグ２０−ｎ−４の内容を確認する（ステップ６０４）。
【０１１１】
制御部１が、タイムアウトフラグ２０−ｎ−４が設定されていないことを認識して、応答がタイムアウトになっていないと判断する（ステップ６０５：Ｎｏ）。そして、制御部１が、記憶領域２０−ｎに対応するタイマー領域３０−ｎのタイマーを停止する。制御部１が、有効フラグ３０−ｎ−１をクリアしてタイマー領域３０−ｎを解放し（ステップ６０６）、記憶領域２０−ｎのリクエスト情報部２０−ｎ−３の要求情報に従って応答ＴＬＰの応答データをプロセッサ１００に送信する（ステップ６０７）。状態（ｄ−１５）
その後、制御部１が、記憶領域２０−ｎの有効フラグ２０−ｎ−１をクリアしてタグエントリー２０−ｎを解放して処理を終える（ステップ６０８、ステップ６０９）。状態（ｄ−２３）。
【０１１２】
ＰＣＩｅコントローラ１０１から応答データを受信したプロセッサ１００は読出し命令を完了させてプログラムに受信した読出しデータを渡す。状態（ｄ−１６）。これにより、プログラム２００はＰＣＩｅカード１４０〜ＰＣＩｅカード１４３のメモリリードに対応したデータを受信することができる。
【０１１３】
その後さらに、プログラム２００はＰＣＩｅカード１４０〜ＰＣＩｅカード１４３をリセットするなどして障害処理を行い、ＰＣＩｅカード１４０〜ＰＣＩｅカード１４３から応答タイムアウトになったリードリクエストＴＬＰに対応するトランザクションＩＤが使用されないことを保証する。その後、プログラム２００は、ＰＣＩｅコントローラ１０１の特定のレジスタに書き込みを行う為に、書き込み指令を発行する。状態（ｄ−１７）プロセッサ１００は、ＰＣＩｅコントローラ１０１に対して、応答タイムアウトで保持したままとなっている記憶領域２０−ｎの解放を指示する解放コマンドを送信する。状態（ｄ−１８）。
【０１１４】
ＰＣＩｅコントローラ１０１は、前述のソフトウェア２００からの指示を制御部１にお伝達し、制御部１が、図１４のフローに示すタグエントリー解放処理（８００）を行う。
【０１１５】
タグエントリー解放処理（８００）では、記憶領域２０のタイムアウトフラグ２０−ｎ−４が設定されている全タグエントリー番号の有効フラグ２０−ｎ−１とタイムアウトフラグ１０−ｎ−４をクリアし、解放を行う（ステップ８０１）。
【０１１６】
この操作により、応答タイムアウトＯＮにさり、確保されたままとなっていたタグエントリーが、以後のパケットを生成する作業に用いるタグエントリーに使用することが可能になる。状態（ｄ−２４）。
【０１１７】
以上説明した様に、本発明の第３の実施形態によれば、ＰＣＩｅのデバイスからの応答がタイムアウトしてトランザクション処理が完結しない場合に、情報処理装置のプログラム等が、誤ったデータの影響をうけて動作が不安定になることを防止できる。なぜなら、制御部１が、ＰＣＩｅのパケット処理で、タイプアウトとなったパケットのタグエントリー番号を使用しない様に無効化して、障害が解消された時に有効化することで、同じタグエントリー番号が別の指令に対して、誤って割り当てられることを防止できるからである。
【符号の説明】
【０１１８】
１    制御部
２    上位装置
３    下位装置
４    リクエストバッファー
５    応答バッファー
６    制御部
２０    識別子記憶部
２１    識別子記憶部
２２    識別子記憶部
３０    経過時間記憶部
３１    経過時間記憶部
３２    経過時間記憶部
１００    プロセッサ
１０１    障害処理装置
１０２    障害処理装置
１２０    ＰＣＩｅスイッチ
１２１    ＰＣＩｅ＿Ｉ／Ｆ
１２２    ＰＣＩｅ＿Ｉ／Ｆ
１２３    ＰＣＩｅ＿Ｉ／Ｆ
１２４    ＰＣＩｅ＿Ｉ／Ｆ
１２５    ＰＣＩｅ＿Ｉ／Ｆ
１２６    ＰＣＩｅ＿Ｉ／Ｆ
１３０    デバイス
１３１    ＰＣＩｅ＿Ｉ／Ｆ
１４０    ＰＣＩｅカード
１４１    ＰＣＩｅカード
１４２    ＰＣＩｅカード
１４３    ＰＣＩｅカード
１５０    障害処理装置
１８０    障害処理装置
２００    プログラム
３００    中央処理装置
１０００    情報処理装置
２０００    外部記憶装置
２００１    インターフェース
２００２    インターフェース
３０００    外部記憶装置
３００１    インターフェース
３００２    インターフェース
【図１】
0006600959.tif 000002
【図２】
0006600959.tif 000003
【図３】
0006600959.tif 000004
【図４】
0006600959.tif 000005
【図５】
0006600959.tif 000006
【図６】
0006600959.tif 000007
【図７】
0006600959.tif 000008
【図８】
0006600959.tif 000009
【図９】
0006600959.tif 000010
【図１０】
0006600959.tif 000011
【図１１】
0006600959.tif 000012
【図１２】
0006600959.tif 000013
【図１３】
0006600959.tif 000014
【図１４】
0006600959.tif 000015
【図１５】
0006600959.tif 000016
【図１６】
0006600959.tif 000017
【図１７】
0006600959.tif 000018
【図１８】
0006600959.tif 000019
【図１９】
0006600959.tif 000020
【図２０】
0006600959.tif 000021
【図２１】
0006600959.tif 000022
【図２２】
0006600959.tif 000023
【図２３】
0006600959.tif 000024