(57)【要約】      （修正有）【課題】ホストから要求信頼度に応じた情報を含むライトコマンドを受け取るストレージ装置を提供する。【解決手段】ストレージ装置は、コントローラがホストからのライトコマンドに含まれる特定の情報に基づいて要求信頼度を求め、求めた要求信頼度に応じた提供信頼度でデータを記憶媒体にライトする。【選択図】図１
2018055143.tif 000002
【特許請求の範囲】
【請求項１】
ホストからライトコマンドを受信し、前記ライトコマンドに含まれる特定情報に基づいてホストが要求する信頼度を求め、前記信頼度に応じてデータを記憶媒体にライトするストレージ装置。
【請求項２】
前記特定情報は論理アドレス空間を表す情報、コマンド発行元を表す情報、前記信頼度を表す情報のいずれかを具備する請求項１記載のストレージ装置。
【請求項３】
論理アドレス空間の範囲と前記信頼度との対応関係またはコマンド発行元と前記信頼度との対応関係を記憶するテーブルを具備し、
前記ライトコマンドに含まれる論理アドレス空間またはコマンド発行元を表す情報に基づいて前記テーブルを参照して、前記信頼度を求める請求項２記載のストレージ装置。
【請求項４】
前記記憶媒体にライトされたデータは、前記信頼度に応じて訂正能力が設定される誤り訂正符号化エンコーダにより符号化されたデータを具備する請求項１記載のストレージ装置。
【請求項５】
前記記憶媒体は複数の領域を具備し、
各領域には前記信頼度が異なるデータがライトされ、
前記ホストから領域または前記信頼度の変更を指示する領域変更コマンドを受信すると、変更の可否を判断し、判断結果を前記ホストへ返送する請求項４記載のストレージ装置。
【請求項６】
ライトコマンドをストレージ装置へ送信するホスト装置であって、
第１信頼度のデータの第１ライトコマンドに前記第１信頼度を表す特定情報を付して前記ストレージ装置へ送信し、
前記第１信頼度とは異なる第２信頼度のデータの第２ライトコマンドに前記第２信頼度を表す特定情報を付して前記ストレージ装置へ送信するホスト装置。
【請求項７】
前記ストレージ装置に接続される第１ポートと第２ポートを具備し、
前記第１ライトコマンドを前記第１ポートを介して前記ストレージ装置に送信し、
前記第２ライトコマンドを前記第２ポートを介して前記ストレージ装置に送信する請求項６記載のホスト装置。
【請求項８】
前記第１ライトコマンドは、前記第１信頼度のデータを第１空間アドレス範囲にライトするコマンドを具備し、
前記第２ライトコマンドは、前記第２信頼度のデータを第２空間アドレス範囲にライトするコマンドを具備する請求項６記載のホスト装置。
【請求項９】
第１ストレージ装置に接続される第１ポートと第２ストレージ装置に接続される第２ポートを具備し、
前記第１ライトコマンドを前記第１ポートを介して前記第１ストレージ装置に送信し、
前記第２ライトコマンドを前記第２ポートを介して前記第２ストレージ装置に送信する請求項６記載のホスト装置。
【請求項１０】
ホストからストレージ装置へライトコマンドを送信する方法であって、
前記ストレージ装置による前記ライトコマンドの実行に際して前記ホストにより要求される信頼度を表す特定情報を前記ライトコマンドに付して前記ストレージ装置へ送信する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は概してストレージ装置、ホスト装置及び方法に関する。
【背景技術】
【０００２】
ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＳＤ）等のホスト装置に接続され、記憶媒体を備えるストレージ装置では、ホスト装置がストレージ装置（以下、ドライブとも称する）に期待又は要求する信頼度（以下、要求信頼度とも称する）と、ハードディスクまたはＮＡＮＤ型フラッシュメモリ等の不揮発半導体メモリ等の記憶媒体自体の“素の信頼度”とのギャップを埋めるために、ホスト装置から送信されたデータを記憶媒体に格納する際に、誤り訂正符号が付加（これを誤り訂正符号化とも称する）される。これにより、ドライブに格納されているデータのリード時にエラーが生じても、エラーを訂正し、正しいデータを復元してリードすることができる。すなわち、誤り訂正符号化により、ホスト装置に対して、記憶媒体自体の“素の信頼度”が改善されたように見せることができる。
【０００３】
何ビットまでのエラーを訂正できるかを示す誤り訂正能力は誤り訂正符号の符号量に比例して高くなる。誤り訂正能力が高くなると、“素の信頼度”も高くなったように見える。しかし、誤り訂正符号の符号量が増えると、装置の記憶容量が減るので、誤り訂正能力を高くすることは、表記容量の減少および／または余裕容量の減少につながる。余裕容量の減少はランダムライト性能やストレージ装置の寿命の低下につながる。
【０００４】
一方、ストレージ装置にはビットコスト（単位量の記憶データ当たりのストレージ装置の価格）の低下が求められているので、ＳＳＤにおいてはＮＡＮＤ型フラッシュメモリの微細化、ＨＤＤにおいてはトラック密度の微細化等により、ストレージ装置は高密度化されている。しかし、高密度化に伴い“素の信頼度”は低下する。表記容量と余裕容量とは何れもストレージ装置のビットコストに関連しているので、相互に言い換え可能であり、以降、ビットコストと称することもある。
【０００５】
以上の説明および以下の説明は、ＨＤＤにもＳＳＤにも適用可能であるが、以下では説明の便宜上、ＳＳＤを例にとり説明する。しかし、以下の説明はＨＤＤに対しても全く同様に当てはまる。ＮＡＮＤ型フラッシュメモリの“素の信頼度”は、ビットエラーレート（ＢＥＲ）で評価することが可能である。ＢＥＲは、リードの結果において誤ったビット数の累積値／リードしたビット数の累積値である。あるＢＥＲを持つＮＡＮＤ型フラッシュメモリに、ある訂正能力を持つ誤り訂正符号を適用した場合、誤り訂正の失敗確率（フレームエラーレート）がドライブの信頼度として観測される。フレームエラーレートは訂正に失敗した（訂正できなかった）フレーム数の累積値／読み出したフレーム数の累積値である。ＮＡＮＤ型フラッシュメモリの物理容量は、ライトされたデータと、そのデータに付加された誤り訂正符号（以下、単に符号、とも称する）とで決まる。データサイズ／（データサイズ＋符号サイズ）で定義されるコードレートは、訂正能力と反比例する。すなわち、符号サイズを増やせば、訂正能力は高くなるが、コードレートは低くなる。逆に、符号サイズを減らせば、訂正能力は低くなるが、コードレートは高くなる。
【０００６】
従来、ストレージ装置の誤り訂正符号化では、データを失ってはならないことが原則であるので、全てのデータに対して同じ高い信頼度を保証できるように固定的に一律の訂正能力が決定されている。しかし、データに対する信頼度の要求は一律ではない。ストレージ装置が記憶するデータの中には必ずしも信頼度が高くなくてもよいデータがある。例えば、ストレージ装置がオリジナルデータのコピーのような非オリジナルデータを記憶し、当該ストレージ装置以外の他のストレージ装置がオリジナルデータを記憶している場合は、非オリジナルデータの信頼度は高くなくてもよい。当該ストレージ装置以外の他の装置は、アクセスする速度やリード・ライトの速度が遅いストレージ装置や、インタフェース上で遠いロケーションのストレージ装置を含んでもよい。再現性のある演算結果であるデータやキャッシュデータも信頼度が高くなくてもよい。プログラム等は一部でも欠落することは許容されないので信頼度は高い必要があるが、動画等のデータは一部が欠落しても許容される場合があるので、信頼度は高くなくてもよい。
【０００７】
高信頼度を保証するためには訂正能力を高くする必要があるが、そのためには誤り訂正符号の量は多くなる。要求される信頼度が異なるデータに対して一律に誤り訂正符号化すると、信頼度が高くなくてもよいデータに対しては誤り訂正符号の量は必要以上に多いことになる。そのため、ストレージ装置に記憶できるデータの量（サイズ）が減ることになり、ストレージ装置のビットコストが高くなる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】米国特許出願公開第2011／0271164号明細書
【特許文献２】米国特許出願公開第2014／0208182号明細書
【特許文献３】米国特許出願公開第2014／0164880号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従来のストレージ装置は、データを一律に固定的に誤り訂正符号化している。そのため、データに対する信頼度が一律ではない場合、ビットコストが高くなることがある。
【００１０】
本発明の目的は、ホストから要求信頼度に応じた情報を含むライトコマンドを受け取るストレージ装置を提供することである。
【課題を解決するための手段】
【００１１】
実施形態によれば、ストレージ装置は、ホストからのライトコマンドに含まれる特定の情報に基づいて要求信頼度を求め、求めた要求信頼度に応じた提供信頼度でデータを記憶媒体にライトする。
【図面の簡単な説明】
【００１２】
【図１】実施形態のＳＳＤの一例を示すブロック回路図である。
【図２】ＳＳＤを構成するＮＡＮＤチップの一例を示す図である。
【図３】ＮＡＮＤチップの論理ページの一例を示す図である。
【図４】ＮＡＮＤチップの論理ブロックの一例を示す図である。
【図５】ＮＡＮＤチップの一例を示す図である。
【図６】ＳＳＤに含まれるコントローラ２２の一例を示すブロック回路図である。
【図７】コントローラ２２に含まれる要求信頼度識別部３６の一例、ここではライト要求に含まれるＬＢＡに基づき要求信頼度を識別する、を示す図である。
【図８】コントローラ２２に含まれる要求信頼度識別部３６の他の例、ここではライト要求に含まれるＮＳＩＤ（Name Space ID）に基づき要求信頼度を識別する、を示す図である。
【図９】コントローラ２２に含まれる要求信頼度識別部３６のさらに他の例、ここではライト要求に含まれるストリームＩＤに基づき要求信頼度を識別する、を示す図である。
【図１０】コントローラ２２に含まれる要求信頼度識別部３６のさらに他の例、ここではライト要求に含まれるポートＩＤに基づき信頼度を識別する、を示す図である。
【図１１】コントローラ２２に含まれる要求信頼度識別部３６のさらに他の例、ここではライト要求に含まれるイニシエータＩＤに基づき要求信頼度を識別する、を示す図である。
【図１２】イニシエータＩＤの一例を示す図である。
【図１３】ＳＡＳエキスパンダを含む場合のイニシエータＩＤの他の例を示す図である。
【図１４】複数の経路がある場合のイニシエータＩＤの他の例を示す図である。
【図１５】信頼度付ライトコマンドの一例を示す図である。
【図１６】ライト部３８の一例を示す図である。
【図１７】ブロック信頼度テーブルを生成する一例を示すフローチャートである。
【図１８】コードレート実績テーブルを生成する一例を示すフローチャートである。
【図１９】要求信頼度実績テーブルを生成する一例を示すフローチャートである。
【図２０】Ｌ３ＥＣＣを含むライト部３８の一例を示す図である。
【図２１】図２０のＬ３ＥＣＣエンコーダがオフの場合のエンコードの一例を示す図である。
【図２２】図２０のＬ３ＥＣＣエンコーダがオンの場合のエンコードの一例を示す図である。
【図２３】ブロック毎の記録方式が予め決まっている場合のライト部３８の一例を示す図である。
【図２４】ブロック毎の記録方式をブロックの割当て時に決める場合のライト部３８の一例を示す図である。
【図２５】ドライブ評価時の消去回数／ＢＥＲカウンタの作成例を示すフローチャートである。
【図２６】ドライブ設計時の消去回数／ＢＥＲカウンタの作成例を示すフローチャートである。
【図２７】ドライブ検査時の消去回数／ＢＥＲカウンタの作成例を示すフローチャートである。
【図２８】ライト要求処理部３４の一例を示す図である。
【図２９】ブロック毎の記録方式が予め決まっている場合のライト要求処理部３４の一例を示す図である。
【図３０】ブロック毎の記録方式をライト要求処理部３４に設定する処理の一例を示すシーケンス図である。
【図３１】論理空間と物理空間における余裕容量、表記容量、実装容量の関係を示す図である。
【図３２】ＢＥＲの測定の一例を示す図である。
【図３３】ＢＥＲの変化により誤り訂正符号の訂正能力が変化する一例を示す図である。
【図３４】論理空間と物理空間の関係を示す図である。
【図３５】ライトコマンドとアンマップコマンドの一例を示す図である。
【図３６】ライト要求処理部３４の動作の一例を示すフローチャートである。
【図３７】コードレートと物理空間のサイズの関係の一例を示す図である。
【図３８】ライト要求処理部３４が、ライト要求により有効になる物理空間のサイズを計算する一例を示すフローチャートである。
【図３９】ライト要求処理部３４が、ライト要求により無効になる物理空間のサイズを計算する一例を示すフローチャートである。
【図４０】予測コードレートテーブルの初期化の一例を示す図である。
【図４１】予測コードレートテーブルの変更の一例を示す図である。
【図４２】割当て処理部４２の一例を示す図である。
【図４３】割当て処理部４２の領域割当て要求処理の一例を示すフローチャートである。
【図４４】ポートＩＤに基づく領域割当て要求に対する要求信頼度識別部３６の動作の一例を示す図である。
【図４５】イニシエータＩＤに基づく領域割当て要求に対する要求信頼度識別部３６の動作の一例を示す図である。
【図４６】領域変更コマンドに対する処理の一例を示す図である。
【図４７】領域変更コマンドのいくつかの例を示す図である。
【図４８】領域変更コマンドに対するコマンド処理部３２の処理の一例を示すフローチャートである。
【図４９】領域変更時のアンマップ、書き直しの一例を示す図である。
【図５０】領域を指定された要求信頼度で書き直すコマンド処理部３２の処理の一例を示すフローチャートである。
【図５１】領域変更要求に対するコマンド処理部３２の処理の一例を示す図である。
【図５２】領域変更要求に対する割当て処理部４２の処理の一例を示すフローチャートである。
【図５３】領域削除コマンドに対する処理の一例を示す図である。
【図５４】領域削除コマンドに対するコマンド処理部３２の処理の一例を示すフローチャートである。
【図５５】領域削除要求に対する処理の一例を示す図である。
【図５６】領域削除要求に対する割当て処理部４２の処理の一例を示すフローチャートである。
【図５７】コントローラ２２に含まれるリード部４０の一例を示す図である。
【図５８】リード要求に対するリード部４０の処理の一例を示すフローチャートである。
【図５９】コントローラ２２に含まれるライト部３８の一例を示す図である。
【図６０】信頼度付ライトコマンドに対する処理の一例を示す図である。
【図６１】当初のホストライト時に指定された要求信頼度でコンパクションライトするコンパクションの一例を示す図である。
【図６２】コマンド処理部３２のコンパクションの一例、ここでは当初のホストライト時に指定された要求信頼度でコンパクションライトする、を示すフローチャートである。
【図６３】当初のホストライト時に指定された要求信頼度に関わりなく、コンパクションの際に指定された要求信頼度でコンパクションライトするコンパクションの一例を示す図である。
【図６４】コマンド処理部３２のコンパクションの一例、ここではコンパクションの際に指定された要求信頼度でコンパクションライトする、示すフローチャートである。
【図６５】リード時に訂正が不可能な場合のホスト１２の動作のいくつかの例を示す図である。
【図６６】リード時に訂正が不可能な場合のホスト１２の処理の一例を示すフローチャートである。
【図６７】リード部４０のリード処理の一例を示すフローチャートである。
【図６８】リード部４０のリード処理の他の例を示すフローチャートである。
【図６９】ホストの一例を示す図である。
【図７０】マウントポイントとパーティションとの関係を示す図である。
【図７１】ホストがＳＳＤへ要求信頼度を伝える第１例の原理を示す図である。
【図７２】ホストがＳＳＤへ要求信頼度を伝える第１例の動作を示す図である。
【図７３】ホストがＳＳＤへ要求信頼度を伝える第２例の原理を示す図である。
【図７４】ホストがＳＳＤへ要求信頼度を伝える第２例の動作を示す図である。
【図７５】ホストがＳＳＤへ要求信頼度を伝える第３例の原理を示す図である。
【図７６】ホストがＳＳＤへ要求信頼度を伝える第３例の動作を示す図である。
【図７７】ホストがＳＳＤへ要求信頼度を伝える第４例の原理を示す図である。
【図７８】ホストがＳＳＤへ要求信頼度を伝える第４例の動作を示す図である。
【図７９】パーティションの作成方法のいくつかの例を示す図である。
【図８０】コンパクションの一例を示す図である。
【図８１】表記容量と書込み効率ＷＡＦとの関係の一例を示す図である。
【図８２】割当て処理部４２の領域割当て可否判定の一例を示す図である。
【図８３】予測コードレートテーブルの作成の一例を示す図である。
【図８４】予測コードレートテーブルの作成の他の例を示す図である。
【図８５】領域変更コマンドによるテーブルの状態変化の一例を示す図である。
【図８６】領域変更要求に対する処理の一例を示す図である。
【図８７】領域変更要求に対する処理の他の例を示す図である。
【発明を実施するための形態】
【００１３】
以下、発明の実施形態について図面を参照して説明する。  
［ドライブ全体の構成］  
図１は第１実施形態のストレージ装置としてのＳＳＤの構成を示すブロック図である。実施形態は、ＳＳＤを説明するが、この発明はＳＳＤに限らず、ＨＤＤにも同様に適用可能である。ＳＳＤ及び／又はＨＤＤは以下ドライブと称することもある。ＳＳＤ１０はＰＣ、タブレット等の電子機器のストレージ装置でもよいが、ネットワーク上のファイルサーバ等の大容量のストレージ装置でもよい。いずれの場合も、ＳＳＤ１０はホスト１２に接続される。ホストとＳＳＤの接続は１対１ではなく、複数のホストに複数のＳＳＤが接続されていてもよいし、1台のホストに複数のＳＳＤが接続されてもよいし、１台のＳＳＤに複数のホストが接続されてもよい。ホスト１２のＯＳは何ら限定されず、Windows（登録商標）でもよいし、Linux（登録商標）であってもよい。ホスト１２とＳＳＤ１０とのインタフェースは何ら限定されず、ＳＡＳ（Serial SCSI）、ＳＡＴＡ（Serial ATA）等を利用できる。
【００１４】
ＳＳＤ１０はホスト１２に接続されるホストインタフェース１４と、記憶媒体であるＮＡＮＤ型フラッシュメモリ（以下、単にＮＡＮＤメモリとも称する）を含む複数、例えば８個のＮＡＮＤパッケージ２６１〜２６８と、コントローラ２２を含む。コントローラ２２は、ＡＳＩＣ等の専用のチップにより実現されてもよいが、ここでは、ＲＯＭ１８に記憶されたソフトウェアを実行するＣＰＵ１６により実現される。コントローラ２２は、キャッシュメモリ、ワークメモリとしてのＤＲＡＭ２０も含む。コントローラ２２は、ＮＡＮＤパッケージ２６１〜２６８のリード、ライトを制御する。
【００１５】
１つのＮＡＮＤパッケージ２６は、複数、例えば４個のＮＡＮＤチップ２４１、２４２、２４３、２４４を収納する。１つのＮＡＮＤチップ２４の容量は、例えば６４ＭＢである。ＳＳＤ１０は３２個のＮＡＮＤチップ２４を含む。１つのパッケージ２６内の４つのＮＡＮＤチップ２４は２つずつが１チャネルに接続されるペアとなり、ペアの１つはバンク０、他はバンク１であり、同時にバンク０／１の一方のみへのアクセス（コマンド送受信）が可能である。コントローラ２２は、１６チャネル（図１は、８パッケージ×２チャネルの例）の信号線を介してパッケージ２６内の各ペアのＮＡＮＤチップに接続される。バンクの切替えはコントローラ２２で制御される。
【００１６】
図２（ａ）に示すように、ＮＡＮＤチップ２４はプレーン０とプレーン１を含む。各プレーンは、例えば１０００ブロックを含む。ブロックは、図２（ｂ）に示すように、例えば１２８ページを含む。１ページは、例えば２５６バイトである。チャネル、バンク、プレーンは物理空間上の概念であり、チップの故障に対処できるように、異なるチャネル、異なるバンク、異なるプレーンのメモリセルからなる複数の物理ブロックにより論理ブロックが構成される。複数の物理ブロックで、同じ番号のページを纏めたものを論理ページとする。なお、論理ページは、複数の物理ブロックで、異なる番号のページを纏めたものであってもよい。
【００１７】
クラスタは、アドレス変換の単位である。論理アドレスは、ホストが、ＳＳＤ１０内のリード、ライト対象のデータ位置を示すのに使うアドレスである。物理アドレスは、ＳＳＤ１０（コントローラ２２）がＮＡＮＤチップ２４内のリード、ライト対象のデータ位置を示すのに使うアドレスである。ブロック番号も物理アドレスを構成する要素である。論理アドレスからその論理アドレスに対応した物理アドレスを求めることをアドレス解決またはアドレス変換と称する。アドレス変換は、論理アドレスと物理アドレスの対応関係を示すルックアップテーブル（ＬＵＴ）を利用する。有効クラスタは、ＬＵＴを介して論理アドレスから参照されるクラスタである。有効クラスタ判定は、ある物理アドレスのクラスタが有効アドレスであるか否か判定することである。要求信頼度は、ホストがドライブにデータをライトする際、ドライブに対して要求する信頼度、例えば訂正不可能の発生確率である。提供信頼度は、ドライブがホストに対して提供できる信頼度、例えばＮＡＮＤメモリの記録方式や誤り訂正能力またはコードレートである。記録方式は、例えば１セルに１ビットのデータを書き込むＳＬＣ（Single-Level Cell）方式と、１セルに２ビットのデータを書き込むＭＬＣ（Multi-Level Cell）方式と、１セルに３ビットのデータを書き込むＴＬＣ（Triple-Level Cell）方式を含む。誤り訂正能力は、書き込まれたデータ（ペイロード）の内、何ビットまで誤っても正しいデータに戻せるかという指標である。誤り訂正能力はコードレートと関連がある。コードレートは、データ（ペイロード）サイズ／（データサイズ＋誤り訂正符号サイズ）である。誤り訂正符号（ＥＣＣ：Error Correction Code）は、１クラスタについての第１ＥＣＣ（クラスタ内ＥＣＣあるいはページ内ＥＣＣ、以下Ｌ１ＥＣＣとも称する）と、１ページに含まれる全クラスタについての第２ＥＣＣ（ページ間ＥＣＣ、以下Ｌ３ＥＣＣとも称する）とを含む。コードレートの定義は、第１ＥＣＣの誤り訂正符号に基づく。
【００１８】
図３は、論理ページの一構成例を示す。この例では、１論理ページは４チャネルを含み、１チャネルは２バンクを含み、１チャネルの各バンクは２プレーンを含む。１プレーンは４クラスタを含む。第２ＥＣＣでは、クラスタ１，９，１７，２５，５，１３，２１，２９，３３，４１，４９，５７，３７，４５，５３，６１から１ビットが取り出され、符号語とされる。第２ＥＣＣのコードレートは、ペイロードのビット数／符号語のビット数であるので、第２ＥＣＣでビットコストを改善するには、ペイロードのビット数を大きくすればよい。
【００１９】
図４は、論理ブロックの一構成例を示す。物理ブロックが２５６ページの物理ページからなる場合、論理ブロックも２５６ページの論理ページからなる。
【００２０】
図５は、ＮＡＮＤチップ２４の一構成例を示す。ＮＡＮＤチップ２４は、同じバンク、同じチャネルの物理ブロックからなる。
【００２１】
［コントローラの構成］  
図６は、コントローラ２２の機能構成の一例を示すブロック図である。コントローラ２２は、例えばコマンド処理部３２、ライト要求処理部３４、要求信頼度識別部３６、ライト部３８、リード部４０、割当て処理部４２、ＮＡＮＤインタフェース４４を含む。ＮＡＮＤインタフェース４４は、チャネル毎のインタフェースを含む。
【００２２】
ホスト１２から発行された各種のコマンドは、インタフェース１４を介してコマンド処理部３２に入力され、コマンドが要求に変換される。コマンド処理部３２は、リードコマンドを受信すると、リード部４０にリード要求を供給する。コマンド処理部３２は、ライトコマンドを受信すると、ライト要求を要求信頼度識別部３６又はライト要求処理部３４に供給する。ホスト１２が発行するライトコマンドは２種類あり、要求信頼度に関する情報を含むものと、要求信頼度に関する情報を含まないものがある。コマンド処理部３２は、要求信頼度に関する情報を含む要求信頼度付ライトコマンド（以下、信頼度付ライトコマンドとも称する）を受信すると、要求信頼度付ライト要求（以下、信頼度付ライト要求とも称する）をライト要求処理部３４に供給する。コマンド処理部３２は、要求信頼度に関する情報を含まないライトコマンドを受信すると、ライト要求を要求信頼度識別部３６に供給する。要求信頼度識別部３６はライト要求に含まれる情報の中の特定情報に基づいて要求信頼度を識別し、ライト要求に要求信頼度を付加し、信頼度付ライト要求をライト要求処理部３４に供給する。このため、ホスト１２が要求信頼度を含む、含まないいずれのライトコマンドを発行しても、ライト要求処理部３４には信頼度付ライト要求が入力される。コマンド処理部３２は、ホスト１２から領域割当てコマンド、領域変更コマンド、領域削除コマンドを受信すると、領域割当て要求、領域変更要求、領域削除要求に変換して、これらの要求を割当て処理部４２に供給する。
【００２３】
従来のドライブでは、全てのデータに対して同じ要求信頼度が指定されている。すなわち全てのデータについて均一な信頼度でライトし、ホストに対して均一な信頼度を提供している。しかし、実施例では、ホストがドライブに対してデータ毎に異なる複数の要求信頼度を指定し、ドライブはホストに対してデータ毎に異なる複数の信頼度を提供することができる。このため、ドライブは、記憶するデータに対して提供する信頼度が異なる複数の区分を含む。この区分は、論理ブロックアドレス（ＬＢＡ）、ＮＳＩＤ（Name Space ID）等の論理アドレス空間上の位置に基づく区分や、ストリームＩＤ、ポートＩＤ、イニシエータＩＤ等のライトコマンド発行元に基づく区分の種々の区分、等があり、本明細書ではこの区分を「領域」と称する。データのアクセス単位は論理ブロックと称され、論理ブロックを示すアドレスがＬＢＡである。ＮＳＩＤは、ＳＣＳＩやＳＡＴＡ（Serial ATA）と同様にストレージ（ＳＳＤ）を接続するための規格ＮＶＭ  Express（Non-Volatile Memory Express、ＮＶＭｅとも称する）（登録商標）で使用されるコマンドであり、このコマンドが適用される名前空間のＩＤを示す。ストリームＩＤは、マルチストリームライトに関し、寿命が近いデータを同じブロックに集めるために使用されるＩＤである。ポートＩＤは、ドライブが複数のＩ／Ｏポートを有する場合、ライトコマンドの発行元が使用するポートを指定するためのものである。イニシエータＩＤは、コマンド発行元のデバイスを示すＩＤである。
【００２４】
コマンド処理部３２は、コンパクションの全体的な管理を行う。さらに、コマンド処理部３２は、領域変更コマンドに応じて領域のサイズまたは位置や要求信頼度が変更された場合、領域に対応するＮＡＮＤメモリの部分に記憶されているデータを変更後の新しい要求信頼度で書き直す処理や、領域削除コマンドに応じて削除された領域に対応するＮＡＮＤメモリの領域をアンマップ（ＵＮＭＡＰ）する処理を行う。ＳＳＤでは、ホストは、特定のブロックが使用されなくなっていることをＳＳＤに知らせるｄｉｓｃａｒｄコマンドを発行する。ドライブは、ｄｉｓｃａｒｄコマンドの情報に基づいて使用されなくなっている領域を解放する。ｄｉｓｃａｒｄコマンドは、ＳＡＴＡではトリム（ＴＲＩＭ）コマンド、ＳＡＳではＵＮＭＡＰコマンドと称される。
【００２５】
ライト要求処理部３４は、信頼度付ライト要求を受け付け可能か（当該信頼度でデータをライトするに十分な空き容量があるか）否か判定し、受け付け可能な場合、信頼度付ライト要求をライト部３８に転送する。
【００２６】
割当て処理部４２は、領域割当て要求で指定された領域をホスト（そのユーザ）に割り当てるために必要なＮＡＮＤメモリのブロック数を管理し、領域割当て要求で指定された領域と要求信頼度とに対して領域が確保できるか否か判定する。割当て処理部４２は、領域変更要求により領域のサイズまたは位置や要求信頼度が変更された場合、変更後の領域と要求信頼度とに対して領域が確保できるか否か判定する。割当て処理部４２は、領域削除要求で指定された領域のデータを削除して、その領域をホストに解放する。割当て処理部４２は、領域として割り当てられていない書き込み可能ブロック数を示す割当て可能ブロック数も管理している。
【００２７】
ライト部３８は、ライト要求処理部３４から送信されたライト要求を処理する。リード部４０は、コマンド処理部３２から送信されたリード要求を処理する。リード部４０は、ホストからのリードコマンドによるリード（ホストリードとも称する）時に誤り訂正に失敗した場合、コマンド処理部３２を介してホスト１２に「訂正不可能」を返信する。リード部４０は、ホストリード時やデータ保持のためのパトロールリード時に、誤り訂正回数等に基づいてブロック毎の要求信頼度を更新する。
【００２８】
要求信頼度を誤り訂正の失敗確率（フレームエラーレート）で表す場合、無限数の信頼度を設定可能であるが、説明の便宜上、信頼度高、信頼度低の２つで表してもよい。失敗確率が１０−１８より小さい場合、信頼度が高いとし、失敗確率が１０−１８より小さくない場合、信頼度が低いとすることがある。１０−１８の失敗確率とは、通常の使用状態で殆ど訂正失敗が生じることがない確率である。
【００２９】
要求信頼度識別部３６の動作を説明する。要求信頼度識別部３６はライト要求に含まれる特定の情報、例えば論理アドレス空間上の位置（例えば、セクタアドレス、ＬＢＡ）、ライトコマンド発行元、または明示的に要求信頼度を示すパラメータに基づいて要求信頼度を識別することができる。論理アドレス空間上の位置に基づき要求信頼度を識別する場合、ＬＢＡ空間が複数の範囲に分割され、範囲毎に要求信頼度が予め定義される。ホストはこの定義に従って、ライトコマンドを発行してもよい。あるいは、論理アドレス空間上の位置に基づき要求信頼度を識別する場合、ＮＶＭ  Expressで規定しているＮＳＩＤ毎に要求信頼度が予め定義される。ホストはこの定義に従って、ライトコマンドを発行することもできる。ＳＳＤが複数のポートを含み、ＳＳＤに複数のホストが接続される場合、ライトコマンド発行元のホストに基づき要求信頼度を識別することもできる。ライトコマンド発行元は、ホストが接続されるポートのポートＩＤにより特定できる。あるいは、マルチストリームライトの場合、ライトコマンド発行元は、ストリームＩＤにより特定できる。さらに、ライトコマンド発行元毎に要求信頼度が予め定義され、ホストはこの定義に従って、ライトコマンドを発行してもよい。
【００３０】
なお、要求信頼度識別部３６は必須の構成ではない。前述したように、ライトコマンドは２種類あり、ホスト１２が信頼度付ライトコマンドを発行する場合は、要求信頼度識別部３６は不要である。
【００３１】
例えば、図７に示すように、要求信頼度識別部３６は領域テーブル３６Ａと、要求信頼度テーブル３６Ｂを含み、コマンド処理部３２から転送されたライト要求内の特定の情報（図７の例では、ＬＢＡ）に基づいて要求信頼度を識別し、その要求信頼度をライト要求に付加して、信頼度付ライト要求をライト要求処理部３４に供給する。領域テーブル３６Ａは、領域を特定できる情報と領域ＩＤとの対応関係を記憶するテーブルである。領域の指定には、ＬＢＡ範囲（開始ＬＢＡ及び終了ＬＢＡで指定される範囲）、ＮＳＩＤ、ストリームＩＤ、ポートＩＤ、イニシエータＩＤ等を利用することができる。例えば、図７の例では、開始ＬＢＡ及び終了ＬＢＡと領域ＩＤとが対応付けられている。
【００３２】
領域テーブル３６Ａは、コマンド処理部３２からライト要求を受け取ると、ライト要求内の特定情報を含む領域を検索して、ライト要求に応じた領域ＩＤを出力する。領域テーブル３６Ａは、領域変更要求を受け取ると、変更対象に指定された領域の情報を含む領域を検索して、領域ＩＤを出力する。さらに、領域テーブル３６Ａは、領域削除要求を受け取ると、削除対象に指定された領域の情報を含む領域を検索して、領域ＩＤを出力する。
【００３３】
要求信頼度識別部３６は、領域追加要求の対象として、領域テーブル３６Ａに登録されていない領域が指定された場合、当該領域に対して一意の領域ＩＤを生成し、領域を特定できる情報と領域ＩＤの組を領域テーブル３６Ａに追加する。要求信頼度識別部３６は、領域削除要求の対象として、領域ＩＤの削除が依頼された場合、その領域ＩＤの行を領域テーブル３６Ａから削除する。
【００３４】
要求信頼度テーブル３６Ｂは、領域ＩＤと、その領域ＩＤで示される領域の要求信頼度との対応関係を記憶するテーブルである。領域テーブル３６Ａと要求信頼度テーブル３６Ｂを用いることにより、ライト要求で指定された領域に応じた要求信頼度を識別することができる。領域テーブル３６Ａと要求信頼度３６Ｂとは一つのテーブルに纏められてもよい。
【００３５】
［要求信頼度の識別］  
ホスト１２はＳＳＤ１０に対してデータライトを指示する場合、そのデータに対する要求信頼度も指定することができる。要求信頼度を指定する専用のフィールドがあるコマンドがホスト１２からＳＳＤ１０に供給される場合、ホスト１２は、その専用のフィールドに要求信頼度を設定する。専用のフィールドが無い一般的なコマンドが使用される場合、ホスト１２は、そのコマンド内のいずれかのフィールドを利用して要求信頼度を設定する。ＳＳＤ１０はこのフィールドの情報に基づいて要求信頼度を識別する。最初に、一般的なコマンドが使用される場合の識別方法を説明する。
【００３６】
［論理アドレス空間上の位置（ＬＢＡ）による識別］  
図７は、ホスト１２がライトコマンド中のＬＢＡを利用して要求信頼度をＳＳＤ１０に通知する場合の要求信頼度識別部３６の処理の一例を示す。要求信頼度識別部３６は、領域テーブル３６Ａと、要求信頼度テーブル３６Ｂを含む。領域テーブル３６Ａは、開始ＬＢＡ（ＬＢＡ_start）と終了ＬＢＡ（ＬＢＡ_end）で指定されたＬＢＡ範囲で定義される領域を特定する情報と領域ＩＤとの対応関係を記憶する。異なる領域のＬＢＡ範囲は重なり合うことがないように領域が定義されている。そのため、１つのＬＢＡ範囲に対して必ず１つの領域ＩＤが決定され得る。要求信頼度識別部３６は、領域テーブル３６Ａに領域を新たに追加する場合、登録済みの領域のＬＢＡ範囲と、追加する領域のＬＢＡ範囲が重なるか否か判定し、重なる場合は、コマンド処理部３２を介してホスト１２にエラー通知を返送する。ライト要求内のＬＢＡが領域テーブル３６ＡのどのＬＢＡ範囲にも含まれていない場合、要求信頼度識別部３６は、コマンド処理部３２を介してホスト１２にライト不可能（エラー）を通知する。要求信頼度テーブル３６Ｂには、同じ領域ＩＤの行は複数存在しない。
【００３７】
要求信頼度テーブル３６Ｂは、領域ＩＤと、その領域ＩＤの領域に対する要求信頼度との対応関係を記憶する。要求信頼度識別部３６は、ライト要求に含まれるＬＢＡが属する領域の領域ＩＤを領域テーブル３６Ａから読み出し、領域ＩＤに対応する要求信頼度を要求信頼度テーブル３６Ｂから読み出す。領域変更コマンド（要求信頼度は変更されず領域のＬＢＡ範囲が変更される場合と、ＬＢＡ範囲は変更されず領域の要求信頼度が変更される場合と、両者が変更される場合がある）に応じて領域のＬＢＡ範囲が変更された場合、要求信頼度識別部３６は、領域テーブル３６Ａの対応する領域のＬＢＡ範囲を変更する。領域変更コマンドに応じて領域の要求信頼度が変更された場合、要求信頼度識別部３６は、要求信頼度テーブル３６Ｂの対応する領域の要求信頼度を変更する。領域割当てコマンドに応じて領域が確保された場合、要求信頼度識別部３６は、確保された領域の領域ＩＤと要求信頼度を要求信頼度テーブル３６Ｂに追加する。領域削除コマンドに応じて領域が削除された場合、要求信頼度識別部３６は、削除された領域の領域ＩＤを含む行のＬＢＡ範囲を領域テーブル３６Ａから、要求信頼度を要求信頼度テーブル３６Ｂから削除する。
【００３８】
ライトコマンドは、コマンド処理部３２でライト要求に変換される。ライトコマンドは、コマンドの種類（ライト）を示すオペレーションコード、データのライト開始位置を示す開始ＬＢＡ、サイズ、データ（データはコマンドとは区別されてもよい）を含む。ライト要求は、要求の種類（ライト）を示すヘッダ、データのライト開始位置を示す開始ＬＢＡ、ライトするデータのサイズ（長さ）、データを含む。要求信頼度識別部３６は、ライト要求から開始ＬＢＡ（クラスタ単位）（＝５０００）を取り出し、領域テーブル３６Ａを参照して、５０００を含むＬＢＡ範囲を見つけ、当該開始ＬＢＡを含むＬＢＡ範囲の領域ＩＤ（＝１）を求める。要求信頼度識別部３６は、次に、要求信頼度テーブル３６Ｂを参照し、この領域ＩＤ（＝１）に対応する要求信頼度（＝Ｒ１）を求める。その結果、要求信頼度識別部３６は、ヘッダ、開始ＬＢＡ、要求信頼度（＝Ｒ１）、サイズ、データからなる信頼度付ライト要求をライト要求処理部３４に供給する。要求信頼度識別部３６は、１クラスタ分の処理が終わると、開始ＬＢＡを１クラスタ分進め、ライト要求のサイズ分、上記処理を繰り返す。例えば、ライト対象の全てのＬＢＡ（クラスタ）を１つずつ処理する、あるいは１ライトコマンドずつ処理してもよい。
【００３９】
要求信頼度識別部３６は、領域テーブル３６Ａと要求信頼度テーブル３６Ｂとの内容をコマンド処理部３２を介して随時ホスト１２に通知する。このため、ホスト１２は、領域テーブル３６Ａと要求信頼度テーブル３６Ｂの内容を把握しており、ライトするデータの種類に応じて要求信頼度を決定し、要求信頼度に対応するＬＢＡ範囲の開始ＬＢＡをライトコマンドのライト開始位置に設定する。データの種類は、ＳＳＤ内でデータが消失しても回復可能か否かに大別される。例えば、オリジナルデータがＳＳＤに格納され、他の場所にコピーが格納されていないデータは、回復不可能であるので、要求信頼度は高くすることが好ましい。例えば、オリジナルデータがＳＳＤ以外の他の場所に格納されていて、コピーがＳＳＤに格納されているデータは、回復可能であるので、要求信頼度は高くなくても良い。また、他のデータから計算することにより求めることができるデータも回復可能であるので、要求信頼度は高くなくても良い。
【００４０】
このように、ホスト１２は、ライトコマンド内のライト開始ＬＢＡをデータの種類に応じて設定することにより、要求信頼度をＳＳＤ１０に通知し、ＳＳＤ１０は、ホスト１２により指定された要求信頼度に応じてデータをライトすることができる。このため、データの重要度に応じて要求信頼度を設定することにより、ＳＳＤ１０のビットコストを最適化することができる。
【００４１】
［論理アドレス空間上の位置（ＮＳＩＤ）による識別］  
図８は、ホスト１２がライトコマンド中のＮＳＩＤを利用して要求信頼度をＳＳＤ１０に通知する場合の要求信頼度識別部３６による処理の一例を示す。要求信頼度識別部３６は、領域テーブル３６Ｃと、要求信頼度テーブル３６Ｂを含む。領域テーブル３６Ｃは、ＮＳＩＤで定義される領域を特定する情報と領域ＩＤとの対応関係を記憶する。領域テーブル３６Ｃの領域ＩＤはＮＳＩＤと同じ値を設定してもよい。この場合、ＮＳＩＤ単位で領域ＩＤが決められる。領域テーブル３６Ｃでは、同じＮＳＩＤを持つ行は複数存在しない。従って、１つのＮＳＩＤに対して１つの領域ＩＤが決定され得る。ライト要求内のＮＳＩＤが領域テーブル３６Ｃに含まれていない場合、要求信頼度識別部３６は、コマンド処理部３２を介してホスト１２にライト不可能（エラー）を通知する。
【００４２】
要求信頼度テーブル３６Ｂは、領域ＩＤと、その領域ＩＤの領域に対する要求信頼度との対応関係を記憶する。要求信頼度識別部３６は、ライト要求に含まれるＮＳＩＤに対応する領域ＩＤを領域テーブル３６Ｃから読み出し、要求信頼度テーブル３６Ｂから領域ＩＤに対応する要求信頼度を読み出す。領域変更コマンド（要求信頼度は変更されず領域のＮＳＩＤが変更される場合と、ＮＳＩＤは変更されず領域の要求信頼度が変更される場合と、その両者が変更される場合がある）に応じて領域のＮＳＩＤが変更された場合、要求信頼度識別部３６は、領域テーブル３６Ｃの対応する領域のＮＳＩＤを変更する。領域変更コマンドに応じて領域の要求信頼度が変更された場合、要求信頼度識別部３６は、要求信頼度テーブル３６Ｂの対応する領域の要求信頼度を変更する。領域割当てコマンドに応じて領域が確保された場合、要求信頼度識別部３６は、確保された領域の領域ＩＤと要求信頼度を要求信頼度テーブル３６Ｂに追加する。領域削除コマンドに応じて領域が削除された場合、要求信頼度識別部３６は、削除された領域の領域ＩＤを含む行のＮＳＩＤを領域テーブル３６Ｃから、要求信頼度を要求信頼度テーブル３６Ｂから削除する。
【００４３】
ライトコマンドは、コマンド処理部３２でライト要求に変換される。ライトコマンドは、コマンドの種類（ライト）を示すオペレーションコード、ＮＳＩＤ、データのライト開始位置を示す開始ＬＢＡ、サイズ、データ（データとコマンドとは区別されてもよい）からなる。ライト要求は、要求の種類（ライト）を示すヘッダ、ＮＳＩＤ、データのライト開始位置を示す開始ＬＢＡ、ライトするデータのサイズ（長さ）、データからなる。要求信頼度識別部３６は、ライト要求からＮＳＩＤ（＝１０００）を取り出し、領域テーブル３６Ｃを参照して、当該ＮＳＩＤに対応する領域ＩＤ（＝１０００）を求める。要求信頼度識別部３６は、次に、要求信頼度テーブル３６Ｂを参照し、この領域ＩＤ（＝１０００）に対応する要求信頼度（＝Ｒ１）を求める。その結果、要求信頼度識別部３６は、ヘッダ、ＮＳＩＤ、開始ＬＢＡ、要求信頼度（＝Ｒ１）、サイズ、データからなる信頼度付ライト要求をライト要求処理部３４に供給する。
【００４４】
要求信頼度識別部３６は、領域テーブル３６Ｃと要求信頼度テーブル３６Ｂとの内容をコマンド処理部３２を介して随時ホスト１２に通知する。このため、ホスト１２は、領域テーブル３６Ｃと要求信頼度テーブル３６Ｂの内容を把握しており、ライトするデータの種類に応じて要求信頼度を決定し、ライトコマンドのＮＳＩＤを要求信頼度に応じて設定する。
【００４５】
これによっても、ホスト１２は、要求信頼度をＳＳＤ１０に通知し、ＳＳＤ１０は、ホスト１２により指定された要求信頼度に応じてデータをライトすることができる。このため、データの重要度に応じて要求信頼度を設定することにより、ＳＳＤ１０のビットコストを最適化することができる。
【００４６】
［ライトコマンド発行元（ストリームＩＤ）による識別］  
図９は、ホスト１２がライトコマンド中のストリームＩＤを利用して要求信頼度をＳＳＤ１０に通知する場合の要求信頼度識別部３６の処理の一例を示す。要求信頼度識別部３６は、領域テーブル３６Ｄと、要求信頼度テーブル３６Ｂを含む。領域テーブル３６Ｄは、ストリームＩＤと領域ＩＤとの対応関係を記憶する。領域テーブル３６Ｄの領域ＩＤはストリームＩＤと同じ値を設定してもよい。この場合、ストリームＩＤ単位で領域ＩＤが決められる。領域テーブル３６Ｄでは、同じストリームＩＤを持つ行は複数存在しない。従って、１つのストリームＩＤに対して１つの領域ＩＤが決定され得る。ストリームＩＤはＯｐｅｎコマンドであり、ホスト１２が割り当てる。ホスト１２は、重複したストリームＩＤは発行しない。ライト要求内のストリームＩＤが領域テーブル３６Ｄに含まれていない場合、要求信頼度識別部３６は、コマンド処理部３２を介してホスト１２にライト不可能（エラー）を通知する。
【００４７】
要求信頼度テーブル３６Ｂは、領域ＩＤと、その領域ＩＤの領域に対する要求信頼度との対応関係を記憶する。要求信頼度識別部３６は、ライト要求に含まれるストリームＩＤに対応する領域ＩＤを領域テーブル３６Ｄから読み出し、領域ＩＤに対応する要求信頼度を要求信頼度デーブル３６Ｂから読み出す。領域変更コマンド（要求信頼度は変更されずストリームＩＤが変更される場合と、ストリームＩＤは変更されず領域の要求信頼度が変更される場合と、その両者が変更される場合がある）に応じて領域のストリームＩＤが変更された場合、要求信頼度識別部３６は、対応する領域のストリームＩＤを変更する。領域変更コマンドに応じて領域の要求信頼度が変更された場合、要求信頼度識別部３６は、要求信頼度テーブル３６Ｂの対応する領域の要求信頼度を変更する。領域割当てコマンドに応じて領域が確保された場合、要求信頼度識別部３６は、確保された領域の領域ＩＤと要求信頼度を要求信頼度テーブル３６Ｂに追加する。領域削除コマンドに応じて領域が削除された場合、要求信頼度識別部３６は、削除された領域の領域ＩＤを含む行（ストリームＩＤおよび要求信頼度）を領域テーブル３６Ｄおよび要求信頼度テーブル３６Ｂから削除する。
【００４８】
ライトコマンドは、コマンド処理部３２でライト要求に変換される。ライトコマンドは、コマンドの種類（ライト）を示すオペレーションコード、ストリームＩＤ、データのライト開始位置を示す開始ＬＢＡ、サイズ、データ（データはコマンドとは区別されてもよい）からなる。ライト要求は、要求の種類（ライト）を示すヘッダ、ストリームＩＤ、開始ＬＢＡ、ライトするデータのサイズ（長さ）、データからなる。要求信頼度識別部３６は、ライト要求からストリームＩＤ（＝１０）を取り出し、領域テーブル３６Ｄを参照して、当該ストリームＩＤに対応する領域ＩＤ（＝１０）を求める。要求信頼度識別部３６は、次に、要求信頼度テーブル３６Ｂを参照し、この領域ＩＤ（＝１０）に対応する要求信頼度（＝Ｒ１）を求める。その結果、要求信頼度識別部３６は、ヘッダ、ストリームＩＤ、開始ＬＢＡ、要求信頼度（＝Ｒ１）、サイズ、データからなる信頼度付ライト要求をライト要求処理部３４に供給する。
【００４９】
要求信頼度識別部３６は、領域テーブル３６Ｄと要求信頼度テーブル３６Ｂの内容を、コマンド処理部３６Ｂを介して随時ホスト１２に通知する。このため、ホスト１２は、領域テーブル３６Ｄと要求信頼度テーブル３６Ｂの内容を把握しており、ライトするデータの種類に応じて要求信頼度を決定し、ライトコマンドのストリームＩＤを要求信頼度に応じて設定する。
【００５０】
これによっても、ホスト１２は、要求信頼度をＳＳＤ１０に通知し、ＳＳＤ１０は、ホスト１２により指定された要求信頼度に応じてデータをライトすることができる。このため、データの重要度に応じて要求信頼度を設定することにより、ＳＳＤ１０のビットコストを最適化することができる。
【００５１】
［ライトコマンド発行元（ポートＩＤ）による識別］  
図１０は、ホスト１２がライトコマンド中のコマンド発行元を示すポートＩＤを利用して要求信頼度をＳＳＤ１０に通知する場合の要求信頼度識別部３６の処理の一例を示す。要求信頼度識別部３６は、領域テーブル３６Ｅと、要求信頼度テーブル３６Ｂを含む。領域テーブル３６Ｅは、ポートＩＤと領域ＩＤとの対応関係を記憶する。領域テーブル３６Ｅの領域ＩＤはポートＩＤと同じ値を設定してもよい。この場合、ポートＩＤ単位で領域ＩＤが決められる。領域テーブル３６Ｅでは、同じポートＩＤを持つ行は複数存在しない。従って、１つのポートＩＤに対して１つの領域ＩＤが決定され得る。ライト要求内のポートＩＤが領域テーブル３６Ｅに含まれていない場合、要求信頼度識別部３６は、コマンド処理部３２を介してホスト１２にライト不可能（エラー）を通知する。
【００５２】
要求信頼度テーブル３６Ｂは、領域ＩＤと、その領域ＩＤの領域に対する要求信頼度との対応関係を記憶する。要求信頼度識別部３６は、ライト要求に含まれるポートＩＤに対応する領域ＩＤを領域テーブル３６Ｅから読み出し、領域ＩＤに応じた要求信頼度を要求信頼度テーブル３６Ｂから読み出す。領域変更コマンド（要求信頼度は変更されずポートＩＤが変更される場合と、ポートＩＤは変更されず領域の要求信頼度が変更される場合と、その両者が変更される場合がある）に応じて領域のポートＩＤが変更された場合、要求信頼度識別部３６は、領域テーブル３６Ｅの対応する領域のポートＩＤを変更する。領域変更コマンドに応じて領域の要求信頼度が変更された場合、要求信頼度識別部３６は、要求信頼度テーブル３６Ｂの対応する領域の要求信頼度を変更する。領域割当てコマンドに応じて領域が確保された場合、要求信頼度識別部３６は、確保された領域の領域ＩＤと要求信頼度を要求信頼度テーブル３６Ｂに追加する。領域削除コマンドに応じて領域が削除された場合、要求信頼度識別部３６は、削除された領域の領域ＩＤを含む行（ポートＩＤおよび要求信頼度）を領域テーブル３６Ｅおよび要求信頼度テーブル３６Ｅから削除する。
【００５３】
ライトコマンドは、コマンド処理部３２でライト要求に変換される。ライトコマンドは、コマンドの種類（ライト）を示すオペレーションコード、ポートＩＤ、データのライト開始位置を示す開始ＬＢＡ、サイズ、データ（データとコマンドとは区別されてもよい）からなる。ライト要求は、要求の種類（ライト）を示すヘッダ、ポートＩＤ、データのライト開始位置を示す開始ＬＢＡ、ライトするデータのサイズ（長さ）、データからなる。要求信頼度識別部３６は、ライト要求からポートＩＤ（＝１）を取り出し、領域テーブル３６Ｅを参照して、当該ポートＩＤに対応する領域ＩＤ（＝１）を求める。要求信頼度識別部３６は、次に、要求信頼度テーブル３６Ｅを参照し、この領域ＩＤ（＝１）に対応する要求信頼度（＝Ｒ１）を求める。その結果、要求信頼度識別部３６は、ヘッダ、ポートＩＤ、開始ＬＢＡ、要求信頼度（＝Ｒ１）、サイズ、データからなる信頼度付ライト要求をライト要求処理部３４に供給する。
【００５４】
要求信頼度識別部３６は、領域テーブル３６Ｅと要求信頼度テーブル３６Ｂとの内容を、コマンド処理部３２を介して随時ホスト１２に通知する。このため、ホスト１２は、領域テーブル３６Ｄと要求信頼度テーブル３６Ｂの内容を把握しており、ライトするデータの種類に応じて要求信頼度を決定し、ライトコマンドのポートＩＤを要求信頼度に応じて設定する。
【００５５】
これによっても、ホスト１２は、要求信頼度をＳＳＤ１０に通知し、ＳＳＤ１０は、ホスト１２により指定された要求信頼度に応じてデータをライトすることができる。このため、データの重要度に応じて要求信頼度を設定することにより、ＳＳＤ１０のビットコストを最適化することができる。
【００５６】
［ライトコマンド発行元（イニシエータＩＤ）による識別］  
図１１は、ホスト１２がライトコマンド中のコマンド発行元を示すイニシエータＩＤを利用して要求信頼度をＳＳＤ１０に通知する場合の要求信頼度識別部３６の処理の一例を示す。要求信頼度識別部３６は、領域テーブル３６Ｆと、要求信頼度テーブル３６Ｂを含む。領域テーブル３６Ｆは、イニシエータＩＤと領域ＩＤとの対応関係を記憶する。領域テーブル３６Ｆの領域ＩＤはイニシエータＩＤと同じ値を設定してもよい。この場合、イニシエータＩＤ単位で領域ＩＤが決められる。領域テーブル３６Ｆでは、同じイニシエータＩＤを持つ行は複数存在しない。従って、１つのイニシエータＩＤに対して１つの領域ＩＤが決定され得る。ライト要求内のイニシエータＩＤが領域テーブル３６Ｆに含まれていない場合、要求信頼度識別部３６は、コマンド処理部３２を介してホスト１２にライト不可能（エラー）を通知する。
【００５７】
要求信頼度テーブル３６Ｂは、領域ＩＤと、その領域ＩＤの領域に対する要求信頼度との対応関係を記憶する。要求信頼度識別部３６は、ライト要求に含まれるイニシエータＩＤに対応する領域ＩＤを領域テーブル３６Ｆから読み出し、領域ＩＤに対応する要求信頼度を要求信頼度テーブル３６Ｂから読み出す。領域変更コマンド（要求信頼度は変更されずイニシエータＩＤが変更される場合と、イニシエータＩＤは変更されず領域の要求信頼度が変更される場合と、その両者が変更される場合がある）に応じて領域のイニシエータＩＤが変更された場合、要求信頼度識別部３６は、領域テーブル３５Ｆの対応する領域のイニシエータＩＤを変更する。領域変更コマンドに応じて領域の要求信頼度が変更された場合、要求信頼度識別部３６は、要求信頼度テーブル３６Ｂの対応する領域の要求信頼度を変更する。領域割当てコマンドに応じて領域が確保された場合、要求信頼度識別部３６は、確保された領域の領域ＩＤと要求信頼度を要求信頼度テーブル３６Ｂに追加する。領域削除コマンドに応じて領域が削除された場合、要求信頼度識別部３６は、削除された領域の領域ＩＤを含む行（イニシエータＩＤおよび要求信頼度）を領域テーブル３６Ｆおよび要求信頼度テーブル３６Ｂから削除する。
【００５８】
ライトコマンドは、コマンド処理部３２でライト要求に変換される。ライトコマンドは、コマンドの種類（ライト）を示すオペレーションコード、イニシエータＩＤ、データのライト開始位置を示す開始ＬＢＡ、サイズ、データ（データとコマンドとは区別されてもよい）からなる。ライト要求は、要求の種類（ライト）を示すヘッダ、イニシエータＩＤ、開始ＬＢＡ、ライトするデータのサイズ（長さ）、データからなる。要求信頼度識別部３６は、ライト要求からイニシエータＩＤ（＝ＡＢＣＤ）を取り出し、領域テーブル３６Ｆを参照して、当該イニシエータＩＤに対応する領域ＩＤ（＝ＡＢＣＤ）を求める。要求信頼度識別部３６は、次に、要求信頼度テーブル３６Ｂを参照し、この領域ＩＤ（＝ＡＢＣＤ）に対応する要求信頼度（＝Ｒ１）を求める。その結果、要求信頼度識別部３６は、ヘッダ、イニシエータＩＤ、開始ＬＢＡ、要求信頼度（＝Ｒ１）、サイズ、データからなる信頼度付ライト要求をライト要求処理部３４に供給する。
【００５９】
要求信頼度識別部３６は、領域テーブル３６Ｃと要求信頼度テーブル３６Ｂとの内容を、コマンド処理部３２を介して随時ホスト１２に通知する。このため、ホスト１２は、領域テーブル３６Ｃと要求信頼度テーブル３６Ｂの内容を把握しており、ライトするデータの種類に応じて要求信頼度を決定し、ライトコマンドのＮＳＩＤを要求信頼度に応じて設定する。
【００６０】
これによっても、ホスト１２は、要求信頼度をＳＳＤ１０に通知し、ＳＳＤ１０は、ホスト１２により指定された要求信頼度に応じてデータをライトすることができる。このため、データの重要度に応じて要求信頼度を設定することにより、ＳＳＤ１０のビットコストを最適化することができる。
【００６１】
イニシエータＩＤの例を説明する。ＳＡＳの通信フレームは送信元デバイスのＷＷＰＮ（World Wide Name）を含む。ＷＷＰＮは全世界でユニークな値である。そのため、図１２に示すように、ホスト１２からＳＳＤ１０へコマンドを送信する通信フレームに、ＳＳＤ１０が接続されるホスト１２のポートのＷＷＰＮが含まれている。ＳＳＤ１０のコマンド処理部３２は、ライトコマンドの通信フレームに含まれるＷＷＰＮを、コマンド発行元のイニシエータＩＤとして利用することができる。
【００６２】
図１３は、ホスト１２とＳＳＤ１０との間にＳＡＳエキスパンダを接続する場合のイニシエータＩＤの例を示す。２台のホスト１２１、１２２と２台のＳＳＤ１０１、１０２との間に２台のエキスパンダ８１、８２が接続される。第１ホスト１２１は２つのポート（ＷＷＰＮはＡ１、Ａ２）を備え、第２ホスト１２２は１つのポート（ＷＷＰＮはＡ３）を備える。第１エキスパンダ８１は２つの入力ポート（ＷＷＰＮはＡ４、Ａ５）と２つの出力ポート（ＷＷＰＮはＡ８、Ａ９）を備える。第２エキスパンダ８２は２つの入力ポート（ＷＷＰＮはＡ６、Ａ７）と２つの出力ポート（ＷＷＰＮはＡ１０、Ａ１１）を備える。第１ＳＳＤ１０１は２つのポート（ＷＷＰＮはＡ１２、Ａ１３）を備える。第２ＳＳＤ１０２は２つのポート（ＷＷＰＮはＡ１４、Ａ１５）を備える。第１ホスト１２１のポート（Ａ１）が第１エキスパンダ８１の入力ポート（Ａ４）に接続され、第１ホスト１２１のポート（Ａ２）が第２エキスパンダ８２の入力ポート（Ａ６）に接続され、第２ホスト１２２のポート（Ａ３）が第２エキスパンダ８２の入力ポート（Ａ７）に接続される。第１エキスパンダ８１の出力ポート（Ａ８）が第１ＳＳＤ１０１のポート（Ａ１２）に接続され、第１エキスパンダ８１の出力ポート（Ａ９）が第２ＳＳＤ１０２のポート（Ａ１４）に接続され、第２エキスパンダ８２の出力ポート（Ａ１１）が第２ＳＳＤ１０２のポート（Ａ１５）に接続される。
【００６３】
第１ホスト１２１のポートＡ１から出力された通信フレーム（ＷＷＰＮはＡ１）は、破線で示すように、第２エキスパンダ８１の入力ポートＡ４、出力ポートＡ８を介して第１ＳＳＤ１０１のポートＡ１２に入力される。この通信フレームの送信元ＷＷＰＮはポートＡ１のままである。同様に、第２ホスト１２２のポートＡ３から出力された通信フレーム（ＷＷＰＮはＡ３）は、破線で示すように、第２エキスパンダ８２の入力ポートＡ７、出力ポートＡ１１を介して第２ＳＳＤ１０２のポートＡ１５に入力される。この通信フレームの送信元ＷＷＰＮはポートＡ３のままである。
【００６４】
図１４は、ホストとＳＳＤとの間に複数の経路がある場合のイニシエータＩＤを示す。ホストとドライブに複数のポートがあり、ホストの複数のポートがＳＳＤの複数のポートそれぞれに接続されている場合、ＳＳＤの各ポートにはホストのポートのＷＷＰＮを含む通信フレームが送信される。ホスト１２とＳＳＤ１０が直接に接続されている場合、図１４（ａ）に示すように、ホスト１２のポートＡ１から出力される通信フレームがＳＳＤ１０の第１ポートに入力され、ホスト１２のポートＡ２から出力される通信フレームがＳＳＤ１０の第２ポートに入力される。また、ホスト１２とＳＳＤ１０との間にエキスパンダ８が接続され、ホスト１２の第１ポートがエキスパンダの入力ポート、第１、第２出力ポートを介してＳＳＤ１０の第１、第２ポートそれぞれに接続されている場合、図１４（ｂ）に示すように、エキスパンダ８の第１、第２出力ポートからＳＳＤ１０の第１、第２ポートには、ポートＡ１を送信元ＷＷＰＮとする通信フレームが入力される。
【００６５】
図７〜図１４を参照して説明したように、ホスト１２は、ライトコマンド内の特定の情報に応じて要求信頼度を設定することにより、要求信頼度をＳＳＤ１０に通知することができる。ＳＳＤ１０は、ライトコマンド内の特定の情報に基づいて要求信頼度を識別することができ、要求信頼度に応じてデータをライトすれば、ビットコストを最適化することができる。
【００６６】
［信頼度付ライトコマンド］  
次に、ホスト１２が信頼度付ライトコマンドを発行する場合の通知方法を説明する。図１５に示すように、ホスト１２は、コマンドの種類を示すオペレーションコード（信頼度付ライトコマンド）、データのライト開始位置を示すＬＢＡ、要求信頼度、サイズ、データからなる信頼度付ライトコマンドを発行する。コマンド処理部３２は、信頼度付ライトコマンドを受け取ると、オペレーションコードをヘッダに書き換えることにより信頼度付ライト要求を生成する。コマンド処理部３２は、信頼度付ライト要求を要求信頼度識別部３６ではなく、ライト要求処理部３４に供給する。すなわち、このコマンドを利用する場合、要求信頼度識別部３６は不要である。
【００６７】
図１５は、図７に示したライトコマンドに要求信頼度を付加したものである。ホスト１２は、これに限らず、図８〜図１１に示したライトコマンドに対して同様に要求信頼度を付加した信頼度付ライトコマンドを発行してもよい。
【００６８】
このように、ライトデータに対してホストが要求する信頼度をライトコマンドに直接書き込んでＳＳＤに通知することによっても、ＳＳＤは全てのデータに対して一律の信頼度ではなく、データに応じた信頼度でデータをライトすることができ、ビットコストを最適化することができる。
【００６９】
［ライト処理］  
以上のように識別した要求信頼度に応じてＳＳＤがどのように異なる信頼度を提供するかを説明する。ＳＳＤ１０がホスト１２に提供する信頼度は提供信頼度とも称される。一例では、要求信頼度に応じて誤り訂正符号の訂正能力が決定される。訂正能力は、誤り訂正符号化のコードレートや、第２ＥＣＣ（Ｌ３ＥＣＣ）の追加や、記録方式により可変である。訂正能力の決定手法は２つあり、１つは予測されるＮＡＮＤメモリの信頼度（ｒａｗ  ＢＥＲ）に基づいて訂正能力を静的に決定する方法である。他は、ＮＡＮＤメモリの信頼度が未知の場合、ＮＡＮＤメモリのＢＥＲを観測し、その結果を訂正能力にフィードバックする方法である。ＢＥＲの観測は、誤り訂正が成功である場合、エラービット数（fail bit count）により行われ、誤り訂正が失敗である場合、その頻度により行われる。フィードバックは、物理ブロックのＢＥＲの履歴に基づき、ホストライト及びコンパクションライトの訂正能力を決定することにより行われる。
【００７０】
［要求信頼度に応じた第１ＥＣＣ（Ｌ１ＥＣＣ）］  
データライト時の第１ＥＣＣ（Ｌ１ＥＣＣ）の訂正能力を要求信頼度に応じて設定するライト処理の例を説明する。図１６は、信頼度付ライト要求（図７〜図１１、及び図１５に示した信頼度付ライト要求のいずれでもよいが、例えば、図７に示した信頼度付ライト要求）に対するライト部３８の動作の一例を示す。ライト部３８は、異なる要求信頼度毎の仕分けバッファ５２１、５２２、…５２ｍと、異なる訂正能力毎の第１ＥＣＣ（Ｌ１ＥＣＣ）エンコーダ５４１、５４２、…５４ｍを含む。ライト部３８は、信頼度付ライト要求を受け取ると、信頼度付ライト要求から要求信頼度を取り出し、その要求信頼度に該当する仕分けバッファ５２１、５２２、…５２ｍへデータを書き込む。ライト部３８は、テーブル部５６を参照してコードレートを求め、第１ＥＣＣエンコーダ５４１、５４２、…５４ｍの訂正能力をコードレートに応じて設定する。仕分けバッファ５２１、５２２、…５２ｍのいずれかにＮＡＮＤメモリへの書込み単位分のデータ、例えば１ページ分のデータが格納されると、ライト部３８は、データを仕分けバッファ５２から対応する第１ＥＣＣエンコーダ５４へ送信する。仕分けバッファ５２１、５２２、…５２ｍのデータは、ＮＡＮＤメモリにライト済みで、ＥＣＣが計算済みならば、削除され、その領域がホストに解放される。
【００７１】
テーブル部５６は、ブロック信頼度テーブル５６Ａ、コードレート決定テーブル５６Ｂ、コードレート実績テーブル５６Ｃ、要求信頼度実績テーブル５６Ｄ、消去回数／ＢＥＲテーブル５６Ｅ、空きブロック数カウンタ５６Ｆを含む。
【００７２】
なお、テーブル部５６は、ライト部３８内に設ける必要はない。同様に、要求信頼度識別部３６（図７から図１１に示す）もテーブル３６Ａ〜３６Ｆを内蔵する必要もない。テーブル部５６の各テーブル５６Ａ〜５６Ｅはコントローラ２２内のいずれのユニット内にあってもよいし、テーブル５６Ａ〜５６Ｅを纏めた１つのテーブルユニットをコントローラ２２内に設けてもよい。
【００７３】
ブロック信頼度テーブル５６Ａは、ＮＡＮＤメモリの各ブロック毎のブロック番号とビットエラーレート（ＢＥＲ）との対応関係を保存する。ブロック信頼度テーブル５６Ａは、ライト部３８がデータのライト先のブロックのＢＥＲを求める際に参照される。
【００７４】
ブロック信頼度テーブル５６Ａは、図１７に示すように作成される。ブロック１７２で、ライト部３８は、リード部４０による第１ＥＣＣによる誤り訂正の結果、リードできるようになったセクタ数（誤り訂正回数とも称する）をブロック毎にカウントする。セクタあたりの誤りを訂正できるビット数が誤り訂正能力である。ブロック１７４で、ライト部３８は、ブロック毎の誤り訂正回数×訂正能力／読み込み総ビット数＝ＢＥＲを求める。誤り訂正回数×訂正能力＝誤ったビット数である。ブロック１７６で、ライト部３８は、求められたＢＥＲとブロック番号をブロック信頼度テーブル５６Ａに書込む。ブロック信頼度テーブル５６Ａは、リードされたブロックについて生成される。
【００７５】
コードレート決定テーブル５６Ｂは、ＢＥＲに対して要求信頼度を満たすコードレートを記録する。このテーブルはＥＣＣの計算能力により決まるため、設計時に作成され、予めコントローラ２２に書き込まれる。ライト部３８は、ライト対象のページを含むＮＡＮＤブロックにデータをライトする際、ブロック信頼度テーブル５６Ａおよびコードレート決定テーブル５６Ｂを参照し、ライト対象のＮＡＮＤブロックのＢＥＲとライト要求の要求信頼度とを基にコードレートを決定する。ライト部３８は、このコードレートを基に第１ＥＣＣエンコーダ５４の誤り訂正能力を設定する。
【００７６】
コードレート実績テーブル５６Ｃは、ＮＡＮＤブロックのブロック番号と、ライト時に設定したコードレートとの対応関係を記憶する。コードレート実績テーブル５６Ｃは、リード部４０がリード対象のＮＡＮＤブロックからデータをリードする際に参照される。リード対象のＮＡＮＤブロックのブロック番号に基づいてコードレートが決定され、そのコードレートに基づいてＥＣＣデコーダの誤り訂正能力が設定される。コードレート実績テーブル５６Ｃは、後述する予測コードレートテーブル作成時にブロック番号からコードレートを求める際にも参照される。コードレート実績テーブル５６Ｃは、図１８に示すように、ライト部３８がデータをライトしたブロックのブロック番号とライトの際にＥＣＣエンコーダ５４に設定したコードレートとから作成される（ブロック１８２）。
【００７７】
要求信頼度実績テーブル５６Ｄは、ＮＡＮＤブロックのブロック番号と、そのブロック番号のブロックにライトしたデータに対して設定された要求信頼度（実績値と称する）を保持する。要求信頼度実績テーブル５６Ｄは、図１９に示すように、ライト部３８がブロックに最初にデータをライトした時に、そのブロックのブロック番号とその時の要求信頼度とから作成される（ブロック１９２）。要求信頼度実績テーブル５６Ｄは、コンパクションの際に要求信頼度が変更されたとしても、ホストライト時に指定された要求信頼度をコンパクション後も維持するために、コンパクション元のブロック番号からコンパクション元ブロックの要求信頼度を取得するために参照される。
【００７８】
コードレート実績テーブル５６Ｃと要求信頼度実績テーブル５６Ｄの容量を少なくするために、一つのブロックには一つの要求信頼度と一つのコードレートしか適用しない。なお、コードレート実績テーブル５６Ｃと要求信頼度実績テーブル５６Ｄは１つのテーブルであってもよい。
【００７９】
図１８、図１９の処理を開始するタイミングを説明する。先ず、前提条件がある。
【００８０】
前提１：コードレート実績テーブル５６Ｃや要求信頼度実績テーブル５６Ｄは、一つのブロックのエントリに対して一つのコードレートまたは一つの要求信頼度の実績値を紐づけている。
【００８１】
前提２：一つのブロックには、複数のクラスタデータが書き込まれる。
【００８２】
前提３：ただし、一つのブロックの中では、当該ブロック内のすべてのクラスタデータは同一のコードレート(または要求信頼度)を用いてブロックに書き込まれる。
【００８３】
前提４：上記複数のクラスタデータの書込みにおいて、ブロックに対するすべてのクラスタデータの書込みを完了する前に、既に書き込まれた一部のクラスタデータに対するリードが発生し得る。
【００８４】
前提５：リード時には、コードレート実績テーブル５６Ｃに基づいてリード対象のクラスタのブロックのコードレートを取得する必要がある。
【００８５】
あるブロックに複数回のクラスタデータの書込みを行い（前提２）、その途中のどこかで、当該ブロックの書込み済みのクラスタデータに対するリードを行う（前提４）場合を考える。このリードを行う際、リード対象のブロックのコードレートを取得する必要がある（前提５）。取得できない場合、リードを実行することができない。そのため、実施例では、リードを行う以前の時点で、図１８、図１９の処理によって、当該ブロックに対するコードレートをコードレート実績テーブル５６Ｃに登録する。
【００８６】
図１８、図１９の処理を開始するタイミングは、当該ブロックに対して書き込む複数回のライトのうちのすべて（すなわち毎回）、または、いずれか（たとえば最初の１回目）が考えられる。
【００８７】
前提３のため、複数回の書込みのうちの任意の１回以上で図１８、図１９の処理を行えば、当該ブロックへの書込みを完了する時点の状態は一定に保てる（前提１）。一方で、たとえば、任意時点での１回(たとえば３回目)で図１８、図１９の処理を実行すると、リードが発生した時点（たとえば１回目でライトしたクラスタに対するリードが２回目のライトの時点で発生)で、ブロックのコードレートがテーブル上で定義されない期間が存在するため、前提５が満たされない。従って、図１８、図１９の処理の開始タイミングは、１つのブロックの複数のクラスタデータの書き込みの最初の１回、または毎回の書き込み時とする。
【００８８】
消去回数／ＢＥＲテーブル５６Ｅは、ＮＡＮＤブロックの消去回数とＢＥＲ（測定結果）との対応関係を記憶する。ライト部３８は、ライト要求を受信すると、消去回数／ＢＥＲテーブル５６Ｅを参照し、ＮＡＮＤブロックの消去回数を基にＢＥＲを求め、ＢＥＲに基づいてＥＣＣエンコーダ５４の訂正能力を設定する。消去回数／ＢＥＲテーブル５６Ｅの詳細は図２５〜図２７を参照して後述する。
【００８９】
空きブロック数カウンタ５６Ｆは、ライト可能なＮＡＮＤブロック数を管理する。空きブロック数カウンタ５６Ｆは、あるＮＡＮＤブロックがライトのために新たに割り当てられた場合、１だけ減少し、あるＮＡＮＤブロックのデータが消去された場合、１だけ増加する。
【００９０】
ライト部３８は、ＮＡＮＤパッケージ２６内に要求信頼度毎にブロックを用意しておき、書き込みの際、要求信頼性に対応したブロックから書き込み単位を提供する。ライト部３８は、信頼度付ライト要求を受けると、ライト先のブロック番号を基にしてブロック信頼度テーブル５６Ａを参照してＢＥＲを求め、または消去回数を元にして消去回数／ＢＥＲテーブル５６Ｅを参照してＢＥＲを求める。ライト部３８は、そのＢＥＲと信頼度付ライト要求で指定された要求信頼度を基にしてコードレート決定テーブル５６Ｂを参照してコードレートを求める。ライト部３８は、そのコードレートを基に訂正能力を求め、当該データが符号化処理されるＥＣＣエンコーダ５４にその訂正能力を設定する。これにより、データを要求信頼度に応じた訂正能力で誤り訂正符号化してＮＡＮＤパッケージ２６に書き込むことができ、ビットコストの最適化を図ることができる。
【００９１】
このように、Ｌ１ＥＣＣの誤り訂正能力を可変することにより、ＳＳＤ１０の提供信頼度を要求信頼度に応じさせることができる。
【００９２】
［要求信頼度に応じた第２ＥＣＣ（Ｌ３ＥＣＣ）］  
図１６に示したライト部３８は、ライトコマンドに関連する領域の要求信頼度に応じて、当該領域に対応するＥＣＣエンコーダ５４の訂正能力を設定する。図２０は、第１ＥＣＣ（Ｌ１ＥＣＣ）エンコーダに加えて第２ＥＣＣ（Ｌ３ＥＣＣ）エンコーダも含み、要求信頼度に応じて第２ＥＣＣエンコーダをオン／オフするライト部３８の一例を示す。信頼度付ライト要求は、図７〜図１１及び図１５に示した信頼度付ライト要求のいずれでもよい。ライト部３８には、テーブル部５６に代わりテーブル部７０が設けられている。テーブル部７０も、テーブル部５６と同様に、コントローラ２２内の他のユニット内に設けられてもよい。テーブル部７０は、コードレート決定テーブル７０Ａ、コードレート実績テーブル７０Ｂ、要求信頼度実績テーブル７０Ｃ、空きブロック数カウンタ７０Ｄを含む。空きブロック数カウンタ７０Ｄは書き込み可能であるブロック数を示す。
【００９３】
ライト部３８は、要求信頼度付ライト要求を受け取ると、要求信頼度付ライト要求から要求信頼度を取り出し、その要求信頼度に該当する仕分けバッファ５２１、５２２、５２３、５２４、…へデータを書き込む。仕分けバッファ５２１、５２２、５２３、５２４、…のいずれかにＮＡＮＤメモリへの書込み単位分のデータ、例えば１ページ分のデータが格納されると、ライト部３８は、ＮＡＮＤメモリの空きブロックの中からデータをライトするページを確保する。必要なページが確保できるか否かの判定は、ライト部３８の前段に接続されているライト要求処理部３４で行なわれる。
【００９４】
ライト部３８は、要求信頼度に基づいてコードレート決定テーブル７０Ａを参照してコードレートを求め、コードレートを基に訂正能力を決定し、決定した訂正能力を第１ＥＣＣ（Ｌ１ＥＣＣ）エンコーダ６２１、６２２、６２３、６２４、…に設定する。第１ＥＣＣエンコーダ６２１、６２２、６２３、６２４、…は、クラスタ単位のデータにコードレートに応じた訂正符号を付加する。
【００９５】
ライト部３８は、要求信頼度に基づいてコードレート決定テーブル７０Ａを参照して第２ＥＣＣ（Ｌ３ＥＣＣ）のオン／オフ情報を求め、それに応じてセレクタ６４、６８を切り替える。第２ＥＣＣエンコーダのオン情報が設定されている場合、セレクタ６４はバッファ５２１、５２２、５２３、５２４、…の出力を第２ＥＣＣエンコーダ６６に供給し、セレクタ６９は第２ＥＣＣエンコーダ６６の出力を第１ＥＣＣエンコーダ６２１、６２２、６２３、６２４、…に供給する。第２ＥＣＣエンコーダのオフ情報が設定されている場合、セレクタ６４はバッファ５２１、５２２、５２３、５２４、…の出力をそのまま第１ＥＣエンコーダ６２１、６２２、６２３、６２４、…に供給する。第２ＥＣＣエンコーダのオン情報が設定されている場合、ライト部３８は、第２ＥＣＣエンコーダ６６によりページ単位でデータに訂正符号を付加した後、第１ＥＣＣエンコーダ６２１、６２２、６２３、６２４、…によりクラスタ単位のデータにコードレートに応じた訂正符号を付加する。ライト部３８は、第２ＥＣＣエンコーダのオフ情報が設定されている場合、第１ＥＣＣエンコーダ６２１、６２２、６２３、６２４、…によりクラスタ単位のデータにコードレートに応じた訂正符号を付加する。このとき、第２ＥＣＣエンコーダ６６はパスされる。
【００９６】
ライト部３８は、確保したページにデータをライトする。ライト部３８は、ブロック番号と、そのブロックにデータをライトしたときのコードレートと、第２ＥＣＣエンコーダのオン／オフの情報をコードレート実績テーブル７０Ｂに書込み、ブロック番号と要求信頼度の実績値を要求信頼度実績テーブル７０Ｃに書込む。コードレート実績テーブル７０Ｂ、要求信頼度実績テーブル７０Ｃの容量を少なくするために、一つのブロックには一つの要求信頼度と一つのＬ１ＥＣＣのコードレートだけ適用する。なお、コードレート実績テーブル７０Ｂと要求信頼度実績テーブル７０Ｃは一つのテーブルであってもよい。仕分けバッファ５２１、５２２、５２３、５２４、…のデータは、ＮＡＮＤメモリにライト済みで、ＥＣＣが計算済みならば、削除され、その領域はホスト１２に解放される。
【００９７】
第２ＥＣＣエンコーダのオフ情報が設定されている場合のエンコードの様子を図２１に示す。データの入ったクラスタである複数のペイロードが第１ＥＣＣ（Ｌ１ＥＣＣ）エンコーダ６２１、６２２、６２３、６２４、…にそれぞれ入力される。第１ＥＣＣエンコーダ６２１、６２２、６２３、６２４、…によりペイロードにコードレートに応じたＬ１ＥＣＣがそれぞれ付加される。Ｌ１ＥＣＣが付加された複数のペイロードによりページＰ１が構成される。コードレートはペイロードのサイズ／（ペイロードのサイズ＋Ｌ１ＥＣＣのサイズ）である。
【００９８】
第２ＥＣＣエンコーダのオン情報が設定されている場合のエンコードの様子を図２２に示す。複数のペイロードが第１ＥＣＣエンコーダ６２１、６２２、６２３、６２４、…にそれぞれ入力される。複数のペイロードは第２ＥＣＣ（Ｌ３ＥＣＣ）エンコーダ６６にも入力される。第２ＥＣＣエンコーダ６６は第１ＥＣＣエンコーダ６２１、６２２、６２３、６２４、…と同じ構造である。第２ＥＣＣエンコーダ６６は、複数のペイロードを纏めてＬ３ＥＣＣにより誤り訂正符号化する。第２ＥＣＣエンコーダ６６から出力されたＬ３ＥＣＣが付加されたペイロードが第１ＥＣＣエンコーダ６２１、６２２、６２３、６２４、…に入力され、Ｌ３ＥＣＣが入ったクラスタに対してＬ１ＥＣＣが付加される。Ｌ１ＥＣＣが付加された複数のペイロード及びＬ１ＥＣＣが付加された１つのＬ３ＥＣＣクラスタによりページＰ２が構成される。なお、Ｌ３ＥＣＣの分だけ、ページあたりに保存できるデータが少なくなる。ただし、７０クラスタにつき２ページなので、Ｌ３ＥＣＣオンすることにより、最大３％程度のビットコストが改善される。
【００９９】
このように、第２ＥＣＣエンコーダをオン、オフすることにより、ＳＳＤ１０の提供信頼度を要求信頼度に応じさせることができる。
【０１００】
［要求信頼度に応じる記録方式］  
次に、要求信頼度に応じて記録方式を切替えるライト処理の例を説明する。図２３は、ブロック毎に記録方式が決まっている（記録方式は固定）場合のライト部３８の一例を示す。記録方式の例は、ＳＬＣ（Single Level Cell）、ＭＬＣ（Multi Level Cell）、ＴＬＣ（Triple Level Cell）がある。ビットコストは、ＳＬＣが一番低く、ＴＬＣが一番高い。ライト部３８は、信頼度付ライト要求を受け取ると、その信頼度付ライト要求から要求信頼度を取得し、その要求信頼度に該当する仕分けバッファ５２１、５２２、５２３、５２４、…へデータを書き込む。記録方式毎にブロックが決まっており、空きブロック数カウンタ７０Ｄは、それぞれの記録方式毎の空きブロック数を管理する。空きブロック数カウンタ７０Ｄは、あるブロックがライトのために割り当てられた場合、１だけ減少し、あるブロックが消去された場合、１だけ増加する。仕分けバッファ５２１、５２２、５２３、５２４、…のいずれかにＮＡＮＤメモリの書込み単位分のデータ、例えば１ページ分のデータが格納されると、ライト部３８は、要求信頼度に基づいてコードレート決定テーブル７０Ａを参照して提供信頼度である記録方式とコードレートを求める。ライト部３８は、提供信頼度で示された記録方式の空きブロックの中からライトのためのページを確保する。ライト部３８の前段のライト要求処理部３４で許可されたライト要求だけがライト部３８に供給されるので、ライト部３８ではページが確保できるかの判定は行なわない。
【０１０１】
ライト部３８は、コードレートを基に訂正能力を決定し、第１ＥＣＣエンコーダ５４１、５４２、５４３、５４４、…に設定する。第１ＥＣＣエンコーダ５４１、５４２、５４３、５４４、…は、クラスタ単位のデータにコードレートに応じた訂正符号を付加し、確保したページに記録方式に従ってライトする。
【０１０２】
ライト部３８は、ブロック番号、記録方式、コードレートをコードレート実績テーブル７０Ｂに保存し、ブロック番号と要求信頼度の実績値を要求信頼度実績テーブル７０Ｃに保存する。コードレート実績テーブル７０Ｂ、要求信頼度実績テーブル７０Ｃの容量を少なくするために、一つのブロックには一つの要求信頼度と一つのコードレートだけ適用する。コードレート実績テーブル７０Ｂと要求信頼度実績テーブル７０Ｃは一つのテーブルとしても良い。
【０１０３】
図２４は、記録方式をブロック確保時に決める場合のライト部３８の一例を示す。この例は、割り当てられたブロックにデータをライトする記録方式を提供信頼度で示される記録方式の種類により決定する。ライト部３８は、信頼度付ライト要求を受け取ると、その信頼度付ライト要求から要求信頼度を取得し、その要求信頼度に該当する仕分けバッファ５２１、５２２、５２３、５２４、…へデータを書き込む。仕分けバッファ５２１、５２２、５２３、５２４、…のいずれかにＮＡＮＤメモリの書込み単位分のデータ、例えば１ページ分のデータが格納されると、ライト部３８は、要求信頼度に基づいてコードレート決定テーブル７０Ａを参照して、記録方式とコードレートを求める。ライト部３８は、提供信頼度で示される記録方式（ＳＬＣ、ＭＬＣ、ＴＬＣ）に割り当てられた空きブロックの中から書き込み用のページを確保する。ライト部３８の前段のライト要求処理部３４で書き込み許可されたライト要求だけがライト部３８に供給されるので、ライト部３８では確保できるかの判定は行なわない。各記録方式毎の空きページ数を管理する空きページ数カウンタ７０Ｅが設けられている。空きページ数カウンタ７０Ｅは、ブロックがその記録方式用に割り当てられたときにブロックに含まれるページ数に初期化され、ライト時にページが割り当てられる毎に１だけ減少する。求められた記録方式のブロックの中でページを確保できない、つまり空きページ数カウンタ７０Ｅが“０”の場合、空きブロックの中から提供信頼度で示された記録方式の書き込み用に確保されているブロックを割り当てる。
【０１０４】
ライト部３８は、コードレートを基に訂正能力を決定し、その訂正能力を第１ＥＣＣエンコーダ５４１、５４２、５４３、５４４、…に設定する。第１ＥＣＣエンコーダ５４１、５４２、５４３、５４４、…は、クラスタ単位のデータにコードレートに応じた訂正符号を付加し、確保したページに記録方式を設定して、書き込みを行なう。
【０１０５】
ライト部３８は、ブロック番号、記録方式、コードレートをコードレート実績テーブル７０Ｂに書込み、ブロック番号と要求信頼度の実績値を要求信頼度実績テーブル７０Ｃに書込む。コードレート実績テーブル７０Ｂ、要求信頼度実績テーブル７０Ｃの容量を少なくするために、一つのブロックには一つの要求信頼度と一つのコードレートだけ適用する。コードレート実績テーブル７０Ｂと要求信頼度実績テーブル７０Ｃは一つのテーブルとしても良い。
【０１０６】
［消去回数／ＢＥＲテーブル］  
図１６に示すようにライト部３８は、消去回数とＢＥＲの対応を記憶する消去回数／ＢＥＲテーブル５６Ｅを含む。図２５は、消去回数／ＢＥＲテーブル５６Ｅを作成する方法の一例を示す。この例では、ＳＳＤの評価時に消去回数／ＢＥＲテーブル５６Ｅが作成され、設計時にファームウェアにテーブル５６Ｅが組み込まれる。ＮＡＮＤチップ間で消去回数とＢＥＲの対応関係のばらつきが少ないと仮定する。ドライブ評価では、ＮＡＮＤチップが壊れるまで、消去、ライト、リード、ＢＥＲ測定を繰り返す。ブロック２５１で、ＮＡＮＤチップのデータが消去され、ブロック２５２で消去回数がカウントされる。ブロック２５３で、ＮＡＮＤチップにデータがライトされ、ブロック２５４でデータがリードされる。ブロック２５５でＮＡＮＤチップが破壊されたか否か判定され、破壊されていない場合、ブロック２５６でＢＥＲが測定され、ブロック２５７で、消去回数とＢＥＲがテーブル５６Ｅに書き込まれる。その後、処理はブロック２５１に戻る。ブロック２５５で、破壊されていると判定された場合、処理は終了する。評価時に作成された消去回数／ＢＥＲテーブル５６Ｅは、図２６に示すように、設計時にファームウェアに組み込まれる（ブロック２６２）。
【０１０７】
図２７は、消去回数／ＢＥＲテーブル５６Ｅを作成する方法の他の例を示す。この例では、ＳＳＤの製造時にＳＳＤ自身がテーブルを作成する。ここでも、ＮＡＮＤチップ内のブロック間で消去回数とＢＥＲの対応関係のばらつきが少ないと仮定する。ブロック２７２で、ＮＡＮＤチップのデータが消去され、ブロック２７３で消去回数がカウントされる。ブロック２７４で、ＮＡＮＤチップにデータがライトされ、ブロック２７５でデータがリードされる。ブロック２７６でＮＡＮＤチップの所定数ブロックが破壊されたか否か判定され、ブロックが全く破壊されていない又は破壊されていても破壊ブロック数が所定数以下である場合、ブロック２７７でＢＥＲが測定され、ブロック２７８で、消去回数とＢＥＲがテーブル５６Ｅに書き込まれる。その後、処理はブロック２７２に戻る。ブロック２７６で、所定数ブロックが破壊されていると判定された場合、処理は終了する。
【０１０８】
［ライト要求処理部３４］  
図２８は、ライト要求処理部３４の一例を示す。ライト要求処理部３４は、信頼度付ライト要求で指定された要求信頼度でデータをＮＡＮＤメモリにライト可能か否かを事前に判定する。ライト可能か否かは、ＮＡＮＤメモリに一定値以上のオーバープロビジョニングがあるか否かに基づく。ライト要求処理部３４は、ライト可能と判定した場合、ライト部３８にライト処理を行なわせ、ライト不可能と判定した場合、ライト不可能という応答をコマンド処理部３２を介してホスト１２に返送する。
【０１０９】
図３６は、ライト要求処理部３４の動作の流れを示すフローチャートである。ライト要求処理部３４は、ブロック３６１で信頼度付ライト要求を受信すると、ライト要求で指定された要求信頼度でデータをドライブにライトできるか否かを、ブロック３６２で判定する。この信頼度付ライト要求も、図７〜図１１に示した信頼度付ライト要求のいずれでもよい。この判定は、ＳＳＤに一定値以上のオーバープロビジョニングＯｐがあることを保証するためのものであり、Ａ−Ｏｐ−Ｕ≧Ｗ−Ｅが満足されるか否か判定する。
【０１１０】
Ａは、ドライブの物理容量、
Ｏｐは、オーバープロビジョニングに使用する物理空間上のサイズであり、ドライブの仕様により決まる定数であり、余裕容量とも呼ばれ、
Ｕは全ての有効クラスタの物理空間上でのサイズの合計値であり、表記容量とも呼ばれ、
Ｗはライト要求により有効になる物理空間上でのサイズ、
Ｅはライト要求により無効になる物理空間上でのサイズである。
【０１１１】
Ａ−Ｏｐ−Ｕは一定以上のオーバープロビジョニングを維持しながら有効化できるＳＳＤの物理空間上での最大サイズである。
【０１１２】
Ｗ−Ｅは信頼度付ライト要求の実施前後でのＵの増加分である。
【０１１３】
そのため、Ａ−Ｏｐ−Ｕ≧Ｗ−Ｅの場合、ライト要求受付可能と判定でき、ブロック３６３でＵが更新（Ｕ＝Ｕ＋（Ｗ−Ｅ））され、ブロック３６５でライト部３８によりデータがライトされる。Ａ−Ｏｐ−Ｕ≧Ｗ−Ｅではない場合、ライト要求受付不可能と判定でき、ブロック３６４でライトＮＧがコマンド処理部３２に返送される。
【０１１４】
ブロック３６５または３６４の後にブロック３６６で次のライト要求があるか否か判定される。次のライト要求がある場合、処理はブロック３６１に戻り、無い場合は、処理が終了する。
【０１１５】
図３８は、ライト要求処理部３４でのＷの計算処理の流れの一例を示すフローチャートである。ブロック３８２で、ライト要求処理部３４は、信頼度付ライト要求から要求信頼度を得る。ブロック３８４で、ライト要求処理部３４は、要求信頼度に基づいて予測コードレートテーブル７６を参照して予測コードレートＣＲを求める。ブロック３８６で、ライト要求処理部３４は、Ｗ＝ライト要求のサイズ／ＣＲを計算する。
【０１１６】
図３９は、ライト要求処理部３４でのＥの計算処理の流れの一例を示すフローチャートである。ブロック３９０で、ライト要求処理部３４は、パラメータｅを０とする。ブロック３９１で、ライト要求処理部３４は、信頼度付ライト要求からＬＢＡを求め、アドレスＳＡに設定する。ブロック３９２で、ライト要求処理部３４は、アドレスＳＡのアドレス変換を行い、物理アドレスＳＡｐを求める。ブロック３９３で、ライト要求処理部３４は、物理アドレスＳＡｐがアンマップされているか否か判定する。
【０１１７】
アンマップされていない場合、ブロック３９４で、ライト要求処理部３４は、物理アドレスＳＡｐからブロック番号を取り出して、ライト部３８内のコードレート実績テーブル７０Ｂを参照してコードレートＣＲを求める。ブロック３９５で、ライト要求処理部３４は、パラメータｅを更新（ｅ＝ｅ＋（クラスタサイズ／ＣＲ））する。物理アドレスＳＡｐがアンマップされている場合、ブロック３９４、３９５の処理はスキップされる。ブロック３９６で、ライト要求処理部３４は、次のクラスタの論理アドレスをアドレスＳＡに設定し、ブロック３９７で、ＳＡがライト要求のＬＢＡ範囲内であるか否か判定する。イエスの場合、処理はブロック３９２に戻り、ノーの場合、ブロック３９８で、ライト要求処理部３４は、ｅをＥに設定して、処理は終了する。
【０１１８】
図２８に説明を戻すが、ライト要求処理部３４は、空きブロック数カウンタ７４と予測コードレートテーブル７６を含む。空きブロック数カウンタ７４は、空きブロック数を管理する。空きブロック数カウンタ７４は１ブロックが書き込みのために割り当てられると１だけ減少し、１ブロックが消去されると１だけ増加する。予測コードレートテーブル７６は、要求信頼度と予測コードレートとの対応を記録する。予測コードレートテーブル７６は、ライト要求により与えられたサイズのデータを要求信頼度で記録するページ数の算出のためのコードレートを格納する。
【０１１９】
ライト要求処理部３４は、信頼度付ライト要求を受け取ると、予測コードレートテーブル７６を参照し、指定されたサイズのデータが指定された要求信頼度でライト可能か否か判定する。ライト要求処理部３４は、領域確保要求や領域変更要求を受け取ると、予測コードレートテーブル７６を参照し、与えられた要求信頼度で確保するサイズのページが存在しているか否か判定する。領域割当て要求、領域変更要求の処理の中で、領域割当て要求で指定される要求信頼度、領域変更要求の変更後の要求信頼度を基にして予測コードレートが決定される。ライト部３８内のコードレート実績テーブル７０Ｂのコードレートが変更された場合、予測コードレートが再計算される。
【０１２０】
図２９は、ブロック毎に記録方式が予め決まっている場合のライト要求処理部３４の一例を示す。ブロック毎に記録方式（ＳＬＣ／ＭＬＣ／ＴＬＣ）が決まっている場合、特定の記録方式に偏って多くのライト要求が発生すると、その記録方式のブロックだけ多く使われ、その記録方式に割り当てられたブロックを使い切ってしまう可能性がある。ライト要求処理部３４は、ドライブの空き容量に応じてライト要求を受付可能か否か判定するが、記録方式毎の空き容量を知らないと、上述した事象が生じてしまう。図２９のライト要求処理部３４は、それぞれの記録方式に対して、ライト要求を受付可能か否か判定する。予測コードレートテーブル７６は、要求信頼度と記録方式とコードレートとの対応関係を記憶する。記録方式毎のＵ、Ｏｐ、Ａは方式テーブル７８で保持される。ライト要求に含まれる要求信頼度に応じて、予測コードレートテーブル７６のある行が選択され、その行の記録方式に応じて方式テーブル７８の行が選択され、記録方式の表記容量Ｕ、余裕容量Ｏｐ、ドライブの物理容量Ａが得られる。
【０１２１】
図３０は、余裕容量Ｏｐ、物理容量Ａの設定方法の一例を示す。図３０（ａ）に示すように、ＳＳＤ１０の余裕容量Ｏｐ、物理容量Ａは設定ツールにより記録方式毎に設定される。記録方式毎に使用するバイト数の総和がドライブの物理容量Ａを超えると、エラーとなる。記録方式ごとに使用するブロックを割り当てた後、該当する記録方式でライトする前に、記録方式ごとに設定ツールにより余裕容量Ｏｐが設定される。このとき、表記容量Ｕは０に設定される。
【０１２２】
余裕容量Ｏｐの設定方法は、２つあり、１つは、設定ツールがドライブにＯｐ率を設定し、設定されたＯｐ率をもとにドライブが余裕容量Ｏｐを設定するものである。他は、設定ツールがドライブに、ある要求信頼度とその要求信頼度での表記容量を設定し、設定された２つの値をもとにドライブが余裕容量Ｏｐを設定するものである。
【０１２３】
エラーとするのは、Ｏｐ≧Ａとなったときである。
【０１２４】
図３０（ｂ）は、設定ツールと、ドライブ（ＳＳＤ）を使用するアプリケーションと、ＳＳＤの相互作用を示す図である。設定ツールは、記録方式毎に使用するブロック数（記録方式、ブロックのリスト）をＳＳＤに設定する。ＳＳＤは、設定が成功したか失敗したかを設定ツールに返す。この処理が、記録方式の数だけ繰り返される。
【０１２５】
次に、設定ツールは、記録方式毎に余裕容量Ｏｐ（記録方式、Ｏｐ率、または記録方式、要求信頼度、その時の表記容量）をＳＳＤに設定する。ＳＳＤは、設定が成功したか失敗したかを設定ツールに返す。この処理が、記録方式の数だけ繰り返される。
【０１２６】
Ｏｐ＜Ａの場合、ドライブ使用アプリケーションはＳＳＤにデータをライトする。
【０１２７】
図３１を参照して余裕容量Ｏｐの設定方法を詳細に説明する。論理空間（ペイロードのみ）の余裕容量Ｏｐ、表記容量ＵをそれぞれＯｐＬ、ＵＬとし、物理空間（ＥＣＣも含む）のＯｐ、ＵをそれぞれＯｐＰ、ＵＰとする。
【０１２８】
先ず、ブロック毎の記録方式が予め決まっており、設定ツールによりＯｐ率が指定された場合の余裕容量Ｏｐの決定方法を説明する。記録方式毎に割り当てられたブロックの物理容量（以下、実装容量と称する）をＡＰとする。コードレートはどのブロックでも同じ値であるとする。
【０１２９】
Ｏｐ率をα、コードレートをＣＲとすると、下記の関係がある。
【０１３０】
ＵＬ＝ＣＲｘＵＰ                (E1)
ＯｐＬ＝ＣＲｘＯｐＰ            (E2)
ＡＬ＝ＣＲｘＡＰ                (E3)
ＵＬ＋ＯｐＬ＝ＡＬ              (E4)
ＵＰ＋ＯｐＰ＝ＡＰ              (E5)
Ｏｐ率α＝ＯＰＬ／ＵＬ          (E6)
これらを利用して、余裕容量ＯｐＰは既知の実装容量ＡＰとＯｐ率αから次のように求められる。
【０１３１】
ＯｐＬ＝αｘＵＬ                (E7)
ＯｐＰ＝αｘＵＰ                (E8)
ＯｐＰ＋ＵＰ＝ＡＰ              (E9)
αｘＵＰ＋ＵＰ＝ＡＰ            (E10)
ＵＰ＝ＡＰｘ（１／（１＋α））  (E11)
従って、
ＯｐＰ  ＝ＡＰ−ＵＰ
＝ＡＰ−ＡＰｘ（１／（１＋α））
＝（α／（１＋α））ｘＡＰ       (E12)
このように実装容量ＡＰとＯｐ率αが与えられると、余裕容量ＯｐＰが求められる。
【０１３２】
次に、ブロック毎の記録方式が予め決まっており、要求信頼度と、その要求信頼度の時の表記容量が指定された場合の余裕容量Ｏｐの決定方法を説明する。コードレートはどのブロックでも同じ値ＣＲであるとする。コードレートＣＲは要求信頼度から得られる。ブロックの実装容量ＡＰと表記容量ＵＬとコードレートＣＲが与えられると、ＯｐＰは次のように求めることができる。
【０１３３】
コードレートをＣＲとすると、以下の関係がある。
【０１３４】
ＵＬ＝ＣＲｘＵＰ                (E13)
ＯｐＬ＝ＣＲｘＯｐＰ            (E14)
ＵＰ＋ＯｐＰ＝ＡＰ              (E15)
これらを利用して、余裕容量ＯｐＰは既知の実装容量ＡＰと、コードレートＣＲと、表記容量ＵＬから次のように求められる。
【０１３５】
ＯｐＰ＝ＡＰ−ＵＰ              (E16)
ＵＬ＝ＣＲｘＵＰ                (E17)
ＵＰ＝ＵＬ／ＣＲ                (E18)
(E18)を(E16)に代入すると、
ＯｐＰ＝ＡＰ−ＵＬ／ＣＲ        (E19)
このように、実装容量ＡＰ、表記容量ＵＬ、コードレートＣＲから余裕容量ＯｐＰが求められる。
【０１３６】
図３２は、コントローラ２２内に実装されるＢＥＲ測定部の一例を示す。図３２は、エラービット数（fail bit count）を実測できない場合にＮＡＮＤチップのＢＥＲを測定する構成である。ＮＡＮＤメモリ３２１から出力されたデータがＥＣＣデコーダ３２２に供給される。ＮＡＮＤメモリ３２１から出力された誤り訂正前のデータと、ＥＣＣデコーダ３２２から出力された誤り訂正後のデータがＥＸ−ＯＲ回路３２３に供給される。ＥＸ−ＯＲ回路３２３の出力がカウンタ３２４に供給され、値が“１”のビット数がカウントされる。カウンタ３２４の出力がセレクタ３２５の第１入力端に供給される。選択できるＥＣＣの中で誤り訂正できるビット数の最大値＋１（定数）がセレクタ３２５の第２入力端に供給される。セレクタ３２５の制御端子にはＥＣＣデコーダ３２２から訂正成功／失敗を示す信号（訂正できた場合は１、できない場合は０）が供給される。セレクタ３２５は、この信号が１の場合、第１入力端を選択し、この信号が０の場合、第２入力端を選択する。セレクタ３２５の出力はレジスタ３２７で累積される。ＮＡＮＤチップをリードしたビット数を累積するレジスタ３２８も設けられる。レジスタ３２７、３２８の対はブロックの個数分設けられ、ＮＡＮＤチップからのブロック番号ｋにより、ブロック番号ｋに対応したレジスタ３２７、３２８が選択される。選択されたレジスタ３２７、３２８の出力がブロック番号ｋのブロックのＢＥＲとしてブロック信頼度テーブル５６Ａに書き込まれる。
【０１３７】
図３３は、図３２で求めたＢＥＲをライト部３８のＥＣＣエンコーダの訂正能力にフィードバックする方法の一例を示す。ブロックのＢＥＲが変化する（ＢＥＲ１からＢＥＲ２へ）と、変化後のＢＥＲ２がＢＥＲ測定部（図３２）により測定され、ブロック信頼度テーブル５６Ａが更新される。次回のライト要求が供給され、ブロック信頼度テーブル５６Ａが参照されると、前回と異なるＢＥＲ２が得られる。このＢＥＲ２と要求信頼度に基づいてコードレート決定テーブル５６Ｂが参照され、変化後のＢＥＲ２に対応するコードレートが得られる。このコードレートを用いてＥＣＣエンコーダの訂正能力を設定することにより、ＢＥＲの変化がＥＣＣの訂正能力にフィードバックされる。
【０１３８】
図３４は、物理空間と論理空間の関係の一例を示す。図３４（ａ）に示すように、ホスト１２とＳＳＤ（コントローラ２２）の間では、記録データのサイズは論理空間により管理される。論理空間は、ペイロードのみからなる。ＳＳＤ内（コントローラ２２とＮＡＮＤパッケージ２６の間）では、記録データのサイズは物理空間により管理される。物理空間は誤り訂正符号（ＥＣＣ）が付加されたペイロードからなる。図３４（ｂ）に示すように、ドライブの物理容量Ａはオーバープロビジョニングに使用する物理空間上のサイズである余裕容量Ｏｐ（ドライブの仕様に従い定まる定数）と、全有効クラスタの物理空間上でのサイズである表記容量Ｕとを含む。有効クラスタとは、ＬＵＴから参照されているＮＡＮＤメモリのクラスタである。
【０１３９】
図３５は、ライト、アンマップの概要を示す。Ｗはライトによって有効化される物理空間上でのサイズ、Ｅはライト、アンマップによって無効化される物理空間上でのサイズ、ＣＲは有効化されるブロックのコードレート、ＣＲ’は無効化されるブロックのコードレートである。
【０１４０】
図３５の左側部分に示すように、論理空間でアンマップ状態の領域（サイズＹ）にデータがライトされると、データがライトされた論理空間の領域に対応する物理空間の領域（サイズはＹ／ＣＲ＝Ｗ）が有効化される。
【０１４１】
次に、図３５の中央部分に示すように、論理空間でアンマップ状態ではない領域（サイズＹ）がアンマップされると、アンマップされた論理空間の領域に対応する物理空間の領域（サイズはＹ／ＣＲ’＝Ｅ）が無効化される。
【０１４２】
さらに、図３５の右側部分に示すように、論理空間でアンマップ状態ではない領域（サイズＹ）にデータがライトされると、アンマップ状態ではない論理空間の領域に対応する物理空間の領域（サイズはＹ／ＣＲ’＝Ｅ）が無効化された後、データがライトされた論理空間の領域に対応する物理空間の領域（サイズはＹ／ＣＲ＝Ｗ）が有効化される。
【０１４３】
図３７は、異なるコードレートのブロックにデータが書かれた場合のサイズの計算例を示す。Ｚはクラスタサイズ、ＣＲ’はクラスタＡの書き込み先ブロックのコードレート、ＣＲ’’はクラスタＢの書き込み先ブロックのコードレートである。論理空間でクラスタＡ、Ｂがライトコマンドにより上書きされ、またはアンマップコマンドによりアンマップされる。論理空間のクラスタＡ、Ｂに対応する物理空間の領域Ａ（サイズはＺ／ＣＲ’）、Ｂ（サイズはＺ／ＣＲ’’）はライトコマンドまたはアンマップコマンドにより無効化される。物理空間で無効になるサイズは、書き込み先のブロックのコードレートに依存する。論理空間と物理空間の対応はクラスタ単位で行わるので、クラスタ単位でブロックのコードレートが異なるとして、物理空間のサイズを計算する必要がある。
【０１４４】
図４０は、予測コードレートテーブル７６の初期化の一例を示す。予測コードレートテーブル７６は。ライト部３８内の要求信頼度実績テーブル５６Ｄ、コードレート実績テーブル５６Ｃにデータが無い場合、初期化される。
【０１４５】
先ず、ライト部３８内のコードレート決定テーブル５６Ｂの各行が要求信頼度順に並び替えられる。そして、要求信頼度毎にコードレートが平均化される。ただし、平均値の小数点以下２桁目は四捨五入される。この結果、要求信頼度Ｒ１のコードレートは０．５、要求信頼度Ｒ２のコードレートは０．６とされる。これらのコードレートが予測コードレートテーブル７６の初期値として設定される。
【０１４６】
図４１は、予測コードレートテーブル７６の変更の一例を示す。変更タイミングは、コードレート実績テーブル７０Ｂが変更された時である。
【０１４７】
要求信頼度実績テーブル７０Ｃとコードレート実績テーブル７０Ｂとがブロック番号に基づいてマージされる。すなわち、同じブロック番号の要求信頼度の実績値と実績コードレートとの対応関係が作られる。この対応関係において、同じ要求信頼度の実績値の実績コードレートが平均化される。ただし、平均値の小数点以下２桁目は四捨五入される。この結果、要求信頼度Ｒ１のコードレートは０．５のままであるが、要求信頼度Ｒ２のコードレートは０．７に変更される。
【０１４８】
［改善されたビットコストのホストへの提供方法］  
以上のように、要求信頼度に応じた誤り訂正能力でデータをライトすることによりビットコストが改善される。このビットコストの改善分をホストへ提供する方法を説明する。改善されたビットコストをホストに提供するには、余裕容量または表記容量を増減することがある。
【０１４９】
余裕容量を増減する場合、表記容量は一定のままでもよい。ただし、標準ギア比を再計算してもよい。これにより、ランダムライト性能が向上し、ＮＡＮＤメモリの寿命が延びる。
【０１５０】
表記容量を増減する場合、余裕率は一定のまま（余裕容量も同一比率で変動）でもよい。論理アドレス範囲（大きさと、要求信頼度）の定義をホストに要求された時、提供可能な表記容量を再計算して、提供の可否をホストに応答してもよい。この処理は、ライトコマンド発行元に基づき要求信頼度を通知する場合、要求信頼度を含むライトコマンドを使用する場合は適用しない。ライトコマンド単位で書き込みができるか否か判定して、書き込めない時は書き込めないという応答を返してもよい。領域の追加、変更等、領域の定義の変更がホストから要求された時、その表記容量が割当て可能か否か判定し、判定結果をホストに返送してもよい。表記容量の増減に関するコマンドは、例えば領域割当てコマンド、領域変更コマンド、領域削除コマンドがある。
【０１５１】
ビットコストの改善分をホストに提供するためには、要求信頼度の区間を設定する必要がある。ＬＢＡの範囲、要求信頼度を満たす領域が確保できるか否かの判定方法と、この判定結果に従い論理アドレス空間を操作する動作の詳細を説明する。論理アドレス空間の操作は、領域と要求信頼度を新たに定義すること（領域割当て）、領域に定義されている要求信頼度を解除すること（領域削除）、定義されている要求信頼度および／または領域を変更すること（領域変更）を含む。
【０１５２】
［領域割当て（ＬＢＡ範囲）］  
図４２は、割当て処理部４２の一構成例を示す。割当て処理部４２は、ビットコストの改善分をホスト１２に提供できるように、ＳＳＤにホストが使える領域を新たに定義し、ホスト１２が使える容量を増やる処理を担当する部分である。上述したように、領域は、論理ブロックアドレスＬＢＡ、ＮＳＩＤ等の論理アドレス空間上の位置や、ストリームＩＤ、ポートＩＤ、イニシエータＩＤ等のライトコマンド発行元等により指定され得る。図４２の例は、新たに定義する領域をＬＢＡ範囲で指定する。
【０１５３】
ホスト１２が領域割当てコマンドを送信すると、コマンド処理部３２は領域割当て要求を割当て処理部４２に送信する。領域割当て要求は、要求の種類（領域割当て）を示すヘッダ、要求信頼度（＝Ｒ２）、開始アドレス（ＬＢＡ_start＝２００）、終了アドレス（ＬＢＡ_end＝３００）を含む。
【０１５４】
割当て処理部４２は、領域ＩＤと割当て済みブロック数との対応関係を記憶する割当て済みテーブル４２Ａと、割当て可能ブロック数カウンタ４２Ｂを含む。領域処理は、予測コードレートテーブルも必要であるが、ライト要求処理部３４が有する予測コードレートテーブル７６が使用される。割当て処理部４２は、コマンド処理部３２から出力される領域割当て要求を受信すると、要求信頼度識別部３６に、領域（ＬＢＡ範囲）と要求信頼度の登録と、ＩＤ割当てを要求する。割当て処理部４２は、図２８に示したライト要求処理部３４内の予測コードレートテーブル７６を要求信頼度に基づいて参照して予測コードレートを求め、予測コードレートに基づいて領域割当て要求の処理に必要なブロック数を求める。
【０１５５】
要求信頼度識別部３６は、領域テーブル３６Ａに領域（ＬＢＡ範囲）の開始アドレス（ＬＢＡ_start＝２００）と終了アドレス（ＬＢＡ_end＝３００）と、領域ＩＤ（＝１０００）を登録するとともに、要求信頼度テーブル３６Ｂに領域ＩＤ（＝１０００）と、要求信頼度（＝Ｒ２）を登録する。要求信頼度識別部３６は、割当て結果（領域ＩＤ＝１０００）を割当て処理部４２に返送する。
【０１５６】
割当て処理部４２は、領域ＩＤを取得すると、割当て済テーブル４２Ａに領域ＩＤ（＝１０００）と割当て済ブロック数（予測コードレートに基づいて求めた割当てに必要なブロック数）を登録する。割当て処理部４２は、コマンド処理部３２を介してホスト１２に割当て成功／失敗を通知する。
【０１５７】
図４３は、図４２の割当て処理部４２の処理の一例を示すフローチャートである。割当て処理部４２は、ブロック４３１で、コマンド処理部３２からの領域割当て要求を受信する。割当て処理部４２は、ブロック４３２で、領域割当て要求から要求信頼度を取り出し、要求信頼度に基づいてライト要求処理部３４（図２８）の予測コードレートテーブル７６を参照して予測コードレートＣＲを求める。
【０１５８】
割当て処理部４２は、ブロック４３３で、領域割当て要求の処理に必要なページ数Ｐreqを次のように計算する。
【０１５９】
Ｐreq＝ＬＢＡ範囲（クラスタ数）／（ＣＲ×１ページ当たりのクラスタ数）
さらに、割当て処理部４２は、ページ数Ｐreqをブロック数Ｂreqに切り上げる。
【０１６０】
割当て処理部４２は、ブロック４３４で、必要なブロック数Ｂreqが割当て可能ブロック数カウンタ４２Ｂがカウントしている割当て可能ブロック数以下であるか否か判定する。必要なブロック数Ｂreqが割当て可能ブロック数以下でない場合、この領域割当て要求に従って領域と要求信頼度を定義することが不可能であるので、割当て処理部４２は、ブロック４４０で、コマンド処理部３２を介してホスト１２に割当て失敗を通知する。
【０１６１】
必要なブロック数Ｂreqが割当て可能ブロック数以下である場合は、割当て処理部４２は、ブロック４３５で、要求信頼度識別部３６へＬＢＡ範囲と要求信頼度を送信し、ＬＢＡ範囲と要求信頼度の登録を要求するとともに、ＩＤ割当てを要求する。
【０１６２】
割当て処理部４２は、ブロック４３６で、一定時間待って、要求信頼度識別部３６から領域ＩＤが送信されたか否か判定する。領域ＩＤを受信しない場合、割当て処理部４２は、ブロック４４０で、コマンド処理部３２を介してホスト１２に割当て失敗を通知する。
【０１６３】
領域ＩＤを受信した場合、割当て処理部４２は、ブロック４３７で、割当て可能ブロック数カウンタ４２Ｂのカウント値をＢreqだけ減算する。割当て処理部４２は、ブロック４３８で、割当て済テーブル４２Ａに領域ＩＤとブロック数Ｂreqを登録する。割当て処理部４２は、ブロック４３９で、コマンド処理部３２を介してホスト１２に割当て成功を通知する。
【０１６４】
割当て処理部４２は、要求信頼度に応じたＳＬＣ／ＭＬＣ／ＴＬＣなどの記録方式、Ｌ３ＥＣＣオン／オフ等の対応をあらかじめ知っているものとする。提供信頼度を記録方式で表す場合、要求信頼度から記録方式を求め、ＭＬＣならＰreqを１／２、ＴＬＣなら１／３とする。提供信頼度をＬ３ＥＣＣオン／オフで表す場合、要求信頼度に基づいてＬ３ＥＣＣオン／オフを決め、Ｌ３ＥＣＣオンの場合、書き込み予定数にＬ３ＥＣＣのブロック数を７２クラスタにつき１クラスタ追加する。
【０１６５】
このように、ホスト１２は、ビットコストの改善によりＳＳＤの領域が空いた場合、ＬＢＡ範囲と要求信頼度とを用いて新たな領域をＳＳＤに割当てることができる。
【０１６６】
［領域割当て（ポートＩＤ）］  
図４４は、新たに定義する領域をポートＩＤで指定する場合の領域割当ての一例を示す。
【０１６７】
ホスト１２が領域割当てコマンドを発行すると、コマンド処理部３２は領域割当て要求を要求信頼度識別部３６に送信する。領域割当て要求は、要求の種類（領域割当て）を示すヘッダ、要求信頼度（＝Ｒ２）、ポートＩＤ（＝１）を含む。
【０１６８】
要求信頼度識別部３６は、領域テーブル３６ＥにポートＩＤ（＝１）と、領域ＩＤ（＝１０００）を登録するとともに、要求信頼度テーブル３６Ｂに領域ＩＤ（＝１０００）と、要求信頼度（＝Ｒ２）を登録する。同じポートＩＤに対して異なる要求信頼度を設定する場合、割当て失敗となり、登録されない。領域割当て要求では、指定された要求信頼度で書ける容量の確認は行わない。
【０１６９】
このように、ホスト１２は、使える領域を増やすために、ポートＩＤと要求信頼度とを用いても新たな領域をＳＳＤに割り当てることができる。
【０１７０】
［領域割当て（イニシエータＩＤ）］  
図４５は、新たに定義する領域をイニシエータＩＤで指定する場合の領域割当ての一例を示す。
【０１７１】
ホスト１２が領域割当てコマンドを送信すると、コマンド処理部３２は領域割当て要求を要求信頼度識別部３６に送信する。領域割当て要求は、要求の種類（領域割当て）を示すヘッダ、要求信頼度（＝Ｒ２）、イニシエータＩＤ（＝ＡＡＢＢＤ）を含む。
【０１７２】
要求信頼度識別部３６は、領域テーブル３６ＦにイニシエータＩＤ（＝ＡＡＢＢＤ）と、領域ＩＤ（＝１０００）を登録するとともに、要求信頼度テーブル３６Ｂに領域ＩＤ（＝１０００）と、要求信頼度（＝Ｒ２）を登録する。同じイニシエータＩＤに対して異なる要求信頼度を設定する場合、割当て失敗となり、登録されない。領域割当て要求では、指定された要求信頼度で書ける容量の確認は行わない。
【０１７３】
このように、ホスト１２は、使える領域を増やすために、イニシエータＩＤと要求信頼度とを用いても新たな領域をＳＳＤに割り当てることができる。
【０１７４】
［領域変更］                                                      
図４６は、領域変更コマンドの処理の一例を示す。図４７は、領域変更コマンドの例を示す。図４７（ａ）は領域変更コマンドの概念を示す。領域変更コマンドは、コマンドの種類（領域変更）を示すオペレーションコード、変更後の要求信頼度、変更前の領域、変更後の領域を含む。領域はＬＢＡ範囲、ポートＩＤ、イニシエータＩＤ等で指定することができる。領域をＬＢＡ範囲で指定する場合の領域変更コマンドを図４７（ｂ）に、領域をポートＩＤで指定する場合の領域変更コマンドを図４７（ｃ）に示す。
【０１７５】
図４６に示すように、ホスト１２が領域変更コマンドをコマンド処理部３２に送信すると、コマンド処理部３２は領域変更要求を割当て処理部４２に送信する。領域変更要求は、要求の種類を示すヘッダ（領域変更）、変更後要求信頼度、変更前領域、変更後領域を含む。領域変更要求は、要求信頼度と領域の両方を必ず変更する必要は無く、少なくともいずれか一方の変更要求でもよい。
【０１７６】
割当て処理部４２は、領域変更が可能であるか否か判定し、判定結果をコマンド処理部３２を介してホスト１２へ通知する。領域変更が可能である場合、割当て処理部４２は、割当て済テーブル４２Ａや要求信頼度識別部３６の要求信頼度テーブル３６Ｂを更新する。要求信頼度が変更された場合、要求信頼度が変更された領域からリード部４０により１クラスタずつデータをリードし、変更された要求信頼度でライト部３８によりデータを書き直す（詳細は図５０参照）。
【０１７７】
図４８は、領域変更コマンドに対するコマンド処理部３２の処理の流れの一例を示すフローチャートである
コマンド処理部３２は、ブロック４８１で、ホスト１２から領域変更コマンドを受信する。コマンド処理部３２は、ブロック４８２で、領域変更コマンドを領域変更要求に変換し、割当て処理部４２へ領域変更要求を送信する。コマンド処理部３２は、ブロック４８３で、一定時間待って、割当て処理部４２からの変更可能か否かの通知を待つ。変更が不可能な場合、コマンド処理部３２は、ブロック４８９で、ホスト１２へ領域変更失敗を通知する。
【０１７８】
変更が可能な場合、コマンド処理部３２は、ブロック４８４で、解放する領域が発生するか否か判定する。解放する領域が発生する場合、コマンド処理部３２は、ブロック４８５で、解放する領域をアンマップする。解放する領域が無い場合、ブロック４８５の処理はスキップされる。解放する領域のアンマップの概要を図４９に示す。
【０１７９】
コマンド処理部３２は、ブロック４８６で、要求信頼度が変更されたか否か判定する。要求信頼度が変更された場合、コマンド処理部３２は、ブロック４８７で、領域を指定された要求信頼度で書き直す。書き直しの概要を図５０に示す。要求信頼度が変更されない場合、ブロック４８７の処理はスキップされる。コマンド処理部３２は、ブロック４８８で、ホスト１２へ領域変更成功を通知する。
【０１８０】
図４９は、領域（ここでは、ＬＢＡ範囲で領域が指定）が変更された場合にアンマップされる領域及び要求信頼度が変更された場合に書き直される領域を示す。アンマップされる領域は右上から左下への破線のハッチングで示され、書き直される領域は左上から右下への実線のハッチングで示される。
【０１８１】
図４９（ａ）に示すように、変更前の領域のＬＢＡ範囲と変更後の領域のＬＢＡ範囲が重なっていない場合、変更前の全領域がアンマップされる。
【０１８２】
図４９（ｂ）、（ｃ）に示すように、変更前の領域のＬＢＡ範囲の一部と変更後の領域のＬＢＡ範囲の一部が重なっている場合、変更前の領域の中で変更後の領域と重なっていない部分がアンマップされ、変更前の領域の中で変更後の領域と重なっている部分が書き直される。
【０１８３】
図４９（ｄ）に示すように、変更前の領域のＬＢＡ範囲が変更後の領域のＬＢＡ範囲より広く、変更前の領域のＬＢＡ範囲の一部分が変更後の領域の全ＬＢＡ範囲となる場合、変更前の領域の中で変更後の領域と重なっていない部分がアンマップされ、変更前の領域の中で変更後の領域と重なっている部分が書き直される。
【０１８４】
図４９（ｅ）に示すように、変更前の領域のＬＢＡ範囲が変更後の領域のＬＢＡ範囲より狭く、変更前の領域の全ＬＢＡ範囲が変更後の領域のＬＢＡ範囲に完全に収まる場合、変更前の領域の中で変更後の領域と重なっていない部分がアンマップされ、変更前の領域の中で変更後の領域と重なっている部分が書き直される。
【０１８５】
図５０は、領域を指定された要求信頼度で書き直すコマンド処理部３２の処理（図４８のブロック４８７の処理）の一例を示す。
【０１８６】
コマンド処理部３２は、ブロック５０１で、変更前領域の開始位置ＬＢＡ_startをｌｂａに設定する。コマンド処理部３２は、ブロック５０２で、ｌｂａ＞ＬＢＡ_end（変更前領域の終了位置）か否か判定する。ｌｂａ＞ＬＢＡ_endの場合、処理は終了する。
【０１８７】
ｌｂａ＞ＬＢＡ_endでない場合、コマンド処理部３２は、ブロック５０３で、リード部４０にアドレスｌｂａのリードを要求する。コマンド処理部３２は、ブロック５０４で、リードデータが訂正不可能であるか否か判定する。訂正不可能である場合、コマンド処理部３２は、ブロック５０５で、要求信頼度識別部３６から要求信頼度（変更後）を受け取り、ライト部３８にアドレスｌｂａへその要求信頼度でリードデータ（訂正不可能）のライトを要求する。
【０１８８】
訂正可能である場合、コマンド処理部３２は、ブロック５０６で、要求信頼度識別部３６から要求信頼度（変更後）を受け取り、ライト部３８にアドレスｌｂａへその要求信頼度でリードデータのライトを要求する。ブロック５０５又は５０６の後、コマンド処理部３２は、ブロック５０７で、ｌｂａを更新（ｌｂａ＝ｌｂａ＋１）する。
【０１８９】
図５１は、領域変更要求の概要を示す。コマンド処理部３２は、割当て処理部４２に領域変更要求を送信する。領域変更要求は、要求の種類を示すヘッダ（領域変更）、変更後要求信頼度、変更前領域、変更後領域を含む。領域変更要求は、要求信頼度と領域の両方を必ず変更する必要は無く、少なくともいずれか一方の変更要求でもよい。
【０１９０】
割当て処理部４２は、要求信頼度識別部３６に変更前領域の領域ＩＤを問い合わせ、要求信頼度識別部３６から領域ＩＤを受信する。割当て処理部４２は、要求信頼度識別部３６に領域または要求信頼度の変更を要求し、要求信頼度識別部３６から変更の可否を受信する。
【０１９１】
割当て処理部４２は、割当て済テーブル４２Ａと割当て可能ブロック数カウンタ４２Ｂを含み、要求信頼度識別部３６は領域テーブル３６Ａと要求信頼度テーブル３６Ｂを含む。割当て処理部４２の処理は、予測コードレートテーブルも必要であるが、ライト要求処理部３４（図２８）内の予測コードレートテーブル７６を利用するので、割当て処理部４２は、予測コードレートテーブルを含まない。
【０１９２】
図５２は、領域変更要求に対する割当て処理部４２の処理の流れの一例を示すフローチャートである
割当て処理部４２は、ブロック５２１で、コマンド処理部３２から領域変更要求を受け取り、ブロック５２２で、要求信頼度識別部３６へ領域（変更前）を送信し、そのＩＤを要求する。要求信頼度識別部３６は、割当て処理部４２から送信された領域（変更前）のＬＢＡ範囲に基づき領域テーブル３６Ａを参照して領域（変更前）のＩＤを求め、求めた領域ＩＤを割当て処理部４２へ送信する。
【０１９３】
割当て処理部４２は、ブロック５２３で、所定時間待って、要求信頼度識別部３６から領域ＩＤを受信したか否か判定する。受信しない場合、割当て処理部４２は、ブロック５３３で、コマンド処理部３２を介してホスト１２へ領域変更失敗を通知する。
【０１９４】
受信した場合、割当て処理部４２は、ブロック５２４で、要求信頼度に基づいてライト要求処理部３４（図２８）内の予測コードレートテーブル７６を参照して予測コードレートを求める。割当て処理部４２は、ブロック５２５で、ブロック４３３（図４３）と同様に予測コードレート、領域（変更後）に基づいて必要なブロック数Ｂreqを計算する。割当て処理部４２は、ブロック５２６で、領域ＩＤに基づいて割当て済テーブルを参照して割当て済ブロック数を求める。割当て処理部４２は、ブロック５２７で、割当て可能ブロック数＞（必要なブロック数―割当て済ブロック数）であるか否か判定する。
【０１９５】
割当て可能ブロック数＞（必要なブロック数―割当て済ブロック数）でない場合、割当て処理部４２は、ブロック５３３で、コマンド処理部３２を介してホスト１２へ領域変更失敗を通知する。
【０１９６】
割当て可能ブロック数＞（必要なブロック数―割当て済ブロック数）である場合、割当て処理部４２は、ブロック５２８で、要求信頼度識別部３６に領域ＩＤに対応した領域または要求信頼度の変更を依頼する。要求信頼度識別部３６は、割当て処理部４２からの要求に応じて領域テーブル３６Ａまたは要求信頼度テーブル３６Ｂを書き換える。要求信頼度識別部３６は、変更の可否について割当て処理部４２へ返送する。
【０１９７】
割当て処理部４２は、ブロック５２９で、所定時間待って、要求信頼度識別部３６から変更成功通知を受信したか否か判定する。変更成功通知を受信しない場合、割当て処理部４２は、ブロック５３３で、コマンド処理部３２を介してホスト１２へ領域変更失敗を通知する。
【０１９８】
変更成功通知を受信した場合、割当て処理部４２は、ブロック５３０で、割当て可能ブロック数を更新する。すなわち、割当て可能ブロック数＝割当て可能ブロック数−（必要なブロック数−割当て済ブロック数）とする。割当て処理部４２は、ブロック５３１で、領域ＩＤに対して必要なブロック数を割当て済テーブル４２Ａに設定する。割当て処理部４２は、ブロック５３２で、コマンド処理部３２を介してホスト１２へ領域変更成功を通知する。
【０１９９】
上述の説明は、領域がＬＢＡ範囲により指定されている場合の領域変更処理に関するが、他のパラメータ、例えば、ポートＩＤ、イニシエータＩＤにより領域が指定されている場合も同様である。
【０２００】
［領域削除］  
図５３は、領域削除コマンドの概要を示す。ホスト１２は、コマンドの種類（領域削除）を示すオペレーションコードと、領域（削除前）のＬＢＡ範囲を含む領域削除コマンドを発行する。コマンド処理部３２は、領域削除コマンドを領域削除要求に変換して、要求の種類（領域削除）を示すヘッダと、領域（削除前）のＬＢＡ範囲を含む領域削除要求を割当て処理部４２へ供給する。割当て処理部４２は、削除対象の領域が要求信頼度識別部３６内の領域テーブル３６Ａにある場合、割当て済テーブル４２Ａや、要求信頼度識別部３６内の要求信頼度テーブル３６Ｂを更新する。削除対象領域はアンマップされる。
【０２０１】
図５４は、コマンド処理部３２の領域削除処理の一例を示すフローチャートである。コマンド処理部３２は、ブロック５４１で、ホスト１２から領域削除コマンドを受信し、ブロック５４２で、領域削除コマンドを領域削除要求に変換し、領域削除要求を割当て処理部４２へ送信する。割当て処理部４２は、削除対象の領域が要求信頼度識別部３６内の領域テーブル３６Ａにある場合、領域テーブル３６Ａから削除して、削除完了をコマンド処理部３２に返送する。割当て処理部４２は、削除対象の領域が領域テーブル３６Ａにない場合、削除未完をコマンド処理部３２に返送する。
【０２０２】
コマンド処理部３２は、ブロック５４３で、一定時間待って、割当て処理部４２から指定された領域の削除完了通知を受信したか否か判定する。削除完了通知を受信しない場合、コマンド処理部３２は、ブロック５４６で、領域削除失敗をホスト１２へ通知する。
【０２０３】
削除完了通知を受信した場合、コマンド処理部３２は、ブロック５４４で、領域削除要求で指定された領域をアンマップし、ブロック５４５で、ホスト１２へ領域削除成功を通知する。
【０２０４】
図５５は、領域削除要求の概要を示す。
【０２０５】
コマンド処理部３２は、図５３に示すような領域削除要求を割当て処理部４２へ送信する。削除領域は領域Ａ２であるとする。割当て処理部４２は、要求信頼度識別部３６へ削除対象領域（ＬＢＡ：１０００〜２０００）の領域ＩＤを問い合わせる。要求信頼度識別部３６は、削除対象領域の領域ＩＤ（＝１０００）を割当て処理部４２へ返送する。割当て処理部４２は、要求信頼度識別部３６へ要求信頼度テーブル３６Ｂの削除対象領域の領域ＩＤの行の削除を要求する。
【０２０６】
図５６は、割当て処理部４２の領域削除の一例のフローチャートである。
【０２０７】
割当て処理部４２は、ブロック５６１で、コマンド処理部３２から領域削除要求を受信する。割当て処理部４２は、ブロック５６２で、要求信頼度識別部３６へ要求で指定された削除対象領域（ＬＢＡ：１０００〜２０００）の領域ＩＤの取得を要求する。
【０２０８】
割当て処理部４２は、ブロック５６３で、一定時間待って、要求信頼度識別部３６から領域ＩＤ（＝１０００）を取得したか否か判定する。領域ＩＤを取得しない場合、割当て処理部４２は、ブロック５７０で、コマンド処理部３2を介してホスト１２へ領域削除失敗を通知する。
【０２０９】
領域ＩＤ（＝１０００）を取得した場合、割当て処理部４２は、ブロック５６４で、領域ＩＤに基づいて割当て済テーブル４２Ａを参照して割当て済ブロック数を求める。割当て処理部４２は、ブロック５６５で、割当て可能ブロック数を更新する（割当て可能ブロック数＝割当て可能ブロック数＋割当て済ブロック数）。
【０２１０】
割当て処理部４２は、ブロック５６６で、要求信頼度識別部３６へ要求信頼度テーブル３６Ｂの領域ＩＤ（＝１０００）の行の削除を要求する。割当て処理部４２は、ブロック５６７で、割当て済テーブル４２Ａの領域ＩＤ（＝１０００）の行を削除する。
【０２１１】
割当て処理部４２は、ブロック５６８で、要求信頼度識別部３６へ領域テーブル３６Ａの領域ＩＤ（＝１０００）の行の削除を要求する。
【０２１２】
割当て処理部４２は、ブロック５６９で、コマンド処理部３２を介してホスト１２へ領域削除成功を通知する。
【０２１３】
上述の説明は、領域がＬＢＡ範囲により指定されている場合の領域削除処理に関するが、他のパラメータ、例えば、ポートＩＤ、イニシエータＩＤにより領域が指定されている場合も同様である。
【０２１４】
［リード］  
図５７は、ホストリードの概要を示す。コマンド処理部３２は、ホスト１２からリードコマンドを受けると、リード部４０にリード要求を送信する。リード部４０は、ライト部３８内のコードレート実績テーブル５６Ｃを参照してコードレートを求め、コードレートに応じた決定した訂正能力をＥＣＣデコーダ４０Ａに設定する。
【０２１５】
図５８は、リード部４０のリード処理の一例を示すフローチャートである。リード部４０は、ブロック５８１で、コマンド処理部３２からリード要求（ＬＢＡとサイズ）を受け取る。リード部４０は、ブロック５８２で、アドレス変換によりＬＢＡからブロック番号を求め、ブロック５８３で、ブロック番号に基づいてライト部３８内のコードレート実績テーブル５６Ｃを参照し実績コードレートを求める。
【０２１６】
リード部４０は、ブロック５８４で、求めた実績コードレートをＥＣＣデコーダ４０Ａに設定し、ブロック５８６で、ＮＡＮＤメモリからデータをリードする。リード部４０は、ブロック５８７で、誤り訂正できたか否か判定する。
【０２１７】
誤り訂正できた場合、ブロック５８８で、コマンド処理部３２を介してホスト１２にリードデータを送る。誤り訂正できなかった場合、ブロック５８９で、コマンド処理部３２を介してホスト１２に訂正不可能を通知する。
【０２１８】
［ライト］  
図５９は、ホスト１２がライトコマンド（要求信頼度無し）を発行する場合のライト処理の概要を示す。ホスト１２がコマンド処理部３２にライトコマンドを送信すると、コマンド処理部３２はライト要求を要求信頼度識別部３６に送る。
【０２１９】
要求信頼度識別部３６は、ＬＢＡ等のライト要求の特定情報に基づいて要求信頼度を識別し、ライト要求に要求信頼度を付加し、ライト要求処理部３４に供給する。ライト要求処理部３４は、ライト部３８に信頼度付ライト要求を送り、ライト部３８はブロック信頼度テーブル５６Ａ、コードレート決定テーブル５６Ｂを参照して、コードレートを求め、コードレートに応じた訂正能力をＥＣＣエンコーダに設定する。ライト要求処理部３４は、ＮＡＮＤチップの空き容量が足りない場合、書込み不可能をホスト１２へ返送する。
【０２２０】
図６０は、ホスト１２が信頼度付ライトコマンドを発行する場合のライト処理の概要を示す。ホスト１２がコマンド処理部３２に信頼度付ライトコマンドを送信すると、コマンド処理部３２は信頼度付ライト要求をライト要求処理部３４に送る。
【０２２１】
ライト要求処理部３４は、ライト部３８に信頼度付ライト要求を送り、ライト部３８はブロック信頼度テーブル５６Ａ、コードレート決定テーブル５６Ｂを参照して、コードレートを求め、コードレートに応じた訂正能力をＥＣＣエンコーダに設定する。ライト要求処理部３４は、ＮＡＮＤチップの空き容量が足りない場合、書込み不可能をホスト１２へ返送する。
【０２２２】
［コンパクション］  
ＳＳＤでは、ＮＡＮＤメモリに対するデータの書き換えが進むと、無効なデータ（最新でないデータ）によりブロック内の有効データを格納できない記憶領域の割合が増大する。このため、ＳＳＤは、有効データの記憶領域が低密度になったＮＡＮＤメモリの各ブロックの記憶領域を有効活用するために、コンパクション（compaction）処理を実行する。有効データが記録されているアクティブブロックの中で、有効データ（最新データ）の記憶領域が低密度になったブロック（コンパクション対象ブロック）が検されると、コンパクションが開始される。
【０２２３】
コンパクションが開始すると、コンパクション対象ブロックから有効クラスタ（クラスタ単位の有効データ）を収集して、コンパクション先ブロックに書き直すコンパクションライト処理が行われる。この後、コンパクション対象ブロックに対する消去処理を実行することにより、コンパクション対象ブロックをフリーブロックとして再利用できる。
【０２２４】
コンパクションライトは、当初のホストライト時の要求信頼度でコンパクションライトし、ホストライト時の要求信頼度を維持する方式と、ホストライト時の要求信頼度に関わらずコンパクションライトで指定された要求信頼度でライトする方式がある。
【０２２５】
図６１は、ホストライト時の要求信頼度を維持するコンパクションに関するコントローラ２２の概要を示し、図６２は、ホストライト時の要求信頼度を維持するコンパクションの一例を示すフローチャートである。
【０２２６】
ブロック６２１で、コマンド処理部３２は、コンパクション対象ブロックを決定し、ブロック６２２で、コンパクション対象クラスタを決定する。コマンド処理部３２は、ブロック６２３で、コンパクション対象クラスタのライト時のログを使用して、コンパクション対象クラスタの論理アドレスをアドレス変換してコンパクション対象クラスタの物理アドレスを求める。コンパクション対象クラスタのライト時のログには、クラスタの論理アドレスと、ライトした時の物理アドレスがクラスタ毎に記録される。コマンド処理部３２は、ブロック６２４で、アドレス変換により求められた物理アドレスと、ログに記録されている物理アドレスが一致するか否か判定する。一致する場合、有効クラスタであると判定できる。一致しない場合、処理はブロック６３２までジャンプする。
【０２２７】
両物理アドレスが一致する場合、コマンド処理部３２は、ブロック６２５で、リード部４０へコンパクションリード要求を送る。リード部４０は、ブロック６２６で、コンパクションリード要求が指定する物理アドレスからブロック番号を求め、ブロック６２７で、ブロック番号に基づいて要求信頼度実績テーブルから要求信頼度を求める。リード部４０は、ブロック６２８で、ブロック番号に基づいてコードレート実績テーブルを参照してコードレートを求め、ＥＣＣデコーダに設定する。
【０２２８】
リード部４０は、ブロック６２９で、コマンド処理部３２へＬＢＡと要求信頼度とクラスタデータを送る。コマンド処理部３２は、ブロック６３０で、ライト部３８へ信頼度付ライト要求を送る。ライト部３８は、ブロック６３１で、ＮＡＮＤメモリにデータをライトする。このため、ライト部３８は、リード部４０で求められた要求信頼度に応じてデータをライトする。
【０２２９】
コマンド処理部３２は、ブロック６３２で、ブロックの全クラスタの処理が終了したか否か判定する。ブロックの全クラスタの処理が終了していない場合は、処理はブロック６２２に戻り、次のクラスタの処理が行われ、ブロックの全クラスタの処理が終了した場合は、処理は終了する。
【０２３０】
図６３は、ホストライト時の要求信頼度に関わりなく、コンパクションライトで指定された要求信頼度でライトするコンパクションに関するコントローラ２２の概要を示し、図６４は、そのコンパクションの一例を示すフローチャートである。
【０２３１】
ブロック６４１で、コマンド処理部３２は、コンパクション対象ブロックを決定し、ブロック６４２で、コンパクション対象クラスタを決定する。コマンド処理部３２は、ブロック６４３で、コンパクション対象クラスタのライト時のログを使用して、コンパクション対象クラスタの論理アドレスをアドレス変換してコンパクション対象クラスタの物理アドレスを求める。コンパクション対象クラスタのライト時のログには、クラスタの論理アドレスと、ライトした時の物理アドレスがクラスタ毎に記録される。コマンド処理部３２は、ブロック６４４で、アドレス変換により求められた物理アドレスと、ログに記録されている物理アドレスが一致するか否か判定する。一致する場合、有効クラスタであると判定できる。一致しない場合、処理はブロック６５２までジャンプする。
【０２３２】
両物理アドレスが一致する場合、コマンド処理部３２は、ブロック６４５で、リード部４０へコンパクションリード要求を送る。リード部４０は、ブロック６４６で、コンパクションリード要求が指定する物理アドレスからブロック番号を求め、ブロック６４７で、ブロック番号に基づいてコードレート実績テーブル５６Ｃを参照してコードレートを求め、ＥＣＣデコーダに設定する。
【０２３３】
リード部４０は、ブロック６４８で、コマンド処理部３２へＬＢＡとクラスタデータを送る。コマンド処理部３２は、ブロック６４９で、ライト部３８へライト要求を送る。ライト部３８は、ブロック６５０で、ライト要求内の特定情報に基づいて要求信頼度識別部３６が識別した要求信頼度を受け取り、ブロック６５１で、その要求信頼度ＮＡＮＤメモリにデータをライトする。このため、ライト部３８は、コンパクションライト要求で指定された要求信頼度に応じてデータをライトする。
【０２３４】
コマンド処理部３２は、ブロック６５２で、ブロックの全クラスタの処理が終了したか否か判定する。ブロックの全クラスタの処理が終了していない場合は、処理はブロック６４２に戻り、次のクラスタの処理が行われ、ブロックの全クラスタの処理が終了した場合は、処理は終了する。
【０２３５】
［訂正不可能時のホストの動作］  
図６５は、訂正不可能時のホストの動作例を示す。
【０２３６】
図６５（ａ）は、再計算によってオリジナルデータを再現できる場合の動作例を示す。すなわち、ＳＳＤ１０にライトされたデータは、他のデータの計算により得られたデータである場合、他のデータの再計算によりデータが再現できる。ホスト１２からリードコマンドを受信したＳＳＤ１０は、リードデータを誤り訂正するが、訂正不可能な場合、ホスト１２に訂正不可能を通知する。ホスト１２は、他のデータの再計算によりリードデータのオリジナルデータを再現し、再現されたオリジナルデータを同じＬＢＡでＳＳＤ１０に書き直す。
【０２３７】
図６５（ｂ）は、オリジナルデータがＳＳＤ１０外、例えば遠くのストレージにある場合の動作例を示す。ホスト１２からリードコマンドを受信したＳＳＤ１０は、リードデータを誤り訂正するが、訂正不可能な場合、ホスト１２に訂正不可能を通知する。ホスト１２は、遠くのストレージからＳＳＤ１０にライトしたオリジナルデータを取得し、取得したオリジナルデータを同じＬＢＡでＳＳＤ１０に書き直す。
【０２３８】
図６６は、図６５（ａ）、（ｂ）に示した訂正不可能時のホスト１２の動作の概要を示すフローチャートである。ホスト１２は、ＳＳＤ１０にデータをライトする際、データをどの領域にどの要求信頼度でライトするかを設定する。失っても構わないデータの要求信頼度は低い要求信頼度に設定してもよい。失っても構わないデータは、例えば、図６５（ａ）に示すようにオリジナルデータが再計算によって再現可能なデータや、図６５（ｂ）に示すようにＳＳＤ外のストレージにオリジナルデータがあるデータである。ホスト１２は、リード対象のＬＢＡにデータがどの要求信頼度でライトされたかを認識している。ホスト１２は、データをライトする際、オリジナルデータの再計算方法、格納位置等も記憶しておく。低い要求信頼度でライトしたデータはオリジナルデータを取得可能であるので、そのデータについての誤り訂正が不可能の場合、オリジナルデータを取得して、ＳＳＤ１０に書き直せばよい。
【０２３９】
ホスト１２は、ブロック６６１で、ＳＳＤ１０にリードコマンドを送り、ブロック６６２で、ＳＳＤ１０からリード結果を受信する。リード結果は、リードデータまたは訂正不可能通知である。ホスト１２は、ブロック６６３で、訂正不可能通知を受信したか否か判定する。リードデータを受信した場合、ホスト１２は、ブロック６６４で、リードデータを正常なデータとして扱い、処理を終了する。
【０２４０】
訂正不可能通知を受信した場合、ホスト１２は、ブロック６６５で、図６５（ａ）に示すようにオリジナルデータがＳＳＤ外にあるか否か判定する。ある場合、ホスト１２は、ブロック６６６で、ＳＳＤ外、例えば遠くのストレージからオリジナルデータを取得し、処理はブロック６７０にジャンプする。オリジナルデータは、遠くのストレージ以外に、他のホストまたは低速のストレージに格納されることもある。ない場合、ホスト１２は、ブロック６６７で、図６５（ｂ）に示すようにオリジナルデータが再計算により再現可能であるか否か判定する。再現不可能な場合、処理は終了する。再現可能な場合、ホスト１２は、ブロック６６９で、再計算によりオリジナルデータを取得する。ブロック６６６またはブロック６６９の後に、ホスト１２は、ブロック６７０で、取得したオリジナルデータを同じＬＢＡに同じ要求信頼度で書き直す。
【０２４１】
これにより、リードデータが訂正不能でも、オリジナルデータを再現することができる。このため、低い要求信頼度でデータをライトする可能性が高くなり、ビットコストを下げることができる。
【０２４２】
［リード］  
図６７は、リードの一例を示すフローチャートである。
【０２４３】
リード部４０は、ブロック６７２で、コマンド処理部３２からリード要求（ＬＢＡとサイズ）を受け取り、ブロック６７３で、ＬＢＡからブロック番号を求める。リード部４０は、ブロック６７４で、ブロック番号に基づいてライト部３８内のコードレート実績テーブル７０Ｂ（図２０）を参照して実績コードレート、第２ＥＣＣのオン・オフ情報を求め、ブロック６７５で、実績コードレートから第１ＥＣＣの訂正能力を決定し、第１ＥＣＣデコーダに決定した訂正能力を設定する。リード部４０は、ブロック６７６で、ＮＡＮＤメモリからデータをリードし、ブロック６７７で、第１ＥＣＣデコーダで誤り訂正する。
【０２４４】
リード部４０は、ブロック６７８で、誤り訂正できたか否か判定する。誤り訂正できた場合、リード部４０は、ブロック６８３で、コマンド処理部３２を介してホスト１２にリードデータを送信する。誤り訂正できない場合、リード部４０は、ブロック６７９で、リード要求で第２ＥＣＣオンが指定されているか否か判定する。第２ＥＣＣオンが指定されていない場合、リード部４０は、ブロック６８０で、コマンド処理部３２を介してホスト１２に訂正不可能（リード失敗）を通知する。
【０２４５】
第２ＥＣＣオンが指定されている場合、リード部４０は、ブロック６８１で、ページ内の全クラスタをリードして、第２ＥＣＣデコーダで誤り訂正する。リード部４０は、ブロック６８２で、誤り訂正できたか否か判定する。誤り訂正できた場合、リード部４０は、ブロック６８３で、コマンド処理部３２を介してホスト１２にリードデータを送信する。誤り訂正できない場合、リード部４０は、ブロック６８０で、コマンド処理部３２を介してホスト１２に訂正不可能（リード失敗）を通知する。
【０２４６】
図６８は、リードの他の例を示すフローチャートである。
【０２４７】
リード部４０は、ブロック６９１で、コマンド処理部３２からリード要求（ＬＢＡとサイズ）を受け取り、ブロック６９２で、ＬＢＡからブロック番号を求める。リード部４０は、ブロック６９３で、ブロック番号に基づいてライト部３８内のコードレート実績テーブル７０Ｂ（図２３）を参照して実績コードレート、記録方式を求め、ブロック６９４で、実績コードレートから第１ＥＣＣの訂正能力を決定し、第１ＥＣＣデコーダに決定した訂正能力を設定する。リード部４０は、ブロック６９５で、コードレート実績テーブル７０Ｂ（図２３）から求めた記録方式に基づいて読込み方式を設定し、ブロック６９６で、ＮＡＮＤメモリからデータをリードし、ブロック６９７で、第１ＥＣＣデコーダで誤り訂正する。
【０２４８】
リード部４０は、ブロック６９８で、誤り訂正できたか否か判定する。誤り訂正できた場合、リード部４０は、ブロック６９９Ａで、コマンド処理部３２を介してホスト１２にリードデータを送信する。誤り訂正できない場合、リード部４０は、ブロック６９９Ｂで、コマンド処理部３２を介してホスト１２に訂正不可能（リード失敗）を通知する。
【０２４９】
［ホストとドライブ（ＳＳＤ）の連携］  
上述したＳＳＤとホストとの連携動作を説明する。
【０２５０】
図６９に示すように、ホスト１２では、アプリケーションプログラムがＯＳに対してデータのライトを指示する。上述した実施例では、ＳＳＤ１０は、全てのデータに対して一律に誤り訂正するのではなく、データによって訂正能力を変えることができる。例えば、ＳＳＤ１０は、パーティション毎に異なる信頼度をホスト１２に対して提供することができる。アプリケーションプログラムは、高い要求信頼度で書きたいデータと、低い要求信頼度で書いてもよいデータとを識別しており、データの重要性に応じた要求信頼度をドライブに対して要求する。要求信頼度は、ライトコマンドの一部としてＳＳＤ１０に伝えられる。
【０２５１】
図７０に示すように、ＳＳＤ等のドライブでは、多数のパーティションが定義され得る。パーティションとは論理空間の一部で、論理アドレスが連続した領域である。ホストのＯＳがLinuxである場合、ホスト１２がＳＳＤ１０にアクセスするには、ＳＳＤ１２をホスト１０に認識させる必要があり、この作業はマウントと呼ばれる。ファイルは各パーティション内にツリー構造で格納される。複数のパーティションも１つのツリー構造にまとめられる。ＳＳＤ１２をホスト１０に接続した時に、ＳＳＤ１２のパーティションをツリー構造のファイルシステム（例えば、/, /cache，/home，/tmp）内のどこかにディレクトリとして登録する作業が行われる。言い換えると、パーティションとファイルシステム内のディレクトリとを対応させる。この作業がマウントと呼ばれ、登録するディレクトリはマウントポイントと呼ばれる。例えば、パーティション１がルートディレクトリに、パーティション２が/cacheに、パーティション３が/homeに、パーティション４が/tmpにマウントされる。なお、パーティションをツリー構造から切り離す作業はアンマウントと呼ばれる。パーティション１、２、３はＳＳＤ１に含まれ、パーティション４はＳＳＤ２に含まれる。このように、ＳＳＤとパーティションは１対ｎ（ｎは複数の自然数）の関係がある。一つのマウントポイントには必ず一つのパーティションしか対応しない。しかし、複数のマウントポイントから同じパーティションに対応させてもよい。マウントポイントとパーティションはｎ対１の関係がある。
【０２５２】
図７１は、ホストとＳＳＤとの連携の第１例を示す。ホスト１２とＳＳＤ１０との間のインタフェースは１種類であるが、ＳＳＤ１０は、複数、例えば２つのパーティションを含み、ホスト１２から指定された要求信頼度でデータをパーティションに書き分けることができる。例えば、パーティション１は高い信頼度でデータを書き、パーティション２は低い信頼度でデータを書くことができる。ホスト１２は、信頼度付ライトコマンドをＳＳＤ１０に与えることができ、高い信頼度で書きたいデータのライトコマンドには高い要求信頼度を付加し、高い信頼度で書かなくもよいデータのライトコマンドには低い要求信頼度を付加する。
【０２５３】
図７２（ａ）は、ＯＳが管理するパーティション／信頼度テーブルの一例を示す。パーティション／信頼度テーブルは、ライト先マウントポイントＭＰと、ライト先パーティションＰａと、要求信頼度Ｒの対応関係を記憶する。マウント時に、ライト先マウントポイントに対してライト先パーティションと要求信頼度がパーティション／信頼度テーブルに登録される。アンマウント時に、該当するエントリがパーティション／信頼度テーブルから削除される。
【０２５４】
図７２（ｂ）はＯＳのライト処理の一例を示すフローチャートである。ＯＳは、ブロック７２２で、ライト先ディレクトリにマウントされているライト先マウントポイントに基づいてパーティション／信頼度テーブルを参照してライト先パーティションＰａと要求信頼度Ｒを求める。ＯＳは、ブロック７２４で、ライト先パーティションＰａにその要求信頼度Ｒでデータをライトするように信頼度付ライトコマンドを発行する。ライト後、ＳＳＤ１０からライト結果に関する通知が返送されるので、ＯＳは、ブロック７２６で、ＳＳＤ１０から受信したライト応答をアプリケーションに通知する。
【０２５５】
図７３は、ホスト１２とＳＳＤ１０との連携の第２例を示す。ホスト１２とＳＳＤ１０との間のインタフェースは、複数、例えば２種類あり、ポート毎に異なるインタフェースが接続される。ＳＳＤ１０は、インタフェース毎に異なる要求信頼度でデータを書き分けることができる。例えば、ポート１に接続されるインタフェース１の信頼度はポート２に接続されるインタフェース２の信頼度より高い。ホスト１２は高い信頼度で書きたいデータはポート１のインタエースを介してドライブにライトを指示し、高い信頼度で書かなくてもよいデータはポート２のインタフェースを介してドライブにライトを指示する。
【０２５６】
図７４（ａ）は、ＯＳが管理するポートテーブルの一例を示す。ポートテーブルは、ライト先マウントポイントＭＰと、ポートＩＤの対応関係を記憶する。図７４（ｂ）はＯＳのライト処理の一例を示すフローチャートである。ＯＳは、ブロック７８２で、データのライト先のディレクトリにマウントされているライト先マウントポイントに基づいてポートテーブルを参照してポートＩＤを求める。ＯＳは、ブロック７８４で、そのポートＩＤのポートからＳＳＤ１０へライトコマンドを発行する。ライト後、ＳＳＤ１０からライト結果に関する通知が返送されるので、ＯＳは、ブロック７８６で、ＳＳＤ１０から受信したライト応答をアプリケーションに通知する。
【０２５７】
図７５は、ホストとＳＳＤとの連携の第３例を示す。ホスト１２とＳＳＤ１０との間のインタフェースは１種類であるが、ＳＳＤ１０は、ＬＢＡ範囲毎に異なる要求信頼度でデータを書き分けることができる。例えば、ＬＢＡ範囲１の信頼度は、ＬＢＡ範囲２の信頼度より高い。ホスト１２は高い信頼度で書きたいデータはＬＢＡ範囲１に、高い信頼度で書かなくてもよいデータはＬＢＡ範囲２にライトするようにＳＳＤ１０にライトを指示する。
【０２５８】
図７６（ａ）は、ＯＳが管理するＬＢＡ範囲テーブルの一例を示す。ＬＢＡ範囲テーブルは、ライト先マウントポイントＭＰと、ライト先パーティションＰａと、ＬＢＡ範囲（ＬＢＡ_startからＬＢＡ_end）の対応関係を記憶する。図７６（ｂ）はＯＳのライト処理の一例を示すフローチャートである。ＯＳは、ブロック７４２で、データのライト先のディレクトリにマウントされているライト先マウントポイントに基づいてＬＢＡ範囲テーブルを参照してライト先パーティション、ＬＢＡ範囲を求める。ＯＳは、ブロック７４４で、求めたＬＢＡ範囲内にデータを書ける場所を探し、その場所にデータをライトするようにＳＳＤ１０に対してライトコマンドを発行する。ライト後、ＳＳＤ１０からライト結果に関する通知が返送されるので、ＯＳは、ブロック７４６で、ＳＳＤ１０から受信したライト応答をアプリケーションに通知する。
【０２５９】
図７７は、ホスト１２とＳＳＤ１０との連携の第４例を示す。複数、例えば２つのＳＳＤ１０１、１０２が設けられ、ホスト１０は２つのＳＳＤ１０１、１０２がそれぞれ接続される２つのポートを含む。ＳＳＤ１０１、１０２は提供信頼度が異なり、ＳＳＤ１０１はＳＳＤ１０２よりも信頼度が高い。ホスト１２は高い信頼度で書きたいデータはポート１を介してＳＳＤ１０１に、高い信頼度で書かなくてもよいデータはポート２を介してＳＳＤ１０２にライトするようにドライブにライトを指示する。
【０２６０】
図７８（ａ）は、ＯＳが管理するドライブテーブルの一例を示す。ドライブテーブルは、ライト先マウントポイントＭＰと、ポートＩＤと、ライト先ドライブの対応関係を記憶する。図７８（ｂ）はＯＳのライト処理の一例を示すフローチャートである。ＯＳは、ブロック７６２で、データのライト先のディレクトリにマウントされているライト先マウントポイントに基づいてドライブテーブルを参照してポートＩＤとライト先ドライブを求める。ＯＳは、ブロック７６４で、求めたＳＳＤへデータをライトするようにライトコマンドを発行する。ライト後、ＳＳＤ１０からライト結果に関する通知が返送されるので、ＯＳは、ブロック７６６で、ＳＳＤ１０から受信したライト応答をアプリケーションに通知する。
【０２６１】
図７９は、パーティションの作成方法の一例を示す。
【０２６２】
図７９（ａ）は図７５の例におけるパーティションの作成を示す。パーティションをＬＢＡ範囲と要求信頼度を指定して作成するときには、マウント前に、予め設定ツールが領域割当てコマンド（図４２）を使って領域を割り当てる。ＳＳＤ１０は領域割当て結果を設定ツールに返送する。設定ツールは、ＳＳＤ１０から領域割当て結果がエラーとして返送された場合、起動したユーザに対してエラーを返す。作成されたパーティションでマウントする。
【０２６３】
図７３の例におけるドライブのマウントを説明する。図７９（ｂ）に示すように、１つのホストが１つのドライブの複数のポートに接続される場合、ＯＳから見ると、図７９（ｃ）に示すように、それぞれのポート毎に異なるドライブに見えるようにする。そのため、それぞれのドライブを異なるマウントポイントで割り当てることができる。
【０２６４】
［変形例］  
ライト要求処理部３４または割当て処理部４２の処理を説明する。割当て処理部４２は、領域割当て要求、領域変更要求を受けると、要求されたブロック数が確保できるか否か判定する。確保可能ブロック数からオーバープロビジョニングＯｐ分を予め引いて、オーバープロビジョニングＯｐが割り当てられないようにしておく。ライト処理部３４は、ライト要求を受けると、図３６のブロック３６２に示した判定式“Ａ−Ｏｐ−Ｕ≧Ｗ−Ｅ”に基づいてオーバープロビジョニングＯｐが一定量確保されているか否か判定し、確保されていない場合、ライト要求を受け付けない。コードレートを一律ＣＲとすると、以下が成り立つ。
【０２６５】
ＯｐＬ＝ＣＲ×ＯｐＰ            （E31）
ＵＬ＝ＣＲ×ＵＰ                （E32）
ＵＰ＋ＯｐＰ＝ＡＰ              （E33）
ドライブのＯｐ率は余裕容量／表記容量なので、下記となる。
【０２６６】
Ｏｐ率＝ＯｐＬ／ＵＬ            （E34）
Ｏｐ率に対して書込み効率（Write Amplification factor：ＷＡＦ＝ＮＡＮＤメモリにライトするデータ量／ホストからＳＳＤにライトするデータ量）を求める。ＮＡＮＤメモリにライトするデータ量はホストからＳＳＤにライトするデータ量とコンパクションによりＮＡＮＤメモリにライトするデータ量との和である。
【０２６７】
図８０は、コンパクションの概要を示す。コンパクション対象ブロックの有効率をαとし、αｍ＝ｎとなる正整数ｍ，ｎ（図８０はｍ＝５、ｎ＝４の場合を示す）があるとする。これは、ｍブロックをコンパクションすると、ｎブロックになることを意味する。（ｍ−ｎ）ブロックは、フリーブロックとなり、このブロック分のデータについてホストからライトコマンドを受け付けることができる。定常的に、ｍブロックをコンパクションする間に（ｍ−ｎ）ブロック分のデータとホストからドライブにライトすることができる。
【０２６８】
したがって、ホストからドライブにライトするデータ量はｍ−ｎ、コンパクションによりＮＡＮＤメモリにライトするデータ量はｎなので、ＷＡＦは次のようになる。
【０２６９】
ＷＡＦ
＝（（ｍ−ｎ）＋ｎ）／（ｍ−ｎ）
＝ｍ／（ｍ−ｎ）
＝ｍ／（ｍ−αｍ）
＝１／（１−α）                      (E35)
Ｏｐ率βとコンパクション対象ブロックの有効率ａの関係を説明する。コンパクション対象ブロックの有効率ａはブロック間で一定であるとする。コンパクション対象ブロックの有効率ａは次のように表すことができる。
【０２７０】
ａ＝ＵＬ／ＡＬ                          (E36)
Ｏｐ率βは次のように表すことができる。
【０２７１】
β＝ＯｐＬ／ＵＬ                        (E37)
これらから次の関係が得られる。
【０２７２】
ＡＬ
＝ＵＬ＋ＯｐＬ
＝ＵＬ＋βＵＬ
＝ＵＬ（１＋β）                      (E38)
(E36)に(E38)を代入すると下記となる。
【０２７３】
ａ
＝ＵＬ／ＡＬ
＝ＵＬ／ＵＬ（１＋β）
＝１／（１＋β）                      (E39)
ａをαに適用すると、下記となる。
【０２７４】
ＷＡＦ
＝１／（１−α）
＝１／（１−（１／（１＋β））
＝（１＋β）／β                      (E40)
(E40)に(E37)を代入すると、下記となる。
【０２７５】
ＷＡＦ
＝（１＋（ＯｐＬ／ＵＬ））／（ＯｐＬ／ＵＬ）
＝（ＵＬ＋ＯｐＬ）／ＯｐＬ
＝ＡＬ／（ＡＬ−ＵＬ）
＝ＣＲ×ＡＰ／（ＣＲ×ＡＰ−ＵＬ）       (E41)
ＣＲ＝０．８、ＡＰ＝１０００とし、Ｘ軸にＵＬ、Ｙ軸にＷＡＦとした特性を図８１に示す。ＵＬがＣＲ×ＡＰに近づくと、ＷＡＦは急激に大きくなる。ＣＲ×ＡＰはドライブの表記容量と余裕容量の和なので、余裕容量ＯｐＬが少なくなると、ＷＡＦが大きくなり、ＮＡＮＤメモリの寿命が短くなったり、ライト性能が低下する等の問題が起きる。ＯｐＬが少なくなると、Ｏｐ率も低くなる。
【０２７６】
次に、割当て処理部４２が割り当てるブロック数の設定手段を説明する。割当て処理部４２では、与えられた領域割当要求に対して、ブロックがあれば割り当てる処理を行なっている。このとき、ドライブのすべてのブロックを割り当ててしまうと、Ｏｐ率が低下し、ＷＡＦが上がるので、性能が低下する問題がある。これを回避するために、割当て処理部４２の割当可能ブロック数の初期値を、余裕容量を確保するように設定する必要がある。このための割当て初期化コマンドが用意されている。このコマンドではＯｐ率が指定される。ＳＳＤはＯｐに割り当てるブロック数を計算し、そのブロック数を予め割当可能ブロック数から引く。これにより、Ｏｐ分のブロックが確保されたことになる。したがって、領域割当コマンドが実施されても、Ｏｐ分のブロックは領域として割り当てられない。この処理は、ＳＳＤに領域が未だ割り当てられてなく、ユーザが最初の領域を割り当てようとする前に行なわれる（図８２参照)。
【０２７７】
論理空間と物理空間の間には図３１に示すような関係がある。コードレートはどのブロックでも同じ値であると仮定する。ここで与えられているものは、ＡＰとＯｐ率αであり、求めたいものはＯｐＰである。Ｏｐ率α＝ＯｐＬ／ＵＬとすると、ＯｐＰ＝（α／（１＋α））×ＡＰで求めることができる。これにより、Ｏｐ率αを与えることによりＯｐＰ、つまり予め割当可能ブロック数から引いておくブロック数を求めることができる。
【０２７８】
図８２は、割当て処理部４２の領域割当て可否判定の初期化のシーケンス図の一例を示す。設定ツールは、ＳＳＤに割当て初期化コマンドを与える。コマンドは、Ｏｐ率か要求信頼度、そのときの表記容量を含む。割当て処理部４２は、Ｏｐ分のブロックの確保処理を行い、確保成功か失敗を設定ツールに返送する。その後、ＳＳＤを使うアプリケーションは、ＳＳＤに領域割当て要求を与える。領域割当て要求は、領域の大きさ、要求信頼度を含む。
【０２７９】
次に、予測コードレートテーブル７６の一作成例を示す。予測コードレートテーブル７６は、図１６に示す要求信頼度実績テーブル５６Ｄ、コードレート実績テーブル５６Ｃにデータが無い時に生成される。ブロック信頼度テーブル５６Ａから、図８３に示すように、ブロックのＢＥＲの出現頻度が求められる。次に、図８４（ａ）に示すように、コードレート決定テーブル５６Ｂが要求信頼度に基づいて並べ替えられる。コードレートＣＲｉｋは、要求信頼度Ｒｉ、ビットエラーレートＢＥＲｋの時のコードレートである。要求信頼度Ｒｉについて、全てのビットエラーレートＢＥＲに対するコードレートが定義されている。
【０２８０】
要求信頼度Ｒｉの予測コードレートを求めるために、先ずビットエラーレートＢＥＲｋの出現確率＝Ｎｋ／Σｌ（Ｎｌ）が求められる。Σは、要求信頼度ＲｉでＣＲｉｌが定義されているｌに関する累計である。
【０２８１】
要求信頼度Ｒｉの予測コードレートＰＣＲｉ＝ΣｋＣＲｉｋ×（Ｎｋ／ΣｌＮｌ）が定義されている。
【０２８２】
図８４（ｂ）に示すように、要求信頼度Ｒｉとそのときの予測コードレートＰＣＲｉを対応させると、予測コードレートテーブルが得られる。
【０２８３】
［コンパクションの補足］  
ストリームＩＤ、ポートＩＤ、イニシエータＩＤ等のライトコマンド発行元により定められ、ＮＡＮＤメモリにライトした時の要求信頼度でコンパクションを実行するには、ＮＡＮＤメモリにライトしたときの要求信頼度を取得する必要がある。このためには、ＬＢＡ毎にストリームＩＤ、ポートＩＤ、イニシエータＩＤ等のライトコマンド発行元を知る必要がある。このため、ライト部３８は、各ＬＢＡに対して、ライトコマンド発行元を示す情報を記録するため、コマンド処理部３２はコンパクションのときに以下の動作をする
コンパクションリードの時、コマンド処理部３２は、コマンド発行元を示す情報を求め、要求信頼度識別部３６を利用して要求信頼度を求める。コマンド処理部３２は、求めた要求信頼度を信頼度付ライト要求に対して設定し、ライト部３８により書き込みを行なう。
【０２８４】
次に、コンパクションにおいて、領域に対して現在設定されている要求信頼度でライトする場合の動作を説明する。ここでは、ポートＩＤにより要求信頼度を識別する場合について説明するが、イニシエータＩＤ、スとリームＩＤにより要求信頼度を識別する場合も同様である。
【０２８５】
ＳＳＤが複数のポート（ポート１，ポート２，…）を有し、ポート毎に要求信頼度が定まっており、それぞれのポートからどのＬＢＡにもライトできる（ポート１，ポート２，…のどのＬＢＡ範囲も同じ範囲を示す）とする。ＳＳＤのポート１にライトコマンドが発行され、ＳＳＤのポート１へのライトコマンドに対する要求信頼度が領域変更コマンドで変更された後に、コンパクションが実施され、他のポートの要求信頼度は変更されないとする。
【０２８６】
図８５に領域変更をした後の各テーブルの状態を示す。ポートが複数あるので、領域テーブルには複数のエントリが存在する。図８５（ａ）は、ＳＳＤのポート１（ＩＤ＝１）へのライトコマンドの実行後（ホストがライトコマンドを発行して、ＳＳＤがブロック２０にホスト書き込みをした後）の状態を示す。図８５（ｂ）は、領域変更コマンドにより、ポート１（ＩＤ＝１）の要求信頼度がＲ２に変更された後の状態を示す。ブロック２０（ＩＤ＝２０）のブロックのクラスタは、現在（変更後）の要求信頼度Ｒ２でコンパクションされることを期待されている。
【０２８７】
次に、ポートＩＤ等により要求信頼度を識別する場合のコンパクションにおいて領域を求める方法を説明する。
【０２８８】
ある領域に含まれるクラスタをコンパクションしたときに、そのクラスタは現在の領域の要求信頼度でコンパクション書き込まれるとする。現在の要求信頼度は要求信頼度を識別する値（例えば、ポートＩＤ）から求められる。そのためには、あるクラスタがどの領域に属するかを知る必要がある。
【０２８９】
ホストからのライトコマンドを受信したポートのポートＩＤから領域が求められる。領域から要求信頼度が求められた後、領域の情報は保存されない。
【０２９０】
要求信頼度識別部３６は、領域と要求信頼度の対応関係を記憶している。しかし、領域と要求信頼度の対応は多対１である。領域変更コマンドにより要求信頼度とポートＩＤの対応が変更される。以上のことから、ライト部３８の要求信頼度実績テーブル５６Ｄと、要求信頼度識別部３６の領域テーブル３６Ｅ、要求信頼度テーブル３６Ｂだけでは、コンパクション元のブロックに含まれるクラスタが属する領域を求めることができない。
【０２９１】
そのため、ライトコマンドを受け付けたポートＩＤ、つまり領域が分からない。領域が分からないために、現在の領域の要求信頼度でＮＡＮＤメモリへのコンパクション書き込みができない。
【０２９２】
これを解決するために、ホストからのライトコマンドの実行時に、ライトコマンドを受け付けたポートＩＤがクラスタ単位で、ＮＡＮＤメモリに書き込まれる。クラスタが属する領域が参照されるのは、コンパクション書き込みのライト要求で領域を指定するときである。そのため、クラスタが属する領域はコンパクションの処理で参照できればよい。以下の方法でＮＡＮＤメモリにポートＩＤが書き込まれる。
【０２９３】
ＮＡＮＤメモリにデータを書き込むとき、クラスタ単位で、論理アドレスと、論理アドレスに対応するクラスタデータを書き込んだＮＡＮＤメモリの論理アドレスに対応する物理アドレスと、領域を特定する値（例えば、ポートＩＤ）が保存される。例えば、論理アドレスは４バイト、物理アドレスは４バイト、領域特定値は４バイトの３つのデータの組がクラスタ単位でＮＡＮＤメモリに保存される。
【０２９４】
コンパクションの有効クラスタ判定のときに、上記データの組がＮＡＮＤメモリから読み出され、ＮＡＮＤメモリにクラスタを書き込むときに、領域を特定する値が参照される。
【０２９５】
ポートＩＤで領域を識別するときに領域変更コマンドが必要となる場合は、ポートＩＤを変える場合と、要求信頼度を変更する場合を含む。ポートＩＤを変える場合は、あるポートに接続したホストを、当該ポートから外して、同じドライブの他のポートに接続する場合を含む。要求信頼度を変更する場合は、複数のポートを有するドライブのそれぞれのポートが異なるホストに接続されている場合を含む。ドライブの容量が足りなくなったとき、あるポートに接続しているホストからライトコマンドを受け付けたら、コードレートを上げてデータを書き込み、他のホストのための容量を作ることがある。この処理は要求信頼度の変更を必要とするので、ホストは領域変更コマンドを発行する。領域変更コマンドはコマンド（領域変更コマンド）を表すオペレーションコードと、要求信頼度（変更後の要求信頼度）と、変更前の領域を指定するポートＩＤ（変更前）と、変更後の領域を指定するポートＩＤ（変更後）を含む。
【０２９６】
図８６は、要求信頼度を変更する領域変更要求の概要を示す。ホスト１２は、領域変更コマンドをコマンド処理部３２に送信する。コマンド処理部３２は、領域変更コマンドを領域変更要求に変換して、領域変更要求を要求信頼度識別部３６に送信する。要求信頼度識別部３６は、ポートＩＤに基づいて領域テーブル３６Ｅを参照して領域ＩＤを求め、求めた領域ＩＤに基づいて要求信頼度テーブル３６Ｂの変更対象の行を特定する。そして、要求信頼度識別部３６は、該当する領域ＩＤに対応する要求信頼度を領域変更要求に含まれる要求信頼度に変更する。
【０２９７】
要求信頼度識別部３６は、領域変更結果をコマンド処理部３２を介してホスト１２に返信する。領域変更結果は、変更前のポートＩＤに対応する行が領域テーブルに存在しない場合、または変更後の要求信頼度の値が定義されていない場合、エラーとなる。
【０２９８】
図８７は、ポートＩＤを変更する領域変更要求の概要を示す。ホスト１２は、領域変更コマンドをコマンド処理部３２に送信する。コマンド処理部３２は、領域変更コマンドを領域変更要求に変換して、領域変更要求を要求信頼度識別部３６に送信する。要求信頼度識別部３６は、ポートＩＤ（変更前）に基づいて領域テーブル３６Ｅを参照して変更対象の行を特定する。変更後のポートＩＤと同じポートＩＤを持つ行が領域テーブル３６Ｃにある場合、要求信頼度識別部３６は、エラーの領域変更結果をコマンド処理部３２を介してホスト１２に返送される。変更後のポートＩＤと同じポートＩＤを持つ行が領域テーブル３６Ｅにない場合、要求信頼度識別部３６は、変更対象行のポートＩＤを変更後のポートＩＤに変更して、領域変更結果をコマンド処理部３２を介してホスト１２に返送する。
【０２９９】
［まとめ］  
実施形態によれば、以下のストレージ装置が実現される。
【０３００】
（Ａ１）ライトコマンドから領域を指定する情報を求め、領域と要求信頼度との対応関係を記憶する領域テーブルと求めた情報とに基づいて、要求信頼度を求めるコマンド処理部と、
ライトコマンドで指定されるデータを、コマンド処理部で求められた要求信頼度に応じた提供信頼度で、記憶媒体にライトするライト部と、
を具備するストレージ装置。
【０３０１】
（Ａ２）上記（Ａ１）のストレージ装置は、領域テーブルを編集する機能を有する。編集は、領域と要求信頼度との対応関係の領域テーブルへの追加、対応する領域、要求信頼度の少なくとも一方の変更、領域と要求信頼度との対応関係の領域テーブルからの削除のいずれか１つまたは複数を具備する。
【０３０２】
（Ａ３）上記（Ａ１）または（Ａ２）のストレージ装置において、領域は、ＬＢＡ範囲、ＮＳＩＤ、ストリームＩＤのいずれかを具備する。
【０３０３】
（Ａ４）上記（Ａ１）から（Ａ３）のいずれかのストレージ装置において、要求信頼度は、フレームエラーレートを具備する。
【０３０４】
（Ａ５）上記（Ａ１）から（Ａ４）のいずれかのストレージ装置において、提供信頼度は、コードレート、Ｌ３ＥＣＣの付加の有無、記憶媒体への記録方式のいずれか１つまたは複数を具備する。
【０３０５】
（Ａ６）上記（Ａ１）から（Ａ５）のいずれかのストレージ装置において、ライト部は、ライト時のコードレートを保存するコードレート実績テーブルを具備し、コードレート実績テーブルを参照してリード時のコードレートを決定する。
【０３０６】
（Ａ７）上記（Ａ６）のストレージ装置において、コードレート実績テーブルは、ブロック単位でライト時のコードレートを保存する。これにより、ブロックリード時のＥＣＣデコーダの訂正能力をライト時のコードレートに応じて決定する。
【０３０７】
（Ａ８）上記（Ａ１）から（Ａ７）のいずれかのストレージ装置において、ライト部は、ブロックとブロックのビットエラーレートとを対応づけるブロック信頼度テーブルを含み、ブロックのビットエラーレートと要求信頼度を基に提供信頼度を決定する。
【０３０８】
（Ａ９）上記（Ａ８）のストレージ装置において、ライト部は、リード部からの情報に基づいてブロック信頼度テーブルのビットエラーレートを変更する。
【０３０９】
（Ａ１０）上記（Ａ８）のストレージ装置において、ライト部は、ブロックの消去回数に応じてブロック信頼度テーブルのビットエラーレートを変更する。
【０３１０】
（Ｂ１）領域と要求信頼度との対応関係を示す領域割当てコマンドをホストから受信すると、領域が割当て可能か否か判定し、判定結果をホストへ返送する割当て処理部を具備するストレージ装置。
【０３１１】
（Ｂ２）上記（Ｂ１）のストレージ装置において、割当て処理部は、要求信頼度と確保の可否の判定の計算に使うコードレートとの対応関係を記憶する予測コードレートテーブルを具備する。割当て処理部は、要求信頼度と予測コードレートテーブルとに基づいて、割当て可能か否か判定する。
【０３１２】
（Ｂ３）上記（Ｂ１）または（Ｂ２）のストレージ装置において、対応関係にある要求信頼度と領域のうちの要求信頼度を変更する領域変更コマンドを受信すると、変更後の要求信頼度で領域を書き直す。
【０３１３】
（Ｂ４）上記（Ｂ１）から（Ｂ３）のいずれかのストレージ装置において、要求信頼度はフレームエラーレートを具備する。
【０３１４】
（Ｃ１）要求信頼度を含むライトコマンドを受信すると、ライトコマンドで指定されるデータを、要求信頼度に応じた提供信頼度で、記憶媒体にライトするストレージ装置。
【０３１５】
（Ｃ２）上記（Ｃ１）のストレージ装置において、要求信頼度はフレームエラーレートを具備する。
【０３１６】
（Ｃ３）上記（Ｃ１）または（Ｃ２）のストレージ装置において、提供信頼度は、コードレート、Ｌ３ＥＣＣの付加の有無、記憶媒体への記録方式のいずれか１つまたは複数を具備する。
【０３１７】
実施形態によれば、以下のホスト装置が実現される。
【０３１８】
（Ｄ１）破壊されても回復可能である低信頼度データと、破壊されると回復可能ではない高信頼度データとを識別可能な状態でドライブに与え、低信頼度データと高信頼度データとをドライブ内で区別してライトするホスト。
【０３１９】
（Ｄ２）上記（Ｄ１）のホストは、ドライブが要求信頼度を指定するライトコマンドに対応するドライブの場合、高信頼度データのライトコマンドでは高い要求信頼度を指定し、低信頼度データのライトコマンドでは低い要求信頼度を指定する。
【０３２０】
（Ｄ３）上記（Ｄ１）のホストは、ドライブがＬＢＡ範囲、ＮＳＩＤ、ストリームＩＤのいずれかにより指定されるデータのライト位置に基づいて異なる要求信頼度でデータをライト可能なドライブの場合、高信頼度データのライトコマンドでは高い要求信頼度のライト位置を指定し、低信頼度データのライトコマンドでは低い要求信頼度のライト位置を指定する。
【０３２１】
（Ｄ４）上記（Ｄ１）のホストは、異なる要求信頼度でデータをライトする複数のドライブがある場合、高信頼度データに関するライトコマンドを要求信頼度が高いドライブに対して発行し、低信頼度データに関するライトコマンドを要求信頼度が低いドライブに対して発行する。
【０３２２】
（Ｄ５）上記（Ｄ１）のホストは、ドライブが異なる要求信頼度でライトする複数のインタフェースを具備する場合、高信頼度データに関するライトコマンドを要求信頼度が高いインタフェースを介してドライブに発行し、低信頼度データに関するライトコマンドを要求信頼度が低いインタフェースを介してドライブに対して発行する。
【０３２３】
（Ｄ６）上記（Ｄ１）〜（Ｄ５）のいずれかのホストは、ドライブが低信頼度データをリードした際訂正不可能の場合、オリジナルデータを再現する。
【０３２４】
（Ｄ７）上記（Ｄ６）のホストは、再計算によりオリジナルデータを再現する。
【０３２５】
（Ｄ８）上記（Ｄ６）のホストは、ネットワークに接続されておりオリジナルデータを格納している他のホストからオリジナルデータをリードする。
【０３２６】
（Ｄ９）上記（Ｄ６）のホストは、ネットワークに接続されておりオリジナルデータを格納している他のドライブからオリジナルデータをリードする。
【０３２７】
（Ｄ１０）上記（Ｄ６）のホストは、ドライブのデータをリードしたＬＢＡに再現したオリジナルデータを書き戻す。
【０３２８】
本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【符号の説明】
【０３２９】
１０…ＳＳＤ、１２…ホスト、２２…コントローラ、２４…ＮＡＮＤチップ、２６…ＮＡＮＤパッケージ、３２…コマンド処理部、３４…ライト要求処理部、３６…要求信頼度識別部、３８…ライト部、３８…ライト部、４０…リード部、４２…割当て処理部、３６Ａ，３６Ｃ，３６Ｄ，３６Ｅ，３６Ｆ…領域テーブル、３６Ｂ…要求信頼度テーブル、５６Ａ…ブロック信頼度テーブル、５６Ｂ…コードレート決定テーブル、５６Ｃ…コードレート実績テーブル、５６Ｄ…要求信頼度実績テーブル、５６Ｅ…消去回数／ＢＥＲテーブル、５６Ｆ…空きブロック数カウンタ、７６…予測コードレートテーブル。
【図１】
2018055143.tif 000003
【図２】
2018055143.tif 000004
【図３】
2018055143.tif 000005
【図４】
2018055143.tif 000006
【図５】
2018055143.tif 000007
【図６】
2018055143.tif 000008
【図７】
2018055143.tif 000009
【図８】
2018055143.tif 000010
【図９】
2018055143.tif 000011
【図１０】
2018055143.tif 000012
【図１１】
2018055143.tif 000013
【図１２】
2018055143.tif 000014
【図１３】
2018055143.tif 000015
【図１４】
2018055143.tif 000016
【図１５】
2018055143.tif 000017
【図１６】
2018055143.tif 000018
【図１７】
2018055143.tif 000019
【図１８】
2018055143.tif 000020
【図１９】
2018055143.tif 000021
【図２０】
2018055143.tif 000022
【図２１】
2018055143.tif 000023
【図２２】
2018055143.tif 000024
【図２３】
2018055143.tif 000025
【図２４】
2018055143.tif 000026
【図２５】
2018055143.tif 000027
【図２６】
2018055143.tif 000028
【図２７】
2018055143.tif 000029
【図２８】
2018055143.tif 000030
【図２９】
2018055143.tif 000031
【図３０】
2018055143.tif 000032
【図３１】
2018055143.tif 000033
【図３２】
2018055143.tif 000034
【図３３】
2018055143.tif 000035
【図３４】
2018055143.tif 000036
【図３５】
2018055143.tif 000037
【図３６】
2018055143.tif 000038
【図３７】
2018055143.tif 000039
【図３８】
2018055143.tif 000040
【図３９】
2018055143.tif 000041
【図４０】
2018055143.tif 000042
【図４１】
2018055143.tif 000043
【図４２】
2018055143.tif 000044
【図４３】
2018055143.tif 000045
【図４４】
2018055143.tif 000046
【図４５】
2018055143.tif 000047
【図４６】
2018055143.tif 000048
【図４７】
2018055143.tif 000049
【図４８】
2018055143.tif 000050
【図４９】
2018055143.tif 000051
【図５０】
2018055143.tif 000052
【図５１】
2018055143.tif 000053
【図５２】
2018055143.tif 000054
【図５３】
2018055143.tif 000055
【図５４】
2018055143.tif 000056
【図５５】
2018055143.tif 000057
【図５６】
2018055143.tif 000058
【図５７】
2018055143.tif 000059
【図５８】
2018055143.tif 000060
【図５９】
2018055143.tif 000061
【図６０】
2018055143.tif 000062
【図６１】
2018055143.tif 000063
【図６２】
2018055143.tif 000064
【図６３】
2018055143.tif 000065
【図６４】
2018055143.tif 000066
【図６５】
2018055143.tif 000067
【図６６】
2018055143.tif 000068
【図６７】
2018055143.tif 000069
【図６８】
2018055143.tif 000070
【図６９】
2018055143.tif 000071
【図７０】
2018055143.tif 000072
【図７１】
2018055143.tif 000073
【図７２】
2018055143.tif 000074
【図７３】
2018055143.tif 000075
【図７４】
2018055143.tif 000076
【図７５】
2018055143.tif 000077
【図７６】
2018055143.tif 000078
【図７７】
2018055143.tif 000079
【図７８】
2018055143.tif 000080
【図７９】
2018055143.tif 000081
【図８０】
2018055143.tif 000082
【図８１】
2018055143.tif 000083
【図８２】
2018055143.tif 000084
【図８３】
2018055143.tif 000085
【図８４】
2018055143.tif 000086
【図８５】
2018055143.tif 000087
【図８６】
2018055143.tif 000088
【図８７】
2018055143.tif 000089