(57)【要約】【課題】書き込み動作を実行中のダイへのリード要求の発生に対する耐性を改善することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、不揮発性メモリ内の第１領域に対応するデータ数およびパリティ数を示すｋおよびｍの組と、不揮発性メモリ内の第２領域に対応するデータ数およびパリティ数を示すｋ’およびｍ’の組とを管理する。前記メモリシステムは、第１領域に対する書き込み要求に基づいて、ｋ個のデータ部とｍ個のパリティとを、ｋ＋ｍ個の異なるダイから一つずつ選出されるｋ＋ｍ個の物理ブロックに書き込み、第２領域に対する書き込み要求に基づいて、ｋ’個のデータ部とｍ’個のパリティとを、ｋ’＋ｍ’個の異なるダイから一つずつ選出されるｋ’＋ｍ’個の物理ブロックに書き込む。【選択図】図４
2018073312.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
並列動作可能な複数の不揮発性メモリダイを備える不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
ＲＡＩＤの一つのパリティグループを構成するデータ部の数およびパリティの数を前記不揮発性メモリ内の領域毎に指定する前記ホストからの要求に基づいて、前記不揮発性メモリ内の第１領域に対応するデータ数およびパリティ数を示すｋおよびｍの組と、前記ｋおよびｍの組みと異なるｋ’およびｍ’の組であって、前記不揮発性メモリ内の第２領域に対応するデータ数およびパリティ数を示すｋ’およびｍ’の組とを管理し、
前記第１領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるｋ個のデータ部と、前記ｋ個のデータ部から算出されるｍ個のパリティとを、前記複数の不揮発性メモリダイ内のｋ＋ｍ個の異なる不揮発性メモリダイから一つずつ選出されるｋ＋ｍ個の物理ブロックに跨がって書き込み、
前記第２領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるｋ’個のデータ部と、前記ｋ’個のデータ部から算出されるｍ’個のパリティとを、前記複数の不揮発性メモリダイ内のｋ’＋ｍ’個の異なる不揮発性メモリダイから一つずつ選出されるｋ’＋ｍ’個の物理ブロックに跨がって書き込むように構成されている、メモリシステム。
【請求項２】
前記ｋおよび前記ｋ’は２以上の整数、前記ｍは１以上の整数、前記ｍ’は前記ｍよりも小さい０以上の整数である請求項１記載のメモリシステム。
【請求項３】
前記ｋ’＋ｍ’に対する前記ｋ’の比率は、前記ｋ＋ｍに対する前記ｋの比率よりも大きい請求項１記載のメモリシステム。
【請求項４】
前記第１領域に対する前記書き込み要求は、前記第１領域の識別子と、前記第１領域における第１書き込み先仮想ブロックの識別子とを含み、前記第２領域に対する前記書き込み要求は、前記第２領域の識別子と前記第２領域における第２書き込み先仮想ブロックの識別子とを含み、
前記コントローラは、
前記第１領域の識別子と前記第１書き込み先仮想ブロックの識別子とを含む前記書き込み要求が前記ホストから受信された場合、前記複数の不揮発性メモリダイ内のｋ＋ｍ個の異なる不揮発性メモリダイから一つずつ選出されるｋ＋ｍ個の物理ブロックを前記第１領域の前記第１書き込み先仮想ブロック用に割り当て、
前記ホストから受信される連続するｋ個のデータ部と前記ｋ個のデータ部のためのｍ個のパリティとを、前記第１領域の前記第１書き込み先仮想ブロック用に割り当てられた前記ｋ＋ｍ個の物理ブロックに跨がって書き込むように構成されている請求項１記載のメモリシステム。
【請求項５】
前記コントローラは複数のネームスペースを管理するように構成され、
前記第１領域は前記複数のネームスペース内の第１ネームスペースであり、前記第２領域は前記複数のネームスペース内の第２ネームスペースであり、
前記第１領域に対する前記書き込み要求は、前記第１ネームスペースの識別子を含み、前記第２領域に対する前記書き込み要求は、前記第２ネームスペースの識別子を含む請求項１記載のメモリシステム。
【請求項６】
前記第１領域は第１論理アドレス範囲を示し、前記第２領域は第２論理アドレス範囲を示し、
前記第１領域に対する前記書き込み要求は、前記第１論理アドレス範囲に属する論理アドレスを書き込み先論理アドレスとして含み、前記第２領域に対する前記書き込み要求は、前記第２論理アドレス範囲に属する論理アドレスを書き込み先の論理アドレスとして含む請求項１記載のメモリシステム。
【請求項７】
前記コントローラは、前記不揮発性メモリの空き容量が閾値よりも少なくなった場合、前記ｍ個のパリティの少なくとも一つまたは前記ｍ’個のパリティの少なくとも一つを前記不揮発性メモリから削除して前記不揮発性メモリの空き容量を増やすように構成されている請求項１記載のメモリシステム。
【請求項８】
前記コントローラは、前記不揮発性メモリから削除されるパリティを、前記メモリシステム内のランダムアクセスメモリ上のキャッシュエリアに保存する請求項７記載のメモリシステム。
【請求項９】
前記コントローラは、前記不揮発性メモリから削除されたパリティが属する第１パリティグループ内のデータ部のリードが前記ホストから要求され、且つ前記リードの対象のデータ部が格納されている不揮発性メモリダイが書き込み処理を実行中である場合、前記削除されたパリティおよび前記リードの対象のデータ部を除く前記第１パリティグループの内容を前記不揮発性メモリから読み出し、前記読み出された前記第１パリティグループの内容を使用して前記リードの対象のデータ部を復元し、前記復元されたリードの対象のデータ部と前記読み出された前記第１パリティグループの内容を使用して前記削除されたパリティを再算出し、前記削除されたパリティを保存するために、前記再算出されたパリティを前記メモリシステム内のランダムアクセスメモリ上のキャッシュエリアに保存する請求項７記載のメモリシステム。
【請求項１０】
前記コントローラは、前記不揮発性メモリまたは前記キャッシュエリアに格納されているパリティそれぞれの削除順序を決定し、リード対象領域を予告する通知を前記ホストから受信した場合、前記リード対象領域のパリティに関する削除順序を変更することによって前記リード対象領域のパリティを前記不揮発性メモリまたは前記キャッシュエリアに優先的に残すように構成されている請求項８記載のメモリシステム。
【請求項１１】
前記コントローラは、前記キャッシュエリアからパリティを削除する場合、削除対象のパリティとこの削除対象のパリティが属するパリティグループの識別子とを前記ホストに通知するように構成されている請求項８記載のメモリシステム。
【請求項１２】
前記コントローラは、前記ホストから受信される書き込み要求それぞれの実行タイミングをスケジューリングすることによって、前記第１領域に対応する前記ｋ＋ｍ個の不揮発性メモリダイに対して同時に実行される書き込み動作の数を前記ｍ以下に制限するように構成されている請求項１記載のメモリシステム。
【請求項１３】
並列動作可能な複数の不揮発性メモリダイを備える不揮発性メモリを制御する制御方法であって、
ＲＡＩＤの一つのパリティグループを構成するデータ部の数およびパリティの数を前記不揮発性メモリ内の領域毎に指定するホストからの要求に基づいて、前記不揮発性メモリ内の第１領域に対応するデータ数ｋおよびパリティ数ｍと、前記不揮発性メモリ内の第２領域に対応するデータ数ｋ’およびパリティ数ｍ’とを管理することと、
前記第１領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるｋ個のデータ部と、前記ｋ個のデータ部のためのｍ個のパリティとを、前記複数の不揮発性メモリダイ内のｋ＋ｍ個の異なる不揮発性メモリダイから一つずつ選出されるｋ＋ｍ個の物理ブロックに跨がって書き込むことと、
前記第２領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるｋ’個のデータ部と、前記ｋ’個のデータ部のためのｍ’個のパリティとを、前記複数の不揮発性メモリダイ内のｋ’＋ｍ’個の異なる不揮発性メモリダイから一つずつ選出されるｋ’＋ｍ’個の物理ブロックに跨がって書き込むこととを具備する制御方法。
【請求項１４】
前記ｋおよび前記ｋ’は２以上の整数、前記ｍは１以上の整数、前記ｍ’は前記ｍよりも小さい０以上の整数である請求項１３記載の制御方法。
【請求項１５】
前記ｋ’＋ｍ’に対する前記ｋ’の比率は、前記ｋ＋ｍに対する前記ｋの比率よりも大きい請求項１３記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを備えるメモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００４】
ＳＳＤに搭載されるＮＡＮＤ型フラッシュメモリは、複数のＮＡＮＤ型フラッシュメモリダイから構成されるのが一般的である。これらダイは並列に動作することができる。
【０００５】
しかし、一つのダイに対する処理（書き込み動作、読み出し動作、等）は並列には実行されず、逐次的に実行される。このため、例えば、データ書き込み動作中のダイへのリード要求が発生した場合には（以下、ダイ衝突という）、そのリード要求の応答時間（リードレイテンシ）は通常のリードレイテンシよりも非常に長くなる場合がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２０１３／００１９０５７号明細書
【非特許文献】
【０００７】
【非特許文献１】I. S. Reed 外著, "Polynomial Codes Over Certain Finite Fields", Journal of the Society for Industrial and Applied Mathematics, Vol. 8, No. 2 (1960年6月), p. 300-304
【非特許文献２】Maheswaran Sathiamoorthy外著, "XORing Elephants: Novel Erasure Codes for Big Data", Proceedings of the VLDB Endowment, Vol. 6, No. 5, 2013年3月, p. 325-336
【発明の概要】
【発明が解決しようとする課題】
【０００８】
したがって、ＳＳＤの性能を改善するためには、書き込み動作を実行中のダイへのリード要求が発生するというダイ衝突に対する耐性を改善するための新たな技術の実現が必要とされる。
【０００９】
本発明が解決しようとする課題は、書き込み動作を実行中のダイへのリード要求の発生に対する耐性を改善することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【００１０】
実施形態によれば、ホストに接続可能なメモリシステムは、並列動作可能な複数の不揮発性メモリダイを備える不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、ＲＡＩＤの一つのパリティグループを構成するデータ部の数およびパリティの数を前記不揮発性メモリ内の領域毎に指定する前記ホストからの要求に基づいて、前記不揮発性メモリ内の第１領域に対応するデータ数およびパリティ数を示すｋおよびｍの組と、前記ｋおよびｍの組みと異なるｋ’およびｍ’の組であって、前記不揮発性メモリ内の第２領域に対応するデータ数およびパリティ数を示すｋ’およびｍ’の組とを管理する。前記コントローラは、前記第１領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるｋ個のデータ部と、前記ｋ個のデータ部から算出されるｍ個のパリティとを、前記複数の不揮発性メモリダイ内のｋ＋ｍ個の異なる不揮発性メモリダイから一つずつ選出されるｋ＋ｍ個の物理ブロックに跨がって書き込む。前記コントローラは、前記第２領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるｋ’個のデータ部と、前記ｋ’個のデータ部から算出されるｍ’個のパリティとを、前記複数の不揮発性メモリダイ内のｋ’＋ｍ’個の異なる不揮発性メモリダイから一つずつ選出されるｋ’＋ｍ’個の物理ブロックに跨がって書き込む。
【図面の簡単な説明】
【００１１】
【図１】実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】同実施形態のメモリシステム内のＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリダイとの関係を示すブロック図。
【図３】書き込み動作を実行中のダイへのリード要求が発生するというダイ衝突の例を示す図。
【図４】同実施形態のメモリシステムによって領域毎に管理および制御されるＲＡＩＤ構成の例を示す図。
【図５】図同実施形態のメモリシステムによって管理される領域管理テーブルを示す図。
【図６】同実施形態のメモリシステムによって管理されるＮＡＮＤ構造情報を示す図。
【図７】同実施形態のメモリシステムによって管理される仮想ブロック管理テーブルを示す図。
【図８】ある仮想ブロックに割り当てられる、データ用の物理ブロックの集合およびパリティ用の物理ブロックの集合の例を示す図。
【図９】同実施形態のメモリシステムによって実行される仮想ブロックアクセス動作を説明するための図。
【図１０】同実施形態のメモリシステムによって管理される領域管理テーブルの例を示す図。
【図１１】同実施形態のメモリシステムによって管理される仮想ブロック管理テーブルの例を示す図。
【図１２】同実施形態のメモリシステムによって複数の物理ブロックに分散して書き込まれるデータ部の集合とパリティの集合とを説明するための図。
【図１３】一つの仮想ブロックに割り当てられる複数の物理ブロックが異なるダイから一つずつ選出される様子を示す図。
【図１４】同実施形態のメモリシステムによって実行される仮想ブロックアクセス動作を説明するための図。
【図１５】同実施形態のメモリシステムによって管理される複数の領域とリードレイテンシ／容量効率との関係を示す図。
【図１６】同実施形態のメモリシステムによって実行される領域宣言処理および書き込み処理の処理シーケンスを示す図。
【図１７】同実施形態のメモリシステムによって実行されるＲＡＩＤリード処理の手順を示すフローチャート。
【図１８】同実施形態のメモリシステムによって実行されるパリティ削除処理を説明するための図。
【図１９】図１８のパリティ削除処理時に同実施形態のメモリシステムによって実行される仮想ブロック管理テーブルの更新処理を示す図。
【図２０】同実施形態のメモリシステムによって実行されるパリティ削除処理の手順を示すフローチャート。
【図２１】同実施形態のメモリシステム内のＤＲＡＭ上のパリティキャッシュにパリティをキャッシュする処理を説明するための図。
【図２２】図２１のパリティキャッシュのエントリの構成例を示す図。
【図２３】同実施形態のメモリシステムによって実行されるパリティ削除およびキャッシュフィル処理の手順を示すフローチャート。
【図２４】同実施形態のメモリシステムによって実行されるパリティ削除およびキャッシュフィル処理の別の手順を示すフローチャート。
【図２５】同実施形態のメモリシステムによって実行されるパリティ削除順変更処理を説明するための図。
【図２６】削除されたパリティを同実施形態のメモリシステムからホストに通知する処理を説明するための図。
【図２７】同実施形態のメモリシステムからホストに対して削除されたパリティを通知する処理を説明するための図。
【図２８】同実施形態のメモリシステムによって実行されるパリティ削除およびパリティ通知処理の手順を示すフローチャート。
【図２９】同実施形態のメモリシステムによって実行されるパリティ削除およびパリティ通知処理の別の手順を示すフローチャート。
【図３０】ホストによって実行されるリード要求送信処理の手順を示すフローチャート。
【図３１】ホストによって実行されるパリティ保護処理の手順を示すフローチャート。
【図３２】同実施形態のメモリシステムによって実行される書き込みスロットリング処理を説明するための図。
【図３３】同実施形態のメモリシステムに適用可能な二次元パリティの例を示す図。
【図３４】ホストの構成例を示すブロック図。
【図３５】ホストと同実施形態のメモリシステムとを含むコンピュータの構成例を示す図。
【発明を実施するための形態】
【００１２】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、一実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１３】
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤ型フラッシュメモリを備えたソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１４】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、ＳＳＤ３をアクセスする情報処理装置（コンピューティングデバイス）である。ホスト２は、大量且つ多様なデータをＳＳＤ３に保存するストレージサーバ（サーバ）であってもよいし、パーソナルコンピュータであってもよい。
【００１５】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１６】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等を使用し得る。
【００１７】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。ＳＳＤ３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。ＮＡＮＤ型フラッシュメモリ５は、メモリセルアレイを含む。このメモリセルアレイは、多数の物理ブロックＢ０〜Ｂｍ−１を含む。物理ブロックＢ０〜Ｂｍ−１は、消去単位として機能する。物理ブロックは「消去ブロック」、または単に「物理消去ブロック」と称されることもある。
【００１８】
物理ブロックＢ０〜Ｂｍ−１は多数のページ（物理ページ）を含む。つまり、物理ブロックＢ０〜Ｂｍ−１の各々は、ページＰ０〜Ｐｎ−１を含む。ＮＡＮＤ型フラッシュメモリ５においては、データのリードおよびデータのライトはページ単位で実行される。データを消去するための消去動作は物理ブロック（消去ブロック）単位で実行される。
【００１９】
コントローラ４は、Ｔｏｇｇｌｅ、ＯＮＦＩのようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。
【００２０】
ＮＡＮＤ型フラッシュメモリ５は、図２に示すように、複数のＮＡＮＤ型フラッシュメモリダイ（不揮発性メモリダイ）を含む。個々のダイは独立して動作可能である。このため、ダイは、並列動作可能な最小単位として機能する。なお、ダイは、書き込み動作、読み出し等の動作を互いに独立して実行可能な並列動作単位として機能すればよいので、例えば、一つのダイに含まれる複数のプレーンが書き込み動作、読み出し等の動作を互いに独立して実行可能であれば、これらプレーンをダイ（並列動作単位）として転用可能である。
【００２１】
各ＮＡＮＤ型フラッシュメモリダイは、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。このメモリセルアレイは、複数の物理ブロックによって編成される。各物理ブロックは多数のページによって編成される。図２においては、ＮＡＮＤインタフェース１３に８個のチャンネル（Ｃｈ．１〜Ｃｈ．８）が接続されており、８個のチャンネル（Ｃｈ．１〜Ｃｈ．８）の各々に４つのＮＡＮＤ型フラッシュメモリダイが接続されている場合が例示されている。各チャンネルは、対応するＮＡＮＤ型フラッシュメモリダイと通信するための通信線（メモリバス）を含む。コントローラ４の制御の下、ＮＡＮＤインタフェース１３は、８個のチャンネル（Ｃｈ．１〜Ｃｈ．８）を介して３２個のＮＡＮＤ型フラッシュメモリダイをアクセスすることができる。なお、ＳＳＤ３に搭載されるＮＡＮＤ型フラッシュメモリダイの数は３２個に限定されず、任意の数のＮＡＮＤ型フラッシュメモリダイがＳＳＤ３に搭載され得る。また、チャンネルの数も８個に限定されず、任意の数のチャンネルが使用され得る。
【００２２】
ところで、近年、ＳＳＤなどに代表される高速なストレージデバイスに対する読み込み応答性能への要求が高まっている。特に、テールレイテンシ（ｔａｉｌ  ｌａｔｅｎｃｙ）と呼ばれる、アクセス要求に対する応答時間（レイテンシ）の平均値に対して極端に遅くなるような応答が問題となることがあるとされており、特にリード要求に対する応答時間（リードレイテンシ）の予測性を高めることが求められる。
【００２３】
リードレイテンシが変動する要因の一つとして、ＮＡＮＤフラッシュメモリへのアクセスの衝突がある。一つのＮＡＮＤ型フラッシュメモリダイ（単にダイともいう）に対する処理（書き込み動作、読み出し動作、消去動作）は並列化されず、逐次的に処理される。すなわち、ダイは並列実行の単位であり、多くのダイがあれば、チャンネルの帯域の制限はあるが、ダイの数と同数の処理を並列に行うことができる。
【００２４】
一般的に、ＮＡＮＤ型フラッシュメモリへの書き込み動作には読み出し動作に対してより長い時間がかかる。よって、書き込み動作中のダイに対してリード要求が発生した場合（ダイ衝突（ｄｉｅ  ｃｏｌｌｉｓｉｏｎ））、そのリード要求に対するレイテンシは通常よりも非常に長くなり、これがリードレイテンシ変動の一因となる。
【００２５】
また、ＮＡＮＤ型フラッシュメモリにおいては、消去状態の物理ブロックにのみ書き込みが可能となる。このため、最初の書き込みの前に物理ブロック単位で消去処理を行わなければならない。この消去処理を行っているダイに対してリード要求が発生した場合（ダイ衝突）も、そのリードのレイテンシは通常よりも非常に長くなる。
【００２６】
ホストからＳＳＤへの書き込みにおいて、データが書き込まれるべき記憶位置は、通常、論理ブロックアドレス（ＬＢＡ）と称される論理アドレスで指示される。
【００２７】
一方、どのＬＢＡがどのダイのどのブロックに割り当てられるかは、通常、ＳＳＤ内部で隠蔽されるためホストが知ることはできない。
【００２８】
よって、ホストが書き込みを行った場合、どのダイが書き込み動作中になっているかをホストは知ることができない。このため、ホストはどの要求がダイ衝突を招くかを知ることができない。
【００２９】
ダイ衝突は一種の障害としてとらえることができる。この障害は、複数のデータ部（データブロック）をグループ化し、このデータグループにパリティを与えることで解決することができる。これは、ＲＡＩＤなどで使用されている技術である。
【００３０】
あるデータグループにパリティが付加されている場合、このデータグループ内の一部のデータ部を読むことが出来ない場合であっても、このデータグループ内の他のデータ部それぞれとパリティとを使用して、この読むことが出来ないデータ部分を復元することが可能である。
【００３１】
本実施形態では、ＳＳＤ３は、ＳＳＤ３に書き込まれるデータグループ毎にこのデータグループの複数のデータ部からパリティを算出し、このデータグループ内の複数のデータ部とパリティとを異なるＮＡＮＤ型フラッシュメモリダイに跨がって書き込む。このように、ＳＳＤ３内部でデータグループ毎にパリティを保持することで、ダイ衝突を避けることが可能となる。
【００３２】
例えば、図３に示すような状況を考える。
【００３３】
図３では、４つのダイｄ１、ｄ２、ｄ３、ｄ４によって一つのＲＡＩＤグループが実現されている。ダイｄ１、ｄ２、ｄ３、およびｄ４には、データＤ１、Ｄ２、Ｄ３、およびパリティＰ１が格納されている。データＤ１、Ｄ２、Ｄ３、およびパリティＰ１は、パリティグループと称される。
【００３４】
いま、ダイｄ２が書き込み動作を実行中である場合を考える。このとき、ホスト２からダイｄ２に対するリード要求が到来したとする。ダイｄ２のデータＤ２を読むためには、ダイｄ２が処理している書き込み動作が完了することを待つ必要がある。
【００３５】
そこで、ＳＳＤ３は、ダイｄ２のデータＤ２を読まずに、他のダイｄ１、ｄ３、ｄ４からデータＤ１、データＤ３、パリティＰ１を読む。そして、ＳＳＤ３は、これらデータＤ１、データＤ３、パリティＰ１からデータＤ２を復元し、復元されたデータＤ２をホスト２に返す。これにより、ダイ衝突に対する耐性を高めることができる。
【００３６】
以下、一つのパリティグループに含まれる実データ数をｋ、パリティ数をｍで表す。例えば、前述のＤ１、Ｄ２、Ｄ３に対して１つのパリティＰ１が付与されている場合、ｋは３であり、ｍは１である。原理的には、ｋ及びｍは１以上の整数となるが、典型例では、ｋは２以上の整数、ｍは１以上の整数となる。
【００３７】
ｋ個のデータ部とｍ個のパリティとを含む、ｋ＋ｍの構成を有するパリティグループにおいては、最大でｍ個までのデータ部の消失に耐えることができる。つまり、あるパリティグループ内において、ｍ個までの同時のダイ衝突を回避することが可能である。
【００３８】
前例では、ダイｄ２に対するダイ衝突を回避する例を示したが、例えば、もしダイｄ２とダイｄ３の各々が書き込み動作を行っている場合には、ダイ衝突数がｍ（ここでは１）を超えるために、リード要求されたデータＤ１を復元することはできない。
【００３９】
なお、通常のＲＡＩＤにおいては、ＲＡＩＤ６のように、ｍが２までとなるのが通例であるが、例えば、リードソロモン（Ｒｅｅｄ  Ｓｏｌｏｍｏｎ）のような消失訂正符号を用いれば、２より大きい任意のｍを使用することができる。
【００４０】
ところで、パリティを用いたダイ衝突の回避には、容量効率の問題がある。
【００４１】
すなわち、ダイ衝突が起きた場合には、可能な限り少ない数のデータ部を読むことで、ダイ衝突が起きたダイ内の目的のデータを復元させたい。このためには、ｋを小さくする必要がある。しかし、ｋ＋ｍの一つのパリティグループにおいては、ユーザが使用可能なデータ数はｋであり、ＳＳＤが必要とする記憶領域はｋ＋ｍとなる。すなわち、ユーザが使用できる容量は、ＳＳＤの容量  ×  （ｋ／（ｋ＋ｍ））となる。よって、ｋが小さければ小さいほど、リードレイテンシは短くなるが、容量効率は悪くなる問題がある。また、ｍが大きければ大きいほど、ダイ衝突に対する耐性が高まる。しかし、ｍが大ければ大きいほど容量効率は悪くなる。
【００４２】
そこで、本実施形態に係るＳＳＤ３は、ホスト２がｋとｍの任意の組み合わせをＳＳＤ３内の領域毎に指定することを可能とし、これによって容量効率／ダイ衝突耐性に関して異なる特性を有する複数の領域（パリティを用いたダイ衝突回避読み込み可能領域）をＳＳＤ３内に共存させるための機能を有している。この機能は、以下、ＲＡＩＤ読み込み可能領域制御機能と称する。パリティを用いたダイ衝突回避読み込み可能領域は、ｋ＋ｍのＲＡＩＤ構成が適用された記憶領域を意味する。以後、パリティを用いたダイ衝突回避読み込み可能領域は、ＲＡＩＤ読み込み可能領域とも称する。
【００４３】
ホスト２は、一台のＳＳＤ３に対して任意のｋ＋ｍを動的に宣言し、複数のｋ＋ｍの構成を選択して使用することができる。これにより、ダイ衝突を気にしない、つまりリード要求に対するテールレイテンシがあまり問題とならないようなデータについては容量効率を優先し、そうでないデータについては容量効率を犠牲にしてリードレイテンシをできるだけ短くするということが１台のＳＳＤ３で実現可能となる。
【００４４】
また、ＲＡＩＤ読み込み可能領域制御機能は、ＮＡＮＤ型フラッシュメモリ５の空き容量を積極的に活用してパリティの数ｍを動的に制御することもできる。
【００４５】
この場合、ホスト２は、あるｋに対して最良でｍが３、最悪でｍが１、のようにｍの範囲（つまり最小のｍと最大のｍ）を指定してもよい。ＳＳＤ３は、例えば、ＮＡＮＤ型フラッシュメモリ５の空き容量に余裕があれば、ｋ＝７、ｍ＝３の組み合わせ、つまり７＋３のＲＡＩＤ構成を採用してもよい。そして、空き容量が低下するにつれて、ＳＳＤ３は、ＮＡＮＤ型フラッシュメモリ５からパリティを削除することによって、ｍの数を順次減らす。例えば、最初は、７＋３のＲＡＩＤ構成が採用されてもよく、後に、ＲＡＩＤ構成は、７＋２の構成に変更されてもよい。さらに後に、ＲＡＩＤ構成は、７＋１の構成に変更されてもよく、さらに後に、７＋０の構成に変更されてもよい。
【００４６】
このように、パリティグループ内のｍの数を減らすことによって、つまりＮＡＮＤ型フラッシュメモリ５に既に格納されたパリティを削除することによって、ＮＡＮＤ型フラッシュメモリ５の空き容量を増やすことができる。
【００４７】
また、ＳＳＤ３は、ＳＳＤ３内のランダムアクセスメモリ（例えば、ＤＲＡＭ６）にパリティを書き込むこともできる。
【００４８】
この場合、ＳＳＤ３は、ＮＡＮＤ型フラッシュメモリ５から削除されるパリティを、ＤＲＡＭ６内のパリティキャッシュに保存してもよい。パリティキャッシュは、パリティをキャッシュとして格納するためのＤＲＡＭ６上の記憶エリアである。パリティキャッシュにパリティを何時保存するかは限定されないが、例えば、ＮＡＮＤ型フラッシュメモリ５からパリティを削除する時であってもよいし、削除されたパリティを含むパリティグループにおいてダイ衝突が起きた時であってもよい。
【００４９】
一度リードが要求されたデータは再びリードされる可能性が高い。このため、削除されたパリティを含むパリティグループにおいてダイ衝突が起きたならば、ＳＳＤ３は、このパリティグループの他のデータ部および残りのパリティを使用してこのデータ部を復元するだけでなく、削除されたパリティを再算出し、再算出されたパリティをＤＲＡＭ６のパリティキャッシュに保存してもよい。これにより、ＮＡＮＤ型フラッシュメモリ５に格納されるパリティの数を増やすこと無く、このパリティグループのパリティ数ｍを増加させることができる。つまり、このパリティグループのダイ衝突の耐性を高めることができる。
【００５０】
例えば、リード要求によって指定されたリード対象のデータ部が格納されているダイが書き込み処理を実行中であるならば、ＳＳＤ３は、削除されたパリティおよびリード対象のデータ部を除くこのパリティグループ内の全てのデータ部および全てのパリティをＮＡＮＤ型フラッシュメモリ５から読み出し、読み出されたこのパリティグループのデータ部および全てのパリティを使用してリード対象のデータ部を復元する（ＲＡＩＤ読み込み）。さらに、ＳＳＤ３は、復元されたリード対象のデータ部と読み出されたパリティグループ内のデータ部とを使用して、削除されたパリティを再算出し、再算出されたパリティをＤＲＡＭ６のパリティキャッシュに保存してもよい。
【００５１】
また、ＳＳＤ３は、リード対象領域を予告する通知（ヒント）をホスト２から受信し、この通知（ヒント）に基づいて、このリード対象領域のパリティをＮＡＮＤ型フラッシュメモリ５またはキャッシュエリアに優先的に残すことができる。
【００５２】
ホスト２は、リード対象領域を予告する通知をＳＳＤ３に送信する。リード対象領域は、後続のリード要求によって指定される可能性が高い領域である。ホスト２は、ＲＡＩＤ読み込み可能領域の一つをリード対象領域として通知してもよいし、一つのＲＡＩＤ読み込み可能領域内の一部分をリード対象領域として通知してもよい。
【００５３】
リード対象領域は、論理アドレス範囲によって指定されてもよい。あるいは、複数のＲＡＩＤ読み込み可能領域にそれぞれ領域識別子が割り当てられている場合には、リード対象領域は、領域識別子によって指定されてもよい。あるいは、一つのＲＡＩＤ読み込み可能領域が一つ以上の仮想ブロックから構成されるケースにおいては、リード対象領域は、領域識別子と仮想ブロック番号とによって指定されてもよい。仮想ブロック番号は、あるＲＡＩＤ読み込み可能領域の中で一意となる番号（識別子）である。仮想ブロックは、複数の物理ブロックの纏まりを示す。
【００５４】
あるＲＡＩＤ読み込み可能領域をリード対象領域として指定するヒントをホスト２から受信した場合、ホスト２は、このＲＡＩＤ読み込み可能領域のパリティをＮＡＮＤ型フラッシュメモリ５またはキャッシュエリアに優先的に残すための処理を実行してもよい。また、あるＲＡＩＤ読み込み可能領域内のある仮想ブロック番号をリード対象領域として指定するヒントをホスト２から受信した場合、ホスト２は、このＲＡＩＤ読み込み可能領域の仮想ブロックに割り当てられている物理ブロック集合に格納されているパリティを、ＮＡＮＤ型フラッシュメモリ５またはキャッシュエリアに優先的に残すための処理を実行してもよい。
【００５５】
例えば、ホスト２においてデータベースソフトウェアが実行されている場合、データベースソフトウェアは、インデックスデータを参照することによって、目的のデータの格納位置を特定する。したがって、インデックスデータ内のあるインデックス部分が参照されたならば、この参照されたインデックス部分から、これからリードが要求される可能性が高い領域を予測することができる。ホスト２は、この予測された領域を示すリード対象領域をヒントとしてＳＳＤ３に通知することができる。
【００５６】
この通知を受信した場合、ＳＳＤ３は、ＮＡＮＤ型フラッシュメモリ５の複数の領域（ＲＡＩＤ読み込み領域）の内、このリード対象領域をＮＡＮＤ型フラッシュメモリ５またはキャッシュエリアに優先的に残すための処理を実行してもよい。例えば、ある仮想ブロック番号がリード対象領域として指定された場合には、この仮想ブロック番号に関連付けられた各パリティグループのパリティをＮＡＮＤ型フラッシュメモリ５またはキャッシュエリアに優先的に残すための処理を実行してもよい。
【００５７】
あるいは、ＳＳＤ３は、例えばＳＳＤ３がアイドル状態の期間などにおいて、このリード対象領域に属する各パリティグループのパリティを再算出する処理を積極的に実行し、再算出されたパリティをキャッシュエリアに保存してもよい。
【００５８】
また、ＳＳＤ３は、パリティを算出（または再算出）する度に、この算出（または再算出）されたパリティとこのパリティが属するパリティグループの識別子とをホスト２に通知してもよい。
【００５９】
ホスト２は、ＳＳＤ３から通知されたパリティとパリティグループの識別子とをホスト２のランダムアクセスメモリ（ＤＲＡＭ）上のパリティキャッシュに保存してもよい。ホスト２は、いまからリードしようとするデータの位置に対するパリティがホスト２のパリティキャッシュに存在する場合には、このパリティを含むリード要求をＳＳＤ３に送信してもよい。
【００６０】
あるいは、ＳＳＤ３は、ＳＳＤ３のＤＲＡＭ６上のパリティキャッシュからパリティを削除（追い出し）する場合、この削除（追い出し）対象のパリティとこの削除（追い出し）対象のパリティが属するパリティグループの識別子とをホスト２に通知してもよい。ホスト２は、ＳＳＤ３から通知されたパリティとパリティグループの識別子とをホスト２のランダムアクセスメモリ（ＤＲＡＭ）上のパリティキャッシュに保存する。ホスト２は、いまからリードしようとするデータの位置に対するパリティがホスト２のパリティキャッシュに存在する場合には、このパリティを含むリード要求をＳＳＤ３に送信してもよい。通常、ホスト２のパリティキャッシュのサイズは、ＳＳＤ３のパリティキャッシュのサイズよりも大きい。したがって、ＳＳＤ３のパリティキャッシュから削除されるパリティをホスト２に通知することにより、このパリティを消失させることなく有効に活用することができる。
【００６１】
また、ＳＳＤ３は、ある任意の時刻において書き込みあるいは消去の処理が行われているダイの数を制限してもよい。具体的には、ＳＳＤ３は、ホスト２から受信された書き込み要求それぞれの実行タイミングをスケジューリングすることによって、あるＲＡＩＤ読み込み可能領域に割り当てられている複数のダイに対して同時に実行される書き込み動作の数をこのＲＡＩＤ読み込み可能領域のパリティ数ｍ以下に制限する。これにより、このＲＡＩＤ読み込み可能領域において同時に発生する可能性があるダイ衝突の数を、このＲＡＩＤ読み込み可能領域のｍ個のパリティによって回避可能なダイ衝突の数以下にすることができる。
【００６２】
また、ＳＳＤ３は、例えば、ＸＯＲパリティ、ＲＡＩＤ６におけるＰパリティ／Ｑパリティ（Ｐ＋Ｑ）、リードソロモン（Reed Solomon）のような複数種のパリティを算出する能力を有していてもよい。さらに、ＳＳＤ３は、ＬＲＣ（Local Reconstruction Codes）をパリティとして使用してもよいし、さらに、１次元のパリティ構成のみならず、２次元のパリティ構成を使用してもよい。
【００６３】
ホスト２は、ＳＳＤ３に対して任意のｋ＋ｍを動的に宣言するだけではなく、ホスト２のワークロード等を踏まえて、使用すべきパリティ算出方法（ＸＯＲパリティ、Ｐパリティ／Ｑパリティ（Ｐ＋Ｑ）、リードソロモン（Reed Solomon）等）についても宣言してもよい。また同様に、ホスト２は、ＳＳＤ３に対して任意のｋ＋ｍを動的に宣言するだけではなく、ホスト２のワークロード等を踏まえて、使用すべきパリティの構成（１次元パリティ、２次元パリティ、ＬＲＣ（Local Reconstruction Codes）、等）についても宣言してもよい。
【００６４】
次に、図１のコントローラ４の構成について説明する。
【００６５】
コントローラ４は、複数のチャンネル（例えば８個のチャンネル）を介して複数のＮＡＮＤ型フラッシュメモリダイに電気的に接続される。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５（複数のＮＡＮＤ型フラッシュメモリダイ）を制御する。
【００６６】
ＳＳＤ３は、論理ブロックアドレス（ＬＢＡ）のような論理アドレスを使用してデータをランダムアクセスすることを前提としたタイプのＳＳＤ（以下、コンベンショナルＳＳＤと云う）として実現されていてもよいし、ホスト２からの連続データを仮想ブロックと称される物理ブロック集合にシーケンシャルに書き込むことを前提としたタイプのＳＳＤ（以下、非コンベンショナルＳＳＤと云う）として実現されていてもよい。
【００６７】
ＳＳＤ３がコンベンショナルＳＳＤとして実現されている場合においては、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理を実行することができるように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能してもよい。このＦＴＬは、ホスト２が、論理ブロックアドレス（ＬＢＡ）のような論理アドレスを使用してＳＳＤ３をアクセスするケースにおいて使用される。
【００６８】
このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス（ＬＢＡ）が使用される。以下では、主に、論理アドレスが論理ブロックアドレス（ＬＢＡ）である場合を想定する。
【００６９】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３２を用いて実行される。コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を使用して、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。管理サイズ単位は、限定されないが、例えば、４ＫＢであってもよい。アドレス変換テーブル（ＬＵＴ３２）は、ＳＳＤ３の電源オン時にＮＡＮＤフラッシュメモリ５からＤＲＡＭ６にロードされてもよい。
【００７０】
あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤフラッシュメモリ５内の物理記憶位置を示す。物理アドレスは、例えば、ダイ番号と物理ブロック番号とページ番号等とによって表現されてもよい。
【００７１】
ＳＳＤ３が非コンベンショナルＳＳＤとして実現されている場合においては、コントローラ４は、ＬＢＡではなく、ホスト２から受信される別のタイプのＳＳＤアドレス（例えば、領域識別子、仮想ブロック番号、仮想ブロック内ページ番号）に基づいて、ＮＡＮＤ型フラッシュメモリ５を制御してもよい。
【００７２】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含んでもよい。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続されていてもよい。
【００７３】
ホストインタフェース１１は、ホスト２から様々なコマンド（例えば、ライトコマンド、リードコマンド、イレーズコマンド、アンマップ（ＵＮＭＡＰ）／トリム（Ｔｒｉｍ）コマンド、等）を受信する。
【００７４】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、ＳＳＤ３の電源オンに応答して、図示しないＲＯＭまたはＮＡＮＤ型フラッシュメモリ５に格納されている制御プログラム（ファームウェア）をＤＲＡＭ６上にロードして所定の処理を実行する。このＣＰＵ１２は、例えば、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行されるファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００７５】
ＣＰＵ１２は、ライト動作制御部２１、リード動作制御部２２、ＲＡＩＤ読み込み可能領域制御部２３として機能することができる。
【００７６】
ライト動作制御部２１は、ホスト２からの書き込み要求（ライトコマンド）の受信に応答して、書き込みデータ（ライトデータ）をホスト２から受信する。そして、ライト動作制御部２１は、ライトデータを、ＮＡＮＤ型フラッシュメモリ５に書き込む。リード動作制御部２２は、ホスト２からの読み出し要求（リードコマンド）の受信に応答して、リードコマンドによって指定されるデータをＮＡＮＤ型フラッシュメモリ５から読み出す。そして、リード動作制御部２２は、読み出されたデータをホスト２に返す。
【００７７】
ＲＡＩＤ読み込み可能領域制御部２３は、上述のＲＡＩＤ読み込み可能領域制御機能を実行する。
【００７８】
ＲＡＩＤ読み込み可能領域制御部２３は、ＲＡＩＤの一つのパリティグループを構成するデータ部の数およびパリティの数をＮＡＮＤ型フラッシュメモリ５内の論理的な領域（ＲＡＩＤ読み込み可能領域）毎に指定するホスト２からの要求を受け付ける。そして、ＲＡＩＤ読み込み可能領域制御部２３は、ＲＡＩＤ読み込み可能領域毎に、その領域に対応するデータ数およびパリティ数を示すｋ，ｍの組を、その領域のＲＡＩＤ構成を示すパラメータとして管理する。いま、ＲＡＩＤ読み込み可能領域制御部２３が、ＮＡＮＤ型フラッシュメモリ５内の論理的な領域＃１（あるＲＡＩＤ読み込み可能領域）に対応するデータ数およびパリティ数を示すｋ，ｍの組と、ＮＡＮＤ型フラッシュメモリ５内の論理的な別の領域＃ｎ（別のＲＡＩＤ読み込み可能領域）に対応するデータ数およびパリティ数を示すｋ’，ｍ’の組とを管理しているものとする。ｋ’，ｍ’の組は、ｋ，ｍの組と異なるものである。
【００７９】
この場合、領域＃１に対するホスト２からの書き込み要求（ライトコマンド）に基づいて、ＲＡＩＤ読み込み可能領域制御部２３は、ホスト２から受信されるｋ個のデータ部と、これらｋ個のデータ部から算出されるｍ個のパリティとを、ｋ＋ｍ個の異なるダイから一つずつ選出されるｋ＋ｍ個の物理ブロックに跨がって書き込む。これにより、ホスト２からの書き込みデータを、ｋ個のデータ部とｍ個のパリティとを含むパリティグループとしてＮＡＮＤ型フラッシュメモリ５に格納することができ、最大でｍ個までのダイ衝突を回避することができる。
【００８０】
また、領域＃ｎに対するホスト２からの書き込み要求（ライトコマンド）に基づいて、ＲＡＩＤ読み込み可能領域制御部２３は、ホスト２から受信されるｋ’個のデータ部と、これらｋ’個のデータ部から算出されるｍ’個のパリティとを、ｋ’＋ｍ’個の異なるダイから一つずつ選出されるｋ’＋ｍ’個の物理ブロックに跨がって書き込む。これにより、ホスト２からの書き込みデータを、ｋ’個のデータ部とｍ’個のパリティとを含むパリティグループとしてＮＡＮＤ型フラッシュメモリ５に格納することができ、最大でｍ’個までのダイ衝突を回避することができる。
【００８１】
この書き込み動作の例を図４に示す。図４では、領域＃１においてはｋ＝７、ｍ＝３が適用され、領域＃ｎにおいてはｋ＝１６、ｍ＝１が適用された場合が例示されている。
【００８２】
領域＃１においては、例えば、７個のデータ部ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、ｘ７と３個のパリティｐ１、ｐ２、ｐ３が１０個の異なるダイに分散される。これら７個のデータ部ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、ｘ７と３個のパリティｐ１、ｐ２、ｐ３は一つのパリティグループを構成する。この７＋３のパリティグループにおいては、３つまでの同時のダイ衝突を回避することができる。
【００８３】
領域＃ｎにおいては、例えば、１６個のデータ部ｙ１、ｙ２、ｙ３、ｙ４、ｙ５、ｙ６、ｙ７、ｙ８、ｙ９、ｙ１０、ｙ１１、ｙ１２、ｙ１３、ｙ１４、ｙ１５、ｙ１６と１個のパリティｐ１が１７個の異なるダイに分散される。これら１６個のデータ部ｙ１、ｙ２、ｙ３、ｙ４、ｙ５、ｙ６、ｙ７、ｙ８、ｙ９、ｙ１０、ｙ１１、ｙ１２、ｙ１３、ｙ１４、ｙ１５、ｙ１６と１個のパリティｐ１は一つのパリティグループを構成する。この１６＋１のパリティグループにおいては、回避可能なダイ衝突は１つのみであるが、領域＃１の各パリティグループよりも容量効率は高い。
【００８４】
図１のＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するＮＡＮＤコントローラである。ＤＲＡＭインタフェース１４は、ＤＲＡＭ６をアクセス制御するＤＲＡＭコントローラである。ＤＲＡＭ６の記憶領域は、ライトバッファ（ＷＢ）３１、ルックアップテーブル（ＬＵＴ）３２、システム管理情報３３を格納するために利用される。システム管理情報３３は、上述のＲＡＩＤ読み込み可能領域制御機能に必要な様々な管理情報を含む。
【００８５】
次に、ホスト２の構成について説明する。
【００８６】
ホスト２は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェアレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３が含まれる。
【００８７】
一般に知られているように、オペレーティングシステム（ＯＳ）４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびＳＳＤ３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００８８】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。例えば、ＺＦＳ、Ｂｔｒｆｓ、ＸＦＳ、ｅｘｔ４、ＮＴＦＳなどがファイルシステム４３として使用されても良い。あるいは、ファイルオブジェクトシステム（例えば、Ceph Object Storage Daemon）、Key Value Store System (例えば、Rocks DB) がファイルシステム４３として使用されても良い。
【００８９】
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ４１上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【００９０】
アプリケーションソフトウェアレイヤ４１がリードコマンドまたはライトコマンドのようなリクエストをＳＳＤ３に送出することが必要な時、アプリケーションソフトウェアレイヤ４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをファイルシステム４３に送出する。ファイルシステム４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。ファイルシステム４３は、コマンドを、ＳＳＤ３に送出する。ＳＳＤ３からのレスポンスが受信された際、ファイルシステム４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションソフトウェアレイヤ４１に送出する。
【００９１】
ファイルシステム４３は、ＲＡＩＤパラメータ指定部４３Ａ、パリティキャッシュ管理部４３Ｂを含んでいてもよい。ＲＡＩＤパラメータ指定部４３Ａは、領域毎にＲＡＩＤパラメータ（ｋ、ｍ）を指定するためのプログラムモジュールである。データセンタの管理者のようなユーザは、端末からホスト２のＲＡＩＤパラメータ指定部４３Ａを操作することによって、必要に応じて、任意のｋ＋ｍの組み合わせを任意の領域に対して指定することができる。パリティキャッシュ管理部４３Ｂは、上述のホスト２内のパリティキャッシュを管理するためのプログラムモジュールである。ＲＡＩＤパラメータ指定部４３Ａ、およびパリティキャッシュ管理部４３Ｂは、必ずしもファイルシステム４３内に存在しなくてもよく、例えば、ＯＳ４２内に存在してもよいし、アプリケーションソフトウェアレイヤ４１上のアプリケーション内に存在してもよい。
【００９２】
図５は、領域管理テーブル３３Ａを示す。
【００９３】
領域管理テーブル３３Ａは、システム管理情報３３の一部であり、各領域（各ＲＡＩＤ読み込み可能領域）に対応するｋおよびｍの組を管理する。例えば、領域＃１をリードレイテンシを短くすることを最優先するＲＡＩＤ読み込み可能領域として使用し、領域＃２をリードレイテンシよりも容量効率を優先するＲＡＩＤ読み込み可能領域として使用するケースにおいては、ｋ２＋ｍ２に対するｋ２の比率は、ｋ１＋ｍ１に対するｋ１の比率よりも、高く設定されていてもよい。また、ｋ１，ｋ２，ｍ１，ｍ２は、以下の関係を有していてもよい。
【００９４】
ｋ１およびｋ１は２以上の整数
ｍ１は１以上の整数
ｍ２はｍ１よりも小さい０以上の整数
なお、ｍ２が０の場合、領域＃２にパリティは格納されず、領域＃２は、ＲＡＩＤ０（ストライピング）のように機能する。
【００９５】
図６は、ＮＡＮＤ型フラッシュメモリ５の構造情報３３Ｂを示す。
【００９６】
ＮＡＮＤ型フラッシュメモリ５の構造情報３３Ｂは、システム管理情報３３の一部であり、ページサイズ（容量）、ブロックサイズ（容量）、ＳＳＤ容量（ユーザ容量）、等を含む。ブロックサイズは、一つの物理ブロックのサイズ（容量）を示す。ＮＡＮＤ型フラッシュメモリ５の構造情報３３Ｂは、さらに、仮想ブロックサイズを含んでいてもよい。コントローラ４は、ホスト２からの要求に応じて、この構造情報をホスト２に報告することができる。
【００９７】
図７は、仮想ブロック管理テーブル３３Ｃを示す。
【００９８】
仮想ブロック管理テーブル３３Ｃは、システム管理情報３３の一部であり、ＳＳＤ３が非コンベンショナルＳＳＤとして実現されている場合において各仮想ブロックに割り当てられる物理ブロック集合を管理するために使用される。なお、説明を簡単にするために、図７においては領域識別子については省略されているが、実際には、領域識別子と仮想ブロック番号（以下、仮想ブロックｉｄとも称する）の組毎に、物理ブロック集合が管理されてもよい。
【００９９】
仮想ブロック管理テーブル３３Ｃは、複数のエントリを含む。各エントリは、「仮想ブロックｉｄ（ｖｉｄ）」フィールド、「データ用物理ブロックの集合」フィールド、「パリティ用物理ブロックの集合」フィールドを含む。「データ用物理ブロックの集合」フィールドは、データの格納に使用される各物理ブロックを特定する識別子、例えばダイ番号と物理ブロック番号の組み合わせ、を示す。「パリティ用物理ブロックの集合」フィールドは、パリティの格納に使用される各物理ブロックを特定する識別子、例えばダイ番号と物理ブロック番号の組み合わせ、を示す。
【０１００】
図８は、あるＲＡＩＤ読み込み可能領域内のある仮想ブロック（ｖｉｄ＝ｘ）に割り当てられる、データ用の物理ブロックの集合およびパリティ用の物理ブロックの集合の例を示す。ここでは、ｋ＝６、ｍ＝３の場合を想定する。
【０１０１】
ＳＳＤ３内部においては、物理ブロック（物理消去ブロック：ＰＥＢ）は、（ダイ番号、ブロック番号）によって識別可能である。ブロック番号は、あるダイの中で一意となる番号である。仮想ブロックは、仮想ブロック番号（仮想ブロックｉｄ（ｖｉｄ））によって識別可能である。ｖｉｄは、ある領域（あるＲＡＩＤ読み込み可能領域）の中で一意となる番号である。以後、主として、ダイ番号１をｄ１、ブロック番号１をｂ１のように表記する。
【０１０２】
あるＲＡＩＤ読み込み可能領域の仮想ブロック（ｖｉｄ＝ｘ）には、１番目から６番目までの６個の物理ブロックＰＥＢ（ｋ）と、１番目から３番目までの３個の物理ブロックＰＥＢ（ｍ）とが割り当てられる。６個の物理ブロックＰＥＢ（ｋ）は、仮想ブロック（ｖｉｄ＝ｘ）のデータ用の物理ブロックである。３個の物理ブロックＰＥＢ（ｍ）は、仮想ブロック（ｖｉｄ＝ｘ）のパリティ用の物理ブロックである。
【０１０３】
９個の物理ブロック（ＰＥＢ（ｋ）、ＰＥＢ（ｍ））は、異なる９個のダイから一つずつ選出される。図８では、以下の場合が想定されている。
【０１０４】
（１）ダイｄ７の物理ブロックｂ１２（ｄ７，ｂ１２）が１番目のデータ用物理ブロック（ＰＥＢ（ｋ）＝０）として割り当てられる。
【０１０５】
（２）ダイｄ６の物理ブロックｂ２（ｄ６，ｂ２）が２番目のデータ用物理ブロックＰＥＢ（ＰＥＢ（ｋ）＝１）として割り当てられる。
【０１０６】
（３）ダイｄ１３の物理ブロックｂ１０（ｄ１３，ｂ１０）が３番目のデータ用物理ブロック（ＰＥＢ（ｋ）＝２）として割り当てられる。
【０１０７】
（４）ダイｄ９の物理ブロックｂ９（ｄ９，ｂ９）が４番目のデータ用物理ブロック（ＰＥＢ（ｋ）＝３）として割り当てられる。
【０１０８】
（５）ダイｄ２の物理ブロックｂ９（ｄ２，ｂ９）が５番目のデータ用物理ブロック（ＰＥＢ（ｋ）＝４）として割り当てられる。
【０１０９】
（６）ダイｄ８の物理ブロックｂ１１（ｄ８，ｂ１１）が６番目のデータ用物理ブロック（ＰＥＢ（ｋ）＝５）として割り当てられる。
【０１１０】
（７）ダイｄ１５の物理ブロックｂ１３（ｄ１５，ｂ１３）が１番目のパリティ用物理ブロック（ＰＥＢ（ｍ）＝０）として割り当てられる。
【０１１１】
（８）ダイｄ１１の物理ブロックｂ１（ｄ１１，ｂ１）が２番目のパリティ用物理ブロック（ＰＥＢ（ｍ）＝１）として割り当てられる。
【０１１２】
（９）ダイｄ３の物理ブロックｂ７（ｄ３，ｂ７）が３番目のパリティ用物理ブロック（ＰＥＢ（ｍ）＝２）として割り当てられる。
【０１１３】
なお、一つのＲＡＩＤ読み込み可能領域は複数のｖｉｄを含むことができる。この場合、同じＲＡＩＤ読み込み可能領域内のｖｉｄそれぞれには、同じダイ集合が割り当てられてもよい。そして、各ダイの異なる物理ブロックがこれらｖｉｄに割り当てられてもよい。
【０１１４】
＜複数のＲＡＩＤ設定の動的選択による目的別使用＞
次に、ＲＡＩＤ読み込み可能領域制御機能の具体例について説明する。
【０１１５】
ホスト２は、ＲＡＩＤ読み込み可能領域を宣言（要求）することができる。ＲＡＩＤ読み込み可能領域とは、ＲＡＩＤのパリティグループが適用される論理的な領域を意味する。ＲＡＩＤ読み込み可能領域を宣言（要求）するための方法としては、以下の幾つかの方法が挙げられる。
【０１１６】
一つ目の方法は、事前にＳＳＤ３のＮＡＮＤ型フラッシュメモリ５の記憶領域を論理的に複数の領域に分割し、これら領域の少なくとも一つをＲＡＩＤ読み込み可能領域にすることを宣言する方法である。
【０１１７】
ＮＡＮＤ型フラッシュメモリ５の記憶領域を論理的に複数の領域に分割するために、複数のネームスペース（Ｎａｍｅｓｐａｃｅ）を利用してもよい。この場合、ＮＶＭｅにおけるＮａｍｅｓｐａｃｅ機能のように、ＮＡＮＤ型フラッシュメモリ５の容量が複数のネームスペース（領域）によって分割されてもよいし、あるいは、これらネームスペース間でＮＡＮＤ型フラッシュメモリ５の容量が共有されてもよい。
【０１１８】
ホスト２は、ＳＳＤ３にネームスペースの作成を要求することができ、且つこのネームスペースに適用すべきＲＡＩＤ構成（ｋ、ｍ）を指定することができる。ＳＳＤ３のコントローラ４は、この作成されたネームスペースの識別子（ＮＳＩＤ＃１）をホスト２に通知すると共に、このネームスペースに対応するＲＡＩＤ構成（ｋ、ｍ）を管理する。つまり、コントローラ４は、ＮＳＩＤ＃１のネームスペースを、ｋ個のデータ部とｍ個のパリティとを含むパリティグループが適用される領域として管理する。
【０１１９】
コントローラ４がＮＳＩＤ＃１を指定する書き込み要求をホスト２から受信した場合、コントローラ４は、ホスト２から受信されるｋ個のデータ部と、ｋ個のデータ部から算出されるｍ個のパリティとを、ｋ＋ｍ個の物理ブロックに跨がって書き込む。これらｋ＋ｍ個の物理ブロックは、ｋ＋ｍ個の異なる不揮発性メモリダイから一つずつ選出された物理ブロックである。なお、ｍ＝０の場合には、このネームスペースにはＲＡＩＤ読み込みが用いられない。つまり、このネームスペースはパリティ領域を持たない。
【０１２０】
あるいは、ホスト２は、ネームスペースに適用すべきｋ、ｍｉｎ＿ｍ、ｍａｘ＿ｍを指定してもよい。ここで、ｍｉｎ＿ｍは最小のｍを示し、ｍａｘ＿ｍは最大のｍを示す。ＳＳＤ３の空き容量が十分にある場合には、コントローラ４は、ｍａｘ＿ｍによって指定される個数のパリティを書き込む。ＳＳＤ３の空き容量が減少するにつれ、コントローラ４は、書き込むべきパリティの数をｍｉｎ＿ｍまで減少してもよい。
【０１２１】
二つ目の方法は、ホスト２からの連続データを仮想ブロックと称される物理ブロック集合にシーケンシャルに書き込むことを前提とした上述の非コンベンショナルＳＳＤに適用可能な方法である。この場合、ＳＳＤ３のコントローラ４が複数の物理ブロックＰＥＢをまとめて一つの大きな書き込み領域とし、この大きな書き込み領域をホスト２に一つの仮想ブロックＶＢとして提供する。上述したように、仮想ブロックＶＢは仮想ブロック番号（ｖｉｄ）によって識別可能であり、ｖｉｄは、ある領域（あるＲＡＩＤ読み込み可能領域）の中で一意となる番号である。
【０１２２】
図９は、仮想ブロック番号（ｖｉｄ）を使用することによって実行される仮想ブロックアクセス動作の概要を示す。
【０１２３】
ここでは、一つの物理ブロックが４つのページを含み、ページサイズが１６ＫＢであり、ＬＢＡが４ＫＢの場合が想定されている。
【０１２４】
ホスト２においては、ＳＳＤ３のＬＢＡ範囲は、連続する幾つかの仮想ブロック（ｖｉｄ＝０、ｖｉｄ＝１、ｖｉｄ＝２、…）であるかのように扱われてもよい。
【０１２５】
また，SSD３は，LBAのようなSSD３の論理アドレスと仮想ブロックとの関係を持っていてもよい．これは例えば動的な変換テーブルを構成してもよいし，vidから単純に計算で求められるものでもよい．計算で求められるものの例としては，この例では1つの仮想ブロックは6個の物理消去ブロックから構成されているため，vid 1の先頭は， 1 * 6 * 4 * (16 / 4) = 96 とし，以下4KB毎に97, 98... のように構成してもよい．
ＳＳＤ３内においては、あるＲＡＩＤ読み込み可能領域の各仮想ブロックには、幾つかのデータ用物理ブロックＰＥＢ（ｋ）が割り当てられる。さらに、各仮想ブロックには、幾つかのパリティデータ用物理ブロックＰＥＢ（ｍ）も割り当てられる。図９では、各仮想ブロックに６個のデータ用物理ブロックＰＥＢ（ｋ）と３個のパリティデータ用物理ブロックＰＥＢ（ｍ）が割り当てられている場合が例示されている。
【０１２６】
ホスト２（例えば、ホスト２上で実行されるアプリケーション）は、各仮想ブロックを２４ページ（＝４×６）を含む大きな書き込み領域として認識する。仮想ブロック内の書き込み先位置は、仮想ブロック番号（ｖｉｄ）とページ番号（仮想ブロック内ページ番号）とによって識別される。
【０１２７】
ホスト２がｖｉｄ＝０、ｐａｇｅ＝０へのデータの書き込みを要求した場合、このデータは、１番目のデータ用物理ブロック（ＰＥＢ（ｋ）＝０）の最初のページ（ｐａｇｅ０）に書き込まれる。ホスト２がｖｉｄ＝０、ｐａｇｅ＝１へのデータの書き込みを要求した場合、このデータは、ストライピングされることによって、２番目のデータ用物理ブロック（ＰＥＢ（ｋ）＝１）の最初のページ（ｐａｇｅ０）に書き込まれる。ホスト２がｖｉｄ＝０、ｐａｇｅ＝２へのデータの書き込みを要求した場合、このデータは、ストライピングされることによって、３番目のデータ用物理ブロック（ＰＥＢ（ｋ）＝２）の最初のページ（ｐａｇｅ０）に書き込まれる。
【０１２８】
同様にして、例えば、ホスト２がｖｉｄ＝０、ｐａｇｅ＝８へのデータの書き込みを要求した場合、このデータは、３番目のデータ用物理ブロック（ＰＥＢ（ｋ）＝２）の２番目のページ（ｐａｇｅ１）に書き込まれる。
【０１２９】
なお、ここでは、ページ単位のストライピングを行っているが、かならずしもページ単位でストライピングする必要は無く、任意のデータ長単位でストライピングすることができる。例えば、ページを４ＫＢごとに分割し、４ＫＢ単位でデータをストライピング（複数のダイに分散）してもよい。
【０１３０】
ＳＳＤ３のコントローラ４は、ｖｉｄ毎にそのｖｉｄに割り当てられる物理ブロックＰＥＢそれぞれの物理位置（ダイ番号、物理ブロック番号）を管理する。図９では、（ｄ７，ｂ１２）、（ｄ６，ｂ２）、（ｄ１３，ｂ１０）、（ｄ９，ｂ９）、（ｄ２，ｂ９）、（ｄ８，ｂ１１）が６個のデータ用物理ブロックＰＥＢ（ｋ）として割り当てられ、（ｄ１５，ｂ１３）、（ｄ１１，ｂ１）、（ｄ３，ｂ７）が３個のパリティ用物理ブロックＰＥＢ（ｍ）として割り当てられた場合が例示されている。
【０１３１】
次に、仮想ブロックアクセス動作の手順について説明する。
【０１３２】
（１）ホスト２は、ＳＳＤ３にＲＡＩＤ読み込み可能領域を要求するために、ＳＳＤ３に対してＲＡＩＤ読み込みのためのパラメータを与える。例えば、ＲＡＩＤ読み込み可能領域を要求するパリティ割り当て要求（ｋ＝６，ｍｉｎ＿ｍ＝１，ｍａｘ＿ｍ＝３）をＳＳＤ３に送信する。ここで、ｋ、ｍｉｎ＿ｍ、ｍａｘ＿ｍは、それぞれｋおよび最小のｍと最大のｍを表す。このとき、ｍｉｎ＿ｍ及びｍａｘ＿ｍが０の場合、このＲＡＩＤ読み込み可能領域についてはＲＡＩＤ読み込みを用いない、すなわちパリティ領域を持たないことを意味する。
【０１３３】
（２）ＳＳＤ３のコントローラ４は、図１０に示すように領域管理テーブル３３Ａを更新し、このパラメータに対して領域（ＲＡＩＤ読み込み可能領域）の識別子（以下、領域識別子ｒｉｄという）を与える。そして、コントローラ４は、領域識別子ｒｉｄ（例えばｒｉｄ＝１）を含む応答（パリティ割り当てリプライ）をホスト２に返し、これによってｒｉｄ＝１をホスト２に通知する。以降、ホスト２は、ｒｉｄ＝１を使用することによって、このＲＡＩＤ読み込み可能領域を特定することができる。例えば、ホスト２がこのＲＡＩＤ読み込み可能領域に対する書き込み要求をＳＳＤ３に送信することが必要な場合、ホスト２は、ｒｉｄ＝１と、ｒｉｄ＝１に対応する領域内の書き込み先位置とを指定する。この書き込み先位置は、仮想ブロック番号（ｖｉｄ）と仮想ブロック内ページ番号（ｐａｇｅ）とによって識別される。
【０１３４】
（３）いま、仮にホスト２がｒｉｄ＝１のｖｉｄ＝１２の最初のページからデータを順に書き込むとする。ホスト２は、書き込み要求（ｒｉｄ＝１、ｖｉｄ＝１２、ｐａｇｅ＝０）をＳＳＤ３に送信する。ｒｉｄ＝１は、書き込み先の領域を示し、ｖｉｄ＝１２は、この書き込み先の領域内の書き込み先仮想ブロックを示し、ｐａｇｅ＝０は、仮想ブロック内ページ番号を示す。書き込み要求は、さらに、書き込むべきデータのデータ長を含んでいてもよい。
【０１３５】
（４）ＳＳＤ３のコントローラ４は、ｒｉｄ＝１のｖｉｄ＝１２の仮想ブロックに対してｋ（ここではｋ＝６）個のデータ用物理ブロックと、ｍ（ここではｍｉｎ＿ｍ＝１，ｍａｘ＿ｍ＝３）個の物理ブロックを割り当てる。このとき、これら物理ブロックは異なるダイから一つずつ選出される。
【０１３６】
ここで、現在はＮＡＮＤ型フラッシュメモリ５の空き容量に余裕があるものとする。この場合、ｍａｘ＿ｍまでデータ用物理ブロックが割り当てられるため、合計９つの物理ブロックがｒｉｄ＝１のｖｉｄ＝１２の仮想ブロック用に割り当てられる。
【０１３７】
ここでは、仮に、ｋに対して（ｄ７，ｂ１２）、（ｄ６，ｂ２）、（ｄ１３，ｂ１０）、（ｄ９，ｂ９）、（ｄ２，ｂ９）、（ｄ８，ｂ１１）が、ｍに対して（ｄ１５，ｂ１３）、（ｄ１１，ｂ１）、（ｄ３，ｂ７）が割り当られたとする。この時、ＳＳＤ３のコントローラ４は、図１１に示すように仮想ブロック管理テーブル３３Ｃを更新して、ｒｉｄ＝１のｖｉｄ＝１２に対して割り当てられた６個のデータ用物理ブロック、つまり（ｄ７，ｂ１２）、（ｄ６，ｂ２）、（ｄ１３，ｂ１０）、（ｄ９，ｂ９）、（ｄ２，ｂ９）、（ｄ８，ｂ１１）と、ｒｉｄ＝１のｖｉｄ＝１２に対して割り当てられた３個のパリティ用物理ブロック、つまり、（ｄ１５，ｂ１３）、（ｄ１１，ｂ１）、（ｄ３，ｂ７）とを管理する。
【０１３８】
（５）仮に、ホスト２がＮＡＮＤ型フラッシュメモリ５の６ページ分のデータ（データ部ｘ１，データ部ｘ２，データ部ｘ３，データ部ｘ４，データ部ｘ５，データ部ｘ６）を書いたものとする。ここでは、これらデータ部は、ｒｉｄ＝１のｖｉｄ＝１２の最初の仮想ブロック内ページ（ページ０）から順に書き込まれるものとする。ｐ１、ｐ２、ｐ３をそれぞれパリティデータとすると、（ｘ１，ｘ２，ｘ３，ｘ４，ｘ５，ｘ６，ｐ１，ｐ２，ｐ３）が、図１２に示すような形式でＮＡＮＤ型フラッシュメモリ５に書き込まれる。図１３は、図１２を説明するための図である。データｘ１は、ダイｄ７の物理ブロックｂ１２の最初のページ（ｐａｇｅ０）に書き込まれる。データｘ２は、ダイｄ６の物理ブロックｂ２の最初のページ（ｐａｇｅ０）に書き込まれる。データｘ３は、ダイｄ１３の物理ブロックｂ１０の最初のページ（ｐａｇｅ０）に書き込まれる。データｘ４は、ダイｄ９の物理ブロックｂ９の最初のページ（ｐａｇｅ０）に書き込まれる。データｘ５は、ダイｄ２の物理ブロックｂ９の最初のページ（ｐａｇｅ０）に書き込まれる。データｘ６は、ダイｄ８の物理ブロックｂ１１の最初のページ（ｐａｇｅ０）に書き込まれる。パリティｐ１は、ダイｄ１５の物理ブロックｂ１３の最初のページ（ｐａｇｅ０）に書き込まれる。パリティｐ２は、ダイｄ１１の物理ブロックｂ１の最初のページ（ｐａｇｅ０）に書き込まれる。パリティｐ３は、ダイｄ３の物理ブロックｂ７の最初のページ（ｐａｇｅ０）に書き込まれる。
【０１３９】
なお、上述したように、（ｘ１，ｘ２，ｘ３，ｘ４，ｘ５，ｘ６，ｐ１，ｐ２，ｐ３）のようなデータとパリティの集合は、パリティグループと称される。
【０１４０】
ここで、ホスト２はＳＳＤ３のページサイズを知っているものとし、ＳＳＤアドレスは（ｒｉｄ，ｖｉｄ，仮想ブロック内ページ番号（ｐａｇｅ））で示すものとし、ＳＳＤ３はこれを（ｒｉｄ，ｖｉｄ，物理ブロック番号，物理ブロック内ページ番号（ｐａｇｅ））へと変換するものとする。
【０１４１】
例えば、図１４に示されているように、（ｒｉｄ＝１，ｖｉｄ＝１２，ｐａｇｅ＝３）は、（ｒｉｄ＝１，ｖｉｄ＝１２，（ｄ９，ｂ９），ｐａｇｅ＝０）に変換される。この変換は計算で求まるものでもよいし、ＳＳＤ３とホスト２の間で変換表のようなものを共有してもよい。
【０１４２】
（６）ここで、仮にダイｄ７の物理ブロックｂ１２以外の別の物理ブロックへの書き込み要求が発生したものとする。ダイｄ７においては、この書き込み要求に対応する書き込み動作が実行される。この書き込み動作の実行中に、ＳＳＤアドレス（ｄ７，ｂ１２，ｐａｇｅ＝０）を指定するリード要求、すなわちデータｘ１へのリード要求がホスト２から到来したものとする。図１２、図１３に示すように、データｘ１は、（ｄ７，ｂ１２，ｐａｇｅ＝０）に格納されている。このとき、ＳＳＤ３のコントローラ４は、ダイｄ７においてダイ衝突が起きたことを認識することができる。このため、ＳＳＤ３のコントローラ４は、（ｄ７，ｂ１２，ｐａｇｅ＝０）からデータを読まず、仮想ブロック管理テーブル３３Ｃの情報を参照して、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、ｐ１を読み込み、これらｘ２、ｘ３、ｘ４、ｘ５、ｘ６、ｐ１からｘ１を復元する（ＲＡＩＤ読み込み）。もちろん、このときコントローラ４は、（ｘ２，ｘ３，ｘ４，ｘ５，ｘ６，ｐ１，ｐ２，ｐ３）のうち任意の６つを読めばよい。
【０１４３】
次に、ＮＡＮＤ型フラッシュメモリ５の記憶領域を論理的に複数の領域に分割するためのさらに別の方法について説明する。以下では、ＬＢＡのような論理アドレスをＳＳＤアドレスとして使用するコンベンショナルＳＳＤに適用可能な方法について説明する。
【０１４４】
ホスト２は、ＳＳＤ３の全論理アドレス範囲内の任意の論理アドレス範囲を領域（ＲＡＩＤ読み込み可能領域）として指定することができる。ホスト２は、ＲＡＩＤ読み込み可能領域とすべき論理アドレス範囲と、この論理アドレス範囲に適用すべきＲＡＩＤ構成（ｋ、ｍ）とを指定することができる。
【０１４５】
この場合、ホスト２は、以下のような領域要求をＳＳＤ３に送出してもよい。
【０１４６】
領域要求（ｓｔａｒｔ＝４０００，ｌｅｎｇｔｈ＝１０００，ｋ＝８，ｍｉｎ＿ｍ＝１，ｍａｘ＿ｍ＝３）
ここで、ｓｔａｒｔは、ＲＡＩＤ読み込み可能領域の開始ＳＳＤアドレス（開始論理アドレス）、ｌｅｎｇｔｈは領域の長さ、ｋ、ｍｉｎ＿ｍ、ｍａｘ＿ｍはそれぞれｋおよび最小のｍと最大のｍを表す。
【０１４７】
この時、パリティを保存する領域をＳＳＤ３内で確保できなければ、ＳＳＤ３のコントローラ４は、ホスト２にエラーを返してもよい。ＳＳＤ３のコントローラ４は前述の例同様の管理を行い、必要であればＲＡＩＤ読み込み処理を行う。
【０１４８】
あるいは，ホスト２は領域要求を，実データ(k)の領域と，パリティデータ(m)の領域の両方を指定して行ってもよい．領域要求(start=8000, length=800,k=8, min_m=1, max_m=3, parity_start=16000, parity_length=100)．ここで，startは、RAID読み込み可能領域の開始SSDアドレス（開始論理アドレス）、lengthは領域の長さ、k, min_m, max_m はそれぞれｋおよび最小のmと最大のmを表す．さらに， parity_start は，RAID読み込みに使用されるparityを保存する領域の開始SSDアドレス（開始論理アドレス）、parity_lengthは領域の長さを示す．SSD3は，parity_startからparity_lengthの区間への書込要求については，領域が開放されるまでこれを禁止してもよい．また，parity_startからparity_lengthの区間への読み込みについては，実際のパリティ値を返してもよいし，ある一定の値やランダム値を返してもよいし，あるいはこれを禁止してもよい．
例えば、コントローラ４は、領域要求によって指定された論理アドレス範囲毎に、その論理アドレス範囲に対応するＲＡＩＤ構成（ｋ、ｍ）を管理する。コントローラ４が、ある論理アドレスを書き込み先として指定する書き込み要求をホスト２から受信した場合、コントローラ４は、この書き込み先論理アドレスが属する論理アドレス範囲に対応するＲＡＩＤ構成（ｋ、ｍ）を決定する。そして、コントローラ４は、この決定されたＲＡＩＤ構成（ｋ、ｍ）に基づいて、ホスト２から受信されるｋ個のデータ部と、ｋ個のデータ部から算出されるｍ個のパリティとを、ｋ＋ｍ個の物理ブロックに跨がって書き込む。
【０１４９】
図１５は、ＳＳＤ３によって領域とリードレイテンシ／容量効率との関係を示す。
【０１５０】
ここでは、ＮＡＮＤ型フラッシュメモリ５の記憶領域が、ｋとｍの組み合わせが互いに異なる３つの領域＃１、＃２、＃３に論理的に分割されている場合を想定する。領域＃１においては、例えば、ｋ＝７、ｍ＝３のＲＡＩＤ構成が適用され、領域＃２においては、例えば、ｋ＝１０、ｍ＝２のＲＡＩＤ構成が適用され、領域＃３においては、例えば、ｋ＝１６、ｍ＝１のＲＡＩＤ構成が適用されている。この場合、領域＃１は、容量効率は低いが最も高いダイ衝突耐性を有し、領域＃３は、ダイ衝突耐性は低いが最も高い容量効率を有することになる。このため、領域＃１に書き込まれたデータは最も短いリードレイテンシで読み込むことができる。よって、ホスト２は、領域毎にその領域の目的に応じたＲＡＩＤ構成（ｋ、ｍ）を設定することにより、一台のＳＳＤを特性の異なる複数種のストレージとして扱うことができる。
【０１５１】
図１６は、ＳＳＤ３によって実行されるデータ書き込み処理シーケンスを示す。
【０１５２】
ＳＳＤ３のコントローラ４は、ホスト２から受信されたパリティ割り当て要求＃１に基づいて、領域管理テーブル３３Ａを更新する（ステップＳ１０１）。ステップＳ１０１では、コントローラ４は、パリティ割り当て要求＃１に含まれるパラメータ（ｋ，ｍｉｎ＿ｍ，ｍａｘ＿ｍ）に対して領域識別子（ｒｉｄ＝１）を与え、ｒｉｄ＝１、ｋ、ｍｉｎ＿ｍ、ｍａｘ＿ｍを領域管理テーブル３３Ａに登録する。続いて、コントローラ４は、その領域識別子（ｒｉｄ＝１）をホスト２に返す（ステップＳ１０２）。
【０１５３】
また、コントローラ４は、ホスト２から受信されたパリティ割り当て要求＃２に基づいて領域管理テーブル３３Ａを更新する（ステップＳ１０３）。ステップＳ１０３では、コントローラ４は、パリティ割り当て要求＃２に含まれるパラメータ（ｋ’，ｍｉｎ＿ｍ’，ｍａｘ＿ｍ’）に対して領域識別子（ｒｉｄ＝２）を与え、ｒｉｄ＝２、ｋ’、ｍｉｎ＿ｍ’、ｍａｘ＿ｍ’を領域管理テーブル３３Ａに登録する。続いて、コントローラ４は、その領域識別子（ｒｉｄ＝２）をホスト２に返す（ステップＳ１０４）。
【０１５４】
また、コントローラ４は、ホスト２から受信されたパリティ割り当て要求＃３に基づいて領域管理テーブル３３Ａを更新する（ステップＳ１０５）。ステップＳ１０５では、コントローラ４は、パリティ割り当て要求＃３に含まれるパラメータ（ｋ”，ｍｉｎ＿ｍ”，ｍａｘ＿ｍ”）に対して領域識別子（ｒｉｄ＝３）を与え、ｒｉｄ＝３、ｋ”、ｍｉｎ＿ｍ”、ｍａｘ＿ｍ”を領域管理テーブル３３Ａに登録する。続いて、コントローラ４は、その領域識別子（ｒｉｄ＝３）をホスト２に返す（ステップＳ１０６）。
【０１５５】
ＳＳＤ３がｒｉｄ＝１，ｖｉｄ＝１を指定する書き込み要求（ライトコマンド）をホスト２から受信した場合、コントローラ４は、ｒｉｄ＝１のｖｉｄ＝１の仮想ブロックに、ｋ＋ｍ個の異なるダイから一つずつ選出されるｋ＋ｍ個の物理ブロックを割り当て、ｋ個のデータ部およびｍ個のパリティをｋ＋ｍ個の物理ブロックに跨がって書き込む（ステップＳ１０７）。なお、ｒｉｄ＝１，ｖｉｄ＝１の仮想ブロックにｋ＋ｍ個の物理ブロックを割り当てる処理は、ｒｉｄ＝１、ｖｉｄ＝１、ｐａｇｅ＝０を指定する書き込み要求を受信した時にのみ行ってもよい。
【０１５６】
図１７のフローチャートは、ＳＳＤ３のコントローラ４によって実行されるリード処理の手順を示す。
【０１５７】
ＳＳＤ３がホスト２からのリード要求を受信すると（ステップＳ２０１のＹＥＳ）、コントローラ４は、リード要求によって指定された記憶位置に対応するダイ（つまり、リードすべき目的のデータが格納されているダイ）にダイ衝突が起きているか否かを判定する（ステップＳ２０２）。ステップＳ２０２では、コントローラ４は、例えば、各ダイに現在割り当てられている未完了の処理を示すキュー（またはリスト）を参照することによって、リードすべき目的のデータが格納されているダイにダイ衝突が起きているか否かを判定してもよい。
【０１５８】
ダイ衝突が起きている場合（ステップＳ２０２のＹＥＳ）、コントローラ４は、リード要求によって指定されたデータが属するパリティグループのデータおよびパリティをリードする（ステップＳ２０３）。続いて、コントローラ４は、パリティグループのデータおよびパリティを使用して、リード要求によって指定されたデータを復元し（ステップＳ２０４）、復元したデータをホスト２に返す（ステップＳ２０５）。
【０１５９】
ダイ衝突が起きていない場合（ステップＳ２０２のＮＯ）、コントローラ４は、リード要求によって指定されたデータを、このデータが格納されているダイからリードし、リードしたデータをホスト２に返す（ステップＳ２０６）。
【０１６０】
＜積極的な空き容量の活用＞
次に、パリティの数ｍを減少することによってＳＳＤ３の空き容量を増やす処理について説明する。
【０１６１】
いま、ＳＳＤ３の空き容量がある閾値よりも低くなったものとする。この閾値はＳＳＤ３のコントローラ４が事前に定めてもよいし、ユーザが定めてもよい。ＳＳＤ３のコントローラ４は、必要ならば、パリティが含まれる物理ブロックＰＥＢを解放することによってパリティを削除し、これによってパリティの数をｍｉｎ＿ｍに等しい数まで減らしてもよい。例えば、上記の例においては、図１８に示すように、３つのパリティ用物理ブロック（ｄ１５，ｂ１３）、（ｄ１１，ｂ１）、（ｄ３，ｂ７）の内、任意の２つを解放することができる。
【０１６２】
ここでは仮に（ｄ１１，ｂ１）、（ｄ３，ｂ７）を解放したとする。この場合、ｐ２、ｐ３が削除される。これにより、ＳＳＤ３の空き容量が増加し、ユーザはＳＳＤ３の容量を効率よく使用することができる。
【０１６３】
（ｄ１１，ｂ１）、（ｄ３，ｂ７）の解放時（パリティ削除時）には、コントローラ４は、仮想ブロック管理テーブル３３Ｃを、図１９に示すように更新する。
【０１６４】
図２０のフローチャートは、ＳＳＤ３のコントローラ４によって実行される物理ブロック解放処理（パリティ削除処理）の手順を示す。
【０１６５】
コントローラ４は、ＳＳＤ３の空き容量（つまり、ＮＡＮＤ型フラッシュメモリ５の空き容量）をチェックする（ステップＳ３０１）。ＳＳＤ３の空き容量が閾値よりも少ない場合（ステップＳ３０２のＹＥＳ）、コントローラ４は、パリティが格納されている物理ブロックを解放する（ステップＳ３０３）。例えば、ｍａｘ＿ｍ＝３の領域（ＲＡＩＤ読み込み可能領域）においてはパリティｐ１，ｐ２，ｐ３がそれぞれ格納されている３つの物理ブロックが存在するので、最初に、これら３つの物理ブロックの一つを解放してパリティｐ１，ｐ２，ｐ３の一つ（例えばｐ２）を削除してもよい。
【０１６６】
次に、コントローラ４は、「ｍａｘ＿ｍ  −  １」を求め、「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しいか否かをチェックする（ステップＳ３０４）。
【０１６７】
「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しくないならば（ステップＳ３０４のＮＯ）、コントローラ４は、残りのパリティｐ１，ｐ３の一つ（例えばｐ３）を削除する（ステップＳ３０３）。そして、コントローラ４は、「ｍａｘ＿ｍ  −  １」を求め、「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しいか否かをチェックする（ステップＳ３０４）。
【０１６８】
「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しいならば（ステップＳ３０４のＹＥＳ）、コントローラ４は、処理を終了する。
【０１６９】
＜ＳＳＤ内のＤＲＡＭを用いた動的な運用＞
次に、図２１を参照して、ＳＳＤ３内のＤＲＡＭ６を、パリティを格納するためのパリティキャッシュとして利用する場合について説明する。
【０１７０】
例えば、上述した２つのパリティｐ２、ｐ３が削除された時点で、仮にダイｄ６のどこかの物理ブロックに書き込み要求があったものとする。ダイｄ６がこの書き込み要求の処理を実行中に、（ｄ６，ｂ１２，ｐａｇｅ＝０）、すなわちデータｘ２へのリード要求がホスト２から到来したものとする。
【０１７１】
この時、ＳＳＤ３のコントローラ４は、（ｘ１，ｘ３，ｘ４，ｘ５，ｘ６，ｐ１）をダイｄ７、ｄ１３、ｄ９、ｄ２、ｄ８、ｄ１５から読み込み、これらｘ１、ｘ３、ｘ４、ｘ５、ｘ６、ｐ１からｘ２を復元し、復元したｘ２をホスト２に返す。
【０１７２】
加えて、この時、ＳＳＤ３のコントローラ４は、（ｄ１１，ｂ１）、（ｄ３，ｂ７）を解放することによって消失されたｐ２、ｐ３を復元（再算出）してもよい（ケースＸ）。ｐ２、ｐ３は、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６を使用して再算出することができる。さらに、コントローラ４は、この再算出されたパリティｐ２、ｐ３を、ＤＲＡＭ６にキャッシュとして保存してもよい。この場合、パリティｐ２、ｐ３は、ＤＲＡＭ６上のパリティキャッシュ６Ａのエントリの一つに保存される。パリティキャッシュ６Ａにおいては、図２２に示すように、パリティｐ２、ｐ３は、パリティｐ２、ｐ３が属するパリティグループの識別子（ここでは、ｒｉｄ＝１、ｖｉｄ＝１２、ｐａｇｅ番号＝０）と一緒にパリティキャッシュ６Ａのエントリに保存される。
【０１７３】
さらに、まだダイｄ６における書き込み処理が終了していない段階で、ダイｄ１３のいずれかの物理ブロックへの新たな書き込み要求がホスト２から到来したものとする。
【０１７４】
そして、さらに、この２つの書き込み要求に対応する書き込み処理の実行中に、（ｄ１３，ｂ１０，ｐａｇｅ＝０）、すなわちデータｘ３への新たな読み込み要求がホスト２から到来したものとする。この場合、データｘ３を含むパリティグループにおいては、２つのダイ衝突が発生することになる。しかし、このパリティグループについては、一つのパリティｐ１のみがＮＡＮＤ型フラッシュメモリ５に格納されている。
【０１７５】
したがって、ＳＳＤ３のコントローラ４は、パリティキャッシュ６Ａ内を探索し、このパリティグループのパリティｐ２、ｐ３をパリティキャッシュ６Ａから取得する。ｘ３は、（ｘ１，ｘ４，ｘ５，ｘ６，ｐ１，ｐ２，ｐ３）のうち任意の６つを使用して復元することができる。よって、コントローラ４は、例えば、（ｘ１，ｘ４，ｘ５，ｘ６）をダイｄ７、ｄ９、ｄ２、ｄ８から読み込み、（ｘ１，ｘ４，ｘ５，ｘ６，ｐ２，ｐ３）を使用してｘ３を復元し、ｘ３をホスト２に返すことができる。
【０１７６】
ＤＲＡＭ６の領域は有限であるため、ＤＲＡＭ６に保存するパリティの量を一定としてもよい。
【０１７７】
いま、ＤＲＡＭ６に保存されているパリティの量が一定量に達している場合、つまりパリティキャッシュ６Ａに空きエントリが存在しない場合を想定する。ＮＡＮＤ型フラッシュメモリ５に保存されていないパリティが計算によって新しく得られた場合、コントローラ４は、新しく得たパリティをパリティキャッシュ６Ａに保存せずに廃棄してもよいし、すでに保存されているパリティをパリティキャッシュ６Ａから削除（追い出し）して新たな空きエントリを作り、新しく得たパリティをその新たな空きエントリに保存してもよい。この消去（追い出し）すべきパリティの選択については、例えばＬＲＵなどに代表される方法を使用してもよい。
【０１７８】
図２３のフローチャートは、ＳＳＤ３のコントローラ４によって実行されるパリティ削除およびキャッシュフィル処理の手順を示す。
【０１７９】
コントローラ４は、ＳＳＤ３の空き容量（つまり、ＮＡＮＤ型フラッシュメモリ５の空き容量）をチェックする（ステップＳ４０１）。ＳＳＤ３の空き容量が閾値よりも少ない場合（ステップＳ４０２のＹＥＳ）、コントローラ４は、削除対象のパリティをパリティキャッシュ６Ａに格納する（ステップＳ４０３）。例えば、ｍａｘ＿ｍ＝３の領域においてはパリティｐ１、ｐ２、ｐ３がそれぞれ格納されている３つの物理ブロックが存在するので、例えば、最初に、パリティｐ１、ｐ２、ｐ３の一つ（例えばｐ２）が削除対象のパリティとして選択されてもよい。
【０１８０】
次いで、コントローラ４は、削除対象のパリティが格納されている物理ブロックを解放する（ステップＳ４０４）。ステップＳ４０４では、削除対象のパリティが格納されている物理ブロックが解放されることによってパリティ（例えばｐ２）が削除される。
【０１８１】
次に、コントローラ４は、「ｍａｘ＿ｍ  −  １」を求め、「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しいか否かをチェックする（ステップＳ４０５）。
【０１８２】
「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しくないならば（ステップＳ４０５のＮＯ）、コントローラ４は、残りのパリティｐ１、ｐ３の一つ（例えばｐ３）を削除対象のパリティとして選択し、この削除対象のパリティをパリティキャッシュ６Ａに格納する（ステップＳ４０３）。次いで、コントローラ４は、削除対象のパリティが格納されている物理ブロックを解放する（ステップＳ４０４）。ステップＳ４０４では、削除対象のパリティが格納されている物理ブロックが解放されることによってパリティ（例えばｐ３）が削除される。
【０１８３】
そして、コントローラ４は、「ｍａｘ＿ｍ  −  １」を求め、「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しいか否かをチェックする（ステップＳ４０５）。
【０１８４】
「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しいならば（ステップＳ４０５のＹＥＳ）、コントローラ４は、処理を終了する。
【０１８５】
なお、例えば、ｍａｘ＿ｍ＝３、ｍｉｎ＿ｍ＝１の領域においては、パリティｐ１、ｐ２、ｐ３がそれぞれ格納されている３つの物理ブロックの内、２つの物理ブロックを同時に解放してもよい。この場合、コントローラ４は、例えば、２つのパリティｐ２、ｐ３を削除対象のパリティとして選択してもよい。これらパリティｐ２、ｐ３は同じパリティグループ識別子を共有している。したがって、ステップＳ４０３では、パリティｐ２、ｐ３とこれらパリティｐ２、ｐ３に共通のパリティグループ識別子とがパリティキャッシュ６Ａの一つのエントリに格納されてもよい。
【０１８６】
図２４のフローチャートは、ＳＳＤ３のコントローラ４によって実行されるパリティ削除およびキャッシュフィル処理の別の手順を示す。
【０１８７】
ＳＳＤ３がホスト２からのリード要求を受信すると（ステップＳ５０１のＹＥＳ）、コントローラ４は、リード要求によって指定された記憶位置に対応するダイ（つまり、リードすべき目的のデータが格納されているダイ）にダイ衝突が起きているか否かを判定する（ステップＳ５０２）。
【０１８８】
ダイ衝突が起きている場合（ステップＳ５０２のＹＥＳ）、コントローラ４は、リード要求によって指定されたデータが属するパリティグループのデータおよびパリティをリードする（ステップＳ５０３）。続いて、コントローラ４は、パリティグループのデータおよびパリティを使用して、リード要求によって指定されたデータを復元し（ステップＳ５０４）、復元したデータをホスト２に返す（ステップＳ５０５）。
【０１８９】
続いて、コントローラ４は、パリティグループのデータおよびパリティを使用して、削除されたパリティを再算出し（ステップＳ５０６）、その再算出されたパリティをパリティグループ識別子と一緒にパリティキャッシュ６Ａに格納する（ステップＳ５０７）。
【０１９０】
ダイ衝突が起きていない場合（ステップＳ５０２のＮＯ）、コントローラ４は、リード要求によって指定されたデータを、このデータが格納されているダイからリードし、リードしたデータをホスト２に返す（ステップＳ５０８）。
【０１９１】
＜ホストからのリード領域に対するヒント＞
次に、リード対象領域を予告する通知（ヒント）をホスト２から受信した場合に実行される処理について説明する。
【０１９２】
ホスト２は、これから読込を行う領域を事前に認識できる場合、その領域をＳＳＤ３に伝えてもよい。ＳＳＤ３は、伝えられた領域については、優先的にパリティを保護してもよい。パリティを保護するとは、例えばＳＳＤ３から削除する場合、その削除の優先順位を引き下げるといった処理を指す。あるいは，パリティキャッシュ６Ａにその領域のパリティが含まれている場合には、その領域のパリティの消去の優先順位を引き下げるといった処理を指す。これは、例えば、ＬＲＵのようなアルゴリズムを用いてパリティキャッシュ６Ａ内のパリティの削除順を決定した場合には、伝えられた領域のパリティの削除順序を変更して優先的に削除対象から除外するような処理を含む。
【０１９３】
図２５は、パリティをＮＡＮＤ型フラッシュメモリ５またはパリティキャッシュ６Ａから削除する場合、その削除の優先順位（削除順）を変更する処理を示す。
【０１９４】
パリティキャッシュ６Ａ内の各パリティについて、コントローラ４は、ＬＲＵ等に代表されるアルゴリズムに従って、パリティの追い出し順序（削除順序）を決定する（ステップＳ６０１）。
【０１９５】
ここで、ＳＳＤ３がホスト２からリード対象領域を予告する通知（ヒント）を受信すると、コントローラ４は、ホスト２から通知されたリード対象領域のパリティの追い出し順序（削除順序）を変更してこのパリティをパリティキャッシュ６Ａに優先的に残す（ステップＳ６０２）。例えば、リード対象領域がｒｉｄ＝１、ｖｉｄ＝１であったならば、ｒｉｄ＝１、ｖｉｄ＝１に関連付けられたパリティの追い出し順序（削除順序）が変更され、このパリティがパリティキャッシュ６Ａに優先的に残される。
【０１９６】
ＮＡＮＤ型フラッシュメモリ５から削除すべきパリティを決定する際においても、同様の処理が行われる。例えば、リード対象領域がｒｉｄ＝１、ｖｉｄ＝１であったならば、ｒｉｄ＝１、ｖｉｄ＝１に関連付けられたパリティの削除順序が変更され、このパリティがＮＡＮＤ型フラッシュメモリ５に優先的に残される。
【０１９７】
あるいは、ＳＳＤ３のアイドル期間においては、ヒントによって指定されたリード対象領域のパリティを積極的に復元してもよい。例えば、ヒントによって指定されたリード対象領域のパリティが既に削除されていた場合、このリード対象領域のパリティが復元される。コントローラ４は、復元されたパリティを、ＤＲＡＭ６のパリティキャッシュ６Ａに保存してもよいし、物理ブロックに書き込んでもよい。
【０１９８】
ホスト２は、これから読み込みを行なわない領域についても、それを認識できる場合にはその領域をＳＳＤ３に伝えてもよい。ＳＳＤ３は、その領域については優先的にパリティを削除してもよい。
【０１９９】
＜ホスト側のメモリの活用＞
次に、ホスト２側のメモリを活用することについて説明する。
【０２００】
ホスト２はランダムアクセスメモリ（例えばＤＲＡＭ）を備えており、通常、このホスト２のＤＲＡＭのサイズはＳＳＤ３のＤＲＡＭ６のサイズよりも大きい。したがって、ホスト２のＤＲＡＭを使用することにより、より多くのパリティを管理することができる。
【０２０１】
ＳＳＤ３のコントローラ４は、パリティが計算された時点、例えば最初の書き込み時、あるいは、ＲＡＩＤ読み込みを行う際に、消去されているパリティを計算した場合において、このパリティをその位置（このパリティに対応するパリティグループ識別子）と共にホスト２に通知してもよい。この様子を図２６に示す。図２６では、ＮＡＮＤ型フラッシュメモリ５から削除されたパリティｐ２、ｐ３をパリティグループ識別子（ｒｉｄ１、ｖｉｄ１２、ｐａｇｅ＝０）と共にＳＳＤ３内のパリティキャッシュ６Ａに保存すると共に、パリティｐ２、ｐ３およびパリティグループ識別子（ｒｉｄ１、ｖｉｄ１２、ｐａｇｅ＝０）がホスト２に通知される場合が例示されている。ホスト２は、通知されたパリティｐ２、ｐ３およびパリティグループ識別子（ｒｉｄ１、ｖｉｄ１２、ｐａｇｅ＝０）を、ホスト２内のＤＲＡＭ５０上のパリティキャッシュ５０Ａに保存する。
【０２０２】
ホスト２は、いまからリードしようとするデータの位置に対するパリティを知っている場合には、リード要求の中に当該パリティを含めてもよい。
【０２０３】
例えば、上述のケースＸの状態で、ＳＳＤ３のコントローラ４は、（ｄ１１，ｂ１）、（ｄ３，ｂ７）の解放によって失われたパリティｐ２、ｐ３を再算出し、以下のパリティ通知をホスト２に送信することによって、この再算出されたパリティｐ２、ｐ３をホスト２に通知する。
【０２０４】
パリティ通知（ｒｉｄ＝１，ｖｉｄ＝１２，ｐａｇｅ＝０，［ｐ２，ｐ３］）
ホスト２は、この通知を受け取った場合に、パリティグループ識別子（ｒｉｄ１、ｖｉｄ１２、ｐａｇｅ＝０）およびパリティｐ２、ｐ３をホスト２内のＤＲＡＭ５０上のパリティキャッシュ５０Ａのエントリに保存する。
【０２０５】
ホスト２は、リード要求を送信しようとする際に、そのリード要求によって指定されるＳＳＤアドレス（ｒｉｄ、ｖｉｄ、ｐａｇｅ番号）にマッチするエントリをパリティキャッシュ５０Ａから探索する。リード要求によって指定されるＳＳＤアドレス（ｒｉｄ、ｖｉｄ、ｐａｇｅ番号）にマッチするエントリがパリティキャッシュ５０Ａに存在する場合、ホスト２は、このエントリ内のパリティを含むリード要求をＳＳＤ３に送信してもよい。なお、ホスト２は、知りうる全てのパリティをＳＳＤ３に送信してもよいし、いくつかのパリティを選択的にＳＳＤ３に送信してもよい。
【０２０６】
仮にいま、ＳＳＤ３内部のパリティキャッシュ６Ａからは（ｒｉｄ＝１，ｖｉｄ＝１２，ｐａｇｅ＝０）のエントリは消去されてしまったものとし，またＮＡＮＤ型フラッシュメモリ５にも、物理ブロック（ｄ１５，ｂ１３）に格納されているパリティ（値はｐ１）しか残っていないものとする。
【０２０７】
ここでホスト２はデータｘ３を読み出そうとしたとする。このとき、ホスト２側のパリティキャッシュ５０Ａにはデータｘ３が属するパリティグループのパリティｐ２、ｐ３が残っているので、ホスト２は、このパリティｐ２、ｐ３が付加されたリード要求を送信する。
【０２０８】
リード要求（ｒｉｄ＝１，ｖｉｄ＝１２，ｐａｇｅ＝２，ｐａｒｉｔｉｅｓ＝（ｐ２、ｐ３））
このリード要求は、ＳＳＤ３の内部的には、（ｄ１３，ｂ１０，ｐａｇｅ＝０）への読み込みとなる。
【０２０９】
この時点で、仮にｄ７とｄ１３が書き込み処理中であったとする。
【０２１０】
ＳＳＤ３内部にはこのリード対象のデータが属するパリティグループ用の１つのパリティｐ１しか存在しない。したがって、通常では、読み込み対象のダイｄ１３に加え、さらに他のダイｄ７でも衝突が起きているこの状況では、リード対象のデータｘ３を復元することは出来ない。
【０２１１】
しかし、ホスト２からパリティｐ２、ｐ３が与えられているので、ＳＳＤ３のコントローラ４は、［ｘ２，ｘ４，ｘ５，ｘ６，ｐ１，ｐ２，ｐ３］のうち任意の６個のデータを用いてｘ３を復元でき、ホスト２にｘ３を返すことができる。
【０２１２】
ＳＳＤ３側に存在するパリティ数が消去のため不足しており、かつホスト２側からパリティが与えられなかった場合、ＳＳＤ３のコントローラ４は、エラーをホスト２に返してもよい。この時、コントローラ４は、エラーと一緒、リード対象のデータが属するパリティグループ内で衝突なく読み出せる全てのデータ（パリティを含む）をホスト２に送信してもよい。
【０２１３】
いま、ＳＳＤ３内部のパリティキャッシュ６Ａからは、（ｒｉｄ＝１，ｖｉｄ＝１２，ｐａｇｅ＝０）のエントリは消去されてしまったものとし、またＮＡＮＤ型フラッシュメモリ５にも、物理ブロック（ｄ１５，ｂ１３）に格納されているパリティ（値はｐ１）しか残っていないものとする。
【０２１４】
ここでホスト２はデータｘ３を読み出そうとしたとする。このとき、ホスト２は、パリティを含まない以下のリード要求を送信したとする。
【０２１５】
リード要求（ｒｉｄ＝１，ｖｉｄ＝１２，ｐａｇｅ＝２）
このリード要求は、ＳＳＤ３の内部的には、（ｄ１３，ｂ１０，ｐａｇｅ＝０）への読み込みとなる。
【０２１６】
この時点で、仮にｄ７とｄ１３が書き込み処理中であったとする。
【０２１７】
ＳＳＤ３内部にはこのリード対象のデータが属するパリティグループ用の１つのパリティｐ１しか存在しない。よって、読み込み対象のダイｄ１３に加え、さらに他のダイｄ７でも衝突が起きているこの状況では、ｘ３を復元することはできない。
【０２１８】
このとき、ＳＳＤ３のコントローラ４は、リード対象のデータが含まれるパリティグループ内で衝突なく読み出せる全てのデータ（パリティを含む）をＮＡＮＤ型フラッシュメモリ５から読み出し、これら読み出した全てのデータ（パリティを含む）をエラーと共にホスト２へ返す。
【０２１９】
ページリードエラー（ｒｉｄ＝１，ｖｉｄ＝１２，ｐａｇｅ＝２，［ｘ２，ｘ４，ｘ５，ｘ６，ｐ１］）
ホスト２はこのエラーを受信すると、ホスト２側のパリティキャッシュ５０Ａを検索する。リード対象のデータを含むパリティグループのパリティがパリティキャッシュ５０Ａにあれば、それを用いてリード対象のデータｘ３を復元してもよい。
【０２２０】
この例では、ｐ２、ｐ３を所持しているため、［ｘ２，ｘ４，ｘ５，ｘ６，ｐ１，ｐ２，ｐ３］のうち任意の６個のデータを用いてｘ３を復元することができる。
【０２２１】
また、ホスト２は、ＲＡＩＤ読み込みでデータが復元できない場合にＳＳＤ３が取るべき処置の内容を、ＳＳＤ３に明示的に指示してもよい。
【０２２２】
例えば、ホスト２は、ＳＳＤ３に対して、ＲＡＩＤ読み込みでデータが復元できない場合にはダイ衝突を起こさずに読み出せるデータ（パリティを含む）を全て読み出し且つ読み出したデータをエラー（ページリードエラー）と共にホスト２へ返すように指示してもよい。
【０２２３】
あるいは、ホスト２は、ＳＳＤ３に対して、ＲＡＩＤ読み込みでデータが復元できない場合にはダイ衝突を起こさずに読み出せるデータの読み出しを全く行わず、単にエラーのみをホスト２へ返すように指示してもよい。
【０２２４】
あるいは、ホスト２は、ＳＳＤ３に対して、ＲＡＩＤ読み込みでデータが復元できない場合には該データが読み出せるようになるまで待ち、それから該データを読み出して、そのデータをホスト２へ返すように指示してもよい。
【０２２５】
また、ＳＳＤ３のコントローラ４は、パリティキャッシュ６Ａのエントリを削除する際には、この処理の内容をホスト２に通知してもよい。その様子を図２７に示す。図２７の例では、図２７では、ＳＳＤ３内のパリティキャッシュ６Ａから、（ｒｉｄ１、ｖｉｄ１２、ｐａｇｅ＝０）が削除される場合が例示されている。この場合、コントローラ４は、以下の通知（パリティキャッシュドロップ）をホスト２に送信する。
【０２２６】
パリティキャッシュドロップ（ｒｉｄ＝１，ｖｉｄ＝１２，ｐａｇｅ＝０，［ｐ２，ｐ３］）
ホスト２は、この通知を受けた場合、もし、パリティキャッシュドロップによって通知されたエントリと同一のエントリがホスト２側のパリティキャッシュ５０Ａに存在すねならば、このエントリを優先的に保護してもよい。すなわち、このエントリを優先的に削除対象から除外するといった処理を行ってもよい。
【０２２７】
図２８のフローチャートは、ＳＳＤ３のコントローラ４によって実行されるパリティ削除およびパリティ通知処理の手順を示す。
【０２２８】
コントローラ４は、ＳＳＤ３の空き容量（つまり、ＮＡＮＤ型フラッシュメモリ５の空き容量）をチェックする（ステップＳ７０１）。ＳＳＤ３の空き容量が閾値よりも少ない場合（ステップＳ７０２のＹＥＳ）、コントローラ４は、削除対象のパリティをパリティキャッシュ６Ａに格納する（ステップＳ７０３）。例えば、ｍａｘ＿ｍ＝３の領域においてはパリティｐ１、ｐ２、ｐ３がそれぞれ格納されている３つの物理ブロックが存在するので、例えば、最初に、パリティｐ１、ｐ２、ｐ３の一つ（例えばｐ２）が削除対象のパリティとして選択されてもよい。
【０２２９】
次いで、コントローラ４は、削除対象のパリティをホスト２に通知し（ステップＳ７０４）、そして削除対象のパリティが格納されている物理ブロックを解放する（ステップＳ７０５）。ステップＳ７０５では、削除対象のパリティが格納されている物理ブロックが解放されることによってパリティ（例えばｐ２）が削除される。
【０２３０】
次に、コントローラ４は、「ｍａｘ＿ｍ  −  １」を求め、「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しいか否かをチェックする（ステップＳ７０６）。
【０２３１】
「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しくないならば（ステップＳ７０６のＮＯ）、コントローラ４は、残りのパリティｐ１、ｐ３の一つ（例えばｐ３）を削除対象のパリティとして選択し、この削除対象のパリティをパリティキャッシュ６Ａに格納し（ステップＳ７０３）、この削除対象のパリティをホスト２に通知する（ステップＳ７０４）。次いで、コントローラ４は、削除対象のパリティが格納されている物理ブロックを解放する（ステップＳ７０５）。ステップＳ７０５では、削除対象のパリティが格納されている物理ブロックが解放されることによってパリティ（例えばｐ３）が削除される。
【０２３２】
そして、コントローラ４は、「ｍａｘ＿ｍ  −  １」を求め、「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しいか否かをチェックする（ステップＳ７０６）。
【０２３３】
「ｍａｘ＿ｍ  −  １」がｍｉｎ＿ｍと等しいならば（ステップＳ７０６のＹＥＳ）、コントローラ４は、処理を終了する。
【０２３４】
なお、例えば、ｍａｘ＿ｍ＝３、ｍｉｎ＿ｍ＝１の領域においては、パリティｐ１、ｐ２、ｐ３がそれぞれ格納されている３つの物理ブロックの内、２つの物理ブロックを同時に解放してもよい。この場合、コントローラ４は、例えば、２つのパリティｐ２、ｐ３を削除対象のパリティとして選択してもよい。これらパリティｐ２、ｐ３は同じパリティグループ識別子を共有している。したがって、ステップＳ７０４では、パリティｐ２、ｐ３とこれらパリティｐ２、ｐ３に共通のパリティグループ識別子とがホスト２に通知されてもよい。
【０２３５】
図２９のフローチャートは、ＳＳＤ３のコントローラ４によって実行されるパリティ削除およびパリティ通知処理の別の手順を示す。
【０２３６】
ＳＳＤ３がホスト２からのリード要求を受信すると（ステップＳ８０１のＹＥＳ）、コントローラ４は、リード要求によって指定された記憶位置に対応するダイ（つまり、リードすべき目的のデータが格納されているダイ）にダイ衝突が起きているか否かを判定する（ステップＳ８０２）。
【０２３７】
ダイ衝突が起きている場合（ステップＳ８０２のＹＥＳ）、コントローラ４は、リード要求によって指定されたデータが属するパリティグループのデータおよびパリティをリードする（ステップＳ８０３）。このパリティグループのあるパリティが削除されている場合には、ステップＳ８０３では、リード要求によって指定されたリード対象データと削除されパリティとを除くこのパリティグループのデータおよびパリティがＮＡＮＤ型フラッシュメモリ５から読み出される。続いて、コントローラ４は、読み出したパリティグループのデータおよびパリティを使用して、リード要求によって指定されたデータを復元し（ステップＳ８０４）、復元したデータをホスト２に返す（ステップＳ８０５）。
【０２３８】
続いて、コントローラ４は、復元されたデータと、読み出したパリティグループのデータとを使用して、削除されたパリティを再算出し（ステップＳ８０６）、その再算出されたパリティをそのパリティグループ識別子と一緒にパリティキャッシュ６Ａに格納する（ステップＳ８０７）。さらに、コントローラ４は、再算出されたパリティをそのパリティグループ識別子と一緒にホスト２に通知する（ステップＳ８０８）。
【０２３９】
ダイ衝突が起きていない場合（ステップＳ８０２のＮＯ）、コントローラ４は、リード要求によって指定されたデータを、このデータが格納されているダイからリードし、リードしたデータをホスト２に返す（ステップＳ８０９）。
【０２４０】
図３０のフローチャートは、ホスト２によって実行されるリード要求送信処理の手順を示す。
【０２４１】
ホスト２がリード要求を送信しようとする際に、ホスト２は、ホスト２側のパリティキャッシュ５０Ａを参照し（ステップＳ９０１）、このリード要求によって指定されるリード対象データに対応するパリティグループのパリティがホスト２側のパリティキャッシュ５０Ａに存在するか否かを判定する（ステップＳ９０２）。例えば、リード要求によって指定されるＳＳＤアドレスが（ｒｉｄ＝１、ｖｉｄ＝１２、ｐａｇｅ＝０）であるならば、（ｒｉｄ＝１、ｖｉｄ＝１２、ｐａｇｅ＝０）と同じパリティグループ識別子（パリティグループｉｄ）を持つエントリがホスト２側のパリティキャッシュ５０Ａから検索される。
【０２４２】
リード要求によって指定されるリード対象データに対応するパリティグループのパリティがホスト２側のパリティキャッシュ５０Ａに存在するならば（ステップＳ９０２のＹＥＳ）、ホスト２は、ホスト２側のパリティキャッシュ５０Ａからこのパリティとこのパリティに対応するパリティグループｉｄとを取得する（ステップＳ９０３）。そして、ホスト２は、その取得したパリティとこのパリティに対応するパリティグループｉｄと含むリード要求（リードコマンド）を、ＳＳＤ３に送信する（ステップＳ９０４）。
【０２４３】
一方、対応するパリティがホスト２側のパリティキャッシュ５０Ａに存在しないならば（ステップＳ９０２のＮＯ）、ホスト２は、パリティおよびパリティグループｉｄを含まない、通常のリード要求（リードコマンド）をＳＳＤ３に送信する（ステップＳ９０５）。
【０２４４】
図３１は、ホスト２がパリティキャッシュドロップ通知を受信した際にホストによって実行されるパリティ保護処理の手順を示す。
【０２４５】
ホスト２がＳＳＤ３からパリティキャッシュドロップ通知を受信した場合（ステップＳ１００１のＹＥＳ）、ホスト２は、ホスト２側のパリティキャッシュ５０Ａを参照して、パリティキャッシュドロップ通知によって通知されたパリティグループのパリティが格納されているエントリがパリティキャッシュ５０Ａに存在するか否かを判定する（ステップＳ１００２）。
【０２４６】
通知されたパリティグループのパリティが格納されているエントリがパリティキャッシュ５０Ａに存在する場合（ステップＳ１００３のＹＥＳ）、ホスト２は、通知されたパリティグループのパリティが格納されているエントリを他のエントリよりも優先的にホスト側のパリティキャッシュ５０Ａに残すための処理を行う（ステップＳ１００４）。すなわち、通常は、ホスト２は、ＬＲＵに代表されるアルゴリズムを使用してホスト側のパリティキャッシュ５０Ａのパリティそれぞれの削除順序（追い出し順序）を決定するが、パリティキャッシュドロップ通知を受信した場合には、通知されたパリティの削除順序を変更してこのパリティを他のパリティよりも優先的にホスト側のパリティキャッシュ５０Ａに残す。これにより、ＳＳＤ３内で失われたパリティがホスト側のパリティキャッシュ５０Ａに存在する確率を高めることができる。
【０２４７】
＜書き込みのスロットリング＞
ＳＳＤ３のコントローラ４は、全ての領域（全てのＲＡＩＤ読み込み可能領域）におけるダイ衝突可能性がこれら領域それぞれに対応する制約を満たすように、あるいは全ての領域から選択された少なくとも一つの領域（少なくとも一つのＲＡＩＤ読み込み可能領域）におけるダイ衝突可能性がその領域に対応する制約を満たすように、ホスト２からのデータ書き込みの速度を制限してもよい。ここで、各領域に対応する制約とは、その領域のＲＡＩＤ読み込みで回避可能なダイ衝突数、つまりその領域のｍの数に相当する。
【０２４８】
例えば、コントローラ４は、各領域（ＲＡＩＤ読み込み可能領域）毎に、その領域に割り当てられているダイの組み合わせを求める。ある領域に割り当てられているダイの組み合わせをダイグループと呼ぶ。図１１の仮想ブロック管理テーブル３３Ｃの例では、ｒｉｄ＝１のＲＡＩＤ読み込み可能領域のダイグループは、（ｄ７，ｄ６，ｄ１３，ｄ９，ｄ２，ｄ８，ｄ１５，ｄ１１，ｄ３）となる。
【０２４９】
例えば、コントローラ４は、ホスト２から受信された書き込み要求それぞれをリストやキューによって管理し、これら書き込み要求の中から、次に実行すべき書き込み要求を、評価関数を用いて選択してもよい。この場合、コントローラ４は、全ての領域（全てのＲＡＩＤ読み込み可能領域）におけるダイ衝突可能性がこれら領域それぞれに対応する制約を満たすように、ホスト２から受信された書き込み要求それぞれの実行タイミングをスケジューリングしてもよい。あるいは、コントローラ４は、ＲＡＩＤ読み込み可能領域それぞれに優先順位を付け、最も優先すべきＲＡＩＤ読み込み可能領域のダイグループに対して同時に実行される書き込み動作の数がこの最も優先すべきＲＡＩＤ読み込み可能領域のパリティ数ｍ以下に制限されるように、これら書き込み要求それぞれの実行タイミングをスケジューリングしてもよい。
【０２５０】
以下、説明を簡単にするために、ＳＳＤ３が１６個のダイｄ０〜ｄ１５を備えており、４つの領域のダイグループが以下のように分類され、且つ各グループがｋ＝３、ｍ−１のＲＡＩＤ構成を有する場合を想定する。
【０２５１】
領域＃１のダイグループ：（ｄ０，ｄ１，ｄ２，ｄ３）
領域＃２のダイグループ：（ｄ４，ｄ５，ｄ６，ｄ７）
領域＃３のダイグループ：（ｄ８，ｄ９，ｄ１０，ｄ１１）
領域＃４のダイグループ：（ｄ１２，ｄ１３，ｄ１４，ｄ１５）
いま、１６個のダイｄ０〜ｄ１５それぞれに対する１６個の書き込み要求がホスト２から受信されたとする。この場合、コントローラ４は、各ダイグループにおいて同時に一つの書き込み動作しか起こらないように１６個の書き込み要求をスケジューリングしてもよい。例えば、最初は、１６個の書き込み要求から、ｄ０への書き込み要求、ｄ４への書き込み要求、ｄ８への書き込み要求、ｄ１２への書き込み要求が選択され、これら書き込み要求に対応する書き込み動作が実行されてもよい。いずれかの書き込み動作が完了した場合、例えば、ｄ０の書き込み動作が完了した場合、残りの書き込み要求から、領域＃１のダイグループ内の別のダイへの書き込み要求が次に実行されるべき書き込み要求として選択されてもよい。
【０２５２】
なお、各領域に割り当てるべきダイそれぞれをランダムに選択するケースにおいては、幾つかのダイが複数の領域（ＲＡＩＤ読み込み可能領域）間で共通に使用される。しかも、実際には、割り当てられるダイ数も領域毎に異なる。このため、実際には、全ての領域のダイ衝突可能性がそれら領域の制約を満たすように書き込み要求をスケジュールすることは難しい場合がある。よって、各領域に割り当てるべきダイそれぞれをランダムに選択するケースにおいては、全ての領域から選択された少なくとも一つの領域におけるダイ衝突可能性がその領域に対応する制約を満たすように、ホスト２からの書き込み要求をスケジューリングしてもよい。
【０２５３】
例えば、図３２の例では、４つのダイグループ＃１、＃２、＃３、＃４に優先順位が付けられており、ダイグループ＃１が最も優先順位の高いダイグループである。ダイグループ＃１にはｋ１＋ｍ１個のダイが割り当てられている。この場合、コントローラ４は、ホスト２から受信される書き込み要求それぞれの実行タイミングをスケジューリングすることによって、ダイグループ＃１に対応するｋ１＋ｍ１個のダイに対して同時に実行される書き込み動作の数をｍ１以下に制限してもよい。
【０２５４】
＜パリティ算出方法／パリティ構成を可変にする＞
次に、パリティ算出方法およびパリティ構成を可変にすることについて説明する。
【０２５５】
ホスト２は、ユーザは、ＳＳＤ３に対して任意のｋ＋ｍを動的に宣言するだけではなく、ホスト２のワークロード等を踏まえて、使用すべきパリティ算出方法を領域毎に指定してもよい。使用可能なパリティ算出方法としては、ＸＯＲパリティ、Ｐパリティ／Ｑパリティ（Ｐ＋Ｑ）、リードソロモン（Reed Solomon）、等が挙げられる。例えば、ｍ＝１の領域についてはＸＯＲパリティを使用し、ｍ＝２の領域についてはＰ＋Ｑパリティを使用し、ｍ＞２の領域についてはリードソロモン（Reed Solomon）を使用してもよい。
【０２５６】
また、ホスト２は、使用すべきパリティ構成として、ＬＲＣ（Local Reconstruction Codes）を指定してもよい。ＬＲＣを使用した場合には、ダイ衝突によってすぐにはリードできないデータを、より少ない数のデータおよびパリティによって復元することができるため、よりテイルリードレイテンシが改善されることが期待できる。
【０２５７】
また、ホスト２は、使用すべきパリティ構成として、図３３に示すような二次元パリティを指定してもよい。ｐｘ１〜ｐｘ４は、水平方向に配置されたデータ部それぞれから算出されるパリティである。すなわち、例えば、ｐｘ１は、（ｘ１，ｘ２，ｘ３，ｘ４）を対象としたパリティであり、ｐｙ５は、（ｐｙ１，ｐｙ２，ｐｙ３，ｐｙ４）を対象としたパリティである。ｐｙ１〜ｐｙ５は、垂直方向に配置されたデータ部それぞれから算出されるパリティである。すなわち、例えば、ｐｙ１は、（ｘ１，ｘ５，ｘ９，ｘ１３）を対象としたパリティであり、ｐｙ５は（ｐｘ１，ｐｘ２，ｐｘ３，ｐｘ４）を対象としたパリティである。これにより、許容できるダイ衝突のパターンをより広くすることができる。図３３の二次元パリティは、ｋ＝１６、ｍ＝９のＲＡＩＤ構成の一種として扱うことができる。
【０２５８】
また、ＳＳＤ３のコントローラ４は、事前に該ＳＳＤ３が提供できる全てのパリティ算出方法をホスト２に報告してもよい。ホスト２は、これらパリティ算出方法の中から、使用すべきパリティ算出方法を選択する。パリティ算出方法は領域毎に選択し得る。パリティ算出方法がホスト２から指定されなかった場合には、ＳＳＤ３のコントローラ４が、使用すべきパリティ算出方法を自動的に選択してもよい。
【０２５９】
同様に、ＳＳＤ３のコントローラ４は、事前に該ＳＳＤ３が提供できる全てのパリティ構成（１次元パリティ、２次元パリティ、ＬＲＣ、等）をホスト２に報告してもよい。ホスト２は、これらパリティ構成の中から、使用すべきパリティ構成を選択する。パリティ構成は領域毎に選択し得る。パリティ構成がホスト２から指定されなかった場合には、ＳＳＤ３のコントローラ４が、使用すべきパリティ構成を自動的に選択してもよい。
【０２６０】
図３４は、ホスト２として機能する情報処理装置（コンピューティングデバイス）のハードウェア構成例を示す。
【０２６１】
この情報処理装置は、サーバ（例えばストレージサーバ）のようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０２６２】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。このランダムアクセスメモリ上のある記憶領域が上述のホスト側パリティキャッシュ５０Ａとして使用される。プロセッサ１０１によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ４１、ＯＳ４２、ファイルシステム４３、ＲＡＩＤパラメータ指定部４３Ａ、パリティキャッシュ管理部４３Ｂを含む。
【０２６３】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０２６４】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０２６５】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続される。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０２６６】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。ＥＣ１０８は、キーボード（ＫＢ）などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【０２６７】
図３５は、複数のＳＳＤ３とホスト２とを含む情報処理装置（コンピューティングデバイス）の構成例を示す。
【０２６８】
この情報処理装置は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のＳＳＤ３は筐体２０１内に配置されても良い。この場合、各ＳＳＤ３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０２６９】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０２７０】
以上説明したように、本実施形態によれば、ホスト２がｋとｍの任意の組み合わせをＳＳＤ３内の領域毎に指定することを可能とし、これによって容量効率／ダイ衝突耐性に関する異なる特性を有する複数の領域（パリティを用いたダイ衝突回避読み込み可能領域）をＳＳＤ３内に共存させることができる。すなわち、ＲＡＩＤの一つのパリティグループを構成するデータ部の数およびパリティの数をＮＡＮＤ型フラッシュメモリ５の領域毎に指定するホスト２からの要求に基づいて、ＮＡＮＤ型フラッシュメモリ５内の第１領域に対応するデータ数およびパリティ数を示すｋおよびｍの組と、ｋおよびｍの組みと異なるｋ’およびｍ’の組であって、ＮＡＮＤ型フラッシュメモリ５内の第２領域に対応するデータ数およびパリティ数を示すｋ’およびｍ’の組とが管理される。そして、第１領域に対するホスト２からの書き込み要求に基づいて、ホスト２から受信されるｋ個のデータ部とｍ個のパリティとが、ｋ＋ｍ個の異なる不揮発性メモリダイから一つずつ選出されるｋ＋ｍ個の物理ブロックに跨がって書き込まれる。これにより、ホスト２からの書き込みデータを、ｋ個のデータ部とｍ個のパリティとを含むパリティグループとしてＮＡＮＤ型フラッシュメモリ５に格納することができ、最大でｍ個までのダイ衝突を回避することができる。また、第２領域に対するホスト２からの書き込み要求に基づいて、ホスト２から受信されるｋ’個のデータ部とｍ’個のパリティとをが、ｋ’＋ｍ’個の異なる不揮発性メモリダイから一つずつ選出されるｋ’＋ｍ’個の物理ブロックに跨がって書き込まれる。これにより、ホスト２からの書き込みデータを、ｋ’個のデータ部とｍ’個のパリティとを含むパリティグループとしてＮＡＮＤ型フラッシュメモリ５に格納することができ、最大でｍ’個までのダイ衝突を回避することができる。
【０２７１】
したがって、パリティを使用することにより、書き込み動作を実行中のダイへのリード要求が発生するというダイ衝突に対する耐性を改善できる。しかも、データ部の数とパリティ数との組み合わせが領域間で互いに異なるので、容量効率／ダイ衝突耐性に関する異なる特性を有する複数の領域をＳＳＤ３内に共存させることができる。
【０２７２】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２７３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２７４】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ライト動作制御部、２２…リード動作制御部、２３…ＲＡＩＤ読み込み可能領域制御部。
【図１】
2018073312.tif 000003
【図２】
2018073312.tif 000004
【図３】
2018073312.tif 000005
【図４】
2018073312.tif 000006
【図５】
2018073312.tif 000007
【図６】
2018073312.tif 000008
【図７】
2018073312.tif 000009
【図８】
2018073312.tif 000010
【図９】
2018073312.tif 000011
【図１０】
2018073312.tif 000012
【図１１】
2018073312.tif 000013
【図１２】
2018073312.tif 000014
【図１３】
2018073312.tif 000015
【図１４】
2018073312.tif 000016
【図１５】
2018073312.tif 000017
【図１６】
2018073312.tif 000018
【図１７】
2018073312.tif 000019
【図１８】
2018073312.tif 000020
【図１９】
2018073312.tif 000021
【図２０】
2018073312.tif 000022
【図２１】
2018073312.tif 000023
【図２２】
2018073312.tif 000024
【図２３】
2018073312.tif 000025
【図２４】
2018073312.tif 000026
【図２５】
2018073312.tif 000027
【図２６】
2018073312.tif 000028
【図２７】
2018073312.tif 000029
【図２８】
2018073312.tif 000030
【図２９】
2018073312.tif 000031
【図３０】
2018073312.tif 000032
【図３１】
2018073312.tif 000033
【図３２】
2018073312.tif 000034
【図３３】
2018073312.tif 000035
【図３４】
2018073312.tif 000036
【図３５】
2018073312.tif 000037