(57)【要約】【課題】ディスクドライブのデータ管理単位とは異なるデータ管理単位を有するフラッシュメモリ・モジュール内におけるアドレス・エラーを訂正する。【解決手段】キャッシュメモリＣＭ上では、フラッシュメモリ・チップＭＥＭへ読み書きされるデータは、第一のデータ長単位で管理されている。フラッシュメモリ・チップＭＥＭ内のデータ管理単位である１ページは、ストレージコントローラＳＣから読み書き可能な第二のデータ長を有するデータ部と、冗長部とを有する。ストレージコントローラＳＣは、データ書き込み時に、書き込み先ページのアドレスを特定可能な保護コード６０４を生成し、書き込みデータと保護コード６０４とを合わせて第二のデータ長となるように第一のデータ長単位で管理されているキャッシュメモリＣＭ上のデータを分割し、第二のデータ長単位でフラッシュメモリ・チップＭＥＭに書き込む。【選択図】図６
2008009635.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリ・チップと、前記フラッシュメモリ・チップへのデータの読み書きを制御するメモリコントローラとを有するフラッシュメモリ・モジュールと、
前記フラッシュメモリ・チップへ読み書きされるデータを一時的に格納するためのキャッシュメモリを有するストレージコントローラと、
を備え、
前記キャッシュメモリ上では、前記フラッシュメモリ・チップへ読み書きされるデータは、第一のデータ長単位で管理されており、
前記フラッシュメモリ・チップに読み書きされるデータは、ページ単位で管理されており、
１ページあたりの記憶領域は前記ストレージコントローラから読み書き可能な第二のデータ長を有する記憶領域と、前記ページの管理情報を格納するための記憶領域とを含み、
前記ストレージコントローラは、前記フラッシュメモリ・チップへのデータ書き込み時に、書き込み先ページのアドレス情報を特定可能な保護コードを生成し、更に書き込みデータと前記保護コードとを合わせて第二のデータ長となるように、前記第一のデータ長単位で管理されている前記キャッシュメモリ上のデータを分割し、前記書き込みデータと前記保護コードとを合わせて第二のデータ長単位で前記フラッシュメモリ・チップに書き込み、
前記ストレージコントローラは、前記フラッシュメモリ・チップから読み出したデータに付加されている前記保護コードから特定されるアドレス情報と、読み出すべきデータのアドレス情報とを比較することで、読み出しエラーの有無をチェックする、
ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記ストレージコントローラは、前記フラッシュメモリ・モジュールの各仕様と前記第二のデータ長との対応関係を保持するデータベースを更に備える、ストレージシステム。
【請求項３】
請求項１に記載のストレージシステムであって、
前記フラッシュメモリ・モジュールが提供する記憶領域はＲＡＩＤ構成されており、
前記ストレージコントローラは、何れかのフラッシュメモリ・モジュール内のデータにアドレス・エラーが生じると、前記アドレス・エラーが生じたデータを格納するフラッシュメモリ・モジュールと同一のＲＡＩＤグループに属する他のフラッシュメモリ・モジュール内のデータを用いて、アドレス・エラーが生じたデータを前記第二のデータ長単位で復元し、前記アドレス・エラーが生じたデータを前記復元したデータで上書きする、ストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
前記ストレージコントローラは、ハードディスクドライブにおいてアドレス・エラーが生じると、前記アドレス・エラーが生じたデータを前記第一のデータ長単位で上書き訂正する、ストレージシステム。
【請求項５】
請求項１に記載のストレージシステムであって、
前記保護コードは、書き込み時刻情報を含む、ストレージシステム。
【請求項６】
請求項１に記載のストレージシステムであって、
前記保護コードは、前記第二のデータ長を有するデータを保護するためのエラー検出コードを含む、ストレージシステム。
【請求項７】
フラッシュメモリ・チップと、前記フラッシュメモリ・チップへのデータの読み書きを制御するメモリコントローラとを有するフラッシュメモリ・モジュールと、
前記フラッシュメモリ・チップへ読み書きされるデータを一時的に格納するためのキャッシュメモリを有するストレージコントローラと、
を備え、
前記キャッシュメモリ上では、前記フラッシュメモリ・チップへ読み書きされるデータは、第一のデータ長単位で管理されており、
前記フラッシュメモリ・チップに読み書きされるデータは、ページ単位で管理されており、
１ページあたりの記憶領域は前記ストレージコントローラから読み書き可能な第二のデータ長を有する記憶領域と、前記ページの管理情報を格納するための記憶領域とを含み、
前記ストレージコントローラは、前記ストレージコントローラに接続する記録媒体の種別を判別するためのメディア判定部を備えており、
前記ストレージコントローラは、前記ストレージコントローラに接続する記録媒体がフラッシュメモリ・モジュールである場合に、前記フラッシュメモリ・チップへのデータ書き込み時に、書き込み先ページのアドレス情報を特定可能な保護コードを生成し、更に書き込みデータと前記保護コードとを合わせて第二のデータ長となるように、前記第一のデータ長単位で管理されている前記キャッシュメモリ上のデータを分割し、前記書き込みデータと前記保護コードとを合わせて第二のデータ長単位で前記フラッシュメモリ・チップに書き込み、
前記ストレージコントローラは、前記フラッシュメモリ・チップから読み出したデータに付加されている前記保護コードから特定されるアドレス情報と、読み出すべきデータのアドレス情報とを比較することで、読み出しエラーの有無をチェックする、
ストレージシステム。
【請求項８】
請求項７に記載のストレージシステムであって、
前記第一のデータ長は、ハードディスクドライブのセクタ長である、ストレージシステム。
【請求項９】
請求項７に記載のストレージシステムであって、
前記第一のデータ長を有するデータは、データと、前記データの書き込み先であるハードディスクドライブのアドレス情報を特定可能な保護コードとを有する、ストレージシステム。
【請求項１０】
請求項７に記載のストレージシステムであって、
前記ストレージコントローラは、前記記録媒体の各仕様と前記第二のデータ長との対応関係を保持するデータベースを更に備える、ストレージシステム。
【請求項１１】
請求項７に記載のストレージシステムであって、
前記フラッシュメモリ・モジュールが提供する記憶領域はＲＡＩＤ構成されており、
前記ストレージコントローラは、何れかのフラッシュメモリ・モジュール内のデータにアドレス・エラーが生じると、前記アドレス・エラーが生じたデータを格納するフラッシュメモリ・モジュールと同一のＲＡＩＤグループに属する他のフラッシュメモリ・モジュール内のデータを用いて、アドレス・エラーが生じたデータを前記第二のデータ長単位で復元し、前記アドレス・エラーが生じたデータを前記復元したデータで上書きする、ストレージシステム。
【請求項１２】
請求項７に記載のストレージシステムであって、
前記ストレージコントローラは、ハードディスクドライブにおいてアドレス・エラーが生じると、前記アドレス・エラーが生じたデータを前記第一のデータ長単位で上書き訂正する、ストレージシステム。
【請求項１３】
請求項７に記載のストレージシステムであって、
前記保護コードは、書き込み時刻情報を含む、ストレージシステム。
【請求項１４】
請求項７に記載のストレージシステムであって、
前記保護コードは、前記第二のデータ長を有するデータを保護するためのエラー検出コードを含む、ストレージシステム
【請求項１５】
フラッシュメモリ・チップと前記フラッシュメモリ・チップへのデータの読み書きを制御するメモリコントローラとを有するフラッシュメモリ・モジュールと、前記フラッシュメモリ・チップへ読み書きされるデータを一時的に格納するためのキャッシュメモリを有するストレージコントローラとを有し、１ページあたりの記憶領域が前記ストレージコントローラから読み書き可能な第二のデータ長を有する記憶領域と、前記ページの管理情報を格納するための記憶領域とを有するストレージシステムのデータ保護方法であって、
フラッシュメモリ・チップへ読み書きされるデータを前記キャッシュメモリ上で第一のデータ長単位で管理するステップと、
前記フラッシュメモリ・チップへのデータ書き込み時に、書き込み先ページのアドレス情報を特定可能な保護コードを生成するステップと、
書き込みデータと前記保護コードとを合わせて第二のデータ長となるように前記第一のデータ長単位で管理されている前記キャッシュメモリ上のデータを分割するステップと、
前記書き込みデータと前記保護コードとを合わせて第二のデータ長単位で前記フラッシュメモリ・チップに書き込むステップと、
前記フラッシュメモリ・チップから読み出したデータに付加されている前記保護コードから特定されるアドレス情報と、読み出すべきデータのアドレス情報とを比較することで読み出しエラーの有無をチェックするステップと、
を備えるストレージシステムのデータ保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はフラッシュメモリを記録媒体とするストレージシステム及びそのデータ保護方法に関する。
【背景技術】
【０００２】
ストレージシステムは、一般的にランダムアクセス可能な不揮発性記録媒体を備える。ランダムアクセス可能な不揮発性記録媒体は、例えば、磁気ディスク又は光ディスク等である。現在、主流のストレージシステムは、小型ディスクドライブを多数備える。また、半導体技術の進歩に伴って、一括消去可能な不揮発性半導体メモリが開発されている。一括消去可能な不揮発性半導体メモリは、例えば、フラッシュメモリである。フラッシュメモリを記録媒体とするストレージシステムは、小型ディスクドライブを多数備えるストレージシステムに比べて、寿命、省電力及びアクセス時間等に優れている。
【０００３】
ここで、フラッシュメモリについて説明する。フラッシュメモリにおいて、ブロックはデータを一括消去する単位の記憶領域であり、ページはデータを読み書きする単位の記憶領域である。フラッシュメモリは、特性上、データを直接書き換えることができない。つまり、フラッシュメモリは、記憶しているデータを書き換える場合、記憶している有効なデータを退避させる。次に、記憶しているデータをブロック単位で消去する。そして、データが消去されたブロックにデータを新たに書き込む。
【０００４】
より詳細に説明すると、フラッシュメモリは、「１」を「０」に書き換えることはできるが、「０」を「１」に書き換えることができない。そこで、フラッシュメモリは、データの書き換え時に、ブロック全体を消去する。このように、フラッシュメモリにおけるデータの書換えは、ブロックの消去が伴う。
【０００５】
しかし、フラッシュメモリの１ブロック消去にかかる時間は、１ページを書込みにかかる時間に比べて約１桁長い。従って、１ページ書換えのために毎回１ブロックを消去すると、フラッシュメモリのデータ書換え性能は極端に低下してしまう。つまり、フラッシュメモリでは、消去時間を隠蔽できるアルゴリズムでデータを書き込むことが必須となる。
【０００６】
また、フラッシュメモリにおいては、ブロックを消去できる回数には制限がある。例えば、ブロック当たり１０万回までの消去回数が保証されている。データの書換えが集中して消去回数が増大したブロックは、データ消去ができなくなり使用不能となる問題点がある。そのため、フラッシュメモリを記録媒体として使用するストレージシステムでは、特定のブロックへの消去処理が集中しないようにするための消去回数平準化処理が必須となる。
【０００７】
消去時間隠蔽と消去回数平準化のため、フラッシュメモリ・モジュール内では、データ書込みの際にアドレス変換処理が行われる。フラッシュメモリ・モジュールは、１個以上のフラッシュメモリ・チップと、フラッシュメモリ・チップへのデータ転送を制御するためのメモリコントローラとを備える。メモリコントローラは、特定の物理アドレスに書き込みが集中するのを避けるため、ホスト計算機やストレージ装置のコントローラ等から書き込み先アドレスとして受信した論理アドレスを、フラッシュメモリ・チップにおける書き込み先アドレスである物理アドレスへ変換する機能を有する。このとき問題となるのは、メモリコントローラ内で発生するアドレス・エラーである。メモリコントローラが、論理アドレスから物理アドレスへの変換の際にエラーを起こした場合、間違った物理アドレスにデータを書き込んでしまう。つまり、書込みデータそのものにはエラーが無く問題ないが、書き込んだ物理アドレスが間違っているため、読出し時に所望のデータが読み出せなくなる問題がある。
【０００８】
この問題点を解決するための技術として、例えば、特開２００１−２０２２９５号公報に開示されている技術が知られている。この技術は、ハードディスクドライブを記録媒体として使用する場合に、記録媒体内のアドレス・エラーからデータを保護する。より詳細には、ハードディスクドライブ内の論理データブロック毎に論理的なアドレス値を含む保護コードをデータに付加してハードディスクドライブへ書込む。そして、データをハードディスクドライブから読み出す際には、各論理データブロックに付加された保護コードをチェックする。
【０００９】
更に、米国公開特許２００４／０１４８４６１Ａ１には、データ管理単位の異なる記録媒体相互間の互換性を確保するストレージシステムが開示されている。
【特許文献１】特開２００１−２０２２９５号公報
【特許文献２】米国公開特許２００４／０１４８４６１Ａ１
【発明の開示】
【発明が解決しようとする課題】
【００１０】
フラッシュメモリは、ページ単位でアドレスを仮想化し、データを読み書きする。ページ・サイズは、チップの種類や世代によって異なる。例えば、現在のフラッシュメモリ・チップのページ・サイズは、５２８バイト或いは２１１２バイトであり、実際にデータを書き込むことが可能な記憶領域のサイズは、ページ内のそれぞれ５１２バイト或いは２０４８バイトである。ページの残りの部分（例えば、５２８バイトから５１２バイトを除いた１６バイト、或いは２１１２バイトから２０４８バイトを除いた６４バイト）は、メモリコントローラがページ単位でアドレス管理をするための情報やエラー訂正を行うためのエラー訂正コードなどを格納するための管理領域として使用される。フラッシュメモリの大容量化に伴い、ページ・サイズは、将来的に大容量化していくことが予想される。
【００１１】
ストレージシステムの記録媒体としてハードディスクドライブに代替えすることを目的とするフラッシュメモリ・モジュールは、ハードディスクドライブ互換インタフェースを備えている。ストレージコントローラは、ハードディスクドライブ互換性を有するフラッシュメモリ・モジュールを、例えば、１セクタ当たり５１２バイトのハードディスクドライブとして認識する。つまり、ストレージコントローラは、ハードディスクドライブ互換インタフェースを備えるフラッシュメモリ・モジュール内部でアドレス変換されているデータ単位を認識することはできない。更に、フラッシュメモリ・モジュール内に実装されているフラッシュメモリ・チップの種類及び世代によってページ・サイズが異なる。上述した従来技術によるアドレス・エラー対策では、アドレス変換されるデータ・サイズ毎にストレージコントローラが保護コードを付加して書込みを行う必要がある。
【００１２】
しかし、上述の如く、ハードディスクドライブ互換インタフェースを備えるフラッシュメモリ・モジュール、又はフラッシュメモリ・チップの仕様が不明なフラッシュメモリ・モジュールでは、アドレス・エラーから保護すべきデータ・サイズが不明である。このため、従来技術によって、フラッシュメモリ・モジュール内のアドレス・エラーからデータを保護することは困難である。
【００１３】
更に、高信頼性が要求されるハードディスクドライブでは、１セクタ当たりの容量を５２０バイトとして、データと保護コードをセットにして管理している。一方、フラッシュメモリのページ当たりに書込み可能なデータ・サイズは、メモリコントローラが管理用として使用する記憶領域を除くと、５１２バイトの倍数である。５２０バイト単位で管理されているデータをそのままフラッシュメモリのページへ書き込むと、５２０バイト単位のデータがページ境界を跨いでフラッシュメモリに書き込まれる場合が生じる。これは、５２０バイト内のデータと保護コードとがそれぞれ別々のページに書き込まれ、保護コードから分離されたデータは、アドレス・エラーから保護されないことを意味する。よって、従来技術では、ページ境界を跨ぐデータをアドレス・エラーから保護することが困難である。
【００１４】
本発明は、上述した問題点に鑑みてなされたものであり、ディスクドライブのデータ管理単位とは異なるデータ管理単位を有するフラッシュメモリ・モジュール内におけるアドレス・エラーを訂正することのできるストレージシステム及びそのデータ保護方法を提供することを課題とする。
【課題を解決するための手段】
【００１５】
上記の課題を解決するため、本発明のストレージシステムは、フラッシュメモリ・チップと、フラッシュメモリ・チップへのデータの読み書きを制御するメモリコントローラとを有するフラッシュメモリ・モジュールと、フラッシュメモリ・チップへ読み書きされるデータを一時的に格納するためのキャッシュメモリを有するストレージコントローラと、を備える。キャッシュメモリ上では、フラッシュメモリ・チップへ読み書きされるデータは、第一のデータ長単位で管理されている。フラッシュメモリ・チップに読み書きされるデータは、ページ単位で管理されている。１ページあたりの記憶領域は、ストレージコントローラから読み書き可能な第二のデータ長を有する記憶領域と、ページの管理情報を格納するための記憶領域とを含む。ストレージコントローラは、フラッシュメモリ・チップへのデータ書き込み時に、書き込み先ページのアドレス情報を特定可能な保護コードを生成し、更に書き込みデータと保護コードとを合わせて第二のデータ長となるように、第一のデータ長単位で管理されているキャッシュメモリ上のデータを分割し、書き込みデータと保護コードとを合わせて第二のデータ長単位でフラッシュメモリ・チップに書き込む。ストレージコントローラは、フラッシュメモリ・チップから読み出したデータに付加されている保護コードから特定されるアドレス情報と、読み出すべきデータのアドレス情報とを比較することで、読み出しエラーの有無をチェックする。かかる構成によれば、ディスクドライブのデータ管理単位とは異なるデータ管理単位を有するフラッシュメモリ・モジュール内におけるアドレス・エラーを訂正することができる。
【００１６】
本発明の好適な態様において、ストレージコントローラは、フラッシュメモリ・モジュールの各仕様と第二のデータ長との対応関係を保持するデータベースを更に備える。フラッシュメモリ・モジュールの仕様に応じて、第二のデータ長が異なる場合があるので、フラッシュメモリ・モジュールの各仕様と第二のデータ長との対応関係を保持するデータベースを備えることで、ストレージコントローラは、ストレージコントローラに接続されるフラッシュメモリ・モジュールの仕様に応じて、第二のデータ長を調整できる。
【００１７】
本発明の好適な態様において、フラッシュメモリ・モジュールが提供する記憶領域はＲＡＩＤ構成されている。ストレージコントローラは、何れかのフラッシュメモリ・モジュール内のデータにアドレス・エラーが生じると、アドレス・エラーが生じたデータを格納するフラッシュメモリ・モジュールと同一のＲＡＩＤグループに属する他のフラッシュメモリ・モジュール内のデータを用いて、アドレス・エラーが生じたデータを第二のデータ長単位で復元し、アドレス・エラーが生じたデータを復元したデータで上書きする。かかる構成により、何れかのフラッシュメモリ・モジュール内のデータにアドレス・エラーが生した場合でも、データを復元できる。
【００１８】
本発明の好適な態様において、保護コードは、書き込み時刻情報を含む。かかる構成により、特に、シーケンシャルデータアクセスに対して、アドレス・エラーから有効にデータを保護できる。
【００１９】
本発明の好適な態様において、保護コードは、第二のデータ長を有するデータを保護するためのエラー検出コード又は訂正コードを含む。エラー検出コード又は訂正コードとしては、例えば、ＣＲＣコード、ＬＲＣコード、又はハミングコードが好適である。
【００２０】
本発明の他の側面に関るストレージシステムは、フラッシュメモリ・チップと、フラッシュメモリ・チップへのデータの読み書きを制御するメモリコントローラとを有するフラッシュメモリ・モジュールと、フラッシュメモリ・チップへ読み書きされるデータを一時的に格納するためのキャッシュメモリを有するストレージコントローラと、を備える。キャッシュメモリ上では、フラッシュメモリ・チップへ読み書きされるデータは、第一のデータ長単位で管理されている。フラッシュメモリ・チップに読み書きされるデータは、ページ単位で管理されている。１ページあたりの記憶領域は、ストレージコントローラから読み書き可能な第二のデータ長を有する記憶領域と、ページの管理情報を格納するための記憶領域とを含む。ストレージコントローラは、ストレージコントローラに接続する記録媒体の種別を判別するためのメディア判定部を備えている。ストレージコントローラは、ストレージコントローラに接続する記録媒体がフラッシュメモリ・モジュールである場合に、フラッシュメモリ・チップへのデータ書き込み時に、書き込み先ページのアドレス情報を特定可能な保護コードを生成し、更に書き込みデータと保護コードとを合わせて第二のデータ長となるように、第一のデータ長単位で管理されているキャッシュメモリ上のデータを分割し、書き込みデータと保護コードとを合わせて第二のデータ長単位でフラッシュメモリ・チップに書き込む。ストレージコントローラは、フラッシュメモリ・チップから読み出したデータに付加されている保護コードから特定されるアドレス情報と、読み出すべきデータのアドレス情報とを比較することで、読み出しエラーの有無をチェックする。かかる構成によれば、ストレージコントローラは、ストレージコントローラに接続する記録媒体の種別を判別し、記録媒体内のデータ管理単位とは異なるデータ管理単位を有するフラッシュメモリ・モジュール内におけるアドレス・エラーを訂正することができる。
【００２１】
本発明の好適な態様において、第一のデータ長は、ハードディスクドライブのセクタ長である。
【００２２】
本発明の好適な態様において、第一のデータ長を有するデータは、データと、データの書き込み先であるハードディスクドライブのアドレス情報を特定可能な保護コードとを有する。
【００２３】
本発明の好適な態様において、ストレージコントローラは、記録媒体の各仕様と第二のデータ長との対応関係を保持するデータベースを更に備える。記録媒体の仕様に応じて、第二のデータ長が異なる場合があるので、記録媒体の各仕様と第二のデータ長との対応関係を保持するデータベースを備えることで、ストレージコントローラは、ストレージコントローラに接続される記録媒体の仕様に応じて、第二のデータ長を調整できる。
【００２４】
本発明に係るデータ保護方法が適用されるストレージシステムは、フラッシュメモリ・チップとフラッシュメモリ・チップへのデータの読み書きを制御するメモリコントローラとを有するフラッシュメモリ・モジュールと、フラッシュメモリ・チップへ読み書きされるデータを一時的に格納するためのキャッシュメモリを有するストレージコントローラとを有し、１ページあたりの記憶領域がストレージコントローラから読み書き可能な第二のデータ長を有する記憶領域と、ページの管理情報を格納するための記憶領域とを有する。このデータ保護方法は、フラッシュメモリ・チップへ読み書きされるデータをキャッシュメモリ上で第一のデータ長単位で管理するステップと、フラッシュメモリ・チップへのデータ書き込み時に書き込み先ページのアドレス情報を特定可能な保護コードを生成するステップと、書き込みデータと保護コードとを合わせて第二のデータ長となるように第一のデータ長単位で管理されているキャッシュメモリ上のデータを分割するステップと、書き込みデータと保護コードとを合わせて第二のデータ長単位でフラッシュメモリ・チップに書き込むステップと、フラッシュメモリ・チップから読み出したデータに付加されている保護コードから特定されるアドレス情報と、読み出すべきデータのアドレス情報とを比較することで読み出しエラーの有無をチェックするステップと、を備える。このデータ保護方法によれば、ディスクドライブのデータ管理単位とは異なるデータ管理単位を有するフラッシュメモリ・モジュール内におけるアドレス・エラーを訂正することができる。
【発明の効果】
【００２５】
本発明によれば、ディスクドライブのデータ管理単位とは異なるデータ管理単位を有するフラッシュメモリ・モジュール内におけるアドレス・エラーを訂正することができる。
【発明を実施するための最良の形態】
【００２６】
以下、各図を参照しながら本発明の実施形態について説明する。
図１は本実施形態に係るストレージシステム１０のハードウェア構成を示す。ストレージシステム１０は、ストレージコントローラＳＣ及びフラッシュメモリ・モジュールＰ００〜Ｐ３３を備える。ストレージコントローラＳＣは、チャネルアダプタＣＡ０、ＣＡ１、キャッシュメモリＣＭ０、ＣＭ１、ストレージアダプタＳＡ０、ＳＡ１及び相互接続網ＮＷ０、ＮＷ１を備える。
【００２７】
尚、ストレージコントローラＳＣは、チャネルアダプタＣＡ０、ＣＡ１、キャッシュメモリＣＭ０、ＣＭ１及びストレージアダプタＳＡ０、ＳＡ１をそれぞれ二つ有する場合を例示しているが、それぞれを３つ以上又は一つ有してもよい。
【００２８】
相互接続網ＮＷ０及びＮＷ１は、例えば、スイッチ等であり、ストレージコントローラＳＣを構成する各装置を相互に接続する。詳細には、相互接続網ＮＷ０及びＮＷ１は、チャネルアダプタＣＡ０、キャッシュメモリＣＭ０及びストレージアダプタＳＡ０を相互に接続する。同様に、相互接続網ＮＷ０、ＮＷ１は、チャネルアダプタＣＡ１、キャッシュメモリＣＭ１及びストレージアダプタＳＡ１を相互に接続する。
【００２９】
チャネルアダプタＣＡ０は、チャネルＣ００、Ｃ０１、Ｃ０２、Ｃ０３を介してホスト計算機１００に接続されている。同様に、チャネルアダプタＣＡ１は、チャネルＣ１０、Ｃ１１、Ｃ１２、Ｃ１３を介してホスト計算機１００に接続されている。ホスト計算機１００は、パーソナルコンピュータ、ワークステーション、メインフレームコンピュータ等の計算機であり、ストレージシステム１０にデータの読み書きを要求する。キャッシュメモリＣＭ０、ＣＭ１は、チャネルアダプタＣＡ０、ＣＡ１又はストレージアダプタＳＡ０、ＳＡ１から受信したデータを一時的に記憶する。
【００３０】
ストレージアダプタＳＡ０は、フラッシュメモリ・モジュールＰ００〜Ｐ３３に接続されている。詳細には、ストレージアダプタＳＡ０は、チャネルＤ００を介してフラッシュメモリ・モジュールＰ００〜Ｐ０３に接続されている。また、ストレージアダプタＳＡ０は、チャネルＤ０１を介してフラッシュメモリ・モジュールＰ１０〜Ｐ１３に接続されている。また、ストレージアダプタＳＡ０は、チャネルＤ０２を介してフラッシュメモリ・モジュールＰ２０〜Ｐ２３に接続されている。また、ストレージアダプタＳＡ０は、チャネルＤ０３を介してフラッシュメモリ・モジュールＰ３０〜Ｐ３３に接続されている。
【００３１】
同様に、ストレージアダプタＳＡ１は、フラッシュメモリ・モジュールＰ００〜Ｐ３３に接続されている。詳細には、ストレージアダプタＳＡ１は、チャネルＤ１０を介してフラッシュメモリ・モジュールＰ００〜Ｐ０３に接続されている。また、ストレージアダプタＳＡ１は、チャネルＤ１１を介してフラッシュメモリ・モジュールＰ１０〜Ｐ１３に接続されている。また、ストレージアダプタＳＡ１は、チャネルＤ１２を介してフラッシュメモリ・モジュールＰ２０〜Ｐ２３に接続されている。また、ストレージアダプタＳＡ１は、チャネルＤ１３を介してフラッシュメモリ・モジュールＰ３０〜Ｐ３３に接続されている。
【００３２】
チャネルアダプタＣＡ０、ＣＡ１及びストレージアダプタＳＡ０、ＳＡ１は、保守端末ＳＶＰに接続されている。保守端末ＳＶＰは、ストレージシステム１０の管理者から入力された設定情報を、チャネルアダプタＣＡ０、ＣＡ１及び／又はストレージアダプタＳＡ０、ＳＡ１に送信する。
【００３３】
尚、ストレージシステム１０は、ストレージアダプタＳＡ０及びチャネルアダプタＣＡ０に替わって一つのアダプタを備えていても良い。この場合、その一つのアダプタが、ストレージアダプタＳＡ０及びチャネルアダプタＣＡ０の処理を行う。
【００３４】
ＶＤＥＶ０〜ＶＤＥＶ３は、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）グループである。例えば、ＲＡＩＤグループＶＤＥＶ０は、フラッシュメモリ・モジュールＰ００、Ｐ１０、Ｐ２０、Ｐ３０から成る。ＲＡＩＤグループＶＤＥＶ０に属するフラッシュメモリ・モジュールの一つ、例えば、フラッシュメモリ・モジュールＰ００でエラーが発生してデータを読み出せなくなると、ＲＩＡＤグループＶＤＥＶ０に属する他のフラッシュメモリ・モジュールＰ１０，Ｐ２０，Ｐ３０からデータを再生できる。
【００３５】
図２はチャネルアダプタＣＡ０のハードウェア構成を示す。チャネルアダプタＣＡ０はホストチャネル・インタフェース２１、キャッシュメモリ・インタフェース２２、ネットワーク・インタフェース２３、プロセッサ２４、ローカルメモリ２５、及びプロセッサ周辺制御部２６を備える。
【００３６】
ホストチャネル・インタフェース２１は、チャネルアダプタＣＡ０を、チャネルＣ００、Ｃ０１、Ｃ０２、Ｃ０３を介してホスト計算機１００に接続するためのインタフェースである。ホストチャネル・インタフェース２１は、チャネルＣ００、Ｃ０１、Ｃ０２、Ｃ０３上のデータ転送プロトコルと、ストレージコントローラＳＣ内部のデータ転送プロトコルとを相互に変換する。
【００３７】
キャッシュメモリ・インタフェース２２は、チャネルアダプタＣＡ０を、相互結合網ＮＷ０、ＮＷ１に接続するためのインタフェースである。
【００３８】
ネットワーク・インタフェース２３は、チャネルアダプタＣＡ０を、保守端末ＳＶＰに接続するためのインタフェースである。
【００３９】
尚、ホストチャネル・インタフェース２１とキャッシュメモリ・インタフェース２２とは、信号線２７によって接続されている。
【００４０】
プロセッサ２４は、ローカルメモリ２５に記憶されているプログラムを実行することによって各種処理を行う。より詳細には、プロセッサ２４は、ホスト計算機１００と相互結合網ＮＷ０、ＮＷ１との間のデータ転送を制御する。
【００４１】
ローカルメモリ２５は、プロセッサ２４によって実行されるプログラムを記憶する。また、ローカルメモリ２５は、プロセッサ２４によって参照されるテーブルを記憶する。プロセッサ２４によって参照されるテーブルは、管理者によって設定又は変更される。この場合、管理者は、テーブルの設定又はテーブルの変更に関する情報を、保守端末ＳＶＰに入力する。保守端末ＳＶＰは、入力された情報を、ネットワーク・インタフェース２３を介してプロセッサ２４に送信する。プロセッサ２４は、受信した情報に基づいて、テーブルを作成又は変更する。そして、プロセッサ２４は、テーブルをローカルメモリ２５に格納する。
【００４２】
プロセッサ周辺制御部２６は、ホストチャネル・インタフェース２１、キャッシュメモリ・インタフェース２２、ネットワーク・インタフェース２３、プロセッサ２４、及びローカルメモリ２５の間におけるデータ転送を制御する。プロセッサ周辺制御部２６は、例えば、チップセット等である。
【００４３】
尚、チャネルアダプタＣＡ１のハードウェア構成は、チャネルアダプタＣＡ０のハードウェア構成と同一であるので、チャネルアダプタＣＡ１のハードウェア構成についての説明を省略する。
【００４４】
図３はストレージアダプタＳＡ０のハードウェア構成を示す。ストレージアダプタＳＡ０は、キャッシュメモリ・インタフェース３１、ストレージチャネルインタフェース３２、ネットワーク・インタフェース３３、プロセッサ３４、ローカルメモリ３５、及びプロセッサ周辺制御部３６を備える。
【００４５】
キャッシュメモリ・インタフェース３１は、ストレージアダプタＳＡ０を、相互結合網ＮＷ０、ＮＷ１に接続するためのインタフェースである。
【００４６】
ストレージチャネルインタフェース３２は、ストレージアダプタＳＡ０を、チャネルＤ００、Ｄ０１、Ｄ０２、Ｄ０３に接続するためのインタフェースである。ストレージチャネルインタフェース３２は、チャネルＤ００、Ｄ０１、Ｄ０２、Ｄ０３上のデータ転送プロトコルと、ストレージコントローラＳＣ内部のデータ転送プロトコルとを相互に変換する。
【００４７】
尚、キャッシュメモリ・インタフェース３１とストレージチャネルインタフェース３２とは、信号線３７によって接続されている。
【００４８】
ネットワーク・インタフェース３３は、ストレージアダプタＳＡ０を、保守端末ＳＶＰに接続するためのインタフェースである。
【００４９】
プロセッサ３４は、ローカルメモリ３５に記憶されているプログラムを実行することによって各種処理を行う。
【００５０】
ローカルメモリ３５は、プロセッサ３４によって実行されるプログラムを記憶する。また、ローカルメモリ３５は、プロセッサ３４によって参照されるテーブルを記憶する。プロセッサ３４によって参照されるテーブルは、管理者によって設定又は変更される。この場合、管理者は、テーブルの設定又はテーブルの変更に関する情報を、保守端末ＳＶＰに入力する。保守端末ＳＶＰは、入力された情報を、ネットワーク・インタフェース３３を介してプロセッサ３４に送信する。プロセッサ３４は、受信した情報に基づいて、テーブルを作成又は変更する。そして、プロセッサ３４はテーブルをローカルメモリ３５に格納する。
【００５１】
プロセッサ周辺制御部３６は、キャッシュメモリ・インタフェース３１、ストレージチャネルインタフェース３２、ネットワーク・インタフェース３３、プロセッサ３４及びローカルメモリ３５の間のデータ転送を制御する。プロセッサ周辺制御部３６は、例えば、チップセット等である。
【００５２】
尚、ストレージアダプタＳＡ１のハードウェア構成は、ストレージアダプタＳＡ０のハードウェア構成と同一であるので、ストレージアダプタＳＡ１のハードウェア構成についての説明を省略する。
【００５３】
図４はフラッシュメモリ・モジュールＰ００のハードウェア構成を示す。フラッシュメモリ・モジュールＰ００は、メモリコントローラＭＣ及びフラッシュメモリＭＥＭを備える。フラッシュメモリＭＥＭは、データを記憶する。メモリコントローラＭＣは、フラッシュメモリＭＥＭへのデータの「読み取り」、「書き込み」、及び「消去」を制御する。メモリコントローラＭＣは、プロセッサ（μＰ）４０１、インタフェース部（Ｉ／Ｆ）４０２、データ転送部（ＨＵＢ）４０３、メモリ（ＲＡＭ）４０４、及びメモリ（ＲＯＭ）４０７を備える。フラッシュメモリＭＥＭは、複数のフラッシュメモリ・チップ４０５を備える。フラッシュメモリ・チップ４０５は、複数のブロック４０６を含み、それぞれのブロック４０６にデータを記憶する。ブロック４０６は、メモリコントローラＭＣがデータを消去する単位である。ブロック４０６は、複数のページを含む。ページは、メモリコントローラＭＣがデータを読み書きする単位である。
【００５４】
尚、ページは、有効ページ、無効ページ、未使用ページ、又は不良ページの何れかに分類される。有効ページは、有効なデータを記憶しているページである。無効ページは、無効なデータを記憶しているページである。未使用ページは、データを記憶していないページである。不良ページは、ページ内の記憶素子が壊れている等の理由によって、物理的に使用できないページである。
【００５５】
インタフェース部４０２は、チャネルＤ００を介してストレージコントローラＳＣ内のストレージアダプタＳＡ０に接続されている。また、インタフェース部４０２は、チャネルＤ１０を介してストレージコントローラＳＣ内のストレージアダプタＳＡ１に接続されている。インタフェース部４０２は、ストレージアダプタＳＡ０及びストレージアダプタＳＡ１からの命令を受信する。ストレージアダプタＳＡ０及びストレージアダプタＳＡ１からの命令は、例えば、ＳＣＳＩコマンドである。
【００５６】
詳細には、インタフェース部４０２は、ストレージアダプタＳＡ０及びストレージアダプタＳＡ１からデータを受信する。そして、インタフェース部４０２は、受信したデータをメモリ４０４に格納する。また、インタフェース部４０２は、メモリ４０４に格納されているデータを、ストレージアダプタＳＡ０及びストレージアダプタＳＡ１へ送信する。また、インタフェース部４０２は、ハードディスクドライブとの互換性を有するインタフェース機能を有している。そのため、ストレージアダプタＳＡ０、ＳＡ１は、フラッシュメモリ・モジュールＰ００〜Ｐ３３を、例えば、セクタ当たり容量５１２バイトのハードディスクドライブとして認識する。ストレージシステム１０は、データを格納するための記録媒体として、フラッシュメモリ・モジュールとハードディスクドライブとを混載することができる。
【００５７】
メモリ４０４は、例えば、ダイナミック型ランダムアクセスメモリであり、高速に読み書きできる。メモリ４０４は、インタフェース部４０２が送受信するデータを一時的に記憶する。一方、メモリ４０７は、不揮発性メモリであり、プロセッサ４０１によって実行されるプログラムを記憶する。プロセッサ４０１によって実行されるプログラムは、プロセッサ４０１が実行可能となるように、ストレージシステム１０の起動時にメモリ４０７からメモリ４０４へロードされる。また、メモリ４０４は、プロセッサ４０１によって参照されるテーブルを記憶する。
【００５８】
プロセッサ４０１によって参照されるテーブルは、例えば、フラッシュメモリＭＥＭの論理アドレスと物理アドレスとを変換するためのアドレス変換テーブルである。論理アドレスは、フラッシュメモリ・モジュールＰ００の外部から（例えば、ストレージアダプタＳＡ０から）、フラッシュメモリＭＥＭに読み書きする単位であるページをアクセスするためのアドレスである。物理アドレスは、メモリコントローラＭＣが、フラッシュメモリＭＥＭを読み書きする単位であるページをアクセスするためのアドレスである。
【００５９】
データ転送部４０３は、例えばスイッチであり、プロセッサ４０１、インタフェース部４０２、メモリ４０４、メモリ４０７、及びフラッシュメモリＭＥＭを相互に接続し、それらの間のデータ転送を制御する。
【００６０】
プロセッサ４０１は、メモリ４０４に記憶されているプログラムを実行することによって、各種処理を行う。例えば、プロセッサ４０１は、メモリ４０４に記憶されているアドレス変換テーブルを参照して、フラッシュメモリＭＥＭの論理アドレスとフラッシュメモリＭＥＭの物理アドレスとを変換し、フラッシュメモリＭＥＭにデータを読み書きする。また、プロセッサ４０１は、フラッシュメモリ・モジュールＰ００内のブロック４０６について、リクラメーション処理（ブロック再生処理）及びウエアレベリング処理（消去回数平準化処理）を行う。
【００６１】
リクラメーション処理（ブロック再生処理）は、未使用ページが少なくなったブロックを使用できるように、ブロック４０６内の無効ページを未使用ページに再生する処理である。即ち、リクラメーション処理の対象となるブロック（対象ブロック）４０６内には、有効ページ、無効ページ、及び未使用ページが含まれ、多くの無効ページが存在しているとする。この場合に、未使用ページを増加させるには、無効ページを消去する必要がある。しかしながら、消去は、ページ単位ではなく、ブロック単位でしか消去できない。このため、有効ページを空きのあるブロックに複写し、その後、対象ブロックを消去して、ブロックを再生する処理が必要となる。
【００６２】
より詳細には、プロセッサ４０１は、リクラメーション処理の対象となるブロック（対象ブロック）４０６内の有効ページに記憶されているデータを、未使用ブロックへ複写する。そして、プロセッサ４０１は、データを複写した未使用ブロックの論理ブロック番号を、対象ブロックの論理ブロック番号に変更する。そして、対象ブロックのデータをすべて消去し、リクラメーション処理を完了する。
【００６３】
例えば、プロセッサ４０１がブロック４０６にデータを書き込むと、ブロック４０６内の未使用ページが少なくなる。そして、ブロック４０６内の未使用ページが足りなくなると、プロセッサ４０１は、ブロック４０６へデータを書き込めなくなる。そこで、プロセッサ４０１は、ブロック４０６をリクラメーションすることによって、無効ページを未使用ページに再生する。
【００６４】
一方、ウエアレベリング処理（消去回数平準化処理）は、それぞれのブロック４０６のデータ消去回数を平準化する処理である。これによって、フラッシュメモリＭＥＭの寿命を長くできる。なぜなら、フラッシュメモリＭＥＭは、データの消去回数が多くなると、寿命になるからである。フラッシュメモリＭＥＭは、一般的に、約一万回から十万回のデータの消去が保証されている。
【００６５】
尚、フラッシュメモリ・モジュールＰ００のハードウェア構成について詳述したが、他のフラッシュメモリ・モジュールＰ０１〜Ｐ３３についても、同様のハードウェア構成を有している。
【００６６】
図５はフラッシュメモリ・モジュールＰ００のブロック４０６の説明図である。ブロック４０６は、複数のページ５０１を含む。ブロック４０６は、一般的に、数十程度のページ５０１（例えば６４ページ等）を含む。ページ５０１は、メモリコントローラＭＣ等がデータを読み書きする単位である。例えば、ＮＡＮＤ型フラッシュメモリでは、メモリコントローラＭＣ等は、１ページあたり２０μｓ〜３０μｓの時間でデータを読み出し、１ページあたり０．２ｍｓ〜０．３ｍｓ程度の時間でデータを書き込む。また、メモリコントローラＭＣ等は、１ブロックあたり２ｍｓ〜４ｍｓ程度の時間でデータを消去する。
【００６７】
ページ５０１は、データ部５０２及び冗長部５０３を含む。例えば、１ページにつき、ページ５０１は２１１２バイト、データ部５０２は２０４８バイト、冗長部５０３は６４バイトである。本実施形態では、１ページにつき、ページ５０１は２１１２バイト、データ部５０２は２０４８バイトであるフラッシュメモリを例示するが、ページ・サイズを特に限定するものではない。
【００６８】
データ部５０２は、ユーザデータを記憶する。冗長部５０３は、ページ５０１の管理情報及びエラー訂正情報を記憶する。管理情報は、オフセットアドレス及びページステータスを含む。尚、オフセットアドレスは、ページ５０１が属するブロック４０６内における相対的なアドレスである。また、ページステータスは、ページ５０１が有効ページ、無効ページ、未使用ページ又は処理中ページのうち何れであるかを示す。エラー訂正情報は、ページ５０１のエラーを検出及び訂正するための情報であり、例えば、ハミングコードである。ページ内冗長部５０３は、通常、メモリコントローラＭＣのみがアクセス可能であり、ストレージアダプタＳＡ０、ＳＡ１からは、ページ・データ部５０２のみがアクセス可能である。言い換えると、論理アドレスは、データ部５０２のメモリ空間をマッピングするためのものである。
【００６９】
上述したリクラメーション処理やウエアレベリング処理のため、フラッシュメモリ・モジュールに書き込まれたデータは、ストレージコントローラＳＣからの指示とは独立に、フラッシュメモリ・モジュール内で移動することがある。メモリコントローラＭＣは、このデータ移動の結果を、アドレス変換テーブルに正しく反映することにより、ストレージコントローラＳＣは、正しいデータをアクセスすることができる。
【００７０】
ところが、リクラメーション処理やウエアレベリング処理を実行するためのプログラム上の不具合（バグ等）や、放射線等によるアドレス変換テーブル内のデータ化けにより、論理アドレスと物理アドレスとの対応関係に誤りが生じると、フラッシュメモリ・モジュール内において、データの書き込み先アドレス又はデータの読み出し先アドレスにエラーが発生することとなり、ストレージコントローラＳＣが正しいデータを読み書きすることができなくなる。本実施形態は、フラッシュメモリ・モジュール内で生じるアドレス・エラーからデータを適切に保護するものである。
【００７１】
次に、図６乃至図７を参照しながらアドレス・エラーの検出方法について説明する。
図６はストレージコントローラＳＣがフラッシュメモリ・モジュールＰ００へデータを書き込む処理の概要を示す。ストレージコントローラＳＣ内のキャッシュメモリＣＭ上では、データ６０１は、ハードディスクドライブのセクタ容量単位（例えば、５２０バイト単位）で管理されている。５２０バイトのデータ６０１は、５１２バイトのユーザデータと、８バイトのハードディスクドライブ向け保護コードとを含む。ハードディスクドライブ向け保護コードは、データの書き込み先となるハードディスクドライブのアドレス情報（書き込みアドレス）を特定可能な情報を含む。
【００７２】
ストレージシステム１０は、従来のアーキテクチャとの互換性を維持することを目的として、データを格納するための記録媒体として、フラッシュメモリ・モジュールと、ハードディスクドライブとを混載するので、キャッシュメモリＣＭ上では、ハードディスクドライブのセクタ容量単位でデータを管理する。ここでは、キャッシュメモリＣＭ上のデータ６０１にアクセスするためのアドレスを、キャッシュ・アドレスと称する。
【００７３】
ストレージコントローラＳＣは、フラッシュメモリ・モジュールＰ００にデータを書き込む際に、キャッシュメモリＣＭ上のデータ６０１をストレージアダプタＳＡへ転送する（ステップ６０２）。ストレージアダプタＳＡは、書き込み先のフラッシュメモリ・モジュールＰ００内のページ・データ部のサイズをチェックし、フラッシュメモリ・モジュールＰ００内の書き込み先の先頭論理アドレスを計算する（詳細については、後述する。）。ここでは、書き込み先の論理アドレスを“Ａ０”とする。ストレージアダプタＳＡは、書込み先の論理アドレス情報を特定可能な保護コード６０４を生成する。保護コード６０４は、必ずしも論理アドレスそのものである必要はなく、書込み先の論理アドレスを特定できる情報であればよい。保護コード６０４は、例えば、論理アドレスの一部又は全部、或いは論理アドレスを符号化した情報を含む。
【００７４】
そして、ストレージアダプタＳＡは、フラッシュメモリ・モジュールＰ００にデータを書き込む際、アドレス・エラーから書き込みデータを保護するための保護コード６０４を書き込みデータ６０３に付加する。このとき、ストレージアダプタＳＡは、書き込みデータ６０３のサイズと保護コード６０４のサイズとを合わせたサイズが、書込み先フラッシュメモリ・モジュールＰ００内のページ・データ部のサイズと一致するように、データ６０１を分割する。詳細には、ストレージアダプタＳＡは、キャッシュメモリＣＭ上で５２０バイト単位に管理されていたデータ６０１を保護コード６０４と合わせて２０４８バイトになるように、書き込みデータ６０３の境界を調整する。ストレージアダプタＳＡは、フラッシュメモリ・モジュールＰ００のページ・データ部のサイズに調整された書き込みデータ６０３及び保護コード６０４を、フラッシュメモリ・モジュールＰ００へ転送する（ステップ６０５）。
【００７５】
書込みデータ６０３を受信したメモリコントローラＭＣは、アドレス変換テーブル６０６を参照し、書込み先の物理アドレスを求める。アドレス変換テーブル６０６によれば、論理アドレス“Ａ０”に対応する物理アドレスは“ｂ０”であり、論理アドレス“Ａ１”に対応する物理アドレスは“ｂ１”である。メモリコントローラＭＣは、ストレージアダプタＳＡから受信した書き込みデータ６０３を保護コード６０４とともに物理アドレス“ｂ０”のページ・データ部へ書き込む（ステップ６０７）。
【００７６】
メモリコントローラＭＣは、保護コード６０４をデータとして扱い、フラッシュメモリＭＥＭに書き込む。メモリコントローラＭＣは、例えば、ＳＣＳＩプロトコルの場合に、Writeコマンドと併せて受信した書き込み先論理アドレス情報に基づき、書き込み処理を実行する。同様に、メモリコントローラＭＣは、Readコマンドと併せて受信した読出し先論理アドレス情報に基づき、読出し処理を実行する。
【００７７】
詳細には、メモリコントローラＭＣがコマンドと共に受信する論理アドレス情報は、本実施形態のフラッシュメモリ・モジュールはハードディスクドライブ互換デバイスとして機能するので、例えば１セクタを５１２バイトとした場合のセクタアドレスである。メモリコントローラＭＣは、フラッシュメモリへアクセスする際に、受信したセクタアドレスを論理アドレスへ変換し、さらに物理アドレスへ変換する。本実施形態において、セクタアドレスから論理アドレスへの変換は、ページ・データ部サイズ（２０４８バイト）がセクタサイズ（５１２バイト）の整数倍（４倍）になっているので、ページ・データ部先頭に対応するセクタアドレス＝論理アドレス×４となる。このセクタアドレスは、ストレージチャネルインターフェイスとフラッシュメモリ・モジュール間のデータ転送においてのみ使用されるアドレスであるので、簡単のため、このセクタアドレスに関する説明は省略する。
【００７８】
尚、符号６０８は、物理アドレス“ｂ０”のページを示し、符号６０９は、物理アドレス“ｂ１”のページを示す。符号６１０は、メモリコントローラＭＣが使用する冗長部である。
【００７９】
図７はフラッシュメモリ・モジュールＰ００内でアドレス・エラーが発生した場合に、ストレージコントローラＳＣがアドレス・エラーを検出する処理の概要を示す。アドレス変換テーブル６０６において、論理アドレス“Ａ０”に対応する物理アドレスは“ｂ０”のはずであるが、論理アドレス“Ａ０”に対応する物理アドレスが誤って“ｂ１”に置換した場合を考える（ステップ７１０）。
【００８０】
ストレージコントローラＳＣが、論理アドレス“Ａ０”に格納されたページ・データ部のデータを読み出そうとしても、アドレス変換テーブル６０６には、アドレス・エラーが生じているので、メモリコントローラＭＣは、物理アドレス“ｂ１”のページ・データ部を読み出し（ステップ７０７）、これをストレージアダプタＳＡへ転送する（ステップ７０５）。
【００８１】
ストレージアダプタＳＡは、フラッシュメモリ・モジュールＰ００から読み出されたデータ７０３に付加されている保護コード７０４をチェックする。詳細には、ストレージアダプタＳＡは、読み出しデータ７０３に付加されている保護コード７０４から特定される論理アドレス情報“Ａ１”と、メモリコントローラＭＣに読み出しを指示した論理アドレス“Ａ０”とを比較し、データ７０３が正常に読み出されているか否かをチェックする。アドレス変換テーブル６０６には、アドレス・エラーが生じているので、保護コード７０４から特定される論理アドレス情報“Ａ１”と、メモリコントローラＭＣに読み出しを指示した論理アドレス“Ａ０”とは一致しない。これにより、ストレージアダプタＳＡは、アドレス・エラーを検出できる。ストレージアダプタＳＡは、アドレス・エラーを検出すると、読み出しデータ７０３をキャッシュメモリＣＭに格納しない（ステップ７０２）。読み出されたデータ７０３は、本来読み出すべきデータではないからである。
【００８２】
図８はストレージチャネルインタフェース３２のハードウェア構成を示す。ストレージチャネルインタフェース３２は、書き込みデータに保護コードを付加し、読出しデータのアドレス・エラー検出する機能を有する。ストレージチャネルインタフェース３２は、メディア判定部８０１、ＸＯＲエンジン８０４、スイッチ（ＳＷ１）８０５、スイッチ（ＳＷ２）８０６、保護コード検査部（ＬＡ検査部）８０８、及び保護コード付加部（ＬＡ付加部）８０９、及びデータアライナ８１０を備える。
【００８３】
ストレージチャネルインタフェース３２は、チャネル８１２を介してプロセッサ周辺制御部３６（図３参照）に接続されている。メディア判定部８０１は、ストレージシステム１０に接続された記録媒体の種別を判定するための情報と、書き込み先の論理アドレスを計算するための情報とを有している。詳細には、メディア判定部８０１は、メディア・データベース８０３と、ＰＤＥＶ管理テーブル８０２とを有している。メディア・データベース８０３とＰＤＥＶ管理テーブル８０２の詳細については、後述する。ＸＯＲエンジン８０４は、ＲＡＩＤグループに格納するパリティ・データを生成する。また、ＸＯＲエンジン８０４は、エラー発生時に失われたデータを再生する。ＸＯＲエンジン８０４は、スイッチ８０５と信号線３７のそれぞれに接続している。
【００８４】
スイッチ８０５，８０６は、メディア判定部８０１の判定結果に基づいてデータ入出力経路を切り替える。例えば、データの書き込み先又は読み出し先がハードディスクドライブである場合には、チャネル８１１がデータの入出力経路になるようにスイッチ８０５，８０６を切り替える。一方、データの書き込み先又は読み出し先がフラッシュメモリ・モジュールである場合には、チャネル８０７がデータの入出力経路になるようにスイッチ８０５，８０６を切り替える。
【００８５】
データの読み出し先がフラッシュメモリ・モジュールである場合には、読出しデータは保護コード検査部８０８とデータ・アライナ８１０とをそれぞれ経由する。一方、データの書き込み先がフラッシュメモリ・モジュールである場合には、書込みデータは、データ・アライナ８１０と保護コード付加部８０９とをそれぞれ経由する。
【００８６】
スイッチ８０６は、チャネルＤ００〜Ｄ０３に接続している。データ・アライナ８１０は、フラッシュメモリ・モジュールにデータを書き込む際には、キャッシュメモリＣＭ上で５２０バイト単位に管理されているデータの境界を、そのデータに保護コードを付加した状態でページ・データ部のサイズに一致するように調整する。また、データ・アライナ８１０は、フラッシュメモリ・モジュールからデータを読み出す際には、読み出しデータから保護コードを除去し、そして、保護コードが除去された読み出しデータのデータ境界がキャッシュメモリＣＭ上の管理単位（５２０バイト）に一致するように調整する。
【００８７】
保護コード付加部８０９は、メディア判定部８０１から得られる情報（ページ・データ部のサイズなど）を基に、フラッシュメモリ・モジュール内の書込み先ページの論理ページアドレス情報を特定可能な保護コードを生成し、その保護コードを書込みデータに付加する。
【００８８】
保護コード検査部８０８は、読み出しデータに付加されている保護コードから特定される論理アドレスと、本来読み出されるべきデータの論理アドレスとが一致するか否かをチェックする。
【００８９】
図９はＰＤＥＶ管理テーブル８０２に格納されている情報を示す。ＰＤＥＶ管理テーブル８０２は、ストレージシステム１０に接続するそれぞれの記録媒体（ＰＤＥＶ）に関する情報を管理する。ストレージチャネルインタフェース３２は、ストレージシステム１０に接続されたそれぞれの記録媒体にＩｎｑｕｉｒｙコマンドを送信し、そのＩｎｑｕｉｒｙコマンドに対する応答を基に記録媒体のモジュール名９０１、ベンダ名９０２、及び型式９０３をＰＤＥＶ管理テーブル８０２に格納する。更に、ストレージチャネルインタフェース３２は、メディア・データベース８０３を検索し、Ｉｎｑｕｉｒｙコマンドの応答に含まれているベンダ名、及び型式に一致する仕様の媒体種別９０４とページ・データ部サイズ９０５とをＰＤＥＶ管理テーブル８０２に格納する。ストレージチャネルインタフェース３２は、ＰＤＥＶ管理テーブル８０２を保持することにより、ストレージシステム１０に接続されるそれぞれの記録媒体の媒体種別、及びページ・データ部サイズ（又はセクタ容量）を把握することができる。
【００９０】
図１０はメディア・データベース８０３に格納されている情報を示す。メディア・データベース８０３には、ストレージシステム１０に接続する可能性がある記録媒体（例えばフラッシュメモリ・モジュール、ハードディスクドライブなど）のベンダ名９０２、型式９０３、媒体種別９０４、ページ・データ部サイズ９０５が格納されている。媒体種別９０４は、記録媒体がフラッシュメモリ・モジュールであるのか、又はハードディスクドライブであるのかを識別する情報である。記録媒体がフラッシュメモリ・モジュールの場合は、媒体種別９０４に“１”が格納される。記録媒体がハードディスクドライブの場合には、媒体種別９０４に“０”が格納される。記録媒体がハードディスクドライブである場合におけるページ・データ部サイズ９０５は、１セクタ当たりの容量を示す。
【００９１】
尚、管理者は、保守端末ＳＶＰ（図１参照）を操作することにより、メディア・データベース８０３内のデータを修正又は追加することができる。メディア・データベース８０３に登録されていない新しい仕様のフラッシュメモリ・モジュールに関する情報をメディア・データベース８０３に追加することにより、その新しい仕様のフラッシュメモリ・モジュールにデータを書き込む際に、書き込み先の論理アドレスを特定可能な保護コードを書き込みデータに付加することができる。
【００９２】
図１１はストレージコントローラＳＣによるデータ読出しの処理手順を示すフローチャートである。ストレージコントローラＳＣは、ストレージチャネルインタフェース３２に読出し先のキャッシュ・アドレスＬＡと、読出しデータ長ＤＬとを入力する（ステップ１１０１）。
【００９３】
次に、ストレージチャネルインタフェース３２は、リトライカウンタをリセットする（ステップ１１０２）。
【００９４】
次に、ストレージチャネルインタフェース３２は、読出し先のフラッシュメモリ・モジュールの論理アドレス範囲（先頭論理アドレスＰＡ１、オフセット値ＯＳ１、末尾論理アドレスＰＡ２、及びオフセット値ＯＳ２）を計算する（ステップ１１０３）。先頭論理アドレスＰＡ１、オフセット値ＯＳ１、末尾論理アドレスＰＡ２、及びオフセット値ＯＳ２を計算する方法については、後述する。
【００９５】
次に、ストレージチャネルインタフェース３２は、フラッシュメモリ・モジュールからデータ（先頭論理アドレスＰＡ１から末尾論理アドレスＰＡ２までの範囲のデータ）を読み出す（ステップ１１０４）。
【００９６】
次に、ストレージチャネルインタフェース３２は、読み出しデータに付加されている保護コードから特定される論理アドレスと、本来読み出されるべきデータの論理アドレスとを比較し、アドレス・エラーが生じているか否かをチェックする（ステップ１１０５）。ここで、アドレス・エラーが発見されない場合は（ステップ１１０５；ＹＥＳ）、ステップ１１０６へ進み、アドレス・エラーが発見された場合は（ステップ１１０５；ＮＯ）、ステップ１１０７へ進む。
【００９７】
アドレス・エラーが生じてない場合、ストレージチャネルインタフェース３２は、読み出しデータに付加されている保護コードを除去し、データ境界がキャッシュメモリＣＭ上の管理単位に一致するように調整する（ステップ１１０６）。その後、ストレージチャネルインタフェース３２は、キャッシュメモリＣＭへデータを格納して、読出し動作を完了する。
【００９８】
アドレス・エラーが生じている場合、ストレージチャネルインタフェース３２は、リトライカウンタを１だけインクリメントし（ステップ１１０７）、リトライカウンタの値が規定回数に達してない場合には（ステップ１１０８；ＮＯ）、データの読み出し動作を繰り返し実行する（ステップ１１０４）。リトライカウンタの値が規定回数を越えると（ステップ１１０８；ＹＥＳ）、ストレージチャネルインタフェース３２は、エラー訂正処理を実行する（ステップ１１０９）。
【００９９】
図１２はキャッシュ・アドレスを論理アドレスに変換するための方法を示す。先頭論理アドレスＰＡ１、オフセット値ＯＳ１、末尾論理アドレスＰＡ２、及びオフセット値ＯＳ２は、それぞれ式（１）〜式（４）を用いて計算することができる。
【０１００】
ＰＡ１＝ｉｎｔ｛（ＬＡ１＊Ｘ）／（ＰＳ−Ｙ）｝  …（１）
ＰＡ２＝ｉｎｔ［｛（ＬＡ１＋ＤＬ）＊Ｘ−１｝／（ＰＳ−Ｙ）］  …（２）
ＯＳ１＝ＬＡ１＊Ｘ−ＰＡ１＊（ＰＳ−Ｙ）  …（３）
ＯＳ２＝（ＬＡ１＋ＤＬ）＊Ｘ−１−ＰＡ２＊（ＰＳ−Ｙ）  …（４）
【０１０１】
ここで、Ｘはキャッシュメモリ上の管理単位、ＬＡ１は読出し或いは書き込み範囲の先頭キャッシュ・アドレス、ＬＡ２は読出し或いは書込み範囲の末尾キャッシュ・アドレス、ＤＬは読み出し或いは書込みデータのサイズ、ＰＳはフラッシュメモリ・モジュールのページ・データ部サイズ、Ｙは保護コードのサイズを示す。尚、ページ・データ部内先頭アドレス側にデータを配置し、末尾アドレス側に保護コードを配置する場合を例示するが、データ配置及び保護コード配置を限定するものではない。
【０１０２】
説明の便宜上、図１２では、キャッシュメモリ内のキャッシュ・アドレスＬＡ＝０と、フラッシュメモリ・モジュール内の論理アドレスＰＡ＝０とを揃えて、それぞれのメモリ空間を図示している。ＰＡ１は、フラッシュメモリ・モジュール内に読み出し或いは書き込みするデータの先頭ページ・データ部１１０１の論理アドレスを示す。ＰＡ２は、フラッシュメモリ・モジュールに読み出し或いは書き込みするデータの末尾ページ・データ部１１０２の論理アドレスを示す。
【０１０３】
キャッシュメモリとフラッシュメモリ・モジュールとでは、データの管理単位が異なるため、ＰＡ１からＰＡ２までのデータをアクセスすると、読み書きすべきデータのサイズＤＬに比べて余分にアクセスすることになる。本明細書では、この余分な部分を、オフセットと称する。先頭ページ・データ部１１０１には、オフセット１１０３が存在する。末尾ページ・データ部１１０２には、オフセット１１０４が存在する。また、ＯＳ１，ＯＳ２は、ページ・データ部内のアドレスを示す。キャッシュメモリ上のアドレスＬＡ１からアドレスＬＡ２までのアドレス空間は、フラッシュメモリ・モジュール内の先頭ページ・データ部１１０１（論理アドレスＰＡ１により特定されるページ・データ部）内のアドレスＯＳ１から末尾ページ・データ部１１０２（論理アドレスＰＡ２により特定されるページ・データ部）内のアドレスＯＳ２までのアドレス空間に対応する。
【０１０４】
ストレージコントローラＳＣは、オフセット１１０３，１１０４を含むページ・データ部全体をフラッシュメモリ・モジュールから読み出し、その読み出したデータからオフセット１１０３，１１０４を除去した上で、その読み出しデータをキャッシュメモリへ格納する。
【０１０５】
尚、仕様が異なる記録媒体毎に、式（１）〜式（４）に示したような論理アドレスと物理アドレスとの間のアドレス変換式をメディア・データベース８０３に格納しておくと、様々なアドレス変換仕様を有する記録媒体について柔軟に対応することが可能となる。
【０１０６】
図１３はストレージコントローラＳＣによるデータ書き込みの処理手順を示すフローチャートである。ストレージコントローラＳＣは、ストレージチャネルインタフェース３２に、書込み先の先頭キャッシュ・アドレスＬＡと、書込みデータ・サイズＤＬとを入力する（ステップ１３０１）。
【０１０７】
ストレージコントローラＳＣは、式（１）〜式（４）に基づいて、書き込み先のフラッシュメモリ・モジュールの論理アドレス範囲（先頭論理アドレスＰＡ１、オフセット値ＯＳ１、末尾論理アドレスＰＡ２、及びオフセット値ＯＳ２）を計算する（ステップ１３０２）。
【０１０８】
次に、ストレージコントローラＳＣは、先頭ページ・データ部１１０１にオフセット１１０３が存在するか否か（つまり、ＯＳ１＝０であるか否か）をチェックする（ステップ１３０３）。
【０１０９】
先頭ページ・データ部１１０１にオフセット１１０３が存在する場合には（ステップ１３０３；ＮＯ）、ストレージコントローラＳＣは、先頭ページ・データ部１１０１を読み出す（ステップ１３０４）。一方、先頭ページ・データ部１１０１にオフセット１１０３が存在しない場合には（ステップ１３０３；ＹＥＳ）、ストレージコントローラＳＣは、ステップ１３０５に進む。
【０１１０】
次に、ストレージコントローラＳＣは、末尾ページ・データ部１１０２にオフセット１１０４が存在し（つまり、ＯＳ２≠ＰＳ−Ｙ−１）、且つ末尾ページ・データ部が未読み出し（つまり、ＯＳ１＝＝０||（ＯＳ１≠０＆＆ＰＡ１≠ＰＡ２））であるか否かをチェックする（ステップ１３０５）。
【０１１１】
末尾ページ・データ部１１０２にオフセット１１０４が存在し、末尾ページ・データ部が未読み出しの場合には（ステップ１３０５；ＹＥＳ）、ストレージコントローラＳＣは、末尾ページ・データ部１１０２を読み出す（ステップ１３０６）。一方、末尾ページ・データ部１１０２にオフセット１１０４が存在しない、又は末尾ページ・データ部を読み出し済みの場合には（ステップ１３０５；ＮＯ）、ストレージコントローラＳＣは、ステップ１３０７に進む。
【０１１２】
ストレージコントローラＳＣは、先頭ページ・データ部１１０１又は末尾ページ・データ部１１０２を読み出した場合には、オフセット１１０３，１１０４の部分のデータは更新せずに、オフセット１１０３，１１０４以外の部分をキャッシュメモリＣＭ上の書き込みデータに更新する。更に、ストレージコントローラＳＣは、書き込み先論理アドレスを特定可能な保護コードをキャッシュメモリＣＭ上のデータに付加し、且つ保護コードを付加した状態で書き込みデータのサイズがページ・データ部サイズに一致するようにデータ境界を調整する（ステップ１３０７）。
【０１１３】
次に、ストレージコントローラＳＣは、先頭論理アドレスＰＡ１から末尾論理アドレスＰＡ２までの書込みデータをフラッシュメモリ・モジュールへ転送し（ステップ１３０８）、書込み処理を完了する。
【０１１４】
図１４はストレージチャネルインタフェース３２によるエラー訂正処理を示すフローチャートである。例として、フラッシュメモリ・モジュールＰ００，Ｐ１０，Ｐ２０，Ｐ３０からなるＲＡＩＤグループＶＤＥＶ０において、モジュールＰ００の論理アドレスＰＡ１にアドレス・エラーが発生した場合を考察する。
【０１１５】
ストレージチャネルインタフェース３２は、フラッシュメモリ・モジュールＰ００と同じＲＡＩＤグループＶＤＥＶ００に属する他のそれぞれのフラッシュメモリ・モジュールＰ１０，Ｐ２０，Ｐ３０の論理アドレスＰＡ１からデータを読み出す（ステップ１４０１ａ，ステップ１４０１ｂ，ステップ１４０１ｃ）。
【０１１６】
次に、ストレージチャネルインタフェース３２は、読み出したデータから論理アドレスを特定可能なフラッシュメモリ向け保護コードを取り除く（ステップ１４０２ａ，ステップ１４０２ｂ，ステップ１４０２ｃ）。
【０１１７】
次に、ストレージチャネルインタフェース３２は、読出しデータを、キャッシュメモリ上の管理単位に分割する（ステップ１４０３ａ，ステップ１４０３ｂ，ステップ１４０３ｃ）。
【０１１８】
次に、ストレージチャネルインタフェース３２は、キャッシュメモリ上の管理単位に分割されたデータからハードディスクドライブ向け保護コードを取り除く（ステップ１４０４ａ，ステップ１４０４ｂ，ステップ１４０４ｃ）。
【０１１９】
次に、ＸＯＲエンジン８０４は、フラッシュメモリ向け保護コード、及びハードディスクドライブ向け保護コードを取り除いたデータについて、排他的論理和を計算し、フラッシュメモリ・モジュールＰ００に格納されているはずのデータを再生する（ステップ１４０５）。
【０１２０】
次に、ストレージチャネルインタフェース３２は、再生データにハードディスクドライブ向け保護コードを付加する（ステップ１４０６）。
【０１２１】
次に、ストレージチャネルインタフェース３２は、再生データにフラッシュメモリ・モジュール向け保護コード（書込み先論理アドレスＰＡ１を特定可能な情報）を更に付加し、データ境界がページ・データ部サイズに一致するように調整する（ステップ１４０７）。
【０１２２】
次に、ストレージチャネルインタフェース３２は、再生データをフラッシュメモリ・モジュールＰ００の論理アドレスＰＡ１へ上書きする（ステップ１４０８）。以上の処理を経て、エラー訂正処理が完了する。
【０１２３】
尚、ハードディスクドライブにおいて、アドレス・エラーが生じると、ストレージコントローラＳＣは、アドレス・エラーが生じたデータを第一のデータ長単位で上書き訂正する。
【０１２４】
図１５はストレージコントローラＳＣがデータ書込み時にアドレス・エラーからデータを保護するための他の保護コードを付加する動作を説明する図である。例えば、ストレージコントローラＳＣは、シーケンシャル・アクセス・データをフラッシュメモリ・モジュールＰ００に書き込む際に、書込み時刻情報を含む保護コードをシーケンシャル・アクセス・データに付加する。
【０１２５】
ストレージコントローラＳＣ内のキャッシュメモリＣＭ上では、データ１４０１は、ハードディスクドライブのセクタ容量単位（例えば、５２０バイト単位）で管理されている。ストレージコントローラＳＣは、フラッシュメモリ・モジュールＰ００にデータを書き込む際に、キャッシュメモリＣＭ上のデータ１４０１をストレージアダプタＳＡへ転送する（ステップ１４０２）。
【０１２６】
ストレージアダプタＳＡが書込み先のフラッシュメモリ・モジュールＰ００内の論理アドレスＡ０からＡ２へ、シーケンシャル・データ１４０３を書き込む場合を考察する。ストレージアダプタＳＡは、書込み先の論理アドレス“Ａ０”〜“Ａ２”と、書込み時刻情報“ｔ１”を特定可能な保護コード１４０４を生成する。ストレージアダプタＳＡは、ページ・データ部サイズに合わせたデータ１４０３及び保護コード１４０４をフラッシュメモリ・モジュールＰ００へ転送する（ステップ１４０５）。
【０１２７】
書込みデータを受信したメモリコントローラＭＣは、アドレス変換テーブル１４０６を参照し、書き込み先の物理アドレスを求める。アドレス変換テーブル１４０６によれば、それぞれの論理アドレス“Ａ０”〜“Ａ２”に対応する物理アドレスは“ｂ０”〜“ｂ２”である。メモリコントローラＭＣは、物理アドレス“ｂ０”〜“ｂ２”のページ・データ部１４０８に、書込みデータを論理アドレス“Ａ０”〜“Ａ２”を特定可能な保護コード、及び書き込み時刻情報“ｔ１”を特定可能な保護コードを共に格納する。
【０１２８】
尚、符号１４１０は、メモリコントローラＭＣが使用する冗長部を示す。
【０１２９】
図１６はフラッシュメモリ・モジュール内でアドレス・エラーが生じたときにストレージコントローラＳＣが書込み時刻情報を含む保護コードに基づいてアドレス・エラーを検出する動作を説明する図である。ここでは、アドレス変換テーブル１４０６において、論理アドレス“Ａ１”に対応する物理アドレスは“ｂ１”であるはずが、論理アドレス“Ａ１”に対応する物理アドレスが“ｂ４”に誤って置換し（ステップ１５１０）、更に物理アドレス“ｂ４”には、論理アドレスＡ１の古いデータ（書込み時刻情報“ｔ０”）が消去されずに残っている場合を考察する。
【０１３０】
尚、符号１５０８は、物理アドレス“ｂ１”のページを示し、符号１５０９は、物理アドレス“ｂ４”のページを示す。符号１４１０は、メモリコントローラＭＣが使用する冗長部を示す。
【０１３１】
ストレージコントローラＳＣが、論理アドレス“Ａ０”〜“Ａ２”のシーケンシャル・データを読み出そうとする。ストレージコントローラＳＣが論理アドレス“Ａ１”に格納されたページ・データ部のデータを読み出そうとしても、アドレス変換テーブル１４０６内に生じたアドレス・エラーのため、メモリコントローラＭＣは、誤った物理アドレス“ｂ４”のページ・データ部を読み出し（ステップ１５０７）、その読み取りデータをストレージアダプタＳＡへ転送する（ステップ１５０５）。
【０１３２】
ストレージアダプタＳＡは、受信したデータ１５０３に付加されている保護コード１５０４をチェックする。しかし、物理アドレス“ｂ４”から読み出したデータに含まれる保護コードから特定される論理アドレスが“Ａ１”であるので、論理アドレスをチェックしただけでは、アドレス・エラーを検出することができない。
【０１３３】
しかし、読み出した論理アドレス“Ａ０”〜“Ａ２”のシーケンシャル・データは、同時に書き込まれたものであるので、保護コード１５０４から特定される時刻情報“ｔ１”が全て同じはずである。そのため、ストレージアダプタＳＡは、時刻情報が一致しない保護コード“ｔ０”を発見することにより、アドレス・エラーを検出することができる。
【０１３４】
アドレス・エラーが判明したデータは、キャッシュメモリＣＭへは格納されない（ステップ１５０２）。
【０１３５】
以上、説明したように、シーケンシャル・データの場合は、保護コードに論理アドレスを特定可能な情報に加えて書込み時刻を特定可能な情報をも付加することにより、データの信頼性を更に向上させることができる。
【０１３６】
尚、書き込み時刻情報に替えて、書込みデータが属するエクスチェンジやシーケンスの識別子、或いは書き込み時刻情報を符号化した情報を保護コードに含ませてもよい。また書き込みデータ毎の論理アドレス情報と書き込み時刻情報との対応関係を記録したテーブルをストレージアダプタ内に保持しておき、データ読み出し時に保護コードから特定した書き込み時刻情報とテーブル内の記録を比較検査してもよい。
【０１３７】
図１７はデータ書込み時にページ・データ部に付加する、他の保護コードの例を説明する図である。ページは、ページ・データ部１６０６と冗長部１６０５とを含む。冗長部１６０５は、ストレージコントローラＳＣからは書き込めない領域なので、保護コードは、ページ・データ部１６０６内の所定の領域にデータ１６０１と共に書き込む。ページ・データ部１６０６には、データ１６０１と保護コード１６０２，１６０３，１６０４とが書き込まれる。
【０１３８】
ここで、保護コード１６０２は、論理アドレスを特定可能な情報を含む。保護コード１６０３は、書込み時刻を特定可能な情報を含む。保護コード１６０４は、ページ・データ部に書き込まれたデータ１６０１及び保護コード１６０２，１６０３のエラーを検出又は訂正するためのものである。保護コード１６０４は、例えば、ＣＲＣ（Cyclic Redundancy Check)コード、ＬＲＣ（Longitudinal Redundancy Check）コード、又はハミングコード等である。
【０１３９】
フラッシュメモリ・モジュール内では、メモリコントローラＭＣが、ページ・データ部に書き込まれたデータに対する保護コードを冗長部１６０５に格納し、データを保証している。しかし、冗長部１６０５内の保護コードは、メモリコントローラＭＣとストレージアダプタＳＡ間のデータ転送では取り除かれるため、ストレージコントローラＳＡとフラッシュメモリ・モジュール間で一貫したデータ保証ができない。そこで、ページ・データ部に、データおよび他の保護コードと共にエラー訂正情報を書き込むことにより、ストレージシステムの信頼性が向上する。
【０１４０】
本実施形態によれば、ストレージコントローラＳＣ内のメモリ管理単位と、記録媒体内の管理単位との間に容量差があるストレージシステム１０において、記録媒体内のアドレス・エラーを検出し、データを適切に保護できる。
【図面の簡単な説明】
【０１４１】
【図１】本実施形態に係るストレージシステムのハードウェア構成図である。
【図２】チャネルアダプタのハードウェア構成図である。
【図３】ストレージアダプタのハードウェア構成図である。
【図４】フラッシュメモリ・モジュールのハードウェア構成図である。
【図５】フラッシュメモリ・モジュールのブロックの説明図である。
【図６】ストレージコントローラがフラッシュメモリ・モジュールへデータを書き込む処理の概要を示す説明図である。
【図７】フラッシュメモリ・モジュール内でアドレス・エラーが発生した場合にストレージコントローラがアドレス・エラーを検出する処理の概要を示す説明図である。
【図８】ストレージチャネルインタフェースのハードウェア構成図である。
【図９】ＰＤＥＶ管理テーブルに格納されている情報の説明図である。
【図１０】メディア・データベースに格納されている情報の説明図である。
【図１１】ストレージコントローラによるデータ読出しの処理手順を示すフローチャートである。
【図１２】キャッシュ・アドレスを論理アドレスに変換する方法の説明図である。
【図１３】ストレージコントローラによるデータ書き込みの処理手順を示すフローチャートである。
【図１４】ストレージチャネルインタフェースによるエラー訂正処理を示すフローチャートである。
【図１５】ストレージコントローラがデータ書込み時にアドレス・エラーからデータを保護するための他の保護コードを付加する動作を説明する図である。
【図１６】フラッシュメモリ・モジュール内でアドレス・エラーが生じたときにストレージコントローラが書込み時刻情報を含む保護コードに基づいてアドレス・エラーを検出する動作を説明する図である。
【図１７】データ書込み時にページ・データ部に付加する、他の保護コードの例を説明する図である。
【符号の説明】
【０１４２】
１０…ストレージシステム  ＳＣ…ストレージコントローラ  ＣＡ…チャネルアダプタ  ＳＡ…ストレージアダプタ  ＮＷ…相互結合網  Ｐ００〜Ｐ３３…フラッシュメモリ・モジュール
【図１】
2008009635.tif 000003
【図２】
2008009635.tif 000004
【図３】
2008009635.tif 000005
【図４】
2008009635.tif 000006
【図５】
2008009635.tif 000007
【図６】
2008009635.tif 000008
【図７】
2008009635.tif 000009
【図８】
2008009635.tif 000010
【図９】
2008009635.tif 000011
【図１０】
2008009635.tif 000012
【図１１】
2008009635.tif 000013
【図１２】
2008009635.tif 000014
【図１３】
2008009635.tif 000015
【図１４】
2008009635.tif 000016
【図１５】
2008009635.tif 000017
【図１６】
2008009635.tif 000018
【図１７】
2008009635.tif 000019