説明

データ書込み方法とチャネルアダプタ

【課題】固定長データフォーマットでデータを管理するキャッシュメモリに、所定のフィールドからなる可変長データフォーマットのデータを書込むデータ書込み方法を提供する。
【解決手段】可変長データフォーマットのレコードを受信するレコード受信工程と、受信したレコードのフィールドごとにフィールドチェックコードを生成するフィールドチェックコード生成工程と、受信したレコードについて固定長データの単位でブロックチェックコードを生成するブロックチェックコード生成工程と、受信したレコードを読出し、フィールドチェックコードとブロックチェックコードを用いて、フィールドチェックコードとブロックチェックコードをともに含む固定長データを組み立ててキャッシュメモリに転送して書込むデータ書込み工程とを含む。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、固定長フォーマットでデータを管理するデータ蓄積装置での可変長データフォーマットを有するデータレコードの書込み方法と、その書込み方法を実行するチャネルアダプタに関するものである。
【背景技術】
【0002】
ベンダ独自のオペレーティングシステムによって稼動するメインフレーム系システムにおいては、その外部記憶装置として、可変長レコードのデータフォーマットを有する磁気ディスク装置が利用されていた。この可変長レコードのデータフォーマットでは、カウント部(Count)、キー部(Key)、データ部(Data)の3つのフィールドから1つのレコードが構成され、CKDフォーマットとも呼ばれる。このCKDフォーマットにおいては、1つのデータは1つのレコードを単位として管理される。
【0003】
一方、情報処理システムに使用される外部記憶装置として、データアクセスの高速性やデータの障害耐性を高める構成を有するディスクアレイ装置(RAID(Redundant Arrays of Inexpensive Disks)装置ともいう)が多く用いられている。このディスクアレイ装置は、種類の異なる汎用的なオペレーティングシステムによって稼動するオープン系システムで多く利用されるため、固定長レコードのデータフォーマットを有している。たとえば、一般的なディスクアレイ装置では、512バイトを一つの論理ブロックとして、データをこの論理ブロックに合わせて格納している。
【0004】
また、近年では、情報処理技術の進展に伴って情報処理端末が一般化してきており、情報処理システムがメインフレーム系システムとオープン系システムの混在によって構成される場合が多くなっている。そのため、固定長のデータフォーマットでデータを記憶するディスクアレイ装置において、メインフレーム系システムからでもデータのアクセスが可能なように構成されるものが提案されている(たとえば、特許文献1参照)。
【0005】
【特許文献1】特開2002−55862号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
ところで、データを外部記憶装置に記憶する際には、記憶したデータが再度読み出されるときに、エラーが生じていないかを判定するためのエラーチェックコードがデータに付される。たとえば、メインフレーム系システムのCKDフォーマットでは、レコードを構成するフィールドごとにエラーチェックが行われその結果を示すコードがフィールドの最後尾に付される。また、オープン系システムの固定長データフォーマットでは、論理ブロックごとにエラーチェックが行われその結果を示すコードが論理ブロックの最後尾に付される。
【0007】
図11は、オープン系システムで用いられる論理ブロックごとにブロックチェックコードが付されたデータの構造を模式的に示す図である。この図に示されるように、論理ブロック110A〜110Cは、データ部115A〜115Cに、所定の長さのブロックチェックコード120A〜120Cが付加されて構成される。ここで、これらの3つの論理ブロック110A〜110Cによって構成されるデータ150の更新要求が出されたとする。このとき、論理ブロック110A,110Cはデータ内容の更新が行われたが、何らかの障害によって論理ブロック110Bはデータ内容の更新が行われずに元のデータのままの状態になってしまったものとする。その後、これらの論理ブロック110A〜110Cのデータ150が読み出された場合に、エラーチェックがされたとしても、更新された論理ブロック110A,110Cのブロックチェックコード120A,120Cも更新されなかった論理ブロック110Bのブロックチェックコード120Bも正しいために、論理ブロック110Bが更新されなかったという障害を検出することができないという問題点があった。メインフレーム系システムでも、同様に更新するはずのデータがフィールド単位で更新されなかった場合に、その障害を検出することができないという問題点があった。
【0008】
また、上述したように、近年におけるメインフレーム系システムとオープン系システムが混在する環境下で使用されるディスクアレイ装置に記憶されるデータのエラーチェックコードの付加方法については、従来提案されていなかった。
【0009】
本発明は、上述した従来技術による問題点を解消するためになされたものであり、障害の発生によりブロック単位またはフィールド単位でデータの更新ができなかった場合に、データが更新されなかったという障害を検出することができ、また、固定長データフォーマットでデータを管理するキャッシュメモリなどのデータ蓄積装置に可変長データフォーマット形式のデータを記憶する場合におけるデータ書込み方法を提供することを目的とする。また、このデータ書込み方法を行うディスクアレイ装置に使用されるチャネルアダプタを提供することも目的とする。
【課題を解決するための手段】
【0010】
上述した課題を解決し、目的を達成するため、請求項1の発明にかかるデータ書込み方法は、所定のフィールドからなる可変長データフォーマットのレコードを固定長データで管理するデータ蓄積用メモリに、外部装置からの指示によって前記可変長データフォーマットのレコードを書込むデータ書込み方法であって、可変長データフォーマットのレコードを受信するレコード受信工程と、受信したレコードのフィールドごとにフィールドチェックコードを生成するフィールドチェックコード生成工程と、受信したレコードについて前記固定長データの単位でブロックチェックコードを生成するブロックチェックコード生成工程と、受信した前記レコードを読出し、前記フィールドチェックコードと前記ブロックチェックコードを用いて、フィールドチェックコードとブロックチェックコードをともに含む固定長データを組み立てて前記データ蓄積用メモリに転送して書込むデータ書込み工程と、を含むことを特徴とする。
【0011】
また、請求項6の発明にかかるチャネルアダプタは、所定のフィールドからなる可変長データフォーマットのレコードを固定長データで管理するデータ蓄積用メモリに、外部装置からの指示によってデータの書込み/読込みを行うチャネルアダプタであって、可変長データフォーマットのレコードの書込要求を受け、前記レコードを受信すると、前記データ蓄積用メモリに前記レコードを書込むためのディスクリプタを生成するデータ処理手段と、受信した前記レコードを格納する書込データ格納手段と、前記ディスクリプタに基づいて、前記書込データ格納手段からレコードを読出すデータリード機能と、読出した前記レコードのフィールドごとにフィールドチェックコードを生成するFCC生成機能と、読出した前記レコードについて前記固定長データの単位でブロックチェックコードを生成するBCC生成機能と、前記データリード機能によって読出されたデータ、前記FCC生成機能によって生成されたフィールドチェックコード、および前記BCC生成機能によって生成されたブロックチェックコードを用いて、フィールドチェックコードとブロックチェックコードをともに含む固定長データを組み立てて前記データ蓄積用メモリに転送して書込むデータ書込機能と、を有するデータセンド手段と、を備えることを特徴とする。
【0012】
この請求項1,6の発明によれば、固定長データフォーマットでデータを管理するデータ蓄積用メモリに対して可変長データフォーマットのレコードが書込まれる場合に、固定長データの長さ単位でチェックコードが付されるとともに、レコードを構成するフィールドごとにもチェックコードが付され、データのエラーを2つの方法でチェックすることができる。
【0013】
また、請求項2の発明にかかるデータ書込み方法は、所定のフィールドからなる可変長データフォーマットのレコードを固定長データで管理するデータ蓄積用メモリに、外部装置からの指示によって前記データ蓄積用メモリ内のレコードの更新を行うデータ書込み方法であって、更新を行う可変長データフォーマットのレコードを受信するレコード受信工程と、更新が行われるレコードを含む固定長の被更新データを前記データ蓄積用メモリから読み出す被更新データ読出し工程と、更新される内容を含む更新フィールドについては前記レコード受信工程で受信した前記レコード内から読出し、前記更新フィールド以外のフィールドについては前記被更新データ読出し工程で読出した前記被更新データ内から読出すデータ読出し工程と、前記更新フィールドについてはフィールド単位でフィールドチェックコードを計算するとともに前記固定長データの長さ単位でブロックチェックコードを計算し、前記更新フィールド以外のフィールドについては前記固定長データの長さ単位でブロックチェックコードを計算するチェックコード生成工程と、前記データ読出し工程で読み出されたデータと、前記チェックコード生成工程で生成されたフィールドチェックコードとブロックチェックコードとを用いて、フィールドチェックコードとブロックチェックコードをともに含む固定長データを組み立てて前記データ蓄積用メモリに転送して書込むデータ書込み工程と、を含むことを特徴とする。
【0014】
さらに、請求項7の発明にかかるチャネルアダプタは、請求項6の発明において、前記データ蓄積用メモリからキャッシュデータを読出すデータリード機能と、読出された前記キャッシュデータを格納するリードデータ格納機能と、を有するデータレシーブ手段をさらに備え、前記データ処理手段は、可変長データフォーマットのレコードの更新要求を受けると、前記データセンド手段のデータリード機能に、更新される内容を含む前記レコード中の更新フィールドについては前記書込データ格納手段から読出させ、前記更新フィールド以外の前記レコード中のフィールドは前記データレシーブ手段の前記リードデータ格納機能から読出させるディスクリプタを生成することを特徴とする。
【0015】
この請求項2,7の発明によれば、固定長データフォーマットでデータを管理するデータ蓄積用メモリに対して可変長データフォーマットのレコードが書込まれる場合に、固定長データの長さ単位でチェックコードが付されるとともに、レコードを構成するフィールドごとにもチェックコードが付され、データのエラーを2つの方法でチェックすることができる。また、更新フィールドでないデータの書込処理には被更新データを使用して、フィールドチェックコードの計算を省略するようにしている。
【0016】
また、請求項3の発明にかかるデータ書込み方法は、請求項2の発明において、前記被更新データ読出し工程で、前記被更新データについて固定長データの単位またはフィールド単位でエラーチェックを行い、エラーが検出された場合に、データ書込処理を中止することを特徴とする。
【0017】
さらに、請求項8の発明にかかるチャネルアダプタは、請求項7の発明において、前記データレシーブ手段は、読出した前記キャッシュデータのエラーチェックを行い、エラーが存在する場合に処理を中止するエラーチェック機能をさらに備えることを特徴とする。
【0018】
この請求項3,8の発明によれば、データ蓄積用メモリから読み出されたデータについて、フィールド単位または固定長データの単位でエラーチェックを行うことができ、エラーが検出された場合には、データのアクセス処理が終了される。
【0019】
また、請求項4の発明にかかるデータ書込み方法は、請求項2の発明において、前記データ蓄積用メモリは、前記固定長データよりも短い長さのフィールド書込単位でデータの管理を行い、前記レコード受信工程では、前記更新フィールドが含まれる前記固定長データ内のフィールド書込単位の位置を求める処理をさらに行い、前記更新フィールドが前記固定長データの最後部を含むフィールド書込単位に含まれる場合に、前記チェックコード生成工程では、前記更新フィールドを含まないフィールド書込単位のデータについては前記被更新データのブロックチェックコードのみを計算し、前記データ書込み工程では、前記更新フィールドを含むフィールド書込単位のデータ、前記チェックコード生成工程で生成されたフィールドチェックコードとブロックチェックコードを用いて、固定長データの最後部のフィールド書込単位のデータのみを組み立てて前記データ蓄積用メモリに転送して書込むことを特徴とする。
【0020】
さらに、請求項9の発明にかかるチャネルアダプタは、請求項7の発明において、前記データ蓄積用メモリは、前記固定長データよりも短い長さのフィールド書込単位でデータの管理を行い、前記データ処理手段は、前記更新フィールドが含まれる前記固定長データ内のフィールド書込単位の位置を求める機能をさらに備え、前記データ処理手段は、前記更新フィールドが前記固定長データの最後部を含むフィールド書込単位に含まれる場合に、前記データセンド手段のデータリード機能に、前記更新フィールドを含まないフィールド書込単位のデータを読み出す場合にのみ該データを前記BCC生成機能にのみ流させ、前記データ書込機能に、前記データリード機能によって読出された更新フィールドを含むフィールド書込単位のデータ、前記FCC生成機能によって生成されたフィールドチェックコード、および前記BCC生成機能によって生成されたブロックチェックコードを用いて、固定長データの最後部のフィールド書込単位のデータのみを組み立てて前記データ蓄積用メモリに転送して書込ませるディスクリプタを生成することを特徴とする。
【0021】
この請求項4,9の発明によれば、更新フィールドが含まれるフィールド書込単位が固定長データの最後部を含む場合には、レコードの更新の前後で不変のフィールドを含むフィールド書込単位については、そのデータをブロックチェックコードの計算のみに使用して、データの書込みには使用しないようにしている。
【0022】
また、請求項5の発明にかかるデータ書込み方法は、請求項1または2の発明において、前記フィールドチェックコードは、前記フィールドに含まれる全体の情報を用いて計算される方法によって生成され、前記ブロックチェックコードは、前記固定長データに含まれる全体の情報を用いて計算される方法によって生成されることを特徴とする。
【0023】
さらに、請求項10の発明にかかるチャネルアダプタは、請求項6の発明において、前記データセンド手段の前記FCC生成機能は、前記フィールドに含まれる全体の情報を用いてフィールドチェックコードを計算し、前記BCC生成機能は、前記固定長データに含まれる全体の情報を用いてブロックチェックコード計算することを特徴とする。
【0024】
この請求項5,10の発明によれば、フィールドに含まれる全体の情報と固定長データに含まれる全体の情報を用いて計算されるチェックコードを、それぞれフィールドごとおよび固定長データ単位に付すようにしている。
【発明の効果】
【0025】
請求項1,6の発明によれば、データの更新時にたとえば1つのフィールド全体が更新されなかったデータをリード処理する場合に、フィールドチェックコードによるチェックは正しくても、ブロックチェックコードによるチェックはエラーとなるので、フィールド全体が更新されなかったような障害の発生を検出することができるという効果を有する。また、同様に、固定長データ全体が更新されなかったような障害の発生も検出することができる。その結果、データ蓄積用メモリに格納されるデータの信頼性を一層高めることができる。
【0026】
請求項2,7の発明によれば、データの更新時にたとえば1つのフィールド全体が更新されなかったデータをリード処理する場合に、フィールドチェックコードによるチェックは正しくても、ブロックチェックコードによるチェックはエラーとなるので、フィールド全体が更新されなかったような障害の発生を検出することができるという効果を有する。また、同様に、固定長データ全体が更新されなかったような障害の発生も検出することができる。その結果、データ蓄積用メモリに格納されるデータの信頼性を一層高めることができる。さらに、更新フィールドでないデータの書込処理には被更新データを使用して、フィールドチェックコードの計算を省略するようにしているので、全て更新データを用いて更新する場合に比して、データの更新処理にかかる時間を短縮することができるという効果を有する。
【0027】
請求項3,8の発明によれば、データ蓄積用メモリに以前更新されたデータが、たとえばフィールド単位や固定長データの長さの単位で更新されなかったという障害が発生したことを検出することができるという効果を有する。
【0028】
請求項4,9の発明によれば、更新フィールドが含まれるフィールド書込単位が固定長データの最後部を含む場合には、レコードの更新の前後で不変のフィールドを含むフィールド書込単位のデータをデータ蓄積用メモリに書込まず、更新フィールドが含まれるフィールド書込単位のみをデータ蓄積用メモリに書込むようにして、全て更新データを用いて更新する場合に比して、データの更新処理にかかる時間を短縮することができるという効果を有する。
【0029】
請求項5,10の発明によれば、チェックコードが付される位置よって計算されるチェックコードの場合では、フィールド全体または固定長データ全体が更新されなかったような障害を検出することができないが、フィールドに含まれる全体の情報または固定長データに含まれる全体の情報を用いて計算されるチェックコードを用いることで、フィールド全体または固定長データ全体が更新されなかったような障害を検出することができ、データの信頼性を一層高めることができるという効果を有する。
【発明を実施するための最良の形態】
【0030】
以下に添付図面を参照して、この発明にかかるデータ書込み方法とチャネルアダプタの好適な実施例を詳細に説明する。
【実施例1】
【0031】
この発明にかかるデータ書込み方法は、固定長のデータフォーマットに可変長のデータフォーマットのデータを格納する形式でデータを管理し、固定長データへのアクセスも可変長データへのアクセスもともに対処可能な記憶装置(データ蓄積用メモリ)に対して適用することができる。以下の説明では、このようなデータ書込み方法およびその方法を実行する装置として、ディスクアレイ装置におけるキャッシュメモリへのデータのリード/ライトを行うチャネルアダプタを例に挙げて説明する。
【0032】
図1は、本発明にかかるデータ書込み方法が適用されるディスクアレイ装置の構成を模式的に示すブロック図である。ディスクアレイ装置10は、ホストコンピュータ40の外部記憶装置として機能する装置であり、データを格納するディスクアレイ部20と、ディスクアレイ部20の制御を行うディスクアレイ制御部30と、を備えて構成される。なお、ホストコンピュータ40は、特許請求の範囲における外部装置に対応している。
【0033】
ディスクアレイ部20は、複数の磁気ディスク装置21A,21Bと、複数の磁気ディスク装置21A,21Bの切り替えを行うスイッチ22A,22Bとから構成される。この磁気ディスク装置21A,21Bは、一般的にデータアクセスの速さとデータの冗長性の段階に応じて分類されるRAIDのレベルによって異なる構成を有する。たとえば、データを格納するための磁気ディスク装置と、この磁気ディスク装置に格納されたデータをミラーリングするための磁気ディスク装置と、磁気ディスク装置に格納されたデータに対して作成されたパリティデータを格納するための磁気ディスク装置というように、RAIDのレベルに対応してそれぞれの磁気ディスク装置の用途が分かれている。なお、磁気ディスク装置21A,21Bは、固定長のデータフォーマットでデータを格納しているものとする。
【0034】
ディスクアレイ制御部30は、ホストコンピュータ40に対するインタフェース制御を行うチャネルアダプタ31と、磁気ディスク装置21A,21Bから読み出したデータを一時的に保持するキャッシュメモリ32と、データのリード/ライト時の各種制御を行い、キャッシュメモリ32の管理を行うキャッシュマネージャ33と、データのリード/ライト時にキャッシュマネージャ33の指示に基づいてそれぞれの磁気ディスク装置21A,21Bに対する制御を行うディスクアダプタ34と、を備えて構成される。
【0035】
キャッシュマネージャ33は、ホストコンピュータ40から読み出し要求のあったデータがキャッシュメモリ32上にない場合に、磁気ディスク装置21A,21Bからデータを読み出してキャッシュメモリ32上に置いて、チャネルアダプタ31によって読み込み可能な状態とする機能を有する。なお、キャッシュメモリ32の容量が飽和した場合には、使われていないデータや最後にアクセスされてから所定の期間が経過したデータなどを廃棄して新たなデータを書込むための領域の確保が行われる。また、キャッシュマネージャ33は、ホストコンピュータ40からの書込要求によってキャッシュメモリ32に書込まれたデータを磁気ディスク装置21A,21Bへ書込むようにディスクアダプタ34に指示する機能も有する。
【0036】
キャッシュメモリ32は、キャッシュマネージャ33によって磁気ディスク装置21A,21Bから読み出されたデータを格納したり、ホストコンピュータ40からの書込要求のあったデータを格納したりする機能を有する。ディスクアダプタ34は、キャッシュマネージャ33からの指示に基づいて、磁気ディスク装置21A,21Bからデータを読み込んだり、磁気ディスク装置21A,21Bにデータを書込んだりする機能を有する。なお、キャッシュメモリ32は、特許請求の範囲におけるデータ蓄積用メモリに対応している。
【0037】
チャネルアダプタ31は、ホストコンピュータ40からの読み出し要求に対応するデータをキャッシュメモリ32から読み出して、ホストコンピュータ40に転送するとともに、ホストコンピュータ40から書込要求のあったデータをキャッシュメモリ32上に書込む処理を行う機能を有する。
【0038】
以上の構成において、本発明にかかるデータ書込み方法は、チャネルアダプタ31とキャッシュメモリ32との間のデータの書込みに対して適用することができる。そこで、チャネルアダプタ31とキャッシュメモリ32との間でデータを転送する際のフォーマット変換とチェックコードについて説明する。まず、磁気ディスク装置21A,21Bでは、データを固定長の論理ブロックで管理するものとする。なお、以下の説明ではこのときの固定長を512バイトであるものとする。
【0039】
図2は、キャッシュメモリで管理されるデータの構造を模式的に示す図である。キャッシュメモリ32では、磁気ディスク装置21A,21Bから読み出したデータについて、512バイトの論理ブロックごとに行われたエラーチェックの結果である8バイトのエラーチェックコード(以下、ブロックチェックコード(BCC)という)120が論理ブロック110の後に付されたものを格納している。つまり、キャッシュメモリ32に書込まれるデータ100は、512バイトの論理ブロック110ごとにエラー保護のための8バイトのブロックチェックコード120が続いて付加され、全体として520バイトのデータ長となる。
【0040】
また、キャッシュメモリ32では、論理ブロック110の半分の単位、すなわち256バイトの固定長でデータが管理されるものとする。この論理ブロックの半分の単位を、以下ではハーフ論理ブロック111というものとする。また、ハーフ論理ブロック111内は、64バイトごとの小ブロックに区切られており、この小ブロックをフィールド書込ブロック112というものとする。
【0041】
つぎに、この固定長データフォーマットに可変長データフォーマットのデータを格納する際の取り決めについて説明する。この説明では、可変長データフォーマットとしてCKDフォーマットを用いるものとする。図3は、CKDフォーマットのデータの構造を模式的に示す図である。CKDフォーマットのレコード200は、カウント部(Count)201、キー部(Key)202、データ部(Data)203の3つから構成される。カウント部201は、固定長であり、レコード200のアドレスとデータ長の情報を含む。キー部202は、可変長であり、オペレーティングシステムがレコード200を識別するために用いられる。データ部203は、可変長であり、ユーザデータが格納される領域である。
【0042】
上述したように、キャッシュメモリ32ではハーフ論理ブロック111の単位でデータを管理しているので、可変長データ(CKDデータ)はハーフ論理ブロック111の先頭から格納される。そのため、ハーフ論理ブロック111内には、2つ以上の可変長データ(CKDデータ)のレコード200が格納されることはない。また、レコード200の各フィールド201〜203は、ハーフ論理ブロック111内のフィールド書込ブロック112の先頭から書込まれるものとし、2つの異なるフィールド201〜203たとえばカウント部201とキー部202やキー部202とデータ部203が同一のフィールド書込ブロック112内に書かれることはない。また、フィールド201〜203ごとにエラー保護のために計算された8バイトのエラーチェックコード(以下、フィールドチェックコード(FCC)という)130が書込まれる。このフィールドチェックコード130は、フィールド書込ブロック112の最後の8バイトに書込まれるものとする。
【0043】
なお、ブロックチェックコード120は、論理ブロック110内の全体のデータを使用して計算した結果生成されるものが望ましく、フィールドチェックコード130も、フィールド201〜203内の全体のデータを使用して計算した結果生成されるものが望ましい。本明細書では、エラーチェック方法として巡回冗長検査(Cyclic Redundancy Check)を用い、チェックコードとしてこの巡回冗長検査によって生成される巡回冗長検査符号(以下、CRCという)を用いるものとする。また、この明細書では、論理ブロック110ごとに付されるCRCをBCC−CRCといい、フィールド201〜203ごとに付されるCRCをFCC−CRCというものとする。
【0044】
つぎに、本発明にかかるデータ書込み方法を実行するこのディスクアレイ装置10内のチャネルアダプタ31の構成について説明する。図4は、チャネルアダプタの機能構成を模式的に示すブロック図であり、図5は、チャネルアダプタ中のプロトコル−DMAチップの機能構成を模式的に示すブロック図である。チャネルアダプタ31は、MPU(Micro Processing Unit)チップセット310、メモリ320、プロトコル−DMA(Direct Memory Access)チップ330を含んで構成される。MPUチップセット310、プロトコル−DMAチップ330は、PCI(Peripheral Component Interconnect)バス350によって接続されており、相互にデータを転送することができる。
【0045】
MPUチップセット310は、チャネルアダプタ31全体の動作制御をつかさどるプロセッサとメモリインタフェース部分を有するLSIであり、データ書込み方法に関係する機能モジュールとしてデータ処理ブロック311を有している。データ処理ブロック311は、CKDフォーマットを有するデータを新たにキャッシュメモリ32に書込んだり更新したりする際に必要なディスクリプタを生成する機能を有する。たとえば、キャッシュメモリ32に新たにCKDフォーマットを有するデータを書込むディスクリプタを生成したり、CKDフォーマットを有する更新データを受信する前に、ホストコンピュータ40との間でそのデータについての情報をやり取りして更新データ中の更新するフィールドについての更新情報を取得するとともに、受信した更新データと更新情報に基づいてデータ更新処理(以下、ReadModifyWrite処理という)を実行するためのディスクリプタを生成したりする機能を有する。このデータ処理ブロック311は、特許請求の範囲におけるデータ処理手段に対応する。ここで、ディスクリプタとは、プロトコル−DMAチップ330によるデータアクセス処理を実行するために必要な手順を記述したものである。
【0046】
図6−1は、更新データブロックによって生成されるデータリード用ディスクリプタの構成の一例を示す図であり、図6−2は、更新データブロックによって生成されるデータライト用ディスクリプタの構成の一例を示す図である。図6−1に示されるデータリード用ディスクリプタ610は、後述するプロトコル−DMAチップ330内のセンドエンジン342で使用されるディスクリプタかレシーブエンジン337で使用されるディスクリプタかを識別するディスクリプタ識別子を格納する「SNE/RVE」フィールド611と、リード処理の内容を示す「mode(r)」フィールド612と、データ転送長を指定する「dl(r)」フィールド613と、転送元のキャッシュメモリ32上のアドレスを指定する「cma(r)」フィールド614と、転送先のレシーブエンジン337のリードデータ格納バッファ341内のアドレスを指定する「mema(r)」フィールド615と、を含んで構成される。本実施例1では、上記「mode(r)」フィールド612として、このデータリード用ディスクリプタ610に記述された処理の終了後にMPUチップセット310へ割り込みを行って通知するモードと、読み込んだデータのBCCのチェック処理の終了後にMPUチップセット310への割り込みを行わないモードと、読み込んだデータのFCCのチェック処理の終了後にMPUチップセット310への割り込みを行わないモードとの3種類のモードを選択することができる。
【0047】
また、図6−2に示されるデータライト用ディスクリプタ620は、プロトコル−DMAチップ330内のセンドエンジン342で使用されるディスクリプタかレシーブエンジン337で使用されるディスクリプタかを識別するディスクリプタ識別子を格納する「SNE/RVE」フィールド621と、リード処理の内容を示す「mode(s)」フィールド622と、データ転送長を指定する「dl(s)」フィールド623と、転送先のキャッシュメモリ32上のアドレスを指定する「cma(s)」フィールド624と、転送元の後述するプロトコル−DMAチップ330内のプロトコルコントローラ334の書込データバッファ335内のアドレスまたはレシーブエンジン337のリードデータ格納バッファ341内のアドレスを指定する「mema(s)」フィールド625と、を含んで構成される。本実施例1では、上記「mode(s)」フィールド622として、このデータライト用ディスクリプタ620に記述された処理の終了後にMPUチップセット310へ割り込みを行って通知するモードと、書込んだデータのBCCの生成を指定してMPUチップセット310への割り込みを行わないモードとの2種類を選択することができる。
【0048】
メモリ320は、MPUチップセット310の処理で使用されるデータなどを格納する記憶装置であり、MPUチップセット310と接続される。このメモリ320には、MPUチップセット310のデータ処理ブロック311によって生成されたディスクリプタを格納するディスクリプタ格納領域321が設けられる。図7は、メモリのディスクリプタ格納領域内の様子を模式的に示す図である。この図に示されるように、ディスクリプタ格納領域321内には、MPUチップセット310によって生成されたディスクリプタが順に蓄積されていく。ここでは、新しいディスクリプタほど図の下方に付加されていくものとする。この図では、上から順に、データライト用ディスクリプタ(1)、データリード用ディスクリプタ(2)、データライト用ディスクリプタ(3)、・・・、ディスクリプタ(x)が蓄積されており、最も下のディスクリプタ(x)が最も新しく生成されたディスクリプタであることを示している。また、データライト用ディスクリプタ(1)は、新たにデータをキャッシュメモリ32に書込むディスクリプタを示しており、データリード用ディスクリプタ(2)とデータライト用ディスクリプタ(3)とは連続して実行されてキャッシュメモリ32上のCKDフォーマットのデータ(レコード)を更新する後述するReadModifyWrite処理用のディスクリプタを示している。
【0049】
プロトコル−DMAチップ330は、ホストコンピュータ40との接続に用いられるファイバチャネルのプロトコルを制御するとともに、キャッシュマネージャ33とのインタフェースを担当するLSIである。データの書込みなどのアクセス要求を出すホストコンピュータ40とキャッシュメモリ32との間に位置し、プロセッサ(MPUチップセット310)を経由することなくホストコンピュータ40とキャッシュメモリ32との間でデータを転送するDMA機能を内蔵し、MPUチップセット310からの指示にしたがってキャッシュマネージャ33との間で通信処理を行う。なお、この図4では、ホストコンピュータ40とディスクアレイ装置10とが光ファイバで接続される場合を例示しており、プロトコル−DMAチップ330のホストコンピュータ40との接続側には、ホストコンピュータ40から送られてくる光信号を電気信号に変換し、ディスクアレイ装置10からの電気信号を光信号に変換する光−電気変換部360が設けられている。
【0050】
プロトコル−DMAチップ330は、MPUチップセット310とのインタフェースとなるPCI I/F331と、ホストコンピュータ40とのインタフェースとなるホストI/F332と、キャッシュマネージャ33とのインタフェースとなるCM I/F333と、ホストコンピュータ40との接続に用いられるファイバチャネルのプロトコルを制御するプロトコルコントローラ334と、MPUチップセット310がメモリ320にセットしたディスクリプタをリードするディスクリプタリードブロック336と、キャッシュメモリ32からデータを読み込む際の処理を行うレシーブエンジン337と、ホストコンピュータ40からのデータの書込要求に応じてキャッシュメモリ32に対するデータ処理を行うセンドエンジン342と、を備えて構成される。
【0051】
プロトコルコントローラ334は、ホストコンピュータ40から送信される書込要求のあったデータ(以下、書込データという)や更新要求のあったデータ(以下、更新データという)を格納する書込データバッファ335を有している。この書込データバッファ335は、特許請求の範囲における書込データ格納手段に対応している。また、ディスクリプタリードブロック336は、MPUチップセット310のデータ処理ブロック311によってメモリ320に格納されたディスクリプタをリードし、関係する処理部に読み込んだディスクリプタ情報を通知する機能を有する。
【0052】
レシーブエンジン337は、キャッシュメモリ32からデータをリードするモジュールであり、さらに、キャッシュメモリ32上からキャッシュデータを読み込む処理を行うCMリードブロック338と、キャッシュメモリ32から読み込んだキャッシュデータの論理ブロックごとの保証を行うBCCチェックブロック339と、キャッシュメモリ32から読み込んだキャッシュデータのフィールドごとの保証を行うFCCチェックブロック340と、CMリードブロック338によって読み込まれたキャッシュデータを格納するリードデータ格納バッファ341と、を備えて構成される。このレシーブエンジン337は、特許請求の範囲におけるデータレシーブ手段に対応し、キャッシュデータは同様に被更新データ対応している。
【0053】
CMリードブロック338は、データリード用ディスクリプタ610に記述されたキャッシュアドレス「cma(r)」フィールド614に基づいてキャッシュメモリ32からキャッシュデータを読み込み、そのキャッシュデータをデータリード用ディスクリプタ610中の「mema(r)」フィールド615で指定されたリードデータ格納バッファ341のアドレスに書込む処理を行う。また、データリード用ディスクリプタ610中の「mode(r)」フィールド612の指定によって、読み込んだデータをBCCチェックブロック339またはFCCチェックブロック340に渡す。なお、「mode(r)」フィールド612として「MPUチップセットへの通知」が選択されている場合には、単なるデータのリード処理であり、リードデータ格納バッファ341へのデータの書込終了後にデータ転送終了通知をMPUチップセット310へ通知する。このCMリードブロック338は、特許請求の範囲におけるデータレシーブ手段のデータリード機能に対応している。
【0054】
BCCチェックブロック339は、CMリードブロック338から渡されたキャッシュデータについて論理ブロックごとにエラーチェックを行い、論理ブロックに付されたブロックチェックコードと比較して、リードデータ格納バッファ341に格納されたデータにエラーがないかを検査する機能を有する。エラーと判定された場合には、BCCチェックブロック339は、データリード用ディスクリプタ610中の「mode(r)」フィールド612の設定にかかわらず、キャッシュメモリ32から読み込んだデータにエラーがある旨の報告をMPUチップセット310に対して行い、実行中の処理を終了する。
【0055】
FCCチェックブロック340は、CMリードブロック338から渡されたキャッシュデータについてフィールドごとにエラーチェックを行い、フィールドに付されたフィールドチェックコードと比較して、リードデータ格納バッファ341に格納されたデータにエラーがないかを検査する機能を有する。エラーと判定された場合には、FCCチェックブロック340は、データリード用ディスクリプタ610中の「mode(r)」フィールド612の設定にかかわらず、キャッシュメモリ32から読み込んだデータにエラーがある旨の報告をMPUチップセット310に対して行い、実行中の処理を終了する。これらのBCCチェックブロック339とFCCチェックブロック340は、特許請求の範囲におけるデータレシーブ手段のエラーチェック機能に対応している。
【0056】
リードデータ格納バッファ341は、CMライトブロック346によってキャッシュメモリ32から読み込まれたキャッシュデータを、データリード用ディスクリプタ610の「mema(r)」フィールド615で指定されたアドレスに格納する。このリードデータ格納バッファ341は、特許請求の範囲におけるデータレシーブ手段のリードデータ格納機能に対応している。
【0057】
センドエンジン342は、ホストコンピュータ40から新たに書込むデータや更新を行うデータをキャッシュメモリ32に転送するモジュールであり、さらに、キャッシュメモリ32に書込むデータを読み込むデータリードブロック343と、読み込んだデータについて論理ブロックごとにフィールドチェックコードの生成を行うBCC生成ブロック344と、読み込んだデータが更新される内容を含む更新フィールドである場合にそのフィールド部分についてフィールドチェックコードの生成を行うFCC生成ブロック345と、データリードブロック343、BCC生成ブロック344およびFCC生成ブロック345からのデータからキャッシュメモリ32に書込む論理ブロック長のデータを生成するCMライトブロック346と、を備えて構成される。このセンドエンジン342は、特許請求の範囲におけるデータセンド手段に対応している。
【0058】
データリードブロック343は、データライト用ディスクリプタ620に基づいてプロトコルコントローラ334の書込データバッファ335またはレシーブエンジン337のリードデータ格納バッファ341から選択的にデータをフィールド単位(フィールド書込ブロック単位)ごとに読み込む機能を有する。具体的には、データライト用ディスクリプタ620が新たなデータの書込みである場合には、プロトコルコントローラ334の書込データバッファ335に格納されている書込データを読み込み、そのデータをCMライトブロック346、BCC生成ブロック344およびFCC生成ブロック345へと流す処理を行う。また、データライト用ディスクリプタ620が更新データの書込みすなわちReadModifyWrite処理である場合には、更新される内容を含むフィールド(以下、更新フィールドという)をプロトコルコントローラ334の書込データバッファ335から読み込み、そのデータをCMライトブロック346、BCC生成ブロック344およびFCC生成ブロック345へと流し、更新されない内容を含むフィールドをレシーブエンジン337のリードデータ格納バッファ341から読み込み、そのデータをCMライトブロック346およびBCC生成ブロック344へと流す処理を行う。このデータリードブロック343は、特許請求の範囲におけるデータセンド手段のデータリード機能に対応している。
【0059】
BCC生成ブロック344は、データライト用ディスクリプタ620に基づいて、データリードブロック343から渡されたデータについて論理ブロック単位でBCCを計算して生成し、生成したBCC−CRCをCMライトブロック346に出力する機能を有する。このとき、書込データを新たに書込む場合またはReadModifyWrite処理で更新される内容を含むフィールドを書込む場合には、そのフィールド内の所定の位置に付加されるべきFCC−CRCの値をFCC生成ブロック345から取得して計算する。上述したように、データリードブロック343によって読み出されるデータの切り替えが行われるので、BCCを計算するにあたって、更新されないフィールドについてはリードデータ格納バッファ341に格納されるキャッシュデータが用いられ、更新フィールドについては書込データバッファ335に格納される更新データが用いられる。このBCC生成ブロック344は、特許請求の範囲におけるデータセンド手段のBCC生成機能に対応している。
【0060】
FCC生成ブロック345は、データライト用ディスクリプタ620に基づいて、データリードブロック343がプロトコルコントローラ334の書込データバッファ335からのデータ、すなわち更新される内容を含む更新フィールドを流している場合に、そのデータについてフィールドごとにFCCを計算して生成し、生成したFCC−CRCをCMライトブロック346に出力する機能を有する。このFCC生成ブロック345は、特許請求の範囲におけるデータセンド手段のFCC生成機能に対応している。
【0061】
CMライトブロック346は、データライト用ディスクリプタ620に基づいて、データリードブロック343から渡されたデータと、BCCチェックブロック339から入力されるBCC−CRCと、FCCチェックブロック340から入力されるFCC−CRCとからキャッシュメモリ32に書込む固定長データ(論理ブロック)を生成する機能を有する。具体的には、本実施例1のディスクアレイ装置10ではデータは512バイトの固定長の論理ブロックで管理されるので、データリードブロック343からのデータが512バイトになると、その後にBCC−CRCを付加する処理を行う。また、新たにデータを書込む場合には各フィールドの最後部を含むフィールド書込ブロックの所定の位置に、そして論理ブロック内に更新内容を含むフィールドを含む場合にはそのフィールドの最後部を含むフィールド書込ブロックの所定の位置に、FCC−CRCを付加する処理を行う。なお、キャッシュメモリ32へのデータの書込みは、ハーフ論理ブロック単位で行われる。このCMライトブロック346は、特許請求の範囲におけるデータセンド手段のデータ書込機能に対応している。
【0062】
このように、センドエンジン342では、更新データをキャッシュメモリに書込む際に、BCC−CRCの書換えをデータの更新と同時に実施するようにしている。これは、データの書換えとBCC−CRCの更新を別々に実施すると、データの書換え後BCC−CRCを書換えるまでの間、その論理ブロックではBCCによる保証ができなくなってしまうからである。
【0063】
ここで、チャネルアダプタ31によるキャッシュメモリ32へ新たにデータを書込む書込処理と、既に格納されているデータを更新するReadModifyWrite処理について、順に説明する。図8は、キャッシュメモリへの新たなデータの書込処理の手順の一例を示すフローチャートである。なお、このデータの書込処理は、CKDフォーマットを有するデータを、固定長データフォーマットでデータを管理しているディスクアレイ装置10に書込む場合におけるディスクアレイ装置10のチャネルアダプタ31での処理の内容を示すものである。
【0064】
まず、ホストコンピュータ40によって新たなデータの書込要求とともにその書込データを受信すると、MPUチップセット310のデータ処理ブロック311は、その受信した書込データをプロトコル−DMAチップ330のプロトコルコントローラ334の書込データバッファ335に格納する(ステップS11)。また、データ処理ブロック311は、受信した書込データに基づいて、書込処理を実行するためのデータライト用ディスクリプタ620を生成する(ステップS12)。生成したデータライト用ディスクリプタ620はメモリ320のディスクリプタ格納領域321に生成された順に格納される。このときデータ処理ブロック311によって生成されるデータライト用ディスクリプタ620は、たとえば図6−2において、「SNE/RVE」フィールド621に「SNE(センドエンジン)」が設定され、「mode(s)」フィールド622に「MPUチップセットへの通知」が設定され、「dl(s)」フィールド623には書込むレコード(CKDデータフォーマットを有するデータ)の長さが設定され、「cma(s)」フィールド624には書込先のキャッシュメモリ32上のアドレスが設定され、「mema(s)」フィールド625には書込データバッファ335内の書込データの格納されているアドレスが設定される。
【0065】
ついで、ディスクリプタリードブロック336は、メモリ320のディスクリプタ格納領域321に格納されるデータライト用ディスクリプタ620を読み込む(ステップS13)。ディスクリプタリードブロック336は読み込んだデータライト用ディスクリプタ620にしたがって、関連する処理部、この場合にはセンドエンジン342にディスクリプタに含まれるディスクリプタ情報を通知して、データの書込処理を開始する。センドエンジン342のデータリードブロック343は、データライト用ディスクリプタ620の「mema(s)」フィールド625に指定された書込データバッファ335のアドレスから書込データ中のフィールドを読み出し(ステップS14)、そのデータをCMライトブロック346、FCC生成ブロック345およびBCC生成ブロック344に流す(ステップS15)。
【0066】
FCC生成ブロック345では、読み出されたデータについて、フィールド単位でFCCを計算してFCC−CRCを生成する(ステップS16)。そして、FCC生成ブロック345は、計算する単位のフィールドの長さに達すると、生成したFCC−CRCをCMライトブロック346に流す(ステップS17)。
【0067】
一方、BCC生成ブロック344では、そのデータについて、論理ブロック単位でBCCを計算してBCC−CRCを生成する(ステップS18)。そして、BCC生成ブロック344は、計算する単位が論理ブロックの長さに達すると、生成したBCC−CRCをCMライトブロック346に流す(ステップS19)。なお、書込データバッファ335からデータが流れている場合には、そのFCCの計算結果がFCC生成ブロック345からBCC生成ブロック344へと通知され、そのFCCの計算結果に基づいてBCCが計算される。
【0068】
その後、CMライトブロック346は、ステップS15でCMライトブロック346に流されたデータと、ステップS17で流されたFCC−CRCと、ステップS19で流されたBCC−CRCを用いて、キャッシュメモリ32にデータを書込む際の取り決めにしたがって、論理ブロック単位でデータを組み立てる(ステップS20)。すなわち、フィールドごとにそのフィールドの最後の部分が格納されるフィールド書込ブロックの最後部にステップS16で生成されたFCC−CRCを書込むとともに、論理ブロックごとにその最後部にステップS18で生成されたBCC−CRCを付加する。また、このとき、1つのフィールド書込ブロック内には2以上のフィールドが含まれないように書込み、また、あるレコードに引き続いて異なるレコードを書込む際にはハーフ論理ブロックの先頭からつぎのレコードを書込むなどの上述したキャッシュメモリ32でデータを管理する取り決めにしたがってCKDフォーマットのデータが固定長フォーマットで管理されるデータに書込まれる。
【0069】
CMライトブロック346は、組み立てたデータを、キャッシュメモリ32での管理単位でキャッシュメモリ32に転送して書込む処理を行う(ステップS21)。その後、書込データのキャッシュメモリ32への転送がすべて完了したか否かを判定する(ステップS22)。書込データのキャッシュメモリ32への転送がまだ完了していない場合(ステップS22でNoの場合)には、ステップS14へと戻り上述した処理が繰り返し実行される。また、書込データのキャッシュメモリ32への転送が完了した場合(ステップS22でYesの場合)には、CMライトブロック346はディスクリプタリードブロック336にデータ転送終了通知を送信し、また、MPUチップセット310にもデータライト用ディスクリプタ620の処理が終了したことを割り込みで通知して、キャッシュメモリ32への書込み処理が終了する。
【0070】
つぎに、既に格納されているデータを更新するReadModifyWrite処理について説明する。図9−1〜図9−2は、キャッシュメモリのデータを更新するReadModifyWrite処理の手順の一例を示すフローチャートである。なお、このデータのReadModifyWrite処理も、CKDフォーマットを有するデータを、固定長データフォーマットでデータを管理しているディスクアレイ装置10に書込む場合におけるディスクアレイ装置10のチャネルアダプタ31での処理の内容を示すものである。
【0071】
まず、ホストコンピュータ40によるCKDフォーマットのレコードの更新要求を、チャネルアダプタ31が受けると(ステップS51)、MPUチップセット310のデータ処理ブロック311は、ホストコンピュータ40との間で更新データ(レコード)についての情報をやり取りし、後の工程で送信される更新データのうちどのフィールドが更新されるのかなどの更新情報を取得する(ステップS52)。
【0072】
その後、ホストコンピュータ40から更新データを受信すると、その更新データはプロトコル−DMAチップ330のプロトコルコントローラ334の書込データバッファ335に格納される(ステップS53)。また、MPUチップセット310のデータ処理ブロック311は、更新情報と更新データに基づいて、ReadModifyWrite処理を実行するためのディスクリプタを生成し(ステップS54)、メモリ320のディスクリプタ格納領域321に格納する。データ処理ブロック311によって生成されるReadModifyWrite処理用のディスクリプタは、キャッシュメモリ32から更新される内容を含む論理ブロックを読み込むデータリード用ディスクリプタ610と、内容を更新したデータをキャッシュメモリ32に書込むデータライト用ディスクリプタ620との連続したディスクリプタから構成される。
【0073】
このうち、データリード用ディスクリプタ610は、たとえば図6−1において、「SNE/RVE」フィールド611に「RVE(レシーブエンジン)」が設定され、「mode(r)」フィールド612に「BCCをチェックする」または「FCCをチェックする」が設定され、「dl(r)」フィールド613には読み込んでリードデータ格納バッファ341へ転送するレコード(CKDフォーマットを有するデータ)の長さが設定され、「cma(r)」フィールド614には読み込むキャッシュメモリ32上のアドレスが設定され、「mema(r)」フィールド615にはリードデータ格納バッファ341内に書込むアドレスが設定される。
【0074】
また、データライト用ディスクリプタ620は、たとえば図6−2において、「SNE/RVE」フィールド621に「SNE(センドエンジン)」が設定され、「mode(s)」フィールド622に「MPUチップセットへの通知」が設定され、「dl(s)」フィールド623には書込むレコード(CKDデータフォーマットを有するデータ)の長さが設定され、「cma(s)」フィールド624には書込むキャッシュメモリ32上のアドレスが設定され、「mema(s)」フィールド625には書込データバッファ335内の更新データの格納されているアドレスまたはリードデータ格納バッファ341内のキャッシュデータの格納されているアドレスが設定される。
【0075】
上記のデータリード用ディスクリプタ610の「mode(r)」フィールド622で「MPUチップセットへ通知する」と設定されていないことによって、ディスクリプタ格納領域321のこのデータリード用ディスクリプタ610のつぎに格納されているデータライト用ディスクリプタ620が続けて実行されることをディスクリプタリードブロック336は認識する。つまり、2つのディスクリプタを連続して実行することで、ReadModifyWrite処理が行われることになる。なお、データライト用ディスクリプタ620は、更新される内容を含むフィールドについてはプロトコルコントローラ334の書込データバッファ335から読み込み、それ以外のフィールドについてはレシーブエンジン337のリードデータ格納バッファ341から読み込むように設定されるように複数生成される。
【0076】
ついで、ディスクリプタリードブロック336は、メモリ320のディスクリプタ格納領域321に格納されるデータリード用ディスクリプタ610を読み込む(ステップS55)。ディスクリプタリードブロック336は読み込んだデータリード用ディスクリプタ610にしたがって、関連する処理部、この場合にはレシーブエンジン337、にデータリード用ディスクリプタ610に含まれるディスクリプタ情報を通知する。
【0077】
レシーブエンジン337のCMリードブロック338は、データリード用ディスクリプタ610の「cma(r)」フィールド614に指定されるキャッシュメモリ32上のアドレスからデータを読み込み(ステップS56)、データリード用ディスクリプタ610の「mema(r)」フィールド615で指定されるリードデータ格納バッファ341上のアドレスに書込む(ステップS57)。このとき、書込まれるデータは、可変長データを含む1以上の論理ブロックである。
【0078】
また、CMリードブロック338は、同時に読み込んだデータをデータリード用ディスクリプタ610の「mode(r)」フィールド612の設定に基づいて、BCCチェックブロック339またはFCCチェックブロック340に渡し、BCCまたはFCCを用いてエラーチェックを行い(ステップS58)、読み込んだデータにエラーがあるか否かを判定する(ステップS59)。BCCチェックブロック339またはFCCチェックブロック340によるエラーチェックの結果、エラーが存在する場合(ステップS59でYesの場合)には、BCCチェックブロック339またはFCCチェックブロック340は、データリード用ディスクリプタ610の「mode(r)」フィールド612の設定にかかわらずMPUチップセット310に読み込んだデータにエラーが存在することを通知し(ステップS60)、ReadModifyWrite処理を終了する。一方、BCCチェックブロック339またはFCCチェックブロック340によるエラーチェックの結果、エラーがない場合(ステップS59でNoの場合)には、BCCチェックブロック339またはFCCチェックブロック340はその結果をCMリードブロック338に通知し、CMリードブロック338は、ディスクリプタリードブロック336にデータ転送終了通知を通知して(ステップS61)、データリード用ディスクリプタ610に基づくレシーブエンジンの処理が終了する。
【0079】
データ転送終了通知を受信したディスクリプタリードブロック336は、メモリ320のディスクリプタ格納領域321に格納されるつぎのデータライト用ディスクリプタ620を読み込み(ステップS62)。ディスクリプタリードブロック336は読み込んだデータライト用ディスクリプタ620にしたがって、関連する処理部、この場合にはセンドエンジン342、にデータライト用ディスクリプタ620に含まれるディスクリプタ情報を通知する。
【0080】
センドエンジン342のデータリードブロック343は、読み込む論理ブロック上の位置が更新される内容を含むフィールド(以下、更新フィールドという)か否かを判定する(ステップS63)。読み込むデータの位置が更新フィールドである場合(ステップS63でYesの場合)には、データリードブロック343はプロトコルコントローラ334の書込データバッファ335から、更新される内容を含むフィールドの長さ分だけデータを読み出し(ステップS64)、そのデータをCMライトブロック346、FCC生成ブロック345およびBCC生成ブロック344に流す(ステップS65)。FCC生成ブロック345では、その更新フィールドについてFCCを計算して、FCC−CRCを生成する(ステップS66)。そして、FCC生成ブロック345は、生成したFCC−CRCをCMライトブロック346に流す(ステップS67)。また、同時に、BCC生成ブロック344では、そのデータについて、論理ブロック単位でBCCを計算して、BCC−CRCを生成する(ステップS70)。そして、BCC生成ブロック344は、計算する単位が論理ブロックの長さに達すると、生成したBCC−CRCをCMライトブロック346に流す(ステップS71)。なお、FCC生成ブロック345が更新フィールドのFCC−CRCを生成した場合には、BCC生成ブロック344は、そのFCC−CRCの計算結果をBCC生成ブロック344から通知され、そのFCC−CRCに基づいてBCCを計算する。
【0081】
一方、ステップS63で読み込むデータの位置が更新フィールドでない場合(ステップS63でNoの場合)には、センドエンジン342のデータリードブロック343は、レシーブエンジン337のリードデータ格納バッファ341からキャッシュデータを読み出し(ステップS68)、そのデータをCMライトブロック346とBCC生成ブロック344に流す(ステップS69)。その後、上述したステップS70〜S71で説明したように、BCC生成ブロック344によって、論理ブロック単位でBCCが計算されてBCC−CRCが生成され、CMライトブロック346に流される。なお、この場合には、更新されないフィールドであるためにFCC生成ブロック345によってFCC−CRCは生成されず、キャッシュデータ内のフィールドに格納されるFCC−CRCが使用される。
【0082】
上述したステップS65,S67,S69,S71の後に、データリードブロック343は、CMライトブロック346に流したデータ長が論理ブロック長か否かを判定する(ステップS72)。流したデータ長が論理ブロック長でない場合(ステップS72でNoの場合)には、再びステップS63へと戻り、データ長が論理ブロック長となるまで上述した処理が繰り返される。また、流したデータ長が論理ブロック長である場合(ステップS72でYesの場合)には、CMライトブロック346は、ステップS65またはS69でCMライトブロック346に流されたデータと、ステップS67で流されたFCC−CRCと、ステップS71で流されたBCC−CRCを用いて、キャッシュメモリ32にデータを書込む際の取り決めにしたがって、データを組み立てる(ステップS73)。すなわち、更新されないフィールドと更新フィールドとを順番にしたがって組み立て、更新フィールドの最後の部分が格納されるフィールド書込ブロックの最後部にステップS66で生成されたFCC−CRCを書込むとともに、論理ブロックごとにその最後部にステップS70で生成されたBCC−CRCを付加する。また、このとき、1つのフィールド書込ブロック内には2以上のフィールドが含まれないように書込み、また、あるレコードに引き続いて異なるレコードを書込む際にはハーフ論理ブロックの先頭から書込むなどの上述したキャッシュメモリ32でデータを管理する取り決めにしたがってCKDフォーマットのデータが固定長フォーマットで管理されるデータに書込まれる。
【0083】
CMライトブロック346は、組み立てたデータを、キャッシュメモリ32での管理単位でキャッシュメモリ32に転送して書込む処理を行う(ステップS74)。その後、更新される内容を含む論理ブロックのデータのキャッシュメモリ32への転送がすべて完了したか否かを判定する(ステップS75)。データのキャッシュメモリ32への転送がまだ完了していない場合(ステップS75でNoの場合)には、ステップS63へと戻り上述した処理が繰り返し実行される。また、データのキャッシュメモリ32への転送が完了した場合(ステップS75でYesの場合)には、CMライトブロック346はディスクリプタリードブロック336にデータ転送終了通知を送信し、また、MPUチップセット310にもデータライト用ディスクリプタ620の処理が終了したことを割り込みで通知して、キャッシュメモリ32への更新データのReadModifyWrite処理が終了する。
【0084】
上述してきたように、実施例1によれば、固定長データフォーマットで可変長データフォーマット形式のデータも管理する記憶装置において、固定長データごとおよび可変長データを構成するフィールドごとに、それぞれのデータの全体の内容を用いて計算して得られるエラーチェックコードであるBCCおよびFCCを付すようにしてデータを管理するようにしたので、データの信頼性を高めることができるという効果を有する。特に、データの更新時において、障害の発生によって、ある固定長データ部分ごとまたはあるフィールドごと更新されなかった場合でも、その部分のデータの読み込み時にそのエラーを検出することができるという効果を有する。
【0085】
また、可変長データフォーマットでデータの更新を行う場合に、データとしては、更新される内容を含むフィールドに対応するフィールド書込ブロックのみを更新するだけでよく、全てのデータを更新する必要がない。この他に更新したフィールド部分のFCC−CRCと更新したフィールドを含む論理ブロックのBCC−CRCを計算してそれぞれ所定の位置に付加すればよいので、異なるデータフォーマット間におけるデータの更新も素早く行うことができるという効果を有する。
【実施例2】
【0086】
実施例1で説明した例におけるディスクアレイ装置のキャッシュメモリでは、固定長データ512バイト+BCC−CRC8バイトでデータを格納するが、データの管理は256バイトのハーフ論理ブロックを単位として行っている。そこで、ReadModifyWrite処理において、更新データが、論理ブロック(固定長データ)の前半のハーフ論理ブロックにある場合と、後半のハーフ論理ブロックにある場合とで処理を分けることによって、データの更新をさらに効率的に行うことができる。この実施例2では、その方法について説明する。
【0087】
実施例2で使用されるディスクアレイ装置で使用されるチャネルアダプタとプロトコル−DMAチップの構成は、実施例1の図4と図5と同じであるのでその説明を省略する。ただし、図4のMPUチップセット310のデータ処理ブロック311は、実施例1の機能に加えて、更新フィールドが論理ブロック中のどの位置に存在するのかを求める更新フィールド位置算出機能をさらに有している。この更新フィールド位置算出機能は、具体的には、キャッシュメモリ32でのデータ管理単位が、論理ブロック長よりも短く複数に分けられる際に、論理ブロック内のどのデータ管理単位に更新フィールドが位置するのかを求める処理を行う。そして、この求めた更新フィールドの位置に応じてディスクリプタを生成する。
【0088】
たとえば、データのReadModifyWrite処理を行う前にホストコンピュータ40とチャネルアダプタ31との間でやり取りされる更新情報には、レコード(CKDデータ)内のどのフィールドが更新されるのかという情報が含まれている。また、CKDデータのカウント部には、キー部とデータ部の長さに関する情報が含まれており、しかもカウント部は固定長である。これらの情報から、データ(レコード)の先頭から何バイト目からが更新されるデータを含むフィールドかが計算される。そして、上述した実施例1のように、キャッシュメモリ32が論理ブロックの半分の単位(ハーフ論理ブロック)でデータ管理を行っている場合には、その更新されるデータの位置が、前半のハーフ論理ブロックか後半のハーフ論理ブロックかを容易に求めることが可能である。もちろん、レコード(CKDデータ)の長さが1論理ブロック長を超える長さである場合には、レコードに含まれ得る個数の論理ブロック長を減算して同様の計算を行うことによって更新フィールドの位置を求めることができる。また、レコードが論理ブロックの後半のハーフ論理ブロックから始まり、ハーフ論理ブロックの長さよりも長いデータである場合にも、ハーフ論理ブロック長を減算し、さらに必要な場合には含まれ得る個数の論理ブロック長を減算して同様に更新フィールドの位置を求めることができる。
【0089】
そして、データ処理ブロック311は、更新データが前半のハーフ論理ブロックに存在する場合には、実施例1と同一のReadModifyWrite処理を実行するようにディスクリプタを生成し、更新データが後半のハーフ論理ブロックに存在する場合には、前半のハーフ論理ブロックについてはキャッシュメモリ32から読み込んだデータを用いてBCC−CRCの計算のみに使用し、後半のハーフ論理ブロックについては実施例1と同一のReadModifyWrite処理を実行するようにデータリード用ディスクリプタ610およびデータライト用ディスクリプタ620を生成する。
【0090】
つぎに、実施例2におけるチャネルアダプタ31の処理手順について説明する。なお、更新フィールドが論理ブロックの前半のハーフ論理ブロックにある場合には、上述した実施例1と同じように処理を行う必要があり、既に説明したのでその説明を省略し、ここでは、更新フィールドが論理ブロックの後半のハーフ論理ブロックにある場合について説明する。ただし、更新データを含む論理ブロックを読み込む処理までは、上述した実施例1の図9−1と同じであるので、その説明を省略し、その後のデータの書込処理について図10のフローチャートを参照しながら説明する。図10は、後半のハーフ論理ブロックに更新フィールドがある場合のReadModifyWrite処理の手順の一例を示すフローチャートである。
【0091】
まず、実施例1の図9−1で説明したように、更新要求を受け、プロトコルコントローラ334の書込データバッファ335に更新データを格納した後に、MPUチップセット310のデータ処理ブロック311は、ReadModifyWrite処理用のディスクリプタを生成する。そのデータリード用ディスクリプタ610に基づいて、キャッシュメモリ32上のキャッシュデータをレシーブエンジン337のリードデータ格納バッファ341に格納する。ついで、データライト用ディスクリプタ620がディスクリプタリードブロック336によって読み込まれ、関連する処理部、この場合にはセンドエンジン342、にデータライト用ディスクリプタ620に含まれるディスクリプタ情報が通知される(ステップS51〜S62)。ただし、データ処理ブロック311によって生成されるデータライト用ディスクリプタ620は、前半のハーフ論理ブロックはキャッシュデータを用いてBCC−CRCのみを計算してデータのCMライトブロック346への転送を行わず、後半のハーフ論理ブロックは更新フィールドについては書込データバッファ335中のデータを使用し、更新フィールド以外のフィールドについてはキャッシュデータを用いて更新データを生成するものである。
【0092】
ついで、センドエンジン342のデータリードブロック343は、更新フィールドが含まれる論理ブロック中の位置が後半のハーフ論理ブロック内であることをデータライト用ディスクリプタ620から認識し、前半のハーフ論理ブロックをレシーブエンジン337のリードデータ格納バッファ341から読出し(ステップS101)、BCC生成ブロック344に流す(ステップS102)。このとき、読出したデータは、CMライトブロック346には流さない。つまり、論理ブロック全体のBCC−CRCの生成に必要となるBCCの計算のみを行う(ステップS103)。
【0093】
前半のハーフ論理ブロックの読み出し処理が終了すると(ステップS104)、後半のハーフ論理ブロックの書込処理が開始される。センドエンジン342のデータリードブロック343は、読み込む論理ブロック上の位置が更新フィールドか否かを判定する(ステップS105)。読み込むデータの位置が更新フィールドである場合(ステップS105でYesの場合)には、データリードブロック343はプロトコルコントローラ334の書込データバッファ335から、更新される内容を含むフィールドの長さ分だけデータを読み出し(ステップS106)、そのデータをCMライトブロック346、FCC生成ブロック345およびBCC生成ブロック344に流す(ステップS107)。FCC生成ブロック345では、その更新フィールドについてFCCを計算して、FCC−CRCを生成する(ステップS108)。そして、FCC生成ブロック345は、生成したFCC−CRCをCMライトブロック346に流す(ステップS109)。また、同時に、BCC生成ブロック344では、その更新フィールドについて、ステップS103で計算したBCC−CRCを使用して論理ブロック単位でBCCを計算して、BCC−CRCを生成する(ステップS112)。そして、BCC生成ブロック344は、計算する単位が論理ブロックの長さに達すると、生成したBCC−CRCをCMライトブロック346に流す(ステップS113)。なお、FCC生成ブロック345が更新フィールドのFCC−CRCを生成した場合には、BCC生成ブロック344はそのFCC−CRCの計算結果をFCC生成ブロック345から通知され、そのFCC−CRCを用いてBCCを計算する。
【0094】
一方、ステップS105で読み込むデータの位置が更新フィールドでない場合(ステップS105でNoの場合)には、センドエンジン342のデータリードブロック343は、レシーブエンジン337のリードデータ格納バッファ341からキャッシュデータを読み出し(ステップS110)、そのデータをCMライトブロック346とBCC生成ブロック344に流す(ステップS111)。その後、上述したステップS112〜S113で説明したように、BCC生成ブロック344によって、ステップS103で計算されたBCC−CRCを使用して論理ブロック単位でBCCが計算されてBCC−CRCが生成され、CMライトブロック346に流される。なお、この場合には、更新されないフィールドであるためにFCC生成ブロック345によってFCC−CRCは生成されず、キャッシュデータ内のフィールドに格納されるFCC−CRCが使用される。
【0095】
上述したステップS107,S109,S111,S113の後に、データリードブロック343は、読み出したデータ長が論理ブロック長か否かを判定する(ステップS114)。読みだしたデータ長が論理ブロック長でない場合(ステップS114でNoの場合)には、再びステップS105へと戻り、読み出したデータ長が論理ブロック長となるまで上述した処理が繰り返される。また、読み出したデータ長が論理ブロック長である場合(ステップS114でYesの場合)には、CMライトブロック346は、ステップS107またはS111でCMライトブロック346に流されたデータと、ステップS109で生成されたFCC−CRCと、ステップS113で生成されたBCC−CRCを用いて、キャッシュメモリ32にデータを書込む際の取り決めに基づいて、後半のハーフ論理ブロックのみを組み立てる(ステップS115)。すなわち、後半のハーフ論理ブロックについてのみ更新されないフィールドと更新フィールドとを順番にしたがって組み立て、更新フィールドの最後の部分が格納されるフィールド書込ブロックの最後部にステップS108で生成されたFCC−CRCを書込むとともに、論理ブロックごとにその最後部にステップS112で生成されたBCC−CRCを付加する。また、このとき、1つのフィールド書込ブロック内には2以上のフィールドが含まれないように書込み、また、あるレコードに引き続いて異なるレコードを書込む際にはつぎのレコードのハーフ論理ブロックの先頭から書込むなどの上述したキャッシュメモリ32でデータを管理する取り決めにしたがってCKDフォーマットのデータが固定長フォーマットで管理されるデータに書込まれる。
【0096】
CMライトブロック346は、組み立てた後半のハーフ論理ブロックを、キャッシュメモリ32に転送して書込む処理を行う(ステップS116)。その後、更新される内容を含む論理ブロックのデータのキャッシュメモリ32への書込みがすべて完了したか否かを判定する(ステップS117)。データのキャッシュメモリ32への書込みがまだ完了していない場合(ステップS117でNoの場合)には、ステップS105へと戻り上述した処理が繰り返し実行される。また、データのキャッシュメモリ32への書込みが完了した場合(ステップS117でYesの場合)には、CMライトブロック346はディスクリプタリードブロック336にデータ転送終了通知を送信し、また、MPUチップセット310にもデータライト用ディスクリプタ620の処理が終了したことを割り込みで通知して、キャッシュメモリ32への更新データのReadModifyWrite処理が終了する。
【0097】
上述してきたように、本実施例2では、キャッシュメモリ32の管理単位でReadModifyWrite処理の前後で内容が不変のデータについては、キャッシュメモリ32へのデータの書込みを行わず、BCCのみを計算するようにしたので、ReadModifyWrite処理におけるプロトコル−DMAチップ330にかかる負荷を抑えることができるという効果を有する。
【0098】
なお、上述した説明では、キャッシュメモリが、512バイトの固定長の論理ブロックを格納し、その半分の256バイトのハーフ論理ブロック単位でデータの書込みを行う場合を例に挙げたが、これは一例であり、固定長データの長さは任意の長さでよい。また、キャッシュメモリのデータの書込みを行う単位も任意の長さに設定することができ、一つの固定長データ内に2以上の書込単位が存在してもよい。この場合、実施例2に示したReadModifyWrite処理を実行するには、固定長データの最後部を含む書込単位に更新データが含まれる場合と含まれない場合に分けて処理を実行すればよい。
【産業上の利用可能性】
【0099】
以上のように、本発明にかかるデータ書込み方法は、メインフレーム系システムとオープン系システムの両方で使用される外部記憶装置で使用されるキャッシュメモリに対するデータの書込みに有用であり、特に、固定長データフォーマットで可変長データフォーマットのデータも管理することができるディスクアレイ装置に適している。
【図面の簡単な説明】
【0100】
【図1】ディスクアレイ装置の構成の一例を模式的に示すブロック図である。
【図2】キャッシュメモリで管理されるデータの構造を模式的に示す図である。
【図3】CKDフォーマットのデータの構造を模式的に示す図である。
【図4】チャネルアダプタの機能構成を示すブロック図である。
【図5】プロトコル−DMAチップの機能構成を示すブロック図である。
【図6−1】データリード用ディスクリプタの構成の一例を示す図である。
【図6−2】データライト用ディスクリプタの構成の一例を示す図である。
【図7】メモリのディスクリプタ格納領域の様子を模式的に示す図である。
【図8】キャッシュメモリへの新たなデータの書込処理の一例を示すフローチャートである。
【図9−1】キャッシュメモリのデータを更新するReadModifyWrite処理の手順の一例を示すフローチャートである。
【図9−2】キャッシュメモリのデータを更新するReadModifyWrite処理の手順の一例を示すフローチャートである。
【図10】後半のハーフ論理ブロックに更新フィールドがある場合のReadModifyWrite処理の手順の一例を示すフローチャートである。
【図11】論理ブロックにおけるデータの構造の従来例を模式的に示す図である。
【符号の説明】
【0101】
10 ディスクアレイ装置
20 ディスクアレイ部
21A,21B 磁気ディスク装置
22A,22B スイッチ
30 ディスクアレイ制御部
31 チャネルアダプタ
32 キャッシュメモリ
33 キャッシュマネージャ
34 ディスクアダプタ
40 ホストコンピュータ
310 MPUチップセット
311 データ処理ブロック
320 メモリ
321 ディスクリプタ格納領域
330 プロトコル−DMAチップ
331 PCI I/F
332 ホスト I/F
333 CM I/F
334 プロトコルコントローラ
335 書込データバッファ
336 ディスクリプタリードブロック
337 レシーブエンジン
338 CMリードブロック
339 BCCチェックブロック
340 FCCチェックブロック
341 リードデータ格納バッファ
342 センドエンジン
343 データリードブロック
344 BCC生成ブロック
345 FCC生成ブロック
346 CMライトブロック
360 光−電気変換部

【特許請求の範囲】
【請求項1】
所定のフィールドからなる可変長データフォーマットのレコードを固定長データで管理するデータ蓄積用メモリに、外部装置からの指示によって前記可変長データフォーマットのレコードを書込むデータ書込み方法であって、
可変長データフォーマットのレコードを受信するレコード受信工程と、
受信したレコードのフィールドごとにフィールドチェックコードを生成するフィールドチェックコード生成工程と、
受信したレコードについて前記固定長データの単位でブロックチェックコードを生成するブロックチェックコード生成工程と、
受信した前記レコードを読出し、前記フィールドチェックコードと前記ブロックチェックコードを用いて、フィールドチェックコードとブロックチェックコードをともに含む固定長データを組み立てて前記データ蓄積用メモリに転送して書込むデータ書込み工程と、
を含むことを特徴とするデータ書込み方法。
【請求項2】
所定のフィールドからなる可変長データフォーマットのレコードを固定長データで管理するデータ蓄積用メモリに、外部装置からの指示によって前記データ蓄積用メモリ内のレコードの更新を行うデータ書込み方法であって、
更新を行う可変長データフォーマットのレコードを受信するレコード受信工程と、
更新が行われるレコードを含む固定長の被更新データを前記データ蓄積用メモリから読み出す被更新データ読出し工程と、
更新される内容を含む更新フィールドについては前記レコード受信工程で受信した前記レコード内から読出し、前記更新フィールド以外のフィールドについては前記被更新データ読出し工程で読出した前記被更新データ内から読出すデータ読出し工程と、
前記更新フィールドについてはフィールド単位でフィールドチェックコードを計算するとともに前記固定長データの長さ単位でブロックチェックコードを計算し、前記更新フィールド以外のフィールドについては前記固定長データの長さ単位でブロックチェックコードを計算するチェックコード生成工程と、
前記データ読出し工程で読み出されたデータと、前記チェックコード生成工程で生成されたフィールドチェックコードとブロックチェックコードとを用いて、フィールドチェックコードとブロックチェックコードをともに含む固定長データを組み立てて前記データ蓄積用メモリに転送して書込むデータ書込み工程と、
を含むことを特徴とするデータ書込み方法。
【請求項3】
前記被更新データ読出し工程で、前記被更新データについて固定長データの単位またはフィールド単位でエラーチェックを行い、エラーが検出された場合に、データ書込処理を中止することを特徴とする請求項2に記載のデータ書込み方法。
【請求項4】
前記データ蓄積用メモリは、前記固定長データよりも短い長さのフィールド書込単位でデータの管理を行い、
前記レコード受信工程では、前記更新フィールドが含まれる前記固定長データ内のフィールド書込単位の位置を求める処理をさらに行い、
前記更新フィールドが前記固定長データの最後部を含むフィールド書込単位に含まれる場合に、
前記チェックコード生成工程では、前記更新フィールドを含まないフィールド書込単位のデータについては前記被更新データのブロックチェックコードのみを計算し、
前記データ書込み工程では、前記更新フィールドを含むフィールド書込単位のデータ、前記チェックコード生成工程で生成されたフィールドチェックコードとブロックチェックコードを用いて、固定長データの最後部のフィールド書込単位のデータのみを組み立てて前記データ蓄積用メモリに転送して書込むことを特徴とする請求項2に記載のデータ書込み方法。
【請求項5】
前記フィールドチェックコードは、前記フィールドに含まれる全体の情報を用いて計算される方法によって生成され、前記ブロックチェックコードは、前記固定長データに含まれる全体の情報を用いて計算される方法によって生成されることを特徴とする請求項1または2に記載のデータ書込み方法。
【請求項6】
所定のフィールドからなる可変長データフォーマットのレコードを固定長データで管理するデータ蓄積用メモリに、外部装置からの指示によってデータの書込み/読込みを行うチャネルアダプタであって、
可変長データフォーマットのレコードの書込要求を受け、前記レコードを受信すると、前記データ蓄積用メモリに前記レコードを書込むためのディスクリプタを生成するデータ処理手段と、
受信した前記レコードを格納する書込データ格納手段と、
前記ディスクリプタに基づいて、前記書込データ格納手段からレコードを読出すデータリード機能と、読出した前記レコードのフィールドごとにフィールドチェックコードを生成するFCC生成機能と、読出した前記レコードについて前記固定長データの単位でブロックチェックコードを生成するBCC生成機能と、前記データリード機能によって読出されたデータ、前記FCC生成機能によって生成されたフィールドチェックコード、および前記BCC生成機能によって生成されたブロックチェックコードを用いて、フィールドチェックコードとブロックチェックコードをともに含む固定長データを組み立てて前記データ蓄積用メモリに転送して書込むデータ書込機能と、を有するデータセンド手段と、
を備えることを特徴とするチャネルアダプタ。
【請求項7】
前記データ蓄積用メモリからキャッシュデータを読出すデータリード機能と、読出された前記キャッシュデータを格納するリードデータ格納機能と、を有するデータレシーブ手段をさらに備え、
前記データ処理手段は、可変長データフォーマットのレコードの更新要求を受けると、前記データセンド手段のデータリード機能に、更新される内容を含む前記レコード中の更新フィールドについては前記書込データ格納手段から読出させ、前記更新フィールド以外の前記レコード中のフィールドは前記データレシーブ手段の前記リードデータ格納機能から読出させるディスクリプタを生成することを特徴とする請求項6に記載のチャネルアダプタ。
【請求項8】
前記データレシーブ手段は、読出した前記キャッシュデータのエラーチェックを行い、エラーが存在する場合に処理を中止するエラーチェック機能をさらに備えることを特徴とする請求項7に記載のチャネルアダプタ。
【請求項9】
前記データ蓄積用メモリは、前記固定長データよりも短い長さのフィールド書込単位でデータの管理を行い、
前記データ処理手段は、前記更新フィールドが含まれる前記固定長データ内のフィールド書込単位の位置を求める機能をさらに備え、
前記データ処理手段は、前記更新フィールドが前記固定長データの最後部を含むフィールド書込単位に含まれる場合に、前記データセンド手段のデータリード機能に、前記更新フィールドを含まないフィールド書込単位のデータを読み出す場合にのみ該データを前記BCC生成機能にのみ流させ、前記データ書込機能に、前記データリード機能によって読出された更新フィールドを含むフィールド書込単位のデータ、前記FCC生成機能によって生成されたフィールドチェックコード、および前記BCC生成機能によって生成されたブロックチェックコードを用いて、固定長データの最後部のフィールド書込単位のデータのみを組み立てて前記データ蓄積用メモリに転送して書込ませるディスクリプタを生成することを特徴とする請求項7に記載のチャネルアダプタ。
【請求項10】
前記データセンド手段の前記FCC生成機能は、前記フィールドに含まれる全体の情報を用いてフィールドチェックコードを計算し、前記BCC生成機能は、前記固定長データに含まれる全体の情報を用いてブロックチェックコード計算することを特徴とする請求項6に記載のチャネルアダプタ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6−1】
image rotate

【図6−2】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9−1】
image rotate

【図9−2】
image rotate

【図10】
image rotate

【図11】
image rotate


【公開番号】特開2006−164141(P2006−164141A)
【公開日】平成18年6月22日(2006.6.22)
【国際特許分類】
【出願番号】特願2004−358143(P2004−358143)
【出願日】平成16年12月10日(2004.12.10)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】