(57)【要約】【課題】本発明の記憶制御装置は、比較的簡易に、記憶装置からのデータ読み出し時にエラーを検出する。【解決手段】アドレスデータ付加部１Ｄは、ホスト３から受信したデータについて、各論理ブロック毎にアドレスデータを付加する。デバイス通信制御部１Ｂは、所定ブロック数のサイズを有するデータ毎に分割位置ＰＤを決定し、分割位置ＰＤの前後でデータを入れ替え、記憶装置２に記憶させる。記憶装置２からデータを読み出す場合、アドレスデータ検査部５は、読み出されるブロックに付加されたアドレスデータの値と、分割位置ＰＤに基づいて算出されるアドレスデータの期待値とが一致するか否かを判定する。両方の値が一致する場合、データはキャッシュメモリ１Ｃに送られる。両方の値が不一致の場合、エラーが検出される。【選択図】図１
2010128519.tif 000002
【特許請求の範囲】
【請求項１】
第１ブロック単位でデータを取り扱う記憶装置と前記第１ブロック単位でデータを取り扱うホストコンピュータとの間のデータ入出力を制御する記憶制御装置であって、
前記ホストコンピュータとの間でデータを送受信するための第１通信制御部と、
前記第１通信制御部により受信された前記第１ブロック単位のデータについて、前記各第１ブロックの論理アドレスに基づいて生成される所定のアドレスデータを、前記各第１ブロックにそれぞれ付加することにより、前記第１ブロックよりも前記所定のアドレスデータの分だけサイズの大きい第２ブロック単位のデータを生成させる、アドレスデータ付加部と、
前記アドレスデータの付加された、前記第２ブロック単位のデータを記憶するためのメモリ部と、
前記メモリ部から受領したデータを前記記憶装置に記憶させ、かつ、前記記憶装置から読み出したデータを前記メモリ部に転送させる第２通信制御部と、
前記論理アドレスと前記アドレスデータとの対応を検査する検査部とを備え、
前記第２通信制御部は、前記メモリ部から前記記憶装置にデータを転送する場合、前記各第１ブロックの前記論理アドレスとは異なる別の論理アドレスを所定の規則に基づいて生成し、前記別の論理アドレスを前記メモリ部から受領したデータの前記各第２ブロック毎に対応付けて、前記別の論理アドレスに対応する位置で前記記憶装置に記憶されるように、前記メモリ部から受領したデータを前記記憶装置に転送し、かつ、前記論理アドレスと前記別の論理アドレスとの対応関係を管理テーブルに記憶させ、
前記検査部は、前記記憶装置から前記メモリ部にデータを転送する場合、前記管理テーブルから取得される前記対応関係に基づいて、前記記憶装置の前記別の論理アドレスに対応する位置から前記第２ブロック単位のデータを読出し、前記別の論理アドレスから読み出された前記第２ブロック単位のデータについて、前記各第２ブロックに対応する前記論理アドレスと前記各第２ブロックに含まれる前記アドレスデータとを比較し、前記論理アドレスと前記アドレスデータとが一致する場合に前記記憶装置から前記メモリ部にデータを転送させ、前記論理アドレスと前記アドレスデータとが不一致の場合に異常発生を検出する、
記憶制御装置。
【請求項２】
前記所定の規則とは、前記第２ブロック単位のデータを、指定される分割位置で分割して、その分割されたデータの順番を入れ替えることである、請求項１に記載の記憶制御装置。
【請求項３】
前記所定の規則とは、所定数の前記各第２ブロックから構成される所定サイズのデータを、任意に指定される分割位置で、前記第２ブロックの境界で分割し、その分割されたデータの順番を入れ替えることである、請求項１に記載の記憶制御装置。
【請求項４】
前記所定の規則には、前記分割位置が前記第２ブロック単位のデータの先頭に設定される場合も含まれており、その場合は前記データを分割しない、請求項２に記載の記憶制御装置。
【請求項５】
前記所定数とは、前記第１ブロックのサイズと前記第２ブロックのサイズとの最小公倍数を、前記第２ブロックのサイズで除算して得られる値である、請求項３に記載の記憶制御装置。
【請求項６】
前記分割位置は、前記メモリ部から前記記憶装置にデータを転送する度に変更される、請求項２に記載の記憶制御装置。
【請求項７】
前記分割位置は前記所定サイズ毎に変更される、請求項３に記載の記憶制御装置。
【請求項８】
前記管理テーブルには前記分割位置が記憶される、請求項２に記載の記憶制御装置。
【請求項９】
前記管理テーブルには、前記分割位置と、前記分割位置が有効か否かを示すための有効性識別情報とが記憶される、請求項２に記載の記憶制御装置。
【請求項１０】
障害が発生した場合には、前記有効性識別情報に無効と設定する、請求項９に記載の記憶制御装置。
【請求項１１】
前記管理テーブルから前記対応関係を読み出すことができない場合に、前記対応関係を復元して前記管理テーブルに再登録するための対応関係復元部を設け、
前記対応関係復元部は、前記第２ブロック単位のデータの先頭ブロックに付加されている前記アドレスデータに基づいて、前記対応関係を復元する、請求項２に記載の記憶制御装置。
【請求項１２】
前記分割位置は、乱数もしくは疑似乱数により、または、前回の分割位置に所定値を加算もしくは減算することにより、設定される請求項２に記載の記憶制御装置。
【請求項１３】
前記第１通信制御部は、前記ホストコンピュータに接続される通信部と前記メモリ部との間でデータを転送するための第１ダイレクトメモリアクセス回路を備えており、
前記第２通信制御部は、前記メモリ部と前記記憶装置との間でデータを転送するための第２ダイレクトメモリアクセス回路を備えており、
前記アドレスデータ付加部は、前記第１ダイレクトメモリアクセス回路に設けられており、
前記検査部は、前記第２ダイレクトメモリアクセス回路に設けられており、
前記第１ブロックのサイズは５１２バイトであり、
前記アドレスデータのサイズは８バイトであり、
前記第２ブロックのサイズは５２０バイトである、
請求項２に記載の記憶制御装置。
【請求項１４】
記憶装置とホストコンピュータとの間でデータ入出力を制御する記憶制御装置を制御するための方法であって、
ライト要求に基づいて、前記ホストコンピュータから第１ブロック単位のデータを受信するステップと、
前記第１ブロック単位のデータについて、前記各第１ブロックの論理アドレスに基づいて生成される所定のアドレスデータを、前記各第１ブロックにそれぞれ付加することにより、前記第１ブロックよりも前記所定のアドレスデータの分だけサイズの大きい第２ブロック単位のデータを生成させるステップと、
前記アドレスデータの付加された、前記第２ブロック単位のデータをメモリ部に記憶させるステップと、
前記各第１ブロックの前記論理アドレスとは異なる別の論理アドレスを所定の規則に基づいて生成するステップと、
前記別の論理アドレスを前記メモリ部から読み出されたデータの前記各第２ブロック毎に対応付けて、前記別の論理アドレスに対応する位置で前記記憶装置に記憶されるように、前記メモリ部から読み出したデータを前記記憶装置に転送させるステップと、
前記論理アドレスと前記別の論理アドレスとの対応関係を管理テーブルに記憶させるステップと、
リード要求に基づいて、前記管理テーブルから前記対応関係を読み出すステップと、
読み出された前記対応関係に基づいて、前記記憶装置の前記別の論理アドレスに対応する位置から、前記第２ブロック単位のデータを読み出すステップと、
前記別の論理アドレスから読み出された前記第２ブロック単位のデータについて、前記各第２ブロックに対応する前記論理アドレスと前記各第２ブロックに含まれる前記アドレスデータとを比較するステップと、
前記論理アドレスと前記アドレスデータとが一致する場合に、前記記憶装置から前記メモリ部にデータを転送させるステップと、
前記論理アドレスと前記アドレスデータとが不一致の場合に異常発生を検出するステップと、
をそれぞれ実行する、記憶制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及び記憶制御装置の制御方法に関する。
【背景技術】
【０００２】
記憶制御装置は、例えば、メインフレームやサーバ等のホストコンピュータ（以下、「ホスト」）に接続される。記憶制御装置は、ＲＡＩＤ（Redundant Array of Inexpensive Disks）に基づく記憶領域をホストに提供する。
【０００３】
記憶制御装置では、例えば、ＲＡＩＤ１〜ＲＡＩＤ６として知られているように、データに冗長性を付加することもできる。記憶制御装置は、データにパリティデータを付加したり、あるいは、データのコピーを別のディスクドライブにも書き込むことにより、ディスクドライブの障害発生時に備えている。
【０００４】
さらに、保証コードを使用する記憶制御装置も知られている（特許文献１，特許文献２，特許文献３）。一つの従来技術では、保証コードとして、ホストコンピュータがアクセス先として指定する論理ブロックの論理アドレス（以下、「ＬＡ（Logical Address）」）、及び、論理ブロックのデータについて排他的論理和演算を実施して求められるＬＲＣ（Longitudinal Redundancy Check）を、論理ブロックにそれぞれ付加し、この保証コードと論理ブロックとをディスクドライブに保存させる。
【０００５】
ＬＡは、論理ブロックのデータが書き込まれる記憶領域のアドレスの誤りを検出するために用いられる。ＬＲＣは、論理ブロックのデータの誤りを検出するための誤り検出符号として用いられる。
【０００６】
論理ブロックに前記保証コードを付加すると、記憶制御装置の内部で取り扱われるデータの管理単位と、ディスクドライブ内のデータ管理単位とが異なる可能性がある。例えば、ＳＡＴＡ（Serial Advanced Technology Attachment）ディスクのような、ブロック長（セクタ長）が論理ブロックのサイズに固定されているディスクドライブでは、固定値の論理ブロック単位でデータを記憶する。従って、論理ブロックに保証コードを付加してブロックサイズを大きくすると、ディスクドライブのフォーマットによっては、保証コード付きの論理ブロックをそのままでは記憶させることができない。
【０００７】
そこで、この問題を解決するために、第４の文献には、論理ブロックのサイズと保証コード付き論理ブロックのサイズとの最小公倍数を、ディスクドライブにデータを入出力する際の値として固定する技術が提案されている（特許文献４）。
【特許文献１】特開２０００−３４７８１５号公報
【特許文献２】米国特許第５,８１９,０５４号公報
【特許文献３】米国特許第５,７０６,２９８号公報
【特許文献４】特開２００６−１９５８５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前記第４文献に記載されているように、論理ブロックのサイズと保証コード付き論理ブロックのサイズとの最小公倍数を、記憶制御装置がディスクドライブにデータを書き込む場合の基本単位として設定することにより、セクタ長が固定されているディスクドライブに、保証コードの付加された論理ブロックを書き込むことができる。以下、保証コードの付加によってサイズが大きくなる論理ブロックを、拡張論理ブロックと称する。
【０００９】
例えば、論理ブロックのサイズを５１２バイト、保証コードのサイズを８バイトとすると、拡張論理ブロックのサイズは５２０バイトとなる。５１２バイトと５２０バイトの最小公倍数は、３３２８０バイトとなる。ホストコンピュータから受信した６４個の論理ブロックについて、各論理ブロック毎にそれぞれ８バイトの保証コードを付与することにより、全体のデータサイズは、３３２８０バイトとなる。この値は、６５個分の論理ブロックのサイズに等しい（３３２８０＝５１２×６５）。
【００１０】
この場合、６４個の拡張論理ブロックから構成されるデータの両端と、６５個の論理ブロックの両端とは一致する。従って、６４個の拡張論理ブロックを、６５個の論理ブロックとして、ディスクドライブに記憶させることができる。論理ブロックのサイズと拡張論理ブロックのサイズとの最小公倍数のサイズでデータを読み書きする方法を、本明細書では、便宜上、例えば、最小公倍数単位のデータアクセスと呼ぶ。
【００１１】
ところで近年では、セクタ長の固定されたディスクドライブとして、ＳＡＴＡディスクが比較的多く使用される。ＳＡＴＡディスクは、記憶容量が比較的大きく、かつ、コストが比較的安いという特長を備える一方、信頼性に欠けるという問題点がある。
【００１２】
上述のＬＡを検査することにより、誤った場所からデータが読み出された場合には直ちに検出することができる。データの読み出し位置である論理アドレスと、そのデータに付加されているＬＡとが一致しないためである。
【００１３】
しかし、ライトデータがディスクドライブ上の所定の位置に書き込まれていなかった場合は、そのミスをＬＡによって検出することはできない。読み出された古いデータには、その格納位置に対応する正しいＬＡが付加されているためである。上記の、ライトデータが正しい位置に書き込まれなかった障害のことを、本明細書では、書かず障害と呼ぶ。書かず障害には、ライトデータがディスクドライブに全く書き込まれなかった場合と、ライトデータが誤った格納位置に書き込まれた場合とが含まれる。
【００１４】
従って、ＳＡＴＡディスクのような信頼性の劣るディスクドライブを用いる場合は、前記書かず障害の発生に備える必要がある。そこで、データの書込み時に、書き込んだばかりのデータをディスクドライブから読み出して、キャッシュ上のデータと比較する方法が知られている。この検査方式をWrite＆Compare方式と呼ぶ。
【００１５】
上記の検査を行うことにより、書かず障害を検出することができる。しかし、一度書き込んだデータを読み出して比較するため、ライト処理の完了までに時間がかかり、書込み時の応答性能が低下する。
【００１６】
そこで、本発明の目的は、信頼性及び応答性を改善できるようにした記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の他の目的は、ホストコンピュータ及び記憶装置で使用される第１ブロックのサイズと、記憶制御装置内で使用される第２ブロックのサイズとが異なる場合でも、応答性能及び信頼性を向上できるようにした記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の更なる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【００１７】
上記課題を解決すべく、本発明の第１観点に従う記憶制御装置は、第１ブロック単位でデータを取り扱う記憶装置と第１ブロック単位でデータを取り扱うホストコンピュータとの間のデータ入出力を制御する記憶制御装置であって、ホストコンピュータとの間でデータを送受信するための第１通信制御部と、第１通信制御部により受信された第１ブロック単位のデータについて、各第１ブロックの論理アドレスに基づいて生成される所定のアドレスデータを、各第１ブロックにそれぞれ付加することにより、第１ブロックよりも所定のアドレスデータの分だけサイズの大きい第２ブロック単位のデータを生成させる、アドレスデータ付加部と、アドレスデータの付加された、第２ブロック単位のデータを記憶するためのメモリ部と、メモリ部から受領したデータを記憶装置に記憶させ、かつ、記憶装置から読み出したデータをメモリ部に転送させる第２通信制御部と、論理アドレスとアドレスデータとの対応を検査する検査部とを備え、第２通信制御部は、メモリ部から記憶装置にデータを転送する場合、各第１ブロックの論理アドレスとは異なる別の論理アドレスを所定の規則に基づいて生成し、別の論理アドレスをメモリ部から受領したデータの各第２ブロック毎に対応付けて、別の論理アドレスに対応する位置で記憶装置に記憶されるように、メモリ部から受領したデータを記憶装置に転送し、かつ、論理アドレスと別の論理アドレスとの対応関係を管理テーブルに記憶させ、検査部は、記憶装置からメモリ部にデータを転送する場合、管理テーブルから取得される対応関係に基づいて、記憶装置の別の論理アドレスに対応する位置から第２ブロック単位のデータを読出し、別の論理アドレスから読み出された第２ブロック単位のデータについて、各第２ブロックに対応する論理アドレスと各第２ブロックに含まれるアドレスデータとを比較し、論理アドレスとアドレスデータとが一致する場合に記憶装置からメモリ部にデータを転送させ、論理アドレスとアドレスデータとが不一致の場合に異常発生を検出する。
【００１８】
第２観点では、第１観点において、所定の規則とは、第２ブロック単位のデータを、指定される分割位置で分割して、その分割されたデータの順番を入れ替えることである。
【００１９】
第３観点では、第１観点において、所定の規則とは、所定数の各第２ブロックから構成される所定サイズのデータを、任意に指定される分割位置で、第２ブロックの境界で分割し、その分割されたデータの順番を入れ替えることである。
【００２０】
第４観点では、第２観点において、所定の規則には、分割位置が第２ブロック単位のデータの先頭に設定される場合も含まれており、その場合はデータを分割しない。
【００２１】
第５観点では、第３観点において、所定数とは、第１ブロックのサイズと第２ブロックのサイズとの最小公倍数を、第２ブロックのサイズで除算して得られる値である。
【００２２】
第６観点では、第２観点において、分割位置は、メモリ部から記憶装置にデータを転送する度に変更される。
【００２３】
第７観点では、第３観点において、分割位置は所定サイズ毎に変更される。
【００２４】
第８観点では、第２観点において、管理テーブルには分割位置が記憶される。
【００２５】
第９観点では、第２観点において、管理テーブルには、分割位置と、分割位置が有効か否かを示すための有効性識別情報とが記憶される。
【００２６】
第１０観点では、第９観点において、障害が発生した場合には、有効性識別情報に無効と設定する。
【００２７】
第１１観点では、第２観点において、管理テーブルから対応関係を読み出すことができない場合に、対応関係を復元して管理テーブルに再登録するための対応関係復元部を設け、対応関係復元部は、第２ブロック単位のデータの先頭ブロックに付加されているアドレスデータに基づいて、対応関係を復元する。
【００２８】
第１２観点では、第２観点において、分割位置は、乱数もしくは疑似乱数により、または、前回の分割位置に所定値を加算もしくは減算することにより、設定される。
【００２９】
第１３観点では、第２観点において、第１通信制御部は、ホストコンピュータに接続される通信部とメモリ部との間でデータを転送するための第１ダイレクトメモリアクセス回路を備えており、第２通信制御部は、メモリ部と記憶装置との間でデータを転送するための第２ダイレクトメモリアクセス回路を備えており、アドレスデータ付加部は、第１ダイレクトメモリアクセス回路に設けられており、検査部は、第２ダイレクトメモリアクセス回路に設けられており、第１ブロックのサイズは５１２バイトであり、アドレスデータのサイズは８バイトであり、第２ブロックのサイズは５２０バイトである。
【００３０】
第１４観点に従う、記憶制御装置の制御方法は、記憶装置とホストコンピュータとの間でデータ入出力を制御する記憶制御装置を制御するための方法であって、ライト要求に基づいて、ホストコンピュータから第１ブロック単位のデータを受信するステップと、第１ブロック単位のデータについて、各第１ブロックの論理アドレスに基づいて生成される所定のアドレスデータを、各第１ブロックにそれぞれ付加することにより、第１ブロックよりも所定のアドレスデータの分だけサイズの大きい第２ブロック単位のデータを生成させるステップと、アドレスデータの付加された、第２ブロック単位のデータをメモリ部に記憶させるステップと、各第１ブロックの論理アドレスとは異なる別の論理アドレスを所定の規則に基づいて生成するステップと、別の論理アドレスをメモリ部から読み出されたデータの各第２ブロック毎に対応付けて、別の論理アドレスに対応する位置で記憶装置に記憶されるように、メモリ部から読み出したデータを記憶装置に転送させるステップと、論理アドレスと別の論理アドレスとの対応関係を管理テーブルに記憶させるステップと、リード要求に基づいて、管理テーブルから対応関係を読み出すステップと、読み出された対応関係に基づいて、記憶装置の別の論理アドレスに対応する位置から、第２ブロック単位のデータを読み出すステップと、別の論理アドレスから読み出された第２ブロック単位のデータについて、各第２ブロックに対応する論理アドレスと各第２ブロックに含まれるアドレスデータとを比較するステップと、論理アドレスとアドレスデータとが一致する場合に、記憶装置からメモリ部にデータを転送させるステップと、論理アドレスとアドレスデータとが不一致の場合に異常発生を検出するステップと、をそれぞれ実行する。
【００３１】
本発明の各部または各ステップの少なくとも一部は、コンピュータプログラムとして構成される場合がある。このコンピュータプログラムは、記録媒体に固定して配布したり、ネットワークを介して配信することができる。
【発明を実施するための最良の形態】
【００３２】
以下、図面に基づいて、本発明の実施の形態を説明する。まず最初に、本発明の概念を説明し、その次に、具体的な実施例について説明する。本発明は、後述のように、論理アドレスに基づくアドレスデータが付加されているブロックデータを、その論理アドレスとは異なる場所で、記憶装置に記憶させる。そして、本発明では、論理アドレスと実際の格納先との対応関係を記憶し、管理する。
【００３３】
さらに、本発明では、記憶装置から読み出されるデータのアドレスと、記憶されている対応関係から得られる論理アドレスの期待値とが一致するか否かを検査することにより、記憶装置から読み出されたデータが所望のデータであるか否かを判定することができる。換言すれば、本発明では、記憶装置から読み出されるデータに実際に付加されているアドレスデータの値と、その読み出されるデータに付加されていると期待されるアドレスデータの値とが一致するか否かを検査する。
【００３４】
図１は、本発明の実施形態を模式的に示す説明図である。図１及び図１に関する以下の記載は、本発明の理解及び実施に必要な程度で、本発明の概要を示しており、本発明の範囲を図１に記載された範囲に限定するものではない。
【００３５】
図１（ａ）は、本発明に従う記憶制御装置を含むストレージシステムの全体構成を示している。このストレージシステムは、例えば、記憶制御装置１と、記憶装置２と、ホスト３とを備える。
【００３６】
記憶装置２は、例えば、ＳＡＴＡディスクのような、セクタ長が論理ブロックのサイズに固定された、ハードディスクデバイスとして構成される。なお、以下の説明では、記憶装置内の物理ブロックを、便宜上、論理ブロックと呼ぶ。
【００３７】
しかし、本発明は、ＳＡＴＡディスクに限らず、セクタ長が論理ブロックのサイズに固定された記憶装置であれば、例えば、フラッシュメモリデバイスのような他の種類の記憶装置も使用可能である。
【００３８】
ホスト３は、例えば、サーバコンピュータまたはメインフレームコンピュータのようなコンピュータ装置として構成される。ホスト３がホストコンピュータの場合、例えば、ＦＩＣＯＮ（Fibre Connection：登録商標）、ＥＳＣＯＮ（Enterprise System Connection：登録商標）、ＡＣＯＮＡＲＣ（Advanced Connection Architecture：登録商標）、ＦＩＢＡＲＣ（Fibre Connection Architecture：登録商標）等の通信プロトコルに従って、データ通信が行われる。ホスト３がサーバコンピュータ等の場合、例えば、ＦＣＰ（Fibre Channel Protocol）またはｉＳＣＳＩ（internet Small Computer System Interface）等の通信プロトコルに従って、データ通信が行われる。
【００３９】
記憶制御装置１は、ホスト３と記憶装置２との間に設けられており、ホスト３と記憶装置２との間のデータ転送を制御する。記憶制御装置１は、例えば、「第１通信制御部」としてのホスト通信制御部１Ａと、「第２通信制御部」としてのデバイス通信制御部１Ｂと、「メモリ部」としてのキャッシュメモリ１Ｃと、「アドレスデータ付加部」としてのＬＡ付加部１Ｄと、「検査部」としてのＬＡ検査部５とを備えている。
【００４０】
ホスト通信制御部１Ａは、ホスト３からコマンドやデータを受信し、コマンドの処理結果等をホスト３に送信するための回路である。ホスト通信制御部１Ａは、後述の実施例に示すように、例えば、プロトコルチップ、ＤＭＡ（Direct Memory Access）回路、マイクロプロセッサを備えることができる。
【００４１】
デバイス通信制御部１Ｂは、記憶装置２にデータを書き込んだり、記憶装置２からデータを読み出したりするための回路である。デバイス通信制御部１Ｂは、後述の実施例に示すように、例えば、プロトコルチップ、ＤＭＡ回路、マイクロプロセッサ、パリティ生成回路を備えることができる。
【００４２】
キャッシュメモリ１Ｃは、ホスト３から受信したデータや、記憶装置２から読み出されたデータを一時的に記憶するためのメモリである。
【００４３】
ＬＡ付加部１Ｄは、５１２バイトの各論理ブロック毎に、８バイトの保証コードを付加する。保証コードには、少なくとも、その論理ブロックの論理アドレスから算出されるアドレスデータＬＡが含まれている。ＬＡ以外にＬＲＣを含めることもできるが、本実施形態では、アドレスデータＬＡに着目して説明する。
【００４４】
バッファメモリ４は、「第２メモリ部」と呼ぶこともできる。バッファメモリ４は、キャッシュメモリ１Ｃとデバイス通信制御部１Ｂとの間に設けられている。キャッシュメモリ１Ｃと記憶装置２とは、バッファメモリ４を介してデータを送受する。
【００４５】
ＬＡ検査部５は、記憶装置２から読み出されるデータについて、そのデータに付加されているアドレスデータＬＡとそのデータの論理アドレス（正確には、そのデータの有するべき論理アドレス（論理アドレスの期待値））とが一致するか否かを判定するためのものである。換言すれば、ＬＡ検査部５は、読み出されるデータに実際に付加されているアドレスデータＬＡの値と、そのデータに付加されていると期待されているアドレスデータＬＡの値とが一致するか否かを判定する。
【００４６】
後述の実施例に示すように、ＬＡ付加部１Ｄとホスト通信制御部１Ａとは一体化させることができる。同様に、デバイス通信制御部１Ｂとバッファメモリ４及びＬＡ検査部５も一体化させることができる。
【００４７】
本実施形態では、ホストコンピュータ３及び記憶装置２は、５１２バイトの論理ブロック単位でデータを取り扱う。記憶制御装置１は、ホストコンピュータ３から受信した５１２バイトの論理ブロックに、８バイトのアドレスデータＬＡを付加する。これにより、５２０バイトのサイズを有する論理ブロックが生成される。ＬＡが付加された５２０バイトのブロックを、本実施形態では、拡張論理ブロックと呼ぶ。５１２バイトの論理ブロックは「第１ブロック」に該当し、５２０バイトの拡張論理ブロックは「第２ブロック」に該当する。
【００４８】
図１（ｂ）は、ブロックデータの取り扱い方法を示す。図１（ｂ）の（１）は、キャッシュメモリ１Ｃに記憶される、拡張論理ブロック単位のデータを示す。キャッシュメモリ１Ｃに記憶される拡張論理ブロックのサイズ（５２０バイト）と、記憶装置２に記憶される論理ブロックのサイズ（５１２バイト）とは異なるため、通常の場合、拡張論理ブロックの境界と論理ブロックの境界とは一致しない。
【００４９】
しかし、複数の拡張論理ブロックからなるデータのサイズと複数の論理ブロックからなるデータのサイズとが、共に、論理ブロックのサイズと拡張論理ブロックのサイズとの最小公倍数の値（LCM）になった場合、データ両端は一致する。具体的には、６４個の拡張論理ブロックからなるデータの両端と、６５個の論理ブロックからなるデータの両端とは一致する。
【００５０】
そこで、本実施形態では、６４個の拡張論理ブロックをひとかたまりのデータとして扱い、記憶装置２に入出力するようになっている。図１（ｂ）には、＃０−＃６３の合計６４個のブロックが示されている。このように、拡張論理ブロックのサイズと論理ブロックのサイズとの最小公倍数に基づいて、記憶装置２との間でデータを入出力することにより、効率的にデータを読み書きすることができる。
【００５１】
図１（ｂ）の（２）は、記憶装置２上に記憶されたデータを示す。上述の通り、記憶装置２は、５１２バイトの論理ブロック単位でデータを扱うため、ブロック数は６５個となるはずである。しかし、ここでは説明の便宜上、複数の拡張論理ブロックからなるデータとして示す。
【００５２】
デバイス通信制御部１Ｂは、キャッシュメモリ１Ｃに記憶されている６４個の拡張論理ブロックから構成されるデータ（図１（ｂ）の（１））を、記憶装置２に書き込む場合を説明する。以下の説明では、６４個の拡張論理ブロックからなるデータを、所定ブロック数のデータ等と呼ぶ。
【００５３】
デバイス通信制御部１Ｂは、所定ブロック数のデータを、分割位置ＰＤ１で前後に分割する。これにより、前半部分のデータＦＡと後半部分のデータＢＡとが得られる。分割位置ＰＤ１は、記憶装置２にデータを書き込む度に変化するように、乱数もしくは疑似乱数を用いて、または、所定の分割位置算出規則に基づいて、生成される。所定の分割位置算出規則としては、例えば、前回の分割位置に所定値を加算または減算して新たな分割位置を算出する方法等を挙げることができる。
【００５４】
分割位置ＰＤ１は、所定ブロック数のデータ毎に、それぞれ設定される。例えば、所定ブロック数のデータが３個連続して記憶装置２に書き込まれる場合、所定ブロック数のデータ毎にそれぞれ分割位置ＰＤ１が設定されて、前後に分割される。
【００５５】
また、分割位置ＰＤ１は、記憶装置２における所定ブロック数の記憶サイズ毎にそれぞれ設定される。例えば、ミラーリング（ＲＡＩＤ１）の場合を例に挙げると、あるデータがユーザ領域に書き込まれると、そのデータは、正記憶装置と副記憶装置の両方に書き込まれる。この場合、正記憶装置に書き込まれるデータに設定される正の分割位置と、副記憶装置に書き込まれるデータに設定される副の分割位置とは、同一であってもよいし、または、異なってもよい。ＲＡＩＤ５等の他のＲＡＩＤ構成の場合も同様に、各記憶装置２毎にそれぞれ別々に分割位置を設定可能である。
【００５６】
さらに、分割位置ＰＤ１は、所定ブロック数のデータの先頭（見方を変えれば、所定ブロック数のデータの末尾）に設定することもできる。この場合は、分割位置ＰＤ１の前後でデータを入れ替えたりせずに、元のままの順序で記憶装置２に書き込まれる。
【００５７】
このようにして、所定ブロック数のデータに分割位置ＰＤ１が設定される。分割位置ＰＤ１は、記憶制御装置１により記憶され、管理される。例えば、記憶制御装置１内のメモリまたは特定の記憶装置２等に、分割位置ＰＤ１は記憶される。
【００５８】
図１（ｂ）の（２）に示すように、デバイス通信制御部１Ｂは、分割位置ＰＤ１の前に位置する前半部分ＦＡと分割位置ＰＤ１の後に位置する後半部分ＢＡとを入れ替えて、記憶装置２に転送し、記憶装置２に記憶させる。
【００５９】
従って、図示の例では、＃５−＃６３までのデータＦＡは、＃０−＃４までのデータＢＡよりも前に配置されて、記憶装置２に書き込まれる。なお、上述の通り、６４個の拡張論理ブロックからなるデータの両端と、６５個の論理ブロックからなるデータの両端とは一致する。
【００６０】
記憶装置２からデータを読み出す場合、図１（ｂ）の（３）に示すように、デバイス通信制御部１Ｂは、記憶されている分割位置ＰＤ１に基づいて、記憶装置２から前半部分のデータＦＡと後半部分のデータＢＡとを読み出し、その前後を入れ替えてキャッシュメモリ１Ｃに転送する。
【００６１】
ＬＡ検査部５は、各拡張論理ブロックのデータについて、その拡張論理ブロックに含まれるアドレスデータＬＡと、その拡張論理ブロックについて期待される論理アドレスとが一致するか否かを判定する。
【００６２】
例えば、記憶装置２の先頭に記憶されている＃５の拡張論理ブロックについて説明すると、この拡張論理ブロックに付加されているアドレスデータは「＃５」を示す。分割位置ＰＤ１は、拡張論理ブロック＃４と拡張論理ブロック＃５との間である。分割位置ＰＤ１の値を記憶しておけば、記憶装置２から読み出されるデータの論理アドレスの期待値を、分割位置ＰＤ１に基づいて算出できる。
【００６３】
例えば、先頭の拡張論理ブロックについて期待される論理アドレスの値は＃５であり（＃５＝ＰＤ１）、その次の拡張論理ブロックは、１つ増加した値＃６である（＃６＝＃５＋１＝ＰＤ１＋１）。以下同様に、元の後半部分ＢＡの各拡張論理ブロックに期待される各論理アドレスを自動的に算出できる。後半部分ＢＡの次に記憶されている前半部分ＦＡについては、＃０から分割位置ＰＤ１の手前までの値＃４を、論理アドレスの期待値として算出する。
【００６４】
記憶装置２から読み出された拡張論理ブロックの有するアドレスデータＬＡが＃５を示し、かつ、分割位置ＰＤ１に基づいて得られる論理アドレスの期待値が＃５である場合、両方の値が一致するため、ＬＡ検査部５は、データが正しく読み出されたと判定することができる。以下同様に、各拡張論理ブロックについても、それぞれの論理アドレスの期待値とアドレスデータＬＡの値とを比較することにより、所望のデータが読み出されたことを速やかに確認することができる。
【００６５】
分割位置ＰＤ１に基づいて各拡張論理ブロックの論理アドレスの期待値を算出できるという技術的特徴を利用することにより、記憶制御装置１で管理される分割位置ＰＤ１が失われた場合でも、分割位置ＰＤ１を復元させることができる。この点については、後述の実施例で説明する。
【００６６】
図１（ｂ）の（４）は、書き損じ障害の場合を示す。書き損じ障害とは、記憶装置２に転送されたデータが所定の格納先に書き込まれなかった場合を意味する。書き損じ障害には、例えば、データが記憶装置２のどこにも書き込まれることなく失われた場合、または、データが本来の格納先と異なる場所に書き込まれた場合がある。
【００６７】
図１（ｂ）の（４）には、書き損じ障害のために、データが正しく書き込まれておらず、古いデータが残っている場合が示されている。その古いデータは、別の分割位置ＰＤ２で分割されており、先頭ブロックには＃３の拡張論理ブロックが位置している。
【００６８】
デバイス通信制御部１Ｂは、＃４と＃５の間で分割されたものと信じて、記憶装置２からデータを読出し、その前後を入れ替えて元の順番に直す。ＬＡ検査部５は、読み出された拡張論理ブロックのアドレスデータＬＡの値と期待される論理アドレスの値とが一致するか否かを判定する。
【００６９】
図１（ｂ）の（４）の場合、論理アドレスの期待値とＬＡの値とは一致しない。例えば、記憶装置２上の先頭に記憶されている拡張論理ブロックのデータに着目すると、そのＬＡの値は＃３であるのに対し、その論理アドレスの期待値は＃５であり、両方の値は一致しない。従って、ＬＡ検査部５は、エラー発生を検出する。以下同様に、古いデータの各拡張論理ブロックのそれぞれについて、その論理アドレスの期待値とアドレスデータＬＡの値は一致しない。
【００７０】
なお、エラーが検出された場合は、いわゆるコレクションリードを行うことにより、失われたデータを復元できる。例えば、ＲＡＩＤ１の場合は、正記憶装置２でエラーが検出された場合、副記憶装置２から正しいデータを読み出せばよい。ＲＡＩＤ５等のパリティを用いる方式の場合は、同一のストライプに属するパリティ及び他のデータを用いて論理演算を行うことにより、正しいデータを算出することができる。それらの正しいデータは、エラーの検出された記憶装置２の所定の場所に書き込まれて記憶される。
【００７１】
このように、本実施形態では、読み出し時に、エラーの有無を速やかに検出することができる。本実施形態では、書き込んだはずのデータを記憶装置２から直ちに読み出して検査する構成に比べて、処理時間を短縮でき、かつ、信頼性を向上できる。
【００７２】
本実施形態では、読み出し時に、書込み時で生じたエラーを比較的容易に検出することができるため、ＳＡＴＡディスクのような信頼性の劣る記憶装置２を用いた場合であっても、記憶制御装置１全体としての信頼性を低下させずに、応答性能を高めることができ、使い勝手が向上する。以下、本実施形態を詳細に説明する。
【実施例１】
【００７３】
図２は、本実施例に係る記憶制御装置１０を含む情報処理システムの全体構成を示す説明図である。この情報処理システムは、例えば、少なくとも一つの記憶制御装置１０と、一つまたは複数のホスト２０と、少なくとも一つの管理端末３０とを含んで構成することができる。
【００７４】
先に図１で述べた実施形態との対応関係を説明する。記憶制御装置１０は図１中の記憶制御装置１に、記憶装置２１０は図１中の記憶装置２に、ホスト２０は図１中のホスト３に、チャネルアダプタ１１０は図１中のホスト通信制御部１Ａに、ディスクアダプタ１２０は図１中のデバイス通信制御部１Ｂに、キャッシュメモリ１３０は図１中のキャッシュメモリ１Ｃに、対応する。
【００７５】
図３に示すＬＡ付加部１１２Ａは図１中のＬＡ付加部１Ｄに、図３に示すＬＡ検査部１２２Ｂは図１中のＬＡ検査部５に、図３に示すバッファメモリ１２２Ａは図１中のバッファメモリ４に、対応する。
【００７６】
先に、ホスト２０及び管理端末３０について説明し、次に記憶制御装置１０について説明する。ホスト２０は、例えば、パーソナルコンピュータ、エンジニアリングワークステーション、サーバコンピュータ、メインフレームコンピュータ等のようなコンピュータとして構成され、通信ネットワークＣＮ１を介して記憶制御装置１０に接続されている。通信ネットワークＣＮ１は、例えば、ＦＣ−ＳＡＮ（Fibre Channel-Storage Area Network）やＩＰ−ＳＡＮ（Internet Protocol_SAN）のような通信ネットワークとして構成することができる。
【００７７】
ホスト２０は、５１２バイトの論理ブロック単位でデータを取り扱う。ホスト２０は、記憶制御装置１０にリードコマンドやライトコマンドを発行し、その処理結果を記憶制御装置１０から受領する。
【００７８】
管理端末３０は、記憶制御装置１０内のサービスプロセッサ１６０と通信ネットワークＣＮ３を介して接続される。通信ネットワークＣＮ３は、例えば、ＬＡＮ（Local Area Network）のような通信ネットワークとして構成される。管理端末３０は、サービスプロセッサ（以下、ＳＶＰ）１６０を介して、記憶制御装置１０内の各種情報を収集する。管理端末３０は、ＳＶＰ１６０を介して、記憶制御装置１０内の各種設定を指示することができる。
【００７９】
記憶制御装置１０の構成を説明する。記憶制御装置１０は、コントローラ１００と、記憶装置搭載部２００とに大別することができる。コントローラ１００は、例えば、少なくとも一つ以上のチャネルアダプタ（以下、ＣＨＡ）１１０と、少なくとも一つ以上のディスクアダプタ（以下、ＤＫＡ）１２０と、少なくとも一つ以上のキャッシュメモリ１３０と、少なくとも一つ以上の共有メモリ１４０と、接続部（図中「ＳＷ」）１５０と、ＳＶＰ１６０とを備えて構成される。なお、複数のコントローラ１００を記憶制御装置１０内のスイッチを介して連結する構成でもよい。例えば、複数のコントローラ１００からクラスタを構成することもできる。
【００８０】
ＣＨＡ１１０は、ホスト２０との間のデータ通信を制御するためのもので、例えば、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。各ＣＨＡ１１０は、少なくとも一つ以上の通信ポートを備えている。
【００８１】
ＤＫＡ１２０は、各記憶装置２１０との間のデータ通信を制御するためのもので、ＣＨＡ１１０と同様に、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。
【００８２】
各ＤＫＡ１２０と各記憶装置２１０とは、例えば、ファイバチャネルプロトコルに従う通信経路ＣＮ２を介して接続されている。各ＤＫＡ１２０と各記憶装置２１０とは、ブロック単位のデータ転送を行う。
【００８３】
コントローラ１００が各記憶装置２１０にアクセスするための経路は、冗長化されている。いずれか一方のＤＫＡ１２０や通信経路ＣＮ２に障害が発生した場合でも、コントローラ１００は、他方のＤＫＡ１２０や通信経路ＣＮ２を用いて、記憶装置２１０にアクセス可能である。同様に、ホスト２０とコントローラ１００との間の経路も冗長化することができる。ＣＨＡ１１０及びＤＫＡ１２０の構成は、図３で後述する。
【００８４】
ＣＨＡ１１０及びＤＫＡ１２０の動作を簡単に説明する。ＣＨＡ１１０は、ホスト２０から発行されたリードコマンドを受信すると、このリードコマンドを共有メモリ１４０に記憶させる。ＤＫＡ１２０は、共有メモリ１４０を随時参照しており、未処理のリードコマンドを発見すると、記憶装置２１０からデータを読み出して、キャッシュメモリ１３０に記憶させる。ＣＨＡ１１０は、キャッシュメモリ１３０に移されたデータを読み出し、ホスト２０に送信する。
【００８５】
一方、ＣＨＡ１１０は、ホスト２０から発行されたライトコマンドを受信すると、このライトコマンドを共有メモリ１４０に記憶させる。また、ＣＨＡ１１０は、受信したライトデータをキャッシュメモリ１３０に記憶させる。ＣＨＡ１１０は、キャッシュメモリ１３０にライトデータを記憶させた後、ホスト２０に書込み完了を報告する。ＤＫＡ１２０は、共有メモリ１４０に記憶されたライトコマンドに従って、キャッシュメモリ１３０に記憶されたデータを読出し、所定の記憶装置２１０に記憶させる。
【００８６】
キャッシュメモリ１３０は、例えば、ホスト２０から受信したユーザデータ等を記憶するものである。キャッシュメモリ１３０は、例えば、揮発性メモリまたは不揮発性メモリから構成される。共有メモリ１４０は、例えば、不揮発メモリから構成される。共有メモリ１４０には、後述する各種テーブルＴや管理情報等が記憶される。共有メモリ１４０を、バッテリまたは電池でバックアップされた揮発性メモリから構成してもよい。
【００８７】
共有メモリ１４０及びキャッシュメモリ１３０は、同一のメモリ基板上に混在して設けることができる。あるいは、メモリの一部をキャッシュ領域として使用し、他の一部を制御領域として使用することもできる。
【００８８】
接続部１５０は、各ＣＨＡ１１０と、各ＤＫＡ１２０と、キャッシュメモリ１３０及び共有メモリ１４０をそれぞれ接続させる。これにより、全てのＣＨＡ１１０，ＤＫＡ１２０は、キャッシュメモリ１３０及び共有メモリ１４０にそれぞれアクセス可能である。接続部１５０は、例えばクロスバスイッチ等として構成することができる。
【００８９】
ＳＶＰ１６０は、ＬＡＮ等の内部ネットワークＣＮ４を介して、各ＣＨＡ１１０及び各ＤＫＡ１２０とそれぞれ接続されている。また、ＳＶＰ１６０は、通信ネットワークＣＮ３を介して、管理端末３０に接続される。ＳＶＰ１６０は、記憶制御装置１０内部の各種状態を収集し、管理端末３０に提供する。なお、ＳＶＰ１６０は、ＣＨＡ１１０またはＤＫＡ１２０のいずれか一方にのみ接続されてもよい。ＳＶＰ１６０は、共有メモリ１４０を介して、各種のステータス情報を収集可能だからである。
【００９０】
コントローラ１００の構成は、上述した構成に限定されない。例えば、一つまたは複数の制御基板上に、ホスト２０との間のデータ通信を行う機能と、記憶装置２１０との間のデータ通信を行う機能と、データを一時的に保存する機能と、各種テーブル類を書換可能に保存する機能とを、それぞれ設ける構成でもよい。
【００９１】
記憶装置搭載部２００の構成について説明する。記憶装置搭載部２００は、複数の記憶装置２１０を備えている。各記憶装置２１０は、例えば、ハードディスクデバイスとして構成される。ハードディスクデバイスに限らず、フラッシュメモリデバイス、光磁気記憶装置、ホログラフィックメモリデバイス等を用いることができる場合もある。
【００９２】
ＲＡＩＤ構成等によっても相違するが、例えば、２個１組や４個１組等の所定数の記憶装置２１０によって、パリティグループ２２０が構成される。パリティグループ２２０は、パリティグループ２２０内の各記憶装置２１０がそれぞれ有する物理的記憶領域を仮想化したものである。なお、図中、便宜上、パリティグループをＶＤＥＶと表記する。
【００９３】
従って、パリティグループ２２０は、仮想化された物理的記憶装置である。パリティグループ２２０の有する物理的記憶領域には、論理デバイス２３０を一つまたは複数設定することができる。論理デバイス（LU：Logical Unit）２３０は、ＬＵＮ（Logical Unit Number ）に対応付けられて、ホスト２０に提供される。
【００９４】
本実施例では、記憶装置２１０として、ハードディスクデバイスを例に挙げて説明するが、ハードディスクデバイス以外の記憶装置も使用可能である。また、理解に資するために、フローチャート中では、記憶装置を「ディスク」と表現する。
【００９５】
図３は、ＣＨＡ１１０及びＤＫＡ１２０の構成を示すブロック図である。ＣＨＡ１１０は、例えば、プロトコルチップ１１１と、ＤＭＡ回路１１２と、マイクロプロセッサ１１３とを備えている。プロトコルチップ１１１は、ホスト２０との通信を行うための回路である。マイクロプロセッサ１１３は、ＣＨＡ１１０の全体動作を制御する。
【００９６】
ＤＭＡ回路１１２は、プロトコルチップ１１１とキャッシュメモリ１３０との間のデータ転送をＤＭＡ（Direct Memory Access）方式で行うための回路である。ＤＭＡ回路１１２は、ＬＡ付加部１１２Ａを備える。ＬＡ付加部１１２Ａは、ホスト２０から受信した論理ブロックにアドレスデータＬＡを設定して拡張論理ブロックを生成する。さらに、ＬＡ付加部１１２Ａは、キャッシュメモリ１３０から読み込まれた拡張論理ブロックからアドレスデータＬＡを除去して、論理ブロックに戻す。
【００９７】
ＤＫＡ１２０は、ＣＨＡ１１０と同様に、例えば、プロトコルチップ１２１と、ＤＭＡ回路１１２とマイクロプロセッサ１２３を備える。さらに、ＤＫＡ１２０は、パリティ生成回路１２４も備えている。
【００９８】
プロトコルチップ１２１は、各記憶装置２１０と通信するための回路である。マイクロプロセッサ１２３は、ＤＫＡ１２０の全体動作を制御する。パリティ生成回路１２４は、キャッシュメモリ１３０に記憶されたデータに基づいて所定の論理演算を行うことにより、パリティデータを生成する回路である。
【００９９】
ＤＭＡ回路１２２は、記憶装置２１０とキャッシュメモリ１３０との間のデータ転送を、ＤＭＡ方式で行うための回路である。ＤＭＡ回路１２２は、バッファメモリ（以下、バッファとも呼ぶ）１２２Ａを備えており、このバッファメモリ１２２Ａを介してＤＭＡ転送を実行する。即ち、キャッシュメモリ１３０と記憶装置２１０とは、バッファメモリ１２２Ａを介してデータを送受する。
【０１００】
ＤＭＡ回路１２２は、ＬＡ検査部１２２Ｂを備える。ＬＡ検査部１２２Ｂは、記憶装置２１０から読み出されるデータについて期待される論理アドレスの値と、そのデータに付加されているアドレスデータＬＡの値とを比較し、両方の値が一致する場合にのみ、記憶装置２１０から読み出されたデータをキャッシュメモリ１３０に転送させる。
【０１０１】
図４は、キャッシュメモリ１３０の管理方法を模式的に示す説明図である。図４の上側に示すように、ホスト２０から記憶制御装置１０に向けて送信されるデータは、一つまたは複数のスロットに分割することができる。
【０１０２】
ホスト２０から受信したデータを所定のブロック数で分割したものを、スロット３００と呼ぶ。各スロットは、所定数のブロック３０１から構成される。一つの論理ブロック３０１のサイズは、５１２バイトである。
【０１０３】
キャッシュメモリ１３０は、複数のセグメント１３１から構成される。一つのセグメント１３１のサイズは、例えば、６４ＫＢである。ホスト２０からのデータは、スロット単位で割り当てられるセグメント１３１に、記憶される。
【０１０４】
スロット管理テーブルＴ１０は、スロット３００とセグメント１３１との対応関係等を管理する（以下、スロット管理テーブルＴ１０をＳＬＣＢとも呼ぶ）。スロット管理テーブルＴ１０は、例えば、スロット番号と、パリティグループ番号と、セグメントアドレスと、ダーティビットマップと、スロットステータスとを対応付けて管理する。
【０１０５】
スロット番号とは、対象となるスロット３００を特定するための識別情報である。パリティグループ番号とは、対象のスロット３００に対応付けられるパリティグループ２２０を特定するための識別情報である。セグメントアドレスとは、その特定されたスロットに割り当てられるセグメントを識別するための情報である。即ち、セグメントアドレスとは、そのスロットのデータの格納先アドレスを示す。スロットにセグメントが割り当てられていない場合、セグメントアドレスの値には”０”が設定される。
【０１０６】
ダーティビットマップとは、そのスロット３００内の更新位置を特定するための更新位置管理情報である。スロットを構成する各論理ブロック毎にそれぞれ１ビットが割り当てられる。更新された論理ブロックには”１”が設定され、更新されない論理ブロックには”０”が設定される。従って、ダーティビットマップを参照することにより、そのスロットのどの論理ブロックが更新対象の論理ブロックであるかを知ることができる。
【０１０７】
スロットステータスとは、そのスロットのステータスを示す情報である。ステータスとしては、ダーティ状態、クリーン状態、フリー状態を挙げることができる。ダーティ状態とは、ダーティビットマップに一つ以上”１”が設定されている状態を示す。即ち、ダーティ状態とは、更新対象の論理ブロックが含まれているスロットを示す。クリーン状態とは、スロット内の更新対象データが記憶装置２１０に書き込まれて、デステージ処理が完了した状態を示す。フリー状態とは、そのスロットに割り当てられたセグメントを解放して、他のスロットに割当て可能な状態を示す。
【０１０８】
スロット管理テーブルＴ１０を用いることにより、ホスト２０から受信したデータがキャッシュメモリ１３０のどの領域に記憶されているか、更新データの有無、更新データの位置等を容易に管理できる。
【０１０９】
図５は、デバイスＩＤ−パリティグループ対応関係管理テーブルＴ２０と、パリティグループ管理テーブルＴ３０とをそれぞれ示す説明図である。これら各テーブルＴ２０，Ｔ３０は、共有メモリ１４０に記憶される。ＣＨＡ１１０，ＤＫＡ１２０は、各テーブルＴ２０，Ｔ３０の少なくとも一部を、ＣＨＡ１１０，ＤＫＡ１２０内のメモリにコピーして使用することができる。
【０１１０】
デバイスＩＤ−パリティグループ対応関係管理テーブルＴ２０は、論理デバイス２３０とパリティグループ２２０との対応関係を管理するテーブルである。このテーブルＴ２０は、デバイスＩＤ＿Ｃ２１と、パリティグループ番号Ｃ２２とを対応付けて管理する。デバイスＩＤ＿Ｃ２１は、論理デバイス２３０を識別するための情報である。パリティグループ番号Ｃ２２は、パリティグループ２２０を識別する情報である。
【０１１１】
パリティグループ管理テーブルＴ３０は、各パリティグループ２２０の構成を管理するテーブルである。パリティグループ管理テーブルＴ３０は、例えば、パリティグループ番号Ｃ３１と、スロットサイズＣ３２と、ＲＡＩＤレベルＣ３３と、データドライブ数Ｃ３４と、パリティサイクル内スロット数Ｃ３４と、ディスクタイプＣ３６とを対応付けて管理する。
【０１１２】
パリティグループ番号Ｃ３１とは、各パリティグループ２２０を識別するための情報である。スロットサイズＣ３２とは、そのパリティグループ２２０に対応付けられるスロットを構成する論理ブロックの数を示す。ＲＡＩＤレベルＣ３３とは、ＲＡＩＤ１〜ＲＡＩＤ６のような、ＲＡＩＤの種類を示す。データドライブ数Ｃ３４とは、データを記憶する記憶装置の数を示す。
【０１１３】
パリティサイクル内スロット数Ｃ３４とは、一つのパリティサイクルに含まれるスロットの数を示す。ディスクタイプＣ３６とは、そのパリティグループ２２０を構成する記憶装置２１０の種類を示す。
【０１１４】
図６は、分割位置を管理するためのテーブルＴ４０を示す説明図である。分割位置管理テーブルＴ４０は、例えば、いずれか一つまたは複数の記憶装置２１０内のシステム領域に記憶させることができる。あるいは、管理テーブルＴ４０を共有メモリ１４０またはキャッシュメモリ１３０に記憶させる構成でもよい。分割位置管理テーブルＴ４０は、例えば、管理番号Ｃ４１と、管理フラグＣ４２と、分割位置管理欄Ｃ４３とを対応付けて管理する。
【０１１５】
管理番号Ｃ４１とは、各記憶装置２１０における、所定ブロック数のサイズの領域（＝５２０×６４）を管理するための情報である。管理フラグＣ４２は、その所定ブロック数のサイズの領域に設定される分割位置ＰＤが有効か否かを示す情報である。分割位置ＰＤが有効な場合、管理フラグには”０”が設定される。分割位置ＰＤが無効な場合、管理フラグには”１”が設定される。例えば、停電等によって、管理テーブルＴ４０の内容の全部または一部が消失等した可能性がある場合、管理フラグには”１”が設定される。
【０１１６】
分割位置管理欄Ｃ４３には、所定ブロック数のデータを分割するための分割位置ＰＤが記憶される。分割位置ＰＤは、乱数または所定の算出式等に基づいて、拡張論理ブロックの番号＃０−＃６３の中からいずれか一つが選択される。なお、データの先頭（またはデータの末尾）に分割位置ＰＤが設定された場合、そのデータは分割されない。
【０１１７】
分割位置ＰＤの選択範囲を広げる方が、書き損じ障害時の旧データと論理アドレスが偶然一致してしまう可能性を少なくできるため、好ましい。偶然一致する可能性をできるだけ少なくさせるという観点では、例えば、前回の分割位置ＰＤに所定値を加減算する等の算出式を用いるのが好ましい。しかし、その場合は、前回の分割位置ＰＤを管理テーブルＴ４０から読み出す必要があるため、処理性能の低下を招くおそれがある。これに対し、乱数または疑似乱数を用いて分割位置ＰＤを決定する場合、４０９６分の１の確率で、旧データのアドレスデータＬＡの値と正しいデータに期待される論理アドレスとが一致する可能性がある。しかし、その場合、管理テーブルＴ４０から前回の分割位置ＰＤを読み出す必要がないため、処理性能を高めることができる。本実施例では、いずれの方式も採用可能である。
【０１１８】
図７は、スロット３００と記憶装置２１０とのマッピング状態を模式的に示す説明図である。図７（ａ）はＲＡＩＤ５の場合を、図７（ｂ）はＲＡＩＤ１の場合を示す。
【０１１９】
図７（ａ）は、３個のデータディスク（＃０，＃１，＃２）と１個のパリティディスク（＃３）とから、３Ｄ＋１ＰのＲＡＩＤ５を構成する場合を示す。データディスク（＃０）にはスロット＃０〜スロット＃７が、データディスク（＃１）にはスロット＃８〜スロット＃１５が、データディスク（＃２）にはスロット＃１６〜スロット＃２３が、右側のパリティディスク（＃３）にはパリティ＃０〜＃７が、それぞれ配置される。即ち、各データディスクには、それぞれ連続する８個のスロットが配置される。
【０１２０】
パリティが８スロット分（＃０〜＃７）のサイズを、パリティサイクルと呼ぶ。図示するパリティサイクルの次のパリティサイクルでは、ディスク（＃３）の左隣のディスク（＃２）にパリティが記憶される。さらに次のパリティサイクルでは、ディスク（＃１）にパリティが記憶される。このように、パリティデータを記憶するディスクは、パリティサイクル毎に移動する。図７（ａ）からわかるように、一つのパリティサイクルに含まれるスロットの数（テーブルＴ３０内のＣ３５）は、データディスクの数に８を乗ずることにより求められる。
【０１２１】
図７（ｂ）は、ＲＡＩＤ１の場合を示す。ＲＡＩＤ１では、正ディスク及び副ディスクの両方に、それぞれ同一のデータが記憶される。ＲＡＩＤ１の場合、パリティサイクルに含まれるスロットの数は、８となる。
【０１２２】
上述の通り、スロット３００と記憶装置２１０とのマッピング状態は、ＲＡＩＤレベル（Ｃ３３）及びデータドライブ数（Ｃ３４）とから求めることができる。従って、ホスト２０から受信したデータの格納先を、上記マッピング状態に基づいて算出できる。
【０１２３】
図８は、論理ブロック及び拡張論理ブロックの関係を示す説明図である。図８（ａ）に示すように、論理ブロック３０１は、５１２バイトのサイズを有する。ホスト２０及び記憶装置２１０は、論理ブロック３０１を最小管理単位として使用する。
【０１２４】
図８（ｂ）に示すように、ＣＨＡ１１０は、ホスト２０から受信したデータについて、各論理ブロック３０１毎に、それぞれ８バイトのアドレスデータ３１０を付加する。アドレスデータ３１０には、論理ブロック３０１の論理アドレスに基づいて算出される値が設定される。なお、アドレスデータの他にＬＲＣを論理ブロック３０１に対応付けることもできるが、ここでは説明を割愛する。
【０１２５】
５１２バイトの論理ブロック３０１に８バイトのアドレスデータＬＡを付加することにより、拡張論理ブロック３２０が生成される。拡張論理ブロック３２０は、キャッシュメモリ１３０に記憶される。ＣＨＡ１１０からホスト２０にデータを送信する場合、拡張論理ブロック３２０からアドレスデータ３１０が取り除かれ、論理ブロック３０１としてホスト２０に送信される。
【０１２６】
図８（ｃ）に示すように、例えば、ＦＣディスクやＳＡＳディスクのような、５２０バイト単位のフォーマットに設定可能な記憶装置２１０の場合、拡張論理ブロック３２０をそのまま記憶させることができる。
【０１２７】
図９は、ＳＡＴＡディスクのように、セクタ長が５１２バイトに固定されるディスクに、拡張論理ブロック３２０のデータを記憶させる様子を模式的に示す説明図である。
【０１２８】
図９（ａ）に示すように、ホスト２０から受信したデータは、各論理ブロック３０１毎にアドレスデータ３１０が付加され、拡張論理ブロック３２０が形成される。拡張論理ブロックの形式に変換されたデータは、キャッシュメモリ１３０に記憶される。
【０１２９】
図９（ｂ）に示すように、ＳＡＴＡディスクのような記憶装置２１０は、５１２バイト単位でデータを読み書きする。従って、５２０バイトの拡張論理ブロック３２０を、そのまま記憶装置に書き込むことはできない。
【０１３０】
そこで、論理ブロック３０１のサイズ（５１２バイト）と拡張論理ブロック３２０のサイズ（５２０バイト）との最小公倍数（３３２８０バイト）を、記憶装置２１０へのデータ入出力サイズとする。６４個の拡張論理ブロック３２０の合計サイズ（＝６４×５２０）は、６５個の論理ブロック３０１の合計サイズ（６５×５１２）に一致する。従って、６４個の拡張論理ブロック３２０を一塊りとして、記憶装置２１０に書き込んだり、記憶装置２１０から読み出すことができる。本実施例では、その最小公倍数に基づくサイズを、所定ブロック数のデータサイズと呼ぶことは既に述べた通りである。
【０１３１】
以上を前提として、最小公倍数単位でのデータアクセスを利用したリードモディファイライト処理を説明する。図９（ｃ）に示すように、ホスト２０から更新データの入った論理ブロック（ＮＥＷ）を受信すると、図９（ｄ）に示すように、ＣＨＡ１１０は、更新データの論理ブロック３０１にアドレスデータ３１０を付加して、拡張論理ブロック３２０を生成する。以下、更新対象のブロックを更新ブロックと呼ぶ場合がある。
【０１３２】
図９（ｅ）に示すように、ＤＫＡ１２０は、記憶装置２１０から旧データ（ＯＬＤ）を読出して、キャッシュメモリ１３０に記憶させる。上述の通り、６５個の論理ブロックからなるデータは、６４個の拡張論理ブロックからなるデータに等しい。従って、ＤＫＡ１２０は、記憶装置２１０から連続する６５個の論理ブロック３０１を読み出すことにより、拡張論理ブロック６４個分のデータを得ることができる。なお、データの読み出し時には、後述するように、アドレスデータの値と論理アドレスの期待値とを比較する検査が行われる。
【０１３３】
図９（ｆ）に示すように、キャッシュメモリ１３０上において、更新対象の拡張論理ブロック３２０に新データが配置される。その後、図９（ｇ）に示すように、新データの格納された６４個の拡張論理ブロック３２０は、６５個の論理ブロック３０１として記憶装置２１０に書き込まれる。なお、データの書込み時には、後述するように、分割位置ＰＤが改めて決定され、分割位置ＰＤの前後のデータが入れ替えられて、記憶装置２１０に書き込まれる。
【０１３４】
ＲＡＩＤ１の場合、旧データの書き込まれている論理ブロック３２０は、新データが記憶されている論理ブロック３２０に単純に置き換えられる。ＲＡＩＤ５等のようにパリティを使用する場合、旧データと新データ及び旧パリティから新パリティを生成する。新パリティは、データと同様に、６４個の拡張論理ブロック単位で記憶装置２１０に書き込まれる。新パリティの書込み時にも、パリティデータは分割位置ＰＤで分割されて、その前後が入れ替えられ、記憶装置２１０に書き込まれる。パリティ及び各データの分割位置ＰＤは、それぞれ異ならせることができる。あるいは、パリティ及び各データの分割位置ＰＤを同一とする構成としてもよい。
【０１３５】
図１０〜図２２に基づいて、本実施例の動作を説明する。以下に示す各フローチャートは、処理の要部を示しており、実際のコンピュータプログラムと相違する場合がある。いわゆる当業者であれば、図示されたステップを入れ替えたり、変更したり、削除したり、あるいは、新規なステップを追加したりできるであろう。
【０１３６】
図１０は、ライトコマンドの処理を示すフローチャートである。この処理は、ＣＨＡ１１０によって実行される。
【０１３７】
ＣＨＡ１１０は、ホスト２０からライトコマンドを受信すると（Ｓ１０）、書込み開始アドレスをパリティグループ番号とスロット番号の組合せに変換する（Ｓ１１）。ライトコマンドは、論理デバイスＩＤ、書込み開始アドレス、書込みサイズを指定している。従って、ＣＨＡ１１０は、指定されるデバイスＩＤに基づいて、デバイスＩＤ−パリティグループ対応関係管理テーブルＴ２０を参照することにより、書込先のパリティグループ番号を特定する。さらに、ＣＨＡ１１０は、特定されたパリティグループ番号に基づいて、パリティグループ管理テーブルＴ３０を参照することにより、書込み先のスロット番号を検出することができる。
【０１３８】
ＣＨＡ１１０は、転送終了スロット番号を算出する（Ｓ１２）。転送終了スロット番号とは、ライトデータの最後のスロット番号である。ＣＨＡ１１０は、書込み開始アドレスに書込みサイズを加算した値を、スロットサイズで除算することにより、そのライトデータの最後のスロットの番号を求めることができる。
【０１３９】
ＣＨＡ１１０は、書込み対象のスロットに対応するＳＬＣＢが既に存在するか否かを判定する（Ｓ１３）。即ち、ＣＨＡ１１０は、書込み対象スロットに、キャッシュメモリ１３０のセグメント１３１が割り当てられているか否かを判定する（Ｓ１３）。
【０１４０】
書込み対象スロットにＳＬＣＢが未だ割り当てられていない場合（S13:NO）、ＣＨＡ１１０は、その書込み対象スロットにＳＬＣＢを一つ割当てる（Ｓ１４）。ＣＨＡ１１０は、その割り当てたＳＬＣＢに、空いているセグメント１３１のアドレスを設定する（Ｓ１５）。これにより、書込み対象スロットとセグメントとが対応付けられ、書込み対象スロットのデータをキャッシュメモリ１３０に記憶させるための準備が整う。
【０１４１】
書込み対象スロットにＳＬＣＢが既に割り当てられている場合（S13:YES）、Ｓ１４及びＳ１５はスキップされ、Ｓ１６に移る。
【０１４２】
ＣＨＡ１１０は、ライトデータの受信に先立って、書込み対象スロットのスロットステータスをダーティ状態に設定する（Ｓ１６）。次に、ＣＨＡ１１０は、ホスト２０から受信したライトデータ（書込み対象スロットのデータ）を、書込み対象スロットに割り当てられているセグメントアドレスに転送する（Ｓ１７）。これにより、ホスト２０から受信したライトデータは、キャッシュメモリ１３０内の所定セグメントに記憶される。
【０１４３】
なお、ホスト２０から受信したライトデータをキャッシュメモリ１３０内の所定セグメントに転送して記憶させる際に、そのライトデータには各論理ブロック３０１毎にそれぞれアドレスデータ３１０が付加される（Ｓ１７）。従って、キャッシュメモリ１３０には、拡張論理ブロック３２０の形式でライトデータが記憶される。
【０１４４】
ＣＨＡ１１０は、ライトデータによって更新された論理ブロック３０１について、ダーティビットマップをオン状態（”１”）に設定する（Ｓ１８）。これにより、その書込み対象スロット内のどの論理ブロック３０１に、更新データが格納されているかを管理することができる。
【０１４５】
ＣＨＡ１１０は、本処理の対象とするスロットの番号が、Ｓ１２で求めた転送終了スロット番号に一致するか否かを判定する（Ｓ１９）。処理対象のスロット番号と転送終了スロット番号とが不一致の場合（S19:NO）、ＣＨＡ１１０は、処理対象のスロット番号を一つ増加させて（Ｓ２０）、Ｓ１３に戻る。両方のスロット番号が一致すると（S19:YES）、本処理は終了する。
【０１４６】
ホスト２０が、連続する複数スロットによってライトデータを書き込む場合、即ち、ホスト２０がシーケンシャルライトを行う場合、Ｓ１３〜Ｓ１９がスロット数に応じて繰り返し実行される。ホスト２０が、一つのスロット内の一つ又は複数の論理ブロック３０１を更新しようとする場合、Ｓ１３〜Ｓ１９がそれぞれ一回だけ実行される。
【０１４７】
図１１に基づいて、デステージ処理を説明する。デステージ処理とは、キャッシュメモリ１３０上のデータを記憶装置２１０に書き込む処理である。デステージ処理は、ＤＫＡ１２０によって実行される。
【０１４８】
デステージ処理では、更新対象スロットの旧データを読み出し、ホスト２０から受信した更新データと旧データとをマージし、このマージされたデータを記憶装置２１０に書き込む。なお、更新対象スロットの全ブロックが更新される場合、記憶装置２１０から旧データを読み出す必要はない。ここでは、スロット内の幾つかのブロックが更新される場合を例に挙げて説明する。
【０１４９】
ＤＫＡ１２０は、共有メモリ１４０内のＳＬＣＢにアクセスし、スロットステータスがダーティ状態に設定されているＳＬＣＢが存在するか否かを確認する。ＤＫＡ１２０は、スロットステータスがダーティ状態に設定されたＳＬＣＢを検出すると（Ｓ３０）、そのＳＬＣＢからスロット番号及びパリティグループ番号を取得する（Ｓ３１）。
【０１５０】
ＤＫＡ１２０は、パリティグループ番号に基づいてパリティグループ管理テーブルＴ３０を参照することにより、そのパリティグループのディスクタイプを取得する。ＤＫＡ１２０は、そのディスクタイプがＦＣディスクまたはＳＡＳディスクであるか否かを判定する（Ｓ３２）。
【０１５１】
ディスクタイプがＳＡＳディスクまたはＦＣディスクのいずれでもない場合（S32:NO）、キャッシュメモリ１３０内の拡張論理ブロック３２０のサイズと記憶装置２１０内の論理ブロック３０１のサイズとは、一致しない。
【０１５２】
そこで、ＤＫＡ１２０は、記憶装置２１０から読み出される旧データの境界を、キャッシュメモリ１３０内の拡張論理ブロック３２０の境界に一致させるべく、バウンダリ補正処理を行う（Ｓ３３）。バウンダリ補正処理の詳細は、図１２で後述する。
【０１５３】
ＤＫＡ１２０は、バウンダリ補正処理の終了後に、正ディスク（正記憶装置）及び副ディスク（副記憶装置）の両方についてデステージ処理を行う（Ｓ３４）。デステージ処理では、キャッシュメモリ１３０からバッファメモリ１２２Ａを経由して記憶装置２１０にデータが書き込まれる。デステージ処理（Ｓ３４）の詳細は、図１４で後述する。
【０１５４】
ところで、ディスクタイプがＳＡＳディスクまたはＦＣディスクのいずれか場合（S32:YES）、ＤＫＡ１２０は、ＳＡＳディスク用のデステージ処理またはＦＣディスク用のデステージ処理を実行する（Ｓ３５）。図７で述べたように、ＳＡＳディスク及びＦＣディスクは、セクタ長を５２０バイトに設定できる。
【０１５５】
従って、キャッシュメモリ１３０内のデータ管理単位である拡張論理ブロック３２０のサイズと、ＦＣディスク２１０のデータ入出力単位とは一致する。このため、ＦＣディスクとキャッシュメモリ１３０との間では、バウンダリ補正処理を行うことなく、データを転送することができる。従って、ＦＣディスク用のデステージ処理については、これ以上の説明を省略する。ＳＡＳディスクの場合もＦＣディスクの場合と同様であるので、その説明を省略する。
【０１５６】
図１２は、図１１中にＳ３３で示すバウンダリ補正処理の詳細を示すフローチャートである。このバウンダリ補正処理では、記憶装置２１０からキャッシュメモリ１３０にデータを転送する際に、データの境界を補正する。
【０１５７】
ＤＫＡ１２０は、転送対象スロットのＳＬＣＢを参照し、そのＳＬＣＢに設定されているダーティビットマップの状態を確認する（Ｓ４０）。ＤＫＡ１２０は、バウンダリ補正の対象となるデータ（ダーティ状態のデータ）について、その転送開始位置及び転送サイズを、６４個の拡張論理ブロックのデータサイズに一致させる（Ｓ４１）。ＤＫＡ１２０は、旧データを記憶装置２１０から読み出して（Ｓ４２）、旧データと新データとをマージする（Ｓ４３）。
【０１５８】
図１３は、データの両端を所定ブロック数のサイズに一致させて書き込む様子を示す説明図である。図１３（ａ）に示す例では、ライトデータは、３個の所定ブロック数の領域にまたがって書き込まれる。以下の説明では、拡張論理ブロック６４個分のデータをＣＨＵＮＫと呼ぶ場合がある。
【０１５９】
図１３（ｂ）に示すように、ＤＫＡ１２０は、バウンダリを一致させるために、記憶装置２１０から旧データを読み出す。記憶装置２１０から旧データを読み出す範囲は、先頭ＣＨＵＮＫの先頭ブロックから３番目のＣＨＵＮＫの最終ブロックまでの範囲である。また、旧データを読み出す場合には、後述のリード処理の例で示すように、各ＣＨＵＮＫ毎に、分割位置ＰＤに基づいたＬＡ値の検査が行われる。そして、図１３（ｃ）に示すように、ＤＫＡ１２０は、ライトデータと旧データとをマージさせて、拡張論理ブロック６４個分のサイズの３倍のデータを生成し、記憶装置２１０に書き込む。
【０１６０】
図１４は、図１１中にＳ３４で示されるデステージ処理の詳細を示すフローチャートである。この処理は、正記憶装置及び副記憶装置のそれぞれについて実行される。本処理では、拡張論理ブロック６４個分のデータ（１ＣＨＵＮＫのデータ）を複数書き込む場合を例に挙げて説明する。なお、後述の転送起動パラメータＬ１．Ｌ２等については、図１５の説明図が適宜参照される。
【０１６１】
ＤＫＡ１２０は、処理対象のＣＨＵＮＫとして、先頭のＣＨＵＮＫを設定する（Ｓ５０）。図１５（ａ）に示すように、ＤＫＡ１２０は、処理対象ＣＨＵＮＫを分割するための分割位置ＰＤを決定し、その決定された分割位置ＰＤを管理テーブルＴ４０に登録する（Ｓ５１）。分割位置ＰＤよりも前側のデータを前半部分ＦＡのデータと呼び、分割位置ＰＤよりも後側のデータを後半部分ＢＡのデータと呼ぶ。図１５の例では、＃０−＃４の合計５個の拡張論理ブロック分のデータが前半部分ＦＡのデータとなり、＃５−＃６３の合計５９個の拡張論理ブロック分のデータが後半部分ＢＡのデータとなっている。
【０１６２】
ＤＫＡ１２０は、分割位置ＰＤに基づいて、ＤＭＡ回路１２２に渡すための転送起動パラメータＬ１，Ｌ２を設定する（Ｓ５２）。転送起動パラメータとは、ＤＭＡ回路がデータ転送を行うために必要なパラメータである。
【０１６３】
一方の転送起動パラメータＬ１は、後半部分ＢＡのデータをＤＭＡ回路１２２によって転送させるためのパラメータである。他方の転送起動パラメータＬ２は、前半部分ＦＡのデータをＤＭＡ回路１２２により転送させるためのパラメータである。
【０１６４】
本実施例では、前半部分ＦＡのデータと後半部分ＢＡのデータとを入れ替えて、後半部分ＢＡのデータが前側に位置し、かつ、前半部分ＦＡのデータが後側に位置するように、記憶装置２１０に書き込む。従って、ＤＭＡ回路１２２に最初に入力される転送起動パラメータＬ１には、後半部分ＢＡを転送するためのパラメータが設定される。ＤＭＡ回路１２２に次に入力される転送起動パラメータＬ２には、前半部分ＦＡのデータを転送するためのパラメータが設定される。
【０１６５】
後半部分ＢＡのデータを転送するための転送起動パラメータＬ１では、転送開始アドレスとして、処理対象ＣＨＵＮＫの先頭キャッシュアドレス（キャッシュメモリ１３０上のアドレス）ＳＡに、分割位置ＰＤと拡張論理ブロックのサイズ５２０バイトを乗算した値が加算される（転送開始アドレス＝ＳＡ＋５２０×ＰＤ）。また、転送起動パラメータＬ１では、転送サイズとして、１ＣＨＵＮＫの合計ブロック数（＝６４）から分割位置ＰＤの値を差し引いた値に、５２０バイトを乗算した値が設定される（転送サイズ＝（６４−ＰＤ）×５２０）。
【０１６６】
前半部分ＦＡのデータを転送するための転送起動パラメータＬ２では、転送開始アドレスとして、処理対象ＣＨＵＮＫの先頭キャッシュアドレスＳＡが設定される（転送開始アドレス＝ＳＡ）。また、転送起動パラメータＬ２では、転送サイズとして、分割位置ＰＤに５２０バイトを乗算した値が設定される（転送サイズ＝５２０×ＰＤ）。
【０１６７】
図１４に戻る。一つのＣＨＵＮＫについて転送起動パラメータＬ１，Ｌ２を設定し終わると（Ｓ５２）、ＤＫＡ１２０は、処理対象ＣＨＵＮＫを一つ進める（Ｓ５３）。ＤＫＡ１２０は、記憶装置２１０に書き込むべき全てのＣＨＵＮＫについて、転送起動パラメータＬ１，Ｌ２を設定したか否かを判定する（Ｓ５４）。転送起動パラメータＬ１，Ｌ２が未だ設定されていないＣＨＵＮＫが有る場合（S54:NO）、ＤＫＡ１２０は、Ｓ５１〜Ｓ５３のステップを繰り返す。
【０１６８】
ＤＫＡ１２０は、全てのＣＨＵＮＫについて転送起動パラメータＬ１，Ｌ２をそれぞれ設定すると（S54:YES）、記憶装置２１０にライトコマンドを発行する（Ｓ５５）。ＤＫＡ１２０は、書込み準備が完了した旨の通知を記憶装置２１０から受領すると（Ｓ５６）、ＤＭＡ回路１２２に各転送起動パラメータＬ１，Ｌ２を入力して、ＤＭＡ転送を起動させる（Ｓ５８）。
【０１６９】
これにより、図１５の下側に示すように、各ＣＨＵＮＫは、それぞれ前半部分ＦＡのデータと後半部分ＢＡのデータとが入れ替わって、記憶装置２１０に記憶される。上記の処理は副記憶装置についても同様に行われる。
【０１７０】
図１６は、正記憶装置と副記憶装置とで、同一ＣＨＵＮＫのデータの分割位置が異なる場合を示す。正記憶装置に記憶されるデータは、分割位置ＰＤ１で分割されて、前後の順番が入れ替えられる。副記憶装置に記憶されるデータは、別の分割位置ＰＤ２で分割されて、前後の順番が入れ替えられる。
【０１７１】
図１７は、リード処理を示すフローチャートである。ＣＨＡ１１０は、ホスト２０からリードコマンドを受領すると（Ｓ７０）、ＤＫＡ１２０にデータの読出しを指示する（Ｓ７１）。この指示には、例えば、スロット番号と、パリティグループ番号と、読出し対象の先頭ブロック番号と、ブロック数とが含まれる。
【０１７２】
ＤＫＡ１２０は、ＣＨＡ１１０からの指示を受領すると（Ｓ７２）、パリティグループ番号に基づいて、ＲＡＩＤレベル及びディスクタイプをパリティグループ管理テーブルＴ３０から取得する（Ｓ７３）。
【０１７３】
ＤＫＡ１２０は、ディスクタイプがＳＡＳディスクまたはＦＣディスクのいずれかであるか否かを判定し（Ｓ７４）、ＳＡＳディスクまたはＦＣディスクのいずれかであると判定した場合（S74:YES）、ＳＡＳディスク用のリード処理またはＦＣディスク用のリード処理を実行する（Ｓ７５）。
【０１７４】
読出し先の記憶装置２１０がＳＡＳディスクまたはＦＣディスク以外のディスクの場合（S74:NO）、ＤＫＡ１２０は、読出し先の記憶装置２１０を特定し（Ｓ７６）、リードデータを格納するためのＳＬＣＢ及びキャッシュセグメント１３１を用意する（Ｓ７７）。ＤＫＡ１２０は、記憶装置２１０からキャッシュメモリ１３０へのデータ転送を実行する（Ｓ７８）。
【０１７５】
図１８は、図１７中にＳ７８として示される、記憶装置２１０からキャッシュメモリ１３０へのデータ転送を行う処理のフローチャートである。ここでは、複数のＣＨＵＮＫのデータを読み出す場合を説明する。
【０１７６】
ＤＫＡ１２０は、処理対象ＣＨＵＮＫを先頭ＣＨＵＮＫに設定する（Ｓ９０）。ＤＫＡ１２０は、処理対象ＣＨＵＮＫに設定されている分割位置ＰＤを分割位置管理テーブルＴ４０から読み出す（Ｓ９１）。
【０１７７】
ＤＫＡ１２０は、図１４（ｂ）で示した、バウンダリ補正を行うリード処理と同様に、リード開始ブロックと、リードされるブロック数（リードブロック数）とを、拡張論理ブロック６４個分のバウンダリに一致させるように、それぞれ設定する（Ｓ９２）。
【０１７８】
リード範囲を拡張した後の読み出し開始ブロックは、例えば、次式で算出される。
拡張後リード開始ブロック＝拡張前リード開始ブロック／６４↓×６４
（↓は小数点切り捨てを示す）
拡張されるリードブロック数は、次式で算出される。
拡張後リードブロック数）＝↓（拡張前リード開始ブロック＋拡張前リードブロック数＋６３）／６４↓×６４−拡張後リード開始ブロック
【０１７９】
ＤＫＡ１２０は、分割位置ＰＤを管理テーブルＴ４０から正常に読み出すことができたか否かを判定する（Ｓ９３）。分割位置ＰＤを管理テーブルＴ４０から正常に読み出すことができなかった場合、または、分割位置ＰＤの管理フラグが無効に設定されていた場合のいずれかの場合（S93:NO）、ＤＫＡ１２０は、図２１で後述する分割位置復元処理を実行する（Ｓ１１０）。
【０１８０】
管理フラグが有効に設定されている分割位置ＰＤを管理テーブルＴ４０から正常に読み出すことができた場合（S93:YES）、ＤＫＡ１２０は、その分割位置ＰＤに基づいて、ＤＭＡ回路１２２に入力するための転送起動パラメータＬ１ａ，Ｌ２ａをそれぞれ設定する（Ｓ９４）。
【０１８１】
ＤＫＡ１２０は、処理対象ＣＨＵＮＫを一つ進め（Ｓ９５）、読み出すべき全てのＣＨＵＮＫについて転送起動パラメータＬ１ａ，Ｌ２ａを設定するまで（Ｓ９６）、Ｓ９１〜Ｓ９５のステップを繰り返し実行する。読み出すべき全てのＣＨＵＮＫについて転送起動パラメータＬ１ａ，Ｌ２ａを設定し終えると（S96:YES）、ＤＫＡ１２０は、読出し先の記憶装置２１０にリードコマンドを発行し（Ｓ９７）、その記憶装置から準備完了通知を受領する（Ｓ９８）。ＤＫＡ１２０は、各転送起動パラメータＬ１ａ，Ｌ２ａをＤＭＡ回路１２２に入力して、ＤＭＡ転送を起動させる（Ｓ９９）。
【０１８２】
図１９は、記憶装置２１０からキャッシュメモリ１３０にデータを転送する場合を示す説明図である。図１４，図１５で述べたように、記憶装置２１０には、前半部分ＦＡのデータと後半部分ＢＡのデータとが場所を入れ替えて記憶されている。ＤＭＡ回路１２２に最初に入力される転送起動パラメータＬ１ａには、前半部分ＦＡのデータを読み出すためのパラメータが記憶される。次に入力される転送起動パラメータＬ２ａには、後半部分ＢＡのデータを読み出すためのパラメータが記憶される（Ｓ５５）。
【０１８３】
前半部分ＦＡのデータを転送するための転送起動パラメータＬ１ａでは、転送開始アドレスとして、処理対象ＣＨＵＮＫの先頭キャッシュアドレスＳＡに、分割位置ＰＤと拡張論理ブロックのサイズ５２０バイトを乗算した値が加算される（転送開始アドレス＝ＳＡ＋５２０×ＰＤ）。また、転送起動パラメータＬ１では、転送サイズとして、１ＣＨＵＮＫの合計ブロック数から分割位置ＰＤの値を差し引いた値に、５２０バイトを乗算した値が設定される（転送サイズ＝（６４−ＰＤ）×５２０）。
【０１８４】
後半部分ＢＡのデータを転送するための転送起動パラメータＬ２ａでは、転送開始アドレスとして、処理対象ＣＨＵＮＫの先頭キャッシュアドレスＳＡが設定される（転送開始アドレス＝ＳＡ）。また、転送起動パラメータＬ２ａでは、転送サイズとして、分割位置ＰＤに５２０バイトを乗算した値が設定される（転送サイズ＝５２０×ＰＤ）。
【０１８５】
これにより、図１９に示すように、記憶装置２１０から正しい順番で読み出されたデータがキャッシュメモリ１３０に転送されて、元のデータを再現する。
【０１８６】
図２０は、各論理ブロックに付加されたアドレスデータＬＡと、分割位置ＰＤに基づいて算出される論理アドレスの期待値とに基づいて、記憶装置２１０から読み出されたデータが正しいか否かを判定するための、ＬＡ検査処理を示す。この処理は、ＤＫＡ１２０内のＬＡ検査部１２２Ｂにより実行される。便宜上、動作の主体をＤＫＡ１２０として説明する。
【０１８７】
ＤＫＡ１２０は、分割位置ＰＤに基づいて、記憶装置２１０から読み出される拡張論理ブロックの論理アドレスの期待値を算出する（Ｓ１００）。なお、分割位置ＰＤに基づいて算出するのは、先頭の拡張論理ブロックのみでよい。後続する他の拡張論理ブロックについては、先頭の論理アドレスを所定値ずつインクリメントさせることにより算出できるためである。
【０１８８】
ＤＫＡ１２０は、分割位置ＰＤに基づいて、転送リスト毎に、記憶装置２１０から読み出される拡張論理ブロックの論理アドレスの期待値を算出する（Ｓ１００）。なお、転送リスト毎に、先頭の拡張論理ブロックについてのみ、分割位置ＰＤに基づいて論理アドレスの期待値を算出する。
【０１８９】
図１９に示す例では、転送リストＬ１の期待値は”５”であり、転送リストＬ２の期待値は”０”である。１つの転送リスト内の、後続する他の拡張論理ブロックについては、先頭の論理アドレスを所定値ずつインクリメントさせることにより、論理アドレスを算出することができる。
【０１９０】
ＤＫＡ１２０は、読み出された拡張論理ブロックの有するアドレスデータＬＡの値と、その拡張論理ブロックに設定されているべきアドレスデータの値とが一致するか否かを判定する（Ｓ１０１）。そして、両方の値が一致する場合（S101:YES）、ＤＫＡ１２０は、記憶装置２１０から読み出されたデータを、キャッシュメモリ１３０に転送させる（Ｓ１０２）。
【０１９１】
これに対し、読み出された拡張論理ブロックの有するアドレスデータＬＡの値が、その期待値と一致しない場合（S101:NO）、書き損じ障害等が生じた場合であると判定することができる。
【０１９２】
そこで、ＲＡＩＤ５等の場合、ＤＫＡ１２０は、同一パリティグループに属する他の記憶装置２１０から、前記Ｓ９０−Ｓ９８に基づいて、同一ストライプに属する他のデータ及びパリティを読み出す（Ｓ１０３）。
【０１９３】
ＤＫＡ１２０は、読み出されたデータの論理アドレスの期待値を分割位置ＰＤに基づいて決定し（Ｓ１０４）、論理アドレスの期待値とそのデータに付加されている実際のアドレスデータＬＡの値とが一致するか否かを判定する（Ｓ１０５）。
【０１９４】
論理アドレスの期待値（換言すれば、アドレスデータＬＡの期待値）と実際のアドレスデータＬＡの値とが一致する場合（S105:YES）、ＤＫＡ１２０は、データ及びパリティに基づいて所定の論理演算を行うことにより、Ｓ１０１でエラーの検出されたデータを復元させる。この復元されたデータを、本実施例では、コレクションリードされたデータと呼ぶ。
【０１９５】
ＤＫＡ１２０は、コレクションリードされたデータをキャッシュメモリ１３０に転送させる（Ｓ１０６）。さらに、ＤＫＡ１２０は、コレクションリードされたデータを、Ｓ１０１でエラーの検出された記憶装置２１０の所定領域に記憶させる（Ｓ１０７）。所定位置とは、Ｓ１０１でエラーの検出された領域である。
【０１９６】
一方、コレクションリードが失敗した場合（S105:NO）、つまり、同一ストライプに属する他のデータまたはパリティのいずれかの読み出しにエラーが検出された場合は、エラー処理を行う（Ｓ１０８）。このエラー処理では、例えば、回復不能なエラーが生じた旨を、管理端末３０を介してユーザに通知する。なお、２つの異なるパリティを使用するＲＡＩＤ６の場合は、２つまでのリードエラーに対応可能である。
【０１９７】
図２１は、図１８中にＳ１１０で示される、分割位置復元処理を示すフローチャートである。本処理では、分割位置ＰＤを管理テーブルＴ４０から正常に読み出すことができなかった場合に、以下に述べるように、その分割位置ＰＤの値を調査して復元する。
【０１９８】
ＤＫＡ１２０は、分割位置ＰＤの値に”０”を設定し、分割位置ＰＤが０であるとの仮定の下で、記憶装置２１０から拡張論理ブロックのデータを読み出す（Ｓ１２０）。ＤＫＡ１２０は、読み出された拡張論理ブロックの有するアドレスデータＬＡの値と、分割位置”０”から予測される期待値とが一致するか否かを判定する。両方の値が一致しないエラーを、便宜上、ＬＡエラーと呼ぶことにする。
【０１９９】
ＤＫＡ１２０は、ＬＡエラーが発生したか否かを判定する（Ｓ１２１）。ＬＡエラーが発生しなかった場合（S121:NO）、たまたま偶然に、分割位置ＰＤの値が”０”であった場合である。そこで、ＤＫＡ１２０は、その検出された分割位置の値”０”を管理テーブルＴ４０に記憶させる（Ｓ１２６）。
【０２００】
確率的には、Ｓ１２１ではＮＯと判定される可能性の方が高い。ＬＡエラーが検出された場合（S121:YES）、ＤＫＡ１２０は、先頭の拡張論理ブロックでＬＡエラーが検出されたか否かを判定する（Ｓ１２２）。
【０２０１】
もしも、先頭ブロック以外のブロックでＬＡエラーが検出された場合（S122:NO）、そのＣＨＵＮＫのデータは損傷している場合なので、エラー処理を行う（Ｓ１２７）。そのエラー処理では、上述のように、コレクションリードを行ってデータを復元し、復元されたデータを元の記憶装置２１０の元の領域に書き込む。
【０２０２】
先頭ブロックでＬＡエラーが検出された場合（S122:YES）、ＤＫＡ１２０は、エラーの検出された先頭ブロックに実際に含まれているアドレスデータＬＡの値に基づいて、分割位置ＰＤを算出する（Ｓ１２３）。つまり、分割位置ＰＤは、先頭ブロックのアドレスデータＬＡの値に等しいとされる。
【０２０３】
ＤＫＡ１２０は、Ｓ１２３で新たに算出された分割位置ＰＤに基づいて、記憶装置２１０から別の拡張論理ブロックを読み出し（Ｓ１２４）、ＬＡエラーが検出されたか否かを判定する（Ｓ１２５）。新たに算出された分割位置ＰＤに従ってデータを読み出しても、ＬＡエラーが生じる場合は（S125:YES）、そのＣＨＵＮＫのデータが本当に壊れている場合である。そこで、上述のエラー処理を実行する（Ｓ１２７）。
【０２０４】
ＬＡエラーが検出されなかった場合（S125:NO）、Ｓ１２３で新たに算出された分割位置ＰＤが正しい場合である。そこで、ＤＫＡ１２０は、その新たに算出された分割位置ＰＤを管理テーブルＴ４０に格納させる（Ｓ１２６）。
【０２０５】
図２２は、メモリ障害等が生じた場合に分割位置ＰＤを復元するための処理を示すフローチャートである。ここでは、分割位置管理テーブルＴ４０は、例えば、キャッシュメモリ１３０に記憶されているものとする。
【０２０６】
キャッシュメモリ１３０は、図示せぬバッテリ等でバックアップされているため、停電等により、記憶制御装置１０への通電が停止した場合でも、所定時間は記憶内容を保持できる。しかし、例えば、停電時間がバックアップ可能時間を上回ったような場合には、分割位置管理テーブルＴ４０の全部または一部が失われてしまい、次回の起動時に、正常にデータを読み出すことができない可能性がある。あるいは、分割位置ＰＤは管理テーブルＴ４０に記憶されているが、その値を信用できない場合もある。
【０２０７】
そこで、ＤＫＡ１２０は、例えば、停電等のような管理テーブルＴ４０の信頼性に影響を与える所定の異常が検出された場合（S140:YES）、その所定の異常が発生した旨を、共有メモリ１４０または記憶装置２１０のような不揮発性の記憶領域に記憶させて、処理を終了する（Ｓ１４１）。
【０２０８】
障害が解消した後の起動時において、ＤＫＡ１２０は、分割位置管理テーブルＴ４０内の全ての管理フラグを無効に設定する（Ｓ１５１）。ＤＫＡ１２０は、管理フラグが無効に設定された各分割位置ＰＤを、図２１に示す分割位置復元処理により復元させ（Ｓ１５２）、復元された分割位置ＰＤの管理フラグを有効に設定する（Ｓ１５３）。
【０２０９】
ＤＫＡ１２０は、全ての管理フラグが有効に設定されるまで（Ｓ１５４）、Ｓ１５２，Ｓ１５３のステップを繰り返し実行する。
【０２１０】
このように構成される本実施例によれば、読み出し時に、エラーの有無を速やかに検出でき、書き込んだばかりのデータを記憶装置２１０から読み出して検査する構成に比べて、処理時間を短縮でき、かつ、信頼性を向上できる。
【０２１１】
本実施例では、読み出し時に、書込み時で生じたエラーを比較的容易に検出することができるため、ＳＡＴＡディスクのような信頼性の劣る記憶装置２１０を用いた場合であっても、記憶制御装置１０全体としての信頼性を低下させずに、応答性能を高めることができ、使い勝手が向上する。
【０２１２】
本実施例では、分割位置ＰＤを管理するためのテーブルＴ４０から分割位置ＰＤを正常に読み出すことができない場合等に、先頭ブロックのアドレスデータＬＡの値に基づいて、その分割位置ＰＤを復元させることができる。従って、停電等の障害が生じた場合にも対応することができ、信頼性が向上する。分割位置管理テーブルＴ４０を複数の記憶領域に保存する構成も考えられるが、その場合は、メモリ資源が消費される。これに対し、本実施例では、管理テーブルＴ４０の冗長記憶を行わずに、分割位置をアドレスデータに基づいて自動的に復旧させることができ、使い勝手が向上する。
【０２１３】
なお、本発明は、上述した実施形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【図面の簡単な説明】
【０２１４】
【図１】本発明の実施形態の全体概念を示す説明図である。
【図２】情報処理システムの全体構成を示すブロック図である。
【図３】コントローラの構成を示すブロック図である。
【図４】スロットとキャッシュの関係を示す説明図である。
【図５】デバイスＩＤとパリティグループとの対応関係を管理するテーブル及びパリティグループの構成を管理するテーブルをそれぞれ示す説明図である。
【図６】分割位置を管理するためのテーブルの構成を示す説明図である。
【図７】記憶装置に配置されるスロットの様子を示す説明図である。
【図８】論理ブロックに保証コードを付加して拡張論理ブロックを生成する様子を示す説明図である。
【図９】論理ブロックのサイズと拡張論理ブロックのサイズとの最小公倍数に基づいて、記憶装置に記憶されたデータを更新する様子を示す説明図である。
【図１０】ライト処理を示すフローチャートである。
【図１１】ＲＡＩＤ１の場合のデステージ処理を示すフローチャートである。
【図１２】図１１中のＳ３３の詳細を示すフローチャートである。
【図１３】拡張論理ブロック６４個分のサイズでデータを書き込むことにより、記憶装置に書き込まれるデータの両端を論理ブロックの境界に一致させる様子を示す説明図である。
【図１４】図１１中のＳ３４の詳細を示すフローチャートである。
【図１５】分割位置の前後でデータを入れ替えて記憶装置に書き込む様子を示す説明図である。
【図１６】分割位置は各記憶装置毎に決定されることを示す説明図である。
【図１７】リード処理を示すフローチャートである。
【図１８】図１７中のＳ７８の詳細を示すフローチャートである。
【図１９】記憶装置から読み出したデータの前後を入れ替えてキャッシュメモリに転送する様子を示す説明図である。
【図２０】ブロックに付加されているアドレスデータの値と、そのブロックのアドレスデータの期待値（そのブロックの期待される論理アドレス）とに基づいて、エラーを検出する処理を示すフローチャートである。
【図２１】分割位置を復元するための処理を示すフローチャートである。
【図２２】障害発生後に分割位置を復元するための処理を示すフローチャートである。
【符号の説明】
【０２１５】
１：記憶制御装置、１Ａ：ホスト通信制御部、１Ｂ：デバイス通信制御部、１Ｃ：キャッシュメモリ、１Ｄ：アドレスデータ付加部、２：記憶装置、３：ホストコンピュータ、４：バッファメモリ、５：アドレスデータ検査部、１０：記憶制御装置、２０：ホストコンピュータ、３０：管理端末、１００：コントローラ、１１０：チャネルアダプタ、１１１：プロトコルチップ、１１２：ＤＭＡ回路、１１２Ａ：アドレスデータ付加部、１１３：マイクロプロセッサ、１２０：ディスクアダプタ、１２１：プロトコルチップ、１２２：ＤＭＡ回路、１２２Ａ：バッファメモリ、１２２Ｂ：アドレスデータ検査部、１２３：マイクロプロセッサ、１２４：パリティ生成回路、１３０：キャッシュメモリ、１３１：キャッシュセグメント、１４０：共有メモリ、１５０：接続部、１６０：サービスプロセッサ、２００：記憶装置搭載部、２１０：記憶装置、２２０：パリティグループ、２３０：論理デバイス、３００：スロット、３０１：論理ブロック、３１０：アドレスデータ、３２０：拡張論理ブロック。
【図１】
2010128519.tif 000003
【図２】
2010128519.tif 000004
【図３】
2010128519.tif 000005
【図４】
2010128519.tif 000006
【図５】
2010128519.tif 000007
【図６】
2010128519.tif 000008
【図７】
2010128519.tif 000009
【図８】
2010128519.tif 000010
【図９】
2010128519.tif 000011
【図１０】
2010128519.tif 000012
【図１１】
2010128519.tif 000013
【図１２】
2010128519.tif 000014
【図１３】
2010128519.tif 000015
【図１４】
2010128519.tif 000016
【図１５】
2010128519.tif 000017
【図１６】
2010128519.tif 000018
【図１７】
2010128519.tif 000019
【図１８】
2010128519.tif 000020
【図１９】
2010128519.tif 000021
【図２０】
2010128519.tif 000022
【図２１】
2010128519.tif 000023
【図２２】
2010128519.tif 000024