(57)【要約】【課題】データ損失の危険性を低減させ、半導体記憶装置全体の書き込み処理の速度等の性能の低下を低減させる、半導体記憶装置及び半導体記憶装置制御方法を提供すること。【解決手段】ホスト装置から、書き込み要求を受け付ける受付部と、冗長データ生成有無情報を保持する記録部と、データを半導体記憶素子群に書き込み、書き込んだデータの冗長データ生成有無情報を記録部に書き込む書き込み部と、半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出する第１のデータ抽出部と、冗長データを生成する第１の冗長データ生成部と、生成した冗長データを半導体記憶素子群に書き込む第１の冗長データ書き込み部と、さらに、記録部が保持する冗長データが生成されたデータの冗長データ生成有無情報を更新する第１の冗長データ生成有無情報更新部と、を有することを特徴とする。【選択図】図２
2010204770.tif 000002
【特許請求の範囲】
【請求項１】
ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、
前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、
前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、
前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出する第１のデータ抽出部と、
抽出された前記データに基づいて冗長データを生成する第１の冗長データ生成部と、
生成した前記冗長データを半導体記憶素子群に書き込む第１の冗長データ書き込み部と、さらに、前記記録部が保持する前記冗長データが生成されたデータの冗長データ生成有無情報を更新する第１の冗長データ生成有無情報更新部と、
を有することを特徴とする半導体記憶装置。
【請求項２】
前記論理アドレス情報と、前記半導体記憶素子群に記録されたデータの物理的なアドレスの情報である物理アドレス情報とを対応付けた情報であるアドレス対応付け情報を保持する第１の記録部をさらに有し、
前記書き込み部は、さらに、前記半導体記憶素子群に書き込んだデータのアドレス対応付け情報を第１の記録部に書き込むことを特徴とする請求項１の半導体記憶装置。
【請求項３】
前記受付部は、さらに、ホスト装置から、前記論理アドレス情報を含む読み込み要求を受け付け、
前記論理アドレス情報に対応づけられる前記物理アドレス情報を用いて、半導体記憶素子群からデータを読み出し、読み出した前記データ、又は、前記読み込み要求に読み出した前記データを書き込む場所を表す情報が含まれる場合の、前記データが前記書き込む場所に書き込まれる処理が終了したことを表す情報を含む情報である読み込み回答をホスト装置に送付する読み込み部を有することを特徴とする請求項２記載の半導体記憶装置。
【請求項４】
物理アドレス情報である前記半導体記憶素子群のブロックの識別情報と、前記半導体記憶素子群のブロックが保持するデータの種別の情報であるブロック状態情報と、を対応づけて管理するブロック制御部と、
データを保持するブロックの識別情報と、該ブロックの保持するデータから生成される冗長データを保持するブロックの識別情報とを対応付けたパリティ対応情報を含む、前記冗長データ生成有無情報を管理するパリティ制御部と、
を有し、
前記第１のデータ抽出部は、前記パリティ対応情報に基づいて、前記ブロック状態情報が、前記アドレス対応付け情報において該ブロックの識別情報が論理アドレス情報に対応付けられているアドレス割当状態であるブロックのうち、冗長データを保持しているブロックである一以上のパリティ割当状態のブロックと、該パリティ割当状態のブロックに保持されている冗長データの生成の基となったデータを保持している、一以上のブロックによって構成されるパリティグループに含まれないブロックを抽出し、
前記第１の冗長データ生成部は、前記抽出したブロックが保持するデータから、所定の方法に基づき、一以上の冗長データを生成し、
前記第１の冗長データ書き込み部は、前記生成した冗長データを、前記ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させ、
前記第１の冗長データ生成有無情報更新部は、パリティグループを、前記抽出したブロックと前記パリティ割当状態のブロックから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させ、
前記書き込み部は、さらに、前記書き込み要求に含まれるデータまたは書き込むデータが格納されている場所の情報に基づいて取得したデータを、ブロック状態情報に基づいて、未割当状態のブロックに書き込み、前記データを書き込んだブロックのブロック状態情報をアドレス割当状態に変更させ、前記アドレス対応付け情報における、書き込んだ前記ブロックの物理アドレス情報に前記書き込み要求に含まれる論理アドレス情報を対応づけさせ、前記書き込み要求に含まれる論理アドレスに書き込み処理の前に対応づけられていた物理アドレスのブロックのブロック状態情報を未割当状態とさせ、該ブロックが、パリティグループに含まれる場合は、前記パリティ対応情報における該パリティグループの情報を削除させ、前記削除したパリティグループに含まれる、パリティ割当ブロックのブロック状態情報を未割当状態とさせることを特徴とする請求項３記載の半導体記憶装置。
【請求項５】
前記第１のデータ抽出部および前記第１の冗長データ生成有無情報更新部は、新たにパリティグループを構成するアドレス割当状態のブロックを、所定の並び順に従い選択することを特徴とする請求項４記載の半導体記憶装置。
【請求項６】
前記所定の並び順は、ブロック及び／又は論理アドレス情報毎に保持されるデータが書き込まれた時刻の順、ブロック及び／又は論理アドレス情報毎に保持されるデータが書き込まれた回数の順、または、前記時刻の順の情報と前記回数の順の情報から所定の評価関数に基づいて得られた評価値の順であることを特徴とする請求項５記載の半導体記憶装置。
【請求項７】
物理アドレス情報である前記半導体記憶素子群のブロックの識別情報と、前記半導体記憶素子群のブロックが保持するデータの情報であるブロック状態情報と、を対応づけて管理するブロック制御部と、
データを保持するブロックの識別情報と、該ブロックが保持するデータから生成される冗長データを保持するブロックの識別情報とを対応付けたパリティ対応情報を含む、前記冗長データ生成有無情報を管理するパリティ制御部と、
を有し、
前記書き込み部は、さらに、前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを、ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、書き込んだ前記ブロックのブロック状態情報を、前記アドレス対応付け情報において該ブロックの識別情報が論理アドレス情報に対応付けられているアドレス割当状態に変更させ、前記アドレス対応付け情報における、書き込んだ前記ブロックの物理アドレス情報に前記書き込み要求に含まれる論理アドレス情報を対応づけさせ、前記書き込み要求に含まれる論理アドレスに書き込み処理の前に対応づけられていた物理アドレスのブロックが、前記パリティグループに含まれる場合は、該ブロックのブロック状態情報を、有効ではないデータを保持する更新前割当状態とさせ、前記書き込み要求に含まれる論理アドレスに書き込み処理の前に対応づけられていた物理アドレスのブロックが前記パリティグループに含まれていない場合は、該ブロックのブロック状態情報を，データを保持しないブロックである未割当状態に変更し、
ブロック状態情報が、更新前割当状態であるブロックを含むパリティグループの情報を前記パリティ対応情報から削除し、前記削除したパリティグループに含まれる、更新前割当状態のブロックとパリティ割当状態のブロックのブロック状態情報を、未割当状態に変更する第３の削除部と、
前記削除したパリティグループに含まれる、アドレス割当状態のブロックを抽出する第３のデータ抽出部と、
前記抽出したブロックから、一以上の冗長データを生成する第３の冗長データ生成部と、
前記生成した冗長データを、ブロック状態情報に基づいて、未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させる第３の冗長データ書き込み部と、
前記抽出したブロックと前記パリティ割当状態のブロックからパリティグループを新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させる第３の冗長データ生成有無情報と、
を有することを特徴とする請求項３記載の半導体記憶装置。
【請求項８】
前記更新前ブロック回収部は、ブロック状態情報を未割当状態に変更させる更新前割当状態のブロック、及び／又は、新たにパリティグループに含ませるアドレス割当状態のブロックを、所定の並び順に従い選択することを特徴とする請求項７記載の半導体記憶装置。
【請求項９】
前記所定の並び順は、ブロック及び／又は論理アドレス情報毎に保持されるデータが書き込まれた時刻の順、または、ブロック及び／又は論理アドレス情報毎に保持されるデータが書き込まれた回数の順、または前記時刻の順の情報と前記回数の順の情報から所定の評価関数に基づいて得られた評価値の順であることを特徴とする請求項８記載の半導体記憶装置。
【請求項１０】
ブロック状態情報がパリティ割当状態のブロックの数を変更する、ブロック数変更部を有することを特徴とする請求項４ないし９何れか一項に記載の半導体記憶装置。
【請求項１１】
前記ブロック数変更部は、
所定の方法に基づいて抽出した、パリティグループの情報を前記パリティ対応情報から削除し、前記削除したパリティグループに含まれる、更新前割当状態のブロックとパリティ割当状態のブロックのブロック状態情報を、未割当状態に変更する第２の削除部と、
前記削除したパリティグループに含まれる、またはいずれのパリティグループにも含まれないアドレス割当状態のブロックを抽出する第２のデータ抽出部と、
前記抽出したブロックから、一以上の冗長データを生成する第２の冗長データ生成部と、
前記生成した冗長データを、ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させる第２の冗長データ書き込み部と、
パリティグループを前記抽出したブロックと前記パリティ割当状態のブロックから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させる、第２の冗長データ生成有無情報更新部と、
を有し、
前記第２の冗長データ生成部および前記第２の冗長データ生成有無情報更新部は、前記パリティグループが有する、該パリティ割当状態のブロックに保持されている冗長データの生成の基となったデータを保持しているブロックの数を変更し、及び／又は、異なる数のパリティ割当状態のブロックが対応づけられる複数の冗長データの生成方法から一の冗長データ生成方法を選択することを特徴とする請求項１０記載の半導体記憶装置。
【請求項１２】
前記ブロック数変更部は、前記パリティグループが生成される時、又は、前記パリティグループの情報が前記パリティ対応情報から削除される時、に同期して、前記ブロック状態情報がパリティ割当状態のブロックの数を変更することを特徴とする請求項１０又は１１記載の半導体記憶装置。
【請求項１３】
前記パリティ対応情報に基づいて、ブロック状態情報がアドレス割当状態であるブロックのうち、所定の時間を超えて、パリティグループに含まれていないブロックを抽出する第４のデータ抽出部と、
前記抽出したブロックから、一以上の冗長データを生成する第４の冗長データ生成部と、
前記生成した冗長データを、ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させる第４の冗長データ書き込み部と、
パリティグループを前記抽出したブロックと前記パリティ割当状態のブロックから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させる第４の冗長データ生成有無情報更新部と、
を有することを特徴とする請求項４ないし１２何れか一項記載の半導体記憶装置。
【請求項１４】
前記第１ないし第４の冗長データ生成部が生成した冗長データを記憶する、一時記憶部と、
を有し、
前記第１ないし第４の冗長データ書き込み部は、さらに、前記一時記憶部に記憶されている冗長データを、ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させ、
前記第１ないし第４の冗長データ生成有無情報更新部は、さらに、パリティグループを前記抽出したブロックと一時記憶部に記憶されている冗長データから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させ、また、前記登録したパリティグループの情報を前記パリティ対応情報から削除し、パリティグループを前記抽出したブロックと前記パリティ割当状態のブロックから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させることを特徴とする請求項４ないし１３何れか一項記載の半導体記憶装置。
【請求項１５】
前記冗長データを生成する際に用いるデータを保持する、冗長データ生成元データ保持部を有し、
前記書き込み部は、さらに、前記冗長データ生成有無情報に基づいて、前記冗長データが、前記書き込み要求に含まれる論理アドレス情報に対応付けられていた、物理アドレス情報である前記半導体記憶素子群のブロックの識別情報が示す、ブロックが保持しているデータを復元するための情報を含む場合には、該冗長データを生成する際に用いるデータを、前記冗長データ生成元データ保持部に保持させ、
前記第１ないし第４の冗長データ生成部は、さらに、前記冗長データを生成する際に、前記冗長データ生成元データ保持部が保持するデータを用いて、前記冗長データを生成することを特徴とする請求項１４記載の半導体記憶装置。
【請求項１６】
前記パリティ対応情報に基づいて、パリティグループに含まれるブロックを、該ブロックが保持するデータの復元が可能であると判断する、復元可否判断部と、
前記パリティ対応情報に基づいて、一のブロックが保持するデータを、該ブロックが含まれるパリティグループに含まれるブロックが保持するデータから復元する復元部と、
を有し、
前記読み込み部は、さらに、前記半導体記憶素子群から読み出したデータに少なくとも誤りが検出された場合に、前記復元可否判断部によって該ブロックが保持するデータの復元が可能であると判断されたとき、前記復元部に該ブロックが保持するデータを復元させ、復元された前記データの前記読み込み回答をホスト装置に送付することを特徴とする請求項３ないし１５何れか一項に記載の半導体記憶装置。
【請求項１７】
前記半導体記憶素子群のブロックのうち、ブロック状態情報が未割当状態ではないブロックに記録されているデータを、前記読み込み要求に関わり無く読み込む際に、前記半導体記憶素子群から読み出したデータに少なくとも誤りが検出された場合に、
前記復元可否判断部が、前記ブロックに記憶されているデータが復元可能と判断するとき、前記復元部に、前記ブロックに記憶されているデータを復元させ、復元された前記データを前記半導体記憶素子群に書き出し、前記冗長データ生成有無情報、及び／又は、前記アドレス対応付け情報、及び／又は、前記ブロック状態情報を更新する、読み込みパトロール部を有することを特徴とする請求項１６記載の半導体記憶装置。
【請求項１８】
前記半導体記憶素子群の複数のブロックが保持するデータを、互いに他のブロックに入れ替えて書き込み、前記冗長データ生成有無情報、及び／又は、前記アドレス対応付け情報、及び／又は、前記ブロック状態情報を更新する、動的更新部を有することを特徴とする請求項３ないし１７何れか一項に記載の半導体記憶装置。
【請求項１９】
前記動的更新部は、ブロック状態情報が未割当状態のブロックが保持するデータを入れ替えて書き込む処理を行わないことを特徴とする請求項１８記載の半導体記憶装置。
【請求項２０】
ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、
前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、
前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、
前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出し、抽出された前記データに基づいて冗長データを生成し、生成した前記冗長データを半導体記憶素子群に書き込み、
さらに、前記記録部が保持する前記冗長データが生成されたデータの冗長データ生成有無情報を更新する、冗長データ生成書き込み部と、
前記記録部が保持する冗長データ生成有無情報により、冗長データを保持する半導体記憶素子群の数を変更し、前記冗長データ生成有無情報を更新する、ブロック数変更部と、
を有することを特徴とする半導体記憶装置。
【請求項２１】
ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、
前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、
前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、
前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出し、抽出された前記データに基づいて冗長データを生成し、さらに、前記冗長データが生成されたデータの冗長データ生成有無情報を更新する、冗長データ生成部と、
生成した前記冗長データを記憶する、一時記憶部と、
生成した前記冗長データを前記一時記憶部に記憶させ、前記冗長データ生成有無情報を更新させる、冗長データ生成有無情報更新部と、
前記冗長データ生成有無情報に基づいて、前記一時記憶部に記憶されている冗長データを、前記半導体記憶素子群に書き込み、さらに、前記冗長データ生成有無情報を更新する、冗長データ書き出し部と、
を有することを特徴とする半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体記憶装置に関する。
【背景技術】
【０００２】
近年、不揮発性半導体メモリは、コンピュータ、携帯電話、家電製品等、さまざまなところで利用されており、普及が著しい。特に、ＮＡＮＤ型フラッシュメモリは、電気的に書き換えが可能であり、大容量化、高集積化が可能な不揮発性半導体メモリである。
【０００３】
また、最近では、ハードディスクドライブ（ＨＤＤ）と同じ接続インタフェース規格、（例えば、ＡＴＡ規格等）を持つＮＡＮＤ型フラッシュメモリが開発されており、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）と呼ばれている。ＳＳＤは、ＨＤＤに比べてデータの読み込み性能に優れ、さらに、低消費電力及び耐衝撃性が期待できる。
【０００４】
不揮発性半導体メモリにデータを記憶させる手法としては、例えば、ブロックと呼ばれる単位で一度データを消去してから書き込みを行うもの、ページと呼ばれる単位でデータの読み出しや書き込みを行うもの、これらの消去、読み出し、書き込みの単位が固定されているものがある。
【０００５】
また、ＮＡＮＤ型フラッシュメモリの寿命は、消去して書き込む回数に依存しているといわれている。したがって、ＮＡＮＤ型フラッシュメモリにおいては、特定のブロックのみにデータの書き込み、消去が集中すると、そのブロックだけ早く寿命を迎えてしまう。そこで、例えば、各ブロックの消去回数の平準化処理を行い、寿命を延ばす試みがなされている。平準化処理は、ウェアレベリングと呼ばれる。
【０００６】
一方、サーバ環境で使用されるディスクアレイなどのストレージステムでは、信頼性を向上させるために、非特許文献１に示すような複数の記憶装置を接続したＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ／Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）を構成することがある。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】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.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、ＮＡＮＤ型フラッシュメモリにおいては、大容量化や高集積化により、データの記録の際に保存したデータの値と、データの読み込みの際に読み出したデータの値が異なってしまい、記憶したデータを正しく再生できなくなる場合がある。そこで、ＲＡＩＤのように、記録データすべてに対して冗長性を維持しようとした場合、データの更新のたびに冗長情報、すなわち、パリティデータを更新する必要が生じる。
【０００９】
半導体記憶素子の中には、データの読み出し時間に比べて、データの消去及び書き込み時間がかなり長いものもある。この場合、データの更新のたびにパリティデータを更新すると、半導体記憶装置全体の書き込み処理の速度等の性能が低下する。また、パリティデータの更新、つまりブロックの消去と書き込みの増加に伴い、寿命が短くなる。
【００１０】
本発明は、上記の点に鑑みて、これらの問題を解消するために発明されたものであり、データ損失の危険性を低減させ、半導体記憶装置全体の書き込み処理の速度等の性能の低下を低減させ、寿命の減少を低減させる、半導体記憶装置を提供することを目的としている。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明の半導体記憶装置は次の如き構成を採用した。
【００１２】
本発明の半導体記憶装置は、ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出する第１のデータ抽出部と、抽出された前記データに基づいて冗長データを生成する第１の冗長データ生成部と、生成した前記冗長データを半導体記憶素子群に書き込む第１の冗長データ書き込み部と、さらに、前記記録部が保持する前記冗長データが生成されたデータの冗長データ生成有無情報を更新する第１の冗長データ生成有無情報更新部と、を有することを特徴とする。
【００１３】
本発明の半導体記憶装置は、また、ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出し、抽出された前記データに基づいて冗長データを生成し、生成した前記冗長データを半導体記憶素子群に書き込み、さらに、前記記録部が保持する前記冗長データが生成されたデータの冗長データ生成有無情報を更新する、冗長データ生成書き込み部と、前記記録部が保持する冗長データ生成有無情報により、冗長データを保持する半導体記憶素子群の数を変更し、前記冗長データ生成有無情報を更新する、ブロック数変更部と、を有することを特徴とする。
【００１４】
本発明の半導体記憶装置は、また、ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出し、抽出された前記データに基づいて冗長データを生成し、さらに、前記冗長データが生成されたデータの冗長データ生成有無情報を更新する、冗長データ生成部と、生成した前記冗長データを記憶する、一時記憶部と、生成した前記冗長データを前記一時記憶部に記憶させ、前記冗長データ生成有無情報を更新させる、冗長データ生成有無情報更新部と、前記冗長データ生成有無情報に基づいて、前記一時記憶部に記憶されている冗長データを、前記半導体記憶素子群に書き込み、さらに、前記冗長データ生成有無情報を更新する、冗長データ書き出し部と、を有することを特徴とする。
【発明の効果】
【００１５】
本発明の半導体記憶装置によれば、データ損失の危険性を低減させ、半導体記憶装置全体の書き込み処理の速度等の性能の低下を低減させ、寿命の減少を低減させる、半導体記憶装置を提供することができる。
【図面の簡単な説明】
【００１６】
【図１】半導体記憶装置１の機能構成の概略を示す図である。
【図２】半導体記憶装置１が有するコントローラ２００の機能構成の例を示す図である。
【図３】半導体記憶装置１が有するコントローラ２００ａの機能構成の例を示す図である。
【図４−１】並び順情報管理部２７０の構成の例を説明する図である。
【図４−２】並び順情報管理部２７０ｄの構成の例を説明する図である。
【図５】ブロック制御部２１０の機能を説明する図である。
【図６】誤り訂正制御部２６０の機能構成を説明する図である。
【図７】パリティ制御部２３０の機能構成の例を説明する図である。
【図８】第２の実施の形態における書き込み処理を説明するフロー図である。
【図９】第２の実施の形態における書き込み処理の前の各テーブル等の状態を説明する図である。
【図１０】第２の実施の形態における書き込み処理の後の各テーブル等の状態を説明する図である。
【図１１】読み込み処理を説明するフロー図である。
【図１２】パリティ生成処理を説明する図である。
【図１３】並び順がアドレス領域毎のデータ更新順序の場合のアドレステーブル１１等の例を説明する図である。
【図１４−１】静的な情報に従ってパリティグループを構成する場合のアドレステーブル１１等の例を説明する図（その１−１）である。
【図１４−２】静的な情報に従ってパリティグループを構成する場合のアドレステーブル１１等の例を説明する図（その１−２）である。
【図１５】静的な情報に従ってパリティグループを構成する場合のアドレステーブル１１等の例を説明する図（その２）である。
【図１６−１】静的な情報に従ってパリティグループを構成する場合のアドレステーブル１１等の例を説明する図（その３−１）である。
【図１６−２】静的な情報に従ってパリティグループを構成する場合のアドレステーブル１１等の例を説明する図（その３−２）である。
【図１７】読み込みパトロール処理を説明する図である。
【図１８】半導体記憶装置１が有するコントローラ２００ｂの機能構成の例を示す図である。
【図１９】半導体記憶装置１が有するコントローラ２００ｃの機能構成の例を示す図である。
【図２０】ブロック数を変更する処理を説明するフロー図である。
【図２１】半導体記憶装置１が有するコントローラ２００ｄの機能構成の例を説明する図である。
【図２２】第５の実施の形態における書き込み処理を説明するフロー図である。
【図２３】第５の実施の形態における書き込み処理の前の各テーブル等の状態を説明する図である。
【図２４】第５の実施の形態における書き込み処理の途中の各テーブル等の状態を説明する図である。
【図２５】第５の実施の形態における書き込み処理の後の各テーブル等の状態を説明する図である。
【図２６】更新前ブロック回収部２４２が未割当ブロックを回収する処理を説明するフロー図である。
【図２７】更新前ブロック回収処理の後の各テーブル等の状態を説明する図である。
【図２８】ブロック数が異なるパリティグループを新たに生成する処理を説明するフロー図である。
【図２９】異なるブロック数により生成される新たなパリティグループを説明する図（その１）である。
【図３０】異なるブロック数により生成される新たなパリティグループを説明する図（その２）である。
【図３１】異なるブロック数により生成される新たなパリティグループを説明する図（その３）である。
【図３２】パリティグループを構成するブロック数を動的に変化させてパリティグループを生成する処理を説明するフロー図である。
【図３３】更新前ブロックが増えた際に、新たなパリティグループを生成する際の各テーブル等の状態を説明する図である。
【図３４】パリティグループを構成するブロックの数を変更させる書き込み処理を説明するフロー図である。
【図３５】所定の時間、パリティグループに含まれないアドレス割当ブロックに対する処理を説明するフロー図である。
【図３６】パリティグループを説明する図である。
【図３７】更新前ブロックの並び順と、パリティグループの生成の例を示す図（その１）である。
【図３８】更新前ブロックの並び順と、パリティグループの生成の例を示す図（その２）である。
【図３９】更新前ブロックの並び順と、パリティグループの生成の例を示す図（その３）である。
【図４０】パリティグループの数を減じる例を説明する図である。
【図４１】半導体記憶素子群９上のブロックに格納されるデータと、キャッシュメモリ２９３上に格納されるパリティデータとの例を説明する図である。
【図４２】第２の実施の形態における書き込み処理の詳細を説明するフロー図である。
【図４３】パリティデータをキャッシュメモリ２９３に格納する処理を説明するフロー図である。
【図４４】パリティデータをキャッシュメモリ２９３から半導体記憶素子群９に移す処理を説明するフロー図である。
【図４５】パリティデータを更新する際の演算を説明する図である。
【発明を実施するための形態】
【００１７】
以下、本実施の形態を図面に基づき説明する。
【００１８】
〔本実施の形態〕
サーバ環境で使用されるＲＡＩＤ構成では、ある特定の記憶装置が故障してデータの読み込みが出来なくなった場合でも、故障した記憶装置に保存していたデータを、その他の記憶装置に保存していたデータから復元することができる。このようなＲＡＩＤ機能を実装するディスクアレイ装置では、耐障害性の向上、また、単体の記憶装置の提供する記憶容量に比してディスクアレイ装置の提供する記憶容量の大容量化を実現している。以下の実施の形態では、フラッシュメモリ等の半導体記憶素子からなるブロックにより、ＲＡＩＤのような冗長構成を実現する例について説明する。
【００１９】
なお、半導体記憶素子からなる「ブロック」とは、半導体記憶素子群にデータが記録される際の所定の単位である。以下の実施の形態では、データの記録単位と消去の単位とを同一にしている。しかし、データの記録単位は、消去の単位と同一でなくてもよく、適切な単位としても良い。また、図中の「半導体記憶素子」は、本文中の「半導体記憶素子群」に対応する。
【００２０】
また、以下の実施の形態では、主としてウェアレベリング（平準化処理）により、半導体記憶素子群が有するブロックへのデータの書き込み及び消去を行う例について説明する。本発明は、ウェアレベリングによる例に限らず、半導体記憶素子群が有するブロックへのデータの書き込み及び消去を行う際に適用することができる。
【００２１】
（全体ブロック図）
図１は、実施の形態に係る半導体記憶装置１の機能構成の概略を示す図である。半導体記憶装置１は、コントローラ２００と半導体記憶素子群９とを有する。コントローラ２００は、図示しないホスト装置からの書き込み要求、読み込み要求等のコマンドを受け付ける。コントローラ２００は、半導体記憶素子群９に対し、受け付けた要求に応じて所定の処理を実行する。半導体記憶素子群９は、データを記録し、再生する。半導体記憶素子群９は、複数のブロックを有する。各ブロックは複数の半導体記憶素子を有する。
【００２２】
〔第１の実施の形態〕
図２は、本実施形態に係る半導体記憶装置の機能構成を示す図である。本実施形態に係る半導体記憶装置は、ホスト装置に接続されたコントローラ２００、及び、半導体記憶素子群９を有する。コントローラ２００は、受付部２９、第1の記録部２８ａ、第2の記録部２８ｂ、第1の書込み部２２ａ、第2の書き込み部２２ｂ、及び、読み込み部２１を有する。
【００２３】
受付部２９は、ホスト装置から書き込み要求を受け付ける。この書き込み要求は、ホスト装置が認識できる論理的なアドレス情報である論理アドレス情報、及び、書き込むべきデータを特定する情報である書き込みデータ特定情報を含む。論理アドレス情報は、ホスト装置が書き込みを要求するアドレスの範囲であるアドレス領域の情報を含む情報である。書き込みデータ特定情報とは、書き込むべきデータそのものや、書き込むべきデータが格納されている記憶場所の情報を含む情報である。
【００２４】
受付部２０は、また、ホスト装置から読み込み要求を受け付ける。この読み込み要求は、ホスト装置が認識できる論理的なアドレス情報である論理アドレス情報を含む。論理アドレス情報は少なくともホスト装置が読み込みを要求するアドレスの範囲であるアドレス領域を含む。また、読み込み要求には、読み込んだデータを格納（書き込み）する場所を表す格納場所情報が含まれても良い。
【００２５】
第１の記録部２８ａは、物理アドレス情報と論理アドレス情報とを対応付けた情報であるアドレス対応付け情報を記録する。物理アドレス情報は半導体記憶素子群９に記録されたデータの物理的なアドレスの情報である。
【００２６】
第２の記録部２８ｂは、半導体記憶素子群９に記憶されたデータに基づいて冗長情報（パリティ）が生成されているか否かを表す情報であるパリティ生成有無情報を記録する。
【００２７】
第1の書き込み部２２ａは、受付部２９で受け付けたデータを半導体記憶素子群９に書き込む。第１の書き込み部２２ａは、また、書き込んだデータのアドレス対応付け情報を第1の記録部２８ａに書き込む。第１の書き込み部２２ａは、また、半導体記憶素子群９に書き込んだデータに関するパリティ生成有無情報を第２の記録部２８ｂに書き込む。
【００２８】
第２の書き込み部２２ｂは、第２の記録部２８ｂに記録されたパリティ生成有無情報を用いて、パリティの生成の基礎となっていないデータを抽出する。第２の書き込み部２２ｂは、抽出されたデータに基づいてパリティを生成する。第２の書き込み部２２ｂは、生成したパリティを半導体記憶素子群に書き込む。第２の書き込み部２２ｂは、また、パリティの生成の基礎となったデータについて、第２の記録部２８ｂに記録されたパリティ生成有無情報を更新する。
【００２９】
読み込み部２１は、受付部２９で受け付けた読み込み要求に含まれる読み込み対象のデータの論理アドレス情報を抽出し、抽出した論理アドレス情報を用いて第１の記録部２８ａから物理アドレス情報を抽出する。そして、抽出した物理アドレス情報を用いて、半導体記憶素子群９から読み込み対象のデータを読み出し、受付部２９を介してホスト装置に読み込み回答を送付する。ここで、読み込み回答とは、読み込んだデータそのものや、読み込んだデータが格納場所情報で特定される場所に格納が完了した旨の情報を含む情報である。
【００３０】
〔第２の実施の形態〕
本実施の形態における半導体記憶装置の詳細な説明に先んじて、ウェアレベリングについて説明する。ウェアレベリングとは、半導体記憶素子からなるブロックに対するデータの消去の回数を、ブロック間において平準化、すなわちなるべく同数にさせる処理である。
【００３１】
実施の形態において、半導体記憶素子群９が有するブロックは、少なくとも以下の３つの状態の何れか１つであることを表すブロック状態の情報と対応づけられる。
（Ａ１）後に説明するアドレステーブル１１にブロック番号が設定されている（以下、この状態を「アドレス割当状態」という）。
（Ａ２）冗長情報、すなわちパリティデータを保持するブロックとして使用されている(以下、この状態を「パリティ割当状態」という)。
（Ａ３）上記（Ａ１）及び（Ａ２）の何れの状態でもなく、未使用状態である(以下、この状態を「未割当状態」という)。
ここで、ブロック番号とはブロックの識別情報である。
【００３２】
なお、「アドレス割当状態のブロック」を「アドレス割当ブロック」といい、「パリティ割当状態のブロック」を「パリティ割当ブロック」といい、「未割当状態のブロック」を「未割当ブロック」という。また、「アドレス割当ブロック」のうち、書き込み処理により「未割当ブロック」になるブロックの、書き込み処理前の状態を「更新前ブロック」ともいう。
【００３３】
（コントローラブロック図）
図３は、図１の半導体記憶装置１が有するコントローラ２００の図２とは異なる形態であるコントローラ２００ａの機能構成を示す図である。図３のコントローラ２００ａは、書き込み処理部２２０、読み込み処理部２２１、その他のコマンド処理部２２３、誤り訂正制御部２６０、パリティ制御部２３０、復元可否判断部２５０、パリティ生成パトロール部２４０、読み込みパトロール部２４１、ブロック制御部２１０、並び順情報管理部２７０、キャッシュメモリ２９３、ホストインタフェース部２９１、及び、半導体記憶素子インタフェース部２９２を有する。
【００３４】
なお、以下の実施の形態の説明におけるコントローラのブロック図を含めて、ブロック図中の各部を結ぶ線は、各部間の処理等の関係を示す。但し、線で結ばれない各部間の処理については、図示しない関係を含んでもよい。
【００３５】
書き込み処理部２２０は、書き込み要求をホスト装置からホストインタフェース部２９１を介して受け付ける。書き込み要求には、少なくともホスト装置が書き込みを要求するアドレスの範囲であるアドレス領域、書き込むべきデータを特定する情報である書き込みデータ特定情報を含む。書き込みデータ特定情報とは、書き込むべきデータそのものや、書き込むべきデータが格納されている記憶場所の情報を含む情報である。
【００３６】
パリティ制御部２３０の詳細は後述するが、パリティ生成部３１、復元部３２、付け替え部３３、パリティ対応リスト管理部３４、パリティ対応リスト３９を有する。
【００３７】
誤り訂正制御部２６０の詳細は後述するが、誤り検出・訂正情報管理部６１、誤り検出情報生成部６２、誤り検出部６３、誤り訂正情報生成部６４、及び、誤り訂正部６５を有する。
【００３８】
書き込み処理部２２０は、書き込むべきデータから誤り訂正制御部２６０の誤り検出情報生成部６２に誤り検出情報を生成することを要求し、要求に対応して誤り検出情報生成部６２で生成された誤り検出情報を受け取る。書き込み処理部２２０は、また、書き込むべきデータから誤り訂正情報生成部６４に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正情報生成部６４で生成された誤り訂正情報を受け取る。
【００３９】
書き込み処理部２２０は、後述するブロック制御部２１０に書き込み先となるブロックを問い合わせる（つまり、未割当ブロックの取り出しを要求する）。
【００４０】
書き込み処理部２２０は、ブロック制御部２１０から書き込み先ブロックのブロック番号を受け付けると、半導体記憶素子インタフェース部２９２を介して半導体記憶素子群９のブロック番号に対応するブロックのデータを消去し、書き込み要求されたデータと誤り検出情報と誤り訂正情報を書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
【００４１】
ここで、平準化処理とは、各ブロックの残り寿命を平準化する処理をいうが、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部２１０に当該ブロックの平準化情報の更新の要求を行う。
【００４２】
後段でも詳述するが、ブロック制御部２１０は、アドレス領域とブロック番号とを対応付けた情報であるアドレステーブル１１を記憶および管理している。アドレス領域とはホスト装置から送られてくる論理的なアドレスの範囲（領域）の情報をいう。ブロック番号は１つのブロックの番号がアドレス領域と対応付けられている場合もあれば、複数のブロックの番号がアドレス領域と対応付けられている場合もある。このアドレス領域とブロック番号との対応付けは必要に応じて変化する。また、アドレス領域とブロック番号との対応付けを「マッピング」という。
【００４３】
書き込み処理部２２０は、書き込み要求に含まれるアドレス領域のマッピングを、上記処理により書き込み要求されたデータを書き込んだブロックに変更する。より詳細には、書き込み処理部２２０は、書き込み要求に含まれるアドレス領域に対応付けられていたブロック（更新前ブロック）のブロック番号を、ブロック制御部２１０に問い合わせ、書き込み要求に含まれるアドレス領域に対応付けられていた更新前ブロックのブロック番号の削除要求をブロック制御部２１０に行う。また、上記処理により書き込み要求されたデータを書き込んだブロックのブロック番号を、書き込み要求に含まれるアドレス領域に対応付ける要求をブロック制御部２１０に行う。
【００４４】
また、書き込み処理部２２０は、上記更新前ブロックのブロック状態を未割当状態に設定する要求をブロック制御部２１０に行い、結果として上記更新前ブロックを未割り当てブロックとして回収し、また、書き込み処理部２２０は、上記処理により書き込み要求されたデータを書き込んだブロックのブロック状態をアドレス割当状態に設定する要求をブロック制御部に行う。
【００４５】
アドレステーブル１１が更新されたことに伴い、書き込み処理部２２０は、並び順情報管理部２７０にアドレス領域情報テーブルの中で、更新されたアドレス領域について更新を要求する通知であるアドレス領域の更新通知を送る。更新通知に含まれる情報としては、各アドレス領域が更新された旨の情報や各アドレス領域が更新された時期の情報がある。これらの情報が並び順情報管理部２７０に送られると、並び順情報管理部２７０が管理する情報として必要な各アドレス領域が更新された回数や更新された順序に加工する。書き込み処理部２２０は、さらに、書き込み要求の対象となるアドレス領域に、書き込み要求を受け付ける直前に対応付けられていたブロックがパリティグループを構成しているかをパリティ制御部２３０に問い合わせる。書き込み処理部２２０は、パリティ制御部２３０からパリティグループを構成していた旨の回答を得た場合は、そのパリティグループを解体する。
【００４６】
より詳細には、書き込み処理部２２０は、当該パリティグループを構成しているパリティブロック群のブロック状態を未割り当て状態に設定する要求をブロック制御部２１０に行い、結果として未割り当てブロックとして回収する。また、当該パリティグループの登録解除要求をパリティ制御部２３０に行う。
【００４７】
ここで、パリティグループとは、データが記憶された複数のブロックとその複数のブロックに記憶されたデータから生成された冗長データ（パリティデータ）が記憶された１つ以上のブロックを含むグループである。なお、冗長データは所定の方法により生成される。
【００４８】
読み込み処理部２２１は、読み込み要求をホスト装置からホストインタフェース部２９１を介して受け付ける。読み込み要求には、少なくともホスト装置が読み込みを要求するアドレスの範囲であるアドレス領域を含む。また、読み込み要求には読み込んだデータを格納（書き込み）する場所を表す格納場所情報が含まれても良い。読み込み処理部２２１は読み込みを要求されたデータを読み込む。そして、読み込み回答をホストインタフェース部２９１を介してホスト装置に出力する。ここで、読み込み回答とは、読み込んだデータそのものや、読み込んだデータが格納場所情報で特定される場所に格納が完了した旨の情報を含む情報である。
【００４９】
より詳細には、読み込み処理部２２１は、読み込み要求に含まれるアドレス領域に基づいて、ブロック制御部２１０に読み込み要求されているデータが記憶されているブロック番号を問い合わせる。ブロック制御部２１０から該当するブロック番号を受け付ける。そして、受け付けたブロック番号に基づいて、半導体記憶素子インタフェース部２９２を介して半導体記憶素子群９から当該ブロック番号により特定されるブロックのデータと特定されるブロックのデータに対応付けて記憶された誤り検出情報と特定されるブロックのデータに対応付けて記憶された誤り訂正情報を読み込む。なお、誤り検出情報と誤り訂正情報の少なくとも一方が書き込まれるブロックとは別のブロックなどに記憶された場合は、誤り検出・訂正情報管理６１に読み込むべきデータと対応付けられた誤り検出情報と誤り訂正情報の記憶されている場所を問い合わせて、誤り検出情報と誤り訂正情報を読み込む。
【００５０】
また、読み込み処理部２２１は、誤り訂正制御部２６０の誤り検出部６３と連携して読み込んだデータが誤っているか否かを判定し、誤っている場合は誤り訂正部６５と連携して訂正する。訂正できない場合は、復元可否判断部２５０に誤り訂正ができなかったデータの復元が可能か否かの判断を要求して可能な場合は誤り訂正ができなかったデータの復元を復元部３２に依頼し、復元部３２が復元する。
【００５１】
読み込み処理部２２１は、復元されたデータから誤り検出情報生成部６２に誤り検出情報を生成することを要求し、要求に対応して誤り検出情報生成部６２で生成された誤り検出情報を受け取る。また、復元されたデータから誤り訂正情報生成部６４に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正情報生成部６４で生成された誤り訂正情報を受け取る。
【００５２】
読み込み処理部２２１は、復元できたデータ等を書き込むべきブロック番号をブロック制御部２１０に問い合わせて（つまり、未割当ブロックの取り出しを要求する）、その回答であるブロック番号を受け付ける。そして、読み込み処理部２２１は、ブロック番号を受け付けると、半導体記憶素子インタフェース部２９２を介して半導体記憶素子群９のブロック番号に対応するブロックのデータを消去する。
【００５３】
そして、読み込み処理部２２１は、ブロック番号で特定されるブロックに復元されたデータと誤り検出情報と誤り訂正情報を半導体記憶素子インタフェース部２９２を介して半導体記憶素子群９に書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
【００５４】
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部２１０に当該ブロックの平準化情報の更新の要求を行う。
【００５５】
そして、読み込み処理部２２１は、付け替え部３３に付け替え要求を行う。ここで、読み込み処理部２２１が、復元されたデータから誤り検出情報を生成することを誤り検出情報生成部６２に要求してから、付け替え部３３に付け替え要求を行なうまでの処理をアクセス先変更処理という。
【００５６】
なお、読み込み処理部２２１は、アクセス先変更処理と同様に、誤り訂正したデータにより、誤り訂正前のデータが記録されているブロックを誤り訂正データを記録したブロックに付け替えてもよい。これにより、さらに誤りの状態が悪くなり、やがて誤り訂正不能になることを防ぐことができる。また、この付け替え処理は、誤り訂正が成功する都度、行う必要はなく、誤りの度合いが所定の閾値を超えたときに行うようにしてもよい。
【００５７】
その他のコマンド処理部２２３は、書き込み処理及び読み込み処理の他の処理に対応するコマンドを受け付けた際に、そのコマンドに対応する処理を行う。
【００５８】
誤り訂正制御部２６０は、ブロックから読み出されたデータに対する誤り検出処理と誤り訂正処理とを行う。誤り訂正制御部２６０は、誤り検出情報の生成や誤り訂正情報の生成を要求されたデータに基づいて、誤り検出情報の生成や誤り訂正情報の生成を行う。詳しくは後述する。
【００５９】
パリティ制御部２３０は、複数のブロックからなるパリティグループと、パリティグループ毎のパリティとを管理する。詳細については後述する。
【００６０】
復元可否判断部２５０は、誤り訂正制御部２６０により誤り検出され、さらに誤り訂正不能であったブロックに対し、パリティによるデータの復元が可能か否かを判断する。より詳細には、復元可否判断部２５０は、誤り検出され、さらに誤り訂正不能であったブロックがパリティグループを構成しているか否かをパリティ制御部２３０に問い合わせる。パリティ制御部２３０から、パリティグループを構成している旨の回答を受けた場合はパリティによるデータの復元が可能と判断し、パリティグループを構成していない旨の回答を受けた場合はパリティによるデータの復元が不可能と判断する。
【００６１】
本実施の形態では、誤りが検出され、かつ、誤り訂正不可能であったデータを、パリティによる冗長情報から復元する。ただし、パリティによる冗長情報から復元する処理に係る必要要件は、これに限られない。例えば、誤りが検出されたデータを、パリティによる冗長情報から復元する方針を採用してもよい。このようにすることで、誤り訂正によって得られる耐障害性は低下するものの、誤り訂正情報の分量の記憶領域を削減することができる。本実施の形態で説明する処理内容は、例えば、誤りが検出されたデータを、パリティによる冗長情報から復元する方針に、適宜読み替え可能である。
【００６２】
パリティ生成パトロール部２４０は、アドレス割当ブロックのうち、何れのパリティグループにも属さないブロックを検出し、検出したパリティグループを構成していないアドレス割当ブロックの個数が所定の閾値を上回った場合に、所定数のブロックを基に新たなパリティグループを生成する。なお、パリティグループを構成していないアドレス割当ブロックの個数が所定の閾値を上回った場合に、パリティグループを生成することに限らず、定期的に処理を行うようにしても良く、コントローラ２００ａの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行なうようにしても良い。
【００６３】
より詳細には、パリティ生成パトロール部２４０は、並び順序情報管理部２７０に、並び順情報にしたがってアドレス領域の参照要求であるアドレス領域参照要求を順番に送る。そして、要求に対応したアドレス領域の情報を並び順序情報管理部２７０から受け取る。パリティ生成パトロール部２４０は、受け取った順番でアドレス領域に対応するブロック番号をブロック制御部２１０に問い合わせる。ブロック制御部２１０からブロック番号を受け取る。
【００６４】
パリティ生成パトロール部２４０は、ブロック番号を受け取った順番で、パリティ制御部２３０に受け取ったブロック番号が既にパリティグループを構成しているか否かを問い合わせる。パリティ制御部２３０から受け取ったブロック番号のブロックがパリティグループを構成していない旨の回答を受け取ると、パリティグループを構成していないブロックをパリティ生成の対象として収集する。
【００６５】
そして、パリティ生成パトロール部２４０は、パリティグループを構成していないブロックを所定数収集すると、パリティ生成部３１にその所定数のブロックに記録されたデータに基づいてパリティデータの生成を要求し、パリティ生成部３１で生成されたパリティデータを受け取る。パリティ生成パトロール部２４０は、誤り検出情報生成部６２に、パリティデータから誤り検出情報を生成することを要求し、誤り検出情報生成部６２で生成された誤り検出情報を受け取る。パリティ生成パトロール部２４０は、誤り訂正情報生成部６４に、パリティデータから誤り訂正情報を生成することを要求し、誤り訂正情報生成部６４で生成された誤り訂正情報を受け取る。
【００６６】
パリティ生成パトロール部２４０は、ブロック制御部２１０に未割当ブロックの取り出しを要求し、ブロック制御部２１０からブロック番号を受け取る。そして、パリティ生成パトロール部２４０は、半導体記憶素子インタフェース部２９２を介して、半導体記憶素子群９のブロック番号に対応するブロックのデータを消去する。パリティ生成パトロール部２４０は、パリティ制御部２３０のパリティ生成部３１が生成したパリティデータと、誤り検出情報生成部６２がパリティデータから生成した誤り検出情報と、誤り訂正情報生成部６４がパリティデータから生成した誤り訂正情報を受け取ったブロック番号のブロックに半導体記憶素子インタフェース２９２を介して書き込む。
【００６７】
なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
【００６８】
パリティ生成パトロール部２４０は、ブロック制御部２１０に、消去したブロックの平準化情報の更新要求を行う。パリティ生成パトロール部２４０は、ブロック制御部２１０に、書き込んだブロックのブロック状態をパリティ割当状態に更新する更新要求を送る。
【００６９】
パリティ生成パトロール部２４０は、収集したブロックと、書き込んだブロックとからなるパリティグループの登録をパリティ制御部２３０に要求する。
【００７０】
また、パリティ生成パトロール部２４０、並び順序情報管理部２７０、ブロック制御部２１０、パリティ制御部２３０において、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
【００７１】
読み込みパトロール部２４１は、より耐障害性を高めるためのものであり、読み込み処理部２２１が読み込み要求の処理時に行うであろうパリティデータを利用したデータの復元を事前に行う。
【００７２】
より詳細には、読み込みパトロール部２４１は、ブロックテーブル１２のうち、ブロック状態が未割当状態ではないブロックのブロック番号をブロック制御部２１０に問い合わせ、ブロック制御部２１０からブロック番号を取得する。未割当状態ではないブロックとは、有効なデータが記録されたブロックである。未割当状態ではないブロックとは、例えば、アドレス割当ブロックやパリティ割当ブロックが含まれる。取得した各ブロックについて、以下の事前復元処理を行う。
【００７３】
事前復元処理では、読み込みパトロール部２４１は、受け付けたブロック番号に基づいて、半導体記憶素子インタフェース部２９２を介して半導体記憶素子群９から当該ブロック番号により特定されるブロックのデータと特定されるブロックのデータに対応付けて記憶された誤り検出情報と特定されるブロックのデータに対応付けて記憶された誤り訂正情報を読み込む。なお、誤り検出情報と誤り訂正情報の少なくとも一方が書き込まれるブロックとは別のブロックなどに記憶された場合は、誤り検出・訂正情報管理部６１に読み込むべきデータと対応付けられた誤り検出情報と誤り訂正情報の記憶されている場所を問い合わせて、誤り検出情報と誤り訂正情報を読み込む。
【００７４】
また、読み込みパトロール部２４１は、誤り訂正制御部２６０の誤り検出部６３と連携して読み込んだデータが誤っているか否かを判定し、誤っている場合は誤り訂正部６５と連携して訂正する。訂正できない場合は、復元可否判断部２５０に誤り訂正ができなかったデータの復元が可能か否かの判断を要求して可能な場合は誤り訂正ができなかったデータの復元を復元部３２に依頼し、復元部３２が復元する。
【００７５】
読み込みパトロール部２４１は、復元されたデータから誤り検出情報生成部６２に誤り検出情報を生成することを要求し、要求に対応して誤り検出情報生成部６２で生成された誤り検出情報を受け取る。また、復元されたデータから誤り訂正情報生成部６４に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正情報生成部６４で生成された誤り訂正情報を受け取る。
【００７６】
読み込みパトロール部２４１は、復元できたデータ等を書き込むべきブロック番号をブロック制御部２１０に問い合わせて（つまり、未割当ブロックの取り出しを要求する）、その回答であるブロック番号を受け付ける。そして、読み込みパトロール部２４１は、ブロック番号を受け付けると、半導体記憶素子インタフェース部２９２を介して半導体記憶素子群９のブロック番号に対応するブロックのデータを消去する。
【００７７】
そして、読み込みパトロール部２４１は、ブロック番号で特定されるブロックに復元されたデータと誤り検出情報と誤り訂正情報を半導体記憶素子インタフェース部２９２を介して半導体記憶素子群９に書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
【００７８】
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部２１０に当該ブロックの平準化情報の更新の要求を行う。
【００７９】
そして、読み込みパトロール部２４１は、付け替え部３３に付け替え要求を行う。
なお、読み込みパトロール部２４１は、アクセス先変更処理と同様に、誤り訂正したデータにより、誤り訂正前のデータが記録されているブロックを誤り訂正データを記録したブロックに付け替えてもよい。これにより、さらに誤りの状態が悪くなり、やがて誤り訂正不能になることを防ぐことができる。また、この付け替え処理は、誤り訂正が成功する都度、行う必要はなく、誤りの度合いが所定の閾値を超えたときに行うようにしてもよい。
以上が事前復元処理である。
【００８０】
上記事前復元処理で、復元可否判断部２５０が誤り訂正ができなかったデータの復元が不可能であると判断し、かつ、復元不可能なデータが記録されていたブロックのブロック番号がアドレステーブル１１に含まれる場合は、アドレステーブル１１のうち、復元不可能なデータが記録されていたブロックと対応付けられたアドレス領域にさらにエラーであることを記録しても良い。
【００８１】
上述の事前復元処理により、誤り訂正不可能であったデータの復元を実際の読み込み処理の前に行っておくことにより、冗長性が無くなっていたものの冗長性を事前に復元させることができ、耐障害性を高めることができる。
【００８２】
読み込み処理の際に検出される誤りの発生頻度が、所定の閾値を超えた場合に、読み込みパトロール処理を行う。なお、読み込み処理時の誤りの発生頻度が所定の閾値を超えた場合に限らず、定期的に処理を行うようにしても良く、コントローラ２００ａの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行うようにしても良い。
【００８３】
並び順情報管理部２７０は、アドレス領域の情報と並び順情報とが対応づけられた情報であるアドレス領域情報テーブルを有し、さらにそのアドレス領域情報テーブルを管理する。
【００８４】
図４−１は、並び順情報管理部２７０の構成の例を示す図である。図４−１の並び順情報管理部２７０は、アドレス領域情報テーブルを有する。
【００８５】
アドレス領域情報テーブルは、アドレス領域毎に、並び順情報が対応づけられる。並び順情報としては、データの更新順などがある。管理としては、例えば、並び順情報管理部２７０は、書き込み処理部２２０からアドレス領域の更新通知を受けると、更新の対象となっているアドレス領域に対応付けられている並び順情報を更新する。より詳細には、書き込み処理部２２０から受けたアドレス領域の更新通知に含まれる各アドレス領域が更新された旨の情報や各アドレス領域が更新された時期の情報に基づいて、例えば各アドレス領域が更新された回数の情報や更新された順序の情報を生成する。そして例えば各アドレス領域が更新された回数の情報または更新された順序の情報を所定の評価関数で評価した値に基づいて並び順情報を更新する。
【００８６】
並び順情報管理部２７０は、パリティ生成パトロール部２４０からアドレス領域参照要求を受け付ける。受け付けたアドレス領域参照要求に含まれる並び順と対応付けられているアドレス領域の情報を抽出してパリティ生成パトロール部２４０に送る。
【００８７】
なお、読み込み処理部２２１からの要求により誤り訂正部６５が誤り訂正したデータを、読み込み処理部２２１が未割当ブロックに対してデータを書き込んでアドレス領域のマッピングを変更する際、または、読み込み処理部２２１からの要求により復元部３２が復元したデータを、読み込み処理部２２１が未割当ブロックに対してデータを書き込んでアドレス領域のマッピングを変更する際に、読み込み処理部２２１が並び順情報管理部２７０に要求することにより、並び順情報管理部２７０が、上記並び順情報を更新しても良い。また、読み込みパトロール部２４１の処理における、読み込み処理部２２１の前述した処理と同等の処理についても、同様に並び順情報を更新しても良い。並び順情報を更新することで、次回の書き込み等の処理の際に、より好適な情報が得られる。
【００８８】
並び順情報は、全てのブロックがパリティグループを構成しているとは限らないという条件の下で、できるだけ耐障害性を高めるために導入するものである。以降に、詳細に記す。
【００８９】
データを書き込むときは、未割当ブロックに対してデータを書き込み、書き込み要求のあったアドレス領域とのマッピングを、データを書き込んだブロックに更新する。したがって、更新頻度（つまり、書き込み頻度）が高いアドレス領域にマッピングされているブロックは、当該アドレスにマッピングされている期間が短く、更新頻度が低いアドレス領域にマッピングされているブロックは、当該アドレス領域にマッピングされている期間が長いという状態になる。
【００９０】
ここでは、簡単のために、ブロックに記録されているデータに対して発生する誤りは、全てのブロックにおいて同程度の確率で発生するものと仮定する。
【００９１】
この仮定の下では、あるアドレス領域にマッピングされている期間が長いブロックでは、当該アドレス領域にマッピングされている期間中に、当該ブロックに記録されているデータに対して誤りが発生する可能性が比較的高くなる。一方、あるアドレス領域にマッピングされている期間が短いブロックでは、当該アドレス領域にマッピングされている期間中に、当該ブロックに記録されているデータに対して誤りが発生する可能性は比較的低くなる。
【００９２】
したがって、耐障害性を高めるためには、更新頻度が低いアドレス領域にマッピングされているブロックを優先してパリティグループを生成したほうが効果的である。また、更新頻度が低いアドレス領域にマッピングされているブロックを集めてパリティグループを生成することで、該パリティグループが解体される可能性を減じることができる。このため、結果としてパリティグループの生成回数を減じることができ、パリティグループの生成処理に伴うパリティデータの書き込み処理回数を減じることができるため、半導体記憶装置全体の処理速度等の性能の低下を低減させ、また、半導体記憶素子群９の寿命の減少を低減することができる。
【００９３】
更新頻度の評価は、以下の２種類の情報を所定の評価関数により評価した値を使用すれば良い。なお、情報は以下の２種類の情報だけに限定されるものではなく、更新頻度を評価できる適切な情報であれば良い。
（１）あるアドレス領域のマッピングが最後にいつ変更されたかの情報（更新されてからの時間の情報）。
（２）あるアドレス領域のマッピングが何回変更されたかの情報（更新回数の情報）。
【００９４】
なお、実施形態の説明においては、上記評価関数の一形態である、更新されてからの時間の情報のみを評価に採用する例と、更新回数の情報のみを評価に採用する例の２通りについて説明する。
【００９５】
キャッシュメモリ２９３は、コントローラ２００ａが処理中のデータなどを一時的に保存する。ホストインタフェース部２９１は、コントローラとホスト装置との間のインタフェース処理を行う。半導体記憶素子インタフェース部２９２は、コントローラ２００ａと半導体記憶素子群９との間のインタフェース処理を行う。
【００９６】
（ブロック制御部）
図５は、本実施の形態における半導体記憶装置が有する半導体記憶素子からなるブロックを管理することにより、各ブロックに対するデータの書き込み等を制御するブロック制御部２１０の機能を説明する図である。ブロック制御部２１０は、アドレステーブル１１とブロックテーブル１２とを管理する。
【００９７】
ブロック制御部２１０は、ブロックへのデータの書き込み処理やブロックに記憶されているデータの消去処理の際に、ブロック毎の属性の情報（後述するブロック状態の情報または、ブロック状態の情報と平準化情報が対応する）を更新する。なお、ブロック制御部２１０は、平準化情報も管理して、ブロック毎の消去回数がなるべく同数になるように平準化処理を行い、平準化情報の更新を行っても良い。ブロック制御部２１０は、また、平準化処理を行う場合は、ブロックの書き込み処理やブロックの消去処理などに伴って必要になる、平準化処理の要求を受け付ける。
【００９８】
ブロック制御部２１０は、アドレス領域とブロック番号とを対応付けた情報であるアドレステーブル１１を記憶および管理している。アドレス領域とはホスト装置から送られてくる論理的なアドレスの範囲（領域）をいう。ブロック番号は１つのブロックの番号がアドレス領域と対応付けられている場合もあれば、複数のブロックの番号がアドレス領域と対応付けられている場合もある。このアドレス領域とブロック番号との対応付けは必要に応じて変化する。また、半導体記憶素子群９内のブロックの番号は、物理ブロックアドレスである。
【００９９】
アドレステーブル１１により、ホスト装置から送られてくるアドレスを含むアドレス領域に対応するブロックを特定することができる。アドレステーブル１１は、例えば、後述するアドレステーブルへのブロック番号対応付け処理や、アドレステーブルへのブロック番号削除処理などに伴い更新される。
【０１００】
ブロックテーブル１２は、ブロック番号とブロック状態とを対応付けた情報である。また、平準化処理を行う場合は、ブロックテーブル１２はブロック番号とブロック状態と平準化情報とを対応付けた情報であってもよい。平準化情報とは、平準化処理に必要な情報である。平準化処理に必要な情報とは、各ブロックの残り寿命を直接的または間接的に表す情報であり、例えば、ブロックのデータが消去された回数や、ブロックのデータが消去された時期の情報等である。ブロックテーブル１２は、例えば、後述するブロック状態変更処理や、平準化情報の更新処理などに伴い更新される。
【０１０１】
なお、アドレステーブル１１及びブロックテーブル１２は、キャッシュメモリ２９３に格納してもよく、キャッシュメモリ２９３及び半導体記憶素子群９の両方に格納してもよい。また、半導体記憶素子群９以外の記憶領域に格納しても良い。半導体記憶素子群９に格納されたアドレステーブルやブロックテーブルの情報は、必ずしもキャッシュメモリ２９３の情報を更新した都度更新する必要はない。アドレステーブル１１及びブロックテーブル１２には必要な情報が適切に記録されていればよく、記録に係るデータ構造等は問わない。
【０１０２】
ブロック制御部２１０が実行する処理は、アドレステーブル１１へのブロック番号対応付け、アドレステーブル１１からのブロック番号削除、ブロック状態変更、書き込み処理部２２０またはパリティ生成パトロール部２４０からの書き込み先となるブロックの問い合わせへの応答であるブロック番号の回答、読み込み処理部２２１または読み込みパトロール部２４１からの復元部３２が復元したデータの書き込み先となるブロックの問い合わせへの応答であるブロック番号の回答が含まれる。また、上記処理のうち、ブロック番号の回答としては未割当ブロックを取り出して回答する処理が含まれ、及び、平準化処理を行う場合は、さらに平準化情報の更新が含まれる。
【０１０３】
(アドレステーブルへのブロック番号対応付け)
ブロック制御部２１０は、書き込み処理部２２０または付け替え部３３からアドレステーブル１１へのブロック番号対応付け要求を受け、要求されたアドレス領域に対応するブロック番号を設定する。このように、アドレス領域とブロック番号とを対応付けることで、例えば、読み込み処理において、要求されたアドレスに対応付けられたブロックに記録されている、データを読み込むことができる。
【０１０４】
（アドレステーブルへのブロック番号削除）
ブロック制御部２１０は、書き込み処理部２２０または付け替え部３３からアドレステーブル１１へのブロック番号削除要求を受け、要求されたアドレス領域に対応するブロック番号を、ブロック番号が設定されていない状態である未設定状態に変更する。未設定状態を示す情報としては、例えばＮＵＬＬ値等を設定する。これにより、アドレス領域とブロック番号の対応付けが解除される。
【０１０５】
（ブロック状態変更）
ブロック制御部２１０は、ブロック状態変更要求を受け、要求されたブロック番号に対応するブロック状態を、要求されたブロック状態に設定する。ブロック状態には、少なくとも「アドレス割当状態」、「パリティ割当状態」、及び、「未割当状態」の３種類がある。これにより、各種処理において、ブロック状態を判別することができる。
【０１０６】
（未割当ブロックの取り出し）
ブロック制御部２１０は、未割当ブロックの取り出し要求を受けると、まず、ブロックテーブル１２から、全ブロックの情報を取得する。ブロック制御部２１０は、全ブロックのうち、ブロック状態が未割当状態のブロックを抽出し、抽出されたブロックから任意のブロックまたは所定の方式で選択されたブロックを取り出す。また、平準化処理をする場合は、ブロック制御部２１０は、さらに、未割当ブロックの中から、平準化処理にあたって最適と判断するブロック番号を返却する。平準化処理にあたって最適と判断するブロックとは、例えば、消去間隔が長く、消去回数が少ないブロックである。本実施の形態では、何れの判断方法による判断でもよく、さまざまな判断方法を必要に応じて採用してよい。このように、平準化処理にあたって最適と判断された未割当ブロックに対してのみ、データの消去及び書き込み処理を行うことで、たとえば消去回数の平準化が実現でき、各ブロックの残り寿命を平準化することができる。
【０１０７】
（平準化情報の更新）
ブロック制御部２１０は、平準化情報の更新要求を受け、要求されたブロック番号に対応する平準化情報を適切に更新する。この処理は、例えば、ブロックのデータ消去に合わせて実行する。この平準化情報により、未割当ブロックの取り出し処理において、平準化処理にあたって最適なブロックを取り出すことができる。平準化情報とは、ブロックが保持するデータが消去された回数や、ブロックのデータが消去された時期の情報等である。なお、本実施の形態においては、平準化情報の内容は上記に限定せず、上記未割当ブロックの取り出し処理において採用した、最適なブロックの判断処理において必要な平準化情報を、必要に応じて採用することができる。
【０１０８】
（誤り訂正制御部）
図６は、誤り訂正制御部２６０の機能構成を説明する図である。図６の誤り訂正制御部２６０は、誤り検出情報及び誤り訂正情報の生成処理、誤り検出処理及び誤り訂正処理を行い、これらの処理に必要な各種情報を管理する。
【０１０９】
誤り訂正制御部２６０は、誤り検出・訂正情報管理部６１、誤り検出情報生成部６２、誤り検出部６３、誤り訂正情報生成部６４、及び、誤り訂正部６５を有する。誤り検出・訂正情報管理部６１は、要求されたデータから生成した誤り検出情報及び誤り訂正情報と、要求されたデータとの対応関係を管理する。誤り検出情報生成部６２は、要求されたデータに対する誤り検出情報を生成する。
【０１１０】
誤り検出部６３は、要求されたデータと誤り検出情報とから、要求されたデータに誤りがないかどうかを判断する。誤り訂正情報生成部６４は、要求されたデータに対する誤り訂正情報を生成する。
【０１１１】
誤り訂正部６５は、誤り検出部６３で誤りと判定された要求されたデータと誤り訂正情報とから、データの誤りを訂正する。なお、誤り訂正部６５が誤り訂正を行う能力には、所定の強度があり、データの誤り状況によっては、訂正できない場合がある。
【０１１２】
なお、誤り検出情報及び／又は誤り訂正情報を、データを書き込むブロックにデータとともに記録してもよく、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子群９以外の記憶領域に記録してもよい。
【０１１３】
誤り検出情報及び／又は誤り訂正情報を、データを書き込むブロックにデータとともに記録する場合には、例えば、誤り検出・訂正情報管理部６１は、ブロックに記録されるデータ、誤り検出情報及び／又は誤り訂正情報の記録方法、すなわち、記録フォーマットを管理する。
【０１１４】
また、誤り検出情報及び／又は誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録する場合や、半導体記憶素子群９以外の記憶領域に記録する場合には、例えば、誤り検出・訂正情報管理部６１は、データとそのデータに対応する誤り訂正情報及び／又は誤り訂正情報との記録場所及び記録方法を管理する。
【０１１５】
また、誤り検出・訂正情報管理部６１が管理する情報は、半導体記憶素子群９の所定のブロックに保存しても良く、キャッシュメモリ２９３に格納してもよく、キャッシュメモリ２９３及び半導体記憶素子群９の両方に格納してもよい。また、半導体記憶素子群９以外の記憶領域に格納しても良い。半導体記憶素子群９に格納された情報は、必ずしもキャッシュメモリ２９３の情報を更新した都度更新を行う必要はない。
【０１１６】
誤り検出・訂正情報管理部６１が管理する情報は、必要な情報が適切に記録されていればよく、記録に係るデータ構造等は問わない。
【０１１７】
以下の実施の形態では、誤り検出情報及び誤り訂正情報を、データを書き込むブロックにデータとともに記録する場合について説明する。なお、以下の実施形態は、誤り検出情報及び／又は誤り訂正情報を、データを書き込むブロックにデータと共に記録しない場合にも、適宜読み替えることができる。
【０１１８】
（パリティ制御部詳細）
図７は、パリティ制御部２３０の機能構成の例を説明する図である。パリティ制御部２３０は、パリティデータの生成やデータの復元処理を行い、それらの処理に必要な各種情報を管理する。
【０１１９】
パリティ制御部２３０は、パリティ対応リスト３９を管理し、パリティ生成部３１、復元部３２、付け替え部３３、及び、パリティ対応リスト管理部３４を有する。
【０１２０】
パリティ対応リスト３９は、どのデータブロックのデータから生成されたパリティデータが、どのパリティ生成方法により、どのブロックに記録されているかを示す情報である。ここで、データブロックとはパリティデータの生成の基となっているデータが記憶されたブロックをいう。パリティブロックとはデータブロックに記録されたデータから生成されたパリティデータを記録するブロックをいう。また、上述したように、パリティグループとは、データが記憶された複数のブロックとその複数のブロックに記憶されたデータから生成された冗長データ（パリティデータ）が記憶された１つ以上のブロックを含むグループである。なお、冗長データは所定の方法により生成される。
【０１２１】
例えば、図７中、パリティ対応リスト３９は、パリティグループ番号１のパリティグループが示されている。パリティグループ番号１のパリティグループは、ブロック番号０、１、２、３のブロック群から生成された２つのパリティデータが、それぞれブロック番号４、５のブロックに記録されている。パリティグループ番号１の各パリティのパリティ生成方法は、方法１である。パリティ生成方法によっては、パリティ割当ブロックはひとつとは限らず、複数のパリティ割当ブロックからなるパリティ割当ブロック群でもよい。
【０１２２】
パリティ対応リスト３９は、例えば、後述するパリティグループ登録処理や、パリティグループ登録解除処理等の際にパリティ制御部２３０が更新する。より詳細には、パリティ対応リスト管理部３４が更新する。パリティ対応リスト３９は、また、パリティグループの増減に伴い、管理する情報量が増減する。
【０１２３】
パリティ生成部３１は、要求されたブロック群のデータから、所定の方法に従ってパリティデータを生成する。より詳細には、パリティ生成パトロール部２４０からパリティ生成の要求を受けると、要求に含まれるデータブロック群とパリティ生成方法の情報に基づいて、データブロック群に記憶されたデータから当該パリティ生成方法によりパリティデータを生成し、パリティ生成パトロール部２４０に生成したパリティデータを送る。
【０１２４】
復元部３２は、読み込み処理部２２１または読み込みパトロール部２４１から誤り訂正できなかったブロックに記憶されているデータの復元要求を受け、要求されたブロックのデータを、要求されたブロックが所属しているパリティグループを構成しているブロックに記録されているデータから、所定の方法に従って復元する。そして、復元したデータを要求を受けた読み込み処理部２２１または読み込みパトロール部２４１に送る。
【０１２５】
付け替え部３３は、読み込み処理部２２１または読み込みパトロール部２４０から付け替え要求を受け、復元前のデータ、すなわち、誤り訂正不能となったデータが記録されているブロックである訂正不能ブロックを指す各種情報を、復元されたデータを新たに記録したブロックである復元ブロックを指す各種情報に更新する。
【０１２６】
より詳細には、付け替え部３３は、訂正不能ブロックが、アドレステーブル１１に登録されていた場合は、アドレステーブル１１の訂正不能ブロックを指すブロック番号の削除をブロック制御部２１０に要求する。付け替え部３３は、ブロック制御部２１０が削除したブロック番号が対応付けられていたアドレス領域と復元ブロックを指すブロック番号とを対応付ける要求をブロック制御部２１０に行う。
【０１２７】
付け替え部３３は、さらに、ブロックテーブル１２において、復元ブロックのブロック状態を訂正不能ブロックのブロック状態に変更する要求をブロック制御部２１０に行う。続いて、訂正不能ブロックのブロック状態を未割当状態に変更する要求をブロック制御部２１０に行う。
【０１２８】
なお、読み込み処理部２２１または読み込みパトロール部２４０は、訂正不能ブロックの誤りの発生度合いを付け替え部３３に通知してもよい。これにより、誤りの度合いによっては、訂正不能ブロックの状態を「誤り多発状態」というブロック状態に設定し、そのブロックを、以降使用しないように制御することができる。
【０１２９】
また、付け替え部３３は、パリティ対応リスト３９のうち、訂正不能ブロックを指すブロック番号が対応付けられているグループのパリティグループ登録解除処理の要求をパリティ対応リスト管理部３４に行う。その後、登録解除となったパリティグループのグループ番号と対応付けられていたデータブロックのブロック番号とパリティブロックのブロック番号のうち、訂正不能ブロックを指すブロック番号を復元ブロックを指すブロック番号に置き換えたパリティグループの登録処理をパリティ対応リスト管理部３４に要求する。
これにより、読み込み処理部２２１等の各部が、訂正不能ブロックにアクセスするのではなく、復元ブロックにアクセスすることができる。このため、誤り訂正不能となったことにより失われた冗長性が再度もたらされることになる。
【０１３０】
パリティ対応リスト管理部３４は、パリティグループ登録解除処理の要求を受けると解除処理の要求対象となっているグループの情報をパリティ対応リスト３９から削除する。
パリティ対応リスト管理部３４は、パリティグループ登録処理の要求を受けるとデータブロックのブロック番号の群とパリティブロックのブロック番号の群とパリティ生成方法の情報とグループ番号とを対応付けて登録する。
【０１３１】
なお、パリティ対応リスト３９は、半導体記憶素子群９の所定のブロックに保存しても良く、キャッシュメモリ２９３に格納しても良く、又は、キャッシュメモリ２９３と半導体記憶素子群９との両方に格納しても良い。また、半導体記憶素子群９以外の記憶領域に格納しても良い。半導体記憶素子群９に格納されたパリティ対応リストの情報は、必ずしもキャッシュメモリ２９３の情報を更新した都度更新を行う必要はない。また、パリティ対応リスト３９には必要な情報が適切に記録されていればよく、記録に係るデータ構造等は問わない。
【０１３２】
（書き込み処理）
図８は、書き込み処理を説明するフロー図である。図８の書き込み処理は、ホスト装置からの書き込み要求に基づいて開始される。ステップＳ１０１では、書き込み処理部２２０が、書き込み要求を受け、その書き込み要求データから、誤り検出情報生成部６２が誤り検出情報を生成し、誤り訂正情報生成部６４が誤り訂正情報を生成し、ブロックに書き込む内容を準備する。さらに、ブロック制御部２２０が、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。
【０１３３】
ステップＳ１０２では、書き込み処理部２２０が、ステップＳ１０１で確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、例えば、誤り検出情報や誤り訂正情報を、データを書き込むブロックにデータとともに記録する。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
【０１３４】
ステップＳ１０２では、平準化処理を行なう場合は、さらに、書き込み処理部２２０が未割当ブロックの更新処理を行うことにより、ブロック制御部２１０が、その未割当ブロックの平準化情報を更新する。
【０１３５】
ステップＳ１０３では、ブロック制御部２１０と書き込み処理部２２０とが、更新済みの情報が記録されている未割当ブロックと更新前ブロックとのマッピングを更新する。より詳細には、まず、書き込み処理部２２０からの要求を受けてブロック制御部２１０は、ブロック制御部２１０のアドレステーブル１１に保持されている情報により、書き込み要求アドレスが含まれるアドレス領域に対応している、更新前のブロックのブロック番号を取得する。そして、ブロック制御部２１０は書き込み処理部２２０に更新前のブロック番号を通知する。そして、書き込み処理部２２０からの要求を受けてブロック制御部２１０は、アドレステーブル１１の当該アドレス領域から、更新前ブロックのブロック番号を削除し、新たにデータが書き込まれた未割当ブロックの番号を設定する。これにより、アドレステーブルの更新が完了する。
【０１３６】
ステップＳ１０３では、さらに、書き込み処理部２２０からの要求を受けてブロック制御部２１０が、更新前ブロックの状態を、未割当状態に設定し、更新済みの情報が記録されている未割当ブロックの状態を、アドレス割当状態に設定する。これにより、ブロックの状態の設定が完了する。なお、更新前ブロックの状態を、未割当状態に設定することで、ステップＳ１０３の処理が終了した際には、更新前ブロックを、未割当ブロックとして回収することができる。
【０１３７】
ステップＳ１０３では、さらに、書き込み処理部２２０からの要求を受けて並び順情報管理部２７０が、アドレステーブル１１の更新に対応させて、並び順情報を更新する。
【０１３８】
ステップＳ１０４では、書き込み処理部２２０からの要求によりパリティ制御部２３０が、更新前ブロック、すなわち、未割当状態に設定したブロックが、何れかのパリティグループに属していたか否かを判定する。パリティグループに属している場合にはステップＳ１０５に進み、パリティグループに属していない場合は処理を終了する。
【０１３９】
パリティグループに属しているか否かの判定は、書き込み処理部２２０からの要求によりパリティ制御部２３０が、更新前ブロックが属するパリティグループを検索し、返却値からそのブロックが属する当該パリティグループが存在するかどうかを判断することにより行うとよい。
【０１４０】
ステップＳ１０５では、書き込み処理部２２０からの要求により、パリティ制御部２３０とブロック制御部２１０とが、パリティグループの解体を行う。パリティグループの解体は、更新前ブロックがパリティグループに属していた場合に、更新前ブロックと該パリティグループに属するパリティブロック群を未割当ブロックとして回収するために実行される。
【０１４１】
より詳細には、書き込み処理部２２０からの要求により、ブロック制御部２１０が、そのパリティグループを構成しているパリティブロック群の状態を、未割当状態に変更し、結果として未割当ブロックとして回収する。さらに、書き込み処理部２２０からの要求により、パリティ制御部２３０が、そのパリティグループの登録解除を行う。これによりパリティグループの解体処理が実現できる。
【０１４２】
（書き込み処理例）
図９と図１０とは、書き込み処理の前と後との各テーブル等の状態を説明する図である。なお、図９及び図１０には、各テーブルが有する情報の一部を示す。図９の（ａ）ないし（ｃ）は、それぞれ、書き込み処理前の、アドレステーブル１１、ブロックテーブル１２、及び、パリティ対応リスト３９の状態を示す図である。（ａ）のアドレステーブル１１では、例えば、アドレス領域０にブロック番号０が対応づけられている。
【０１４３】
（ｂ）のブロックテーブル１２では、ブロック番号０から７までが、アドレス割当状態のブロックであり、ブロック番号８及び９が、パリティ割当ブロックであり、ブロック番号１０から１２までが、未割当ブロックである。
また（ｃ）のパリティ対応リスト３９では、グループ番号０及び１の２つのパリティグループが示されている。
【０１４４】
図９（ｄ）は、（ａ）から（ｃ）に対応するブロックとパリティグループとの関係を示す模式図である。ここでは、図９（ｄ）では、並び順をアドレス領域毎のデータの更新順序、すなわち、消去時期としている。より詳細には、ブロック番号０から２までが、パリティグループ０を形成し、パリティデータは、ブロック番号８に格納されている。また、ブロック番号３から５までが、パリティグループ１を形成し、パリティデータは、ブロック番号９に格納されている。
【０１４５】
図１０（ａ）から（ｃ）は、図９に示す状態の際に、アドレス領域０に対して書き込み要求が発生した場合に、アドレステーブル１１、ブロックテーブル１２、及び、パリティ対応リスト３９において更新される箇所を説明する図である。なお、図には更新された箇所に関係する箇所のみを示している。
【０１４６】
書き込み処理の際は、まず、ブロック制御部２１０により、たとえば未割当ブロック１０が取り出され、書き込み処理部２２０が、データを書き込む。さらに、ブロック制御部２１０が、ブロック０とブロック１０とのブロック状態の情報を更新する。これにより、図１０（ａ）及び（ｂ）に示すように、ブロック０が未割当ブロックとなり、ブロック１０がアドレス割当ブロックとなる。
【０１４７】
さらに、パリティ制御部２３０が、パリティグループ０を解体する。これにより、図１０（ｂ）及び（ｃ）に示すように、パリティデータが格納されていたブロック８が未割当ブロックとなり、グループ番号０のパリティグループがパリティ対応リスト３９から削除される。
【０１４８】
図１０（ｄ）は、図１０（ａ）から（ｃ）の処理に対応する模式図である。ここでは、ブロックの並び順はアドレス領域ごとのデータの更新順序としている。そこで、新しくアドレス割当状態になったブロック１０の並び順は、一番左側に位置する。
【０１４９】
（読み込み処理）
図１１は、読み込み処理を説明するフロー図である。図１１のステップＳ２０１では、読み込み処理部２２１が、ホスト装置からの読み込み要求を受けつける。そして、読み込み処理部２２１からの要求により、ブロック制御部２１０が、読み込み要求に含まれるアドレス領域とアドレステーブル１１に基づいて、ブロック番号を特定し、読み込み処理部２２１に返却する。読み込み処理部２２１は、そのブロックに記録されているデータを読み込む。ステップＳ２０１では、さらに、誤り検出情報及び誤り訂正情報を読み込む。
【０１５０】
ステップＳ２０２では、読み込み処理部２２１からの要求により誤り検出部６３が、読み込んだデータ誤り検出処理を行い、読み込んだデータが誤っているか否かを判定する。誤っている場合には、ステップＳ２０４に進み、誤っていない場合には、ステップＳ２０３に進む。ステップＳ２０３では、読み込んだデータを読み込み要求元に返却する。
【０１５１】
一方、ステップＳ２０４では、読み込み処理部２２１からの要求により誤り訂正部６５が、読み込んだデータの誤り訂正処理を行う。誤り訂正が成功した場合には、ステップＳ２０５に進み、誤り訂正ができない場合には、ステップＳ２０６に進む。ステップＳ２０５では、ステップＳ２０４で誤り訂正したデータを、読み込み要求元に返却する。
【０１５２】
なお、読み込み処理部２２１は、以降に記述するステップＳ２０９とステップＳ２１０の処理と同様に、誤り訂正したデータにより、誤り訂正前のデータが記録されているブロックを誤り訂正データを記録したブロックに付け替えてもよい。これにより、さらに誤りの状態が悪くなり、やがて誤り訂正不能になることを防ぐことができる。また、この付け替え処理は、誤り訂正が成功する都度、行う必要はなく、誤りの度合いが所定の閾値を超えたときに行うようにしてもよい。
【０１５３】
ステップＳ２０６では、読み込み処理部２２１からの要求により復元可否判断部２５０が、誤り訂正できなかったデータが記録されているブロックがパリティグループに属しているか否かを判定する。そのブロックがパリティグループに属している場合には、ステップＳ２０７に進み、復元処理を行う。一方、パリティグループに属していない場合には、復元処理ができないため、ステップＳ２１２に進む。なお、この判定は、パリティ対応リスト３９において、ブロックが属するパリティグループを検索し、パリティグループが存在するかどうかを判断することで実現できる。
【０１５４】
本実施の形態では、誤りが検出され、かつ、誤り訂正不可能であったデータを、パリティによる冗長情報から復元する。ただし、パリティによる冗長情報から復元する処理に係る必要要件は、これに限られない。例えば、誤りが検出されたデータを、パリティによる冗長情報から復元する方針を採用してもよい。このようにすることで、誤り訂正によって得られる耐障害性は低下するものの、誤り訂正情報の分量の記憶領域を削減することができる。本実施の形態で説明する処理内容は、例えば、誤りが検出されたデータを、パリティによる冗長情報から復元する方針に、適宜読み替え可能である。
【０１５５】
ステップＳ２０７では、読み込み処理部２２１からの要求により復元部３２が、誤り訂正できなかったデータの復元処理を行う。ステップＳ２０８では、復元部３２が、復元ができたか否かを判定する。復元できた場合には、ステップＳ２０９に進み、復元処理を試みたものの、何らかの要因により復元できなかった場合は、ステップＳ２１２に進む。
【０１５６】
ステップＳ２０９では、読み込み処理部２２１が、復元できたデータにより、そのブロックを更新する。すなわち、未割当ブロックを取得し、復元したデータを書き込む。より詳細には、読み込み処理部２２１が誤り検出情報生成部６２に対して要求することにより、誤り検出情報生成部６２が、復元したデータから誤り検出情報を生成し、読み込み処理部２２１が誤り訂正情報生成部６４に対して要求することにより、誤り訂正情報生成部６４が、復元したデータから誤り訂正情報を生成し、ブロックに書き込む内容を準備する。
【０１５７】
続いて、読み込み処理部２２１からの要求により、ブロック制御部２１０が未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。そして、読み込み処理部２２１は確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックにデータとともに記録する。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、半導体記憶素子以外の記憶領域に記録してもよい。
【０１５８】
ステップＳ２０９では、平準化処理を行なう場合は、さらに、未割当ブロックの更新処理を行ったため、読み込み処理部２２１からの要求によりブロック制御部２１０がその未割当ブロックの平準化情報を更新する。
【０１５９】
ステップＳ２１０では、読み込み処理部２２１からの要求により付け替え部３３が、復元ブロックと、訂正不能ブロックと、の付け替え処理を行う。これにより、読み込み処理部２２１等が、訂正不能ブロックにアクセスするのではなく、復元ブロックにアクセスするようになる。このため、誤り訂正不能となったことにより失われた冗長性が再度もたらされることになる。
【０１６０】
なお、誤りが発生するブロックは、半導体記憶素子自体が故障するブロックに限らない。例えば、記録したデータが壊れただけであり、再度消去と書き込み処理を行うことで、そのブロックの使用を継続できる場合がある。このため、誤りが発生したブロックは未割当ブロックとして回収しても良い。
【０１６１】
なお、復元前のブロックの誤りの発生度合いを付け替え部３３に通知してもよい。これにより、誤りの度合いによっては、復元前ブロックの状態を「誤り多発状態」というブロック状態に設定し、そのブロックを、以降使用しないように制御することができる。
【０１６２】
ステップＳ２１１では、読み込み処理部２２１は、復元したデータを、読み込み要求元に返却し、処理を終了する。なお、復元したデータを読み込み要求元に返却する処理は、ステップＳ２０９又はステップＳ２１０より前に実行してもよい。これにより、読み込み要求元は、読み込み要求に続く処理を、より早く再開することができる。
【０１６３】
ステップ２１２では、読み込み処理部２２１は、エラーを示す値を読み込み要求元に返却する。なお、アドレステーブル１１に、読み込みエラーであるという情報を別途付加し、さらに、そのアドレス領域に対する以降の読み込み要求の際には、ステップＳ２０１以降の処理を行うことなく、読み込みエラーを返却するようにしてもよい。これにより、処理量が削減できる。
【０１６４】
（パリティ生成処理）
図１２は、パリティ生成処理を説明する図である。図１２のパリティ生成処理は、パリティ生成パトロール部２４０により行われる。パリティ生成パトロール部２４０は、パリティグループを構成していないアドレス割当ブロックの個数が所定の閾値を上回った場合に、パリティ生成処理を行う。なお、パリティ生成処理は、パリティグループを構成していないアドレス割当ブロックの個数が所定の閾値を上回ったときに限らず、定期的に処理を行うようにしてもよいし、コントローラ２００ａの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行うようにしても良い。
【０１６５】
図１２のステップＳ３０１では、パリティ生成パトロール部２４０は、並び順情報管理部２７０が管理する並び順情報とブロック制御部２１０が管理するブロックの状態情報とパリティ制御部２３０が管理するパリティグループの情報とに基づいて、更新順序が古い順にパリティグループを構成していないアドレス割当ブロックを集める。
【０１６６】
ステップＳ３０２では、パリティ生成パトロール部２４０が、所定の個数のアドレス割当ブロックが集められたか否かを判定する。集められたブロックの個数が所定の個数有る場合には、ステップＳ３０３に進み、集められたブロックの個数が所定の個数無い場合には、ステップＳ３０４に進む。
【０１６７】
ステップＳ３０３では、パリティ生成パトロール部２４０、ブロック制御部２１０、パリティ制御部２３０、誤り検出情報生成部６２、及び、誤り訂正情報生成部６４が、新たなパリティグループを生成する。まず、パリティ生成部３１が、集められたブロックに記録されたデータからパリティデータを生成する。続いて、生成したパリティデータから、パリティ生成パトロール部２４０からの要求により誤り検出情報生成部６２が、誤り検出情報を生成し、パリティ生成パトロール部２４０からの要求により誤り訂正情報生成部６４が、誤り訂正情報を生成する。これにより、パリティ割当ブロックに書き込む内容を準備する。
【０１６８】
さらに、ブロック制御部２１０が未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。パリティ生成パトロール部２４０は、確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報及び誤り訂正情報とデータとを、一のブロックに記録する。
【０１６９】
なお、誤り検出情報及び誤り訂正情報を書き込むブロックと、データを書き込むブロックとを異ならせてもよく、誤り検出情報及び誤り訂正情報を所定のブロックに記録させてもよい。またさらに、誤り検出情報及び誤り訂正情報を半導体記憶素子群９とは別の記憶領域に記録してもよい。
【０１７０】
パリティ生成パトロール部２４０からの要求によりブロック制御部２１０が、さらに、この未割当ブロックの状態の情報を、パリティ割当状態とする。平準化処理を行なう場合は、パリティ生成パトロール部２４０からの要求によりブロック制御部２１０が、さらに、この未割当ブロックの更新処理を行ったことによる未割当ブロックの平準化情報の更新を行う。
【０１７１】
パリティ生成パトロール部２４０からの要求によりパリティ制御部２３０が、集められたブロックと、パリティ割当ブロックとを、新しいパリティグループとして、パリティグループの登録処理を行う。
【０１７２】
ステップＳ３０４では、パリティ生成パトロール部２４０は並び順において次のパリティグループを解体する。これにより、次の繰り返し処理におけるステップＳ３０１で、アドレス割当ブロックが所定の個数集まることが期待できる。
【０１７３】
より詳細には、まず、並び順情報管理部２７０が管理する並び順情報に従い、パリティ生成パトロール部２４０からパリティ制御部２３０とブロック制御部２１０とに対して要求することにより、並び順として次の順序のパリティグループの登録解除処理が行われる。より詳細には、パリティ生成パトロール部２４０からの要求により、パリティ制御部２３０とブロック制御部２１０とが、そのパリティグループを構成しているパリティブロック群の状態を、未割当状態に変更し、結果として未割当ブロックとして回収する。さらに、パリティ生成パトロール部２４０からの要求によりパリティ制御部２３０が、そのパリティグループの登録解除を行う。これによりパリティグループの解体処理が実現できる。
【０１７４】
ステップＳ３０３及びステップＳ３０４の処理の後、ステップＳ３０１に戻り、並び順における全てのブロックに係る処理が終了するまで、処理を繰り返す。繰り返し処理は、並び順情報の終端に達したら終了する。
【０１７５】
なお、終端に達したとき、アドレス割当ブロックが所定の個数集められていない場合には、それらのアドレス割当ブロックによるパリティグループは構成しない。これらのアドレス割当ブロックは、以降のパリティ生成処理が実行された際に、並び順によっては、パリティグループを構成するようになる。
【０１７６】
なお、並び順に所定の閾値を設けておいて、所定の閾値を超える、更新頻度が高いアドレス割当ブロックからは、パリティグループを構成しないようにしてもよい。なお、更新頻度が高いアドレス割当ブロックとは、アドレス割当ブロックとなってからの期間が短いアドレス割当ブロックを意味する。
【０１７７】
より詳細には、例えば、更新頻度において上位の所定の割合のアドレス割当ブロックは、パリティグループを構成しなくてもよい。所定の割合とは、例えば、１０％等の値が利用できる。これにより、パリティ生成回数をさらに削減することができ、処理パフォーマンスを向上することができるとともに、パリティデータの書き込みに伴う、半導体記憶素子群９の寿命の減少を低減することができる。
【０１７８】
（パリティ生成処理のバリエーション）
以上説明したパリティ生成処理では、並び順情報が動的に変更される。これは、ブロックの並び順情報の導入の際の、更新頻度と耐障害性に関する考察結果によるものである。
【０１７９】
並び順情報を動的に変更させてパリティグループを構成するのではなく、静的な情報、例えば、アドレス領域番号順等にしたがってパリティグループを構成してもよい。静的な情報に従わせる場合は、動的に変更される並び順情報に従ってパリティグループを構成する場合に比して、耐障害性は低下する。一方で、静的な情報に従ってパリティグループを構成させると、図１２のステップＳ３０２の判定の際に、アドレス割当ブロックが、必ず所定の個数集まるようになるという利点がある。
【０１８０】
（パリティ生成処理例）
図１３から図１６は、パリティグループを生成する処理の際のアドレステーブル１１等の例を説明する図である。
【０１８１】
図１３は、並び順がアドレス領域毎のデータ更新順序の場合のアドレステーブル１１等の例を説明する図である。より詳細には、図９の状態において、アドレス領域０に対して書き込み要求が発生し、図１０に示す状態になった後、パリティグループが生成される場合のアドレステーブル１１等の例である。図１３（ａ）は、アドレステーブル１１、（ｂ）は、ブロックテーブル１２、（ｃ）は、パリティ対応リスト３９である。ここでは、説明に最低限必要な情報のみを記載している。また、図１３（ｄ）は、生成されるパリティグループを説明する模式図である。
【０１８２】
図１０に示す状態において、パリティ生成パトロール部２４０が、アドレス割当ブロックのブロック１及び２を集めるものの、アドレス割当ブロックが所定の個数、ここでは３個が集まらない。そこで、パリティ制御部２３０が、並び順情報に従って、次のパリティグループ１を解体する。これにより、ブロック９が未割当ブロックとなり、図１０（ｃ）に示すパリティ対応リスト３９から、グループ番号１が削除される。
【０１８３】
さらにパリティ生成パトロール部２４０が、アドレス割当ブロックであるブロック３を集めることにより、アドレス割当ブロックを３個集めることができる。これにより、パリティグループを構成することができる。この処理により、たとえばブロック１１がパリティ割当ブロックとなり、パリティグループ２がパリティ対応リスト３９に登録される。
【０１８４】
次に、アドレス割当ブロックであるブロック４、５、及び、６を集めることにより、アドレス割当ブロックを３個集めることができ、パリティグループを構成することができる。この処理により、たとえばブロック１２がパリティ割当ブロックとなり、パリティグループ３がパリティ対応リスト３９に登録される。
【０１８５】
さらに、パリティ生成パトロール部２４０が、アドレス割当ブロックであるブロック７及び１０を集めるものの、アドレス割当ブロックが所定の個数集まらない。この時点で、並び順の終端に達し、パリティ生成処理を終了する。
以上の処理により、図１３に示すテーブル等が実現される。
【０１８６】
図１４ないし図１６は、静的な情報に従ってパリティグループを構成する場合のアドレステーブル１１等の例を説明する図である。図１４は、書き込み処理を開始する処理を開始する前の状態を説明する図であり、図１５は、書き込み処理が行われた後の状態を説明する図であり、図１６は、パリティグループが生成された後の状態を説明する図である。
なお、図には更新された箇所に関係する箇所のみを示している。
【０１８７】
図１４ないし図１６において、（ａ）は、アドレステーブル１１、（ｂ）は、ブロックテーブル１２、（ｃ）は、パリティ対応リスト３９である。また、（ｄ）は、（ａ）から（ｃ）に対応する状態を示す模式図である。
【０１８８】
図１４−2（ｄ）に示す状態の場合に、アドレス領域１、６、及び、７に書き込み処理を行うと、図１５（ｄ）に示す状態となる。この書き込み処理において、パリティグループ０及び２が解体される。また、たとえばブロック１６、１７、１８が、新たにアドレス割当ブロックとなる。さらに、パリティ生成処理を行うと、図１６−２（ｄ）に示す状態となる。
【０１８９】
動的に変更される並び順情報にしたがってパリティグループを構成する場合と異なり、アドレス割当ブロックは、必ず所定の個数集まる。図１５及び図１６の例では、アドレス割当ブロック０、１６、２から、パリティグループ４が、アドレス割当ブロック１７、１８、８から、パリティグループ５がそれぞれ生成される。
【０１９０】
（読み込みパトロール処理）
図１７は、読み込みパトロール処理を説明する図である。図１７の処理は、図１１の読み込み処理と、データを読み込み要求元に返却しない点が異なる。より詳細には、ステップＳ４０１において読み込み対象となるブロックは、アドレス割当ブロックに限定しなくてもよい。すべての使用中のブロック、すなわち、アドレス割当ブロック、パリティ割当ブロックを読み込み対象にしてよい。
【０１９１】
また、図１１におけるステップＳ２０３、ステップＳ２０５、及び、ステップＳ２１１の処理が行われない。また、図１１におけるステップＳ２１２の処理に代えて、ステップＳ４１２では、読み込みパトロール部２４１が、アドレステーブル１１に、読み込み処理を行ったアドレス領域が、エラーであることを記録する。これにより、そのアドレス領域に対する以降の読み込み処理において、読み込みエラーを返却することができるようになる。なお、エラーであることをホスト装置に通知するようなプロトコルを別途用意し、ホスト装置に通知するようにしてもよい。
【０１９２】
図１７におけるその他のステップは、図１１のステップと同様であるので、ここでは説明を省略する。
【０１９３】
なお、読み込みパトロール部２４１は、読み込み処理時の誤りの発生頻度が所定の閾値を上回ったときに、読み込みパトロール処理を行う。なお、読み込み処理時の誤りの発生頻度が所定の閾値を上回ったときに限らず、定期的に処理を行うようにしてもよく、コントローラ２００ａの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行うようにしても良い。
【０１９４】
読み込みパトロール処理を行うことで、実際の読み込み処理に先立って、誤り訂正不能となっていたブロックの復元処理が可能になる。これにより、耐障害性が高まるとともに、実際の読み込み処理時の処理量を削減することができる。
【０１９５】
以上の構成をとることで、データを復元することができ、耐障害性を高めることができる。また、書き込み要求を受ける度にパリティデータを生成および書き込みしないため、書き込み処理の速度等の性能低下を低減し、パリティデータをブロックに書き込む回数を削減して寿命の減少を低減することができる。
【０１９６】
なお、第１の実施形態の受付部２９は第２の実施形態のホストインタフェース部２９１と書き込み処理部２２０と読み込み処理部２２１の一部が対応する。第１の実施形態の第１の記録部２８ａは第２の実施形態のブロック制御部２１０の一部が対応する。第１の実施形態の第２の記録部２２ｂは第２の実施形態のパリティ制御部２３０の一部が対応する。第１の実施形態の第１の書き込み手段２２ａは第２の実施形態の書き込み処理部２２０の一部と半導体記憶素子インタフェース部２９２とブロック制御部２１０の一部とパリティ制御部２３０の一部が対応する。第１の実施形態の第２の書き込み手段２２ｂは第２の実施形態のパリティ生成パトロール部２４０の一部とパリティ制御部２３０の一部と半導体記憶素子インタフェース部２９２とブロック制御部２１０の一部とが対応する。
【０１９７】
〔第３の実施の形態〕
本実施の形態では、ホスト装置からの書き込み要求を処理する際に、ホスト装置が認識できる論理的なアドレス情報である論理アドレス情報と、半導体記憶素子群９に記録されたデータの物理的なアドレス情報である物理アドレス情報との、対応付けを更新し、さらに、予めまたは動的に定められたタイミングで、論理アドレス情報と物理アドレス情報との対応付けを更新する。
【０１９８】
図１８は、本実施の形態に係る半導体記憶装置１が有するコントローラ２００ｂの機能構成の例を示す図である。図１８は、図３に示すコントローラ２００ａの構成に加え、動的更新部２９９を有する。ここでは、第２の実施形態と異なる部分のみ説明する。なお、本実施の形態では、第２の実施の形態に動的更新部２９９を付加する実施の形態を説明しているが、以降に説明するその他の実施の形態に動的更新部２９９を付加するように適宜読み替えることが可能である。
【０１９９】
図１８に示す各部のうち、誤り訂正制御部２６０ｂ、パリティ制御部２３０ｂ、ブロック制御部２１０ｂ、並び順情報管理部２７０ｂ、半導体記憶素子インタフェース部２９２ｂについては、動的更新部２９９と連携し、処理を行う点が異なるだけで、連携処理の内容自体は図３のものと同一であるため、説明は省略する。
【０２００】
動的更新部２９９は、予めまたは動的に定められたタイミングで、論理アドレス情報と物理アドレス情報との対応付けを更新する。
【０２０１】
例えば、アドレス領域Ａ１とブロック番号Ｂ１とが対応付けられており、アドレス領域Ａ２とブロック番号Ｂ２とが対応付けられている場合に、その対応付けを入れ替えて更新するときには、動的更新部２９９は、次の処理をする。
【０２０２】
動的更新部２９９は、ブロック番号Ｂ１が示すブロックに記録されているデータを、ブロック番号Ｂ２が示すブロックに記録（コピー）し、さらに、ブロック番号Ｂ２が示すブロックに記録されているデータを、ブロック番号Ｂ１が示すブロックに記録（コピー）する。たとえば、上記コピー処理は、キャッシュメモリ２９３（一時記憶領域）を利用し、ブロック番号Ｂ１が示すブロックに記録されているデータをキャッシュメモリ２９３にコピーし、ブロック番号Ｂ２が示すブロックに記録されているデータを、ブロック番号Ｂ１が示すブロックに記録（コピー）し、キャッシュメモリ２９３にコピーしたデータをブロック番号Ｂ２が示すブロックに記録（コピー）することで、実現できる。
【０２０３】
また、動的更新部２９９は、半導体記憶素子群に記録されたデータに基づいてパリティが生成されているか否かを表す情報であるパリティ生成有無情報については、パリティ対応リスト３９において、ブロック番号Ｂ１が対応付けられている情報と、ブロック番号Ｂ２が対応付けられている情報と、を入れ替える。
【０２０４】
これは、入れ替え対象ブロックに記憶されているデータには変更がないため、入れ替え対象ブロックに記憶されているデータがパリティデータ生成の基礎となっている場合であっても、パリティデータを作り直す必要はないからである。したがって、動的更新部２９９は、パリティ対応リスト３９において、ブロック番号Ｂ１が対応付けられている情報と、ブロック番号Ｂ２が対応付けられている情報と、を入れ替えるだけで良い。なお、入れ替え対象ブロックがパリティデータを記憶している場合でも同様である。
【０２０５】
また、動的更新部２９９は、アドレス領域Ａ１に対応付けられているブロック番号（Ｂ１）と、アドレス領域Ａ２に対応付けられているブロック番号（Ｂ２）と、の対応付けを入れ替える。また、動的更新部２９９は、ブロック番号（Ｂ１）のブロック状態と、ブロック番号（Ｂ２）のブロック状態を入れ替える。
【０２０６】
なお、入れ替え対象ブロックは、アドレス領域に対応付けられているブロック（アドレス割当ブロック）に限られない。例えば、どちらか一方が未割当ブロックである場合は、未割当ブロックに記録されていたデータは意味を持たないので、上記データ内容のコピー処理のうち、コピー元データが未割当ブロックに記録されているもののコピー処理は、省略することができる。これにより、ブロックの消去／書き込み回数を削減することができるため、処理速度を向上し、また、半導体記憶装置の寿命の低下を低減することができる。
【０２０７】
なお、上記処理では、新たにデータを書き込んでアドレス領域のマッピングを変更しているため、動的更新部２９９は、並び順情報管理部２７０ｂが管理する並び順情報を更新させても良い。並び順情報を更新することで、次回の書き込み等の処理の際に、より好適な情報が得られる。
【０２０８】
より詳細には、動的更新部２９９は、ブロック番号Ｂ１に基づいて、半導体記憶素子インタフェース部２９２ｂを介して半導体記憶素子群９から当該ブロック番号により特定されるブロックのデータと特定されるブロックのデータに対応付けて記憶された誤り検出情報と特定されるブロックのデータに対応付けて記憶された誤り訂正情報を読み込む。なお、誤り検出情報と誤り訂正情報との少なくとも一方が書き込まれるブロックとは別のブロックなどに記憶された場合は、誤り訂正制御部２６０ｂの誤り検出・訂正情報管理部６１に読み込むべきデータと対応付けられた誤り検出情報と誤り訂正情報の記憶されている場所を問い合わせて、誤り検出情報と誤り訂正情報を読み込む。読み込んだデータと、誤り検出情報と、誤り訂正情報は、キャッシュメモリ２９３に保存する。
【０２０９】
続いて、動的更新部２９９は、ブロック番号Ｂ２に基づいて、半導体記憶素子インタフェース部２９２ｂを介して半導体記憶素子群９から当該ブロック番号により特定されるブロックのデータと特定されるブロックのデータに対応付けて記憶された誤り検出情報と特定されるブロックのデータに対応付けて記憶された誤り訂正情報を読み込む。なお、誤り検出情報と誤り訂正情報の少なくとも一方が書き込まれるブロックとは別のブロックなどに記憶された場合は、誤り訂正制御部２６０ｂの誤り検出・訂正情報管理部６１に読み込むべきデータと対応付けられた誤り検出情報と誤り訂正情報の記憶されている場所を問い合わせて、誤り検出情報と誤り訂正情報を読み込む。
【０２１０】
そして、動的更新部２９９は、半導体記憶素子インタフェース部２９２ｂを介して半導体記憶素子群９のブロック番号Ｂ１で特定されるブロックのデータを消去する。そして、動的更新部２９９は、ブロック番号Ｂ１で特定されるブロックに、上記ブロック番号Ｂ２で特定されるブロックから読み込んだデータ、および誤り検出情報、および誤り訂正情報を、半導体記憶素子インタフェース部２９２ｂを介して半導体記憶素子群９に書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
【０２１１】
また、上記ブロック番号Ｂ２で特定されるブロックから読み込んだデータの誤りを訂正または復元するために、図１７の読み込みパトロール処理におけるステップＳ４０２からステップＳ４０７の処理に相当する処理を行い、誤りを訂正したデータまたは誤りを復元したデータを書き込み対象のデータとしてよい。
【０２１２】
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部２１０ｂに当該ブロックの平準化情報の更新の要求を行う。
【０２１３】
さらに、動的更新部２９９は、半導体記憶素子インタフェース部２９２ｂを介して半導体記憶素子群９のブロック番号Ｂ２で特定されるブロックのデータを消去する。そして、動的更新部２９９は、ブロック番号Ｂ２で特定されるブロックに、上記キャッシュメモリ２９３に保存したデータを、半導体記憶素子インタフェース部２９２ｂを介して半導体記憶素子群９に書き込む。ここで書き込まれるデータは、例えば、上記ブロック番号Ｂ１で特定されるブロックから読み込んだデータ、誤り検出情報、及び、誤り訂正情報である。
【０２１４】
なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
また、上記ブロック番号Ｂ１で特定されるブロックから読み込んだデータの誤りを訂正または復元するために、図１７の読み込みパトロール処理におけるステップＳ４０２からステップＳ４０７の処理に相当する処理を行い、誤りを訂正したデータまたは誤りを復元したデータを書き込み対象のデータとしてよい。
【０２１５】
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部２１０ｂに当該ブロックの平準化情報の更新の要求を行う。
【０２１６】
なお、入れ替え対象ブロックは、アドレス領域に対応付けられているブロック（アドレス割当ブロック）に限られない。例えば、どちらか一方が未割当ブロックである場合は、未割当ブロックに記録されていたデータは意味を持たないものであるので、上記データ内容のコピー処理のうち、コピー元データが未割当ブロックに記録されているもののコピー処理は、省略することができる。これにより、ブロックの消去／書き込み回数を削減することができるため、処理速度を向上し、また、半導体記憶装置の寿命の低下を低減することができる。
【０２１７】
また、動的更新部２９９は、ブロック番号Ｂ１またはブロック番号Ｂ２が、パリティグループを構成しているか否かを、パリティ制御部２３０ｂに問い合わせる。パリティグループを構成していた場合は、動的更新部２９９は、当該パリティグループの削除要求をパリティ制御部２３０ｂに行う。続いて、動的更新部２９９は、削除したパリティグループの当該ブロック番号の情報を、もう一方のブロック番号の情報で更新したパリティグループ情報のパリティグループ登録要求を、パリティ制御部２３０ｂに行う。
【０２１８】
なお、これらの、パリティグループ削除要求およびパリティグループ登録要求を発行する一連の処理は、ブロック番号Ｂ１およびブロック番号Ｂ２について、整合性を保ったまま、他のブロックに係る情報等が変更されることなく、入れ替える必要がある。
【０２１９】
また、動的更新部２９９は、ブロック番号Ｂ１またはブロック番号Ｂ２が、アドレステーブル１１に登録されていた場合は、アドレステーブル１１の当該ブロック番号の削除をブロック制御部２１０ｂに要求する。動的更新部２９９は、ブロック制御部２１０ｂが削除したブロック番号が対応付けられていたアドレス領域と、もう一方のブロック番号とを対応付ける要求をブロック制御部２１０ｂに行う。
【０２２０】
なお、これらの、ブロック番号削除要求およびブロック番号登録要求を発行する一連の処理は、ブロック番号Ｂ１およびブロック番号Ｂ２について、整合性を保ったまま、他のブロックに係る情報等が変更されることなく、入れ替える必要がある。
【０２２１】
なお、上記処理では、新たにデータを書き込んでアドレス領域のマッピングを変更しているため、動的更新部２９９は、並び順情報管理部２７０ｂが管理する並び順情報を更新しても良い。並び順情報を更新することで、次回の書き込み等の処理の際に、より好適な情報が得られる。
【０２２２】
動的更新部２９９は、さらに、ブロックテーブル１２において、ブロック番号Ｂ１のブロック状態を、ブロック番号Ｂ２のブロック状態に変更する要求をブロック制御部２１０ｂに行うとともに、ブロック番号Ｂ２のブロック状態を、ブロック番号Ｂ１のブロック状態に変更する要求をブロック制御部２１０ｂに行う。なお、前記２つのブロック状態変更要求を発行する一連の処理は、ブロック番号Ｂ１およびブロック番号Ｂ２について、整合性を保ったまま、他のブロックに係る情報等を変更することなく、入れ替える必要がある。
【０２２３】
以上の処理により、予め定められたタイミングまたは動的に定められたタイミングで、論理アドレス情報と物理アドレス情報との対応付けを更新することができる。
【０２２４】
〔第４の実施の形態〕
本実施の形態では、パリティ割当ブロックの数を、所定の条件に基づいて増減させる。平準化処理、すなわち、ウェアレベリングと呼ばれる処理では、データを書き込むときに、未割当ブロックにデータを書き込み、更新対象の古いデータが記録されているブロックを無効状態、すなわち、未割当状態にし、ブロックのマッピング情報を更新するという処理を行う。
【０２２５】
そのため、同一の平準化処理方法の下では、未割当ブロックの数が多いほど、１ブロックあたりの消去又は書き込み回数が減ることになり、半導体記憶装置の寿命が延びることになる。
【０２２６】
ここで、パリティ割当ブロックとして使用するブロック数を増やすと、冗長度が高くなり耐障害性は高まる。しかし、未割当ブロックの数は減り、ウェアレベリングによる寿命の長大化効果は低下する。一方、パリティ割当ブロックとして使用するブロック数を減らせば、冗長度が低くなり耐障害性は低下する。しかし、未割当ブロックの数が増え、ウェアレベリングによる寿命の長大化効果は高まる。
【０２２７】
そこで、例えば、データの読み込みエラーの発生度合いの増減や、読み込みエラーにおける誤り率の増減に応じて、パリティ割当ブロックとして使用するブロック数を増減するとよい。このように、耐障害性よりも寿命の長大化効果を重視する場合は、パリティ割当ブロックとして使用するブロック数を減らし、逆の場合は、パリティ割当ブロックとして使用するブロック数を増やすことで、必要な冗長度に応じた未割当ブロックの数を確保することが可能になる。
【０２２８】
（全体ブロック図）
図１９は、本実施の形態に係る半導体記憶装置１が有するコントローラ２００ｃの機能構成の例を示す図である。図１９のコントローラ２００ｃにおいて、図３のコントローラ２００ａと同一の機能及び作用を有する各部は、図３と同一の符号を付し、ここでは説明を省略する。
【０２２９】
図１９のコントローラ２００ｃは、ブロック数変更部２１５、ブロック群選択部２１６、誤り訂正制御部２６０ｃ、パリティ制御部２３０ｃ、ブロック制御部２１０ｃ、コマンド処理部２２４、キャッシュメモリ２９３、ホストインタフェース部２９１ｃ、及び、半導体記憶素子インタフェース部２９２ｃを有する。なお、図示しないが、動的更新部２９９を有していても良い。
【０２３０】
このうち、誤り訂正制御部２６０ｃ、パリティ制御部２３０ｃ、ブロック制御部２１０ｃ、ホストインタフェース部２９１ｃ、半導体記憶素子インタフェース部２９２ｃについては、コマンド処理部２２４またはブロック数変更部２１５またはブロック群選択部２１６と連携し、処理を行う点が異なるだけで、連携処理の内容自体は図３のものと同一であるため、説明は省略する。
【０２３１】
コマンド処理部２２４は、ホストインタフェース部２９１ｃを介して、ホスト装置からの書き込み要求や読み込み要求等のコマンドを受け付け、ブロック制御部２１０ｃ、パリティ制御部２３０ｃ、誤り訂正制御部２６０ｃ等と連携して、必要に応じてアドレス領域とブロック番号との対応付けであるマッピングの更新処理や、パリティグループの更新処理などを伴って、所定の処理を行う。
【０２３２】
本実施の形態では、たとえばパリティグループを構成しているデータブロックの数を増減させる手法や、パリティ生成方法を変更するなどの手法により、半導体記憶装置全体におけるパリティ割当ブロックの数を増減させることに着目しており、パリティグループがどのタイミングで構成あるいは解体されるかは問わない。
【０２３３】
つまり、コマンド処理部２２４が、図３のコントローラ２００ａに含まれる、書き込み処理部２２０、読み込み処理部２２１、その他のコマンド処理部２２３、復元可否判断部２５０、パリティ生成パトロール部２４０、読み込みパトロール部２４１、並び順情報管理部２７０等が有する機能を有し、第２の実施形態のように，書き込み処理においてパリティグループを解体し、パリティ生成パトロール処理においてパリティグループを構成(生成)する構成を採っても良い。また、書き込み処理において、要求されたデータの書き込みと共にパリティデータを更新し、パリティグループの情報を更新するような構成を採り、第２の実施形態におけるパリティ生成パトロール処理を不要とする構成を採っても良い。なお、以降に説明するその他の実施の形態にブロック数変更部２１５およびブロック群選択部２１６を付加するように適宜読み替えることが可能である。
【０２３４】
ブロック数変更部２１５は、必要とされる冗長度が変わった場合に、ブロック数変更処理を行う。なお、必要とされる冗長度が変わったときに限らず、定期的に処理を行うようにしてもよく、コントローラ２００ｃの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行うようにしても良い。
【０２３５】
より詳細には、ブロック数変更部２１５は、ブロック群選択部２１６に、ブロック数を変更した新たなパリティグループを構成するための、パリティの生成の基礎となるデータが記録されているブロックのブロック番号とパリティ生成方法を問い合わせる。ブロック数変更部２１５は、問い合わせの結果として、複数のブロック番号およびパリティ生成方法を受け取ると、当該ブロックがパリティグループを構成しているか否かをパリティ制御部２３０ｃに順番に問い合わせ、パリティグループを構成している場合は、当該パリティグループを解体する。より詳細には、ブロック数変更部２１５は、当該パリティグループを構成している全てのパリティブロックの状態を未割当状態に変更するように、ブロック制御部２１０ｃに依頼し、結果として、当該パリティグループを構成している全てのパリティブロックを未割り当てブロックとして回収する。また、ブロック数変更部２１５は、当該パリティグループの登録解除要求を、パリティ制御部２３０ｃに行う。
【０２３６】
また、ブロック数変更部２１５は、パリティ制御部２３０ｃに、当該ブロックに記録されているデータから当該パリティ生成方法に従ってパリティデータを生成する依頼を行う。ブロック数変更部２１５は、依頼の結果として、パリティデータを受け取ると、誤り訂正制御部２６０ｃに、当該パリティデータの誤り検出情報と誤り訂正情報の生成を依頼する。ブロック数変更部２１５は、依頼の結果として、誤り検出情報と誤り訂正情報を受け取ると、ブロック制御部２１０ｃに、未割当ブロックの取り出しを要求する。ブロック数変更部２１５は、ブロック制御部２１０ｃから書き込み先ブロックのブロック番号を受け付けると、半導体記憶素子インタフェース部２９２ｃを介して半導体記憶素子群９のブロック番号に対応するブロックのデータを消去し、書き込み要求されたデータと誤り検出情報と誤り訂正情報を書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部２１０ｃに当該ブロックの平準化情報の更新の要求を行う。
【０２３７】
ブロック数変更部２１５は、ブロック制御部２１０ｃに、当該の書き込んだブロックのブロック状態をパリティ割当状態に変更する要求を行う。また、パリティ制御部２３０ｃに、ブロック群選択部２１６から受け取ったブロック番号およびパリティ生成方法と、前記パリティ割当状態にしたブロック番号の情報を含むパリティグループ登録依頼を行う。
【０２３８】
ブロック数変更部２１５は、また、ブロック群選択部２１６によってブロック数変更対象と判定された、パリティの生成の基礎となるデータが記録されているブロックが属するパリティグループが存在している場合は、当該パリティグループを解体する上記処理を遅らせて、当該パリティグループを監視しておき、書き込み処理等によって監視していたパリティグループに属するブロックが更新されるなどの要因により、当該パリティグループのパリティを更新する必要性が生じたタイミングで、遅らせていたパリティグループ解体処理を実行し、ブロック数変更処理を実行してもよい。このようにすることで、パリティグループの生成回数を少なくとも１回省略できる。これにより、ブロックの消去回数や書き込み回数を削減することができるので、処理速度を向上し、また、半導体記憶装置の寿命の低減化を抑制することができる。
【０２３９】
また、ブロック数変更部２１５が、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
【０２４０】
ブロック群選択部２１６は、ブロック数変更部２１５から、ブロック数を変更した新たなパリティグループを構成するための，パリティの生成の基礎となるデータが記録されているブロックのブロック番号とパリティ生成方法の問い合わせを受ける。ブロック群選択部２１６は、パリティ制御部２３０ｃまたはブロック制御部２１０ｃなどに順番に問い合わせるなどして、所定の方法に基づいて、新たなパリティグループを構成するための、パリティグループ又はパリティグループを構成していないブロックを選択する。選択したパリティグループから、ブロック数を変更した新たなパリティグループを構成する方法は、例えば、以下の３つの方法がある。
【０２４１】
（Ｂ１）ひとつのパリティグループを、複数のパリティグループに分割する。
（Ｂ２）複数のパリティグループを、ひとつのパリティグループに統合する。
（Ｂ３）複数のパリティグループから、元のパリティグループとは構成ブロック数が異なるように、複数のパリティグループを生成する。
【０２４２】
また、パリティグループを構成していないブロックを、パリティの生成の基礎となるデータが記録されているブロックとして、上記３つの方法に組み合わせても良い。また、パリティグループを構成している、パリティの生成の基礎となるデータが記録されているブロックは同一のものを使用し、異なるパリティ生成方法を採用し、パリティデータを記録するブロックの数を変更するようにしてもよい。また、パリティの生成の基礎となるデータが記録されているブロックは同一のものではなく、上記３つの方法によるものと組み合わせても良いし、パリティグループを構成していないブロックを組み合わせてもよい。
【０２４３】
なお、ブロック数を変更した新たなパリティグループを構成する方法は上記に限らず、上記以外の適切な方法を採用しても良い。
【０２４４】
ブロック群選択部２１６は、上記選択結果をブロック数変更部２１５に回答する。
また、ブロック群選択部２１６が、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
【０２４５】
（ブロック数変更処理）
図２０は、ブロック数を変更する処理を説明するフロー図である。図２０の処理は、ブロック数変更部２１５及びブロック群選択部２１６により行われる。
【０２４６】
図２０のステップＳ５０１では、ブロック群選択部２１６が、ブロック数を変更する対象になる、１つ以上のパリティグループを選択する。また、パリティグループを構成していないブロックを、パリティの生成の基礎となるデータが記録されているブロックとして選択しても良い。
【０２４７】
ステップＳ５０２では、ブロック数変更部２１５が、選択したパリティグループの解体処理を行う。より詳細には、まず、ブロック数変更部２１５は、パリティ制御部２３０ｃと協力して、選択したパリティグループの登録解除処理を行う。続いて、ブロック数変更部２１５は、ブロック制御部２１０ｃと協力して、登録解除したパリティグループを構成していた、パリティ割当ブロックのブロック状態を、未割当状態に設定し、結果としてそのブロックを未割当ブロックとして回収する。
なお、ブロック数を変更した新たなパリティグループを構成するための，パリティの生成の基礎となるデータが記録されているブロックとして、パリティグループを構成していないブロックを選択した場合は、上記パリティグループの登録解除処理は不要である。
【０２４８】
ステップＳ５０３及びステップＳ５０４は、生成するパリティグループの数だけ繰り返す。ステップＳ５０３では、ブロック群選択部２１６が、ステップＳ５０２でパリティグループが解体されたことにより得られたデータブロック群の中から、新たなパリティグループを構成するデータブロック群（パリティの生成の基礎となるデータが記録されているブロック）を選択する。
【０２４９】
また、データブロック群の数を変更し、結果として必要となるパリティ割当ブロックの数を変更するのではなく、パリティ生成方法を変更し、必要となるパリティブロック群の数を変更するようにしてもよい。例えば、パリティ割当ブロックを２つ必要とするパリティ生成方法から、パリティ割当ブロックを１つ必要とするパリティ生成方法に変更してもよい。
【０２５０】
なお、上記を組み合わせて、たとえば、パリティグループを構築する際に、それぞれのパリティグループが、異なるブロック数で構築されるようにしてもよい。例えば、データブロック群の数が、５つ、４つ、３つであるようなパリティグループを混在させてパリティグループを構築してもよい。また例えば、上記を組み合わせて、異なるパリティ生成方法を採用し、必要なパリティブロック群の数が、２つ、１つであるようなパリティグループを混在させてパリティグループを構築してもよい。
【０２５１】
なお、ブロック数を変更した新たなパリティグループを構成する方法は上記に限らず、上記以外の適切な方法を採用しても良い。
【０２５２】
ステップＳ５０４では、ステップＳ５０３において選択されたデータブロック群から、選択されたパリティ生成方法に従って、パリティグループを構成する。より詳細には、まず、パリティ制御部２３０ｃが、選択したブロック群から、パリティデータを生成する。続いて、誤り訂正制御部２６０ｃが、生成したパリティデータから、誤り検出情報と誤り訂正情報を生成する。これにより、パリティ割当ブロックに書き込む内容を準備する。
【０２５３】
続いて、ブロック制御部２１０ｃが、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。そして、ブロック数変更部２１５が、半導体記憶素子インタフェース部２９２ｃを介して確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックにデータとともに記録するとしている。しかし、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよいし、半導体記憶素子以外の記憶領域に記録してもよい。
【０２５４】
また、ブロック数変更部２１５が、未割当ブロックの更新処理を行ったため、ブロック制御部２１０ｃが、その未割当ブロックの平準化情報を更新する。続いて、ブロック制御部２１０ｃが、その未割当ブロックの状態を、パリティ割当状態にする。
【０２５５】
続いて、パリティ制御部２３０ｃが、選択したブロック群と、パリティ割当ブロックを、新しいパリティグループとして、パリティグループ登録処理を行う。
【０２５６】
なお、ブロック数をパリティグループ毎に異なるように変更させる、以上の処理を続けていくと、パリティグループを構成するブロック数が、いわゆる局所最適値となり、全体としての最適値にならない場合がある。例えば、データブロック群の数が多いパリティグループとデータブロック群の数が少ないパリティグループとが、並び順では交互に存在するというような状況になる場合が考えられる。同様に、例えば、パリティブロック群の数が多いパリティグループとパリティブロック群の数が少ないパリティグループとが、並び順では交互に存在するというような状況になる場合が考えられる。
【０２５７】
このため、パリティグループを構成するデータブロック群の数あるいはパリティブロック群の数が、半導体記憶装置の全体において最適となるように、半導体記憶装置の全体に対するブロック数変更処理を、前記の処理とは独立に実行してもよい。
【０２５８】
（初回パリティ生成処理）
パリティグループの構築は、半導体記憶装置１の初期化処理時等に行う構成にしてもよい。
【０２５９】
なお、第１の実施形態の受付部２９は第４の実施形態のホストインタフェース部２９１ｃとコマンド処理部２２４の一部が対応する。第１の実施形態の第１の記録部２８ａは第４の実施形態のブロック制御部２１０ｃの一部が対応する。第１の実施形態の第２の記録部２８ｂは第４の実施形態のパリティ制御部２３０ｃの一部が対応する。第１の実施形態の第１の書き込み手段２２ａは第４の実施形態のコマンド処理部２２４の一部と半導体記憶素子インタフェース部２９２ｃとブロック制御部２１０ｃの一部とパリティ制御部２３０ｃの一部が対応する。第１の実施形態の第２の書き込み手段２２ｂは第４の実施形態のコマンド処理部２２４の一部とブロック数変更部２１５の一部とブロック群選択部２１６の一部とパリティ制御部２３０ｃの一部と半導体記憶素子インタフェース部２９２ｃとブロック制御部２１０ｃの一部とが対応する。
【０２６０】
〔第５の実施の形態〕
本実施の形態では、データを書き込む際に、更新対象となる古いデータが記録されているブロックをすぐに無効状態にしない。これにより、パリティの更新回数を抑えることができ、パリティ更新に伴う処理パフォーマンス低下の影響を抑えることが可能になり、また、パリティ更新に伴うブロックの消去・書き込み処理を削減することにより、半導体記憶装置の寿命の減少を低減することができる。
【０２６１】
本実施の形態において、半導体記憶素子群９が有するブロックは、少なくとも以下の４つの状態の何れか１つであることを表すブロック状態の情報と対応づけられる。
【０２６２】
（Ｃ１）アドレステーブル１１にブロック番号が設定されている（以下、この状態を「アドレス割当状態」という）。
（Ｃ２）アドレステーブル１１にブロック番号が設定されていないが、直前のアドレス割当状態の際に保持していたデータを保持している（以下、この状態を「更新前割当状態」という）。
（Ｃ３）冗長情報、すなわちパリティデータを保持するブロックとして使用されている(以下、この状態を「パリティ割当状態」という)。
（Ｃ４）上記（Ｃ１）ないし（Ｃ３）の何れの状態でもなく、未使用状態である(以下、この状態を「未割当状態」という)。
【０２６３】
なお、「アドレス割当状態のブロック」を、「アドレス割当ブロック」、「更新前割当状態のブロック」を、「更新前割当ブロック」、「パリティ割当状態のブロック」を、「パリティ割当ブロック」、「未割当状態のブロック」を「未割当ブロック」という。また、「アドレス割当ブロック」のうち、書き込み処理により「未割当ブロック」または「更新前割当ブロック」になるブロックの、書き込み処理前の状態を「更新前ブロック」ともいう。
【０２６４】
（コントローラブロック図）
図２１は、本実施の形態に係る半導体記憶装置１が有するコントローラ２００ｄの機能構成の例を説明する図である。本実施の形態に係る半導体記憶装置のコントローラ２００ｄは、第２の実施の形態におけるコントローラ２００ａと、同一の機能及び作用を有する各部を含む。コントローラ２００ｄは、さらに、コントローラ２００ａとは異なる機能及び作用を有する各部を含む。
【０２６５】
コントローラ２００ｄは、書き込み処理部２２０ｄ、読み込み処理部２２１、その他のコマンド処理部２２３、誤り訂正制御部２６０ｄ、パリティ制御部２３０ｄ、復元可否判断部２５０、更新前ブロック回収部２４２、読み込みパトロール部２４１ｄ、ブロック制御部２１０ｄ、並び順情報管理部２７０ｄ、キャッシュメモリ２９３、ホストインタフェース部２９１ｄ、及び、半導体記憶素子インタフェース部２９２ｄを有する。なお、コントローラ２００ｄは、図１８に示した動的更新部２９９を含んでいても良い。
【０２６６】
図２１において、図３のコントローラ２００ａと同一の機能及び作用を有する各部には、同一の符号を付し、ここでは説明を省略する。
【０２６７】
このうち、ホストインタフェース部２９１ｄ、半導体記憶素子インタフェース部２９２ｄ、誤り訂正制御部２６０ｄについては、書き込み処理部２２０ｄまたは更新前ブロック回収部２４２と連携し、処理を行う点が異なるだけで、連携処理の内容自体は図３のものと同一であるため、説明は省略する。
【０２６８】
また、ブロック制御部２１０ｄについては、ブロックの状態として、アドレス割当状態、パリティ割当状態、未割当状態に加えて、更新前割当状態が含まれる点と、並び順情報管理部２７０ｄと連携し、処理を行う点が異なるだけで、連携処理の内容自体は図３のものと同一であるため、詳細な説明は省略する。
【０２６９】
また、パリティ制御部２３０ｄについては、データブロックとなるブロックは、アドレス割当ブロックに加えて、更新前割当ブロックが含まれる点が異なるのみであるため、詳細な説明は省略する。
【０２７０】
また、読み込みパトロール部２４１ｄについては、読み込み対象となる未割当状態ではないブロックには、アドレス割当ブロックやパリティ割当ブロックに加えて、更新前割当ブロックが含まれる点が異なるのみであるため、詳細な説明は省略する。
【０２７１】
書き込み処理部２２０ｄは、書き込み要求に基づいて、ブロックへのデータの書き込みを行う。書き込み処理部２２０ｄは、また、書き込み処理の際に、新たに更新前ブロックとなるブロックを未割当ブロックとしてすぐには回収しない。より詳細には、書き込み処理部２２０ｄは、書き込み要求をホスト装置からホストインタフェース部２９１ｄを介して受け付ける。
【０２７２】
書き込み処理部２２０ｄは、書き込むべきデータから誤り訂正制御部２６０ｄの誤り検出情報生成部６２に誤り検出情報を生成することを要求し、要求に対応して誤り訂正制御部２６０ｄの誤り検出情報生成部６２で生成された誤り検出情報を受け取る。書き込み処理部２２０ｄは、また、書き込むべきデータから誤り訂正制御部２６０ｄの誤り訂正情報生成部６４に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正制御部２６０ｄの誤り訂正情報生成部６４で生成された誤り訂正情報を受け取る。
【０２７３】
書き込み処理部２２０ｄは、ブロック制御部２１０ｄに書き込み先となるブロックを問い合わせる（つまり、未割当ブロックの取り出しを要求する）。
【０２７４】
書き込み処理部２２０ｄは、ブロック制御部２１０ｄから書き込み先ブロックのブロック番号を受け付けると、半導体記憶素子インタフェース部２９２ｄを介して半導体記憶素子群９のブロック番号に対応するブロックのデータを消去し、書き込み要求されたデータと誤り検出情報と誤り訂正情報を書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
【０２７５】
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部２１０ｄに当該ブロックの平準化情報の更新の要求を行う。
【０２７６】
書き込み処理部２２０ｄは、書き込み要求に含まれるアドレス領域のマッピングを上記処理により書き込み要求されたデータを書き込んだブロックに変更する。より詳細には、書き込み処理部２２０ｄは、書き込み要求に含まれるアドレス領域に対応付けられていたブロック（更新前ブロック）のブロック番号を、ブロック制御部に問い合わせ、更新前ブロックのブロック番号の削除要求をブロック制御部２１０ｄに行う。また、上記処理により書き込み要求されたデータを書き込んだブロックのブロック番号を、書き込み要求に含まれるアドレス領域に対応付ける要求をブロック制御部２１０ｄに行う。
【０２７７】
また、書き込み処理部２２０ｄは、上記更新前ブロックの状態を、更新前割当状態に、新たに書き込んだ未割当ブロックの状態を、アドレス割当状態に変更する要求をブロック制御部２１０ｄに行い、ブロックの状態を更新する。
【０２７８】
アドレステーブル１１が更新されたことに伴い、書き込み処理部２２０ｄは、並び順情報管理部２７０ｄにアドレス領域情報テーブルの中で、更新されたアドレス領域について更新を要求する通知であるアドレス領域の更新通知を送ると共に、更新前割当ブロックとなったブロックのブロック番号の通知を、並び順情報管理部２７０ｄに送る。更新通知に含まれる情報としては、各アドレス領域が更新された旨の情報や各アドレス領域が更新された時期の情報がある。これらの情報が並び順情報管理部２７０ｄに送られると、並び順情報管理部２７０ｄが管理する情報として必要な各アドレス領域が更新された回数や更新された順序に加工する。
【０２７９】
書き込み処理部２２０ｄは、さらに、上記更新前割当状態にしたブロック（更新前割当ブロック）が、パリティグループを構成していたかをパリティ制御部２３０ｄに問い合わせる。書き込み処理部２２０ｄは、パリティ制御部２３０ｄから、更新前割当ブロックがパリティグループに属していない旨の回答を受けると、ブロック制御部２１０ｄに、当該更新前割当ブロックのブロック状態を未割当状態に変更する要求を行い、結果として当該更新前割当ブロックを未割り当てブロックとして回収する。
【０２８０】
書き込み処理部２２０ｄは、パリティ制御部２３０ｄから、更新前割当ブロックがパリティグループに属している旨の回答を受けると、さらに、パリティ制御部２３０ｄに対して、当該パリティグループのデータブロック群のブロック番号を問い合わせる。そして、書き込み処理部２２０ｄは、ブロック制御部２１０ｄに、該ブロックが更新前割当ブロックであるかを問い合わせる。書き込み処理部２２０ｄは、データブロック群が全て更新前割当ブロックによって構成されていた場合、当該パリティグループを構成している全てのブロックの状態を未割当状態に変更するように、ブロック制御部２１０ｄに要求すると共に、当該パリティグループの登録解除要求をパリティ制御部２３０ｄに要求し、結果として当該パリティグループを構成している全てのブロックを未割当ブロックとして回収する。
【０２８１】
また、書き込み処理部２２０ｄは、ブロック制御部２１０ｄに順番に問い合わせて、アドレス割当ブロックのうち、パリティグループを構成していないブロックを集める。集めたブロックの数が所定の個数に達した場合、書き込み処理部２２０ｄは、パリティ制御部２３０ｄのパリティ生成部３１に対して、集めたブロックに記録されているデータから、パリティデータを生成することを要求する。書き込み処理部２２０ｄは、パリティ制御部２３０ｄのパリティ生成部３１から、生成されたパリティデータを受け取ると、該パリティデータから誤り訂正制御部２６０ｄの誤り検出情報生成部６２に誤り検出情報を生成することを要求し、要求に対応して誤り訂正制御部２６０ｄの誤り検出情報生成部６２で生成された誤り検出情報を受け取る。書き込み処理部２２０ｄは、また、該パリティデータから誤り訂正制御部２６０ｄの誤り訂正情報生成部６４に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正制御部２６０ｄの誤り訂正情報生成部６４で生成された誤り訂正情報を受け取る。
【０２８２】
書き込み処理部２２０ｄは、ブロック制御部２１０ｄに書き込み先となるブロックを問い合わせる（つまり、未割当ブロックの取り出しを要求する）。
【０２８３】
書き込み処理部２２０ｄは、ブロック制御部２１０ｄから書き込み先ブロックのブロック番号を受け付けると、半導体記憶素子インタフェース部２９２ｄを介して半導体記憶素子群９のブロック番号に対応するブロックのデータを消去し、該パリティデータと誤り検出情報と誤り訂正情報を書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
【０２８４】
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部２１０ｄに当該ブロックの平準化情報の更新の要求を行う。
【０２８５】
書き込み処理部２２０ｄは、ブロック制御部２１０ｄに、書き込んだブロックのブロック状態をパリティ割当状態に更新する更新要求を送る。
【０２８６】
書き込み処理部２２０ｄは、収集したブロックと、書き込んだブロックとからなるパリティグループの登録をパリティ制御部２３０ｄに要求する。
【０２８７】
また、書き込み処理部２２０ｄが、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
【０２８８】
以上のように、書き込み処理部２２０ｄが、書き込み処理の際に、新たに更新前ブロックとなるブロックを未割当ブロックとして回収せず、パリティグループの解体を行わないことにより、そのパリティグループに属するアドレス割当ブロックが保持するデータに対する耐障害性を実現する。なお、「回収」又は「未割当ブロックとして回収する」とは、他の状態のブロックのブロック状態の情報を「未割当状態に変更する」ことをいう。
【０２８９】
更新前ブロック回収部２４２は、更新前割当ブロックが所定の個数たまった場合に、それらの更新前割当ブロックを未割当状態に変更する。
【０２９０】
更新前ブロック回収部２４２は、また、所定の時間間隔により、更新前割当ブロックの回収を行ってよい。更新前ブロック回収部２４２は、更新前割当ブロック又は未割当ブロック等が所定の個数又は所定の割合になった場合に、更新前割当ブロックを回収してもよい。また、コントローラ２００ｄの処理負荷が所定の閾値を下回ったときに処理を行うようにしても良い。そのほか、予めまたは動的に定められたタイミングで処理を行なうようにしても良い。
【０２９１】
より詳細には、更新前ブロック回収部２４２は、並び順序情報管理部２７０ｄに、並び順情報にしたがって、アドレス領域またはブロック番号の参照要求を順番に送る。そして、要求に対応したアドレス領域またはブロック番号の情報を並び順序情報管理部２７０ｄから受け取る。このうち、更新前ブロック回収部２４２は、受け取った順番でアドレス領域の情報を受け取った場合は、該アドレス領域に対応するブロック番号をブロック制御部２１０ｄに問い合わせ、ブロック制御部２１０ｄからブロック番号を受け取る。
【０２９２】
更新前ブロック回収部２４２は、並び順情報管理部２７０ｄまたはブロック制御部２１０ｄからブロック番号を受け取った順番で、パリティ制御部２３０ｄに受け取ったブロック番号のブロックが構成しているパリティグループの情報を問い合わせる。
【０２９３】
更新前ブロック回収部２４２は、パリティ制御部２３０ｄから受け取ったパリティグループを解体し、更新前割当ブロックと、パリティ割当ブロックを未割り当てブロックとして回収する。より詳細には、更新前ブロック回収部２４２は、パリティ制御部２３０ｄに、該パリティグループの登録解除を要求する。そして、更新前ブロック回収部２４２は、ブロック制御部２１０ｄに、該パリティグループを構成している更新前割当ブロックと、パリティ割当ブロックのブロック状態を、未割当状態に設定する要求を行い、結果として未割り当てブロックとして回収する。
【０２９４】
更新前ブロック回収部２４２は、該パリティグループを構成していた、アドレス割当ブロックを、パリティ生成の対象として収集する。
【０２９５】
そして、更新前ブロック回収部２４２は、該パリティ生成対象ブロックを所定数収集すると、パリティ制御部２３０ｄのパリティ生成部３１にその所定数のブロックに記録されたデータに基づいてパリティデータの生成を要求し、パリティ制御部２３０ｄのパリティ生成部３１で生成されたパリティデータを受け取る。更新前ブロック回収部２４２は、誤り訂正制御部２６０ｄの誤り検出情報生成部６２に、パリティデータから誤り検出情報を生成することを要求し、誤り訂正制御部２６０ｄの誤り検出情報生成部６２で生成された誤り検出情報を受け取る。更新前ブロック回収部２４２は、誤り訂正制御部２６０ｄの誤り訂正情報生成部６４に、パリティデータから誤り訂正情報を生成することを要求し、誤り訂正制御部２６０ｄの誤り訂正情報生成部６４で生成された誤り訂正情報を受け取る。
【０２９６】
更新前ブロック回収部２４２は、ブロック制御部２１０ｄに未割当ブロックの取り出しを要求し、ブロック制御部２１０ｄからブロック番号を受け取る。更新前ブロック回収部２４２は、半導体記憶素子インタフェース部２９２ｄを介して、受け取ったブロック番号に対応する半導体記憶素子群９のブロックのデータを消去し、パリティ制御部２３０ｄのパリティ生成部３１が生成したパリティデータと、誤り訂正制御部２６０ｄの誤り検出情報生成部６２がパリティデータから生成した誤り検出情報と、誤り訂正制御部２６０ｄの誤り訂正情報生成部６４がパリティデータから生成した誤り訂正情報を受け取ったブロック番号のブロックに半導体記憶素子インタフェース２９２ｄを介して書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
【０２９７】
更新前ブロック回収部２４２は、ブロック制御部２１０ｄに、消去したブロックの平準化情報の更新要求を行う。更新前ブロック回収部２４２は、ブロック制御部２１０ｄに、パリティデータを書き込んだブロックのブロック状態をパリティ割当状態に更新する更新要求を送る。
【０２９８】
更新前ブロック回収部２４２は、収集したブロックと、書き込んだブロックとからなるパリティグループの登録をパリティ制御部２３０ｄに要求する。
【０２９９】
また、更新前ブロック回収部２４２が、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
【０３００】
本実施の形態に係る並び順情報管理部２７０ｄは、図４−２に示すように、アドレス領域情報テーブルとブロック番号情報テーブルとを有する構成である。このうち、アドレス領域情報テーブルについては、図４−１に示す構成と同一のため、詳細な説明は省略する。
ブロック番号情報テーブルは、アドレス領域情報テーブルのみでは管理できない並び順情報を管理する。これは、本実施の形態では、更新前割当ブロックを利用することによるものである。より詳細には、本実施の形態では、書き込み処理等において、あるアドレス領域に、書き込み要求を受け付ける前にマッピングされていたアドレス割当ブロックを更新前割当ブロックに状態遷移させ、新たにデータを書き込んだブロックを当該アドレス領域にマッピングしなおし、アドレス領域のマッピングを変更する処理が含まれるが、このマッピング変更処理において、新たにマッピングされたブロックについての並び順情報はアドレス領域情報テーブルから取得できるものの、更新前割当ブロックに状態遷移したブロックについての並び順情報は、アドレス領域情報テーブルから得られなくなってしまうからである。更新前割当ブロックに状態遷移したブロックについての並び順情報を取得できるようにするために、並び順情報管理部２７０ｄは、ブロック番号情報テーブルを用いて、以下の処理を行う。
【０３０１】
並び順情報管理部２７０ｄは、書き込み処理部２２０ｄからアドレス領域の更新通知を受ける際に、あわせて、更新前割当ブロックに状態遷移するブロックのブロック番号の通知を受け取る。そして、第２の実施の形態の並び順情報管理部２７０のアドレス領域情報テーブルの更新処理と同一の更新処理を行い、さらに、アドレス領域情報テーブルの当該アドレス領域に、アドレス領域の更新通知を受け付ける前に対応付けられて記録されていた並び順情報を、ブロック番号情報テーブルにおける、受け取ったブロック番号に対応付けて記録する（つまり、情報をコピーする）。これにより、アドレス領域情報テーブルから、更新前割当ブロックの並び順情報を引き継ぐことが可能になる。
【０３０２】
並び順情報管理部２７０ｄは、更新前ブロック回収部２４２から並び順情報の参照要求を受けると、ブロック制御部２１０ｄに、全てのブロックのうち、更新前割当状態のブロック番号を問い合わせる。そして、並び順情報管理部２７０ｄは、受け取ったブロック番号に対応する並び順情報をブロック番号情報テーブルから抽出する。そして、並び順情報管理部２７０ｄは、該抽出した並び順情報とアドレス領域テーブルに記録されている並び順情報とを統合し、更新前ブロック回収部２４２に回答する。
【０３０３】
（書き込み処理）
図２２は、書き込み処理を説明するフロー図である。図２２の書き込み処理は、図８の書き込み処理と異なり、一のパリティグループに属しているブロックが、全てアドレス割当ブロックではなくなった場合に、そのパリティグループを解体する。
【０３０４】
図２２のステップＳ６０１では、ブロック制御部２１０ｄ等が、書き込み要求を受け、未割当ブロックを取得する。より詳細には、まず、書き込み要求データから、誤り訂正制御部２６０ｄが、誤り検出情報及び誤り訂正情報を生成し、ブロックに書き込む内容を準備する。続いて、ブロック制御部２１０ｄが、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。
【０３０５】
ステップＳ６０２では、書き込み処理部２２０ｄが、確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックに記録する。しかし、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよいし、半導体記憶素子群９以外の記憶領域に記録してもよい。
【０３０６】
また、未割当ブロックの更新処理を行ったことにより、ブロック制御部２１０ｄが、その未割当ブロックの平準化情報を更新する。
【０３０７】
ステップＳ６０３では、更新済みの情報が記録されている未割当ブロックと、更新前ブロックとのマッピングを更新する。より詳細には、まず、ブロック制御部２１０ｄが管理するアドレステーブル１１に基づいて、書き込み要求アドレスが含まれるアドレス領域に対応する、アドレス割当ブロックのブロック番号を取得する。そして、アドレステーブル１１のそのアドレス領域から、更新前ブロックのブロック番号を削除し、当該未割当ブロックの番号を設定する。これにより、アドレステーブルの更新が完了する。
【０３０８】
続いて、ブロック制御部２１０ｄが、更新前ブロックの状態を、更新前割当状態に設定し、さらに、その未割当ブロックの状態を、アドレス割当状態に設定する。これにより、ブロックの状態の設定が完了する。並び順情報管理部２７０ｄは、アドレステーブル１１が更新されたことに基づき、並び順情報を更新する。
【０３０９】
ステップＳ６０４では、パリティ制御部２３０ｄが、更新前ブロックがパリティグループに属していたかを判定する。パリティグループに属していない場合には、ステップＳ６０５に進み、パリティグループに属している場合には、ステップＳ６０６に進む。
【０３１０】
この判定は、パリティ制御部２３０ｄが、更新前ブロックが属するパリティグループを検索し、返却値からそのパリティグループが存在するかどうかを判断することにより行うとよい。
【０３１１】
ステップＳ６０５では、ブロック制御部２１０ｄが、更新前ブロックを未割当ブロックとして回収する。この回収処理は、更新前ブロックの状態を未割当状態に変更することで可能である。
【０３１２】
あるブロックを更新した際、更新前ブロックがパリティグループに属していない場合は、パリティ構成を維持する必要はなく、また、当該アドレス領域のデータは更新済みのアドレス割当ブロックに保存されている。したがって、更新前割当ブロックとしてデータを保持させることは不要になるため、ステップＳ６０５では、未割当ブロックとして回収する。
【０３１３】
ステップＳ６０６では、書き込み処理部２２０ｄとパリティ制御部２３０ｄとブロック制御部２１０ｄが協力して、更新前ブロックが属するパリティグループのデータブロックが、全て更新前割当ブロックになっているか否かを判定する。全てのブロックが更新前割当ブロックの場合には、ステップＳ６０７に進み、そうではない場合には、ステップＳ６０８に進む。
【０３１４】
この判定は、パリティ制御部２３０ｄが、ステップＳ６０４で得られたパリティグループについて、パリティ対応リスト３９からデータブロック群を抽出し、それぞれのブロックの状態をブロック制御部２１０ｄが管理するブロックテーブル１２で調べることにより行われる。
【０３１５】
ステップＳ６０７では、パリティ制御部２３０ｄが、ステップＳ６０６で判定されたパリティグループの破棄処理を行う。より詳細には、ブロック制御部２１０ｄが、そのパリティグループを構成しているすべてのブロックの状態を、未割当状態に変更する。また、パリティ制御部２３０ｄは、そのパリティグループの登録解除を行う。
【０３１６】
パリティグループのデータブロック群が全て更新前割当ブロックの場合には、そのパリティグループを保持する必要性がない。そこで、そのパリティグループの破棄処理を行うことで、当該パリティグループを構成しているすべてのブロックを、未割当ブロックとして回収することができる。また、パリティグループの破棄処理は、パリティデータの生成および書き込み処理を伴わないため、後述する更新前ブロック回収処理に比べて処理コストが低い。
【０３１７】
ステップＳ６０８では、パリティ制御部２３０ｄが、新たにアドレス割当ブロックとなったブロックが所定の個数集まったか否かを判定する。所定の個数集まっている場合には、ステップＳ６０９に進み、集まっていない場合は処理を終了する。
【０３１８】
この判定は、ブロック制御部２１０ｄが管理するブロックテーブル１２の全てのブロックの中で、アドレス割当ブロックを抽出し、さらに、パリティ制御部２３０ｄが管理するパリティ対応リスト３９に基づいてパリティグループに属していないブロックを抽出し、抽出したブロックの数を見るとよい。
【０３１９】
なお、ステップＳ６０２で、データを書き込んだ未割当ブロックは、ステップＳ６０３でアドレス割当ブロックになる。このアドレス割当ブロックは、パリティグループに属していないので、このアドレス割当ブロックをパリティ対応リスト３９又はその他の図示しないリスト等で管理しておいてもよい。このように管理することで、パリティグループに属していないブロックを抽出する処理を簡略化することができる。
【０３２０】
ステップＳ６０９では、パリティ制御部２３０ｄが、収集したブロックからパリティグループを構成する。より詳細には、まず、収集したブロックに記録されているデータから、パリティ制御部２３０ｄのパリティ生成部３１が、パリティデータを生成する。続いて、生成したパリティデータから、誤り訂正制御部２６０ｄが、誤り検出情報と誤り訂正情報を生成する。これにより、パリティ割当ブロックに書き込む内容を準備する。
【０３２１】
続いて、ブロック制御部２１０ｄが、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。そして、書き込み処理部２２０ｄが、確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックにデータとともに記録するとしている。しかし、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよいし、半導体記憶素子群９以外の記憶領域に記録してもよい。
【０３２２】
また、当該未割当ブロックの更新処理を行ったことに対応して、ブロック制御部２１０ｄが、未割当ブロックの平準化情報を更新する。ブロック制御部２１０ｄは、また、その未割当ブロックの状態を、パリティ割当状態にする。
【０３２３】
パリティ制御部２３０ｄは、収集したブロックとパリティ割当ブロックとを、新しいパリティグループとして、パリティグループ登録処理を行う。
【０３２４】
（書き込み処理例）
図２３から図２５は、本実施の形態により実現される書き込み処理の例を説明するため図である。図２３ないし図２５において、（ａ）は、アドレステーブル１１、（ｂ）は、ブロックテーブル１２、（ｃ）は、パリティ対応リスト３９である。また、（ｄ）は、（ａ）から（ｃ）に対応する状態を示す模式図である。ここでは、説明に最低限必要な情報のみを記載している。
なお、図には更新された箇所に関係する箇所のみを示している。
【０３２５】
図２３は、書き込み処理が開始される前の各テーブル等を示す図である。図２３（ｄ）において、△は、更新前割当ブロックであり、□は、アドレス割当ブロックまたはパリティ割当ブロックを表す。
【０３２６】
図２３の状態で、アドレス領域２に対して書き込み要求が発生した場合は、以下の（Ｄ１）から（Ｄ５）の処理が行われる。
（Ｄ１）ブロック制御部２１０ｄにより、たとえば未割当ブロック１０が取り出され、書き込み処理部２２０ｄが、データを書き込む。
【０３２７】
（Ｄ２）ブロック制御部２１０ｄが、ブロック２及びブロック１０の状態を更新する。これにより、ブロック２が、更新前割当ブロックとなり、ブロック１０が、アドレス割当ブロックとなる。
（Ｄ３）ブロック制御部２１０ｄが、アドレス領域２に対応するブロック番号を更新する。これにより、アドレス領域２がブロック１０と対応づけられる。
【０３２８】
（Ｄ４）パリティ制御部２３０ｄが、ブロック２の属するパリティグループ０のデータブロックがすべて更新前ブロックであることにより、パリティグループ０を破棄する。これにより、ブロック０、１、２、及び、８が、未割当ブロックとなり、パリティ対応リスト３９から、グループ番号０を削除する。
【０３２９】
（Ｄ５）パリティ制御部２３０が、アドレス割当ブロックが所定の個数集まったことにより、新たなパリティグループを構成する。すなわち、ブロック制御部２１０ｄが、たとえば未割当ブロック１１を取り出し、書き込み処理部２２０ｄが、パリティ制御部２３０ｄが生成したパリティデータを書き込む。これにより、ブロック１１がパリティ割当ブロックとなり、パリティ対応リスト３９にグループ番号２が追加される。
【０３３０】
以上の（Ｄ１）から（Ｄ５）の処理により、図２４に示す状態が得られる。
【０３３１】
また、図２３に示す状態の際に、アドレス領域４に対する書き込み要求が発生した場合には、以下の（Ｅ１）から（Ｅ４）の処理が行われる。
（Ｅ１）ブロック制御部２１０ｄにより、たとえば未割当ブロック１０が取り出され、書き込み処理部２２０ｄが、データを書き込む。
【０３３２】
（Ｅ２）ブロック制御部２１０ｄが、ブロック７とブロック１０の状態を更新する。これにより、ブロック７が、更新前割当ブロックとなり、ブロック１０が、アドレス割当ブロックとなる。
【０３３３】
（Ｅ３）ブロック制御部２１０ｄが、アドレス領域４に対応するブロック番号を更新する。これにより、アドレス領域４に対応するブロックが、ブロック７からブロック１０となる。
【０３３４】
（Ｅ４）ブロック７はパリティグループに属していないので、未割当ブロックとして回収する。これにより、ブロック７は、未割当ブロックとなる。
【０３３５】
以上の（Ｅ１）から（Ｅ４）の処理により、図２５に示す状態が得られる。
【０３３６】
（更新前ブロック回収処理）
図２６は、更新前ブロック回収部２４２が更新前割当ブロックを回収する処理を説明するフロー図である。更新前ブロック回収部２４２は、未割当ブロックの個数が所定の閾値を下回ったときに、更新前ブロックの回収処理を行う。なお、未割当ブロックの個数が所定の閾値を下回ったときに限らず、定期的に処理を行うようにしてもよく、コントローラ２００ｄの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行なうようにしても良い。
【０３３７】
図２６のステップＳ７０１では、更新前ブロック回収部２４２が、並び順情報管理部２７０ｄが管理する並び順情報に従い、更新順序が古い順にパリティグループを解体する。より詳細には、まず、並び順情報管理部２７０が管理する並び順情報に従い、更新前ブロック回収部２４２が、更新順序が古いブロックが属するパリティグループを検索する。次に、パリティ制御部２３０ｄが、そのパリティグループの登録解除処理を行う。
【０３３８】
ステップＳ７０２では、更新前ブロック回収部２４２が、ステップＳ７０１で解体したパリティグループを構成していた、更新前割当ブロックとパリティ割当ブロックとを未割当ブロックとして回収する。この回収処理では、更新前割当ブロックとパリティ割当ブロックの状態とを、未割当状態に設定する。
【０３３９】
ステップＳ７０３では、更新前ブロック回収部２４２が、ステップＳ７０１で解体したパリティグループを構成していた、アドレス割当ブロックが、所定の個数収集されたか否かを判定する。所定の個数収集された場合には、ステップＳ７０４に進み、収集されていない場合には、ステップＳ７０５に進む。
【０３４０】
ステップＳ７０４では、パリティ制御部２３０ｄが、パリティグループを構成する。詳細には、まず、パリティ制御部２３０ｄが、収集されたブロックに記録されているデータから、パリティデータを生成する。続いて、誤り訂正制御部２６０ｄが、生成したパリティデータから、誤り検出情報と誤り訂正情報を生成する。この処理により、パリティ割当ブロックに書き込む内容が準備される。
【０３４１】
続いて、ブロック制御部２１０ｄが、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。そして、更新前ブロック回収部２４２が、確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックに記録する。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、半導体記憶素子以外の記憶領域に記録してもよい。
【０３４２】
また、未割当ブロックの更新処理を行ったことにより、ブロック制御部２１０ｄが、未割当ブロックの平準化情報を更新する。また、ブロック制御部２１０ｄが、その未割当ブロックの状態を、パリティ割り当て状態にする。
【０３４３】
さらに、パリティ制御部２３０ｄは、収集されたブロックと、パリティ割当ブロックとを、新しいパリティグループとして、パリティグループ登録処理を行う。
【０３４４】
ステップＳ７０５では、並び順の終端に達したか否かの判定がなされる。終端に達している場合には、処理を終了し、終端に達していない場合には、ステップＳ７０１に戻って処理を繰り返す。
【０３４５】
なお、終端に達したとき、アドレス割当ブロックの個数が、ステップＳ７０３で判定する所定の個数に満たない場合がある。その場合は、所定の個数に満たないアドレス割当ブロックのパリティグループを構成しない。これらのアドレス割当ブロックは、後ほど書き込み処理が行われた際に、更新された新しいアドレス割当ブロックとともに、パリティグループを構成することが期待される。
【０３４６】
なお、ステップＳ７０２において回収する更新前割当ブロックを、すぐに未割当状態にするのではなく、未割当状態にする処理を並び順の終端に達するまで適宜保留しておいてもよい。それらの更新前割当ブロックとアドレス割当ブロックとの合計の個数が所定の個数を満たす場合は、パリティグループを構成することができ、並び順の終端における耐障害性を高めることができる。
【０３４７】
（更新前ブロック回収処理例）
図２７は、更新前ブロック回収処理の例を示す図であって、図２３の状態から更新前ブロック回収処理が実行された状態を示す図である。ここでは、説明に最低限必要な情報のみを記載している。
なお、図には更新された箇所に関係する箇所のみを示している。
【０３４８】
図２７において、（ａ）は、アドレステーブル１１、（ｂ）は、ブロックテーブル１２、（ｃ）は、パリティ対応リスト３９である。また、（ｄ）は、（ａ）から（ｃ）に対応する状態を示す模式図である。
【０３４９】
図２３の状態において、更新前ブロック回収処理が実行されると、次の（Ｆ１）から（Ｆ７）の処理が実行される。
（Ｆ１）パリティ制御部２３０ｄが、パリティグループ０を解体する。これにより、パリティグループ０が、パリティ対応リスト３９から登録解除される。
【０３５０】
（Ｆ２）更新前ブロック回収部２４２が、更新前割当ブロックとパリティ割当ブロックとを回収する。ブロック制御部２１０ｄが、ブロック０、１、及び、８を、未割当ブロックとする。
（Ｆ３）パリティ制御部２３０ｄが、集まっているアドレス割当ブロックの数を判定する。ここでは、個数は１であり、所定の個数集まっていない。
（Ｆ４）パリティ制御部２３０ｄが、パリティグループ１を解体する。これにより、パリティグループ１が、パリティ対応リスト３９から登録解除される。
【０３５１】
（Ｆ５）更新前ブロック回収部２４２が、更新前割当ブロックとパリティ割当ブロックとを回収する。ブロック制御部２１０ｄが、ブロック４及び９を未割当ブロックとする。
【０３５２】
（Ｆ６）パリティ制御部２３０ｄが、集まっているアドレス割当ブロックの数を判定する。ここでは、集まっているアドレス割当ブロックは２、３、及び、５であり、所定の個数である３個たまったため、パリティ制御部２３０ｄが、パリティグループを構成する。また、ブロック制御部２１０ｄが、たとえば未割当ブロック１０を取り出し、更新前ブロック回収部２４２がパリティデータを書き込む。ブロック制御部２１０ｄは、ブロック１０をパリティ割当ブロックとし、パリティ制御部２３０ｄが、パリティ対応リスト３９にグループ番号２を追加する。
（Ｆ７）ここまでの処理で、アドレス割当ブロック６及び７は、パリティグループを構成しない。
【０３５３】
以上の構成をとることで、データを復元することができ、耐障害性を高めることができる。また、書き込み処理の速度等の性能低下を低減し、寿命の減少を低減することができる。
【０３５４】
なお、第１の実施形態の受付部２９は第５の実施形態のホストインタフェース部２９１ｄと書き込み処理部２２０ｄと読み込み処理部２２１ｄの一部が対応する。第１の実施形態の第１の記録部２８ａは第５の実施形態のブロック制御部２１０ｄの一部が対応する。第１の実施形態の第２の記録部２８ｂは第５の実施形態のパリティ制御部２３０ｄの一部が対応する。第１の実施形態の第１の書き込み手段２２ａは第５の実施形態の書き込み処理部２２０ｄの一部と半導体記憶素子インタフェース部２９２ｄとブロック制御部２１０ｄの一部とパリティ制御部２３０ｄの一部が対応する。第１の実施形態の第２の書き込み手段２２ｂは第５の実施形態の書き込み処理部２２０ｄの一部と更新前ブロック回収部２４２の一部とパリティ制御部２３０ｄの一部と半導体記憶素子インタフェース部２９２ｄとブロック制御部２１０ｄの一部とが対応する。
【０３５５】
〔第６の実施の形態〕
本実施の形態では、第２の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させる。なお、第３の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させてもよい。第３の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させる場合は、以下の説明における各機能ブロックに付した符号を適宜読み替えることで可能である。
【０３５６】
動的に変更される並び順情報にしたがってパリティグループを構成すると、パリティを生成する処理の際にパリティグループの解体および生成の処理が発生する場合がある。パリティグループの解体および生成の処理は、パリティ割当ブロックの書き込み処理の発生が伴うため、処理時間の増大と半導体記憶装置の寿命を短くすることにつながる。
【０３５７】
そこで、パリティグループを構成するブロックの数を動的に変化させることにより、パリティグループを解体する処理の数を低減させることができる。また、パリティを生成する処理と同時に、ブロック数を変更する処理を行うことにより、結果として、半導体記憶装置全体におけるパリティ割当ブロックの数を変更することができる。
【０３５８】
図２８は、第２の実施の形態のパリティ生成パトロール処理におけるパリティグループ生成処理に代えた、ブロック数が異なるパリティグループを新たに生成する処理を説明するフロー図である。図２８のステップＳ８０１では、ブロック数が異なる新たなパリティグループを構成するための、ブロック群を選択する。
【０３５９】
ステップＳ８０２では、パリティ制御部２３０が、ステップＳ８０１で選択したブロック群からパリティデータを生成する。ステップＳ８０３では、誤り検出情報生成部６２が、ステップＳ８０２で生成されたパリティデータの誤り検出情報を生成し、誤り訂正情報生成部６４が、ステップＳ８０２で生成されたパリティデータの誤り訂正情報を生成する。
【０３６０】
ステップＳ８０４では、ブロック制御部２１０が、パリティデータを書き込むための未割当ブロックを取得する。ステップＳ８０５では、パリティ生成パトロール部２４０が、ステップＳ８０４で取得された未割当ブロックの消去処理を行い、ステップＳ８０２で生成されたパリティデータを、ステップＳ８０４で取得された未割当ブロックに書き込む。なお、平準化処理を行う場合は、ブロック制御部２１０は、該ブロックの平準化情報を更新する。
【０３６１】
ステップＳ８０６では、所定の記憶領域にステップＳ８０３で生成された誤り検出情報と誤り訂正情報を保存する。なお、所定の記憶領域は、パリティデータが書き込まれるブロックでもよく、他のブロックでもよく、又は、半導体記憶素子群９ではない記憶部でもよい。
【０３６２】
ステップＳ８０７では、ブロック制御部２１０が、ステップＳ８０５でパリティデータを書き込んだブロックのブロック状態の情報をパリティ割当状態に更新する。これにより、このブロックがパリティ割当ブロックとしてブロックテーブル１２に登録される。
【０３６３】
ステップＳ８０８では、パリティ制御部２３０が、パリティ対応リスト３９に、生成したパリティグループを登録する。これにより、パリティ対応リスト３９が更新される。
【０３６４】
以降、図２９から図３１を用いて、ブロック数が異なるパリティグループを構成する方法の例について説明する。図２９から図３１は、異なるブロック数により生成される新たなパリティグループを説明する図である。なお、図中アルファベット記号を付した四角形はアドレス割当ブロックを表し、数字記号を付した四角形はパリティ割当ブロックを表す。また、パリティグループが構成されていることを、複数のアドレス割当ブロックと、該アドレス割当ブロックと矢印で関係付けられているパリティ割当ブロックでもって表している。図２９では、一のパリティグループの中で、書き込み要求に対応する書き込み処理等で更新されたブロックを除く他のブロックにより、新たなパリティグループを生成する。すなわち、パリティグループを構成しない１以上の連続するブロックから、１以上のパリティグループが生成される。
【０３６５】
図２９（ａ）では、３つのブロック毎に１のパリティグループが構成されている。なお、図中、右方のブロックほど、書き込み要求に対応する書き込み処理等による更新によりアドレス割当ブロックとなってからの経過時間が長いブロックである。
【０３６６】
図２９（ｂ）では、アドレス割当ブロックＣとアドレス割当ブロックＫとが、書き込み要求に対応する書き込み処理等で更新されて未割当状態となり、結果として未割当ブロックとして回収される。また、新たなデータが書き込みされたブロックＣ’とブロックＫ’とが、新たなアドレス割当ブロックとなる。これにより、ブロックＡないしＣからなるパリティグループが解体される。ここまでは、第２の実施の形態と同様である。そして、本実施の形態において、第２の実施の形態のパリティ生成パトロール処理におけるパリティグループ生成処理に代えて、パリティグループを構築する際には、たとえば、図２９（ｃ）では、並び順で連続するアドレス割当ブロックＡ及びアドレス割当ブロックＢからなるパリティグループを新たに生成し、そのパリティ割当ブロックはブロック４である構成を表している。
【０３６７】
このようにパリティグループを構成することで、ブロックＤ，Ｅ，Ｆ，２からなるパリティグループ、または、ブロックＧ，Ｈ，Ｉ，３からなるパリティグループを解体し、新たにパリティデータをブロックに書き込む必要がなくなるため、処理時間の増大と、半導体記憶装置の寿命の低下を低減することができる。
【０３６８】
図３０は、異なるブロック数により生成される新たなパリティグループを説明する図であって、解体されたパリティグループのブロックを、並び順で隣接するパリティグループに含ませる例を説明する図である。図３０（ａ）及び（ｂ）は、図２９（ａ）及び（ｂ）と、それぞれ同一である。
【０３６９】
図３０（ｃ）では、アドレス割当ブロックＡ及びアドレス割当ブロックＢと、並び順で隣接するパリティグループを構成するアドレス割当ブロックＤないしＦと、からなるパリティグループを生成する。これにより、図２９（ｃ）よりも、パリティグループの数を１減じることができ、パリティ割当ブロックの数を減じることができる。これにより、結果として、半導体記憶装置における未割当ブロックの数が増加する。したがって、平準化処理を行うにあたっては、未割当ブロックの数が多いほど、平準化処理をより好適に実施することができるようになる。
【０３７０】
なお、パリティ割当ブロックの数を減ずる方法としては、上記方法に限らず、パリティ生成方法を変更することにより、パリティグループにおけるパリティ割当ブロックの数を減ずる方法を採用しても良い。
【０３７１】
図３１は、異なるブロック数により生成される新たなパリティグループを説明する図であって、解体されたパリティグループのブロックと、並び順で隣接するパリティグループのブロックと、から複数のパリティグループを生成する例を説明する図である。図３１（ａ）及び（ｂ）は、図２９（ａ）及び（ｂ）と、それぞれ同一である。
【０３７２】
図３１（ｃ）では、アドレス割当ブロックＡ、Ｂ、及び、Ｄから１のパリティグループを生成し、アドレス割当ブロックＥ及びブロックＦから１のパリティグループを生成する。なお、図３１（ｃ）は、図３１（ａ）と、パリティグループの数が同数となるが、本実施の形態は、図３１の例に限らず、更新前に比して、パリティグループの数が異なってよい。これにより、耐障害性を高めるためにはパリティグループの数を増やすことができる。また、半導体記憶装置におけるパリティ割当ブロックの数を減じ、結果として未割当ブロックを増やし、平準化処理をより好適に実施するためには、パリティグループの数を減じることができる。
【０３７３】
なお、図中、ブロック制御部２１０が有するブロックテーブル１２は、ブロック状態毎に分類されるリストを含んでよい。例えば、アドレス割当ブロックからなるリストには、書き込み処理が行われる更新時刻の古い順に、アドレス割当ブロックの情報が並び、未割当ブロックからなるリストには、未割当状態になる更新時刻の古い順に、未割当ブロックの情報が並ぶ。
【０３７４】
なお、ブロック数をパリティグループ毎に異なるように変更させる、以上の処理を続けていくと、パリティグループを構成するブロック数が、いわゆる局所最適値となり、全体としての最適値にならない場合がある。例えば、データブロック群の数が多いパリティグループとデータブロック群の数が少ないパリティグループとが、並び順では交互に存在するというような状況になる場合が考えられる。同様に、例えば、パリティブロック群の数が多いパリティグループとパリティブロック群の数が少ないパリティグループとが、並び順では交互に存在するというような状況になる場合が考えられる。
【０３７５】
このため、パリティグループを構成するデータブロック群の数あるいはパリティブロック群の数が、半導体記憶装置の全体において最適となるように、半導体記憶装置の全体に対するブロック数変更処理を、前記の処理とは独立に実行してもよい。
【０３７６】
以上の構成をとることで、パリティグループの解体および生成処理回数を低減させることができ、処理速度等の性能低下を低減し、寿命の減少を低減することができる。
【０３７７】
〔第７の実施の形態〕
本実施の形態では、第５の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させる。
【０３７８】
例えば、第５の実施の形態において、更新前割当ブロックの数が多くなると、未割当ブロックの数が減少する。これにより、平準化が好適に行われない。そこで、未割当ブロックの数を多くする必要が生じる。また例えば、第５の実施の形態において、長期間、書き込み処理が発生しなかった場合には、アドレス割当ブロックが、所定の個数集まらずに、パリティグループを構成しない状態が長く続く。これにより、それらのブロックに対する耐障害性が低下する。
【０３７９】
そこで、本実施の形態では、パリティグループを構成するブロックの数を動的に変化させることにより、例えば、パリティ割当ブロックの数を減らして未割当ブロックの数を増加させる。また例えば、パリティグループを構成しない期間が所定の閾値を超えるアドレス割当ブロックに対して、所定の個数よりも少ない個数によりパリティグループを構成する。
【０３８０】
第５の実施の形態における更新前ブロック回収処理の際に、パリティグループを構成するブロック数の変更を行う。これにより、更新前ブロックの回収処理に伴うパリティグループの解体と、ブロック数を変更することによるパリティグループの解体とを、同時に行うことができ、パリティの書き込み処理の回数を減じることができる。
【０３８１】
より詳細には、図２６のステップＳ７０１及びＳ７０２の際に、パリティグループを解体し、さらに、ブロック数の変更処理を行う。
【０３８２】
なお、更新前ブロックの回収によるパリティグループの解体と、ブロック数の変更によるパリティグループの解体と、を一の処理とすることにより、更新前ブロックを含んでいないパリティグループを解体する処理を省略することができる。
【０３８３】
図３２は、更新前ブロック回収処理と、ブロック数変更処理を同時に行い、新たなパリティグループを生成する処理を説明するフロー図である。
【０３８４】
図３２のステップＳ９０１では、ブロック数が異なる新たなパリティグループを構成するための，パリティグループ群を選択する。ステップＳ９０２では、ステップＳ９０１で選択したパリティグループ群を解体する。より詳細には、そのパリティグループの登録解除処理を行い、そのパリティグループに属していた更新前割当ブロックおよびパリティ割当ブロックを未割当ブロックとして回収する。
【０３８５】
ステップＳ９０３では、パリティ制御部２３０が、ステップＳ９０２で得られたアドレス割当ブロック群からパリティデータを生成する。ステップＳ９０４からステップＳ９０９は、図２８のステップＳ８０３からステップＳ８０８までと同じ処理であるので，説明は省略する。
【０３８６】
図３３は、異なるブロック数により生成される、新たなパリティグループの例を説明する図である。図中、アルファベット記号を付した四角形のうち、無地の四角形は、アドレス割当ブロックを表し、ハッチングが施されているブロックは、更新前割当ブロックを表す。また、数字記号を付した四角形はパリティ割当ブロックを表す。また、パリティグループが構成されていることを、複数のアドレス割当ブロックと、該アドレス割当ブロックと矢印で関係付けられているパリティ割当ブロックでもって表している。
【０３８７】
図３３（ａ）の例では、パリティ割当ブロック１が属するパリティグループからパリティ割当ブロック６が属するパリティグループまでの６個のパリティグループがあり、各パリティグループには、４個のデータブロック群のブロックが含まれる。
【０３８８】
図３３（ｂ）では、（ａ）の状態から、更新前割当ブロックを並び順に従って未割当ブロックとして回収し、新たに２個のパリティグループが生成されている。パリティ割当ブロック７が属するパリティグループは、（ａ）のパリティ割当ブロック１が属するパリティグループないしパリティ割当ブロック３が属するパリティグループから新たに生成され、６個のアドレス割当ブロック（Ｂ，Ｄ，Ｇ，Ｉ，Ｊ，Ｌ）を含む。パリティ割当ブロック８が属するパリティグループは、（ａ）のパリティ割当ブロック４が属するパリティグループ及びパリティ割当ブロック５が属するパリティグループから新たに生成され、５個のアドレス割当ブロック（Ｎ，Ａ’，Ｃ’，Ｅ’，Ｆ’）を含む。
【０３８９】
パリティ割当ブロック６が属するパリティグループは、（ａ）のパリティ割当ブロック６が属するパリティグループと同じである。これは、（ａ）のパリティ割当ブロック６が属するパリティグループが更新前割当ブロックを含んでいなかったためで、パリティグループを構成するブロック数を変更することにより、パリティグループを解体せずとも良くなったためである。また、端のアドレス割当ブロックＰ’は、ここでは、何れのパリティグループにも含まれない。
【０３９０】
このように、更新前ブロック回収処理とブロック数変更処理を同時に行うことで、不要なパリティグループ解体処理を省略することができる。
【０３９１】
図３４は、書き込み処理を説明するフロー図である。図３４は、図２２にステップＳ１０１０とステップＳ１０１１とが追加されており、図２２のステップＳ６０８の結果がＮｏのときにステップＳ１０１０に進み、図２２のステップＳ６０９の処理が終わるとステップＳ１０１１に進む点が異なる他は、図２２と同一である。したがって、ここでは、ステップＳ１０１０とステップＳ１０１１の説明のみを行い、他のステップの説明は省略する。
【０３９２】
ステップＳ１００８に続くステップＳ１０１０では、ステップＳ１００２で書き込み処理が行われた際の書き込み処理時刻を保存する。一方、ステップＳ１００９に続くステップＳ１０１６では、ステップＳ１００９においてパリティグループを構成したブロック全ての書き込み処理時刻を初期化する。これらの処理により、所定の時間周期で、パリティグループを再構成する際の、基準となる書き込み処理時刻を設定することができる。なお、書き込み処理時刻の情報は、例えば、ブロックテーブル１２のブロック毎の情報に含ませるとよい。
【０３９３】
図３５は、所定の時間、パリティグループに含まれないアドレス割当ブロックに対する処理を説明するフロー図である。図３５の処理は、例えば、図３４のステップＳ１０１０及びＳ１０１１で設定された書き込み処理時刻等に基づいて行われるとよい。
【０３９４】
図３５のステップＳ１１０１では、図示しない、パリティ未構成ブロック冗長化パトロール部が、パリティグループを構成しないアドレス割当ブロックの書き込み処理時刻を確認する。ステップＳ１１０２では、パリティ未構成ブロック冗長化パトロール部が、ステップＳ１１０１で確認された書き込み処理時刻が、所定の閾値を超えているか否かを判定する。所定の閾値を超えている場合には、ステップＳ１１０３に進み、超えていない場合には、処理を終了する。
【０３９５】
ステップＳ１１０３の処理では、経過時間が超えているアドレス割当ブロックの個数でパリティグループを構成する。パリティグループの構成手順については、既にいくつか上述しているため、詳細の説明は省略する。また、ステップＳ１１０４の処理では、ステップＳ１１０３で構成したパリティグループの情報をパリティ対応リストに登録する。パリティ対応リストの登録手順については、既に上述しているため、ここでは、詳細な説明は省略する。
【０３９６】
図３６は、図３４および図３５のフローによって実現されるパリティグループの生成処理を説明する図である。図３６では、所定の時間、パリティグループを構成しないアドレス割当ブロックＫ’、Ｍ’、Ｏ’、Ｐ’に対し、これらの４個のブロックからなるパリティ割当ブロック３が含まれるパリティグループが生成される。
【０３９７】
以上の構成をとることで、パリティグループの解体および生成処理回数を低減させることができ、処理速度等の性能低下を低減し、寿命の減少を低減することができる。また、長期間パリティグループを構成しないアドレス割当ブロックの数を減ずることができるため、冗長性を高めることができる。
【０３９８】
〔第８の実施の形態〕
本実施の形態では、第２の実施の形態または第３の実施の形態における書き込み処理の際に，解体されてしまうパリティグループの数を減じるために、更新前割当ブロックを用いて好適に制御する。以下の説明における各機能ブロックに付した符号は、適用する実施の形態に基づいて、適宜読み替える。
【０３９９】
より詳細には、書き込み処理が行われると、書き込んだブロックの冗長性が無い上に、更新前ブロックが含まれているパリティグループの別のアドレス割当ブロックも冗長性を失う。そこで、更新前ブロックを未割当ブロックにせずに、更新前割当ブロックとして利用し、パリティグループの解体処理を適宜保留する。ここで、新たに書き込んだアドレス割当ブロックからのパリティ生成処理を優先しても良いし、更新前ブロックの回収処理を優先しても良い。
【０４００】
図３７から図３９は、並び順として採用する情報の種類によって、パリティグループの生成の方針が異なる例を示す図である。図中、アルファベット記号を付した四角形のうち、無地の四角形は、アドレス割当ブロックを表し、ハッチングが施されているブロックは、更新前割当ブロックを表す。また、数字記号を付した四角形はパリティ割当ブロックを表す。また、パリティグループが構成されていることを、複数のアドレス割当ブロックと、該アドレス割当ブロックと矢印で関係付けられているパリティ割当ブロックでもって表している。
なお、採用される並び順情報は、ここに例示する並び順の情報に限られない。
【０４０１】
図３７は、更新回数が少ない並び順により、パリティグループを構成する場合の例を説明する図である。図中のブロックの並び順は、図の右に行くほど、更新回数が少ない。図３７では、３個のブロック毎に、１のパリティグループが構成される。
【０４０２】
図３７（ｂ）は、（ａ）の状態から更新が進行した例を示す図である。（ｂ）では、新たにアドレス割当ブロックとなるブロックは、更新の回数に基づいて、並び順が決定される。図３７では、ブロックＣに対して更新するブロックＣ’は、図中、ブロックＦとブロックＧとの間に配される例を示している。また、ブロックＫに対して更新するブロックＫ’は、ブロックＫの直後に配される例を示している。（ｂ）では、更新前割当ブロックとなったブロックＣにより、ブロックＡとブロックＢとの冗長性は保たれる。
【０４０３】
また、ブロックＫはパリティグループに属していないため、未割当ブロックとして回収される。
【０４０４】
ここで、パリティ生成処理を優先すると、ブロックＧ，Ｈ，Ｉ，３からなるパリティグループを解体し、ブロックＣ’，Ｇ，Ｈを有するパリティグループ（パリティグループα）を生成し、ブロックＩ，Ｊ，Ｋ’を有するパリティグループ（パリティグループβ）を生成する。このように、並び順情報として更新回数を採用する場合は、パリティグループの解体処理を伴う場合がある。一方、更新前ブロック回収処理には、パリティグループの解体処理が必ず伴う。したがって、並び順情報として更新回数を採用する場合は、更新前ブロック回収処理とパリティ生成処理を同期させて行ったほうが効率が良いと考えられる。
【０４０５】
図３７（ｃ）は、（ｂ）に示す状態から、更新前割当ブロックを未割当てブロックとして回収し、さらに、パリティグループを再構成させた例である。（ｃ）では、（ｂ）における更新前割当ブロックのブロックＣが回収され、さらに、更新回数の少ない順に、右方から３個のブロック毎にパリティグループが構成される。
【０４０６】
図３７の例では、更新前ブロックを回収する処理と、パリティを生成する処理とを、同期させることにより、パリティデータの更新回数を減じている。また、（ｂ）から（ｃ）への遷移の際に、２個のパリティグループが再構成される。
【０４０７】
図３８は、更新時刻順の並び順により、パリティグループを構成する場合の例を説明する図である。図中のブロックの並び順は、図の右にいくほど、更新時刻が古い。図３８では、３個のブロック毎に、１のパリティグループが構成される。
【０４０８】
図３８（ｂ）は、（ａ）の状態から更新が進行した例を示す図である。（ｂ）では、新たにアドレス割当ブロックとなるブロックは、更新の時刻に基づいて、並び順が決定される。ブロックＣに対して更新されるブロックＣ’は、（ａ）の並び順において、最も更新時が新しいブロックであるブロックＫの次に配される。また、ブロックＫに対して更新されるブロックＫ’は、ブロックＣ’の次に配される。（ｂ）のパリティグループは、（ａ）と同じ構成である。また、ブロックＫはパリティグループに属していないため、未割当ブロックとして回収される。
【０４０９】
図３８では、更新後のアドレス割当ブロックが配置される位置は、必ず左端になる。また、更新されたブロックを更新前割当ブロックとする。したがって、一旦パリティグループが構成されると、そのパリティグループは、更新前ブロックの回収処理がなされるまで解体されることはない。
【０４１０】
また、パリティグループを構成していないアドレス割当ブロックは、並び順に連続して存在するため、パリティ生成処理の際に、パリティグループの解体処理は発生しない。
【０４１１】
並び順の情報として、更新時刻を採用する場合は、耐障害性と、半導体記憶装置の寿命の長大化との、何れを重視するかにより、次の２つの方法の何れか一を採用するとよい。
（Ｇ１）耐障害性を重視し、冗長性を重視する場合は、パリティ生成処理を優先的に行う。
【０４１２】
（Ｇ２）ウェアレベリングにより半導体記憶装置の寿命の長大化を重視する場合は、未割当ブロックを増加させるために、更新前ブロックの回収処理を優先的に行う。
なお、更新前ブロック回収処理を行う際には、パリティグループの解体処理が必ず発生するため、上記耐障害性と、半導体記憶装置の寿命の長大化との重視の視点に加えて、パリティ生成処理の必要とされる頻度と、更新前ブロック回収処理の必要とされる頻度を勘案して、更新前ブロック回収処理とパリティ生成処理を同期させて行っても良い。
【０４１３】
ここで、図３８の（ｃ）および（ｄ）では、更新前ブロック回収処理を優先して行う例を示している。
【０４１４】
図３８（ｃ）では、更新前割当ブロックであるブロックＣが、未割当ブロックとして回収され、新しいパリティグループが生成される。（ｃ）では、並び順の右端から順に、３個のブロック毎に１個のパリティグループが構成される。
【０４１５】
図３８（ｄ）では、さらに、パリティグループの生成が進み、計３個のパリティグループが生成される。
【０４１６】
図３９は、静的な情報(たとえば論理アドレス情報など)の並び順情報に従ってパリティグループを構成する例を説明する図である。図３９（ａ）は、３個のブロック毎にパリティグループが構成されている。図３９（ｂ）は、（ａ）の状態から更新が進行した例を示している。（ｂ）では、新たなアドレス割当ブロックの並び順は更新前のブロックと同一となる。また、ブロックＪ’はパリティグループに属していない更新前のブロックであるので、未割当ブロックとして回収される。
【０４１７】
図３９（ｃ）は、（ｂ）の状態から、並び順情報に従って、パリティグループが再生成された例を示す図である。（ｂ）から（ｃ）に遷移する際に、静的な情報に従ってパリティグループを再生成すると、元のパリティグループを構成していた更新前割当ブロックは必ず不要になるため、更新前割当ブロックを未割当ブロックとして回収することができる。
【０４１８】
このように、静的な情報に従ってパリティグループを生成している場合は、パリティ生成処理と更新前ブロック回収処理とが同一の結果になる。
【０４１９】
〔第９の実施の形態〕
本実施の形態では、第８の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させる。これにより、第８の実施の形態におけるパリティ生成処理や、更新前ブロック回収処理におけるパリティグループの解体処理の回数を減ずることができ、処理時間の増大化と半導体記憶装置の寿命の低下との低減が可能になる。
【０４２０】
ここで、さらに、パリティグループを構成するブロックの数を動的に変化させることで、耐障害性を高めるためにはパリティグループの数を増やすことができ、また、半導体記憶装置におけるパリティ割当ブロックの数を減じ、結果として未割当ブロックを増やし、平準化処理をより好適に実施するためには、パリティグループの数を減じることができる。
【０４２１】
以降の説明では、パリティ割当ブロックの数を減ずる場合について述べる。
【０４２２】
図４０は、パリティグループの数を減じる例を説明する図である。図中、アルファベット記号を付した四角形のうち、無地の四角形は、アドレス割当ブロックを表し、ハッチングが施されているブロックは、更新前割当ブロックを表す。また、数字記号を付した四角形はパリティ割当ブロックを表す。また、パリティグループが構成されていることを、複数のアドレス割当ブロックと、該アドレス割当ブロックと矢印で関係付けられているパリティ割当ブロックでもって表している。
【０４２３】
図４０（ａ）では、パリティ割当ブロック１が属するパリティグループ１からパリティ割当ブロック６が属するパリティグループまでの６個のパリティグループがある。各パリティグループには、４個のデータブロック群のブロックが含まれる。
【０４２４】
図４０（ｂ）では、（ａ）の状態から、更新前割当ブロックを並び順に従って未割当ブロックとして回収し、新たに２個のパリティグループが生成されている。パリティ割当ブロック７が属するパリティグループは、（ａ）のパリティ割当ブロック１が属するパリティグループないしパリティ割当ブロック３が属するパリティグループから新たに生成され、６個のアドレス割当ブロック（Ｂ，Ｄ，Ｇ，Ｉ，Ｊ，Ｌ）を含む。パリティ割当ブロック８が属するパリティグループは、（ａ）のパリティ割当ブロック４が属するパリティグループ及びパリティ割当ブロック５が属するパリティグループから新たに生成され、５個のアドレス割当ブロック（Ｎ，Ａ’，Ｃ’，Ｅ’，Ｆ’）を含む。
【０４２５】
パリティ割当ブロック６が属するパリティグループは、（ａ）のパリティ割当ブロック６が属するパリティグループと同じである。これは、（ａ）のパリティ割当ブロック６が属するパリティグループが更新前割当ブロックを含んでいなかったためで、パリティグループを構成するブロック数を変更することにより、パリティグループを解体せずとも良くなったためである。また、端のアドレス割当ブロックＰ’は、ここでは、何れのパリティグループにも含まれない。このように、パリティグループを構成するブロックの数を増やしてパリティグループの数を減じることにより、パリティデータを格納するパリティ割当ブロックの数を減らすことができる。
【０４２６】
〔第１０の実施の形態〕
本実施の形態では、パリティによりブロックに冗長性を持たせる構成を採る半導体記憶装置において、パリティデータを生成した後、該パリティデータを半導体記憶素子群のブロックに保持させる前に、一時記憶領域（キャッシュメモリ）に該パリティデータを保持させる例について説明する。また、本実施の形態を、第１の実施の形態から第９の実施の形態の何れか一の実施の形態と併せて一の実施の形態とすることもできる。以降の説明では、本実施の形態を、第１の実施の形態から第９の実施の形態の何れか一の実施の形態と併せて一の実施の形態とする場合を説明するが、各機能部に付した番号は、適用される実施形態に応じて適宜読み替えることができる。
【０４２７】
本実施の形態では、パリティ生成パトロール部２４０等の処理において、パリティデータを生成した後、キャッシュメモリ２９３にそのパリティデータを保持させることで、パリティ生成処理は完了したものとする。詳細については後述する。キャッシュメモリ２９３は、例えば、ＤＲＡＭ等として構成される。また、キャッシュメモリ２９３に格納されたパリティデータは、図示しないパリティデータ書き込みパトロール部が、所定のタイミングで半導体記憶素子群９に書き込む。詳細については後述する。本実施の形態では、半導体記憶素子群９は、例えば、ＮＡＮＤフラッシュメモリ等で構成される。
【０４２８】
本実施の形態による半導体記憶装置１のコントローラ２００は、新たなパリティグループが生成される際に、キャッシュメモリ２９３上に更新すべきパリティデータが存在する場合は、キャッシュメモリ２９３上のパリティデータを更新するだけでよいことになる。これにより、パリティデータを半導体記憶素子群９に格納させることなく更新を実現してもよい。
【０４２９】
これにより，ブロックの更新回数を減じることができ，処理速度等の性能低下を低減し、寿命の減少を低減することができる。
【０４３０】
図４１は、パリティ対応リスト３９に代えて本実施の形態に用いられるパリティ対応リストを示したものである。また、パリティ対応リストに示される半導体記憶素子群９上のブロックに格納されるデータおよびパリティデータと、キャッシュメモリ２９３上に格納されるパリティデータを模式的に表している図である。なお、図中、半導体記憶素子を「ＮＡＮＤ」と表記する。なお、パリティ対応リストは、以下に説明するパリティブロック群に記録する情報がパリティ対応リスト３９と異なるのみで、他の部分はパリティ対応リスト３９と同様であるので、該他の部分についての説明は省略する。なお、図４１に示すパリティ対応リストには、以降の説明に必要な部分のみを示し、以降の説明に不要な部分（たとえば、パリティ生成方法）の記載を省略している。
【０４３１】
図４１（１）は、更新前、すなわち、書き込み処理が行われる前のブロック等の状態を説明する図である。図４１（１）において、パリティデータＰ１からＰ４は、全て、半導体記憶素子群９上のブロックに格納されている。キャッシュメモリ２９３上のパリティデータ領域は、空である。これらの対応情報は、パリティ対応リストに保持されている。たとえば、パリティブロック群の項目の、「Ｐ１」は、半導体記憶素子上にパリティデータＰ１が記憶されていることを示している。
【０４３２】
図４１（２）は、（１）の状態において、書き込み処理等によりブロック５が更新されブロック５’となり、また、パリティデータを更新する処理において、パリティデータＰ２の代わりに新たに生成されるパリティデータＰ２’は、キャッシュメモリ上のパリティデータ領域に保持される状態を示す。これらの対応情報は、パリティ対応リストに保持されている。たとえば、パリティブロック群の項目の、「キャッシュメモリ（Ｐ２’）」は、パリティデータＰ２’がキャッシュメモリ上に記憶されていることを示している。この際、パリティデータＰ２’は、図中の式（Ａ）に従い、ブロック４、５’、及び、６に格納されるデータから生成されてもよく、式（Ｂ）に従い、更新前のパリティデータＰ２と、更新前のブロック５に格納されたデータ及び５’に格納されるデータと、から生成されてもよい。
【０４３３】
なお、パリティグループを構成するデータ群の規定数が多いほど、式（Ａ）に従うと処理量が多くなる。そこで、式（Ｂ）に従う方法で計算するとよい。
【０４３４】
図４１（３）は、（２）の状態において、キャッシュメモリ２９３上に格納されていたパリティデータＰ２’が、ブロックに書き込まれた状態を説明する図である。パリティ対応リストにおける該パリティブロック群の項目は、「Ｐ２’」となり、半導体記憶素子上にパリティデータＰ２’が記憶されていることを示している。
【０４３５】
なお、図４１（２）の状態で、例えば、ブロック４が更新されブロック４’になり、パリティデータがＰ２”となる場合には、新たなパリティデータＰ２”によりＰ２’を更新する処理は、キャッシュメモリ２９３上の書き換えとなる。このため、パリティの更新に関しては、半導体記憶素子群９への書き込みが伴わなくなるため、処理時間の増大と半導体記憶装置の寿命の低下とを低減することができる。
【０４３６】
キャッシュメモリ２９３に格納されたパリティデータを、半導体記憶素子群９に書き出す処理のタイミング、及び、書き出すデータの種類は、例えば、以下の（Ｈ１）から（Ｈ３）の３種類がある。なお、これらは処理のタイミングおよび書き出すデータの種類を例示するものであり、以下に示す３種類に限られるものではない。たとえば、予めまたは動的に定められたタイミングで処理を開始し、予めまたは動的に定められた量のパリティデータを半導体記憶素子群９に書き出すようにしても良い。
【０４３７】
（Ｈ１）キャッシュメモリ２９３の格納領域を超えてパリティデータを格納する要求が発生した場合、又は、キャッシュメモリ２９３に格納されるパリティデータの量が所定の閾値を超えた場合に、キャッシュメモリ２９３に格納されているパリティデータの全部又は一部を、半導体記憶素子群９に書き出す。
【０４３８】
（Ｈ２）ホスト装置からキャッシュメモリ２９３上にあるデータを全て半導体記憶素子に書き出すコマンドであるキャッシュフラッシュコマンドを受けた場合に、キャッシュメモリ２９３に格納されているパリティデータを全て書き出す。
（Ｈ３）ホスト装置から電源切断の予告通知コマンドを受けた場合に、キャッシュメモリ２９３に格納されているパリティデータの全部又は一部を書き出す。
【０４３９】
キャッシュメモリ２９３に格納されているパリティデータは、格納順の古いものから半導体記憶素子群９に書き出すとよい。格納順の判断基準は、例えば、更新回数、更新順序、又は、更新回数と更新順序とを所定の評価関数により評価した値、の何れか一でよい。これにより、キャッシュメモリ２９３上でのパリティデータの書き換えが、より多く発生することが期待でき、半導体記憶素子群９上におけるパリティデータの書き換えを低減できる。なお、格納順の判断基準はこれらに限られず、適切な判断基準を適宜採用することができる。なお、この判断基準は、並び順情報管理部２７０ｄによって管理されるアドレス割当ブロック等の並び順情報と同一でもよい。
【０４４０】
また、半導体記憶素子群９へのパリティデータの書き出し量が多く電源切断に間に合わないと判断したときは、その時点のパリティデータの管理情報を不揮発性メモリである半導体記憶素子や，その他の記憶領域に保存する。管理情報とは、例えば、以下の情報であるが、以下に例示する情報に限られない。
・パリティデータが半導体記憶素子群９上にあるか否か、すなわち、電源切断でも消えない状態にあるか否か。
・パリティデータがキャッシュメモリ２９３上にあるか否か、すなわち、電源切断によって消える状態にあるか否か。
【０４４１】
電源切断に間に合わず、パリティデータの管理情報を保存した場合には、電源再投入後の適切なタイミングで、電源切断によって消えてしまったパリティデータを、図示しない冗長状態再構成部が再び生成し、キャッシュメモリ２９３または半導体記憶素子群９に格納させると良い。これにより、電源切断前の冗長構成の状態を復元できる。
【０４４２】
本実施の形態では、パリティデータの生成処理と、パリティデータを半導体記憶素子群９に書き込む処理とを分離する。したがって、本実施の形態を、第１の実施の形態から第９の実施の形態の何れか一の実施の形態と併せて一の実施の形態とする場合には、パリティ生成処理における、パリティ生成部３１によるパリティデータ生成処理と、生成したパリティデータの半導体記憶素子への書き込み処理と、を連続して実行させない。
【０４４３】
なお、第１ないし第９の実施の形態では、書き込み処理等におけるデータブロックの更新処理とパリティ生成処理等におけるパリティデータの更新処理とを別個に実行する。このため、データブロックの更新処理時に更新前のデータブロックまたはパリティ割当ブロックを未割当ブロックとして回収してしまい、パリティデータの更新処理の際に上記更新前のデータを参照することができず、上記式（Ｂ）によりパリティ生成の演算ができない場合がある。そこで、更新前データをパリティデータの生成時に参照できるとよい。
【０４４４】
図４２から４４は、パリティデータの生成とパリティデータの書き込み処理とを分離する際の、処理を説明するフロー図である。図４２は、たとえば図２０のＳ５０３およびＳ５０４の処理を抜粋してその詳細を説明するものであり、パリティデータ生成とパリティデータの書き込み処理とを分離する際の注目すべき項目を示すフロー図である。したがって、たとえば図４２の処理に代えて、図２０のステップＳ５０３及びステップＳ５０４の処理でもよい。
【０４４５】
図４２のステップＳ１２０１では、集められた、パリティグループを生成する所定数のアドレス割当ブロックから、パリティ生成部３１がパリティデータを生成する。ステップＳ１２０２では、誤り検出情報生成部６２がパリティデータの誤り検出情報を生成し、誤り訂正情報生成部６４がパリティデータの誤り訂正情報を生成する。
【０４４６】
ステップＳ１２０３では、ブロック制御部２１０が、ブロックテーブル１２に基づいて未割当ブロックを取り出す。ステップＳ１２０４では、ステップＳ１２０３で取得された未割当ブロックのデータの消去処理を行い、また、ステップＳ１２０３で取得された未割当ブロックにステップＳ１２０１で生成したパリティデータを書き込む。
【０４４７】
ステップＳ１２０５では、ブロック制御部２１０が、ブロックテーブル１２におけるブロックの平準化情報を更新する。ステップＳ１２０６では、ブロック制御部２１０が、ステップＳ１２０４でパリティデータを書き込んだブロックについてブロック状態の情報をパリティ割当状態に変更する。
【０４４８】
ステップＳ１２０７では、パリティ制御部２３０が、パリティ対応リスト３９に生成したパリティグループの情報を追加し登録する。
【０４４９】
図４３及び４４は、図４２の処理において、パリティデータをキャッシュメモリ２９３に格納する処理と、パリティデータをキャッシュメモリ２９３から半導体記憶素子群９に書き込む処理とを、不連続に行う場合の例を説明する図である。
【０４５０】
図４３は、パリティデータを生成してキャッシュメモリ２９３に格納させる処理を説明するフロー図であり、パリティ生成処理等における図４２で示された処理に代えて適宜適用される。図４３のステップＳ１３０１では、パリティ制御部２３０が、集められた、パリティグループを生成する所定数のアドレス割当ブロックから、パリティデータを生成する。ステップＳ１３０２では、キャッシュメモリ２９３が、ステップＳ１３０１で生成されたパリティデータを保持する。
【０４５１】
ステップＳ１３０３では、パリティ制御部２３０が、パリティ対応リスト３９に該パリティデータを含む情報を登録することにより、パリティグループの登録を行う。
【０４５２】
図４４は、図示しないパリティデータ書き込みパトロール部が、キャッシュメモリ２９３に格納されたパリティデータを、半導体記憶素子群９に書き込む処理を説明するフロー図である。キャッシュメモリ２９３から半導体記憶素子群９にパリティデータを書き込む処理は、例えば、キャッシュメモリ２９３のパリティ用の全ての領域にパリティデータが格納され、新たなパリティデータを格納することができない場合、又は、キャッシュメモリ２９３のパリティ用領域の使用量が所定の閾値を超えた場合に、行われるとよい。
【０４５３】
なお、これらの場合に限らず、ホスト装置から、キャッシュメモリ２９３上にあるデータを全て半導体記憶素子に書き出すコマンドであるキャッシュフラッシュコマンドを受けた時や、電源切断の予告通知コマンドを受けた時に、キャッシュメモリ２９３上のパリティデータを半導体記憶素子群９に書き込ませてもよい。また、定期的に実行しても良く、コントローラ２００の処理負荷が低いときに実行しても良い。そのほか、予めまたは動的に定められたタイミングで実行しても良い。
【０４５４】
図４４のステップＳ１４０１では、図示しないパリティデータ書き込みパトロール部が、キャッシュメモリ２９３に格納されているパリティデータの中から、半導体記憶素子群９に書き込むパリティデータを選択する。選択の際に、たとえばキャッシュメモリ２９３に格納された順番がより古いパリティデータから書き出すことにより、パリティデータの更新をキャッシュメモリ上で行う可能性が高くなり、半導体記憶素子群９への書き込み処理を減じることができる。
【０４５５】
なお、格納順の判断基準は、例えば、更新回数、更新順序、又は、更新回数と更新順序とを所定の評価関数により評価した値、の何れか一により定められるとよい。なお、格納順の判断基準はこれに限られず、適切な判断基準を適宜採用することができる。
【０４５６】
ステップＳ１４０２では、誤り訂正制御部２６０が、ステップＳ１４０１で選択したパリティデータから、誤り検出情報及び誤り訂正情報を生成し、ブロックに書き込む内容を準備する。
【０４５７】
ステップＳ１４０３では、ブロック制御部２１０が、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。ステップＳ１４０４では、ステップＳ１４０３で確保した未割当ブロックに対する消去処理を行った後に、ステップＳ１４０１及びステップＳ１４０２で準備した書き込み内容を書き込む。ここでは、誤り検出情報及び誤り訂正情報を、データを書き込むブロックに記録する。しかし、誤り検出情報及び誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、半導体記憶素子群９以外の記憶領域に記録してもよい。
【０４５８】
ステップＳ１４０５では、ブロック制御部２１０が、ブロックテーブル１２における平準化情報を更新する。ステップＳ１４０６では、ブロック制御部２１０が、ブロックテーブル１２におけるブロック状態の情報をパリティ割当状態に変更する。これにより、ステップＳ１４０４で書き込み処理が行われたブロックがパリティ割当ブロックとなる。
【０４５９】
ステップＳ１４０７では、パリティ制御部２３０が、パリティ対応リスト３９における、パリティグループの情報を更新する処理を行う。より詳細には、図４３のステップＳ１３０２でパリティデータの所在がキャッシュメモリ２９３にある旨の情報により登録されたパリティグループの情報を、パリティデータの所在が書き込んだブロックである旨の情報に更新する。
【０４６０】
なおステップＳ１４０１からステップＳ１４０７の処理は、必要に応じて繰り返し実行されるとよい。例えば、キャッシュメモリ２９３の記憶領域があふれた場合、又は、キャッシュメモリ２９３の記憶領域におけるパリティデータの格納量が所定の閾値を超えた場合に、キャッシュメモリ２９３に格納される全てのパリティデータを書き出してもよく、その一部を書き出してもよい。
【０４６１】
例えば、キャッシュフラッシュコマンドを受けた場合は、全てパリティデータを書き出す。また例えば、電源切断の予告通知コマンドを受けた場合は、全てのパリティデータを書き出してもよく、一部を書き出してもよい。
【０４６２】
なお、キャッシュメモリ２９３に格納されるパリティデータのうちの一部のパリティデータを書き出す例として、パリティデータの書き出し量が多くて電源切断に間に合わないと判断される場合がある。この際に、その時点のパリティデータの管理情報を保存するとよい。パリティデータの管理情報は、所定のブロックに保存してもよく、又は、半導体記憶素子群９以外の記憶領域に記録してもよい。
【０４６３】
パリティデータの管理情報は、例えば、以下の情報があるが、以下に例示する情報に限られない。
・あるパリティグループのパリティデータが半導体記憶素子群９上にあるか否か、すなわち、電源切断でも消えない状態にあるか否か。
・あるパリティグループのパリティデータがキャッシュメモリ２９３上にあるか否か、すなわち、電源切断によって消える状態にあるか否か。
【０４６４】
なお、キャッシュメモリ２９３に格納されているパリティデータのうちの一部を書き出した場合、電源再投入後の適切なタイミングで、図示しない冗長状態再構成部が、パリティデータの管理情報に基づいて、電源切断によって消えてしまったパリティデータを生成し、キャッシュメモリ２９３または半導体記憶素子群９に書き込むとよい。これにより、電源切断前の冗長構成の状態が復元でき、パリティによる冗長構成を復元することができる。
【０４６５】
（復元処理）
読み込み処理等において、パリティによりデータを復元するにあたって、データを復元するためのパリティデータは、以下の２箇所の何れか一から読み込む。
（Ｊ１）半導体記憶素子群９のブロックにパリティデータが保存されている場合は、ブロックからパリティデータを読み込む。
【０４６６】
（Ｊ２）キャッシュメモリ２９３にパリティデータが保存されている場合は、キャッシュメモリ２９３からパリティデータを読み込む。この場合は、（Ｊ１）に比して、読み込み時間の短縮化が期待できる。
【０４６７】
（パリティデータ更新の演算）
図４５は、パリティデータを更新する際の演算方法を説明する図である。パリティデータを更新する際の演算は、以下の２通りの方法がある。なお、以下で説明するのは、書き込み処理等により、パリティグループを構成しているデータブロックのデータが更新され、その後、該パリティグループのパリティデータを更新する場合である。
【０４６８】
まず、書き込み処理等により、パリティグループを構成しているデータブロックのデータが１箇所更新され、その後、該パリティグループのパリティデータを更新する例を示す。より詳細には、図４５の（１）では、ＡないしＧのブロックに記録されているデータからパリティデータＰが生成されて、パリティグループが構成されている状態で、ブロックＣのデータが更新されてＣ’となった際に、パリティデータＰを更新し、パリティデータＰ’を生成する例を示している。
【０４６９】
第１の方法を、図４５（１）の式（１）に示す。式（１）は、パリティグループを構成するデータ群から更新後のパリティデータを計算する方法である。この方法は、更新後の情報のみでパリティデータを計算できる。一方、パリティグループを構成するデータの規定数が多いほど処理量が多くなる。
【０４７０】
第２の方法を、図４５（１）の式（２）に示す。式（２）は、更新前のデータ、更新前のパリティデータ、及び、更新後のデータから更新後のパリティデータを計算する方法である。この方法は、更新前の情報が必要になる。一方、第１の方法よりも処理量が少なくなる場合がある。
【０４７１】
次に、書き込み処理等により、パリティグループを構成しているデータブロックのデータが２箇所以上更新され、その後、該パリティグループのパリティデータを更新する例を示す。
【０４７２】
図４５（２）は、２箇所のデータが同時にまたは連続して更新された場合を説明する図である。より詳細には、図４５の（２）では、ＡないしＧのブロックに記録されているデータからパリティデータＰが生成されて、パリティグループが構成されている状態で、ブロックＣのデータが更新されてＣ’となり、同時にまたは連続してブロックＦのデータが更新されてＦ’となった際に、パリティデータＰを更新し、パリティデータＰ’を生成する例を示している。
２箇所のデータが同時にまたは連続して更新された場合でも、第１の方法によりパリティデータを計算する場合は、処理内容および処理量は、上記１箇所のデータが更新された場合と同様である。図４５（２）において、第２の方法によりパリティデータを計算する場合には、計算式（２）に示すように、１箇所のデータが更新された場合の演算結果の組み合わせとすることができる。
【０４７３】
したがって、パリティデータを計算する場合は、パリティグループを構成するデータ群の規定数に基づいて、第１の方法及び第２の方法を選択することで、処理量を削減することができる。
【０４７４】
ところで、第２の実施の形態の図８の書き込み処理の例では、ステップＳ１０３のマッピングの更新の際に、更新前ブロックを未割当ブロックとして回収する。また、ステップＳ１０５では、更新前のパリティ割当ブロックを未割当ブロックとして回収する。
【０４７５】
本実施の形態では、更新前ブロックと更新前のパリティ割当ブロックとを、それぞれ、ステップＳ１０３及びステップＳ１０５において未割当ブロックとして回収するのではなく、パリティデータを生成する際に回収してもよい。これにより、第２の方法で計算することが可能になる。
【０４７６】
なお、パリティデータを生成するまでデータを保持しておく場所は、ブロックでなくともよい。例えば、更新前ブロックのデータと更新前のパリティ割当ブロックのデータとをキャッシュメモリ２９３等に読み込んで保持しておいてもよい。これにより、未割当ブロックの消費量を抑えることができ、ウェアレベリングを好適に実施することができる。
【０４７７】
また、一部計算済みのデータをキャッシュメモリ２９３等に保存してもよい。例えば、図４５（２）の式（２）に含まれる、図４５（３）の式（１）に示す一部計算済みのデータＴをキャッシュメモリ２９３等に保存するとよい。パリティデータは、一部計算済みのデータＴと更新後のデータＣ’及びＦ’とから、図４５（３）の式（２）により計算できる。これにより、キャッシュメモリ２９３の消費量を抑えることができるとともに、パリティデータ生成時の計算量を抑えることができる。
【０４７８】
〔第１１の実施の形態〕
なお、本発明の実施の形態に係る半導体記憶装置が有するコントローラは、例えばＣＰＵ等で実現されてもよい。また、本発明の実施形態に係る半導体記憶素子の制御方法は、例えば、ＣＰＵがＲＯＭやハードディスク装置等に記憶されたプログラムに従い、ＲＡＭ等のメインメモリをワークエリアとして使用し、実行される。
【０４７９】
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【０４８０】
１     半導体記憶装置
２００、２００ａ、２００ｂ、２００ｃ、２００ｄ   コントローラ
９     半導体記憶素子
１１   アドレステーブル
１２   ブロックテーブル
３１   パリティ生成部
３２   復元部
３３   付け替え部
３９   パリティ対応リスト
６１   検出・訂正情報管理部
６２   誤り検出情報生成部
６３   誤り検出部
６４   誤り訂正情報生成部
６５   誤り訂正部
２１０ ブロック制御部
２１５ ブロック数変更部
２１６ ブロック群選択部
２２０、２２０ｄ     書き込み処理部
２２１ 読み込み処理部
２２３ その他のコマンド処理部
２２４ コマンド処理部
２３０、２３０ｄ     パリティ制御部
２４０ パリティ生成パトロール部
２４１ 読み込みパトロール部
２４２ 更新前ブロック回収部
２５０ 復元可否判断部
２６０ 誤り訂正制御部
２７０ 並び順情報管理部
２９１ ホストインタフェース部
２９２ 半導体記憶素子インタフェース部
２９３ キャッシュメモリ
２９９ 動的更新部
【図１】
2010204770.tif 000003
【図２】
2010204770.tif 000004
【図３】
2010204770.tif 000005
【図４−１】
2010204770.tif 000006
【図４−２】
2010204770.tif 000007
【図５】
2010204770.tif 000008
【図６】
2010204770.tif 000009
【図７】
2010204770.tif 000010
【図８】
2010204770.tif 000011
【図９】
2010204770.tif 000012
【図１０】
2010204770.tif 000013
【図１１】
2010204770.tif 000014
【図１２】
2010204770.tif 000015
【図１３】
2010204770.tif 000016
【図１４−１】
2010204770.tif 000017
【図１４−２】
2010204770.tif 000018
【図１５】
2010204770.tif 000019
【図１６−１】
2010204770.tif 000020
【図１６−２】
2010204770.tif 000021
【図１７】
2010204770.tif 000022
【図１８】
2010204770.tif 000023
【図１９】
2010204770.tif 000024
【図２０】
2010204770.tif 000025
【図２１】
2010204770.tif 000026
【図２２】
2010204770.tif 000027
【図２３】
2010204770.tif 000028
【図２４】
2010204770.tif 000029
【図２５】
2010204770.tif 000030
【図２６】
2010204770.tif 000031
【図２７】
2010204770.tif 000032
【図２８】
2010204770.tif 000033
【図２９】
2010204770.tif 000034
【図３０】
2010204770.tif 000035
【図３１】
2010204770.tif 000036
【図３２】
2010204770.tif 000037
【図３３】
2010204770.tif 000038
【図３４】
2010204770.tif 000039
【図３５】
2010204770.tif 000040
【図３６】
2010204770.tif 000041
【図３７】
2010204770.tif 000042
【図３８】
2010204770.tif 000043
【図３９】
2010204770.tif 000044
【図４０】
2010204770.tif 000045
【図４１】
2010204770.tif 000046
【図４２】
2010204770.tif 000047
【図４３】
2010204770.tif 000048
【図４４】
2010204770.tif 000049
【図４５】
2010204770.tif 000050