(57)【特許請求の範囲】
【請求項１】
複数のストレージディスクデバイスを含み、書き込み対象データを受け入れて、前記書き込み対象データについて所定データ長のパリティ生成単位でパリティを生成し、前記書き込み対象データと生成したパリティとを前記ストレージディスクデバイスに記憶する記憶装置に接続され、キャッシュメモリと、コントローラと、を含む記憶制御システムであって、
前記コントローラは、
前記書き込み対象データと、前記書き込み対象データの書き込み先となる対象セクタを特定する情報とを含む書き込み指示を受け入れる受入手段と、
前記受け入れた書き込み指示により書き込み先となった対象セクタ内のセクタデータと、前記セクタデータ以外である端数データとを内包するパリティ生成単位を少なくとも一つ含むデータのうち、前記セクタデータを除く部分を含む処理対象データが、前記キャッシュメモリに保持されているか否か判断する判断手段と、
前記判断手段による判断の結果、前記処理対象データが前記キャッシュメモリに保持されていると判断したときには、前記キャッシュメモリ内の処理対象データを前記書き込み指示に基づいて更新し、前記更新後の処理対象データを書き込み対象データとして前記記憶装置に出力する書込制御手段と、
を備え、
前記書込制御手段は、前記処理対象データが前記キャッシュメモリに保持されていないときには、少なくとも前記対象セクタの前後に前記端数データがあるか否かを調べ、前方にのみ前記端数データがある場合と、後方にのみ前記端数データがある場合と、前方と後方との双方に前記端数データがある場合とのそれぞれの場合に対応して予め定めた部分のデータを、前記記憶装置から取得して、あるいは、少なくとも前記対象セクタを含む読み出し／書き込みの単位であるセグメントの後に続く複数セグメント分のデータを、前記記憶装置から取得して、前記処理対象データとしてキャッシュメモリに格納する記憶制御システム。
【請求項２】
請求項１記載の記憶制御システムであって、
前記書込制御手段は、前記キャッシュメモリ内の処理対象データを前記書き込み指示に基づいて更新する際には、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていれば前記書き込み指示に基づいて前記データ部分を書き換え、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていなければ、前記キャッシュメモリ内の処理対象データを参照して、前記書き込み指示に基づく前記データ部分の追記位置を特定して、前記特定した追記位置に前記書き込み指示に基づいて前記データ部分を追記して更新する記憶制御システム。
【請求項３】
請求項１または２に記載の記憶制御システムであって、前記記憶装置に格納されたデータをキャッシュする、前記キャッシュメモリとは異なるキャッシュデバイスをさらに有して、
前記書込制御手段は、前記判断手段の判断の結果、前記処理対象データが、前記キャッシュメモリに保持されていないと判断されたときに、前記キャッシュデバイスに前記処理対象データが保持されているか否かを判断し、前記キャッシュデバイスに保持されていたときには、前記処理対象データを、前記キャッシュメモリに読み出して、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていれば前記書き込み指示に基づいて前記データ部分を書き換え、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていなければ前記書き込み指示に基づいて前記データ部分を追記して更新し、前記更新後の処理対象データを書き込み対象データとして前記記憶装置に出力する記憶制御システム。
【請求項４】
請求項３に記載の記憶制御システムであって、
前記書込制御手段は、前記処理対象データが前記キャッシュデバイスに保持されていないときには、前記処理対象データが前記キャッシュメモリ及び前記キャッシュデバイスに保持された状態となるよう、前記記憶装置から処理対象データの少なくとも一部のデータを取得して前記キャッシュメモリ及び前記キャッシュデバイスに格納する記憶制御システム。
【請求項５】
請求項４に記載の記憶制御システムであって、
前記書込制御手段がデータを前記記憶装置から読み出すときには、前記キャッシュデバイスへの予め定められたデータ長の単位で読み出す記憶制御システム。
【請求項６】
請求項３から５のいずれか一項に記載の記憶制御システムであって、
書き込み対象データを前記記憶装置に出力するときには、前記書き込み対象データを前記キャッシュデバイスにも書き込む記憶制御システム。
【請求項７】
複数のストレージディスクデバイスを含み、書き込み対象データを受け入れ、前記書き込み対象データについて所定データ長のパリティ生成単位でパリティを生成し、前記書き込み対象データと生成したパリティとを前記ストレージディスクデバイスに記憶する記憶装置に接続されるとともに、キャッシュメモリにアクセス可能に接続された記憶制御装置であって、
書き込み対象データと、前記書き込み対象データの書き込み先となる対象セクタを特定する情報とを含むデータの書き込み指示を受け入れる受入手段と、
前記受け入れた書き込み指示により書き込み先となった対象セクタ内のセクタデータと、前記セクタデータ以外である端数データとを内包するパリティ生成単位を少なくとも一つ含むデータのうち、前記セクタデータを除く部分を含む処理対象データが、前記キャッシュメモリに保持されているか否か判断する判断手段と、
前記判断手段による判断の結果、前記処理対象データが前記キャッシュメモリに保持されていると判断したときには、前記キャッシュメモリ内の処理対象データを前記書き込み指示に基づいて更新し、前記更新後の処理対象データを書き込み対象データとして前記記憶装置に出力する書込制御手段と、
を有し、
前記書込制御手段は、前記処理対象データが前記キャッシュメモリに保持されていないときには、少なくとも前記対象セクタの前後に前記端数データがあるか否かを調べ、前方にのみ前記端数データがある場合と、後方にのみ前記端数データがある場合と、前方と後方との双方に前記端数データがある場合とのそれぞれの場合に対応して予め定めた部分のデータを、前記記憶装置から取得して、あるいは、少なくとも前記対象セクタを含む読み出し／書き込みの単位であるセグメントの後に続く複数セグメント分のデータを、前記記憶装置から取得して、前記処理対象データとしてキャッシュメモリに格納する記憶制御装置。
【請求項８】
請求項７記載の記憶制御装置であって、前記記憶装置への書き込み対象データを出力するホスト側装置と一体的に構成される記憶制御装置。
【請求項９】
請求項７記載の記憶制御装置であって、前記記憶装置と一体的に構成される記憶制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のストレージディスクデバイスを備えた記憶装置に接続される記憶制御システム及び記憶制御装置に関する。
【背景技術】
【０００２】
記憶装置に格納するデータ長と冗長データ長とをＥＣＣ生成単位長の倍数となるよう設定し、書き込むべきデータが当該データ長となるまで記憶装置への書き込みを延期する技術が特許文献１に開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−２５４６４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来の技術では、実際に記憶装置に格納されているデータと書き込まれるべきデータとが整合しないため、動作の安定性が求められる用途においては、使用を避けられる傾向にある。一方、データの書き込み時に記憶装置への書き込みと、キャッシュメモリ等への書き込みとを同時期に行っておく、いわゆるライトスルーと呼ばれる技術がある。ライトスルーを採用する場合、実際に記憶装置に格納されているデータと書き込まれるべきデータとは整合するが、書き込み時にＥＣＣ生成単位分のデータを、記憶装置から読み出して処理する必要があり、書き込み処理に時間がかかっていた。
【０００５】
本発明は上記実情に鑑みて為されたもので、ライトスルーでの動作においても、書き込み処理の高速化を図ることのできる記憶制御システム及び記憶制御装置を提供することを、その目的の一つとする。
【課題を解決するための手段】
【０００６】
上記従来例の問題点を解決するための本発明は、複数のストレージディスクデバイスを含み、書き込み対象データを受け入れて、前記書き込み対象データについて所定データ長のパリティ生成単位でパリティを生成し、前記書き込み対象データと生成したパリティとを前記ストレージディスクデバイスに記憶する記憶装置に接続され、キャッシュメモリと、コントローラと、を含む記憶制御システムであって、前記コントローラは、前記書き込み対象データと、前記書き込み対象データの書き込み先となる対象セクタを特定する情報とを含む書き込み指示を受け入れる受入手段と、前記受け入れた書き込み指示により書き込み先となった対象セクタ内のセクタデータと、前記セクタデータ以外である端数データとを内包するパリティ生成単位を少なくとも一つ含むデータのうち、前記セクタデータを除く部分を含む処理対象データが、前記キャッシュメモリに保持されているか否か判断する判断手段と、前記判断手段による判断の結果、前記処理対象データが前記キャッシュメモリに保持されていると判断したときには、前記キャッシュメモリ内の処理対象データを前記書き込み指示に基づいて更新し、前記更新後の処理対象データを書き込み対象データとして前記記憶装置に出力する書込制御手段と、を備えることとしたものである。
【０００７】
これによりパリティ生成単位を自然数個（０でない自然数）含むデータが記憶装置に書き込み対象データとして出力され、書込時に記憶装置側でリード・モディファイ・ライトの動作を行う必要がなくなって、ライトスルーでの動作においても、書き込み処理の高速化を図ることができる。
【０００８】
またここで前記書込制御手段は、前記キャッシュメモリ内の処理対象データを前記書き込み指示に基づいて更新する際には、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていれば前記書き込み指示に基づいて前記データ部分を書き換え、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていなければ、前記キャッシュメモリ内の処理対象データを参照して、前記書き込み指示に基づく前記データ部分の追記位置を特定して、前記特定した追記位置に前記書き込み指示に基づいて前記データ部分を追記して更新することとしてもよい。
さらに前記書込制御手段は、前記処理対象データが前記キャッシュメモリに保持されていないときには、前記処理対象データが前記キャッシュメモリに保持された状態となるよう、前記記憶装置から処理対象データの少なくとも一部のデータを取得してキャッシュメモリに格納してもよい。
【０００９】
これにより、パリティ生成単位のデータがより確実にキャッシュされている状態とし、キャッシュヒット率を高めて、もってライトスルーでの動作における書き込み処理の高速化に資することが可能となる。
【００１０】
さらに前記記憶装置に格納されたデータをキャッシュする、前記キャッシュメモリとは異なるキャッシュデバイスをさらに有して、前記書込制御手段は、前記判断手段の判断の結果、前記処理対象データが、前記キャッシュメモリに保持されていないと判断されたときに、前記キャッシュデバイスに前記処理対象データが保持されているか否かを判断し、前記キャッシュデバイスに保持されていたときには、前記処理対象データを、前記キャッシュメモリに読み出して、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていれば前記書き込み指示に基づいて前記データ部分を書き換え、前記キャッシュメモリ内の処理対象データに前記セクタデータに対応するデータ部分が含まれていなければ前記書き込み指示に基づいて前記データ部分を追記して更新し、前記更新後の処理対象データを書き込み対象データとして前記記憶装置に出力することとしてもよい。
【００１１】
このキャッシュデバイスにより、さらにキャッシュヒット率を高めて、もってライトスルーでの動作における書き込み処理の高速化に資することが可能となる。
【００１２】
このとき前記書込制御手段は、前記処理対象データが前記キャッシュデバイスに保持されていないときには、前記処理対象データが前記キャッシュメモリ及び前記キャッシュデバイスに保持された状態となるよう、前記記憶装置から処理対象データの少なくとも一部のデータを取得して前記キャッシュメモリ及び前記キャッシュデバイスに格納することとしてもよい。
【００１３】
また前記書込制御手段がデータを前記記憶装置から読み出すときには、前記キャッシュデバイスへの予め定められたデータ長の単位で読み出すこととしてもよい。さらに書き込み対象データを前記記憶装置に出力するときには、前記書き込み対象データを前記キャッシュデバイスにも書き込んでもよい。
【００１４】
また本発明の一態様は、複数のストレージディスクデバイスを含み、書き込み対象データを受け入れ、前記書き込み対象データについて所定データ長のパリティ生成単位でパリティを生成し、前記書き込み対象データと生成したパリティとを前記ストレージディスクデバイスに記憶する記憶装置に接続されるとともに、キャッシュメモリにアクセス可能に接続された記憶制御装置であって、書き込み対象データと、前記書き込み対象データの書き込み先となる対象セクタを特定する情報とを含むデータの書き込み指示を受け入れる受入手段と、前記受け入れた書き込み指示により書き込み先となった対象セクタ内のセクタデータと、前記セクタデータ以外である端数データとを内包するパリティ生成単位を少なくとも一つ含むデータのうち、前記セクタデータを除く部分を含む処理対象データが、前記キャッシュメモリに保持されているか否か判断する判断手段と、前記判断手段による判断の結果、前記処理対象データが前記キャッシュメモリに保持されていると判断したときには、前記キャッシュメモリ内の処理対象データを前記書き込み指示に基づいて更新し、前記更新後の処理対象データを書き込み対象データとして前記記憶装置に出力する書込制御手段と、を有することとしたものである。
さらに、本発明の一態様では、この記憶制御装置は、前記記憶装置への書き込み対象データを出力するホスト側装置と一体的に、または前記記憶装置と一体的に構成されてもよい。
【発明の効果】
【００１５】
本発明によると、ライトスルーでの動作においても、書き込み処理の高速化を図ることができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態に係る記憶制御システムの構成例を表すブロック図である。
【図２】本発明の実施の形態に係る記憶制御システムの記憶装置でのデータ格納状態の一例を表す説明図である。
【図３】本発明の実施の形態に係る記憶制御システムにおける論理セクタとセグメントとの例を表す説明図である。
【図４】本発明の実施の形態に係る記憶制御システムの記憶制御装置の動作に係る説明図である。
【図５】本発明の実施の形態に係る記憶制御システムの記憶制御装置のコントローラの例を表す機能ブロック図である。
【図６】本発明の実施の形態に係る記憶制御システムのデータ読み出し時の動作例を表すフロー図である。
【図７】本発明の実施の形態に係る記憶制御システムのデータ書き込み時の動作例を表すフロー図である。
【図８】本発明の実施の形態に係る記憶制御システムの記憶制御装置の構成例を表すもう一つのブロック図である。
【発明を実施するための形態】
【００１７】
本発明の実施の形態について図面を参照しながら説明する。本発明の実施の形態に係る記憶制御システム１は、図１に例示するように、例えばパーソナルコンピュータ（ＰＣ）等のホスト側装置１０と、記憶制御装置３０とを含んで構成され、この記憶制御装置３０が記憶装置２０に接続されている。
【００１８】
記憶装置２０は、インタフェース部２１と、デバイスコントローラ２２と、複数のストレージディスクデバイス２３-1，２３-2…とを含んで構成されている。ここでストレージディスクデバイス２３は、ハードディスクドライブ（ＨＤＤ）やＢｌｕＲａｙ（登録商標）ディスクドライブなどの光学ディスクデバイス等、ランダムアクセスとシーケンシャルアクセスとで速度差のある記録媒体である。また記憶制御装置３０は、コントローラ３１、記憶部３２、キャッシュメモリ部３３、第１インタフェース部３４、及び第２インタフェース部３５を含んで構成されている。
【００１９】
記憶装置２０のインタフェース部２１は、記憶制御装置３０に接続され、記憶制御装置３０から書き込み対象データやコマンドを受け入れてデバイスコントローラ２２に出力する。またこのインタフェース部２１は、デバイスコントローラ２２から出力の対象となるデータを受け入れて、記憶制御装置３０に対して当該データを出力する。
【００２０】
デバイスコントローラ２２は、インタフェース部２１を介してストレージディスクデバイス２３に書き込むべきデータ（書き込み対象データ）と書き込みのコマンドとを受け入れたときに、当該書き込み対象データを所定データ長（パリティ生成データ長と呼ぶ）のパリティ生成単位に区分して、パリティ生成単位ごとのパリティデータを生成し、当該書き込み対象データと生成したパリティデータとをストレージディスクデバイス２３に記録する動作を行う。
【００２１】
またこのデバイスコントローラ２２は、インタフェース部２１を介して読み出しのコマンドを受け入れたときには、ストレージディスクデバイス２３側から読み出しの対象となるデータを読み出して、インタフェース部２１に出力する。
【００２２】
本実施の形態のある例では、このデバイスコントローラ２２がＲＡＩＤ（Redundant Arrays of Inexpensive Disks）コントローラとして機能する。この例では複数（ｎ台とする）のストレージディスクデバイス２３がＲＡＩＤアレイとして動作する。本実施の形態の以下の説明ではデバイスコントローラ２２がＲＡＩＤコントローラとして機能するものとして説明するが、本実施の形態は、ストレージディスクデバイス２３をＲＡＩＤアレイとする場合に限られない。すなわち、パリティ等冗長化のための情報を用いて書き込まれるべきデータを冗長化し、複数のストレージディスクデバイス２３を用いて当該データを記録するよう制御するのであれば、デバイスコントローラ２２はどのような制御を行ってもよい。
【００２３】
本実施の形態の一例では、ストレージディスクデバイス２３は少なくとも３台以上（ｎ≧３）備えられているものとし、デバイスコントローラ２２は、ストレージディスクデバイス２３-1，…２３-nを、所定データ長ＬＣずつの記憶領域（チャンク）に区分して管理している。またこの例のデバイスコントローラ２２は、書き込みの指示とともに書き込み対象データを受け入れて、上記チャンクのデータ長ＬＣに、ストレージディスクデバイス２３の数ｎからパリティの数ｐを減じた（ｎ−ｐ）を乗じた（ｎ−ｐ）×ＬＣのデータ長（セグメント長）ごとに書き込み対象データを分割し、データセグメントＡ，Ｂ…を得る。以下では説明を簡単にするためｐ＝１とする。この場合デバイスコントローラ２２は（ｎ−１）×ＬＣのデータ長ごとに書込対象データを分割してデータセグメントＡ，Ｂ…を得ることとなる。
すなわち、この例においてデバイスコントローラ２２は、各データセグメントをパリティ生成単位として、このデータ長（ｎ−１）×ＬＣのデータセグメントＡ，Ｂ…ごとに、対応するパリティデータＡparity，Ｂparity…を生成する。また、得られたデータセグメントごとにパリティデータを格納するストレージディスクデバイス２３を選択する。
【００２４】
例えばデバイスコントローラ２２は、各データセグメントを長さＬＣのチャンクＡ1，Ａ2，…Ａn-1，Ｂ1，Ｂ2，…，Ｂn-1…に区分し、データセグメントＡに対応するパリティデータＡparityを、ストレージディスクデバイス２３-nに格納することとして、データセグメントＡを区分して得られたチャンクＡ1，Ａ2，…Ａn-1については、パリティデータの格納先として選択したストレージディスクデバイス２３-n以外のｎ−１台のストレージディスクデバイス２３-1，…２３-(n-1)のそれぞれの記憶領域（その位置は書き込み指示に含まれる論理セクタを特定する情報によって特定される）に格納していく（図２）。
【００２５】
デバイスコントローラ２２は、以下、データセグメントＢに対応するパリティデータＢparityについてはストレージディスクデバイス２３-(n-1)に格納することとして、データセグメントＢを区分して得られたデータＢ1，Ｂ2，…Ｂn-1については、ストレージディスクデバイス２３-1，…２３-(n-2)，２３-nのそれぞれに格納していくようにする。このような格納方式は、いわゆるＲＡＩＤ５として知られているので、以下の詳しい説明を省略する。
【００２６】
このデータセグメントＡ，Ｂ…が格納される領域（ｎ−１台のストレージディスクデバイス２３に分割して配されている領域、以下セグメントと呼ぶ）Ｓには、図３に示すように、自然数個の論理セクタ（Ｌ）が含まれる。デバイスコントローラ２２は、セグメントごとに、当該セグメントに含まれる論理セクタを特定する情報を関連付けて、マップ情報として記憶しておく。
【００２７】
また本実施の形態のこの例においてデバイスコントローラ２２は、読み出しの指示として、読み出しの対象となる論理セクタを特定する情報を受け入れる。そしてデバイスコントローラ２２は、マップ情報を参照して、当該受け入れた情報で特定される論理セクタを含むセグメントを特定する。
【００２８】
デバイスコントローラ２２は、特定したセグメント内のデータ及び対応するパリティデータを、ストレージディスクデバイス２３-1，…２３-nから読み出す。ここでデバイスコントローラ２２は、パリティデータを用いて、セグメント内のデータに誤りがないかを検出、ないし訂正する処理を行うが、この処理はＲＡＩＤの処理として広く知られた処理をそのまま採用できるので、ここでの詳しい説明を省略する。
【００２９】
そしてデバイスコントローラ２２は、ストレージデバイス２３から読み出したデータのうち、読み出しコマンドに含まれる情報で特定される論理セクタ内のデータ部分（セグメント全体に対応する場合はセグメント全体のデータ）を、インタフェース部２１を介して記憶制御装置３０に対して出力する。
【００３０】
記憶制御装置３０のコントローラ３１は、ＣＰＵ等のプログラム制御デバイスであり、記憶部３２に格納されたプログラムに従って動作する。
【００３１】
具体的にこのコントローラ３１は、データの書き込み指示（ライトコマンド）を、ホスト側装置１０から受け入れる。この書き込み指示は、具体的には書き込みの対象となるデータと、当該データを格納するべき論理セクタを特定する情報とを含む。つまり、この書き込み指示により書き込みの対象となるデータの長さ（データ長）は、セクタ単位（１セクタ内に格納可能なデータ長）の自然数（ただし「０」は含まない、以下同じ）倍となっている。
【００３２】
コントローラ３１は、ここで受け入れた書き込み指示によりデータが書き込まれる論理セクタを対象セクタとして、この対象セクタに記録されたデータ（セクタデータと呼ぶ）と、端数データとを内包するパリティ生成単位を少なくとも一つ含む、パリティ生成データ長の自然数倍以上のデータ長のデータのうち、セクタデータを除く部分を少なくとも含むデータ（処理対象データと呼ぶ）が、キャッシュメモリ部３３に保持されているか否か判断する。これは、パリティ生成単位には書き込み指示に含まれるデータ（現在のセクタデータに置き換えられるべきデータ）と、それ以外の部分のデータ（いわゆる端数部分のデータ、以下端数データと呼ぶ）とが一般に含まれるが、現在のセクタデータは書き込み指示によって書き換えられてしまうため、書き込むべきデータのうちセクタデータ以外の部分のデータ（端数データを含む）がキャッシュされていれば十分だからである。もちろん処理対象データにはセクタデータが含まれてもよい。またパリティ生成単位全体が書き込み指示に含まれるデータのみである場合（端数データを含まない場合）があってもよく、この場合は、コントローラ３１は、キャッシュメモリ部３３に保持されているか否かを判断せずに、書き込み指示に含まれるデータを処理対象データとして記憶装置２０に出力する。
【００３３】
コントローラ３１は、当該処理対象データがキャッシュメモリ部３３に保持されていると判断したときには、受け入れたライトコマンドに基づいてキャッシュメモリ部３３内の処理対象データについて、上記のセクタデータに対応するデータ部分を書き換え、または追記して、処理対象データを更新する。そしてコントローラ３１は、当該更新した処理対象データを記憶装置２０に出力する。本実施の形態のコントローラ３１の動作については、後に詳しく述べる。
【００３４】
記憶部３２は、コントローラ３１によって実行されるプログラムを保持するメモリデバイス等である。この記憶部３２に格納されるプログラムは、コンピュータ可読、かつ非一時的（Non-Transitory）な記録媒体に格納されて提供されたものであってもよいし、ネットワーク等の通信回線を介して取得されたものであってもよい。本実施の形態において記憶部３２は、コントローラ３１のワークメモリとしても動作する。
【００３５】
キャッシュメモリ部３３は、記憶制御装置３０においてキャッシュとして機能するメモリデバイスである。本実施の形態の一態様では、このキャッシュメモリ部３３は、記憶部３２の一部として実現されていてもよい。第１インタフェース部３４は、ホスト側装置１０に接続され、コントローラ３１とホスト側装置１０との間でデータやコマンドを授受する。第２インタフェース部３５は、記憶装置２０に接続され、コントローラ３１と記憶装置２０との間でデータやコマンドを授受する。
【００３６】
［コントローラの動作］
次に、コントローラ３１の動作について説明する。本実施の形態の例では、記憶制御装置３０が、記憶装置２０のセグメントごとに、当該セグメントに含まれる論理セクタを特定する情報を関連付けて、マップ情報として記憶しておくものとする。このマップ情報は、デバイスコントローラ２２が記憶しているものと同じものである。また、このコントローラ３１の動作のうち、ホスト側装置１０から読み出しの指示（リードコマンド）を受けたときの動作は、従来例と同様のものであるので、ここでの詳しい説明を省略する。
【００３７】
コントローラ３１は、ホスト側装置１０からデータの書き込みの指示（ライトコマンド）を受けたときに、次の端数処理を実行する。具体的に本実施の形態のコントローラ３１は、図４に例示するように、機能的に受入部３１１と、判断部３１２と、書込処理部３１３とを含んで構成される。受入部３１１は、データの書き込み指示（ライトコマンド）を、ホスト側装置１０から受け入れる。既に述べたように、この受入部３１１がホスト側装置１０から受け入れる書き込み指示には、書き込みの対象となるデータと、当該データを格納するべき論理セクタを特定する情報とが含まれる。
【００３８】
判断部３１２は、受入部３１１が受け入れたライトコマンドに含まれる情報で特定される論理セクタを対象セクタとして、この対象セクタに記録されているセクタデータと端数データとを内包したパリティ生成単位を少なくとも一つ含むデータのうち、セクタデータを除く部分を少なくとも含むデータ（処理対象データ）が、キャッシュメモリ部３３に保持されているか否か判断する。本実施の形態のここでの例では、パリティ生成単位がセグメントの単位となっているので、判断部３１２は、対象セクタを内包するセグメント（対象セクタが複数のセグメントにまたがっている場合は、当該複数のセグメントの全体）を含むデータのうち、対象セクタを除くデータがキャッシュメモリ部３３に格納されているか否かを判断することとなる。
【００３９】
判断部３１２が、処理対象データがキャッシュメモリ部３３に保持されていると判断したときに、書込処理部３１３は、受け入れたライトコマンドに基づいてキャッシュメモリ部３３内の処理対象データを読み出して、当該読み出した処理対象データのうちに上記のセクタデータに対応するデータ部分が含まれる場合は、当該データ部分をライトコマンドに含まれるデータで書き換えて更新する。また書込処理部３１３は、当該読み出した処理対象データのうちに上記のセクタデータに対応するデータ部分が含まれない場合は、読み出した処理対象データ（のうちセクタデータに対応する部分）に、ライトコマンドに含まれるデータを追記して、処理対象データを更新する。ここでセクタデータに対応する部分は、キャッシュメモリ部３３内の処理対象データの読み出し元の位置を指定する情報（セクタの位置を特定する情報）に基づいて判断できる。そしてこの書込処理部３１３は、更新後の処理対象データを、書き込み対象データとして記憶装置２０に出力する。またこのとき、書込処理部３１３は、書き込み先の位置を指定する情報として、更新後の処理対象データの格納先となる各論理セクタを特定する情報を併せて出力する。さらにこのとき書込処理部３１３は、キャッシュメモリ部３３に格納されていた処理対象データを、更新後の処理対象データで置き換える（ライトスルー方式によるキャッシュ）。ここで書き込み対象として出力される、更新後の処理対象データは、端数が発生している場合は、ライトコマンドに含まれるデータに加えて当該端数を含むデータであり、端数が発生しない場合はライトコマンドに含まれるデータそのものとなる。
【００４０】
一方、判断部３１２が、処理対象データがキャッシュメモリ部３３に保持されていないと判断したとき（処理対象データの一部は保持されているが、その全体がキャッシュメモリ部３３に保持されていないと判断したときを含む）には、この書込処理部３１３は、上記処理対象データがキャッシュメモリ部３３に保持された状態となるよう、記憶装置２０から処理対象データの少なくとも一部のデータを取得する。
【００４１】
具体的に、判断部３１２が、処理対象データがキャッシュメモリ部３３に保持されていないと判断したとき、書込処理部３１３は、次のいずれかの方法でデータの読み出しの動作を行う。すなわち、本実施の形態のある例では、図５に示すように、記憶装置２０におけるセグメントに複数の論理セクタ（Ｌ）が含まれる。従って一般的に記憶装置２０におけるデータの読み出し／書き込みの単位であるセグメント（Ｓ）には、ライトコマンドにより書き換えの対象となったセクタデータを保持する論理セクタ（Ｌ）の前後に、書き換えの対象でないデータ（つまり端数データ）も含まれる。そこで書込処理部３１３は、（１）必要最低限のデータを読み出す方法または（２）必要最低限を超えるデータを読み出す方法のいずれかにより処理対象データ（の少なくとも不足する部分）の読み出し処理を行う。以下、それぞれについて説明する。
【００４２】
（１）必要最低限のデータを読み出す方法
この方法を採用する場合、書込処理部３１３としての動作を行うコントローラ３１は、マップ情報を参照して、ライトコマンドによる書き換えの対象となった論理セクタ（対象セクタ）を含むセグメントを特定し、当該特定されたセグメントのうちで、対象セクタの前方と後方とに端数が発生しているか否かを調べる。
【００４３】
そして、
（1-1）前方にのみ端数が発生する場合（図５（ａ））：書込処理部３１３としての動作を行うコントローラ３１は、対象セクタより前方の端数部分（対象セクタは含まなくてもよい）に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置２０に対して出力する。なお、対象セクタに対応する部分が、複数のセグメントにまたがっている場合も同様に、対象セクタより前方の端数部分（対象セクタは含まなくてもよい）に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置２０に対して出力する。
【００４４】
また、
（1-2）後方にのみ端数が発生する場合（図５（ｂ））：書込処理部３１３としての動作を行うコントローラ３１は、対象セクタより後方の端数部分（対象セクタは含まなくてもよい）に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置２０に対して出力する。なお、対象セクタに対応する部分が、複数のセグメントにまたがっている場合も同様に、対象セクタより後方の端数部分（対象セクタは含まなくてもよい）に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置２０に対して出力する。
【００４５】
（1-3）前方と後方との双方に端数が発生する場合（図５（ｃ））：書込処理部３１３としての動作を行うコントローラ３１は、対象セクタより前方の端数部分及び後方の端数部分（対象セクタは含まなくてもよい）に相当する論理セクタを特定する情報とを含む読み出し指示を記憶装置２０に対して出力する。なお、対象セクタに対応する部分が、複数のセグメントにまたがっている場合（図５（ｄ））も同様に、対象セクタより前方の端数部分及び後方の端数部分（対象セクタは含まなくてもよい）に相当する論理セクタを特定する情報を含む読み出し指示を記憶装置２０に対して出力する。なお、この場合の読み出し指示では、前方の端数部分と後方の端数部分とを二度に分けて読み出すよりも、前方の端数部分から後方の端数部分まで対象セクタを含んで読み出すほうが効率的である場合もある。従って、この例の読み出し指示では対象セクタを含むように制御してもよい。
【００４６】
なおこのように対象セクタのデータの前方と後方との双方に端数が発生する場合は、書込処理部３１３としての動作を行うコントローラ３１は、上記規則に従って読み出すこととなるデータのサイズを調べ、当該サイズが、予め定めたサイズ（例えばセグメントサイズの数倍程度）を超えると判断される場合は、データの読み出しを行わずに（本実施の形態の端数処理をせずに）、ライトコマンドにより書き込みの対象となったデータを、記憶装置２０に対して出力するようにしてもよい。
【００４７】
（２）必要最低限を超えるデータを読み出す方法
この方法を採用する場合、書込処理部３１３は、マップ情報を参照して、ライトコマンドにより書き換えの対象となった対象セクタを含むセグメントを特定する。そして、書込処理部３１３としての動作を行うコントローラ３１は、特定したセグメントと、当該特定したセグメントの後に続く所定数個のセグメントに含まれるすべての論理セクタ（対象セクタは除いてもよい）を特定する情報を含む読み出し指示を、記憶装置２０に対して出力するようにしてもよい。なお、特定したセグメント内で対象セクタの前後に端数部分がある場合は、前方の端数部分と後方の端数部分とを二度に分けて読み出すよりも、前方の端数部分から後方の端数部分まで対象セクタを含んで読み出すほうが効率的である場合もある。従って、このときには読み出し指示に対象セクタを含むように制御してもよい。
また、当該特定したセグメントの後に続く所定数個のセグメントに含まれる論理セクタ内のデータがキャッシュメモリ部３３に格納されている場合は、書込処理部３１３は、当該データを読み出す指示を記憶装置２０に出力する代わりに、当該データをキャッシュメモリ部３３から読み出してもよい。
【００４８】
なお、対象セクタが複数のセグメントにまたがっている場合も同様に、当該対象セクタを含んだ複数のセグメント内のすべての論理セクタ（対象セクタを除いてもよい）を特定する情報と、当該セグメントに続く所定数個のセグメントに含まれるすべての論理セクタ（対象セクタを除いてもよい）を特定する情報とを含んだ読み出し指示を、記憶装置２０に対して出力する。なお、対象セクタの前後に端数部分がある場合は、前方の端数部分と後方の端数部分とを二度に分けて読み出すよりも、前方の端数部分から後方の端数部分まで対象セクタを含んで読み出すほうが効率的である場合もある。従って、このときには読み出し指示に対象セクタを含むように制御してもよい。
また、当該特定したセグメントの後に続く所定数個のセグメントに含まれる論理セクタ内のデータがキャッシュメモリ部３３に格納されている場合は、書込処理部３１３は、当該データを読み出す指示を記憶装置２０に出力する代わりに、当該データをキャッシュメモリ部３３から読み出してもよい。
【００４９】
ここで上記所定数個をいくつとするかは、実際に数を変更しながら処理速度を測定して実験的に定める。この数の最適値はストレージディスクデバイスのシーク速度や、ヒット率に影響されると考えられるためである。
【００５０】
書込処理部３１３はこうした読み出し指示に応じて記憶装置２０が出力するデータを受け入れる。本実施の形態の例では、既に述べたように処理されるので、記憶装置２０からは、少なくとも書き換えの対象となった対象セクタの前後の端数のデータ（あるいは対象セクタに続く複数のセグメント分のデータ）が得られる。また、書き換えの対象となった対象セクタの読み出し指示を含んでいた場合は、記憶装置２０からはセクタデータも得られることとなる。
【００５１】
書込処理部３１３は、ここで記憶装置２０から得たデータと、当該データに対応する論理セクタを特定する情報とを関連付けて、処理対象データとしてキャッシュメモリ３３に格納する（キャッシュ動作）。ここでデータに対応する論理セクタを特定する情報は例えば、読み出し指示に含めて記憶装置２０に送出した論理セクタを特定する情報（要求セクタ情報）のうち、先頭にある論理セクタを特定する情報としておけばよい。
【００５２】
そして書込処理部３１３は、当該キャッシュメモリ部３３内に格納した処理対象データに対象セクタに対応するデータ部分があれば、当該データ部分を、ライトコマンドに含まれるデータで書き換えて処理対象データを更新する。また、書込処理部３１３は、当該キャッシュメモリ部３３内に格納した処理対象データに対象セクタに対応するデータ部分がなければ、対象セクタに対応するデータ部分を処理対象データに追記して処理対象データを更新する。
その後、書込処理部３１３は、更新した処理対象データを、書き込み対象データとして記憶装置２０に出力する。なお、このとき書込処理部３１３は、更新した処理対象データの全体を書き込み対象データとして記憶装置２０に出力してもよいし、更新した処理対象データのうち、ライトコマンドに含まれるデータで書き換え、またはライトコマンドに含まれるデータを追記した部分を内包したパリティ生成単位のデータを含む一部を取りだして、当該取りだした部分を書き込み対象データとして記憶装置２０に出力してもよい。またこのときも書込処理部３１３は、書き込み先の位置を指定する情報として、上記書き込み対象データに含まれるデータが格納されるべき各論理セクタを特定する情報を併せて出力する。さらにこのとき書込処理部３１３は、キャッシュメモリ部３３に格納した処理対象データを、更新後の処理対象データで置き換える。
【００５３】
なお、上述の例では、処理対象データの一部がキャッシュメモリ部３３に保持されている場合（全体は保持されていないが一部は保持されている場合）でも、処理対象データ全体を記憶装置２０から取得するように動作することとしたが、書込処理部３１３は、当該保持されていない部分に係る論理セクタを特定する情報を含む読み出し指示を記憶装置２０に対して出力することとしてもよい。
【００５４】
この場合も書込処理部３１３は、キャッシュメモリ部３３に格納されている、処理対象データの一部を読み出して、当該読み出したデータに、記憶装置２０から読み出されたデータを連結して、新たにキャッシュメモリ部３３に格納する。これにより、処理対象データがキャッシュメモリ部３３に保持された状態とする。書込処理部３１３は、当該キャッシュメモリ部３３内に格納した処理対象データのうちに対象セクタに対応するデータ部分があれば、ライトコマンドに含まれるデータで書き換えて処理対象データを更新する。また、書込処理部３１３は、当該キャッシュメモリ部３３内に格納した処理対象データに対象セクタに対応するデータ部分がなければ、対象セクタに対応するデータ部分を処理対象データに追記して処理対象データを更新する。書込処理部３１３は、更新後の処理対象データを書き込み対象データとして記憶装置２０に出力する。このときも書込処理部３１３は、書き込み先の位置を指定する情報として、更新後の処理対象データが格納されるべき各論理セクタを特定する情報を併せて出力する。さらにこのとき書込処理部３１３は、キャッシュメモリ部３３に格納されていた処理対象データを、更新後の処理対象データで置き換える。
【００５５】
［動作］
本実施の形態の記憶制御システム１は、以上の構成を備えてなり、次のように動作する。図６に例示するように、記憶制御装置３０は、ホスト側装置１０からデータの書き込み指示（ライトコマンド）を受け入れると（Ｓ１１）、当該受け入れたライトコマンドに含まれる情報で特定される論理セクタを対象セクタとして、この対象セクタに記録されているセクタデータと端数データとを内包したパリティ生成単位を少なくとも一つ含むデータのうち、セクタデータを除く部分を少なくとも含むデータ（処理対象データ）が、キャッシュされているか否か判断する（Ｓ１２）。
【００５６】
ここで処理対象データがキャッシュされていると判断する（Yesである）と、当該キャッシュされている処理対象データを読み出す（Ｓ１３）。そして記憶制御装置３０は、当該読み出した処理対象データのうちに対象セクタのセクタデータが含まれていれば、当該セクタデータに対応するデータ部分をライトコマンドに含まれるデータで書き換えて処理対象データを更新する（Ｓ１４）。なお、ここで読み出した処理対象データのうちに対象セクタのセクタデータが含まれていなければ、記憶制御装置３０はセクタデータに対応するデータ部分として、ライトコマンドに含まれるデータを追記して処理対象データを更新する（Ｓ１４）。
【００５７】
そして記憶制御装置３０は、この更新した処理対象データをキャッシュに上書きする（Ｓ１５）。そして記憶制御装置３０は、更新後の処理対象データを書き込み対象データとして記憶装置２０に出力する（Ｓ１６）。このとき記憶制御装置３０は、書き込み先を特定する情報として処理対象データに含まれる、対応する論理セクタの各々を特定する情報を併せて出力する。
【００５８】
記憶装置２０は、この書き込み対象データを受け入れる。ここで受け入れられる書き込み対象データは、ホスト側装置１０が書き込み指示を行ったセクタデータを含み、またパリティ生成単位を少なくとも一つ含むので、記憶装置２０では、書き込み対象データをパリティ生成単位に区分し（書き込み対象データにパリティ生成単位が一つしか含まれない場合はそのままでよい）、パリティデータを生成する（Ｓ１７）。このように本実施の形態では記憶装置２０へ出力される書き込み対象のデータがパリティ生成単位となっているので、記憶装置２０は、パリティデータの生成のため、セクタデータ以外の部分をハードディスクドライブ等のストレージディスクデバイスから読み出す必要がない。
【００５９】
記憶装置２０は、ストレージディスクデバイスの記憶領域（その位置は書き込み対象データとともに受信される情報で特定される論理セクタに対応する領域となる）に、チャンク単位に分割した書き込み対象データと、生成したパリティデータとを格納していく（Ｓ１８）。この格納の方法は、ＲＡＩＤの処理として広く知られた方法等を採用できるので、詳しい説明を省略する。
【００６０】
また、処理Ｓ１２において、処理対象データがキャッシュされていない（Noである）と判断したときには、記憶制御装置３０は、記憶装置２０において上記処理対象データの格納された範囲のすべての論理セクタ（対象セクタは含まなくてもよい）を特定する情報を含む読み出し指示を、記憶装置２０に出力する（Ｓ１９：読み出し処理）。
【００６１】
本実施の形態の一例として、この処理Ｓ１９の読み出し処理では、記憶制御装置３０は、図７に例示するように、受け入れたライトコマンドに含まれる、対象セクタを特定する情報を取り出す。そして当該取り出した情報で特定される対象セクタを含む、記憶装置２０のセグメントを特定する（例えば対象セクタと同じセグメントに属する論理セクタの先頭の論理セクタを特定する情報をマップ情報から見出す）。そして、当該特定したセグメントに属するすべての論理セクタ（対象セクタは除いてもよい）を特定する情報を含む読み出し指示を記憶装置２０に対して出力する（Ｓ３１）。
【００６２】
記憶装置２０は、記憶制御装置３０から読み出し指示を受け入れて、当該読み出し指示に含まれる情報で特定される論理セクタ（セグメント全体のうち、対象セクタを除いたすべての論理セクタを少なくとも含む部分に相当する）のデータをストレージディスクデバイス３３から読み出し（Ｓ３２）、記憶制御装置３０に対して出力する（Ｓ３３）。
【００６３】
記憶制御装置３０は読み出し指示に応じて記憶装置２０が出力するデータを受け入れてキャッシュする（Ｓ３４）。ここでは記憶装置２０から、ライトコマンドによる書き換えの対象となった対象セクタ内のセクタデータを含むセグメントのうち、論理セクタ内のデータ（対象セクタを除いてもよい）を得て、当該データをキャッシュすることになる。
【００６４】
つまり本実施の形態では、読み出しの処理の過程で、書き込みの指示がなされた対象セクタ内のセクタデータを含むパリティ生成単位（ここでの例ではセグメント単位に相当する）を少なくとも一つ含むデータのうち、対象セクタのセクタデータを除くデータが少なくともキャッシュされることとなる。
【００６５】
そして記憶制御装置３０は、図６に例示する処理に戻り、処理Ｓ１３に移行して処理を続ける。
【００６６】
このように本実施の形態の一例では、処理対象データがキャッシュされていない場合は、処理対象データがキャッシュされた状態となるよう、記憶装置２０から処理対象データの少なくとも一部（全体であっても不足している部分のみであってもよい、また書き込みの指示により書き換えられるデータ部分は除いてもよい）のデータを取得する。これにより記憶制御装置３０はパリティ生成単位を少なくとも一つ含み、当該少なくとも一つのパリティ生成単位のうちにライトコマンドに含まれるデータを含んだデータを記憶装置２０に対して出力することが可能となる。このように書き込み対象データがパリティ生成単位となっているので、記憶装置２０では、パリティデータの生成のためにセクタデータ以外の部分をハードディスクドライブ等のストレージディスクデバイスから読み出す必要がなくなる。
【００６７】
［キャッシュデバイスを含む例］
さらに本実施の形態の記憶制御システムでは、記憶制御装置３０が、記憶装置２０に格納されているデータをキャッシュする、キャッシュメモリ部３３とは異なるキャッシュデバイスをさらに備えてもよい。
【００６８】
この例の記憶制御装置３０は、図８に例示するように、コントローラ３１、記憶部３２、キャッシュメモリ部３３、第１インタフェース部３４、及び第２インタフェース部３５に加え、さらにキャッシュデバイス３６を含んで構成されている。
【００６９】
このキャッシュデバイス３６は、例えばＳＳＤ等、一般的に記憶装置２０よりもデータの読み出し／書き込み速度が高速であるような記憶デバイスによって実現される。このキャッシュデバイス３６に対しては、予め定められているデータ長の単位にてデータの読み書きが行われる。このキャッシュデバイス３６について予め定められているデータ長の単位を、以下ではキャッシュセグメントと呼び、そのデータ長をキャッシュセグメント長と呼ぶ。
【００７０】
記憶制御装置３０のコントローラ３１は、記憶装置２０のデータ格納領域全体（指定可能な論理セクタの全体）を、仮想的にキャッシュセグメント長のブロックに分割し、分割して得たキャッシュセグメント長のブロックごとに、例えばその先頭に対応する論理セクタを特定する情報などを、ブロックを特定する情報として、このブロックを特定する情報の一覧を記憶部３２に記憶しておく。
【００７１】
本実施の形態のこの例でも、記憶制御装置３０のコントローラ３１は機能的に図５に例示した構成と同様の構成をとるが、判断部３１２及び書込処理部３１３における動作が少々異なる。以下では、これらの動作について説明する。
【００７２】
この例に係る判断部３１２は、受入部３１１が受け入れたライトコマンドに含まれる情報で特定される論理セクタを対象セクタとして、この対象セクタに記録されているセクタデータと端数データとを内包したパリティ生成単位を少なくとも一つ含むデータのうち、セクタデータを除く部分を少なくとも含むデータ（処理対象データ）が、キャッシュメモリ部３３に保持されているか否か判断する。そして、キャッシュメモリ部３３に処理対象データが保持されていれば、その判断結果を表す情報を書込処理部３１３に出力する。パリティ生成単位がセグメントの単位となっている場合、判断部３１２は、対象セクタを内包するセグメント（対象セクタが複数のセグメントにまたがっている場合は、当該複数のセグメントの全体）を含むデータ（対象セクタ内のセクタデータは含まれなくてもよい）がキャッシュメモリ部３３に格納されているか否かを判断することとなる。
【００７３】
また判断部３１２は、キャッシュデバイス３６に処理対象データが保持されているか否かも調べる。判断部３１２は、キャッシュデバイス３６に処理対象データが保持されていれば、その判断結果を表す情報を書込処理部３１３に出力する。パリティ生成単位がセグメントの単位となっている場合、判断部３１２は、対象セクタを内包するセグメント（対象セクタが複数のセグメントにまたがっている場合は、当該複数のセグメントの全体）を含むデータ（対象セクタ内のセクタデータは除いてもよい）が、キャッシュデバイス３６に格納されているか否かを判断することとなる。ここでは記憶装置２０で用いられるセグメントのデータ長と、キャッシュセグメント長とが必ずしも一致しないので、キャッシュデバイス３６に格納されているデータに、対象セクタを内包するセグメント全体（対象セクタ内のセクタデータは除いてもよい）のみならず、余分なデータが含まれていても、判断部３１２は、処理対象データがキャッシュされていると判断する。
【００７４】
さらに判断部３１２は、キャッシュメモリ部３３にもキャッシュデバイス３６にも処理対象データが保持されていない場合は、その判断結果を表す情報を書込処理部３１３に出力する。
【００７５】
書込処理部３１３は、判断部３１２が、処理対象データがキャッシュメモリ部３３に保持されていると判断したときには既に説明したのと同様の動作を行う。また、判断部３１２が、処理対象データがキャッシュメモリ部３３に保持されていないが、キャッシュデバイス３６に保持されていると判断したときには、書込処理部３１３は、キャッシュデバイス３６に保持されている処理対象データを、キャッシュメモリ部３３に複写する。そして書込処理部３１３は、処理対象データがキャッシュメモリ部３３に保持されていると判断したときと同様の動作を行う。
【００７６】
一方、判断部３１２が、処理対象データがキャッシュメモリ部３３にも、キャッシュデバイス３６にも保持されていないと判断したとき（処理対象データの一部は保持されているが、その全体がキャッシュメモリ部３３やキャッシュデバイス３６に保持されていないと判断したときを含む）には、この書込処理部３１３は、上記処理対象データがキャッシュメモリ部３３やキャッシュデバイス３６に保持された状態となるよう、記憶装置２０から処理対象データの少なくとも一部のデータを取得する。
【００７７】
本実施の形態のこの例では、書込処理部３１３は、処理対象データがキャッシュメモリ部３３やキャッシュデバイス３６に保持されていないと判断されたときには、処理対象データを格納している論理セクタを特定する情報（対象セクタを特定する情報は除いてもよい）を含む読み出し指示を記憶装置２０に対して出力する。このとき書込処理部３１３は、対象セクタを含むセグメントを特定し、さらに当該特定したセグメントを含むキャッシュセグメント長のブロック（記憶部３２に記憶されている情報で特定されるブロック）を特定する。なお、特定したセグメントが複数のブロックにまたがっている場合は、書込処理部３１３は、当該複数のブロックを特定する。
【００７８】
書込処理部３１３は、当該特定したキャッシュセグメント長のブロックに含まれるすべての論理セクタ（特定したブロックが複数ある場合は、そのすべてのブロックの全体（キャッシュセグメント長の自然数倍のデータ長となる）に含まれるすべての論理セクタ、ただし対象セクタは除いてもよい）を特定する情報を含む読み出し指示を、記憶装置２０に対して出力する。また書込処理部３１３は、この指示に応じて記憶装置２０が出力する、キャッシュセグメント長の自然数倍のデータ長のデータのうち、対象セクタ内のセクタデータを除くデータを少なくとも含むデータをキャッシュデバイス３６に格納する。つまり、書込処理部３１３は、キャッシュデバイス３６にキャッシュするデータを読み出すときには、キャッシュセグメント長の自然数倍のデータ長のデータのうち、対象セクタ内のセクタデータを除くデータを少なくとも含むデータを記憶装置２０から読み出すこととしている。
【００７９】
また書込処理部３１３は、当該キャッシュデバイス３６に格納したデータを、処理対象データとしてキャッシュメモリ部３３に格納する。そして書込処理部３１３は、処理対象データがキャッシュメモリ部３３に保持されていると判断したときと同様の動作を行う。
【００８０】
さらに書込処理部３１３は、判断部３１２が、処理対象データがキャッシュデバイス３６に保持されていると判断したときには、ライトコマンドに含まれるデータにより書き換えて更新した処理対象データ、またはライトコマンドに含まれるデータを追記して更新した処理対象データを、記憶装置２０に対して出力するとともに、キャッシュデバイス３６の対応する部分に上書きする。さらに、このとき、当該更新した処理対象データを、キャッシュメモリ部３３にも格納してもよい。
なお、上述の例においても、処理対象データの一部がキャッシュデバイス３６に保持されている場合（全体は保持されていないが一部は保持されている場合）でも、処理対象データ全体を記憶装置２０から取得するように動作する代わりに、書込処理部３１３は、当該保持されていない部分に係る論理セクタを特定する情報を含む読み出し指示を記憶装置２０に対して出力することとしてもよい。
【００８１】
［変形例］
なお、ここまでの説明では、ホスト側装置１０とは別体の記憶制御装置３０が設けられる構成を例としていたが、本実施の形態はこれに限られず、ホスト側装置１０と記憶制御装置３０とが一体となっていてもよい。つまり、ホスト側装置１０が記憶制御装置３０として機能することとしてもよい。この場合、記憶制御装置３０のコントローラ３１はホスト側装置１０であるＰＣのＣＰＵによって実現され、記憶部３２及びキャッシュメモリ部３３はＰＣのメインメモリを用いて実現される。具体的にキャッシュメモリ部３３は、ホスト側装置１０のメインメモリの一部をキャッシュメモリの領域として確保することによって実現できる。
【００８２】
またこのようにホスト側装置１０が記憶制御装置３０を兼ねる場合は、第１のインタフェース部３４に相当する構成は必ずしも必要ではない。
【００８３】
また別の例として、この記憶制御装置３０は、記憶装置２０と一体的に構成（同一の筐体内に収納）されていてもよい。このように記憶装置２０と記憶制御装置３０とが一体的に構成される場合、記憶装置２０のデバイスコントローラ２２が記憶制御装置３０のコントローラ３１の動作を兼ねてもよい。またこの例では第２インタフェース部３５に相当する構成は必ずしも必要ではない。
【００８４】
さらにキャッシュデバイス３６を含むか否かに関わらず、キャッシュメモリ部３３へのデータの読み書きの単位（読み書きを行うための最小限のデータ長）を考慮した処理を行うこととしてもよい。このキャッシュメモリ部３３へのデータの読み書きの単位を以下、メモリキャッシュセグメントと呼ぶ。
【００８５】
この例では、記憶制御装置３０のコントローラ３１は、記憶装置２０のデータ格納領域全体（指定可能な論理セクタの全体）を、仮想的にメモリキャッシュセグメント長のブロックに分割し、分割して得たメモリキャッシュセグメント長のブロックごとに、例えばその先頭に対応する論理セクタを特定する情報などを、ブロックを特定する情報として、このブロックを特定する情報の一覧（メモリキャッシュセグメント対応ブロック一覧）を記憶部３２に記憶しておく。
【００８６】
この例に係る書込処理部３１３は、判断部３１２が、処理対象データがキャッシュメモリ部３３に保持されていると判断したときには既に説明したのと同様の動作を行う。
【００８７】
一方、判断部３１２が、処理対象データがキャッシュメモリ部３３に保持されていないと判断したとき（処理対象データの一部は保持されているが、その全体がキャッシュメモリ部３３に保持されていないと判断したときを含む）には、この書込処理部３１３は、処理対象データがキャッシュメモリ部３３に保持された状態となるよう、記憶装置２０から処理対象データの少なくとも一部のデータを取得する。
【００８８】
具体的に書込処理部３１３は、処理対象データがキャッシュメモリ部３３に保持されていないと判断されたときには、処理対象データを格納している論理セクタを特定する情報（対象セクタを特定する情報は除いてもよい）を含む読み出し指示を記憶装置２０に対して出力する。このとき書込処理部３１３は、対象セクタを含むセグメントを特定し、さらに当該特定したセグメントを含むメモリキャッシュセグメント長の自然数倍のデータ長のブロック（記憶部３２に記憶されているメモリキャッシュセグメント対応ブロック一覧に含まれる情報で特定される少なくとも一つのブロック）を特定する。なお、特定したセグメントが複数のブロックにまたがっている場合は、書込処理部３１３は、当該複数のブロックを特定する。
【００８９】
書込処理部３１３は、当該特定したメモリキャッシュセグメント長の自然数倍のデータ長のブロックに含まれるすべての論理セクタ（特定したブロックが複数ある場合は、そのすべてのブロックの全体に含まれるすべての論理セクタ、ただし対象セクタは除いてもよい）を特定する情報を含む読み出し指示を、記憶装置２０に対して出力する。
【００９０】
また書込処理部３１３は、この指示に応じて記憶装置２０が出力する、メモリキャッシュセグメント長の自然数倍のデータ長のデータのうち、対象セクタ内のセクタデータを除くデータを少なくとも含むデータをキャッシュメモリ３３に格納する。つまり、書込処理部３１３は、キャッシュメモリ３３にキャッシュするデータを読み出すときには、メモリキャッシュセグメント長の自然数倍のデータ長のデータのうち、対象セクタ内のセクタデータを除くデータを少なくとも含むデータを記憶装置２０から読み出すこととする。
【００９１】
なお、キャッシュデバイス３６を含む場合であって、かつ、キャッシュメモリ３３に対してメモリキャッシュセグメント長の単位（メモリキャッシュセグメント長の自然数倍のデータ長）でキャッシュするデータを書き込む場合には、キャッシュデバイス３６にキャッシュするデータを記憶装置２０から読み出すときに、キャッシュセグメント長と、メモリキャッシュセグメント長との公倍数に相当するデータ長を単位として読み出すようにしてもよい。この場合、書込処理部３１３は、キャッシュデバイス３６にキャッシュするデータを読み出すときには、キャッシュセグメント長と、メモリキャッシュセグメント長との最小公倍数の自然数倍のデータ長のデータを記憶装置２０から読み出すこととなる。
【００９２】
［シーケンシャルライトへの対応］
なお、本実施の形態のある例では、ホスト側装置１０から入力されるライトコマンドがシーケンシャルライト（連続したセクタに対するデータの書き込み指示（ライトコマンド）が続けて入力される書き込み方式）に係る場合には、ライトコマンドに対して上述の処理を行わずに、従来例と同様の処理を行うこととしてもよい。つまり、本実施の形態のある例では、記憶制御装置３０は、シーケンシャルライトでない場合に限り、上述の端数処理を行うこととしてもよい。
【００９３】
これは、シーケンシャルライトである場合には、あるセクタへの書き込みの際に、端数処理のために読み込んだ当該セクタの後続のセクタに対し、次のライトコマンドで上書きが発生することとなって処理の効率化が十分でなくなることを考慮したものである。
【００９４】
なお、ライトコマンドがシーケンシャルライトに係るものであるか否かは、次のようにして判断すればよい。すなわちこの例の記憶制御装置３０のコントローラ３１は、例えば、ライトコマンドを受け入れたときに、当該ライトコマンドに含まれる情報で特定される書き込み対象のセクタ（対象セクタ）を特定する情報（一般的にはＬＢＡ（Logical Block Addressing）値）を取りだして、当該対象セクタが過去所定数回前までに書き込み対象とされたセクタの次のセクタであるか否かを調べることでシーケンシャルライトであるか否かを判断すればよい。
【００９５】
このために、この例では、過去所定数回前までに書き込み対象とされたセクタの次のセクタを特定する情報（対象セクタとなったセクタのＬＢＡ値を「１」だけインクリメントした値）を、検出リストとして記憶部３２に記憶しておくこととすればよい。
【００９６】
この場合、コントローラ３１は、ライトコマンドが入力されたときに、記憶部３２の検出リストを参照し、当該ライトコマンドに含まれる情報で特定される書き込み対象のセクタ（対象セクタ）を特定する情報が、検出リストに含まれているか否かを調べる。ここで当該対象セクタを特定する情報が、検出リストに含まれていれば、コントローラ３１は、当該ライトコマンドはシーケンシャルアクセスに係るものと判断して、端数処理を行わずに、従来例と同様の書き込みの処理を実行する。
【００９７】
またこのときには、コントローラ３１は、当該検出リストに含まれている、対象セクタを特定する情報を、当該対象セクタの次のセクタを特定する情報に更新する。
【００９８】
一方、コントローラ３１は、入力されたライトコマンドに含まれる情報で特定される書き込み対象のセクタ（対象セクタ）を特定する情報が、検出リストに含まれていないと判断したときには、端数処理を行うとともに、当該対象セクタの次のセクタを特定する情報を検出リストに記録する。
【００９９】
なお、この検出リストは具体的には、どのセクタが近時に利用されたかを判断する、ＬＲＵ（Least Recently Used）処理のために用いられるものを利用してもよい。
【符号の説明】
【０１００】
１  記憶制御システム、１０  ホスト側装置、２０  記憶装置、２１  インタフェース部、２２  デバイスコントローラ、２３  ストレージディスクデバイス、３０  記憶制御装置、３１  コントローラ、３２  記憶部、３３  キャッシュメモリ部、３４  第１インタフェース部、３５  第２インタフェース部、３６  キャッシュデバイス、３１１  受入部、３１２  判断部、３１３  書込処理部。
【図１】
0006367704.tif 000002
【図２】
0006367704.tif 000003
【図３】
0006367704.tif 000004
【図４】
0006367704.tif 000005
【図５】
0006367704.tif 000006
【図６】
0006367704.tif 000007
【図７】
0006367704.tif 000008
【図８】
0006367704.tif 000009