(57)【要約】【課題】  記憶資源を有効に活用しながら搭載されたフラッシュストレージの信頼性をも維持し得るストレージシステム及びその制御方法を提案する。【解決手段】  複数のフラッシュチップが収納されたフラッシュストレージと、上位装置からの要求に応じてフラッシュストレージにデータをリード／ライトするストレージコントローラとを有するストレージシステム及びその制御方法であって、フラッシュチップは、フラッシュチップのセルのモードを、第１のモードと、当該第１のモードよりも格納可能な情報量が少ないものの寿命が長い第２のモードとに変更でき、予測部が、第１の記憶領域ごとに、当該第１の記憶領域の寿命を予測し、目標期間と比較し、決定部が、予測部の比較結果に基づいて、セルのモードを変更する第１の記憶領域を決定し、モード変更部が、決定部の決定結果に従って、該当する第１の記憶領域のセルのモードを変更するようにした。【選択図】        図２８
2019086974.tif 000002
【特許請求の範囲】
【請求項１】
複数のフラッシュチップが収納されたフラッシュストレージと、上位装置からの要求に応じて前記フラッシュストレージにデータをリード／ライトするストレージコントローラとを有するストレージシステムであって、
前記フラッシュチップは、前記フラッシュチップのセルのモードを、第１のモードと、当該第１のモードよりも格納可能な情報量が少ないものの寿命が長い第２のモードと、に変更でき、
第１の記憶領域ごとに、当該第１の記憶領域の寿命を予測し、目標期間と比較する予測部と、
前記予測部の比較結果に基づいて、前記セルのモードを変更する前記第１の記憶領域を決定する決定部と、
前記決定部の決定結果に従って、該当する前記第１の記憶領域の前記セルのモードを変更するモード変更部と
を備えることを特徴とするストレージシステム。
【請求項２】
前記フラッシュストレージへのライト頻度に基づいて、前記寿命を予測する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記第１の記憶領域の寿命は、
当該第１の記憶領域からのデータの消去回数に基づいて予測される
ことを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記寿命を判断するために、前記第１の記憶領域のデータを読み出した際のエラービット値を用いる
ことを特徴とする請求項３に記載のストレージシステム。
【請求項５】
前記予測部、前記決定部及び前記モード変更部が前記フラッシュストレージに設けられ、
前記ストレージコントローラは、各フラッシュモジュールの容量を管理しており、
前記フラッシュストレージに、前記第１の記憶領域の前記セルのモードを変更する場合に、容量の変化を前記ストレージコントローラに通知する通知部をさらに備える
ことを特徴とする請求項１に記載のストレージシステム。
【請求項６】
前記予測部が前記ストレージコントローラに設けられる
ことを特徴とする請求項１に記載のストレージシステム。
【請求項７】
前記決定部により前記セルのモードを変更すると決定された前記第１の記憶領域に格納されているデータを、同一又は他の前記フラッシュストレージ内の前記第１の記憶領域に移動させるデータ移動部を備え、
前記データの移動後に、前記セルのモードの変更を行う
ことを特徴とする請求項１に記載のストレージシステム。
【請求項８】
複数の前記フラッシュストレージがＲＡＩＤ（Redundant Arrays of Inexpensive Disks）を構成するフラッシュストレージグループとして管理され、
前記第１の記憶領域に格納されているデータを、同一の前記フラッシュストレージ内又は同一の前記フラッシュストレージグループ内の前記第１の記憶領域に移動させる
ことを特徴とする請求項１に記載のストレージシステム。
【請求項９】
前記第１の記憶領域は、前記フラッシュストレージにおける消去単位であるブロックである
ことを特徴とする請求項３に記載のストレージシステム。
【請求項１０】
前記寿命の予測及びセルモードの変更を行う前記第１の記憶領域は、前記フラッシュストレージにおける消去単位であるブロックよりも小さい単位である
ことを特徴とする請求項３に記載のストレージシステム。
【請求項１１】
前記寿命予測に基づいて、前記第１の記憶領域のセルのモードを第１のモードから第２のモードに変更する場合に、他のセルのモードを第２のモードから第１のモードに変更する
ことを特徴とするストレージシステム。
【請求項１２】
複数のフラッシュチップが収納されたフラッシュストレージと、上位装置からの要求に応じて前記フラッシュストレージにデータをリード／ライトするストレージコントローラとを有するストレージシステムの制御方法であって、
前記フラッシュチップは、前記フラッシュチップのセルのモードを、第１のモードと、当該第１のモードよりも格納可能な情報量が少ないものの寿命が長い第２のモードと、に変更でき、
予測部が、第１の記憶領域ごとに、当該第１の記憶領域の寿命を予測し、目標期間と比較する予測工程と、
決定部が、前記予測部の比較結果に基づいて、前記セルのモードを変更する前記第１の記憶領域を決定する決定工程と、
モード変更部が、前記決定部の決定結果に従って、該当する前記第１の記憶領域の前記セルのモードを変更するモード変更工程と
を備えることを特徴とするストレージシステムの制御方法。
【請求項１３】
複数のフラッシュチップと、上位装置からの要求に応じて前記フラッシュチップにデータをリード／ライトを制御するコントローラとを有するストレージシステムであって、
前記フラッシュチップは、そのセルのモードを、第１のモードと、当該第１のモードよりも格納可能な情報量が少ないものの寿命の長い第２のモードと、に変更でき、
第１の記憶領域ごとに、当該第１の記憶領域の寿命を予測し、目標期間と比較する予測部と、
前記予測部の比較結果に基づいて、前記セルのモードを変更する前記第１の記憶領域を決定する決定部と、
前記決定部の決定結果に従って、該当する前記第１の記憶領域の前記セルのモードを変更するモード変更部と
を備えることを特徴とするストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージシステム及びその制御方法に関し、例えば、セルのモード（以下、これを単にセルモードと呼ぶ）をＴＣＬ（Triple-level Cell）及びＱＣＬ（Quadruple level Cell）間で相互かつ動的に変更可能なフラッシュストレージが搭載されたストレージシステムに適用して好適なものである。
【背景技術】
【０００２】
近年、フラッシュメモリの低価格化により、ストレージシステムへのフラッシュストレージの適用が急速に進行している。フラッシュメモリは、高速ではあるが、磁気ディスクと比べると未だに高価格である。このため、現在、フラッシュメモリを低価格化するための技術開発が進められている。
【０００３】
このような技術の１つとして、フラッシュメモリの１つのセルに、複数のビットを書き込めるようにする多値化技術がある。現在では、１つのセルに３値を書き込めるＴＬＣ技術が実用化されているが、これに続けて１つのセルに４値を書き込めるＱＬＣ技術の開発も進められている。
【０００４】
一方で、フラッシュメモリには寿命がある。フラッシュメモリは、データの書き換えが困難で、ブロックと呼ばれる記憶領域単位でデータ消去を行わなければ新しいデータを書き込むことができない。しかしながら、この消去回数には上限があり、多値化により、許容される消去回数は急激に減少する。例えば、セルモードがＴＬＣ（以下、このモードをＴＬＣモードと呼ぶ）の場合には消去回数の上限が数千回と言われているのに対し、セルモードがＱＬＣ（以下、このモードをＱＬＣモードと呼ぶ）の場合には消去回数の上限が数百回に減少すると言われている。
【０００５】
消去回数が上限に達したフラッシュストレージは、使用不可能となる。このため上述のようなフラッシュメモリの多値化に伴う許容消去回数の減少は、フラッシュストレージの利用者にとって更新可能なデータ量、すなわちフラッシュストレージにライト可能なデータ量の減少となる。またデータの書換えがフラッシュストレージ内の一部の領域に集中し、一部の領域のみデータの更新が不可能となった場合にもそのフラッシュストレージは使用できなくなる。このため、記憶媒体としてフラッシュストレージを搭載したストレージシステムに関する技術として、各ブロックの消去回数を均等化することを狙ったウエアレベリングと呼ばれる技術が広く採用されている。
【０００６】
またストレージの分野では、購入後一定期間の間にストレージ装置が故障した場合には無償交換を実施しており、現在、この期間（以下、これを保証期間と呼ぶ）は５年間となっているのが一般的である。このため、ＱＬＣ技術を適用したフラッシュストレージを多くのアプリケーションが利用する場合、そのフラッシュストレージの消去回数が５年以内に、ライト可能なデータ量の上限値または消去回数の限界に達してしまい、これまでの事業モデルの適用が難しいと言われている。一方で、ライト処理の頻度が少ないアプリケーションであれば、ＱＬＣ技術を適用したフラッシュストレージの利用が可能であるとも言われている。
【０００７】
特許文献１で公開されている技術は、ダイナミックセル変更機能をもったフラッシュメモリに関する。本技術は、各ブロックのセルモードを動的に変更できる機能に関するものであり、例えば、セルモードをＱＬＣモードからＴＬＣモードに動的に変更できる技術である。なおフラッシュメモリのセルモードをＱＬＣモードからＴＬＣモードに変更した場合、フラッシュメモリに格納できるデータ量は３／４となる。
【０００８】
また特許文献２には、グローバルウエアレベリングと呼ばれる技術が開示されている。上述のように、フラッシュストレージの内部では、各ブロックの消去回数を均等化するような制御が行われている。グローバルウエアレベリングとは、一部のフラッシュストレージの消去回数が多くなった場合に、そのフラッシュストレージのデータを別のフラッシュストレージに移動させることで、複数のフラッシュストレージ間で消去回数を均衡化させる技術である。
【０００９】
さらに特許文献３には、圧縮機能をもったフラッシュストレージに関する技術が開示されている。フラッシュストレージに圧縮機能を搭載した場合、フラッシュストレージにおいて実行される圧縮処理の圧縮率によって、制御装置から見たそのフラッシュストレージに格納可能なデータ量が変化する。そこで特許文献３には、フラッシュストレージに格納可能なデータ量を予測し、この予測結果を制御装置に通知し、この予測結果に従って制御装置側でフラッシュストレージに格納するデータ量を制御する技術が開示されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１２−６８９８６号公報
【特許文献２】国際公開第２０１１／０１０３４４号
【特許文献３】国際公開第２０１２／１６８９６２号
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上述のようにＱＬＣ技術を利用したフラッシュストレージが５年間の使用に耐え得るか否かは、そのフラッシュストレージを利用するアプリケーションのライト頻度に依存する。しかし、顧客がフラッシュストレージを購入する際に、その顧客が使用するアプリケーションのライト頻度を明確に予想することは難しい。また、ストレージシステムは、ホスト装置に実装された多種多様のアプリケーションによって利用され、かつ、１台のフラッシュストレージも複数のアプリケーションから利用されるため、ＱＬＣ技術を利用したフラッシュストレージが５年間の使用に耐え得るかを事前に予測するのは難しい。
【００１２】
従って、ユーザの使用状況に応じてＱＬＣ技術を利用したフラッシュストレージが５年間の使用に耐え得るか否かを予測し、５年間の使用に耐え得ないと予測された記憶領域についてのみ、そのセルモードをＱＬＣモードからＴＬＣモードに動的に切り替えることができれば、記憶資源を有効に活用しながら、保証期間内のフラッシュストレージの性能維持をも行い得る信頼性の高いストレージシステムを構築し得るものと考えられる。
【００１３】
本発明は以上の点を考慮してなされたもので、記憶資源を有効に活用しながら搭載されたフラッシュストレージの信頼性をも維持し得るストレージシステム及びその制御方法を提案しようとするものである。
【課題を解決するための手段】
【００１４】
かかる課題を解決するため本発明においては、複数のフラッシュチップが収納されたフラッシュストレージと、上位装置からの要求に応じて前記フラッシュストレージにデータをリード／ライトするストレージコントローラとを有するストレージシステムであって、前記フラッシュチップは、前記フラッシュチップのセルのモードを、第１のモードと、当該第１のモードよりも格納可能な情報量が少ないものの寿命が長い第２のモードと、に変更でき、第１の記憶領域ごとに、当該第１の記憶領域の寿命を予測し、目標期間と比較する予測部と、前記予測部の比較結果に基づいて、前記セルのモードを変更する前記第１の記憶領域を決定する決定部と、前記決定部の決定結果に従って、該当する前記第１の記憶領域の前記セルのモードを変更するモード変更部とを設けるようにした。
【００１５】
また本発明においては、複数のフラッシュチップが収納されたフラッシュストレージと、上位装置からの要求に応じて前記フラッシュストレージにデータをリード／ライトするストレージコントローラとを有するストレージシステムの制御方法であって、前記フラッシュチップは、前記フラッシュチップのセルのモードを、第１のモードと、当該第１のモードよりも格納可能な情報量が少ないものの寿命が長い第２のモードと、に変更でき、予測部が、第１の記憶領域ごとに、当該第１の記憶領域の寿命を予測し、目標期間と比較する予測工程と、決定部が、前記予測部の比較結果に基づいて、前記セルのモードを変更する前記第１の記憶領域を決定する決定工程と、モード変更部が、前記決定部の決定結果に従って、該当する前記第１の記憶領域の前記セルのモードを変更するモード変更工程とを設けるようにした。
【００１６】
さらに本発明においては、複数のフラッシュチップと、上位装置からの要求に応じて前記フラッシュチップにデータをリード／ライトを制御するコントローラとを有するストレージシステムであって、前記フラッシュチップは、そのセルのモードを、第１のモードと、当該第１のモードよりも格納可能な情報量が少ないものの寿命の長い第２のモードと、に変更でき、第１の記憶領域ごとに、当該第１の記憶領域の寿命を予測し、目標期間と比較する予測部と、前記予測部の比較結果に基づいて、前記セルのモードを変更する前記第１の記憶領域を決定する決定部と、前記決定部の決定結果に従って、該当する前記第１の記憶領域の前記セルのモードを変更するモード変更部とを設けるようにした。
【００１７】
本発明のストレージシステム及びその制御方法によれば、目標期間内に第１の記憶領域の劣化度が当該劣化度の限界に到達するのを未然に防止しながら、フラッシュストレージの各第１の記憶領域のモードをできる限り格納可能な情報量が多い第１のモードに維持することができる。
【発明の効果】
【００１８】
本発明によれば、記憶資源を有効に活用しながら搭載されたフラッシュストレージの信頼性をも維持し得るストレージシステム及びその制御方法を実現できる。
【図面の簡単な説明】
【００１９】
【図１】本実施の形態による情報システムの構成を示すブロック図である。
【図２】ストレージシステムの構成を示すブロック図である。
【図３】フラッシュパッケージの構成を示すブロック図である。
【図４】共有メモリに格納される各種情報の説明に供する概念図である。
【図５】論理ボリューム情報の構成を示す概念図である。
【図６】実ページ情報の構成を示す概念図である。
【図７】フラッシュパッケージ情報の構成を示す概念図である。
【図８】フラッシュパッケージグループ情報の構成を示す概念図である。
【図９】空き実ページ情報管理キューの構成を示す概念図である。
【図１０】使用不可実ページ情報管理キューの構成を示す概念図である。
【図１１】パッケージメモリに格納される各種情報の説明に供する概念図である。
【図１２】パッケージ情報の構成を示す概念図である。
【図１３】チップ情報の構成を示す概念図である。
【図１４】仮想ブロック情報の構成を示す概念図である。
【図１５】実ブロック情報の構成を示す概念図である。
【図１６】ＱＬＣ空き実ページ情報管理キューの構成を示す概念図である。
【図１７】ＴＬＣ空き実ページ情報管理キューの構成を示す概念図である。
【図１８】ストレージコントローラのメモリにおけるプログラム構成を示すブロック図である。
【図１９】リード処理の処理手順示すフローチャートである。
【図２０】ライト処理の処理手順示すフローチャートである。
【図２１】ライトアフタ処理の処理手順示すフローチャートである。
【図２２】実ページ移動処理の処理手順示すフローチャートである。
【図２３】フラッシュパッケージのパッケージメモリにおけるプログラム構成を示すブロック図である。
【図２４】データリード処理の処理手順示すフローチャートである。
【図２５Ａ】データライト処理の処理手順示すフローチャートである。
【図２５Ｂ】データライト処理の処理手順示すフローチャートである。
【図２６】実ブロック解放処理の処理手順示すフローチャートである。
【図２７】仮想ブロック格納処理の処理手順示すフローチャートである。
【図２８】仮想容量判定処理の処理手順示すフローチャートである。
【図２９】第２の実施の形態による実ページ情報の構成を示す概念図である。
【図３０】第２の実施の形態によるフラッシュパッケージのパッケージメモリにおけるプログラム構成を示すブロック図である。
【図３１】第２の実施の形態によるライトアフタ処理の処理手順を示すフローチャートである。
【図３２】ページセルモーと選択処理の処理手順示すフローチャートである。
【図３３】第２の実施の形態によるフラッシュパッケージのパッケージメモリにおけるプログラム構成を示すブロック図である。
【図３４】第２の実施の形態によるデータライト処理の一部の処理手順示すフローチャートである。
【図３５】セルモード変更処理の一部の処理手順示すフローチャートである。
【発明を実施するための形態】
【００２０】
以下図面について、本発明の一実施の形態を詳述する。
【００２１】
（１）第１の実施
（１−１）本実施の形態による情報システムの構成
図１において、１は全体として、第１の実施の形態による情報システムを示す。本情報システム１は、ストレージシステム１００及びホスト１１０を備えて構成され、これらがＳＡＮ（Storage Area Network）などのネットワーク１２０を介して接続されている。
【００２２】
ホスト１１０は、ユーザアプリケーションが動作するコンピュータ装置（上位装置）であり、ネットワーク１２０を介してストレージシステム１００に必要なデータを読み書きする。ネットワーク１２０を介したストレージシステム１００及びホスト１１０間の通信は、例えば、ファイバーチャネル（ＦＣ：Fibre Channel）などのＳＣＳＩ（Small Computer System Interface）コマンドが転送可能なプロトコルを用いて行われる。
【００２３】
なお、以下においては、容量仮想化機能がストレージシステム１００に搭載されているものとして説明を進める。容量仮想化機能は、ホスト１１０に仮想的な論理ボリューム（以下、これを仮想ボリュームと呼ぶ）を提供し、ホスト１１０から当該仮想ボリュームに対するライト要求に応じて動的に「ページ」と呼ばれる所定大きさの容量単位で記憶領域を仮想ボリュームに割り当て、割り当てた記憶領域にライト対象のデータを書き込む機能である。ただし、本発明は、ストレージシステム１００に容量仮想化機能が搭載されていない場合にも有効である。
【００２４】
また、通常、容量仮想化技術における制御単位は、上述のように「ページ」であるが、本実施の形態における「ページ」は、特許文献３に示される従来の容量仮想化技術で用いられるページに相当する。このため本実施の形態の「ページ」のサイズは、フラッシュメモリにおける消去単位である「ブロック」と呼ばれる記憶領域よりも大きい。
【００２５】
通常、フラッシュメモリの分野では、データをリード／ライトする記憶領域の単位をページと呼び、ページはブロックよりも容量小さいのが一般的である。しかしながら、上述のように本実施の形態における「ページ」は、容量仮想化技術におけるページを意味しており、そのサイズは「ブロック」よりも大きい。そこで以下においては、フラッシュメモリにおけるデータのリード／ライトの単位を、容量仮想化技術の制御単位であるページと区別するため、「セグメント」と呼ぶものとする。
【００２６】
図２は、本実施の形態によるストレージシステム１００の構成例を示す。ストレージシステム１００は、１つ以上のストレージコントローラ２００、キャッシュメモリ２１０、共有メモリ２２０、フラッシュパッケージ２３０、タイマ２４０、及び、これらの構成要素を接続する１つ以上の接続装置２５０を備えて構成される。
【００２７】
ストレージコントローラ２００は、ストレージシステム１００全体の動作制御を司る制御装置であり、プロセッサ２６０及びメモリ２７０を備えて構成される。プロセッサ２６０は、メモリ２７０に格納されたプログラムに基づいて、ホスト１１０から発行されたリード／ライト要求に対するリード／ライト処理や、後述のような各種処理を実行する。またメモリ２７０は、例えば半導体メモリから構成され、必要なプログラムや情報を保持するために利用される。
【００２８】
キャッシュメモリ２１０及び共有メモリ２２０は、ＤＲＡＭ（Dynamic Random Access Memory）などの揮発性メモリから構成される。本実施の形態においては、これらキャッシュメモリ２１０及び共有メモリ２２０がバッテリなどでバックアップされることにより不揮発化されているものとする。ただし、本発明は、キャッシュメモリ２１０及び共有メモリ２２０が不揮発化されていなくても有効である。
【００２９】
キャッシュメモリ２１０は、フラッシュパッケージ２３０に読み書きされるデータを一時的に保持するために利用される。ただし、かかるデータのうち、ストレージコントローラ２００からのアクセス頻度が高いデータについては、そのままキャッシュメモリ２１０に保持される。ストレージコントローラ２００は、ホスト１１０からのライト要求及びライト対象のデータを受信した場合、そのデータをキャッシュメモリ２１０に書き込んだ段階でライト処理の完了通知をそのホスト１１０に送信する。ただし、ストレージコントローラ２００がそのデータをフラッシュパッケージ２３０に格納し終えた段階でそのホスト１１０にライト処理の完了通知を送信するようにしてもよい。
【００３０】
共有メモリ２２０には、キャッシュメモリ２１０の制御情報や、ストレージシステム１００内の重要な管理情報、ストレージコントローラ２００間の連絡情報及び同期情報などが格納される。
【００３１】
フラッシュパッケージ２３０は、ホスト１１０からのデータを読み書きするための記憶領域を提供する記憶装置である。フラッシュパッケージ２３０の詳細については後述する。ストレージコントローラ２００は、フラッシュパッケージ２３０を所定個数単位でＲＡＩＤ（Redundancy Array Independent Device）を構成するグループ（以下、これをフラッシュパッケージグループと呼ぶ）２８０として管理する。１又は複数のフラッシュパッケージグループ２８０が提供する記憶領域がプールとして管理され、当該プール上に１又は複数の論理ボリュームが定義される。そしてこれら論理ボリュームがデータをリード／ライトするための記憶領域としてホスト１１０に提供される。
【００３２】
なお１つのフラッシュパッケージグループ２８０を構成するフラッシュパッケージ２３０の個数は、そのフラッシュパッケージグループ２８０に設定されたＲＡＩＤレベルによって異なる。ただし、ストレージコントローラ２００にＲＡＩＤ機能が搭載されていない場合においても本発明は有効である。
【００３３】
また以下においては、ストレージシステム１００内の記憶媒体がすべてフラッシュパッケージ２３０であるものとするが、例えば、ハードディスク装置のようなフラッシュパッケージ２３０以外の他の記憶媒体がストレージシステム１００に搭載されていてもよい。さらに以下においては、各フラッシュパッケージ２３０の容量はすべて等しいものとするが、本発明は、一部のフラッシュパッケージ２３０の容量が他のフラッシュパッケージ２３０の容量と異なっている場合でも有効である。
【００３４】
タイマ２４０は、現在時刻をカウントする時計であり、すべてのストレージコントローラ２００から参照可能である。ただし、タイマ２４０が管理する時刻は絶対時刻である必要はなく、タイマ２４０がある時点からの経過時間に相当する値を示すカウンタのようなものであってもよい。
【００３５】
接続装置２５０は、例えばネットワークスイッチから構成され、ストレージシステム１００内の各構成要素を接続する。なお本実施の形態では、高信頼化のために、各フラッシュパッケージ２３０がそれぞれ複数の接続装置２５０を介して複数のストレージコントローラ２００と接続されているものとする。ただし、１つのフラッシュパッケージ２３０が１つの接続装置２５０にしか接続されていない場合であっても本発明は有効である。
【００３６】
図３は、フラッシュパッケージ２３０の構成例を示す。フラッシュパッケージ２３０は、複数のフラッシュチップ３００、パッケージプロセッサ３１０、パッケージメモリ３２０、バッファ３３０、パッケージバス３４０及びパッケージバス転送装置３５０を備えて構成される。なお本発明は、フラッシュパッケージ２３０が圧縮・伸張回路３６０Ａ又は３６０Ｂをもち、圧縮処理をフラッシュパッケージ２３０内で実行できる場合にも有効である。
【００３７】
ここで図３において、圧縮・伸長回路３６０Ａは、バッファ３３０に格納されたデータを圧縮／伸長して再度バッファ３３０に書き戻す圧縮・伸長回路であり、圧縮・伸長回路３６０Ｂは、バッファ３３０及びパッケージバス転送装置３５０間でデータやり取りする際にそのタイミングでデータを圧縮／伸長する圧縮・伸長回路である。フラッシュパッケージ２３０にデータの圧縮・伸長機能を搭載する場合、かかる２つの圧縮・伸長回路３６０Ａ，３６０Ｂのうちのいずれか一方をフラッシュパッケージ２３０に搭載するようにすればよい。
【００３８】
フラッシュチップ３００は、ＱＬＣ技術を用いたフラッシュメモリチップである。このフラッシュチップ３００は、パッケージプロセッサ３１０の制御のもとに、セルモードをＱＬＣモードからＴＬＣモードに動的に変更することができる。
【００３９】
パッケージプロセッサ３１０は、パッケージメモリ３２０に格納されたプログラムに従って各種処理を実行するプロセッサである。例えば、パッケージプロセッサ３１０は、ストレージコントローラ２００からのリード／ライト要求を受け付け、対応するプログラムに従って、受け付けたリード／ライト要求に応じたリード／ライト処理を実行する。
【００４０】
パッケージメモリ３２０は、例えば、揮発性の半導体メモリから構成され、パッケージプロセッサ３１０が実行するプログラムや、フラッシュチップ３００の管理情報などを保持する。なお、フラッシュチップ３００の管理情報は重要な情報であるので、計画停止時や突発的な障害の発生時に、管理情報を特定のフラッシュチップ３００に退避できることが望ましい。そこでパッケージプロセッサ３１０及びパッケージメモリ３２０を一定時間バックアップするためのバッテリをパッケージメモリ３２０に搭載し、障害などが発生した場合に、パッケージプロセッサ３１０がパッケージメモリ３２０に格納されている管理情報を特定のフラッシュチップ３００に退避するようにフラッシュパッケージ２３０を構築するようにしてもよい。
【００４１】
バッファ３３０は、フラッシュチップ３００にリード／ライトされるデータを一時的に保持する半導体メモリ（例えば揮発性メモリ）である。本実施の形態の場合、パッケージプロセッサ３１０は、ストレージコントローラ２００からライト要求が与えられた場合、ライト対象のデータをフラッシュチップ３００に書き込んだ段階でそのライト要求に応じたライト処理の完了をストレージコントローラ２００に通知する。ただし、本発明は、受け取ったライト対象のデータをバッファ３３０に書き込み終えた段階で、ライト処理の完了をストレージコントローラ２００に通知する場合にも有効である。
【００４２】
パッケージバス３４０は、バッファ３３０及びフラッシュチップ３００間でデータ転送を行うための内部バスであり、１本以上存在する。性能向上のために、複数のパッケージバス３４０を設けることが一般的であるが、パッケージバス３４０が１本しか存在しない場合でも本発明は有効である。
【００４３】
パッケージバス転送装置３５０は、パッケージバス３４０ごとに設けられ、パッケージプロセッサ３１０の指示に従って、対応するパッケージバス３４０を介してバッファ３３０及びフラッシュチップ３００間でデータを転送する。
【００４４】
（１−２）共有メモリに格納される各種情報
図４は、本実施の形態におけるストレージシステム１００の共有メモリ２２０に格納される各種情報の構成例を示す。この図４に示すように、共有メモリ２２０には、論理ボリューム情報２０００、実ページ情報２１００、空き実ページ情報ポインタ２２００、フラッシュパッケージグループ情報２３００、フラッシュパッケージ情報２５００、仮想ページ容量情報２６００、及び、使用不可実ページ情報ポインタ２７００が格納される。
【００４５】
上述のように、本実施の形態のストレージシステム１００には、容量仮想化機能が搭載されている。通常、容量仮想化機能において、記憶領域の割り当て単位は、ページと呼ばれる。本実施の形態においても、論理ボリュームの空間は「仮想ページ」という単位で管理され、フラッシュパッケージグループ２８０が提供する物理的な記憶領域は「実ページ」という単位で管理される。なお容量仮想化機能では、論理ボリュームの記憶容量を実際の記憶媒体の容量よりも大きく見せる。このため、仮想ページの数のほうが実ページの数より大きいのが一般的である。
【００４６】
ストレージシステム１００は、かかる容量仮想化機能に基づいて、ストレージコントローラ２００がホスト１１０からのライト要求においてデータのライト先として指示された仮想ページに実ページが割り当てていない場合には、その仮想ページに実ページを割り当て、割り当てた実ページにかかるデータを書き込む。図４の仮想ページ容量情報２６００は、このような仮想ページの容量を示す情報である。
【００４７】
なお本実施の形態の場合、仮想ページ容量情報２６００で示される仮想ページの容量と、実ページの容量は必ずしも同じではない。これは実ページに書き込まれるデータに、ＲＡＩＤタイプによって大きさが異なる冗長データが含まれるためである。従って、実ページの容量は、その実ページを提供するフラッシュパッケージグループ２８０のＲＡＩＤタイプによって決まる。
【００４８】
例えば、「ＲＡＩＤ１」のようにデータを２重に書き込むＲＡＩＤタイプの場合、実ページの容量は、仮想ページの容量の２倍になる。また「ＲＡＩＤ５」のように、Ｎ台の記憶装置の容量に対し、１台分の記憶装置の容量の冗長データを生成するＲＡＩＤタイプの場合、仮想ページの容量の（Ｎ＋１）／Ｎの容量が実ページの容量として確保される。当然ながら、「ＲＡＩＤ０」のように、冗長性がないＲＡＩＤタイプの場合、仮想ページの容量と、実ページの容量とが等しくなる。なお、本実施の形態においては、仮想ページの容量はストレージシステム１００の中で共通であるが、ストレージシステム１００内で仮想ページの容量を共通としない場合においても本発明は有効である。
【００４９】
図５は、図４に示された論理ボリューム情報２０００の具体的なデータ構成を示す。一般的に、ホスト１１０は、アクセス先の論理ボリュームのＩＤ及び当該論理ボリューム内のアドレスと、対象となるデータのデータ長とを指定して、リード要求やライト要求を発行する。論理ボリューム情報２０００は、このようなホスト１１０からのリード／ライト要求に応じたリード／ライト処理を実行するために必要な情報であり、ストレージシステム１００内に定義された論理ボリュームごとにそれぞれ存在する。
【００５０】
図５に示すように、１つの論理ボリューム情報２０００は、論理ボリュームＩＤ欄２００１、論理容量欄２００２及び論理ボリュームＲＡＩＤタイプ欄２００３と、複数の実ページポインタ欄２００４とを備えて構成される。
【００５１】
そして論理ボリュームＩＤ欄２００１には、対応する論理ボリュームに付与されたその論理ボリュームに固有の識別子（論理ボリュームＩＤ）が格納される。また論理容量欄２００２には、ホスト１１０から見たその論理ボリュームの容量が格納される。
【００５２】
論理ボリュームＲＡＩＤタイプ欄２００３には、対応する論理ボリュームのＲＡＩＤタイプ、例えば、「ＲＡＩＤ０」又は「ＲＡＩＤ１」などの情報が格納される。なお、対応する論理ボリュームを提供するフラッシュパッケージグループ２８０のＲＡＩＤタイプが、例えば「ＲＡＩＤ５」のように、Ｎ台の記憶装置（ここではフラッシュパッケージ２３０）に対して冗長データを１台の記憶装置に格納するＲＡＩＤタイプの場合には、Ｎの具体的数値も論理ボリュームＲＡＩＤタイプ欄２００３に格納される。ただし、任意のＲＡＩＤタイプが指定できるわけでなく、少なくとも１つのフラッシュパッケージグループ２８０がもつＲＡＩＤタイプである必要がある。
【００５３】
実ページポインタ欄２００４は、その論理ボリューム内の各仮想ページにそれぞれ対応させて設けられる。最初の実ページポインタ欄２００４が論理ボリュームの先頭の仮想ページに対応し、２番目、３番目、……の実ページポインタ欄２００４は、それぞれ論理ボリュームの２番目、３番目、……の仮想ページにそれぞれ対応する。そして、これら実ページポインタ欄２００４には、それぞれ対応する仮想ページに割り当てられた実ページの実ページ情報２１００（図４、図６）へのポインタが格納される。なお、本実施の形態のストレージシステム１００は、上述のように仮想容量機能をサポートしているため、仮想ページに実ページが割り当てられるのは、論理ボリュームを定義した契機ではなく、その仮想ページに実際にデータの書き込みが行われる契機である。従って、まだデータの書き込みが行われていない仮想ページの場合、対応する実ページポインタ欄２００４には、情報が存在しないことを意味する「Null」が格納される。
【００５４】
図６は、図４に示された実ページ情報２１００の具体的なデータ構成を示す。実ページ情報２１００は、ストレージシステム１００内のすべての実ページにそれぞれ対応させて設けられ、対応する実ページの管理情報が格納される。本実施の形態では、ライト頻度に応じて、フラッシュパッケージ２３０のセルモードをブロック単位でＱＬＣモードからＴＬＣモードへと動的に変更して、フラッシュパッケージ２３０の保証期間内の寿命を保証しようというものである。ブロックのセルモードを変更した場合、フラッシュパッケージ２３０に格納できるデータの容量も変化する。本実施の形態では、フラッシュパッケージグループ２８０を構成する各フラッシュパッケージ２３０において、すべてのブロックのセルが最も多いデータを格納できるモード（つまりＱＬＣモード）に設定されている場合に、フラッシュパッケージグループ２８０に格納可能な容量を基準として、実ページの数が決まっているものとする。
【００５５】
図６に示すように、実ページ情報２１００は、フラッシュパッケージグループＩＤ欄２１０１、実ページアドレス欄２１０２、空き実ページポインタ欄２１０３、ページ割当て時刻欄２１０４、ページ書込み量欄２１０５、移動中フラグ欄２１０６、移動先実ページ欄２１０７及び移動待ちフラグ欄２１０８を備えて構成される。
【００５６】
そしてフラッシュパッケージグループＩＤ欄２１０１には、該当する実ページを提供するフラッシュパッケージグループ２８０に付与されたそのフラッシュパッケージグループ２８０に固有の識別子（フラッシュパッケージグループＩＤ）が格納される。また実ページアドレス欄２１０２には、対応する実ページに対して割り当てられた、そのフラッシュパッケージグループ２８０内での相対的なアドレス（実ページアドレス）が格納される。
【００５７】
空き実ページポインタ欄２１０３には、対応する実ページに仮想ページが割り当てられていない場合に、次の仮想ページが割り当てられていない実ページの空き実ページ情報２１００を指すポインタが格納される。ただし、対応する実ページに仮想ページが割り当てられている場合には、空き実ページポインタ欄２１０３には「Null」が格納される。
【００５８】
またページ割当て時刻欄２１０４には、その実ページを現在割り当てている仮想ページに対して当該実ページを割り当てた時刻が格納される。さらにページ書込み量欄２１０５には、例えばデータを更新するなどのために、対応する実ページ内に格納されたデータのデータ量（ページ書込み量）が格納される。ページ書込み量／（現在時刻−ページ割当て時刻欄２１０４に格納されたページ割当て時刻）により、その実ページに対するデータのライト頻度が算出される。なお、「ライト頻度」の詳細については、後述する。
【００５９】
本実施の形態では、実ページに格納されたデータの消去単位は、フラッシュメモリの消去単位であるブロックとする。また、本実施の形態の各フラッシュパッケージ２３０には、上述のようにブロックのセルモードをＱＬＣモードからＴＬＣモードへと動的に変更させる機能をもっている。従って、フラッシュパッケージ２３０の容量は、当該フラッシュパッケージ２３０内の各ブロックのセルモードに応じて変化することになる。
【００６０】
移動中フラグ欄２１０６、移動先実ページ欄２１０７及び移動待ちフラグ欄２１０８には、それぞれ対応する実ページのデータを別の実ページに移動するときに使用される情報が格納される。実際上、移動中フラグ欄２１０６には、対応する実ページのデータを別の実ページに移動中のときにオンに設定されるフラグ（以下、これを移動中フラグと呼ぶ）が格納される。また移動先実ページ欄２１０７には、対応する実ページのデータの移動先の実ページのアドレスが格納される。さらに移動待ちフラグ欄２１０８には、対応する実ページに格納されたデータを別の実ページに移動すると決定したときにオンに設定されるフラグ（以下、これを移動待ちフラグと呼ぶ）が格納される。
【００６１】
図７は、図４に示されたフラッシュパッケージ情報２５００のデータ構成を示す。フラッシュパッケージ情報２５００は、ストレージシステム１００に搭載されたフラッシュパッケージ２３０にそれぞれ対応させて生成される。この図７に示すように、フラッシュパッケージ情報２５００は、フラッシュパッケージＩＤ欄２５０１、フラッシュパッケージ容量欄２５０２及び仮想ブロック容量欄２５０３を備えて構成される。
【００６２】
そしてフラッシュパッケージＩＤ欄２５０１には、対応するフラッシュパッケージ２３０に付与されたそのフラッシュパッケージ２３０に固有の識別子（フラッシュパッケージＩＤ）が格納される。またフラッシュパッケージ容量欄２５０２には、そのフラッシュパッケージ２３０の容量（以下、これをフラッシュパッケージ容量と呼ぶ）が格納される。さらに仮想ブロック容量欄２５０３には、仮想ブロックの容量が格納される。
【００６３】
ただし、上述のように本発明は、寿命の尺度となるライト頻度又はフラッシュメモリの劣化度に応じてフラッシュパッケージ２３０内のブロックのセルモードを動的に変化させて、フラッシュパッケージ２３０の保証期間内の寿命を保証しようというものである。
【００６４】
ここで、本実施の形態における「ライト頻度」は、フラッシュパッケージ２３０の消去回数を推定可能な値である。「ライト頻度」は、時間当たりに書き込むデータ量であり、これと装置稼働時間との積を算出することにより、これまでのフラッシュパッケージ２３０への累積ライト量を算出することができる。すなわち、ライト頻度及び装置稼働時間と、フラッシュパッケージの累積消去回数との間には次式の関係がある。
【００６５】
【数１】
2019086974.tif 000003
【００６６】
この（１）式において、係数Ａは、一般的にＷＡ（Write Amplification）と呼ばれる値であり、フラッシュパッケージ２３０の設計や稼働しているアプリケーションのＩ／Ｏパターンにより変化する。「ライト頻度」は、ストレージコントローラ２００が各フラッシュパッケージ２３０に書き込んだデータ量を管理することにより把握可能である。
【００６７】
また本実施の形態における「劣化度」は、フラッシュメモリの先天的な品質ばらつきを考慮した値である。フラッシュメモリは先天的な品質ばらつきが大きく、同一型番であっても、製品ロットの差異などにより許容可能な消去回数が異なる。このため、例えば300回の消去回数により劣化した状態であっても、さらに200回までしか消去を許容できない領域もあれば、さらに400回の消去が可能な領域もある。一般に、消去の繰返しにより劣化することでフラッシュメモリに生じるエラービットが増加するが、フラッシュメモリの許容消去回数は、そのエラービットによる信頼性が装置基準を満たす範囲に収まる回数である。
【００６８】
「劣化度」の算定方法としては、第１に、装置出荷前検査において測定されたエラービット数に基づいて消去回数カウントの初期値を設定する（品質が良い領域は負の消去回数を、品質が悪い領域には正の消去回数を消去カウントの初期値として設定する）方法、第２に、装置稼働中に領域に生じたエラービット数に基づいて、消去回数値に補正を加える（品質が良い領域は負の消去回数を、品質が悪い領域には正の消去回数を実際の消去回数に加算する）方法、第３に、装置稼働中の時間当たりのエラービットの増加数に基づき算出する（時間当たりのエラービットの増加数が大きければ実際の消去回数に加算し、時間当たりのエラービット増加数が小さければ実際の消去回数から減算する。時間経過中の温度補正を含む。）などがある。
【００６９】
なお、データ記憶領域に生じたエラービット数をカウント可能なフラッシュパッケージであれば、こうした劣化度の算出は容易である。当然ながら、先天的な品質差が少ない場合やそうした品質差の考慮が不要な場合には、劣化度として単に消去回数を用いても、本発明の効果は十分に果たされる。本実施の形態においては、ライト頻度又はフラッシュメモリの劣化度の指標として消去回数を用いるが、本発明はこの例に限定されるものではない。将来的なフラッシュメモリの許容消去回数を推定可能な値であればよい。劣化度は、ストレージコントローラ２００がフラッシュパッケージ２３０から情報（ブロック単位の劣化度）を受け取ることで把握可能である。
【００７０】
ブロックのセルモードを変化させた場合、フラッシュパッケージ２３０のフラッシュパッケージ容量も変化する。従って、フラッシュパッケージ容量欄２５０２に格納されるフラッシュパッケージ容量は、そのフラッシュパッケージ２３０内の各ブロックのセルモードの変更によって変化する。この値は、ストレージコントローラ２００が、フラッシュパッケージ２３０から受け取り、フラッシュパッケージ容量欄２５０２に設定する。フラッシュパッケージ容量の最大値は、フラッシュパッケージ２３０内のすべてのブロックのセルモードが、最も多くの値を格納できるセルモード（ここではＱＬＣモード）で構成されている場合である。なお、本実施の形態では、当初は、フラッシュパッケージ２３０内のすべてのブロックのセルモードがＱＬＣモードに設定されるものとする。
【００７１】
図８は、図４に示されたフラッシュパッケージグループ情報２３００のデータ構成を示す。フラッシュパッケージグループ情報２３００は、ストレージシステム１００内で定義されたフラッシュパッケージグループ２８０にそれぞれ対応させて生成される。
【００７２】
この図８に示すように、フラッシュパッケージグループ情報２３００は、フラッシュパッケージグループＩＤ欄２３０１、パッケージグループＲＡＩＤタイプ欄２３０２、実ページ数欄２３０３、空き実ページ数欄２３０４、フラッシュパッケージポインタ欄２３０５及び使用不可実ページ数欄２３０６を備えて構成される。
【００７３】
そしてフラッシュパッケージグループＩＤ欄２３０１には、対応するフラッシュパッケージグループ２８０に付与されたフラッシュパッケージグループＩＤが格納される。またパッケージグループＲＡＩＤタイプ欄２３０２には、そのフラッシュパッケージグループ２８０のＲＡＩＤタイプが格納される。本実施の形態におけるＲＡＩＤタイプは、図５の論理ボリュームＲＡＩＤタイプ欄２００３について上述した通りである。
【００７４】
実ページ数欄２３０３、空き実ページ数欄２３０４及び使用不可実ページ数欄２３０６には、それぞれそのフラッシュパッケージグループ２８０内の実ページの数、未使用の実ページ（以下、これを空き実ページと呼ぶ）の数、又は、使用不可に設定された実ページ（以下、これを使用不可能実ページと呼ぶ）の数が格納される。上述のように本情報システム１（図１）の特徴は、フラッシュパッケージ２３０内の必要なブロックのセルモードを動的に変化させることであるが、これによってフラッシュパッケージ２３０の容量が変化する。そしてフラッシュパッケージ２３０の容量が変化すると、実ページの数、空き実ページの数も変化する。以下、これを説明する。
【００７５】
まず、フラッシュパッケージ２３０の容量が変化すると、そのフラッシュパッケージ２３０が属するフラッシュパッケージグループ２８０の実ページの数も変化することになる。これはＲＡＩＤの考え方から、同一フラッシュパッケージグループ２８０内のフラッシュパッケージ２３０では使用可能な容量は等しいことが前提となるからである。このため、本実施の形態では、あるフラッシュパッケージ２３０についてのセルモードの変更要求を受け取った場合、そのフラッシュパッケージ２３０が属するフラッシュパッケージグループ２８０を構成するすべてのフラッシュパッケージ２３０のセルモードも同様に変更する。
【００７６】
このとき、同様に、そのフラッシュパッケージグループ２８０を構成する各フラッシュパッケージ２３０内の空き実ページの数も変化する。逆に、これは、使用不可実ページの数も変化したことになるので、使用不可実ページの数も変化することになる。例えば、実ページの数が10増加した場合、空き実ページの数も10増加し、使用不可実ページの数は10減少する。なお、既に述べたが、本実施の形態においては、フラッシュパッケージ２３０自身が当該フラッシュパッケージ２３０内の必要なブロックのセルモードの変更を決定するが、本発明は、この決定をストレージコントローラ２００が行うようにしてもよい。
【００７７】
フラッシュパッケージポインタ欄２３０５は、対応するフラッシュパッケージグループ２８０を構成する各フラッシュパッケージ２３０にそれぞれ対応させて設けられており、対応するフラッシュパッケージ２３０のフラッシュパッケージ情報２５００（図４）へのポインタ（以下、これをフラッシュパッケージポインタと呼ぶ）が格納される。フラッシュパッケージポインタの数は、パッケージグループＲＡＩＤタイプ欄２３０２に格納されたそのフラッシュパッケージグループ２８０のＲＡＩＤタイプによって決まる。
【００７８】
図４に戻って、空き実ページ情報ポインタ２２００は、フラッシュパッケージグループ２８０ごとに設けられる情報である。図９は、空き実ページ情報ポインタ２２００によって管理される空き実ページの集合を表している。この構造を、空き実ページ情報管理キュー２２０１と呼ぶ。
【００７９】
空き実ページ情報ポインタ２２００は、対応するフラッシュパッケージグループ２８０内の先頭の空き実ページに対応する実ページ情報２１００のアドレスを指し示すポインタである。次に、その実ページ情報２１００内の空き実ページポインタ欄２１０３に格納されたポインタが次の空き実ページに対応する実ページ情報２１００を指す。図９の例では、最後の空き実ページに対応する実ページ情報２１００の空き実ページポインタ欄２１０３に格納されたポインタが、空き実ページ情報ポインタ２２００を指しているが、最後の空き実ページに対応する実ページ情報２１００の空き実ページポインタ欄２１０３に「Null」を格納するようにしてもよい。
【００８０】
ストレージコントローラ２００は、論理ボリューム内の実ページを割り当てていない仮想ページをライト先とするライト要求を受け付けると、その論理ボリュームのＲＡＩＤタイプをその論理ボリューム情報２０００（図４、図５）の論理ボリュームＲＡＩＤタイプ欄２００３（図５）から読み出し、そのＲＡＩＤタイプと同じＲＡＩＤタイプがフラッシュパッケージグループ情報２３００（図４、図８）のパッケージグループＲＡＩＤタイプ欄２３０２（図８）に格納されたフラッシュパッケージグループ２８０のうちのいずれかのフラッシュパッケージグループ２８０、例えば、空き実ページ数の最も多いフラッシュパッケージグループ２８０内の空き実ページを探し出す。具体的には、そのフラッシュパッケージグループ２８０に対応する空き実ページ情報ポインタ２２００が指し示す実ページ情報２１００に対応する空き実ページを探し出し、これをその仮想ページに割り当てる。
【００８１】
図４に戻って、使用不可実ページ情報ポインタ２７００は、フラッシュパッケージグループ２８０ごとに生成される情報である。図１０は、使用不可実ページ情報ポインタ２７００によって管理される使用不可実ページの集合を表している。この構造を、使用不可実ページ情報管理キュー２７０１と呼ぶ。その構造は、空き実ページ情報管理キュー２２０１（図９）と同じである。
【００８２】
フラッシュパッケージ２３０の容量が少なくなり、そのフラッシュパッケージ２３０が属するフラッシュパッケージグループ２８０に対応するフラッシュパッケージグループ情報２３００（図４、図８）の実ページ数欄２３０３（図８）に格納された実ページの数が少なくなった場合、その数だけ、空き実ページ情報管理キュー２２０１（図９）で管理されている実ページ情報２１００が、使用不可実ページ情報管理キュー２７０１（図１０）に移される。逆に、フラッシュパッケージ２３０の容量が多くなり、かかる実ページ数欄２３０３（図８）に格納された実ページの数が多くなった場合、その数だけ、使用不可実ページ情報管理キュー２７０１で管理されている実ページ情報２１００が、空き実ページ情報管理キュー２２０１に移される。
【００８３】
本実施の形態のストレージシステム１００では、上述のようにストレージコントローラ２００が容量仮想化機能をもつ。このため、フラッシュパッケージ２３０の容量を変化させても、実ページ情報２１００を既に説明したような方法で移動させるだけで対応できる。実ページ情報２１００を使用不可実ページ情報管理キュー２７０１に移した場合、その実ページ情報２１００に対応する実ページを仮想ページに割り当てられなくなる。このときストレージコントローラ２００は、フラッシュパッケージ２３０に実ページの領域の使用不可を通知することで、フラッシュパッケージ２３０は実ページと、その実ページに対応するブロックの対応関係を破棄し、実ブロックを他の領域に割り当てることが可能になり、実ブロックを有効に使用できる。
【００８４】
（１−３）フラッシュパッケージの管理情報
次に、各フラッシュパッケージ２３０（図３）がそれぞれパッケージメモリ３２０（図３）内に保持する管理情報について説明する。この管理情報は、図１１に示すように、パッケージ情報３０００、チップ情報３１００、仮想ブロック情報３２００、実ブロック情報３３００、ＱＬＣ空き実ブロック情報ポインタ３４００及びＴＬＣ空き実ブロック情報ポインタ３５００から構成される。これらの情報は、各ブロックのセルモードを動的に変化させる機能を実現するために必要な情報である。
【００８５】
図１２は、図１１に示されたパッケージ情報３０００のデータ構成を示す。この図１２に示すように、パッケージ情報３０００は、パッケージＩＤ欄３００１、パッケージ容量欄３００２、実ブロック数欄３００３、仮想ブロック数欄３００４、仮想ブロック容量欄３００５、ブロック消去回数欄３００６、計測開始時刻欄３００７、内部情報格納ブロック数欄３００８及び内部情報格納アドレス欄３００９を備えて構成される。
【００８６】
そしてパッケージＩＤ欄３００１には、そのパッケージ情報３０００を保持するフラッシュパッケージ２３０のフラッシュパッケージＩＤが格納される。またパッケージ容量欄３００２には、ストレージコントローラ２００から見たそのフラッシュパッケージ２３０全体の容量が格納される。ただし、フラッシュパッケージ２３０の容量は、そのフラッシュパッケージ２３０内の各ブロックのセルモードによって変化する。本実施の形態では、フラッシュパッケージグループ２８０に含まれるそれぞれのフラッシュパッケージ２３０内のブロック数は等しいとする。なお、本発明は、フラッシュパッケージグループ２８０に含まれるそれぞれのフラッシュパッケージ２３０のブロックの数は等しくなくとも有効である。
【００８７】
実ブロック数欄３００３には、そのフラッシュパッケージ２３０内に存在するブロック（以下、これを実ブロックと呼ぶ）の数が格納される。また仮想ブロック数欄３００４には、実ブロック数欄３００３に格納された実ブロックの数に、（当該実ブロックが取り得るセルモードで格納可能な最多のデータ量」／（当該ブロックが取り得るセルモードで格納可能な最少のデータ量）を乗算した値が、対応する論理ボリューム内に存在する仮想的なブロック（以下、これを仮想ブロックと呼ぶ）の数として格納される。
【００８８】
従って、本実施の形態では、ストレージコントローラ２００がデータのリード／ライト要求において指定するアクセス対象のアドレスは、まず、仮想ブロックにマッピングされ、次に、実ブロックの空間にマッピングされる。１つの実ブロックに割り当てられる仮想ブロックの数は、そのフラッシュパッケージ２３０内の各実ブロックのセルモードによって決まる。
【００８９】
なお本実施の形態では、変更可能なセルモードは、ＱＬＣモードからＴＬＣモードへの変更だけであるものとする。また本実施の形態では、仮想ブロックの容量は、実ブロックのセルモードをＳＬＣ（Single-level Cell）モードとしたとき、実ブロックに格納できる容量とする。従って、セルモードがＱＬＣモードの場合には、１つの実ブロックに４つの仮想ブロックが割り当てられ、セルモードがＴＬＣモードの場合、１つの実ブロックに３つの仮想ブロックが割り当てられる。
【００９０】
ただし、本発明は、ＱＬＣモードからＴＬＣモードへのモード変更以外のモード変更を行う場合も有効である。例えば、ＱＬＣモード、ＴＬＣモード及びＭＬＣ（Multi-level Cell）モードの間の相互変更や、ＱＬＣモード、ＴＬＣモード、ＭＬＣモード及びＳＬＣモードの間の相互変更を行う場合も有効である。また本実施の形態においては、当初は、各実ブロックのセルモードがＱＬＣモードであるものとする。さらに本実施の形態においては、仮想ブロックに実ブロックが割り当てられる契機は、実ブロックが割り当てられていない仮想ブロックに初めてライト要求を受け付けた契機であるものとする。
【００９１】
仮想ブロック容量欄３００５には、１つの仮想ブロックの容量が格納される。フラッシュメモリはデータ単位での書換えができないため、実ブロックに空き領域をもたせておき、ライト対象のデータについてはその空き領域に書き込み、この空き領域が満杯になったときに、一度、その実ブロック（空き領域）に書き込んだデータを読み出し、当該実ブロックに格納されたデータを消去した後に、有効なデータを対応する実ブロックに書き込むという処理を行う。
【００９２】
ブロック消去回数欄３００６には、そのフラッシュパッケージ２３０内のデータを消去した回数（以下、これをブロック消去回数と呼ぶ）がそれぞれ格納される。フラッシュメモリは書き換えができないため、実ブロック内に空き領域をもたせておき、ライト要求が与えられた場合にはこの空き領域にライト対象のデータを書き込み、この空き領域が満杯になったときには、一度、この実ブロック内のデータを読み込み、その実ブロックに格納されたデータをすべて消去し、この後、その実ブロックに有効なデータを書き込むということを行う。
【００９３】
計測開始時刻欄３００７には、かかるブロック消去回数を計測し始めた時刻（以下、これを計測開始時刻と呼ぶ）がそれぞれ格納される。ある実ブロックについて、ブロック消去回数欄３００６に格納されているブロック消去回数を（現在時刻−計測開始時刻欄３００７に格納された計測開始時刻）で割った値が、その実ブロックの単位時間当たりのブロック消去回数となる。この値がこのまま変化しないと仮定すると、保証期間内に各実ブロックのブロック消去回数が上限に到達するか否かを予測することができる。勿論、本発明は、他の方法で、保証期間内に各実ブロックのブロック消去回数が上限に到達するか否かを予測するようにしても有効である。
【００９４】
本実施の形態では、ブロック消去回数欄３００６に格納される実ブロックごとのブロック消去回数と、計測開始時刻欄３００７に格納される実ブロックごとのブロック消去回数の計測開始時刻とは、フラッシュパッケージ２３０が動作を開始した時刻をゼロとしてカウントを開始するものとする。ただし、これらブロック消去回数及び計測開始時刻を適当な周期でリセットして、直近のライト頻度をベースに予測を行うようにしてもよい。
【００９５】
内部情報格納ブロック数欄３００８には、図１１について上述したパッケージメモリ３２０に格納されたそのフラッシュパッケージ２３０の管理情報（各パッケージ情報３０００、各チップ情報３１００、各仮想ブロック情報３２００、各実ブロック情報３３００、各ＱＬＣ空き実ブロック情報ポインタ３４００及び各ＴＬＣ空き実ブロック情報ポインタ３５００）を、そのフラッシュパッケージ２３０の電源ＯＦＦ時や障害発生時に退避させる際に必要な実ブロックの数が格納され、内部情報格納アドレス欄３００９には、これら各実ブロックのアドレスがそれぞれ格納される。
【００９６】
かかるフラッシュパッケージ２３０の管理情報（パッケージ情報３０００等）は重要な情報なので、多重化して退避するようにしてもよい。また、退避される回数はそう多くはなく、退避先の実ブロックのブロック消去回数なども問題にならないと考えられるため、これらの実ブロックのセルモードをＱＬＣモードとするようにしてもよい。
【００９７】
一方、低価格化やフラッシュパッケージ２３０の大容量化のため、パッケージメモリ３２０に格納する上述の管理情報（パッケージ情報３０００等）の総データ量が大きくなる場合がある。このような場合、フラッシュパッケージ２３０の電源ＯＦＦ時や障害発生時以外にも、かかる管理情報の実ブロックへの書き込みが発生する。この頻度によっては、これらの実ブロックのセルモードをＴＬＣモードに設定しておくことも有効である。仮想ブロックに割当て可能な実ブロックの数、障害が発生した実ブロックの数、及び、内部情報が格納される実ブロックの数の合計が、このフラッシュパッケージ２３０がもつ実ブロックの総数となる。
【００９８】
図１３は、図１１に示されたチップ情報３１００のデータ構成を示す。チップ情報３１００は、そのフラッシュパッケージ２３０に収納されたフラッシュチップ３００（図３）に関する情報であり、フラッシュチップ３００ごとにそれぞれ生成される。このチップ情報３１００は、図１３に示すように、チップＩＤ欄３１０１、チップ内実ブロック数欄３１０２、チップ内空き実ブロック数欄３１０３及び接続バスＩＤ欄３１０４を備えて構成される。
【００９９】
そしてチップＩＤ欄３１０１には、対応するフラッシュチップ３００に付与されたそのフラッシュチップに固有の識別子（フラッシュチップＩＤ）が格納される。またチップ内実ブロック数欄３１０２には、そのフラッシュチップ３００が備える実ブロックの数が格納される。
【０１００】
さらにチップ内空き実ブロック数欄３１０３には、そのフラッシュチップ３００内の実ブロックのうち、仮想ブロックに割り当てられていない実ブロック（以下、これを空き実ブロックと呼ぶ）の数が格納される。さらに各接続バスＩＤ欄３１０４には、そのフラッシュチップ３００が接続されているパッケージバス３４０の識別子（パッケージバスＩＤ）がそれぞれ格納される。
【０１０１】
図１４は、図１１に示された仮想ブロック情報３２００のデータ構成を示す。仮想ブロック情報３２００は、そのフラッシュパッケージ２３０が対応付けられた論理ボリューム内の各仮想ページをそれぞれ構成するすべての仮想ブロックごとにそれぞれ生成される情報である。以下においては、この仮想ブロック情報３２００は、対応する仮想ブロックのアドレス順に並べられているものとする。
【０１０２】
この仮想ブロック情報３２００は、図１４に示すように、仮想ブロックＩＤ欄３２０１、実ブロック情報ポインタ欄３２０２、空きセグメント容量３２０３、仮想ブロック消去回数欄３２０４、実ブロック割当て時刻３２０５、仮想ブロックセルモード欄３２０６、セルモード変更フラグ欄３２０７、実セグメントアドレスポインタ欄３２０８を備えて構成される。
【０１０３】
上述のように、本実施の形態では、フラッシュメモリにおいてデータをリード／ライトする記憶領域の単位を「セグメント」と呼ぶ。通常、かかる単位はページと呼ばれるが、本実施の形態は、ストレージコントローラ２００が行う容量仮想化の単位とするため、フラッシュメモリのかかる単位をセグメントと呼んでいる。本実施の形態では、セルモードが変わっても、セグメントの長さは変わらないものとする。従って、実ブロックのセルモードがＱＬＣモードの場合には、セルモードがＴＬＣモードの場合に比べてセグメントの数が４／３倍になることになる。
【０１０４】
仮想ブロックＩＤ欄３２０１には、対応する仮想ブロックに付与されたその仮想ブロックに固有の識別子（仮想ブロックＩＤ）が格納される。また実ブロック情報ポインタ欄３２０２には、対応する仮想ブロックを割り当てた実ブロックの実ブロック情報３３００（図１１、図１５）へのポインタが格納される。初期値は、「Null」となる。また空きセグメント容量欄３２０３には、その仮想ブロック内のデータが格納されていないセグメント（以下、これを仮想セグメントと呼ぶ）の合計容量が格納される。
【０１０５】
さらに仮想ブロック消去回数欄３２０４には、対応する仮想ブロックに格納されたデータが消去された回数が格納され、実ブロック割当て時刻欄３２０５には、その仮想ブロックに現在割り当てられている実ブロックを割り当てた時刻が格納される。仮想ブロック消去回数欄３２０４に格納された消去回数を、（現在時刻−実ブロック割当て時刻欄３２０５に格納されている時刻）で割った値が、その仮想ブロックの単位時間当たりのデータ消去回数となる。
【０１０６】
仮想ブロックセルモード欄３２０６には、その仮想ブロックに割り当てる実ブロックのセルモードが格納される。またセルモード変更フラグ欄３２０７には、その仮想ブロックに割り当てている実ブロックをこれまでと異なったセルモード（ここではＴＬＣモード）に変更する必要があるか否かを表すフラグ（以下、これをセルモード変更フラグと呼ぶ）が格納される。セルモード変更フラグがオンに設定されている場合には、その仮想ブロックに割り当てている実ブロックのセルモードをＴＬＣモードに変更すべきことを意味し、セルモード変更フラグがオフに設定されている場合には、その仮想ブロックに割り当てている実ブロックのセルモードをＴＬＣモードに変更する必要がないことを意味する。
【０１０７】
実セグメントアドレスポインタ欄３２０８は、対応する仮想ブロック内の仮想セグメントごとに設けられ、対応する仮想ブロックが割り当てられた実ブロック内のその仮想セグメントが割り当てられたセグメント（以下、これを実セグメントと呼ぶ）を指し示すポインタ（アドレス）が格納される。
【０１０８】
図１５は、図１１に示された実ブロック情報３３００のデータ構成を示す。実ブロック情報３３００は、対応するフラッシュパッケージ３２０内に存在する実ブロックごとに生成される情報である。実ブロック情報３３００は、図１５に示すように、実ブロックＩＤ欄３３０１、空き実ブロックポインタ欄３３０２、セルモード欄３３０３及び実ブロック内空き容量欄３３０４を備えて構成される。
【０１０９】
そして実ブロックＩＤ欄３３０１には、対応する実ブロックに付与されたその実ブロックに固有の識別子（実ブロックＩＤ）が格納される。この実ブロックＩＤが、どのフラッシュチップ３００のどのアドレスに相当する実ブロックであるかを示す。また空き実ブロックポインタ欄３３０２には、対応する実ブロックが仮想ブロックに割り当てられていない（空き状態にある）ときに、次の空き状態にある実ブロックの実ブロック情報３３００へのポインタが格納される。
【０１１０】
セルモード欄３３０３には、その実ブロックのセルモードが格納される。その実ブロックのセルモードがＱＬＣモードに設定されている場合には、これに応じた情報がセルモード欄３３０３に格納され、その実ブロックのセルモードがＴＬＣモードに設定されている場合には、これに応じた情報がセルモード欄３３０３に格納される。
【０１１１】
実ブロック内空き容量欄３３０４には、対応する実ブロックの現在の空き容量が格納される。パッケージプロセッサ３１０（図３）は、対応する実ブロックに対し、この空き容量以下のライト要求をストレージコントローラ２００から受け付け、当該実ブロック内の空き領域に書込み対象のデータを格納できる。パッケージプロセッサ３１０は、このようにして実ブロックの空き領域にデータを格納した場合、格納したデータのデータサイズ分だけ、実ブロック内空き容量欄３３０４に格納された空き容量の値を減少させる。その実ブロックのセルモードがＱＬＣモードの場合、実ブロック内空き容量欄３３０４に格納される値の初期値は、その実ブロックのセルモードがＴＬＣモードである場合の４／３倍になる。
【０１１２】
図１１に戻って、ＱＬＣ空き実ブロック情報ポインタ３４００は、そのフラッシュパッケージ２３０内の各フラッシュチップ３００にそれぞれ対応させて生成される。図１６は、ＱＬＣ空き実ブロック情報ポインタ３４００によって管理される、セルモードがＱＬＣモードに設定された空き実ブロックの集合を表している。この構造を、ＱＬＣ空き実ブロック情報管理キュー３４０１と呼ぶ。ＱＬＣ空きブロック情報ポインタ３４００は、対応するフラッシュチップ３００内の実ブロックのうち、セルモードがＱＬＣモードに設定された空き実ブロック（以下、これをＱＬＣ空き実ブロックと呼ぶ）であって、そのうちの先頭のＱＬＣ空き実ブロックの実ブロック情報３３００へのポインタである。
【０１１３】
また、かかる先頭のＱＬＣ空き実ブロックの実ブロック情報３３００の中の空き実ブロックポインタ欄３３０２には、次のＱＬＣ空き実ブロックの実ブロック情報３３００へのポインタが格納される。図１６では、最後のＱＬＣ空き実ブロックの実ブロック情報３３００の空き実ブロックポインタ欄３３０２にＱＬＣ空き実ブロック情報ポインタ３４００へのポインタが格納されている状態を示しているが、かかる最後のＱＬＣ空き実ブロックの実ブロック情報３３００の空き実ブロックポインタ欄３３０２に格納する値を「Null」としてもよい。
【０１１４】
またＴＬＣ空き実ブロック情報ポインタ３５００も、そのフラッシュパッケージ２３０内の各フラッシュチップ３００にそれぞれ対応させて生成される。図１７は、ＴＬＣ空き実ブロック情報ポインタ３５００にそれぞれ格納されたポインタによって管理される、セルモードがＴＬＣモードに設定された空き実ブロックの集合を表している。この構造を、ＴＬＣ空き実ブロック情報管理キュー３５０１と呼ぶ。ＴＬＣ空きブロック管理情報ポインタ３５００は、対応するフラッシュチップ３００内の実ブロックのうち、セルモードがＴＬＣに設定された空き実ブロック（以下、これをＴＬＣ空き実ブロックと呼ぶ）であって、そのうちの先頭のＴＬＣ空き実ブロックの実ブロック情報３３００へのポインタである。
【０１１５】
また、かかる先頭のＴＬＣ空き実ブロックの実ブロック情報３３００の中の空き実ブロックポインタ欄３３０２には、次のＴＬＣ空き実ブロックの実ブロック情報３３００のポインタが格納される。図１７では、最後のＴＬＣ空き実ブロックの実ブロック情報３３００の空き実ブロックポインタ欄３３０２にＴＬＣ空き実ブロック情報ポインタ３５００へのポインタが格納されている状態を示しているが、かかる最後のＴＬＣ空き実ブロックの実ブロック情報３３００の空き実ブロックポインタ欄３３０２に格納する値を「Null」としてもよい。
【０１１６】
（１−４）ストレージシステムにおいて実行される各種処理
次に、図４〜図１７について上述した情報を用いてストレージコントローラ２００のプロセッサ２６０（図２）や、フラッシュパッケージ２３０のパッケージプロセッサ３１０（図３）により実行される各種処理について説明する。なお以下においては、各種処理の処理主体をプログラムとして説明するが、実際上は、そのプログラムに基づいてストレージコントローラ２００のプロセッサ２６０や、フラッシュパッケージ２３０のパッケージプロセッサ３１０がその処理を実行することは言うまでもない。
【０１１７】
（１−４−１）ストレージコントローラにより実行される各種処理
まず、ストレージコントローラ２００により実行させる各種処理の内容について説明する。ストレージコントローラ２００の処理は、プロセッサ２６０（図２）がメモリ２７０（図２）に格納された対応するプログラムを実行することにより行われる。
【０１１８】
図１８は、かかるメモリ２７０に格納されたプログラム群の構成を示す。本実施の形態の場合、ストレージコントローラ２００のメモリ２７０には、リード処理実行部４０００、ライト要求受付け部４１００、ライトアフタ処理実行部４２００及び実ぺージ移動処理実行部４３００が格納されている。これらは、容量仮想化技術を実現するプログラムである。
【０１１９】
なお、本実施の形態では、ホスト１１０からのリード／ライト要求は、フラッシュメモリのリード／ライト単位であるセグメント（一般のフラッシュメモリの用語ではページ）単位で発行されるものとする。勿論、本発明は、ホスト１１０からのリード要求や、ライト要求がセグメントの一部のみを指定した場合にも有効である。なお、フラッシュメモリのセグメントの一部の領域がライト先として指定された場合、フラッシュパッケージ２３０が、セグメント全体を読み出し、指定された部分領域のデータのみを更新した上で、そのデータをそのセグメントに書き戻す。
【０１２０】
（１−４−１−１）リード処理
まず、リード処理について説明する。図１９は、ホスト１１０からのリード要求をストレージコントローラ２００が受け付けた場合にリード処理実行部４０００により実行されるリード処理の処理手順を示す。
【０１２１】
ステップ５０００：リード処理実行部４０００は、受け付けたリード要求において指定されたリード対象のデータが格納されたアドレスから、対応する仮想ページと、その仮想ページ内のアクセス先の相対アドレスとを特定する。
【０１２２】
ステップ５００１：リード処理実行部４０００は、リード対象となったデータが、キャッシュメモリ２１０に格納されているか否か（キャッシュヒットか否か）を判定する。これは、公知の技術である。リード処理実行部４０００は、この判定で肯定結果を得た場合（キャッシュヒット、ステップ５００１：ＹＥＳ）にはステップ５００８に進み、否定結果を得た場合（キャッシュミス、ステップ５００１：ＮＯ）にはステップ５００２に進む。
【０１２３】
ステップ５００２：ステップ５００１で否定結果を得た場合、リード対象のデータをキャッシュメモリ２１０にロードする必要がある。そこで、リード処理実行部４０００は、ステップ５０００で特定した仮想ページに割り当てた実ページに対応する実ページ情報２１００（図４及び図６）を、論理ボリューム情報２０００（図４及び図５）の対応する実ページポインタ欄２００４（図５）に格納されたポインタを参照して取得する。
【０１２４】
ステップ５００３：リード処理実行部４０００は、ステップ５００２で取得した実ページ情報２１００のフラッシュパッケージグループＩＤ欄２１０１（図６）に格納されたフラッシュパッケージグループＩＤと、実ページアドレス欄２１０２（図６）に格納された対応する実ページのアドレスとから、当該実ページが属するフラッシュパッケージグループ２８０（図２）と、当該実ページのフラッシュパッケージグループ２８０内の先頭アドレスとを取得する。
【０１２５】
ステップ５００４：リード処理実行部４０００は、ステップ５０００で特定したリード対象の相対アドレスと、ステップ５００３で取得したフラッシュパッケージグループＩＤが付与されたフラッシュパッケージグループ２８０（図２）のフラッシュパッケージグループ情報２３００（図８）のステップパッケージグループ内ＲＡＩＤタイプ欄２３０２（図８）に格納されたＲＡＩＤタイプとから、リード対象のデータが格納されている実ページ内の相対アドレスを算出する。またリード処理実行部４０００は、算出した実ページ内の相対アドレスと、上述のように取得したＲＡＩＤタイプと、かかるフラッシュパッケージグループ情報２３００（図８）の対応するフラッシュパッケージポインタ欄２３０５（図８）に格納されたフラッシュパッケージポインタとから、どのフラッシュパッケージ２３０のどのアドレスをアクセスすべきかを特定する。
【０１２６】
ステップ５００５：リード処理実行部４０００は、ステップ５００４で特定したフラッシュパッケージ２３０に対し、ステップ５００４で特定したアドレスに格納されたデータをリード対象とするリード要求を発行する。
【０１２７】
ステップ５００６：リード処理実行部４０００は、ステップ５００５でリード要求を発行したフラッシュパッケージ２３０からリード対象のデータが転送され終えるのを待つ。
【０１２８】
ステップ５００７：リード処理実行部４０００は、ステップ５００５でリード要求を発行したフラッシュパッケージ２３０から転送されてきたデータをキャッシュメモリ２１０（図２）に格納する。
【０１２９】
ステップ５００８：リード処理実行部４０００は、今回のリード要求で指定されたキャッシュメモリ２１０上のデータを当該リード要求の送信元のホスト１１０に転送し、この後、このリード処理を終了する。
【０１３０】
（１−４−１−２）ライト処理
図２０は、ホスト１１０からのライト要求をストレージコントローラ２００が受け付けた場合にライト要求受付け部４１００により実行されるライト処理の処理手順を示す。
【０１３１】
ステップ６０００：ライト要求受付け部４１００は、受け付けたライト要求において指定されたデータのライト先となるアドレスから、対応する仮想ページとアクセス先の仮想ページ内の相対アドレスとを特定する。
【０１３２】
ステップ６００１：ライト要求受付け部４１００は、ステップ６０００で特定した相対アドレスが付与された仮想ページに実ページが割り当てられているかを、ライト要求においてライト先として指定された論理ボリュームに対応する論理ボリューム情報２０００（図５）内の対応する実ページポインタ欄２００４（図５）に「Null」が格納されているか否かにより判定する。そしてライト要求受付け部４１００は、かかる仮想ページに実ページが割り当てられていない場合には（ステップ６００１：ＮＯ）、ステップ６００２に進み、実ページが割り当てられている場合には（ステップ６００１：ＹＥＳ）、ステップ６００３に進む。
【０１３３】
ステップ６００２：ライト要求受付け部４１００は、このステップ６００２において、ライト要求においてデータのライト先として指定された仮想ページに実ページを割り当てる。具体的に、ライト要求受付け部４１００は、ライト要求においてデータのライト先として指定された論理ボリュームに対応する論理ボリューム情報２０００（図５）の論理ボリュームＲＡＩＤタイプ欄２００３と、フラッシュパッケージグループ２８０（図２）ごとのフラッシュパッケージグループ情報２３００（図８）のパッケージグループＲＡＩＤタイプ欄２３０２（図８）に格納されたＲＡＩＤタイプ、及び、空き実ページ数欄２３０４（図８）に格納された空き実ページ数となどを参照して、どのフラッシュパッケージグループ２８０の実ページを割り当てるかを決定する。その後、ライト要求受付け部４１００は、このようにして決定したフラッシュパッケージグループ２８０に対応する空き実ページ情報ポインタ２２００（図４）を参照して、先頭の空き実ページの実ページ情報２１００（図４、図６）を、ライト要求においてデータのライト先として指定された論理ボリュームに対応する論理ボリューム情報２０００（図４、図５）の実ページポインタ欄２００４（図５）に格納されたポインタが示すようにする。これにより、かかる仮想ページに実ページを割り当てたことになる。
【０１３４】
なおライト要求受付け部４１００は、この後、空き実ページ情報ポインタ２２００（図４）を、次の実ページ情報２１００（仮想ページに割り当てた実ページの実ページ情報２１００の中の空き実ページポインタ欄２１０３（図６）に格納されたポインタが示す実ページ情報２１００）を示すように更新する。またライト要求受付け部４１００は、ライト要求においてデータのライト先として指定された仮想ページに割り当てた実ページの実ページ情報２１００の中の空き実ページポインタ欄２１０３の値を「Null」に更新する。さらにライト要求受付け部４１００は、その実ページを提供するフラッシュパッケージグループ２８０に対応するフラッシュパッケージグループ情報２３００（図４、図８）の空き実ページ数欄２３０４（図８）に格納されている値を１だけ減らす。さらにライト要求受付け部４１００は、かかる実ページに対応する実ページ情報２１００（図６）のページ割り当て時刻欄２１０４に、現在時刻を格納する。
【０１３５】
なお本実施の形態においては、以上のような仮想ページを実ページに割り当てる一連の処理を、ライト要求を受け付けたときに実施する場合について説明したが、この一連の処理は、ライト対象のデータをフラッシュパッケージ２３０に格納するまでに実行すればよい。
【０１３６】
ステップ６００３：ライト要求受付け部４１００は、ホスト１１０から転送されてきたライト対象のデータ（ライトデータ）を、キャッシュメモリ２１０（図２）に格納する。さらにライト要求受付け部４１００は、かかるライト要求に対するライト処理の完了報告をホスト１１０に通知し、この後、このライト処理を終了する。
【０１３７】
なおフラッシュパッケージグループ２８０は、ＲＡＩＤ構成をとるため、キャッシュメモリ２１０上に格納したライトデータに対して冗長データを生成する必要がある。ただし、これは、公知の方法であるので、本実施の形態では詳細な説明はしない。また、実ページの中には、冗長データを格納する領域も含まれているため、ライト対象のデータに対応する冗長データの実ページ内の格納アドレスも一意に定まる。冗長データも、一度、キャッシュメモリ２１０に格納する。なお、キャッシュメモリ２１０上の冗長データも、ライト対象のデータと同様に、どのフラッシュパッケージ２３０のどのアドレスに書き込むべきかを示す情報を付けておく。ライト対象のデータ及びその冗長データは、後述のようにライトアフタ処理実行部５２００によって、対応するフラッシュパッケージ１６０に書き込まれるが、ライトアフタ処理実行部５２００から見ると、いずれもフラッシュパッケージ２３０へ書き込むデータなので、両者を区別する必要はない。同様に、フラッシュパッケージ２３０も、両者を区別する必要はない。
【０１３８】
（１−４−１−３）ライトアフタ処理
図２１は、ライトアフタ処理実行部４２００により定期的又は不定期に実行されるライトアフタ処理の処理手順を示す。ライトアフタ処理実行部４２００は、ホスト１１０からのライト要求に応じてキャッシュメモリ２１０に格納したライト対象のデータ及びその冗長データを、この図２１に示す処理手順に従ってフラッシュパッケージ２３０に書き込む。この際、ライトアフタ処理実行部４２００は、かかるライト対象のデータ及びその冗長データを区別することなく、これらフラッシュパッケージ２３０に書き込むべきデータとして取り扱う。
【０１３９】
ステップ７０００：ライトアフタ処理実行部４２００は、キャッシュメモリ２１０をサーチして、ホスト１１０からのライト要求に応じて一時的にキャッシュメモリ２１０に格納したライト対象のデータであって、未だフラッシュパッケージ２３０に書き込んでいないデータ（以下、これをデステージ対象データと呼ぶ）があるか否かを判定する。かかるデステージ対象データが存在する場合、ライトアフタ処理実行部４２００は、ステップ７００１に進む。また、かかるデステージ対象データが存在しない場合、ライトアフタ処理実行部４２００は、このライトアフタ処理を終了する。
【０１４０】
ステップ７００１：ライトアフタ処理実行部４２００は、対応するフラッシュパッケージ２３０に書き込むべきデステージ対象データを決定する。
【０１４１】
ステップ７００２：ライトアフタ処理実行部４２００は、そのデステージ対象データに付与されている、ライト先のフラッシュパッケージ２３０及び書込み先のアドレスに関する情報を取り出し、ライト先の実ページに対応する実ページ情報２１００（図６）の移動中フラグ欄２１０６（図６）に格納されている移動中フラグをチェックする。この移動中フラグがオンに設定されている場合、この実ページは移動中であるため、ライトアフタ処理実行部４２００は、そのデステージ対象データのフラッシュパッケージ２３０への書込みを中止し、ステップ７００１に戻って別のデステージ対象データを探す。
【０１４２】
ステップ７００３：ライトアフタ処理実行部４２００は、そのデステージ対象データのライト先のフラッシュパッケージ２３０に対して、ライト先のアドレスを指定したライト要求を発行すると共に、当該デステージ対象データを転送する。
【０１４３】
ステップ７００４：ライトアフタ処理実行部４２００は、ライト要求及びデステージ対象データを転送したフラッシュパッケージ２３０から当該ライト要求に対するライト処理の完了報告が送信されてくるのを待つ。
【０１４４】
ステップ７００５：ライトアフタ処理実行部４２００は、かかるライト処理の完了報告を受信すると、このライト処理に伴って、そのときデステージ対象データを書き込んだ実ページ内のいずれかの実ブロックにデータ消去が発生したか否かを確認する。そしてライトアフタ処理実行部４２００は、いずれかの実ブロックにデータ消去が発生していた場合には、その実ブロックを含む実ページの実ページ情報２１００（図６）のページ書込み量欄２１０５に格納されているページ書込み量から推測されるページの消去回数を１増加させる。
【０１４５】
ステップ７００６：ライトアフタ処理実行部４２００は、かかるデステージ対象データを書き込んだフラッシュパッケージ２３０の容量が変化したか否かを判定する。ライトアフタ処理実行部４２００は、かかる容量に変化がある場合にはステップ７００７に進み（ステップ７００６：ＹＥＳ）、かかる容量に変化がない場合にはこのライトアフタ処理を終了する（ステップ７００６：ＮＯ）。
【０１４６】
ステップ７００７：ライトアフタ処理実行部４２００は、フラッシュパッケージ２３０の容量に変化があった場合、そのフラッシュパッケージ２３０が属するフラッシュパッケージグループ２８０内のフラッシュパッケージ２３０の容量の最小値が変化したか否かを確認する。
【０１４７】
ここで、同じフラッシュパッケージグループ２８０を構成する各フラッシュパッケージ２３０の容量は原則として同じにする必要がある。そこでライトアフタ処理実行部４２００は、デステージ対象データの書き込みによりフラッシュパッケージグループ２８０内のフラッシュパッケージ２３０の容量の最小値が変化した場合（これは、かかるデステージ対象データが書き込まれたフラッシュパッケージ２３０の容量がそのフラッシュパッケージグループ２８０内で最小となったことを意味する）には、そのフラッシュパッケージグループ２８０を構成する他のフラッシュパッケージ２３０の容量もその最小値と同じ容量に合わせるため、これら他のフラッシュパッケージ２３０について、それぞれ必要な数の空き実ページを使用不可に設定する。
【０１４８】
具体的に、ライトアフタ処理実行部４２００は、これら他のフラッシュパッケージ２３０について、空き実ページ情報ポインタ２２００（図４）により管理している空き実ページ情報管理キュー２２０１（図９）に格納されている実ページ情報２１００の中から必要な数の実ページ情報２１００を、使用不可実ページ情報ポインタ２７００により管理している使用不可実ページ情報管理キュー２７０１（図１０）に移す。
【０１４９】
ステップ７００８：空き実ページの数が予め設定された閾値以下になった場合、ライトアフタ処理実行部４２００は、フラッシュパッケージグループ２８０内に常に一定数の空き実ページを確保するため、当該フラッシュパッケージグループ２８０から、幾つかの実ページにそれぞれ格納されているデータを、他のフラッシュパッケージグループ２８０に移動させる。
【０１５０】
具体的に、ライトアフタ処理実行部４２００は、デステージ対象データが書き込まれたフラッシュパッケージグループ２８０が提供するすべての実ページの中から、データが格納されている実ページの半分をデータの移動対象として決定する。この決定は、デステージ対象データが書き込まれたフラッシュパッケージグループ２８０が提供する各実ページの実ページ情報２１００（図４、図６）におけるページ書込み量欄２１０５（図６）に格納されているページ書込み量や、ページ割当て時刻欄２１０４（図６）に格納されているページ割当て時刻などを参照する。そしてライトアフタ処理実行部４２００は、決定した各実ページの実ページ情報２１００における移動待ちフラグ欄２１０８（図６）に格納されている移動待ちフラグをオンに設定する。
【０１５１】
ステップ７００９：ライトアフタ処理実行部４２００は、キャッシュメモリ２１０に格納されているすべてのデステージ対象データについてステップ７００１〜ステップ７００８の処理を実行し終えたか否かを判定する。ライトアフタ処理実行部４２００は、この判定で否定結果を得ると（ステップ７００９：ＮＯ）、ステップ７００１に戻る。そしてライトアフタ処理実行部４２００は、ステップ７００１で決定するデステージ対象データを順次他のデステージ対象データに切り替えながらステップ７００１〜ステップ７００９の処理を繰り返す。そしてライトアフタ処理実行部４２００は、やがてすべてのデステージ対象データについてステップ７００１〜ステップ７００８の処理を実行し終えると（ステップ７００９：ＹＥＳ）、実ページ移動処理実行部４３００（図１８）をコールし、その後、このライトアフタ処理を終了する。
【０１５２】
（１−４−１−４）実ページ移動処理
図２２は、上述のようにライトアフタ処理実行部４２００にコールされた実ページ移動処理実行部４３００により実行される実ページ移動処理の処理手順を示す。
【０１５３】
ステップ８０００：実ページ移動処理実行部４３００は、まず、図２１について上述したライトアフタ処理のステップＳ７００８においてライトアフタ処理実行部４２００によりデータの移動対象として決定された各実ページ（以下、これらを移動対象実ページと呼ぶ）について、その移動対象実ページに格納されているデータの移動先の実ページ（以下、これらを移動先実ページと呼ぶ）をそれぞれ決定する。移動先実ページとして決定される実ページは、セルモードを変更するフラッシュパッケージグループ２８０以外のフラッシュパッケージグループ２８０が提供する実ページのうち、データが格納されていない実ページ（空き実ページ）である。そして実ページ移動処理実行部４３００は、移動対象実ページごとに、その移動対象実ページの実ページ情報２１００（図４、図６）の移動先実ページ欄２１０７（図６）に、その移動対象実ページのデータの移動先として決定した移動先実ページの実ページ情報２１００を指すポインタをそれぞれ設定する。
【０１５４】
ステップ８００１：実ページ移動処理実行部４３００は、未処理の移動対象実ページが存在するか否かを判定する。この判定は、いずれかの実ページ情報２１００（図４、図６）の移動待ちフラグ欄２１０８（図６）に格納されている移動待ちフラグがオンに設定されているか否かを判定することにより行われる。そして実ページ移動処理実行部４３００は、この判定で肯定結果を得た場合（ステップ８００１：ＹＥＳ）にはステップ８００２に進み、否定結果を得た場合（ステップ８００１：ＮＯ）にはこの実ページ移動処理を終了する。
【０１５５】
ステップ８００２：実ページ移動処理実行部４３００は、ステップ８００１で検出した未処理の移動対象実ページの中から１つの移動対象実ページを選択し、その移動対象実ページに対応する実ページ情報２１００（図４、図６）の移動待ちフラグ欄２１０８（図６）に格納された移動待ちフラグをオフに設定すると共に、その実ページ情報２１００の移動中フラグ欄２１０６に格納されている移動中フラグをオンに設定する。
【０１５６】
ステップ８００３：実ページ移動処理実行部４３００は、ステップ８００２で選択した移動対象実ページが、どのフラッシュパッケージ２３０内のどのセグメントの集合となるかを算出する。ステップ８００２で選択した移動対象実ページに対応する実ページ情報２１００のフラッシュパッケージグループＩＤ欄２１０１に格納されているフラッシュパッケージグループＩＤが付与されたフラッシュパッケージグループ２８０のフラッシュパッケージグループ情報２３００（図４、図８）の各フラッシュパッケージポインタ欄２３０５にそれぞれ格納されているポインタがそれぞれ指し示すフラッシュパッケージ情報２５００（図４、図７）にそれぞれ対応するフラッシュパッケージ２３０が求めるフラッシュパッケージ２３０である。また実ページ移動処理実行部４３００は、ステップ８００２で選択した移動対象実ページの実ページ情報２１００における実ページアドレス欄２１０２（図６）に格納されたその移動対象実ページのアドレスと、対応するフラッシュパッケージ情報２５００（図７）の仮想ブロック容量欄２５０３（図７）に格納された仮想ブロックの容量とから、それぞれのフラッシュパッケージ２３０の中の移動対象となるセグメントの集合を、すべてのフラッシュパッケージ２３０について求める。
【０１５７】
ステップ８００４：実ページ移動処理実行部４３００は、ステップ８００２で選択した移動対象実ページを提供するフラッシュパッケージグループ２８０を構成する各フラッシュパッケージ２３０に対して、指定したセグメントの中で、データを格納したセグメントのデータを、キャッシュメモリ２１０に移動すべき旨のリード要求をそれぞれ送信する。
【０１５８】
ステップ８００５：実ページ移動処理実行部４３００は、リード要求を送信したすべてのフラッシュパッケージ２３０から、そのリード要求に応じたリード処理の完了報告及びリードデータが送られてくるのを待つ。なお、この完了報告には、セグメントごとにデータが格納されていたか否かの情報が含まれる。
【０１５９】
ステップ８００６：実ページ移動処理実行部４３００は、各フラッシュパッケージ２３０から転送されてくるリードデータを、どのセグメントに格納されていたかといった情報と共にキャッシュメモリ２１０に格納する。
【０１６０】
ステップ８００７：実ページ移動処理実行部４３００は、ステップ８００２で選択した移動対象実ページに格納されているデータの移動先である移動先実ページがどのフラッシュパッケージ２３０のどのセグメントの集合になるかを算出する。この場合、かかる移動対象実ページの実ページ情報２１００（図４、図６）の移動先実ページ欄２１０７に格納されたポインタが指し示す実ページ情報２１００がかかる移動先実ページの実ページ情報２１００である。実ページ移動処理実行部４３００は、この実ページ情報２１００から、ステップ８００３について上述した場合と同様にして、移動先実ページがどのフラッシュパッケージ２３０のどのセグメントの集合になるかを求める。
【０１６１】
ステップ８００８：実ページ移動処理実行部４３００は、ステップ８００７で求めた各フラッシュパッケージ２３０に対して、ステップ８００７で求めたセグメントの集合に、移動対象実ページを構成する各セグメントに格納されていたデータを書き込むべき旨のライト要求及びライト対象のデータ（移動対象実ページの各セグメントに格納されていたデータ）を送信する。なお、かかるライト要求には、移動対象実ページのどのセグメントにデータが格納されていたかという情報が含まれる。
【０１６２】
ステップ８００９：実ページ移動処理実行部４３００は、ライト要求を送信したすべてのフラッシュパッケージ２３０から、そのライト要求に応じたライト処理の完了報告が与えられるのを待つ。
【０１６３】
ステップ８０１０：実ページ移動処理実行部４３００は、移動対象実ページを空き実ページに設定すると共に、それまで移動対象実ページが割り当てられていた仮想ページに移動先実ページを割り当てる。具体的に、実ページ移動処理実行部４３００は、移動対象実ページの実ページ情報２１００を、対応する空き実ページ情報ポインタ２２００（図４）により管理される空き実ページ情報管理キュー２２０１（図９）に格納し、さらにその仮想ページを含む論理ボリュームの論理ボリューム情報２０００（図４、図５）の対応する実ページポインタ欄２００４に格納されているポインタが移動先実ページを指し示すように、当該論理ボリューム情報２０００を更新する。また実ページ移動処理実行部４３００は、移動対象実ページの実ページ情報２１００のページ割当て時刻欄２１０４に格納されている時刻を現在時刻に更新する。さらに実ページ移動処理実行部４３００は、移動対象実ページ及び移動先実ページの双方について、その実ページ情報２１００の移動中フラグ欄２１０６に格納された移動中フラグと、移動先実ページ欄２１０７に格納されたポインタと、移動待ちフラグ欄２１０８に格納された移動待ちフラグとをクリア（フラグはオフに設定し、ポインタは「Null」に更新）する。
【０１６４】
ステップ８０１１：実ページ移動処理実行部４３００は、移動対象実ページを提供するフラッシュパッケージグループ２８０のフラッシュパッケージグループ情報２３００（図８）と、移動先実ページを提供するフラッシュパッケージグループ２８０のフラッシュパッケージグループ情報２３００とを更新する。ここでは、移動対象実ページを提供するフラッシュパッケージグループ２８０内の実ブロック情報３３００を、対応する使用不可実ブロック管理情報３５００で管理されるＴＬＣ空き実ブロック情報管理キュー３５０１に移す。
【０１６５】
実ページ移動処理実行部４３００は、このステップ８０１１の処理が完了するとステップ８００２に戻り、この後、すべての移動対象実ページに対するステップ８００２〜ステップ８０１１の処理が完了することによりステップ８００１で肯定結果を得るまで、ステップ８００１〜ステップ８０１１の処理を繰り返す。そして実ページ移動処理実行部４３００は、やがてすべての移動対象実ページに対するステップ８００２〜ステップ８０１１の処理が完了することによりステップ８００１で肯定結果を得ると、この実ページ移動処理を終了する。
【０１６６】
（１−４−２）フラッシュパッケージにより実行される各種処理
次に、フラッシュパッケージ２３０により実行される各種処理の内容について説明をする。フラッシュパッケージ２３０の処理は、パッケージプロセッサ３１０（図３）がパッケージメモリ３２０（図３）に格納された対応するプログラムを実行することにより行われる。
【０１６７】
図２３は、かかるパッケージメモリ３２０に格納されたプログラム群の構成を示す。本実施の形態の場合、フラッシュパッケージ２３０のパッケージメモリ３２０には、データリード処理実行部９０００、データライト要求受付け部９１００、実ブロック解放処理実行部９２００、仮想ブロック格納処理実行部９３００、仮想容量判定処理部９４００及び仮想ブロック移動処理部９５００が格納されている。
【０１６８】
（１−４−２−１）データリード処理
まず、データリード処理について説明する。図２４は、フラッシュパッケージ２３０がストレージコントローラ２００（図２）からのリード要求を受け取ったときに、データリード処理実行部９０００により実行されるデータリード処理の処理手順を示す。なお、この図２４は、１つのセグメントに格納されたデータをリードする際の処理手順を示している。ただし、本発明は、リード要求で複数のセグメント又はセグメントの一部に格納されたデータを読み出すようにした場合も有効である。
【０１６９】
ステップ１００００：データリード処理実行部９０００は、受け取ったリード要求において指定されたリード対象のアドレスから、アクセス対象の仮想ブロックと、その仮想ブロック内のアクセス対象の相対アドレスとを算出する。そしてデータリード処理実行部９０００は、かかる算出結果に基づいて、その仮想ブロックの仮想ブロック情報３２００（図１１、図１４）を取得する。またデータリード処理実行部９０００は、算出したかかる仮想ブロック内の相対アドレスから、当該仮想ブロック内のアクセス対象の仮想セグメントを認識し、その仮想セグメントに対応する実セグメントアドレスポインタ欄３２０８（図１４）に格納されたポインタから、その仮想セグメントが割り当てられた実セグメントを認識する。
【０１７０】
ステップ１０００１：データリード処理実行部９０００は、ステップ１００００で取得した仮想ブロック情報３２００の実ブロック情報ポインタ欄３２０２に格納されているポインタに基づいて、かかるアクセス対象の仮想ブロックが割り当てられた実ブロックの実ブロック情報３３００（図１１、図１５）を取得する。またデータリード処理実行部９０００は、取得した実ブロック情報３３００の実ブロックＩＤ欄３３０１に格納されている実ブロックＩＤに基づいて、対応する実ブロック（アクセス対象の仮想ブロックが割り当てられた実ブロック）を提供するフラッシュチップ３００（図３）を検出する。さらにデータリード処理実行部９０００は、ステップ１００００で認識したアクセス対象の仮想セグメントが割り当てられた実セグメントが、そのフラッシュチップ３００内のどのアドレスにあるかを、かかる仮想ブロック情報３２００の対応する実セグメントアドレスポインタ３２０８に格納されたポインタに基づいて算出する。
【０１７１】
ステップ１０００２：データリード処理実行部９０００は、ステップ１０００１で算出したアクセス対象のフラッシュチップ３００に対応するチップ情報３１００（図１１、図１３）の接続バスＩＤ欄３１０４（図１３）を参照して、そのフラッシュチップ３００が接続されたパッケージバス３４０（図３）をすべて検出し、これらパッケージバス３４０が接続されたパッケージバス転送装置３５０（図３）をすべて検出する。
【０１７２】
ステップ１０００３：データリード処理実行部９０００は、ステップ１０００２で検出したパッケージバス転送装置３５０のうちのいずれか１つのパッケージバス転送装置３５０に対して、ステップ１０００１で検出したアクセス対象のフラッシュチップ３００内のステップ１０００１で算出したアドレスからデータを読み出してバッファ３３０（図３）に格納するよう指示を与える。
【０１７３】
ステップ１０００４：データリード処理実行部９０００は、ステップ１０００３で指示を与えたパッケージバス転送装置３５０が、指示したフラッシュチップ３００内の指示したアドレスからデータを読み出してバッファ３３０に格納し終えるのを待つ。
【０１７４】
ステップ１０００５：データリード処理実行部９０００は、パッケージバス転送装置３５０がかかるデータをバッファ３３０に格納し終えると、当該データをバッファ３３０から読み出し、読み出したデータをそのときリード要求を送信してきたストレージコントローラ２００に転送する。そしてデータリード処理実行部９０００は、この後、このデータリード処理を終了する。
【０１７５】
（１−４−２−２）データライト処理
図２５Ａ及び図２５Ｂは、フラッシュパッケージ２３０がストレージコントローラ２００（図２）からのライト要求及びライト対象のデータを受け取ったときに、データライト要求受付け部９１００により実行されるデータライト処理の処理手順を示す。なお、この図２５Ａ及び図２５Ｂは、１つのセグメントにのみデータをライトする際の処理手順を示している。ただし、本発明は、ライト要求で複数のセグメント又はセグメントの一部にデータを書込む場合も有効である。
【０１７６】
ステップ１１０００：データライト要求受付け部９１００は、受け取ったライト要求において指定されたデータの書込み先となるアドレスと、書込み先のフラッシュパッケージ２３０のパッケージ情報３０００（図１１、図１２）の仮想ブロック容量欄３００５（図１２）に格納された仮想ブロックの容量とから、データ書込み先の仮想ブロックと、その仮想ブロック内のデータ書込み先の相対アドレスとを算出する。本実施の形態では、ホスト１１０からのライト要求は、フラッシュメモリのリード／ライト単位であるセグメント（一般のフラッシュメモリの用語ではページ）ごとに発行されるものとする。勿論、本発明は、ホスト１１０からのライト要求が、仮想セグメントの一部のみを指定した場合にも有効である。
【０１７７】
なお、ライト要求においてデータ書込み先として仮想セグメントの一部の領域が指定された場合、データライト要求受付け部９１００は、仮想セグメントに格納されたデータ全体を読み出し、読み出したデータ内の指定された部分領域のみを更新し、その後、更新したデータを再度同じ仮想セグメント全体を書き込むように処理する。
【０１７８】
ステップ１１００１：データライト要求受付け部９１００は、ストレージコントローラ２００から転送されてきた書込み対象のデータをバッファ３３０に格納する。
【０１７９】
ステップ１１００２：データライト要求受付け部９１００は、データ書込み先の仮想ブロックに実ページが割り当てられているか否かを判定する。この判定は、データ書込み先の仮想ブロックに対応する仮想ブロック情報３２００（図１１、図１４）の実ブロック情報ポインタ欄３２０２に「Null」でない値が格納されているか否かを判断することにより行われる。データライト要求受付け部９１００は、この判定で否定結果を得るとステップ１１００３に進み（ステップ１１００２：ＮＯ）、肯定結果を得るとステップ１１００６に進む（ステップ１１００２：ＹＥＳ）。
【０１８０】
ステップ１１００３：データライト要求受付け部９１００は、データ書込み先の仮想ブロックに実ブロックを割り当てる。本実施の形態では、仮想ブロックに実ブロックを割り当てる際にはＱＬＣモードの実ブロックを割り当てる。具体的に、データライト要求受付け部９１００は、データ書込み先の仮想ブロックを含む４ｎから４ｎ＋３（ｎ＞＝０）の連続した４つの仮想ブロックを１つの実ブロックに割り当てる。この際、データライト要求受付け部９１００は、４ｎから４ｎ＋３の連続した４つの仮想ブロックに対応するそれぞれの仮想ブロック情報３２００（図１１、図１４）の実ブロック情報ポインタ欄３２０２（図１４）に、対応するＱＬＣ空き実ブロック情報ポインタ３４００によって管理されているＱＬＣ空き実ブロック情報管理キュー３４０１（図６）から取り出した同じ１つの実ブロック情報３３００（図１１、図１５）を指し示すポインタをそれぞれ設定する。また、データライト要求受付け部９１００は、かかる４つの仮想ブロック情報３２００の実セグメント割り当て時刻欄３２０６にそれぞれ現在時刻を設定する。
【０１８１】
ステップ１１００４：データライト要求受付け部９１００は、データ書込み先の仮想ブロック内のデータ書込み先の相対アドレスに対応する仮想セグメントと対応付けられたセグメントアドレスポインタ欄３２０８（図１４）に、その仮想ブロックに割り当てた実ブロックの先頭の実セグメントのアドレスを設定する。
【０１８２】
ステップ１１００５：データライト要求受付け部９１００は、データ書込み先の仮想ブロックに割り当てた実ブロックの実ブロック情報３３００（図１１、図１５）の実ブロック内空き容量欄３３０４（図１５）に、セルのモードがＱＬＣモードのときの当該実ブロックの容量を格納する。そしてデータライト要求受付け部９１００は、この後、ステップ１１００７に進む。
【０１８３】
ステップ１１００６：データライト要求受付け部９１００は、データ書込み先の仮想ブロックに割り当てた実ブロックの実ブロック情報３３００（図１１、図１５）の実ブロック内空き容量欄３３０４を参照して、その実ブロック内で空いた状態にある実セグメントのアドレスを、データ書込み先の仮想ブロック内のデータ書込み先の相対アドレスに対応する仮想セグメントと対応付けられたセグメントアドレスポインタ欄３２０８（図１４）に設定する。
【０１８４】
ステップ１１００７：データライト要求受付け部９１００は、ステップ１１００４又はステップ１１００６においてデータ書込み先の仮想ブロックの対応するセグメントアドレスポインタ欄３２０８（図１４）に設定した実セグメントのアドレスが、どのフラッシュチップ３００のどのアドレスに対応するかを確認する。
【０１８５】
ステップ１１００８：データライト要求受付け部９１００は、データ書込み対象の仮想ブロックに割り当てた実ブロックの実ブロック情報３３００（図１１、図１５）の実ブロック内空き容量欄３３０４に格納された値（その実ブロック内の空き容量）を、その値から１つ分のセグメントの容量を減算した値に更新する。
【０１８６】
ステップ１１００９：データライト要求受付け部９１００は、ステップＳ１１００７で確認したデータ書込み先のフラッシュチップ３００に対応したチップ情報３１００（図１１、図１３）の接続バスＩＤ欄３１０４を参照して、当該フラッシュチップ３００が接続されているパッケージバス３４０（図３）を検出し、そのパッケージバス３４０に接続されているパッケージバス転送装置３５０（図３）を検出する。
【０１８７】
ステップ１１０１０：データライト要求受付け部９１００は、ステップ１１００９で検出したパッケージバス転送装置３５０に対して、バッファ３３０に格納されている書込み対象のデータをステップ１１００７で確認したフラッシュチップ３００のステップ１１００７で確認したアドレスに書き込むよう指示を与える。
【０１８８】
ステップ１１０１１：データライト要求受付け部９１００は、ステップ１１０１０で指示を与えたパッケージバス転送装置３５０が、バッファ３３０に格納されている書込み対象のデータを、指示したフラッシュチップ３００内の指示したアドレスに書込み終えるのを待つ。
【０１８９】
ステップ１１０１２：データライト要求受付け部９１００は、ステップ１１００８で値を更新したデータ書込み対象の仮想ブロックに割り当てた実ブロックの実ブロック情報３３００（図１１、図１５）の実ブロック内空き容量欄３３０４を参照して、その実ブロック内の空き容量が「０」となっているか否か（つまりその実ブロックに空がないか否か）を判断する。データライト要求受付け部９１００は、この判断で否定結果を得た場合（ステップ１１０１２：ＮＯ）にはステップ１１０１３に進み、肯定結果を得た場合（ステップ１１０１２：ＹＥＳ）にはステップ１１０１４に進む。
【０１９０】
ステップ１１０１３：データライト要求受付け部９１００は、ライト要求の送信元のストレージコントローラ２００に、書込み対象のデータのライト処理が完了した旨を通知し、この後、このデータライト処理を終了する。
【０１９１】
ステップ１１０１４：データライト要求受付け部９１００は、満杯になった実ブロックに対応する仮想ブロック（ＱＬＣは４つの仮想ブロック、ＴＬＣの場合は３つの仮想ブロック）に、別の実ブロックを割り当てる。別の実ブロックを割り当てる理由は、実ブロックの消去回数の偏りを少なくするためである。実際上、データライト要求受付け部９１００は、図２３において図示していないソフトウェアであるウエアレベリング処理部をコールして、その仮想ブロックに割り当てる実ブロックを決定させる。
【０１９２】
本実施の形態では、ＱＬＣモードの実ブロックの集合と、ＴＬＣモードの実ブロックの集合とは、独立にウエアレベリングが実行されるものとする。すなわち、ＱＬＣモードの実ブロックの集合の消去回数と、ＴＬＣモードの実ブロックの集合の消去回数とは、それぞれ独立に均衡化されることになる。
【０１９３】
データライト要求受付け部９１００は、かかるウエアレベリング処理部から、新たに書込み対象のデータを格納する実ブロックの実ブロック情報３３００のアドレスを受け取る。ここでは、かかる仮想ブロックの仮想ブロック情報３２００（図１４）におけるセルモード変更フラグ欄３２０７（図１４）に格納されたセルモード変更フラグがオフの場合、これまでＱＬＣモードで動作しているときや、ＱＬＣモードで動作する実ブロックをこれまでＴＬＣモードで動作しているときには、ＴＬＣモードで動作する実ブロックの実ブロック情報３３００を受け取る。
【０１９４】
一方、セルモード変更フラグがオンの場合、これまで割り当てていたセルモードとは別のセルモードの実ブロックを割り当てる必要がある。ここでは、これまでＱＬＣモードで動作していた場合には、３つのＱＬＣモードの実ブロックに対応する１２個の仮想ブロックのデータを、４つのＴＬＣモードの実ブロックに格納する。このため、現在処理対象としているＱＬＣモードの実ブロック以外で、セルモード変更フラグがオンになっている仮想ブロックを割り当てている２つのＱＬＣモードの実ブロックと対応する仮想ブロック情報３２００と、４つのＴＬＣモードで動作している実ブロックの情報を受け取る。これまでＴＬＣモードで動作していた場合、４つのＴＬＣの実ブロックに対応する１２個の仮想ブロックを、３つのＱＬＣの実ブロックに格納する。このため、現在処理対象としているＴＬＣの実ブロック以外で、セルモード変更フラグがオンになっている仮想ブロックを割り当てている３つのＴＬＣの実ブロックと対応する仮想ブロック情報と、３つのＱＬＣで動作している実ブロックの情報を受け取る。
【０１９５】
またセルモード変更フラグがオンの場合、対応する仮想ブロック情報３２００の仮想ブロックセルモード欄３２０７に格納されたその仮想ブロックのセルモードを、これまでＱＬＣモードならＴＬＣモードに、ＴＬＣモードならＱＬＣモードに変更し、さらに、セルモード変更フラグをオフにする。また、データを格納する実ブロックは、消去された状態にあり、直接データを書き込めるような状態であるとする。
【０１９６】
また本実施の形態では、ウエアレベリング処理部は、例えば、特許文献２のような公知の技術を前提とするので、ここでは、特に詳細に説明しない。なお、データライト要求受付け部９１００は、ここで対応する仮想ブロック情報３２００の仮想ブロック消去回数欄３２０４（図１４）に格納された消去回数を増やす。実際上、データライト要求受付け部９１００は、これまでＴＬＣモードの実ページを割り当てていた仮想ブロックについては、かかる消去回数を元の値に「0.33」を加えた値に更新し、ＱＬＣモードの実ページを割り当てていた２つの仮想ブロックについては、かかる消去回数をそれぞれ「0.25」を加えた値に更新する。
【０１９７】
ステップ１１０１５：データライト要求受付け部９１００は、セルモードを変更しない場合には、現在の仮想ブロックのセルモードがＱＬＣモードのときには４つの仮想ブロックに格納されたデータ、現在の仮想ブロックのセルモードがＴＬＣモードのときには３つの仮想ブロックに格納されたデータをバッファ３３０（図３）に読み出し、セルモードを変更する場合には、１２個の仮想ブロックに格納されたデータをバッファ３３０に読み出す。このため、対応する仮想ブロック情報３２００（図１１、図１４）のセグメントアドレスポインタ欄３２０８のうち、格納された値が「Null」となっていないセグメントアドレスポインタ欄３２０８に格納されたセグメントアドレスポインタで示されたアドレスから、どのフラッシュチップ３００のどのアドレスから、どの長さのデータをバッファ３３０に転送するかを表すアドレスリストを生成する。
【０１９８】
ステップ１１０１６：データライト要求受付け部９１００は、ステップ１１００７で認識したフラッシュチップ３００に対応したチップ情報３１００をアクセスして、当該フラッシュチップ３００が接続されているパッケージバス３４０を識別し、対応するパッケージバス転送装置３５０を認識する。
【０１９９】
ステップ１１０１７：データライト要求受付け部９１００は、ステップ１１０１５で生成したアドレスリストに基づいて、ステップ１１０１６で認識したパッケージバス転送装置３５０に対し、フラッシュチップ３００及び当該フラッシュチップ３００内のアドレスを指定して、そのアドレスに格納されたデータを読み出してバッファ３３０に転送するよう指示を与える。
【０２００】
ステップ１１０１８：データライト要求受付け部９１００は、ステップＳ１１０１７で指示を与えたパッケージバス転送装置３５０が当該指示に従ってかかるデータをバッファ３３０に転送し終える（そのデータをバッファ３３０に書き込み終える）のを待つ。
【０２０１】
ステップ１１０１９：データライト要求受付け部９１００は、セルモードを変更しない場合には、処理対象とした各仮想ブロックの仮想ブロック情報３２００（ＱＬＣモードのときには４つの仮想ブロックの仮想ブロック情報３２００、ＴＬＣのときには３つの仮想ブロックの仮想ブロック情報３２００）の中で、「Null」になっていないセグメントアドレスポインタ３２０８を更新する。データライト要求受付け部９１００は、最初の有効なセグメントアドレスポインタ３２０８に割り当てた実ブロックの先頭アドレスを設定し、これ以降の有効なセグメントアドレスポインタ３２０８には、当該先頭アドレスにセグメント長を順次加算した値をそれぞれ設定していく。ＱＬＣモードからＴＬＣモードにセルモードを変更する場合、３つの仮想ブロックのデータを１つの実ブロックに格納する処理を行うため、このような処理を４回繰り返す。ＴＬＣモードからＱＬＣモードにセルモードを変更する場合には、４つの仮想ブロックのデータを１つの実ブロックに格納する処理を行うため、このような処理を３回繰り返す。
【０２０２】
ステップ１１０２０：データライト要求受付け部９１００は、新たに割り当てた実ブロックに対応する実ブロック情報３３００（図１５）の実ブロックＩＤ欄３３０１（図１５）を参照して、この実ページがどのフラッシュチップ３００のどのアドレスにあるかを検出し、ステップ１１０１７でバッファ３３０に書き込まれたデータをその実ページに転送することを指示するためのアドレスリストを生成する。
【０２０３】
ステップ１１０２１：データライト要求受付け部９１００は、ステップ１１０２０で検出した、ライトデータを格納すべきフラッシュチップ３００に対応したチップ情報３１００（図１３）にアクセスして、当該フラッシュチップ３００が接続されているパッケージバス３４０を識別し、対応するパッケージバス転送装置３５０を検出する。
【０２０４】
ステップ１１０２２：データライト要求受付け部９１００は、ステップ１１０２１で認識したパッケージバス転送装置３５０に対して、ステップ１１０２０で検出したフラッシュチップ３００のステップ１１０２０で検出したアドレスに、ステップ１１０１７でバッファ３３０に格納したデータを当該バッファ３３０から読み出して書き込むよう指示を与える。
【０２０５】
ステップ１１０２３：データライト要求受付け部９１００は、ステップＳ１１０２２で指示を与えたパッケージバス転送装置３５０が当該指示に従ってかかるデータをバッファ３３０から指定したフラッシュチップ３００の指定したアドレスに書き終えるのを待つ。
【０２０６】
ステップ１１０２４：データライト要求受付け部９１００は、自フラッシュパッケージ２３０の仮想容量を変化させる必要があるかをチェックするために、仮想容量判定処理部９４００（図２３）をコールする。
【０２０７】
ステップ１１０２５：このステップは、ステップ１１０１４で別の実ブロックを割り当てた仮想ブロックに元々割り当てられていた実ブロック（満杯になった実ブロック）を空いた状態にするステップである。データライト要求受付け部９１００は、まず、かかる元々割り当てられていた実ブロックに格納されているすべてのデータを消去する。そしてデータライト要求受付け部９１００は、このデータ消去処理が完了すると、次に、その実ブロックに対応する実ブロック情報３３００（図１５）の空き実ブロックポインタ欄３３０２（図１５）に、ＱＬＣ空き実ブロック情報ポインタ３４００（図１１）が示していた実ブロック情報３３００のアドレスを設定し、ＱＬＣ空き実ブロック管理情報ポインタ３４００には、元々割り当てていた実ブロックに対応する実ブロック情報３３００のアドレスを設定する。
【０２０８】
ステップ１１０２６：データライト要求受付け部９１００は、満杯になった実ブロックに対応する仮想ブロック（ＱＬＣモードの場合は４つの仮想ブロック、ＴＬＣモードの場合は３つの仮想ブロック）に、別の実ブロックを割り当てる。具体的に、データライト要求受付け部９１００は、対応する数だけの仮想ブロック情報３２００（図１４）の実ブロック情報ポインタ欄３２０２（図１４）が、新しく割当てた実ブロックの実ブロック情報３３００を示すように、これら仮想ブロック情報３２００を更新する。
【０２０９】
ステップ１１０２７：データライト要求受付け部９１００は、ストレージコントローラ２００（図２）に対して、データライト処理が終了したことを報告する。この際、仮想ブロックに消去が発生しているので、データライト要求受付け部９１００は、消去が発生したことを、ストレージコントローラ２００に報告する。なお、当該フラッシュパッケージ２３０の仮想容量を変化させる場合、データライト要求受付け部９１００は、新たな仮想容量と、これまでの容量（パッケージ容量欄３００２（図１２）に格納されていた値）とをストレージコントローラ２００に報告する。またデータライト要求受付け部９１００は、パッケージ容量欄３００２には、新たな仮想容量を設定する。
【０２１０】
（１−４−２−３）実ブロック解放処理
図２６は、ストレージコントローラ２００から、領域の範囲（仮想セグメントの集合）を指定して、その領域の範囲を解放せよという要求（以下、これをブロック解放要求と呼ぶ）がフラッシュパッケージ２３０（図３）に与えられたときに、実ブロック解放処理実行部９２００（図２３）により実行される実ブロック解放処理の処理手順を示す。なお、この場合、ストレージコントローラ２００からは、解放すべき領域の範囲として、１２の倍数の仮想ブロックが指定されるものとする。
【０２１１】
ステップ１２０００：仮想ブロック解放処理実行部９２００は、受信したブロック解放要求において指定された、対象とすべき領域の範囲と、各フラッシュパッケージ２３０のパッケージ情報３０００（図１２）のパッケージ容量欄３００２に格納されたフラッシュパッケージ２３０の容量とから、解放を指示された仮想ブロックの集合を算出する。また仮想ブロック解放処理実行部９２００は、この仮想ブロックごとに、その仮想ブロックの仮想ブロック情報３２００にアクセスして、解放を指示された領域の範囲に含まれる各仮想セグメントのセグメントアドレスを、対応する実セグメントアドレスポインタ欄３２０８からそれぞれ取得する。
【０２１２】
ステップ１２００１：仮想ブロック解放処理実行部９２００は、解放すべき領域の範囲に含まれるすべての仮想セグメントについて、対応するセグメントアドレスポインタが「Null」のものと、そうでないものとに分類する。以下においては、セグメントアドレスポインタが「Null」でないものを「有効セグメントアドレスポインタ」と呼ぶものとする。
【０２１３】
ステップ１２００２：実ブロック解放処理実行部９２００は、有効セグメントアドレスポインタごとに、その有効セグメントアドレスポインタが指し示す実セグメントを含む実ブロックを提供するフラッシュチップ３００を特定し、そのフラッシュチップ３００に対応するチップ情報３１００（図１３）を参照してそのフラッシュチップ３００が接続されているパッケージバス３４０（図３）を特定し、そのパッケージバス３４０に接続されたパッケージバス転送装置３５０（図３）を特定する。
【０２１４】
ステップ１２００３：実ブロック解放処理実行部９２００は、すべての有効な実セグメントアドレスポインタ３２０８に基づいて、アクセスすべきすべてのフラッシュチップ３００と、これらフラッシュチップ３００内のアクセスすべき相対アドレスとが掲載された情報リストを生成する。この後、生成した情報リストをステップ１２００２で特定した対応するパッケージバス転送装置３５０に渡し、この情報リストに従って、対応するフラッシュチップ３００内の対応する相対アドレスの実セグメントからデータを読み出して、これをバッファ３３０に格納するよう指示を与える。
【０２１５】
ステップ１２００４：実ブロック解放処理実行部９２００は、ステップ１２００３で指示を与えたすべてのパッケージバス転送装置３５０が、指示したフラッシュチップ３００内の指示した相対アドレスの実セグメントからデータを読み出してバッファ３３０に格納し終えるのを待つ。
【０２１６】
ステップ１２００５：実ブロック解放処理実行部９２００は、かかるデータのバッファ３３０への格納が完了した各仮想ブロックが割り当てられているすべての実ブロックを解放する。
【０２１７】
具体的に、実ブロック解放処理実行部９２００は、かかる仮想ブロックに対応する仮想ブロック情報３２００（図１４）の実ブロック情報ポインタ欄３２０２及び対応するセグメントアドレスポインタ欄３２０５の値を「Null」に更新する。
【０２１８】
また実ブロック解放処理実行部９２００は、対応するすべての実ブロック情報３３００（図１５）の実ブロック内空き容量欄３３０４（図１５）に格納されている値を、セルモードがＴＬＣモードである場合の空き容量に更新すると共に、これら実ブロック情報３３００のセルモード欄３３０３に格納されている値をすべてＴＬＣに更新する。
【０２１９】
さらに実ブロック解放処理実行部９２００は、対応するすべての実ブロックに格納されたデータを消去すると共に、これら実ブロックのセルモードをＴＬＣに変更する。その後、実ブロック解放処理実行部９２００は、対応するすべての実ブロック情報３３００（図１５）を、対応するＴＬＣ空き実ブロック情報ポインタ３５００（図１１）で管理されるＴＬＣ空き実ブロック情報管理キュー３５０１（図１７）に接続する。
【０２２０】
ステップ１２００６：実ブロック解放処理実行部９２００は、ステップ１２００１の処理結果と、データをバッファ３３０に読み出した実セグメントの情報とを、ストレージコントローラ２００に送信する。そして実ブロック解放処理実行部９２００は、この後、この実ブロック解放処理を終了する。
【０２２１】
（１−４−２−４）仮想ブロック格納処理
図２７は、ストレージコントローラ２００から、領域の範囲（仮想ブロックの集合）を指定して、その領域の範囲内の各仮想ブロックに実ブロックをそれぞれ割り当てて、当該ストレージコントローラ２００から送信されるデータを格納せよという要求（以下、これを仮想ブロック格納要求と呼ぶ）がフラッシュパッケージ２３０（図３）に与えられたときに、仮想ブロック格納処理実行部９３００により実行される仮想ブロック格納処理の処理手順を示す。なお、この場合、ストレージコントローラ２００からは、かかる領域の範囲として、１２の倍数の仮想ブロックが指定されるものとする。
【０２２２】
ステップ１３０００：仮想ブロック格納処理実行部９３００は、受信した仮想ブロック格納要求において指定された領域の範囲と、各フラッシュパッケージ２３０のパッケージ情報３０００（図１２）のパッケージ容量欄３００２に格納されたフラッシュパッケージ２３０の容量とから、対象となる仮想ブロックの集合を算出する。本実施の形態では、４ｎ（ｎ＞＝０）の仮想ブロックから４ｎ＋３の仮想ブロックが指定されるものとする。また仮想ブロック格納処理実行部９３００は、これら仮想ブロックごとに、その仮想ブロックの仮想ブロック情報３２００にアクセスして、その仮想ブロックに含まれる各仮想セグメントとそれぞれ対応付けられた実セグメントのセグメントアドレスを、対応する仮想ブロック情報３２００（図１４）の各実セグメントアドレスポインタ欄３２０８からそれぞれ取得する。
【０２２３】
ステップ１３００１：仮想ブロック格納処理実行部９３００は、ストレージコントローラ２００から、仮想ブロック格納要求において指定された領域の範囲内の各仮想セグメントうち、データを格納すべきすべての仮想セグメントの指定と、これら仮想セグメントに格納すべきデータとを取得し、取得したこれら仮想セグメントごとのデータをバッファ３３０（図３）に格納する。
【０２２４】
ステップ１３００２：仮想ブロック格納処理実行部９３００は、仮想ブロック格納要求において指定された領域の範囲内の各仮想ブロックに対して実ブロックを割り当てる。本実施の形態の場合、仮想ブロック格納処理実行部９３００は、このときＱＬＣモードの空き実ブロックを割り当てる。従って、このとき仮想ブロック格納処理実行部９３００は、仮想ブロック格納要求において指定された領域の範囲に含まれる仮想ブロックの数の１／４の数の実ブロックを割り当てることになる。具体的に、仮想ブロック格納処理実行部９３００は、仮想ブロック格納要求において指定された領域の範囲内の仮想ブロックの数の１／４の数の実ブロック情報３３００（図１５）を対応するＱＬＣ空き実ブロック情報ポインタ３４００（図１１）により管理されるＱＬＣ空き実ブロック情報管理キュー３４０１（図１６）から取り出して、これら実ブロック情報３３００にそれぞれ対応する実ブロックをかかる仮想ブロックに割り当てる。
【０２２５】
この際、仮想ブロック格納処理実行部９３００は、最初の４つの仮想ブロックについては同じ１つの実ブロックを割り当てる。具体的に、仮想ブロック格納処理実行部９３００は、最初の４つの仮想ブロックにそれぞれ対応する仮想ブロック情報３２００（図１４）の実ブロック情報ポインタ欄３２０２（図１４）に、かかるＱＬＣ空き実ブロック情報管理キュー３４０１から取り出した同一の実ブロック情報３３００を指し示すポインタを格納する。以下、同様にして、仮想ブロック格納処理実行部９３００は、指定された領域の範囲に含まれる残りのすべての仮想ブロックについて、その４つの連続する仮想ブロックごとに、これら仮想ブロックの仮想ブロック情報３２００の実ブロック情報ポインタ欄３２０２に、かかるＱＬＣ空き実ブロック情報管理キュー３４０１から取り出した同一の実ブロック情報３３００を指し示すポインタをそれぞれ格納する。
【０２２６】
ステップ１３００３：仮想ブロック格納処理実行部９３００は、仮想ブロック格納要求において指定された領域の範囲内の各仮想ブロック内のすべての仮想セグメントに実セグメントを割り当てる。具体的に、仮想ブロック格納処理実行部９３００は、これら仮想ブロックにそれぞれ対応する仮想ブロック情報３２００の各セグメントアドレスポインタ欄３２０８（図１４）にそれぞれ値を設定する。この際、仮想ブロック格納処理実行部９３００は、データを格納すべきでない仮想セグメントに対応するセグメントアドレスポインタ欄３２０８には「Null」を設定する。
【０２２７】
また仮想ブロック格納処理実行部９３００は、データを格納すべきでない仮想セグメントに対応するセグメントアドレスポインタ欄３２０８には、その仮想ブロックに割り当てる実ブロックに対応する実ブロック情報３３００（図１５）の空き実ブロック空き容量欄３３０４（図１５）に格納された空き容量から算出される空き実セグメントの数から、その仮想セグメントに割り当てる実セグメントのアドレスを決定し、この値をその仮想セグメントに対応するセグメントアドレスポインタ欄３２０８に設定する。仮想ブロック格納処理実行部９３００は、セグメントアドレスポインタ欄３２０８に実セグメントのアドレスを設定した場合、その実セグメントを含む実ブロックの実ブロック情報３３００の実ブロック内空き容量欄３３０４に格納されているその実ブロック内の空き容量を、実セグメント１つ分の容量だけ減少させる。
【０２２８】
ステップ１３００４：仮想ブロック格納処理実行部９３００は、上述のようにして決定したデータを格納する各実セグメントを提供するフラッシュチップ３００（図３）のチップ情報３１００（図１３）の接続バスＩＤ欄３１０４（図１３）を参照してそのフラッシュチップ３００が接続されているパッケージバス３４０を特定し、そのパッケージバス３４０に接続されているパッケージバス転送装置３５０（図３）を特定する。
【０２２９】
ステップ１３００５：仮想ブロック格納処理実行部９３００は、ステップ１３００４で特定したパッケージバス転送装置３５０に対して、バッファ３３０に格納されているストレージコントローラ２００からのデータを、どのフラッシュチップ３００のどのアドレスに格納すべきか指示を与える。
【０２３０】
ステップ１３００６：仮想ブロック格納処理実行部９３００は、ステップ１３００５で指示を与えたパッケージバス転送装置３５０が、指示したフラッシュチップ３００内の指示したアドレスにデータを格納し終えるのを待つ。
【０２３１】
ステップ１３００７：仮想ブロック格納処理実行部９３００は、ステップ１３００６でデータを書き込んだフラッシュチップ３００に対応するチップ情報３１００（図１３）のチップ内空き実ブロック数欄３１０３に格納された値を、ステップＳ１３００２で仮想ブロックに割り当てた実ブロックの数だけ減算した値に更新する。また仮想ブロック格納処理実行部９３００は、仮想ブロック格納要求の送信元のストレージコントローラ２００に当該仮想ブロック格納要求に対する処理の完了を報告し、この後、この仮想ブロック格納処理を終了する。
【０２３２】
（１−４−２−５）仮想容量判定処理
図２８は、仮想容量判定処理部９４００により定期的又は不定期に実行される仮想容量判定処理の処理手順を示す。仮想容量判定処理部９４００は、この図２８に示す処理手順に従って、その仮想容量判定処理部９４００が実装されたフラッシュパッケージ２３０（以下、これを自フラッシュパッケージ２３０と呼ぶ）の寿命を予測し、必要があれば、必要なセルのセルモードをＱＬＣモードからＴＬＣモードに、又は、ＴＬＣモードからＱＬＣモードに変更する。
【０２３３】
ステップ１４０００：仮想容量判定処理部９４００は、自フラッシュパッケージ２３０内の実ブロックが割り当てられているすべての仮想ブロック（以下、これらを対象先仮想ブロックと呼ぶ）について、対応する仮想ブロック情報３２００（図１４）の仮想ブロック消去回数欄３２０４（図１４）に格納されているその対象仮想ブロックにおけるデータの消去回数と、当該仮想ブロック情報３２００の実ブロック割当て時刻欄３２０５（図１４）に格納されている当該対象仮想ブロックに実ブロックを割り当てた時刻と、現在時刻とに基づいて、その対象仮想ブロックの単位時間当たりのデータ消去回数をそれぞれ算出する。また仮想容量判定処理部９４００は、この算出結果に基づいて、かかる対象仮想ブロックを単位時間当たりのデータ消去回数が少ない順番に並べる。
【０２３４】
ステップ１４００１：仮想容量判定処理部９４００は、現在時刻から自フラッシュパッケージ２３０の保証期間が満了するまでの時間を算出する。
【０２３５】
ステップ１４００２：仮想容量判定処理部９４００は、これまでと同じペースで各対象仮想ブロックに対するデータの消去が行われた場合に、いずれかの対象仮想ブロックが「自フラッシュパッケージ２３０（図２）の保証期間が完了するまでの間に、いずれかの対象仮想ブロックの消去回数がＱＬＣモードでのデータの消去回数の上限値に到達」するか否かをそれぞれ判定する。
【０２３６】
具体的に、仮想容量判定処理部９４００は、各対象仮想ブロックについて、ステップＳ１４０００で算出したその対象仮想ブロックの単位時間当たりのデータ消去回数と、ステップＳ１４００１で算出した自フラッシュパッケージ２３０の保証期間が完了するまでの時間とを乗算し、乗算結果にその対象仮想ブロックの現在までのデータ消去回数を加算することにより、自フラッシュパッケージ２３０の保証期間が満了するまでの間にその割当て対象の仮想ブロックにおいて実行されるデータ消去回数（以下、これを推定データ消去回数と呼ぶ）をそれぞれ推定する。そして仮想容量判定処理部９４００は、このようにして推定した各対象仮想ブロックの推定データ消去回数を、並べられた対象仮想ブロックの順番で、ＱＬＣモードでのデータの消去回数の上限値として設定した閾値（以下、これをデータ消去回数閾値と呼ぶ）と順次比較する。
【０２３７】
そして仮想容量判定処理部９４００は、かかる推定データ消去回数がかかるデータ消去回数閾値以上の対象仮想ブロックについては、「自フラッシュパッケージ２３０の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータ消去回数の上限値に到達」すると予測し、かかる推定データ消去回数がかかるデータ消去回数閾値未満の対象仮想ブロックについては、「自フラッシュパッケージ２３０（図２）の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータ消去回数の上限値に到達」しないと予測する。
【０２３８】
そして、すべての対象仮想ブロックについて、「自フラッシュパッケージ２３０の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータの消去回数の上限値に到達」しないと予測できた場合には（ステップ１４００２：ＮＯ）、すべての対象仮想ブロックをＱＬＣモードで動作させても問題がないため、仮想容量判定処理部９４００はこの仮想容量判定処理を終了する。これに対して仮想容量判定処理部９４００は、いずれかの対象仮想ブロックについて、「自フラッシュパッケージ２３０の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータ消去回数の上限値に到達」すると予測した場合には（ステップ１４００２：ＹＥＳ）、ステップ１４００３に進む。
【０２３９】
ステップ１４００３：ステップ１４００２で最初に「自フラッシュパッケージ２３０の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータ消去回数の上限値に到達」すると予測した対象仮想ブロック及び当該対象仮想ブロックよりも後に並べられている各対象仮想ブロックについては、その対象仮想ブロックに割り当てられている実ブロックを、ＱＬＣモードよりもデータ消去回数の上限値が高いＴＬＣモードで動作させる必要がある。
【０２４０】
そこで仮想容量判定処理部９４００は、このステップ１４００３において、ステップ１４００２で最初に「自フラッシュパッケージ２３０の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータ消去回数の上限値に到達」すると予測された対象仮想ブロック及び当該対象仮想ブロックよりも後に並べられている各対象仮想ブロックのうち、現在、その対象仮想ブロックに割り当てられた実ブロックのセルモードがＱＬＣモードに設定されている対象仮想ブロックをすべて特定する。この特定は、対応する仮想ブロック情報３２００（図１４）の仮想ブロックセルモード欄３２０６（図１４）に格納されたセルモードがＱＬＣモードの対象仮想ブロックを特定することにより行われる。
【０２４１】
ステップ１４００４：仮想容量判定処理部９４００は、このステップ１４００４において、ステップ１４００２で最初に「自フラッシュパッケージ２３０の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータ消去回数の上限値に到達」すると予測した対象仮想ブロックよりも前に並べられている各対象仮想ブロックのうち、現在、その対象仮想ブロックに割り当てられた実ブロックのセルモードがＴＬＣモードに設定されている対象仮想ブロックをすべて特定する。この特定は、対応する仮想ブロック情報３２００（図１４）の仮想ブロックセルモード欄３２０６（図１４）に格納されたセルモードがＴＬＣモードの対象仮想ブロックを特定することにより行われる。
【０２４２】
ステップ１４００５：仮想容量判定処理部９４００は、ステップ１４００３で特定した各対象仮想ブロックにそれぞれ割り当てられている実ブロックを、セルモードをＱＬＣモードからＴＬＣモードに変更する実ブロックに決定すると共に、ステップ１４００４で特定した各対象仮想ブロックにそれぞれ割り当てられている実ブロックを、セルモードをＴＬＣモードからＱＬＣモードに変更する実ブロックに決定し、ステップ１４００３で特定した各対象仮想ブロックに割り当てられている実ブロックと、ステップ１４００４で特定した各対象仮想ブロックに割り当てられている実ブロックとを入れ替えるため、これらの実ブロックの仮想ブロック情報３２００（図１４）のセルモード変更フラグ欄３２０８に格納されているセルモード変更フラグをそれぞれオンに設定する。
【０２４３】
ただし、ＱＬＣとＴＬＣの容量比率は、４対３であるため、ステップ１４００３で特定した各対象仮想ブロックと、ステップ１４００４で特定した各対象仮想ブロックとを入れ替えるに際しては、ＱＬＣモードで動作している３つの実ブロックに格納されている対象仮想ブロック１２個分と、ＴＬＣモードで動作している４つの実ブロックに格納されている対象仮想ブロック１２個分との入れ替えを行うことになる。
【０２４４】
ステップ１４００６：仮想容量判定処理部９４００は、ステップ１４００３で特定した各対象仮想ブロックにそれぞれ割り当てられている実ブロックと、ステップ１４００４で特定した各対象仮想ブロックにそれぞれ割り当てられている実ブロックとの入れ替えだけでは不十分で、ステップＳ１４００３で特定した対象仮想ブロックにそれぞれ割り当てられている実ブロックの中に、セルモードがＴＬＣモードに設定された実ブロックと入れ替えることができない実ブロック（以下、これを残り実ブロックと呼ぶ）が発生するか否かを判定する。そして仮想容量判定処理部９４００は、この判定で否定結果を得た場合（ステップ１４００６：ＮＯ）にはステップＳ１４００８に進み、肯定結果を得た場合（ステップ１４００６：ＹＥＳ）にはステップ１４００７に進む。
【０２４５】
ステップ１４００７：仮想容量判定処理部９４００は、ステップ１４００６で肯定結果を得た場合、現在ＱＬＣモードに設定されている実ブロックを幾つＴＬＣモードに変更すれば「自フラッシュパッケージ２３０の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータ消去回数の上限値に到達」すると予測した対象仮想ブロックに割り当てられている各実ブロックにそれぞれ格納されているデータをすべてＴＬＣモードに設定された実ブロックに移動させられるかを計算（つまり、上述の残り実ブロックの数を計算）する。
【０２４６】
そして仮想容量判定処理部９４００は、算出した数と同じ数の実ブロック情報３３００を、自フラッシュパッケージ２３０に対応するＱＬＣ空き実ブロック情報ポインタ３４００（図１１）で管理しているＱＬＣ空き実ブロック情報管理キュー３４０１（図１６）から、自フラッシュパッケージ２３０に対応するＴＬＣ空き実ブロック情報ポインタ３５００（図１１）で管理しているＴＬＣ空き実ブロック情報管理キュー３５０１（図１７）に移す。
【０２４７】
この際、仮想容量判定処理部９４００は、ＴＬＣ空き実ブロック情報管理キュー３５０１に移した各実ブロック情報３３００のセルモード欄３３０３に格納されている値をＴＬＣモードに変更する。さらに、仮想容量判定処理部９４００は、これら実ブロック情報３３００の実ブロック空き容量欄３３０４に格納されている容量を、セルモードをＴＬＣモードに変更した場合のブロックサイズに応じた容量に変更にする。
【０２４８】
ステップ１４００８：仮想容量判定処理部９４００は、「自フラッシュパッケージ２３０の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータ消去回数の上限値に到達」すると予測した対象仮想ブロックのうちの合計１２個の対象仮想ブロックに割り当てられている３つの実ブロックに格納されているデータを、ステップ１４００４で特定した仮想ブロックに割り当てられている実ブロックや、ステップ１４００７で実ブロック情報３３００をＴＬＣ空き実ブロック情報管理キュー３５０１に移した実ブロックからなる合計４つの実ブロックに移行させるため、仮想ブロック移動処理部９５００（図２３）をコールする。
【０２４９】
ステップ１４００９：仮想容量判定処理部９４００は、ステップ１４００３で特定した各仮想ブロックに割り当てられている実ブロックに格納されたデータをすべてＴＬＣモードの実ブロックに移行し終えたか否かを判断する。そして仮想容量判定処理部９４００は、この判断で否定結果を得た場合（ステップ１４００９：ＮＯ）にはステップ１４００８に戻る。このように仮想容量判定処理部９４００は、ステップ１４００３で特定した各仮想ブロックに割り当てられている実ブロックに格納されたデータを、１２個の仮想ブロック単位で、ＴＬＣモードの実ブロックに移行させる。そして仮想容量判定処理部９４００は、ステップ１４００３で特定した各仮想ブロックに割り当てられている各実ブロックに格納されたデータをすべてＴＬＣモードの実ブロックに移行し終えると（ステップ１４００９：ＹＥＳ）、ステップ１４０１０に進む。
【０２５０】
ステップ１４０１０：仮想容量判定処理部９４００は、自フラッシュパッケージ２３０の新たな容量をストレージコントローラ２００に報告する。以上により、この仮想容量判定処理が終了する。
【０２５１】
（１−４−２−６）仮想ブロック移動処理
次に、仮想ブロック移動処理部９５００の処理内容について説明する。仮想ブロック移動処理実行部９５００は、仮想容量判定処理部９４００によりコールされると、そのとき仮想容量判定処理部９４００により指定された１２個の仮想ブロックに格納されているデータを、ＴＬＣモードで動作する実ブロックに移動させる仮想ブロック移動処理を実行する。
【０２５２】
この場合、仮想ブロック移動処理実行部９５００は、まず、仮想容量判定処理部９４００により指定された１２個の仮想ブロックに格納されているデータをバッファ３３０（図３）に読み出す。この処理の内容は、図２６について上述した実ブロック解放処理のステップ１２０００〜ステップ１２００５と同じであるため、ここでの説明は省略する。
【０２５３】
この後、仮想ブロック移動処理実行部９５００は、バッファ３３０に読み出したデータを移動先の４つのＴＬＣモードの実ブロックに書き込む。この処理の内容は、図２７について上述した仮想ブロック格納処理のステップ１３００１〜ステップ１３００７とほぼ同様である。ただし、図２７の仮想ブロック格納処理では、１２個の仮想ブロックに対してＱＬＣモードで動作している３個の実ブロックを割り当てているのに対し、本処理では、ＴＬＣモードで動作している４個の実ブロックを割り当てる点が異なる。これ以外は同じであるため、ここでの説明は省略する。
【０２５４】
（１−５）本実施の形態の効果
以上のように本実施の形態のストレージシステム１００では、仮想ブロックごとに、これまでと同じペースで各対象仮想ブロックに対するデータの消去が行われた場合に、いずれかの対象仮想ブロックが「自フラッシュパッケージ２３０（図２）の保証期間が完了するまでの間に、いずれかの対象仮想ブロックの消去回数がＱＬＣモードでのデータの消去回数の上限値に到達」するか否かをそれぞれ判定する。
【０２５５】
そして本ストレージシステム１００では、いずれかの仮想ブロックについて、「自フラッシュパッケージ２３０の保証期間が完了するまでの間に、データ消去回数がＱＬＣモードでのデータ消去回数の上限値に到達」すると予測した場合には、その仮想ブロックに割り当てられている実ブロックのセルモードを、ＱＬＣモードよりもデータ消去回数の上限値が高いＴＬＣモードに変更する。
【０２５６】
従って、本実施の形態によれば、各仮想ブロックについて、その仮想ブロックに割り当てられた実ブロックのセルモードをできる限りＱＬＣモードで用いながら、自フラッシュパッケージ２３０（図２）の保証期間が完了するまでの間にデータ消去回数がＱＬＣモードでのデータの消去回数の上限値に到達すると予測される仮想ブロックについては、その仮想ブロックに割り当てられた実ブロックのセルモードをＴＬＣモードに変更するため、記憶資源を有効に活用しながら、保証期間内のフラッシュパッケージ２３０の性能維持をも行い得る信頼性の高いストレージシステムを実現することができる。
【０２５７】
また本実施の形態によれば、各仮想ブロックにそれぞれ割り当てられた実ブロックをなるべく１つのセルに格納可能な情報量が多いＱＬＣモードで動作させることができるため、ストレージシステム１００全体の情報格納量も多くすることができ、その分、情報システム１全体を構築する際のコストを低減させることができる。
【０２５８】
（２）第２の実施の形態
次に、第２の実施の形態について説明する。第２の実施の形態は、第１の実施の形態と異なる点のみ説明する。
【０２５９】
図６との対応部分に同一符号を付して示す図２９は、本実施の形態の実ページ情報１５０００のデータ構成を示す。本実施の形態の場合、ストレージコントローラ２００は、セルモードを実ページ単位でＱＬＣモード又はＴＬＣモードに設定する。このため本実施の形態の実ページ情報１５０００には、ページセルモード欄１５００１が設けられており、対応する実ページに設定されたセルモードを表す情報がこのページセルモード欄１５００１に格納される。なお本実施の形態における実ページのセルモードの初期値は、ＱＬＣモードであるものとする。
【０２６０】
図１８との対応部分に同一符号を付して示す図３０は、本実施の形態のストレージコントローラ２００のメモリ２７０に格納されたプログラム群の構成を示す。本実施の形態は、ライトアフタ処理実行部１５１００の処理内容が第１の実施の形態のライトアフタ処理実行部４２００（図１８）と異なる点と、プログラムの１つとしてページセルモード選択実行部１５２００がメモリ２７０に格納されている点とが第１の実施の形態と相違する。
【０２６１】
図３１は、本実施の形態のライトアフタ処理実行部１５１００により実行される第２の実施の形態によるライトアフタ処理の処理手順を示す。ステップ１６０００〜ステップ１６００５及びステップ１６００８〜ステップ１６０１１の処理内容は、図２１について上述した第１の実施の形態のライトアフタ処理のステップ７０００〜ステップ７００５及びステップ７００６〜ステップ７００９と同様であるので、ここでの説明は省略する。
【０２６２】
本実施の形態によるライトアフタ処理が第１の実施の形態によるライトアフタ処理と異なる点は、ステップ１６００５及びステップ１６００８の間に、ステップ１６００６及びステップ１６００７が入っている点である。
【０２６３】
ステップ１６００６：ライトアフタ処理実行部１５１００は、ステップ１６００３で対応するフラッシュパッケージ２３０に転送したデータ（デステージ対象データ）が格納された実ページのセルモードの見直しが必要かをチェックする。そしてライトアフタ処理実行部１５１００は、例えば、ページの消去回数がある閾値以上になったときなどにこのステップ１６００６で肯定結果を得（ステップ１６００６：ＹＥＳ）、この場合にはステップ１６００７に進む。またライトアフタ処理実行部１５１００は、これ以外のときにはステップ１６００８に進む（ステップ１６００６：ＮＯ）。
【０２６４】
ステップ１６００７：ライトアフタ処理実行部１５１００は、ページセルモード選択実行部１５２００（図３０）をコールし、この後、ステップ１６００８に進む。
【０２６５】
図３２は、上述のライトアフタ処理のステップ１６００７においてライトアフタ処理実行部１５１００にコールされたページセルモード選択実行部１５２００により実行されるセルモード選択処理の処理手順を示す。
【０２６６】
ステップ１７０００：ページセルモード選択実行部１５２００は、すべての実ページについて、その実ページの実ページ情報１５０００（図２９）のページ書込み量欄２１０５に格納されているその実ページへのデータ書込み量と、当該実ページ情報１５０００のページ割当て時刻欄２１０４に格納されている当該実ページを仮想ページに割り当てた時刻とに基づいて、その実ページの単位時間当たりのデータ消去回数をそれぞれ算出する。またページセルモード選択実行部１５２００は、この算出結果に基づいて、単位時間当たりのデータ消去回数が小さい順番に実ページをソートする。
【０２６７】
ステップ１７００１：ページセルモード選択実行部１５２００は、実ページごとに、現在時刻から保証期間が完了するまでの時間をそれぞれ算出する。
【０２６８】
ステップ１７００２：ページセルモード選択実行部１５２００は、単位時間当たりのデータ消去回数の少ない実ページの順番で、これまでと同じペースでその実ページに対するデータの消去が行われた場合に、その実ページを提供するフラッシュパッケージ２３０（図２）の保証期間が完了するまでの間に、その実ページのデータ消去回数がＱＬＣモードの上限値に到達するか否かをそれぞれ判定する。そしてページセルモード選択実行部１５２００は、すべての実ページについて否定結果を得た場合には（ステップ１７００２：ＮＯ）、すべての実ページをＱＬＣモードで動作させても問題がないため、このセルモード選択処理を終了する。これに対してページセルモード選択実行部１５２００は、いずれかの実ページについて肯定結果を得た場合には（ステップ１７００２：ＹＥＳ）、ステップ１７００３に進む。
【０２６９】
ステップ１７００３：ステップ１７００２で最初に肯定結果が得られた実ページ及び当該実ページよりも後に並べられている各実ページについては、その実ページのセルモードを、ＱＬＣモードよりもデータ消去回数の上限値が高いＴＬＣモードで動作させる必要がある。そこでページセルモード選択実行部１５２００は、このステップ１７００３において、ステップ１７００２で最初に肯定結果が得られた実ページ及び当該実ページよりも後に並べられている各実ページのうち、現在、セルモードがＱＬＣモードに設定されている実ページをすべて特定する。この特定は、対応する実ページの実ページ情報１５０００（図２９）のページセルモード欄１５００１（図２９）に格納されたセルモードがＱＬＣモードの実ページを特定することにより行われる。
【０２７０】
ステップ１７００４：ステップ１７００２で最初に肯定結果が得られた実ページよりも前に並べられた実ページについては、その実ページのセルモードがＱＬＣモードであっても、その実ページを提供するフラッシュパッケージ２３０（図２）の保証期間が完了するまでの間に、その実ページのデータ消去回数がＱＬＣモードのデータ消去回数の上限値に到達することはないと予測される。そこでページセルモード選択実行部１５２００は、このステップ１７００４において、ステップ１７００２で最初に肯定結果が得られた実ページよりも前に並べられている各実ページのうち、現在、セルモードがＴＬＣモードに設定されている実ページをすべて特定する。この特定は、対応する実ページの実ページ情報１５０００（図２９）のページセルモード欄１５００１（図２９）に格納されたセルモードがＴＬＣモードの実ページを特定することにより行われる。
【０２７１】
ステップ１７００５：ページセルモード選択実行部１５２００は、ステップ１７００３で特定した実ページの集合と、ステップ１７００４で特定した実ページの集合との間で、セルモードを交換するようフラッシュパッケージ２３０に要求する。具体的に、ページセルモード選択実行部１５２００は、当該フラッシュパッケージグループ２８０のフラッシュパッケージ２３０のアドレスを変更する。この後、ページセルモード選択実行部１５２００は、それぞれのフラッシュパッケージに、セルモードの交換（ＱＬＣモードからＴＬＣモードに変更するアドレス、ＴＬＣモードからＱＬＣモードに変更するアドレス）を要求して、処理の完了を待つ。
【０２７２】
なお、本実施の形態では、それぞれのフラッシュパッケージ２３０には、１２の倍数の仮想ブロックを指定して上述のセルモードの交換を要求するものとする。すなわち、３個のＱＬＣモードの実ブロックに割り当てられた１２個の仮想ブロックと、４個のＴＬＣモードの実ブロックに割り当てられた１２個の仮想ブロックとのセルモードが交換されることになる。この後、ページセルモード選択実行部１５２００は、交換を行った実ページに対応する実ページ情報１５０００（図２９）のページセルモード欄１５００１に格納されているセルモードを更新する。交換を行っているだけなので、フラッシュパッケージ２３０で、ＱＬＣモードで動作させる実ブロック、ＴＬＣモードで動作させる実ブロックの数は、変化しないことになる。
【０２７３】
ステップ１７００６：ページセルモード選択実行部１５２００は、ステップ１７００５におけるセルモードの交換だけでは不十分で、新たにＱＬＣモードで動作している実ページを、ＴＬＣモードで動作する実ページに変更する必要があるかをチェックする。そしてページセルモード選択実行部１５２００は、この判定で否定結果を得た場合にはこのセルモード選択処理を終了し（ステップ１７００６：ＮＯ）、この判定で肯定結果を得た場合にはステップ１７００７に進む（ステップ１７００６：ＹＥＳ）。
【０２７４】
ステップ１７００７：ステップ１７００６で肯定結果を得た場合、一部の実ページをＴＬＣモードで動作させる必要がある。このためページセルモード選択実行部１５２００は、ＴＬＣモードで動作させる必要がある実ページで、現在ＱＬＣモードで動作させている実ページを特定する。
【０２７５】
ステップ１７００８：ページセルモード選択実行部１５２００は、ステップ１７００７で特定した実ページの集合のアドレスから、当該フラッシュパッケージグループ２８０のフラッシュパッケージ２３０のアドレスに変換する。
【０２７６】
ステップ１７００９：ページセルモード選択実行部１５２００は、アドレスを指定して、そのアドレスのセルのセルモードをＴＬＣモードに変更するよう対応するフラッシュパッケージ２３０に要求する。なお、本実施の形態では、それぞれのフラッシュパッケージ２３０には、１２の倍数の仮想ブロックが指定されるものとする。
【０２７７】
ステップ１７０１０：ページセルモード選択実行部１５２００は、ステップ１７００９においてセルモードの変更を要求したフラッシュパッケージ２３０から処理が完了した旨の通知が与えられるのを待つ。
【０２７８】
ステップ１７０１１：ページセルモード選択実行部１５２００は、セルモードをＴＬＣモードに変更した各実ページについて、これら実ページの実ページ情報１５０００（図２９）のページセルモード欄１５００１（図２９）に格納されているセルモードをＴＬＣモードに変更する。またページセルモード選択実行部１５２００は、仮想容量を変化するよう要求があった場合には、これを記憶して、処理を完了させる。
【０２７９】
図２３との対応部分に同一符号を付して示す図３３は、本実施の形態においてフラッシュパッケージ２３０のパッケージメモリ３２０（図３）に格納されたプログラム群の構成を示す。第１の実施の形態と異なるのは、データライト要求受付け部１８２００の処理内容が第１の実施の形態によるデータライト要求受付け部９１００（図２３）の処理内容と相違する点と、仮想容量判定処理部９４００（図２３）に代えて、セルモード変更処理実行部１８０００及びセルモード交換処理部１８１００が格納されている点である。
【０２８０】
図３４は、図２５Ｂについて上述した第１の実施の形態のデータライト処理に代えて本実施の形態のデータライト要求受付け部１８２００により実行されるデータライト処理の一部を示す。図２５Ａについて上述したデータライト処理の他の部分については、本実施の形態のデータライト要求受付け部１８２００も第１の実施の形態のデータライト要求受付け部９１００と同様に処理するため、ここでの説明は省略する。
【０２８１】
図３４について、本実施の形態のデータライト要求受付け部１８２００は、ステップ１８００１〜ステップ１８０１０を、図２５Ｂについて上述した第１の実施の形態のデータライト処理のステップ１１０１４〜ステップ１１０２３と同様に処理する。またデータライト要求受付け部１８２００は、この後、仮想容量変更判定実行部１２５００（図２３）をコールすることなく、ステップ１８０１１を図２５Ｂのステップ１１０２５と同様に処理し、この後、このデータライト処理を終了する。
【０２８２】
セルモード交換処理部１８１００は、セルモードをＱＬＣモードからＴＬＣモードに変更されるよう要求された仮想ブロックと、セルモードをＴＬＣモードからＱＬＣモードに変更するよう要求された仮想ブロックとの各仮想ブロックについて、その仮想ブロック情報３２００（図１４）のセルモード変更フラグ欄３２０７（図１４）に格納されたセルモード変更フラグをオンに設定する処理を実行するだけであるため、セルモード交換処理部１８１００の処理に関する詳細な説明については省略する。
【０２８３】
図３５は、図３２について上述したライトアフタ処理のステップ１７００５においてページセルモード選択実行部１５２００からセルモードの交換を要求されたセルモード変更処理実行部１８０００により実行されるセルモード変更処理の処理手順を示す。ここでは、ページセルモード選択実行部１５２００から交換対象として12の倍数の仮想ブロックが指定されるものとする。
【０２８４】
ステップ１９０００：セルモード変更処理実行部１６０００は、かかる要求において指定されたアドレスから、どの仮想ブロックのセルモードをＱＬＣモードからＴＬＣモードに変更する必要があるかを認識する。この場合、ＱＬＣモードで動作している３つの実ブロックが割り当てられた１２個の仮想ブロックに格納されたデータをＴＬＣモードで動作する４つの実ブロックに移動する処理を、１回以上実行することになる。
【０２８５】
ステップ１９００１：必要な数のＴＬＣモードで動作させる空き実ブロックを確保する必要がある。このためセルモード変更処理実行部１６０００は、データを移動させる仮想ブロックの集合から必要な実ページの数を算出する。この数の実ページ情報１５０００（図２９）を、ＱＬＣ空き実ブロック情報ポインタ３４００（図１１）で管理しているＱＬＣ空き実ブロック情報管理キュー３４０１（図１６）から、ＴＬＣ空き実ブロック情報ポインタ３５００（図１１）で管理しているＴＬＣ空き実ブロック情報管理キュー３５０１に移す。
【０２８６】
またセルモード変更処理実行部１６０００は、このように実ページ情報１５０００を移動させた実ページのセルモードをＱＬＣモードからＴＬＣモードに変更する。加えて、セルモード変更処理実行部１６０００は、これらの実ページについて、その実ページ情報１５０００のページセルモード欄１５００１（図２９）に格納されているセルモードをＴＬＣモードに変更する。さらにセルモード変更処理実行部１６０００は、これら実ページを構成する各実ブロックについて、その実ブロック情報３３００（図１５）の実ブロック内空き容量欄３３０４に格納されている容量を、セルモードがＴＬＣモードのときのブロックサイズに応じた容量に変更する。
【０２８７】
ステップ１９００２：ＱＬＣモードで動作している１２個の仮想ブロックのデータを、ＴＬＣモードの実ページに移すため、セルモード変更処理実行部１６０００は、仮想ブロック移動処理部９５００（図３３）をコールする。仮想ブロック移動処理部９５００の処理については、第１の実施の形態について上述した通りであるので、ここでの説明は省略する。
【０２８８】
ステップ１９００３：セルモード変更処理実行部１６０００は、移動対象のすべての仮想ブロックについて移動し終えたか否かを判定する。セルモード変更処理実行部１６０００は、この判定において肯定否定結果を得た場合には、ステップ１９００２に戻って、再度、仮想ブロック移動処理部９５００をコールする（ステップ１９００３：ＮＯ）。またセルモード変更処理実行部１６０００は、この判定で肯定結果を得た場合にはステップＳ１９００４に進む（ステップ１９００３：ＹＥＳ）。
【０２８９】
ステップ１９００４：セルモード変更処理実行部１６０００は、ＱＬＣ空き実ブロック情報ポインタ３４００（図１１）で管理しているＱＬＣ空き実ブロック情報管理キュー３４０１（図１６）から、ＴＬＣ空き実ページ情報ポインタ３５００（図１１）で管理しているＴＬＣ空き実ブロック情報管理キュー３５０１（図１７）で、空いた状態になる仮想ブロックの数を確認する。十分な数の仮想ブロックがない場合、セルモード変更処理実行部１６０００は、新たな仮想容量を設定する。なお、セルモード変更処理実行部１６０００は、そのフラッシュパッケージ２３０の仮想容量を変化させる場合、新たな仮想容量とこれまでの容量（対応するパッケージ情報３０００（図１２）のパッケージ容量欄３００２（図１２）に格納されていた値）を、ストレージコントローラ２００に報告する。またセルモード変更処理実行部１６０００は、かかるパッケージ容量欄３００２に新たな仮想容量を設定する。そしてセルモード変更処理実行部１６０００は、このセルモード変更処理を終了する。
【０２９０】
本実施の形態によれば、各仮想ページにそれぞれ割り当てられた実ページをなるべく１つのセルに格納可能な情報量が多いＱＬＣモードで動作させることができるため、第１の実施の形態により得られる効果と同様の効果を得ることができる。
【０２９１】
（３）他の実施の形態
なお上述の第１の実施の形態においては、仮想ブロック（実ブロック）ごとに、当該仮想ブロック（実ブロック）の劣化の度合いでなる劣化度が現在のセルモードのままとした場合に目標期間内に劣化度の限界に到達するかを予測する予測部としての機能をフラッシュパッケージ２３０（図３）のパッケージプロセッサ３１０（図３）に搭載するようにした場合について述べたが、本発明はこれに限らず、かかる機能をストレージコントローラ２００（図２）に搭載するようにしてもよい。また第２の実施の形態においては、仮想ページ（実ページ）ごとに、当該仮想ページ（実ページ）の劣化の度合いでなる劣化度が現在のセルモードのままとした場合に目標期間内に劣化度の限界に到達するかを予測する予測部としての機能をストレージコントローラ２００に搭載するようにした場合について述べたが、本発明はこれに限らず、かかる機能をフラッシュパッケージ２３０のパッケージプロセッサ３１０に搭載するようにしてもよい。
【０２９２】
また上述の第１及び第２の実施の形態においては、セルモードがＱＬＣモードの実ブロック又は実ページをＴＬＣモードに変更する際、変更前の実ブロック又は実ページに格納されていたデータを同一のフラッシュパッケージ２３０や同一のフラッシュパッケージグループ２８０（図２）内の他の実ブロック又は実ページに移動させるようにした場合について述べたが、本発明はこれに限らず、かかるデータを他のフラッシュパッケージ２３０内や他のフラッシュパッケージグループ２８０内の実ブロック又は実ページに移動させるようにしてもよい。
【０２９３】
さらに上述の第１及び第２の実施の形態においては、ブロックやページに対するデータ書込み量に基づいて、フラッシュパッケージ２３０（図３）の保証期間内におけるブロックやページごとのデータ消去回数を推定するようにした場合について述べたが、本発明はこれに限らず、例えば、ブロックやページに対する単位時間当たりのデータ消去回数をカウントし、当該カウント結果に基づいてフラッシュパッケージ２３０の保証期間内におけるブロックやページごとのデータ消去回数を推定するようにしてもよい。
【０２９４】
さらに上述の第１及び第２の実施の形態においては、仮想ブロックや仮想ページの劣化度をフラッシュパッケージ２３０の保証期間内における仮想ブロックや仮想ページに対するデータ書込み量に基づいて予測するようにした場合について述べたが、本発明はこれに限らず、例えば、フラッシュパッケージ２３０内で管理している各仮想ブロックに対する単位時間当たりのライト回数（ライト頻度）に基づいてこれら仮想ブロックや仮想ページの劣化度を予測するようにしてもよく、仮想ブロックや仮想ページの劣化度の予測方法としては、この他種々の方法を広く適用することができる。なおフラッシュパッケージ２３０内で管理している各仮想ブロックに対する単位時間当たりのライト回数（ライト頻度）に基づいてこれら仮想ブロックや仮想ページの劣化度を予測するようにしても第１及び第２の実施の形態と同様の効果を得ることができる。
【０２９５】
この場合、「劣化度の限界」は、その劣化度の定義により決定される。例えば、「劣化度」をブロックやページに対するデータの上書き回数とする場合には、そのブロックやページについて予め測定等により決定された上書き回数の上限回数が「劣化度の限界」ということになる。従って、この場合、仮想容量判定処理部９４００（図２３）やページセルモード選択実行部１５２００（図３０）は仮想ブロックや仮想ページに対するデータのライト回数（上書き回数）がかかる保証期間内に予め計測等により求めたライト回数（上書き回数）の限界に到達するか否かを予測することになる。
【０２９６】
さらに上述の第１及び第２の実施の形態においては、フラッシュパッケージ２３０の保証期間を目標期間とするようにした場合について述べたが、本発明はこれに限らず、フラッシュパッケージ２３０の保証期間以外の期間を目標期間とするようにしてもよい。
【０２９７】
さらに上述の第１及び第２の実施の形態においては、所定大きさの記憶領域ごとに、セルのモードを第１のモードのままで使用した場合に、当該記憶領域の劣化度が目標期間内に当該劣化度の限界に到達するか否かを予測する予測部と、予測部の予測結果に基づいて、セルのモードを前記第１のモードから第２のモードに変更する記憶領域を決定する決定部と、決定部の決定結果に従って、該当する記憶領域のセルのモードを第２のモードに変更するモード変更部との機能を仮想容量判定処理部９４００（図２３）やページセルモード選択実行部１５２００（図３０）に持たせるようにした場合について述べたが、本発明はこれに限らず、これら予測部、決定部及びモード変更部の機能を持つプログラムをそれぞれ独立に設けるようにしてもよい。
【産業上の利用可能性】
【０２９８】
本発明は、１又は複数のフラッシュチップが収納されたフラッシュパッケージと、上位装置からの要求に応じてフラッシュパッケージにデータをリード／ライトするストレージコントローラとを有するストレージシステムに広く適用することができる。
【符号の説明】
【０２９９】
１……情報システム、１００……ストレージシステム、１１０……ホスト、２００……ストレージコントローラ、２３０……フラッシュパッケージ、２６０……プロセッサ、２８０……フラッシュパッケージグループ、３００……フラッシュチップ、３１０……パッケージプロセッサ、３２０……パッケージメモリ、３３０……バッファ、３５０……パッケージバス転送装置、２０００……論理ボリューム情報、２１００，１５０００……実ページ情報、２２００……空き実ページ情報ポインタ、２２０１……空き実ページ情報管理キュー、２３００……フラッシュパッケージグループ情報、２５００……フラッシュパッケージ情報、２６００……仮想ページ容量情報、２７００……使用不可実ページ情報ポインタ、２７０２……使用不可実ページ情報管理キュー、３０００……パッケージ情報、３１００……チップ情報、３２００……仮想ブロック情報、３３００……実ブロック情報、３４００……ＱＬＣ空き実ブロック情報ポインタ、３４０１……ＱＬＣ空き実ブロック情報管理キュー、３５００……ＴＬＣ空き実ブロック情報ポインタ、３５０１……ＴＬＣ空き実ブロック情報管理キュー、４０００……リード処理実行部、４１００……ライト要求受付け部、４２００，１５１００……ライトアフタ処理実行部、４３００……実ページ移動処理実行部、９０００……データリード処理実行部、９１００，１８２００……データライト要求受付け部、９２００……仮想ブロック解放処理実行部、９３００……仮想ブロック格納処理実行部、９４００……仮想容量判定処理部、９５００……仮想ブロック移動処理部、１５２００……ページセルモード選択実行部、１８０００……セルモード変更処理実行部、１８１００……セルモード交換処理部。
【図１】
2019086974.tif 000004
【図２】
2019086974.tif 000005
【図３】
2019086974.tif 000006
【図４】
2019086974.tif 000007
【図５】
2019086974.tif 000008
【図６】
2019086974.tif 000009
【図７】
2019086974.tif 000010
【図８】
2019086974.tif 000011
【図９】
2019086974.tif 000012
【図１０】
2019086974.tif 000013
【図１１】
2019086974.tif 000014
【図１２】
2019086974.tif 000015
【図１３】
2019086974.tif 000016
【図１４】
2019086974.tif 000017
【図１５】
2019086974.tif 000018
【図１６】
2019086974.tif 000019
【図１７】
2019086974.tif 000020
【図１８】
2019086974.tif 000021
【図１９】
2019086974.tif 000022
【図２０】
2019086974.tif 000023
【図２１】
2019086974.tif 000024
【図２２】
2019086974.tif 000025
【図２３】
2019086974.tif 000026
【図２４】
2019086974.tif 000027
【図２５Ａ】
2019086974.tif 000028
【図２５Ｂ】
2019086974.tif 000029
【図２６】
2019086974.tif 000030
【図２７】
2019086974.tif 000031
【図２８】
2019086974.tif 000032
【図２９】
2019086974.tif 000033
【図３０】
2019086974.tif 000034
【図３１】
2019086974.tif 000035
【図３２】
2019086974.tif 000036
【図３３】
2019086974.tif 000037
【図３４】
2019086974.tif 000038
【図３５】
2019086974.tif 000039