(57)【特許請求の範囲】
【請求項１】
ホストコンピュータとデータを記憶する記憶装置との間のデータ入出力を制御する記憶制御装置であって、
前記ホストコンピュータは、第１サイズを有する所定数の第１ブロックから構成されるトラック単位で、データを管理するようになっており、
前記ホストコンピュータとの間でデータを送受信する第１通信制御部であって、前記第１サイズを有する前記第１ブロック単位で、前記ホストコンピュータとデータを送受信する第１通信制御部と、
前記ホストコンピュータから受信したデータについて、前記第１ブロック毎に所定の第１データをそれぞれ付加することにより、前記第１サイズよりも大きい第２サイズを有する第２ブロックを生成する第１データ付加部と、
前記第１ブロック単位でデータを記憶する前記記憶装置との間でデータを送受信する第２通信制御部と、
前記第１通信制御部と前記第２通信制御部との間に設けられる第１メモリであって、前記第２ブロック単位でデータを管理する第１メモリと、
前記第１メモリと前記記憶装置との間に設けられる第２メモリと、
前記ホストコンピュータによるデータの管理単位であるトラックの境界と前記記憶装置内の前記第１ブロックの境界とを一致させる境界補正部であって、（１）前記第１メモリから前記第２メモリに転送されるデータに、所定サイズの第２データを付加することにより、前記トラックの境界と前記記憶装置内の前記第１ブロックの境界とを一致させ、（２）前記第２メモリから前記第１メモリに転送されるデータから前記第２データを取り除くことにより、前記トラックの境界と前記第１メモリ内の前記第２ブロックの境界とを一致させる、境界補正部と、を備え、
前記境界補正部は、
前記ホストコンピュータにより更新される第１ブロックの、前記トラック上の位置が、前記トラックの先頭から、前記第１サイズと前記第２サイズとの最小公倍数として求められる所定サイズまでのトラック前半領域に存在する場合、前記トラックの先頭から前記所定サイズ分のデータを、前記第２通信制御部により前記記憶装置から読み出されて前記第２メモリに転送されるデータの転送サイズとして決定し、
前記ホストコンピュータにより更新される第１ブロックの、前記トラック上の位置が、前記トラック前半領域以降のトラック後半領域に存在する場合、前記トラック後半領域の先頭から前記トラックの終端側の境界までのデータを、前記第２通信制御部により前記記憶装置から読み出されて前記第２メモリに転送されるデータの転送サイズとして決定する、
記憶制御装置。
【請求項２】
前記境界補正部は、前記第１メモリから前記第２メモリに転送されるデータを構成する前記各第２ブロックのうち先頭の第２ブロックの開始位置と、前記記憶装置内の前記第１ブロックの開始位置とを一致させる、請求項１に記載の記憶制御装置。
【請求項３】
前記境界補正部は、前記第１メモリから前記第２メモリに転送されるデータに前記第２データを付加することにより、このデータを前記第１サイズの整数倍のデータにする、請求項１または請求項２のいずれかに記載の記憶制御装置。
【請求項４】
前記第２データは、ビット０から構成されるパディングデータ、または、不定データのいずれかである請求項１〜請求項３のいずれかに記載の記憶制御装置。
【請求項５】
前記境界補正部及び前記第２メモリは、前記第２通信制御部にそれぞれ設けられている、請求項１〜請求項４のいずれかに記載の記憶制御装置。
【請求項６】
前記境界補正部及び前記第２メモリは、前記記憶装置にそれぞれ設けられている、請求項１〜請求項５のいずれかに記載の記憶制御装置。
【請求項７】
ホストコンピュータと記憶装置との間のデータ入出力を制御する記憶制御装置を制御するための方法であって、
第１サイズを有する所定数の第１ブロックから構成されるトラック単位でデータを管理する前記ホストコンピュータから、前記第１ブロック単位で、更新対象データを受信するステップと、
前記更新対象データの前記第１ブロック毎に所定の第１データをそれぞれ付加し、前記第１サイズよりも大きい第２サイズを有する第２ブロックを生成するステップと、
前記第２ブロック単位のデータに変換された更新対象データを第１メモリに記憶させるステップと、
前記更新対象データの第１ブロックの、前記トラック上の位置が、前記トラックの先頭から、前記第１サイズと前記第２サイズとの最小公倍数として求められる所定サイズまでのトラック前半領域に存在する場合、前記トラックの先頭から前記所定サイズ分のデータを所定データとして決定し、前記更新対象データの前記第１ブロックの、前記トラック上の位置が、前記トラック前半領域以降のトラック後半領域に存在する場合、前記トラック後半領域の先頭から前記トラックの終端側の境界までのデータを所定データとして決定する、ステップと、
前記記憶装置から前記所定データを読出して、第２メモリに記憶させるステップと、
前記トラック後半領域の先頭から前記トラックの終端側の境界までのデータが前記所定データとして前記記憶装置から読み出された場合、前記所定データの終端から他の所定サイズ分の第２データを取り除いて、前記所定データを前記第２サイズの整数倍のデータに変換し、この変換されたデータを前記第１メモリに転送させるステップと、
前記第１メモリに転送された前記所定データと前記第１メモリに記憶された前記更新対象データとを前記第１メモリ上でマージさせ、マージ済データを生成するステップと、
前記マージ済データを前記第２メモリに転送させるステップと、
前記第２メモリ上において、前記マージ済データの末尾に前記他の所定サイズの前記第２データを付加することにより、前記マージ済データを前記トラックの境界と前記記憶装置内の前記第１ブロックの境界とが一致するように変換させるステップと、
前記変換されたマージ済データを前記記憶装置内に書き込むステップと、
をそれぞれ実行する、記憶制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及び記憶制御装置の制御方法に関する。
【背景技術】
【０００２】
記憶制御装置は、例えば、メインフレーム等のホストコンピュータ（以下、「ホスト」）に接続される。記憶制御装置は、ＲＡＩＤ（Redundant Array of Inexpensive Disks）に基づく記憶領域をホストに提供する。
【０００３】
記憶制御装置では、例えば、ＲＡＩＤ１〜ＲＡＩＤ６として知られているように、データに冗長性を付加することもできる。記憶制御装置は、データにパリティデータを付加したり、あるいは、データのコピーを別のディスクドライブにも書き込むことにより、ディスクドライブの障害発生時に備えている。
【０００４】
さらに、保証コードを使用する記憶制御装置も知られている（特許文献１，特許文献２，特許文献３）。一つの従来技術では、保証コードとして、ホストコンピュータがアクセス先として指定する論理ブロックの論理アドレス（以下、「ＬＡ（Logical Address）」）、及び、論理ブロックのデータについて排他的論理和演算を実施して求められるＬＲＣ（Longitudinal Redundancy Check）を、論理ブロックにそれぞれ付加し、この保証コードと論理ブロックとをディスクドライブに保存させる。
【０００５】
ＬＡは、論理ブロックのデータが書き込まれる記憶領域のアドレスの誤りを検出するために用いられる。ＬＲＣは、論理ブロックのデータの誤りを検出するための誤り検出符号として用いられる。
【０００６】
論理ブロックに前記保証コードを付加すると、記憶制御装置の内部で取り扱われるデータの管理単位と、ディスクドライブ内のデータ管理単位とが異なる可能性がある。例えば、ブロック長（セクタ長）が論理ブロックのサイズに固定されているディスクドライブでは、論理ブロック単位でデータを記憶する。従って、論理ブロックに保証コードを付加してブロックサイズを大きくすると、ディスクドライブのフォーマットによっては、保証コード付きの論理ブロックをそのままでは記憶させることができない場合がある。
【０００７】
そこで、この問題を解決するために、第４の文献には、論理ブロックのサイズと保証コード付き論理ブロックのサイズとの最小公倍数を、ディスクドライブにデータを入出力する際の値として固定する技術が提案されている（特許文献４）。
【特許文献１】特開２０００−３４７８１５号公報
【特許文献２】米国特許第５,８１９,０５４号公報
【特許文献３】米国特許第５,７０６,２９８号公報
【特許文献４】特開２００６−１９５８５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前記第４文献に記載されているように、論理ブロックのサイズと保証コード付き論理ブロックのサイズとの最小公倍数を、記憶制御装置がディスクドライブにデータを書き込む場合の基本単位として設定することにより、セクタ長が固定されているディスクドライブに、保証コードの付加された論理ブロックを書き込むことができる。以下、保証コードの付加によってサイズが大きくなる論理ブロックを、拡張論理ブロックと称する。
【０００９】
例えば、論理ブロックのサイズを５１２バイト、保証コードのサイズを８バイトとすると、拡張論理ブロックのサイズは５２０バイトとなる。５１２バイトと５２０バイトの最小公倍数は、３３２８０バイトとなる。ホストコンピュータから受信した６４個の論理ブロックについて、各論理ブロック毎にそれぞれ８バイトの保証コードを付与することにより、全体のデータサイズは、３３２８０バイトとなる。この値は、６５個分の論理ブロックのサイズに等しい（３３２８０＝５１２×６５）。
【００１０】
この場合、６４個の拡張論理ブロックから構成されるデータの両端と、６５個の論理ブロックの両端とは一致する。従って、６４個の拡張論理ブロックを、６５個の論理ブロックとして、ディスクドライブに記憶させることができる。論理ブロックのサイズと拡張論理ブロックのサイズとの最小公倍数のサイズでデータを読み書きする方法を、本明細書では、便宜上、例えば、最小公倍数単位のデータアクセスと呼ぶ。
【００１１】
記憶装置に記憶されている旧データを読出し、この旧データと新データとをマージした後で、記憶装置に書き戻す処理を、リードモディファイライト処理と呼ぶ。
【００１２】
ところで、ホストコンピュータがメインフレームの場合、メインフレームは、トラックと呼ばれる単位でデータを管理する。一つのトラックは、例えば、９６個または１１６個の論理ブロックから構成される。
【００１３】
更新対象の論理ブロックが、トラックの先頭ブロックから６４番目の論理ブロックまでのトラック前半領域に存在する場合は、最小公倍数単位のデータアクセスを用いて、リードモディファイライト処理を行うことができる。しかし、更新対象の論理ブロックが、６５番目以降のトラック後半領域に存在する場合、最小公倍数単位のデータアクセスを用いると、２つのトラックに跨った処理が行われる。この場合、６５番目から１２８番目までの論理ブロックに対応するデータを記憶装置から読み出す必要がある。しかし、１１７番目から１２８番目までの論理ブロックは、別のトラックを構成している。
【００１４】
このように、更新対象のブロック位置がトラック後半領域に存在する場合、隣接する複数のトラックに跨った処理を行う必要がある。更新対象のブロックを含むトラックに隣接する他のトラックについて、リード処理またはライト処理が行われている場合、更新に必要なデータを直ちに読み出すことができず、待ち時間を生じる可能性がある。待ち時間が生じると、記憶制御装置の処理性能が低下する。
【００１５】
さらに、隣接する他のトラックのデータを受け入れるためのキャッシュ領域を確保しなければならないため、約２倍のキャッシュメモリが必要になる。この結果、キャッシュのヒット率が低下し、記憶制御装置の処理性能が低下する。
【００１６】
本発明は、上記の問題点に鑑みてなされたもので、その目的は、ホストコンピュータ及び記憶デバイスで使用される第１ブロックのサイズと、記憶制御装置内で使用される第２ブロックのサイズとが異なる場合でも、性能低下を抑制することができるようにした記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の他の目的は、拡張された複数の論理ブロックから構成されるトラックの境界と、記憶装置内の物理ブロックの境界とを一致させることができるようにした記憶制御装置及び記憶制御装置の制御情報を提供することにある。本発明の更なる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【００１７】
上記課題を解決すべく、本発明の第１観点に従う記憶制御装置は、ホストコンピュータとデータを記憶する記憶装置との間のデータ入出力を制御する記憶制御装置であって、ホストコンピュータとの間でデータを送受信する第１通信制御部であって、第１サイズを有する第１ブロック単位で、ホストコンピュータとデータを送受信する第１通信制御部と、ホストコンピュータから受信したデータについて、第１ブロック毎に所定の第１データをそれぞれ付加することにより、第１サイズよりも大きい第２サイズを有する第２ブロックを生成する第１データ付加部と、第１ブロック単位でデータを記憶する記憶装置との間でデータを送受信する第２通信制御部と、第１通信制御部と第２通信制御部との間に設けられる第１メモリであって、第２ブロック単位でデータを管理する第１メモリと、第１メモリと記憶装置との間に設けられる第２メモリと、ホストコンピュータによるデータの管理単位であるトラックの境界と記憶装置内の第１ブロックの境界とを一致させる境界補正部であって、（１）第１メモリから第２メモリに転送されるデータに、所定サイズの第２データを付加することにより、トラックの境界と記憶装置内の第１ブロックの境界とを一致させ、（２）第２メモリから第１メモリに転送されるデータから第２データを取り除くことにより、トラックの境界と第１メモリ内の第２ブロックの境界とを一致させる、境界補正部と、を備える。
【００１８】
第２観点では、第１観点において、境界補正部は、第１メモリから第２メモリに転送されるデータを構成する各第２ブロックのうち先頭の第２ブロックの開始位置と、記憶装置内の第１ブロックの開始位置とを一致させる。
【００１９】
第３観点では、第１観点または第２観点のいずれかにおいて、境界補正部は、第１メモリから第２メモリに転送されるデータに第２データを付加することにより、このデータを第１サイズの整数倍のデータにする。
【００２０】
第４観点では、第１観点〜第３観点のいずれかにおいて、第２データは、ビット０から構成されるパディングデータ、または、不定データのいずれかである。
【００２１】
第５観点では、第１観点〜第４観点のいずれかにおいて、境界補正部は、ホストコンピュータにより更新される第２ブロックの、トラック上の位置に応じて、記憶装置から第２メモリに読み出すデータの範囲を決定する。
【００２２】
第５観点では、第１観点〜第４観点のいずれかにおいて、境界補正部は、ホストコンピュータにより更新されるブロックの、トラックの上の位置が、（Ｃ１）トラックの先頭から、第１サイズと第２サイズとの最小公倍数として求められるデータサイズまでのトラック前半領域よりも以降の、トラック後半領域にのみ存在する第１ケースと、（Ｃ２）トラック前半領域及びトラック後半領域の両方にそれぞれ存在する第２ケースと、（Ｃ３）トラック前半領域にのみ存在する第３ケースとの、いずれのケースに該当するかを判別し、判別されたケースに応じて、第２メモリと記憶装置との間のデータ転送サイズを決定する。
【００２３】
第７観点では、第１観点〜第６観点のいずれかにおいて、境界補正部及び第２メモリは、第２通信制御部にそれぞれ設けられている。
【００２４】
第８観点では、第１観点〜第６観点のいずれかにおいて、境界補正部及び第２メモリは、記憶装置にそれぞれ設けられている。
【００２５】
第９観点に従う記憶制御装置の制御方法は、ホストコンピュータと記憶装置との間のデータ入出力を制御する記憶制御装置を制御するための方法であって、ホストコンピュータから、第１サイズを有する第１ブロック単位で、更新対象データを受信するステップと、更新対象データの第１ブロック毎に所定の第１データをそれぞれ付加し、第１サイズよりも大きい第２サイズを有する第２ブロックを生成するステップと、第２ブロック単位のデータに変換された更新対象データを第１メモリに記憶させるステップと、記憶装置から更新対象データを含む所定範囲の所定データを読出して、第２メモリに記憶させるステップと、第２メモリに記憶された所定データから第２データを取り除いて、所定データを第２サイズの整数倍のデータに変換し、この変換されたデータを第１メモリに転送させるステップと、第１メモリに転送された所定データと第１メモリに記憶された更新対象データとを第１メモリ上でマージさせ、マージ済データを生成するステップと、マージ済データを第２メモリに転送させるステップと、第２メモリ上において、マージ済データの末尾に所定サイズの第２データを付加することにより、マージ済データを第１サイズの整数倍のデータに変換させるステップと、変換されたマージ済データを記憶装置内に書き込むステップと、をそれぞれ実行する。
【００２６】
第１０観点では、第９観点において、更新対象データのトラック上の位置が、（Ｃ１）トラックの先頭から、第１サイズと第２サイズとの最小公倍数として求められるデータサイズまでのトラック前半領域よりも以降の、トラック後半領域にのみ存在する第１ケースにおいては、トラック後半領域のデータを所定範囲のデータとして記憶装置から読出し、（Ｃ２）トラック前半領域及びトラック後半領域の両方にそれぞれ存在する第２ケースにおいては、トラックの全体を所定範囲のデータとして記憶装置から読出し、（Ｃ３）前半領域にのみ存在する第３ケースにおいては、トラック前半領域のデータを所定範囲のデータとして記憶装置から読み出す。
【００２７】
本発明の各部または各ステップの少なくとも一部は、コンピュータプログラムとして構成される場合がある。このコンピュータプログラムは、記録媒体に固定して配布したり、ネットワークを介して配信することができる。
【発明を実施するための最良の形態】
【００２８】
以下、図面に基づいて、本発明の実施の形態を説明する。まず最初に、本発明の概念を説明し、その次に、具体的な実施例について説明する。図１は、本発明の概念を模式的に示す説明図である。図１及び図１に関する以下の記載は、本発明の理解及び実施に必要な程度で、本発明の概要を示しており、本発明の範囲を図１に記載された範囲に限定するものではない。
【００２９】
図１（ａ）は、本発明に従う記憶制御装置を含むストレージシステムの全体構成を示している。このストレージシステムは、例えば、記憶制御装置１と、記憶デバイス２と、ホスト３とを備える。
【００３０】
記憶デバイス２は、例えば、ＳＡＴＡ（Serial AT Attachment）ディスクやＳＡＳ（Serial Attached SCSI）ディスクのような、セクタ長が論理ブロックのサイズに固定されたハードディスクデバイスとして構成される。なお、以下の説明では、記憶デバイス内の物理ブロックを、便宜上、論理ブロックと呼ぶ。
【００３１】
しかし、本発明は、ＳＡＴＡディスクやＳＡＳディスクに限らず、セクタ長が論理ブロックのサイズに固定された記憶デバイスであれば、例えば、フラッシュメモリデバイスのような他の種類の記憶デバイスも使用可能である。さらに、後述の実施例から明らかとなるように、セクタ長を拡張論理ブロックのサイズに一致させることのできる、ＦＣディスクを用いることもできる。
【００３２】
ホスト３は、メインフレームコンピュータとして構成される。ホスト３と記憶制御装置１とは、例えば、ＦＩＣＯＮ（Fibre Connection：登録商標）、ＥＳＣＯＮ（Enterprise System Connection：登録商標）、ＡＣＯＮＡＲＣ（Advanced Connection Architecture：登録商標）、ＦＩＢＡＲＣ（Fibre Connection Architecture：登録商標）等の通信プロトコルに従って、データ通信を行う。ホスト３は、例えば、９６個または１１６個の論理ブロック６から構成されるトラック５の単位で、データを管理することができる。
【００３３】
記憶制御装置１は、ホスト３と記憶デバイス２との間に設けられており、ホスト３と記憶デバイス２との間のデータ転送を制御する。記憶制御装置１は、例えば、ホスト通信制御部１Ａと、デバイス通信制御部１Ｂと、キャッシュメモリ１Ｃと、保証コード制御部１Ｄと、境界制御部４とを備えて構成される。
【００３４】
ホスト通信制御部１Ａは、「第１通信制御部」に該当する。ホスト通信制御部１Ａは、ホスト３からコマンドやデータを受信し、コマンドの処理結果等をホスト３に送信するものである。
【００３５】
デバイス通信制御部１Ｂは、「第２通信制御部」に該当する。デバイス通信制御部１Ｂは、記憶デバイス２にデータを書き込んだり、記憶デバイス２からデータを読み出したりするものである。
【００３６】
キャッシュメモリ１Ｃは、「第１メモリ」に該当し、ホスト３から受信したデータや、記憶デバイス２から読み出されたデータが記憶される。
【００３７】
境界制御部４は、キャッシュメモリ１Ｃとデバイス通信制御部１Ｂとの間に設けられている。境界制御部４は、例えば、バッファメモリ４Ａとバウンダリ補正部４Ｂとを備えている。
【００３８】
保証コード制御部１Ｄは、「第１データ付加部」に該当する。保証コード制御部１Ｄは、各論理ブロック６毎にそれぞれ保証コード７を付加する。保証コード７は、「第１データ」に該当する。保証コード７は、例えば、論理アドレス（ＬＡ）やＬＲＣから構成することができる。
【００３９】
バッファメモリ４Ａは、「第２メモリ」に該当する。バッファメモリ４Ａは、キャッシュメモリ１Ｃとデバイス通信制御部１Ｂとの間に設けられている。キャッシュメモリ１Ｃと記憶デバイス２とは、バッファメモリ４Ａを介してデータを送受する。
【００４０】
バウンダリ補正部４Ｂは、「境界補正部」に該当する。バウンダリ補正部４Ｂは、図１（ｂ）で後述するように、トラック５の境界と記憶デバイス２内のブロック６の境界とが一致するように、ギャップサイズδに対応するギャップデータを付加する。ギャップデータは、「第２データ」に該当する。
【００４１】
図１（ｂ）は、トラック５の境界と記憶デバイス２内のブロック６の境界とを一致させるための処理方法を示す。ホスト３は、トラック単位でデータを管理しており、各トラック５は、例えば、９６個または１１６個の論理ブロック６から構成される。以下、一つのトラック５が１１６個の論理ブロック６から構成される場合を例に挙げて説明する。
【００４２】
論理ブロック６のサイズＤＬ６は、例えば、５１２バイトである。この論理ブロック６は「第１ブロック」に該当する。保証コード制御部１Ｄによって、論理ブロック６に保証コード７が付加される。保証コード７のサイズＤＬ７は、例えば、８バイトである。
【００４３】
５１２バイトの論理ブロック６に８バイトの保証コード７を付加することにより、拡張論理ブロック８が生成される。拡張論理ブロック８は「第２ブロック」に該当する。拡張論理ブロック８のサイズＤＬ８は、５２０バイトとなる（ＤＬ８＝ＤＬ６＋ＤＬ７＝５１２＋８）。
【００４４】
ホスト３から受信された各論理ブロック６には、それぞれ保証コード７が付加されて、キャッシュメモリ１Ｃに記憶される。図１（ｂ）の上側は、キャッシュメモリ１Ｃ内の様子を示し、図１（ｂ）の下側は、記憶デバイス２内の様子を示す。
【００４５】
キャッシュメモリ１Ｃに記憶される拡張論理ブロック８のサイズと、記憶デバイス２に記憶される論理ブロック６のサイズとは異なるため、拡張論理ブロック８の境界Ｂ２と論理ブロックの境界Ｂ１とは一致しない。
【００４６】
しかし、キャッシュメモリ１Ｃに記憶されるデータのサイズと記憶デバイス２に記憶されるデータのサイズとが、論理ブロック６のサイズＤＬ６と拡張論理ブロック８のサイズＤＬ８との最小公倍数の値ＤＬ５Ａ（LCM）になった場合、両者の境界Ｂ３とＢ２とは一致する。具体的には、６４個の拡張論理ブロック８からなる一方のデータサイズと６５個の論理ブロック６からなる他方のデータサイズとは一致する。従って、一方のデータサイズの両端の境界と他方のデータサイズの両端の境界とは一致する。
【００４７】
図１（ｂ）の上部左側に示すように、ある一つのトラック５は、０番目から１１５番目までの合計１１６個の拡張論理ブロック８によって構成される。太い黒枠で示すように、ホスト３が、１１４番目のブロック８について更新要求を発行した場合を考える。
【００４８】
記憶制御装置１は、更新要求を処理するために、旧データを記憶デバイス２から読み出して、旧データに新データをマージする必要がある。そのために、もしも、６４番目の拡張論理ブロック８を先頭にして６４個の拡張論理ブロック８に対応するデータを記憶デバイス２から読み出すと、隣のトラック（１１６番目以降の拡張論理ブロック８から構成されるトラック）に対応するブロック６まで読み出すことになる。
【００４９】
つまり、６５番目の論理ブロック６から１２９番目の論理ブロック６までの合計６５個の論理ブロック６を記憶デバイス２から読み出すことになる。しかし、この６５個の論理ブロック６の中には、隣のトラック５に関するデータのみを記憶する論理ブロックが含まれている。従って、もしも、ホスト３が隣のトラック５にアクセスしている場合、そのアクセスが終了するまで、１１４番目の拡張論理ブロック８に関する更新要求を処理できないことになる。
【００５０】
そこで、本実施形態では、１１６個の拡張論理ブロック毎に、記憶デバイス２上にギャップδを設けることにより、トラック５の先頭ブロックの開始位置と記憶デバイス２の論理ブロック６の開始位置とを一致させる。即ち、本実施形態では、各トラック毎に、そのトラックの終端にサイズδ分のギャップデータを付加することにより、各トラックの先頭位置を論理ブロック６の境界Ｂ１に一致させる。
【００５１】
上述のように、本実施形態では、記憶デバイス２上において、前のトラック５の終端Ｂ３と隣のトラック５の始端Ｂ３との間に、所定サイズ（この場合は、９６バイト）のギャップδが形成される。
【００５２】
記憶制御装置１は、６５番目の論理ブロック６から１１７番目の論理ブロック６までの合計５３個の論理ブロック６のデータを記憶デバイス２から読み出して、バッファメモリ４Ａに記憶させる。記憶デバイス２からバッファメモリ４Ａに転送されるデータには、上述したギャップデータが含まれている。
【００５３】
バウンダリ補正部４Ｂは、バッファメモリ４Ａに記憶されたデータからギャップデータを除いた部分だけを、キャッシュメモリ１Ｃに転送させる。ギャップデータを取り除くことにより、そのデータは、拡張論理ブロック８のサイズＤＬ８の整数倍のサイズを有するデータとなる。つまり、６４番目の拡張論理ブロック８から１１５番目の拡張論理ブロック８までのデータが、キャッシュメモリ１Ｃに記憶される。
【００５４】
上述の通り、バッファメモリ４Ａからキャッシュメモリ１Ｃに、ギャップデータは転送されないため、記憶デバイス２上のギャップδにどのようなデータが記憶されていても、コマンド処理に影響は全く無い。
【００５５】
記憶制御装置１は、バッファメモリ４Ａからキャッシュメモリ１Ｃに転送された、６４番目から１１５番目までの拡張論理ブロック８に関する旧データと、ホスト３から受信した１１４番目の拡張論理ブロック８に関する新データとを、キャッシュメモリ１Ｃ上でマージする。
【００５６】
マージ済のデータは、キャッシュメモリ１Ｃからバッファメモリ４Ａに転送される。バウンダリ補正部４Ｂは、バッファメモリ４Ａ上において、マージ済データの終端にギャップデータを付加する。これにより、マージ済データは、論理ブロック６のサイズＤＬ６の整数倍のサイズを有するデータとなる。ギャップデータの付加されたマージ済データは、６５番目から１１７番目までの論理ブロック６に記憶される。
【００５７】
以上の説明は、ホスト３によって更新される拡張論理ブロック８の位置が、トラック５の後半領域に存在する場合の説明である。本実施形態では、更新されるブロックの位置によって、バッファメモリ４Ａとキャッシュメモリ１Ｃとの間で転送されるデータのサイズを制御する。
【００５８】
トラック５は、前半領域ＤＬ５Ａと後半領域ＤＬ５Ｂとに大別できる。前半領域ＤＬ５Ａは「トラック前半領域」に、後半領域ＤＬ５Ｂは「トラック後半領域」に、それぞれ該当する。
【００５９】
例えば、前半領域ＤＬ５Ａは、トラック５の先頭から最小公倍数単位でのデータアクセスが可能なサイズの領域として定義可能である。後半領域ＤＬ５Ｂは、前半領域ＤＬ５Ａの終端からトラック５の終端までの領域として定義することができる。
【００６０】
ホスト３による更新対象のブロックが前半領域ＤＬ５Ａに位置する場合は、最小公倍数（L.C.M.）単位でのデータアクセスを行うことができるため、６５個の論理ブロック６を記憶デバイス２から読み出せばよい。前半領域ＤＬ５Ａの両端は、記憶デバイス２の論理ブロック６の境界に一致するため、ギャップデータを付加する必要は無い。
【００６１】
これに対し、ホスト３による更新対象のブロックが後半領域ＤＬ５Ｂに位置する場合、最小公倍数単位でのデータアクセスを行うことができない。保証コード７の付加された後のトラックサイズＤＬ５は、論理ブロック６のサイズと拡張論理ブロック８のサイズとの最小公倍数の値の整数倍ではないためである。従って、後半領域ＤＬ５Ｂに位置するブロックを更新する場合は、上述の通り、後半領域ＤＬ５Ｂに属する拡張論理ブロック８の末尾にギャップデータを付加し、記憶デバイス２に書き込む。
【００６２】
ホスト３による更新対象のブロックが前半領域ＤＬ５Ａ及び後半領域ＤＬ５Ｂのそれぞれに位置する場合、ギャップデータを付加することにより、トラック単位でリードモディファイライト処理を行うことができる。
【００６３】
このように構成される本実施形態によれば、ブロックサイズが５１２バイトに固定された記憶デバイス２に、保証コード７の付加された拡張論理ブロック８を記憶させることができる。
【００６４】
さらに、本実施形態では、論理ブロック６のサイズと拡張論理ブロック８のサイズとの最小公倍数が、ホスト３の管理単位であるトラックサイズと一致しない場合、更新対象のブロックを有するトラックに対応するデータのみでライト処理を行うことができ、隣接する複数のトラックに跨ったライト処理を行う必要がない。従って、本実施形態では、隣接トラックに関するコマンド処理が完了するまで待機する必要はない。さらに、本実施形態では、キャッシュメモリ１Ｃの使用量が増大するのを防止し、キャッシュヒット率の低下を抑制することができる。待ち時間の解消及びキャッシュヒット率の低下防止により、記憶制御装置１の処理性能が低下するのを防止することができる。以下、本実施形態を詳細に説明する。
【実施例１】
【００６５】
図２は、本実施例に係る記憶制御装置１０を含むストレージシステムの全体構成を示す説明図である。このストレージシステムは、例えば、少なくとも一つの記憶制御装置１０と、一つまたは複数のホスト２０と、少なくとも一つの管理端末３０とを含んで構成することができる。
【００６６】
先に図１で述べた実施形態との対応関係を説明する。記憶制御装置１０は図１中の記憶制御装置１に、記憶デバイス２１０は図１中の記憶デバイス２に、ホスト２０は図１中のホスト３に、チャネルアダプタ１１０は図１中のホスト通信制御部１Ａに、ディスクアダプタ１２０は図１中のデバイス通信制御部１Ｂに、キャッシュメモリ１３０は図１中のキャッシュメモリ１Ｃに、それぞれ対応する。
【００６７】
図３に示す保証コード回路１１２Ａは図１中の保証コード制御部１Ｄに、図３に示すＤＭＡ回路１２２は図１中の境界制御部４に、図３に示すバッファメモリ１２２Ａは図１中のバッファメモリ４Ａに、それぞれ対応する。図１中のバウンダリ補正部４Ｂは、ＤＭＡ回路１２２内のプロセッサが、ＤＭＡ回路１２２内のメモリに記憶されたマイクロプログラムを実行することにより、実現される。バウンダリ補正の方法については、図を改めて後述する。
【００６８】
先に、ホスト２０及び管理端末３０について説明し、次に記憶制御装置１０について説明する。ホスト２０は、例えば、メインフレームコンピュータとして構成され、通信ネットワークＣＮ１を介して記憶制御装置１０に接続されている。通信ネットワークＣＮ１は、例えば、ＦＣ−ＳＡＮ（Fibre Channel-Storage Area Network）のような通信ネットワークとして構成することができる。
【００６９】
ホスト２０は、例えば、９６個または１１６個の論理ブロックから構成されるトラックを、データを管理するための単位として使用する。なお、論理ブロックのサイズと拡張論理ブロックのサイズとの最小公倍数の整数倍ではないサイズでデータを管理するコンピュータであれば、本発明を適用可能である。ホスト２０は、記憶制御装置１０にリードコマンドやライトコマンドを発行し、その処理結果を記憶制御装置１０から受領する。
【００７０】
管理端末３０は、記憶制御装置１０内のサービスプロセッサ１６０と通信ネットワークＣＮ２を介して接続される。通信ネットワークＣＮ３は、例えば、ＬＡＮ（Local Area Network）のような通信ネットワークとして構成される。管理端末３０は、サービスプロセッサ（以下、ＳＶＰ）１６０を介して、記憶制御装置１０内の各種情報を収集する。管理端末３０は、ＳＶＰ１６０を介して、記憶制御装置１０内の各種設定を指示することができる。
【００７１】
記憶制御装置１０の構成を説明する。記憶制御装置１０は、コントローラ１００と、記憶デバイス搭載部２００とに大別することができる。コントローラ１００は、例えば、少なくとも一つ以上のチャネルアダプタ（以下、ＣＨＡ）１１０と、少なくとも一つ以上のディスクアダプタ（以下、ＤＫＡ）１２０と、少なくとも一つ以上のキャッシュメモリ１３０と、少なくとも一つ以上の共有メモリ１４０と、接続部（図中「ＳＷ」）１５０と、ＳＶＰ１６０とを備えて構成される。なお、複数のコントローラ１００をスイッチを介して連結する構成でもよい。例えば、複数のコントローラ１００からクラスタを構成することもできる。
【００７２】
ＣＨＡ１１０は、ホスト２０との間のデータ通信を制御するためのもので、例えば、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。各ＣＨＡ１１０は、少なくとも一つ以上の通信ポートを備えている。
【００７３】
ＤＫＡ１２０は、各記憶デバイス２１０との間のデータ通信を制御するためのもので、ＣＨＡ１１０と同様に、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。
【００７４】
各ＤＫＡ１２０と各記憶デバイス２１０とは、例えば、ファイバチャネルプロトコルに従う通信経路ＣＮ２を介して接続されている。各ＤＫＡ１２０と各記憶デバイス２１０とは、ブロック単位のデータ転送を行う。
【００７５】
コントローラ１００が各記憶デバイス２１０にアクセスするための経路は、冗長化されている。いずれか一方のＤＫＡ１２０や通信経路ＣＮ２に障害が発生した場合でも、コントローラ１００は、他方のＤＫＡ１２０や通信経路ＣＮ２を用いて、記憶デバイス２１０にアクセス可能である。同様に、ホスト２０とコントローラ１００との間の経路も冗長化することができる。ＣＨＡ１１０及びＤＫＡ１２０の構成は、図３で後述する。
【００７６】
ＣＨＡ１１０及びＤＫＡ１２０の動作を簡単に説明する。ＣＨＡ１１０は、ホスト２０から発行されたリードコマンドを受信すると、このリードコマンドを共有メモリ１４０に記憶させる。ＤＫＡ１２０は、共有メモリ１４０を随時参照しており、未処理のリードコマンドを発見すると、記憶デバイス２１０からデータを読み出して、キャッシュメモリ１３０に記憶させる。ＣＨＡ１１０は、キャッシュメモリ１３０に移されたデータを読み出し、ホスト２０に送信する。
【００７７】
一方、ＣＨＡ１１０は、ホスト２０から発行されたライトコマンドを受信すると、このライトコマンドを共有メモリ１４０に記憶させる。また、ＣＨＡ１１０は、受信したライトデータをキャッシュメモリ１３０に記憶させる。ＣＨＡ１１０は、キャッシュメモリ１３０にライトデータを記憶させた後、ホスト２０に書込み完了を報告する。ＤＫＡ１２０は、共有メモリ１４０に記憶されたライトコマンドに従って、キャッシュメモリ１３０に記憶されたデータを読出し、所定の記憶デバイス２１０に記憶させる。
【００７８】
キャッシュメモリ１３０は、例えば、ホスト２０から受信したユーザデータ等を記憶するものである。キャッシュメモリ１３０は、例えば、揮発性メモリまたは不揮発性メモリから構成される。共有メモリ１４０は、例えば、不揮発メモリから構成される。共有メモリ１４０には、後述する各種テーブルＴや管理情報等が記憶される。
【００７９】
共有メモリ１４０及びキャッシュメモリ１３０は、同一のメモリ基板上に混在して設けることができる。あるいは、メモリの一部をキャッシュ領域として使用し、他の一部を制御領域として使用することもできる。
【００８０】
接続部１５０は、各ＣＨＡ１１０と、各ＤＫＡ１２０と、キャッシュメモリ１３０及び共有メモリ１４０をそれぞれ接続させる。これにより、全てのＣＨＡ１１０，ＤＫＡ１２０は、キャッシュメモリ１３０及び共有メモリ１４０にそれぞれアクセス可能である。接続部１５０は、例えばクロスバスイッチ等として構成することができる。
【００８１】
ＳＶＰ１６０は、ＬＡＮ等の内部ネットワークＣＮ４を介して、各ＣＨＡ１１０及び各ＤＫＡ１２０とそれぞれ接続されている。また、ＳＶＰ１６０は、通信ネットワークＣＮ３を介して、管理端末３０に接続される。ＳＶＰ１６０は、記憶制御装置１０内部の各種状態を収集し、管理端末３０に提供する。なお、ＳＶＰ１６０は、ＣＨＡ１１０またはＤＫＡ１２０のいずれか一方にのみ接続されてもよい。ＳＶＰ１６０は、共有メモリ１４０を介して、各種のステータス情報を収集可能だからである。
【００８２】
コントローラ１００の構成は、上述した構成に限定されない。例えば、一つまたは複数の制御基板上に、ホスト２０との間のデータ通信を行う機能と、記憶デバイス２１０との間のデータ通信を行う機能と、データを一時的に保存する機能と、各種テーブル類を書換可能に保存する機能とを、それぞれ設ける構成でもよい。
【００８３】
記憶デバイス搭載部２００の構成について説明する。記憶デバイス搭載部２００は、複数の記憶デバイス２１０を備えている。各記憶デバイス２１０は、例えば、ハードディスクデバイスとして構成される。ハードディスクデバイスに限らず、フラッシュメモリデバイス、光磁気記憶デバイス、ホログラフィックメモリデバイス等を用いることができる場合もある。
【００８４】
ＲＡＩＤ構成等によっても相違するが、例えば、２個１組や４個１組等の所定数の記憶デバイス２１０によって、パリティグループ２２０が構成される。パリティグループ２２０は、パリティグループ２２０内の各記憶デバイス２１０がそれぞれ有する物理的記憶領域を仮想化したものである。
【００８５】
従って、パリティグループ２２０は、仮想化された物理的記憶デバイス（ＶＤＥＶ）である。パリティグループ２２０の有する物理的記憶領域には、論理デバイス（ＬＤＥＶ）２３０を一つまたは複数設定することができる。論理デバイス２３０は、ＬＵＮ（Logical Unit Number ）に対応付けられて、ホスト２０に提供される。
【００８６】
本実施例では、記憶デバイス２１０として、ハードディスクデバイスを例に挙げて説明する。しかし、上述のように、本発明は、ハードディスクデバイス以外の記憶デバイスでも適用可能である。また、理解に資するために、フローチャート中では、記憶デバイスを「ディスク」と表現する。
【００８７】
図３は、ＣＨＡ１１０及びＤＫＡ１２０の構成を示すブロック図である。ＣＨＡ１１０は、例えば、プロトコルチップ１１１と、ＤＭＡ回路１１２と、マイクロプロセッサ１１３とを備えている。プロトコルチップ１１１は、ホスト２０との通信を行うための回路である。マイクロプロセッサ１１３は、ＣＨＡ１１０の全体動作を制御する。
【００８８】
ＤＭＡ回路１１２は、プロトコルチップ１１１とキャッシュメモリ１３０との間のデータ転送をＤＭＡ（Direct Memory Access）方式で行うための回路である。ＤＭＡ回路１１２は、保証コード回路１１２Ａを備える。保証コード回路１１２Ａは、ホスト２０から受信した論理ブロックに保証コードを設定して拡張論理ブロックを生成する。さらに、保証コード回路１１２Ａは、キャッシュメモリ１３０から読み込まれた拡張論理ブロックから保証コードを除去して、論理ブロックに戻す。
【００８９】
ＤＫＡ１２０は、ＣＨＡ１１０と同様に、例えば、プロトコルチップ１２１と、ＤＭＡ回路１１２とマイクロプロセッサ１２３を備える。さらに、ＤＫＡ１２０は、パリティ生成回路１２４も備えている。
【００９０】
プロトコルチップ１２１は、各記憶デバイス２１０と通信するための回路である。マイクロプロセッサ１２３は、ＤＫＡ１２０の全体動作を制御する。パリティ生成回路１２４は、キャッシュメモリ１３０に記憶されたデータに基づいて所定の論理演算を行うことにより、パリティデータを生成する回路である。
【００９１】
ＤＭＡ回路１２２は、記憶デバイス２１０とキャッシュメモリ１３０との間のデータ転送を、ＤＭＡ方式で行うための回路である。ＤＭＡ回路１２２は、バッファメモリ（以下、バッファとも呼ぶ）１２２Ａを備えており、このバッファメモリ１２２Ａを介してＤＭＡ転送を実行する。即ち、キャッシュメモリ１３０と記憶デバイス２１０とは、バッファメモリ１２２Ａを介してデータを送受する。後述のように、バッファメモリ１２２Ａ上において、データのバウンダリが調整される。
【００９２】
図４は、キャッシュメモリ１３０の管理方法を模式的に示す説明図である。図４の上側に示すように、ホスト２０から記憶制御装置１０に向けて送信されるデータは、一つまたは複数のスロットに分割することができる。
【００９３】
ホスト２０から受信したデータを所定のブロック数で分割したものを、スロット３００と呼ぶ。メインフレームの場合、トラックという、メインフレーム独自の管理単位が存在し、トラックは、９６個または１１６個の論理ブロック３０１から構成される。一つの論理ブロック３０１のサイズは、例えば５１２バイトである。
【００９４】
メインフレームの場合、スロットサイズをトラックサイズに一致させる。メインフレームの場合、トラック番号を指定してコマンドを発行するため、スロットサイズをトラックサイズに一致させるほうが、処理し易いためである。従って、本実施例において、図４に示すスロットは、トラックと考えて差し支えない。
【００９５】
キャッシュメモリ１３０は、複数のセグメント１３１から構成される。一つのセグメント１３１のサイズは、例えば、６４ＫＢである。ホスト２０からのデータは、スロット単位で割り当てられるセグメント１３１に、記憶される。
【００９６】
スロット管理テーブルＴ１０は、スロット３００とセグメント１３１との対応関係等を管理する（以下、スロット管理テーブルＴ１０をＳＬＣＢとも呼ぶ）。スロット管理テーブルＴ１０は、例えば、スロット番号と、ＶＤＥＶ番号と、セグメントアドレスと、ダーティビットマップと、スロットステータスとを対応付けて管理する。
【００９７】
スロット番号とは、対象となるスロット３００を特定するための識別情報である。ＶＤＥＶ番号とは、対象のスロット３００に対応付けられるＶＤＥＶ２２０を特定するための識別情報である。セグメントアドレスとは、その特定されたスロットに割り当てられるセグメントを識別するための情報である。即ち、セグメントアドレスとは、そのスロットのデータの格納先アドレスを示す。スロットにセグメントが割り当てられていない場合、セグメントアドレスの値には”０”が設定される。
【００９８】
ダーティビットマップとは、そのスロット３００内の更新位置を特定するための更新位置管理情報である。スロットを構成する各論理ブロック毎にそれぞれ１ビットが割り当てられる。更新された論理ブロックには”１”が設定され、更新されない論理ブロックには”０”が設定される。従って、ダーティビットマップを参照することにより、そのスロットのどの論理ブロックが更新対象の論理ブロックであるかを知ることができる。
【００９９】
スロットステータスとは、そのスロットのステータスを示す情報である。ステータスとしては、ダーティ状態、クリーン状態、フリー状態を挙げることができる。ダーティ状態とは、ダーティビットマップに一つ以上”１”が設定されている状態を示す。即ち、ダーティ状態とは、更新対象の論理ブロックが含まれているスロットを示す。クリーン状態とは、スロット内の更新対象データが記憶デバイス２１０に書き込まれて、デステージ処理が完了した状態を示す。フリー状態とは、そのスロットに割り当てられたセグメントを解放して、他のスロットに割当て可能な状態を示す。
【０１００】
スロット管理テーブルＴ１０を用いることにより、ホスト２０から受信したデータがキャッシュメモリ１３０のどの領域に記憶されているか、更新データの有無、更新データの位置等を容易に管理できる。
【０１０１】
図５は、デバイスＩＤ−ＶＤＥＶ対応関係管理テーブルＴ２０と、ＶＤＥＶ管理テーブルＴ３０とをそれぞれ示す説明図である。これら各テーブルＴ２０，Ｔ３０は、共有メモリ１４０に記憶される。ＣＨＡ１１０，ＤＫＡ１２０は、各テーブルＴ２０，Ｔ３０の少なくとも一部を、ＣＨＡ１１０，ＤＫＡ１２０内のメモリにコピーして使用することができる。
【０１０２】
デバイスＩＤ−ＶＤＥＶ対応関係管理テーブルＴ２０は、論理デバイス２３０と仮想的な中間デバイスＶＤＥＶ２２０との対応関係を管理するテーブルである。このテーブルＴ２０は、デバイスＩＤ＿Ｃ２１と、ＶＤＥＶ番号Ｃ２２とを対応付けて管理する。デバイスＩＤ＿Ｃ２１は、論理デバイス２３０を識別するための情報である。ＶＤＥＶ番号Ｃ２２は、ＶＤＥＶ２２０を識別する情報である。
【０１０３】
ＶＤＥＶ管理テーブルＴ３０は、各ＶＤＥＶの構成を管理するテーブルである。ＶＤＥＶ管理テーブルＴ３０は、例えば、ＶＤＥＶ番号Ｃ３１と、スロットサイズＣ３２と、ＲＡＩＤレベルＣ３３と、データドライブ数Ｃ３４と、パリティサイクル内スロット数Ｃ３４と、ディスクタイプＣ３６とを対応付けて管理する。
【０１０４】
ＶＤＥＶ番号Ｃ３１とは、各ＶＤＥＶ２２０を識別情報である。スロットサイズＣ３２とは、そのＶＤＥＶに対応付けられるスロットを構成する論理ブロックの数を示す。ＲＡＩＤレベルＣ３３とは、ＲＡＩＤ１〜ＲＡＩＤ６のような、ＲＡＩＤの種類を示す。データドライブ数Ｃ３４とは、データを記憶する記憶デバイスの数を示す。
【０１０５】
パリティサイクル内スロット数Ｃ３４とは、一つのパリティサイクルに含まれるスロットの数を示す。ディスクタイプＣ３６とは、そのＶＤＥＶ２２０を構成する記憶デバイス２１０の種類を示す。
【０１０６】
図６は、スロット３００と記憶デバイス２１０とのマッピング状態を模式的に示す説明図である。図６（ａ）はＲＡＩＤ５の場合を、図６（ｂ）はＲＡＩＤ１の場合をそれぞれ示す。
【０１０７】
図６（ａ）は、３個のデータディスク（＃０，＃１，＃２）と１個のパリティディスク（＃３）とから、３Ｄ＋１ＰのＲＡＩＤ５を構成する場合を示す。データディスク（＃０）にはスロット＃０〜スロット＃７が、データディスク（＃１）にはスロット＃８〜スロット＃１５が、データディスク（＃２）にはスロット＃１６〜スロット＃２３が、右側のパリティディスク（＃３）にはパリティ＃０〜＃７が、それぞれ配置される。即ち、各データディスクには、それぞれ連続する８個のスロットが配置される。
【０１０８】
パリティが８スロット分（＃０〜＃７）のサイズを、パリティサイクルと呼ぶ。図示するパリティサイクルの次のパリティサイクルでは、ディスク（＃３）の左隣のディスク（＃２）にパリティが記憶される。さらに次のパリティサイクルでは、ディスク（＃１）にパリティが記憶される。このように、パリティデータを記憶するディスクは、パリティサイクル毎に移動する。図６（ａ）からわかるように、一つのパリティサイクルに含まれるスロットの数（テーブルＴ３０内のＣ３５）は、データディスクの数に８を乗ずることにより求められる。
【０１０９】
図６（ｂ）は、ＲＡＩＤ１の場合を示す。ＲＡＩＤ１では、正ディスク及び副ディスクの両方に、それぞれ同一のデータが記憶される。ＲＡＩＤ１の場合、パリティサイクルに含まれるスロットの数は、８となる。
【０１１０】
上述の通り、スロットと記憶デバイスとのマッピング状態は、ＲＡＩＤレベル（Ｃ３３）及びデータドライブ数（Ｃ３４）とから求めることができる。従って、ホスト２０から受信したデータの格納先を、上記マッピング状態に基づいて算出できる。
【０１１１】
図７は、論理ブロック及び拡張論理ブロックの関係を示す説明図である。図７（ａ）に示すように、論理ブロック３０１は、５１２バイトのサイズを有する。ホスト２０及び記憶デバイス２１０は、論理ブロック３０１を最小管理単位として使用する。
【０１１２】
図７（ｂ）に示すように、ＣＨＡ１１０は、ホスト２０から受信したデータについて、各論理ブロック３０１毎に、それぞれ８バイトの保証コード３１０を付加する。保証コード３１０には、例えば、ＬＡ及びＬＲＣが含まれる。５１２バイトの論理ブロック３０１に８バイトの保証コード３１０を付加することにより、拡張論理ブロック３２０が生成される。拡張論理ブロック３２０は、キャッシュメモリ１３０に記憶される。ＣＨＡ１１０からホスト２０にデータを送信する場合、拡張論理ブロック３２０から保証コード３１０が取り除かれ、論理ブロック３０１としてホスト２０に送信される。
【０１１３】
図７（ｃ）に示すように、ＦＣディスクのように、５２０バイト単位のフォーマットに設定可能な記憶デバイス２１０の場合、拡張論理ブロック３２０をそのまま記憶させることができる。
【０１１４】
図８は、ＳＡＳディスクやＳＡＴＡディスクのように、セクタ長が５１２バイトに固定されるディスクに、拡張論理ブロック３２０のデータを記憶させる様子を模式的に示す説明図である。
【０１１５】
図８（ａ）に示すように、ホスト２０から受信したデータは、各論理ブロック３０１毎に保証コード３１０が付加され、拡張論理ブロック３２０が形成される。拡張論理ブロックの形式に変換されたデータは、キャッシュメモリ１３０に記憶される。
【０１１６】
図８（ｂ）に示すように、ＳＡＳディスクやＳＡＴＡディスクのような記憶デバイス２１０は、５１２バイト単位でデータを読み書きする。従って、５２０バイトの拡張論理ブロック３２０を、そのまま記憶デバイスに書き込むことはできない。
【０１１７】
そこで、論理ブロック３０１のサイズ（５１２バイト）と拡張論理ブロック３２０のサイズ（５２０バイト）との最小公倍数（３３２８０バイト）を、記憶デバイス２１０へのデータ入出力サイズとする。６４個の拡張論理ブロック３２０の合計サイズ（６４×５２０＝３３２８０）は、６５個の論理ブロック３０１の合計サイズ（６５×５１２＝３３２８０）に一致する。従って、６４個の拡張論理ブロック３２０を一塊りとして、記憶デバイス２１０に書き込んだり、記憶デバイス２１０から読み出すことができる。
【０１１８】
以上を前提として、最小公倍数単位でのデータアクセスを利用したリードモディファイライト処理を説明する。図８（ｃ）に示すように、ホスト２０から更新データの入った論理ブロック（ＮＥＷ）を受信すると、図８（ｄ）に示すように、ＣＨＡ１１０は、更新データの論理ブロック３０１に保証コード３１０を付加して、拡張論理ブロック３２０を生成する。以下、更新対象のブロックを更新ブロックと呼ぶ場合がある。
【０１１９】
図８（ｅ）に示すように、ＤＫＡ１２０は、記憶デバイス２１０から旧データ（ＯＬＤ）を読出して、キャッシュメモリ１３０に記憶させる。上述の通り、６５個の論理ブロックからなるデータは、６４個の拡張論理ブロックからなるデータに等しい。従って、ＤＫＡ１２０は、記憶デバイス２１０から連続する６５個の論理ブロック３０１を読み出すことにより、拡張論理ブロック６４個分のデータを得ることができる。
【０１２０】
図８（ｆ）に示すように、キャッシュメモリ１３０上において、更新対象の拡張論理ブロック３２０に新データが配置される。その後、図８（ｇ）に示すように、新データの格納された６４個の拡張論理ブロック３２０は、６５個の論理ブロック３０１として記憶デバイス２１０に書き込まれる。
【０１２１】
ＲＡＩＤ１の場合、旧データの書き込まれている論理ブロック３２０は、新データが記憶されている論理ブロック３２０に単純に置き換えられる。ＲＡＩＤ５等のようにパリティを使用する場合、旧データと新データ及び旧パリティから新パリティを生成する。パリティは、データと同様に、６４個の拡張論理ブロック単位で記憶デバイス２１０に書き込まれる。
【０１２２】
図９は、ホスト２０の基本的管理単位であるトラックのサイズと、論理ブロックサイズと拡張論理ブロックサイズとの最小公倍数とが整合しない場合を示す説明図である。ホスト２０は、論理ブロック３０１単位でデータを更新することができるが、ホスト２０上でデータを管理する基本単位は、トラックである。一つのトラックは、９６個または１１６個の論理ブロック３０１から構成される。トラックが１１６個の論理ブロックから構成されており、１１４番目のブロックが更新される場合を例に挙げて説明する。
【０１２３】
図９（ａ）に示すように、キャッシュメモリ１３０には、拡張論理ブロック３２０の形式でデータが記憶される。ブロック数は１１６個のままで変化はしないが、保証コード３１０が付加されるため、データサイズは大きくなる。
【０１２４】
リードモディファイライト処理を行うためには、更新対象ブロックの旧データをキャッシュメモリ１３０に読み出す必要がある。最小公倍数単位でのデータアクセスを利用して、旧データを含む６５個の論理ブロック３０１を記憶デバイス２１０から読み出す場合を考える。
【０１２５】
図９（ｂ）に示すように、旧データを読み出すために、６５番目から１２９番目までの論理ブロック３０１を記憶デバイス２１０から読み出すことになる。しかし、１１７番目から１２９番目の論理ブロック３０１は、トラック＃１に対応している。即ち、更新対象の論理ブロック３０１（＃１１４）の存在するトラック＃０と、このトラック＃０に隣接するトラック＃１との境界は、記憶デバイス２１０内の論理ブロック３０１の境界と一致していない。
【０１２６】
従って、最小公倍数単位でのデータアクセスを利用して、トラック＃０の後半領域（６４番目〜１１５番目までの拡張論理ブロック３２０）に存在するデータを、記憶デバイス２１０から読み出そうとすると、隣接する２つのトラック＃０，＃１に跨った処理を行うことになる。
【０１２７】
図１０は、本実施例による記憶デバイス２１０へのアクセス方法を示す。本実施例では、論理ブロック１１６個毎に、記憶デバイス２１０上に所定サイズのギャップδを設けることにより、各トラックの先頭ブロックの開始位置と、記憶デバイス２１０内の論理ブロックの開始位置とを一致させる。図１０に示す例では、ギャップδのサイズは、９６バイトとなる。
【０１２８】
図１１〜図１３を参照して、本実施例によるリードモディファイライト処理の様子を説明する。以下、ＲＡＩＤ１の場合を主に説明する。
【０１２９】
図１１（１）に示すように、トラック＃０の１１４番目の拡張論理ブロック３２０を更新する場合、後半領域（ＢＡＳ２）のデータを記憶デバイス２１０から読み出して、バッファメモリ１２２Ａに記憶させる。図１（１）中、斜線で示すデータの末尾には、サイズδのギャップデータ３４０が格納されている。
【０１３０】
図１１（２）に示すように、ＤＫＡ１２０は、バッファメモリ１２２Ａに記憶されたデータのうち、更新対象データに対応する旧データとギャップデータ３４０とを除いた部分のデータのみを、キャッシュメモリ１３０に転送する。図１１（２）の（ｂ）において、バッファメモリ１２２Ａからキャッシュメモリ１３０に転送されない範囲は、点線で示されている。
【０１３１】
図１２（３）に示すように、キャッシュメモリ１３０上において、更新対象データ（＃１１４の拡張論理ブロックのデータ）と、記憶デバイス２１０から読み出されたデータとがマージされる。
【０１３２】
図１２（４）に示すように、マージ後のデータは、キャッシュメモリ１３０からバッファメモリ１２２Ａに転送される。
【０１３３】
図１３（５）に示すように、バッファメモリ１２２Ａ上において、マージ後のデータの終端に、ギャップδ分のデータ３４０が付加される。つまり、マージ後のデータの境界（図中右端の境界）が、論理ブロック３０１の終了位置に一致するように、ギャップデータ３４０が付加される。
【０１３４】
図１３（６）に示すように、バッファメモリ１２２Ａから記憶デバイス２１０に、ギャップデータ３４０の付加されたデータが転送され、記憶デバイス２１０の各論理ブロック３０１（＃６５〜＃１１７）に書き込まれる。
【０１３５】
以上述べたように、本実施例では、トラックの終端が記憶デバイス２１０内の論理ブロック３０１の境界と一致するように、バッファメモリ１２２Ａ上でギャップデータ３４０を付加する。
【０１３６】
記憶デバイス２１０からデータを読み出す場合、図１１（１）で述べたように、ギャップデータ３４０もバッファメモリ１２２Ａに転送される。しかし、図１１（２）で述べたように、ギャップデータ３４０は、バッファメモリ１２２Ａ上に留まり、キャッシュメモリ１３０には転送されない。ギャップデータ３４０は、キャッシュメモリ１３０に転送されないため、ホスト２０によって利用されることもない。従って、ギャップデータ３４０の値は、全て”０”としてもよいし、特に値を定めなくてもよい。
【０１３７】
図１４〜図１８に基づいて、本実施例の動作を説明する。図１４は、ライトコマンドの処理を示すフローチャートである。この処理は、ＣＨＡ１１０によって実行される。
【０１３８】
ＣＨＡ１１０は、ホスト２０からライトコマンドを受信すると（Ｓ１０）、書込み開始アドレスをＶＤＥＶ番号とスロット番号の組合せに変換する（Ｓ１１）。ライトコマンドは、論理デバイスＩＤ、書込み開始アドレス、書込みサイズを指定している。従って、ＣＨＡ１１０は、指定されるデバイスＩＤに基づいて、デバイスＩＤ−ＶＤＥＶ対応関係管理テーブルＴ２０を参照することにより、書込先のＶＤＥＶ番号を特定する。さらに、ＣＨＡ１１０は、特定されたＶＤＥＶ番号に基づいて、ＶＤＥＶ管理テーブルＴ３０を参照することにより、書込み先のスロット番号を検出することができる。
【０１３９】
ＣＨＡ１１０は、転送終了スロット番号を算出する（Ｓ１２）。転送終了スロット番号とは、ライトデータの最後のスロット番号である。ＣＨＡ１１０は、書込み開始アドレスに書込みサイズを加算した値を、スロットサイズで除算することにより、そのライトデータの最後のスロットの番号を求めることができる。
【０１４０】
ＣＨＡ１１０は、書込み対象のスロットに対応するＳＬＣＢが既に存在するか否かを判定する（Ｓ１３）。即ち、ＣＨＡ１１０は、書込み対象スロットに、キャッシュメモリ１３０のセグメント１３１が割り当てられているか否かを判定する（Ｓ１３）。
【０１４１】
書込み対象スロットにＳＬＣＢが未だ割り当てられていない場合（S13:NO）、ＣＨＡ１１０は、その書込み対象スロットにＳＬＣＢを一つ割当てる（Ｓ１４）。ＣＨＡ１１０は、その割り当てたＳＬＣＢに、空いているセグメント１３１のアドレスを設定する（Ｓ１５）。これにより、書込み対象スロットとセグメントとが対応付けられ、書込み対象スロットのデータをキャッシュメモリ１３０に記憶させるための準備が整う。
【０１４２】
書込み対象スロットにＳＬＣＢが既に割り当てられている場合（S13:YES）、Ｓ１４及びＳ１５はスキップされ、Ｓ１６に移る。
【０１４３】
ＣＨＡ１１０は、ライトデータの受信に先立って、書込み対象スロットのスロットステータスをダーティ状態に設定する（Ｓ１６）。次に、ＣＨＡ１１０は、ホスト２０から受信したライトデータ（書込み対象スロットのデータ）を、書込み対象スロットに割り当てられているセグメントアドレスに転送する（Ｓ１７）。これにより、ホスト２０から受信したライトデータは、キャッシュメモリ１３０内の所定セグメントに記憶される。
【０１４４】
なお、ホスト２０から受信したライトデータをキャッシュメモリ１３０内の所定セグメントに転送して記憶させる際に、そのライトデータには各論理ブロック３０１毎にそれぞれ保証コード３１０が付加される。従って、キャッシュメモリ１３０には、拡張論理ブロック３２０の形式でライトデータが記憶される。
【０１４５】
ＣＨＡ１１０は、ライトデータによって更新された論理ブロック３０１について、ダーティビットマップをオン状態（”１”）に設定する（Ｓ１８）。これにより、その書込み対象スロット内のどの論理ブロック３０１に、更新データが格納されているかを管理することができる。
【０１４６】
ＣＨＡ１１０は、本処理の対象とするスロットの番号が、Ｓ１２で求めた転送終了スロット番号に一致するか否かを判定する（Ｓ１９）。処理対象のスロット番号と転送終了スロット番号とが不一致の場合（S19:NO）、ＣＨＡ１１０は、処理対象のスロット番号を一つ増加させて（Ｓ２０）、Ｓ１３に戻る。両方のスロット番号が一致すると（S19:YES）、本処理は終了する。
【０１４７】
ホスト２０が、連続する複数スロットによってライトデータを書き込む場合、即ち、ホスト２０がシーケンシャルライトを行う場合、Ｓ１３〜Ｓ１９がスロット数に応じて繰り返し実行される。ホスト２０が、一つのスロット内の一つ又は複数の論理ブロック３０１を更新しようとする場合、Ｓ１３〜Ｓ１９がそれぞれ一回だけ実行される。
【０１４８】
図１５に基づいて、デステージ処理を説明する。デステージ処理とは、キャッシュメモリ１３０上のデータを記憶デバイス２１０に書き込む処理である。デステージ処理は、ＤＫＡ１２０によって実行される。
【０１４９】
デステージ処理では、図１１〜図１３を用いて述べたように、更新対象トラック（更新対象スロット）の旧データを読出し（図１１）、ホスト２０から受信した更新データと旧データとをマージし（図１２）、このマージしたデータを記憶デバイス２１０に書き込む（図１３）。
【０１５０】
記憶デバイス２１０とキャッシュメモリ１３０との間のデータ転送には、バッファメモリ１２２Ａが使用される。このバッファメモリ１２２Ａにおいて、データの境界を揃えるためのバウンダリ補正処理が実施される。従って、バウンダリ補正処理は、記憶デバイス２１０からキャッシュメモリ１３０に旧データを転送する場合（第１バウンダリ補正処理）と、キャッシュメモリ１３０から記憶デバイス２１０にマージされたデータを転送する場合（第２バウンダリ補正処理）とで、それぞれ実行されることになる。
【０１５１】
なお、更新対象トラックの全ブロックが更新される場合、記憶デバイス２１０から旧データを読み出す必要はない。ここでは、トラック内の幾つかのブロックが更新される場合を例に挙げて説明する。
【０１５２】
ＤＫＡ１２０は、共有メモリ１４０内のＳＬＣＢにアクセスし、スロットステータスがダーティ状態に設定されているＳＬＣＢが存在するか否かを確認する。ＤＫＡ１２０は、スロットステータスがダーティ状態に設定されたＳＬＣＢを検出すると（Ｓ３０）、そのＳＬＣＢからスロット番号及びＶＤＥＶ番号を取得する（Ｓ３１）。
【０１５３】
ＤＫＡ１２０は、ＶＤＥＶ番号に基づいてＶＤＥＶ管理テーブルＴ３０を参照することにより、そのＶＤＥＶのディスクタイプを取得する。ＤＫＡ１２０は、そのディスクタイプがＦＣディスクであるか否かを判定する（Ｓ３２）。
【０１５４】
ディスクタイプがＦＣディスクではない場合（S32:NO）、キャッシュメモリ１３０内の拡張論理ブロック３２０のサイズと記憶デバイス２１０内の論理ブロック３０１のサイズとは、一致しない。
【０１５５】
そこで、ＤＫＡ１２０は、記憶デバイス２１０から読み出される旧データの境界を、キャッシュメモリ１３０内の拡張論理ブロック３２０の境界に一致させるべく、第１バウンダリ補正処理を実行する（Ｓ３３）。この第１バウンダリ補正処理の詳細は、図１６で後述する。
【０１５６】
ＤＫＡ１２０は、第１バウンダリ補正処理の終了後に、正ディスク（正記憶デバイス）及び副ディスク（副記憶デバイス）の両方についてデステージ処理を行う（Ｓ３４）。このデステージ処理では、キャッシュメモリ１３０からバッファメモリ１２２Ａを経由して記憶デバイス２１０にデータが書き込まれる。バッファメモリ１２２Ａから記憶デバイス２１０にデータを転送する際に、第２バウンダリ補正処理が実行される。デステージ処理（Ｓ３４）の詳細は、図１８で後述する。
【０１５７】
ところで、ディスクタイプがＦＣディスクの場合（S32:YES）、ＤＫＡ１２０は、ＦＣディスク用のデステージ処理を実行する（Ｓ３５）。図７で述べたように、ＦＣディスクは、セクタ長を５２０バイトに設定できる。
【０１５８】
従って、キャッシュメモリ１３０内のデータ管理単位である拡張論理ブロック３２０のサイズと、ＦＣディスク２１０のデータ入出力単位とは一致する。このため、ＦＣディスクとキャッシュメモリ１３０との間では、バウンダリ補正処理を行うことなく、データを転送することができる。従って、ＦＣディスク用のデステージ処理については、これ以上の説明を省略する。
【０１５９】
なお、後述する別の実施例では、記憶デバイス２１０内でバウンダリ補正処理を行うことにより、ＦＣディスク以外のディスク（ＳＡＳディスクやＳＡＴＡディスク等）をＦＣディスクと同様に使用する。
【０１６０】
図１６は、図１５中にＳ３３で示すバウンダリ補正処理の詳細を示すフローチャートである。このバウンダリ補正処理では、記憶デバイス２１０からキャッシュメモリ１３０にデータを転送する際に、データの境界を補正する。
【０１６１】
ＤＫＡ１２０は、スロットを構成する論理ブロックの数を確認し（Ｓ５０）、一つのスロットを構成する論理ブロックの数が１１６個または９６個のいずれかであるかを判定する（Ｓ５１）。
【０１６２】
上述のように、メインフレームでは、一つのスロット（トラック）を９６個または１１６個の論理ブロックから構成する。オープン系ホストの場合、一つのスロットを１２８個または５１２個で構成する。
【０１６３】
１スロットを構成する論理ブロックの数が９６個でも１１６個でもない場合（S51:NO）、ＤＫＡ１２０は、論理ブロック３０１のサイズと拡張論理ブロック３２０のサイズとの最小公倍数に基づいて、ＤＭＡ１２２の転送パラメータを設定する（Ｓ５２）。即ち、ＤＫＡ１２０は、６５個の論理ブロック３０１を一塊りとして、記憶デバイス２１０からキャッシュメモリ１３０へデータを転送する（Ｓ５８）。
【０１６４】
１スロットを構成する論理ブロックの数が９６個または１１６個のいずれかである場合（S51:YES）、ＤＫＡ１２０は、転送対象スロットのＳＬＣＢを参照し、そのＳＬＣＢに設定されているダーティビットマップの状態を確認する（Ｓ５３）。
【０１６５】
ＤＫＡ１２０は、ダーティビットマップの状態に基づいて、記憶デバイス２１０からキャッシュメモリ１３０へのデータ転送が、予め設定された複数のケースのいずれに該当するかを判別する（Ｓ５４）。
【０１６６】
図１７を参照する。図１７は、ケースに応じてＤＭＡ１２２の転送パラメータを設定する様子を示す説明図である。図１７（ａ）は、更新対象ブロックの位置に応じて分類される複数のケースを示す。
【０１６７】
上述の通り、トラックは、最小公倍数単位でのデータアクセスが可能な前半領域（ＢＡＳ１）と、前半領域の後に続く後半領域（ＢＡＳ２）とに大別できる。そこで、本実施例では、更新対象の論理ブロックが、トラックのどこに存在するかに応じて、ケースを分けて対応する。
【０１６８】
ケース１は、トラックの後半領域（＃６４〜＃１１５）にのみ、更新対象の論理ブロックが存在する場合である。ケース２は、トラックの前半領域（＃０〜＃６３）及び後半領域のそれぞれに、更新対象の論理ブロックが存在する場合である。ケース３は、トラックの前半領域にのみ、更新対象の論理ブロックが存在する場合である。
【０１６９】
本実施例では、記憶デバイス２１０内のブロック境界とトラックの先頭とを一致させるために、トラックの最終ブロックにギャップデータ３４０を付加している。従って、ケース１及びケース２では、このギャップデータ３４０の存在を考慮する必要がある。これに対し、ケース３では、トラックの前半領域にのみ更新対象ブロックが存在するため、ギャップデータ３４０を考慮する必要がなく、最小公倍数単位でのデータアクセスによって、データを転送することができる。
【０１７０】
図１７（ｂ）は、各ケース毎にＤＭＡ１２２に設定される転送パラメータを管理するためのテーブルＴ４１〜Ｔ４３を示す説明図である。テーブルＴ４１はケース１用の転送パラメータを、テーブルＴ４２はケース２用の転送パラメータを、テーブルＴ４３はケース３用の転送パラメータを、それぞれ管理するテーブルである。以下の説明では、１スロットが１１６ブロックから構成される場合を主に説明する。
【０１７１】
テーブルＴ４１は、１スロットを構成するブロック数に応じて、読出し先の先頭ＬＢＡと、転送ブロック数とを管理する。ＬＢＡとは、論理ブロックアドレスである。１スロットが９６ブロックから構成される場合、読出し先の先頭ＬＢＡは、スロット番号に９８を乗じた値に６５を加算して決定される。１スロットが１１６ブロックから構成される場合、読出し先の先頭ＬＢＡは、スロット番号に１１８を乗じた値に６５を加えることにより求められる。
【０１７２】
１スロットが１１６個の拡張論理ブロックから構成される場合、このスロットに対応する記憶デバイス２１０内の論理ブロックの数は１１８個である。そして、６５個の論理ブロック３０１が６４個の拡張論理ブロック３２０に対応する。
【０１７３】
トラックの後半領域に更新対象ブロックが存在するケース１の場合、後半領域の先頭からデータを読み出す必要がある。後半領域は、記憶デバイス内において、＃６５の論理ブロックから始まり、＃１１７の論理ブロックで終了する。従って、スロット番号に１１８を乗じて６５を加えることにより、目的とするトラックの後半領域の先頭ＬＢＡを求めることができる。
【０１７４】
例えば、最初のトラック＃０の後半領域の先頭ＬＢＡは、０×１１８＋６５＝６５として求められる。２つめのトラック＃１の後半領域の先頭ＬＢＡは、１×１１８＋６５＝１８３として求められる。
【０１７５】
ケース１の場合、後半領域のデータを記憶デバイス２１０からキャッシュメモリ１３０に転送する。後半領域のサイズは、記憶デバイス２１０内において、５３個の論理ブロック３０１から構成されるため、転送ブロック数には５３が設定される。
【０１７６】
トラックの前半領域及び後半領域のそれぞれに更新対象ブロックが存在するケース２の場合、読出し先の先頭ＬＢＡは、スロット番号に、そのスロットを構成する論理ブロック数を乗じた値として設定される。１スロットが１１６個の拡張論理ブロックから構成される場合、先頭ＬＢＡは、スロット番号に１１８を乗じて求められる。ケース２では、トラック全体のデータをキャッシュメモリ１３０に転送する必要があるため、転送ブロック数は１１８に設定される。
【０１７７】
トラックの前半領域にのみ更新対象ブロックが存在するケース３では、前半領域のデータを記憶デバイス２１０から読み出してキャッシュメモリ１３０に転送する。従って、先頭ＬＢＡは、トラックに対応する論理ブロックの数にスロット番号を乗じることにより、求められる。トラックの前半領域のデータのみを読み出せばよいので、転送ブロック数は６５に設定される。
【０１７８】
このように本実施例では、トラックの更新位置に応じてケースを分けて考え、ＤＭＡ転送に用いる転送パラメータを予め用意している。
【０１７９】
図１６に戻る。ケースを判別した後（Ｓ５４）、ＤＫＡ１２０は、判別されたケースに応じて、記憶デバイス２１０にリード要求を発行する（Ｓ５５）。ＤＫＡ１２０は、読出し先の先頭ＬＢＡ及び転送ブロック数を指定して、記憶デバイス２１０にデータの読出しを要求する。
【０１８０】
ＤＫＡ１２０は、記憶デバイス２１０からバッファメモリ１２２Ａにデータを転送するためのパラメータをＤＭＡ１２２に設定する（Ｓ５６）。ＤＫＡ１２０は、例えば、データ転送先のアドレス（バッファメモリのアドレス）と転送バイト数とを、ＤＭＡ１２２に設定する。転送バイト数は、転送ブロック数に５１２を乗じた値となる。
【０１８１】
ＤＭＡ１２０は、バッファメモリ１２２Ａからキャッシュメモリ１３０にデータを転送するためのパラメータをＤＭＡ１２２に設定する（Ｓ５７）。ＤＫＡ１２０は、例えば、転送元となるバッファメモリ１２２Ａのアドレスと、転送先となるキャッシュメモリ１３０のアドレス（セグメントアドレス）と、転送バイト数と、ダーティビットマップの状態とを、ＤＭＡ１２２にそれぞれ設定する。
【０１８２】
１スロットが１１６ブロックから構成される場合の転送バイト数は、ケース１では（５２×５２０）バイト、ケース２では（１１６×５２０）バイト、ケース３では（６４×５２０）バイトとなる。１スロットが９６ブロックから構成される場合の転送バイト数は、ケース１では（３２×５２０）バイト、ケース２では（９６×５２０）バイト、ケース３では（６４×５２０）バイトとなる。
【０１８３】
上記のように転送バイト数を設定することにより、図１１（２），図１２（３）に示すように、ギャップデータ３４０は、バッファメモリ１２２Ａからキャッシュメモリ１３０に転送されない。
【０１８４】
ダーティビットマップの状態をＤＭＡ１２２に設定するのは、更新される範囲のデータをバッファメモリ１２２Ａからキャッシュメモリ１３０に転送させないためである。即ち、ホスト２０から受信した新データが、記憶デバイス２１０から読み出される旧データによって上書きされるのを防止するためである。従って、ＤＭＡ１２２は、ダーティビットマップに”１”が設定されたブロックについては、バッファメモリ１２２Ａからキャッシュメモリ１３０にデータを転送しない。
【０１８５】
なお、後述のＲＡＩＤ５の場合、新しいパリティを生成するために必要なため、旧データもバッファメモリ１２２Ａからキャッシュメモリ１３０に転送される。従って、ＲＡＩＤ５の場合は、ダーティビットマップの状態をＤＭＡ１２２に設定する必要はない。
【０１８６】
Ｓ５６及びＳ５７によって、転送パラメータがＤＭＡ１２２に設定されると、ＤＭＡ転送が開始される（Ｓ５８）。ＤＫＡ１２０は、バッファメモリ１２２Ａからキャッシュメモリ１３０へのＤＭＡ転送が終了するまで待機する（Ｓ５９）。ＤＭＡ転送が終了すると（S59:YES）、バウンダリ補正処理は終了する。
【０１８７】
図１８は、図１５中にＳ３４で示すデステージ処理の詳細を示す。このデステージ処理では、キャッシュメモリ１３０からバッファメモリ１２２Ａを経由して記憶デバイス２１０にデータを転送する。
【０１８８】
ＤＫＡ１２０は、１スロットを構成する拡張論理ブロック数を確認し（Ｓ７０）、１スロットが９６個または１１６個の拡張論理ブロックから構成されているか否かを判定する（Ｓ７１）。１スロットを構成するブロック数が９６個または１１６個のいずれでもない場合（S71:NO）、ＤＫＡ１２０は、最小公倍数単位でのデータアクセスに基づいて、転送用のパラメータをＤＭＡ１２２に設定する（Ｓ７２）。１スロットが１２８ブロックまたは５１２ブロックから構成される場合（S71:NO）、最小公倍数単位でデータを転送できるためである。
【０１８９】
１スロットが９６個または１１６個の拡張論理ブロックから構成される場合（S71:YES）、ＤＫＡ１２０は、キャッシュメモリ１３０からバッファメモリ１２２Ａにデータを転送するためのパラメータを、ＤＭＡ１２２に設定する（Ｓ７３）。ＤＫＡ１２０は、例えば、転送元のキャッシュアドレスと、転送先のバッファメモリのアドレスと、転送バイト数とをＤＭＡ１２２に設定する。ダーティビットマップの状態を、ＤＭＡ１２２に設定する必要はない。
【０１９０】
１スロットが１１６ブロックから構成される場合の転送バイト数は、ケース１では（５２×５２０）バイト、ケース２では（１１６×５２０）バイト、ケース３では（６４×５２０）バイトとなる。１スロットが９６ブロックから構成される場合の転送バイト数は、ケース１では（３２×５２０）バイト、ケース２では（９６×５２０）バイト、ケース３では（６４×５２０）バイトとなる。
【０１９１】
ＤＫＡ１２０は、バッファメモリ１２２Ａから記憶デバイス２１０へデータを転送するためのパラメータをＤＭＡ１２２に設定する（Ｓ７４）。ＤＫＡ１２０は、転送元のバッファメモリ１２２Ａのアドレスと、転送先の記憶デバイス上のアドレスと、転送ブロック数とをＤＭＡ１２２に設定する。
【０１９２】
転送先の記憶デバイス上のアドレスは、図１７で述べた読出し先の先頭ＬＢＡと同一の値に設定される。転送ブロック数も、図１７で述べた転送ブロック数と同一の値に設定される（Ｓ７４）。
【０１９３】
転送ブロック数を図１７で述べたと同様に設定することにより、図１３（５），（６）で示すように、データの末尾にギャップデータ３４０を付加して、記憶デバイス２１０に書き込むことができる。ギャップデータ３４０は、全ビットが０であってもよいし（０パディング）、不定の値であってもよい。
【０１９４】
ギャップデータ３４０は、トラックの先頭ブロックの開始位置と記憶デバイス内の論理ブロックの開始位置とを一致させるだけのために使用されるデータであり、キャッシュメモリ１３０に転送されることはないためである。
【０１９５】
ＤＫＡ１２０は、ＤＭＡ１２２への設定が完了すると、正ディスク（正記憶デバイス２１０）にライト要求を発行する（Ｓ７５）。ＤＫＡ１２０は、ＤＭＡ１２２によって、バッファメモリ１２２Ａから正記憶デバイス２１０にデータが転送されるまで、待機する（Ｓ７６）。
【０１９６】
正記憶デバイス２１０へのデータ転送が完了すると（S76:YES）、ＤＫＡ１２０は、Ｓ７０〜Ｓ７６を繰り返して、副記憶デバイス２１０に同一データを転送する。副記憶デバイス２１０へのデータ転送が完了すると（S77:YES）、デステージ処理は終了する。
【０１９７】
副記憶デバイス２１０にキャッシュメモリ１３０内のデータをデステージする場合、図１５のＳ３３で述べた処理を行う必要はない。正副の各記憶デバイス２１０には、それぞれ同一データを書き込むためである。
【０１９８】
このように構成される本実施例によれば、ブロックサイズが５１２バイトに固定された記憶デバイス２１０に、保証コード３１０の付加された拡張論理ブロック３２０を記憶させることができる。
【０１９９】
さらに、本実施例では、論理ブロック３０１のサイズと拡張論理ブロック３２０のサイズとの最小公倍数が、ホスト２０の管理単位であるトラックサイズと一致しない場合、更新対象のブロックを有するトラックに対応するデータのみで、ライト処理を行うことができ、隣接する複数のトラックに跨ったライト処理を行う必要がない。
【０２００】
従って、本実施例では、隣接トラックに関するコマンド処理が完了するまで待機する必要はない。さらに、本実施例では、キャッシュメモリ１３０の使用量が増大するのを防止し、キャッシュヒット率の低下を抑制することができる。待ち時間の解消及びキャッシュヒット率の低下防止により、記憶制御装置１０の処理性能の低下を防止できる。
【０２０１】
本実施例では、ＤＫＡ１２０内のＤＭＡ１２２及びバッファメモリ１２２Ａを用いて、バウンダリ補正を行うため、キャッシュメモリ１３０上でバウンダリ補正を行う場合よりも効率的に処理することができる。
【実施例２】
【０２０２】
図１９〜図２２に基づいて、本発明の第２実施例を説明する。本実施例を含む以下の各実施例は、第１実施例の変形例に該当する。本実施例では、複数の連続するトラックを処理する場合を説明する。
【０２０３】
図１９は、キャッシュメモリ１３０から記憶デバイス２１０に、連続する複数のトラックのデータを転送する様子を示す。図１９（１）の（ｂ）に示すように、バッファメモリ１２２Ａ上において、トラック＃０の末尾にギャップデータ３４０が挿入される。従って、図１９（２）の（ｃ）に示すように、記憶デバイス２１０の論理ブロック３０１にギャップデータ３４０も書き込まれる。これにより、トラック＃１の先頭ブロックの開始位置は、論理ブロックの開始位置に一致する。
【０２０４】
図２０は、記憶デバイス２１０からキャッシュメモリ１３０に連続する複数のトラックのデータを転送する様子を示す。図２０（１）に示すように、記憶デバイス２１０からは、複数のトラックのデータがバッファメモリ１２２Ａに転送される。このデータには、ギャップデータ３４０が含まれている。
【０２０５】
図２０（２）に示すように、バッファメモリ１２２Ａからキャッシュメモリ１３０には、ギャップデータ３４０の取り除かれたデータが転送される。転送元のアドレス及び転送バイト数を適切な値に設定することにより、ギャップデータ３４０をキャッシュメモリ１３０に転送せず、正味のデータのみをキャッシュメモリ１３０に転送できる。
【０２０６】
図２１は、シーケンシャルリード処理を示すフローチャートである。ＣＨＡ１１０は、ホスト２０によるアクセスのパターンを監視し、ホスト２０のアクセス履歴をアクセス履歴管理テーブルＴ５０に記憶させる（Ｓ９０）。アクセス履歴管理テーブルＴ５０は、例えば、ホストＩＤ、デバイスＩＤ、アクセス時刻、コマンド種別、スロット数（トラック数）等を管理する。
【０２０７】
ＣＨＡ１１０は、アクセスパターンの学習結果に基づいて、先読みするか否かを判定する（Ｓ９１）。先読みとは、ホスト２０から要求されるよりも前に、データを記憶デバイス２１０から読み出してキャッシュメモリ１３０に記憶させる処理である。連続してデータが読み出されるであろうと予測できる場合、ＣＨＡ１１０は先読み処理の実行を決定し（S91:YES）、ＤＫＡ１２０に先読み処理の開始を指示する（Ｓ９２）。
【０２０８】
ＣＨＡ１１０からＤＫＡ１２０への指示には、例えば、読出しを開始する先頭スロット番号とＶＤＥＶ番号とが含まれている。
【０２０９】
ＤＫＡ１２０は、ＣＨＡ１１０からの指示を受領すると（Ｓ１００）、指定されたＶＤＥＶ番号に基づいてＶＤＥＶ管理テーブルＴ３０を参照することにより、テーブルＲＡＩＤレベル及びディスクタイプを検出する（Ｓ１０１）。
【０２１０】
ＤＫＡ１２０は、先読み対象の記憶デバイス２１０がＦＣディスクであるか否かを判定する（Ｓ１０２）。ＦＣディスクの場合（S102:YES）、ＤＫＡ１２０は、ＦＣディスク用の先読み処理を実行する（Ｓ１０３）。上述の通り、ＦＣディスクは、セクタ長を拡張論理ブロック３２０のサイズに一致させることができるため、データのバウンダリを補正する必要がない。
【０２１１】
先読み対象のディスクがＦＣディスクではない場合（S102:NO）、ＤＫＡ１２０は、先読み対象のスロット数に１６を設定し（Ｓ１０４）、読出しの開始を正記憶デバイス及び副記憶デバイスのそれぞれに指示する（Ｓ１０５）。ＤＫＡ１２０は、先読み対象のスロット数を分割し、正副の各記憶デバイスからそれぞれ８個ずつのスロットのデータを読み出して、キャッシュメモリ１３０に転送させる（Ｓ１０６）。
【０２１２】
図２２は、図２１中にＳ１０６で示される、ディスクからキャッシュメモリへの転送処理の詳細を示すフローチャートである。この処理は、正記憶デバイス及び副記憶デバイスのそれぞれについて実行される。即ち、先読み処理は、正記憶デバイス及び副記憶デバイスでそれぞれ同時に実行される。
【０２１３】
ＤＫＡ１２０は、リード対象データを格納するためのＳＬＣＢ及びキャッシュセグメント１３１を用意する（Ｓ１１０）。ＤＫＡ１２０は、記憶デバイス２１０にリード要求を発行する（Ｓ１１１）。このリード要求には、読出し開始先のＬＢＡ及び読出しブロック数が含まれている。
【０２１４】
ＤＫＡ１２０は、記憶デバイス２１０からバッファメモリ１２２Ａにデータを転送するためのパラメータをＤＭＡ１２２に設定する（Ｓ１１２）。ＤＫＡ１２０は、例えば、記憶デバイス２１０からバッファメモリ１２２Ａに転送するバイト数、及び、転送先のバッファアドレスをＤＭＡ１２２に設定する。これにより、記憶デバイス２１０からバッファメモリ１２２Ａに、８スロット分のデータが転送される。
【０２１５】
１スロットが１１６個の拡張論理ブロックで構成される場合、各スロットに対応する論理ブロックの数は１１８個である。従って、読出し開始ＬＢＡで指定された論理ブロックから（１１８×８）個分の論理ブロックが記憶デバイス２１０から読み出されて、バッファメモリ１２２Ａに転送される。
【０２１６】
記憶デバイス２１０からバッファメモリ１２２Ａへのデータ転送が完了すると（S113:YES）、ＤＫＡ１２０は、バッファメモリ１２２Ａからキャッシュメモリ１３０にデータを転送するために用いるパラメータをＤＭＡ１２２に設定する（Ｓ１１４）。ＤＫＡ１２０は、例えば、転送元のバッファアドレスと、転送バイト数と、転送先のセグメントアドレスとをＤＭＡ１２２に設定する。この設定は、８個のスロットのそれぞれについて行われる。即ち、バッファメモリ１２２Ａからキャッシュメモリ１３０へのデータ転送は、各スロット毎に行われる。
【０２１７】
ＤＫＡ１２０は、バッファメモリ１２２Ａからキャッシュメモリ１３０への１個分のスロットのデータ転送が完了するまで待機する（Ｓ１１５）。１個分のスロットについてデータ転送が終了すると（S115:YES）、ＤＫＡ１２０は、８個全部のスロットについてデータ転送が完了したか否かを判定する（Ｓ１１６）。
【０２１８】
８個のスロットについて、バッファメモリ１２２Ａからキャッシュメモリ１３０にデータ転送が完了するまで、Ｓ１１４〜Ｓ１１５が繰り返し実行される。８個のスロットについてデータ転送が完了すると（S116:YES）、本処理を終了する。
【０２１９】
このように構成される本実施例も第１実施例と同様の効果を奏する。これに加えて、本実施例では、連続する複数のトラックのデータも効率的に取り扱うことができる。
【実施例３】
【０２２０】
図２３，図２４に基づいて第３実施例を説明する。本実施例では、ランダムリード処理を行う場合を説明する。図２３は、ランダムリード処理のフローチャートを示す。
【０２２１】
ＣＨＡ１１０は、ホスト２０からリードコマンドを受領すると（Ｓ１２０）、ＤＫＡ１２０にデータの読出しを指示する（Ｓ１２１）。この指示には、例えば、スロット番号と、ＶＤＥＶ番号と、読出し対象の先頭ブロック番号と、ブロック数とが含まれる。
【０２２２】
ＤＫＡ１２０は、ＣＨＡ１１０からの指示を受領すると（Ｓ１３０）、ＶＤＥＶ番号に基づいて、ＲＡＩＤレベル及びディスクタイプをＶＤＥＶ管理テーブルＴ３０から取得する（Ｓ１３１）。
【０２２３】
ＤＫＡ１２０は、ディスクタイプがＦＣディスクであるか否かを判定し（Ｓ１３２）、ＦＣディスクであると判定した場合（S132:YES）、ＦＣディスク用のリード処理を実行する（Ｓ１３３）。
【０２２４】
読出し先の記憶デバイス２１０がＦＣディスク以外のディスクの場合（S132:NO）、ＤＫＡ１２０は、読出し先の記憶デバイス２１０を特定し（Ｓ１３４）、リードデータを格納するためのＳＬＣＢ及びキャッシュセグメント１３１を用意する（Ｓ１３５）。そして、ＤＫＡ１２０は、記憶デバイス２１０からキャッシュメモリ１３０へのデータ転送を実行する（Ｓ１３５）。
【０２２５】
図２４は、図２３中にＳ１３６として示される、記憶デバイス２１０からキャッシュメモリ１３０へのデータ転送を行う処理のフローチャートである。ＤＫＡ１２０は、１スロットを構成するブロック数が９６または１１６のいずれかであるか否かを判定する（Ｓ１４０）。
【０２２６】
１スロットを構成するブロック数が９６でも１１６でもない場合（S140:NO）、ＤＫＡ１２０は、最小公倍数単位でのデータアクセスによって、記憶デバイス２１０からキャッシュメモリ１３０へデータを転送する（Ｓ１４１）。
【０２２７】
１スロットを構成するブロック数が９６または１１６のいずれかの場合（S140:YES）、ＤＫＡ１２０は、ＳＬＣＢ内のダーティビットマップの状態に基づいて、上述したケース１〜ケース３のいずれに該当するかを判定する（Ｓ１４２）。即ち、ＤＫＡ１２０は、読出し対象ブロックのトラック上の位置に応じて、転送バイト数を決定するために、ケースを判別する。
【０２２８】
ＤＫＡ１２０は、判別されたケースに応じて、記憶デバイス２１０にリード要求を発行する（Ｓ１４３）。ＤＫＡ１２０は、記憶デバイス２１０からバッファメモリ１２２Ａにデータを転送するためのパラメータをＤＭＡ１２２に設定する（Ｓ１４４）。例えば、ＤＫＡ１２０は、読出し先のアドレス、転送先のバッファアドレス、転送バイト数をＤＭＡ１２２に設定する。これにより、記憶デバイス２１０からバッファメモリ１２２ＡへのＤＭＡ転送が開始される。
【０２２９】
ＤＫＡ１２０は、記憶デバイス２１０からバッファメモリ１２２Ａへのデータ転送が終了するまで待機する（Ｓ１４５）。転送が終了した場合（S145:YES）、ＤＫＡ１２０は、バッファメモリ１２２Ａからキャッシュメモリ１３０にデータを転送するためのパラメータをＤＭＡ１２２に設定する（Ｓ１４６）。例えば、ＤＫＡ１２０は、転送元のバッファアドレスと、転送先のセグメントアドレスと、転送バイト数をＤＭＡ１２２にそれぞれ設定する。これにより、バッファメモリ１２２Ａからキャッシュメモリ１３０へのデータ転送が開始される。なお、上述の通り、記憶デバイス２１０から読み出されたギャップデータ３４０は、キャッシュメモリ１３０に転送されない。
【０２３０】
バッファメモリ１２２Ａからキャッシュメモリ１３０へのデータ転送が完了すると（S147:YES）、ＤＫＡ１２０は、リード要求の処理が完了した旨をＣＨＡ１１０に報告する（Ｓ１４８）。この報告を受けて、ＣＨＡ１１０は、キャッシュメモリ１３０に転送されたデータを、ホスト２０に送信する。
【０２３１】
なお、ホスト２０に送信されるデータからは、保証コード３１０が取り除かれる。このように構成される本実施例も第１実施例と同様の効果を奏する。
【実施例４】
【０２３２】
図２５に基づいて第４実施例を説明する。本実施例では、ＲＡＩＤ５に適用する場合を説明する。上述の各実施例では、ＲＡＩＤ１の場合を主に説明した。しかし、本発明は、ＲＡＩＤ１に限らず、ＲＡＩＤ５を含む他のＲＡＩＤレベルにも適用できる。
【０２３３】
図２５は、ＲＡＩＤ５の場合において、バッファメモリ１２２Ａからキャッシュメモリ１３０にデータを転送する様子を示す説明図である。ＲＡＩＤ５の場合は、キャッシュメモリ１３０に、リード面とライト面とが用意される。リード面とは、記憶デバイス２１０から読み出されたデータを格納するためのキャッシュ領域である。ライト面とは、ホスト２０から受信したデータを格納するためのキャッシュ領域である。
【０２３４】
ＲＡＩＤ５の場合、ホスト２０から受信する新データと、記憶デバイス２１０から読み出される旧データ及び旧パリティに基づいて、新パリティを算出する。従って、ＲＡＩＤ１の場合とは異なり、バッファメモリ１２２Ａに読み出された旧データの全体が、リード面に転送される。
【０２３５】
ＲＡＩＤ５の場合、パリティを使用するため、パリティの生成及びパリティの転送の点で、ＲＡＩＤ１と異なる。しかし、旧パリティをバッファメモリ１２２Ａを介して記憶デバイス２１０から読み出す処理、新パリティをバッファメモリ１２２Ａを介して記憶デバイス２１０に書き込む処理は、データの場合と同様に行うことができる。
【０２３６】
本明細書及び図面に開示された内容に基づいて、ＲＡＩＤ６のような他のＲＡＩＤレベルにも本発明を適用できることは、いわゆる当業者であれば容易に理解することができるであろう。
【実施例５】
【０２３７】
図２６に基づいて第５実施例を説明する。本実施例では、記憶デバイス２１０側で、バウンダリ補正処理を実行する。図２６は、本実施例による記憶制御装置の要部を示すブロックである。
【０２３８】
本実施例では、ＤＫＡ１２０のＤＭＡ１２２からバッファメモリやバウンダリ補正プログラムが除かれている。また、プロトコルチップ１２１Ａは、ＦＣディスク専用のプロトコルチップとして構成されている。
【０２３９】
プロトコルチップ１２１Ａには、ディスクタイプの異なる複数の記憶デバイス２１０Ａ〜２１０Ｃが接続されている。例えば、記憶デバイス２１０ＡはＳＡＴＡディスクであり、記憶デバイス２１０ＢはＳＡＳディスクであり、記憶デバイス２１０ＣはＦＣディスクである。
【０２４０】
ＦＣディスクである記憶デバイス２１０Ｃは、そのままプロトコルチップ１２１Ａに接続される。これに対し、ＦＣディスク以外の記憶デバイス２１０Ａ，２１０Ｂは、それぞれ変換回路４００を介して、プロトコルチップ１２１Ａに接続される。記憶デバイス２１０Ａ，記憶デバイス２１０Ｂの各変換回路４００は、それぞれ例えば、バッファメモリ４０１及びバウンダリ補正部４０２を備えている。これら変換回路４００は、記憶デバイス２１０内の制御回路に接続される。
【０２４１】
バッファメモリ４０１は、ＤＫＡ１２０から記憶デバイス２１０に転送されるデータや記憶デバイス２１０からＤＫＡ１２０に転送されるデータを一時的に記憶する。バウンダリ補正部４０２は、記憶デバイス２１０からＤＫＡ１２０にデータを転送する際のバウンダリ補正処理とＤＫＡ１２０から記憶デバイス２１０にデータを転送する際のバウンダリ補正処理とを行うものである。それぞれのバウンダリ補正処理については、第１実施例で述べたので説明を省略する。
【０２４２】
ＤＫＡ１２０は、その配下の全記憶デバイス２１０を、ＦＣディスクとして扱うことができる。ＤＫＡ１２０は、ＦＣディスクに対する指示と同様に、５２０バイトの拡張論理ブロック３２０を単位としてリードコマンドやライトコマンドを発行する。ＤＫＡ１２０の内部でバウンダリ補正を行う必要は無い。バウンダリ補正処理は、変換回路４００によって行われる。
【０２４３】
このように構成される本実施例も第１実施例と同様の効果を奏する。さらに、本実施例では、記憶デバイス２１０に設ける変換回路４００によって、バウンダリ補正を行うため、ＤＫＡ１２０の処理を簡素化できる。また、ＳＡＴＡディスクやＳＡＳディスクをＦＣディスクとして扱うことができるため、既存の記憶デバイス２１０を有効に利用することができる。
【０２４４】
なお、本発明は、上述した実施形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。当業者であれば、前記各実施例を適宜組み合わせることもできる。例えば、第５実施例では、３種類の記憶デバイスを示しているが、これに代えて、ＳＡＴＡディスクのみの構成、またはＳＡＳディスクのみの構成としてもよい。
【図面の簡単な説明】
【０２４５】
【図１】本発明の実施形態の全体概念を示す説明図である。
【図２】ストレージシステムの全体構成を示すブロック図である。
【図３】コントローラの構成を示すブロック図である。
【図４】スロットとキャッシュの関係を示す説明図である。
【図５】デバイスＩＤとＶＤＥＶとの対応関係を管理するテーブル及びＶＤＥＶの構成を管理するテーブルをそれぞれ示す説明図である。
【図６】記憶デバイスに配置されるスロットの様子を示す説明図である。
【図７】論理ブロックに保証コードを付加して拡張論理ブロックを生成する様子を示す説明図である。
【図８】論理ブロックのサイズと拡張論理ブロックのサイズとの最小公倍数に基づいて、記憶デバイスに記憶されたデータを更新する様子を示す説明図である。
【図９】記憶デバイス上にギャップを設けない場合に、隣接する複数のトラックに跨って処理が行われる様子を示す説明図である。
【図１０】所定個数の論理ブロック毎に所定サイズのギャップを設けることにより、各トラックの先頭ブロックの開始位置と記憶デバイス内の論理ブロックの開始位置とが一致する様子を示す説明図である。
【図１１】記憶デバイスからバッファメモリを経由してキャッシュメモリにデータを転送する様子を示す説明図である。
【図１２】キャッシュメモリ上でマージされたデータをバッファメモリに転送する様子を示す説明図である。
【図１３】バッファメモリから記憶デバイスにデータを転送する様子を示す説明図である。
【図１４】ライト処理を示すフローチャートである。
【図１５】ＲＡＩＤ１の場合のデステージ処理を示すフローチャートである。
【図１６】図１５中のＳ３３の詳細を示すフローチャートである。
【図１７】トラック内の更新位置に応じてケースを分け、各ケースに応じて転送パラメータを決定する様子を示す説明図である。
【図１８】図１５中のＳ３４の詳細を示すフローチャートである。
【図１９】第２実施例に係る記憶制御装置において、連続するトラックのデータをキャッシュメモリからバッファメモリを介して記憶デバイスに転送する様子を示す説明図である。
【図２０】連続するトラックのデータを記憶デバイスからバッファメモリを介してキャッシュメモリに転送する様子を示す説明図である。
【図２１】シーケンシャルリード処理を示すフローチャートである。
【図２２】図２１中のＳ１０６の詳細を示すフローチャートである。
【図２３】第３実施例に係る記憶制御装置で実行される、ランダムリード処理のフローチャートである。
【図２４】図２３中のＳ１３６の詳細を示すフローチャートである。
【図２５】第４実施例に係る記憶制御装置において、ＲＡＩＤ５に適用した場合を模式的に示す説明図である。
【図２６】第５実施例に係る記憶制御装置の要部を示すブロック図である。
【符号の説明】
【０２４６】
１：記憶制御装置、１Ａ：ホスト通信制御部、１Ｂ：デバイス通信制御部、１Ｃ：キャッシュメモリ、１Ｄ：保証コード制御部、２：記憶デバイス、３：ホスト、４：バウンダリ制御部、４Ａ：バッファメモリ、４Ｂ：バウンダリ補正部、５：トラック、６：論理ブロック、７：保証コード、８：拡張論理ブロック、１０：記憶制御装置、２０：ホスト、３０：管理端末、δ：ギャップ、１００：コントローラ、１１０：チャネルアダプタ、１１１：プロトコルチップ、１１２：ＤＭＡ回路、１１２Ａ：保証コード回路、１１３：マイクロプロセッサ、１２０：ディスクアダプタ、１２１，１２１Ａ：プロトコルチップ、１２２：ＤＭＡ回路、１２２Ａ：バッファメモリ、１２３：マイクロプロセッサ、１２４：パリティ生成回路、１３０：キャッシュメモリ、１３１：キャッシュセグメント、１４０：共有メモリ、１５０：接続部、１６０：サービスプロセッサ、２００：記憶デバイス搭載部、２１０，２１０Ａ，２１０Ｂ，２１０Ｃ：記憶デバイス、２２０：パリティグループ（ＶＤＥＶ）、２３０：論理デバイス、３００：スロット、３０１：論理ブロック、３１０：保証コード、３２０：拡張論理ブロック、３４０：ギャップデータ、４００：変換回路、４０１：バッファメモリ、４０２：バウンダリ補正部。
【図１】
0004977583.tif 000002
【図２】
0004977583.tif 000003
【図３】
0004977583.tif 000004
【図４】
0004977583.tif 000005
【図５】
0004977583.tif 000006
【図６】
0004977583.tif 000007
【図７】
0004977583.tif 000008
【図８】
0004977583.tif 000009
【図９】
0004977583.tif 000010
【図１０】
0004977583.tif 000011
【図１１】
0004977583.tif 000012
【図１２】
0004977583.tif 000013
【図１３】
0004977583.tif 000014
【図１４】
0004977583.tif 000015
【図１５】
0004977583.tif 000016
【図１６】
0004977583.tif 000017
【図１７】
0004977583.tif 000018
【図１８】
0004977583.tif 000019
【図１９】
0004977583.tif 000020
【図２０】
0004977583.tif 000021
【図２１】
0004977583.tif 000022
【図２２】
0004977583.tif 000023
【図２３】
0004977583.tif 000024
【図２４】
0004977583.tif 000025
【図２５】
0004977583.tif 000026
【図２６】
0004977583.tif 000027