(57)【要約】【課題】パケット転送時にＥＣＲＣ異常が検出された場合であっても、障害の影響を局所的な範囲に抑制できる入出力処理装置。【解決手段】処理記憶手段８１は、データ転送処理を実行するプログラムが割り当てられる転送領域を有する。アドレス記憶手段８２は、転送領域を示すアドレスにそのアドレスの誤り訂正符号を付加したアドレス検証情報を記憶する検証領域を有する。アドレス設定手段８３は、検証領域を示すアドレスを、終端間巡回冗長検査符号が付与された受信データの転送先アドレスに設定する。データ転送制御手段８４は、受信データに設定された検証領域を示すアドレスからアドレス検証情報を特定し、そのアドレス検証情報から誤り訂正符号を削除して転送領域のプログラムを特定することにより、受信データのデータ転送処理を実行する。異常検出手段８５は、受信データに付与された終端間巡回冗長検査符号の異常を検出する。【選択図】図１３
2014182675.tif 000002
【特許請求の範囲】
【請求項１】
データ転送処理を実行する転送プログラムが割り当てられる転送領域を有する処理記憶手段と、
前記転送領域を示すアドレスに当該アドレスの誤り訂正符号を付加したアドレス検証情報を記憶する検証領域を有するアドレス記憶手段と、
前記検証領域を示すアドレスを、終端間巡回冗長検査符号が付与された受信データの転送先アドレスに設定するアドレス設定手段と、
受信データに設定された検証領域を示すアドレスから前記アドレス検証情報を特定し、当該アドレス検証情報から前記誤り訂正符号を削除して前記転送領域の転送プログラムを特定することにより、受信データのデータ転送処理を実行するデータ転送制御手段と、
前記受信データに付与された終端間巡回冗長検査符号の異常を検出する異常検出手段とを備え、
前記データ転送制御手段は、前記受信データの終端間巡回冗長検査符号に異常が検出されたときに、当該受信データに設定された前記検証領域を示すアドレスから特定されるアドレス検証情報から、前記転送領域のアドレスの正当性を検証する
ことを特徴とする入出力処理装置。
【請求項２】
データ転送制御手段は、受信データの終端間巡回冗長検査符号に異常が検出されたときに、当該受信データに設定された検証領域を示すアドレスが検証領域を示す所定の範囲内であった場合に、当該検証領域を示すアドレスからアドレス検証情報を特定する
請求項１記載の入出力処理装置。
【請求項３】
データ転送制御手段は、特定したアドレス検証情報に含まれる誤り訂正符号を用いて転送領域のアドレスの正当性を検証する
請求項２記載の入出力処理装置。
【請求項４】
処理記憶手段は、転送プログラムごとに割り当てられた転送領域を有し、
データ転送制御手段は、正当性が検証された転送領域のアドレスから特定される転送プログラムに従って、受信データのデータ転送処理を再実行する
請求項１から請求項３のうちのいずれか１項に記載の入出力処理装置。
【請求項５】
受信データに終端間巡回冗長検査符号を付与する符号付与手段を備えた
請求項１から請求項４のうちのいずれか１項に記載の入出力処理装置。
【請求項６】
データ転送処理を実行する転送プログラムが割り当てられる転送領域を示す第１のアドレスに、当該第１のアドレスの誤り訂正符号を付加して生成されるアドレス検証情報を記憶する検証領域を示す第２のアドレスを、終端間巡回冗長検査符号が付与された受信データの転送先アドレスに設定し、
前記第２のアドレスから前記アドレス検証情報を特定し、当該アドレス検証情報から前記誤り訂正符号を削除して前記転送領域の転送プログラムを特定することにより、受信データのデータ転送処理を実行し、
前記受信データに付与された終端間巡回冗長検査符号の異常を検出し、
前記受信データの終端間巡回冗長検査符号に異常が検出されたときに、当該受信データに設定された前記第２のアドレスから特定されるアドレス検証情報から、前記第１のアドレスの正当性を検証する
ことを特徴とするアドレス正当性検証方法。
【請求項７】
受信データの終端間巡回冗長検査符号に異常が検出されたときに、当該受信データに設定された検証領域を示すアドレスが検証領域を示す所定の範囲内であった場合に、当該検証領域を示すアドレスからアドレス検証情報を特定する
請求項６記載のアドレス正当性検証方法。
【請求項８】
コンピュータに、
データ転送処理を実行する転送プログラムが割り当てられる転送領域を示す第１のアドレスに、当該第１のアドレスの誤り訂正符号を付加して生成されるアドレス検証情報を記憶する検証領域を示す第２のアドレスを、終端間巡回冗長検査符号が付与された受信データの転送先アドレスに設定するアドレス設定処理、
前記第２のアドレスから前記アドレス検証情報を特定し、当該アドレス検証情報から前記誤り訂正符号を削除して前記転送領域の転送プログラムを特定することにより、受信データのデータ転送処理を実行するデータ転送制御処理、および、
前記受信データに付与された終端間巡回冗長検査符号の異常を検出する異常検出処理を実行させ、
前記データ転送制御処理で、前記受信データの終端間巡回冗長検査符号に異常が検出されたときに、当該受信データに設定された前記第２のアドレスから特定されるアドレス検証情報から、前記第１のアドレスの正当性を検証させる
ためのアドレス正当性検証用プログラム。
【請求項９】
コンピュータに、
データ転送制御処理で、受信データの終端間巡回冗長検査符号に異常が検出されたときに、当該受信データに設定された検証領域を示すアドレスが検証領域を示す所定の範囲内であった場合に、当該検証領域を示すアドレスからアドレス検証情報を特定させる
請求項８記載のアドレス正当性検証用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ入出力に伴う転送先アドレスの正当性を検証する入出力処理装置、アドレス正当性検証方法およびアドレス正当性検証用プログラムに関する。
【背景技術】
【０００２】
今日において、入出力処理装置を介して周辺処理装置から中央処理装置へデータを送信するような情報処理装置は、社会基盤の一部になっており、情報処理装置の障害による各種機能の停止は、社会生活に影響を与える可能性がある。
【０００３】
また、近年のＬＳＩ（Large Scale Integration ）微細化により、アルファ線等を原因としたデータ化けの発生確率が高くなってきている。そこで、データ化けが発生した場合であっても、そのデータを訂正したりリトライしたりすることによってデータ誤りを救済し、情報処理装置を継続動作させることが求められている。
【０００４】
特許文献１には、中継デバイスから送信されるデータのエラーを検出するＰＣＩ（Peripheral Component Interconnect ）  ＥｘｐｒｅｓｓのＴＬＰ（Transaction Layer Packet）処理回路が記載されている。なお、ＰＣＩ  Ｅｘｐｒｅｓｓは、登録商標である。以下の説明では、ＰＣＩ  ＥｘｐｒｅｓｓをＰＣＩｅと記すこともある。
【０００５】
特許文献１に記載された処理回路は、トランザクションレイヤーパケット（以下、ＴＬＰと記すこともある。）を受信すると、デバイスの中継回路で生じるエラーを検出するための検出コードを生成し、ＴＬＰに付加するとともに、バッファに記憶する。そして、特許文献１に記載された処理回路は、パケットの送信時に再度ＴＬＰの検出コードと、バッファに記憶させた検出コードとを比較して、送信される信号が正常か否かを判断する。また、特許文献１に記載された処理回路は、信号を異常と判断した場合、ＮＡＫ  ＤＬＬＰ（Not Acknowledge Data Link Layer Packet）信号を送信側装置に返信する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−２５０６６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
まず、ＰＣＩｅを利用した一般的な情報処理装置の動作を説明する。図１４は、情報処理装置の例を示す説明図である。図１４に例示する情報処理装置１０００は、サーバやメインフレームと呼ばれるコンピュータシステムである。情報処理装置１０００は、中央処理装置１００と、入出力処理装置２００と、周辺処理装置２０００，３０００とを備えている。
【０００８】
中央処理装置１００は、メインメモリ（ＭＭ）１３０と、演算処理装置（ＥＰＵ：Energy Processing Unit）１１０〜１１３と、メモリコントローラ（ＭＣ）１２０とを含む。メインメモリ１３０は、ソフトウェアの命令やソフトウェアが処理するデータを格納する。演算処理装置１１０〜１１３は、メインメモリ１３０よりソフトウェアの命令やデータを読み出して各処理を実行する。メモリコントローラ１２０は、演算処理装置１１０〜１１３と、メインメモリ１３０と、後述する入出力処理装置２００のＩＯコントローラ２１０とを接続し、相互のアクセスを制御する。
【０００９】
演算処理装置１１０〜１１３とメモリコントローラ１２０は、バス１４０で接続され、メインメモリ１３０とメモリコントローラ１２０は、バス１５０で接続され、ＩＯコントローラ２１０とメモリコントローラ１２０は、バス１６０で接続される。
【００１０】
入出力処理装置２００は、演算処理装置１１０〜１１３の指示により、メインメモリ１３０と周辺処理装置２０００，３０００との間でデータ転送を行う装置である。入出力処理装置２００は、周辺処理装置２０００，３０００と接続するためのＰＣＩｅカード２８０〜２８３と、ＰＣＩｅカード２８０〜２８３を接続するためのＰＣＩｅスイッチ２４０を含む。ＰＣＩｅスイッチ２４０とＰＣＩｅカード２８０〜２８３は、それぞれＰＣＩｅインタフェース（Ｉ／Ｆ）２６０〜２６３で接続される。
【００１１】
また、入出力処理装置２００は、ＰＣＩｅカード２８０〜２８３を介して周辺処理装置２０００，３０００とメインメモリ１３０との間のデータ転送を制御するＩＯコントローラ（ＩＯＣ）２１０を含む。ＩＯコントローラ２１０とメモリコントローラ１２０は、バス１６０で接続される。ＩＯコントローラ２１０とＰＣＩｅスイッチ２４０は、ポート２１０−１，２４０−１を介して、ＰＣＩｅ  Ｉ／Ｆ２５２で接続される。
【００１２】
さらに、入出力処理装置２００は、プロセッサ（ＰＲＯＣ）２２０と、ローカルメモリ（ＬＭ）２３０を含む。プロセッサ２２０は、演算処理装置１１０〜１１３からメインメモリ１３０と周辺処理装置２０００，３０００の間のデータ転送指示を受け取り、ＩＯコントローラ２１０とＰＣＩｅカード２８０〜２８３を制御してデータ転送を行う。
【００１３】
プロセッサ２２０は、例えば、ファームウェアに従って動作する。以下、ファームウェアに従ってプロセッサ２２０が動作することを、ファームウェアが各種処理を行うと記すこともある。ローカルメモリ２３０は、ファームウェアやファームウェアが使用するデータを格納する。
【００１４】
プロセッサ２２０とローカルメモリ２３０は、バス２７０で接続される。プロセッサ２２０とＩＯコントローラ２１０は、ポート２２０−１，２１０−２を介して、ＰＣＩｅ  Ｉ／Ｆ２５０で接続される。プロセッサ２２０とＰＣＩｅスイッチ２４０は、ポート２２０−２，２４０−２を介して、ＰＣＩｅ  Ｉ／Ｆ２５１で接続される。なお、プロセッサ２２０のＰＣＩｅポート２２０−１とＰＣＩｅポート２２０−２がそれぞれルートコンプレックスになっているとする。
【００１５】
周辺処理装置２０００、３０００は、磁気ディスク装置等であり、ＰＣＩｅカード２８０〜２８３とはファイバーチャネルなどの各種Ｉ／Ｆによって接続されている。メインメモリ１３０と周辺処理装置２０００，３０００の間では、以下の経路でデータ転送が行われる。まず、データは、中央処理装置１００のメインメモリ１３０から、バス１５０、メモリコントローラ１２０、バス１６０を経由して、入出力処理装置２００に送信される。さらに、データは、入出力処理装置２００のＩＯコントローラ２１０、ＰＣＩｅ  Ｉ／Ｆ２５２、ＰＣＩｅスイッチ２４０、ＰＣＩｅ  Ｉ／Ｆ２６０〜２６３、ＰＣＩｅカード２８０〜２８３、周辺Ｉ／Ｆ２００１，２００２，３００１，３００２を経由して、周辺処理装置２０００，３０００に送信される。逆方向も同様である。
【００１６】
入出力処理装置２００において、プロセッサ２２０とＩＯコントローラ２１０、ＰＣＩｅスイッチ２４０、ＰＣＩｅカード２８０〜２８３は、全てＰＣＩｅ  Ｉ／Ｆで接続されている。プロセッサ２２０のＰＣＩｅポート２２０−１とＰＣＩｅポート２２０−２は、それぞれルートコンプレックスであるので、プロセッサ２２０およびＰＣＩｅカード２８０〜２８３からはローカルメモリ２３０も含めて同一のメモリ空間としてアクセスできる。
【００１７】
ＩＯコントローラ２１０とメモリコントローラ１２０は、バス１６０によって接続されている。ただし、通常は、バスの種類およびメモリ空間が異なっているため、ＰＣＩｅカード２８０〜２８３からメインメモリ１３０へアクセスする際、ＩＯコントローラ２１０の変換機構２１１（図１４において図示せず）によってアドレス変換とＩ／Ｆ変換が行われる。
【００１８】
図１５は、アドレス変換の方法例を示す説明図である。図１５に示すように、メインメモリ１３０のアドレス空間１３１とベースアドレスの異なった写しのアドレス空間が、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１のＭＭＩＯ（Memory Mapped Input/Output）空間３０１に設定される。この状況で、ＭＭＩＯ空間３０１にアクセスされたとき、ＩＯコントローラ２１０は、変換機構２１１によって、入力されたアドレスを、アドレス変換マスクレジスタ２１３の値でマスクする。ＩＯコントローラ２１０は、マスクした結果にアドレス変換ベースレジスタ２１２の値を加算することで、入力時のアドレス３０２をメインメモリ１３１のアドレス空間のアドレス１３２に変換する。
【００１９】
例えば、図１５に示す例では、メインメモリ１３０のアドレス空間１３１を０ｘ０〜０ｘＦＦＦＦＦＦＦＦＦＦとし、その写しとしてＩＯコントローラ２１０のＰＣＩｅポート２１０−１に０ｘ８０００００００００００〜０ｘ８０ＦＦＦＦＦＦＦＦＦＦのＭＭＩＯ空間３０１を割り当てる。さらに、アドレス変換ベースレジスタ２１２に０ｘ０を設定し、アドレス変換マスクレジスタ２１３に０ｘ００ＦＦＦＦＦＦＦＦＦＦを設定する。
【００２０】
ＰＣＩｅカード２８０〜２８３がメインメモリ１３０のアドレス０ｘ８０００ＦＦ００にデータを書き込むとき、ＰＣＩｅカード２８０〜２８３は、ＭＭＩＯ空間３０１のアドレス０ｘ８０００８０００ＦＦ００にアクセスする。ＩＯＣ２１０は、ＭＭＩＯ空間３０１へのアクセスを受けると、変換機構２１１は、要求されたアドレス０ｘ８０００８０００ＦＦ００をアドレス変換マスクレジスタ２１３の値と論理積を取って０ｘ００００８０００ＦＦ００と算出する。さらに、変換機構２１１は、算出した値にアドレス変換ベースレジスタ２１２の値を加算して０ｘ００００８０００ＦＦ００を得る。ＩＯコントローラ２１０は、得られたアドレスを利用してメインメモリ１３０のアドレス空間１３１にアクセスする。
【００２１】
情報処理装置１０００において、周辺処理装置２０００，３０００からメインメモリ１３０にデータ転送するとき、演算処理装置１１０〜１１３は、周辺処理装置２０００，３０００からメインメモリ１３０にデータ転送するためのチャネルプログラムを作成する。演算処理装置１１０〜１１３は、作成したチャネルプログラムをメインメモリ１３０に格納し、入出力処理装置２００にチャネルプログラムの格納アドレスを指定してチャネルプログラムの実行を指示する。そして、演算処理装置１１０〜１１３は、入出力処理装置２００からのチャネルプログラムの終了通知を待ち合わせる。演算処理装置１１０〜１１３が終了通知を受信することでデータ転送が完了する。
【００２２】
演算処理装置１１０〜１１３から入出力処理装置２００へのチャネルプログラムの実行指示は、演算処理装置１１０〜１１３がＩＯコントローラ２１０へメモリアクセスすることで行われる。これにより、ＩＯコントローラ２１０がプロセッサ２２０のＰＣＩｅポート２２０−１に割込を行うことで、プロセッサ２２０上で動作するファームウェアにチャネルプログラムの実行が指示される。なお、これは一般的な方法であり、詳細な説明は省略する。
【００２３】
図１６は、チャネルプログラムの例を示す説明図である。また、図１７は、チャネルプログラムヘッダの例を示す説明図である。図１６に例示するように、チャネルプログラム２０は、チャネルプログラムヘッダ（ＣＰＨ）２０−０と複数のチャネルコマンドエントリ（ＣＣＥ）２０−１〜ｎを有する。また、図１７に例示するように、チャネルプログラムヘッダ２０−０は、チャネルプログラム２０を実行するチャネル番号２０−０−１を有する。
【００２４】
チャネル番号２０−０−１は、入出力処理装置２００に接続された周辺処理装置２０００，３０００および接続経路を区別するための番号である。例えば、ＰＣＩｅカード２８０に接続された周辺処理装置２０００，３０００にチャネル番号の０〜１５が割り当てられ、ＰＣＩｅカード２８１に接続された周辺処理装置２０００，３０００にチャネル番号の１６〜３１が割り当てられる。また、ＰＣＩｅカード２８２に接続された周辺処理装置２０００，３０００にチャネル番号の３２〜４７が割り当てられ、ＰＣＩｅカード２８３に接続された周辺処理装置２０００，３０００にチャネル番号の４８〜６３が割り当てられる。
【００２５】
図１８は、チャネルコマンドエントリの例を示す説明図である。図１８に例示するように、チャネルコマンドエントリ２０−ｎは、コマンド２０−ｎ−１とコマンド２０−ｎ−１を修飾するフラグ２０−ｎ−２、データ転送する場合の転送カウントを格納するカウント２０−ｎ−３、および、メインメモリ１３０上のデータ転送先またはデータ転送元のアドレス２０−ｎ−４を有する。
【００２６】
プロセッサ２２０上で動作するファームウェアは、演算処理装置１１０〜１１３よりチャネルプログラム２０の実行を指示されると、指示されたアドレスより読み出したチャネルプログラム２０を実行する。ファームウェアは、最初に指示されたアドレスよりチャネルプログラムヘッダ２０−０を読み出し、チャネル番号２０−０−１より対象となる周辺処理装置２０００，３０００とＰＣＩｅカード２８０〜２８３を特定する。
【００２７】
続いて、プロセッサ２２０は、チャネルコマンドエントリ２０−１を読み出して、コマンド２０−１−１とフラグ２０−１−２に対応した処理を行う。ファームウェアは、１つのチャネルコマンドエントリ２０−ｎ−１に対応する処理が完了したら次のチャネルコマンドエントリ２０−ｎを読み出して、対応する処理を実行する。全てのチャネルコマンドエントリ２０−ｎを処理したら、プロセッサ２２０は、演算処理装置１１０〜１１３にチャネルプログラム２０が終了したことを通知する。
【００２８】
入出力処理装置２００から演算処理装置１１０〜１１３へのチャネルプログラム２０の終了通知は、プロセッサ２２０上で動作するファームウェアがＩＯコントローラ２１０にメモリアクセスすることで行われる。具体的には、ＩＯコントローラ２１０がメモリコントローラ１２０を通して演算処理装置１１０〜１１３に割込を通知することで、終了通知が行われる。なお、これは一般的な方法であり、詳細な説明は省略する。
【００２９】
チャネルコマンドエントリ２０−ｎが周辺処理装置２０００，３０００からメインメモリ１３０へのデータ転送の指示を示しているとする。この場合、チャネルコマンドエントリ２０−ｎのカウント２０−ｎ−３には、転送カウントが格納され、アドレス２０−ｎ−４には、転送先のメインメモリ１３０上のアドレスが格納される。
【００３０】
このとき、プロセッサ２２０は、アドレス２０−ｎ−４に対応したＩＯコントローラ２１０のＭＭＩＯ空間３０１にカウント２０−ｎ−３の分だけデータ転送することを、チャネル番号２０−０−１に対応したＰＣＩｅカード２８０〜２８３にそれぞれ設定する。プロセッサ２２０は、データ転送の完了をＰＣＩｅカード２８０〜２８３からの割込があるまで待ち合わせる。
【００３１】
例えば、図１５においてチャネル番号が０でアドレス２０−ｎ−４が０ｘ８０００ＦＦ００だった場合、プロセッサ２２０は、ＰＣＩｅカード２８０に、０ｘ８０００８０００ＦＦ００のアドレスにデータ転送するよう設定する。
【００３２】
演算処理装置１１０〜１１３と入出力処理装置２００は、複数のチャネルプログラム２０を同時に実行することが可能である。演算処理装置１１０〜１１３は、入出力処理装置２００にチャネルプログラム２０の実行を指示した後、チャネルプログラム２０の完了を待ち合わせている間に他の命令や他のチャネルプログラム２０の実行指示を行うことが可能である。また、入出力処理装置２００は、ＰＣＩｅカード２８０〜２８３にデータ転送指示を行った後、データ転送の終了を待ち合わせている間に他のチャネルプログラム２０のチャネルコマンドエントリ２０−ｎを実行することが可能である。なお、これらの実行方法は、本発明についての主要部分ではないため、詳細な説明は省略する。
【００３３】
図１９は、送受信されるパケットの例を示す説明図である。ＰＣＩｅ  Ｉ／Ｆでデータ転送を行う場合、図１９に例示するパケット１（物理層パケット）がＰＣＩｅ  Ｉ／Ｆ間で送受信される。ＰＣＩｅのパケットは、処理するレイヤ毎に格納する内容が決められている。トランザクションレイヤーパケット（ＴＬＰ）３は、Ｈｅａｄｅｒ３−１と、送受信するＤａｔａ３−２と、Ｈｅａｄｅｒ３−１およびＤａｔａ３−２の正当性を確認するためのＥＣＲＣ３−３とを有する。すなわち、送受信されるパケットにはＥＣＲＣが付与されていると言える。
【００３４】
なお、パケット２は、データリンク層パケットを示し、ＴＬＰ３に含まれる情報に加え、Ｓｅｑｕｅｎｃｅ  Ｎｕｍｂｅｒ２−１およびＬＣＲＣ２−２を含む。また、パケット１は、パケット２に含まれる情報に加え、Ｆｒａｍｉｎｇ１−１，１−２を含む。
【００３５】
図２０は、ＰＣＩｅカード２８０〜２８３からメインメモリ１３０にデータ転送する場合の、Ｈｅａｄｅｒ３−１の例を示す説明図である。Ｈｅａｄｅｒ３−１は、トランザクションレイヤーパケット３の形式やリクエスト内容を示すＦｏｒｍａｔ３−１−１と、Ｔｙｐｅ３−１−２と、リクエストの要求元を示すＲｅｑｕｅｓｔｅｒ  ＩＤ３−１−３と、リクエスト内容に対応したＡｄｄｒｅｓｓ３−１−４とを含む。
【００３６】
例えば、図１５に示す例では、データ付きのメモリライトリクエストの場合、Ｆｏｒｍａｔ３−１−１に０１１ｂ、Ｔｙｐｅ３−１−２に０００００ｂが設定される。また、Ｒｅｑｕｅｓｔｅｒ  ＩＤ３−１−３には、データ送信元であるＰＣＩｅカード２８０〜２８３のバス番号とデバイス番号が設定され、Ａｄｄｒｅｓｓ３−１−４には、０ｘ８０００８０００ＦＦ００が設定される。
【００３７】
ＥＣＲＣ３−３は、トランザクションレイヤにおいて終端間（エンド・ツー・エンド）でデータ完全性を保証するための３２ビットのＣＲＣ（Cyclic Redundancy Code）を格納する。このＣＲＣは、Transaction Layer end to end 32 bit CRC と記される。また、このＣＲＣのことを、終端間巡回冗長検査符号（ＥＣＲＣ）と記すこともある。ＴＲＰ３の送信元でＨｅａｄｅｒ３−１とＤａｔａ３−２についてＣＲＣが作成され、ＴＲＰ３のＥＣＲＣ３−３に付加される。付加されたＣＲＣは、ＴＲＰ３の受信先で、Ｈｅａｄｅｒ３−１とＤａｔａ３−２の正当性を検証するために使用される。以下、ＥＣＲＣ３−３に格納されたＣＲＣを利用することを、単にＥＣＲＣ３−３を利用する（用いる）と記すこともある。
【００３８】
例えば、ＰＣＩｅカード２８０〜２８３からメインメモリ１３０にデータ転送するとき、ＰＣＩｅカード２８０〜２８３は、トランザクションレイヤーパケット３のＣＲＣを作成してＥＣＲＣ３−３に付加する。ＰＣＩｅ  Ｉ／Ｆ上の送信先となるＩＯコントローラ２１０のＰＣＩｅポート２１０−１では、トランザクションレイヤーパケット３のＥＣＲＣ３−３を用いて受信したパケットの正当性が検証される。
【００３９】
例えば、ＰＣＩｅカード２８０〜２８３からメインメモリ１３０へのデータ転送において、ＰＣＩｅスイッチ２４０の内部でトランザクションレイヤーパケット３のデータ化けが発生したとする。この場合でも、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１でＥＣＲＣ３−３を用いてトランザクションレイヤーパケット３を検証することで、データ化けを検出できる。
【００４０】
ＰＣＩｅでは、ＥＣＲＣ３−３で異常を検出したときに、その異常をルートコンプレックスに割込で通知する機能を有する。図１４に示す入出力処理装置では、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１でＥＣＲＣ３−３の異常を検出したとき、プロセッサ２２０のＰＣＩｅポート２２０−２に割込が通知される。
【００４１】
図２１は、ＰＣＩｅポートのコンフィグレーション空間の例を示す説明図である。ＰＣＩｅでは、ＰＣＩｅポートのコンフィグレーション空間１０に割込で通知した異常内容を示すＡｄｖａｎｃｅｄ  Ｅｒｒｏｒ  Ｒｅｐｏｒｔｉｎｇ  Ｅｘｔｅｎｄｅｄ  Ｃａｐａｂｉｌｉｔｙ  Ｓｔｒｕｃｔｕｒｅ１１を有する。
【００４２】
図２２は、Ａｄｖａｎｃｅｄ  Ｅｒｒｏｒ  Ｒｅｐｏｒｔｉｎｇ  Ｅｘｔｅｎｄｅｄ  Ｃａｐａｂｉｌｉｔｙ  Ｓｔｒｕｃｔｕｒｅの内容を示す説明図である。ＥＣＲＣ３−３で異常が検出されると、図２２に示すＵｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ１１−１にＥＣＲＣ異常が設定され、Ｈｅａｄｅｒ  Ｌｏｇ  Ｒｅｇｉｓｔｅｒ１１−４に、ＥＣＲＣ異常が検知されたトランザクションレイヤーパケット３のＨｅａｄｅｒ３−１が格納される。なお、これらの事項は、ＰＣＩｅの仕様で詳しく説明されているため、詳細な説明は省略する。
【００４３】
ここで、チャネルコマンドエントリ２０−ｎの指示により、周辺処理装置２０００，３０００からメインメモリ１３０へデータ転送を行っているときにＰＣＩｅスイッチ２４０内でトランザクションレイヤーパケット３のデータ化けが発生した場合を考える。ＰＣＩｅカード２８０〜２８３でトランザクションレイヤーパケット３を送信する際にＥＣＲＣ３−３を付加していた場合、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１で、トランザクションレイヤーパケット３の正当性がＥＣＲＣ３−３によって検証され、ＥＣＲＣ異常が検出される。
【００４４】
ＰＣＩｅポート２１０−１は、ＥＣＲＣ異常を検出すると、異常が検出されたトランザクションレイヤーパケット３のヘッダ３−１をＨｅａｄｅｒ  Ｌｏｇ  Ｒｅｇｉｓｔｅｒ１１−４に格納する。また、ＰＣＩｅポート２１０−１は、図２２に示すＵｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ１１−１に、ＥＣＲＣ異常を設定して、プロセッサ２２０に割込を通知する。
【００４５】
ＥＣＲＣ異常が検出されたトランザクションレイヤーパケット３は破棄され、データ化けしたデータはメインメモリ１３０に転送されない。しかし、ＰＣＩｅカード２８０〜２８３からメインメモリ１３０へのデータ転送は、Ｐｏｓｔｅｄのトランザクションである。そのため、ＰＣＩｅカード２８０〜２８３から見ると、データ転送は正常に終了するため、ファームウェア（プロセッサ２２０）に転送が終了したことが通知される。そのため、ファームウェアから見ると、データ転送が正常に終了したように見えてしまう。
【００４６】
一方、プロセッサ２２０上で動作するファームウェアは、ＥＣＲＣ異常に対応した割込を受信したとき、Ｈｅａｄｅｒ  Ｌｏｇ  Ｒｅｇｉｓｔｅｒ１１−４の内容を確認することで、ＥＣＲＣ異常が検出されたトランザクションレイヤーパケット３のＨｅａｄｅｒ３−１を確認できる。しかし、ＥＣＲＣ異常とは、Ｈｅａｄｅｒ３−１およびＤａｔａ３−２にデータ化けが発生していることを示しているため、Ｈｅａｄｅｒ  Ｌｏｇ  Ｒｅｇｉｓｔｅｒ１１−４に格納された内容の正当性は保証できない。そのため、Ｈｅａｄｅｒ３−１のＡｄｄｒｅｓｓ３−１−４からは、ＥＣＲＣ異常が検出されたデータ転送を行っているチャネルコマンドエントリ２０−ｎを特定できない。
【００４７】
情報処理装置１０００の正当性を保証するために周辺処理装置２０００，３０００からメインメモリ１３０にデータ転送する際にＥＣＲＣ異常を検出した場合、このような理由から、情報処理装置１０００全体の障害として処理されてしまうという問題がある。
【００４８】
また、ＰＣＩｅでは、エンド・ツー・エンドのデータ完全性を保証するため、一般にＥＣＲＣが用いられる。特許文献１に記載された処理回路では、ＥＣＲＣを用いずに信号の異常を検出しているが、ＥＣＲＣはＰＣＩｅで一般的に用いられるコードであるため、このＥＣＲＣを利用しつつ、データの完全性を保証できることが望ましい。
【００４９】
そこで、本発明は、パケット転送時に終端間巡回冗長検査符号の異常（すなわち、ＥＣＲＣ異常）が検出された場合であっても、障害の影響を局所的な範囲に抑制できる入出力処理装置、アドレス正当性検証方法およびアドレス正当性検証用プログラムを提供することを目的とする。
【課題を解決するための手段】
【００５０】
本発明による入出力処理装置は、データ転送処理を実行する転送プログラムが割り当てられる転送領域を有する処理記憶手段と、転送領域を示すアドレスにそのアドレスの誤り訂正符号を付加したアドレス検証情報を記憶する検証領域を有するアドレス記憶手段と、検証領域を示すアドレスを、終端間巡回冗長検査符号が付与された受信データの転送先アドレスに設定するアドレス設定手段と、受信データに設定された検証領域を示すアドレスからアドレス検証情報を特定し、そのアドレス検証情報から誤り訂正符号を削除して転送領域の転送プログラムを特定することにより、受信データのデータ転送処理を実行するデータ転送制御手段と、受信データに付与された終端間巡回冗長検査符号の異常を検出する異常検出手段とを備え、データ転送制御手段が、受信データの終端間巡回冗長検査符号に異常が検出されたときに、その受信データに設定された検証領域を示すアドレスから特定されるアドレス検証情報から、転送領域のアドレスの正当性を検証することを特徴とする。
【００５１】
本発明によるアドレス正当性検証方法は、データ転送処理を実行する転送プログラムが割り当てられる転送領域を示す第１のアドレスに、その第１のアドレスの誤り訂正符号を付加して生成されるアドレス検証情報を記憶する検証領域を示す第２のアドレスを、終端間巡回冗長検査符号が付与された受信データの転送先アドレスに設定し、第２のアドレスからアドレス検証情報を特定し、そのアドレス検証情報から誤り訂正符号を削除して転送領域の転送プログラムを特定することにより、受信データのデータ転送処理を実行し、受信データに付与された終端間巡回冗長検査符号の異常を検出し、受信データの終端間巡回冗長検査符号に異常が検出されたときに、その受信データに設定された第２のアドレスから特定されるアドレス検証情報から、第１のアドレスの正当性を検証することを特徴とする。
【００５２】
本発明によるアドレス正当性検証用プログラムは、コンピュータに、データ転送処理を実行する転送プログラムが割り当てられる転送領域を示す第１のアドレスに、その第１のアドレスの誤り訂正符号を付加して生成されるアドレス検証情報を記憶する検証領域を示す第２のアドレスを、終端間巡回冗長検査符号が付与された受信データの転送先アドレスに設定するアドレス設定処理、第２のアドレスからアドレス検証情報を特定し、そのアドレス検証情報から誤り訂正符号を削除して転送領域の転送プログラムを特定することにより、受信データのデータ転送処理を実行するデータ転送制御処理、および、受信データに付与された終端間巡回冗長検査符号の異常を検出する異常検出処理を実行させ、データ転送制御処理で、受信データの終端間巡回冗長検査符号に異常が検出されたときに、その受信データに設定された第２のアドレスから特定されるアドレス検証情報から、第１のアドレスの正当性を検証させることを特徴とする。
【発明の効果】
【００５３】
本発明によれば、パケット転送時にＥＣＲＣ異常が検出された場合であっても、障害の影響を局所的な範囲に抑制できる。
【図面の簡単な説明】
【００５４】
【図１】転送空間の例を示す説明図である。
【図２】転送空間のアドレス形式の例を示す説明図である。
【図３】ＭＭＩＯ空間の例を示す説明図である。
【図４】ＭＭＩＯ空間のアドレス形式の例を示す説明図である。
【図５】ＩＯコントローラの構成例を示す説明図である。
【図６】転送制御レジスタの例を示す説明図である。
【図７】チャネルプログラム管理表の例を示す説明図である。
【図８】転送空間−チャネル番号対応表の例を示す説明図である。
【図９】チャネルプログラムを実行する処理の例を示す第１のフローチャートである。
【図１０】チャネルプログラムを実行する処理の例を示す第２のフローチャートである。
【図１１】割込み発生時の動作例を示す第１のフローチャートである。
【図１２】割込み発生時の動作例を示す第２のフローチャートである。
【図１３】本発明による入出力処理装置の概要を示すブロック図である。
【図１４】情報処理装置の例を示す説明図である。
【図１５】アドレス変換の方法例を示す説明図である。
【図１６】チャネルプログラムの例を示す説明図である。
【図１７】チャネルプログラムヘッダの例を示す説明図である。
【図１８】チャネルコマンドエントリの例を示す説明図である。
【図１９】送受信されるパケットの例を示す説明図である。
【図２０】Ｈｅａｄｅｒの例を示す説明図である。
【図２１】ＰＣＩｅポートのコンフィグレーション空間の例を示す説明図である。
【図２２】Ａｄｖａｎｃｅｄ  Ｅｒｒｏｒ  Ｒｅｐｏｒｔｉｎｇ  Ｅｘｔｅｎｄｅｄ  Ｃａｐａｂｉｌｉｔｙ  Ｓｔｒｕｃｔｕｒｅの内容を示す説明図である。
【発明を実施するための形態】
【００５５】
まず、本発明による入出力処理装置の一実施形態を図１４に例示する情報処理装置を参照して説明する。本実施形態の入出力処理装置２００は、上述するように、ＰＣＩｅカード２８０〜２８３と、ＰＣＩｅスイッチ２４０と、ＩＯコントローラ２１０と、プロセッサ２２０とを備え、チャネルプログラム方式で処理を実行する装置である。なお、図１４を参照してすでに説明した部分については、適宜説明を省略する。
【００５６】
ＰＣＩｅカード２８０〜２８３は、周辺処理装置２０００，３０００とデータ転送するためのインタフェースである。ＰＣＩｅスイッチ２４０は、各ＰＣＩｅカード２８０〜２８３を接続する。具体的には、ＰＣＩｅスイッチ２４０が有するポート２４０−３〜６と、ＰＣＩｅカード２８０〜２８３が有するポート２８０−１〜２８３−１が、バス２６０〜２６３を介して接続される。
【００５７】
ＩＯコントローラ２１０は、ＰＣＩｅカード２８０〜２８３を介して周辺処理装置２０００，３０００と中央処理装置１００のメインメモリ１３０との間のデータ転送を制御する。プロセッサ２２０は、ＩＯコントローラ２１０とＰＣＩｅカード２８０〜２８３を制御する。プロセッサ２２０は、例えば、ファームウェアに従って各処理を実行する。
【００５８】
ＩＯコントローラ２１０は、周辺処理装置２０００，３０００からメインメモリ１３０にデータ転送する。ＩＯコントローラ２１０は、データ転送の際に、ＰＣＩｅカード２８０〜２８３からのＭＭＩＯアクセスを受け付けて、メインメモリ１３０へデータ転送を行うための固定長の複数の転送空間４００（図１４において図示せず）を内部に有する。以下、転送空間４００に割り当てられるｐ個の空間を識別するため、割り当てられた各転送空間を転送空間４００−ｐとりする。転送空間４００は、例えば、各転送空間を記憶する領域を有するメモリ等により実現される。
【００５９】
また、ＩＯコントローラ２１０は、転送空間４００−ｐ毎に入出力処理装置２００とメインメモリ１３０の間のアドレス変換を行う変換機構（図１４において図示せず）を有する。また、ＩＯコントローラ２１０は、転送空間４００−ｐのアドレスに８ビットのＥＣＣを付加したＭＭＩＯ空間３００（図１４において図示せず）を有する。また、ＩＯコントローラ２１０（より具体的には、変換機構）は、ＰＣＩｅカード２８０〜２８３よりＭＭＩＯ空間３００にアクセスされたとき、そのアクセスを、付加されたＥＣＣ（Error Correction Code ）を削除して特定される転送空間４００−ｐへのアクセスとして処理する機能を有する。
【００６０】
入出力処理装置２００は、周辺処理装置２０００，３０００からメインメモリ１３０へのデータ転送を行うチャネルプログラム２０を実行するとき、複数の転送空間４００のうち１つの転送空間４００−ｐをそのチャネルプログラム２０に割り当てる。
【００６１】
入出力処理装置２００は、データ転送を行うときに、転送空間４００−ｐのアドレスに、そのアドレスに対するＥＣＣを付加してＭＭＩＯ空間３００のアドレスにする。入出力処理装置２００は、転送先アドレスとしてＭＭＩＯ空間３００のアドレスをＰＣＩｅカード２８０〜２８３に設定してデータ転送を行う。
【００６２】
これらの処理は、例えば、ファームウェアに記載され、プロセッサ２２０がそのファームウェアに従って動作する。また、ＭＭＩＯ空間３００は、例えば、転送空間４００−ｐのアドレスとＥＣＣとを付加した情報（以下、アドレス検証情報と記すこともある。）を記憶する領域を有するメモリ等により実現される。
【００６３】
また、入出力処理装置２００は、転送空間４００−ｐを使用して、データ転送を行うチャネルプログラム２０を特定する。
【００６４】
ＩＯコントローラ２１０は、周辺処理装置２０００，３０００からメインメモリ１３０へのデータ転送の際にＥＣＲＣ異常の有無を検出する。ＥＣＲＣ異常が検出されたとき、プロセッサ２２０は、ＩＯコントローラ２１０のＰＣＩ  Ｃｏｎｆｉｇ空間のＨｅａｄｅｒ  Ｌｏｇ  Ｒｅｇｉｓｔｅｒ１１−４より転送先Ａｄｄｒｅｓｓ３−１−４を読み出す。Ａｄｄｒｅｓｓ３−１−４がＭＭＩＯ空間３００の範囲内ならば、プロセッサ２２０は、Ａｄｄｒｅｓｓ３−１−４よりＥＣＣを取り出してＡｄｄｒｅｓｓ３−１−４の正当性を検証する。正当性を検証できた場合、プロセッサ２２０は、Ａｄｄｒｅｓｓ３−１−４より転送空間４００−ｐを求めて、転送空間４００−ｐを使用しているチャネルプログラムを特定する。そして、プロセッサ２２０は、そのチャネルプログラムを再実行する。これらの処理は、例えば、ファームウェアに記載され、プロセッサ２２０がそのファームウェアに従って動作する。
【００６５】
以下、各構成の具体的な内容を説明する。図１は、転送空間４００の例を示す説明図である。以下の説明では、本発明の入出力処理装置が図１に例示する転送空間を利用するものとする。
【００６６】
図１に例示するように、ＩＯコントローラ２１０がＰＣＩｅポート２１０−１のデータ転送で使用する転送空間４００は、複数の固定長の転送空間４００−ｐに分割される。図１に示す例では、転送空間４００を６４個に分割している。ファームウェアは、それぞれの転送空間４００−ｐに対して１つのチャネルプログラム２０を割り当てる制御を行う。なお、図１に示す例では、転送空間４００−ｐのサイズは４ＭＢである。
【００６７】
図２は、転送空間４００のアドレス形式の例を示す説明図である。転送空間４００を複数の固定長の転送空間４００−ｐに分割することにより、転送空間４００のアドレス形式４１０は、図２に例示する形式で表わされる。Ｂａｓｅ  Ａｄｄｒｅｓｓ４１０−１は、転送空間４００のベースアドレスである。転送空間番号４１０−３は、転送空間４００−ｐに対応する番号ｐを示す。Ｏｆｆｓｅｔ４１０−４は、転送空間４００−ｐ内のオフセットを示す。図１に示す例では、Ｂａｓｅ  Ａｄｄｒｅｓｓ４１０−１を０ｘ８０００００００００００としている。
【００６８】
図１に例示する転送空間４００は、ＩＯコントローラ２１０内部のアドレス空間である。図３は、ＭＭＩＯ空間の例を示す説明図である。また、図４は、ＭＭＩＯ空間のアドレス形式の例を示す説明図である。図３に示す例は、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１におけるＭＭＩＯ空間３００を示している。
【００６９】
ＭＭＩＯ空間のアドレス形式３１０は、転送空間のアドレス形式４１０にＥＣＣ３１０−２を付加した形式になっている。ファームウェアは、転送空間のアドレス形式４１０で表わされたアドレスからＥＣＣ３１０−２を計算し、ＭＭＩＯ空間のアドレス形式３１０になるよう、計算したＥＣＣ３１０−２を転送空間のアドレス形式４１０の３バイト目に設定する。
【００７０】
ＥＣＣ３１０−２の値は、元の転送空間アドレスに応じて変化するため、例えば、図１に例示する転送空間４００に対して、ＭＭＩＯ空間３００は、０ｘ８０００００００００００から０ｘ８０ＦＦＦＦＦＦＦＦＦＦまでの範囲になる。
【００７１】
図５は、本実施形態のＩＯコントローラ２１０の構成例を示す説明図である。ＩＯコントローラ２１０は、周辺処理装置２０００，３０００からメインメモリ１３０へデータ転送を行う際、バス１６０とＰＣＩｅ  Ｉ／Ｆ２５２のアドレス空間、および、バスＩ／Ｆを変換する変換機構５００を有する。
【００７２】
また、図６は、転送制御レジスタの例を示す説明図である。変換機構５００は、図６に例示する転送制御レジスタ５１０を含む。転送制御レジスタ５１０には、複数の転送空間４００−ｐに対応してデータ転送を行うために、転送空間４００−ｐごとに対応した転送制御レジスタが設けられる。以下、各転送空間４００−ｐに対応した転送制御レジスタを転送制御レジスタ５１０−ｐと記す。
【００７３】
転送制御レジスタ５１０−ｐには、転送先のメインメモリ１３０上のベースアドレスを格納するＡｄｄｒｅｓｓ５１０−ｐ−１と、転送するカウントを格納するＣｏｕｎｔ５１０−ｐ−２と、転送を制御するＦｌａｇ５１０−ｐ−３とが設けられる。図５では、０番目の転送制御レジスタ５１０−０の例を示している。
【００７４】
図５を参照して、周辺処理装置２０００，３０００からメインメモリ１３０にデータ転送するときの、ＩＯコントローラ２１０のＭＭＩＯ空間３００，転送空間４００，変換機構５１０および転送制御レジスタ５１０の関係を説明する。
【００７５】
ＰＣＩｅ  Ｉ／Ｆ２５２は、ＭＭＩＯ空間３００のアドレス３０３に対してデータを転送する。ＩＯコントローラ２１０は、ＭＭＩＯ空間３００にアクセスされると、ＭＭＩＯ空間のアドレス形式３１０で表わされたアドレス３０３からＥＣＣ３１０−２を取り除き、転送空間のアドレス形式４１０に変換したアドレス３０４を生成する。
【００７６】
そして、ＩＯコントローラ２１０は、アドレス３０４から対応する転送空間４００−ｐのアドレスを求める。変換機構５００は、転送空間４００−ｐに対応する転送制御レジスタ５１０−ｐの値を読み出す。変換機構５００は、アドレス３０４のオフセット４１０−４とＡｄｄｒｅｓｓ５１０−ｐ−１を加算した値をメインメモリ空間１３１のアドレスとする。そして、変換機構５００は、このアドレスを使用して、メインメモリ１３０にアクセスする。
【００７７】
図５に示す例において、アドレス３０３を０ｘ８０ｘｘ０００ｚｚｚｚｚとすると、ＥＣＣ３１０−２が取り除かれたアドレス３０４は、０ｘ８００００００ｚｚｚｚｚになり、転送空間番号は０になる。この場合、転送空間番号４００−０が選択され、変換機構５１０は、転送制御レジスタ５１０−０を選択し、Ａｄｄｒｅｓｓ５１０−０−１とアドレス３０４のＯｆｆｓｅｔ４１０−４を加算したアドレス１３３をメインメモリ１３０へアクセスするアドレスとして使用する。
【００７８】
プロセッサ２２０上で動作するファームウェアは、チャネル番号毎にチャネルプログラム２０の実行を管理するチャネルプログラム管理表をローカルメモリ２３０に有する。図７は、チャネルプログラム管理表の例を示す説明図である。ファームウェアは、例えば、図７に例示するチャネルプログラム管理表３０を用いて、チャネルプログラム２０の実行を管理する。
【００７９】
図７に例示するチャネルプログラム管理表３０には、チャネル番号ｍで実行しているチャネルプログラムヘッダのアドレス３０−ｍ−１と、現在実行しているチャネルコマンドエントリのアドレス３０−ｍ−２と、データ転送で使用している転送空間番号３０−ｍ−３と、チャネルプログラム２０の実行状態を格納するＦｌａｇ３０−ｍ−４が格納される。なお、図７に例示するチャネルプログラム管理表３０は、６４個のチャネルを想定している。
【００８０】
また、ファームウェアは、チャネルプログラム２０のチャネル番号ｍを管理する転送空間−チャネル番号対応表をローカルメモリ２３０に有する。図８は、転送空間−チャネル番号対応表の例を示す説明図である。図８に例示する転送空間−チャネル番号対応表４０は、転送空間４００−ｐ毎に転送空間４００−ｐを使用してデータ転送を行っているチャネルプログラム２０のチャネル番号ｍを管理する。ファームウェアは、例えば、図８に例示する転送空間−チャネル番号対応表を用いて、チャネルプログラム２０のチャネル番号ｍを管理する。
【００８１】
図８に例示する転送空間−チャネル番号対応表４０は、転送空間４００−ｐの使用状態を格納するＦｌａｇ４０−ｐ−１と、転送空間４００−ｐを使用してデータ転送を行っているチャネルプログラム２０に対応するチャネル番号ｍを格納するチャネル番号４０−ｐ−２を含む。なお、図８に例示する転送空間−チャネル番号対応表４０も、６４個のチャネルを想定している。
【００８２】
図９及び図１０は、チャネルプログラムを実行する処理の例を示すフローチャートである。ここでは、本発明における特徴の一部を説明することとし、詳細な説明は後述される。
【００８３】
ファームウェア（プロセッサ２２０）は、演算処理装置１１０〜１１３の指示によりチャネルプログラム２０を実行する。なお、以下の説明では、図９および図１０に例示する処理をチャネルプログラム実行処理と記すこともある。
【００８４】
プロセッサ２２０は、チャネルコマンドエントリ２０−ｎのＡｄｄｒｅｓｓ２０−ｎ−４とＣｏｕｎｔ２０−ｎ−３を、転送空間４００−ｐに対応する転送制御レジスタ５１０−ｐのＡｄｄｒｅｓｓ５１０−ｐ−１とＣｏｕｎｔ５１０−ｐ−２に設定する。また、プロセッサ２２０は、Ｆｌａｇ５１０−ｐ−３を転送有効に設定する。この処理は、図９のステップＳ６０−１０に記されている。
【００８５】
また、プロセッサ２２０は、転送空間のアドレス形式４１０で表わされるアドレスを用いて転送空間４００−ｐのアドレスａを求める。さらに、プロセッサ２２０は、求めたアドレスａに対してＳＥＣＤＥＤ（single‐error‐correcting and double‐error‐detecting code ）符号を用いてＥＣＣを求める。プロセッサ２２０は、アドレスａの３バイト目に求めたＥＣＣを付加し、ＭＭＩＯ空間のアドレス形式３１０であるアドレスｃに変換する。この処理は、図９のステップＳ６０−１０に記されている。
【００８６】
また、プロセッサ２２０は、チャネル番号２０−０−１に対応するＰＣＩｅカード２８０〜２８３に、転送アドレスとしてアドレスｃを設定し、データ転送を起動する。この処理は、図９のステップＳ６０−１１に記されている。
【００８７】
また、チャネルプログラム実行処理では、プロセッサ２２０は、データ転送終了後に転送制御レジスタ５１０−ｐのＦｌａｇ５１０−ｐ−２と、転送空間−チャネル番号対応表４０−ｐのＦｌａｇ４０−ｐ−１を未使用に設定する。この処理は、図１０のステップＳ６０−１３に記されている。
【００８８】
また、プロセッサ２２０は、チャネルプログラム管理表３０−ｍのＦｌａｇ３０−ｍ−４を読み出して障害が発生しているか確認する。障害が発生していた場合、プロセッサ２２０は、チャネルプログラムヘッダアドレス３０−ｍ−１に１６を加算して最初のチャネルコマンドエントリ２０−１のアドレスを求める。プロセッサ２２０は、そのアドレスを実行中チャネルコマンドエントリアドレス３０−ｍ−２に格納し、Ｆｌａｇ３０−ｍ−４をリセットしてチャネルプログラムをリトライさせる。これらの処理は、図１０のステップＳ６０−１４〜１６に記されている。
【００８９】
また、チャネルプログラム実行処理では、プロセッサ２２０は、チャネルコマンドエントリ２０−ｎに従って、周辺処理装置２０００，３０００からメインメモリ１３０にデータ転送するときに、転送制御レジスタ５１０のＦｌａｇ５１０−ｐ−２を確認する。プロセッサ２２０は、未使用の転送空間ｐを求め、Ｆｌａｇ５１０−ｐ−２を使用中に設定する。この処理は、図９のステップＳ６０−６に記されている。
【００９０】
また、プロセッサ２２０は、転送空間に対応する転送空間−チャネル番号対応表４０−ｐのチャネル番号４０−ｐ−２に、チャネルプログラム２０のチャネル番号２０−０−１を格納し、Ｆｌａｇ４０−ｐ−１を使用中に設定する。この処理は、図９のステップ６０−７に記されている。
【００９１】
なお、ここでは、図９及び図１０を参照して本発明の特徴の一部を説明した。なお、図９及び図１０に例示する処理全体についての説明は、後述される。
【００９２】
また、図１１及び図１２は、割込み発生時の動作例を示すフローチャートである。以下の説明では、図１１及び図１２に例示する処理を割込処理と記すこともある。
【００９３】
割込処理７０において、プロセッサ２２０は、ＩＯコントローラ２１０からの割込がＰＣＩｅポート２１０−１のＥＣＲＣ異常検出か否かを判断する。ＥＣＲＣ異常検出であった場合、プロセッサ２２０は、Ｈｅａｄｅｒ  Ｌｏｇ  Ｒｅｇｉｓｔｅｒ１１−４を読み出して、Ｆｏｒｍａｔ３−１−１とＴｙｐｅ３−１−２を確認して、ＥＣＲＣ異常になったリクエストがＭｅｍｏｒｙ  Ｗｒｉｔｅかどうか確認する。この処理は、図１２のステップＳ７０−８，９に記されている。
【００９４】
ＥＣＲＣ異常になったリクエストがＭｅｍｏｒｙ  Ｗｒｉｔｅだった場合、プロセッサ２２０は、Ｈｅａｄｅｒ  Ｌｏｇ  Ｒｅｇｉｓｔｅｒ１１−４のＡｄｄｒｅｓｓ３−１−４がＩＯコントローラ２１０のＭＭＩＯ空間３００の範囲内かどうか確認する。この処理は、図１２のステップＳ７０−１０，１１に記されている。
【００９５】
ここで、Ａｄｄｒｅｓｓ３−１−４がＭＭＩＯ空間３００の範囲内だった場合、プロセッサ２２０は、Ａｄｄｒｅｓｓ３−１−４がＭＭＩＯ空間アドレス形式３１０のアドレスと判断して、ＥＣＣ３１０−２と転送空間アドレス形式４１０のアドレスｃに分離する。そして、プロセッサ２２０は、ＥＣＣ３１０−２を用いてアドレスｃに誤りが無いか確認する。この処理は、図１２のステップＳ７０−１２，１３に記されている。
【００９６】
また、プロセッサ２２０は、アドレスｃに誤りがなかった場合、アドレスｃが転送空間のアドレス形式であると判断して、転送空間４００−ｐを求め、転送空間４００−ｐに対応する転送空間−チャネル番号対応表４０−ｐよりチャネル番号４０−ｐ−２を読み出す。この処理は、図１２のステップＳ７０−１４に記されている。
【００９７】
そして、プロセッサ２２０は、チャネル番号４０−ｐ−２に対応するチャネルプログラム管理表３０−ｍのＦｌａｇ３０−ｍ−４に、障害状態を設定する。この処理は、図１２のステップＳ７０−１５に記されている。
【００９８】
なお、ここでは、図１１及び図１２を参照して本発明の特徴の一部を説明した。なお、図１１及び図１２に例示する処理全体についての説明は、後述される。
【００９９】
次に、本発明による入出力処理装置の動作例を、図９、図１０、図１１および図１２を参照して説明する。まず、図９及び図１０を参照して、周辺処理装置２０００，３０００からメインメモリ１３０へデータ転送をする指示を、演算処理装置１１０〜１１３が入出力処理装置２００に行ったときの動作を説明する。
【０１００】
なお、図９に例示する処理の前に、演算処理装置１１０〜１１３は、周辺処理装置２０００，３０００からメインメモリ１３０にデータ転送するためのチャネルプログラム２０を作成して、メインメモリ１３０に格納する。演算処理装置１１０〜１１３は、チャネルプログラム２０を格納したアドレスを指定して入出力処理装置２００にチャネルプログラム２０の実行を指示する。
【０１０１】
そして、入出力処理装置２００が演算処理装置１１０〜１１３よりチャネルプログラムの実行を指示されると、プロセッサ２２０上で動作するファームウェアが、図９及び図１０に例示するチャネルプログラム実行処理を実行する。
【０１０２】
チャネルプログラム実行処理において、まず、プロセッサ２２０は、演算処理装置１１０〜１１３より通知されたアドレスよりチャネルプログラム２０のチャネルプログラムヘッダ２０−０を読み出す（ステップＳ６０−１）。プロセッサ２２０は、チャネルプログラムヘッダ２０−０からチャネル番号２０−０−１を取り出し、対応するチャネルプログラム管理表３０−ｍのチャネルプログラムヘッダアドレス３０−ｍ−１に演算処理装置１１０〜１１３から通知されたアドレスを格納する（ステップＳ６０−２）。
【０１０３】
プロセッサ２２０は、チャネルプログラムヘッダアドレス３０−ｍ−１に１６を加算してチャネルコマンドエントリ２０−１のアドレスを求め、実行中チャネルコマンドエントリアドレス３０−ｍ−２に格納する（ステップＳ６０−３）。
【０１０４】
プロセッサ２２０は、実行中チャネルコマンドエントリ３０−ｍ−２の示すアドレスより、チャネルコマンドエントリ２０−ｎを読み出し、Ｃｏｍｍａｎｄ２０−ｎ−１の内容を確認する（ステップＳ６０−４）。
【０１０５】
Ｃｏｍｍａｎｄ２０−ｎ−１の内容が周辺処理装置２０００，３０００からメインメモリ１３０へのデータ転送指示だった場合（ステップＳ６０−５におけるＹｅｓ）、プロセッサ２２０は、以下の処理を行う。プロセッサ２２０は、データ転送を行うためにＩＯコントローラ２１０の転送制御レジスタ５１０−ｐのＦｌａｇ５１０−ｐ−２を確認し、未使用の転送空間４００−ｐを求める。プロセッサ２２０は、その転送空間４００−ｐのＦｌａｇ５１０−ｐ−２を使用中に設定する（ステップＳ６０−６）。
【０１０６】
プロセッサ２２０は、転送空間４００−ｐに対応する転送空間−チャネル番号管理表４０−ｐのチャネル番号４０−ｐ−２に、チャネル番号２０−０−１を設定し、Ｆｌａｇ４０−ｐ−１を使用中に設定する（ステップＳ６０−７）。そして、プロセッサ２２０は、チャネルプログラム管理表３０−ｍの転送空間番号３０−ｍ−２に、転送空間番号ｐを格納する（ステップＳ６０−８）。
【０１０７】
また、プロセッサ２２０は、メインメモリ１３０にデータ転送するために、チャネルコマンドエントリ２０−ｎのＡｄｄｒｅｓｓ２０−ｎ−４とＣｏｕｎｔ２０−ｎ−３を、それぞれ転送空間４００−ｐに対応する転送制御レジスタ５１０−ｐのＡｄｄｒｅｓｓ５１０−ｐ−１とＣｏｕｎｔ５１０−ｐ−２に格納する。そして、プロセッサ２２０は、Ｆｌａｇ５１０−ｐ−３を転送有効に設定して、データ転送できるようにする（ステップＳ６０−９）。
【０１０８】
プロセッサ２２０は、転送空間のアドレス形式４１０で転送空間４００−ｐの先頭アドレスａを求める。また、プロセッサ２２０は、アドレスａに対する８ｂｉｔ  ＥＣＣ  ｂをＳＥＣＤＥＤ符号で求める。プロセッサ２２０は、ＩＯコントローラ２１０のＭＭＩＯ空間アドレス形式３１０のアドレスになるよう、アドレスａにＥＣＣ  ｂを付加してアドレスｃを求める（ステップＳ６０−１０）。
【０１０９】
プロセッサ２２０は、チャネル番号２０−ｍ−１に対応するＰＣＩｅカード２８０〜２８３にデータ転送先アドレスとしてアドレスｃを設定し、データ転送処理を起動する（ステップＳ６０−１１）。
【０１１０】
以上の処理により、周辺処理装置２０００、３０００からメインメモリ１３０に対するデータ転送が、ＰＣＩｅカード２８０〜２８３によって開始される。
【０１１１】
ＰＣＩｅカード２８０〜２８３は、データ転送が終了すると、ファームウェアに従って実行するプロセッサ２２０に対し、データ転送が終了したことを割込通知する。チャネルプログラム実行処理では、プロセッサ２２０（ファームウェア）が、その割込を待ち合わせる。すなわち、プロセッサ２２０は、データ転送の終了を待ち合わせる（ステップＳ６０−１２）。
【０１１２】
データ転送が終了すると、チャネルプログラム実行処理において、プロセッサ２２０は、ＩＯコントローラ２１０の転送制御レジスタ５１０−ｐにおけるＦｌａｇ５１０−ｐ−２と、転送空間−チャネル番号管理表４０−ｍにおけるＦｌａｇ４０−ｍ−１を未使用状態に設定する（ステップＳ６０−１３）。
【０１１３】
プロセッサ２２０は、チャネルプログラム管理表３０−ｍにおけるＦｌａｇ３０−ｍ−４を読み出し、障害が発生しているか否かを確認する（ステップＳ６０−１４）。ここでは、障害が発生しておらず、Ｆｌａｇ３０−ｍ−４には障害状態が設定されていないとする（ステップＳ６０−１５におけるＮｏ）。この場合、プロセッサ２２０は、チャネルコマンドエントリ２０−ｎのＦｌａｇ２０−ｎ−２を確認して、チャネルプログラム２０が終了したかどうかを確認する（ステップＳ６０−１８）。
【０１１４】
チャネルプログラム２０が終了していない場合（ステップＳ６０−１９におけるＮｏ）、プロセッサ２２０は、チャネルプログラム管理表３０−ｍの実行中チャネルコマンドエントリアドレス３０−ｍ−２に１６を加算した値を格納する（ステップＳ６０−２０）。そして、プロセッサ２２０は、ステップＳ６０−４の処理に戻り、チャネルコマンドエントリ２０−ｎを処理する。
【０１１５】
一方、チャネルプログラム２０が終了している場合（ステップＳ６０−１９におけるＹｅｓ）、プロセッサ２２０は、演算処理装置１１０〜１１３にチャネルプログラム２０の終了を報告する（ステップＳ６０−２１）。
【０１１６】
次に、図１１及び図１２を参照して、周辺処理装置２０００,３０００からメインメモリ１３０にデータ転送している時に、ＰＣＩｅスイッチ２４０でデータ化けが発生し、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１でＥＣＲＣ異常を検出した場合の動作を説明する。
【０１１７】
なお、図１１に例示する処理の前に、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１でＥＣＲＣ異常を検出したとき、ＩＯコントローラ２１０は、割込でそれをプロセッサ２２０（ファームウェア）に、ＥＣＲＣ異常を検出したことを通知する。割込が通知されると、プロセッサ２２０は、ファームウェアに従って、割込処理を実行する。
【０１１８】
まず、プロセッサ２２０は、ＰＣＩｅポート２２０−２のＣｏｎｆｉｇ空間より割込要因を読み出し、その割込要因がＩＯコントローラ２１０のＰＣＩｅポート２１０−１からの障害通知かどうか確認する（ステップＳ７０−１）。これは、Ｒｏｏｔ  Ｅｒｒｏｒ  ＲｅｇｉｓｔｅｒとＥｒｒｏｒ  Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ  Ｒｅｇｉｓｔｅｒの値を確認することで判断できる。
【０１１９】
割込要因がＩＯコントローラ２１０のＰＣＩｅポート２１０−１からの障害通知だった場合（ステップＳ７０−２におけるＹｅｓ）、プロセッサ２２０は、ＰＣＩｅポート２２０−２の障害要因をクリアする（ステップＳ７０−３）。プロセッサ２２０は、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１のＣｏｎｆｉｇ空間よりＵｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ１１−１の値を読み出し、障害要因ｂｘがＥＣＲＣ異常かどうか確認する（ステップＳ７０−４）。
【０１２０】
障害要因ｂｘがＥＣＲＣ異常だった場合（ステップＳ７０−５におけるＹｅｓ）、プロセッサ２２０は、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１のＵｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ１１−１のＥＣＲＣ異常要因をクリアする（ステップＳ７０−６）。
【０１２１】
プロセッサ２２０は、Ｈｅａｄｅｒ  Ｌｏｇ  Ｒｅｇｉｓｔｅｒ１１−４からＦｏｒｍａｔ３−１−１とＴｙｐｅ３−１−２とＡｄｄｒｅｓｓ３−１−４を読み出し（ステップＳ７０−７）、ＥＣＲＣ異常となったリクエストがＭｅｍｏｒｙ  Ｗｒｉｔｅかどうか確認する（ステップＳ７０−８）。
【０１２２】
ＥＣＲＣ異常となったリクエストがＭｅｍｏｒｙ  Ｗｒｉｔｅだった場合（ステップＳ７０−９におけるＹｅｓ）、プロセッサ２２０は、Ａｄｄｒｅｓｓ３−１−４がＩＯコントローラ２１０のＭＭＩＯ空間３００の範囲内か確認する（ステップＳ７０−１０）。
【０１２３】
Ａｄｄｒｅｓｓ３−１−４がＭＭＩＯ空間３００の範囲内だった場合（ステップＳ７０−１１におけるＹｅｓ）、プロセッサ２２０は、ＩＯコントローラ２１０のＭＭＩＯ空間アドレス形式３１０にするため、Ａｄｄｒｅｓｓ３−１−４をＥＣＣ３１０−２と転送空間アドレス形式４１０のアドレスｃに分離する。そして、プロセッサ２２０は、ＥＣＣ３１０−２をもとにアドレスｃに誤りがないか確認する（ステップＳ７０−１２）。
【０１２４】
アドレスｃに誤りがない場合（ステップＳ７０−１３におけるＹｅｓ）、プロセッサ２２０は、アドレスｃから転送空間４００−ｐを求め、その転送空間に対応する転送空間−チャネル番号管理表４０−ｐのチャネル番号４０−ｐ−２から、ＥＣＲＣ異常が検出されたチャネルプログラム２０を実行しているチャネル番号ｍを読み出す（ステップＳ７０−１４）。
【０１２５】
そして、プロセッサ２２０は、チャネル番号ｍに対応するチャネルプログラム管理表３０−ｍのＦｌａｇ３０−ｍ−４に、障害状態を設定する（ステップＳ７０−１５）。プロセッサ２２０は、ステップＳ７０−４に戻る。ここで、障害要因ｂｘがＥＣＲＣ異常でない場合（ステップＳ７０−５におけるＮｏ）、プロセッサ２２０は、他の障害要因ｂｘを確認し、対応する処理を行う（ステップＳ７０−１７）。以後、障害要因が無い場合には、プロセッサ２２０は、割込処理を終了する。
【０１２６】
一方、ステップＳ７０−２において、割込要因がＩＯコントローラ２１０のＰＣＩｅポート２１０−１からの障害通知でなかったとする。この場合（ステップＳ７０−２におけるＮｏ）、プロセッサ２２０は、割込要因ａｘに従って、対応する処理を行う（ステップＳ７０−１６）。以後、障害要因が無い場合には、プロセッサ２２０は、割込処理を終了する。
【０１２７】
また、ステップＳ７０−５において、障害要因ｂｘがＥＣＲＣ異常でなかった場合（ステップＳ７０−５におけるＮｏ）、上述するように、プロセッサ２２０は、障害要因ｂｘに従って対応する処理を行う（ステップＳ７０−１７）。以後、障害要因が無い場合には、プロセッサ２２０は、割込処理を終了する。
【０１２８】
また、ステップＳ７０−９において、ＥＣＲＣ異常となったリクエストがＭｅｍｏｒｙ  Ｗｒｉｔｅでなく（ステップＳ７０−９におけるＮｏ）、または、ステップＳ７０−１１において、Ａｄｄｒｅｓｓ３−１−４がＭＭＩＯ空間３００の範囲内でなく（ステップＳ７０−１１におけるＮｏ）、または、ステップＳ１７−１３においてアドレスｃに誤りがあった（ステップＳ７０−１３におけるＮｏ）とする。この場合、プロセッサ２２０は、いずれも、入出力処理装置２００の障害として処理する（ステップＳ７０−１８，７０−１９，７０−２０）。
【０１２９】
チャネルプログラム実行処理において、ＰＣＩｅカード２８０〜２８３によるデータ転送の完了後、プロセッサ２２０が、チャネルプログラム管理表３０−ｍのＦｌａｇ３０−ｍ−４を確認して、障害が発生したかどうか確認する処理が行われる（ステップＳ６０−１４参照）。
【０１３０】
障害が発生した場合、割込処理によって、ＥＣＲＣ異常となったトランザクションレイヤーパケット３に対応するチャネルプログラム２０の実行を管理するチャネルプログラム管理表３０−ｍのＦｌａｇ３０−ｍ−４に障害状態が設定されている。そのため、プロセッサ２２０は、障害発生を認識できる（ステップＳ６０−１５参照）。
【０１３１】
プロセッサ２２０は、チャネルプログラム管理表３０−ｍのチャネルプログラムヘッダアドレス３０−ｍ−１に１６を加算したアドレスを実行中チャネルコマンドエントリアドレス３０−ｍ−２に格納してＦｌａｇ３０−ｍ−４をクリアする。その後、ステップ６０−４に戻って、プロセッサ２２０が、チャネルプログラム２０を再実行することで、パケット転送時にＥＣＲＣ異常が検出された場合であっても、障害の影響を局所的な範囲に抑制できる。
【０１３２】
以上のように、本実施形態によれば、入出力処理装置は、転送空間４００−ｐと、ＭＭＩＯ空間３００とを備える。転送空間４００−ｐは、データ転送処理を実行するチャネルプログラムが割り当てられる領域を有する。また、ＭＭＩＯ空間３００は、転送空間４００−ｐのアドレスにＥＣＣを付加した情報（アドレス検証情報）を記憶する領域を有する。
【０１３３】
そして、プロセッサ２２０は、ＰＣＩｅカード２８０〜２８３に対し、ＭＭＩＯ空間３００のアドレスを、ＥＣＲＣが付与された受信データのトランザクションレイヤーパケット３におけるＡｄｄｒｅｓｓ３−１−４に設定させる。具体的には、プロセッサ２２０は、転送空間４００−ｐのアドレスに、そのアドレスに対するＥＣＣを付加してＭＭＩＯ空間３００のアドレスにする。このアドレスをＰＣＩｅカード２８０〜２８３に設定してデータ転送を行うことになる。
【０１３４】
プロセッサ２２０は、受信データに設定されたＭＭＩＯ空間３００のアドレスからアドレス検証情報（すなわち、転送空間４００−ｐのアドレスとＥＣＣ）を特定する。プロセッサは、そのアドレス検証情報からＥＣＣを削除して、転送空間４００−ｐのプログラムを特定することにより、受信データのデータ転送処理を実行する。
【０１３５】
ここで、プロセッサ２２０（具体的には、ＩＯコントローラ２１０）が、受信データのＥＣＲＣ異常を検出したとき、その受信データに設定されたＭＭＩＯ空間３００のアドレスから特定されるアドレス検証情報から、転送空間４００−ｐのアドレスの正当性を検証する。
【０１３６】
以上のような構成により、パケット転送時にＥＣＲＣ異常が検出された場合であっても、障害の影響を局所的な範囲に抑制できる。
【０１３７】
すなわち、本実施形態では、周辺処理装置２０００，３０００からメインメモリ１３０へデータ転送する際、プロセッサ２２０が、ＰＣＩｅカード２８０〜２８３で設定する転送アドレスにＥＣＣを付加する。そのため、ＩＯコントローラ２１０のＰＣＩｅポート２１０−１でＥＣＲＣ異常となったとしても、Ｈｅａｄｅｒ  Ｌｏｇ  Ｒｅｇｉｓｔｅｒ１１−４に格納されたＡｄｄｒｅｓｓ３−１−４のＥＣＣを確認することでＡｄｄｒｅｓｓ３−１−４の正当性を検証できる。
【０１３８】
また、例えば、一般的な方法を用いた場合、仮にＡｄｄｒｅｓｓ３−１−４が正常であったとしても、複数のチャネルプログラム２０がメインメモリ１３０の同一アドレスにデータ転送を行っていた場合、Ａｄｄｒｅｓｓ３−１−４に対応したチャネルプログラム２０を特定できない。そのため、プログラムのリトライ処理で救済することもできない。
【０１３９】
しかし、本実施形態では、ＩＯコントローラ２１０の転送空間４００を複数の転送空間４１０−ｐに分割し、チャネルプログラムごとに転送空間４１０−ｐを割り当てる。そのため、正常なＡｄｄｒｅｓｓ３−１−４をもとにＥＣＲＣ異常となったチャネルプログラム２０を特定できるようになる。よって、ＥＣＲＣ異常が検知されても、チャネルプログラム２０を再実行できるため、情報処理装置１０００全体の障害とせずにデータ転送処理を救済できる。
【０１４０】
次に、本発明の概要を説明する。図１３は、本発明による入出力処理装置の概要を示すブロック図である。本発明による入出力処理装置は、データ転送処理を実行するプログラム（例えば、チャネルプログラム２０）が割り当てられる転送領域を有する処理記憶手段８１（例えば、転送空間４００）と、転送領域を示すアドレス（例えば、アドレス形式４１０）にそのアドレスの誤り訂正符号（例えば、ＥＣＣ３１０−２）を付加したアドレス検証情報を記憶する検証領域を有するアドレス記憶手段８２（例えば、ＭＩＭＯ空間３００）と、検証領域を示すアドレスを、終端間巡回冗長検査符号（ＥＣＲＣ）が付与された受信データの転送先アドレス（例えば、Ａｄｄｒｅｓｓ３−１−４）に設定するアドレス設定手段８３（例えば、プロセッサ２２０，ＰＣＩｅカード２８０〜２８３）と、受信データに設定された検証領域を示すアドレスからアドレス検証情報を特定し、そのアドレス検証情報から誤り訂正符号を削除して転送領域のプログラムを特定することにより、受信データのデータ転送処理を実行するデータ転送制御手段８４（例えば、プロセッサ２２０）と、受信データに付与された終端間巡回冗長検査符号（ＥＣＲＣ）の異常を検出する異常検出手段８５（例えば、ＩＯコントローラ２１０）とを備えている。
【０１４１】
データ転送制御手段８４は、受信データの終端間巡回冗長検査符号に異常が検出されたときに、その受信データに設定された検証領域を示すアドレスから特定されるアドレス検証情報から、転送領域のアドレスの正当性を検証する。
【０１４２】
そのような構成により、パケット転送時にＥＣＲＣ異常が検出された場合であっても、障害の影響を局所的な範囲に抑制できる。
【０１４３】
具体的には、データ転送制御手段８４は、受信データの終端間巡回冗長検査符号に異常が検出されたときに、その受信データに設定された検証領域を示すアドレスが検証領域を示す所定の範囲内であった場合に、その検証領域を示すアドレスからアドレス検証情報を特定してもよい。
【０１４４】
そして、データ転送制御手段８４は、特定したアドレス検証情報に含まれる誤り訂正符号を用いて転送領域のアドレスの正当性を検証してもよい。
【０１４５】
また、処理記憶手段８１は、転送プログラムごとに割り当てられた転送領域を有していてもよい。そして、データ転送制御手段８４は、正当性が検証された転送領域のアドレスから特定される転送プログラムに従って、受信データのデータ転送処理を再実行してもよい。
【０１４６】
このような構成によれば、正常と判断された転送領域のアドレスをもとにＥＣＲＣ異常となった転送プログラム（チャネルプログラム）を特定できる。そして、ＥＣＲＣ異常が検知されても転送プログラム（チャネルプログラム）を再実行できるため、情報処理装置全体の障害とせずにデータ転送処理を救済できる。
【０１４７】
また、入出力処理装置は、受信データに終端間巡回冗長検査符号を付与する符号付与手段（例えば、ＰＣＩｅカード２８０〜２８３）を備えていてもよい。
【符号の説明】
【０１４８】
１００  中央処理装置
１１０〜１１３  演算処理装置
１２０  メモリコントローラ
１３０  メインメモリ
２００  入出力処理装置
２１０  ＩＯコントローラ
２２０  プロセッサ
２３０  ローカルメモリ
２４０  ＰＣＩｅスイッチ
２８０〜２８３  ＰＣＩｅカード
３００  ＭＭＩＯ空間
４００  転送空間
１０００  情報処理装置
２０００，３０００  周辺処理装置
【図１】
2014182675.tif 000003
【図２】
2014182675.tif 000004
【図３】
2014182675.tif 000005
【図４】
2014182675.tif 000006
【図５】
2014182675.tif 000007
【図６】
2014182675.tif 000008
【図７】
2014182675.tif 000009
【図８】
2014182675.tif 000010
【図９】
2014182675.tif 000011
【図１０】
2014182675.tif 000012
【図１１】
2014182675.tif 000013
【図１２】
2014182675.tif 000014
【図１３】
2014182675.tif 000015
【図１４】
2014182675.tif 000016
【図１５】
2014182675.tif 000017
【図１６】
2014182675.tif 000018
【図１７】
2014182675.tif 000019
【図１８】
2014182675.tif 000020
【図１９】
2014182675.tif 000021
【図２０】
2014182675.tif 000022
【図２１】
2014182675.tif 000023
【図２２】
2014182675.tif 000024