(57)【要約】  不揮発性メモリを含むメモリモジュールを複数備えた記憶装置システムにおいて、信頼性の向上や長寿命化等を実現する。このため、複数のメモリモジュール（ＳＴＧ）は、実際にその内部の不揮発性メモリに書き込んだライトデータ量（Ｗｓｔｇ）を制御回路ＤＫＣＴＬ０へ通達する。制御回路ＤＫＣＴＬ０は、当該ライトデータ量（Ｗｓｔｇ）と、複数のメモリモジュールに向けて既に発行済みの書き込み命令に伴うライトデータ量（Ｗｈ２ｄ）と、次の書き込み命令に伴うライトデータ量（ｎｔＷ）とから、各メモリモジュール毎の予測ライトデータ量（ｅＷｄ）を求める。そして、この予測ライトデータ量が最小のメモリモジュールへ次の書き込み命令を発行する。
2014038073.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリモジュールと、
前記複数のメモリモジュールを制御する第１制御回路とを備え、
前記複数のメモリモジュールのそれぞれは、複数の不揮発性メモリおよび前記複数の不揮発性メモリを制御する第２制御回路を備え、
前記第２制御回路は、前記複数の不揮発性メモリに対して実際に書き込みを行った第２書き込みデータ量を把握し、前記第２書き込みデータ量を前記第１制御回路に通達し、
前記第１制御回路は、前記複数のメモリモジュールに対して発行済みの書き込み命令に伴う第１書き込みデータ量を前記複数のメモリモジュール毎に把握し、前記第１書き込みデータ量と前記第２書き込みデータ量の比率となる第１比率を前記複数のメモリモジュール毎に計算し、当該計算結果を反映して、前記複数のメモリモジュールの中から次の書き込み命令を発行するメモリモジュールを選択する記憶装置システム。
【請求項２】
請求項１記載の記憶装置システムにおいて、
前記第１制御回路は、前記次の書き込み命令に伴う第３書き込みデータ量に前記第１比率を乗算したデータ量と前記第２書き込みデータ量との加算結果となる第４書き込みデータ量を前記複数のメモリモジュール毎に計算し、当該計算結果に基づいて、前記複数のメモリモジュールの中から前記次の書き込み命令を発行するメモリモジュールを選択する記憶装置システム。
【請求項３】
請求項２記載の記憶装置システムにおいて、
前記第１制御回路は、前記複数のメモリモジュール毎に計算した前記第４書き込みデータ量の中で、最小のデータ量を持つメモリモジュールを選択し、当該選択したメモリモジュールに前記次の書き込み命令を発行する記憶装置システム。
【請求項４】
請求項１記載の記憶装置システムにおいて、
前記第２制御回路は、更に、前記複数の不揮発性メモリにおける消去回数あるいは書き込み回数と残存寿命との依存関係を保持しており、前記依存関係に基づいて得られる前記残存寿命を前記第１制御回路に通達し、
前記第１制御回路は、更に、前記第２制御回路から通達された前記複数のメモリモジュール毎の前記残存寿命を反映して、前記複数のメモリモジュールの中から前記次の書き込み命令の発行先の候補を定め、当該候補の中から前記第１比率の計算結果を反映して前記次の書き込み命令を発行するメモリモジュールを選択する記憶装置システム。
【請求項５】
請求項４記載の記憶装置システムにおいて、
前記第１制御回路は、前記残存寿命の第１しきい値を保持しており、前記第１しきい値以上の前記残存寿命を持つ単数または複数のメモリモジュールを前記次の書き込み命令の発行先の候補として定める記憶装置システム。
【請求項６】
請求項５記載の記憶装置システムにおいて、
前記第１制御回路は、前記第１しきい値を可変制御する記憶装置システム。
【請求項７】
請求項６記載の記憶装置システムにおいて、
前記第１制御回路は、前記次の書き込み命令に伴う第３書き込みデータ量に前記第１比率を乗算したデータ量と前記第２書き込みデータ量との加算結果となる第４書き込みデータ量を前記複数のメモリモジュール毎に計算し、当該計算結果に基づいて、前記次の書き込み命令の発行先の候補の中から前記次の書き込み命令を発行するメモリモジュールを選択する記憶装置システム。
【請求項８】
請求項７記載の記憶装置システムにおいて、
前記第１制御回路は、前記複数のメモリモジュール毎に計算した前記第４書き込みデータ量の中で、最小のデータ量を持つメモリモジュールを選択し、当該選択したメモリモジュールに前記次の書き込み命令を発行する記憶装置システム。
【請求項９】
請求項１記載の記憶装置システムにおいて、
前記第２制御回路は、前記複数の不揮発性メモリを対象にウエアレベリングおよびガーベージコレクションを実行する記憶装置システム。
【請求項１０】
請求項９記載の記憶装置システムにおいて、
前記第２制御回路は、更に、前記複数の不揮発性メモリに含まれる消去状態の物理ブロック数を前記第１制御回路に通達し、
前記第１制御回路は、更に、前記消去状態の物理ブロック数の第２しきい値を保持しており、前記消去状態の物理ブロック数が前記第２しきい値以下であるメモリモジュールに対して前記ガーベージコレクションの実行命令を発行することで前記ガーベージコレクションを実行中であるメモリモジュールを把握し、前記次の書き込み命令を発行するメモリモジュールを選択する際には、前記ガーベージコレクションを実行中であるメモリモジュール以外の中から選択する記憶装置システム。
【請求項１１】
請求項９記載の記憶装置システムにおいて、
前記第２制御回路は、前記第１制御回路からの前記書き込み命令に応じて行った前記複数の不揮発性メモリに対する実際の書き込みが完了する毎に前記第２書き込みデータ量を前記第１制御回路に通達する記憶装置システム。
【請求項１２】
請求項９記載の記憶装置システムにおいて、
前記第２制御回路は、前記複数の不揮発性メモリを対象に行った前記ウエアレベリングが完了する毎に前記第２書き込みデータ量を前記第１制御回路に通達する記憶装置システム。
【請求項１３】
請求項９記載の記憶装置システムにおいて、
前記第２制御回路は、前記複数の不揮発性メモリを対象に行った前記ガーベージコレクションが完了する毎に前記第２書き込みデータ量を前記第１制御回路に通達する記憶装置システム。
【請求項１４】
複数のメモリモジュールと、
第１テーブルを持ち、ホストからの第１書き込み命令を受けて、前記第１書き込み命令に伴うデータの書き込み先を前記複数のメモリモジュールの中から前記第１テーブルに基づいて選択し、当該選択したメモリモジュールに第２書き込み命令を発行する第１制御回路とを有し、
前記複数のメモリモジュールのそれぞれは、複数の不揮発性メモリおよび前記複数の不揮発性メモリを制御する第２制御回路を備え、
前記第２制御回路は、前記複数の不揮発性メモリに対して、前記第２書き込み命令に伴う書き込みと、ウエアレベリングまたはガーベージコレクションに伴う書き込みを行い、前記第２書き込み命令に伴う書き込みと、前記ウエアレベリングまたは前記ガーベージコレクションに伴う書き込みによって生じる第２書き込みデータ量を把握し、前記第２書き込みデータ量を前記第１制御回路に通達し、
前記第１テーブルには、前記第２書き込みデータ量と、既に発行済みの前記第２書き込み命令に伴う第１書き込みデータ量とが前記複数のメモリモジュール毎に保持され、
前記第１制御回路は、前記第１テーブルに基づいて、前記第１書き込みデータ量と前記第２書き込みデータ量の比率となる第１比率を前記複数のメモリモジュール毎に計算し、当該計算結果を反映して、前記複数のメモリモジュールの中から次の前記第２書き込み命令を発行するメモリモジュールを選択する記憶装置システム。
【請求項１５】
請求項１４記載の記憶装置システムにおいて、
前記第２制御回路は、更に、前記複数の不揮発性メモリにおける消去回数あるいは書き込み回数と残存寿命との依存関係を保持しており、前記依存関係に基づいて得られる前記残存寿命を前記第１制御回路に通達し、
前記第１テーブルには、更に、前記残存寿命が前記複数のメモリモジュール毎に保持され、
前記第１制御回路は、更に、前記第１テーブル内の前記残存寿命を反映して、前記複数のメモリモジュールの中から次の前記第２書き込み命令の発行先の候補を定め、当該候補の中から前記第１比率の計算結果を反映して次の前記第２書き込み命令を発行するメモリモジュールを選択する記憶装置システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置システムに関し、例えば、ＳＳＤ（Solid State Drive）等の外部記憶装置（ストレージ）における制御技術に関する。
【背景技術】
【０００２】
近年、複数のＮＡＮＤ型フラッシュメモリと、コントローラから構成されるＳＳＤ（Solid State Drive）がストレージシステム、サーバー機器およびＬａｐｔｏｐ  ＰＣ等に利用されている。ＮＡＮＤ型フラッシュメモリには、消去回数に上限があり、データ書き込みサイズとデータ消去サイズが大きく異なることが広く知られている。【０００３】
特許文献１には、階層的な容量仮想化を実現すると共に、ストレージシステム全体での消去回数の偏りを軽減する技術が開示されている。具体的には、既に書き込まれたデータを対象に、それを適宜移動することで消去回数を平準化するという所謂スタティックウエアレベリングを行う技術が示されている。また、特許文献２にはフラッシュメモリを利用したストレージシステムの管理方法について開示されている。特許文献３には、ストレージシステムの電源遮断時の制御技術が開示されている。特許文献４にはＳＳＤの制御技術が開示されている。特許文献５にはＳＳＤとＨＤＤ間でのデータ転送技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１１／０１０３４４号
【特許文献２】特開２０１１−３１１１号公報
【特許文献３】特開２０１１−１３８２７３号公報
【特許文献４】特開２０１１−９０４９６号公報
【特許文献５】特開２００７−１１５２３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明者らは、本願に先立ち、ＳＳＤ（Solid State Drive）やメモリカードなどのストレージへ利用されているＮＡＮＤ型フラッシュメモリの制御方法について検討した。【０００６】
ＮＡＮＤ型フラッシュメモリに代表される不揮発性メモリは、あるメモリ領域へデータを書き込むためには、予め、そのメモリ領域のデータを消去する必要がある。この消去時の最小データ単位は例えば１Ｍバイト等であり、書き込み時の最小データ単位は例えば４Ｋバイト等である。つまり、４Ｋバイトのデータを書くために、１Ｍバイトの消去済メモリ領域を確保する必要がある。この１Ｍバイトの消去済メモリ領域を確保するために、ＳＳＤ内部ではガーベージコレクションと呼ばれる動作が必要となる。【０００７】
このガーベージコレクション動作では、ＳＳＤは、先ず、既に書き込み済の１Ｍバイトの不揮発性メモリ領域ＡおよびＢから、現時点で有効なデータを読み出し、これらのデータを集めて、ＲＡＭへ書き込む。次に、不揮発性メモリ領域ＡおよびＢを消去する。最後に、ＲＡＭへ書き込まれたデータをまとめて不揮発性メモリ領域Ａへ書き込む。このガーベージコレクション動作によって、１Ｍバイトの不揮発性メモリ領域Ｂが消去済メモリ領域となり、この不揮発性メモリ領域Ｂへ新たなにデータを書き込むことができる。【０００８】
しかしながら、このガーベージコレクション動作によって、ＳＳＤ内部では、ある不揮発正メモリ領域から他の不揮発性メモリ領域へのデータの移動が発生し、この際に、ホストコントローラからＳＳＤへ要求されたライトデータサイズよりも、大きなデータサイズの書き込みが行われる。このため、ＳＳＤの信頼性や寿命が低下する恐れがある。さらに、例えばＮＡＮＤ型フラッシュメモリを利用したＳＳＤを多数利用してストレージシステムを構築する場合、多数のＳＳＤを制御するストレージコントローラは、各ＳＳＤが内部で自立的に行うガーベージコレクション動作やウエアレベリングなどによって増加したライトデータ量を含んだ実際のライトデータ量を把握できない。このため、ストレージシステム（記憶装置システム）としての信頼性や寿命が低下する恐れがある。【０００９】
本発明は、このようなことを鑑みてなされたものであり、本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
本願において開示される発明のうち、代表的な実施の形態の概要を簡単に説明すれば、次のとおりである。【００１１】
本実施の形態による記憶装置システムは、複数のメモリモジュールと、複数のメモリモジュールを制御する第１制御回路とを備える。複数のメモリモジュールのそれぞれは、複数の不揮発性メモリとこれらを制御する第２制御回路を備える。第２制御回路は、複数の不揮発性メモリに対して実際に書き込みを行った第２書き込みデータ量を把握し、当該第２書き込みデータ量を第１制御回路に適宜通達する。第１制御回路は、複数のメモリモジュールに対して既に発行済みの書き込み命令に伴う第１書き込みデータ量を複数のメモリモジュール毎に把握し、第１書き込みデータ量と第２書き込みデータ量の比率となる第１比率を複数のメモリモジュール毎に計算する。そして、第１制御回路は、当該計算結果を反映して、複数のメモリモジュールの中から次の書き込み命令を発行するメモリモジュールを選択する。
【発明の効果】
【００１２】
本願において開示される発明のうち、代表的な実施の形態によって得られる効果を簡単に説明すると、不揮発性メモリを含むメモリモジュールを複数備えた記憶装置システムにおいて、信頼性の向上や長寿命化等が実現可能になる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態１による記憶装置システムにおいて、それを適用した情報処理システムの概略構成例を示すブロック図である。
【図２】図１におけるストレージコントローラの詳細な構成例を示すブロック図である。
【図３】図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作の一例を示すフローチャートである。
【図４Ａ】図３の補足図であり、ストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の保持内容の一例を示す図である。
【図４Ｂ】図３の補足図であり、ストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の他の保持内容の一例を示す図である。
【図５Ａ】図２のストレージモジュール用の制御回路が持つテーブル（ＳＴＧＴＢＬ）の保持内容の一例を示す図である。
【図５Ｂ】図２のストレージモジュール用の制御回路が持つテーブル（ＳＴＧＴＢＬ）の他の保持内容の一例を示す図である。
【図５Ｃ】図２のストレージモジュール用の制御回路が持つテーブル（ＳＴＧＴＢＬ）の更に他の保持内容の一例を示す図である。
【図５Ｄ】図２のストレージモジュール用の制御回路が持つテーブル（ＳＴＧＴＢＬ）の更に他の保持内容の一例を示す図である。
【図６】図１におけるストレージモジュールの詳細な構成例を示すブロック図である。
【図７】図１のストレージモジュール内で行われるウエアレベリング方法の一例を示すフロー図である。
【図８】図１のストレージモジュール内で行われるガーベージコレクションおよびウエアレベリング方法の一例を示すフロー図である。
【図９】図１におけるストレージモジュール用の制御回路およびストレージ用の制御回路が行う読み出し動作例を示すフロー図である。
【図１０】本発明の実施の形態２による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作の一例を示すフローチャートである。
【図１１Ａ】図１０の補足図であり、ストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の保持内容の一例を示す図である。
【図１１Ｂ】図１０の補足図であり、ストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の他の保持内容の一例を示す図である。
【図１２】本発明の実施の形態３による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作およびガーベージコレクションの管理動作の一例を示すフローチャートである。
【図１３Ａ】図１２の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の保持内容の一例を示す図である。
【図１３Ｂ】図１２の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の他の保持内容の一例を示す図である。
【図１３Ｃ】図１２の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の更に他の保持内容の一例を示す図である。
【図１４Ａ】図１２の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＧＥＴＢＬ）の保持内容の一例を示す図である。
【図１４Ｂ】図１２の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＧＥＴＢＬ）の他の保持内容の一例を示す図である。
【図１４Ｃ】図１２の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＧＥＴＢＬ）の更に他の保持内容の一例を示す図である。
【図１５】本発明の実施の形態４による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作および消去動作の一例を示すフローチャートである。
【図１６Ａ】図１５の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の保持内容の一例を示す図である。
【図１６Ｂ】図１５の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の他の保持内容の一例を示す図である。
【図１６Ｃ】図１５の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の更に他の保持内容の一例を示す図である。
【図１７】本発明の実施の形態５による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作およびガーベージコレクションの管理動作の一例を示すフローチャートである。
【図１８Ａ】図１７の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の保持内容の一例を示す図である。
【図１８Ｂ】図１７の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の他の保持内容の一例を示す図である。
【図１８Ｃ】図１７の補足図であり、図２のストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の更に他の保持内容の一例を示す図である。
【図１９】本発明の実施の形態５による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う読み出し動作の一例を示す説明図である。
【図２０Ａ】本発明の実施の形態２による記憶装置システムにおいて、ストレージモジュールのデータ保持特性の一例を示す説明図である。
【図２０Ｂ】図２０Ａのデータ保持特性をテーブル上で規定した一例を示す図である。
【図２１】本発明の実施の形態６による記憶装置システムにおいて、図１におけるストレージモジュールの詳細な構成例を示すブロック図である。
【図２２】図７のフローを概略的に説明する補足図である。
【図２３】図８のフローを概略的に説明する補足図である。
【発明を実施するための形態】
【００１４】
以下の実施の形態においては、便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明する。特に明示した場合を除き、それらは互いに無関係ではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１５】
さらに、以下の実施の形態において、その構成要素（要素ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００１６】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には同一または関連する符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
【００１７】
（実施の形態１）
《情報処理システムの概要》
図１は、本発明の実施の形態１による記憶装置システムにおいて、それを適用した情報処理システムの概略構成例を示すブロック図である。図１に示す情報処理システムは、情報処理装置ＳＲＶ０〜ＳＲＶｍと、ストレージシステム（記憶装置システム）ＳＴＲＧＳＹＳを備える。ＳＴＲＧＳＹＳは、複数のストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧｎ＋４と、ＳＲＶ０〜ＳＲＶｍからの要求に応じてＳＴＧ０〜ＳＴＧｎ＋４の制御を行うストレージコントローラＳＴＲＧＣＯＮＴとを備えている。情報処理装置ＳＲＶ０〜ＳＲＶｍとストレージコントローラＳＴＲＧＣＯＮＴはインターフェース信号Ｈ２Ｓ＿ＩＦにて接続されており、ストレージコントローラＳＴＲＧＣＯＮＴとストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４はインターフェース信号Ｈ２Ｄ＿ＩＦにて接続されている。
【００１８】
インターフェース信号Ｈ２Ｓ＿ＩＦおよびＨ２Ｄ＿ＩＦの通信方式には、例えば、シリアルインターフェース信号方式、パラレルインターフェース信号方式、光インターフェース信号方式などを利用できる。代表的なインターフェース信号方式には、ＳＣＳＩ（Small Computer System Interface）、ＳＡＴＡ（Serial Advanced Technology Attachment）、ＳＡＳ（Serial Attached SCSI）、ＦＣ（Fibre Channel）などがあり、いうまでもなく、全ての方式を利用することができる。
【００１９】
情報処理装置ＳＲＶ０〜ＳＲＶｍは、例えばサーバー装置等であり、様々なＯＳ上で、様々なアプリケーションを実行する装置である。ＳＲＶ０〜ＳＲＶｍのそれぞれは、複数のプロセッサコアＣＰＵＣＲ０〜ＣＰＵＣＲｋを持つプロセッサユニットＣＰＵと、ランダムアクセスメモリＲＡＭと、バックプレーン用のインターフェース回路ＢＩＦおよびストレージシステム用のインターフェース回路ＳＴＩＦを備える。ＢＩＦは、各ＳＲＶ０〜ＳＲＶｍ間でバックプレーンＢＰを介して通信を行うための回路であり、ＳＴＩＦは、ストレージシステム（記憶装置システム）ＳＴＲＧＳＹＳに対して、インターフェース信号Ｈ２Ｓ＿ＩＦを用いて各種要求（ライト要求（ＷＱ）、リード要求（ＲＱ）等）を行うための回路である。
【００２０】
ストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧｎ＋４には、情報処理装置ＳＲＶ０〜ＳＲＶｍで必要なデータ、アプリケーションおよびＯＳなどが格納される。ＳＴＧ０〜ＳＴＧｎ＋４は、特に限定しないが、例えばＳＳＤ（Solid State Drive）等に該当するものである。ＳＴＧ０〜ＳＴＧｎ＋４は、それぞれ同様の構成を備えており、例えばＳＴＧ０を代表に説明すると、不揮発性メモリＮＶＭ０〜ＮＶＭ７と、ランダムアクセスメモリＲＡＭｓｔと、これらに対するアクセス等の制御を行うストレージ用の制御回路ＳＴＣＴ０を備えている。ＮＶＭ０〜ＮＶＭ７には、例えば、ＮＡＮＤ型フラッシュメモリ、ＮＯＲ型フラッシュメモリ、相変化型メモリ、抵抗変化型メモリ、磁気メモリ、強誘電体メモリなどを適用可能である。
【００２１】
情報処理装置ＳＲＶ０〜ＳＲＶｍは、例えば、アプリケーションを実行する際に、必要なプログラムやデータのリード要求（ＲＱ）をストレージコントローラＳＴＲＧＣＯＮＴへ発行する。また、ＳＲＶ０〜ＳＲＶｍは、自身の実行結果やデータを格納するためにライト要求（書き込み命令）（ＷＱ）をストレージコントローラＳＴＲＧＣＯＮＴへ発行する。リード要求（ＲＱ）には論理アドレス（ＬＡＤ）、データ読み出し命令（ＲＤ）、セクタカウント（ＳＥＣ）などが含まれ、また、ライト要求（ＷＱ）には論理アドレス（ＬＡＤ）、データ書込み命令（ＷＲＴ）、セクタカウント（ＳＥＣ）および書き込みデータ（ＷＤＡＴＡ）などが含まれる。
【００２２】
ストレージコントローラＳＴＲＧＣＯＮＴは、キャッシュメモリＣＭ０〜ＣＭ３およびランダムアクセスメモリＲＡＭ０〜ＲＡＭ３を含む内部メモリと、ホスト用の制御回路ＨＣＴＬ０，ＨＣＴＬ１と、ストレージモジュール用の制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１を備える。加えて、ＳＴＲＧＣＯＮＴは、ストレージシステム用のインターフェース回路ＳＴＩＦ（００，０１，…，ｍ０，ｍ１）とストレージモジュール用のインターフェース回路ＳＩＦＣ（００，０１，…，ｎ０，ｎ１）を備える。
【００２３】
ホスト用の制御回路ＨＣＴＬ０，ＨＣＴＬ１は、主に、情報処理装置ＳＲＶ０〜ＳＲＶｍとの間の通信（例えばＳＲＶ０〜ＳＲＶｍからの各種要求（リード要求（ＲＱ）やライト要求（ＷＱ）等）の受け付けや、ＳＲＶ０〜ＳＲＶｍに向けた応答等）を制御する回路である。このＨＣＴＬ０，ＨＣＴＬ１とＳＲＶ０〜ＳＲＶｍとの間の通信に際し、インターフェース回路ＳＴＩＦは、インターフェース信号Ｈ２Ｓ＿ＩＦの通信方式に応じたプロトコル変換を行う。ストレージモジュール用の制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１は、主に、ＨＣＴＬ０，ＨＣＴＬ１によって受け付けられたＳＲＶ０〜ＳＲＶｍからの各種要求に応じて、ストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４に対してアクセス要求等の通信を行う回路である。このアクセス要求等の通信に際し、インターフェース回路ＳＩＦＣは、インターフェース信号Ｈ２Ｄ＿ＩＦの通信方式に応じたプロトコル変換を行う。
【００２４】
なお、特に限定はしないが、ここでは、ホスト用の制御回路ＨＣＴＬ０，ＨＣＴＬ１は、２系統設けられ、一方（例えばＨＣＴＬ１）は他方（例えばＨＣＴＬ０）が故障した際の予備用として備わっている。ストレージモジュール用の制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１、インターフェース回路ＳＴＩＦ（例えばＳＴＩＦ００とＳＴＩＦ０１）、インターフェース回路ＳＩＦＣ（例えばＳＩＦＣ００とＳＩＦＣ０１）も同様に、耐障害性の向上のため、一方は他方の予備用として備わっている。また、特に限定はしないが、ここでは、１個のＳＩＦＣ（例えばＳＩＦＣ００）に５個のストレージモジュール（メモリモジュール）（ここではＳＴＧ０〜ＳＴＧ４）が接続される構成となっている。この数は、例えば、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）の仕様等（例えばデータを４個のＳＴＧに分割して書き込み、それらのパリティを残りの１個に書き込む等）を考慮して適宜定めることが可能である。
【００２５】
次に、図１の情報処理システムの全体動作について簡単に説明する。ホスト用の制御回路ＨＣＴＬ０，ＨＣＴＬ１は、情報処理装置ＳＲＶ０〜ＳＲＶｍからのリード要求（ＲＱ）やライト要求（書き込み命令）（ＷＱ）等をストレージシステム用のインターフェース回路ＳＴＩＦ（００，０１，…，ｍ０，ｍ１）を介して受け付ける。例えば、リード要求（ＲＱ）を受け付けた場合、ＨＣＴＬ０，ＨＣＴＬ１は、先ず、リード要求（ＲＱ）に含まれる論理アドレス（ＬＡＤ）のデータ（ＲＤＡＴＡ）が内部に備わったキャッシュメモリＣＭ０〜ＣＭ３に格納されているかをチェックする。
【００２６】
ここで、キャッシュメモリＣＭ０〜ＣＭ３にデータ（ＲＤＡＴＡ）が格納されていれば、つまりヒットの場合、ホスト用の制御回路ＨＣＴＬ０，ＨＣＴＬ１は、ＣＭ０〜ＣＭ３からデータ（ＲＤＡＴＡ）を読み出し、インターフェース回路ＳＴＩＦ（インターフェース信号Ｈ２Ｓ＿ＩＦ）を通じて情報処理装置ＳＲＶ０〜ＳＲＶｍへ転送する。一方、ＣＭ０〜ＣＭ３にデータ（ＲＤＡＴＡ）が格納されていなければ、つまりミスヒットの場合、ＨＣＴＬ０，ＨＣＴＬ１は、ストレージモジュール用の制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１に通知を行う。これを受けて、ＤＫＣＴＬ０，ＤＫＣＴＬ１は、インターフェース回路ＳＩＦＣ（００，０１，…，ｎ０，ｎ１）（インターフェース信号Ｈ２Ｄ＿ＩＦ）を介してストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧｎ＋４にリードアクセス要求（ＲＲＥＱ）を発行する。その後、ＤＫＣＴＬ０，ＤＫＣＴＬ１は、ＳＴＧ０〜ＳＴＧｎ＋４から読み出されたデータ（ＲＤＡＴＡ）をＣＭ０〜ＣＭ３へ転送し、さらに、ＨＣＴＬ０，ＨＣＴＬ１およびＳＴＩＦ（Ｈ２Ｓ＿ＩＦ）を通じてＳＲＶ０〜ＳＲＶｍへ転送する。
【００２７】
また、ホスト用の制御回路ＨＣＴＬ０，ＨＣＴＬ１は、情報処理装置ＳＲＶ０〜ＳＲＶｍからのライト要求（ＷＱ）を受け付けた場合、先ず、ライト要求（ＷＱ）に含まれる論理アドレス（ＬＡＤ）が、キャッシュメモリＣＭ０〜ＣＭ３にエントリされている論理アドレス（ＬＡＤ）の中のいずれかと一致するかを判定する。ここで、一致した場合、つまりヒットの場合、ＨＣＴＬ０，ＨＣＴＬ１は、ライト要求（ＷＱ）に含まれるライトデータ（ＷＤＡＴＡ）をＣＭ０〜ＣＭ３へ書き込む。一方、不一致の場合、つまりミスヒットの場合、ＨＣＴＬ０，ＨＣＴＬ１は、例えばＣＭ０〜ＣＭ３の中で最も古く利用された論理アドレス（ＬＡＤ）に対するライトデータ（ＷＤＴ）を、いったんランダムアクセスメモリＲＡＭ０〜ＲＡＭ３へ転送し、次いで、ライトデータ（ＷＤＡＴＡ）をＣＭ０〜ＣＭ３へ書き込む。その後、ＨＣＴＬ０，ＨＣＴＬ１からＤＫＣＴＬ０，ＤＫＣＴＬ１に対して通知が行われ、これを受けて、ＤＫＣＴＬ０，ＤＫＣＴＬ１は、ストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧｎ＋４にライトアクセス要求（書き込み命令）（ＷＲＥＱ）を発行する。すなわち、当該ライトアクセス要求（ＷＲＥＱ）によって、ＲＡＭ０〜ＲＡＭ３に転送されたライトデータ（ＷＤＴ）を、インターフェース回路ＳＩＦＣ（００，０１，…，ｎ０，ｎ１）（インターフェース信号Ｈ２Ｄ＿ＩＦ）を介してＳＴＧ０〜ＳＴＧｎ＋４へ書き込む（ライトバックする）。
【００２８】
図２は、図１におけるストレージコントローラＳＴＲＧＣＯＮＴの詳細な構成例を示すブロック図である。図２に示すストレージコントローラＳＴＲＧＣＯＮＴでは、図１に示したホスト用の制御回路ＨＣＴＬ０，ＨＣＴＬ１およびストレージモジュール用の制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１に関する詳細な構成例が示されている。ＨＣＴＬ０，ＨＣＴＬ１のそれぞれは、キャッシュ制御回路ＣＭＣＴＬ、リード制御回路ＨＲＤＣＴＬ、ライト制御回路ＨＷＴＣＴＬ、および診断回路ＨＤＩＡＧを備える。
【００２９】
キャッシュ制御回路ＣＭＣＴＬは、キャッシュメモリＣＭ０〜ＣＭ３のヒット・ミスヒットの判定や、ＣＭ０〜ＣＭ３のアクセス制御などを行う。リード制御回路ＨＲＤＣＴＬは、情報処理装置（ホスト）ＳＲＶ０〜ＳＲＶｍからのリード要求（ＲＱ）を受け付けた際に、図１で述べたようなリード要求（ＲＱ）に伴う各種処理をＣＭＣＴＬと共に行う。ライト制御回路ＨＷＴＣＴＬは、ＳＲＶ０〜ＳＲＶｍからのライト要求（ＷＱ）を受け付けた際に、図１で述べたようなライト要求（ＷＱ）に伴う各種処理をＣＭＣＴＬと共に行う。診断回路ＨＤＩＡＧは、図１で述べた耐障害性の向上のため、自身の各種機能が正常か否かをテストする機能を備える。例えば、制御回路ＨＣＴＬ０内のＨＤＩＡＧにおいて異常が検出された際、当該ＨＤＩＡＧは制御回路ＨＣＴＬ１に対して通知を行い、これによって正規用のＨＣＴＬ０が非活性化され、代わりに予備用のＨＣＴＬ１が活性化される。
【００３０】
制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１のそれぞれは、ライト制御回路ＷＴＣＴＬ、リード制御回路ＲＤＣＴＬ、データ消去制御回路ＥＲＳＣＴＬ、ガーベージコレクション制御回路ＧＣＣＴＬ、診断回路ＤＩＡＧ、および３個のテーブルＭＧＴＢＬ，ＳＴＧＴＢＬ，ＧＥＴＢＬを備えている。ＤＩＡＧは、ＨＣＴＬ０，ＨＣＴＬ１内の診断回路ＨＤＩＡＧの場合と同様に、自己の内部機能をテストする機能を備え、その結果によってＤＫＣＴＬ０とＤＫＣＴＬ１の活性化・非活性化が切り替えられる。各種テーブルＭＧＴＢＬ，ＳＴＧＴＢＬ，ＧＥＴＢＬは、例えばランダムアクセスメモリＲＡＭ０〜ＲＡＭ３内の記憶情報が実体となっており、制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１は、当該各種テーブルの管理を行う。
【００３１】
テーブルＭＧＴＢＬでは、詳細は図４を始めとして以降にて適宜説明するが、各ストレージモジュール（メモリモジュール）毎の各種情報（Ｗｓｔｇ，Ｗｈ２ｄ，ｎｔＷ，ＷＡＦ，ｅＷｄ，Ｒｅｔ，Ｅｓｚ等）が管理される。Ｗｓｔｇは、各ストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧｎ＋４が自身の不揮発性メモリＮＶＭ０〜ＮＶＭ７へ実際に書き込んだデータサイズを示す。Ｗｈ２ｄは、制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１が各ストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４に対して既にライトアクセス要求（書き込み命令）（ＷＲＥＱ）を発行したデータサイズを示す。すなわち、データサイズＷｈ２ｄは、前述したように、キャッシュメモリＣＭ０〜ＣＭ３のミスヒット時にランダムアクセスメモリＲＡＭ０〜ＲＡＭ３へ転送されたライトデータ（ＷＤＴ）のサイズに等しく、結果的に、情報処理装置ＳＲＶ０〜ＳＲＶｍからのライト要求（ＷＱ）に含まれるライトデータ（ＷＤＡＴＡ）のサイズに等しい。
【００３２】
ｎｔＷは、次のライトアクセス要求（書き込み命令）（ＷＲＥＱ）に含まれるライトデータ（ＷＤＴ）のデータサイズを示す。ＷＡＦは、データサイズ（Ｗｈ２ｄ）とデータサイズ（Ｗｓｔｇ）のライトデータサイズ比率（＝Ｗｓｔｇ／Ｗｈ２ｄ）を示す。ｅＷｄは、予想ライトデータサイズ（＝Ｗｓｔｇ＋ｎｔＷｘＷＡＦ）を示す。Ｒｅｔは、各ストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４のデータリテンション時間を示す。Ｅｓｚは、各ストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４に含まれる消去状態の物理ブロック数を示す。
【００３３】
テーブルＳＴＧＴＢＬでは、詳細は図５等で説明するが、論理アドレス（ＬＡＤ）をストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧｎ＋４内のどの番号に割り当てたかが管理される。テーブルＧＥＴＢＬでは、詳細は図１４等で説明するが、各ストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４がガーベージコレクション動作中かデータ消去動作中かといったステータスが管理される。また、詳細は後述するが、ライト制御回路ＷＴＣＴＬは、これらの各テーブルを適宜利用し、ＳＴＧ０〜ＳＴＧｎ＋４に対してライトアクセス要求（書き込み命令）（ＷＲＥＱ）を発行する。同様に、各テーブルを利用して、リード制御回路ＲＤＣＴＬはリードアクセス要求（ＲＲＥＱ）を発行し、データ消去制御回路ＥＲＳＣＴＬは消去アクセス要求を発行し、ガーベージコレクション制御回路ＧＣＣＴＬはガーベージコレクション要求を発行する。
【００３４】
図１および図２のような構成において、各ストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧｎ＋４に利用されている不揮発性メモリＮＶＭ０〜ＮＶＭ７には書き換え回数の制限があり、特定の不揮発性メモリ内の特定のアドレスへ書き込みが集中するとＳＴＧ０〜ＳＴＧｎ＋４の寿命が短くなってしまう。一方、各ストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４において、ストレージ用の制御回路ＳＴＣＴは、ＮＶＭ０〜ＮＶＭ７の書き込み回数をあるデータサイズ単位で管理しており、この書き込み回数を平準化するようにＮＶＭ０〜ＮＶＭ７に書き込みを行っている。この書き込み回数を平準化するために、制御回路ＳＴＣＴは、例えば、引用文献１等にも記載されているようなスタティックウエアレベリングと呼ばれる方式を用いて、ある不揮発性メモリから他の不揮発性メモリへデータを移動させる場合がある。この場合、不揮発性メモリでは、制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１から要求されたライトデータ（ＷＤＴ）のサイズよりも大きなサイズが書き込まれることになる。
【００３５】
また、ＮＡＮＤ型フラッシュメモリに代表される不揮発性メモリは、あるメモリ領域へデータを書き込むためには、予め、そのメモリ領域のデータを消去する必要があり、この消去時の最小データ単位は例えば１Ｍバイトで、書込み時の最小データ単位は例えば４Ｋバイトである。つまり、４Ｋバイトのデータを書くために、１Ｍバイトの消去済メモリ領域を確保する必要がある。この１Ｍバイトの消去済メモリ領域を確保するために、制御回路ＳＴＣＴは、ガーベージコレクション動作を行う場合がある。このガーベージコレクション動作の際に、ＳＴＣＴは、例えば、先ず、既に書き込み済の１Ｍバイトの不揮発性メモリ領域「Ａ」および「Ｂ」から、現時点で有効なデータを読みだし、これらのデータを集めて、ランダムアクセスメモリＲＡＭｓｔへ書き込む。次に、不揮発性メモリ領域「Ａ」および「Ｂ」を消去する。最後に、ＲＡＭｓｔへ書き込まれたデータをまとめて不揮発性メモリ領域「Ａ」へ書き込む。これによって、１Ｍバイトの不揮発性メモリ領域「Ｂ」が消去済メモリ領域となり、この不揮発性メモリ領域「Ｂ」へ新たなデータを書き込むことが可能になる。ただし、この場合、ある不揮発正メモリ領域から他の不揮発性メモリ領域へデータの移動が発生するため、不揮発性メモリでは、制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１から要求されたライトデータ（ＷＤＴ）のサイズよりも大きなサイズが書き込まれることになる。
【００３６】
さらに、ＲＡＩＤ等に代表されるように、各ストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４には、制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１から要求されたライトデータ（ＷＤＴ）と共に、当該ライトデータに対して生成されたパリティデータ等のエラー検出・訂正符号が書き込まれる場合がある。この場合においても、ＳＴＧ０〜ＳＴＧｎ＋４内の不揮発性メモリでは、制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１から要求されたライトデータ（ＷＤＴ）のサイズよりも大きなサイズが書き込まれることになる。
【００３７】
このように、各ストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧｎ＋４内において、不揮発性メモリＮＶＭ０〜ＮＶＭ７に実際に書き込まれるデータサイズＷｓｔｇは、制御回路ＤＫＣＴＬ０，ＤＫＣＴＬ１がＳＴＧ０〜ＳＴＧｎ＋４へ要求したライトデータ（ＷＤＴ）のサイズ（すなわちデータサイズＷｈ２ｄ）より大きくなり得る。この際に、ライトアクセス要求（書き込み命令）（ＷＲＥＱ）に伴うデータサイズＷｈ２ｄに対して実際に書き込まれるデータサイズＷｓｔｇがどの程度増大するかは、例えばライト要求（ＷＱ）（ライトアクセス要求（ＷＲＥＱ））に伴うアドレスの局所性等に応じて変化する。ここで、当該アドレスは、ＳＴＧ０〜ＳＴＧｎ＋４のいずれかに対して適宜割り当てられるため、このデータサイズＷｈ２ｄに対してデータサイズＷｓｔｇがどの程度増大するかは、ＳＴＧ０〜ＳＴＧｎ＋４同士の間で大きく異なる場合がある。
【００３８】
そこで、詳細は後述するが、ストレージコントローラＳＴＲＧＣＯＮＴは、現在の処理対象であるライトアクセス要求（ＷＲＥＱ）におけるライトデータ量を基に実際に書き込まれるライトデータ量を予測し、この予測ライトデータ量が少ないストレージモジュールを選択し、そこへ当該ライトアクセス要求（ＷＲＥＱ）を発行する機能を備える。言い換えれば、ストレージモジュール間でダイナミックウエアレベリングを行う機能を備える。これによって、各ストレージモジュール内で書き換え回数が平準化されるのみならず、各ストレージモジュール間でも書き換え回数が平準化され、図１のストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧｎ＋４全体として寿命の向上が図れる。なお、ダイナミックウエアレベリングとは、既に書き込まれたデータを適宜移動することで平準化（ウエアレベリング）を行う所謂スタティックウエアレベリングと異なり、データを書き込む際にその書き込み先を適宜選択することで平準化を行う方式である。
【００３９】
《ストレージモジュール間ウエアレベリング》
以下、説明を分かり易くするため、図１において４個のストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧ３を備える場合を例とし、ストレージモジュール用の制御回路ＤＫＣＴＬ０が行う書き込み動作について図３〜図５を用いて説明する。図３は、図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作の一例を示すフローチャートである。図４Ａおよび図４Ｂは、図３の補足図であり、ストレージモジュール用の制御回路が持つテーブル（ＭＧＴＢＬ）の保持内容の一例を示す図である。図５Ａ、図５Ｂ、図５Ｃおよび図５Ｄは、図２のストレージモジュール用の制御回路が持つテーブル（ＳＴＧＴＢＬ）の保持内容の一例を示す図である。
【００４０】
図４Ａおよび図４Ｂには、制御回路ＤＫＣＴＬ０とストレージモジュールＳＴＧ０〜ＳＴＧ３の間で行われる動作と、この動作に伴い、ＤＫＣＴＬ０内のテーブルＭＧＴＢＬの値がどのように遷移するかが示されている。ＭＧＴＢＬ内には、データサイズｎｔＷと、各ストレージモジュールＳＴＧ０〜ＳＴＧ３毎の、データサイズＷｈ２ｄ、データサイズＷｓｔｇ、ライトデータサイズ比率ＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）、および予想ライトデータサイズｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷｘＷＡＦ）とが保持されている。図２で述べたように、ｎｔＷは、現在の処理対象となっているライトアクセス要求（書き込み命令）（ＷＲＥＱ）に含まれるライトデータ（ＷＤＴ）のデータサイズである。Ｗｈ２ｄは制御回路ＤＫＣＴＬ０が所定のストレージモジュールに対して既に発行したライトアクセス要求（ＷＲＥＱ）に伴うライトデータ（ＷＤＴ）のデータサイズである。Ｗｓｔｇは、各ストレージモジュールＳＴＧ０〜ＳＴＧ３が、実際に自身の不揮発性メモリに書き込みを行ったデータサイズである。
【００４１】
データサイズＷｈ２ｄに関しては、制御回路ＤＫＣＴＬ０自身が各ストレージモジュールＳＴＧ０〜ＳＴＧ３に対して実際に送信しているライトデータ（ＷＤＴ）のサイズ（ホストからのライト要求（ＷＱ）に含まれるライトデータ（ＷＤＡＴＡ）のサイズに等しい）であるため、ＤＫＣＴＬ０自身によって認識することができる。データサイズＷｓｔｇに関しては、図１のストレージモジュールＳＴＧ内の制御回路ＳＴＣＴが不揮発性メモリＮＶＭ０〜ＮＶＭ７に対して実際に書き込みを行ったデータのサイズであるため、ＳＴＣＴによって認識することができ、ＤＫＣＴＬ０は、当該データサイズを、ＳＴＣＴから取得することで認識することができる。Ｗｈ２ｄ，Ｗｓｔｇの値は、例えばストレージモジュールを初めて使用した時からその寿命が尽きるまで累積的に更新される。ここで、ＳＴＣＴは、例えば、図８で後述するようなガーベージコレクション動作（＋ウエアレベリング動作）を行った際や、あるいは、スタティックウエアレベリング動作を行った際などで、ＤＫＣＴＬ０からのライトアクセス要求（書き込み命令）（ＷＲＥＱ）とは関係なくＷｓｔｇの値を増大させていくことになる。
【００４２】
スタティックウエアレベリング動作は、特に限定しないが、例えば、データが有効な物理アドレスにおける書き込み回数と、データが無効な物理アドレスにおける書き込み回数との間の差分を低減する為のものなどが挙げられる。すなわち、データが有効な物理アドレスは、当該物理アドレスを対象としたライト命令がその後に生じない限り有効であり続け、その結果、当該物理アドレスにおける書き込み回数は増大しないが、データが無効な物理アドレスは、消去されたのちに書き込み先の候補となるため当該物理アドレスにおける書き込み回数は増大していく。その結果、有効な物理アドレスの書き込み回数と、無効な物理アドレスの書き込み回数との間で差分が増大していく場合がある。そこで、スタティックウエアレベリング動作を用いて、例えば、定期的に、有効かつ書き込み回数が少ない物理アドレスのデータを、無効かつ書き込み回数が多い物理アドレスに移動し、当該データ移動元の有効かつ書き込み回数が少ない物理アドレスを無効とし、さらに、当該データの移動先の無効かつ書き込み回数が多い物理アドレスを有効にすれば、全体として書き込み回数を平準化することが可能になる。
【００４３】
図５Ａ、図５Ｂ、図５Ｃおよび図５Ｄに示すテーブルＳＴＧＴＢＬには、ライトアクセス要求（書き込み命令）（ＷＲＥＱ）に含まれる論理アドレス（ＬＡＤ）と、当該ＬＡＤのデータが格納されているストレージモジュールＳＴＧ０〜ＳＴＧ３の番号（ＳＴＧ  Ｎｏ）と、当該ＬＡＤのデータが有効か無効かを示す有効情報ＶＬＤが格納される。ライトアクセス要求（ＷＲＥＱ）に含まれる論理アドレス（ＬＡＤ）は、情報処理装置（ホスト）ＳＲＶ０〜ＳＲＶｍからのライト要求（書き込み命令）（ＷＱ）に含まれる論理アドレスに等しいか、あるいはライト要求（ＷＱ）に含まれる論理アドレスから一義的に定められる。有効情報ＶＬＤが“１”であれば、そのＬＡＤのデータは有効を意味し、“０”であれば無効を意味する。例えば、図５Ａを例とすると、論理アドレスＬＡＤの「０」に対応するデータは、有効であり（有効情報ＶＬＤ＝“１”）、ストレージモジュールの番号「０」（すなわちＳＴＧ０）に格納されていることを示す。また、論理アドレスＬＡＤの「１」に対応するデータは、有効であり（有効情報ＶＬＤ＝“１”）、ストレージモジュールの番号「１」（すなわちＳＴＧ１）に格納されていることを示す。
【００４４】
ここで、図３のフローチャートについて説明する。まず、制御回路ＤＫＣＴＬ０は、必要に応じて（例えばストレージコントローラＳＴＲＧＣＯＮＴへの電源投入直後などで）、インターフェース信号Ｈ２Ｄ＿ＩＦを通じて、ストレージモジュールＳＴＧ０〜ＳＴＧ３へデータサイズＷｓｔｇおよびＷｈ２ｄの通達要求を発行する。これに応じて各ストレージモジュールＳＴＧ０〜ＳＴＧ３は、データサイズＷｓｔｇ（Ｗｓｔｇ０（４０）、Ｗｓｔｇ１（１５）、Ｗｓｔｇ２（１０）、Ｗｓｔｇ３（２０））およびＷｈ２ｄ（Ｗｈ２ｄ０（１０）、Ｗｈ２ｄ１（５）、Ｗｈ２ｄ２（５）、Ｗｈ２ｄ３（１０））をＤＫＣＴＬ０へ返信する（図３：Ｓｔｅｐ１、図４Ａ）。Ｗｓｔｇ０（４０）を例として、ここでは、括弧内の数字「４０」が必要な情報（ここではデータサイズ）を表している。
【００４５】
続いて、制御回路ＤＫＣＴＬ０は、これらデータサイズＷｓｔｇおよびＷｈ２ｄをテーブルＭＧＴＢＬへ設定し更新する（図３：Ｓｔｅｐ２、図４Ａ）。ここで、前提として、ＤＫＣＴＬ０は、現在、データサイズｎｔＷ１（ここでは１０とする）のライトデータ（ＷＤＴ［１］）と論理アドレス（ここでは１２３とする）とを含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）を処理対象としているものとする。この場合、ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、ＭＧＴＢＬ内のＷｓｔｇおよびＷｈ２ｄを利用して、ＳＴＧ０〜ＳＴＧ３毎のライトデータサイズ比率ＷＡＦを求め、これに加えてｎｔＷ１を利用して予想ライトデータサイズｅＷｄを求め、ＭＧＴＢＬへ設定し更新する（図３：Ｓｔｅｐ３、図４Ａ）。図４Ａの例では、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）は、それぞれ、ＷＡＦ０＝４、ＷＡＦ１＝３、ＷＡＦ２＝２、ＷＡＦ３＝２となる。また、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷ×ＷＡＦ）は、それぞれ、ｅＷｄ０＝８０、ｅＷｄ１＝４５、ｅＷｄ２＝３０、ｅＷｄ３＝４０となる。
【００４６】
次に、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、予想ライトデータサイズｅＷｄが最小値（Ｍｉｎ．）であるストレージモジュール（ここではＳＴＧ２）を選択する（図３：Ｓｔｅｐ４、図４Ａ）。次いで、もし、ストレージモジュールＳＴＧ０〜ＳＴＧ３からのデータサイズＷｓｔｇの通達があれば、Ｓｔｅｐ２へ進み、再度、Ｓｔｅｐ２〜Ｓｔｅｐ４を実行する。一方、ＳＴＧ０〜ＳＴＧ３からのＷｓｔｇの通達が無ければ、Ｓｔｅｐ６へ進む（図３：Ｓｔｅｐ５）。
【００４７】
Ｓｔｅｐ６において、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ４で選択したストレージモジュールＳＴＧ２へ、データサイズｎｔＷ１（＝１０）のライトデータ（ＷＤＴ［１］）と論理アドレスＬＡＤ（＝１２３）を含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）を発行する（図４Ａ）。次いで、ＷＴＣＴＬは、当該ＬＡＤ（＝１２３）とＳＴＧ２の対応関係に基づいて、テーブルＳＴＧＴＢＬを更新し（図３：Ｓｔｅｐ７、図５Ａ）、さらに、テーブルＭＧＴＢＬのデータサイズＷｈ２ｄを更新する（図３：Ｓｔｅｐ７、図４Ｂ）。すなわち、図５ＡのＳＴＧＴＢＬ内のＬＡＤ（＝１２３）において、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「２」に更新され、有効情報ＶＬＤが“１”に更新される。また、図４ＢのＭＧＴＢＬ内のＳＴＧ２において、Ｗｈ２ｄが「５」から「１５」に更新される。
【００４８】
その後、ストレージモジュールＳＴＧ２は、ライトデータ（ＷＤＴ［１］）の書き込みを完了すると、制御回路ＤＫＣＴＬ０へデータサイズＷｓｔｇ（Ｗｓｔｇ２（３０））を通達し（図３：Ｓｔｅｐ８、図４Ｂ）、Ｓｔｅｐ２へ戻る。この例では、ＳＴＧ２において、例えば、データサイズｎｔＷ１（＝１０）のライトデータ（ＷＤＴ［１］）を書き込む前の期間で、ガーベージコレクション動作やスタティックウエアレベリング動作等によりデータサイズ「２０」の書き込みが行われており、これによってＷｓｔｇ２として計「３０」の値が通達されている。
【００４９】
続いて、制御回路ＤＫＣＴＬ０のライト制御回路ＷＴＣＴＬは、通達されたデータサイズＷｓｔｇ（Ｗｓｔｇ２（３０））をテーブルＭＧＴＢＬへ設定し更新する（図３：Ｓｔｅｐ２、図４Ｂ）。ここで、前提として、ＤＫＣＴＬ０は、現在、データサイズｎｔＷ２（ここでは１０とする）のライトデータ（ＷＤＴ［２］）と論理アドレス（ここでは５３５とする）とを含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［２］）を処理対象としているものとする。この場合、ＷＴＣＴＬは、ＭＧＴＢＬ内のデータサイズＷｓｔｇおよびＷｈ２ｄを利用し、各ストレージモジュールＳＴＧ０〜ＳＴＧ３毎のライトデータサイズ比率ＷＡＦを求め、これに加えてｎｔＷ２を利用して予想ライトデータサイズｅＷｄを求め、ＭＧＴＢＬへ設定し更新する（図３：Ｓｔｅｐ３、図４Ｂ）。図４Ｂの例では、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）は、それぞれ、ＷＡＦ０＝４、ＷＡＦ１＝３、ＷＡＦ２＝２、ＷＡＦ３＝２となる。また、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷ×ＷＡＦ）は、それぞれ、ｅＷｄ０＝８０、ｅＷｄ１＝４５、ｅＷｄ２＝５０、ｅＷｄ３＝４０となる。
【００５０】
次に、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、予想ライトデータサイズｅＷｄが最小値（Ｍｉｎ．）であるストレージモジュール（ここではＳＴＧ３）を選択する（図３：Ｓｔｅｐ４、図４Ｂ）。次いで、もし、ストレージモジュールＳＴＧ０〜ＳＴＧ３からのデータサイズＷｓｔｇの通達があれば、Ｓｔｅｐ２へ進み、再度、Ｓｔｅｐ２〜Ｓｔｅｐ４を実行する。一方、ＳＴＧ０〜ＳＴＧ３からのＷｓｔｇの通達が無ければ、Ｓｔｅｐ６へ進む（図３：Ｓｔｅｐ５）。
【００５１】
Ｓｔｅｐ６において、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ４で選択したストレージモジュールＳＴＧ３へ、データサイズｎｔＷ２（＝１０）のライトデータ（ＷＤＴ［２］）と論理アドレスＬＡＤ（＝５３５）を含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［２］）を発行する（図４Ｂ）。次いで、ＷＴＣＴＬは、当該ＬＡＤ（＝５３５）とＳＴＧ３の対応関係に基づいて、テーブルＳＴＧＴＢＬを更新し（図３：Ｓｔｅｐ７、図５Ｂ）、さらに、テーブルＭＧＴＢＬのデータサイズＷｈ２ｄを更新する（図３：Ｓｔｅｐ７）。すなわち、図５ＢのＳＴＧＴＢＬ内のＬＡＤ（＝５３５）において、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「３」に更新され、有効情報ＶＬＤが“１”に更新される。また、図示は省略するが、図４ＢのＭＧＴＢＬ内のＳＴＧ３において、Ｗｈ２ｄが「１０」から「２０」に更新される。
【００５２】
そして、ストレージモジュールＳＴＧ３がライトデータ（ＷＤＴ［２］）の書き込みを完了すると、ＳＴＧ３は制御回路ＤＫＣＴＬ０へデータサイズＷｓｔｇを通達し（図３：Ｓｔｅｐ８）、Ｓｔｅｐ２へ進み、以降同様の処理が繰り返される。なお、Ｓｔｅｐ６において、ライトアクセス要求（ＷＲＥＱ）が発行されたストレージモジュール（ここではＳＴＧ２，ＳＴＧ３）では、当該ライトアクセス要求（ＷＲＥＱ）に含まれる論理アドレスＬＡＤを不揮発性メモリＮＶＭ０〜ＮＶＭ７の物理アドレス（ＰＡＤ）へ変換し、この変換された物理アドレス（ＰＡＤ）へライトデータを書き込む。
【００５３】
ここで、図３のフローチャートでは、Ｓｔｅｐ１（例えば電源投入直後）において、制御回路ＤＫＣＴＬ０がストレージモジュールＳＴＧ０〜ＳＴＧ３に対してデータサイズＷｓｔｇ，Ｗｈ２ｄの通達要求を行うことでＷｓｔｇ，Ｗｈ２ｄの値を取得し、以降は、当該通達要求に依らずにＷｓｔｇ，Ｗｈ２ｄの値が随時更新されるような例を示した。すなわち、例えば、Ｗｈ２ｄに関してはＤＫＣＴＬ０自身がその値を随時把握しながら更新し（Ｓｔｅｐ７）、その一方で、ＤＫＣＴＬ０は、例えば電源遮断時等の際に、Ｗｈ２ｄの値をＳＴＧ０〜ＳＴＧ３に退避し、次の電源投入時にそれを読み出す（Ｓｔｅｐ１）ような場合を想定した。また、例えば、Ｗｓｔｇに関しては、ＳＴＧ０〜ＳＴＧ３がその値を随時更新すると共に、ライトアクセス要求（ＷＲＥＱ）に伴う書き込み動作の完了時に自動的にＷｓｔｇの値をＤＫＣＴＬ０に向けて送信し（Ｓｔｅｐ８）、ＤＫＣＴＬ０は、この送信された値によってＷｓｔｇの値を把握する（Ｓｔｅｐ２）ような場合を想定した。この場合、実際には、ＳＴＧ０〜ＳＴＧ３は、内部のバッファにより複数のライトアクセス要求（ＷＲＥＱ）をストックすることができ、これに伴い例えばＷｓｔｇの値を連続して送信するようなことがあるため、ここではＳｔｅｐ５を設けている。
【００５４】
ただし、勿論、このようなフローチャートに限定されるものではなく、適宜変更することが可能である。例えば、制御回路ＤＫＣＴＬ０はライトアクセス要求（ＷＲＥＱ）を発行する直前にＳＴＧ０〜ＳＴＧ３に対してＷｓｔｇの通達要求を出し、ＳＴＧ０〜ＳＴＧ３は当該通達要求を受けた際のみでＷｓｔｇの値を返信し、これを受けて、ＤＫＣＴＬ０はＷＲＥＱを発行するストレージモジュールを選択するようなフローとすることも可能である。また、例えば、ＳＴＧ０〜ＳＴＧ３は、ライトアクセス要求（ＷＲＥＱ）に伴う書き込みの完了時に限らず、ガーベージコレクション動作等に伴う書き込みの完了時等でもＷｓｔｇの値をＤＫＣＴＬ０に向けて送信し（すなわちＷｓｔｇの値を更新する毎に送信し）、これを受けてＤＫＣＴＬ０がテーブルＭＧＴＢＬの値を逐次更新するようなフローとすることも可能である。いずれにしても、ＤＫＣＴＬ０が時系列的に変化するＷｓｔｇおよびＷｈ２ｄの値を把握し、この情報（すなわちＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ））に基づいてライトアクセス要求（ＷＲＥＱ）を発行するストレージモジュールを選択するフローであればよく、望ましくは、より最新の実状を反映したＷＡＦに基づいて選択するフローであればよい。
【００５５】
《ストレージモジュール（メモリモジュール）の構成》
図６は、図１におけるストレージモジュールの詳細な構成例を示すブロック図である。当該ストレージモジュールＳＴＧは、図１におけるストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４として利用される。図６に示すストレージモジュールＳＴＧは、不揮発性メモリＮＶＭ０〜ＮＶＭ７と、ランダムアクセスメモリＲＡＭｓｔと、ＮＶＭ０〜ＮＶＭ７およびＲＡＭｓｔを制御するストレージ用の制御回路ＳＴＣＴ０と、バッテリバックアップ装置ＢＢＵを備える。ＮＶＭ０〜ＮＶＭ７は、例えば同じ構成および性能を備えている。ＲＡＭｓｔは、特に限定しないが、例えばＤＲＡＭ等である。ＢＢＵは、内部に大きな容量等を備え、例えば、予期せぬ電源遮断時等において、ＲＡＭｓｔ内のデータをＮＶＭ０〜ＮＶＭ７に退避するための電源を一定期間確保するための装置である。
【００５６】
電源投入直後に、ストレージモジュールＳＴＧは、内部の不揮発性メモリＮＶＭ０〜ＮＶＭ７と、ランダムアクセスメモリＲＡＭｓｔと、制御回路ＳＴＣＴ０の初期化の動作（所謂パワーオンリセット）を行う。さらに、ＳＴＧは、制御回路ＤＫＣＴＬ０からのリセット信号を受けた際にも、内部のＮＶＭ０〜ＮＶＭ７、ＲＡＭｓｔ、およびＳＴＣＴ０の初期化を行う。ＳＴＣＴ０は、インターフェース回路ＨＯＳＴ＿ＩＦと、バッファＢＵＦ０〜ＢＵＦ３と、調停回路ＡＲＢと、情報処理回路ＭＮＧＥＲと、メモリ制御回路ＲＡＭＣ、ＮＶＣＴ０〜ＮＶＣＴ７を備える。メモリ制御回路ＲＡＭＣは、ランダムアクセスメモリＲＡＭｓｔを直接制御し、メモリ制御回路ＮＶＣＴ０〜ＮＶＣＴ７は、不揮発性メモリＮＶＭ０〜ＮＶＭ７をそれぞれ直接制御する。
【００５７】
ランダムアクセスメモリＲＡＭｓｔには、アドレス変換テーブル（ＬＰＴＢＬ）、消去回数テーブル（ＥＲＳＴＢＬ）、物理ブロックテーブル（ＰＢＫＴＢＬ）、および物理アドレステーブル（ＰＡＤＴＢＬ）と、その他の各種情報が保持される。アドレス変換テーブル（ＬＰＴＢＬ）では、論理アドレス（ＬＡＤ）とＮＶＭ０〜ＮＶＭ７の物理アドレス（ＰＡＤ）との対応関係が示される。消去回数テーブル（ＥＲＳＴＢＬ）では、物理ブロック毎の消去回数が示される。物理ブロックテーブル（ＰＢＫＴＢＬ）では、物理ブロックが、消去状態であるか、一部書き込み済であるか、全部書き込み済であるかといった各物理ブロックの状態や、各物理ブロック毎の無効な物理アドレスの総数（ＩＮＶＰ）が示される。物理アドレステーブル（ＰＡＤＴＢＬ）では、各物理アドレスのデータが有効であるか無効であるか、又は各物理アドレスが消去状態であるかが示される。ここでは、物理ブロックとは、消去の単位領域を表し、各物理ブロックは、書き込みの単位領域となる複数の物理アドレスによって構成される。また、ランダムアクセスメモリＲＡＭｓｔ内のその他の各種情報の中には、ストレージモジュールＳＴＧ内の消去状態の物理ブロック数（Ｅｓｚ）や、前述したデータサイズＷｓｔｇ，Ｗｈ２ｄ等が含まれる。
【００５８】
《ストレージモジュール内のウエアレベリング》
図７は、図１のストレージモジュール内で行われるウエアレベリング方法の一例を示すフロー図である。図７には、図１の制御回路ＤＫＣＴＬ０からストレージモジュールＳＴＧ０〜ＳＴＧｎ＋４へライトアクセス要求（書き込み命令）（ＷＲＥＱ）が発行された際に、ＳＴＧ０〜ＳＴＧｎ＋４内で行われる書き込み処理手順の一例と、当該書き込みの際に行われるウエアレベリング（すなわちダイナミックウエアレベリング）方法の一例が示されている。また、図７のフローは、主に図６の情報処理回路ＭＮＧＥＲによって実行される。ＭＮＧＥＲは、特に限定しないが５１２バイトのメインデータと１６バイトの冗長データを単位として１個の物理アドレス（ＰＡＤ）を割り当て、不揮発性メモリＮＶＭ０〜ＮＶＭ７の当該物理アドレス（ＰＡＤ）へ書き込みを行っている。
【００５９】
図２２は、図７のフローを概略的に説明する補足図である。図７のフローを用いると、概略的には図２２に示すような動作が行われる。図２２の例では、物理ブロックＰＢＫ［０］が３個の物理アドレスＰＡＤ［０］〜ＰＡＤ［２］で構成され、同様に、物理ブロックＰＢＫ［１］およびＰＢＫ［２］が、それぞれ３個の物理アドレスＰＡＤ［３］〜ＰＡＤ［５］およびＰＡＤ［６］〜ＰＡＤ［８］で構成されるものとする。ＰＢＫ［０］，ＰＢＫ［１］，ＰＢＫ［２］の消去回数は、それぞれ、１０，９，８とし、ＰＢＫ［１］，ＰＢＫ［２］は、消去状態（Ｅ）であるものとする。また、ＰＡＤ［０］，ＰＡＤ［１］，ＰＡＤ［２］には、それぞれ、論理アドレスＬＡＤ［０］，ＬＡＤ［１］，ＬＡＤ［２］のライトデータＷＤＴ０，ＷＤＴ１，ＷＤＴ２が書き込まれ、ＰＡＤ［０］，ＰＡＤ［１］，ＰＡＤ［２］（ＷＤＴ０，ＷＤＴ１，ＷＤＴ２）は全て有効“１”であるものとする。
【００６０】
このような状態（ｔ＝１）から、例えば、ｔ＝２において、論理アドレスＬＡＤ［０］およびライトデータＷＤＴ３を含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［３］）が入力されたものとする。この場合、情報処理回路ＭＮＧＥＲは、まず、ＬＡＤ［０］に対応する物理アドレスＰＡＤ［０］を有効“１”から無効“０”に変更し、当該ＬＡＤ［０］のＷＤＴ３を書き込むための新たな物理アドレスを決定する。この際には、消去状態かあるいは一部書き込みが行われている物理ブロックを対象として、その中でも消去回数値が最も小さい物理ブロック（ここではＰＢＫ［２］）を選択する。そして、当該物理ブロック（ＰＢＫ［２］）内で消去状態となっている最初の物理アドレス（ここではＰＡＤ［６］）に対してＷＤＴ３の書き込みを行い、当該ＰＡＤ［６］を有効“１”とする。その後、例えば、ｔ＝３において、ＬＡＤ［０］およびライトデータＷＤＴ４を含んだライトアクセス要求（ＷＲＥＱ［４］）が入力された場合、ＭＮＧＥＲは、同様にして、ＰＡＤ［６］を無効“０”とし、一部書き込みが行われていると共に消去回数値が最も小さい物理ブロック（ここではＰＢＫ［２］）を選択する。そして、当該物理ブロック（ＰＢＫ［２］）内で消去状態となっている最初の物理アドレス（ここではＰＡＤ［７］）に対してＷＤＴ４の書き込みを行い、当該ＰＡＤ［７］を有効“１”とする。
【００６１】
このような動作は図７のフローを用いて行われる。図７では、まず、制御回路ＤＫＣＴＬ０から論理アドレス値（例えばＬＡＤ[０]）、データ書き込み命令（ＷＲＴ）、セクタカウント値（例えばＳＥＣ＝１）、および５１２バイトのライトデータ（例えばＷＤＴ３）が含まれるライトアクセス要求（書き込み命令）（ＷＲＥＱ［３］）が制御回路ＳＴＣＴ０へ入力される。図６の制御回路ＨＯＳＴ＿ＩＦは、ライトアクセス要求（ＷＲＥＱ［３］）に埋め込まれているクロック情報を取り出し、シリアルデータ化されたライトアクセス要求（ＷＲＥＱ［３］）をパラレルデータに変換し、バッファＢＵＦ０および情報処理回路ＭＮＧＥＲへ転送する（Ｓｔｅｐ１）。
【００６２】
次に、情報処理回路ＭＮＧＥＲは、論理アドレス値（ＬＡＤ［０］）、データ書き込み命令（ＷＲＴ）及びセクタカウント値（ＳＥＣ＝１）を解読し、ランダムアクセスメモリＲＡＭｓｔ内のアドレス変換テーブル（ＬＰＴＢＬ）を検索する。これにより、情報処理回路ＭＮＧＥＲは、論理アドレス値（ＬＡＤ［０］）の番地に格納されている現在の物理アドレス値（例えばＰＡＤ［０］）と、この物理アドレス値（ＰＡＤ［０］）に対応した有効フラグＰＶＬＤの値を読み出す（Ｓｔｅｐ２）。さらに、この有効フラグＰＶＬＤ値が“１（有効）”であれば、これを“０（無効）”とし、アドレス変換テーブル（ＬＰＴＢＬ）および物理アドレステーブル（ＰＡＤＴＢＬ）を更新する。（Ｓｔｅｐ３）。
【００６３】
続いて、情報処理回路ＭＮＧＥＲは、ランダムアクセスメモリＲＡＭｓｔ内の物理ブロックテーブル（ＰＢＫＴＢＬ）から消去状態又は一部書き込み済の物理ブロックを抽出し、更に、当該抽出した物理ブロックの中で消去回数値が最も小さい物理ブロック（例えばＰＢＫ［２］）をＲＡＭｓｔ内の消去回数テーブル（ＥＲＳＴＢＬ）を用いて選択する。そして、ＭＮＧＥＲは、当該選択された物理ブロックの中で、いまだデータが書き込まれていない（消去状態の）物理アドレスの中で、最も小さな物理アドレス（例えばＰＡＤ［６］）を、物理アドレステーブル（ＰＡＤＴＢＬ）を用いて選択する（Ｓｔｅｐ４）。
【００６４】
次に、情報処理回路ＭＮＧＥＲは、５１２バイトのライトデータ（ＷＤＴ３）を物理アドレス（ＰＡＤ［６］）へ書き込む（Ｓｔｅｐ５）。続いて、ＭＮＧＥＲは、アドレス変換テーブル（ＬＰＴＢＬ）および物理アドレステーブル（ＰＡＤＴＢＬ）を更新する（Ｓｔｅｐ６）。更に、ＭＮＧＥＲは、データサイズＷｓｔｇ（およびＷｈ２ｄ）を再計算し、ランダムアクセスメモリＲＡＭｓｔへ格納する（Ｓｔｅｐ７）。最後に、ＭＮＧＥＲは、最新のデータサイズＷｓｔｇの値を制御回路ＨＯＳＴ＿ＩＦおよびインターフェース信号Ｈ２Ｄ＿ＩＦを通じて、制御回路ＤＫＣＴＬ０へ送信する（Ｓｔｅｐ８）。
【００６５】
以上のように、ストレージモジュール（メモリモジュール）ＳＴＧ内部においては、消去回数値の小さな物理アドレスから順にデータの書き込みが行われることで、平準化がなされる。したがって、図３等で述べたようなストレージモジュールＳＴＧ間での平準化と併用することで、図１のストレージシステム（記憶装置システム）ＳＴＲＧＳＹＳ全体としての更なる平準化が実現可能となる。
【００６６】
《ストレージモジュール内のガーベージコレクション（＋ウエアレベリング）》
図８は、図１のストレージモジュール内で行われるガーベージコレクションおよびウエアレベリング方法の一例を示すフロー図である。図２３は、図８のフローを概略的に説明する補足図である。図８のフローは、主に図６の情報処理回路ＭＮＧＥＲによって実行される。不揮発性メモリＮＶＭ０〜ＮＶＭ７へデータを書き込み続けると、消去状態の物理アドレス数（物理ブロック数）が減少してしまう。この消去状態の物理アドレス数（物理ブロック数）が０になると、ストレージモジュールＳＴＧはこれ以上書き込みを行えなくなってしまう。そこで、消去状態の物理アドレス数（物理ブロック数）を増やすためのガーベージコレクション動作が必要とされる。そして、このガーベージコレクション動作の際には、併せてウエアレベリング動作を行うことが望ましい。そこで、図８のフローを実行することが有益となる。
【００６７】
図８において、図６の情報処理回路ＭＮＧＥＲは、まず、ランダムアクセスメモリＲＡＭｓｔ内に格納される消去状態の物理ブロック数Ｅｓｚを読み出す（Ｓｔｅｐ１）。次に、予め定めた消去状態の物理ブロック数の閾値ＤＥＲＣｔｈとＥｓｚとを比較し（Ｓｔｅｐ２）、Ｅｓｚ≧ＤＥＲＣｔｈの場合はＳｔｅｐ１へ進み、Ｅｓｚ＜ＤＥＲＣｔｈの場合はＳｔｅｐ３へ進む。Ｓｔｅｐ３では、ＭＮＧＥＲは、ＲＡＭｓｔ内に格納されている消去回数テーブル（ＥＲＳＴＢＬ）と、物理ブロックテーブル（ＰＢＫＴＢＬ）と、物理アドレステーブル（ＰＡＤＴＢＬ）を読み出す。ＥＲＳＴＢＬにより各物理ブロック毎の消去回数が判明し、ＰＢＫＴＢＬにより各物理ブロックの状態（消去状態、一部書き込み済み、全部書き込み済み）や各物理ブロック毎の無効な物理アドレス数（ＩＮＶＰ）が判明し、ＰＡＤＴＢＬにより各物理アドレスが有効か無効かが判明する。
【００６８】
次に、情報処理回路ＭＮＧＥＲは、全部書き込み済の物理ブロックを対象に、消去回数値の小さい順に、無効な物理アドレス数（ＩＮＶＰ）の総和が物理ブロックのサイズ以上になるまで、全部書き込み済の物理ブロックを順次選択する（Ｓｔｅｐ４）。ここで、例えば、図２３のような場合を想定する。図２３の例では、物理ブロックＰＢＫ［０］が３個の物理アドレスＰＡＤ［０］〜ＰＡＤ［２］で構成され、同様に、物理ブロックＰＢＫ［１］、ＰＢＫ［２］およびＰＢＫ［３］が、それぞれ３個の物理アドレスＰＡＤ［３］〜ＰＡＤ［５］、ＰＡＤ［６］〜ＰＡＤ［８］およびＰＡＤ［９］〜ＰＡＤ［１１］で構成されるものとする。ＰＢＫ［０］，ＰＢＫ［１］，ＰＢＫ［２］，ＰＢＫ［３］の消去回数は、それぞれ、７，８，９，１０とし、ＰＢＫ［３］は、消去状態（Ｅ）であるものとする。また、ＰＡＤ［０］〜ＰＡＤ［８］には、それぞれ、ライトデータＷＤＴ０〜ＷＤＴ８が書き込まれ、この内のＰＡＤ［０］，ＰＡＤ［３］，ＰＡＤ［６］（ＷＤＴ０，ＷＤＴ３，ＷＤＴ６）が無効“０”であるものとする。
【００６９】
このような状態（ｔ＝１）において、例えば、消去状態の物理ブロック数が２以上必要であった場合（図８：Ｓｔｅｐ２）、ガーベージコレクション動作が実行される。図２３の例では、図８のＳｔｅｐ４により、物理ブロックＰＢＫ［０］，ＰＢＫ［１］，ＰＢＫ［２］が選択されることになる。続いて、図８のＳｔｅｐ５において、情報処理回路ＭＮＧＥＲは、当該選択された物理ブロック内の有効な物理アドレスのデータを読み出し、一旦ランダムアクセスメモリＲＡＭｓｔへ格納する。図２３の例では、ライトデータＷＤＴ１，ＷＤＴ２，ＷＤＴ４，ＷＤＴ５，ＷＤＴ７，ＷＤＴ８がＲＡＭｓｔへ格納される。その後、ＭＮＧＥＲは、当該選択された物理ブロックを消去する（図８：Ｓｔｅｐ６、図２３のｔ＝２）。
【００７０】
その後、図８のＳｔｅｐ７において、情報処理回路ＭＮＧＥＲは、ランダムアクセスメモリＲＡＭｓｔへ一旦格納していたライトデータを不揮発性メモリＮＶＭ０〜ＮＶＭ７内の消去状態の物理ブロックに書き戻す。これによってガーベージコレクション動作が実現される。更に、書き戻しの際には、消去状態の物理ブロックの中で、消去回数値の最も小さな物理ブロックから順に選択して書き戻しが行われる。これによってガーベージコレクション動作と並行してウエアレベリング動作が実現される。図２３の例では、ｔ＝３に示すように、消去回数値が小さい順に２個の物理ブロックＰＢＫ［０］，ＰＢＫ［１］が選択され、当該物理ブロックにＲＡＭｓｔ内のライトデータＷＤＴ１，ＷＤＴ２，ＷＤＴ４，ＷＤＴ５，ＷＤＴ７，ＷＤＴ８が書き戻される。その結果、物理ブロックＰＢＫ［３］に加えて更に１個の消去状態の物理ブロック（ここではＰＢＫ［２］）が生成されることになる。
【００７１】
次に、図８のＳｔｅｐ８において、情報処理回路ＭＮＧＥＲは、ランダムアクセスメモリＲＡＭｓｔ内のアドレス変換テーブル（ＬＰＴＢＬ）、消去回数テーブル（ＥＲＳＴＢＬ）、物理ブロックテーブル（ＰＢＫＴＢＬ）、および物理アドレステーブル（ＰＡＤＴＢＬ）と、消去状態の物理ブロック数Ｅｓｚを更新する。更に、ストレージモジュールＳＴＧが実際に不揮発性メモリＮＶＭ０〜ＮＶＭ７へライトしたデータサイズとなるＲＡＭｓｔ内のデータサイズＷｓｔｇを更新する。最後に、ＭＮＧＥＲは、最新のデータサイズＷｓｔｇをインターフェース回路ＨＯＳＴ＿ＩＦおよびインターフェース信号Ｈ２Ｄ＿ＩＦを通じて、制御回路ＤＫＣＴＬ０へ転送する（Ｓｔｅｐ９）。
【００７２】
以上のようなガーベージコレクション動作およびウエアレベリング動作（言うなればスタティックウエアレベリング動作）を行うことで図７に示したようなダイナミックウエアレベリング動作と共にストレージモジュール（メモリモジュール）ＳＴＧ内での消去回数の平準化が実現可能となる。ただし、これによってストレージモジュールＳＴＧ間で消去回数のばらつきが生じる場合が有るが、これは、図３等に示したような動作によって平準化することが可能となり、その結果、図１のストレージシステム（記憶装置システム）ＳＴＲＧＳＹＳ全体としての更なる平準化が実現可能となる。
【００７３】
《読み出し方法》
前述したように、ストレージコントローラＳＴＲＧＣＯＮＴ内のホスト用の制御回路ＨＣＴＬ０は、情報処理装置（ホスト）ＳＲＶ０〜ＳＲＶｍからのリード要求（ＲＱ）を受け付け、それに対応するデータ（ＲＤＡＴＡ）がキャッシュメモリＣＭ０〜ＣＭ３へ格納されていない場合に、ストレージモジュール用の制御回路ＤＫＣＴＬ０へ通達を行う。図９は、図１におけるストレージモジュール用の制御回路およびストレージ用の制御回路が行う読み出し動作例を示すフロー図であり、ＤＫＣＴＬ０がＨＣＴＬ０からの通達に応じてリード要求（ＲＱ）を受け付けた以降の動作例を示すものである。
【００７４】
まず、ストレージコントローラＳＴＲＧＣＯＮＴ内の制御回路ＤＫＣＴＬ０は、制御回路ＨＣＴＬ０を介して、論理アドレス値（例えばＬＡＤ＝５３５）、データ読み出し命令（ＲＤ）、セクタカウント値（ＳＥＣ＝１）が含まれるリードリクエスト（ＲＱ）を受け付ける。これを受けて、ＤＫＣＴＬ０内のリード制御回路ＲＤＣＴＬは、テーブルＳＴＧＴＢＬより論理アドレス値（ＬＡＤ＝５３５）に対応するストレージモジュール番号（ＳＴＧ  Ｎｏ）と、有効フラグＶＬＤを読み出す（Ｓｔｅｐ１）。図５Ｂの例では、ストレージモジュール番号「３」とＶＬＤ＝“１”が読み出される。
【００７５】
次に、リード制御回路ＲＤＣＴＬは、読み出した有効フラグＶＬＤが“１”であるかどうかをチェックする（Ｓｔｅｐ２）。ここで、ＶＬＤが“０”の場合、ＲＤＣＴＬは、当該論理アドレス値（ＬＡＤ＝５３５）にはストレージモジュールＳＴＧが割り当てられていないことを認識する。この場合、ストレージモジュールＳＴＧからデータを読み出すことができないため、ＲＤＣＴＬは、エラーが発生したことを制御回路ＨＣＴＬ０へ伝える（Ｓｔｅｐ１０）。一方、ＶＬＤが“１”の場合、ＲＤＣＴＬは、当該論理アドレス値（ＬＡＤ＝５３５）にはストレージモジュールＳＴＧ３が対応していると判断し、ＳＴＧ３へリードアクセス要求（ＲＲＥＱ）を発行する（Ｓｔｅｐ３）。
【００７６】
続いて、ストレージモジュールＳＴＧ３内のインターフェース回路ＨＯＳＴ＿ＩＦは、制御回路ＤＫＣＴＬ０から発行されたリードアクセス要求（ＲＲＥＱ）に埋め込まれているクロック情報を取り出し、シリアルデータ化されたＲＲＥＱをパラレルデータへ変換し、バッファＢＵＦ０および情報処理回路ＭＮＧＥＲへ転送する（Ｓｔｅｐ４）。情報処理回路ＭＮＧＥＲは、当該リードアクセス要求（ＲＲＥＱ）に含まれる論理アドレス値（ＬＡＤ＝５３５）、データ読み出し命令（ＲＤ）およびセクタカウント値（ＳＥＣ＝１）を解読し、ランダムアクセスメモリＲＡＭｓｔへ保存されているアドレス変換テーブルＬＰＴＢＬを参照して、各種情報を読み出す。具体的には、ＬＰＴＢＬにおいて、論理アドレスＬＡＤの５３５番地に格納されている物理アドレス値（例えばＰＡＤ＝３３）と、この物理アドレスＰＡＤに対応した有効フラグＰＶＬＤを読み出す（Ｓｔｅｐ５）。次に、読み出した有効フラグＰＶＬＤが“１”であるかどうかをチェックする（Ｓｔｅｐ６）。
【００７７】
ここで、有効フラグＰＶＬＤが“０”の場合、情報処理回路ＭＮＧＥＲは、当該論理アドレス値（ＬＡＤ＝５３５）には物理アドレスＰＡＤが割り当てられていないことを認識する。この場合、不揮発性メモリＮＶＭ０〜ＮＶＭ７からデータを読み出すことができないため、ＭＮＧＥＲは、エラーが発生したことをインターフェース回路ＨＯＳＴ＿ＩＦを通じて制御回路ＤＫＣＴＬ０内のリード制御回路ＲＤＣＴＬへ伝える（Ｓｔｅｐ１１）。一方、有効フラグＰＶＬＤが“１”の場合、ＭＮＧＥＲは、当該論理アドレス値（ＬＡＤ＝５３５）には物理アドレス値（ＰＡＤ＝３３）が対応していると判断する。
【００７８】
次いで、情報処理回路ＭＮＧＥＲは、論理アドレス値（ＬＡＤ＝５３５）に対応している物理アドレス値（ＰＡＤ＝３３）を、不揮発性メモリＮＶＭ０〜ＮＶＭ７のチップアドレス（ＣＨＩＰＡ）、バンクアドレス（ＢＫ）、ロウアドレス（ＲＯＷ）、およびカラムアドレス（ＣＯＬ）へ変換する。そして、ＭＮＧＥＲは、当該変換後のアドレスを、調停回路ＡＲＢおよびメモリ制御回路ＮＶＣＴ０〜ＮＶＣＴ７を通じて不揮発性メモリＮＶＭ０〜ＮＶＭ７へ入力し、ＮＶＭ０〜ＮＶＭ７内に格納されたデータ（ＲＤＡＴＡ）が読み出す（Ｓｔｅｐ７）。
【００７９】
ここでは、読み出されたデータ（ＲＤＡＴＡ）には、メインデータ（ＤＡｒｅａ）と冗長データ（ＲＡｒｅａ）が含まれ、さらに冗長データ（ＲＡｒｅａ）にはＥＣＣコード（ＥＣＣ）が含まれている。そこで、情報処理回路ＭＮＧＥＲは、ＥＣＣコード（ＥＣＣ）を利用して、メインデータ（ＤＡｒｅａ）にエラーがあるかをチェックし、エラーがあれば訂正を行い、インターフェース回路ＨＯＳＴ＿ＩＦを通じて、データ（ＲＤＡＴＡ）を制御回路ＤＫＣＴＬ０へ送信する（Ｓｔｅｐ８）。ＤＫＣＴＬ０は、送信されたデータ（ＲＤＡＴＡ）をキャッシュメモリＣＭ０〜ＣＭ３へ転送し、さらに、制御回路ＨＣＴＬ０およびインターフェース信号Ｈ２Ｓ＿ＩＦを通じて情報処理装置ＳＲＶ０〜ＳＲＶｍへ送信する（Ｓｔｅｐ９）。
【００８０】
以上のように、本実施の形態１の記憶装置システムを用いることで、代表的には、記憶装置システム全体で消去回数の平準化（およびその結果として書き込み回数の平準化）を実現でき、信頼性の向上や長寿命化等が実現可能になる。
【００８１】
（実施の形態２）
本実施の形態２では、実施の形態１の図３、図４Ａおよび図４Ｂ等で述べたストレージモジュール間ウエアレベリング方法の変形例として、前述した予想ライトデータサイズｅＷｄに加えて更にデータリテンション時間Ｒｅｔを利用した方法について説明する。
【００８２】
《データリテンション時間の概要》
不揮発性メモリ(特にフラッシュメモリのように破壊書き込み方式のメモリ)では、消去回数(または書き込み回数)が増加するほどデータリテンション時間(すなわち書き込まれたデータをどの程度の期間に渡って正しく保持できるか)が低下していく場合がある。データリテンション時間は、特に限定しないが、例えば、書き込み回数が少ない場合には１０年等である。このデータリテンション時間が消去回数(または書き込み回数)にどの程度依存するかは、ストレージモジュールへどのような不揮発性メモリを利用するかによって変化する。例えば、不揮発性メモリとしてフラッシュメモリを用いるかあるいは相変化メモリを用いるかや、フラッシュメモリを用いる場合でもどのようなメモリセル構造を用いるかなどによって異なり得る。
【００８３】
図２０Ａは、本発明の実施の形態２による記憶装置システムにおいて、ストレージモジュールのデータ保持特性の一例を示す説明図である。図２０Ａには、物理ブロックの消去回数（あるいは書き込み回数）（ｎＥＲＳ）とデータ保持時間（データリテンション時間）Ｒｅｔの依存関係（関数）が示されている。図２０Ａにおいて、ＲｅｔＳＴＧ０〜ＲｅｔＳＴＧ３は、それぞれ、ストレージモジュールＳＴＧ０〜ＳＴＧ３における依存関係（関数）を表している。
【００８４】
ストレージモジュール（メモリモジュール）ＳＴＧ０〜ＳＴＧ３のそれぞれは、自身の消去回数（あるいは書き込み回数）とデータ保持時間の依存関係（関数）を数式として不揮発性メモリＮＶＭ０〜ＮＶＭ７に予め保有しており、ＳＴＧ０〜ＳＴＧ３の電源投入直後に、その数式をランダムアクセスメモリＲＡＭｓｔへ転送する。ストレージ用の制御回路ＳＴＣＴ内の情報処理回路ＭＮＧＥＲは、ＮＶＭ０〜ＮＶＭ７内の各物理ブロックにおける消去回数の最大値を求める。そして、ＭＮＧＥＲは、この最大値が変化する毎に、数式をＲＡＭｓｔから読み出し、当該消去回数の最大値（ｎＥＲＳ）を引数としてデータ保持時間（データリテンション時間）Ｒｅｔを計算し、それをＲＡＭｓｔへ格納する。さらに、ＳＴＧ０〜ＳＴＧ３のそれぞれは、必要に応じて、計算したデータリテンション時間ＲｅｔをストレージコントローラＳＴＲＧＣＯＮＴへ転送する。
【００８５】
図２０Ｂは、図２０Ａのデータ保持特性をテーブル上で規定した一例を示す図である。図２０Ａでは予め依存関係（関数）を数式で規定することでデータリテンション時間Ｒｅｔの算出を行ったが、その代わりに、当該数式を離散的に表す図２０ＢのようなテーブルＲｅｔＴＢＬを予め規定することでデータリテンション時間Ｒｅｔの算出を行うことも可能である。図２０Ｂには、１つのストレージモジュールＳＴＧが保有しているテーブルＲｅｔＴＢＬが示されており、当該ＲｅｔＴＢＬには、物理ブロックの消去回数（あるいは書き込み回数）（ｎＥＲＳ）とデータリテンション時間Ｒｅｔの依存関係（関数）が規定されている。
【００８６】
ストレージモジュールＳＴＧ０〜ＳＴＧ３のそれぞれは、自身の特性に対応するテーブルＲｅｔＴＢＬを不揮発性メモリＮＶＭ０〜ＮＶＭ７に予め保有しており、ＳＴＧ０〜ＳＴＧ３の電源投入直後に、当該テーブルＲｅｔＴＢＬをランダムアクセスメモリＲＡＭｓｔへ転送する。ストレージ用の制御回路ＳＴＣＴ内の情報処理回路ＭＮＧＥＲは、ＮＶＭ０〜ＮＶＭ７内の各物理ブロックにおける消去回数の最大値を求める。そして、ＭＮＧＥＲは、この最大値が変化する毎に、テーブルＲｅｔＴＢＬを検索し、データ保持時間（データリテンション時間）Ｒｅｔを取得する。さらに、ＳＴＧ０〜ＳＴＧ３のそれぞれは、必要に応じて、取得したデータリテンション時間ＲｅｔをストレージコントローラＳＴＲＧＣＯＮＴへ転送する。
【００８７】
図２０Ａに示すように、ストレージモジュールのデータリテンション時間Ｒｅｔは、ストレージモジュール毎に異なり、更に、消去回数（あるいは書き込み回数）（ｎＥＲＳ）が増大する毎に所定の依存関係（関数）に基づいて減少していく。データリテンション時間Ｒｅｔは、対応するストレージモジュールの残存寿命を表しており、その時間が所定の値より小さくなると、当該ストレージモジュールの寿命は尽きることになる。したがって、仮に、実施の形態１の方式を用いてストレージモジュール間で消去回数（あるいは書き込み回数）の平準化を行ったとしても、図２０Ａから判るように、データリテンション時間Ｒｅｔの観点ではストレージモジュール間でばらつきが生じる場合が有る。その結果、記憶装置システム全体としての寿命が低下する恐れがある。
【００８８】
そこで、例えば、データリテンション時間（残存寿命）Ｒｅｔのしきい値を設け、当該しきい値を適宜制御すると共に、各ストレージモジュールのデータリテンション時間Ｒｅｔが当該しきい値以上を常に保てるような状態で、実施の形態１で述べたようなストレージモジュール間での消去回数の平準化を行えばよい。例えば、図２０Ａにおいて、ストレージモジュールＳＴＧ０とＳＴＧ３の消去回数（ｎＥＲＳ）が同じであったとして、この状態でＳＴＧ３のデータリテンション時間Ｒｅｔがしきい値に達したような場合、ＳＴＧ３に対しては当分書き込み・消去を行わず、ＳＴＧ０に対して書き込み・消去を行えばよい。
【００８９】
《ストレージモジュール間ウエアレベリング（変形例）》
以下に、特に限定しないが、４個のストレージモジュールＳＴＧ０〜ＳＴＧ３を備える場合を例として、制御回路ＤＫＣＴＬ０が実行する書き込み動作について図１０、図１１に加えて図５Ａ、図５Ｂを用いて説明する。図１０は、本発明の実施の形態２による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作の一例を示すフローチャートである。図１１Ａおよび図１１Ｂは、図１０の補足図であり、ストレージモジュール用の制御回路が持つテーブルＭＧＴＢＬの保持内容の一例を示す図である。図１１Ａおよび図１１Ｂに示すテーブルＭＧＴＢＬには、図４等に示したデータサイズｎｔＷと、各ストレージモジュールＳＴＧ０〜ＳＴＧ３毎のデータサイズＷｈ２ｄ，Ｗｓｔｇ、ライトデータサイズ比率ＷＡＦ、および予想ライトデータサイズｅＷｄに加えて、各ＳＴＧ０〜ＳＴＧ３毎のデータリテンション時間Ｒｅｔが保持されている。
【００９０】
まず、制御回路ＤＫＣＴＬ０は、必要に応じて（例えばストレージコントローラＳＴＲＧＣＯＮＴへの電源投入直後などで）、インターフェース信号Ｈ２Ｄ＿ＩＦを通じて、ストレージモジュールＳＴＧ０〜ＳＴＧ３へデータリテンション時間ＲｅｔとデータサイズＷｓｔｇおよびＷｈ２ｄの通達要求を発行する。これに応じて各ストレージモジュールＳＴＧ０〜ＳＴＧ３は、データリテンション時間Ｒｅｔ（Ｒｅｔ０（８）、Ｒｅｔ１（６）、Ｒｅｔ２（９）、Ｒｅｔ３（７））をＤＫＣＴＬ０へ返信する。更に、データサイズＷｓｔｇ（Ｗｓｔｇ０（４０）、Ｗｓｔｇ１（１５）、Ｗｓｔｇ２（１０）、Ｗｓｔｇ３（２０））およびＷｈ２ｄ（Ｗｈ２ｄ０（１０）、Ｗｈ２ｄ１（５）、Ｗｈ２ｄ２（５）、Ｗｈ２ｄ３（１０））をＤＫＣＴＬ０へ返信する（図１０：Ｓｔｅｐ１、図１１Ａ）。
【００９１】
続いて、制御回路ＤＫＣＴＬ０は、これらのデータリテンション時間ＲｅｔとデータサイズＷｓｔｇおよびＷｈ２ｄをテーブルＭＧＴＢＬへ設定し更新する（図１０：Ｓｔｅｐ２、図１１Ａ）。ここで、前提として、ＤＫＣＴＬ０は、現在、データサイズｎｔＷ１（ここでは１０とする）のライトデータ（ＷＤＴ［１］）と論理アドレス（ここでは１２３とする）とを含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）を処理対象としているものとする。この場合、ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、ＭＧＴＢＬ内のＷｓｔｇおよびＷｈ２ｄを利用して、ＳＴＧ０〜ＳＴＧ３毎のライトデータサイズ比率ＷＡＦを求め、これに加えてｎｔＷ１を利用して予想ライトデータサイズｅＷｄを求め、ＭＧＴＢＬへ設定し更新する（図１０：Ｓｔｅｐ３、図１１Ａ）。図１１Ａの例では、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）は、それぞれ、ＷＡＦ０＝４、ＷＡＦ１＝３、ＷＡＦ２＝２、ＷＡＦ３＝２となる。また、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷ×ＷＡＦ）は、それぞれ、ｅＷｄ０＝８０、ｅＷｄ１＝４５、ｅＷｄ２＝３０、ｅＷｄ３＝４０となる。
【００９２】
次に、ライト制御回路ＷＴＣＴＬは、ストレージシステム（記憶装置システム）ＳＴＲＧＳＹＳの寿命情報（ｄＬｉｆｅ（ここでは４．５））と、各ストレージモジュールＳＴＧ０〜ＳＴＧ３のデータリテンション時間Ｒｅｔ（Ｒｅｔ０（８）、Ｒｅｔ１（６）、Ｒｅｔ２（９）、Ｒｅｔ３（７））とを比較する。そして、ＷＴＣＴＬは、ストレージシステムの寿命情報（ｄＬｉｆｅ）以上のデータリテンション時間（残存寿命）Ｒｅｔを持つストレージモジュールを選択する（図１０：Ｓｔｅｐ４、図１１Ａ）。
【００９３】
続いて、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ４で選択されたストレージモジュールの中から、更に、予想ライトデータサイズｅＷｄが最小値（Ｍｉｎ．）であるストレージモジュール（ここではＳＴＧ２）を選択する（図１０：Ｓｔｅｐ５、図１１Ａ）。次いで、もし、ストレージモジュールＳＴＧ０〜ＳＴＧ３からのデータサイズＷｓｔｇの通達があれば、Ｓｔｅｐ２へ進み、再度、Ｓｔｅｐ２〜Ｓｔｅｐ５を実行する。一方、ＳＴＧ０〜ＳＴＧ３からのＷｓｔｇの通達が無ければ、Ｓｔｅｐ７へ進む（図１０：Ｓｔｅｐ６）。
【００９４】
Ｓｔｅｐ７において、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ５で選択したストレージモジュールＳＴＧ２へ、データサイズｎｔＷ１（＝１０）のライトデータ（ＷＤＴ［１］）と論理アドレスＬＡＤ（＝１２３）を含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）を発行する（図１１Ａ）。次いで、ＷＴＣＴＬは、当該ＬＡＤ（＝１２３）とＳＴＧ２の対応関係に基づいて、テーブルＳＴＧＴＢＬを更新し（図１０：Ｓｔｅｐ８、図５Ａ）、さらに、テーブルＭＧＴＢＬのデータサイズＷｈ２ｄを更新する（図１０：Ｓｔｅｐ８、図１１Ｂ）。すなわち、図５ＡのＳＴＧＴＢＬ内のＬＡＤ（＝１２３）において、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「２」に更新され、有効情報ＶＬＤが“１”に更新される。また、図１１ＢのＭＧＴＢＬ内のＳＴＧ２において、Ｗｈ２ｄが「５」から「１５」に更新される。
【００９５】
その後、ストレージモジュールＳＴＧ２は、ライトデータ（ＷＤＴ［１］）の書き込みを完了すると、制御回路ＤＫＣＴＬ０へデータリテンション時間Ｒｅｔ（８．９）とデータサイズＷｓｔｇ（Ｗｓｔｇ２（３０））を通達し（図１０：Ｓｔｅｐ９、図１１Ｂ）、Ｓｔｅｐ２へ戻る。この例では、ＳＴＧ２において、例えば、データサイズｎｔＷ１（＝１０）のライトデータ（ＷＤＴ［１］）を書き込む前の期間で、ガーベージコレクション動作やスタティックウエアレベリング動作等によりデータサイズ「２０」の書き込みが行われており、これによってＷｓｔｇ２として計「３０」の値が通達されている。また、データリテンション時間Ｒｅｔ（８．９）は、図２０Ａおよび図２０Ｂで述べたように、情報処理回路ＭＮＧＥＲによって算出され、ここでは、当該ガーベージコレクション動作等に伴い図１１Ａの「９」から図１１Ｂの「８．９」に減っている。
【００９６】
続いて、ライト制御回路ＷＴＣＴＬは、通達されたデータリテンション時間Ｒｅｔ（８．９）およびデータサイズＷｓｔｇ（Ｗｓｔｇ２（３０））をテーブルＭＧＴＢＬへ設定し更新する（図１０：Ｓｔｅｐ２、図１１Ｂ）。ここで、前提として、ＤＫＣＴＬ０は、現在、データサイズｎｔＷ２（ここでは１０とする）のライトデータ（ＷＤＴ［２］）と論理アドレス（ここでは５３５とする）とを含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［２］）を処理対象としているものとする。この場合、ＷＴＣＴＬは、ＭＧＴＢＬ内のデータサイズＷｓｔｇおよびＷｈ２ｄを利用し、各ストレージモジュールＳＴＧ０〜ＳＴＧ３毎のライトデータサイズ比率ＷＡＦを求め、これに加えてｎｔＷ２を利用して予想ライトデータサイズｅＷｄを求め、ＭＧＴＢＬへ設定し更新する（図１０：Ｓｔｅｐ３、図１１Ｂ）。図１１Ｂの例では、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）は、それぞれ、ＷＡＦ０＝４、ＷＡＦ１＝３、ＷＡＦ２＝２、ＷＡＦ３＝２となる。また、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷ×ＷＡＦ）は、それぞれ、ｅＷｄ０＝８０、ｅＷｄ１＝４５、ｅＷｄ２＝５０、ｅＷｄ３＝４０となる。
【００９７】
次に、ライト制御回路ＷＴＣＴＬは、ストレージシステムの寿命情報ｄＬｉｆｅ（＝４．５）と、各ストレージモジュールＳＴＧ０〜ＳＴＧ３のデータリテンション時間Ｒｅｔ（Ｒｅｔ０（８）、Ｒｅｔ１（６）、Ｒｅｔ２（８．９）、Ｒｅｔ３（７））を比較する。そして、ＷＴＣＴＬは、ストレージシステムの寿命情報ｄＬｉｆｅ（４．５）以上のデータリテンション時間Ｒｅｔを持つストレージモジュールを選択する（図１０：Ｓｔｅｐ４、図１１Ｂ）。
【００９８】
なお、ここでは、寿命情報（残存寿命のしきい値）ｄＬｉｆｅは、変化していないが、実際には適宜可変制御される。特に限定はしないが、ライト制御回路ＷＴＣＴＬは、例えば、ストレージシステムの仕様に基づき、当該システムの使用期間の増大（逆に言えば残存寿命の減少）を考慮し、この残存寿命を反映して経時的に減少していく寿命情報（残存寿命のしきい値）ｄＬｉｆｅを設定することが可能である。この場合、ストレージシステムにおいて、使用期間に応じて最低限必要とされる残存寿命を確保でき、信頼性の向上や長寿命化等が図れる。また、ＷＴＣＴＬは、例えば、大半のストレージモジュールのデータリテンション時間Ｒｅｔが寿命情報（残存寿命のしきい値）ｄＬｉｆｅに達する毎に、その値を段階的に減少させていくようにｄＬｉｆｅを設定することも可能である。この場合、ストレージシステム間でデータリテンション時間Ｒｅｔの平準化を行うことが可能になり、信頼性の向上や長寿命化等が図れる。
【００９９】
続いて、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ４で選択されたストレージモジュールの中から、更に、予想ライトデータサイズｅＷｄが最小値（Ｍｉｎ．）であるストレージモジュール（ここではＳＴＧ３）を選択する（図１０：Ｓｔｅｐ５、図１１Ｂ）。次いで、もし、ストレージモジュールＳＴＧ０〜ＳＴＧ３からのデータサイズＷｓｔｇの通達があれば、Ｓｔｅｐ２へ進み、再度、Ｓｔｅｐ２〜Ｓｔｅｐ５を実行する。一方、ＳＴＧ０〜ＳＴＧ３からのＷｓｔｇの通達が無ければ、Ｓｔｅｐ７へ進む（図１０：Ｓｔｅｐ６）。
【０１００】
Ｓｔｅｐ７において、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ５で選択したストレージモジュールＳＴＧ３へ、データサイズｎｔＷ２（＝１０）のライトデータ（ＷＤＴ［２］）と論理アドレスＬＡＤ（＝５３５）を含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［２］）を発行する（図１１Ｂ）。次いで、ＷＴＣＴＬは、当該ＬＡＤ（＝５３５）とＳＴＧ３の対応関係に基づいて、テーブルＳＴＧＴＢＬを更新し（図１０：Ｓｔｅｐ８、図５Ｂ）、さらに、テーブルＭＧＴＢＬのデータサイズＷｈ２ｄを更新する（図１０：Ｓｔｅｐ８）。すなわち、図５ＢのＳＴＧＴＢＬ内のＬＡＤ（＝５３５）において、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「３」に更新され、有効情報ＶＬＤが“１”に更新される。また、図示は省略するが、図１１ＢのＭＧＴＢＬ内のＳＴＧ３において、Ｗｈ２ｄが「１０」から「２０」に更新される。
【０１０１】
そして、ストレージモジュールＳＴＧ３がライトデータ（ＷＤＴ［２］）の書き込みを完了すると、ＳＴＧ３は制御回路ＤＫＣＴＬ０へデータサイズＷｓｔｇを通達し（図１０：Ｓｔｅｐ９）、Ｓｔｅｐ２へ進み、以降同様の処理が繰り返される。なお、Ｓｔｅｐ７において、ライトアクセス要求（ＷＲＥＱ）が発行されたストレージモジュール（ここではＳＴＧ２，ＳＴＧ３）では、当該ライトアクセス要求（ＷＲＥＱ）に含まれる論理アドレスＬＡＤを不揮発性メモリＮＶＭ０〜ＮＶＭ７の物理アドレス（ＰＡＤ）へ変換し、この変換された物理アドレス（ＰＡＤ）へライトデータを書き込む。
【０１０２】
以上のように、本実施の形態２の記憶装置システムを用いることで、実施の形態１の場合と同様に、代表的には、記憶装置システム全体で消去回数の平準化（およびその結果として書き込み回数の平準化）を実現でき、信頼性の向上や長寿命化等が実現可能になる。さらに、データリテンション時間（残存寿命）の管理により、更なる信頼性の向上や長寿命化等が実現可能になる。
【０１０３】
（実施の形態３）
本実施の形態３では、ストレージモジュール用の制御回路ＤＫＣＴＬ０が、実施の形態１の図３、図４Ａおよび図４Ｂ等で述べたストレージモジュール間ウエアレベリングの実行に加えて、ガーベージコレクションの管理を行う場合について説明する。
【０１０４】
《ストレージモジュール間ウエアレベリング＋ガーベージコレクション管理》
以下に、特に限定しないが、４個のストレージモジュールＳＴＧ０〜ＳＴＧ３を備える場合を例とし、図２に示した制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬが実行する書き込み動作と、ガーベージコレクション制御回路ＧＣＣＴＬが実行するガーベージコレクションの要求動作について、図１２〜図１４に加えて図５Ａ、図５Ｂを用いて説明する。図１２は、本発明の実施の形態３による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作およびガーベージコレクションの管理動作の一例を示すフローチャートである。図１３Ａ、図１３Ｂおよび図１３Ｃは、図１２の補足図であり、図２のストレージモジュール用の制御回路ＤＫＣＴＬ０が持つテーブルＭＧＴＢＬの保持内容の一例を示す図である。図１４Ａ、図１４Ｂおよび図１４Ｃは、図１２の補足図であり、図２のストレージモジュール用の制御回路ＤＫＣＴＬ０が持つテーブルＧＥＴＢＬの保持内容の一例を示す図である。
【０１０５】
図１３Ａ、図１３Ｂおよび図１３Ｃに示すテーブルＭＧＴＢＬには、図４等に示したデータサイズｎｔＷと、各ストレージモジュールＳＴＧ０〜ＳＴＧ３毎のデータサイズＷｈ２ｄ，Ｗｓｔｇ、ライトデータサイズ比率ＷＡＦ、および予想ライトデータサイズｅＷｄに加えて、各ＳＴＧ０〜ＳＴＧ３毎の消去状態の物理ブロック数Ｅｓｚが保持されている。図１４Ａ、図１４Ｂおよび図１４Ｃに示すテーブルＧＥＴＢＬには、各番号（ＳＴＧ  Ｎｏ）を持つストレージモジュールＳＴＧ０〜ＳＴＧ３，…毎の、ガーベージコレクション実行状態ＧＣｖと消去実行状態ＥＲＳｖが保持されている。ＧＣｖは、“１”の場合にガーベージコレクション動作を実行中であることを意味し、“０”の場合に実行中でないことを意味する。ＥＲＳｖは、“１”の場合に消去動作を実行中であることを意味し、“０”の場合に実行中でないことを意味する。
【０１０６】
図１２において、まず、制御回路ＤＫＣＴＬ０は、必要に応じて（例えばストレージコントローラＳＴＲＧＣＯＮＴへの電源投入直後などで）、インターフェース信号Ｈ２Ｄ＿ＩＦを通じて、ストレージモジュールＳＴＧ０〜ＳＴＧ３へ消去状態の物理ブロック数ＥｓｚとデータサイズＷｓｔｇおよびＷｈ２ｄの通達要求を発行する。これに応じて各ストレージモジュールＳＴＧ０〜ＳＴＧ３は、消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（９０）、Ｅｓｚ１（１００）、Ｅｓｚ２（１４０）、Ｅｓｚ３（１２０））をＤＫＣＴＬ０へ返信する。更に、データサイズＷｓｔｇ（Ｗｓｔｇ０（４０）、Ｗｓｔｇ１（１５）、Ｗｓｔｇ２（１０）、Ｗｓｔｇ３（２０））およびＷｈ２ｄ（Ｗｈ２ｄ０（１０）、Ｗｈ２ｄ１（５）、Ｗｈ２ｄ２（５）、Ｗｈ２ｄ３（１０））をＤＫＣＴＬ０へ返信する。
【０１０７】
さらに、制御回路ＤＫＣＴＬ０は、必要に応じて、インターフェース信号Ｈ２Ｄ＿ＩＦを通じて、ストレージモジュールＳＴＧ０〜ＳＴＧ３へガーベージコレクション動作および消去動作の確認要求を発行する。これに応じて、各ストレージモジュールＳＴＧ０〜ＳＴＧ３は、ガーベージコレクションステータスＧｓｔ（Ｇｓｔ０（０）、Ｇｓｔ１（０）、Ｇｓｔ２（０）、Ｇｓｔ３（０））および消去ステータスＥｓｔ（Ｅｓｔ０（０）、Ｅｓｔ１（０）、Ｅｓｔ２（０）、Ｅｓｔ３（０））をＤＫＣＴＬ０へ返信する（図１２：Ｓｔｅｐ１、図１３Ａ）。
【０１０８】
続いて、制御回路ＤＫＣＴＬ０は、これらの消去状態の物理ブロック数ＥｓｚとデータサイズＷｓｔｇおよびＷｈ２ｄをテーブルＭＧＴＢＬへ設定し更新する。さらに、ＤＫＣＴＬ０は、これらのガーベージコレクションステータスＧｓｔおよび消去ステータスＥｓｔをテーブルＧＥＴＢＬのガーベージコレクション実行状態ＧＣｖおよび消去実行状態ＥＲＳｖに設定し、更新する（図１２：Ｓｔｅｐ２、図１３Ａ、図１４Ａ）。
【０１０９】
ここで、前提として、ＤＫＣＴＬ０は、現在、データサイズｎｔＷ１（ここでは１０とする）のライトデータ（ＷＤＴ［１］）と論理アドレス（ここでは１２３とする）とを含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）を処理対象としているものとする。この場合、ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、ＭＧＴＢＬ内のＷｓｔｇおよびＷｈ２ｄを利用して、ＳＴＧ０〜ＳＴＧ３毎のライトデータサイズ比率ＷＡＦを求め、これに加えてｎｔＷ１を利用して予想ライトデータサイズｅＷｄを求め、ＭＧＴＢＬへ設定し更新する（図１２：Ｓｔｅｐ３、図１３Ａ）。図１３Ａの例では、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）は、それぞれ、ＷＡＦ０＝４、ＷＡＦ１＝３、ＷＡＦ２＝２、ＷＡＦ３＝２となる。また、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷ×ＷＡＦ）は、それぞれ、ｅＷｄ０＝８０、ｅＷｄ１＝４５、ｅＷｄ２＝３０、ｅＷｄ３＝４０となる。
【０１１０】
次に、ガーベージコレクション制御回路ＧＣＣＴＬは、テーブルＧＥＴＢＬ（図１４Ａ）を読み出し、現在、ガーベージコレクション動作や消去動作を行っていないストレージモジュールＳＴＧ０〜ＳＴＧ４をガーベージコレクション対象のストレージモジュールとして選択する（図１２：Ｓｔｅｐ４、図１３Ａ）。続いて、ＧＣＣＴＬは、予め設定した消去状態の物理ブロック数の閾値ＥＳＺｔｈ（ここでは９１）と、Ｓｔｅｐ４にて選択されたストレージモジュールＳＴＧ０〜ＳＴＧ３毎の消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（９０）、Ｅｓｚ１（１００）、Ｅｓｚ２（１４０）、Ｅｓｚ３（１２０））を比較する。そして、ＧＣＣＴＬは、消去状態の物理ブロック数の閾値ＥＳＺｔｈ（＝９１）より小さな物理ブロック数Ｅｓｚを持つストレージモジュール（ここではＳＴＧ０）をガーベージコレクション対象のストレージモジュールとして選択する。更に、消去状態の物理ブロック数の閾値ＥＳＺｔｈ（＝９１）以上の物理ブロック数Ｅｓｚを持つストレージモジュールＳＴＧ１〜ＳＴＧ３を書き込みおよび読み出し対象のストレージモジュールとして選択する（図１２：Ｓｔｅｐ５、図１３Ａ）。
【０１１１】
続いて、ガーベージコレクション制御回路ＧＣＣＴＬは、Ｓｔｅｐ５でガーベージコレクション対象として選択されたストレージモジュールＳＴＧ０へガーベージコレクション要求（ＧＣｒｑ）を発行し、テーブルＧＥＴＢＬを更新する。つまり、図１４Ｂに示すように、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「０」に対応するガーベージコレクション実行状態ＧＣｖの値が“１”となり、これによってストレージモジュールＳＴＧ０がガーベージコレクション動作の実行中であることが示される（図１２：Ｓｔｅｐ１１、図１３Ａ、図１４Ｂ）。
【０１１２】
ここで、ガーベージコレクション要求（ＧＣｒｑ）を受け取ったストレージモジュールＳＴＧ０は、図８のＳｔｅｐ３〜Ｓｔｅｐ８の処理を用いてガーベージコレクションを実行する。すなわち、図８においては、Ｓｔｅｐ１およびＳｔｅｐ２の処理により、ガーベージコレクション動作を実行するか否かをストレージモジュール自身が判断していたが、図１２のフローでは、ストレージモジュール自身が判断する代わりにその上位に位置する制御回路ＤＫＣＴＬ０内のガーベージコレクション制御回路ＧＣＣＴＬが判断している。これによって、ＤＫＣＴＬ０は、ガーベージコレクション動作を実行中でないストレージモジュールを対象として、ライトアクセス要求（ＷＲＥＱ）やリードアクセス要求（ＲＲＥＱ）等を発行できるため、書き込み動作や読み出し動作等の効率を高めることが可能になる。
【０１１３】
続いて、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ５で書き込みおよび読み出し対象のストレージモジュールとして選択されたストレージモジュールの中から、予想ライトデータサイズｅＷｄが最小値（Ｍｉｎ．）であるストレージモジュール（ここではＳＴＧ２）を選択する（図１２：Ｓｔｅｐ６、図１３Ａ）。次いで、もし、ストレージモジュールＳＴＧ０〜ＳＴＧ３からのデータサイズＷｓｔｇの通達があれば、Ｓｔｅｐ２へ進み、再度、Ｓｔｅｐ２〜Ｓｔｅｐ６を実行する。一方、ＳＴＧ０〜ＳＴＧ３からのＷｓｔｇの通達が無ければ、Ｓｔｅｐ８へ進む（図１２：Ｓｔｅｐ７）。
【０１１４】
Ｓｔｅｐ８において、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ６で選択したストレージモジュールＳＴＧ２へ、データサイズｎｔＷ１（＝１０）のライトデータ（ＷＤＴ［１］）と論理アドレスＬＡＤ（＝１２３）を含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）を発行する（図１３Ａ）。次いで、ＷＴＣＴＬは、当該ＬＡＤ（＝１２３）とＳＴＧ２の対応関係に基づいて、テーブルＳＴＧＴＢＬを更新し（図１２：Ｓｔｅｐ９、図５Ａ）、さらに、テーブルＭＧＴＢＬのデータサイズＷｈ２ｄを更新する（図１２：Ｓｔｅｐ９、図１３Ｂ）。すなわち、図５ＡのＳＴＧＴＢＬ内のＬＡＤ（＝１２３）において、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「２」に更新され、有効情報ＶＬＤが“１”に更新される。また、図１３ＢのＭＧＴＢＬ内のＳＴＧ２において、Ｗｈ２ｄが「５」から「１５」に更新される。
【０１１５】
その後、ストレージモジュールＳＴＧ２は、ライトデータ（ＷＤＴ［１］）の書き込みを完了すると、制御回路ＤＫＣＴＬ０へ消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ２（１３９））とデータサイズＷｓｔｇ（Ｗｓｔｇ２（３０））を通達し（図１２：Ｓｔｅｐ１０、図１３Ｂ）、Ｓｔｅｐ２へ戻る。この例では、ＳＴＧ２において、例えば、データサイズｎｔＷ１（＝１０）のライトデータ（ＷＤＴ［１］）を書き込む前の期間で、スタティックウエアレベリング動作等によりデータサイズ「２０」の書き込みが行われており、これによってＷｓｔｇ２として計「３０」の値が通達されている。また、ＳＴＧ２において、ライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）の書き込みに伴い図１３Ａにおける消去状態の物理ブロック数Ｅｓｚ（＝１４０）から図１３Ｂにおける消去状態の物理ブロック数Ｅｓｚ（＝１３９）に減少している。
【０１１６】
続いて、ライト制御回路ＷＴＣＴＬは、通達された消去状態の物理ブロック数Ｅｓｚ（＝１３９）およびデータサイズＷｓｔｇ（Ｗｓｔｇ２（３０））をテーブルＭＧＴＢＬへ設定し更新する（図１２：Ｓｔｅｐ２、図１３Ｂ）。ここで、前提として、ＤＫＣＴＬ０は、現在、データサイズｎｔＷ２（ここでは１０とする）のライトデータ（ＷＤＴ［２］）と論理アドレス（ここでは５３５とする）とを含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［２］）を処理対象としているものとする。この場合、ＷＴＣＴＬは、ＭＧＴＢＬ内のデータサイズＷｓｔｇおよびＷｈ２ｄを利用し、各ストレージモジュールＳＴＧ０〜ＳＴＧ３毎のライトデータサイズ比率ＷＡＦを求め、これに加えてｎｔＷ２を利用して予想ライトデータサイズｅＷｄを求め、ＭＧＴＢＬへ設定し更新する（図１２：Ｓｔｅｐ３、図１３Ｂ）。図１３Ｂの例では、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）は、それぞれ、ＷＡＦ０＝４、ＷＡＦ１＝３、ＷＡＦ２＝２、ＷＡＦ３＝２となる。また、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷ×ＷＡＦ）は、それぞれ、ｅＷｄ０＝８０、ｅＷｄ１＝４５、ｅＷｄ２＝５０、ｅＷｄ３＝４０となる。
【０１１７】
次に、ガーベージコレクション制御回路ＧＣＣＴＬは、テーブルＧＥＴＢＬ（図１４Ｂ）を読み出し、現在、ガーベージコレクション動作や消去動作を行っていないストレージモジュールＳＴＧ１〜ＳＴＧ３をガーベージコレクション対象のストレージモジュールとして選択する（図１２：Ｓｔｅｐ４、図１３Ｂ）。続いて、ＧＣＣＴＬは、予め設定した消去状態の物理ブロック数の閾値ＥＳＺｔｈ（＝９１）と、Ｓｔｅｐ４にて選択されたストレージモジュールＳＴＧ１〜ＳＴＧ３毎の消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ１（１００）、Ｅｓｚ２（１４０）、Ｅｓｚ３（１２０））を比較する。ここでは、消去状態の物理ブロック数の閾値ＥＳＺｔｈ（＝９１）よりも小さな物理ブロック数Ｅｓｚを持つストレージモジュールは存在しない。そこで、ＧＣＣＴＬは、ストレージモジュールＳＴＧ１〜ＳＴＧ３を書き込みおよび読み出し対象のストレージモジュールとして選択する（図１２：Ｓｔｅｐ５、図１３Ｂ）。
【０１１８】
続いて、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ５で書き込みおよび読み出し対象のストレージモジュールとして選択されたストレージモジュールの中から、予想ライトデータサイズｅＷｄが最小値（Ｍｉｎ．）であるストレージモジュール（ここではＳＴＧ３）を選択する（図１２：Ｓｔｅｐ６、図１３Ｂ）。次いで、もし、ストレージモジュールＳＴＧ０〜ＳＴＧ３からのデータサイズＷｓｔｇの通達があれば、Ｓｔｅｐ２へ進み、再度、Ｓｔｅｐ２〜Ｓｔｅｐ６を実行する。一方、ＳＴＧ０〜ＳＴＧ３からのＷｓｔｇの通達が無ければ、Ｓｔｅｐ８へ進む（図１２：Ｓｔｅｐ７）。
【０１１９】
Ｓｔｅｐ８において、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ６で選択したストレージモジュールＳＴＧ３へ、データサイズｎｔＷ２（＝１０）のライトデータ（ＷＤＴ［２］）と論理アドレスＬＡＤ（＝５３５）を含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［２］）を発行する（図１３Ｂ）。次いで、ＷＴＣＴＬは、当該ＬＡＤ（＝５３５）とＳＴＧ３の対応関係に基づいて、テーブルＳＴＧＴＢＬを更新し（図１２：Ｓｔｅｐ９、図５Ｂ）、さらに、テーブルＭＧＴＢＬのデータサイズＷｈ２ｄを更新する（図１２：Ｓｔｅｐ９、図１３Ｃ）。すなわち、図５ＢのＳＴＧＴＢＬ内のＬＡＤ（＝５３５）において、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「３」に更新され、有効情報ＶＬＤが“１”に更新される。また、図１３ＣのＭＧＴＢＬ内のＳＴＧ３において、Ｗｈ２ｄが「１０」から「２０」に更新される。
【０１２０】
そして、ストレージモジュールＳＴＧ３がライトデータ（ＷＤＴ［２］）の書き込みを完了すると、ＳＴＧ３は制御回路ＤＫＣＴＬ０へ消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ３（１１９））およびデータサイズＷｓｔｇ（Ｗｓｔｇ３（４０））を通達し（図１２：Ｓｔｅｐ１０）、Ｓｔｅｐ２へ進む。なお、Ｓｔｅｐ８において、ライトアクセス要求（ＷＲＥＱ）が発行されたストレージモジュール（ここではＳＴＧ２，ＳＴＧ３）では、当該ライトアクセス要求（ＷＲＥＱ）に含まれる論理アドレスＬＡＤを不揮発性メモリＮＶＭ０〜ＮＶＭ７の物理アドレス（ＰＡＤ）へ変換し、この変換された物理アドレス（ＰＡＤ）へライトデータを書き込む。
【０１２１】
ここで、前述したように、Ｓｔｅｐ１１でガーベージコレクション要求（ＧＣｒｑ）を受け取ったストレージモジュールＳＴＧ０が、ストレージモジュールＳＴＧ３によるライトデータ（ＷＤＴ［２］）の書き込み動作の完了後に、ガーベージコレクション動作を完了した場合について説明する。ストレージモジュールＳＴＧ０は、ガーベージコレクション動作を完了すると、当該ガーベージコレクション動作後における消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（１００））およびデータサイズＷｓｔｇ（Ｗｓｔｇ０（７０））を制御回路ＤＫＣＴＬ０へ送信する（図１２：Ｓｔｅｐ１２、図１３Ｃ）。
【０１２２】
制御回路ＤＫＣＴＬ０内のガーベージコレクション制御回路ＧＣＣＴＬは、ガーベージコレクション動作が完了したことを受けてテーブルＧＥＴＢＬへを更新する。つまり図１４Ａに示すように、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「０」に対応するガーベージコレクション実行状態ＧＣｖの値が“０”となり、これによってストレージモジュールＳＴＧ０がガーベージコレクション動作を実行中でないことが示される。
【０１２３】
また、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（１００））およびデータサイズＷｓｔｇ（Ｗｓｔｇ０（７０））をテーブルＭＧＴＢＬへ設定し更新する（図１２：Ｓｔｅｐ２、図１３Ｃ）。次に、ＷＴＣＴＬは、ストレージモジュールＳＴＧ０のデータサイズＷｓｔｇおよびＷｈ２ｄを利用し、ストレージモジュールＳＴＧ０のライトデータサイズ比率ＷＡＦおよび予想ライトデータサイズｅＷｄを求め、テーブルＭＧＴＢＬへ設定し更新する（図１２：Ｓｔｅｐ３、図１３Ｃ）。図１３Ｃでは、ＷＡＦ＝７となり、仮に次のライトアクセス要求（書き込み命令）（ＷＲＥＱ）に伴うデータサイズｎｔＷ３を「１０」とすると、ｅＷｄ０＝１４０となる。
【０１２４】
以上のように、本実施の形態３の記憶装置システムを用いることで、実施の形態１の場合と同様に、代表的には、記憶装置システム全体で消去回数の平準化（およびその結果として書き込み回数の平準化）を実現でき、信頼性の向上や長寿命化等が実現可能になる。さらに、ストレージコントローラＳＴＲＧＣＯＮＴにて、ガーベージコレクション動作を管理することで、どのストレージモジュールがガーベージコレクション動作を実行中で、どのストレージモジュールに書き込みや読み出しが可能かを把握することができ、ガーベージコレクション動作と、書き込みおよび読み出し動作を並行して実行可能になる。その結果、平準化行いつつ、ストレージシステムの高速化等が図れる。
【０１２５】
（実施の形態４）
本実施の形態４では、ストレージモジュール用の制御回路ＤＫＣＴＬ０が、実施の形態１の図３、図４Ａおよび図４Ｂ等で述べた書き込み動作（ストレージモジュール間ウエアレベリング）の実行に加えて、消去動作を行う場合について説明する。
【０１２６】
《ストレージモジュール間ウエアレベリング＋消去動作》
以下に、特に限定しないが、４個のストレージモジュールＳＴＧ０〜ＳＴＧ３を備える場合を例とし、図２に示した制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬが実行する書き込み動作と、データ消去制御回路ＥＲＳＣＴＬが実行する消去の要求動作について、図１５、図１６に加えて図５Ｃ、図５Ｄ、図１４Ａ、図１４Ｃを用いて説明する。図１５は、本発明の実施の形態４による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作および消去動作の一例を示すフローチャートである。図１６Ａ、図１６Ｂおよび図１６Ｃは、図１５の補足図であり、図２のストレージモジュール用の制御回路ＤＫＣＴＬ０が持つテーブルＭＧＴＢＬの保持内容の一例を示す図である。
【０１２７】
図１５において、まず、制御回路ＤＫＣＴＬ０は、必要に応じて（例えばストレージコントローラＳＴＲＧＣＯＮＴへの電源投入直後などで）、インターフェース信号Ｈ２Ｄ＿ＩＦを通じて、ストレージモジュールＳＴＧ０〜ＳＴＧ３へ消去状態の物理ブロック数ＥｓｚとデータサイズＷｓｔｇおよびＷｈ２ｄの通達要求を発行する。これに応じて各ストレージモジュールＳＴＧ０〜ＳＴＧ３は、消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（９０）、Ｅｓｚ１（１００）、Ｅｓｚ２（１４０）、Ｅｓｚ３（１２０））をＤＫＣＴＬ０へ返信する。更に、データサイズＷｓｔｇ（Ｗｓｔｇ０（４０）、Ｗｓｔｇ１（１５）、Ｗｓｔｇ２（１０）、Ｗｓｔｇ３（２０））およびＷｈ２ｄ（Ｗｈ２ｄ０（１０）、Ｗｈ２ｄ１（５）、Ｗｈ２ｄ２（５）、Ｗｈ２ｄ３（１０））をＤＫＣＴＬ０へ返信する。
【０１２８】
さらに、制御回路ＤＫＣＴＬ０は、必要に応じて、インターフェース信号Ｈ２Ｄ＿ＩＦを通じて、ストレージモジュールＳＴＧ０〜ＳＴＧ３へガーベージコレクション動作および消去動作の確認要求を発行する。これに応じて、各ストレージモジュールＳＴＧ０〜ＳＴＧ３は、ガーベージコレクションステータスＧｓｔ（Ｇｓｔ０（０）、Ｇｓｔ１（０）、Ｇｓｔ２（０）、Ｇｓｔ３（０））および消去ステータスＥｓｔ（Ｅｓｔ０（０）、Ｅｓｔ１（０）、Ｅｓｔ２（０）、Ｅｓｔ３（０））をＤＫＣＴＬ０へ返信する（図１５：Ｓｔｅｐ１、図１６Ａ）。
【０１２９】
続いて、制御回路ＤＫＣＴＬ０は、これらの消去状態の物理ブロック数ＥｓｚとデータサイズＷｓｔｇおよびＷｈ２ｄをテーブルＭＧＴＢＬへ設定し更新する。さらに、ＤＫＣＴＬ０は、これらのガーベージコレクションステータスＧｓｔおよび消去ステータスＥｓｔをテーブルＧＥＴＢＬのガーベージコレクション実行状態ＧＣｖおよび消去実行状態ＥＲＳｖに設定し、更新する（図１５：Ｓｔｅｐ２、図１６Ａ、図１４Ａ）。
【０１３０】
ここで、前提として、ＤＫＣＴＬ０は、現在、データサイズｎｔＷ１（ここでは１０とする）のライトデータ（ＷＤＴ［１］）と論理アドレス（ここでは１２３とする）とを含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）を処理対象としているものとする。この場合、ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、ＭＧＴＢＬ内のＷｓｔｇおよびＷｈ２ｄを利用して、ＳＴＧ０〜ＳＴＧ３毎のライトデータサイズ比率ＷＡＦを求め、これに加えてｎｔＷ１を利用して予想ライトデータサイズｅＷｄを求め、ＭＧＴＢＬへ設定し更新する（図１５：Ｓｔｅｐ３、図１６Ａ）。図１６Ａの例では、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）は、それぞれ、ＷＡＦ０＝４、ＷＡＦ１＝３、ＷＡＦ２＝２、ＷＡＦ３＝２となる。また、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷ×ＷＡＦ）は、それぞれ、ｅＷｄ０＝８０、ｅＷｄ１＝４５、ｅＷｄ２＝３０、ｅＷｄ３＝４０となる。
【０１３１】
次のＳｔｅｐ４では、特に限定しないが、ストレージコントローラＳＴＲＧＣＯＮＴは、情報処理装置ＳＲＶ０〜ＳＲＶｍからのデータ消去要求（ＥＱ）があるかをチェックし、データ消去要求（ＥＱ）があればＳｔｅｐ５を実行し、無ければＳｔｅｐ６を実行する。すなわち、例えば、ＳＲＶ０〜ＳＲＶｍから、「１０００〜２２７９」の論理アドレスＬＡＤのデータを消去するデータ消去要求（ＥＱ）がＳＴＲＧＣＯＮＴのインターフェース回路ＳＴＩＦ００〜ＳＴＩＦｍ１へ入力される。このデータ消去要求（ＥＱ）は、制御回路ＨＣＴＬ０を通じて制御回路ＤＫＣＴＬ０のデータ消去制御回路ＥＲＳＣＴＬへ通達され（図１５：Ｓｔｅｐ４）、その後Ｓｔｅｐ５が実行される。
【０１３２】
次に、データ消去制御回路ＥＲＳＣＴＬは、図５Ｃに示すテーブルＳＴＧＴＢＬの中で、論理アドレスＬＡＤ＝１０００〜２２７９を検索し、論理アドレスＬＡＤ＝１０００〜２２７９のデータは全てストレージモジュールＳＴＧ０へ保存されていることを把握する。さらに、ＥＲＳＣＴＬは、テーブルＧＥＴＢＬ（図１４Ａ）を読み出し、現在、ガーベージコレクション動作や消去動作を行っていないストレージモジュールＳＴＧ０を消去動作対象のストレージモジュールとして選択する（図１５：Ｓｔｅｐ５、図１６Ａ）。
【０１３３】
続いて、データ消去制御回路ＥＲＳＣＴＬは、ストレージモジュールＳＴＧ０に対して、論理アドレスＬＡＤ＝１０００〜２２７９のデータを消去するデータ消去アクセス要求（ＥＲＳｒｑ）を発行し、テーブルＧＥＴＢＬを更新する。つまり、図１４Ｃに示すように、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「０」に対応する消去実行状態ＥＲＳｖの値が“１”となり、これによってＳＴＧ０が消去動作の実行中であることが示される（図１５：Ｓｔｅｐ１１、図１６Ａ、図１４Ｃ）。
【０１３４】
次いで、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ５の消去動作対象以外のストレージモジュールＳＴＧ１〜ＳＴＧ３の中から、予想ライトデータサイズｅＷｄが最小値（Ｍｉｎ．）であるストレージモジュール（ここではＳＴＧ２）を選択する（図１５：Ｓｔｅｐ６、図１６Ａ）。次に、もし、ストレージモジュールＳＴＧ０〜ＳＴＧ３からのデータサイズＷｓｔｇの通達があれば、Ｓｔｅｐ２へ進み、再度、Ｓｔｅｐ２〜Ｓｔｅｐ４およびＳｔｅｐ６を実行する。一方、ＳＴＧ０〜ＳＴＧ３からのＷｓｔｇの通達が無ければ、Ｓｔｅｐ８へ進む（図１５：Ｓｔｅｐ７）。
【０１３５】
Ｓｔｅｐ８において、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ６で選択したストレージモジュールＳＴＧ２へ、データサイズｎｔＷ１（＝１０）のライトデータ（ＷＤＴ［１］）と論理アドレスＬＡＤ（＝１２３）を含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）を発行する（図１６Ａ）。次いで、ＷＴＣＴＬは、当該ＬＡＤ（＝１２３）とＳＴＧ２の対応関係に基づいて、テーブルＳＴＧＴＢＬを更新し（図１５：Ｓｔｅｐ９、図５Ａ）、さらに、テーブルＭＧＴＢＬのデータサイズＷｈ２ｄを更新する（図１５：Ｓｔｅｐ９、図１６Ｂ）。すなわち、図５ＡのＳＴＧＴＢＬ内のＬＡＤ（＝１２３）において、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「２」に更新され、有効情報ＶＬＤが“１”に更新される。また、図１６ＢのＭＧＴＢＬ内のＳＴＧ２において、Ｗｈ２ｄが「５」から「１５」に更新される。
【０１３６】
その後、ストレージモジュールＳＴＧ２は、ライトデータ（ＷＤＴ［１］）の書き込みを完了すると、制御回路ＤＫＣＴＬ０へ消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ２（１３９））とデータサイズＷｓｔｇ（Ｗｓｔｇ２（３０））を通達し（図１５：Ｓｔｅｐ１０、図１６Ｂ）、Ｓｔｅｐ２へ戻る。この例では、ＳＴＧ２において、例えば、データサイズｎｔＷ１（＝１０）のライトデータ（ＷＤＴ［１］）を書き込む前の期間で、スタティックウエアレベリング動作等によりデータサイズ「２０」の書き込みが行われており、これによってＷｓｔｇ２として計「３０」の値が通達されている。また、ＳＴＧ２において、ライトアクセス要求（書き込み命令）（ＷＲＥＱ［１］）の書き込みに伴い図１６Ａにおける消去状態の物理ブロック数Ｅｓｚ（＝１４０）から図１６Ｂにおける消去状態の物理ブロック数Ｅｓｚ（＝１３９）に減少している。
【０１３７】
続いて、ライト制御回路ＷＴＣＴＬは、通達された消去状態の物理ブロック数Ｅｓｚ（＝１３９）およびデータサイズＷｓｔｇ（Ｗｓｔｇ２（３０））をテーブルＭＧＴＢＬへ設定し更新する（図１５：Ｓｔｅｐ２、図１６Ｂ）。ここで、前提として、ＤＫＣＴＬ０は、現在、データサイズｎｔＷ２（ここでは１０とする）のライトデータ（ＷＤＴ［２］）と論理アドレス（ここでは５３５とする）とを含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［２］）を処理対象としているものとする。この場合、ＷＴＣＴＬは、ＭＧＴＢＬ内のデータサイズＷｓｔｇおよびＷｈ２ｄを利用し、各ストレージモジュールＳＴＧ０〜ＳＴＧ３毎のライトデータサイズ比率ＷＡＦを求め、これに加えてｎｔＷ２を利用して予想ライトデータサイズｅＷｄを求め、ＭＧＴＢＬへ設定し更新する（図１５：Ｓｔｅｐ３、図１６Ｂ）。図１６Ｂの例では、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）は、それぞれ、ＷＡＦ０＝４、ＷＡＦ１＝３、ＷＡＦ２＝２、ＷＡＦ３＝２となる。また、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷ×ＷＡＦ）は、それぞれ、ｅＷｄ０＝８０、ｅＷｄ１＝４５、ｅＷｄ２＝５０、ｅＷｄ３＝４０となる。
【０１３８】
次のＳｔｅｐ４では、特に限定しないが、ストレージコントローラＳＴＲＧＣＯＮＴは、情報処理装置ＳＲＶ０〜ＳＲＶｍからのデータ消去要求（ＥＱ）があるかをチェックし、データ消去要求（ＥＱ）があればＳｔｅｐ５を実行し、無ければＳｔｅｐ６を実行する。この場合、データ消去要求（ＥＱ）が無いためＳｔｅｐ６が実行される。続いて、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ５の消去動作対象以外のストレージモジュールＳＴＧ１〜ＳＴＧ３の中から、予想ライトデータサイズｅＷｄが最小値（Ｍｉｎ．）であるストレージモジュール（ここではＳＴＧ３）を選択する（図１５：Ｓｔｅｐ６、図１６Ｂ）。次いで、もし、ストレージモジュールＳＴＧ０〜ＳＴＧ３からのデータサイズＷｓｔｇの通達があれば、Ｓｔｅｐ２へ進み、再度、Ｓｔｅｐ２〜Ｓｔｅｐ４およびＳｔｅｐ６を実行する。一方、ＳＴＧ０〜ＳＴＧ３からのＷｓｔｇの通達が無ければ、Ｓｔｅｐ８へ進む（図１５：Ｓｔｅｐ７）。
【０１３９】
Ｓｔｅｐ８において、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ６で選択したストレージモジュールＳＴＧ３へ、データサイズｎｔＷ２（＝１０）のライトデータ（ＷＤＴ［２］）と論理アドレスＬＡＤ（＝５３５）を含んだライトアクセス要求（書き込み命令）（ＷＲＥＱ［２］）を発行する（図１６Ｂ）。次いで、ＷＴＣＴＬは、当該ＬＡＤ（＝５３５）とＳＴＧ３の対応関係に基づいて、テーブルＳＴＧＴＢＬを更新し（図１５：Ｓｔｅｐ９、図５Ｂ）、さらに、テーブルＭＧＴＢＬのデータサイズＷｈ２ｄを更新する（図１２：Ｓｔｅｐ９、図１６Ｃ）。すなわち、図５ＢのＳＴＧＴＢＬ内のＬＡＤ（＝５３５）において、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「３」に更新され、有効情報ＶＬＤが“１”に更新される。また、図１６ＣのＭＧＴＢＬ内のＳＴＧ３において、Ｗｈ２ｄが「１０」から「２０」に更新される。
【０１４０】
そして、ストレージモジュールＳＴＧ３がライトデータ（ＷＤＴ［２］）の書き込みを完了すると、ＳＴＧ３は制御回路ＤＫＣＴＬ０へ消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ３（１１９））およびデータサイズＷｓｔｇ（Ｗｓｔｇ３（４０））を通達し（図１５：Ｓｔｅｐ１０）、Ｓｔｅｐ２へ進む。なお、Ｓｔｅｐ８において、ライトアクセス要求（ＷＲＥＱ）が発行されたストレージモジュール（ここではＳＴＧ２，ＳＴＧ３）では、当該ライトアクセス要求（ＷＲＥＱ）に含まれる論理アドレスＬＡＤを不揮発性メモリＮＶＭ０〜ＮＶＭ７の物理アドレス（ＰＡＤ）へ変換し、この変換された物理アドレス（ＰＡＤ）へライトデータを書き込む。
【０１４１】
ここで、前述したように、Ｓｔｅｐ１１でデータ消去アクセス要求（ＥＲＳｒｑ）を受け取ったストレージモジュールＳＴＧ０が、ストレージモジュールＳＴＧ３によるライトデータ（ＷＤＴ［２］）の書き込み動作の完了後に消去動作を完了した場合について説明する。ストレージモジュールＳＴＧ０は、消去動作を完了すると、当該消去動作後における消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（１００））およびデータサイズＷｓｔｇ（Ｗｓｔｇ０（４０））を制御回路ＤＫＣＴＬ０へ送信する（図１５：Ｓｔｅｐ１２、図１６Ｃ）。
【０１４２】
制御回路ＤＫＣＴＬ０内のデータ消去制御回路ＥＲＳＣＴＬは、消去動作が完了したことを受けてテーブルＧＥＴＢＬへを更新する。つまり図１４Ａに示すように、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「０」に対応する消去実行状態ＥＲＳｖの値が“０”となり、これによってストレージモジュールＳＴＧ０が消去動作を実行中でないことが示される。
【０１４３】
また、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（１００））およびデータサイズＷｓｔｇ（Ｗｓｔｇ０（４０））をテーブルＭＧＴＢＬへ設定し更新する（図１５：Ｓｔｅｐ２、図１６Ｃ）。次に、ＷＴＣＴＬは、ストレージモジュールＳＴＧ０のデータサイズＷｓｔｇおよびＷｈ２ｄを利用し、ストレージモジュールＳＴＧ０のライトデータサイズ比率ＷＡＦおよび予想ライトデータサイズｅＷｄを求め、テーブルＭＧＴＢＬへ設定し更新する（図１５：Ｓｔｅｐ３、図１６Ｃ）。図１６Ｃでは、ＷＡＦ＝４のままであり、仮に次のライトアクセス要求（書き込み命令）（ＷＲＥＱ）に伴うデータサイズｎｔＷ３を「１０」とすると、ｅＷｄ０＝８０となる。
【０１４４】
以上のように、本実施の形態４の記憶装置システムを用いることで、実施の形態１の場合と同様に、代表的には、記憶装置システム全体で消去回数の平準化（およびその結果として書き込み回数の平準化）を実現でき、信頼性の向上や長寿命化等が実現可能になる。さらに、ストレージコントローラＳＴＲＧＣＯＮＴにて、消去動作を制御することで、どのストレージモジュールが消去動作を実行中で、どのストレージモジュールに書き込みや読み出しが可能かを把握することができ、消去動作と、書き込みおよび読み出し動作を並行して実行可能になる。その結果、平準化を行いつつ、ストレージシステムの高速化等が図れる。
【０１４５】
なお、本実施の形態４および前述した実施の形態３では、ストレージコントローラＳＴＲＧＣＯＮＴが各ストレージモジュールＳＴＧを対象としてガーベージコレクション動作の管理や消去動作の制御を行う例を示した。これと同様に、図６のストレージ用の制御回路ＳＴＣＴ０は、各不揮発性メモリＮＶＭ０〜ＮＶＭ７を対象としてガーベージコレクション動作の管理や消去動作の制御を行ってもよい。すなわち、図６のランダムアクセスメモリＲＡＭｓｔ内に、どのＮＶＭ０〜ＮＶＭ７にてガーベージコレクション動作が行われているかを示す情報（ＧＣｎｖｍ）や、どのＮＶＭ０〜ＮＶＭ７にて消去動作が行われているかを示す情報（ＥＲＳｎｖｍ）等が含まれていてもよい。これによって、ストレージコントローラの場合と同様の効果が得られる。
【０１４６】
（実施の形態５）
本実施の形態５では、図１のストレージシステムＳＴＲＧＳＹＳがＲＡＩＤ機能（例えばＲＡＩＤ５等）を備える場合について説明する。そして、当該ＲＡＩＤ機能を前提として、ストレージモジュール用の制御回路ＤＫＣＴＬ０が、実施の形態３の図１２、図１３Ａ、図１３Ｂおよび図１３Ｃ等で述べたような書き込み動作（ストレージモジュール間ウエアレベリング）やガーベージコレクション管理等を行う場合について説明する。
【０１４７】
《ＲＡＩＤ適用時のストレージモジュール間ウエアレベリング＋ガーベージコレクション管理》
以下に、特に限定しないが、４個のストレージモジュールＳＴＧ０〜ＳＴＧ３を備える場合を例とする。そして、この場合において、図２に示した制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬが実行する書き込み動作と、ガーベージコレクション制御回路ＧＣＣＴＬが実行するガーベージコレクションの要求動作について、図１７、図１８に加えて図１４Ａ、図１４Ｂを用いて説明する。図１７は、本発明の実施の形態５による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う書き込み動作およびガーベージコレクションの管理動作の一例を示すフローチャートである。図１８Ａ、図１８Ｂおよび図１８Ｃは、図１７の補足図であり、図２のストレージモジュール用の制御回路ＤＫＣＴＬ０が持つテーブルＭＧＴＢＬの保持内容の一例を示す図である。
【０１４８】
図１７のＳｔｅｐ１ａにおいて、制御回路ＤＫＣＴＬ０は、必要に応じて（例えばストレージコントローラＳＴＲＧＣＯＮＴへの電源投入直後などで）、インターフェース信号Ｈ２Ｄ＿ＩＦを通じて、ストレージモジュールＳＴＧ０〜ＳＴＧ３へ消去状態の物理ブロック数ＥｓｚとデータサイズＷｓｔｇおよびＷｈ２ｄの通達要求を発行する。これに応じて各ストレージモジュールＳＴＧ０〜ＳＴＧ３は、消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（９０）、Ｅｓｚ１（１００）、Ｅｓｚ２（１４０）、Ｅｓｚ３（１２０））をＤＫＣＴＬ０へ返信する。更に、データサイズＷｓｔｇ（Ｗｓｔｇ０（４０）、Ｗｓｔｇ１（１５）、Ｗｓｔｇ２（１０）、Ｗｓｔｇ３（２０））およびＷｈ２ｄ（Ｗｈ２ｄ０（１０）、Ｗｈ２ｄ１（５）、Ｗｈ２ｄ２（５）、Ｗｈ２ｄ３（１０））をＤＫＣＴＬ０へ返信する（図１８Ａ）。
【０１４９】
さらに、図１７のＳｔｅｐ１ｂにおいて、制御回路ＤＫＣＴＬ０は、必要に応じて、インターフェース信号Ｈ２Ｄ＿ＩＦを通じて、ストレージモジュールＳＴＧ０〜ＳＴＧ３へガーベージコレクション動作および消去動作の確認要求を発行する。これに応じて、各ストレージモジュールＳＴＧ０〜ＳＴＧ３は、ガーベージコレクションステータスＧｓｔ（Ｇｓｔ０（０）、Ｇｓｔ１（０）、Ｇｓｔ２（０）、Ｇｓｔ３（０））および消去ステータスＥｓｔ（Ｅｓｔ０（０）、Ｅｓｔ１（０）、Ｅｓｔ２（０）、Ｅｓｔ３（０））をＤＫＣＴＬ０へ返信する（図１８Ａ）。
【０１５０】
続いて、図１７のＳｔｅｐ１ｂにおいて、ライト制御回路ＷＴＣＴＬは、まず、ランダムアクセスメモリＲＡＭ０〜ＲＡＭ３に保持しているデータサイズｎｔＷ＿Ａ（ここでは２０とする）のライトデータ（ＷＤＴ［Ａ］）を分割する。この例では、データサイズｎｔＷ＿Ａ１（ここでは１０とする）のライトデータ（ＷＤＴ［Ａ１］）とデータサイズｎｔＷ＿Ａ２（ここでは１０とする）のライトデータ（ＷＤＴ［Ａ２］）に分割する。次に、ＷＴＣＴＬは、分割されたライトデータ（ＷＤＴ［Ａ１］）とライトデータ（ＷＤＴ［Ａ２］）からデータサイズｎｔＷ＿ＰＡ１２（ここでは１０とする）のパリティデータ（ＰＡ１２）を生成する（図１８Ａ）。その後、ＷＴＣＴＬは、データサイズｎｔＷ＿Ａ１（＝１０）のＷＤＴ［Ａ１］と所定の論理アドレス（ここでは２２３とする）を含んだライトアクセス要求（ＷＲＥＱ［Ａ１］）と、データサイズｎｔＷ＿Ａ２（＝１０）のＷＤＴ［Ａ２］と所定の論理アドレス（ここでは２２４とする）を含んだライトアクセス要求（ＷＲＥＱ［Ａ２］）を生成する。加えて、ＷＴＣＴＬは、データサイズｎｔＷ＿ＰＡ１２（＝１０）のＰＡ１２と所定の論理アドレス（ここでは２２５とする）を含んだライトアクセス要求（ＷＲＥＱ［ＰＡ１２］）を生成する。
【０１５１】
次に、制御回路ＤＫＣＴＬ０は、Ｓｔｅｐ１ａに伴う消去状態の物理ブロック数ＥｓｚとデータサイズＷｓｔｇおよびＷｈ２ｄをテーブルＭＧＴＢＬへ設定し更新する。さらに、ＤＫＣＴＬ０は、Ｓｔｅｐ１ａに伴うガーベージコレクションステータスＧｓｔおよび消去ステータスＥｓｔをテーブルＧＥＴＢＬのガーベージコレクション実行状態ＧＣｖおよび消去実行状態ＥＲＳｖに設定し、更新する（図１７：Ｓｔｅｐ２、図１８Ａ、図１４Ａ）。
【０１５２】
続いて、ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、ＭＧＴＢＬ内のＷｓｔｇおよびＷｈ２ｄを利用して、ＳＴＧ０〜ＳＴＧ３毎のライトデータサイズ比率ＷＡＦを求める。更に、これに加えてデータサイズｎｔＷ＿Ａ１＝ｎｔＷ＿Ａ２＝ｎｔＷ＿ＰＡ１２＝１０を利用して予想ライトデータサイズｅＷｄを求め、ＭＧＴＢＬへ設定し更新する（図１７：Ｓｔｅｐ３、図１８Ａ）。図１８Ａの例では、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のＷＡＦ（＝Ｗｓｔｇ／Ｗｈ２ｄ）は、それぞれ、ＷＡＦ０＝４、ＷＡＦ１＝３、ＷＡＦ２＝２、ＷＡＦ３＝２となる。また、ＳＴＧ０、ＳＴＧ１、ＳＴＧ２、ＳＴＧ３のｅＷｄ（＝Ｗｓｔｇ＋ｎｔＷ×ＷＡＦ）は、それぞれ、ｅＷｄ０＝８０、ｅＷｄ１＝４５、ｅＷｄ２＝３０、ｅＷｄ３＝４０となる。
【０１５３】
次に、ガーベージコレクション制御回路ＧＣＣＴＬは、テーブルＧＥＴＢＬ（図１４Ａ）を読み出し、現在、ガーベージコレクション動作や消去動作を行っていないストレージモジュールＳＴＧ０〜ＳＴＧ４をガーベージコレクション対象のストレージモジュールとして選択する（図１７：Ｓｔｅｐ４、図１８Ａ）。続いて、ＧＣＣＴＬは、予め設定した消去状態の物理ブロック数の閾値ＥＳＺｔｈ（ここでは９１）と、Ｓｔｅｐ４にて選択されたストレージモジュールＳＴＧ０〜ＳＴＧ３毎の消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（９０）、Ｅｓｚ１（１００）、Ｅｓｚ２（１４０）、Ｅｓｚ３（１２０））を比較する。そして、ＧＣＣＴＬは、消去状態の物理ブロック数の閾値ＥＳＺｔｈ（＝９１）より小さな物理ブロック数Ｅｓｚを持つストレージモジュール（ここではＳＴＧ０）をガーベージコレクション対象のストレージモジュールとして選択する。更に、消去状態の物理ブロック数の閾値ＥＳＺｔｈ（＝９１）以上の物理ブロック数Ｅｓｚを持つストレージモジュールＳＴＧ１〜ＳＴＧ３を書き込みおよび読み出し対象のストレージモジュールとして選択する（図１７：Ｓｔｅｐ５、図１８Ａ）。
【０１５４】
続いて、ガーベージコレクション制御回路ＧＣＣＴＬは、Ｓｔｅｐ５でガーベージコレクション対象として選択されたストレージモジュールＳＴＧ０へガーベージコレクション要求（ＧＣｒｑ）を発行し、テーブルＧＥＴＢＬを更新する。つまり、図１４Ｂに示すように、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「０」に対応するガーベージコレクション実行状態ＧＣｖの値が“１”となり、これによってストレージモジュールＳＴＧ０がガーベージコレクション動作の実行中であることが示される（図１７：Ｓｔｅｐ１１、図１８Ａ、図１４Ｂ）。
【０１５５】
ここで、ガーベージコレクション要求（ＧＣｒｑ）を受け取ったストレージモジュールＳＴＧ０は、図８のＳｔｅｐ３〜Ｓｔｅｐ８の処理を用いてガーベージコレクションを実行する。すなわち、図８においては、Ｓｔｅｐ１およびＳｔｅｐ２の処理により、ガーベージコレクション動作を実行するか否かをストレージモジュール自身が判断していたが、図１７のフローでは、ストレージモジュール自身が判断する代わりにその上位に位置する制御回路ＤＫＣＴＬ０内のガーベージコレクション制御回路ＧＣＣＴＬが判断している。これによって、ＤＫＣＴＬ０は、ガーベージコレクション動作を実行中でないストレージモジュールを対象として、ライトアクセス要求（ＷＲＥＱ）やリードアクセス要求（ＲＲＥＱ）等を発行できるため、書き込み動作や読み出し動作等の効率を高めることが可能になる。
【０１５６】
続いて、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ５で書き込みおよび読み出し対象のストレージモジュールとして選択されたストレージモジュールの中から、予想ライトデータサイズｅＷｄが小さい順に３個のストレージモジュール（ここではＳＴＧ２、ＳＴＧ３、ＳＴＧ１）を選択する（図１７：Ｓｔｅｐ６、図１８Ａ）。次いで、もし、ストレージモジュールＳＴＧ０〜ＳＴＧ３からのデータサイズＷｓｔｇの通達があれば、Ｓｔｅｐ２へ進み、再度、Ｓｔｅｐ２〜Ｓｔｅｐ６を実行する。一方、ＳＴＧ０〜ＳＴＧ３からのＷｓｔｇの通達が無ければ、Ｓｔｅｐ８へ進む（図１７：Ｓｔｅｐ７）。
【０１５７】
Ｓｔｅｐ８において、ライト制御回路ＷＴＣＴＬは、Ｓｔｅｐ６で選択したストレージモジュールＳＴＧ２，ＳＴＧ３，ＳＴＧ１へ、それぞれ、Ｓｔｅｐ１ａで述べたライトアクセス要求（書き込み命令）（ＷＲＥＱ［Ａ１］，ＷＲＥＱ［Ａ２］，ＷＲＥＱ［ＰＡ１２］）を発行する（図１８Ｂ）。次いで、ＷＴＣＴＬは、各ライトアクセス要求に伴う論理アドレスＬＡＤ（２２３，２２４，２２５）とＳＴＧ２，ＳＴＧ３，ＳＴＧ１との対応関係に基づいて、テーブルＳＴＧＴＢＬを更新し（図１７：Ｓｔｅｐ９）、さらに、テーブルＭＧＴＢＬのデータサイズＷｈ２ｄを更新する（図１７：Ｓｔｅｐ９、図１８Ｂ）。すなわち、図５ＡのようなＳＴＧＴＢＬにおいて、図示は省略するが、ＬＡＤ（＝２２３）のストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「２」に更新され、有効情報ＶＬＤが“１”に更新される。また、ＬＡＤ（＝２２４）のＳＴＧ  Ｎｏが「３」に、ＶＬＤが“１”にそれぞれ更新され、ＬＡＤ（＝２２５）のＳＴＧ  Ｎｏが「１」に、ＶＬＤが“１”にそれぞれ更新される。更に、図１８ＢのＭＧＴＢＬ内のＳＴＧ２，ＳＴＧ３，ＳＴＧ１において、Ｗｈ２ｄが「１５」、「１５」、「２０」にそれぞれ更新される。
【０１５８】
次に、Ｓｔｅｐ１０において、ストレージモジュールＳＴＧ２は、ライトデータ（ＷＤＴ［Ａ１］）の書き込みを完了すると、制御回路ＤＫＣＴＬ０へ消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ２（１３９））とデータサイズＷｓｔｇ（Ｗｓｔｇ２（３０））を通達する。また、ストレージモジュールＳＴＧ３は、ライトデータ（ＷＤＴ［Ａ２］）の書き込みを完了すると、ＤＫＣＴＬ０へ消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ３（１１９））とデータサイズＷｓｔｇ（Ｗｓｔｇ３（４０））を通達する。更に、ストレージモジュールＳＴＧ１は、パリティデータ（ＰＡ１２）の書き込みを完了すると、ＤＫＣＴＬ０へ消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ１（１００））とデータサイズＷｓｔｇ（Ｗｓｔｇ１（４５））を通達する（図１８Ｃ）。
【０１５９】
Ｓｔｅｐ１０の後は、Ｓｔｅｐ１ｂへ戻り、ライト制御回路ＷＴＣＴＬは、データサイズｎｔＷ＿Ｂ（ここでは２０とする）の次のライトデータ（ＷＤＴ［Ｂ］）を対象にして、ライトデータの分割やパリティデータの生成を行う。ここでは、データサイズｎｔＷ＿Ｂ１（ここでは１０とする）のライトデータ（ＷＤＴ［Ｂ１］）とデータサイズｎｔＷ＿Ｂ２（ここでは１０とする）のライトデータ（ＷＤＴ［Ｂ２］）に分割し、データサイズｎｔＷ＿ＰＢ１２（ここでは１０とする）のパリティデータ（ＰＢ１２）を生成する（図１８Ｃ）。そして、ＷＴＣＴＬは、これらの各ライトデータおよびパリティデータを含んだライトアクセス要求（書き込み命令）をそれぞれ生成する。なお、Ｓｔｅｐ１０で通達された情報は、Ｓｔｅｐ２においてＭＧＴＢＬに反映される（図１８Ｃ）。
【０１６０】
ここで、前述したように、Ｓｔｅｐ１１でガーベージコレクション要求（ＧＣｒｑ）を受け取ったストレージモジュールＳＴＧ０が、ガーベージコレクション動作を完了した場合について説明する。ＳＴＧ０は、ガーベージコレクション動作を完了すると、当該ガーベージコレクション動作後における消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（１００））およびデータサイズＷｓｔｇ（Ｗｓｔｇ０（７０））を制御回路ＤＫＣＴＬ０へ送信する（図１７：Ｓｔｅｐ１２、図１８Ｃ）。
【０１６１】
制御回路ＤＫＣＴＬ０内のガーベージコレクション制御回路ＧＣＣＴＬは、ガーベージコレクション動作が完了したことを受けてテーブルＧＥＴＢＬを更新する。つまり図１４Ａに示すように、ストレージモジュールの番号（ＳＴＧ  Ｎｏ）が「０」に対応するガーベージコレクション実行状態ＧＣｖの値が“０”となり、これによってストレージモジュールＳＴＧ０がガーベージコレクション動作を実行中でないことが示される。また、制御回路ＤＫＣＴＬ０内のライト制御回路ＷＴＣＴＬは、消去状態の物理ブロック数Ｅｓｚ（Ｅｓｚ０（１００））およびデータサイズＷｓｔｇ（Ｗｓｔｇ０（７０））をテーブルＭＧＴＢＬへ設定し更新する（図１７：Ｓｔｅｐ２、図１８Ｃ）。
【０１６２】
《ＲＡＩＤ適用時の読み出し方法》
図１９は、本発明の実施の形態５による記憶装置システムにおいて、図１および図２におけるストレージモジュール用の制御回路が行う読み出し動作の一例を示す説明図である。図１９の例では、データＡはデータＡ１とＡ２から構成され、データＡ１はストレージモジュールＳＴＧ２へ保存され、データＡ２はストレージモジュールＳＴＧ３へ保存されている。また、データＡ１とＡ２から生成されたパリティデータＰＡ１２はストレージモジュールＳＴＧ１へ保存されている。
【０１６３】
データＢはデータＢ１とＢ２から構成され、データＢ１はストレージモジュールＳＴＧ１へ保存され、データＢ２はストレージモジュールＳＴＧ２へ保存されている。また、データＢ１とＢ２から生成されたパリティデータＰＢ１２はストレージモジュールＳＴＧ０へ保存されている。データＣはデータＣ１とＣ２から構成され、データＣ１はストレージモジュールＳＴＧ０へ保存され、データＣ２はストレージモジュールＳＴＧ１へ保存されている。また、データＣ１とＣ２から生成されたパリティデータＰＣ１２はストレージモジュールＳＴＧ３へ保存されている。データＤはデータＤ１とＤ２から構成され、データＤ１はストレージモジュールＳＴＧ２へ保存され、データＤ２はストレージモジュールＳＴＧ３へ保存されている。また、データＤ１とＤ２から生成されたパリティデータＰＤ１２はストレージモジュールＳＴＧ０へ保存されている。
【０１６４】
ここで、例えば、制御回路ＤＫＣＴＬ０内のガーベージコレクション制御回路ＧＣＣＴＬからストレージモジュールＳＴＧ１に対してガーベージコレクション要求（ＧＣｒｑ）が発行され、これに応じてＳＴＧ１がガーベージコレクション動作を実行中に、リード制御回路ＲＤＣＴＬが、データＢの読み出し動作を行う場合を例とする。この場合、ＲＤＣＴＬは、図１４で述べたようなテーブルＧＥＴＢＬにより、ストレージモジュールＳＴＧ１がガーベージコレクション動作を実行中であることを把握できる。また、ＲＤＣＴＬは、図５で述べたようなテーブルＳＴＧＴＢＬにより、データＢ１およびＢ２はストレージモジュールＳＴＧ１およびＳＴＧ２へ保存され、また、パリティデータＰＢ１２はストレージモジュールＳＴＧ０へ保存されていることを、各データに対応する論理アドレスＬＡＤから把握できる。
【０１６５】
そのため、リード制御回路ＲＤＣＴＬは、ガーベージコレクション動作を実行中のストレージモジュールＳＴＧ１以外の、ストレージモジュールＳＴＧ２へ保存されているデータＢ２と、ストレージモジュールＳＴＧ０へ保存されているパリティデータＰＢ１２を読み出す。次に、ＲＤＣＴＬは、データＢ２とパリティデータＰＢ１２を利用して、データＢを復元する（データＢ１を復元し、データＢ１，Ｂ２からデータＢを復元する）。このように、ストレージコントローラＳＴＲＧＣＯＮＴ（制御回路ＤＫＣＴＬ）にて、ＲＡＩＤ機能を実現することにより、ガーベージコレクション動作の完了を待つことなく、データを読み出すことができ、ストレージシステムの信頼性の向上と動作の高速化を実現できる。
【０１６６】
以上のように、本実施の形態５の記憶装置システムを用いることで、実施の形態１や実施の形態３の場合と同様に、代表的には、記憶装置システム全体で消去回数の平準化（およびその結果として書き込み回数の平準化）を実現でき、信頼性の向上や長寿命化等が実現可能になる。また、ストレージコントローラＳＴＲＧＣＯＮＴにて、ガーベージコレクション動作を管理することで、どのストレージモジュールがガーベージコレクション動作を実行中で、どのストレージモジュールに書き込みや読み出しが可能かを把握することができ、ガーベージコレクション動作と、書き込みおよび読み出し動作を並行して実行可能になる。その結果、平準化を行いつつ、ストレージシステムの高速化等が図れる。これに加えて、ストレージコントローラＳＴＲＧＣＯＮＴ（制御回路ＤＫＣＴＬ）にてＲＡＩＤ機能を実現することで、信頼性の更なる向上が実現可能になる。
【０１６７】
（実施の形態６）
本実施の形態６では、実施の形態１の図６に示したストレージモジュール（メモリモジュール）ＳＴＧの変形例について説明する。
【０１６８】
《ストレージモジュール（メモリモジュール）の構成（変形例）》
図２１は、本発明の実施の形態６による記憶装置システムにおいて、図１におけるストレージモジュールの詳細な構成例を示すブロック図である。図２１に示すストレージモジュール（メモリモジュール）ＳＴＧは、図６の構成例と比較して、図６のバッテリバックアップ装置ＢＢＵを削除する代わりに、図６のランダムアクセスメモリＲＡＭｓｔを不揮発性メモリＮＶＭＥＭｓｔに置き換えた点が異なっている。これに以外に構成に関しては、図６の場合と同様であるため詳細な説明は省略する。
【０１６９】
不揮発性メモリＮＶＭＥＭｓｔには、ＮＡＮＤ型フラッシュメモリよりも高速な書き込み動作が可能で、かつ小単位（例えばバイト単位等）でのアクセスが可能なメモリが用いられる。代表的には、例えば、相変化型メモリ（ＰＣＭ：Phase Change Memory）、ＳＰＲＡＭ（Spin transfer torque RAM）、ＭＲＡＭ（Magnetoresistive RAM）、ＦＲＡＭ（Ferroelectric RAM）(登録商標)、抵抗変化型メモリ(ＲｅＲＡＭ：Resistive RAM)などが挙げられる。このようなＮＶＭＥＭｓｔを用いることで、ＮＶＭＥＭｓｔ内に保持されるテーブル等を迅速に更新することができ、更に、急な電源遮断の際などでも直前のテーブル等の情報を保持することが可能になる。
【０１７０】
《本実施の形態による代表的な効果の纏め》
以上に説明した各実施の形態によって得られる代表的な効果を纏めると以下の通りである。
【０１７１】
第１に、複数のストレージモジュール（メモリモジュール）が実際に不揮発性メモリへ書き込んだライトデータ量をストレージコントローラへ通達することにより、ストレージコントローラは、次に書き込むライトデータ量から、各ストレージモジュールの予測ライトデータ量を求めることができる。そして、ストレージコントローラは、この予測ライトデータ量が最小のストレージモジュールへ次のデータを書き込むことができる。これによって、ストレージシステム（記憶装置システム）内の複数のストレージモジュール間での書き込み回数の平準化が、高効率で行え、高信頼かつ長寿命のストレージシステムが実現できる。
【０１７２】
第２に、複数のストレージモジュールが、実際に不揮発性メモリへ書き込んだライトデータ量に加えて寿命をストレージコントローラへ通達することにより、ストレージコントローラは、前述した予測ライトデータ量を、ストレージシステムの残存寿命以上の寿命を持つストレージモジュールを対象として求めることができる。そして、ストレージコントローラは、この対象としたストレージモジュール内で、予測ライトデータ量が最小のストレージモジュールへ次のデータを書込むことができる。これによって、ストレージシステムの製品寿命を守った上で、複数のストレージモジュール間での書き込み回数の平準化が、高効率で行え、高信頼および長寿命のストレージシステムが実現できる。
【０１７３】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。例えば、前述した実施の形態は、本発明を分かり易く説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施の形態の構成の一部を他の実施の形態の構成に置き換えることが可能であり、また、ある実施の形態の構成に他の実施の形態の構成を加えることも可能である。また、各実施の形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【０１７４】
ＡＲＢ  調停回路
ＢＢＵ  バッテリバックアップ装置
ＢＩＦ  インターフェース回路
ＢＰ  バックプレーン
ＢＵＦ  バッファ
ＣＭ  キャッシュメモリ
ＣＭＣＴＬ  キャッシュ制御回路
ＣＰＵ  プロセッサユニット
ＣＰＵＣＲ  プロセッサコア
ＤＩＡＧ  診断回路
ＤＫＣＴＬ  制御回路
ＥＲＳＣＴＬ  データ消去制御回路
ＥＲＳｖ  消去実行状態
Ｅｓｔ  消去ステータス
Ｅｓｚ  消去状態の物理ブロック数
ＧＣＣＴＬ  ガーベージコレクション制御回路
ＧＣｖ  ガーベージコレクション実行状態
Ｇｓｔ  ガーベージコレクションステータス
Ｈ２Ｄ＿ＩＦ  インターフェース信号
Ｈ２Ｓ＿ＩＦ  インターフェース信号
ＨＣＴＬ  制御回路
ＨＤＩＡＧ  診断回路
ＨＯＳＴ＿ＩＦ  インターフェース回路
ＨＲＤＣＴＬ  リード制御回路
ＨＷＴＣＴＬ  ライト制御回路
ＬＡＤ  論理アドレス
ＭＧＴＢＬ，ＳＴＧＴＢＬ，ＧＥＴＢＬ  テーブル
ＭＮＧＥＲ  情報処理回路
ＮＶＭ  不揮発性メモリ
ＮＶＭＥＭｓｔ  不揮発性メモリ
ＰＡＤ  物理アドレス
ＰＢＫ  物理ブロック
ＲＡＭ，ＲＡＭｓｔ  ランダムアクセスメモリ
ＲＡＭＣ，ＮＶＣＴ０〜ＮＶＣＴ７  メモリ制御回路
ＲＤＣＴＬ  リード制御回路
Ｒｅｔ  データリテンション時間（残存寿命）
ＲｅｔＴＢＬ  テーブル
ＳＩＦＣ  インターフェース回路
ＳＲＶ  情報処理装置（ホスト）
ＳＴＣＴ  制御回路
ＳＴＧ  ストレージモジュール（メモリモジュール）
ＳＴＩＦ  インターフェース回路
ＳＴＲＧＣＯＮＴ  ストレージコントローラ
ＳＴＲＧＳＹＳ  ストレージシステム（記憶装置システム）
ＶＬＤ  有効情報
ＷＡＦ  ライトデータサイズ比率
ＷＤＴ  ライトデータ
ＷＴＣＴＬ  ライト制御回路
Ｗｓｔｇ，Ｗｈ２ｄ，ｎｔＷ  データサイズ
ｄＬｉｆｅ  寿命情報（残存寿命のしきい値）
ｅＷｄ  予想ライトデータサイズ
【図１】
2014038073.tif 000003
【図２】
2014038073.tif 000004
【図３】
2014038073.tif 000005
【図４Ａ】
2014038073.tif 000006
【図４Ｂ】
2014038073.tif 000007
【図５Ａ】
2014038073.tif 000008
【図５Ｂ】
2014038073.tif 000009
【図５Ｃ】
2014038073.tif 000010
【図５Ｄ】
2014038073.tif 000011
【図６】
2014038073.tif 000012
【図７】
2014038073.tif 000013
【図８】
2014038073.tif 000014
【図９】
2014038073.tif 000015
【図１０】
2014038073.tif 000016
【図１１Ａ】
2014038073.tif 000017
【図１１Ｂ】
2014038073.tif 000018
【図１２】
2014038073.tif 000019
【図１３Ａ】
2014038073.tif 000020
【図１３Ｂ】
2014038073.tif 000021
【図１３Ｃ】
2014038073.tif 000022
【図１４Ａ】
2014038073.tif 000023
【図１４Ｂ】
2014038073.tif 000024
【図１４Ｃ】
2014038073.tif 000025
【図１５】
2014038073.tif 000026
【図１６Ａ】
2014038073.tif 000027
【図１６Ｂ】
2014038073.tif 000028
【図１６Ｃ】
2014038073.tif 000029
【図１７】
2014038073.tif 000030
【図１８Ａ】
2014038073.tif 000031
【図１８Ｂ】
2014038073.tif 000032
【図１８Ｃ】
2014038073.tif 000033
【図１９】
2014038073.tif 000034
【図２０Ａ】
2014038073.tif 000035
【図２０Ｂ】
2014038073.tif 000036
【図２１】
2014038073.tif 000037
【図２２】
2014038073.tif 000038
【図２３】
2014038073.tif 000039
【国際調査報告】
2014038073.tif 000040
2014038073.tif 000041
2014038073.tif 000042
2014038073.tif 000043