(57)【要約】【課題】Read Modify Write時においてより確実にエラーを検出する。【解決手段】本発明のＤＭＡチップであるＬＳＩ３３０は、キャッシュデータの読みの都度、ＢＣＣチェックブロック３３９にてキャッシュデータのＢＣＣチェックを行い、チェック完了か否かおよびチェック結果に応じて、ＣＭリードブロック３３８は、「データ転送終了通知」の「ＢＣＣチェックビット」および「ＢＣＣエラービット」をオンにする。さらに、ＦＣＣチェックブロック３４０は、キャッシュデータのＦＣＣチェックを行い、チェック完了か否かおよびチェック結果に応じて、「データ転送終了通知」の「ＦＣＣチェックビット」および「ＦＣＣエラービット」をオンにする。そして、ＣＭリードブロック３３８は、データ転送終了時に、ディスクリプタブロック３３６を介してＣＰＵ４３へ「データ転送終了通知」を送信する。【選択図】        図３
2008197804.tif 000002
【特許請求の範囲】
【請求項１】
所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセス方法であって、
前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証工程と、
前記検証工程による検証結果を前記外部装置へ通知する検証結果通知工程と
を含んだことを特徴とするデータアクセス方法。
【請求項２】
前記検証結果は、前記ブロックデータ検証コードに基づいて前記可変長データを前記ブロック単位で検証したか否かを示すブロック検証情報と、前記フィールドデータ検証コードに基づいて前記可変長データを前記フィールド単位で検証したか否かを示すフィールド検証情報とを含むことを特徴とする請求項１に記載のデータアクセス方法。
【請求項３】
前記検証結果通知工程は、前記ブロック検証情報が未検証を示す情報であった場合、または前記フィールド検証情報が未検証を示す情報であった場合に、前記検証工程による前記検証結果にかかわらず該検証結果を異常として通知することを特徴とする請求項２に記載のデータアクセス方法。
【請求項４】
前記フィールドは、該フィールドに付与されているフィールドデータ検証コードを含むデータ長を指定して読み出されるものであり、
前記検証工程は、前記データ長の指定が誤っていた場合に、前記フィールド検証情報に未検証を示す情報を設定することを特徴とする請求項２または３に記載のデータアクセス方法。
【請求項５】
更新データを受信すると、該更新データによる更新対象の被更新データを前記データ蓄積用メモリから読み出して前記検証工程による該被更新データの検証を行った後に、前記更新データにより前記被更新データのフィールドを更新し、更新後のフィールドに対応してフィールドデータ検証コードを更新するとともに、該更新後のフィールドを含むブロックに対応するブロックデータ検証コードを更新することを特徴とする請求項１〜４のいずれか一つに記載のデータアクセス方法。
【請求項６】
所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うチャネルアダプタであって、
前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証手段と、
前記検証手段による検証結果を前記外部装置へ通知する検証結果通知手段と
を有することを特徴とするチャネルアダプタ。
【請求項７】
所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセスを制御するデータアクセス制御装置であって、
前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証部と、
前記検証部による検証結果を前記外部装置へ通知する検証結果通知部と
を有することを特徴とするデータアクセス制御装置。
【請求項８】
所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセス手順をチャネルアダプタの制御装置に実行させるデータアクセスプログラムであって、
前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証手順と、
前記検証手順による検証結果を前記外部装置へ通知する検証結果通知手順と
を前記制御装置に実行させることを特徴とするデータアクセスプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所定のフィールドによって構成されるブロック単位で可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセス方法、チャネルアダプタ、データアクセス制御装置およびデータアクセスプログラムに関し、特に、データ更新時に確実にエラーを検出するデータアクセス方法、チャネルアダプタ、データアクセス制御装置およびデータアクセスプログラムに関する。
【背景技術】
【０００２】
ベンダ独自のオペレーティングシステムによって稼動するメインフレーム系システムにおいては、その外部記憶装置として、可変長レコードのデータフォーマットを有する磁気ディスク装置が利用されている。
【０００３】
ところで、情報処理システムに使用される外部記憶装置として、データアクセスの高速性やデータの障害耐性を高める構成を有するディスクアレイ装置（ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）装置ともいう）が多く用いられている。このディスクアレイ装置は、種類の異なる汎用的なオペレーティングシステムによって稼動するオープン系システムで多く利用されるため、固定長レコードのデータフォーマットを有している。
【０００４】
また、近年では、情報処理技術の進展に伴って情報処理端末が一般化してきており、情報処理システムがメインフレーム系システムとオープン系システムの混在によって構成される場合が多くなっている。そのため、固定長のデータフォーマットでデータを記憶するディスクアレイ装置において、メインフレーム系システムからでもデータのアクセスが可能なように構成されている。
【０００５】
このようななか、たとえば、特許文献１では、可変長レコードを固定長でデータを管理するＣＡ（Channel Adaptor）のキャッシュメモリに書き込む際に、可変長レコードのフィールドにＦＣＣ（Field Check Code）を、ＬＢＡ（Logical Block Addressing）にＢＣＣ（Block Check Code）を付加して、キャッシュメモリへ書き込まれるデータの信頼性を高めるデータ書き込み方法が提案されている。
【０００６】
また、特許文献２では、ディスクアレイ装置のパリティグループを構成する各ディスクに書き込まれたデータに付加チェックコードを付加するとともに、パリティディスクにパリティグループの全ての付加チェックコードを書き込み、データの読み出しの際に、パリティディスクの付加チェックコードを読み出してデータチェックを行うディスクアレイ制御方式が提案されている。
【０００７】
また、特許文献３には、ディスクに書き込むデータの一部を管理エリアに格納するとともに該データの一部に基づいて生成された演算データを該データに埋め込んでディスクに書き込む。また、ディスクから前述のデータを読み出す際に、該データに埋め込まれている演算データを抽出して所定の演算を行うとともに、この演算結果と、管理エリアに格納されている前述のデータの一部とを比較することにより、読み出しデータの正当性をチェックするディスクアレイ装置が提案されている。
【０００８】
【特許文献１】特開２００６−１６４１４１号公報
【特許文献２】特開２００３−３６１４６号公報
【特許文献３】特開２００６−７９３８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記特許文献１〜３に代表される従来技術では、データのリード時に、フィールドやＬＢＡ単位でのデータ抜けが発生した場合に、これを検出することが可能であるものの、ＣＡにおけるキャッシュメモリへのデータ書き込みが異常であると、ＢＣＣはエラーを検出できず、ＦＣＣでのみしかエラーを検出できなかった。
【００１０】
具体的には、ＣＡ内部で書き込みデータが異常となってしまう原因は、Read Modify Write（ＬＢＡの一部のフィールドのみの更新）の際に、一旦キャッシュメモリからデータを読み出すが、このとき読み出しデータが異常であることによる。このため、更新されるフィールドのＦＣＣは当然エラーを検出しないが、ＢＣＣは、異常データと更新データとから再計算されるため、ＢＣＣもエラーを検出することができなかった。
【００１１】
なお、ディスクリプタがデータ長の指定ミスを起こした場合、ＦＣＣをチェックできない場合がありうる。しかし、現状では、ＦＣＣチェックが行われなかったとしても、エラーとは見なされず、正常終了とされてしまう。
【００１２】
本発明は、上記問題点（課題）を解消するためになされたものであって、Read Modify Write時に、ＦＣＣチェックおよびＢＣＣチェックともに正しくチェックが完了したか否かを明らかにするとともに、ＦＣＣチェックおよびＢＣＣチェックにより確実にエラーを検出できるデータアクセス方法、チャネルアダプタ、データアクセス制御装置およびデータアクセスプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した問題を解決し、目的を達成するため、本発明は、所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセス方法であって、前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証工程と、前記検証工程による検証結果を前記外部装置へ通知する検証結果通知工程とを含んだことを特徴とする。
【００１４】
また、本発明は、所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うチャネルアダプタであって、前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証手段と、前記検証手段による検証結果を前記外部装置へ通知する検証結果通知手段とを有することを特徴とする。
【００１５】
また、本発明は、所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセスを制御するデータアクセス制御装置であって、前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証部と、前記検証部による検証結果を前記外部装置へ通知する検証結果通知部とを有することを特徴とする。
【００１６】
また、本発明は、所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセス手順をチャネルアダプタの制御装置に実行させるデータアクセスプログラムであって、前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証手順と、前記検証手順による検証結果を前記外部装置へ通知する検証結果通知手順とを前記制御装置に実行させることを特徴とする。
【００１７】
これらの発明によれば、可変長データをデータ蓄積用メモリから読み出す際に、ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証するので、データの異常を早期に発見することが可能となる。また、このデータの異常を外部装置へ通知して報知することが可能となる。
【００１８】
また、本発明は、上記発明において、前記検証結果は、前記ブロックデータ検証コードに基づいて前記可変長データを前記ブロック単位で検証したか否かを示すブロック検証情報と、前記フィールドデータ検証コードに基づいて前記可変長データを前記フィールド単位で検証したか否かを示すフィールド検証情報とを含むことを特徴とする。
【００１９】
この発明によれば、検証結果は、ブロックデータ検証コードに基づいて可変長データをブロック単位で検証したか否かを示すブロック検証情報と、フィールドデータ検証コードに基づいて可変長データをフィールド単位で検証したか否かを示すフィールド検証情報とを含むので、データの検証が行われたか否かについて認識することが可能となる。また、このデータの検証が行われたか否かについて外部装置へ通知して報知することが可能となる。
【００２０】
また、本発明は、上記発明において、前記検証結果通知工程は、前記ブロック検証情報が未検証を示す情報であった場合、または前記フィールド検証情報が未検証を示す情報であった場合に、前記検証工程による前記検証結果にかかわらず該検証結果を異常として通知することを特徴とする。
【００２１】
この発明によれば、ブロック検証情報が未検証を示す情報であった場合、またはフィールド検証情報が未検証を示す情報であった場合に、検証結果にかかわらず該検証結果を異常として通知するので、データに異常があるにもかかわらず検証が行われていないためにこの異常を通知しないという不都合を回避することが可能となる。
【００２２】
また、本発明は、上記発明において、前記フィールドは、該フィールドに付与されているフィールドデータ検証コードを含むデータ長を指定して読み出されるものであり、前記検証工程は、前記データ長の指定が誤っていた場合に、前記フィールド検証情報に未検証を示す情報を設定することを特徴とする。
【００２３】
この発明によれば、フィールドデータ検証コードを含むフィールドのデータ長の指定が誤っていた場合に、フィールド検証情報に未検証を示す情報を設定するので、フィールドのデータに異常があるにもかかわらず検証が行われていないためにこの異常を通知しないという不都合を回避することが可能となる。
【００２４】
また、本発明は、上記発明において、更新データを受信すると、該更新データによる更新対象の被更新データを前記データ蓄積用メモリから読み出して前記検証工程による該被更新データの検証を行った後に、前記更新データにより前記被更新データのフィールドを更新し、更新後のフィールドに対応してフィールドデータ検証コードを更新するとともに、該更新後のフィールドを含むブロックに対応するブロックデータ検証コードを更新することを特徴とする。
【００２５】
この発明によれば、更新データによる更新対象の被更新データをデータ蓄積用メモリから読み出して検証を行った後に、更新データにより被更新データのフィールドを更新し、更新後のフィールドに対応してフィールドデータ検証コードを更新するとともに、該更新後のフィールドを含むブロックに対応するブロックデータ検証コードを更新するので、データ更新時において、データ蓄積用メモリから読み出した被更新データの異常を発見することが可能となる。
【発明の効果】
【００２６】
本発明によれば、可変長データをデータ蓄積用メモリから読み出す際に、ブロックデータ検証コードと、フィールドデータ検証コードとに基づいたデータ検証を必ず行うので、早期に読み出しデータの異常を発見することが可能になるとともに、異常がある読み出しデータに基づいてデータ更新を行い、その異常が発見されることなくデータ蓄積用メモリに書き戻されることを防止し、チャネルアダプタのキャッシュメモリに格納されるデータの精度を高めることが可能となるという効果を奏する。
【発明を実施するための最良の形態】
【００２７】
以下に添付図面を参照し、本発明のデータアクセス方法、チャネルアダプタ、データアクセス制御装置およびデータアクセスプログラムにかかる実施例を詳細に説明する。なお、本発明にかかるデータアクセス方法、チャネルアダプタ、データアクセス制御装置およびデータアクセスプログラムは、固定長のデータフォーマットに可変長のデータフォーマットのデータを格納する形式でデータを管理し、固定長データへのアクセスも可変長データへのアクセスもともに対処可能な記憶装置（データ蓄積用メモリ）に対して適用することができる。以下の実施例では、かかるデータアクセス方法を実行する装置として、ディスクアレイ装置におけるキャッシュメモリ（ＣＭ）へのデータの読み書きを行うチャネルアダプタ（ＣＡ）を例に挙げて説明する。
【実施例】
【００２８】
先ず、実施例にかかるディスクアレイ装置の構成について説明する。図１は、実施例にかかるディスクアレイ装置の概略構成を示すブロック図である。ディスクアレイ装置１０は、外部装置としてのホストコンピュータ２０Ａ、２０Ｂの外部記憶装置として機能する装置であり、データを格納するディスクアレイ部と、ディスクアレイ部の制御を行うディスクアレイ制御部とを備えて構成される。
【００２９】
ディスクアレイ部は、複数の磁気ディスク装置９０Ａ、９０Ｂと、複数の磁気ディスク装置９０Ａ、９０Ｂの切り替えを行うスイッチ８０Ａ、８０Ｂとから構成される。この磁気ディスク装置９０Ａ、９０Ｂは、一般的にデータアクセスの速さとデータの冗長性の段階に応じて分類されるＲＡＩＤ（Redundant Array of Inexpensive Disks）のレベルによって異なる構成を有する。
【００３０】
たとえば、データを格納するための磁気ディスク装置と、この磁気ディスク装置に格納されたデータをミラーリングするための磁気ディスク装置と、磁気ディスク装置に格納されたデータに対して作成されたパリティデータを格納するための磁気ディスク装置というように、ＲＡＩＤのレベルに対応してそれぞれの磁気ディスク装置の用途が分かれている。なお、磁気ディスク装置９０Ａ、９０Ｂは、固定長のデータフォーマットでデータを格納しているものとする。
【００３１】
ディスクアレイ制御部は、ホストコンピュータ２０Ａ、２０Ｂに対するインタフェース制御を行うチャネルアダプタ４０Ａ、４０Ｂと、磁気ディスク装置９０Ａ、９０Ｂから読み出したデータを一時的に保持するキャッシュメモリ５０Ａ、５０Ｂと、データの読み書き時の各種制御を行い、キャッシュメモリ５０Ａ、５０Ｂの管理を行うキャッシュコントローラ６０Ａ、６０Ｂと、データの読み書き時にキャッシュコントローラ６０Ａ、６０Ｂの指示に基づいてそれぞれの磁気ディスク装置９０Ａ、９０Ｂに対する制御を行うディスクアダプタ７０Ａ、７０Ｂとを備えて構成される。
【００３２】
キャッシュコントローラ６０Ａ、６０Ｂは、ホストコンピュータ２０Ａ、２０Ｂから読み出し要求のあったデータがキャッシュメモリ５０Ａ、５０Ｂ上にない場合に、磁気ディスク装置９０Ａ、９０Ｂからデータを読み出してキャッシュメモリ５０Ａ、５０Ｂ上に置き、チャネルアダプタ４０Ａ、４０Ｂによって読み込み可能な状態とする機能を有する。
【００３３】
なお、キャッシュメモリ５０Ａ、５０Ｂの容量が飽和した場合には、使われていないデータや最後にアクセスされてから所定の期間が経過したデータなどを廃棄して新たなデータを書き込むための領域の確保が行われる。また、キャッシュコントローラ６０Ａ、６０Ｂは、ホストコンピュータ２０Ａ、２０Ｂからの書き込み要求によってキャッシュメモリ５０Ａ、５０Ｂに書き込まれたデータを磁気ディスク装置９０Ａ、９０Ｂへ書き込むようにディスクアダプタ７０Ａ、７０Ｂに指示する機能も有する。
【００３４】
データ蓄積用メモリであるキャッシュメモリ５０Ａ、５０Ｂは、キャッシュコントローラ６０Ａ、６０Ｂによって磁気ディスク装置９０Ａ、９０Ｂから読み出されたデータを格納したり、ホストコンピュータ２０Ａ、２０Ｂからの書き込み要求のあったデータを格納したりする機能を有する。
【００３５】
ディスクアダプタ７０Ａ、７０Ｂは、キャッシュコントローラ６０Ａ、６０Ｂからの指示に基づいて、磁気ディスク装置９０Ａ、９０Ｂからデータを読み込んだり、磁気ディスク装置９０Ａ、９０Ｂにデータを書き込んだりする機能を有する。
【００３６】
チャネルアダプタ４０Ａ、４０Ｂは、ホストコンピュータ２０Ａ、２０Ｂからの読み出し要求に対応するデータをキャッシュメモリ５０Ａ、５０Ｂから読み出して、ホストコンピュータ２０Ａ、２０Ｂに転送するとともに、ホストコンピュータ２０Ａ、２０Ｂから書き込み要求のあったデータをキャッシュメモリ５０Ａ、５０Ｂ上に書き込む処理を行う機能を有する。
【００３７】
以上の構成において、本発明にかかるデータアクセス方法は、チャネルアダプタ４０Ａ、４０Ｂとキャッシュメモリ５０Ａ、５０Ｂとの間のデータの書き込みに対して適用することができる。そこで、チャネルアダプタ４０Ａ、４０Ｂとキャッシュメモリ５０Ａ、５０Ｂとの間でデータを転送する際のフォーマット変換とチェックコードについて説明する。
【００３８】
固定長データフォーマットに可変長データフォーマットのデータを格納する際に、可変長データフォーマットとしてＣＫＤフォーマットを用いる。ＣＫＤフォーマットのレコードは、カウント部(COUNT)、キー部(Key)、データ部(Data)の３つから構成される。カウント部は、固定長であり、当該レコードのアドレスとデータ長の情報を含む。キー部は、可変長であり、オペレーティングシステムが当該レコードを識別するために用いられる。データ部は、可変長であり、ユーザデータが格納される領域である。カウント部、キー部、データ部をフィールドと呼ぶ。
【００３９】
磁気ディスク装置９０Ａ、９０Ｂでは、ホストコンピュータ２０Ａ、２０Ｂから受け渡された可変長データを固定長の論理ブロックで管理する。このときの固定長は、５１２バイトである。キャッシュメモリ５０Ａ、５０Ｂでは、磁気ディスク装置９０Ａ、９０Ｂから読み出したデータについて、ＬＢＡと呼ばれる５１２バイトの論理ブロックごとに行われたエラーチェックの結果である８バイトのエラーチェックコード（以下、ブロックチェックコード（Block Check Code、ＢＣＣ）という）がこのＬＢＡの末尾に付されたものが格納されている。つまり、キャッシュメモリ５０Ａ、５０Ｂに書き込まれるデータは、ＬＢＡごとにエラー保護のための８バイトのＢＣＣが続いて付加され、全体として５２０バイトのデータ長となる。
【００４０】
また、フィールドごとにエラー保護のために計算された８バイトのエラーチェックコード（以下、フィールドチェックコード（Field Check Code、ＦＣＣ）という）が付加される。このＦＣＣは、各フィールドの末尾に８バイトで付与される。よって、ＬＢＡは、カウント部、キー部、データ部それぞれに８バイトのＦＣＣを含んで５１２バイトとなる。
【００４１】
なお、ＢＣＣは、ＬＢＡ内の全体のデータを使用して計算した結果生成されることが望ましく、ＦＣＣも、各フィールド内の全体のデータを使用して計算した結果生成されることが望ましい。たとえば、エラーチェック方法として巡回冗長検査（ＣＲＣ（Cyclic Redundancy Check））を用い、このＣＲＣによって生成されるＣＲＣ符号を用いてもよいが、これに限定されず、ハミング符号などその他の符号を用いてもよい。
【００４２】
次に、実施例にかかるデータ書き込み方法を実行するディスクアレイ装置１０内のチャネルアダプタ４０Ａ、４０Ｂの構成について説明する。図２は、実施例にかかるチャネルアダプタの内部構成を示すブロック図である。チャネルアダプタ４０は、データバッファ４１、ＬＳＩ（Large Scale Integration）３３０、ＣＰＵ（Central Processing Unit）４３、メモリ４４、プロトコルコントローラ４５、光モジュール４６を含んで構成される。ＬＳＩ３３０、ＣＰＵ４３、プロトコルコントローラ４５は、所定のバスによって接続されており、相互にデータを転送することができる。
【００４３】
ＬＳＩ３３０は、キャッシュコントローラ６０とのインタフェースを担当する。データの書き込みなどのアクセス要求を出すホストコンピュータ２０とキャッシュメモリ５０Ａ、５０Ｂとの間に位置し、ＣＰＵ４３を経由することなくホストコンピュータ２０とキャッシュメモリ５０Ａ、５０Ｂとの間で、データバッファ４１でデータをバッファリングしながらデータを転送するＤＭＡ機能を内蔵し、ＣＰＵ４３からの指示にしたがってキャッシュコントローラ６０との間で通信処理を行う。
【００４４】
なお、図２では、ホストコンピュータ２０とディスクアレイ装置１０とが光ファイバで接続される場合を例示しており、ＬＳＩ３３０のホストコンピュータ２０との接続側には、ホストコンピュータ２０から送られてくる光信号を電気信号に変換し、ディスクアレイ装置１０からの電気信号を光信号に変換する光モジュール４６と、ＬＳＩ３３０およびホストコンピュータ２０の接続に用いられるファイバチャネルのプロトコルを制御するプロトコルコントローラ４５が設けられている。
【００４５】
ＣＰＵ４３は、チャネルアダプタ４０全体の動作制御をつかさどるプロセッサとメモリインタフェース部分を有するＬＳＩであり、データ書き込み方法に関係する機能モジュールとしてデータ処理ブロック（図示せず）を有している。データ処理ブロックは、ＣＫＤフォーマットを有するデータを新たにキャッシュメモリ５０Ａ、５０Ｂに書き込んだり更新したりする際に必要なディスクリプタを生成する機能を有する。
【００４６】
たとえば、キャッシュメモリ５０Ａ、５０Ｂに新たにＣＫＤフォーマットを有するデータを書き込むディスクリプタを生成したり、ＣＫＤフォーマットを有する更新データを受信する前に、ホストコンピュータ２０との間でそのデータについての情報をやり取りして更新データ中の更新するフィールドについての更新情報を取得するとともに、受信した更新データと更新情報に基づいてデータ更新処理（以下、Read Modify Write処理という）を実行するためのディスクリプタを生成したりする機能を有する。ここで、ディスクリプタとは、ＬＳＩ３３０によるデータアクセス処理を実行するために必要な手順を記述したものである。
【００４７】
メモリ４４は、ＣＰＵ４３の処理で使用されるデータなどを格納する記憶装置であり、ＣＰＵ４３と接続される。このメモリ４４には、ＣＰＵ４３のデータ処理ブロックによって生成されたディスクリプタを格納するディスクリプタ格納領域（図示せず）が設けられる。
【００４８】
次に、実施例にかかるデータ書き込み方法を実行するチャネルアダプタ４０内のＬＳＩ３３０の構成について説明する。図３は、実施例にかかるＬＳＩの構成を示す機能ブロック図である。なお、ここでのＬＳＩは、ＤＭＡ（Direct Memory Access）チップである。
【００４９】
ＬＳＩ３３０は、ＣＰＵ４３とのインタフェースとなるＰＣＩ Ｉ／Ｆ３３１と、ホストコンピュータ２０とのインタフェースとなるホストＩ／Ｆ３３２と、キャッシュコントローラ６０Ａ、６０ＢとのインタフェースとなるＣＭ Ｉ／Ｆ３３３と、ホストコンピュータ２０との接続に用いられるファイバチャネルのプロトコルを制御するプロトコルコントローラ３３４と、ＣＰＵ４３がメモリ４４にセットしたディスクリプタをリードするディスクリプタブロック３３６と、キャッシュメモリ５０Ａ、５０Ｂからデータを読み込む際の処理を行うレシーブエンジン３３７と、ホストコンピュータ２０からのデータの書き込み要求に応じてキャッシュメモリ５０Ａ、５０Ｂに対するデータ処理を行うセンドエンジン３４２とを備えて構成される。
【００５０】
プロトコルコントローラ３３４は、ホストコンピュータ２０から送信される書き込み要求のあったデータ（以下、書き込みデータという）や更新要求のあったデータ（以下、更新データという）を格納する書き込みデータバッファ３３５を有している。この書き込みデータバッファ３３５は、特許請求の範囲における書き込みデータ格納手段に対応している。また、ディスクリプタブロック３３６は、ＣＰＵ４３のデータ処理ブロックによってメモリ４４に格納されたディスクリプタをリードし、関係する処理部に読み込んだディスクリプタ情報を通知する機能を有する。
【００５１】
レシーブエンジン３３７は、キャッシュメモリ５０Ａ、５０Ｂからデータをリードするモジュールであり、さらに、キャッシュメモリ５０Ａ、５０Ｂ上からキャッシュデータを読み込む処理を行うＣＭリードブロック３３８と、キャッシュメモリ５０Ａ、５０Ｂから読み込んだキャッシュデータの論理ブロックごとの保証を行うＢＣＣチェックブロック３３９と、キャッシュメモリ５０Ａ、５０Ｂから読み込んだキャッシュデータのフィールドごとの保証を行うＦＣＣチェックブロック３４０と、ＣＭリードブロック３３８によって読み込まれたキャッシュデータを格納するリードデータ格納バッファ３４１とを備えて構成される。
【００５２】
ＣＭリードブロック３３８は、データリード用ディスクリプタに記述されたキャッシュアドレスフィールドに基づいてキャッシュメモリ５０Ａ、５０Ｂからキャッシュデータを読み込み、そのキャッシュデータをデータリード用ディスクリプタ中で指定されたリードデータ格納バッファのアドレスに書き込む処理を行う。また、データリード用ディスクリプタ中での指定に従って、読み込んだデータをＢＣＣチェックブロック３３９またはＦＣＣチェックブロック３４０に渡す。
【００５３】
なお、ＣＭリードブロック３３８は、リードデータ格納バッファ３４１へのデータの書き込み終了後に、ディスクリプタブロック３３６を介して「データ転送終了通知」をＣＰＵ４３へ通知する。この「データ転送終了通知」には、「ＢＣＣチェックが行われたか否かを示すビット」、「ＢＣＣチェック結果を示すビット」、「ＦＣＣチェックが行われたか否かを示すビット」、「ＦＣＣチェック結果を示すビット」が含まれている。
【００５４】
ＢＣＣチェックブロック３３９は、ＣＭリードブロック３３８から渡されたキャッシュデータについて論理ブロックごとにエラーチェックを行い、論理ブロックに付されたブロックチェックコードと比較して、リードデータ格納バッファ３４１に格納されたデータにエラーがないかを検査する機能を有する。そして、当該検査が完了すると、該完了をＣＭリードブロック３３８へ通知する。当該完了を通知されたＣＭリードブロック３３８は、前述の「データ転送終了通知」に含まれる「ＢＣＣチェックが行われたか否かを示すビット（ＢＣＣチェックビット）」をオンにする。当該完了を通知されなかった場合は、ＣＭリードブロック３３８は、前述の「データ転送終了通知」に含まれる「ＢＣＣチェックビット」をオフにする。
【００５５】
ＢＣＣチェックブロック３３９によってエラーと判定された場合には、ＢＣＣチェックブロック３３９は、データリード用ディスクリプタ中の設定にかかわらず、キャッシュメモリ５０Ａ、５０Ｂから読み込んだデータにエラーがあることをＣＰＵ４３に対して行い、実行中の処理を終了する。そして、当該エラーをＣＭリードブロック３３８へ通知する。当該エラーを通知されたＣＭリードブロック３３８は、前述の「データ転送終了通知」に含まれる「ＢＣＣチェック結果を示すビット（ＢＣＣエラービット）」をオンにする。また、エラーを通知されなかった場合は、ＣＭリードブロック３３８は、前述の「データ転送終了通知」に含まれる「ＢＣＣエラービット」をオフにする。
【００５６】
ＦＣＣチェックブロック３４０は、ＣＭリードブロック３３８から渡されたキャッシュデータについてフィールドごとにエラーチェックを行い、フィールドに付されたフィールドチェックコード（Field Check Code（ＦＣＣ））と比較して、リードデータ格納バッファ３４１に格納されたデータにエラーがないかを検査する機能を有する。そして、当該検査が完了すると、該完了をＣＭリードブロック３３８へ通知する。当該完了を通知されたＣＭリードブロック３３８は、前述の「データ転送終了通知」に含まれる「ＦＣＣチェックが行われたか否かを示すビット（ＦＣＣチェックビット）」をオンにする。当該完了を通知されなかった場合は、ＣＭリードブロック３３８は、前述の「データ転送終了通知」に含まれる「ＦＣＣチェックビット」をオフにする。
【００５７】
ＦＣＣチェックブロック３４０によってエラーと判定された場合には、ＦＣＣチェックブロック３４０は、データリード用ディスクリプタ中の設定にかかわらず、キャッシュメモリ５０Ａ、５０Ｂから読み込んだデータにエラーがあることをＣＰＵ４３に対して行い、実行中の処理を終了する。そして、当該エラーをＣＭリードブロック３３８へ通知する。当該エラーを通知されたＣＭリードブロック３３８は、前述の「データ転送終了通知」に含まれる「ＦＣＣチェック結果を示すビット（ＦＣＣエラービット）」をオンにする。また、エラーを通知されなかった場合は、ＣＭリードブロック３３８は、前述の「データ転送終了通知」に含まれる「ＦＣＣエラービット」をオフにする。
【００５８】
なお、データリード用ディスクリプタのフィールド長の指定が誤っていた場合には、リードデータ格納バッファ３４１に格納されたデータにエラーがないかの検査は行われないこととなり、当該検査が完了しないので、前述の「データ転送終了通知」に含まれる「ＦＣＣチェックビット」をオフにすることとなる。
【００５９】
そして、ＣＭリードブロック３３８は、データ転送終了時に、ディスクリプタブロック３３６を介してＣＰＵ４３へ「データ転送終了通知」を送信する。このように、「データ転送終了通知」がディスクリプタブロック３３６を介してＣＰＵ４３へ通知されることによって、ＢＣＣチェックおよびＦＣＣチェックの結果が正常であるか否かが判別可能になるとともに、ＢＣＣチェックおよびＦＣＣチェック自体が行われて完了したか否かも判別可能となる。よって、データ操作を指示したホストコンピュータ２０において、ＢＣＣチェックおよびＦＣＣチェックの結果が正常であるか否か、ＢＣＣチェックおよびＦＣＣチェック自体が行われて完了したか否かが判別可能となる。
【００６０】
リードデータ格納バッファ３４１は、ＣＭリードブロック３３８によってキャッシュメモリ５０Ａ、５０Ｂから読み込まれたキャッシュデータを、データリード用ディスクリプタ中で指定されたアドレスに格納する。
【００６１】
センドエンジン３４２は、ホストコンピュータ２０から新たに書き込むデータや更新を行うデータをキャッシュメモリ５０Ａ、５０Ｂに転送するモジュールであり、さらに、キャッシュメモリ５０Ａ、５０Ｂに書き込むデータを読み込むデータリードブロック３４３と、読み込んだデータについて論理ブロックごとにフィールドチェックコードの生成を行うＢＣＣ生成ブロック３４４と、読み込んだデータが更新される内容を含む更新フィールドである場合にそのフィールド部分についてフィールドチェックコードの生成を行うＦＣＣ生成ブロック３４５と、データリードブロック３４３、ＢＣＣ生成ブロック３４４およびＦＣＣ生成ブロック３４５からのデータからキャッシュメモリ５０Ａ、５０Ｂに書き込む論理ブロック長のデータを生成するＣＭライトブロック３４６とを備えて構成される。
【００６２】
データリードブロック３４３は、データライト用ディスクリプタに基づいてプロトコルコントローラ３３４の書き込みデータバッファ３３５またはレシーブエンジン３３７のリードデータ格納バッファ３４１から選択的にデータをフィールド単位に読み込む機能を有する。具体的には、データライト用ディスクリプタが新たなデータの書き込みである場合には、プロトコルコントローラ３３４の書き込みデータバッファ３３５に格納されている書き込みデータを読み込み、そのデータをＣＭライトブロック３４６、ＢＣＣ生成ブロック３４４およびＦＣＣ生成ブロック３４５へと受け渡す処理を行う。
【００６３】
また、データライト用ディスクリプタが更新データの書き込みすなわちRead Modify Write処理である場合には、更新される内容を含むフィールド（以下、更新フィールドという）をプロトコルコントローラ３３４の書き込みデータバッファ３３５から読み込み、そのデータをＣＭライトブロック３４６、ＢＣＣ生成ブロック３４４およびＦＣＣ生成ブロック３４５へと受け渡し、更新されない内容を含むフィールドをレシーブエンジン３３７のリードデータ格納バッファ３４１から読み込み、そのデータをＣＭライトブロック３４６およびＢＣＣ生成ブロック３４４へと受け渡す処理を行う。
【００６４】
ＢＣＣ生成ブロック３４４は、データライト用ディスクリプタに基づいて、データリードブロック３４３から渡されたデータについて論理ブロック単位でＢＣＣを計算して生成し、生成されたＢＣＣをＣＭライトブロック３４６に出力する機能を有する。このとき、書き込みデータを新たに書き込む場合またはRead Modify Write処理で更新される内容を含むフィールドを書き込む場合には、そのフィールド内の所定の位置に付加されるべきＦＣＣの値をＦＣＣ生成ブロック３４５から取得して計算する。
【００６５】
上記したように、データリードブロック３４３によって読み出されるデータの切り替えが行われるので、ＢＣＣを計算するにあたって、更新されないフィールドについてはリードデータ格納バッファ３４１に格納されるキャッシュデータが用いられ、更新フィールドについては書き込みデータバッファ３３５に格納される更新データが用いられる。
【００６６】
ＦＣＣ生成ブロック３４５は、データライト用ディスクリプタに基づいて、データリードブロック３４３がプロトコルコントローラ３３４の書き込みデータバッファ３３５からのデータ、すなわち更新される内容を含む更新フィールドを流している場合に、そのデータについてフィールドごとにＦＣＣを計算して生成し、生成したＦＣＣをＣＭライトブロック３４６に出力する機能を有する。
【００６７】
ＣＭライトブロック３４６は、データライト用ディスクリプタに基づいて、データリードブロック３４３から渡されたデータと、ＢＣＣチェックブロック３３９から入力されるＢＣＣ−ＣＲＣと、ＦＣＣチェックブロック３４０から入力されるＦＣＣとからキャッシュメモリ５０Ａ、５０Ｂに書き込むＬＢＡを生成する機能を有する。
【００６８】
具体的には、実施例にかかるディスクアレイ装置１０では、データは５１２バイトの固定長のＬＢＡで管理されるので、データリードブロック３４３からのデータが５１２バイトになると、その後にＢＣＣを付加する処理を行う。
【００６９】
また、新たにデータを書き込む場合には各フィールドの最後部を含むフィールド書き込みブロックの所定の位置に、そして論理ブロック内に更新内容を含むフィールドを含む場合にはそのフィールドの最後部を含むフィールド書き込みブロックの所定の位置に、ＦＣＣを付加する処理を行う。
【００７０】
次に、図３に示したＬＳＩ３３０で行われるＢＣＣチェック方法およびＦＣＣチェック方法について説明する。図４−１は、ＢＣＣチェック方法を示す図であり、図４−２は、ＦＣＣチェック方法を示す図である。ホストコンピュータ２０からの可変長データ「COUNT＋Key＋Data1＋Data2」は、「COUNT」＋「COUNTのＦＣＣ」＋「Key」＋「KeyのＦＣＣ」＋「Data1」を１つのＬＢＡとし、このＬＢＡを単位としてＢＣＣを付加して磁気ディスク装置９０Ａ、９０Ｂに格納される。また、「Data2」＋「Data2のＦＣＣ」およびパディングデータを１つのＬＢＡとし、このＬＢＡを単位としてＢＣＣを付加して磁気ディスク装置９０Ａ、９０Ｂに格納される。
【００７１】
図４−１に示すように、磁気ディスク装置９０Ａ、９０Ｂから当該データを読み出す際に、ＬＢＡごとにそれらのＢＣＣを検証して、読み出しデータの正当性を検証する。また、図４−２に示すように、磁気ディスク装置９０Ａ、９０Ｂから当該データを読み出す際に、「COUNT」、「Key」、「Data1＋Data2」ごとにそれらのＦＣＣを検証して、読み出しデータの正当性を検証する。
【００７２】
なお、ユーザデータの分割単位である「Data1」および「Data2」それぞれにはＦＣＣが付加されず、あくまで分割単位の最後尾である「Data2」のみにＦＣＣが付加される。そして、このＦＣＣは、全ユーザデータに基づいて生成されたＦＣＣである。すなわち、ＬＢＡ単位に分割されたユーザデータは、その最後尾を含まない場合には、ＦＣＣが付与されることはない。
【００７３】
次に、Read Modify Writeが行われる場合の一連の動作について説明する。図５−１〜図５−３は、Read Modify Write正常時の一連の処理を示す図である。また、図６−１〜図６−３は、Read Modify Write異常時の一連の処理を示す図である。
【００７４】
図５−１に示すように、キャッシュメモリ（ＣＭ）上のデータのうち、「Key」部分を更新対象とする場合を想定する。この変更のためにホストコンピュータ２０（ＨＯＳＴ）から更新データ「Key´」が送信されてきたとする。
【００７５】
次に、更新対象である「Key」を含むＬＢＡをＣＭから読み出し（図５−２）、「Key」を「Key´」で更新した後に、「Key」のＦＣＣを「Key´」のＦＣＣで更新し、当該ＬＢＡのＢＣＣを再計算して更新した後に、当該ＬＢＡをＣＭに書き戻す（図５−３）。
【００７６】
このように、Read Modify Writeの際のＣＭからのＬＢＡのリードが正常に行われた場合には、従来のように、当該リードに際してのＦＣＣチェックおよびＢＣＣチェックを行わなくても問題はなかった。
【００７７】
しかし、図６−１に示すように、キャッシュメモリ（ＣＭ）上のデータのうち、「Key」部分を更新対象とする場合に、この変更のためにホストコンピュータ２０（ＨＯＳＴ）から更新データ「Key´」が送信されてきた際に、従来のように、当該リードに際してのＦＣＣチェックおよびＢＣＣチェックを行わないと、Read Modify Writeの際のＣＭからのＬＢＡのリードが正常に行われなかった場合には（図６−２参照）、図６−３に示すように、たとえ、「Key」を「Key´」で更新した後に、「Key」のＦＣＣを「Key´」のＦＣＣで更新し、当該ＬＢＡのＢＣＣを再計算して更新した後に、当該ＬＢＡをＣＭに書き戻したとしても、当該ＬＢＡ単位でのＢＣＣは正常に見えてしまうため、データの異常が発見されることはなかった。
【００７８】
本発明は、かかる不都合を解消するために、ＣＭからのＬＢＡのリードに際して、必ずＦＣＣチェックおよびＢＣＣチェックを行うこととしたため、Read Modify Write時におけるデータの保証を確実にした。なお、Read Modify Write時に限らず、データの読み出し時においても必ずＦＣＣチェックおよびＢＣＣチェックを行うこととし、ＣＭからのＬＢＡのリードに際して発生しうるデータのリードミスを早期に発見することを可能とした。
【００７９】
次に、図３に示したＬＳＩ３３０におけるRead Modify Writeエラーチェック結果通知処理手順について説明する。図７は、Read Modify Writeエラーチェック結果通知処理手順を示すフローチャートである。同図に示すように、先ず、ＣＭリードブロック３３８は、ホストコンピュータ２０からのデータ操作に応じて、キャッシュメモリ５０Ａまたは５０Ｂから更新対象のＬＢＡを読み出す（ステップＳ１０１）。
【００８０】
続いて、ＢＣＣチェックブロック３３９は、ＣＭから読み出された全てのＬＢＡのＢＣＣチェックを行い、チェック結果をＣＭリードブロック３３８に通知する（ステップＳ１０２）。続いて、ＣＭリードブロック３３８は、ＢＣＣエラーありか否かを判定し（ステップＳ１０３）、ＢＣＣエラーありの場合（ステップＳ１０３肯定）、「データ転送終了通知」の「ＢＣＣエラービット」をオンにし（ステップＳ１０４）、ＢＣＣエラーなしの場合（ステップＳ１０３否定）、「データ転送終了通知」の「ＢＣＣエラービット」をオフにする（ステップＳ１０５）。ステップＳ１０５が終了すると、ステップＳ１０６へ移る。
【００８１】
続いて、ＣＭリードブロック３３８は、ＣＭから読み出された全てのＬＢＡのＢＣＣチェックが完了したか否かを判定し（ステップＳ１０６）、完了の場合（ステップＳ１０６肯定）、「データ転送終了通知」の「ＢＣＣチェックビット」をオンにし（ステップＳ１０７）、完了でない場合（ステップＳ１０６否定）、「データ転送終了通知」の「ＢＣＣチェックビット」をオフにする（ステップＳ１０８）。ステップＳ１０８が終了すると、ステップＳ１０９へ移る。
【００８２】
続いて、ＦＣＣチェックブロック３４０は、ＣＭから読み出された全てのＬＢＡの全フィールドのＦＣＣチェックを行い、チェック結果をＣＭリードブロック３３８に通知する（ステップＳ１０９）。続いて、ＣＭリードブロック３３８は、ＦＣＣエラーありか否かを判定し（ステップＳ１１０）、ＦＣＣエラーありの場合（ステップＳ１１０肯定）、「データ転送終了通知」の「ＦＣＣエラービット」をオンにし（ステップＳ１１１）、ＦＣＣエラーなしの場合（ステップＳ１１０否定）、「データ転送終了通知」の「ＦＣＣエラービット」をオフにする（ステップＳ１１２）。ステップＳ１１２が終了すると、ステップＳ１１３へ移る。
【００８３】
続いて、ＣＭリードブロック３３８は、ＣＭから読み出された全てのＬＢＡの全フィールドのＦＣＣチェックが完了したか否かを判定し（ステップＳ１１３）、完了の場合（ステップＳ１１３肯定）、「データ転送終了通知」の「ＦＣＣチェックビット」をオンにし（ステップＳ１１４）、完了でない場合（ステップＳ１１３否定）、「データ転送終了通知」の「ＦＣＣチェックビット」をオフにする（ステップＳ１１５）。ステップＳ１１５が終了すると、ステップＳ１１６へ移る。
【００８４】
続いて、データリードブロック３４３は、ホストコンピュータからの更新データがあるか否かを判定し（ステップＳ１１６）、更新データありの場合（ステップＳ１１６肯定）、更新データのＦＣＣを算出して該ＦＣＣとともにデータを更新し（ステップＳ１１７）、データが更新されたＬＢＡのＢＣＣを算出して該ＢＣＣとともにＬＢＡを更新する（ステップＳ１１８）。更新データなしの場合（ステップＳ１１６否定）、ステップＳ１１９へ移る。
【００８５】
続いて、ＣＭリードブロック３３８は、「データ転送終了通知」を、ディスクリプタブロック３３６を介してＣＰＵ４３へ送信する（ステップＳ１１９）。ＣＰＵ４３は、受信した「データ転送終了通知」の内容に基づいて、データ操作を指示したホストコンピュータ２０へＣＭからのデータ読み出しにエラーがあったか否かを通知することとなる。
【００８６】
以上、本発明の実施例を説明したが、本発明は、これに限られるものではなく、特許請求の範囲に記載した技術的思想の範囲内で、更に種々の異なる実施例で実施されてもよいものである。また、実施例に記載した効果は、これに限定されるものではない。
【００８７】
また、上記実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記実施例で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００８８】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００８９】
さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵ（Central Processing Unit）（またはＭＰＵ（Micro Processing Unit）、ＭＣＵ（Micro Controller Unit）などのマイクロ・コンピュータ）および当該ＣＰＵ（またはＭＰＵ、ＭＣＵなどのマイクロ・コンピュータ）にて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現されてもよい。
【００９０】
（付記１）所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセス方法であって、
前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証工程と、
前記検証工程による検証結果を前記外部装置へ通知する検証結果通知工程と
を含んだことを特徴とするデータアクセス方法。
【００９１】
（付記２）前記検証結果は、前記ブロックデータ検証コードに基づいて前記可変長データを前記ブロック単位で検証したか否かを示すブロック検証情報と、前記フィールドデータ検証コードに基づいて前記可変長データを前記フィールド単位で検証したか否かを示すフィールド検証情報とを含むことを特徴とする付記１に記載のデータアクセス方法。
【００９２】
（付記３）前記検証結果通知工程は、前記ブロック検証情報が未検証を示す情報であった場合、または前記フィールド検証情報が未検証を示す情報であった場合に、前記検証工程による前記検証結果にかかわらず該検証結果を異常として通知することを特徴とする付記２に記載のデータアクセス方法。
【００９３】
（付記４）前記フィールドは、該フィールドに付与されているフィールドデータ検証コードを含むデータ長を指定して読み出されるものであり、
前記検証工程は、前記データ長の指定が誤っていた場合に、前記フィールド検証情報に未検証を示す情報を設定することを特徴とする付記２または３に記載のデータアクセス方法。
【００９４】
（付記５）更新データを受信すると、該更新データによる更新対象の被更新データを前記データ蓄積用メモリから読み出して前記検証工程による該被更新データの検証を行った後に、前記更新データにより前記被更新データのフィールドを更新し、更新後のフィールドに対応してフィールドデータ検証コードを更新するとともに、該更新後のフィールドを含むブロックに対応するブロックデータ検証コードを更新することを特徴とする付記１〜４のいずれか一つに記載のデータアクセス方法。
【００９５】
（付記６）所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うチャネルアダプタであって、
前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証手段と、
前記検証手段による検証結果を前記外部装置へ通知する検証結果通知手段と
を有することを特徴とするチャネルアダプタ。
【００９６】
（付記７）前記検証結果は、前記ブロックデータ検証コードに基づいて前記可変長データを前記ブロック単位で検証したか否かを示すブロック検証情報と、前記フィールドデータ検証コードに基づいて前記可変長データを前記フィールド単位で検証したか否かを示すフィールド検証情報とを含むことを特徴とする付記６に記載のチャネルアダプタ。
【００９７】
（付記８）前記検証結果通知手段は、前記ブロック検証情報が未検証を示すものであった場合、または前記フィールド検証情報が未検証を示すものであった場合に、前記検証手段による前記検証結果にかかわらず該検証結果を異常として通知することを特徴とする付記７に記載のチャネルアダプタ。
【００９８】
（付記９）所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセスを制御するデータアクセス制御装置であって、
前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証部と、
前記検証部による検証結果を前記外部装置へ通知する検証結果通知部と
を有することを特徴とするデータアクセス制御装置。
【００９９】
（付記１０）所定のフィールドによって構成されるブロックで可変長データを管理するデータ蓄積用メモリとの間で、外部装置からの指示に応じてデータの読み書きを行うデータアクセス手順をチャネルアダプタの制御装置に実行させるデータアクセスプログラムであって、
前記可変長データを前記データ蓄積用メモリから読み出す際に、前記ブロックごとに付加されているブロックデータ検証コードに基づいて該可変長データを該ブロック単位で検証するとともに、前記フィールドごとに付与されているフィールドデータ検証コードに基づいて該可変長データを該フィールド単位で検証する検証手順と、
前記検証手順による検証結果を前記外部装置へ通知する検証結果通知手順と
を前記制御装置に実行させることを特徴とするデータアクセスプログラム。
【産業上の利用可能性】
【０１００】
本発明は、ＦＣＣおよびＢＣＣともに正しくチェックが行われたか否かを明らかにするとともに、ＦＣＣおよびＢＣＣにより確実にエラーを検出したい場合に有用であり、特に、Read Modify Write時に、確実にエラーを検出したい場合に効果的である。
【図面の簡単な説明】
【０１０１】
【図１】実施例にかかるディスクアレイ装置の概略構成を示すブロック図である。
【図２】実施例にかかるチャネルアダプタの内部構成を示すブロック図である。
【図３】実施例にかかるＬＳＩの構成を示す機能ブロック図である。
【図４−１】ＢＣＣチェック方法を示す図である。
【図４−２】ＦＣＣチェック方法を示す図である。
【図５−１】Read Modify Write正常時の一連の処理を示す図（その１）である。
【図５−２】Read Modify Write正常時の一連の処理を示す図（その２）である。
【図５−３】Read Modify Write正常時の一連の処理を示す図（その３）である。
【図６−１】Read Modify Write異常時の一連の処理を示す図（その１）である。
【図６−２】Read Modify Write異常時の一連の処理を示す図（その２）である。
【図６−３】Read Modify Write異常時の一連の処理を示す図（その３）である。
【図７】Read Modify Writeエラーチェック結果通知処理手順を示すフローチャートである。
【符号の説明】
【０１０２】
１０    ディスクアレイ装置
２０、２０Ａ、２０Ｂ    ホストコンピュータ
４０、４０Ａ、４０Ｂ    チャネルアダプタ
４１    データバッファ
４３    ＣＰＵ
４４    メモリ
４５    プロトコルコントローラ
４６    光モジュール
５０Ａ、５０Ｂ    キャッシュメモリ
６０、６０Ａ、６０Ｂ    キャッシュコントローラ
７０Ａ、７０Ｂ    ディスクアダプタ
８０Ａ、８０Ｂ    スイッチ
９０Ａ、９０Ｂ    磁気ディスク装置
３３０    ＬＳＩ
３３１    ＰＣＩ Ｉ／Ｆ
３３２    ホストＩ／Ｆ
３３３    ＣＭ Ｉ／Ｆ
３３４    プロトコルコントローラ
３３５    書き込みデータバッファ
３３６    ディスクリプタブロック
３３７    レシーブエンジン
３３８    ＣＭリードブロック
３３９    ＢＣＣチェックブロック
３４０    ＦＣＣチェックブロック
３４１    リードデータ格納バッファ
３４２    センドエンジン
３４３    データリードブロック
３４４    ＢＣＣ生成ブロック
３４５    ＦＣＣ生成ブロック
３４６    ＣＭライトブロック
【図１】
2008197804.tif 000003
【図２】
2008197804.tif 000004
【図３】
2008197804.tif 000005
【図４−１】
2008197804.tif 000006
【図４−２】
2008197804.tif 000007
【図５−１】
2008197804.tif 000008
【図５−２】
2008197804.tif 000009
【図５−３】
2008197804.tif 000010
【図６−１】
2008197804.tif 000011
【図６−２】
2008197804.tif 000012
【図６−３】
2008197804.tif 000013
【図７】
2008197804.tif 000014