(57)【要約】  制御デバイスは、複数の物理領域と、複数の論理領域とを、それぞれ対応づける情報を記憶する。制御デバイスは、複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及びこれらに基づいて生成される第一パリティデータのそれぞれを格納し、第一物理領域に対応付けられている第一論理領域への、第一物理領域に格納されているユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、更新ユーザデータと複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成する。制御デバイスは、複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる更新ユーザデータと複数の第二ユーザデータ及び第二パリティデータのそれぞれを格納し、変換情報において更新ユーザデータが格納された第二物理領域と第一論理領域とを対応付ける。
2015052833.tif 000002
【特許請求の範囲】
【請求項１】
複数の不揮発性半導体メモリチップと、
上位装置に接続され、
前記複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、前記上位装置に提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶し、
前記複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び前記複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、
前記複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、前記第一物理領域に格納されている第一ユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、前記更新ユーザデータと前記複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成し、
前記複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる前記更新ユーザデータと前記複数の第二ユーザデータ及び前記第二パリティデータのそれぞれを格納し、
前記変換情報において前記更新ユーザデータが格納された第二物理領域と前記第一論理領域とを対応付ける、制御デバイスと、を備える
ストレージ装置。
【請求項２】
前記複数の物理領域は、それぞれ異なる前記複数の不揮発性半導体メモリチップに属する
請求項１記載のストレージ装置。
【請求項３】
前記制御デバイスは、
前記複数の物理領域が、論理領域との対応づけをはずされた場合、前記複数の物理領域を消去する、
請求項２に記載のストレージ装置。
【請求項４】
前記制御デバイスは、
前記第一ストライプ内の第三物理領域からデータの読み出しに失敗した場合に、前記第一ストライプの中で前記第三物理領域以外の物理領域のデータに基づいて、前記読み出しに失敗したデータを復元する、
請求項３に記載のストレージ装置。
【請求項５】
前記制御デバイスは、
前記更新ユーザデータ及び前記他のユーザデータを受信して記憶し、前記記憶された更新ユーザデータ及び他のユーザデータに基づき前記パリティデータを生成する、
請求項４に記載のストレージ制御装置。
【請求項６】
前記不揮発性半導体メモリチップは、複数のブロックを含み、
前記複数のブロックのそれぞれは、複数のページを含み、
前記複数の物理領域のそれぞれは、ページであり、
前記制御デバイスは、ページ毎にライトまたはリードを行い、ブロック毎に消去を行う、
請求項５に記載のストレージ装置。
【請求項７】
前記制御デバイスは、
ストライプを含む前記複数のブロックで構成されるブロック群毎の劣化を示す劣化度を記憶し、
前記劣化度に基づいて、前記ブロック群を選択する。
請求項６に記載のストレージ装置。
【請求項８】
前記制御デバイスは、
複数のブロック群のそれぞれに含まれる有効ページ数を記憶し、
前記有効ページ数に基づいて、前記複数のブロック群の中から第一ブロック群を選択し、
前記劣化度に基づいて、前記複数のブロック群の中から第二ブロック群を選択し、
前記第一ブロック群内のストライプを前記第二ブロック群へコピーする、
請求項７に記載のストレージ装置。
【請求項９】
前記制御デバイスは、
前記劣化度に基づいて、前記複数のブロック群の中から第三ブロック群を選択し、
前記複数のブロック群の中から、前記第四ブロック群の劣化度より低い劣化度を有する第五ブロック群を選択し、
前記第四ブロック群内のストライプを、前記第五ブロック群へコピーする、
請求項８に記載のストレージ装置。
【請求項１０】
前記制御デバイスは、
前記複数の論理領域のそれぞれのライト頻度を記憶し、
前記第一論理領域のライト頻度に基づいてライト先のブロック群を選択する、
請求項９に記載のストレージ装置。
【請求項１１】
前記制御デバイスは、
前記複数のブロックのそれぞれの劣化を示すブロック劣化度を記憶し、
前記ブロック劣化度に基づいて複数のブロックを選択し、前記選択された複数のブロックを用いて前記ブロック群を生成する、
請求項１０に記載のストレージ装置。
【請求項１２】
前記制御デバイスは、
前記データ群に含まれるユーザデータを受信する度に、前記受信されたユーザデータに基づいて前記パリティデータの演算の途中結果である中間パリティデータを生成し、前記受信されたパリティデータを前記第二ストライプへ書き込み、
前記データ群に含まれるすべてのユーザデータを受信した場合、前記中間パリティデータに基づいて前記パリティデータを生成し、前記第二ストライプへ書き込む、
請求項１１に記載のストレージ装置。
【請求項１３】
ストレージコントローラと、ストレージ装置とを有するストレージシステムであって、
前記ストレージ装置は、
複数の不揮発性半導体メモリチップと、
前記ストレージコントローラに接続され、
前記複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、前記ストレージコントローラに提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶し、
前記複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び前記複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、
前記複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、前記第一物理領域に格納されている第一ユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、前記更新ユーザデータと前記複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成し、
前記複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる前記更新ユーザデータと前記複数の第二ユーザデータ及び前記第二パリティデータのそれぞれを格納し、
前記変換情報において前記更新ユーザデータが格納された第二物理領域と前記第一論理領域とを対応付ける、制御デバイスと、を備える
ストレージシステム。
【請求項１４】
複数の不揮発性半導体メモリチップと、
上位装置及び前記不揮発性半導体メモリチップに接続された制御デバイスと、
を備えたストレージ装置により実行されるストレージ装置制御方法であって、
前記制御デバイスは、
前記複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、前記上位装置に提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶し、
前記複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び前記複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、
前記複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、前記第一物理領域に格納されている第一ユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、前記更新ユーザデータと前記複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成し、
前記複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる前記更新ユーザデータと前記複数の第二ユーザデータ及び前記第二パリティデータのそれぞれを格納し、
前記変換情報において前記更新ユーザデータが格納された第二物理領域と前記第一論理領域とを対応付ける
ストレージ装置制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体メモリを有するストレージ装置に関する。
【背景技術】
【０００２】
近年の半導体技術の進歩に伴って、高速アクセス可能な不揮発性半導体メモリが開発されている。このような不揮発性半導体メモリは、例えばＮＡＮＤ型のフラッシュメモリである。フラッシュメモリを記憶媒体とするストレージ装置は、複数の小型ディスクドライブを有するストレージ装置に比べて、省電力及びアクセス時間等に優れている。このため、フラッシュメモリを記憶媒体とするストレージ装置をストレージシステムやサーバの最終記憶媒体やキャッシュメモリとして用いることで、システムの高性能化が可能となる。【０００３】
フラッシュメモリにおいて、ブロックはデータを一括消去する単位の記憶領域であり、ページはデータを読み書きする単位の記憶領域である。今後特に断りがない限り、単にブロック又はページと記述した場合はフラッシュメモリにおける物理的なブロック又はページを指すものとする。フラッシュメモリにおいて、１つのブロック内には複数のページが設けられる。またフラッシュメモリは、記憶しているデータを直接書き換えることができない。つまり、フラッシュメモリは、記憶しているデータを書き換える場合、記憶している有効なデータをＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）ないしは他のブロックに退避させる。次に、フラッシュメモリは、記憶しているデータをブロック単位で消去する。そして、フラッシュメモリは、消去したブロックにデータを書き込む。このように、フラッシュメモリにおけるデータの書き換えは、ブロックごとのデータの消去を伴う。フラッシュメモリの特性上、データの消去を実行するとデータが格納されていたセルが劣化する。セルが劣化するとデータのエラー率が高まり、消去を繰り返すとそのセルは使用不能となる。このため、ブロックの消去回数には限界がある。【０００４】
続いて、フラッシュメモリの障害について説明する。【０００５】
フラッシュメモリの障害としては、前述したセルの劣化とデータ保持時間超過に起因するリテンションエラーに加えて、配線の断線などの回路の故障やその他のハードウェアデバイスの故障による突発的な障害が知られている。これらの突発的な障害は一般的にセルの使用頻度に依存しないため、前述のウェアレベリングなどの方式では対処できない。【０００６】
近年の半導体微細加工技術の進歩により、高密度に記録可能なフラッシュメモリが製造されているが、障害や消去回数増加に伴うエラーの発生率は増加する傾向にある。【０００７】
フラッシュメモリを用いたストレージ装置であるＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）の内部で、特定のブロックのデータ消去回数が増大して、そのブロックが使用不能となった場合や、突発的な障害が発生した場合、他のブロック（領域）が健全な状態であるにも関わらずＳＳＤ全体として、外部に提供できる容量を満足できなくなる場合がある。【０００８】
これに対応するために、フラッシュメモリ内部で冗長性を持たせる方法が考えられている。この方法は、ＨＤＤ（Ｈａｒｄ  ｄｉｓｋ  ｄｒｉｖｅ）等のディスク装置を使用するストレージ装置ではＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）と呼称される。冗長性を持つ１単位のことをＲＧ（ＲＡＩＤ  Ｇｒｏｕｐ）と呼ぶ。冗長性の持たせ方についても、ＲＡＩＤで定義される各ＲＡＩＤレベルに対応する方式が考えられる。【０００９】
ＳＳＤ内部で冗長性を持たせることで信頼性を向上する手法として、ＲＡＩＤ構成を取ったメモリを１モジュールとして管理し、このモジュールを多数並べた場合の制御方法が知られている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】米国特許出願公開第２０１３／００１９０６２号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ＨＤＤにより構成され、パリティデータ（以下、パリティという）の生成を要するＲＡＩＤの場合、あるデータを更新する際には、そのデータが格納された論理領域に対応づけられた物理領域のデータを更新データに書き換えるとともに、そのデータに対応づけられたパリティについても新たに更新パリティを生成して書き換える必要がある。一方、フラッシュメモリをはじめとする不揮発性半導体メモリでは物理領域に格納されたデータの書き換えができない。そのため、あるデータを更新する際には、論理領域内の更新データと更新パリティを、それぞれ未使用の物理領域に書き込んだ後、それらの物理領域と、更新データ及び更新パリティを記憶した論理領域との関連づけも更新する必要がある。【００１２】
しかしながら、この方式は、更新データのライトに伴い新たに生成した更新パリティのライトも発生するため、上位装置から要求されたライト量に対して不揮発性半導体メモリへのライト量が２倍となり、ストレージ装置の性能に影響を与える。また、不揮発性半導体メモリ（例えば、フラッシュメモリ）では、ブロックの消去回数に限界があり、ライト量の増加は消去回数の増加につながり、寿命が短くなる。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明の一態様であるストレージ装置は、複数の不揮発性半導体メモリチップと、上位装置に接続される制御デバイスとを備える。制御デバイスは、複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、上位装置に提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶する。制御デバイスは、複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、第一物理領域に格納されているユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、更新ユーザデータと複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成する。制御デバイスは、複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる更新ユーザデータと複数の第二ユーザデータ及び第二パリティデータのそれぞれを格納し、変換情報において更新ユーザデータが格納された第二物理領域と第一論理領域とを対応付ける。
【発明の効果】
【００１４】
本発明によれば、データの更新毎にパリティを更新する必要がなくなる。よって、不揮発性半導体メモリを記憶媒体とするストレージ装置において、データに対してパリティを生成することで信頼性を向上させながら、不揮発性半導体メモリへパリティを書き込む量を抑制できる。
【図面の簡単な説明】
【００１５】
【図１】実施例１の計算機システムの構成を示す。
【図２】フラッシュメモリストレージ装置１０１の構成を示す。
【図３】メモリ１０８の構成を示す。
【図４】フラッシュメモリチップ１１０の接続状態及び内部構成を説明するための図である。
【図５】フラッシュメモリストレージ装置１０１の冗長構成を模式的に示す図である。
【図６】論物変換テーブル３０６の一例を示す。
【図７】論物変換処理の概要を示す。
【図８】ＲＧ管理テーブル３０７を示す。
【図９】ブロック管理テーブル３０８を示す。
【図１０】逆引き管理テーブル３０９を示す。
【図１１】ＲＧ構成テーブル３１０の一例を示す。
【図１２】データ更新処理の概要を説明する図である。
【図１３】データ更新処理のフローチャートである。
【図１４】リクラメーション処理及びリフレッシュ処理の概要を説明する図である。
【図１５】リクラメーション処理又はリフレッシュ処理のフローチャートである。
【図１６】コレクション処理の概要を説明する図である。
【図１７】コレクション処理のフローチャートである。
【図１８】回復処理のフローチャートである。
【図１９】空きブロック管理情報を模式的に示す。
【図２０】ＲＧ４０６の構成方法の一例を示す。
【図２１】ＲＧ４０６の動的管理処理のフローチャートである。
【図２２】ブロック単位リフレッシュ処理の一例を示す。
【図２３】ブロック単位リフレッシュ処理のフローチャートである。
【発明を実施するための形態】
【００１６】
以下，本発明のいくつかの実施例を、図面を用いて説明する。なお，これらの実施例は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではない。
【実施例１】
【００１７】
以下、本実施例の計算機システムの構成について説明する。【００１８】
図１は、実施例１の計算機システムの構成を示す。【００１９】
計算機システムは、ストレージシステム２００と、１つ以上のホスト計算機２０１と、管理端末２０２とを有する。ホスト計算機＃０、＃１のそれぞれは、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）２０３を介して、ストレージシステム２００に接続される。【００２０】
ストレージシステム２００は、ストレージコントローラ２０４と、複数のフラッシュメモリストレージ装置１０１とを有する。図面及び以下の説明では、フラッシュメモリストレージ装置をＦＭＰＫＧ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ  Ｐａｃｋａｇｅ）と呼ぶことがある。なお、本実施例では、ストレージコントローラ２０４は１つであるが、複数のストレージコントローラ２０４で冗長構成されてもよい。【００２１】
ストレージコントローラ２０４は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０７と、メモリ２０８と、複数のホストＩＦ（Ｉｎｔｅｒｆａｃｅ）２０６と、複数のストレージＩＦ（Ｉｎｔｅｒｆａｃｅ）２０９と、保守ＩＦ（Ｉｎｔｅｒｆａｃｅ）２０５とを有する。ストレージコントローラ２０４内の各部は、バスを介して接続される。メモリ２０８は、ストレージシステム２００を制御するためのプログラムを格納する領域及びデータ一時的に格納するキャッシュメモリとしての領域を有する。ＣＰＵ２０７は、メモリ２０８に格納されたプログラムに従ってストレージシステム２００を制御する。【００２２】
ホストＩＦ２０６は、計算機２０１との通信を行うインタフェイスである。ストレージＩＦ２０９は、ＦＭＰＫＧ１０１に接続され、ＦＭＰＫＧ１０１との通信を行うインタフェイスである。保守ＩＦ２０５は、管理端末２０２と接続され、管理端末２０２との通信を行うインタフェイスである。【００２３】
なお、管理者は、管理端末２０２からストレージコントローラ２０４の管理やメンテナンスなどを行う。しかし、管理端末２０２は必須要素ではなく、ストレージコントローラ２０４の管理やメンテナンスなどは、例えば、ホスト計算機２０１から行ってもよい。【００２４】
上記の計算機システムでは、ホスト計算機２０１とＦＭＰＫＧ１０１とが、ストレージコントローラ２０４を介して接続されていたが、例えば、ストレージコントローラ２０４を省き、ホスト計算機２０１とＦＭＰＫＧ１０１とが直接接続されてもよい。【００２５】
以下、ＦＭＰＫＧ１０１の構成を説明する。なお、複数のＦＭＰＫＧ１０１は、基本的な構成が同じである。【００２６】
図２は、ＦＭＰＫＧ１０１の構成を示す。【００２７】
ＦＭＰＫＧ１０１は、フラッシュメモリ制御装置１０２と、１つ以上のフラッシュメモリチップ１１０とを有する。図面及び以下の説明では、フラッシュメモリチップ１１０を、ＦＭチップと呼ぶことがある。図面及び以下の説明では、フラッシュメモリ制御装置１０２を、ＦＭ制御装置と呼ぶことがある。【００２８】
ＦＭ制御装置１０２は、ストレージインタフェイス１０３と、フラッシュメモリコントローラ１０４、バッファ１０５と、バッテリ１０６と、ＣＰＵ１０７と、メインメモリ１０８と、フラッシュメモリインタフェイス１０９とを有する。図面及び以下の説明では、フラッシュメモリコントローラ１０４をＦＭコントローラと呼ぶことがある。また、ストレージインタフェイス１０３を、ストレージＩＦ（Ｉｎｔｅｒｆａｃｅ）又は上位インタフェイスと呼ぶことがある。また、フラッシュメモリインタフェイス１０９を、ＦＭＩＦ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ  Ｉｎｔｅｒｆａｃｅ）又は下位インタフェイスと呼ぶことがある。また、メインメモリ１０８をメモリと呼ぶことがある。【００２９】
ＦＭ制御装置１０２は、ストレージＩＦ１０３を介して上位装置に接続され、上位装置との通信を行う。ここで、上位装置とは、ストレージコントローラ２０４であってもよいし、ホスト計算機２０１であってもよい。ストレージＩＦ１０３には、例えばＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）やＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）などのストレージインターフェイスが採用されてもよいし、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）−Ｅｘｐｒｅｓｓなどのバスインタフェイスが採用されてもよい。ストレージＩＦ１０３は、上位装置からのＩ／Ｏ（Ｉｎｐｕｔ  ｏｒ  Ｏｕｔｐｕｔ）要求を受信する。【００３０】
ＦＭＩＦ１０９は、複数のＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ１１１を有する。各ＤＭＡコントローラ１１１には、バス４０５を介して１つ以上のＦＭチップ１１０が接続される。具体的には、例えば、ＤＭＡコントローラ＃３には、バス４０５ｃを介してＦＭチップ＃４及びＦＭチップ＃５が接続されている。以後の説明及び図面において、ＤＭＡコントローラ１１１を単にＤＭＡと呼ぶことがある。【００３１】
ＣＰＵ１０７は、ＦＭ制御装置１０２の全体を制御するプロセッサであり、メモリ１０８に格納されたマイクロプログラムに基づき動作する。例えば、上位装置から受領したＩ／Ｏ要求に対して、メモリ１０８に格納されている論物変換のための情報（例えば、後述の論物変換テーブル３０６）を参照し、複数のＦＭチップ１１０へのデータのリード又はライトを制御する。また、ＣＰＵ１０７は、ＦＭチップ１１０の使用状況に応じて，リクラメーションやウェアレベリングを実行する。【００３２】
ＦＭコントローラ１０４は、ＣＰＵ１０７によって制御され、ＦＭチップ１１０へのデータのリード又はライトを実行する。また、ＦＭコントローラ１０４は、ストレージＩＦ１０３を通じて、上位装置との通信を制御する。【００３３】
本実施例のＦＭ制御装置１０２は、ＦＭコントローラ１０４の外部にＣＰＵ１０７を備えている。しかし、ＦＭコントローラ１０４は、ＣＰＵ１０７や、上位及び下位インタフェイスを含む１つのＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）で構成されていてもよい。ＦＭコントローラ１０４及びＣＰＵ１０５は、他の制御デバイスであってもよい。【００３４】
メモリ１０８とバッファ１０５は、より高速なアクセスが可能な揮発性の記憶領域であり、例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。メモリ１０８は、ＣＰＵ１０７が直接制御に用いるワークスペースであり、バッファ１０５より短いレイテンシを提供する。一方、バッファ１０５は、データのバッファ用であるとともに、メモリ１０８に格納しきれない大きなサイズの情報を格納する。なお、本実施例では、ＦＭ制御装置１０２は、メモリ１０８とバッファ１０５とを別の記憶領域として備えているが、これらを１つの記憶領域として備えてもよい。【００３５】
バッテリ１０６は、例えば、ＦＭ制御装置１０２への外部からの電力の供給が遮断された場合に、ＦＭ制御装置１０２へ電力を供給する。【００３６】
ＦＭ制御装置１０２の内部アーキテクチャは、この実施例に限定されず、それぞれの機能を１つないしは複数のデバイスによって代用してもよい。【００３７】
図３は、メモリ１０８の構成を示す。【００３８】
メモリ１０８は、例えば、オペレーティングシステム３０３、フラッシュストレージ制御プログラム３０２、データ転送制御プログラム３０１、入出力制御プログラム３０４、論物変換プログラム３０５、論物変換テーブル３０６、ＲＧ管理テーブル３０７、ブロック管理テーブル３０８、逆挽き管理テーブル３０９、ＲＧ構成テーブル３１０、データ更新処理プログラム３１１、リクラメーション処理／リフレッシュ処理プログラム３１２、及びコレクション処理プログラム３１３を記憶する。【００３９】
オペレーティングシステム３０３は、ＣＰＵ１０７が各プログラムを実行する際のスケジューリング等の基本処理を行う。【００４０】
フラッシュストレージ制御プログラム３０２は、ＦＭ制御装置１０２が上位装置へ提供する論理領域の管理や、バッファ１０５の管理など、ＦＭ制御装置１０２がストレージデバイスとして動作するための制御を行う。【００４１】
データ転送制御プログラム３０１は、ＦＭコントローラ１０４の制御行う。【００４２】
入出力制御プログラム３０４は、ストレージＩＦ１０３、ＦＭＩＦ１０９の制御を行う。【００４３】
論物変換プログラム３０５は、上位装置から発行されたＩ／Ｏ要求を取得し、論物変換テーブル３０６を用いて、そのＩ／Ｏ要求に指定されている論理領域に相当する物理領域を特定する。例えば、論物変換プログラム３０５は、論理領域上の論理アドレスを、ＦＭチップ１１０上の物理アドレスに変換する。なお、本実施例では、「論理アドレス」を論理ページ単位で表し、論理ページの位置を論理ページ番号で表すが、論理ページの先頭を示すＬＢＡ  （Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）であってもよい。また、本実施例では、「物理アドレス」を物理ページ単位で表し、物理ページの位置をブロック番号と物理ページ番号の組み合わせで表すが、これに限られない。物理ページの位置は、その物理ページの先頭を示す物理アドレスであっても良い。また、論物変換プログラム３０５は、論物変換テーブル３０６を管理し、論物変換テーブル３０６における情報の登録や変更を行う。【００４４】
論物変換テーブル３０６は、論物変換プログラム３０５が動作する際に使用する論物変換のための情報である。【００４５】
ＲＧ管理テーブル３０７は、ＦＭＰＫＧ１０１が有するＲＧの管理情報である。【００４６】
ブロック管理テーブル３０８は、ＦＭＰＫＧ１０１が有するブロックの管理情報である。【００４７】
逆引き管理テーブル３０８は、論物変換のための情報である。【００４８】
ＲＧ構成テーブル３１０は、ＦＭＰＫＧ１０１が有するＲＧの構成情報である。【００４９】
なお、データ更新処理プログラム３１１、リクラメーション処理／リフレッシュ処理プログラム３１２及びコレクション処理プログラム３１３については、後述する。【００５０】
図４は、ＦＭチップ１１０の接続状態及び内部構成を説明するための図である。【００５１】
１つのバス４０５に、複数のＦＭチップ１１０が接続される【００５２】
ＦＭチップ１１０は、複数のダイ４０１と、複数のページバッファ４０２とを有する。ページバッファ４０２は、ＦＭ制御装置１０２から発行されたＩ／Ｏコマンドの対象データを、一時的に格納する。【００５３】
ページバッファ４０２には、それぞれ、ＦＭチップ１１０内部のバス４０７を介して、１つ以上のダイ４０１が接続される。ページバッファ４０２は、例えば、ＤＲＡＭ等の揮発性半導体メモリである。ダイ４０１は、例えば、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体メモリである。本実施例において、ページバッファ＃０は、ダイ＃０に接続されており、ページバッファ＃１は、ダイ＃１に接続されている。各ダイ４０１は、複数のブロック４０３を有する。本実施例では、ブロック４０３を単位として消去処理が行われる。ブロック４０３は、複数の物理ページ４０４を有する。また、本実施例では、物理ページ４０４を単位としてライト及びリードが行われる。【００５４】
ここでのライトとは、消去済みの物理ページ４０４へデータを書き込むことであり、リードとは、物理ページ４０４に格納されたデータを読み出すことである。データが格納された物理ページ４０４に再度ライトはできず、その物理ページ４０４を含むブロック４０３の消去処理を実行する必要がある。消去処理により、ブロック４０３に含まれる物理ページ４０４に格納されたデータはすべて消去され、再びライト可能となる。以下の説明では、消去済みの物理ページ４０４を空きページという場合がある。なお、物理ページ４０４単位で消去処理を行うことは出来ない。【００５５】
ＦＭチップ１１０は、ＦＭ制御装置１０２のＦＭＩＦ１０９からの、ライトコマンド、リードコマンド又は消去処理のコマンドを受領する。【００５６】
なお、物理ページ４０４は、２ＫＢｙｔｅ、４ＫＢｙｔｅ、８ＫＢｙｔｅ程度のサイズであり、ブロック４０３を構成する物理ページ４０４の数は１２８、２５６等である。【００５７】
なお、ＦＭチップ１１０の１ブロック４０３のデータ消去にかかる時間は、１ページ４０４のデータを書き込むのに要する時間と比べて約１桁長い。従って、ＦＭチップ１１０が１ページ４０４のデータの書換えのために毎回１ブロック４０３のデータ消去を行なうようにすると、ＦＭチップ１１０のデータ書換え性能が低下する。記憶媒体がＦＭチップ１１０である場合、ＦＭちっぷ１１０からデータを消去する時間を隠蔽するアルゴリズムを用いてデータをフラッシュメモリへ書き込むようにしてもよい。【００５８】
通常、ＦＭチップ１１０に対するデータの書換え動作は、未使用領域へデータを追記する方式で行う。しかし、データの書き換えが繰り返されると、ＦＭチップ１１０内の未使用領域が少なくなるため、ＦＭチップ１１０に書き込まれている不要なデータを消去して記憶領域を再利用可能な状態にする必要が生ずる。そこで、旧データを含むブロック４０３内の有効なデータのみを未使用領域にコピーし、コピー元のブロック４０３を消去して再利用可能な状態にするブロック再生処理が知られている。以下、これをリクラメーションと呼ぶ（以下、これをＲＣと省略して表記する場合もある。）。このリクラメーションは、無効データが多くなったブロック４０３を対象に実行される。【００５９】
またＦＭチップ１１０は、データを書き込まれたページ４０４において、時間とともに読み出しエラー率が増加する。これは、ＦＭチップ１１０のデータの保持特性による。つまり、セルに保持される電子が徐々に抜けてしまうためである。時間経過により発生するエラーは、リテンションエラーと呼ばれる。これを回避するために、書き込んでから一定時間経過したページ４０４を、別のページ４０４にコピーする処理が知られている。以下、この処理を、リフレッシュと呼ぶ（以下、これをＲＦと省略して表記する場合もある）。【００６０】
以上で述べたデータ保持特性によれば、ＦＭチップ１１０は、セルの消去回数の増加に伴い劣化する。従って、一般的にフラッシュメモリを用いたストレージ装置であるＳＳＤのベンダは、データ保持を保証可能な最大の消去回数を提示している。特定のブロック４０３のデータ消去回数が増大して、そのブロック４０３が使用不能となった場合、他のブロック（領域）４０３が健全な状態であるにも関わらずＦＭチップ１１０全体の容量を満足できなくなる場合がある。このため、特定ブロック４０３のみが劣化しないように、ブロック４０３の消去回数を均等に分散させる平準化処理(以下、ウェアレベリングいう場合もある)が知られている。【００６１】
以上で述べたデータ消去時間の隠蔽とデータ消去回数の平準化のため、ストレージシステム２００内のフラッシュメモリコントローラ１０４は、データ書込みの際に、論理アドレスを物理アドレスへ変換する論理物理アドレス変換処理を行う。フラッシュメモリコントローラ１０４は、論理物理アドレス変換処理のための情報を、例えば、前述の論理物理アドレス変換テーブル３０６として保存する。以下、論理物理アドレス変換処理を論物変換、論理物理アドレス変換テーブルを論物変換テーブルと呼ぶことがある。【００６２】
論物変換は、フラッシュメモリを効率的に使用するために重要な役割を有している。低い自由度の論物変換を用いる場合、論物変換テーブル３０６のサイズを抑えられる代わりに、リクラメーションが頻発するなどにより性能が低下する。一方、高い自由度の論物変換を用いる場合、論物変換テーブルのサイズが膨大になるとともに、制御コストが増大する。これらの問題点を解決するために、ブロック４０３内の特定の領域を更新データ格納領域として使用する方法や、論物変換テーブル３０６を含むフラッシュメモリの制御層であるＦＴＬ（ｆｌａｓｈ  ｔｒａｎｓｌａｔｉｏｎ  ｌａｙｅｒ）を複数保有し（図示なし）、アクセス類型に応じて最適なＦＴＬに切り替える方法をおこなってもよい。【００６３】
図５は、ＦＭＰＫＧ１０１の冗長構成を模式的に示す図である。【００６４】
冗長構成を持たせる方法として、ＲＡＩＤのように複数のデータ要素に対して冗長データであるパリティを生成する方法がある。本実施例のＦＭＰＫＧ１０１のような半導体記憶デバイスはディスク装置ではないが、本実施例では冗長構成を持たせるためにパリティを生成するため、便宜上ＲＡＩＤと呼ぶ。また、本実施例では、冗長性を持つ１つの単位を、ＲＡＩＤ  Ｇｒｏｕｐ（ＲＧ）と呼ぶ。【００６５】
フラッシュメモリの場合、ＲＧ構成は、例えばＦＭチップ１１０、ダイ４０１、ブロック４０３単位で構成することが考えられるが、これらの中では、最も小さいブロック４０３を単位とするＲＧ構成が最も突発的な障害に対応しやすいと考えられる。以下では、ブロック単位で構成されるＲＧを説明する。【００６６】
ＲＧ＃０は、ブロック＃０〜３により、３Ｄ＋１Ｐで構成される。具体的には、例えば、ブロック＃０、＃１、＃２にはデータがライトされ、ブロック＃３にはパリティがライトされる。また、本実施例では、１つのストライプは、各ブロック４０３における、同一オフセット位置の物理ページ４０４で構成するものとする。本実施例では、各ブロック４０３における同一オフセット位置の物理ページ４０４を、同じ物理ページ番号で示している。このため、ブロック＃０〜３において、物理ページ番号毎にストライプを構成している。なお、本実施例は、一つのＲＧの中ではパリティが特定のブロック４０３に書き込まれる、いわゆるＲＡＩＤ４と同様のデータとパリティの配置としている。【００６７】
通常のＨＤＤを用いたＲＡＩＤ構成であれば、ストライプ内のデータの一部が更新された場合、そのストライプ内のパリティを更新する必要がある。このため、特定のＨＤＤにアクセスが集中しないように、パリティの配置が分散されるＲＡＩＤ５が用いられることが多い。しかし、本実施例によれば、ストライプ内のデータの一部が更新される場合、他のストライプを形成してパリティを生成する。このため、更新されるデータが含まれる元のストライプ内のパリティは更新されない。このため、パリティの配置を分散させる必要がなく、パリティの配置を固定的にすることで、アドレスの管理が容易になるという効果がある。【００６８】
また、例えば、パリティの配置を分散させるＲＡＩＤ５やＲＡＩＤ６と同様のデータ配置としてもよい。本実施例では、データ更新のたびにパリティを更新する必要がないため、一度書き込まれたパリティは基本的にはリードされない。フラッシュメモリでは、データをリードする際にセルに電圧を印加する必要があり、その電圧がリード対象セルの周辺にも影響し、データのリードが不可能になるという現象（リードディスターブ）が発生する。このため、ＲＡＩＤ５のようにパリティの配置をローテーションすることで、リードが行われないパリティを格納したページが周期的に配置されることになり、リードディスターブの影響を低減することができる。リードディスターブが低減されることで、信頼性が向上するという効果がある。【００６９】
また、本実施例では、ＲＧを構成するブロックは任意に選択することができる。ここで、ＲＡＩＤ４のようにパリティを配置した場合に、パリティを格納するブロックが１つのバスに接続されたＦＭチップに集中すると、ほとんどリードに用いられないバスが存在することになり、リード性能が低下する。ＲＡＩＤ５のようにパリティを分散配置すれば、特定のバスがリードに用いられないことはなくなり、リード性能低下は抑制される。【００７０】
以下の説明では、ＦＭＰＫＧ１０１内で、障害により閉塞し得る物理デバイスの単位を、障害単位と呼ぶ。また、ＦＭ制御装置１０２は、複数の障害単位にそれぞれ属する複数のブロック４０３を用いてＲＧ４０６を構成する。障害単位は、ブロック４０３や、ダイ４０１や、ＦＭチップ１１０や、バス４０５や、ＤＭＡ１１１などである。本実施例では、ＲＧ＃０を構成するブロック＃０〜３がそれぞれ異なるバス＃０〜３に接続されているものとする。このため、ブロック＃０〜３はそれぞれ、異なるダイ４０１に属するとともに、異なるＦＭチップ１１０に属している。このようにＲＧ４０６を構成することにより、障害に対するデータ復旧の可能性を高め、ＦＭＰＫＧ１０１の信頼性を高めることができる。【００７１】
また、ブロック＃０〜３がそれぞれ異なるバス４０５に接続されていることで、並列処理が可能である。具体的には、ＦＭ制御装置１０２は、図示しないＣｈｉｐ  Ｅｎａｂｌｅ（ＣＥ）回路により、駆動対象となるＦＭチップ１１０を指定できる。例えば、本実施例では、バス＃０及び＃１はＤＭＡ＃０に、バス＃２及び＃３はＤＭＡ＃１にそれぞれ接続しており、かつ、１つのＤＭＡ１１１に対し、バス４０５を介して複数のＦＭチップ１１０が並列に接続している。バス＃０と＃１が共通ＣＥを使用している場合、ＤＭＡ＃０は、バス＃０及びバス＃１に属する異なる２つの物理ページ４０４に同時ライトできる。同様に、バス＃２及び＃３が共通ＣＥを使用している場合、ＤＭＡ＃１は、バス＃２とバス＃３に属する異なる２つの物理ページ４０４に同時ライトできる。また、ＤＭＡ＃０及び＃１は、異なるブロック４０３について同時消去できる。このように、並列動作可能なＲＧ構成により、ＦＭＰＫＧ１０１の性能を向上することができる。【００７２】
図６は、論物変換テーブル３０６の一例を示す。【００７３】
論物変換テーブル３０６は、データ格納先の論理ページ６０２と物理ページ６０３とを対応づけるエントリを有する。この図の例では、論理ページＬ＃１には、物理ページ（Ｂ＃０  Ｐ＃０）が対応づけられている。論物変換テーブル３０６は、例えば、論理ページと物理ページとの対応づけが変更される毎に更新される。【００７４】
なお、本実施例では、論物変換テーブル３０６により、論理ページと物理ページとを直接対応づける場合を説明しているが、これに限られない。論理領域におけるデータ格納位置と物理領域におけるデータ格納位置とが直接又は間接的に対応づけられていればよい。論理領域と物理領域との対応付けは、このテーブル３０６のみで行われなくてもよく、例えば、他のテーブルも経由してもよい。また、対応づけられる論理領域と物理領域のサイズは、等しくてもよいし、異なっていてもよい。【００７５】
図７は、論物変換処理の概要を示す。【００７６】
論物変換処理は、ＣＰＵ１０７がメモリ１０８に格納された論物変換プログラム３０５を実行することにより行われる。【００７７】
論理アドレス層５０１は、ＦＭ制御装置１０２が上位装置に提供する論理領域を表す。本実施例では、論理アドレス層５０１における論理領域は、複数の論理ページ５０３に分割されている。また、本実施例では、論理ページ５０３のサイズは、ＦＭチップ１１０の物理ページ４０４のサイズと同じとしている。論理ページ５０３のサイズは、例えば、８ボリュームブロック分である。なお、ここで言う「ボリュームブロック」とは、上位装置に提供される論理領域を構成する個々の記憶領域であり、例えば１ＳＣＳＩブロックに相当する。【００７８】
物理層５０２は、複数のＦＭチップ１１０における物理領域を表す。本実施例では、物理層５０２における物理領域は、複数の物理ページ４０４に分割されている。論物変換プログラム３０５は、論理ページ５０３を物理ページ４０４に関連付け、その関連付けを論物変換テーブル３０６に格納する。【００７９】
本実施例では、論理ページＬ＃０は、ＦＭチップ＃０のブロック＃０の物理ページ＃０に関連づけられている。上位装置からの論理ページ＃０を指定したリード要求を受領した場合は、ＦＭ制御装置１０２は、そのリード要求に従い、論物変換テーブル３０６に基づいて、ＦＭチップ＃０のブロック＃０の物理ページ＃０からデータをリードし上位装置に送信する。【００８０】
本実施例では、論理ページ５０３と物理ページ４０４とのサイズが同一であることを前提とし、論理ページ番号と物理ページ番号とを対応づけているが、これに限られない。また、論理ページ番号又は物理ページ番号に代えて、これらのアドレスによって指定してもよい。論理アドレスは、論理ブロックアドレス（ＬＢＡ）であってもよい。【００８１】
論理ページ５０３のサイズが物理ページ４０４よりも小さい場合は、論理領域において、物理ページサイズより小さい範囲毎に、対応する物理ページ４０４を決定する。具体的には、例えば、論理アドレスが０ｘ００から０ｘ０３までの４つのボリュームブロックと、論理アドレスが０ｘ０４から０ｘ０７までの４つのボリュームブロックとを別々の物理ページ４０４にライトしてもよい。【００８２】
また逆に、論理ページ５０３のサイズが物理ページ４０４よりも大きい場合は、物理ページ４０４の配置に制限を設けてもよい。具体的には、例えば、１つの論理ページ５０３の範囲のアドレスがＬＢＡ０ｘ００から０ｘ０ｆであり、これらが２つの物理ページ４０４に関連付けられる場合、これらの物理ページ４０４は、同一のブロック４０３の連続した物理ページ４０４である等の一定の規則に基づいて決定される物理ページ群であってもよい。この場合は、仮想的に物理ページを拡大して使用していることに等しく、論物変換テーブル３０６の情報量を低減できる。【００８３】
図８は、ＲＧ管理テーブル３０７を示す。【００８４】
ＲＧ管理テーブル３０７は、ＲＧ４０６の管理情報である。ＲＧ管理テーブル３０７は、ＲＧ４０６毎のエントリを有し、各ＲＧ４０６の状態等を管理する。各エントリは、ＲＧ番号（ＲＧ＃）１１０２と、状態１１０３と、有効ページ数１１０４と、次書込位置１１０５と、劣化度１１０６とを有する。【００８５】
ＲＧ番号１１０２は、ＦＭＰＫＧ１０１内でのＲＧ４０６の識別子である。状態１１０３はＲＧ４０６の状態を示す。状態１１０３としては、例えば、「ライト可」、「未使用」、「ライト完」、「消去可」がある。「ライト可」の場合、ＲＧ４０６は、空きページを有し、データのライトが可能な状態である。「未使用」の場合、ＲＧ４０６は、ブロック４０３の消去処理が実行された後であり、ＲＧ４０６の全ての物理ページ４０４が空きページの状態である。「ライト完」の場合、ＲＧ４０６の全ての物理ページ４０４にライトが実行された状態であって、かつ、ＲＧ４０６内の物理ページ４０４のうちの少なくとも１つの物理ページ４０４が論理ページ５０３に対応づけられた状態である。「消去可」の場合、ＲＧ４０６内の全ての物理ページ４０４が論理ページ５０３との対応が外されており、消去処理が可能な状態である。なお、以下の説明では、論理ページ５０３と対応づけられた物理ページ４０４を有効ページ、論理ページ５０３との対応を外された物理ページ４０４を無効ページという場合がある。【００８６】
有効ページ数１１０４は、ＲＧ４０６内の有効ページの数を示す。有効ページ数１１０４は、例えば、当該ＲＧ４０６が、リクラメーションの対象となるか否かの判定の基準となる。次書込位置１１０５は、当該ＲＧ４０６への次のライトコマンドに対するライトデータのライト先の先頭位置を示す値である。本実施例の次書込位置１１０５は、次のライト先の物理ページ番号を示す。次書込位置１１０５は、ライトの度に増加する。次書込位置１１０５は、状態１１０３が「ライト可」のＲＧ４０６について、ライト先を決定する際の判断基準となる。劣化度１１０６は、ＲＧ４０６の劣化度であり、リフレッシュや、リクラメーションの際のコピー先のＲＧ４０６の判定に用いられる。劣化度１１０６は、例えば、ＲＧ４０６を構成する複数のブロック４０３の劣化度の平均値であるが、これに限られず、最小値等どのような値であってもよい。【００８７】
例えば、ＲＧ＃０は、ライト先として選択されうる「ライト可」の状態である。ＲＧ＃０は、劣化度１１０６が「小」であることから、高頻度のライトデータを格納するのに適している。ライト先のＲＧ４０６の選択肢は、多くなくてよく、例えば、ライト先のＲＧ４０６の候補として、高頻度に適したＲＧ４０６と低頻度に適したＲＧ４０６とを、それぞれ数個ずつ用意しておけばよい。【００８８】
図９は、ブロック管理テーブル３０８を示す。【００８９】
ブロック管理テーブル３０８は、ブロック４０３の管理情報である。ブロック管理テーブル３０８は、ブロック４０３毎のエントリを有し、各ブロック４０３の所属等を管理する。各エントリは、ブロック番号（ブロック＃）１２０２と、所属ＲＧ１２０３と、劣化度１２０４とを有する。【００９０】
ブロック番号１２０２は、ブロック４０３を識別する番号である。本実施例では、ブロック番号１２０２は、ＦＭＰＫＧ１０１内の全てのブロック４０３に対し、ユニークに設定されている。この番号は、例えば、ブロック４０３の物理的な配置から求められるものであり、逆に、この番号からブロック４０３の物理位置を求めることも可能である。また、例えば、この番号を物理位置と関係なく設定し、別途ブロック４０３の物理位置を管理する情報を有しても良い。【００９１】
所属ＲＧ１２０３は、ブロック４０３が所属するＲＧ４０６の番号を示す。劣化度１２０４は、ブロック４０３の劣化度を示す。ブロック４０３の劣化度は、セルのデータ保持特性を表すものであり、例えば消去回数であるが、これに限られない。過去のＥＣＣ（ｅｒｒｏｒ  ｄｅｔｅｃｔｉｏｎ  ａｎｄ  ｃｏｒｒｅｃｔｉｏｎ）訂正ビット数を反映させた値や、温度や、書き込み頻度等の環境情報及び統計情報を加味した値でもよい。【００９２】
図１０は、逆引き管理テーブル３０９を示す。【００９３】
逆引き管理テーブル３０９は、ＲＧ４０６の論物変換情報である。逆引き管理テーブル３０９は、ＲＧ４０６毎に、ＲＧ４０６に所属する物理ページ４０４と論理ページ５０３との対応づけを管理する。各エントリは、ＲＧ番号（ＲＧ＃）１３０２と、物理ページ１３０３と、論理ページ１３０４とを有する。【００９４】
逆引き管理テーブル３０９は、例えば、リクラメーションやリフレッシュを行う場合に参照される。本実施例では、リクラメーション処理及びリフレッシュ処理は、ＲＧ４０６を構成する複数のブロック４０３について行われる。このため、対象のＲＧ４０６に含まれる有効ページの取得のために、論物変換テーブル３０６の逆引きが可能なこのテーブル３０９が必要となる。【００９５】
ＲＧ番号１３０２はＲＧ４０６の識別子を示す。物理ページ１３０３は、ＲＧ４０６を構成するブロック４０３の物理ページ４０４を識別する番号である。本実施例では、物理ページ１３０３は、「Ｂ＃０  Ｐ＃０」のようにブロック番号とページ番号を示しているが、ＲＧ４０６内の物理ページ４０４を一意に識別できればどのような値でもよい。論理ページ１３０４は、物理ページ４０４に関連づけられた論理ページ５０３が設定される。対応する論理ページがない場合は、「未割当て」が設定される。【００９６】
なお、逆引き管理テーブル３０９の更新は、ブロック４０３の消去処理が行われるタイミング、又は、消去済みの物理ページ４０４にデータがライトされるタイミングでよい。これは、例えば、データがライトされる毎に論物変換テーブル３０６が更新されるためであり、必要に応じて、論物変換テーブル３０６と逆引き管理テーブル３０９とを突き合わせれば、物理ページ４０４が無効化されたこと等を判別できるためである。また、この逆引き管理テーブル３０９とは別に、ビットマップ等の周知の方法により、物理ページ４０４が有効か無効かを管理してもよい。すなわち、或る論理ページ５０３に格納されたデータが更新された際に、その論理ページ５０３に対応づけられていた物理ページ４０４であってデータの更新により無効ページとなった物理ページ４０４のビットをオフにする。これにより、リクラメーション処理及びリフレッシュ処理の際に、どの物理ページ４０４が有効又は無効かを判定する必要がない。【００９７】
図１１は、ＲＧ構成テーブル３１０の一例を示す。【００９８】
ＲＧ構成テーブル３１０は、ＲＧ４０６の構成情報である。ＲＧ構成テーブル３１０は、ＲＧ４０６毎のエントリを有し、各ＲＧ４０６に所属するブロック４０３を管理する。各エントリは、ＲＧ番号（ＲＧ＃）１８０２と、ブロック（０）１８０３と、ブロック（１）１８０４と、ブロック（２）１８０５と、ブロック（３）１８０６とを有する。例えばＲＧ＃「０」は、「Ｂ＃０」、「Ｂ＃１０」、「Ｂ＃５」、「Ｂ＃６」の４つのブロック４０３により構成されている。なお、ＲＧ４０６は、例えば、障害単位が異なり、並列処理が可能な複数のブロック４０３で構成される。また、ＲＧ構成テーブル３１０は、例えば、管理者により管理端末２０２を介して設定される。本実施例では、１つのＲＧ４０６内の各ブロック４０３に、データが格納されるか、パリティが格納されるかは定義されない。ＦＭ制御装置１０２は、ＦＭＰＫＧ１０１内の複数の任意のブロック４０３を選択し、ＲＧ４０６としてＲＧ構成テーブル３１０に登録する。ＦＭ制御装置１０２は、それぞれ異なるバスに接続されたＦＭチップ１１０からブロック４０３を選択し、ＲＧとする。特定のバスにＲＧ４０６内の複数のブロック４０３が存在すると、バスに障害が発生した場合にデータの回復が不可能となるため、これを回避するためである。また、複数のバスからＲＧ４０６を構成するブロック４０３をＲＧ４０６として登録した方が、複数のバスを並列動作させることが可能となり、リード及びライトの性能は向上する。【００９９】
以下、本実施例におけるデータ更新処理の概要を説明する。図１２は、データ更新処理の概要を説明する図である。【０１００】
通常の複数ＨＤＤによるＲＡＩＤであれば、パリティを有するＲＧの場合、データの更新の際に、更新対象となるデータ（この処理の説明では、対象データという）と同一のストライプ内のパリティも更新される。これをそのままフラッシュメモリの複数ブロックによるＲＡＩＤに適用すると、更新データに加えて更新パリティも別の物理領域にライトしなければならない。ライト量の増加は、フラッシュメモリの劣化につながる。このため、本実施例では、以下に説明するように、更新データに対しては別のストライプを形成して、パリティの生成を行う。【０１０１】
ＲＧ＃０は、ブロックＢ＃０〜Ｂ＃３で構成されている。ブロックＢ＃０〜Ｂ＃２は、データを格納するブロックであり、ブロックＢ＃３は、パリティを格納するブロックである。これら異なるブロックＢ＃０〜３における同一の物理ページ番号の物理ページが、一つのストライプを構成している。例えば、Ｂ＃０のＰ＃０と、Ｂ＃１のＰ＃０と、Ｂ＃２のＰ＃０と、Ｂ＃３のＰ＃０とが、一つのストライプを構成している。【０１０２】
データ更新処理において、ＦＭ制御装置１０２は、上位装置から受領したライトデータ８１０をバッファ１０５に格納する（１）。そして、ＦＭ制御装置１０２は、上位装置が指定した論理ページに対応する物理ページ（ＲＧ＃０  Ｂ＃０  Ｐ＃０）の対象データＤ０を、バッファ１０５内の格納位置８０９にリードする（２）。ＦＭ制御装置１０２は、物理ページ（ＲＧ＃０  Ｂ＃０  Ｐ＃０）を無効ページとする。ここでは、ライトデータ８１０が対象データＤ０よりも小さなサイズであるとしている。このため、ＦＭ制御装置１０２は、ライトデータ８１０を対象データＤ０とマージし、マージデータＤ０ａをバッファ１０５内の格納位置８１１に格納する（３）。なお、リードした対象データのバッファ１０５内の格納位置８０９と、マージデータＤ０ａの格納位置８１１とは、同じであってよい。【０１０３】
ＦＭ制御装置１０２は、マージデータＤ０ａと、バッファ１０５に格納された他のデータＤ６、Ｄ７とにより、パリティＰ５を生成する（４）。ここで、データＤ６、Ｄ７は、例えば、上位装置からのライト要求に基づくライトデータ（マージデータを含む）、または上位装置からのリード要求の際にリードエラーとなったデータ（エラーデータ）を復元したデータ（復元データ）である。ＦＭ制御装置１０２は、データＤ６、Ｄ７、Ｄ０ａと、パリティＰ５とを新たなストライプとして構成し、ライト先のＲＧ＃１の次書込位置１１０５に従って、対応する各位置（Ｂ＃４  Ｐ＃０、Ｂ＃５  Ｐ＃０、Ｂ＃６  Ｐ＃０、Ｂ＃７  Ｐ＃０）に格納する（５）。本実施例では、ライト先ＲＧ＃１は、対象データＤ０が格納されているＲＧ＃０とは別のＲＧ４０６であるが同じであってもよい。本実施例では、別のＲＧ４０６とすることで、ライト先として適切なＲＧ４０６が選択できる。例えば、本実施例では、ライト先ＲＧ＃１は、ライトデータのライト頻度、つまり、上位装置に指定された論理ページのライト頻度等に基づき決定される。ウェアレベリングの観点からみれば、ライト頻度の高いデータは、劣化度の小さいブロックを選択するのが望ましい。例えば、ＦＭ制御装置１０２は、論理ページ５０３毎にライト頻度の管理情報を有してもよい。また、ライト頻度の情報は、論理ページ５０３に限らず、ＬＢＡや論理ページ５０３よりも広い領域毎に管理されてもよい。さらに、ライト先ＲＧは、Ｉ／Ｏ種別で判別しても良い。Ｉ／Ｏ種別とは、例えば上位装置からのライト要求に基づくライトか、リクラメーション処理又はリフレッシュ処理に基づくライト（コピー）かを識別するものである。後者は前者よりライト頻度が低いとしてもよい。【０１０４】
なお、本実施例のＲＧ４０６においては、３つのデータと１つのパリティがストライプを構成していたが（３Ｄ＋１Ｐ）、これに限られない。ストライプが、二つ以上のパリティを有していても良い。【０１０５】
図１３は、データ更新処理のフローチャートである。【０１０６】
データ更新処理は、ＦＭ制御装置１０２のＣＰＵ１０７がデータ更新処理プログラム３１１を起動することで実行される。なお、以下では、ライトデータは、対象データと同一サイズであり、そのまま更新データとなる場合を説明する。【０１０７】
プログラム３１１は、ＦＭ制御装置１０２が、上位装置からのライト要求を受領したのを契機に起動する（Ｓ９０２）。【０１０８】
ステップＳ９０３で、プログラム３１１は、上位装置からのライト要求に付随するライトデータをバッファへ格納する。この際、プログラム３１１は、論物変換テーブル３０６に基づき、ライト要求で指定されたライト先の論理ページ５０３に対応する物理ページ４０４を特定して対象ページとし、対象ページを無効ページにし、ＲＧ管理テーブル３０７において、対象ページが属するＲＧ４０６の有効ページ数を、無効にした数分減らす。【０１０９】
ステップＳ９０４で、プログラム３１１は、上位装置に対し、ライト完了通知を送信する。【０１１０】
ステップＳ９０５で、プログラム３１１は、バッファ１０５に１ストライプ分のデータが蓄積されたか否かを判定する。このデータはバッファ１０５上に連続的に格納されても良いし、キャッシュ制御で複数のセグメントに分割管理されていても良い。判定の結果が真の場合（Ｓ９０５：Ｙｅｓ）、プログラム３１１は、ステップＳ９０６に処理を進める。一方、判定の結果が偽の場合（Ｓ９０５：Ｎｏ）、プログラム３１１は、処理を終了する。【０１１１】
ステップＳ９０６で、プログラム３１１は、バッファ１０５に格納された１ストライプ分のデータに基づき、パリティを生成する。【０１１２】
ステップＳ９０７で、プログラム３１１は、ライト先のＲＧ４０６をライト先ＲＧとして選択する。【０１１３】
ステップＳ９０８で、プログラム３１１は、バッファ１０５に格納された１ストライプ分のデータ及びパリティを、ライト先ＲＧの各ブロック４０３の物理ページ４０４にライトする。【０１１４】
ステップＳ９０９で、プログラム３１１は、論物変換テーブル３０６及びＲＧ管理テーブル３０７を更新する。具体的には、例えば、論物変換テーブル３０６について、ライトしたデータの格納先の物理ページ４０４を有効ページとするように、それぞれ論理ページ５０３と対応づけるとともに、対象ページを無効ページとするように、論理ページ５０３との対応付けを外す。また、ＲＧ管理テーブル３０７について、ライト先ＲＧの有効ページ数１１０４及び次書込位置１１０５を更新する。また、次書込位置１１０５が当該ＲＧ４０６の終端に達した場合は、当該ＲＧ４０６の状態１１０３を「ライト完」とする。【０１１５】
上記処理においては、データの更新毎に更新パリティを空きページにライトする必要がなくなるため、ライト量を低減できる。従来のフラッシュメモリストレージ装置は、上位装置から、データ更新のためライト要求（更新要求）があった場合、対象データと、対象データが属するストライプのパリティ（対象パリティ）とをバッファにリードし、対象データ、対象パリティ及び更新データから更新パリティを生成し、空きページに更新データと更新パリティとをライトしなければならなかった。このため、例えば、３Ｄ＋１Ｐの場合、３つのデータへの更新要求に対し、データの更新毎に生成される更新パリティも３回ライトしなければならなかった。しかし、本実施例のＦＭＰＫＧ１０１は、対象データは、バッファ１０５上の別のデータと新たにストライプを構成するので、データ更新の度に更新パリティを空きページにライトする必要がない。例えば、３Ｄ＋１Ｐの場合、３つのデータへの更新要求に対し、パリティのライトは１度でよいため、パリティによるデータの信頼性を維持しつつ、ライト量を大幅に低減することができる。例えば、１５Ｄ＋１Ｐなど、グループを構成する数が大きくなるほどその効果も大きい。また、ストライプをページ単位で構成するため、処理量も少なくてすむ。【０１１６】
また、論物変換テーブル３０６の更新により、対象データが格納された物理ページ４０４は、論理ページ５０３との対応が外れ無効ページとなる。しかし、ＲＧ４０６のリクラメーション処理又はリフレッシュ処理が行われるまでは、対象データは消去されず対象データが属するストライプは維持される。このため、例えば、このストライプに属するいずれのデータにリードエラーが発生した場合であっても、エラーデータの復元が可能である。【０１１７】
また、本実施例は、論理ページでなく、物理ページでストライプを構成する。具体的には、対象のデータの格納位置に関わらず、バッファに格納された順に１ストライプ分のデータからパリティを生成し、それらのデータ及びパリティを、ストライプを構成する空きページへライトする。このため、データの書き換えができないＦＭＰＫＧ１０１であっても、柔軟に対応できる。【０１１８】
なお、本実施例のデータ更新処理は、上位装置からライト要求を受領し、ライトデータをバッファ１０５に格納した後、すぐに上位装置に対してライト完了通知を送信する、いわゆるライトバック（ライトアフタ）を前提としている。このデータ更新処理は、１ストライプ分のデータをバッファ１０５に蓄積した後にパリティを生成し、これらデータとパリティを物理ページ４０４にライトするため、効率が良い。変形例として、物理ページ４０４にライトデータをライトした後に上位装置にライト完了通知を送信する、いわゆるライトスルーを前提としたデータ更新処理であってもよい。この場合、データ更新処理プログラム３１１は、１ストライプ分のデータがバッファ１０５に蓄積された後にパリティを生成するのではなく、ライトデータを受信した時点で、その時点までのパリティ（以下、中間パリティという）を生成し、中間パリティのみをバッファ１０５に格納し、ライトデータを物理ページ４０４にライトする。そして、次のライトデータを受信した際に、そのライトデータと中間パリティとに基づき、新たな中間パリティを生成する。ライトスルーを前提としたデータ更新処理は、このように、ライトデータを受領する度に中間パリティを生成し、最終的に１ストライプ分のデータに基づくパリティ（最終パリティ）を生成し、最終パリティを物理ページ４０４にライトする処理である。例えば、ＦＭＰＫＧ１０１がバッテリ１０６を有しておらず、ＦＭ制御装置１０２に電力が供給されない状態が生じた場合であっても、ライトスルーを前提としたデータ更新処理を用いることにより、ライトデータは逐次物理ページ４０４に書き込まれるため、物理ページ４０４にライト済みのデータから中間パリティを復元できる。【０１１９】
次に、本実施例におけるリクラメーション処理及びリフレッシュ処理を説明する。本実施例では、リクラメーション処理及びリフレッシュ処理は、ＲＧ４０６毎に実行される。【０１２０】
図１４は、リクラメーション処理及びリフレッシュ処理の概要を説明する図である。以下、リクラメーション処理について説明するが、リフレッシュ処理についても基本的には同様の処理が行われる。なお、この図中で、網掛けで示す物理ページ４０４を無効ページ、「空」と記載された物理ページ４０４を空きページ、その他の物理ページ４０４を有効ページとしている。また、物理ページ４０４内に示されているＤ０、Ｄ１、…はその物理ページ４０４に格納されているデータを示し、物理ページ４０４内に示されているＰ０、Ｐ２、…はその物理ページ４０４に格納されているパリティを示す。【０１２１】
まず、ＦＭ制御装置１０２は、リクラメーション処理の対象となる対象ＲＧ＃０と、コピー先ＲＧ＃１とを取得する。そして、ＦＭ制御装置１０２は、対象ＲＧ＃０内のすべての有効データＤ０、Ｄ４、Ｄ２をバッファ１０５にリードする（（１）〜（３））。ＦＭ制御装置１０２は、リードした有効データＤ０、Ｄ４、Ｄ２に基づきパリティＰ２を生成して新たなストライプを構成し（４）、新ストライプの有効データＤ０、Ｄ４、Ｄ２及びパリティＰ２をコピー元ＲＧ＃１の空きページにライトする。【０１２２】
なお、このストライプの有効データＤ０、Ｄ４、Ｄ２及びパリティＰ２は、コピー先ＲＧ＃１の異なるブロックＢ＃４、＃５、＃６、＃７の同一オフセット位置の空きページＰ＃０にそれぞれライトされる。【０１２３】
図１５は、リクラメーション処理又はリフレッシュ処理のフローチャートである。【０１２４】
リクラメーション処理又はリフレッシュ処理は、ＦＭ制御装置１０２のＣＰＵ１０７がリクラメーション処理／リフレッシュ処理プログラム３１２を起動することで実行される。【０１２５】
ステップＳ１４０２で、プログラム３１２は、ＲＧ管理テーブル３０７を参照し、処理の対象となるＲＧ４０６を対象ＲＧとして選択する。例えば、リクラメーション処理の場合、プログラム３１２は、状態１１０３が「ライト完」であるＲＧ４０６のうち、有効ページ数１１０４が少ないＲＧ４０６を選択する。また、リフレッシュ処理の場合、プログラム３１２は、例えば、状態１１０３が「消去可」又は「ライト完」であるＲＧ４０６のうち、劣化度１１０６が「大」であるＲＧ４０６を選択する。また、ＦＭ制御装置１０２は、ＲＧ４０６について、データの保持期間の情報を管理していてもよい。この場合、プログラム３１２は、データの保持期間が長いＲＧ４０６を選択してもよいし、劣化度に対してデータ保持期間が長いＲＧ４０６を選択してもよい。劣化度が大きいとデータを保持できる時間が短くなるため、例えば、プログラム３１２は、ＲＧ４０６の劣化度が大きくなるほどデータ保持期間の閾値が小さくなるようにこの閾値を決定し、データ保持期間がこの閾値を超えるＲＧ４０６を選択する。【０１２６】
ステップＳ１４０３で、プログラム３１２は、ＲＧ管理テーブル３０７を参照し、コピー先のＲＧ４０６をコピー先ＲＧとして選択する。例えば、コピー先ＲＧは、状態１１０３が「未使用」又は「ライト可」のＲＧ４０６のうち、劣化度１１０８が「小」のＲＧ４０６が選択される。なお、これはウェアレベリングの観点に基づく。【０１２７】
ステップＳ１４０４で、プログラム３１２は、対象ＲＧに有効データが存在するか否かを判定する。具体的には、プログラム３１２は、ＲＧ管理テーブル３０７を参照し、対象ＲＧの有効ページ数１１０４が「０」でないか否かを判定する。有効データが存在する場合（Ｓ１４０５で、Ｙｅｓ）は、プログラム３１２は、ステップＳ１４１０へ処理を進める。一方、有効データが存在しない場合（Ｓ１４０５で、Ｎｏ）は、プログラム３１２は、ステップＳ１４０６へ処理を進める。【０１２８】
ステップＳ１４０５で、プログラム３１２は、逆引き管理テーブル３０９を参照し、対象ＲＧに割り当てられている論理ページ１３０４に対応する物理ページ（つまり、有効ページ）から一つずつ有効ページを選択し、その有効ページに格納されたデータ（有効データ）をバッファ１０５に読み出す。【０１２９】
ステップＳ１４０６で、プログラム３１２は、バッファ１０５に１ストライプ分のデータが蓄積されたか否かを判定する。これらのデータはバッファ上に連続的に格納されても良いし、キャッシュ制御で複数のセグメントに分割管理されていても良い。判定の結果が真の場合（Ｓ１４０６でＹｅｓ）、プログラム３１２は、ステップＳ１４０７に処理を進める。一方、判定の結果が偽の場合（Ｓ１４０６でＮｏ）、プログラムは、ステップＳ１４０４に処理を戻す。【０１３０】
ステップＳ１４０７で、プログラム３１２は、バッファ１０５に格納された１ストライプ分のデータに基づきパリティを生成する。【０１３１】
ステップＳ１４０８で、プログラム３１２は、バッファ１０５に格納された１ストライプ分のデータ及びパリティを、コピー先ＲＧのそれぞれのブロック４０３にライトする。【０１３２】
ステップＳ１４０９で、プログラム３１２は、論物変換テーブル３０６、ＲＧ管理テーブル３０７及び逆引き管理テーブル３０９を更新する。例えば、プログラム３１２は、論物変換テーブル３０６及び逆引き管理テーブル３０９に関し、対象ＲＧに割り当てられている論理ページにコピー先ＲＧ内のライト先物理ページを対応づけるとともに、対象ＲＧ内の有効ページを無効ページとするように、それぞれ論理ページとの対応を外す。また、ＲＧ管理テーブル３０７について、ライト先ＲＧ４０６の有効ページ数１１０４及び次書込み位置１１０５を更新する。【０１３３】
ステップＳ１４１０で、プログラム３１２は、対象ＲＧの消去処理を実行する。例えば、消去処理は、ブロック毎に行われる。プログラムは、ＲＧ管理テーブル３０７の対象ＲＧの状態１１０３を「未使用」とする。なお、プログラムは、このステップで対象ＲＧの消去処理を実行せずに、ＲＧ管理テーブル３０７の状態１１０３を「消去可」とし、後の何れかのタイミングで対象ＲＧの消去処理を行ってもよい。【０１３４】
リクラメーション処理及びリフレッシュ処理は、対象ＲＧより、有効ページのデータをバッファ１０５にリードし、バッファ１０５に格納された１ストライプ分のデータでパリティを生成して、これらのデータ及びパリティを、ストライプを構成する空きページへライトする。このため、データの書き換えができないＦＭＰＫＧ１０１であっても、柔軟にＲＧを管理できる。【０１３５】
また、ＦＭ制御装置１０２は、リクラメーション処理及びリフレッシュ処理をＲＧ単位で行うことで、無効ページ含む場合であっても、ＲＧ４０６内の全てのストライプを維持できる。このため、例えば、ＲＧ４０６内のいずれのストライプに属するデータにリードエラーが発生した場合であっても、エラーデータの復元が可能である。【０１３６】
なお、上記のリクラメーション処理及びリフレッシュ処理ではデータ更新処理と同様、バッファ１０５に１ストライプ分のデータを蓄積した後、パリティを生成し、これらデータとパリティとをコピー先ＲＧ４０６にライトする方法を説明した。しかし、データ更新処理の変形例と同様、１ストライプ分のデータをバッファに蓄積することなく、データがバッファに格納される毎に中間パリティを生成してデータを物理ページ４０４にライトする方法を採用してもよい。【０１３７】
次に、リードエラーが発生した場合のコレクション処理について説明する。図１６は、コレクション処理の概要を説明する図である。【０１３８】
コレクション処理は、上位装置からのリード要求に対して、リードエラーがあった場合、又は、リクラメーション処理又はリフレッシュ処理の際にリードエラーがあった場合に、そのリードエラーの対象となるエラーデータを復元する処理である。リードエラーは、例えば、ＦＭチップ１１０に対するリード対象の物理ページ（リード対象ページ）を指定したリードコマンドに対してＦＭチップ１１０に対してエラー応答があった場合、又は、一定時間応答がなかった場合等に検出される。【０１３９】
以下では、ＦＭ制御装置１０２が、リード対象ページ（ＲＧ＃０のＢ＃２  Ｐ＃０）を指定したリードコマンドに対し、リードエラーが検出された場合を想定し、コレクション処理において、エラーデータＤ２を復元する場合を説明する。【０１４０】
ＦＭ制御装置１０２は、エラーデータＤ２の格納先のＲＧ＃０と、ライト先のＲＧ＃１を選択する。そして、エラーデータを復元するために必要となる、エラーデータが所属するストライプの他のデータ及びパリティを取得する（１）。取得されるデータ及びパリティ（Ｄ０、Ｄ１、Ｐ０）は、それぞれ、Ｂ＃０  Ｐ＃０、Ｂ＃１  Ｐ＃１、Ｂ＃３  Ｐ＃０に格納されている。このとき、ＦＭ制御装置１０２は、当該ストライプ内の物理ページ４０４が有効ページか無効ページかに関わらず、その物理ページ４０４からデータを読み出す。本実施例では、有効データＤ０、無効データＤ１、パリティＰ０が取得される。そして、これらのデータＤ０、Ｄ１、Ｐ０に基づきエラーデータＤ２が復元される。ＦＭ制御装置１０２は、ライト先のＲＧ＃１の空きページＢ＃４  Ｐ＃０、Ｂ＃５  Ｐ＃０、Ｂ＃６  Ｐ＃０、Ｂ＃７  Ｐ＃０に対し、データＤ０、Ｄ１、Ｄ２、パリティＰ０をライトする。【０１４１】
図１７は、コレクション処理のフローチャートである。【０１４２】
コレクション処理は、ＦＭ制御装置１０２のＣＰＵ１０７がコレクション処理プログラム３１３を起動することで実行される。【０１４３】
プログラム３１３は、リード対象ページを指定したリードコマンドに対し、リードエラーを検出したときを契機に起動する（Ｓ１６０２）。【０１４４】
ステップＳ１６０３で、プログラム３１３は、リードエラーが検出されたＲＧ４０６のＲＧ＃を取得する。例えば、プログラム３１３は、ブロック管理テーブル３０８を参照し、リードエラーが検出されたリードコマンドで指定された物理ページ（この説明ではエラーページという）が存在するＲＧのＲＧ番号を取得する。【０１４５】
ステップＳ１６０４で、プログラム３１３は、ＲＧ構成テーブル３１０を参照し、エラーページを含むストライプ（この説明では、対象ストライプという）の他のデータ及びパリティが格納された物理ページの物理ページ番号を全て取得する。【０１４６】
ステップＳ１６０５で、プログラム３１３は、Ｓ１６０３及びＳ１６０４でそれぞれ取得したＲＧ番号及び物理ページ番号を指定して、指定された物理ページのデータをバッファ１０５にリードする。指定された物理ページのデータは、有効データか無効データかに依らずにリードされる。【０１４７】
ステップＳ１６０６で、プログラム３１３は、対象ストライプのパリティをリードする。【０１４８】
ステップＳ１６０７で、プログラム３１３は、Ｓ１６０５及び１６０６でリードしたデータ及びパリティから、エラーデータを復元する。そして、プログラム３１３は、復元したエラーデータ（この説明では、復元データ）をバッファ１０５に格納する。【０１４９】
ステップＳ１６０８で、プログラム３１３は、復元データを含む１ストライプ分のデータがバッファ１０５に蓄積されたか否かを判定する。これらのデータはバッファ１０５上に連続的に格納されても良いし、キャッシュ制御で複数のセグメントに分割管理されていても良い。これらのデータは、他のライトデータを含んでも良い。判定の結果が真の場合（Ｓ１６０８でＹｅｓ）、プログラム３１３は、ステップＳ１６０９に処理を進める。一方、判定の結果が偽の場合（Ｓ１６０８でＮｏ）、プログラム３１３は、処理をＳ１６０８に戻す。【０１５０】
ステップＳ１６０９で、プログラム３１３は、復元データを含む、バッファ１０５に蓄積された1ストライプ分のデータに基づきパリティを生成する。【０１５１】
ステップＳ１６０９で、プログラム３１３は、ライト先のＲＧ４０６をライト先ＲＧとして選択する。例えば、プログラム３１３は、データ更新処理と同様、ライトデータのライト頻度や、Ｉ／Ｏ種別等に基づき、ライト先ＲＧを決定する。【０１５２】
ステップＳ１６１０で、プログラム３１３は、バッファ１０５に格納された１ストライプ分のデータを、ライト先ＲＧにライトする。【０１５３】
ステップＳ１６１１で、プログラム３１３は、論物変換テーブル３０６及びＲＧ管理テーブル３０７を更新する。例えば、ライトしたデータの格納先の物理ページを有効ページとするように、それぞれ論理ページと対応づけるとともに、エラーデータの格納先の物理ページ４０４を無効ページとするように、論理ページとの対応を外す。また、ＲＧ管理テーブル３０７について、ライト先ＲＧの有効ページ数１１０４及び次書込み位置１１０５を更新する。【０１５４】
上記のように、いずれのデータにリードエラーが発生した場合であっても、エラーデータを復元し、冗長性を保ったまま別の位置に格納することが可能である。【０１５５】
なお、ＦＭ制御装置１０２は、コレクション処理が完了した後に、エラーが発生したことを受けて、対象ＲＧに対して、前述のリクラメーション処理を実行しても良い。【０１５６】
また、上記のコレクション処理では、復元データとバッファ１０５に格納された別のデータでパリティを生成し、これらデータ及びパリティを、１ストライプを構成する物理ページにライトしていた。しかし、エラーデータを復元するためにリードしたデータと、復元データと、パリティとを１ストライプとしてライト先ＲＧにライトしてもよい。【０１５７】
なお、コレクション処理は、例えば、上位装置からのリード要求に基づくＦＭ制御装置１０２からのリードコマンドに対するリードエラー、データ更新処理の際にライト要求に基づくマージデータ生成のための更新対象データのリードエラー、リクラメーション処理／リフレッシュ処理の際の対象ＲＧからのリードエラーの際に行われる。【０１５８】
次に、回復処理を説明する。図１８は、回復処理のフローチャートである。回復処理は、例えば、ＦＭＰＫＧ１０１によるコレクション処理が失敗した場合に、ＦＭＰＫＧ１０１とストレージコントローラ２０４とにより実行される。コレクション処理を失敗したＦＭＰＫＧ１０１をエラーＦＭＰＫＧと呼ぶ。ストレージコントローラ２０４は、エラーＦＭＰＫＧ内のＲＡＩＤとは別に、エラーＦＭＰＫＧを含む複数のＦＭＰＫＧ１０１を用いてＲＡＩＤを構成している。以下の説明において、ストレージコントローラ２０４によるＲＡＩＤを上位ＲＡＩＤと呼ぶ。回復処理は、エラーＦＭＰＫＧのＦＭ制御装置１０２のＣＰＵ１０７がメモリ１０８に格納された回復処理プログラム３１４を実行し、ストレージコントローラ２０４のＣＰＵ２０７がメモリ２０８に格納された回復処理プログラムを実行することにより行われる【０１５９】
回復処理は、エラーＦＭＰＫＧのＦＭ制御装置１０２がコレクション処理のエラーを検知したときに開始される（Ｓ１７０２）。例えば、コレクション処理中にエラーページ以外のリードによりリードエラーが発生した場合、コレクション処理がエラーとなる。【０１６０】
ステップＳ１７０３で、エラーＦＭＰＫＧのＦＭ制御装置１０２は、コレクション処理のエラー（コレクションエラー）を登録する。ここでエラーＦＭＰＫＧのＦＭ制御装置１０２は、エラーデータの格納先のブロック（対象ブロック）を識別できる情報を登録する。例えば、エラーＦＭＰＫＧのＦＭ制御装置１０２は、ブロック管理テーブル３０８の対象ブロックに対応付けて、コレクションエラーがあった旨を登録してもよい。【０１６１】
ステップＳ１７０４で、エラーＦＭＰＫＧのＦＭ制御装置１０２は、コレクションエラーをストレージコントローラ２０４に通知する。【０１６２】
ステップＳ１７０５で、ストレージコントローラ２０４は、エラーＦＭＰＫＧのＦＭ制御装置１０２からのコレクションエラーの通知を受領する。そして、ストレージコントローラ２０４は、上位ＲＡＩＤを構成する複数のＦＭＰＫＧ１０１を用いて上位コレクション処理を実行する。ここで、ストレージコントローラ２０４における上位コレクション処理は、例えば、上位ＲＡＩＤを構成する複数のＦＭＰＫＧ１０１の中でエラーＦＭＰＫＧ以外に対し、エラーデータが所属する１ストライプ分のデータ及びパリティのリード要求を送信し、ＦＭ制御装置１０２から受信したデータ及びパリティからエラーデータの復元データを生成する処理である。【０１６３】
ステップＳ１７０６で、ストレージコントローラ２０４は、復元データを対象としたライト要求を、エラーＦＭＰＫＧのＦＭ制御装置１０２に送信する。そして、このライト要求を受信したＦＭ制御装置１０２は、復元データをバッファ１０５に格納する。そして、バッファ１０５に１ストライプ分のデータが蓄積された場合に、パリティを生成し、復元データを含む１ストライプ分のデータ及びパリティをライト先ＲＧにライトする。このライト先ＲＧは、コレクション処理と同様にして選択される。【０１６４】
ステップＳ１７０７で、エラーＦＭＰＫＧのＦＭ制御装置１０２は、コレクションエラーの登録を解除する。【０１６５】
上記処理により、例え、ＦＭＰＫＧ１０１がコレクション処理に失敗した場合であっても、ストレージコントローラ２０４により、エラーデータを復元できる。【０１６６】
なお、Ｓ１７０４でコレクションエラーの通知が行われるのは、例えば、ストレージコントローラ２０４からのリード要求に対してコレクションエラーが発生した場合である。それ以外を原因とするコレクションエラーが発生した場合、例えば、ＦＭ制御装置１０２は、ストレージコントローラ２０４からのＩ／Ｏ要求に対して非同期にコレクションエラーを通知する。例えば、ＦＭ制御装置１０２は、ストレージコントローラ２０４からのポーリングに応じてコレクションエラーを通知する。非同期でコレクションエラーの通知をする場合、Ｓ１７０５以降の処理はその通知後に行われる。
【実施例２】
【０１６７】
次に、実施例２を説明する。以下の説明では、実施例１との違いを重点的に説明する。従って、実施例１と同じ構成及び処理については、説明を省略又は簡略化する場合がある。        【０１６８】
本実施例は、ＲＧ４０６のブロック４０３の構成を動的に変更する。実施例１では、ＲＧ４０６はブロック４０３の構成が固定されていた。しかし、ＲＧ４０６を構成するブロックが固定的であるとすれば、ＲＧ４０６内の１つのブロック４０３に故障が発生した場合には、ＲＧ４０６全体の使用ができなくなってしまう恐れがある。本実施例は、この問題を考慮し、ＲＧ４０６内のブロック４０３の構成を動的に変更する。【０１６９】
図１９は、空きブロック管理情報を模式的に示す。【０１７０】
メモリ１０８には、空きブロックを管理するための空きブロック管理情報が格納される。空きブロック管理情報は、障害単位毎に空きブロックのリストを有する。リスト内の各エントリは、空きブロックのブロック番号と、当該空きブロックの劣化度を格納する。ここでは障害単位をバス４０５とする。この図の例では、バス＃０に属するダイ＃０には、ブロック＃Ａ、＃Ｂ及び＃Ｃが所属し、バス＃１に属するダイ＃０には、ブロック＃Ｄ、＃Ｅ及び＃Ｆが所属するものとする。【０１７１】
空きブロック管理情報の障害単位毎のリストにおいて、空きブロックは劣化度の低い順にソートされている。本実施例のＦＭ制御装置１０２は、この空きブロック管理情報をもとに、ＲＧ構成テーブル３１０を動的に作成する。ＦＭ制御装置１０２は、空きブロック管理情報を有することで、空きブロックのＲＧ４０６への割り当てを効率的に行うことができる。また、ブロック４０３の劣化度は、先天的な要因や格納するデータなどにより個体差がでるため、ＲＧ４０６にブロック４０３が固定的に割り当たっていると，ＲＧ４０６内でブロック４０３の劣化度に偏りが出る可能性がある。本実施例のＦＭ制御装置１０２は、ＲＧ４０６を構成するブロック４０３を動的に変更可能であるため，ＲＧ４０６内でのブロック４０３の劣化度の偏りを防止することができる。【０１７２】
なお、空きブロックは、劣化度や障害単位に基づくキュー等で管理されてもよい。【０１７３】
図２０は、ＲＧ４０６の構成方法の一例を示す。【０１７４】
ＲＧ＃０は、劣化度の小さいブロック４０３で構成される。ＲＧ＃１は、劣化度の大きいブロック４０３で構成される。例えば、ＲＧ＃０には、高頻度データを格納させ，ＲＧ＃１には、低頻度データを格納させるようにすれば、ブロック４０３の劣化度の偏りを減らすことができる。【０１７５】
図２１は、ＲＧ４０６の動的管理処理のフローチャートである。【０１７６】
本実施例におけるメモリ１０８は更に、動的管理プログラム（図示なし）を格納する。動的管理処理は、ＣＰＵ１０７が動的管理プログラムを起動することにより行われる。この処理は、ＲＧ４０６のライフサイクルを示す。このため動的管理処理は、ＦＭ制御装置１０２の稼働中に常に実行されていてもよい。【０１７７】
ライト要求などによりライトが発生すると、ステップＳ２１０６で、動的管理プログラムは、未使用の１つのＲＧ４０６を選択する。例えば、動的管理プログラムは、ＲＧ管理テーブル３０７の状態１１０３が「未使用」のＲＧ４０６の中で、最も古く「未使用」になったものを選択する。以下、この説明では、選択されたＲＧ４０６を対象ＲＧという。【０１７８】
ステップＳ２１０７で、動的管理プログラムは、対象ＲＧを劣化度の大きいブロックで構成するか否かを判定する。例えば、動的管理プログラムは、データ更新処理と同様、ライトデータの頻度やＩ／Ｏ種別などに基づいて、対象ＲＧの劣化度を決定する。判定の結果が真の場合（Ｓ２１０７：Ｙｅｓ）、動的管理プログラムは、ステップＳ２１０８に処理を進める。一方、判定の結果が偽の場合（Ｓ２１０７：Ｎｏ）、動的管理プログラムは、ステップＳ２１１１に処理を進める。【０１７９】
ステップＳ２１０８で、動的管理プログラムは、空きブロック管理情報に基づき、劣化度が「大」であるブロック４０３をＲＧ４０６のブロック数だけ選択する。【０１８０】
ステップＳ２１０９で、動的管理プログラムは、選択したブロック４０３を、対象ＲＧの構成ブロックとしてブロック管理テーブル３０８およびＲＧ構成テーブル３１０に登録する。動的管理プログラムは更に、ＲＧ管理テーブル３０７において対象ＲＧの劣化度１１０６を「大」とする（Ｓ２１１０）。このステップ以降、対象ＲＧ４０６は、低頻度データ用のライト先ＲＧとして選択される。【０１８１】
ステップＳ２１１１で、動的管理プログラムは、空きブロックの管理情報に基づき、劣化度が「小」であるブロック４０３をＲＧ４０６のブロック数だけ選択する。【０１８２】
ステップＳ２１１２で、動的管理プログラムは、選択したブロック４０３を、対象ＲＧの構成ブロックとしてブロック管理テーブル３０８およびＲＧ構成テーブル３１０に登録する。動的管理プログラムは更に、ＲＧ管理テーブル３０７において対象ＲＧの劣化度１１０６を「小」とする（Ｓ２１１３）。このステップ以降、対象ＲＧは、高頻度データ用のライト先ＲＧ４０６として選択される。【０１８３】
ステップＳ２１１４で、動的管理プログラムは、空きページのなくなったＲＧ４０６を、リクラメーション処理／リフレッシュ処理の対象とする。例えば、動的管理プログラムは、空きページのなくなったＲＧ４０６について、ＲＧ管理テーブル３０７の状態１１０３を「ライト完」とする。【０１８４】
動的管理プログラムとは非同期で、リクラメーション処理／リフレッシュ処理は、リクラメーション処理／リフレッシュ処理の対象のＲＧを無効化し、消去する。これにより、ＲＧ管理テーブル３０７における当該ＲＧの状態１１０３は、「消去可」から「未使用」になり、当該ＲＧへのブロックの割り当てが解除される。【０１８５】
上記処理により、図２０で示すように、劣化度の近いブロック４０３でＲＧ４０６を構成することができ、ライトデータのライト頻度に応じてライト先ＲＧを選択することができる。つまり、ＲＧ単位でのウェアレベリングが可能となる。【０１８６】
図２２は、ブロック単位リフレッシュ処理を示す。【０１８７】
ブロック単位リフレッシュ処理は、対象ＲＧについて、全体の劣化度は問題ないが特定ブロックの劣化度だけが大きい場合に行われる。これは例えば、対象ＲＧ内の特定ブロック中の有効ページに対するリードコマンドが発行され、エラー又はエラーの兆候が検出された場合である。例えば、対象ＲＧ＃０について、特定ブロックＢ＃２のみ劣化度が大きい場合、特定ブロックＢ＃２に対するリフレッシュ処理が行われる。【０１８８】
ブロック単位リフレッシュ処理において、ＦＭ制御装置１０２は、特定ブロックの代替ブロックとして空きブロックを選択し、代替ブロックに特定ブロック内のすべてのデータをコピーする。データのコピーは、有効データについても無効データについても行われる。例えば、代替ブロックＢ＃４が選択された場合、特定ブロック＃２内の有効データＤ２及び無効データＤ５は、代替ブロック＃４にコピーされる。【０１８９】
ブロック単位リフレッシュ処理の間、代替ブロック＃４は、代替ブロックとして登録される。そして、リフレッシュ処理の終了後、代替ブロック＃４は、特定ブロック＃２に代えて対象ＲＧ＃０を構成するブロックとして登録される。【０１９０】
図２３は、ブロック単位リフレッシュ処理のフローチャートである。【０１９１】
ブロック単位リフレッシュ処理は、ＣＰＵ１０７がリクラメーション処理／リフレッシュ処理プログラム３１２を実行することにより行われる。【０１９２】
プログラム３１２は、対象ＲＧ中の他のブロックに比べて、特定ブロックの劣化度が大きいことが検出された場合に、処理を開始する（Ｓ２３０２）。【０１９３】
ステップＳ２３０３で、プログラム３１２は、対象ＲＧの特定ブロックの数が、予め定められた特定ブロック数閾値以下であるかどうか判定する。この判定は、ＲＧ単位のリフレッシュ処理よりも、ブロック単位リフレッシュ処理のほうが効率が良いか否かの判定である。特定ブロック数閾値は、例えば、対象ＲＧ中のブロック数の半数等の絶対値であるが、これに限られない。例えば、対象ＲＧの有効ページ数に対する、特定ブロック内のコピー対象の物理ページ数の割合等の相対値により定められてもよい。なお、コピー対象の物理ページ４０４は、有効ページか無効ページかに関わらず、すべての物理ページ４０４を含む。判定が真の場合（Ｓ２３０３：Ｙｅｓ）、プログラム３１２は、ステップＳ２３０４に処理を進める。一方、判定が偽の場合（Ｓ２３０３：Ｎｏ）、プログラム３１２は、ステップＳ２３０６に処理を進める。【０１９４】
ステップＳ２３０６で、プログラム３１２は、対象ＲＧについてＲＧ単位のリフレッシュ処理と同様にして、ライト先ＲＧを選択する。ステップＳ２３０７で、プログラム３１２は、対象ＲＧについてＲＧ単位のリフレッシュ処理と同様にして、対象ＲＧ内の有効ページのデータをライト先ＲＧへコピーし、処理をＳ２３０８へ移行させる。【０１９５】
ステップＳ２３０４で、プログラム３１２は、代替ブロックを取得する。取得するブロック４０３は、障害単位や劣化度に基づいて選択される。【０１９６】
ステップＳ２３０５で、プログラム３１２は、特定ブロックから代替ブロックへのデータのコピーを実行する。【０１９７】
ステップＳ２３０８で、プログラム３１２は、ＲＧ構成テーブル３１０、及び、ＲＧ管理テーブル３０７を更新し、処理を終了する。【０１９８】
上記処理により、対象ＲＧの特定ブロックのみの劣化度が増大した場合には、対象ＲＧ４０６の全ブロックについてリフレッシュ処理を行うことなく、特定ブロックのみのリフレッシュ処理を実現できる。これにより、リフレッシュ処理を実行するためのコストを低減できる。また、対象ＲＧ内のブロック４０３の劣化度の状況に応じて、ブロック単位リフレッシュ処理か、ＲＧ単位のリフレッシュ処理かを、柔軟に選択できる。【０１９９】
なお、本実施例では、ＲＧ単位のリフレッシュ処理よりも、ブロック単位リフレッシュ処理のほうが効率が良いか否かの状況に応じて、いずれの方式を選択するようにしているが、これに限られない。所定のポリシーを決めた上で、いずれかの単位でのリフレッシュ処理を常に実行するとしても良い。【０２００】
なお、上記の説明では「ａａａテーブル」、「ａａａキュー」、「ａａａリスト」等の表現にて本発明の情報を説明するが、これら情報はテーブル、キュー等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」、「ａａａキュー」、「ａａａリスト」等について「ａａａ情報」と呼ぶことがある。【０２０１】
さらに、各情報の内容を説明する際に、「識別情報」、「番号」、「名」、という表現を用いたが、これらについてはお互いに置換が可能である。【０２０２】
上記の説明では「プログラム」を主語として説明を行う場合があったが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポートを用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理計算機や情報処理装置が行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。【０２０３】
また、各図において共通の構成については、同一の参照番号を付して説明する。また、共通の構成に関し、各構成を識別する場合には、９９９ａ、９９９ｂなど、数字の最後に英文字を付すか、又は、＃１、＃２等の個別の番号を付して説明する。ただし、必要に応じて英文字又は番号を省略して説明する場合がある。【０２０４】
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。【０２０５】
本発明は、上記の実施例に限定されない。上記の実施例における不揮発性メモリは、ＦＭ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ）である。本実施例におけるＦＭは、ブロック単位で消去が行われ、ページ単位でリード及びライトが行われる種類のＦＭ、典型的にはＮＡＮＤ型のフラッシュメモリである。しかし、ＦＭは、ＮＡＮＤ型に代えて他種のフラッシュメモリ（例えばＮＯＲ型）でも良い。また、ＦＭに代えて、他種の不揮発性メモリ、例えば、磁気抵抗メモリであるＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）や、抵抗変化型メモリであるＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、強誘電体メモリであるＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）等の半導体メモリや、相変化メモリが使用されても良い。【０２０６】
以上の実施例で説明された技術は、次のように表現することもできる。【０２０７】
本発明のストレージ装置において、不揮発性半導体メモリチップは、ＦＭチップ１１０などに対応し、制御デバイスは、ＦＭ制御装置１０２などに対応する。
【符号の説明】
【０２０８】
１０１：フラッシュメモリストレージ装置  １０２：フラッシュメモリ制御装置  １０３：ストレージインタフェイス  １０４：フラッシュメモリコントローラ  １０５：バッファ  １０６：バッテリ  １０８：メインメモリ  １０９：フラッシュメモリインタフェイス  １１０：フラッシュメモリチップ
【図１】
2015052833.tif 000003
【図２】
2015052833.tif 000004
【図３】
2015052833.tif 000005
【図４】
2015052833.tif 000006
【図５】
2015052833.tif 000007
【図６】
2015052833.tif 000008
【図７】
2015052833.tif 000009
【図８】
2015052833.tif 000010
【図９】
2015052833.tif 000011
【図１０】
2015052833.tif 000012
【図１１】
2015052833.tif 000013
【図１２】
2015052833.tif 000014
【図１３】
2015052833.tif 000015
【図１４】
2015052833.tif 000016
【図１５】
2015052833.tif 000017
【図１６】
2015052833.tif 000018
【図１７】
2015052833.tif 000019
【図１８】
2015052833.tif 000020
【図１９】
2015052833.tif 000021
【図２０】
2015052833.tif 000022
【図２１】
2015052833.tif 000023
【図２２】
2015052833.tif 000024
【図２３】
2015052833.tif 000025
【手続補正書】
【提出日】平成28年7月29日(2016.7.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の不揮発性半導体メモリチップと、
上位装置に接続され、
前記複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、前記上位装置に提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶し、
前記複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び前記複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、
前記複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、前記第一物理領域に格納されている第一ユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、前記更新ユーザデータと前記複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成し、
前記複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる前記更新ユーザデータと前記複数の第二ユーザデータ及び前記第二パリティデータのそれぞれを格納し、
前記変換情報において前記更新ユーザデータが格納された第二物理領域と前記第一論理領域とを対応付ける、制御デバイスと、を備える
ストレージ装置。
【請求項２】
前記複数の物理領域は、それぞれ異なる前記複数の不揮発性半導体メモリチップに属する
請求項１記載のストレージ装置。
【請求項３】
前記制御デバイスは、
前記複数の物理領域が、論理領域との対応づけをはずされた場合、前記複数の物理領域を消去する、
請求項２に記載のストレージ装置。
【請求項４】
前記制御デバイスは、
前記第一ストライプ内の第三物理領域からデータの読み出しに失敗した場合に、前記第一ストライプの中で前記第三物理領域以外の物理領域のデータに基づいて、前記読み出しに失敗したデータを復元する、
請求項３に記載のストレージ装置。
【請求項５】
前記制御デバイスは、
前記更新ユーザデータ及び他のユーザデータを受信して記憶し、前記記憶された更新ユーザデータ及び他のユーザデータに基づき前記パリティデータを生成する、
請求項４に記載のストレージ制御装置。
【請求項６】
前記不揮発性半導体メモリチップは、複数のブロックを含み、
前記複数のブロックのそれぞれは、複数のページを含み、
前記複数の物理領域のそれぞれは、ページであり、
前記制御デバイスは、ページ毎にライトまたはリードを行い、ブロック毎に消去を行う、
請求項５に記載のストレージ装置。
【請求項７】
前記制御デバイスは、
ストライプを含む前記複数のブロックで構成されるブロック群毎の劣化を示す劣化度を記憶し、
前記劣化度に基づいて、前記ブロック群を選択する。
請求項６に記載のストレージ装置。
【請求項８】
前記制御デバイスは、
複数のブロック群のそれぞれに含まれる有効ページ数を記憶し、
前記有効ページ数に基づいて、前記複数のブロック群の中から第一ブロック群を選択し、
前記劣化度に基づいて、前記複数のブロック群の中から第二ブロック群を選択し、
前記第一ブロック群内のストライプを前記第二ブロック群へコピーする、
請求項７に記載のストレージ装置。
【請求項９】
前記制御デバイスは、
前記劣化度に基づいて、前記複数のブロック群の中から第三ブロック群を選択し、
前記複数のブロック群の中から、前記第四ブロック群の劣化度より低い劣化度を有する第五ブロック群を選択し、
前記第四ブロック群内のストライプを、前記第五ブロック群へコピーする、
請求項８に記載のストレージ装置。
【請求項１０】
前記制御デバイスは、
前記複数の論理領域のそれぞれのライト頻度を記憶し、
前記第一論理領域のライト頻度に基づいてライト先のブロック群を選択する、
請求項９に記載のストレージ装置。
【請求項１１】
前記制御デバイスは、
前記複数のブロックのそれぞれの劣化を示すブロック劣化度を記憶し、
前記ブロック劣化度に基づいて複数のブロックを選択し、前記選択された複数のブロックを用いて前記ブロック群を生成する、
請求項１０に記載のストレージ装置。
【請求項１２】
前記制御デバイスは、
前記データ群に含まれるユーザデータを受信する度に、前記受信されたユーザデータに基づいて前記パリティデータの演算の途中結果である中間パリティデータを生成し、前記受信されたユーザデータを前記第二ストライプへ書き込み、
前記データ群に含まれるすべてのユーザデータを受信した場合、前記中間パリティデータに基づいて前記パリティデータを生成し、前記第二ストライプへ書き込む、
請求項１１に記載のストレージ装置。
【請求項１３】
ストレージコントローラと、ストレージ装置とを有するストレージシステムであって、
前記ストレージ装置は、
複数の不揮発性半導体メモリチップと、
前記ストレージコントローラに接続され、
前記複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、前記ストレージコントローラに提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶し、
前記複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び前記複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、
前記複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、前記第一物理領域に格納されている第一ユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、前記更新ユーザデータと前記複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成し、
前記複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる前記更新ユーザデータと前記複数の第二ユーザデータ及び前記第二パリティデータのそれぞれを格納し、
前記変換情報において前記更新ユーザデータが格納された第二物理領域と前記第一論理領域とを対応付ける、制御デバイスと、を備える
ストレージシステム。
【請求項１４】
複数の不揮発性半導体メモリチップと、
上位装置及び前記不揮発性半導体メモリチップに接続された制御デバイスと、
を備えたストレージ装置により実行されるストレージ装置制御方法であって、
前記制御デバイスは、
前記複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、前記上位装置に提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶し、
前記複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び前記複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、
前記複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、前記第一物理領域に格納されている第一ユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、前記更新ユーザデータと前記複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成し、
前記複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる前記更新ユーザデータと前記複数の第二ユーザデータ及び前記第二パリティデータのそれぞれを格納し、
前記変換情報において前記更新ユーザデータが格納された第二物理領域と前記第一論理領域とを対応付ける
ストレージ装置制御方法。
【手続補正書】
【提出日】平成28年10月31日(2016.10.31)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の不揮発性半導体メモリチップと、
上位装置に接続され、
前記複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、前記上位装置に提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶し、
前記複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び前記複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、
前記複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、前記第一物理領域に格納されている第一ユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、前記更新ユーザデータと前記複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成し、
前記複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる前記更新ユーザデータと前記複数の第二ユーザデータ及び前記第二パリティデータのそれぞれを格納し、
前記変換情報において前記更新ユーザデータが格納された第二物理領域と前記第一論理領域とを対応付ける、制御デバイスと、を備える
ストレージ装置。
【請求項２】
前記複数の物理領域は、それぞれ異なる前記複数の不揮発性半導体メモリチップに属する
請求項１記載のストレージ装置。
【請求項３】
前記制御デバイスは、
前記複数の物理領域が、論理領域との対応づけをはずされた場合、前記複数の物理領域を消去する、
請求項２に記載のストレージ装置。
【請求項４】
前記制御デバイスは、
前記第一ストライプ内の第三物理領域からデータの読み出しに失敗した場合に、前記第一ストライプの中で前記第三物理領域以外の物理領域のデータに基づいて、前記読み出しに失敗したデータを復元する、
請求項３に記載のストレージ装置。
【請求項５】
前記制御デバイスは、
前記更新ユーザデータ及び他のユーザデータを受信して記憶し、前記記憶された更新ユーザデータ及び他のユーザデータに基づき前記第二パリティデータを生成する、
請求項４に記載のストレージ装置。
【請求項６】
前記不揮発性半導体メモリチップは、複数のブロックを含み、
前記複数のブロックのそれぞれは、複数のページを含み、
前記複数の物理領域のそれぞれは、ページであり、
前記制御デバイスは、ページ毎にライトまたはリードを行い、ブロック毎に消去を行う、
請求項５に記載のストレージ装置。
【請求項７】
前記制御デバイスは、
ストライプを含む前記複数のブロックで構成されるブロック群毎の劣化を示す劣化度を記憶し、
前記劣化度に基づいて、前記ブロック群を選択する。
請求項６に記載のストレージ装置。
【請求項８】
前記制御デバイスは、
複数のブロック群のそれぞれに含まれる有効ページ数を記憶し、
前記有効ページ数に基づいて、前記複数のブロック群の中から第一ブロック群を選択し、
前記劣化度に基づいて、前記複数のブロック群の中から第二ブロック群を選択し、
前記第一ブロック群内のストライプを前記第二ブロック群へコピーする、
請求項７に記載のストレージ装置。
【請求項９】
前記制御デバイスは、
前記劣化度に基づいて、前記複数のブロック群の中から第三ブロック群を選択し、
前記複数のブロック群の中から、第四ブロック群の劣化度より低い劣化度を有する第五ブロック群を選択し、
前記第四ブロック群内のストライプを、前記第五ブロック群へコピーする、
請求項８に記載のストレージ装置。
【請求項１０】
前記制御デバイスは、
前記複数の論理領域のそれぞれのライト頻度を記憶し、
前記第一論理領域のライト頻度に基づいてライト先のブロック群を選択する、
請求項９に記載のストレージ装置。
【請求項１１】
前記制御デバイスは、
前記複数のブロックのそれぞれの劣化を示すブロック劣化度を記憶し、
前記ブロック劣化度に基づいて複数のブロックを選択し、前記選択された複数のブロックを用いて前記ブロック群を生成する、
請求項１０に記載のストレージ装置。
【請求項１２】
前記制御デバイスは、
前記データ群に含まれるユーザデータを受信する度に、前記受信されたユーザデータに基づいて前記パリティデータの演算の途中結果である中間パリティデータを生成し、前記受信されたユーザデータを前記第二ストライプへ書き込み、
前記データ群に含まれるすべてのユーザデータを受信した場合、前記中間パリティデータに基づいて前記第二パリティデータを生成し、前記第二ストライプへ書き込む、
請求項１１に記載のストレージ装置。
【請求項１３】
ストレージコントローラと、ストレージ装置とを有するストレージシステムであって、
前記ストレージ装置は、
複数の不揮発性半導体メモリチップと、
前記ストレージコントローラに接続され、
前記複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、前記ストレージコントローラに提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶し、
前記複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び前記複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、
前記複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、前記第一物理領域に格納されている第一ユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、前記更新ユーザデータと前記複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成し、
前記複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる前記更新ユーザデータと前記複数の第二ユーザデータ及び前記第二パリティデータのそれぞれを格納し、
前記変換情報において前記更新ユーザデータが格納された第二物理領域と前記第一論理領域とを対応付ける、制御デバイスと、を備える
ストレージシステム。
【請求項１４】
複数の不揮発性半導体メモリチップと、
上位装置及び前記不揮発性半導体メモリチップに接続された制御デバイスと、
を備えたストレージ装置により実行されるストレージ装置制御方法であって、
前記制御デバイスは、
前記複数の不揮発性半導体メモリチップ内の任意の複数の物理領域と、前記上位装置に提供する複数の論理領域とを、それぞれ対応づける変換情報を記憶し、
前記複数の物理領域のそれぞれに対して、第一ストライプに含まれる複数の第一ユーザデータ及び前記複数の第一ユーザデータに基づいて生成される第一パリティデータのそれぞれを格納し、
前記複数の物理領域のうちの第一物理領域に対応付けられている第一論理領域への、前記第一物理領域に格納されている第一ユーザデータを更新する更新ユーザデータのライト要求の受信に応じて、前記更新ユーザデータと前記複数の第一ユーザデータとは異なる複数の第二ユーザデータとで形成したデータ群に基づき、第二パリティデータを生成し、
前記複数の物理領域とは異なる任意の複数の物理領域のそれぞれに対して、第二ストライプに含まれる前記更新ユーザデータと前記複数の第二ユーザデータ及び前記第二パリティデータのそれぞれを格納し、
前記変換情報において前記更新ユーザデータが格納された第二物理領域と前記第一論理領域とを対応付ける
ストレージ装置制御方法。
【国際調査報告】
2015052833.tif 000026
2015052833.tif 000027
2015052833.tif 000028