(57)【特許請求の範囲】
【請求項１】
記憶装置に含まれる第１データ記憶部および第２データ記憶部に対する書込み、または、前記第１データ記憶部および前記第２データ記憶部からの読み込みを制御するコントローラであって、
前記第２データ記憶部は、ホスト装置から書き込みが要求されたデータであるユーザデータと、前記ユーザデータのパリティデータとを記憶し、
前記第１データ記憶部は、前記パリティデータを記憶し、
前記第２データ記憶部のうち、ユーザデータが記憶されている記憶領域には、当該記憶領域が記憶するユーザデータが前記第１データ記憶部に記憶されるパリティデータによって保護されている第１状態と、当該記憶領域が記憶するユーザデータが前記第１データ記憶部に記憶されるパリティデータによって保護されていない第２状態とがあり、
前記記憶装置は、前記第１状態の記憶領域の識別情報を記憶する第１状態記憶部と、前記第２状態の記憶領域の識別情報を記憶する第２状態記憶部と、を含み、
前記第２データ記憶部の記憶領域が、前記第１状態から前記第２状態に変更される場合、変更後に前記第１状態となっている記憶領域に記憶された前記ユーザデータの前記パリティデータを更新し、更新後のパリティデータを表す第１パリティデータを前記第１データ記憶部に書き込み、前記第１状態記憶部から前記第２状態に変更される記憶領域の識別情報を削除し、前記第２状態記憶部に前記第２状態に変更される記憶領域の識別情報を追加し、前記第２データ記憶部の記憶領域が、前記第２状態から前記第１状態に変更される場合、変更後に前記第１状態となっている記憶領域に記憶された前記ユーザデータの前記パリティデータを更新し、更新後のパリティデータを表す第１パリティデータを前記第１データ記憶部に書き込み、前記第１状態記憶部に前記第１状態に変更される記憶領域の識別情報を追加し、前記第２状態記憶部から前記第１状態に変更される記憶領域の識別情報を削除するパリティ更新部と、
前記パリティ更新部によるパリティデータの更新と独立に定められるタイミングで、前記第１データ記憶部に記憶されているパリティデータを読み込み、読み込んだパリティデータを表す第２パリティデータを前記第２データ記憶部に書き込むパリティ書込部と、
を備えることを特徴とするコントローラ。
【請求項２】
前記パリティ書込部は、前記第２パリティデータを前記第２データ記憶部に書き込んだ後に前記第１状態から前記第２状態に変更された記憶領域の個数が予め定められた第１閾値を超えたとき、または、前記第２パリティデータを前記第２データ記憶部に書き込んだ後に前記第２状態から前記第１状態に変更された記憶領域の個数が予め定められた第２閾値を超えたときに、前記第１データ記憶部に記憶されているパリティデータを読み込み、読み込んだパリティデータを表す第２パリティデータを前記第２データ記憶部に書き込むこと、
を特徴とする請求項１に記載のコントローラ。
【請求項３】
前記記憶装置は、前記第２パリティデータを前記第２データ記憶部に書き込んだ後に前記第１状態から前記第２状態に変更された記憶領域の識別情報を記憶する第３状態記憶部と、前記第２パリティデータを前記第２データ記憶部に書き込んだ後に前記第２状態から前記第１状態に変更された記憶領域の識別情報を記憶する第４状態記憶部と、をさらに含み、
前記第３状態記憶部に記憶された識別情報の記憶領域に記憶された前記ユーザデータと前記第４状態記憶部に記憶された識別情報の記憶領域に記憶された前記ユーザデータと、前記第２データ記憶部に記憶された前記第２パリティデータと、に基づいて算出される更新後のパリティデータを表す第１パリティデータを、前記第１データ記憶部に書き込むパリティ復元部をさらに備えること、
を特徴とする請求項２に記載のコントローラ。
【請求項４】
前記記憶装置は、前記第２パリティデータを前記第２データ記憶部に書き込んだ後に前記第１状態から前記第２状態に変更された記憶領域の識別情報を記憶する第３状態記憶部と、前記第２パリティデータを前記第２データ記憶部に書き込んだ後に前記第２状態から前記第１状態に変更された記憶領域の識別情報を記憶する第４状態記憶部と、をさらに含み、
ユーザデータを復元する第１記憶領域が、前記第４状態記憶部に記憶された識別情報の記憶領域に含まれ、ユーザデータを復元する第２記憶領域が、前記第１状態記憶部に記憶された識別情報の記憶領域のうち、前記第４状態記憶部に記憶されていない識別情報の記憶領域に含まれる場合に、前記第１状態記憶部に記憶された識別情報の記憶領域から、前記第４状態記憶部に記憶された識別情報の記憶領域を除いた記憶領域、および、前記第３状態記憶部に記憶された識別情報の記憶領域を含む記憶領域から、前記第２記憶領域を除いた記憶領域に記憶された前記ユーザデータと、前記第２データ記憶部に記憶された前記第２パリティデータと、に基づいて、前記第２記憶領域のユーザデータを復元し、復元された前記ユーザデータと、前記第１状態記憶部に記憶された識別情報の記憶領域から、前記第１記憶領域および前記第２記憶領域を除いた記憶領域に記憶された前記ユーザデータと、前記第１データ記憶部に記憶された前記第１パリティデータと、に基づいて、前記第１記憶領域のユーザデータを復元するデータ復元部をさらに備えること、
を特徴とする請求項２に記載のコントローラ。
【請求項５】
前記パリティ書込部は、前記第２パリティデータを前記第２データ記憶部に書き込んだ後に前記第１状態から前記第２状態に変更された記憶領域の個数が、予め定められた第１閾値を超えたときに、前記第１データ記憶部に記憶されているパリティデータを読み込み、読み込んだパリティデータを表す第２パリティデータを前記第２データ記憶部に書き込むこと、
を特徴とする請求項１に記載のコントローラ。
【請求項６】
前記パリティ書込部は、前記第２パリティデータを前記第２データ記憶部に書き込みた後に前記第２状態から前記第１状態に変更された記憶領域の個数が、予め定められた第２閾値を超えたときに、前記第１データ記憶部に記憶されているパリティデータを読み込み、読み込んだパリティデータを表す第２パリティデータを前記第２データ記憶部に書き込むこと、
を特徴とする請求項１に記載のコントローラ。
【請求項７】
ホスト装置から書き込みが要求されたデータであるユーザデータのパリティデータを記憶する第１データ記憶部と、
前記ユーザデータと前記パリティデータとを記憶する第２データ記憶部と、
前記第１データ記憶部および前記第２データ記憶部に対する書込み、または、前記第１データ記憶部および前記第２データ記憶部からの読み込みを制御するコントローラと、を備え、
前記第２データ記憶部のうち、ユーザデータが記憶されている記憶領域には、当該記憶領域が記憶するユーザデータが前記第１データ記憶部に記憶されるパリティデータによって保護されている第１状態と、当該記憶領域が記憶するユーザデータが前記第１データ記憶部に記憶されるパリティデータによって保護されていない第２状態とがあり、
前記第１状態の記憶領域の識別情報を記憶する第１状態記憶部と、
前記第２状態の記憶領域の識別情報を記憶する第２状態記憶部と、をさらに備え、
前記コントローラは、
前記第２データ記憶部の記憶領域が、前記第１状態から前記第２状態に変更される場合、変更後に前記第１状態となっている記憶領域に記憶された前記ユーザデータの前記パリティデータを更新し、更新後のパリティデータを表す第１パリティデータを前記第１データ記憶部に書き込み、前記第１状態記憶部から前記第２状態に変更される記憶領域の識別情報を削除し、前記第２状態記憶部に前記第２状態に変更される記憶領域の識別情報を追加し、前記第２データ記憶部の記憶領域が、前記第２状態から前記第１状態に変更される場合、変更後に前記第１状態となっている記憶領域に記憶された前記ユーザデータの前記パリティデータを更新し、更新後のパリティデータを表す第１パリティデータを前記第１データ記憶部に書き込み、前記第１状態記憶部に前記第１状態に変更される記憶領域の識別情報を追加し、前記第２状態記憶部から前記第１状態に変更される記憶領域の識別情報を削除するパリティ更新部と、
所定の条件が満たされたときに前記パリティ更新部によるパリティデータの更新と独立に定められるタイミングで、前記第１データ記憶部に書き込まれた前記記憶されているパリティデータを読み込み、読み込んだ前記パリティデータを表す第２パリティデータを前記第２データ記憶部に書き込むパリティ書込部と、を備えること、
を特徴とする記憶装置。
【請求項８】
記憶装置に含まれる、ホスト装置から書き込みが要求されたデータであるユーザデータのパリティデータを記憶する第１データ記憶部および前記ユーザデータと前記パリティデータとを記憶する第２データ記憶部に対する書込み、または、前記第１データ記憶部および前記第２データ記憶部からの読み込みを制御するコンピュータで実行されるプログラムであって、
前記第２データ記憶部のうち、ユーザデータが記憶されている記憶領域には、当該記憶領域が記憶するユーザデータが前記第１データ記憶部に記憶されるパリティデータによって保護されている第１状態と、当該記憶領域が記憶するユーザデータが前記第１データ記憶部に記憶されるパリティデータによって保護されていない第２状態とがあり、
前記記憶装置は、前記第１状態の記憶領域の識別情報を記憶する第１状態記憶部と、前記第２状態の記憶領域の識別情報を記憶する第２状態記憶部と、を含み、
前記コンピュータを、
前記第２データ記憶部の記憶領域が、前記第１状態から前記第２状態に変更される場合、変更後に前記第１状態となっている記憶領域に記憶された前記ユーザデータの前記パリティデータを更新し、更新後のパリティデータを表す第１パリティデータを前記第１データ記憶部に書き込み、前記第１状態記憶部から前記第２状態に変更される記憶領域の識別情報を削除し、前記第２状態記憶部に前記第２状態に変更される記憶領域の識別情報を追加し、前記第２データ記憶部の記憶領域が、前記第２状態から前記第１状態に変更される場合、変更後に前記第１状態となっている記憶領域に記憶された前記ユーザデータの前記パリティデータを更新し、更新後のパリティデータを表す第１パリティデータを前記第１データ記憶部に書き込み、前記第１状態記憶部に前記第１状態に変更される記憶領域の識別情報を追加し、前記第２状態記憶部から前記第１状態に変更される記憶領域の識別情報を削除するパリティ更新部と、
所定の条件が満たされたときに前記パリティ更新部によるパリティデータの更新と独立に定められるタイミングで、前記第１データ記憶部に書き込まれた前記記憶されているパリティデータを読み込み、読み込んだ前記パリティデータを表す第２パリティデータを前記第２データ記憶部に書き込むパリティ書込部、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、コントローラ、記憶装置、およびプログラムに関する。
【背景技術】
【０００２】
データ記憶装置には、高い信頼性が求められる。例えば、データ記憶装置をＲＡＩＤ（Redundant Arrays of Inexpensive Disks）５のような構成とすることにより、データの復元が実行できる。これにより、複数のデータ記憶装置を組み合わせたストレージシステム全体としての信頼性を向上することができる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】D. Patterson, G. Gibson, and R. Katz. "A Case for Redundant Arrays of Inexpensive Disks （RAID）", Proceedings of the 1988 ACM SIGMOD, pp.109-116, June 1988.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術では複数のデータ記憶装置を組み合わせたストレージシステム全体としての信頼性を向上させることができるが、データ記憶装置単体の信頼性を向上することができない。
【課題を解決するための手段】
【０００５】
実施形態は、第１データ記憶部および第２データ記憶部を含む記憶装置に対するアクセスを制御するコントローラである。第２データ記憶部は、ユーザデータと、ユーザデータのパリティデータとを記憶する。第１データ記憶部は、パリティデータを記憶する。コントローラは、パリティ更新部と、パリティ書込部とを備える。パリティ更新部は、第２データ記憶部の記憶領域が、第１状態から第２状態に変更される場合、変更後に第１状態となっている記憶領域に記憶されたユーザデータのパリティデータを更新し、更新後のパリティデータを表す第１パリティデータを第１データ記憶部に書き込み、第１状態記憶部から第２状態に変更される記憶領域の識別情報を削除し、第２状態記憶部に第２状態に変更される記憶領域の識別情報を追加し、第２データ記憶部の記憶領域が、第２状態から第１状態に変更される場合、変更後に第１状態となっている記憶領域に記憶されたユーザデータのパリティデータを更新し、更新後のパリティデータを表す第１パリティデータを第１データ記憶部に書き込み、第１状態記憶部に第１状態に変更される記憶領域の識別情報を追加し、第２状態記憶部から第１状態に変更される記憶領域の識別情報を削除する。パリティ書込部は、パリティデータの更新と独立に定められるタイミングで、第１データ記憶部に書き込まれたパリティデータを読み込み、読み込んだパリティデータを第２データ記憶部に書き込む。
【図面の簡単な説明】
【０００６】
【図１】第１の実施形態のデータ記憶装置の機能ブロック図。
【図２】第１データ記憶部の構成例を示す図。
【図３】第２データ記憶部の構成例を示す図。
【図４】第１状態記憶部の構成例を示す図。
【図５】第２状態記憶部の構成例を示す図。
【図６】第１の実施形態の記憶領域を第１状態に変更する処理のフローチャート。
【図７】第１の実施形態の記憶領域を第２状態に変更する処理のフローチャート。
【図８】第１の実施形態のパリティ書き込み処理のフローチャート。
【図９】第２の実施形態のデータ記憶装置の機能ブロック図。
【図１０】第３状態記憶部の構成例を示す図。
【図１１】第２の実施形態の記憶領域を第２状態に変更する処理のフローチャート。
【図１２】第２の実施形態におけるパリティ書き込み処理のフローチャート。
【図１３】第３の実施形態のデータ記憶装置の機能ブロック図。
【図１４】第４状態記憶部の構成例を示す図。
【図１５】第３の実施形態の記憶領域を第１状態に変更する処理のフローチャート。
【図１６】第３の実施形態のパリティ書き込み処理のフローチャート。
【図１７】第４の実施形態のデータ記憶装置の機能ブロック図。
【図１８】第４の実施形態のパリティ書き込み処理のフローチャート。
【図１９】第５の実施形態のデータ記憶装置の機能ブロック図。
【図２０】第５の実施形態の記憶領域を第１状態に変更する処理のフローチャート。
【図２１】第５の実施形態のパリティデータを復元する処理例のフローチャート。
【図２２】第６の実施形態のデータ記憶装置の機能ブロック図。
【図２３】記憶領域の状態とデータの保護状態の関係を示す図。
【図２４】第６の実施形態の差分反復訂正処理例のフローチャート。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、この発明にかかるデータ記憶装置の好適な実施形態を詳細に説明する。
【０００８】
（第１の実施形態）
第１の実施形態にかかるデータ記憶装置（以下、データ記憶装置という）単体の信頼性を向上するため、非特許文献１に示されるＲＡＩＤ５のような仕組みをデータ記憶装置内部に持ち、データ記憶装置内部でデータの復元を実現できるような構成とする。
【０００９】
ところで、データ記憶装置には低コスト化も求められており、容量対価格比が比較的安価な記憶媒体が用いられることが多い。容量対価格比が比較的安価な記憶媒体は、データの書き込み速度が比較的遅い場合が多い。
【００１０】
ここで、データ記憶装置内部でＲＡＩＤ５のような構成をとった場合、ホスト装置から書き込みが要求されたデータであるユーザデータの記憶媒体への書き込み量に比して、データ復元符号（以降、パリティという）データの記憶媒体への書き込み量が多くなる。データ記憶装置内部での記憶媒体自体へのデータ書き込み速度帯域には上限があるため、データ記憶装置内部でＲＡＩＤ５のような構成をとった場合、結果としてユーザデータの書き込み速度が遅くなるという欠点が生じる。
【００１１】
また、例えば、ＮＡＮＤ型フラッシュメモリのような記憶媒体は、記憶媒体を構成する記憶素子の寿命がデータの書き換え回数によって左右されると言われている。このような記憶媒体を用いたデータ記憶装置の場合、パリティデータの書き込み量が多くなると、データ記憶装置の設計寿命が短くなるという欠点が生じる。
【００１２】
以上のような事情があるため、データ記憶装置内部でＲＡＩＤ５のような構成をとった場合、ユーザデータの記憶媒体への書き込み量に比して、パリティデータの記憶媒体への書き込み量を削減することが求められる。
【００１３】
そこで、本実施形態では、ユーザデータとパリティデータを記憶する記憶媒体（第２データ記憶部）以外に、パリティデータのみを記憶する記憶媒体（第１データ記憶部）を備える。そして、パリティデータ更新時には、第１データ記憶部に更新されたパリティデータを記憶し、所定のタイミングで第１データ記憶部に記憶されたパリティデータを第２データ記憶部に書き込む。これにより、ユーザデータの記憶媒体への書き込み量に比して、パリティデータの記憶媒体への書き込み量を削減できる。
【００１４】
図１は、第１の実施形態にかかるデータ記憶装置１００の構成の一例を示すブロック図である。図１に示すように、データ記憶装置１００は、第１データ記憶部１５１と、第１アクセス制御部１０１と、第２データ記憶部１５２と、第２アクセス制御部１０２と、第１状態記憶部１５３と、第３アクセス制御部１０３と、第２状態記憶部１５４と、第４アクセス制御部１０４と、状態更新部１２０と、コントローラ１１０と、パリティ演算部１３０と、備えている。コントローラ１１０は、パリティ更新部１１１と、パリティ書込部１１２とを、備えている。
【００１５】
第１データ記憶部１５１は、図２に示すように、少なくとも１つの記憶領域を有する。各記憶領域は、パリティデータを記憶する。なお、第１データ記憶部１５１は、複数の記憶領域を有し、それぞれの記憶領域に１つのパリティデータを記憶してもよい。すなわち、データ記憶装置１００は、複数のパリティグループを有してもよい。ここで、パリティグループとは、あるパリティデータによって保護されているユーザデータを記憶する記憶領域の集合のことである。複数のパリティグループを有する場合、データ記憶装置１００は、以降に説明する各種情報等を、パリティグループの数に応じて複数有する。データ記憶装置１００が複数のパリティグループを有する場合は、以降の構成や処理を適宜読み替えることができる。
【００１６】
第１アクセス制御部１０１は、第１データ記憶部１５１への読み込みまたは書き込みを制御する。
【００１７】
第２データ記憶部１５２は、図３に示すように、複数の記憶領域を有する。それぞれの記憶領域は、ユーザデータまたはパリティデータを記憶する。このうち、ユーザデータを記憶する記憶領域は、第１状態と第２状態との２つの状態を有する。第１状態とは、当該記憶領域が記憶するユーザデータが、第１データ記憶部１５１が記憶するパリティデータによって保護されている状態のことである。第２状態とは、当該記憶領域が記憶するユーザデータが、第１データ記憶部１５１が記憶するパリティデータによって保護されていない状態のことである。
【００１８】
第２アクセス制御部１０２は、第２データ記憶部１５２への読み込みまたは書き込みを制御する。
【００１９】
第２データ記憶部１５２は、第１データ記憶部１５１に対して特性の面で相対的に劣るように構成してもよい。例えば、第２データ記憶部１５２は、第１データ記憶部１５１に対してデータの書き込み速度が相対的に劣っている。または、例えば、記憶素子の寿命がデータの書き込み回数によって左右されるような記憶素子で構成されている場合で、第２データ記憶部１５２は、第１データ記憶部１５１に対してデータの書き込み耐用回数が相対的に劣っている。または、例えば、データの読み込み速度に比して、データの書き込み速度が相対的に劣っているような記憶素子で構成されている場合で、第２データ記憶部１５２は、第１データ記憶部１５１に対してデータの読み込み速度に対するデータの書き込み速度の落ち込みの度合いが相対的に劣っている。なお、特性の例はこれらに限られない。
【００２０】
第１状態記憶部１５３は、第１状態集合情報を記憶する。第１状態集合情報とは、第２データ記憶部１５２に含まれる記憶領域のうち、第１状態の記憶領域の集合（第１状態集合）を特定する情報（識別情報）のことである。第１状態集合情報は、例えば図４に示すような、記憶領域の識別子のリスト構造で実現される。
【００２１】
第３アクセス制御部１０３は、第１状態記憶部１５３へのアクセスを制御する。第１状態記憶部１５３へのアクセスとは、第１状態記憶部１５３が記憶する第１集合情報の読み込み、第１状態記憶部１５３が記憶する第１集合情報への要求元から指定された記憶領域情報の追加、第１状態記憶部１５３が記憶する第１集合情報からの要求元から指定された記憶領域情報の削除が含まれる．
【００２２】
第２状態記憶部１５４は、第２状態集合情報を記憶する。第２状態集合情報とは、第２データ記憶部１５２に含まれる記憶領域のうち、第２状態の記憶領域の集合（第２状態集合）を特定する情報のことである。第２状態集合情報は、例えば図５に示すような、記憶領域の識別子のリスト構造で実現される。
【００２３】
第４アクセス制御部１０４は、第２状態記憶部１５４へのアクセスを制御する。第２状態記憶部１５４へのアクセスとは、第２状態記憶部１５４が記憶する第２集合情報の読み込み、第２状態記憶部１５４が記憶する第２集合情報への要求元から指定された記憶領域情報の追加、第２状態記憶部１５４が記憶する第２集合情報からの要求元から指定された記憶領域情報の削除が含まれる。
【００２４】
パリティ演算部１３０は、指示元から受け付けた複数の入力データをパリティ演算し、演算結果を指示元に返却する。パリティ演算は、パリティデータを生成するとき、パリティデータを更新するとき、および、データを復元するときなどに実行する演算であり、例えば排他的論理和演算などの演算がある。なお、以下ではパリティ演算として排他的論理和演算を用いる例を説明するが、適用可能なパリティ演算はこれに限られるものではない。また、パリティ演算部１３０をデータ記憶装置１００の外部に備えるように構成してもよい。
【００２５】
状態更新部１２０は、必要に応じて、第２状態記憶部１５４が記憶する第２状態集合情報の読み込みを第４アクセス制御部１０４に指示し、第２状態集合情報を取得する。状態更新部１２０は、取得した第２状態集合情報が示す記憶領域の集合（第２状態集合）から、第１状態に変更する記憶領域を選択し、選択した記憶領域の識別情報をパリティ更新部１１１に通知する。
【００２６】
また、状態更新部１２０は、必要に応じて、第１状態記憶部１５３が記憶する第１状態集合情報の読み込みを第３アクセス制御部１０３に指示し、第１状態集合情報を取得する。状態更新部１２０は、取得した第１状態集合情報が示す記憶領域の集合（第１状態集合）から、第２状態に変更する記憶領域を選択し、選択した記憶領域の識別情報をパリティ更新部１１１に通知する。
【００２７】
パリティ更新部１１１は、状態更新部１２０から第１状態に変更する記憶領域の識別情報を通知されると、通知された記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示し、通知された記憶領域が記憶するデータを取得する。パリティ更新部１１１は、第１データ記憶部１５１に記録されているパリティデータの読み込みを第１アクセス制御部１０１に指示し、第１データ記憶部１５１に記録されているパリティデータを取得する。パリティ更新部１１１は、取得したパリティデータと、取得した記憶領域が記憶するデータをパリティ演算するようにパリティ演算部１３０に指示し、更新後のパリティデータを取得する。パリティ更新部１１１は、取得した更新後のパリティデータを第１データ記憶部１５１に書き込みするように第１アクセス制御部１０１に指示する。パリティ更新部１１１は、第２状態記憶部１５４が記憶する第２状態集合情報から、通知された記憶領域の識別情報を削除するように第４アクセス制御部１０４に指示する。パリティ更新部１１１は、第１状態記憶部１５３が記憶する第１状態集合情報に、通知された記憶領域の識別情報を追加するように第３アクセス制御部１０３に指示する。
【００２８】
パリティ更新部１１１は、状態更新部１２０から第２状態に変更する記憶領域の識別情報を通知されると、通知された記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示し、通知された記憶領域が記憶するデータを取得する。パリティ更新部１１１は、第１データ記憶部１５１に記録されているパリティデータの読み込みを第１アクセス制御部１０１に指示し、第１データ記憶部１５１に記録されているパリティデータを取得する。パリティ更新部１１１は、取得したパリティデータと、取得した記憶領域が記憶するデータをパリティ演算するようにパリティ演算部１３０に指示し、更新後のパリティデータを取得する。パリティ更新部１１１は、取得した更新後のパリティデータを第１データ記憶部１５１に書き込みするように第１アクセス制御部１０１に指示する。パリティ更新部１１１は、第１状態記憶部１５３が記憶する第１状態集合情報から、通知された記憶領域の識別情報を削除するように第３アクセス制御部１０３に指示する。パリティ更新部１１１は、第２状態記憶部１５４が記憶する第２状態集合情報に、通知された記憶領域の識別情報を追加するように第４アクセス制御部１０４に指示する。
【００２９】
以上のように、状態更新部１２０は、第２状態の記憶領域を第１状態にする通知と、第１状態の記憶領域を第２状態にする通知を、パリティ更新部１１１にそれぞれ独立して通知する。また、パリティ更新部１１１は、状態更新部１２０からの、第２状態の記憶領域を第１状態にする通知と、第１状態の記憶領域を第２状態にする通知とに対して、それぞれ独立してパリティデータを更新する。
【００３０】
これにより、パリティデータによって保護されているユーザデータを記憶する記憶領域の数を動的に変更することができる。すなわち、パリティグループに含まれる記憶領域の数を動的に変更することができる。
【００３１】
パリティ書込部１１２は、予めまたは動的に定められる所定のタイミングで、第１データ記憶部１５１に記録されているパリティデータの読み込みを第１アクセス制御部１０１に指示し、第１データ記憶部１５１に記録されているパリティデータを取得する。そして、パリティ書込部１１２は、取得したパリティデータを第２データ記憶部１５２に書き込みするように第２アクセス制御部１０２に指示する。
【００３２】
予めまたは動的に定められる所定のタイミングとは、例えば、予め定められた条件が満たされたタイミングを意味する。条件としては、例えば、一定期間が経過するごと、および、パリティデータの更新回数が所定数を超えること、などのあらゆる条件を適用できる。
【００３３】
以降、必要に応じて、「第１データ記憶部１５１に記録されているパリティデータの読み込みを第１アクセス制御部１０１に指示し、第１データ記憶部１５１に記録されているパリティデータを取得し、取得したパリティデータを第２データ記憶部１５２に記録するように第２アクセス制御部１０２に指示する」ことを、パリティ書き込み指示という。
【００３４】
以上のように、パリティ更新部１１１が第１データ記憶部１５１上でパリティデータを更新する。また、第１データ記憶部１５１上でのパリティデータ更新処理とは独立に、予めまたは動的に定められる所定のタイミングで、パリティ書込部１１２が第１データ記憶部１５１上のパリティデータを第２データ記憶部１５２に書き込む。したがって、パリティ更新処理の度に、更新されたパリティデータが第２データ記憶部１５２に書き込まれることはない。
【００３５】
ここで、第１データ記憶部１５１と第２データ記憶部１５２が、前述したようなメモリの特性を持つ場合、第２データ記憶部１５２への書き込み処理を少なくすると、データ記憶装置１００全体としての性能の劣化の度合いや寿命の減少の度合いを抑制することができる。上述したように、パリティ更新処理の度に、更新されたパリティデータが第２データ記憶部１５２に書き込まれることはないため、本実施形態では、第２データ記憶部１５２への書き込み処理を少なくすることができる。したがって、本実施形態では、データ記憶装置１００全体としての性能の劣化の度合いや寿命の減少の度合いを抑制することができる。
【００３６】
なお、本実施形態では、第２状態の記憶領域に対してのみ、ユーザデータの書き換え処理を許可する。したがって、例えば、ある第１状態の記憶領域が記憶するユーザデータを書き換え、かつ、ユーザデータを書き換えたのちにも第１状態を継続する必要性が生じた時は、例えば、状態更新部１２０が当該記憶領域をいったん第２状態に変更するよう指示し、図示しないユーザデータ書き換え部が当該記憶領域のユーザデータ書き換えを第４アクセス制御部１０４に指示し、状態更新部１２０が当該記憶領域を第１状態に変更するよう指示するという手順を踏むことになる。
【００３７】
なお、本実施形態の目的を逸脱しない範囲内で、前述の一連の処理を融合して最適化し、例えば、第２データ記憶部１５２からのデータの読み込み回数などを削減してもよい。以降の実施形態でも同様である。例えば、第２データ記憶部１５２のデータＡをデータＡ’に変更し、それに伴いパリティデータを更新する場合を考える。最適化しない方法では、変更後のデータＡ’を第２データ記憶部１５２に保存し、パリティデータの更新のために、保存したデータＡ’を第２データ記憶部１５２から読み込む必要がある。そこで、変更後のデータＡ’をＲＡＭなどの一時記憶部に保存しておき、パリティデータの更新時には、一時記憶部に保存したデータＡ’を利用することで、第２データ記憶部１５２からのデータの読み込み回数を削減できる。
【００３８】
次に、このように構成された第１の実施形態にかかるデータ記憶装置１００による処理について図６を用いて説明する。図６は、第１の実施形態における、記憶領域を第１状態に変更する処理の流れを示すフローチャートである。
【００３９】
まず、状態更新部１２０は、必要に応じて、第２状態集合を第２状態記憶部１５４から読み込む（ステップＳ１０１）。具体的には、状態更新部１２０は、第２状態記憶部１５４が記憶する第２状態集合情報の読み込みを第４アクセス制御部１０４に指示する。第４アクセス制御部１０４は、第２状態記憶部１５４が記憶する第２状態集合情報を読み込み、状態更新部１２０に返答する。状態更新部１２０は、第２状態集合情報を取得する。状態更新部１２０は、取得した第２状態集合情報が示す記憶領域の集合から、第１状態に変更する記憶領域を選択し、選択した記憶領域の識別情報をパリティ更新部１１１に通知する（ステップＳ１０２）。
【００４０】
パリティ更新部１１１は、第１状態に変更する記憶領域に記録されているデータを読み込む（ステップＳ１０３）。より詳細には、パリティ更新部１１１は、状態更新部１２０から第１状態に変更する記憶領域の識別情報を通知されると、通知された記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示する。第２アクセス制御部１０２は、通知された記憶領域が記憶するデータを読み込み、パリティ更新部１１１に返答する。パリティ更新部１１１は、通知された記憶領域が記憶するデータを取得する。
【００４１】
パリティ更新部１１１は、第１データ記憶部１５１からパリティデータを読み込む（ステップＳ１０４）。より詳細には、パリティ更新部１１１は、第１データ記憶部１５１に記録されているパリティデータの読み込みを第１アクセス制御部１０１に指示する。第１アクセス制御部１０１は、第１データ記憶部１５１に記録されているパリティデータを読み込み、パリティ更新部１１１に返答する。パリティ更新部１１１は、第１データ記憶部１５１に記録されているパリティデータを取得する。
【００４２】
パリティ更新部１１１は、取得したパリティデータを更新する（ステップＳ１０５）。より詳細には、パリティ更新部１１１は、取得したパリティデータと、取得した記憶領域が記憶するデータをパリティ演算するようにパリティ演算部１３０に指示する。パリティ演算部１３０は、指示元から受け付けた複数の入力データをパリティ演算し、演算結果を指示元に返却する。パリティ演算は、パリティデータを生成するときや、更新するときや、データを復元するときなどに実行する演算であり、例えば排他的論理和演算などの演算がある。パリティ更新部１１１は、更新後のパリティデータを取得する。パリティ更新部１１１は、取得した更新後のパリティデータを第１データ記憶部１５１に書き込みするように第１アクセス制御部１０１に指示する。第１アクセス制御部１０１は、更新後のパリティデータを第１データ記憶部１５１に書き込む。
【００４３】
パリティ更新部１１１は、記憶領域の状態情報を更新する（ステップＳ１０６）。より詳細には、パリティ更新部１１１は、第２状態記憶部１５４が記憶する第２状態集合情報から、通知された記憶領域の識別情報を削除するように第４アクセス制御部１０４に指示する。第４アクセス制御部１０４は、第２状態記憶部１５４が記憶する第２状態集合情報から、パリティ更新部１１１に通知された記憶領域の識別情報を削除する。パリティ更新部１１１は、第１状態記憶部１５３が記憶する第１状態集合情報に、通知された記憶領域の識別情報を追加するように第３アクセス制御部１０３に指示する。第３アクセス制御部１０３は、第１状態記憶部１５３が記憶する第１状態集合情報に、パリティ更新部１１１に通知された記憶領域の識別情報を追加する。
【００４４】
次に、記憶領域を第２状態に変更する処理の手順の一例について、図７を参照して説明する。図７は、第１の実施形態における、記憶領域を第２状態に変更する処理の流れを示すフローチャートである。
【００４５】
まず、状態更新部１２０は、必要に応じて、第１状態集合を第１状態記憶部１５３から読み込む（ステップＳ２０１）。具体的には、状態更新部１２０は、第１状態記憶部１５３が記憶する第１状態集合情報の読み込みを第３アクセス制御部１０３に指示する。第３アクセス制御部１０３は、第１状態記憶部１５３が記憶する第１状態集合情報を読み込み、状態更新部１２０に返答する。状態更新部１２０は、第１状態集合情報を取得する。状態更新部１２０は、取得した第１状態集合情報が示す記憶領域の集合から、第２状態に変更する記憶領域を選択し、選択した記憶領域の識別情報をパリティ更新部１１１に通知する（ステップＳ２０２）。
【００４６】
パリティ更新部１１１は、第２状態に変更する記憶領域に記録されているデータを読み込む（ステップＳ２０３）。より詳細には、パリティ更新部１１１は、状態更新部１２０から第２状態に変更する記憶領域の識別情報を通知されると、通知された記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示する。第２アクセス制御部１０２は、通知された記憶領域が記憶するデータを読み込み、パリティ更新部１１１に返答する。パリティ更新部１１１は、通知された記憶領域が記憶するデータを取得する。
【００４７】
次に、パリティ更新部１１１は、パリティデータを読み込み（ステップＳ２０４）、読み込みしたパリティデータを更新する（ステップＳ２０５）。この処理は、図６のステップＳ１０４、１０５と同じなので、詳細な説明は省略する。
【００４８】
パリティ更新部１１１は、記憶領域の状態情報を更新する（ステップＳ２０６）。より詳細には、パリティ更新部１１１は、第１状態記憶部１５３が記憶する第１状態集合情報から、通知された記憶領域の識別情報を削除するように第３アクセス制御部１０３に指示する。第３アクセス制御部１０３は、第１状態記憶部１５３が記憶する第１状態集合情報から、パリティ更新部１１１に通知された記憶領域の識別情報を削除する。パリティ更新部１１１は、第２状態記憶部１５４が記憶する第２状態集合情報に、通知された記憶領域の識別情報を追加するように第４アクセス制御部１０４に指示する。第４アクセス制御部１０４は、第２状態記憶部１５４が記憶する第２状態集合情報に、パリティ更新部１１１に通知された記憶領域の識別情報を追加する。
【００４９】
次に、パリティ書き込み処理の手順の一例について、図８を参照して説明する。図８は、第１の実施形態における、パリティ書き込み処理の流れを示すフローチャートである。
【００５０】
まず、パリティ書込部１１２は、第１データ記憶部１５１からパリティデータを読み込む（ステップＳ３０１）。より詳細には、パリティ書込部１１２は、予めまたは動的に定められる所定のタイミングで、第１データ記憶部１５１に記録されているパリティデータの読み込みを第１アクセス制御部１０１に指示する。第１アクセス制御部１０１は、第１データ記憶部１５１に記録されているパリティデータを読み込み、パリティ書込部１１２に返答する。パリティ書込部１１２は、第１データ記憶部１５１に記録されているパリティデータを取得する。
【００５１】
パリティ書込部１１２は、取得したパリティデータを書き込む（ステップＳ３０２）。より詳細には、パリティ書込部１１２は、取得したパリティデータを第２データ記憶部１５２に書き込みするように第２アクセス制御部１０２に指示する。第２アクセス制御部１０２は、パリティ書込部１１２が取得したパリティデータを第２データ記憶部１５２に書き込む。
【００５２】
このように、第１の実施形態にかかるデータ記憶装置では、ユーザデータの記憶媒体への書き込み量に比して、パリティデータの記憶媒体への書き込み量を削減することができる。
【００５３】
（第２の実施形態）
第２の実施形態にかかるデータ記憶装置では、第２状態に変更された記憶領域の個数が、予めまたは動的に定められる閾値を超えるごとに、第１データ記憶部１５１から第２データ記憶部１５２にパリティデータを書き込む。
【００５４】
図９は、第２の実施形態にかかるデータ記憶装置２００の構成の一例を示すブロック図である。図９に示すように、データ記憶装置２００は、第１データ記憶部１５１と、第１アクセス制御部１０１と、第２データ記憶部１５２と、第２アクセス制御部１０２と、第１状態記憶部１５３と、第３アクセス制御部１０３と、第２状態記憶部１５４と、第４アクセス制御部１０４と、パリティ演算部１３０と、状態更新部１２０−２と、コントローラ１１０−２と、第３状態記憶部２５５と、第５アクセス制御部２０５とを、備えている。コントローラ１１０−２は、パリティ更新部１１１−２と、パリティ書込部１１２−２と、を備えている。ここで、説明済みの機能部と同じものについては、同じ符号を付し、詳細な説明は省略する。
【００５５】
第３状態記憶部２５５は、第２状態追加集合情報を記憶する。ここで、第２状態記憶部１５４が記憶する第２状態集合情報が示す、第２状態の記憶領域の集合には、以下の２つの集合が含まれる。
（１）後述するパリティ書込部１１２−２が、第１データ記憶部１５１に記録されているパリティデータを第２データ記憶部１５２に書き込むように、第１アクセス制御部１０１と第２アクセス制御部１０２に、最後に指示した時点（以降、最後のパリティ書き込み時点という）よりも前から継続して第２状態であった記憶領域の集合。
（２）最後のパリティ書き込み時点以降に、後述する状態更新部１２０−２が、第１状態集合情報が示す記憶領域の集合から、第２状態に変更する記憶領域を選択し、結果として第２状態になった記憶領域の集合。
【００５６】
第２状態追加集合情報とは、最後のパリティ書き込み時点以降に第２状態になった記憶領域の集合（第２状態追加集合）の情報である。第２状態追加集合情報は、例えば図１０に示すような、記憶領域の識別子のリスト構造で実現される。
【００５７】
第５アクセス制御部２０５は、第３状態記憶部２５５へのアクセスを制御する。第３状態記憶部２５５へのアクセスとは、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込み、第３状態記憶部２５５が記憶する第２状態追加集合情報への要求元から指定された記憶領域情報の追加、第３状態記憶部２５５が記憶する第２状態追加集合情報からの要求元から指定された記憶領域情報の削除、第３状態記憶部２５５が記憶する第２状態追加集合情報の削除が含まれる。
【００５８】
状態更新部１２０−２は、第１状態から第２状態に変更する記憶領域の識別情報をパリティ更新部１１１−２に通知する処理については、通知先がパリティ更新部１１１ではなく、パリティ更新部１１１−２である以外は、第１の実施形態の状態更新部１２０と同様であるので詳細な説明は省略する。
【００５９】
パリティ更新部１１１−２は、状態更新部１２０−２から、第１状態に変更する記憶領域の識別情報を通知された時の処理については、通知元が状態更新部１２０ではなく、状態更新部１２０−２である以外は、パリティ更新部１１１と同様であるので詳細な説明は省略する。
【００６０】
パリティ更新部１１１−２は、状態更新部１２０−２から第２状態に変更する記憶領域の識別情報を通知されると、パリティ更新部１１１が状態更新部１２０から第２状態に変更する記憶領域の識別情報を通知された時の処理に加えて、第３状態記憶部２５５が記憶する第２状態追加集合情報に、通知された記憶領域の識別情報を追加するように第５アクセス制御部２０５に指示する。
【００６１】
パリティ書込部１１２−２は、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込みを第５アクセス制御部２０５に指示し、第３状態記憶部２５５が記憶する第２状態追加集合情報を取得する。パリティ書込部１１２−２は、取得した第２状態追加集合情報に含まれている記憶領域の識別情報（以下、領域情報という）の個数を抽出する。抽出した領域情報の個数が、予めまたは動的に定められる閾値を超えた時に、パリティ書込部１１２−２は、パリティ書込部１１２が指示するパリティ書き込み指示に加えて、第３状態記憶部２５５が記憶する第２状態追加集合情報を削除するように第５アクセス制御部２０５に指示する。
【００６２】
次に、このように構成された第２の実施形態にかかるデータ記憶装置２００による処理について図１１を用いて説明する。記憶領域を第１状態に変更する処理の流れは、第１の実施形態の図６と同様であるため説明を省略する。図１１は、第２の実施形態における、記憶領域を第２状態に変更する処理の流れを示すフローチャートである。
【００６３】
ステップＳ４０１からステップＳ４０６までは、第１の実施形態にかかるデータ記憶装置１００におけるステップＳ２０１からステップＳ２０６までと同様の処理なので、その説明を省略する。
【００６４】
ステップＳ４０７では、パリティ更新部１１１−２は、第２状態に変更する記憶領域の識別情報を第２状態追加集合情報に追加する。より詳細には、パリティ更新部１１１−２は、第３状態記憶部２５５が記憶する第２状態追加集合情報に、状態更新部１２０−２から通知された記憶領域の識別情報を追加するように第５アクセス制御部２０５に指示する。第５アクセス制御部２０５は、第３状態記憶部２５５が記憶する第２状態追加集合情報に、パリティ更新部１１１−２が状態更新部１２０−２から通知された記憶領域の識別情報を追加する。
【００６５】
次に、パリティ書き込み処理の手順の一例について、図１２を参照して説明する。図１２は、第２の実施形態における、パリティ書き込み処理の流れを示すフローチャートである。
【００６６】
まず、パリティ書込部１１２−２は、第２状態追加集合情報に含まれている領域情報の個数を抽出する（ステップＳ５０１）。より詳細には、パリティ書込部１１２−２は、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込みを第５アクセス制御部２０５に指示する。第５アクセス制御部２０５は、第３状態記憶部２５５が記憶する第２状態追加集合情報を読み込み、パリティ書込部１１２−２に返答する。パリティ書込部１１２−２は、第３状態記憶部２５５が記憶する第２状態追加集合情報を取得する。パリティ書込部１１２−２は、取得した第２状態追加集合情報に含まれている領域情報の個数を抽出する。
【００６７】
パリティ書込部１１２−２は、領域情報の個数が予めまたは動的に定められる閾値を超えたか判断する（ステップＳ５０２）。抽出した領域情報の個数が閾値を超えていない場合（ステップＳ５０２：Ｎｏ）、処理を終える。
【００６８】
抽出した領域情報の個数が閾値を超えている場合（ステップＳ５０２：Ｙｅｓ）、パリティ書込部１１２−２は、第１データ記憶部１５１からパリティデータを読み込む（ステップＳ５０３）。より詳細には、パリティ書込部１１２−２は、第１データ記憶部１５１に記録されているパリティデータの読み込みを第１アクセス制御部１０１に指示する。第１アクセス制御部１０１は、第１データ記憶部１５１に記録されているパリティデータを読み込み、パリティ書込部１１２−２に返答する。パリティ書込部１１２−２は、第１データ記憶部１５１に記録されているパリティデータを取得する。
【００６９】
ステップＳ５０４は、図８のステップＳ３０２と同様の処理なので、詳細な説明は省略する。
【００７０】
パリティ書込部１１２−２は、第３状態記憶部２５５から第２状態追加集合情報を削除する（ステップＳ５０５）。より詳細には、パリティ書込部１１２−２は、第３状態記憶部２５５が記憶する第２状態追加集合情報を削除するように第５アクセス制御部２０５に指示する。第５アクセス制御部２０５は、第３状態記憶部２５５が記憶する第２状態追加集合情報を削除する。
【００７１】
（第３の実施形態）
第３の実施形態にかかるデータ記憶装置では、第１状態に変更された記憶領域の個数が、予めまたは動的に定められる閾値を超えるごとに、第１データ記憶部１５１から第２データ記憶部１５２にパリティデータを書き込む。
【００７２】
図１３は、第３の実施形態にかかるデータ記憶装置３００の構成の一例を示すブロック図である。図１３に示すように、データ記憶装置３００は、第１データ記憶部１５１と、第１アクセス制御部１０１と、第２データ記憶部１５２と、第２アクセス制御部１０２と、第１状態記憶部１５３と、第３アクセス制御部１０３と、第２状態記憶部１５４と、第４アクセス制御部１０４と、パリティ演算部１３０と、状態更新部１２０−３と、コントローラ１１０−３と、第４状態記憶部３５６と、第６アクセス制御部３０６とを、備えている。コントローラ１１０−３は、パリティ更新部１１１−３と、パリティ書込部１１２−３と、を備えている。ここで、説明済みの機能部と同じものについては、同じ符号を付し、詳細な説明は省略する。
【００７３】
第４状態記憶部３５６は、第１状態追加集合情報を記憶する。ここで、第１状態記憶部１５３が記憶する第１状態集合情報が示す、第１状態の記憶領域の集合には、以下の２つの集合が含まれる。
（１）後述するパリティ書込部１１２−３が、第１データ記憶部１５１に記録されているパリティデータを第２データ記憶部１５２に書き込むように、第１アクセス制御部１０１と第２アクセス制御部１０２に、最後に指示した時点（以降、最後のパリティ書き込み時点という）よりも前から継続して第１状態であった記憶領域の集合。
（２）最後のパリティ書き込み時点以降に、後述する状態更新部１２０−３が、第２状態集合情報が示す記憶領域の集合から、第１状態に変更する記憶領域を選択し、結果として第１状態になった記憶領域の集合。
【００７４】
第１状態追加集合情報とは、最後のパリティ書き込み時点以降に第１状態になった記憶領域の集合（第１状態追加集合）の情報である。第１状態追加集合情報は、例えば図１４に示すような、記憶領域の識別子のリスト構造で実現される。
【００７５】
第６アクセス制御部３０６は、第４状態記憶部３５６へのアクセスを制御する。第４状態記憶部３５６へのアクセスとは、第４状態記憶部３５６が記憶する第１状態追加集合情報の読み込み、第４状態記憶部３５６が記憶する第１状態追加集合情報への要求元から指定された記憶領域情報の追加、第４状態記憶部３５６が記憶する第１状態追加集合情報からの要求元から指定された記憶領域情報の削除、第４状態記憶部３５６が記憶する第１状態追加集合情報の削除が含まれる。
【００７６】
状態更新部１２０−３は、通知先がパリティ更新部１１１ではなく、パリティ更新部１１１−３である以外は、状態更新部１２０と同様であるので、詳細な説明は省略する。
【００７７】
パリティ更新部１１１−３は、状態更新部１２０−３から第１状態に変更する記憶領域の識別情報を通知されると、パリティ更新部１１１が状態更新部１２０から第１状態に変更する記憶領域の識別情報を通知された時の処理に加えて、第４状態記憶部３５６が記憶する第１状態追加集合情報に、通知された記憶領域の識別情報を追加するように第６アクセス制御部３０６に指示する。
【００７８】
パリティ更新部１１１−３は、状態更新部１２０−３から、第２状態に変更する記憶領域の識別情報を通知された時の処理については、通知元が状態更新部１２０ではなく、状態更新部１２０−３である以外は、パリティ更新部１１１と同様であるので詳細な説明は省略する。
【００７９】
パリティ書込部１１２−３は、第４状態記憶部３５６が記憶する第１状態追加集合情報の読み込みを第６アクセス制御部３０６に指示し、第４状態記憶部３５６が記憶する第１状態追加集合情報を取得する。パリティ書込部１１２−３は、取得した第１状態追加集合情報に含まれている領域情報の個数を抽出する。抽出した領域情報の個数が、予めまたは動的に定められる閾値を超えた時に、パリティ書込部１１２−３は、パリティ書込部１１２が指示するパリティ書き込み指示に加えて、第４状態記憶部３５６が記憶する第１状態追加集合情報を削除するように第６アクセス制御部３０６に指示する。
【００８０】
次に、このように構成された第３の実施形態にかかるデータ記憶装置３００による処理について図１５を用いて説明する。図１５は、第３の実施形態における、記憶領域を第１状態に変更する処理の流れを示すフローチャートである。
【００８１】
ステップＳ６０１からステップＳ６０６までは、第１の実施形態にかかるデータ記憶装置１００におけるステップＳ１０１からステップＳ１０６までと同様の処理なので、その説明を省略する。
【００８２】
ステップＳ６０７では、パリティ更新部１１１−３は、第１状態に変更する記憶領域の識別情報を第１状態追加集合情報に追加する。より詳細には、パリティ更新部１１１−３は、第４状態記憶部３５６が記憶する第１状態追加集合情報に、状態更新部１２０−３から通知された記憶領域の識別情報を追加するように第６アクセス制御部３０６に指示する。第６アクセス制御部３０６は、第４状態記憶部３５６が記憶する第１状態追加集合情報に、パリティ更新部１１１−３が状態更新部１２０−３から通知された記憶領域の識別情報を追加する。
【００８３】
なお、記憶領域を第２状態に変更する処理の流れは、第１の実施形態の図７と同様であるため説明を省略する。
【００８４】
次に、パリティ書き込み処理の手順の一例について、図１６を参照して説明する。図１６は、第３の実施形態における、パリティ書き込み処理の流れを示すフローチャートである。
【００８５】
まず、パリティ書込部１１２−３は、第１状態追加集合情報に含まれている領域情報の個数を抽出する（ステップＳ７０１）。より詳細には、パリティ書込部１１２−３は、第４状態記憶部３５６が記憶する第１状態追加集合情報の読み込みを第６アクセス制御部３０６に指示する。第６アクセス制御部３０６は、第４状態記憶部３５６が記憶する第１状態追加集合情報を読み込み、パリティ書込部１１２−３に返答する。パリティ書込部１１２−３は、第４状態記憶部３５６が記憶する第１状態追加集合情報を取得する。パリティ書込部１１２−３は、取得した第１状態追加集合情報に含まれている領域情報の個数を抽出する。
【００８６】
パリティ書込部１１２−３は、領域情報の個数が予めまたは動的に定められる閾値を超えたか判断する（ステップＳ７０２）。抽出した領域情報の個数が閾値を超えていない場合（ステップＳ７０２：Ｎｏ）、処理を終える。
【００８７】
抽出した領域情報の個数が閾値を超えている場合（ステップＳ７０２：Ｙｅｓ）、パリティ書込部１１２−３は、第１データ記憶部１５１からパリティデータを読み込む（ステップＳ７０３）。より詳細には、パリティ書込部１１２−３は、第１データ記憶部１５１に記録されているパリティデータの読み込みを第１アクセス制御部１０１に指示する。第１アクセス制御部１０１は、第１データ記憶部１５１に記録されているパリティデータを読み込み、パリティ書込部１１２−３に返答する。パリティ書込部１１２−３は、第１データ記憶部１５１に記録されているパリティデータを取得する。
【００８８】
ステップＳ７０４は、図８のステップＳ３０２と同様の処理なので、詳細な説明は省略する。
【００８９】
パリティ書込部１１２−３は、第４状態記憶部３５６から第１状態追加集合情報を削除する（ステップＳ７０５）。より詳細には、パリティ書込部１１２−３は、第４状態記憶部３５６が記憶する第１状態追加集合情報を削除するように第６アクセス制御部３０６に指示する。第６アクセス制御部３０６は、第４状態記憶部３５６が記憶する第１状態追加集合情報を削除する。
【００９０】
（第４の実施形態）
第４の実施形態にかかるデータ記憶装置では、第１状態に変更された記憶領域の個数が閾値を超えるごとに、または、第２状態に変更された記憶領域の個数が閾値を超えるごとに、第１データ記憶部１５１から第２データ記憶部１５２にパリティデータを書き込む。
【００９１】
図１７は、第４の実施形態にかかるデータ記憶装置４００の構成の一例を示すブロック図である。図１７に示すように、データ記憶装置４００は、第１データ記憶部１５１と、第１アクセス制御部１０１と、第２データ記憶部１５２と、第２アクセス制御部１０２と、第１状態記憶部１５３と、第３アクセス制御部１０３と、第２状態記憶部１５４と、第４アクセス制御部１０４と、パリティ演算部１３０と、状態更新部１２０−４と、コントローラ１１０−４と、第３状態記憶部２５５と、第５アクセス制御部２０５と、第４状態記憶部３５６と、第６アクセス制御部３０６とを、備えている。コントローラ１１０−４は、パリティ更新部１１１−４と、パリティ書込部１１２−４と、を備えている。ここで、説明済みの機能部と同じものについては、同じ符号を付し、詳細な説明は省略する。
【００９２】
状態更新部１２０−４は、通知先がパリティ更新部１１１ではなく、パリティ更新部１１１−４である以外は、状態更新部１２０と同様であるので、詳細な説明は省略する。
【００９３】
パリティ更新部１１１−４は、状態更新部１２０−４から、第１状態に変更する記憶領域の識別情報を通知された時の処理については、通知元が状態更新部１２０−３ではなく、状態更新部１２０−４である以外は、パリティ更新部１１１−３と同様であるので詳細な説明は省略する。
【００９４】
また、パリティ更新部１１１−４は、状態更新部１２０−４から、第２状態に変更する記憶領域の識別情報を通知された時の処理については、通知元が状態更新部１２０−２ではなく、状態更新部１２０−４である以外は、パリティ更新部１１１−２と同様であるので詳細な説明は省略する。
【００９５】
パリティ書込部１１２−４は、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込みを第５アクセス制御部２０５に指示し、第３状態記憶部２５５が記憶する第２状態追加集合情報を取得する。パリティ書込部１１２−４は、取得した第２状態追加集合情報に含まれている領域情報の個数を抽出する。パリティ書込部１１２−４は、第４状態記憶部３５６が記憶する第１状態追加集合情報の読み込みを第６アクセス制御部３０６に指示し、第４状態記憶部３５６が記憶する第１状態追加集合情報を取得する。パリティ書込部１１２−４は、取得した第１状態追加集合情報に含まれている領域情報の個数を抽出する。
【００９６】
パリティ書込部１１２−４は、抽出した第２状態追加集合情報に含まれている領域情報の個数が、予めまたは動的に定められる閾値を超えた時、または、抽出した第１状態追加集合情報に含まれている領域情報の個数が、予めまたは動的に定められる閾値を超えた時に、パリティ書込部１１２−２が指示するパリティ書き込み指示と、第３状態記憶部２５５が記憶する第２状態追加集合情報を削除するように第５アクセス制御部２０５に指示する処理に加えて、第４状態記憶部３５６が記憶する第１状態追加集合情報を削除するように第６アクセス制御部３０６に指示する。
【００９７】
次に、このように構成された第４の実施形態にかかるデータ記憶装置４００による処理について図１８を用いて説明する。なお、記憶領域を第１状態に変更する処理、および、記憶領域を第２状態に変更する処理は、それぞれ図１５（第３の実施形態）および図１１（第２の実施形態）と同様であるため説明を省略する。図１８は、第４の実施形態におけるパリティ書き込み処理の流れを示すフローチャートである。
【００９８】
ステップＳ８０１では、第２状態追加集合情報に含まれている領域情報の個数を抽出する。この処理は、パリティ書込部１１２−２がパリティ書込部１１２−４である以外は、図１２のステップＳ５０１と同じなので、詳細な説明は省略する。
【００９９】
ステップＳ８０２では、第１状態追加集合情報に含まれている領域情報の個数を抽出する。この処理は、パリティ書込部１１２−３がパリティ書込部１１２−４である以外は、図１６のステップＳ７０１と同じなので、詳細な説明は省略する。
【０１００】
パリティ書込部１１２−４は、領域情報の個数が所定の閾値を超えたか判断する（ステップＳ８０３）。より詳細には、パリティ書込部１１２−４は、ステップＳ８０１で抽出した第２状態追加集合情報に含まれている領域情報の個数が、予めまたは動的に定められる閾値（第１閾値）を超えた、または、ステップＳ８０２で抽出した第１状態追加集合情報に含まれている領域情報の個数が、予めまたは動的に定められる閾値（第２閾値）を超えたか否かを判断する。抽出した領域情報の個数が閾値を超えていない場合（ステップＳ８０３：Ｎｏ）、処理を終える。
【０１０１】
抽出した領域情報の個数が閾値を超えている場合（ステップＳ８０３：Ｙｅｓ）、パリティ書込部１１２−４は、第１データ記憶部１５１からパリティデータを読み込む（ステップＳ８０４）。この処理は、パリティ書込部１１２−２がパリティ書込部１１２−４である以外は、図１２のステップＳ５０３と同じなので、詳細な説明は省略する。
【０１０２】
ステップＳ８０５からステップＳ８０６までは、第２の実施形態にかかるデータ記憶装置２００におけるステップＳ５０４からステップＳ５０５までと同様の処理なので、その説明を省略する。また、ステップＳ８０７は、第３の実施形態にかかるデータ記憶装置３００におけるステップＳ７０５と同様の処理なので、その説明を省略する。
【０１０３】
（第５の実施形態）
前述したような特性のメモリを用いた場合、第１データ記憶部１５１には、揮発性のメモリが用いられ、第２データ記憶部１５２には、不揮発性のメモリが用いられることがある。したがって、例えば、データ記憶装置の電源が切断されると第１データ記憶部１５１に記録されているパリティデータが失われる。このため、特に、不意の電源切断が起こった時は、その後データ記憶装置の電源が投入されたときに、電源切断前に第１データ記憶部１５１に記録されていたパリティデータを復元する必要がある。
【０１０４】
もちろん、第１状態記憶部１５３が記憶する第１状態集合情報に基づいて、第１状態の記憶領域に記録されているデータを全て読み込み、パリティ演算することで、電源切断前に第１データ記憶部１５１に記録されていたパリティデータを復元することは可能である。しかし、パリティグループを構成する記憶領域の数が多い場合には、処理時間が増大する。
【０１０５】
そこで、第５の実施形態では、第３状態記憶部２５５が記憶する第２状態追加集合情報と、第４状態記憶部３５６が記憶する第１状態追加集合情報とを利用することで、パリティデータの復元処理時間の短縮を図る。
【０１０６】
なお、第１データ記憶部１５１に記録されていたパリティデータの復元処理を実行する処理は、上述する場合に限られない。例えば、第１データ記憶部１５１に記録されていたパリティデータに誤りが検出されたときでも良いし、その他の理由により、第１データ記憶部１５１に記録されていたパリティデータを復元する必要性が生じた時でも良い。
【０１０７】
図１９は、第５の実施形態にかかるデータ記憶装置５００の構成の一例を示すブロック図である。図１９に示すように、データ記憶装置５００は、第１データ記憶部１５１と、第１アクセス制御部１０１と、第２データ記憶部１５２と、第２アクセス制御部１０２と、第１状態記憶部１５３と、第３アクセス制御部１０３と、第２状態記憶部１５４と、第４アクセス制御部１０４と、パリティ演算部１３０と、状態更新部１２０−５と、コントローラ１１０−５と、第３状態記憶部２５５と、第５アクセス制御部２０５と、第４状態記憶部３５６と、第６アクセス制御部３０６と、を、備えている。コントローラ１１０−５は、パリティ更新部１１１−５と、パリティ書込部１１２−４と、パリティ復元部５１３と、を備えている。ここで、説明済みの機能部と同じものについては、同じ符号を付し、詳細な説明は省略する。
【０１０８】
パリティ復元部５１３は、第１データ記憶部１５１に記録されていたパリティデータを復元する必要性が生じた時に、第２データ記憶部１５２に最後に記録されたパリティデータの読み込みを、第２アクセス制御部１０２に指示し、第２データ記憶部１５２に最後に記録されたパリティデータを取得する。
【０１０９】
ＳＳＤ（Solid State Drive）などでは、たとえば記憶領域ごとの消去回数分散化等のため、あるデータを更新したときに、更新前に記録されていた記憶領域と異なる記憶領域に更新後のデータを記録する場合がある。最後に記録されたパリティデータを取得とは、このようなデータの記録方式を用いることにより複数の領域にパリティデータが記録されている場合であっても、実際に有効なパリティデータとして最後に記録されているパリティデータを取得することを意味する。
【０１１０】
パリティ復元部５１３は、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込みを第５アクセス制御部２０５に指示し、第３状態記憶部２５５が記憶する第２状態追加集合情報を取得する。
【０１１１】
パリティ復元部５１３は、取得した第２状態追加集合情報に対応する第２データ記憶部１５２の記憶領域それぞれに対し、第２状態追加集合情報に対応する記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示し、第２状態追加集合情報に対応する記憶領域が記憶するデータを取得する。
【０１１２】
パリティ復元部５１３は、第４状態記憶部３５６が記憶する第１状態追加集合情報の読み込みを第６アクセス制御部３０６に指示し、第４状態記憶部３５６が記憶する第１状態追加集合情報を取得する。
【０１１３】
パリティ復元部５１３は、取得した第１状態追加集合情報に対応する第２データ記憶部１５２の記憶領域それぞれに対し、第１状態追加集合情報に対応する記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示し、第１状態追加集合情報に対応する記憶領域が記憶するデータを取得する。
【０１１４】
パリティ復元部５１３は、取得した第２データ記憶部１５２に最後に記録されたパリティデータと、取得した第２状態追加集合情報に対応する記憶領域が記憶するデータ群と、取得した第１状態追加集合情報に対応する記憶領域が記憶するデータ群を、パリティ演算するようにパリティ演算部１３０に指示し、更新後のパリティデータを取得する。
【０１１５】
なお、上記手順はパリティ演算の最終的な結果が変わらない範囲で適宜入れ替えてもよい。
【０１１６】
パリティ復元部５１３は、取得した更新後のパリティデータを第１データ記憶部１５１に記録するように第１アクセス制御部１０１に指示する。
【０１１７】
状態更新部１２０−５は、必要に応じて、第２状態記憶部１５４が記憶する第２状態集合情報の読み込みを第４アクセス制御部１０４に指示し、第２状態集合情報を取得する。状態更新部１２０−５は、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込みを第５アクセス制御部２０５に指示し、第２状態追加集合情報を取得する。状態更新部１２０−５は、取得した第２状態集合情報が示す記憶領域の集合から、取得した第２状態追加集合情報が示す記憶領域の集合を除いた集合から、第１状態に変更する記憶領域を選択し、選択した記憶領域の識別情報をパリティ更新部１１１−５に通知する。
【０１１８】
パリティ更新部１１１−５は、通知元が状態更新部１２０−４ではなく、状態更新部１２０−５である以外は、パリティ更新部１１１−４と同様であるので、詳細な説明は省略する。
【０１１９】
次に、このように構成された第５の実施形態にかかるデータ記憶装置５００による処理について図２０を用いて説明する。図２０は、第５の実施形態における、記憶領域を第１状態に変更する処理の流れを示すフローチャートである。
【０１２０】
まず、状態更新部１２０−５は、必要に応じて、第２状態集合を第２状態記憶部１５４から読み込む（ステップＳ９０１）。具体的には、状態更新部１２０−５は、第２状態記憶部１５４が記憶する第２状態集合情報の読み込みを第４アクセス制御部１０４に指示する。第４アクセス制御部１０４は、第２状態記憶部１５４が記憶する第２状態集合情報を読み込み、状態更新部１２０−５に返答する。状態更新部１２０−５は、第２状態集合情報を取得する。状態更新部１２０−５は、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込みを第５アクセス制御部２０５に指示する（ステップＳ９０２）。第５アクセス制御部２０５は、第３状態記憶部２５５が記憶する第２状態追加集合情報を読み込み、状態更新部１２０−５に返答する。状態更新部１２０−５は、第２状態追加集合情報を取得する。状態更新部１２０−５は、取得した第２状態集合情報が示す記憶領域の集合から、取得した第２状態追加集合情報が示す記憶領域の集合を除いた集合から、第１状態に変更する記憶領域を選択し、選択した記憶領域の識別情報をパリティ更新部１１１−５に通知する（ステップＳ９０３）。
【０１２１】
ステップＳ９０４からステップＳ９０８までは、第３の実施形態にかかるデータ記憶装置３００におけるステップＳ６０３からステップＳ６０７までと同様の処理なので、その説明を省略する。
【０１２２】
このように、第１状態に変更する記憶領域に制約を持たせるのは、後述するパリティデータの復元の際に、第２状態追加集合情報が示す記憶領域が記憶するデータが必要であるからである。このため、本実施形態では、第２状態集合情報が示す記憶領域の集合から、第２状態追加集合情報が示す記憶領域の集合を除いた集合に含まれる、第２状態の記憶領域に対してのみ、ユーザデータの書き換え処理を許可する。すなわち、第２状態追加集合情報が示す記憶領域の集合に含まれる、第２状態の記憶領域に対しては、ユーザデータの書き換え処理を許可しない。これにより、第２状態追加集合情報が示す記憶領域が記憶するデータを保持することができる。
【０１２３】
記憶領域を第２状態に変更する処理の手順の一例と、パリティ書き込み処理の手順の一例は、第４の実施形態と同様なので、詳細な説明は省略する。
【０１２４】
次に、パリティデータを復元する処理の手順の一例について、図２１を参照して説明する。
【０１２５】
まず、パリティ復元部５１３は、最後に書き込みしたパリティデータを読み込む（ステップＳ１００１）。より詳細には、パリティ復元部５１３は、第１データ記憶部１５１に記録されていたパリティデータを復元する必要性が生じた時に、第２データ記憶部１５２に最後に記録されたパリティデータの読み込みを、第２アクセス制御部１０２に指示する。第２アクセス制御部１０２は、第２データ記憶部１５２に最後に記録されたパリティデータを読み込み、パリティ復元部５１３に返答する。パリティ復元部５１３は、第２データ記憶部１５２に最後に記録されたパリティデータを取得する。
【０１２６】
パリティ復元部５１３は、第２状態追加集合情報に対応する記憶領域が記憶するデータを読み込む。より詳細には、パリティ復元部５１３は、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込みを第５アクセス制御部２０５に指示する。第５アクセス制御部２０５は、第３状態記憶部２５５が記憶する第２状態追加集合情報を読み込み、パリティ復元部５１３に返答する。パリティ復元部５１３は、第３状態記憶部２５５が記憶する第２状態追加集合情報を取得する（ステップＳ１００２）。パリティ復元部５１３は、取得した第２状態追加集合情報に対応する第２データ記憶部１５２の記憶領域それぞれに対し、第２状態追加集合情報に対応する記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示する。第２アクセス制御部１０２は、パリティ復元部５１３が取得した第２状態追加集合情報に対応する記憶領域が記憶するデータを読み込み、パリティ復元部５１３に返答する。パリティ復元部５１３は、第２状態追加集合情報に対応する記憶領域が記憶するデータを取得する（ステップＳ１００３）。
【０１２７】
パリティ復元部５１３は、第１状態追加集合情報に対応する記憶領域が記憶するデータを読み込む。より詳細には、パリティ復元部５１３は、第４状態記憶部３５６が記憶する第１状態追加集合情報の読み込みを第６アクセス制御部３０６に指示する。第６アクセス制御部３０６は、第４状態記憶部３５６が記憶する第１状態追加集合情報を読み込み、パリティ復元部５１３に返答する。パリティ復元部５１３は、第４状態記憶部３５６が記憶する第１状態追加集合情報を取得する（ステップＳ１００４）。パリティ復元部５１３は、取得した第１状態追加集合情報に対応する第２データ記憶部１５２の記憶領域それぞれに対し、第１状態追加集合情報に対応する記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示する。第２アクセス制御部１０２は、パリティ復元部５１３が取得した第１状態追加集合情報に対応する記憶領域が記憶するデータを読み込み、パリティ復元部５１３に返答する。パリティ復元部５１３は、第１状態追加集合情報に対応する記憶領域が記憶するデータを取得する（ステップＳ１００５）。
【０１２８】
パリティ復元部５１３は、パリティデータを更新する（ステップＳ１００６）。より詳細には、パリティ復元部５１３は、取得した第２データ記憶部１５２に最後に記録されたパリティデータと、取得した第２状態追加集合情報に対応する記憶領域が記憶するデータ群と、取得した第１状態追加集合情報に対応する記憶領域が記憶するデータ群を、パリティ演算するようにパリティ演算部１３０に指示する。パリティ演算部１３０は、指示元から受け付けた複数の入力データをパリティ演算し、演算結果を指示元に返却する。パリティ復元部５１３は、更新後のパリティデータを取得する。
【０１２９】
パリティ復元部５１３は、パリティデータを保存する（ステップＳ１００７）。より詳細には、パリティ復元部５１３は、取得した更新後のパリティデータを第１データ記憶部１５１に書き込みするように第１アクセス制御部１０１に指示する。第１アクセス制御部１０１は、更新後のパリティデータを第１データ記憶部１５１に書き込む。
【０１３０】
このように、第５の実施形態にかかるデータ記憶装置では、第２状態追加集合情報と第１状態追加集合情報とを利用することで、第１状態の記憶領域に記憶されているユーザデータをすべて読み込むことなく、パリティデータを復元できる。これにより、パリティデータの復元処理時間の短縮が実現できる。
【０１３１】
（第６の実施形態）
パリティデータによってユーザデータを復元できる確率を高められれば、データ記憶装置の信頼性をさらに向上することができる。排他的論理和演算によるパリティデータの場合、同一パリティグループ中の１つのユーザデータがパリティデータによって復元可能であり、同一パリティグループ中の２つ以上のユーザデータをパリティデータによって復元することはできない。なお、排他的論理和演算以外の演算方法によるデータ復元符号においても、以降の実施の形態を適宜読み替えて適用させることが可能である。
【０１３２】
第６の実施形態にかかるデータ記憶装置は、第２状態追加集合情報と第１状態追加集合情報とを利用することで、同一パリティグループ中の２つ以上のユーザデータの復元を実現する。以下では、第６の実施形態のユーザデータの復元方法を差分反復訂正という。
【０１３３】
図２２は、第６の実施形態にかかるデータ記憶装置６００の構成の一例を示すブロック図である。図２２に示すように、データ記憶装置６００は、第１データ記憶部１５１と、第１アクセス制御部１０１と、第２データ記憶部１５２と、第２アクセス制御部１０２と、第１状態記憶部１５３と、第３アクセス制御部１０３と、第２状態記憶部１５４と、第４アクセス制御部１０４と、パリティ演算部１３０と、状態更新部１２０−５と、コントローラ１１０−６と、第３状態記憶部２５５と、第５アクセス制御部２０５と、第４状態記憶部３５６と、第６アクセス制御部３０６と、を備えている。コントローラ１１０−６は、パリティ更新部１１１−５と、パリティ書込部１１２−４と、パリティ復元部６１４と、を備えている。ここで、説明済みの機能部と同じものについては、同じ符号を付し、詳細な説明は省略する。
【０１３４】
データ復元部６１４の説明を始める前に、記憶領域およびデータの保護状態の関係について説明する。図２３は、記憶領域の状態と、パリティデータによる記憶領域に記録されているデータの保護状態の関係を示す図である。
【０１３５】
図２３に示すように、第１状態追加集合情報が示す記憶領域の集合（第１状態追加集合）は、第１状態集合情報が示す記憶領域の集合（第１状態集合）に含まれる。また、第２状態追加集合情報が示す記憶領域の集合（第２状態追加集合）は、第２状態集合情報が示す記憶領域の集合（第２状態集合）に含まれる。
【０１３６】
また、図２３に示すように、第１状態集合は、第１データ記憶部１５１に記録されているパリティデータで保護されているデータが記録されている記憶領域の集合である。また、第１状態集合から第１状態追加集合を除いた記憶領域の集合と、第２状態追加集合をあわせた記憶領域の集合は、第２データ記憶部１５２に最後に記録したパリティデータで保護されているデータが記録されている記憶領域の集合である。
【０１３７】
ここで、図２３に示すように、復元したいデータを記憶する２つの記憶領域のうち、１つの記憶領域（以下、記憶領域Ａとする）が、第１状態追加集合情報が示す記憶領域の集合に含まれ、もう１つの記憶領域（以下、記憶領域Ｂとする）が、第１状態集合から第１状態追加集合を除いた記憶領域の集合に含まれている場合は、差分反復訂正が実行できる。なお、この状態では、パリティ復元したいデータを記憶する２つの記憶領域は、同一パリティグループ中（第１状態集合）に含まれることになるため、パリティデータによる通常のデータ復元処理では、復元することはできない。
【０１３８】
図２２のデータ復元部６１４の説明に戻る。データ復元部６１４は、図示しない復元依頼元から、記憶しているデータを復元したい２つの記憶領域の識別情報が含まれる差分反復訂正依頼を受けると、２つの記憶領域のうち、１つの記憶領域（記憶領域Ａ）が、第１状態追加集合に含まれ、もう１つの記憶領域（記憶領域Ｂ）が、第１状態集合から第１状態追加集合を除いた記憶領域の集合に含まれているかどうかを判定する。
【０１３９】
より詳細には、データ復元部６１４は、第１状態記憶部１５３が記憶する第１状態集合情報の読み込みを第３アクセス制御部１０３に指示し、第１状態記憶部１５３が記憶する第１状態集合情報を取得する。データ復元部６１４は、第４状態記憶部３５６が記憶する第１状態追加集合情報の読み込みを第６アクセス制御部３０６に指示し、第４状態記憶部３５６が記憶する第１状態追加集合情報を取得する。データ復元部６１４は、受け付けた差分反復訂正依頼に含まれる２つの記憶領域のうち、いずれか一方の記憶領域（記憶領域Ａ）が、取得した第１状態追加集合情報に対応する記憶領域の集合に含まれ、もう一方の記憶領域（記憶領域Ｂ）が、取得した第１状態集合情報が示す記憶領域の集合から、取得した第１状態追加集合情報が示す記憶領域の集合を除いた記憶領域の集合に含まれているかを判定する。判定結果が偽の時は、データ復元部６１４は、図示しない復元依頼元に、差分反復訂正不能を示す旨を返答する。
【０１４０】
データ復元部６１４は、記憶領域Ｂのデータを復元する。データ復元部６１４は、まず、第２データ記憶部１５２に最後に記録したパリティデータと、パリティデータによる復元に必要なユーザデータを取得する。
【０１４１】
より詳細には、データ復元部６１４は、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込みを第５アクセス制御部２０５に指示し、第３状態記憶部２５５が記憶する第２状態追加集合情報を取得する。データ復元部６１４は、第２データ記憶部１５２に最後に記録されたパリティデータの読み込みを、第２アクセス制御部１０２に指示し、第２データ記憶部１５２に最後に記録されたパリティデータを取得する。また、データ復元部６１４は、取得した第１状態集合情報が示す記憶領域の集合から、取得した第１状態追加集合情報が示す記憶領域の集合を除いた記憶領域の集合と、取得した第２状態追加集合情報が示す記憶領域の集合と、をあわせた記憶領域の集合から記憶領域Ｂの記憶領域を除いた記憶領域の集合の記憶領域それぞれに対し、それぞれの記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示し、それぞれの記憶領域が記憶するデータを取得する。
【０１４２】
次に、データ復元部６１４は、取得した第２データ記憶部１５２に最後に記録したパリティデータと、パリティデータによる復元に必要なユーザデータから、記憶領域Ｂのデータを復元する。
【０１４３】
より詳細には、データ復元部６１４は、取得した第２データ記憶部１５２に最後に記録したパリティデータと、取得したデータ群を、パリティ演算するようにパリティ演算部１３０に指示し、結果として復元された記憶領域Ｂのデータを取得する。
【０１４４】
データ復元部６１４は、記憶領域Ａのデータを復元する。データ復元部６１４は、まず、第１データ記憶部１５１に記録したパリティデータと、パリティデータによる復元に必要なユーザデータを取得する。なお、復元されたデータを記憶領域Ｂのデータとして取り扱う。
【０１４５】
より詳細には、データ復元部６１４は、第１データ記憶部１５１に記録されたパリティデータの読み込みを、第１アクセス制御部１０１に指示し、第１データ記憶部１５１に記録されたパリティデータを取得する。また、データ復元部６１４は、取得した第１状態集合情報が示す記憶領域の集合から、記憶領域Ａの記憶領域と、記憶領域Ｂの記憶領域を除いた記憶領域の集合の記憶領域それぞれに対し、それぞれの記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示し、それぞれの記憶領域が記憶するデータを取得する。
【０１４６】
次に、データ復元部６１４は、取得した第１データ記憶部１５１に記録したパリティデータと、パリティデータによる復元に必要なユーザデータから、記憶領域Ａのデータを復元する。
【０１４７】
より詳細には、データ復元部６１４は、取得したパリティデータと、取得したデータ群と、取得した復元された記憶領域Ｂのデータを、パリティ演算するようにパリティ演算部１３０に指示し、結果として復元された記憶領域Ａのデータを取得する。
【０１４８】
なお、上記手順はパリティ演算の最終的な結果が変わらない範囲で適宜入れ替えてもよい。たとえば、パリティ演算の途中の演算結果を別途記憶しておくことで、第２データ記憶部１５２からのデータ読み込み回数を削減するなどの最適化を図ることができる。
【０１４９】
データ復元部６１４は、図示しない復元依頼元に、復元した記憶領域Ａのデータと、復元した記憶領域Ｂのデータを返答する。
【０１５０】
このように、第２データ記憶部１５２に最後に記録したパリティデータをうまく利用することで、差分反復訂正により、同一パリティグループ中の２つのユーザデータを復元することができる場合があるため、データ記憶装置の信頼性をさらに向上することができる。
【０１５１】
次に、このように構成された第６の実施形態にかかるデータ記憶装置６００による処理について図２４を用いて説明する。記憶領域を第１状態に変更する処理の手順の一例と、記憶領域を第２状態に変更する処理の手順の一例と、パリティ書き込み処理の手順の一例は、第５の実施形態と同様なので、詳細な説明は省略する。図２４は、第６の実施形態における差分反復訂正処理の一例を示すフローチャートである。
【０１５２】
まず、データ復元部６１４は、差分反復訂正可能か判断する（ステップＳ１１０１）。すなわち、データ復元部６１４は、図示しない復元依頼元から、記憶しているデータを復元したい２つの記憶領域の識別情報が含まれる差分反復訂正依頼を受けると、２つの記憶領域のうち、１つの記憶領域（記憶領域Ａ）が、第１状態追加集合に含まれ、もう１つの記憶領域（記憶領域Ｂ）が、第１状態集合から第１状態追加集合を除いた記憶領域の集合に含まれているか否かを判定する。
【０１５３】
より詳細には、データ復元部６１４は、第１状態記憶部１５３が記憶する第１状態集合情報の読み込みを第３アクセス制御部１０３に指示する。第３アクセス制御部１０３は、第１状態記憶部１５３が記憶する第１状態集合情報を読み込み、データ復元部６１４に返答する。データ復元部６１４は、第１状態記憶部１５３が記憶する第１状態集合情報を取得する。データ復元部６１４は、第４状態記憶部３５６が記憶する第１状態追加集合情報の読み込みを第６アクセス制御部３０６に指示する。第６アクセス制御部３０６は、第４状態記憶部３５６が記憶する第１状態追加集合情報を読み込み、データ復元部６１４に返答する。データ復元部６１４は、第４状態記憶部３５６が記憶する第１状態追加集合情報を取得する。データ復元部６１４は、受け付けた差分反復訂正依頼に含まれる２つの記憶領域のうち、いずれか一方の記憶領域（記憶領域Ａ）が、取得した第１状態追加集合情報に対応する記憶領域の集合に含まれ、もう一方の記憶領域（記憶領域Ｂ）が、取得した第１状態集合情報が示す記憶領域の集合から、取得した第１状態追加集合情報が示す記憶領域の集合を除いた記憶領域の集合に含まれているかを判定する。
【０１５４】
判定結果が偽の時は（ステップＳ１１０１：Ｎｏ）、データ復元部６１４は、図示しない復元依頼元に、差分反復訂正不能を示す旨を返答し、処理を終える。判定結果が真の時は（ステップＳ１１０１：Ｙｅｓ）、データ復元部６１４は、第２データ記憶部１５２に最後に記録したパリティデータと、パリティデータによる復元に必要なユーザデータを取得する（ステップＳ１１０２）。より詳細には、データ復元部６１４は、第３状態記憶部２５５が記憶する第２状態追加集合情報の読み込みを第５アクセス制御部２０５に指示する。第５アクセス制御部２０５は、第３状態記憶部２５５が記憶する第２状態追加集合情報を読み込み、データ復元部６１４に返答する。データ復元部６１４は、第３状態記憶部２５５が記憶する第２状態追加集合情報を取得する。データ復元部６１４は、第２データ記憶部１５２に最後に記録されたパリティデータの読み込みを、第２アクセス制御部１０２に指示する。第２アクセス制御部１０２は、第２データ記憶部１５２に最後に記録されたパリティデータを読み込み、データ復元部６１４に返答する。データ復元部６１４は、第２データ記憶部１５２に最後に記録されたパリティデータを取得する。
【０１５５】
また、データ復元部６１４は、取得した第１状態集合情報が示す記憶領域の集合から、取得した第１状態追加集合情報が示す記憶領域の集合を除いた記憶領域の集合と、取得した第２状態追加集合情報が示す記憶領域の集合と、をあわせた記憶領域の集合から記憶領域Ｂの記憶領域を除いた記憶領域の集合の記憶領域それぞれに対し、それぞれの記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示する。第２アクセス制御部１０２は、指示されたそれぞれの記憶領域が記憶するデータを読み込み、データ復元部６１４に返答する。データ復元部６１４は、それぞれの記憶領域が記憶するデータを取得する。
【０１５６】
データ復元部６１４は、記憶領域Ｂのデータを復元する（ステップＳ１１０３）。より詳細には、データ復元部６１４は、取得した第２データ記憶部１５２に最後に記録したパリティデータと、取得したデータ群を、パリティ演算するようにパリティ演算部１３０に指示する。パリティ演算部１３０は、指示元から受け付けた複数の入力データをパリティ演算し、演算結果を指示元に返却する。データ復元部６１４は、結果として復元された記憶領域Ｂのデータを取得する。
【０１５７】
データ復元部６１４は、第１データ記憶部１５１に記録したパリティデータと、パリティデータによる復元に必要なユーザデータを取得する（ステップＳ１１０４）。より詳細には、データ復元部６１４は、第１データ記憶部１５１に記録されたパリティデータの読み込みを、第１アクセス制御部１０１に指示する。第１アクセス制御部１０１は、第１データ記憶部１５１に記録されたパリティデータを読み込み、データ復元部６１４に返答する。データ復元部６１４は、第１データ記憶部１５１に記録されたパリティデータを取得する。データ復元部６１４は、取得した第１状態集合情報が示す記憶領域の集合から、記憶領域Ａの記憶領域と、記憶領域Ｂの記憶領域を除いた記憶領域の集合の記憶領域それぞれに対し、それぞれの記憶領域が記憶するデータの読み込みを第２アクセス制御部１０２に指示する。第２アクセス制御部１０２は、指示されたそれぞれの記憶領域が記憶するデータを読み込み、データ復元部６１４に返答する。データ復元部６１４は、それぞれの記憶領域が記憶するデータを取得する。
【０１５８】
データ復元部６１４は、記憶領域Ａのデータを復元する（ステップＳ１１０５）。より詳細には、データ復元部６１４は、取得したパリティデータと、取得したデータ群と、取得した復元された記憶領域Ｂのデータを、パリティ演算するようにパリティ演算部１３０に指示する。パリティ演算部１３０は、指示元から受け付けた複数の入力データをパリティ演算し、演算結果を指示元に返却する。データ復元部６１４は、結果として復元された記憶領域Ａのデータを取得する。なお、ステップＳ１１０２からステップＳ１１０５までの手順はパリティ演算の最終的な結果が変わらない範囲で適宜入れ替えてもよい。ステップＳ１１０２からステップＳ１１０５までの手順を適宜入れ替えることで、たとえば、パリティ演算の途中の演算結果を別途記憶しておくことで、第２データ記憶部１５２からのデータ読み込み回数を削減するなどの最適化を図ることができる。
【０１５９】
データ復元部６１４は、図示しない復元依頼元に、復元した記憶領域Ａのデータと、復元した記憶領域Ｂのデータを返答する（ステップＳ１１０６）。
【０１６０】
このように、第６の実施形態にかかるデータ記憶装置では、第２データ記憶部１５２に最後に記録したパリティデータを利用することで、差分反復訂正により、同一パリティグループ中の２つのユーザデータを復元することができる。これにより、データ記憶装置の信頼性をさらに向上することができる。
【０１６１】
以上説明したとおり、第１から第６の実施形態によれば、データ記憶装置単体の信頼性を向上することができる。また、パリティデータ更新時には、第１データ記憶部に更新されたパリティデータを記憶し、所定のタイミングで第１データ記憶部に記憶されたパリティデータを第２データ記憶部に書き込む。これにより、ユーザデータの記憶媒体への書き込み量に比して、パリティデータの記憶媒体への書き込み量を削減できる。
【０１６２】
次に、第１から第６の実施形態にかかるコントローラのハードウェア構成について説明する。第１から第６の実施形態にかかるコントローラは、ＣＰＵ（Central  Processing  Unit）などの制御装置と、ＲＯＭ（Read  Only  Memory）やＲＡＭ（Random  Access  Memory）などの記憶装置と、各部を接続するバスを備えている。
【０１６３】
第１から第６の実施形態にかかるコントローラで実行されるプログラムは、ＲＯＭ等に予め組み込まれて提供される。
【０１６４】
第１から第６の実施形態にかかるコントローラで実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact  Disk  Recordable）、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
【０１６５】
さらに、第１から第６の実施形態にかかるコントローラで実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第１から第６の実施形態にかかるコントローラで実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【０１６６】
第１から第６の実施形態にかかるコントローラで実行されるプログラムは、コンピュータを上述した記憶装置の各部（パリティ更新部、パリティ書込部）として機能させうる。このコンピュータは、ＣＰＵがコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み込んで実行することができる。
【０１６７】
なお、本実施形態は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【０１６８】
１００、２００、３００、４００、５００、６００  データ記憶装置
１０１  第１アクセス制御部
１０２  第２アクセス制御部
１０３  第３アクセス制御部
１０４  第４アクセス制御部
１１０  コントローラ
１１１  パリティ更新部
１１２  パリティ書込部
１２０  状態更新部
１３０  パリティ演算部
１５１  第１データ記憶部
１５２  第２データ記憶部
１５３  第１状態記憶部
１５４  第２状態記憶部
２０５  第５アクセス制御部
２５５  第３状態記憶部
３０６  第６アクセス制御部
３５６  第４状態記憶部
５１３  パリティ復元部
６１４  データ復元部
【図１】
0005279785.tif 000002
【図２】
0005279785.tif 000003
【図３】
0005279785.tif 000004
【図４】
0005279785.tif 000005
【図５】
0005279785.tif 000006
【図６】
0005279785.tif 000007
【図７】
0005279785.tif 000008
【図８】
0005279785.tif 000009
【図９】
0005279785.tif 000010
【図１０】
0005279785.tif 000011
【図１１】
0005279785.tif 000012
【図１２】
0005279785.tif 000013
【図１３】
0005279785.tif 000014
【図１４】
0005279785.tif 000015
【図１５】
0005279785.tif 000016
【図１６】
0005279785.tif 000017
【図１７】
0005279785.tif 000018
【図１８】
0005279785.tif 000019
【図１９】
0005279785.tif 000020
【図２０】
0005279785.tif 000021
【図２１】
0005279785.tif 000022
【図２２】
0005279785.tif 000023
【図２３】
0005279785.tif 000024
【図２４】
0005279785.tif 000025