(57)【特許請求の範囲】
【請求項１】
プログラム及びデータを格納するメモリと、
前記メモリに格納されたプログラムを読み出して実行するプロセッサと、
所定の装置からデータを読み出して前記メモリに書き込み、前記メモリからデータを読み出して前記所定の装置に書き込む接続装置と、
前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記所定の装置から読み出された後、前記メモリに書き込まれる前に当該データから所定の方法で第１のチェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記メモリから読み出された後、前記所定の装置に書き込まれる前に当該データから前記所定の方法で第２のチェックコードを生成するチェックコード生成回路と、
前記接続装置が前記所定の装置から読み出して前記メモリに書き込んだ当該メモリ上の前記データから前記所定の方法でチェックコードを生成し、当該チェックコードと前記第１のチェックコードとを比較して双方が一致するか否かを判定し、前記接続装置が前記メモリから読み出して前記所定の装置に書き込む前記メモリ上の前記データから前記所定の方法でチェックコードを生成し、当該チェックコードと前記第２のチェックコードとを比較して双方が一致するか否かを判定するデータエラーチェック手段とを有する計算機。
【請求項２】
前記データエラーチェック手段は、前記プログラムに含まれ、前記プロセッサによって実行されることにより実現されることを特徴とする請求項１に記載の計算機。
【請求項３】
前記メモリ及びプロセッサはシステムバスに接続され、前記接続装置及びチェックコード生成回路は当該システムバスとは異なる規格に則った入出力バスに接続され、
前記チェックコード生成回路は、前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成することを特徴とする請求項１又は２に記載の計算機。
【請求項４】
所定の装置から読み出されて計算機のメモリに書き込まれた前記メモリ上のデータから所定の方法でチェックコードを生成し、当該チェックコードと、当該データが前記所定の装置から読み出された後、前記メモリに書き込まれる前に当該データから前記所定の方法で生成されるチェックコードとを比較して双方が一致するか否かを判定する手段と、
前記メモリから読み出され前記所定の装置に書き込まれる前記メモリ上の前記データから前記所定の方法でチェックコードを生成し、当該チェックコードと、当該データが前記メモリから読み出された後、前記所定の装置に書き込まれる前に当該データから前記所定の方法で生成されるチェックコードとを比較して双方が一致するか否かを判定する手段として前記計算機を機能させるプログラム。
【請求項５】
前記計算機は、プログラム及びデータを格納するメモリと、
前記メモリに格納されたプログラムを読み出して実行するプロセッサと、
前記所定の装置からデータを読み出して前記メモリに書き込み、前記メモリからデータを読み出して前記所定の装置に書き込む接続装置と、
前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記メモリに書き込まれる前に当該データから所定の方法でチェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記所定の装置に書き込まれる前に当該データから前記所定の方法でチェックコードを生成するチェックコード生成回路とを有し、
前記メモリ及びプロセッサはシステムバスに接続され、前記接続装置及びチェックコード生成回路は当該システムバスとは異なる規格に則った入出力バスに接続され、
前記チェックコード生成回路は、前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成することを特徴とすることを特徴とする請求項４に記載のプログラム。
【請求項６】
第１のエラーチェック手段が、所定の装置から読み出されて当該計算機のメモリに書き込まれた前記メモリ上のデータから所定の方法でチェックコードを生成し、当該チェックコードと、当該データが前記所定の装置から読み出された後、前記メモリに書き込まれる前に当該データから前記所定の方法で生成されたチェックコードとを比較して双方が一致するか否かを判定するステップと、
第２のエラーチェック手段が、前記メモリから読み出され前記所定の装置に書き込まれる前記メモリ上の前記データから前記所定の方法でチェックコードを生成し、当該チェックコードと、当該データが前記メモリから読み出された後、前記所定の装置に書き込まれる前に当該データから前記所定の方法で生成されたチェックコードとを比較して双方が一致するか否かを判定するステップとを有する計算機の制御方法。
【請求項７】
前記計算機は、プログラム及びデータを格納するメモリと、
前記メモリに格納されたプログラムを読み出して実行するプロセッサと、
前記所定の装置からデータを読み出して前記メモリに書き込み、前記メモリからデータを読み出して前記所定の装置に書き込む接続装置と、
前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記メモリに書き込まれる前に当該データから所定の方法でチェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記所定の装置に書き込まれる前に当該データから前記所定の方法でチェックコードを生成するチェックコード生成回路とを有し、
前記メモリ及びプロセッサはシステムバスに接続され、前記接続装置及びチェックコード生成回路は当該システムバスとは異なる規格に則った入出力バスに接続され、
前記チェックコード生成回路は、前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成することを特徴とすることを特徴とする請求項６に記載の計算機の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は計算機、プログラム、及び計算機の制御方法に関する。
【背景技術】
【０００２】
計算機システム内のバス通信の信頼性向上を図るための誤り検出手段として、ＣＲＣ(Cyclic Redundancy Check)方式を備えたバスを採用することにより、膨大な量のデータを扱う高信頼性システムを構築することを目的としたバス通信手段が知られている。
【０００３】
又、以下の構成の計算機が知られている。すなわち、ソースデータからディスク装置に書き込むライトデータ及びディスク装置から読み出す同一のデータからチェックサムを生成する。又は、ディスク装置から読み出しソースデータとしたリードデータ及びその後ディスク装置から読み出す同一のデータからチェックサムを生成する。そして同一のライトデータ又は同一のリードデータから生成したチェックサム同士を比較してデータの正当性を保証する。
【０００４】
又、あらゆる生成多項式及び入力データ幅に対応してＣＲＣ符号を生成することのできる汎用性のあるプログラマブル並列ＣＲＣ生成装置が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平６−１２２６９号公報
【特許文献２】特開平１０−４０１２２号公報
【特許文献３】特開平７−９５０９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
計算機内のデータにおけるエラーの検出を効果的に実行し得る構成を提供することが目的である。
【課題を解決するための手段】
【０００７】
本発明の実施例によれば、所定の装置から読み出されてメモリに書き込まれるデータのメモリへの書き込み前と書き込み後の夫々のデータから生成されたチェックコードを比較して一致するか否かを判定する。又、メモリから読み出されて所定の装置へ書き込まれるデータのメモリからの読み出し前と読み出し後の夫々のデータから生成されたチェックコードを比較して一致するか否かを判定する。
【発明の効果】
【０００８】
計算機内のデータにおけるエラーの検出を効果的に実行し得る構成を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】参考例の計算機の構成例を示すブロック図である。
【図２】図１に示す計算機における指示の流れの例を説明するための図である。
【図３】本発明の実施例１による計算機の構成例を示すブロック図である。
【図４】図３に示されるホストバスアダプタの構成例を示すブロック図である。
【図５】図３に示す計算機における指示の流れの例を説明するための図である。
【図６】図３に示す計算機において外部記憶装置からデータを読み出す際の動作の流れの例を説明するための図である。
【図７】図３に示す計算機において外部記憶装置へデータを書き込む際の動作の流れの例を説明するための図である。
【図８】図３に示す計算機が有するファイバチャネルドライバの構成例を説明するためのブロック図である。
【図９】図８に示すファイバチャネルドライバの、外部記憶装置からデータを読み出す際の動作の流れの例を説明するための図である。
【図１０】図８に示すファイバチャネルドライバの、外部記憶装置へデータを書き込む際の動作の流れの例を説明するための図である。
【図１１】図４に示すチェックコード計算回路の構成例を示すブロック図である。
【図１２】本発明の実施例１におけるＤＭＡ転送情報データ構造体の構成例を説明するため図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施例について説明を行う。
【実施例１】
【００１１】
本発明の実施例１は、ＩＯ(Input Output)バスを使用して所定の装置からデータを読み出し、所定の装置にデータを書き込むハードウェアと、当該ハードウェアを制御するソフトウェアとを有する計算機(Computer)に関する。
【００１２】
近年、基幹システム等で使用される計算機では、ハードウェアに故障が生じた場合であっても、データの正当性を保証することができるような高い信頼性が求められている。
【００１３】
本発明の実施例１は、例えばＰＣＩ(Peripheral Component Interconnect)バス等の、データの正当性(integrity)を保証するためのチェックコードを付与しないＩＯバスのホストバスアダプタ(Host Bus Adapter)を有する計算機に係る。ここでチェックコードとは、例えばチェックサム、ＣＲＣコード（ＣＲＣ方式によって生成される検査データ）等、データの誤りを検出するために生成される情報を言う。本発明の実施例１によれば、このような計算機において、ＩＯバスを使用したデータの読み出し及びデータの書き込みを監視し、ＩＯバス上の当該データからチェックコードを生成する回路を設ける。更に、メモリ上の同一のデータからチェックコードを生成するとともに、当該チェックコードと上記チェックコードを生成する回路によって生成されたチェックコードとを比較し、双方が一致するか否かを判定する機能を提供するソフトウェアを設ける。本発明の実施例１によれば、このようにして計算機内のデータの正当性を保証する。
【００１４】
以下、説明の便宜上、本発明の実施例１の詳細な説明の前に、参考例の計算機につき、図１，図２とともに説明する。
【００１５】
図１の計算機１００は、プロセッサ１１−１，１１−２，...、メモリ１２，ホストバスブリッジ(Host Bus Bridge)１３及びホストバスアダプタ(Host Bus Adapters)１１４−１，１１４−２を有する。ホストバスブリッジ１３は、プロセッサ１１−１，１１−２，...及びメモリ１２が接続されるシステムバス１５と、ＩＯバス１６との相互間でのデータの転送が可能なように相互間を中継する機能を提供する。ホストバスアダプタ１１４−１，１１４−２は、ＩＯバス１６のスロット等に搭載され、計算機１００を外部記憶装置２０、ネットワーク等と接続するための機能を提供する。
【００１６】
計算機１００には、外部記憶装置（ＲＡＩＤ(Redundant Arrays of Inexpensive Disks)、テープライブラリ等）２０及びネットワーク等（図１中、「外部ネットワーク等」）が接続される。計算機１００と外部記憶装置２０とは、ＳＣＳＩ(Small Computer System Interface)、ファイバチャネル（fibre channel）、ＬＡＮ(Local Area Network)等のケーブルによって接続される。
【００１７】
又、計算機１００は、ホストバスアダプタ１１４−１，１１４−２を動作させるためのコンピュータプログラム（デバイスドライバ）Ｄ１１、オペレーティングシステム（Operating System: OS）Ｓ１、並びにＯＳ，Ｓ１上で動作するアプリケーションＡ１を有する。
【００１８】
図１中、プロセッサ（中央処理装置）１１−１，１１−２，...は、ＯＳ，Ｓ１，アプリケーションＡ１、デバイスドライバＤ１１等の各種ソフトウェアを実行する。又、ＯＳ，Ｓ１，アプリケーションＡ１、デバイスドライバＤ１１等の各種ソフトウェアや当該ソフトウェアが使用する各種データはメモリ（主記憶装置）１２上に展開され、プロセッサ１１−１，１１−２，...によって読み書きされる。
【００１９】
図１の計算機１００では、ソフトウェア（アプリケーションＡ１、ＯＳ，Ｓ１，デバイスドライバＤ１１等）の指示により、アプリケーションＡ１やＯＳ、Ｓ１が使用するデータが転送される。具体的には、図２に示す如く、アプリケーションＡ１がデータの読み書きの要求を発行すると、ＯＳ，Ｓ１が当該要求を受け取り、対応する要求をデバイスドライバＤ１１に対し発行する。デバイスドライバＤ１１は当該要求を受け、ホストバスアダプタ１１４−１，１１４−２に対し、アクセス要求を発行する。ホストバスアダプタ１１４−１，１１４−２が当該要求に応じ、外部記憶装置２０に対し、或いはネットワークを介した外部の装置（図示を省略）に対し、データの読み書きを行う。
【００２０】
ここでホストバスアダプタ１１４−１による外部記憶装置２０との間のデータの読み書きは、例えば、ＤＭＡ(Direct Memory Access)方式にしたがって実行される。すなわち、デバイスドライバＤ１１の指示により、プロセッサ１１−１，１１−２，...を介さず、外部記憶装置２０とメモリ１３との間でデータ転送（ＤＭＡ転送）が実行される。
【００２１】
図１の計算機１００中、システムバス１５を転送されるデータは、例えばＥＣＣ(Error Check and Correct)機能によって保護されている。ＩＯバス（ＰＣＩバス等）１６を転送されるデータはパリティチェック方式による保護がなされる。しかしながらパリティチェック方式による保護では、転送されるデータ中、１ビットの反転の検出が可能であるが、複数ビットが反転した場合、当該エラーが検出されず、以降そのまま処理が続行されてしまう場合が想定される。
【００２２】
本発明の実施例１では、このように、転送されるデータにおけるエラーが検出されないおそれがあるＩＯバス１６において、システムバス１５に対するものと同等のデータの保護を実現し、ＩＯバス１６を転送されるデータの信頼性を向上させる。
【００２３】
この目的の達成のため、本発明の実施例１では、ＩＯバス１６を転送されるデータのエラーを検出するためのチェックコードの生成を、ハードウェアとソフトウェアとの双方で行う。そしてハードウェアで生成されたチェックコードとソフトウェアで生成されたチェックコードとを比較することにより、ＩＯバスを転送されるデータの正当性を保証する。より具体的には、計算機に対するデータの入出力部分であるホストバスアダプタ（ハードウェア）とデバイスドライバ（ソフトウェア）との双方でチェックコードを生成し、デバイスドライバがこれらのチェックコードの比較対照を行う。ここで、ホストバスアダプタはＩＯバス１６上のデータからチェックコードを生成し、デバイスドライバはメモリ１２上のデータからチェックコードを生成する。このため、当該比較対照の結果、双方が生成したチェックコードが相互に一致することを確認することにより、メモリ１２とホストバスアダプタとの間でデータの正当性を保証することができる。
【００２４】
すなわち本発明の実施例１によれば、ホストバスアダプタ内に設けられた後述するチェックコード計算回路が、ＩＯバスを転送されるデータのうち、当該ホストバスアダプタとメモリ１２との間を転送されるデータのデータ転送の単位毎にチェックコードを計算する。チェックコードとしては、上記の如く、チェックサム、ＣＲＣコード等を適用することができる。そしてホストバスアダプタ（ハードウェア）を制御するデバイスドライバ（ソフトウェア）が、データのデータ転送単位毎に、メモリ１２上のデータからチェックコードを計算する。そしてデバイスドライバは、自己が計算したチェックコードと、チェックコード計算回路が計算したチェックコードとを比較対照し、一致、不一致を判定する。比較対照の結果が不一致であった場合、所定のエラー処理を行うことにより、データの内容に異常が生じたことを報告する。その結果、データの正当性を保証することができる。
【００２５】
このような本発明の実施例１は、以下の効果を奏する。ここで、例えば、データがＩＯバス１６を転送されメモリに書き込まれる際、ホストバスアダプタ上では正常なデータがＩＯバス１６上の転送中あるいはホストバスブリッジ内部でエラーが生じた場合を想定する。又、当該エラーが、複数ビットの反転のエラーであって、ＩＯバス１６のパリティチェック等ではエラー検出できず、システムバス１５が有するＥＣＣ機能ではエラーが検出されない態様であったとする。この場合、メモリ１２側と、ホストバスアダプタ側とでは、当該エラーの故に、データの内容が相互に不一致となる。したがってホストバスアダプタ内のチェックコード計算回路がホストバスアダプタを通過するデータから計算したチェックコードと、メモリ１２上のデータからデバイスドライバが計算したチェックコードとは、相互に一致しない。したがって双方の比較対照の結果、不一致の結果がられ、エラーが検出される。したがって不正なデータの存在を検出することができ、ＩＯバス１６とメモリ１２との間に亘る広範囲なデータの正当性の保証が可能となる。
【００２６】
ここで、ホストバスアダプタとメモリ１２との間のデータ転送量に着目する。そうすると、デバイスドライバがチェックコードの比較対照を行う際、ホストバスアダプタ内のチェックコード計算回路が計算して格納したチェックコードを読み出す処理を除くと、データ転送回数は増加しない。よって、チェックコード計算回路によるチェックコードの計算及び格納、デバイスドライバによるチェックコードの計算、及び当該チェックコードとチェックコード計算回路が計算したチェックコードとの比較対照の処理が計算機の性能に対し及ぼす影響は小さい。
【００２７】
更に、チェックコードは、一方ではホストバスアダプタを通過するデータからチェックコード計算回路が計算し、もう一方ではデバイスドライバがメモリ１２上のデータから計算する。したがってホストバスアダプタとメモリ１２との間のバス上に別途ハードウェアを設けてチェックコードの処理を行う場合と比較すると、ホストバスアダプタとメモリ１２との間で、エンドツーエンドのデータの保証が可能となり、信頼性が向上する。
【００２８】
尚、上の説明及び以下に行う説明ではチェックコード計算回路はホストバスアダプタ内に設ける例を説明するが、この例に限定されることはない。すなわち、チェックコード計算回路は、ホストバスアダプタを通過するデータの入出力を監視し、当該データからチェックコードを計算する構成を有する限り、当該ホストバスアダプタの外部に設けてもよい。
【００２９】
次に図とともに、本発明の実施例１の詳細な説明を行う。図３は、本発明の実施例１の計算機１０を示す。当該計算機１０は、図１とともに上述した参考例の計算機１００と略同様の構成を有する。したがって同一の構成要素には同一の符号を付し、適宜重複する説明を省略する。本発明の実施例１の計算機１０では、ホストバスアダプタ１４−１，１４−２が、夫々、計算機１００におけるホストバスアダプタ１１４−１，１１４−２と異なる。更に、当該ホストバスアダプタ１４−１，１４−２を制御するデバイスドライバＤ１が、計算機におけるデバイスドライバＤ１１と異なる。
【００３０】
尚、以下の説明では、主に、計算機１０を外部記憶装置２０に接続するホストバスアダプタ１４−１及び、デバイスドライバＤ１のうち、当該ホストバスアダプタ１４−１の動作を制御するデバイスドライバＤ１−１について説明する。しかしながら、計算機１０をネットワーク等に接続するホストバスアダプタ１４−２及び、デバイスドライバＤ１のうち、当該ホストバスアダプタの動作を制御するデバイスドライバも、ホストバスアダプタ１４−１及びデバイスドライバＤ１−１と夫々同様の機能を有する。すなわち、ホストバスアダプタ内のチェックコード計算回路がホストバスアダプタを通過するデータのチェックコードを計算して格納する。又、デバイスドライバはメモリ１２上の同一のデータのチェックコードを計算し、チェックコード計算回路が計算したチェックコードと比較対照し、一致、不一致を判定する。そして判定結果が不一致の場合、所定のエラー処理を行い、データが不正であることを報告する。
【００３１】
図３の計算機１０のホストバスアダプタ１４−１、１４−２は、計算機１０を、夫々、外部記憶装置２０及びネットワーク等（図中、「外部ネットワーク等」）と接続するハードウェアである。特に外部記憶装置２０と接続するホストバスアダプタ１４−１は、当該実施例１の場合、ファイバチャネルアダプタである。したがって以後、ホストバスアダプタ１４−１のことをファイバチャネルアダプタ１４−１と称する場合がある。ファイバチャネルアダプタ１４−１には、ファイバチャネルコントローラ１４−１ａ（図４参照）が含まれる。ファイバチャネルコントローラ１４−１ａは、ＩＯバス１６と外部記憶装置２０とを接続する。ファイバチャネルコントローラ１４−１ａは、対応するデバイスドライバＤ１−１からの指示により、ＤＭＡ方式にしたがったデータ転送（ＤＭＡ転送）を実行する。
【００３２】
又、図４に示す如く、実施例１では、ファイバチャネルアダプタ１４−１中に、ハードウェアであるチェックコード計算回路１４−１ｂを設ける。チェックコード計算回路１４−１ｂは、ファイバチャネルコントローラ１４−１ａに接続するＩＯバス１６上のデータの入出力を常時監視し、当該データのチェックコードを計算する。チェックコード計算回路１４−１ｂは、例えばＦＰＧＡ(Field Programmable Gate Array)によって形成される。チェックコード計算回路１４−１ｂは、ファイバチャネルコントローラ１４−１ａにＩＯバス１６から入力されるデータのデータ転送単位毎にチェックコードを計算し、計算したチェックコードをレジスタに格納する。同様にチェックコード計算回路１４−１ｂは、ファイバチャネルコントローラ１４−１ａからＩＯバス１６へ出力されるデータのデータ転送単位毎にチェックコードを計算し、計算したチェックコードをレジスタに格納する。当該チェックコードを格納するレジスタは、デバイスドライバＤ１−１からアクセス可能な構成を有する。
【００３３】
チェックコード計算回路１４−１ｂは、図４に示す如く、ＩＯバス１６を転送されるデータのチェックコードを計算するチェックコード計算部１４−１ｂ−２，及び計算したチェックコードを格納するチェックコード計算結果レジスタＲ３を有する。チェックコード計算回路１４−１ｂは更に、ファイバチャネルコントローラ１４−１ａがＤＭＡ方式で転送するデータの転送開始アドレスを格納するＤＭＡ開始アドレスレジスタＲ１を有する。尚、ＤＭＡ方式で転送するデータの転送開始アドレスは、ＤＭＡ転送データが配置されるメモリの開始アドレスを示す。チェックコード計算回路１４−１ｂは更に、ファイバチャネルコントローラ１４−１ａがＤＭＡ方式で転送するデータのデータ長を格納するＤＭＡデータ長レジスタＲ２を有する。ＤＭＡ方式で転送するデータのデータ長は、一度のＤＭＡ転送で転送するデータのデータ長である。チェックコード計算回路１４−１ｂの構成につき、更に図１１とともに詳述する。
【００３４】
又、図５に示す如く、計算機１０でも計算機１００同様、アプリケーションＡ１がデータの読み書きの要求を発行すると、ＯＳ，Ｓ１が当該要求を受け取り、対応する要求をデバイスドライバＤ１−１に対し発行する。尚、図５の場合、説明の便宜上、特にファイバチャネルアダプタ１４−１を制御するデバイスドライバＤ１−１についてのみ記載している。デバイスドライバＤ１−１は当該要求を受け、ファイバチャネルアダプタ１４−１に対し、アクセス要求を発行する。ファイバチャネルアダプタ１４−１は当該要求に応じ、外部記憶装置２０に対し、データの読み書きを行う。
【００３５】
このようにデバイスドライバＤ１−１は、図５に示す如く、ハードウェアであるファイバチャネルアダプタ１４−１と、ＯＳ，Ｓ１との間の中間層に位置し、ＯＳ，Ｓ１の指示によってファイバチャネルアダプタ１４−１に対し、データ転送（ＤＭＡ起動）指示を行う。そしてデバイスドライバＤ１−１は、メモリ１２とファイバチャネルアダプタ１４−１との間のデータ転送を制御する。
【００３６】
更にデバイスドライバＤ１−１は、外部記憶装置２０からデータを読み出す際（図６とともに後述）には、データ転送の後に、メモリ１２上の当該データ転送に係るデータのチェックコードを計算する。又、デバイスドライバＤ１−１は、外部記憶装置２０へデータを書き込む際（図７とともに後述）には、データ転送の前に、メモリ１２上の当該データ転送に係るデータのチェックコードを計算する。更にデバイスドライバＤ１−１は、ファイバチャネルアダプタ１４−１のチェックコード計算回路１４−１ｂを制御し、又、チェックコード計算回路１４−１ｂが計算して格納したチェックコードを読み出して自己が計算したチェックコードと比較対照する。
【００３７】
次に図６とともに、計算機１０が外部記憶装置２０からファイバチャネルアダプタ１４−１経由でデータを読み出す、すなわち、ファイバチャネルアダプタ１４−１経由でデータをメモリ１２に書き込む際の動作の詳細について説明する。
【００３８】
ステップＳ１で、アプリケーションＡ１は、ＯＳ，Ｓ１経由でデバイスドライバＤ１−１に対し、ファイバチャネルコントローラ１４−１ａ経由で外部記憶装置２０からデータの読み出しを指示する。
【００３９】
次にステップＳ２で、デバイスドライバＤ１−１は、ファイバチャネルアダプタ１４−１のチェックコード計算回路１４−１ｂのＤＭＡ開始アドレスレジスタＲ１に対し、上記ＤＭＡ転送の対象データの転送開始アドレスを書き込む。又、チェックコード計算回路１４−１ｂのＤＭＡデータ長レジスタＲ２に、上記ＤＭＡ転送の対象データのデータ長を書き込む。チェックコード計算回路１４−１ｂは、書き込まれたＤＭＡ開始アドレスの値にＤＭＡデータ長を加算することにより、上記ＤＭＡ転送の対象データの転送終了アドレスを得る。ＤＭＡ転送の対象データの転送終了アドレスとは、一度のＤＭＡ転送で転送するデータの最後のデータのアドレスである。チェックコード計算回路１４−１ｂは、次のステップＳ３にて、このようにして得られた上記ＤＭＡ転送の対象データの転送開始アドレス及び転送終了アドレスを使用する。すなわち、当該ＤＭＡ転送の対象データの転送開始アドレス及び転送終了アドレスと、ファイバチャネルコントローラ１４−１ａとＩＯバス１６との接続点を通るアドレス情報が示すアドレスとを比較対照する。
【００４０】
次にステップＳ３で、デバイスドライバＤ１−１は、ファイバチャネルコントローラ１４−１ａに対し、上記ＤＭＡ転送の開始を指示する。これを受けてファイバチャネルコントローラ１４−１ａは、ＤＭＡ転送を開始する。当該ＤＭＡ転送の開始後、チェックコード計算回路１４−１ｂは以下の動作を行う。すなわち、ファイバチャネルコントローラ１４−１ａとＩＯバス１６との接続点を流れるアドレス情報が示すアドレスが、「上記ＤＭＡ転送の対象データの転送開始アドレス」〜「上記ＤＭＡ転送の対象データの転送終了アドレス」の範囲内にあるか否かを常に監視する。そしてチェックコード計算回路１４−１ｂは、上記接続点を流れるアドレス情報が示すアドレスが、「上記ＤＭＡ転送の対象データの転送開始アドレス」〜「上記ＤＭＡ転送の対象データの転送終了アドレス」の範囲内にある場合、当該アドレス情報に引き続いて転送されるデータを取得する。そして取得したデータのチェックコードを計算し、計算したチェックコード（図６中、「チェックコードＢ」）をチェックコード計算結果レジスタＲ３に格納する。尚、上記チェックコード計算回路１４−１ｂによるチェックコードの計算では、当該ＤＭＡ転送の対象データの全体について１つのチェックコードＢを得る。
【００４１】
次にステップＳ４で、ファイバチャネルコントローラ１４−１ａは上記ＤＭＡ転送が終了すると、デバイスドライバＤ１−１に対し割り込みを実行し、ＤＭＡ転送の完了を通知する。
【００４２】
次にステップＳ５で、デバイスドライバＤ１−１は、当該ＤＭＡ転送によってメモリ１２に書き込まれたデータを読み出し、当該データのチェックコード（図６中、「チェックコードＡ」）を計算する。ここでも上記チェックコード計算回路１４−１ｂによるチェックコードの計算同様、当該ＤＭＡ転送の対象データの全体について１つのチェックコードＡを得る。
【００４３】
次にステップＳ６で、デバイスドライバＤ１−１は、チェックコード計算回路１４−１ｂのチェックコード計算結果レジスタＲ３からチェックコードＢを読み出す。
【００４４】
次にステップＳ７で、デバイスドライバＤ１−１は、上記チェックコードＡとチェックコードＢとを比較対照する。
【００４５】
次にステップＳ８で、ステップＳ７の比較対照の結果が（上記チェックコードＡとチェックコードＢとが）「一致」なら、ＯＳ，Ｓ１に対し、転送されたデータが正当である旨を通知（正常応答）し、ＯＳ，Ｓ１は以降の処理を続行する。他方、ステップＳ７の比較対照の結果が「不一致」なら、ＯＳ，Ｓ１に対し、転送されたデータが正当でない（不正である）旨を通知（エラー応答）する。
【００４６】
次に図７とともに、計算機１０が外部記憶装置２０へファイバチャネルアダプタ１４−１経由でデータを書き込む、すなわち、ファイバチャネルアダプタ１４−１経由でデータをメモリ１２から読み出す際の動作の詳細について説明する。
【００４７】
ステップＳ２１で、アプリケーションＡ１は、ＯＳ，Ｓ１経由でデバイスドライバＤ１−１に対し、ファイバチャネルコントローラ１４−１ａ経由で、メモリ１２からデータの読み出しを指示する。
【００４８】
次にステップＳ２２で、デバイスドライバＤ１−１は、当該ＤＭＡ転送によってメモリ１２から読み出されるデータを予め読み出し、当該データのチェックコード（図７中、「チェックコードＡ」）を計算してメモリ１２に格納する。尚、当該チェックコードの計算では、当該ＤＭＡ転送の対象データの全体について１つのチェックコードＡを得る。
【００４９】
次にステップＳ２３で、デバイスドライバＤ１−１は、ファイバチャネルアダプタ１４−１のチェックコード計算回路１４−１ｂのＤＭＡ開始アドレスレジスタＲ１に対し、上記ＤＭＡ転送の対象データの転送開始アドレスを書き込む。又、チェックコード計算回路１４−１ｂのＤＭＡデータ長レジスタＲ２に、上記ＤＭＡ転送の対象データのデータ長を書き込む。チェックコード計算回路１４−１ｂは、書き込まれたＤＭＡ開始アドレスの値にＤＭＡデータ長を加算することにより、上記ＤＭＡ転送の対象データの転送終了アドレスを得る。チェックコード計算回路１４−１ｂは、次のステップＳ２４にて、このようにして得られた上記ＤＭＡ転送の対象データの転送開始アドレス及び転送終了アドレスを使用する。すなわち、当該ＤＭＡ転送の対象データの転送開始アドレス及び転送終了アドレスと、ファイバチャネルコントローラ１４−１ａとＩＯバス１６との接続点を通るアドレス情報が示すアドレスとを比較対照する。
【００５０】
次にステップＳ２４で、デバイスドライバＤ１−１は、ファイバチャネルコントローラ１４−１ａに対し、上記ＤＭＡ転送の開始を指示する。これを受けてファイバチャネルコントローラ１４−１ａは、ＤＭＡ転送を開始する。当該ＤＭＡ転送の開始後、チェックコード計算回路１４−１ｂは以下の動作を行う。すなわち、ファイバチャネルコントローラ１４−１ａとＩＯバス１６との接続点を流れるアドレス情報が示すアドレスが、「上記ＤＭＡ転送の対象データの転送開始アドレス」〜「上記ＤＭＡ転送の対象データの転送終了アドレス」の範囲内にあるか否かを常に監視する。そしてチェックコード計算回路１４−１ｂは、上記接続点を流れるアドレス情報が示すアドレスが、「上記ＤＭＡ転送の対象データの転送開始アドレス」〜「上記ＤＭＡ転送の対象データの転送終了アドレス」の範囲内にある場合、当該アドレス情報に引き続いて転送されるデータを取得する。そして取得したデータのチェックコードを計算し、計算したチェックコード（図７中、「チェックコードＢ」）をチェックコード計算結果レジスタＲ３に格納する。ここでもステップＳ２２におけるチェックコードの計算同様、チェックコード計算回路１４−１ｂによるチェックコードの計算では、当該ＤＭＡ転送の対象データの全体について１つのチェックコードＢを得る。
【００５１】
次にステップＳ２５で、ファイバチャネルコントローラ１４−１ａは上記ＤＭＡ転送が終了すると、デバイスドライバＤ１−１に対し割り込みを実行し、ＤＭＡ転送の完了を通知する。
【００５２】
次にステップＳ２６で、デバイスドライバＤ１−１は、チェックコード計算回路１４−１ｂのチェックコード計算結果レジスタＲ３からチェックコードＢを読み出す。
【００５３】
次にステップＳ２７で、デバイスドライバＤ１−１は、上記チェックコードＡとチェックコードＢとを比較対照する。
【００５４】
次にステップＳ２８で、ステップＳ２７の比較対照の結果が（上記チェックコードＡとチェックコードＢとが）「一致」なら、ＯＳ，Ｓ１に対し、転送されたデータが正当である旨を通知（正常応答）し、ＯＳ，Ｓ１は以降の処理を続行する。他方、ステップＳ２７の比較対照の結果が「不一致」なら、ＯＳ，Ｓ１に対し、転送されたデータが正当でない（不正である）旨を通知（エラー応答）する。
【００５５】
このような実施例１の計算機１０によれば、以下の効果が奏される。すなわち、ＤＭＡ転送によって外部記憶装置２０からデータを読み出してメモリ１２に書き込む場合、当該データが計算機１０に入力される位置にあるファイバチャネルアダプタ１４−１を通過する当該データからチェックコードを計算する。そして、当該ＤＭＡ転送によってメモリ１２に書き込まれたデータをアプリケーションＡ１が使用する前に、当該メモリ１２上のデータから計算したチェックコードと、上記ファイバチャネルアダプタ１４−１を通過するデータから計算したチェックコードとを比較対照する。そして比較対照の結果が不一致ならエラー応答を行うことにより、計算機１０のハードウェア内を流れるデータの正当性を保証することができる。他方、ＤＭＡ転送によってメモリ１２からデータを読み出して外部記憶装置２０へ書き込む場合、当該ＤＭＡ転送によってメモリ１２から読み出されるメモリ１２上のデータからチェックコードを計算する。そして、当該データが計算機１０から出力される位置にあるファイバチャネルアダプタ１４−１を通過する当該データからチェックコードを計算する。そして、上記メモリ１２上のデータから計算したチェックコードと、上記ファイバチャネルアダプタ１４−１を通過する当該データから計算したチェックコードとを比較対照する。そして比較対照の結果が不一致ならエラー応答を行うことにより、計算機１０のハードウェア内を流れるデータの正当性を保証することができる。
【００５６】
次に、図８とともに、上記デバイスドライバＤ１−１（以下、ファイバチャネルドライバＤ１−１と称する場合がある）について詳細に説明する。ファイバチャネルドライバＤ１−１は、上位層インタフェース部Ｄ１−１ａ、ハードウェアインタフェース部Ｄ１−１ｂ，ネームサーバ部Ｄ１−１ｃ及びリンクサービス部Ｄ−１ｄを有する。
【００５７】
上位層インタフェース部Ｄ１−１ａは、ネームサーバ部Ｄ１−１ｃ及びリンクサービス部Ｄ１−１ｄを使用し、ＳＣＳＩ−ＩＤ(IDentifier)と、ファイバチャネルのプロトコルにしたがった識別子との間の対応関係を得る。尚、ここでは、ＯＳ，Ｓ１とファイバチャネルドライバＤ１−１との間にＳＣＳＩドライバ（図示を省略）が設けられるものとする。このため、上位層インタフェース部Ｄ１−１ａは、上位のＳＣＳＩドライバが示すＳＣＳＩ−ＩＤに対応するファイバチャネルのプロトコルにしたがった識別子を得る。上位層インタフェース部Ｄ１−１ａは又、ＳＣＳＩドライバからの要求をファイバチャネルのプロトコルにしたがった要求に変換する機能を有する。
【００５８】
更に上位層インタフェース部Ｄ１−１ａは、チェックコードを計算し、ファイバチャネルアダプタ１４−１のチェックコード計算回路１４−１ｂが計算したチェックコードと比較対照する（図中、「チェックコード計算・コンペア機能Ｄ１−１ａ１」）。この動作は、上述した図６のステップＳ５〜Ｓ７、図７のステップＳ２２，Ｓ２６，Ｓ２７の動作に対応する。
【００５９】
ハードウェアインタフェース部Ｄ１−１ｂは、ファイバチャネルコントローラ１４−１ａを制御する。ハードウェアインタフェース部Ｄ１−１ｂは又、チェックコード計算回路１４−１ｂを制御する（図中、「チェックコード計算ハードウェア制御機能」Ｄ１−１ｂ１）。
【００６０】
リンクサービス部Ｄ１−１ｄは、計算機１０が外部記憶装置２０との接続を開始するのに必要なネゴシエーション等を行う。又、外部記憶装置２０との通信の際にファイバチャネルスイッチ（図示を省略）を使用する場合には、ファイバチャネルスイッチとの接続を開始するのに必要なネゴシエーション等を行う。
【００６１】
ネームサーバ部Ｄ１−１ｃには、外部記憶装置２０が登録され、上位層インタフェース部Ｄ１−１ａが当該登録を参照することにより、ＳＣＳＩ−ＩＤ(IDentifier)と、ファイバチャネルのプロトコルにしたがった識別子との間の対応関係を得る。又、計算機１０が外部記憶装置２０との通信の際にファイバチャネルスイッチを使用する場合には、当該ファイバチャネルスイッチがネームサーバ部Ｄ１−１ｃに登録される。又、当該ファイバチャネルスイッチに格納された外部記憶装置２０の情報もネームサーバ部Ｄ１−１ｃに登録される。この場合、上位層インタフェース部Ｄ１−１ａが当該登録を参照することにより、当該ファイバチャネルスイッチにつき、ＳＣＳＩ−ＩＤ(IDentifier)と、ファイバチャネルのプロトコルにしたがった識別子との間の対応関係を得る。
【００６２】
次に、図８とともに上述したファイバチャネルドライバＤ１−１の動作の内容を説明する。尚、ここではＩＯバス１６をＰＣＩバスとする。
【００６３】
ファイバチャネルドライバＤ１−１は、まず、ＰＣＩバス１６に接続されているファイバチャネルコントローラ１４−１ａ及びチェックコード計算回路１４−１ｂの初期設定を行う。より具体的には、ファイバチャネルドライバＤ１−１は、ファイバチャネルコントローラ１４−１ａ及びチェックコード計算回路１４−１ｂに対し、コンフィギュレーションアクセスを実行する。コンフィギュレーションアクセスとは、ＰＣＩバス１６のコンフィギュレーション空間を使用したアクセスを言う。ファイバチャネルドライバＤ１−１はコンフィギュレーションアクセスにより、ファイバチャネルコントローラ１４−１ａ及びチェックコード計算回路１４−１ｂのレジスタ（図示を省略）の設定を行う。ファイバチャネルドライバＤ１−１は当該レジスタの設定により、ファイバチャネルコントローラ１４−１ａ及びチェックコード計算回路１４−１ｂの各機能が使用するＰＣＩバス１６のメモリ空間の割付を行う。
【００６４】
ファイバチャネルドライバＤ１−１は更に、メモリ１２上に、ＤＭＡ転送で使用するＤＭＡ転送情報データ構造体等の設定を行う。ＤＭＡ転送情報データ構造体につき、図１２とともに後述する。
【００６５】
次に図９とともに、ＤＭＡ転送によって計算機１０が外部記憶装置２０からデータを読み出す際の、ファイバチャネルドライバＤ１−１の動作の内容について説明する。
【００６６】
ステップＳ４１で上位層（ここでは一例として、上記の如く、ＳＣＳＩドライバ）からデータの読出要求が渡されると、ステップＳ４２で上位層インタフェース部Ｄ１−１ａは当該読出要求の妥当性を判断する。当該読出要求が妥当であれば、上位層インタフェース部Ｄ１−１ａはハードウェアインタフェース部Ｄ１−１ｂに対し、データ読み出しの指示を出す。
【００６７】
次にステップＳ４３でハードウェアインタフェース部Ｄ１−１ｂは、上記データ読み出しの指示に応じ、ファイバチャネルコントローラ１４−１ａに対し、ＤＭＡ転送の指示を出す。
【００６８】
次にステップＳ４４でファイバチャネルコントローラ１４−１ａからＤＭＡ転送完了を通知する割り込みがなされると、ハードウェアインタフェース部Ｄ１−１ｂは、ステップＳ４５でチェックコード計算回路１４−１ｂにアクセスする。そしてチェックコード計算回路１４−１ｂが計算して格納したチェックコードを読み出し、読み出したチェックコードを、データ読み出しが完了した旨の通知とともに、当該上位層インタフェース部Ｄ１−１ａに渡す。
【００６９】
次にステップＳ４６で上位層インタフェース部Ｄ１−１ａは、上記データ読み出しに係るメモリ１２上のデータのチェックコードを計算する。次に上位層インタフェース部Ｄ１−１ａは、計算したチェックコードと、上記ハードウェアインタフェース部Ｄ１−１ｂから渡されたチェックコードとを比較対照する（ステップＳ４７）。比較対照の結果が「不一致」であれば、上位層（ＳＣＳＩドライバ）に対しエラー応答を行う。比較対照の結果が「一致」であれば、上位層（ＳＣＳＩドライバ）に対し正常応答を行う。
【００７０】
次に図１０とともに、ＤＭＡ転送によって計算機１０が外部記憶装置２０に対しデータを書き込む際の、ファイバチャネルドライバＤ１−１の動作の内容について説明する。
【００７１】
ステップＳ６１で上位層（ＳＣＳＩドライバ）からデータの書込要求が渡されると、ステップＳ６２で上位層インタフェース部Ｄ１−１ａは当該書込要求の妥当性を判断する。当該書込要求が妥当であれば、上位層インタフェース部Ｄ１−１ａはハードウェアインタフェース部Ｄ１−１ｂに対し、データ書き込みの指示を出す。ハードウェアインタフェース部Ｄ１−１ｂは、上記データ書き込みの指示に応じ、ファイバチャネルコントローラ１４−１ａに対し、ＤＭＡ転送の指示を出す。他方ステップＳ６３で上位層インタフェース部Ｄ１−１ａは、メモリ１２上の、上記データ書き込みに係るデータのチェックコードを計算する。
【００７２】
次にステップＳ６４でファイバチャネルコントローラ１４−１ａからＤＭＡ転送の完了を通知する割り込みがなされると、ハードウェアインタフェース部Ｄ１−１ｂは、ステップＳ６５でチェックコード計算回路１４−１ｂにアクセスする。そしてチェックコード計算回路１４−１ｂが計算して格納したチェックコードを読み出し、読み出したチェックコードを、データ書き込みが完了した旨の通知とともに、上位層インタフェース部Ｄ１−１ａに渡す。
【００７３】
次にステップＳ６６で上位層インタフェース部Ｄ１−１ａは、ステップＳ６３で計算したチェックコードと、上記ハードウェアインタフェース部Ｄ１−１ｂから渡されたチェックコードとを比較対照する。比較対照の結果が「不一致」であれば、上位層（ＳＣＳＩドライバ）に対しエラー応答を行う。比較対照の結果が「一致」であれば、上位層（ＳＣＳＩドライバ）に対し正常応答を行う。
【００７４】
次に図１１とともに、チェックコード計算回路１４−１ｂのハードウェア構成例、及び図１２とともにＤＭＡ転送情報データ構造体の構成例について説明する。尚、これらの構成例では、ＩＯバス１６をＰＣＩバスとし、ＤＭＡ転送指示の最大同時発行数を５１２個とする。
【００７５】
図１１のチェックコード計算回路１４−１ｂは、ＰＣＩバストレース部１４−１ｂ−１、チェックコード計算部１４−１ｂ−２、５１２個のレジスタ領域１４−１ｂ−３０，１４−１ｂ−３１，...、１４−１ｂ−３５１１、及びＤＭＡ転送情報データ構造体開始アドレスレジスタＲ５を有する。
【００７６】
ＰＣＩバストレース部１４−１ｂ−１は、ＰＣＩバス１６を流れるアドレス情報を監視し、ＰＣＩバス１６から、ＤＭＡ転送情報データ構造体が有するＤＭＡ開始アドレス及びＤＭＡデータ長の各情報を、レジスタ領域に取り込む。すなわちＤＭＡ開始アドレスをＤＭＡ開始アドレスレジスタＲ１に格納し、ＤＭＡデータ長をＤＭＡデータ長レジスタＲ２に格納する。
【００７７】
又、ＰＣＩバストレース部１４−１ｂ−１は、レジスタ領域に取り込んだＤＭＡ開始アドレス及びＤＭＡデータ長の各情報からＤＭＡ転送の対象データの転送終了アドレス（ＤＭＡ終了アドレス）を求め、ＤＭＡ開始アドレスとＤＭＡ終了アドレスとの間のデータをＰＣＩバス１６から取得する。そして取得したデータにつき、チェックコード計算部１４−１ｂ−２に対し、当該データのチェックコードを計算するように指示する。
【００７８】
チェックコード計算部１４−１ｂ−２は、ＰＣＩバストレース部１４−１ｂ−１からの上記指示に応じ、当該データのチェックコードを計算し、計算したチェックコードをレジスタ領域のチェックコード計算結果レジスタＲ３に格納する。
【００７９】
５１２個のレジスタ領域１４−１ｂ−３０，１４−１ｂ−３１，...、１４−１ｂ−３５１１は、同時発行するＤＭＡ転送指示の最大の個数分（図１１，図１２の例では５１２個）設けられる。各レジスタ領域には、ＤＭＡ開始アドレスレジスタＲ１、ＤＭＡデータ長レジスタＲ２及びチェックコード計算結果レジスタＲ３が含まれる。上記の如く、レジスタ領域のＤＭＡ開始アドレスレジスタＲ１及びＤＭＡデータ長レジスタＲ２には、ＰＣＩバストレース部１４−１ｂ−１が取り込んだＤＭＡ開始アドレス及びＤＭＡデータ長の情報が夫々格納される。又、チェックコード計算部１４−１ｂ−２によって計算されたチェックコードの計算結果がチェックコード計算結果レジスタＲ３に格納される。
【００８０】
又、ＤＭＡ転送情報データ構造体開始アドレスレジスタＲ５には、ファイバチャネルドライバＤ１−１がメモリ１２に設定するＤＭＡ転送情報データ構造体の開始アドレスが格納される。ＤＭＡ転送情報データ構造体開始アドレスレジスタＲ５は、ファイバチャネルドライバＤ１−１が、初期設定時に設定する。
【００８１】
図１２に示す５１２個のＤＭＡ転送情報データ構造体Ｂ０、Ｂ１、...，Ｂ５１１は、ファイバチャネルドライバＤ１−１とファイバチャネルコントローラ１４−１ａとの間で、ＤＭＡデータ転送を制御する情報として使用される。５１２個のＤＭＡ転送情報データ構造体Ｂ０、Ｂ１、...，Ｂ５１１のうち、ＤＭＡ転送指示１個分（例えばＢ０）のサイズは固定（ｍバイト）であり、ＤＭＡ転送指示の最大同時発行数分がシリアル（直列）に並ぶ。ＤＭＡ転送指示１個分のＤＭＡ転送情報データ構造体（例えばＢ０）には様々なＤＭＡ転送に関する情報が含まれる。このうち主にチェックコード計算回路１４−１ｂが使用する情報としては、当該ＤＭＡ転送の対象データ（例えば０番目のＤＭＡ転送の対象データＤｔ０）の開始アドレス（ＤＭＡ開始アドレスＩ１）及び当該データのデータ長（ＤＭＡデータ長Ｉ２）の各情報が含まれる。図示の如く、ＤＭＡ開始アドレスＩ１は当該ＤＭＡ転送情報データ構造体Ｂ０の先頭番地からオフセットＯ１（ｉバイト）の位置に格納され、ＤＭＡデータ長Ｉ２はオフセットＯ２（ｊバイト）の位置に格納される。図１２のＤＭＡ転送情報データ構造体Ｂ０、Ｂ１、...，Ｂ５１１は、ファイバチャネルドライバＤ１−１がメモリ１２に配置する。
【００８２】
次に、図１１に記載されたチェックコード計算回路１４−１ｂ及び図１２に記載されたＤＭＡ転送情報データ構造体を適用した場合の、計算機１０のＤＭＡ転送開始時の動作手順（１）〜（８）について説明する。
【００８３】
尚、ＤＭＡ転送はファイバチャネルコントローラ１４−１ａにＤＭＡ転送情報データ構造体の情報を読み込ませてＤＭＡ転送に係る情報をファイバチャネルコントローラ１４−１ａに認識させることで開始される。
【００８４】
（１）まず、ファイバチャネルドライバＤ１−１は、初期設定時、チェックコード計算回路１４−１ｂのＤＭＡ転送情報データ構造体開始アドレスレジスタＲ５に、ＤＭＡ転送情報データ構造体の開始アドレス（図１２中、アドレスＡ）を設定する。
【００８５】
（２）次に、ファイバチャネルドライバＤ１−１は、上位層からデータ転送要求を受けると、使用するＤＭＡ転送情報データ構造体を選択する。より具体的には、ファイバチャネルドライバＤ１−１は、５１２個のＤＭＡ転送情報データ構造体から、現在使用中ではないＤＭＡ転送情報データ構造体を抽出し、抽出したＤＭＡ転送情報データ構造体の中から、使用するＤＭＡ転送情報データ構造体を選択する。一例として、ファイバチャネルドライバＤ１−１は、使用するＤＭＡ転送情報データ構造体として、ＤＭＡ転送情報データ構造体Ｂ０（図１２中、「ＤＭＡ＃０用転送情報データ構造体」）を選択したとする。
【００８６】
（３）この場合、次にファイバチャネルドライバＤ１−１は、メモリ１２上の当該ＤＭＡ転送情報データ構造体Ｂ０のＤＭＡ開始アドレスＩ１及びＤＭＡデータ長Ｉ２の各情報を、上記上位層から受けたデータ転送要求が有する、対応する情報にしたがって書き換える。
【００８７】
（４）次にファイバチャネルドライバＤ１−１は以下の動作を実行する。尚、ここで、チェックコード計算回路のレジスタ領域のうち、上記使用するＤＭＡ転送情報データ構造体として選択されたＤＭＡ転送情報データ構造体Ｂ０に対応するレジスタ領域は、レジスタ領域１４−１ｂ−３０（図１１中、「ＤＭＡ＃０用  レジスタ領域」）である。したがってファイバチャネルドライバＤ１−１は、当該レジスタ領域１４−１ｂ−３０が有するチェックコード計算結果レジスタＲ３を初期化（例えば「０」にクリア）する。
【００８８】
（５）次にファイバチャネルドライバＤ１−１は、ファイバチャネルコントローラ１４−１ａに対し、データの読み出し或いは書き込みを指示する。ファイバチャネルコントローラ１４−１ａは当該データの読み出し或いは書き込みの指示にしたがって、上記使用するＤＭＡ転送情報データ構造体として選択されたメモリ１２上のＤＭＡ転送情報データ構造体Ｂ０を読み込む。その結果、ＤＭＡ転送情報データ構造体Ｂ０の情報がメモリ１２から読み出され、ＩＯバス１６を流れる。
【００８９】
（６）次にチェックコード計算回路１４−１ｂは、ファイバチャネルコントローラ１４−１ａとＩＯバス１６との接続点を流れるアドレス情報を監視する。そして、当該アドレス情報が示すアドレスが、上記ＤＭＡ転送情報データ構造体Ｂ０〜Ｂ５１１が設定されたメモリ１２上のアドレスの範囲（「アドレスＡ」〜「アドレスＡ＋ｍ×ｎ」（nは図１２の例では５１２）内か否かを判定する。判定の結果、上記範囲内であり、且つ、例えばＤＭＡ転送情報データ構造体Ｂ０の範囲内であるとすると、チェックコード計算回路１４−１ｂは以下の動作を行う。すなわち、当該アドレス情報に引き続いて転送されるＤＭＡ転送情報データ構造体Ｂ０のＤＭＡ開始アドレスＩ１（オフセットＯ１）及びＤＭＡデータ長Ｉ２（オフセットＯ２）の各情報を該当番号（ここでは０番）のＤＭＡ開始アドレスレジスタとＤＭＡデータ長レジスタに取り込む。すなわち、ＤＭＡ開始アドレスＩ１及びＤＭＡデータ長Ｉ２を、上記レジスタ領域１４−１ｂ−３０のＤＭＡ開始アドレスレジスタＲ１及びＤＭＡデータ長レジスタＲ２に夫々格納する。
【００９０】
（７）次にファイバチャネルコントローラ１４−１ａは、メモリ１２との間で、上記ＤＭＡ転送の指示に係るＤＭＡ転送を開始する。
【００９１】
（８）次に、チェックコード計算回路１４−１ｂは、ファイバチャネルコントローラ１４−１ａとＩＯバス１６との接続点を流れるアドレス情報を監視する。そして、当該アドレス情報が示すアドレスが、当該ＤＭＡ転送の対象データの転送開始アドレス（ＤＭＡ開始アドレス）と転送終了アドレス（ＤＭＡ終了アドレス）との間の範囲内か否かを判定する。尚、当該ＤＭＡ開始アドレス及びＤＭＡ終了アドレスは、上記動作手順（６）で上記レジスタ領域１４−１ｂ−３０のＤＭＡ開始アドレスレジスタＲ１及びＤＭＡデータ長レジスタＲ２に夫々格納された情報から得られる。すなわちＤＭＡ開始アドレスは、ＤＭＡ開始アドレスレジスタＲ１に格納されたＤＭＡ開始アドレスである。又、ＤＭＡ終了アドレスは、当該ＤＭＡ開始アドレスに、ＤＭＡデータ長レジスタＲ２に夫々格納された対象データのデータ長を加算することによって得られる。上記判定の結果、当該アドレス情報が示すアドレスが、上記ＤＭＡ開始アドレスとＤＭＡ終了アドレスとの間の範囲内であれば、チェックコード計算回路１４−１ｂは当該アドレス情報に引き続いて転送されるデータを取り込む。チェックコード計算回路１４−１ｂは、このようにして取り込んだデータのチェックコードを計算し、計算したチェックコードを上記レジスタ領域１４−１ｂ−３０のチェックコード計算結果レジスタＲ３に格納する。尚、ここでチェックコード計算回路１４−１ｂが計算して格納するチェックコードは、当該１個のＤＭＡ転送指示の対象データの全てに対して得られる１つのチェックコードである。したがって例えばチェックコードがチェックサムやＣＲＣコードの場合、１個のＤＭＡ転送指示に係る一連のデータ転送の過程で順次転送されるデータに応じてチェックコードを順次更新することができる。そして当該１個のＤＭＡ転送指示に係るデータ転送が終了した段階で、上記更新の結果として、当該１個のＤＭＡ転送指示の対象データの全てに対して１個のチェックコードを得るようにすることができる。
【００９２】
２個目のＤＭＡ転送指示に係るＤＭＡ転送の起動の際には、上記動作手順（２）〜（８）を順次実行する。尚、その際、動作手順（２）で選択される「使用するＤＭＡ転送情報データ構造体」としては、ＤＭＡ転送情報データ構造体Ｂｋが選択されるものとする（１≦k≦５１１）。そしてこの場合、ＤＭＡ転送情報データ構造体Ｂｋのメモリ１２上のアドレスの範囲は「アドレスＡ＋ｋｍ」〜「アドレスＡ＋（ｋ＋１）ｍ−１」である。又、対応するチェックコード計算回路１４−１ｂの回路のレジスタ領域はレジスタ１４−１ｂ−３ｋである。又、上記動作手順（１）〜（８）は、ＤＭＡ転送のうち、外部記憶装置２０からデータを読み出す場合の起動時に実行される動作手順であるとともに、外部記憶装置２０に対しデータを書き込む場合の起動時に実行される動作手順でもある。
【００９３】
次に、チェックコード計算回路１４−１ｂが実行するチェックコードの計算方法について説明する。
【００９４】
望ましいチェックコードの計算方法としては、チェックコードとしてチェックサムを計算する方法、チェックコードとしてＣＲＣコードを計算する方法等が挙げられる。チェックコードの計算方法の選択は、チェックコード計算回路１４−１ｂの回路規模、チェックコード計算回路１４−１ｂの計算性能等を考慮して行うことが望ましい。
【００９５】
尚、チェックコード計算回路（ハードウェア）１４−１ｂが実行するチェックコードの計算方法及びファイバチャネルドライバ（ソフトウェア）Ｄ１−１が実行するチェックコードの計算方法との間では、方式を一致させる必要がある。すなわち、チェックサムを計算する方法を選択する場合、チェックサムを計算する場合に生ずるキャリーの扱い方を一致させる。又、ＣＲＣコードを計算する方法を選択する場合、ＣＲＣコードの計算に使用する生成多項式を一致させる。なお、どちらの計算においても、対象データの各バイトのビット並び（エンディアン）等を一致させる必要がある。
【００９６】
以上の実施例１を含む実施形態に関し、更に以下の付記を開示する。
（付記１)
プログラム及びデータを格納するメモリと、
前記メモリに格納されたプログラムを読み出して実行するプロセッサと、
所定の装置からデータを読み出して前記メモリに書き込み、前記メモリからデータを読み出して前記所定の装置に書き込む接続装置と、
前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記所定の装置から読み出された後、前記メモリに書き込まれる前に当該データから所定の方法で第１のチェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記メモリから読み出された後、前記所定の装置に書き込まれる前に当該データから前記所定の方法で第２のチェックコードを生成するチェックコード生成回路と、
前記接続装置が前記所定の装置から読み出して前記メモリに書き込んだ当該メモリ上の前記データから前記所定の方法でチェックコードを生成し、当該チェックコードと前記第１のチェックコードとを比較して双方が一致するか否かを判定し、前記接続装置が前記メモリから読み出して前記所定の装置に書き込む前記メモリ上の前記データから前記所定の方法でチェックコードを生成し、当該チェックコードと前記第２のチェックコードとを比較して双方が一致するか否かを判定するデータエラーチェック手段とを有する計算機。
（付記２)
前記データエラーチェック手段は、前記プログラムに含まれ、前記プロセッサによって実行されることにより実現されることを特徴とする付記１に記載の計算機。
（付記３)
前記メモリ及びプロセッサはシステムバスに接続され、前記接続装置及びチェックコード生成回路は当該システムバスとは異なる規格に則った入出力バスに接続され、
前記チェックコード生成回路は、前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成することを特徴とする付記１又は２に記載の計算機。
（付記４)
前記接続装置はＤＭＡ(Direct Memory Access)方式にしたがったデータ転送によって前記所定の装置からデータを読み出して前記メモリに書き込み、前記メモリからデータを読み出して前記所定の装置に書き込むことを特徴とする請求項１〜３のうちの何れかに記載の計算機。
（付記５)
所定の装置から読み出されて計算機のメモリに書き込まれた前記メモリ上のデータから所定の方法でチェックコードを生成し、当該チェックコードと、当該データが前記所定の装置から読み出された後、前記メモリに書き込まれる前に当該データから前記所定の方法で生成されるチェックコードとを比較して双方が一致するか否かを判定する手段と、
前記メモリから読み出され前記所定の装置に書き込まれる前記メモリ上の前記データから前記所定の方法でチェックコードを生成し、当該チェックコードと、当該データが前記メモリから読み出された後、前記所定の装置に書き込まれる前に当該データから前記所定の方法で生成されるチェックコードとを比較して双方が一致するか否かを判定する手段として前記計算機を機能させるプログラム。
（付記６)
前記計算機は、プログラム及びデータを格納するメモリと、
前記メモリに格納されたプログラムを読み出して実行するプロセッサと、
前記所定の装置からデータを読み出して前記メモリに書き込み、前記メモリからデータを読み出して前記所定の装置に書き込む接続装置と、
前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記メモリに書き込まれる前に当該データから所定の方法でチェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記所定の装置に書き込まれる前に当該データから前記所定の方法でチェックコードを生成するチェックコード生成回路とを有し、
前記メモリ及びプロセッサはシステムバスに接続され、前記接続装置及びチェックコード生成回路は当該システムバスとは異なる規格に則った入出力バスに接続され、
前記チェックコード生成回路は、前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成することを特徴とすることを特徴とする付記５に記載のプログラム。
（付記７)
前記接続装置はＤＭＡ方式にしたがったデータ転送によって前記所定の装置からデータを読み出して前記メモリに書き込み、前記メモリからデータを読み出して前記所定の装置に書き込むことを特徴とする付記６に記載のプログラム。
（付記８)
第１のエラーチェック手段が、所定の装置から読み出されて計算機のメモリに書き込まれた前記メモリ上のデータから所定の方法でチェックコードを生成し、当該チェックコードと、当該データが前記所定の装置から読み出された後、前記メモリに書き込まれる前に当該データから前記所定の方法で生成されるチェックコードとを比較して双方が一致するか否かを判定するステップと、
第２のエラーチェック手段が、前記メモリから読み出され前記所定の装置に書き込まれる前記メモリ上の前記データから前記所定の方法でチェックコードを生成し、当該チェックコードと、当該データが前記メモリから読み出された後、前記所定の装置に書き込まれる前に当該データから前記所定の方法で生成されるチェックコードとを比較して双方が一致するか否かを判定するステップとを有する計算機の制御方法。
（付記９)
前記計算機は、プログラム及びデータを格納するメモリと、
前記メモリに格納されたプログラムを読み出して実行するプロセッサと、
前記所定の装置からデータを読み出して前記メモリに書き込み、前記メモリからデータを読み出して前記所定の装置に書き込む接続装置と、
前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記メモリに書き込まれる前に当該データから所定の方法でチェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記所定の装置に書き込まれる前に当該データから前記所定の方法でチェックコードを生成するチェックコード生成回路とを有し、
前記メモリ及びプロセッサはシステムバスに接続され、前記接続装置及びチェックコード生成回路は当該システムバスとは異なる規格に則った入出力バスに接続され、
前記チェックコード生成回路は、前記接続装置が前記所定の装置から読み出して前記メモリに書き込む前記データが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成し、前記接続装置が前記メモリから読み出して前記所定の装置へ書き込むデータが前記入出力バスと前記接続装置との接続点を流れる際、当該データから前記チェックコードを生成することを特徴とすることを特徴とする付記８に記載の計算機の制御方法。
（付記１０)
前記接続装置はＤＭＡ方式にしたがったデータ転送によって前記所定の装置からデータを読み出して前記メモリに書き込み、前記メモリからデータを読み出して前記所定の装置に書き込むことを特徴とする付記９に記載の計算機の制御方法。
【符号の説明】
【００９７】
１０  計算機
１１−１，１１−２，...  プロセッサ
１２  メモリ（メインメモリ）
１４−１，１４−２  ホストバスアダプタ
１４−１ａ  ファイバチャネルコントローラ（接続装置）
１４−１ｂ  チェックコード計算回路（チェックコード生成回路）
１５  システムバス
１６  ＩＯバス、ＰＣＩバス
２０  外部記憶装置（所定の装置）
Ｄ１−１  ファイバチャネルドライバ（データエラーチェック手段）
【図１】
0005685848.tif 000002
【図２】
0005685848.tif 000003
【図３】
0005685848.tif 000004
【図４】
0005685848.tif 000005
【図５】
0005685848.tif 000006
【図６】
0005685848.tif 000007
【図７】
0005685848.tif 000008
【図８】
0005685848.tif 000009
【図９】
0005685848.tif 000010
【図１０】
0005685848.tif 000011
【図１１】
0005685848.tif 000012
【図１２】
0005685848.tif 000013