(57)【要約】【課題】データの種別に合せて最適な方法でデータの書き込みを行えるようにする書き込み制御装置、ストレージ装置、ネットワークシステム、書き込み制御方法およびプログラムを提供する。【解決手段】実施形態のデータ書き込み装置は、データ種別識別部と、書き込み方法選択部と、を備える。データ種別識別部は、書き込み対象データの種別を識別する。書き込み方法選択部は、データの種別毎に設定されたパラメータのうち、前記書き込み対象データの種別に応じたパラメータに基づいて、前記書き込み対象データの記憶部への書き込み方法を決定する。【選択図】図４
2019164728.tif 000002
【特許請求の範囲】
【請求項１】
書き込み対象データの種別を識別するデータ種別識別部と、
データの種別毎に設定されたパラメータのうち、前記書き込み対象データの種別に応じたパラメータに基づいて、前記書き込み対象データの記憶部への書き込み方法を決定する書き込み方法選択部と、を備える書き込み制御装置。
【請求項２】
前記データ種別毎に設定されたパラメータを、データ書き込み要求を行う要求元が前記記憶部を使用する前に、前記要求元から受け付けるデータ種別設定受付部をさらに備える、請求項１に記載の書き込み制御装置。
【請求項３】
前記データ種別毎に設定されたパラメータは、前記要求元からのデータ書き込み要求時に用いられる第１パラメータと、データ再書き込み時に用いられる第２パラメータとを含み、
前記書き込み方法選択部は、前記要求元からのデータ書き込み要求時とデータ再書き込み時とで、前記書き込み方法を変更する、請求項２に記載の書き込み制御装置。
【請求項４】
前記第２パラメータは、データ再書き込み回数毎の複数のパラメータを含み、
前記書き込み方法選択部は、前記データ再書き込み回数に応じて、前記書き込み方法を変更する、請求項３に記載の書き込み制御装置。
【請求項５】
前記データの種別毎に設定されたパラメータのうち、読み出し対象データの種別に応じたパラメータを用いて、前記読み出し対象データの読み出し方法を決定する読み出し方法選択部をさらに備える、請求項１乃至４のいずれか一項に記載の書き込み制御装置。
【請求項６】
前記データの種別毎に設定されたパラメータは、前記記憶部の複数の領域に重複して書き込まれた同一データの読み出し数を表す冗長読み出し数を含み、
前記読み出し方法選択部は、前記読み出し対象データの種別に応じて、重複して書き込まれた前記読み出し対象データの読み出し数を決定し、読み出しの応答が最も早いデータをデータ読み出し要求の要求元に渡す、請求項５に記載の書き込み制御装置。
【請求項７】
前記データ種別識別部は、少なくとも、ネームスペース識別情報に基づいて、前記書き込み対象データのデータ種別を識別する、請求項１乃至６のいずれか一項に記載の書き込み制御装置。
【請求項８】
前記データ種別識別部は、さらに、ネームスペースに対応するアドレス空間内の書き込みが行われるアドレス範囲に基づいて、前記書き込み対象データのデータ種別を識別する、請求項７に記載の書き込み制御装置。
【請求項９】
前記データ種別識別部は、さらに、前記書き込み対象データの指定された位置の値に基づいて、前記書き込み対象データの種別を識別する、請求項７または８に記載の書き込み制御装置。
【請求項１０】
前記データ種別毎に設定されたパラメータはエラー訂正符号長を含み、
前記書き込み方法選択部は、前記書き込み対象データの種別に応じて、前記書き込み対象データに付与するエラー訂正符号長を変更する、請求項１乃至９のいずれか一項に記載の書き込み制御装置。
【請求項１１】
前記データ種別毎に設定されたパラメータは多値記録モードを含み、
前記書き込み方法選択部は、前記書き込み対象データの種別に応じて、前記書き込み対象データを前記記憶部に書き込む際に適用する多値記録モードを変更する、請求項１乃至１０のいずれか一項に記載の書き込み制御装置。
【請求項１２】
前記データ種別毎に設定されたパラメータは、同一データを前記記憶部の複数の領域に重複して書き込む書き込み数を表す冗長書き込み数を含み、
前記書き込み方法選択部は、前記書き込み対象データの種別に応じて、前記書き込み対象データを重複して書き込む書き込み数を決定する、請求項１乃至１１のいずれか一項に記載の書き込み制御装置。
【請求項１３】
前記データ種別毎に設定されたパラメータは、同一データを重複して書き込む際の書き込み先を指定する冗長書き込み先選択ポリシーをさらに含み、
前記書き込み方法選択部は、前記書き込み対象データの種別に応じて、前記書き込み対象データを重複して書き込む書き込み先をさらに決定する、請求項１２に記載の書き込み制御装置。
【請求項１４】
前記冗長書き込み先選択ポリシーは、同一データを重複して書き込む際の書き込み先として、同一装置内の前記記憶部の異なる領域、または、異なる装置の前記記憶部を指定し、
前記書き込み方法選択部は、前記書き込み対象データの種別に応じて、前記書き込み対象データを同一装置内の前記記憶部の異なる領域に重複して書き込むか、異なる装置の前記記憶部に重複して書き込むかを決定する、請求項１３に記載の書き込み制御装置。
【請求項１５】
請求項１乃至１４のいずれか一項に記載の書き込み制御装置と、
前記書き込み対象データが書き込まれる前記記憶部と、を備えるストレージ装置。
【請求項１６】
請求項１５に記載のストレージ装置と、
前記ストレージ装置とネットワークを介して接続され、前記ストレージ装置に対してデータ書き込み要求を行う制御装置と、を備えるネットワークシステム。
【請求項１７】
書き込み対象データの種別を識別するステップと、
データの種別毎に設定されたパラメータのうち、前記書き込み対象データの種別に応じたパラメータに基づいて、前記書き込み対象データの記憶部への書き込み方法を決定するステップと、を有する書き込み制御方法。
【請求項１８】
記憶部に対するデータの書き込みを制御する書込み制御装置に、
書き込み対象データの種別を識別する機能と、
データの種別毎に設定されたパラメータのうち、前記書き込み対象データの種別に応じたパラメータに基づいて、前記書き込み対象データの前記記憶部への書き込み方法を決定する機能と、を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、書き込み制御装置、ストレージ装置、ネットワークシステム、書き込み制御方法およびプログラムに関する。
【背景技術】
【０００２】
近年、データ分析により有用な情報を獲得する情報処理技術の進展に伴い、分析の対象となり得る多種多様なデータをＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのストレージに書き込んで記憶させる必要性が高まっている。これらのデータは、例えば、ストレージコントローラの制御により、ＮＡＮＤフラッシュメモリなどの不揮発性メモリに書き込まれる。この際、データの書き込み方法に応じて、データ書き込み強度などの性能を制御できる。例えば、データに符号長の長いエラー訂正符号長を付加して書き込みを行ったり、同じデータを不揮発性メモリの複数の領域に重複して書き込む冗長書き込みを行ったりすることで、そのデータ書き込み強度を高めることができる。
【０００３】
こうしたデータの書き込み時に要求される性能は、データの種別に応じて異なる。すなわち、あるアプリケーションが書き込みを要求するデータは、読み書きの際にある程度の遅延があっても高い強度で書き込みを行うことが求められる一方、他のアプリケーションが書き込みを要求するデータは、書き込み強度よりも読み書きの際の遅延を抑えることを優先することが求められるといったことがある。このため、多種多様なデータを扱う場合に、データの種別に合せて最適な方法でデータの書き込みを行える仕組みが求められる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２３８３２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、データの種別に合せて最適な方法でデータの書き込みを行えるようにする書き込み制御装置、ストレージ装置、ネットワークシステム、書き込み制御方法およびプログラムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態のデータ書き込み装置は、データ種別識別部と、書き込み方法選択部と、を備える。データ種別識別部は、書き込み対象データの種別を識別する。書き込み方法選択部は、データの種別毎に設定されたパラメータのうち、前記書き込み対象データの種別に応じたパラメータに基づいて、前記書き込み対象データの記憶部への書き込み方法を決定する。
【図面の簡単な説明】
【０００７】
【図１】制御装置のハードウェア構成例を示すブロック図。
【図２】ＮＡＮＤフラッシュメモリの構造を説明する図。
【図３】ストレージのハードウェア構成例を示すブロック図。
【図４】制御装置の機能的な構成例を示すブロック図。
【図５】ホストから発行されるコマンドを説明する図。
【図６】データ種別設定の一例を示す図。
【図７】ネームスペース作成処理の処理手順の一例を示すフローチャート。
【図８−１】ブロック管理テーブルの一例を示す図。
【図８−２】書き込み可能ページテーブルの一例を示す図。
【図９−１】変換テーブルの一例を示す図。
【図９−２】変換テーブルの一例を示す図。
【図９−３】変換テーブルの一例を示す図。
【図９−４】変換テーブルの一例を示す図。
【図１０】エラー訂正符号の取り扱い例を説明する図。
【図１１】データ書き込み処理の処理手順の一例を示すフローチャート。
【図１２】データ読み出し処理の処理手順の一例を示すフローチャート。
【図１３】ガベージコレクション処理の処理手順の一例を示すフローチャート。
【図１４】データ種別設定の他の例を示す図。
【図１５】タイマ処理の処理手順の一例を示すフローチャート。
【図１６】ネットワークシステムのハードウェア構成例を示すブロック図。
【図１７】ネットワークシステムの機能的な構成例を示すブロック図。
【図１８】ネットワークシステムのハードウェア構成例を示すブロック図。
【図１９】ネットワークシステムの機能的な構成例を示すブロック図。
【図２０】車載ネットワークシステムへの適用例を説明する図。
【図２１】制御装置の機能的な構成例を示すブロック図。
【発明を実施するための形態】
【０００８】
以下、実施形態の書き込み制御装置、ストレージ装置、ネットワークシステム、書き込み制御方法およびプログラムについて、図面を参照しながら詳細に説明する。なお、以下の説明において、同様の機能を持つ構成要素については同一の符号を付して、重複した説明を適宜省略する。
【０００９】
＜第１実施形態＞
図１は、第１実施形態に係る制御装置１のハードウェア構成例を示すブロック図である。制御装置１は、例えば、車載用、産業用、通信用、医療用、電力用の制御装置である。また、制御装置１は、クラウドやエッジに配置されるデータセンター内の制御装置であってもよい。制御装置１は、プロセッサ２１とメモリ２２などを含むホスト２００と、ストレージ１００（ストレージ装置）と、ネットワークインタフェース３００とを備える。ホスト２００のプロセッサ２１とメモリ２２はメモリバス２３で接続される。ホスト２００のプロセッサ２１とストレージ１００、ホスト２００のプロセッサ２１とネットワークインタフェース３００は、例えばＰＣＩ  Ｅｘｐｒｅｓｓ（登録商標）などの内部バス４００で接続される。
【００１０】
ホスト２００は、ストレージ１００に対してデータ書き込み要求やデータ読み出し要求を行う。ネットワークインタフェース３００は、例えばイーサネット（登録商標）などのネットワークに接続するためのインタフェースである。制御装置１はこのネットワークインタフェース３００を備えることにより、ネットワーク上の他の装置と通信を行うことができる。
【００１１】
ストレージ１００は、例えば、ＮＡＮＤフラッシュメモリなどの不揮発性メモリを記憶部として用いたＳＳＤなどである。不揮発性メモリには、ＮＡＮＤフラッシュメモリに限らず、例えば、ＮＯＲフラッシュメモリ、ＦｅＲＡＭ（強誘電体メモリ）、ＭＲＡＭ（強磁性体メモリ）、ＰＲＡＭ（相変化メモリ）、ＲｅＲＡＭ（抵抗変化型メモリ）などを用いてもよい。ホスト２００とストレージ１００は、例えば、ＮＶＭ  Ｅｘｐｒｅｓｓなどの規格で接続される。ストレージ１００は、ＮＶＭ  Ｅｘｐｒｅｓｓなどで定義されるネームスペース（名前空間）による分離機能に対応している。
【００１２】
図２は、ストレージ１００の記憶部として用いるＮＡＮＤフラッシュメモリの構造を説明する図である。図２では、１つのチップ（ダイ）の構造を示している。ＮＡＮＤフラッシュメモリは、ブロック単位でデータの消去を行うことができる。一方、データの読み書きは、ページと呼ばれる単位で行われる。１つのブロックは複数のページから構成され、１つのプレーンは複数のブロックから構成され、１つのチップ（ダイ）は複数のプレーンから構成される。
【００１３】
図３は、ストレージ１００のハードウェア構成例を示すブロック図である。ストレージ１００は、ＮＡＮＤフラッシュメモリを用いた記憶部１１０と、ＮＡＮＤコントローラ１２０と、ストレージコントローラ１３０（書き込み制御装置）とを備える。ＮＡＮＤコントローラ１２０は、ＮＡＮＤフラッシュメモリを制御するものであり、ＮＡＮＤフラッシュメモリへのアクセス機能をストレージコントローラ１３０に提供する。ストレージコントローラ１３０は、プロセッサ１１や、インタフェースコントローラ１２、メモリ１３などを含む。メモリ１３は、例えば、ＤＲＡＭやＳＲＡＭなどである。
【００１４】
図４は、第１実施形態に係る制御装置１の機能的な構成例を示すブロック図である。ホスト２００は、制御装置１の機能を実現するための複数のアプリケーション２１０ａ〜２１０ｆと、プロセッサ２１やメモリ２２などのリソースの管理を行い、アプリケーション２１０ａ〜２１０ｆやユーザに対するインタフェースを提供するオペレーティングシステムと２２０ａ，２２０ｂと、複数の仮想マシンを実現するためのハイパーバイザ２３０とを備える。本実施形態では、アプリケーション２１０ａ〜２１０ｅがそれぞれ異なるネームスペースを使用し、アプリケーション２１０ｆはアプリケーション２１０ｅと共通のネームスペースを使用することを想定する。また、オペレーティングシステム２２０ａは即時性が優先されるリアルタイムＯＳ、オペレーティングシステム２２０ｂは汎用ＯＳであり、アプリケーション２１０ａ〜２１０ｃはオペレーティングシステム２２０ａ上で動作し、アプリケーション２１０ｄ〜２１０ｆはオペレーティングシステム２２０ｂ上で動作することを想定する。ネームスペースはアプリケーションに限らず、オペレーティングシステムや、ホスト毎に使い分けてもよい。
【００１５】
ネットワークインタフェース３００は、ネットワークを介して他の装置と通信する通信部３１０を備える。
【００１６】
ストレージ１００内の記憶部１１０は、例えば、ＮＡＮＤフラッシュメモリのチップ（ダイ）を複数用いて構成される。
【００１７】
ストレージ１００内のＮＡＮＤコントローラ１２０は、記憶部１１０に対してデータとエラー訂正符号の書き込みを実行する書き込み実行部１２１と、記憶部１１０に対してブロックに含まれるデータの消去を実行する消去実行部１２２と、記憶部１１０に対してデータとエラー訂正符号の読み出しを実行する読み出し実行部１２３とを備える。本実施形態では、ストレージ１００の内部に複数のＮＡＮＤコントローラ１２０を備える例を想定するが、ストレージ１００の内部に１つのＮＡＮＤコントローラ１２０を備える構成であってもよい。
【００１８】
ストレージ１００内のストレージコントローラ１３０は、データ種別設定受付部１３１と、データ種別設定記憶部１３２と、ブロック管理情報記憶部１３３と、変換テーブル記憶部１３４と、書き込み受付部１３５と、データ種別識別部１３６と、暗号化処理部１３７と、書き込み方法選択部１３８と、一時記憶部１３９と、エラー訂正符号付与部１４０と、読み出し受付部１４１と、読み出し方法選択部１４２と、エラー訂正処理部１４３と、復号処理部１４４と、再書き込み指示部１４５とを備える。
【００１９】
データ種別設定受付部１３１は、ホスト２００のアプリケーション２１０ａ〜２１０ｆなどから、データ種別とそのデータの書き込み方法および読み出し方法を制御するパラメータ（以下、「読み書きパラメータ」という）の設定を受け付ける。なお、本実施形態においては、ホスト２００が設定するパラメータに従ってストレージ１００におけるデータの書き込み方法および読み出し方法が制御されることを想定するが、データの書き込み方法のみを制御する構成であってもよい。この場合、ホスト２００が設定するパラメータは、データの書き込み方法を制御するための書き込みパラメータとなる。
【００２０】
データ種別設定記憶部１３２は、設定されたデータ種別とそれに対応する読み書きパラメータの組（以下、「データ種別設定」という）を記憶する。データ種別設定の詳細は後述する。
【００２１】
ブロック管理情報記憶部１３３は、記憶部１１０のブロック管理情報を記憶する。ブロック管理テーブルの詳細は後述する。
【００２２】
変換テーブル記憶部１３４は、ホスト２００から指定される論理アドレスと物理アドレスの変換を行うための変換テーブルを記憶する。変換テーブルの詳細は後述する。
【００２３】
書き込み受付部１３５は、ホスト２００から書き込み要求を受け付ける。
【００２４】
データ種別識別部１３６は、書き込み要求されたデータ（書き込み対象データ）の種別を識別する。
【００２５】
暗号化処理部１３７は、書き込み対象データを必要に応じて暗号化する。暗号化方式は特に限定されるものではなく、任意の方式を使用できる。
【００２６】
書き込み方法選択部１３８は、データ種別識別部１３６で得られたデータ種別に対応するデータ種別設定とブロック管理情報と変換テーブルを参照して、書き込み対象データの記憶部１１０への書き込み方法を決定する。
【００２７】
一時記憶部１３９は、書き込み対象データや読み出し対象データなどを一時的に記憶する。
【００２８】
エラー訂正符号付与部１４０は、書き込み方法選択部１３８で指定されたエラー訂正方法とエラー訂正符号長に従ってエラー訂正符号を生成し、記憶部１１０に書き込まれる書き込み対象データに付与する。
【００２９】
読み出し受付部１４１は、ホスト２００から読み出し要求を受け付ける。
【００３０】
読み出し方法選択部１４２は、データ種別設定と変換テーブルを参照して、読み出し対象データの種別に応じた読み出し方法を決定する。
【００３１】
エラー訂正処理部１４３は、読み出し方法選択部１４２から指定されたエラー訂正方法により、記憶部１１０から読み出したデータとエラー訂正符号からデータに対するエラー訂正処理を行う。
【００３２】
復号処理部１４４は、読み出し対象データが書き込み時に暗号化処理部１３７によって暗号化されている場合に、この暗号化されたデータを復号する。
【００３３】
再書き込み指示部１４５は、書き込み要求に応じて記憶部１１０に書き込んだデータを再度書き込む処理を行う。例えば、再書き込み指示部１４５は、書き込み可能なページが不足してきた場合に行うガベージコレクション処理や、書き込んでから時間の経過したデータを再度書き込むタイマ処理を行う。
【００３４】
上述のデータ種別設定記憶部１３２、ブロック管理情報記憶部１３３、変換テーブル記憶部１３４および一時記憶部１３９は、例えば、ＤＲＡＭやＳＲＡＭなどの揮発性メモリで実現されてもよいし、ＮＡＮＤフラッシュメモリなどの不揮発性メモリを用いてもよい。後者の場合に、揮発性メモリをキャッシュのように用いてもよい。
【００３５】
上述のデータ種別設定受付部１３１、書き込み受付部１３５、データ種別識別部１３６、暗号化処理部１３７と、書き込み方法選択部１３８、エラー訂正符号付与部１４０、読み出し受付部１４１、読み出し方法選択部１４２、エラー訂正処理部１４３、復号処理部１４４および再書き込み指示部１４５は、例えば、プロセッサ１１がメモリ１３を使用しながら所定のプログラムを実行することにより実現される。なお、暗号化処理部１３７、復号処理部１４４、エラー訂正符号付与部１４０およびエラー訂正処理部１４３は、例えば、ハードウェアアクセラレータを用いて実現してもよい。これらストレージコントローラ１３０内に実現される機能的な各部の処理については、詳細を後述する。
【００３６】
図５は、ホスト２００から発行されるコマンドを説明する図である。ホスト２００で動作するアプリケーション２１０ａ〜２１０ｆは、ストレージ１００を使用する前に、ストレージ１００に対して図５に示すデータ種別設定コマンドＣ１とネームスペース作成コマンドＣ２を発行することにより、データ種別および読み書きパラメータの設定とネームスペースの作成を行った後、書き込みコマンドＣ３や読み出しコマンドＣ４を発行して、データの書き込みや読み出しを要求する。データ種別設定コマンドＣ１とネームスペース作成コマンドＣ２の発行によるデータ種別および読み書きパラメータの設定とネームスペースの作成は、ストレージ１００の初期設定といえる。
【００３７】
データ種別設定コマンドＣ１は、「データ種別識別情報」と「読み書きパラメータ」とを含んでいる。「データ種別識別情報」は、書き込み対象データの種別を識別するための情報であり、図５に示すように、「ネームスペース識別情報」、「アドレス領域識別情報」および「任意データ識別情報」を含んでいる。
【００３８】
「ネームスペース識別情報」は、ＮＶＭ  Ｅｘｐｒｅｓｓなどで定義されるネームスペースの識別情報である。例えば、ネームスペースのＩＤ（ＮＩＤ）を指定できる。「アドレス領域識別情報」は、例えば、そのネームスペースにおけるＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の領域範囲である。「任意データ識別情報」は、位置、長さ、マスク、値によって書き込み対象データの任意のフィールドでマッチングすることができる識別情報である。位置と長さは、書き込み対象データの先頭からの位置（バイト単位）とマッチング対象とするデータの長さ（バイト単位）であり、マッチング対象のデータとマスクの論理積（ＡＮＤ）演算を行い、その出力値と指定された値が一致する場合にマッチする。これにより、書き込み対象データの指定された位置の値に基づいて、書き込み対象データの種別を識別することが可能となる。本実施形態では、上述の「ネームスペース識別情報」と、「アドレス領域識別情報」と、「任意データ識別情報」とを組み合わせた「データ種別識別情報」に基づいて、ストレージ１００に対して書き込み対象データの種別を識別するように設定することができる。
【００３９】
「読み書きパラメータ」は、上述の「データ識別情報」に対応したデータ書き込み方法とデータ読み出し方法を制御するパラメータである。「読み書きパラメータ」は、図５に示すように、ホスト２００からの書き込み要求に応じて記憶部１１０に書き込み対象データを書き込む際に用いる「書き込み要求時パラメータ」（第１パラメータ）と、ホスト２００からの書き込み要求に応じて記憶部１１０に書き込んだデータを再度書き込む際に用いる「再書き込み時パラメータ」（第２パラメータ）とを含んでいる。
【００４０】
「書き込み要求時パラメータ」と「再書き込み時パラメータ」は、それぞれ、「冗長書き込み数」、「冗長書き込み先選択ポリシー」、「冗長読み出し数」、「冗長読み出し元選択ポリシー」、「多値記憶モード」、「エラー訂正方式」および「エラー訂正符号長」を含んでいる。
【００４１】
「冗長書き込み数」は、記憶部１１０に同じデータをいくつ書き込むかを指定する。「冗長書き込み先選択ポリシー」は、「冗長書き込み数」で２つ以上同じデータを書き込むことを指定した場合の書き込み先を選択する際のポリシーを指定する。これには例えば、記憶部１１０のうち、異なるＮＡＮＤコントローラ１２０に接続されているＮＡＮＤフラッシュメモリ、同じＮＡＮＤコントローラ１２０の別チャネルに接続されたＮＡＮＤフラッシュメモリ、同じＮＡＮＤフラッシュメモリ（ダイ）の中での離れた位置、任意のＮＡＮＤフラッシュメモリなどを指定することができる。
【００４２】
「冗長読み出し数」は、「冗長書き込み数」で２以上の数が指定され、同一のデータが記憶部１１０の複数の領域に重複して記憶されている場合に、それらのうちのいくつ読み出しを実行するかを指定する。「冗長読み出し元選択ポリシー」は、「冗長読み出し数」で指定された数のデータを記憶部１１０のどの領域から読み出すかを選択するためのポリシーである。例えば、ＮＡＮＤフラッシュメモリが接続されているＮＡＮＤコントローラ１２０の負荷が低いものから選択、チャネルの負荷が低いものから選択、任意の領域から読み出すなどを指定することができる。
【００４３】
「多値記憶モード」は、ＮＡＮＤフラッシュメモリの多値記憶モードを指定するものである。例えば、ＭＬＣ（Ｍｕｌｔｉ  Ｌｅｖｅｌ  Ｃｅｌｌ）のＮＡＮＤフラッシュメモリで構成される記憶部１１０において、ｐＳＬＣ（ｐｓｅｕｄｏ  Ｓｉｎｇｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）モードで書き込むなど、記録モードを指定することができる。
【００４４】
「エラー訂正方式」には、ＢＣＨ（Ｂｏｓｅ−Ｃｈａｕｄｈｕｒｉ−Ｈｏｃｑｕｅｎｇｈｅｍ）符号や、ＬＤＰＣ（Ｌｏｗ  Ｄｅｓｔｉｎｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ）符号などを指定することができる。「エラー訂正符号長」は、エラー訂正方式で指定した符号の符号長を指定することができる。
【００４５】
データ種別設定コマンドＣ１によって設定された情報（データ種別設定）は、データ種別設定記憶部１３２に記憶される。図６は、データ種別設定記憶部１３２が記憶するデータ種別設定の一例を示す図である。「データ種別識別情報」と「読み書きパラメータ」は、例えば図６に示すようなデータ種別設定として設定される。「データ種別識別情報」と「読み書きパラメータ」にはそれぞれＩＤが割り当てられ、これらのＩＤ（「データ種別ＩＤ」と「読み書きパラメータＩＤ」）は後述するブロック管理情報や変換テーブルで用いられる。「データ種別識別情報」の“＊”は、全ての値にマッチすることを示している。例えば、データ種別ＩＤが“０”の場合では、「ネームスペースＩＤ」が“１”の書き込みに対しては、アドレスやデータが何であれ、この読み書きパラメータが適用される。
【００４６】
「読み書きパラメータ」は、上述のように「書き込み要求時パラメータ」と「再書き込み時パラメータ」を含むが、「再書き込み時パラメータ」は再書き込みの回数に応じて異なるパラメータを設定できる。図６は、「再書き込み時パラメータ」として、「読み書きパラメータＩＤ」が“１”の「１回目再書き込み時パラメータ」と、「読み書きパラメータＩＤ」が“２”の「２回目再書き込み時パラメータ」とが設定された例を示している。これにより、データ再書き込みの回数に応じて使用するパラメータを変更し、異なる書き込み方法で書き込みを行うことができる。
【００４７】
ホスト２００からのデータ種別設定コマンドＣ１により各データ種別とそれに対応する読み書きパラメータがストレージ１００に設定されると、次にホスト２００は、ネームスペース作成コマンドＣ２を発行し、ネームスペースの作成をストレージ１００に指示する。ネームスペース作成コマンドＣ２は、図５に示すように、「ネームスペース識別情報」、「予備を含めたサイズ」および「サイズ」を含んでいる。「ネームスペース識別情報」は、例えば、ネームスペースの識別子であるＮＩＤである。「予備を含めたサイズ」は、新たにデータの書き込みを行うために確保する領域を含めたサイズであり、例えばオーバープロビジョニングの量を制御することができる。一方、「サイズ」はそのネームスペースで識別されるストレージ１００においてユーザが使用できる量を指定する。
【００４８】
なお、データ種別設定は、ホスト２００から指定する以外に、ストレージ１００に予め設定しておき、アプリケーション２１０ａ〜２１０ｆが自身の要求に合ったデータ種別設定を選択して、所望の動作を実現する方法もある。
【００４９】
次に、ネームスペース作成コマンドＣ２に応じたネームスペース作成処理について説明する。図７は、ネームスペース作成処理の処理手順の一例を示すフローチャートである。データ種別設定受付部１３１は、データ種別設定コマンドＣ１によりホスト２００からデータ種別設定がされた後、ネームスペース作成コマンドＣ２が発行されると、まず、ネームスペース作成コマンドＣ２のエラーチェックを行う（ステップＳ１０１）。例えば、「予備容量を含めたサイズ」として「サイズ」より小さい量が指定されている場合はエラーとなる。ここで、ネームスペース作成コマンドＣ２にエラーがあると判定した場合（ステップＳ１０１：Ｙｅｓ）、データ種別設定受付部１３１は、ホスト２００にネームスペース作成のエラーを通知して（ステップＳ１０２）、処理を終了する。
【００５０】
一方、ネームスペース作成コマンドＣ２にエラーがなければ（ステップＳ１０１：Ｎｏ）、データ種別設定受付部１３１は、ネームスペース作成コマンドＣ２で指定されるネームスペースに対応するデータ種別のデータを書き込むためのブロックとして、ネームスペース作成コマンドＣ２で指定される「予備容量を含めたサイズ」分のブロックを確保し、確保したブロックを「データ種別ＩＤ」と「読み書きパラメータＩＤ」で指定される「読み書きパラメータ」に対応した物理ブロックに設定する（ステップＳ１０３）。ここでのブロックの確保は、冗長書き込み先選択ポリシーが設定されている場合、そのポリシーを満たすように適宜ＮＡＮＤコントローラ１２０や、チャネル、ダイの中の位置などを考慮して選択される。
【００５１】
これらの情報は、ブロック管理情報としてブロック管理情報記憶部１３３に記憶される。図８−１および図８−２は、ブロック管理情報記憶部１３３が記憶するブロック管理情報の一例を示す図である。ここでは、ブロック管理情報が図８−１に示すブロック管理テーブルと図８−２に示す書き込み可能ページテーブルとを含み、これらブロック管理テーブルと書き込み可能ページテーブルを使ってブロックの管理を行うものとして説明する。
【００５２】
図８−１に示すように、ブロック管理テーブルでは、物理ブロック番号に対応した「データ種別ＩＤ」、「読み書きパラメータＩＤ」、「ページ使用状況」、「読み出しエラー発生回数」、「消去回数」および「ステータス」の情報を管理する。
【００５３】
「物理ブロック番号」は、ＮＡＮＤフラッシュメモリのブロックに対して割り当てられた番号である。例えば、このブロックの番号は、ストレージ１００を識別するストレージ識別ビットと、そのストレージ１００内のＮＡＮＤコントローラ１２０を識別するＮＡＮＤコントローラ識別ビットと、そのＮＡＮＤコントローラ１２０に接続されたＮＡＮＤフラッシュメモリのチャネルを識別するチャンネル識別ビットと、そのチャネルに接続されているＮＡＮＤフラッシュメモリ（ダイ）を識別するＮＡＮＤ識別ビットで構成されていてもよい。このようにすることで、その番号から接続形態を知ることができる。
【００５４】
「データ種別ＩＤ」と「読み書きパラメータＩＤ」は、データ種別設定記憶部１３２に記憶されている識別子である。これは、その物理ブロックが、「データ種別ＩＤ」と「読み書きパラメータＩＤ」で識別される読み書きパラメータでのページの書き込みに使用できることを示している。
【００５５】
「ページ使用状況」は、その物理ブロック内のページの使用状態を示している。例えば、ブロック内のページが未使用（書き込み可能）であれば“０”、使用中（書き込み不可）であれば“１”、使用が終わり消去待ちであれば“２”、エラーが発生して無効となっている場合には“３”として管理される。
【００５６】
「読み出しエラー発生回数」は、その物理ブロック内のページの読み出しにおいて、エラー訂正処理によりエラーを検知した回数を記録する。訂正可能なエラーと訂正不能なエラーは別にカウントしてもよい。「消去回数」は、その物理ブロックが、製造されてからこれまでに何回消去処理を行ったかを記録する。
【００５７】
「ステータス」は、その物理ブロックの状態を示している。例えば、その物理ブロック内に１つでも使用中のページがある場合には“使用中”、１つも使用中のページがなく、すぐに消去可能な場合には“消去待”、すでに消去されており、全てのページが書き込みできる状態であれば“消去済”、過去に一定以上の読み出しエラー発生が発生したり、訂正不能なエラーが発生したりした場合には、その物理ブロックの使用を禁止する“無効”といった状態を管理する。
【００５８】
書き込み可能ページテーブルは、図８−２に示すように、「データ種別ＩＤ」と「読み書きパラメータＩＤ」に対応する「書き込み可能ページ数」を管理する。本実施形態では、詳細を後述するガベージコレクション処理において、「データ種別ＩＤ」と「書き込みパラメータＩＤ」で指定される「読み書きパラメータ」に対応した「書き込み可能ページ数」がいくつあるかをこのテーブルで管理し、不足が予測される「読み書きパラメータ」に対応した書き込み可能な物理ブロックの確保を行う。不足の予測は、例えば、「書き込み可能ページ数」が予め決められた閾値を下回ったかどうかで判定してもよい。この閾値は、「データ種別ＩＤ」と「書き込みパラメータＩＤ」で指定される「読み書きパラメータ」毎に設定できてもよい。この場合には、データ種別設定コマンドＣ１にこの閾値を含めるとよい。また、図示しないが、消去対象のブロックを高速に発見するために、ページ使用率の低い物理ブロックを見つけるための情報を管理してもよい。また、上述の「冗長書き込み選択ポリシー」に対応させて、異なるＮＡＮＤコントローラ１２０や異なるチャネル毎に管理してもよい。この場合には、「データ種別ＩＤ」と「読み書きパラメータＩＤ」に加え、ＮＡＮＤコントローラ１２０のＩＤ、ＮＡＮＤコントローラのチャネルのＩＤのフィールドが加えられる。
【００５９】
上述の「読み書きパラメータ」に対応した物理ブロックの設定は、ブロック管理テーブルから「ステータス」が“消去済”の物理ブロックを探索し、該物理ブロックに対応する「データ種別ＩＤ」と「読み書きパラメータＩＤ」を設定し、「ページ使用状況」を全て“０”に設定し、書き込み可能ページテーブルの該当する「データ種別ＩＤ」と「読み書きパラメータＩＤ」に対応する「書き込み可能ページ数」に、該物理ブロックに含まれるページ数を足すことで行われる。例えば、これは、「書き込み可能ページ数」が「読み書きパラメータ」毎に設定される閾値を上回るまで行うようにしてもよい。
【００６０】
以上の処理が完了すると、データ種別設定受付部１３１は、次に、変換テーブル記憶部１３４に記憶される変換テーブルの設定として、変換テーブルのフォーマットを決定する（ステップＳ１０４）。上述したように、データ種別設定で指定された「読み書きパラメータ」毎に「冗長書き込み数」などが異なるため、変換テーブルのフォーマットが異なる。
【００６１】
変換テーブルは、図９−１乃至図９−４に示すように，ネームスペース毎に管理される。各ネームスペースに対応した変換テーブルがあり、それぞれ「論理ページ番号」と、それに対応する「データ種別ＩＤ」、「読み書きパラメータＩＤ」、「書き込み時刻」、論理ページに対応するデータを得るための「物理ページ番号」やエラー訂正符号に関する情報などが格納されている。
【００６２】
「論理ページ番号」は、ＬＢＡに対して割り当てられるページの番号である。例えば、使用するＮＡＮＤフラッシュメモリのページサイズが４ＫｉＢであれば、ＬＢＡが０〜４０９５までのデータが論理ページ番号“０”、ＬＢＡが４０９６〜８１９１までのデータが論理ページ番号“１”、というように割り当てられる。「データ種別ＩＤ」と「読み書きパラメータＩＤ」は、現在書き込みが行われている論理ページ番号のデータがどの読み書きパラメータで書き込まれているかを示している。該当する読み書きパラメータをデータ種別設定記憶部１３２から取得することで、この論理ページのデータを取得するための読み出し方法を知ることができる。「書き込み時刻」は、後述するタイマ処理にて、書き込みが行われてから一定時間経過したページの再書き込みを行うか否かの判定に用いられる。
【００６３】
各ネームスペースのフォーマットを決定するためには、データ種別設定記憶部１３２に記憶されているデータ種別設定を参照し、ネームスペース作成コマンドＣ２で指定されたネームスペースに対応する「読み書きパラメータ」の中で最も大きな「冗長書き込み数」を取得し、その分の冗長データフィールドを用意する。次に、「多値記憶モード」を確認し、ｐＳＬＣでの書き込みがあるかを確認する。ｐＳＬＣで書き込みが行われる場合には、１ページに含まれるデータサイズが異なるため、１つの冗長ページに複数の物理ページを格納するためのフィールドを用意する。また、それぞれの物理ページは通常、ユーザデータ領域と冗長領域から構成される。ユーザデータ領域にホスト２００などから指示されたデータを書き込み、冗長領域にはエラー訂正符号などが書き込まれる。
【００６４】
本実施形態では、エラー訂正符号をデータ種別によって変更することができる。物理ページに用意されている冗長領域に収まらないエラー訂正符号については、例えば図１０に示すように、拡張エラー訂正符号として、異なる物理ページに、格納できなかった第２のエラー訂正符号を格納してもよい。この場合、変換テーブルには、それぞれの物理ページ番号に対応する拡張エラー訂正符号の格納されている物理ページ番号と、その物理ページにおけるエラー訂正符号の開始位置を格納するフィールドを用意する。物理ページ番号は、前述の物理ブロック番号にそのブロック内のページに対して割り振った通し番号ビットを付加したものである。このように各ネームスペースの変換テーブルのフィールドを決定し、フォーマットを決める。
【００６５】
例えば、ＮＩＤ“１”の変換テーブルは、ＮＩＤ“１”のネームスペースに対応する「読み書きパラメータ」の中で最も大きな「冗長書き込み数」が“３”のため、図９−１に示すように、３つの冗長データを格納できるようになっている。また、ｐＳＬＣでの書き込みを行うため、それぞれの冗長データが複数の物理ページで構成されている。また、エラー訂正符号が物理ブロックの冗長領域に収まらないため、上述の拡張エラー訂正符号の記録位置を示す物理ページ番号と、物理ページ番号中の位置を格納できるようになっている。
【００６６】
一方、ＮＩＤ“２”の変換テーブルでは、ＮＩＤ“２”のネームスペースに対応する「読み書きパラメータ」の中で最も大きな「冗長書き込み数」が“２”であるため、図９−２に示すように、２つの冗長データを格納するフィールドがある。ＮＩＤ“２”で用いられる多値記憶モードにはｐＳＬＣがあるため、各冗長データには２つの物理ページ番号が格納できるようになっている。ＮＩＤ“２”においては、ＮＩＤ“１”の場合と異なり、エラー訂正符号長が物理ページの冗長領域に収まる長さのため、拡張エラー訂正符号の情報はない。また、ＮＩＤ“４”および“５”の変換テーブルでは、「冗長書き込み数」が“１”で、多値記憶モードがＭＬＣのみであり、エラー訂正符号が物理ページの冗長領域に収まるため、「物理ページ番号」のみが格納される。
【００６７】
以上のようにネームスペース作成コマンドＣ２で指定されたネームスペースのフォーマットが決定すると、変換テーブルの論理ページ番号に対応する「データ種別ＩＤ」、「読み書きパラメータＩＤ」、「書き込み時刻」および論理ページに対応するデータを得るための「物理ページ番号」やエラー訂正符号に関する情報が設定され、変換テーブルが作成される（ステップＳ１０５）。すなわち、データ種別設定受付部１３１は、ブロック管理情報のブロック管理テーブルを参照し、「データ種別ＩＤ」と「読み書きパラメータ」に合致するブロックの「ページ使用状況」を参照し、未使用ページを探し、変換テーブルに値を設定していく。使用したページについては、ブロック管理情報のブロック管理テーブルの「ページ使用状況」の値を、未使用を表す“０”から使用中を表す“１”に変更する。また、書き込み可能ページテーブルの該当する「書き込み可能ページ数」を減らす。このように、データ種別設定受付部１３１は、ネームスペース作成コマンドＣ２で指定されたネームスペースに対応する変換テーブルを設定し、ホスト２００にネームスペース作成完了を通知する（ステップＳ１０６）。
【００６８】
ホスト２００で動作するアプリケーション２１０ａ〜２１０ｆからは、このように作成されたネームスペースに対して、書き込みコマンドＣ３を発行し、データの書き込み要求を行う。ホスト２００からの書き込みコマンドＣ３には、「ネームスペース識別情報」、「アドレス情報」、「データサイズ」および「データ格納先のポインタ」が含まれている。「ネームスペース識別情報」は、ネームスペースの識別情報であり、例えばＮＩＤである。「アドレス情報」は、書き込み対象データを書き込む記憶部１１０の先頭アドレスを表し、例えばＬＢＡで指定される。「データサイズ」は、書き込み対象データのサイズを表す。「データ格納先のポインタ」は、例えば、ホスト２００のメモリ２２に格納された書き込み対象データの先頭アドレスを示す。
【００６９】
次に、ホスト２００からの書き込みコマンドＣ３により、データ書き込み要求を受けた場合のデータ書き込み処理について説明する。本実施形態では、書き込みコマンドＣ３に含まれる「ネームスペース識別情報」および「アドレス範囲」と、「データ格納先のポインタ」で示される格納先から取得した書き込み対象データの指定された位置の値とに基づいて、書き込み対象データの種別を識別することができる。
【００７０】
図１１は、データ書き込み処理の処理手順の一例を示すフローチャートである。まず、書き込み受付部１３５でホスト２００からの書き込みコマンドＣ３を受け付けると、データ種別識別部１３６がデータ種別設定記憶部１３２に記憶されているデータ種別設定を参照し、書き込みコマンドＣ３に合致する「データ種別情報」を識別し、それに対応する「読み書きパラメータ」のうち、「書き込み要求時パラメータ」を取得する（ステップＳ２０１）。すなわち、書き込みコマンドＣ３に合致するデータ種別の「データ種別ＩＤ」および「読み書きパラメータＩＤ」（書き込み要求においては“０”）を取得する。
【００７１】
次に、暗号化処理部１３７で、必要に応じて書き込み対象データの暗号化を実施し（ステップＳ２０２）、書き込み対象データを一時記憶部１３９に記憶する（ステップＳ２０３）。このとき、書き込み対象データと一緒に「データ種別ＩＤ」と「読み書きパラメータＩＤ」を記憶する。
【００７２】
次に、書き込み方法選択部１３８が、一時記憶部１３９に保存されている「データ種別ＩＤ」および「読み書きパラメータＩＤ」で特定される「書き込み要求時パラメータ」に従って、書き込み対象データの書き込み方法を決定する（ステップＳ２０４）。そして、書き込み方法選択部１３８は、ブロック管理情報記憶部１３３に記憶されているブロック管理情報を参照し、「書き込み要求時パラメータ」の条件を満たし、かつ、書き込み可能なページを探索する（ステップＳ２０５）。すなわち、書き込み方法選択部１３８は、まず、「冗長書き込み数」を確認し、それぞれの書き込み可能なページを探索する。「書き込み要求時パラメータ」で指定される「多値記憶モード」がｐＳＬＣの場合や、「エラー訂正符号長」が物理ページの冗長領域に収まらない場合には、それぞれ必要な分の書き込み可能な物理ブロック数を探索する。この探索は、ブロック管理情報の書き込み可能ページテーブルを参照し、「データ種別ＩＤ」と「読み書きパラメータＩＤ」に対応する「書き込み可能ページ数」が必要数以上であるか否かを判定し、さらに物理ブロック番号から条件を満たす物理ブロックの書き込み可能ページがあるかを、「ページ使用状況」を用いて判定していく。この際、書き込み先選択ポリシーを考慮して、ポリシーに沿った書き込みができるように、ＮＡＮＤコントローラ１２０や、チャネル、ダイの中の位置などを考慮して判定してもよい。
【００７３】
ここで、条件を満たす全ての書き込み可能なページが見つからない場合には（ステップＳ２０６：Ｎｏ）、この条件を満たす空ブロック（書き込み可能なページのあるブロック）を生成するため、この条件を満たす使用中のブロックを対象としてガベージコレクション処理を行う（ステップＳ２０７）。ガベージコレクション処理の処理手順については詳細を後述する。このガベージコレクション処理により、書き込み可能なブロック（ページ）ができた場合には（ステップＳ２０８：Ｙｅｓ）、ステップＳ２０５に戻って以降の処理をやり直す。一方、ガベージコレクション処理を実行しても書き込み可能なブロックができなかった場合には（ステップＳ２０８：Ｎｏ）、ホスト２００に書き込みエラーを通知して（ステップＳ２０９）、処理を終了する。
【００７４】
一方、ステップＳ２０５の探索で条件を満たす全ての書き込み可能なページが見つかった場合には（ステップＳ２０６：Ｙｅｓ）、それらをデータの書き込み先に決定し、即時書き込みを行うか否かを判定する（ステップＳ２１０）。例えば、データがページよりも小さい場合には、後に書き込み要求されたデータとまとめて書き込みを行うことより、ＮＡＮＤフラッシュメモリの書き込み回数を減らし、損傷を防ぐ効果がある。このため、本実施形態では即時書き込みを行うか否かを判定し、即時に書き込みを行わないと判断した場合には（ステップＳ２１０：Ｎｏ）、後に書き込み要求されたデータとまとめて書き込みを行うため、ここでは書き込みを行わずに、ステップＳ２１８に進んでホスト２００に書き込み完了を通知する。
【００７５】
一方、即時に書き込みを行うと判断した場合には（ステップＳ２１０：Ｙｅｓ）、エラー訂正符号付与部１４０にて、「書き込み要求時パラメータ」で指定される「エラー訂正方式」および「エラー訂正符号長」に従ってエラー訂正符号を生成し、書き込み対象データに付与する（ステップＳ２１１）。そして、書き込み実行部１２１により、書き込み先として決定されたページに、書き込み対象データとエラー訂正符号の書き込みを行う（ステップＳ２１２）。拡張エラー訂正符号もここで書き込まれる。
【００７６】
その後、全てのデータの書き込みが成功したか否かを確認し（ステップＳ２１３）、いずれかのブロックで書き込みが失敗した場合には（ステップＳ２１３：Ｎｏ）、既定回数書き込みをリトライする。すなわち、規定回数以上書き込みが失敗したか否かを判定し（ステップＳ２１４）、書き込みが失敗した回数が規定回数に達していなければ（ステップＳ２１４：Ｎｏ）、ステップＳ２１２に戻って再度書き込みを行う。一方、書き込みが失敗した回数が既定回数に達した場合には（ステップＳ２１４：Ｙｅｓ）、ブロック管理情報のブロック管理テーブルの「ページ使用状況」を、無効を表す“３”に設定し、さらに該ブロックの「ステータス」を“無効”に設定してブロックを無効化し（ステップＳ２１４）、この物理ブロックを今後使用しないようにした上でステップＳ２０５に戻り、以降の処理をやり直す。一方、全てのデータの書き込みが成功した場合には（ステップＳ２１３：Ｙｅｓ）、ブロック管理情報の更新を行う（ステップＳ２１６）。
【００７７】
まず、ブロック管理テーブルのうち、使用した物理ブロックの「ページ使用状況」を更新する。ここでは、過去に参照していたページの使用状況を、消去待を表す“３”に設定する処理と、使用を開始したページを、未使用を表す“０”から使用中を表す“１”に設定することで行わる。ブロックに含まれる全てのページが消去待になった場合には、ブロックの「ステータス」を“使用中”から“消去待”に設定する。“消去済”のブロックのページを使用する場合には、ブロックの「ステータス」を“消去済”から“使用中”にする。また、書き込み可能ページテーブルのうち、書き込みで使用したページ数分、「書き込み可能ページ数」を減らす。
【００７８】
次に、変換テーブルの更新を行う（ステップＳ２１７）。ここでは、データ書き込みを行ったネームスペースの「論理ページ番号」に対応するフィールドを最新状況に更新する。すなわち、「データ種別ＩＤ」と「書き込みパラメータＩＤ」、「書き込み時刻」、データやエラー訂正符号の物理ページ番号や位置情報などを書き込んだ通りに更新する。そして、一時記憶部１３９に記憶していたデータを消去して（ステップＳ２１８）、ホスト２００に書き込み完了を通知する（ステップＳ２１９）。ここで、今回の書き込みにより書き込み可能なページ数が一定数より少なくなった場合には（ステップＳ２２０：Ｎｏ）、ガベージコレクション処理をスケジュールするようにしてもよい（ステップＳ２２１）。
【００７９】
次に、ホスト２００からの読み出しコマンドＣ４により、データ読み出し要求を受けた場合のデータ読み出し処理について説明する。読み出しコマンドＣ４は、図５に示すように、「ネームスペース識別情報」、「アドレス情報」、「データサイズ」および「データ格納先のポインタ」が含まれている。「ネームスペース識別情報」は、ネームスペースの識別情報であり、例えばＮＩＤである。「アドレス情報」は、読み出し対象データが書き込まれている記憶部１１０の先頭アドレスを表し、例えばＬＢＡで指定される。「データサイズ」は、読み出し対象データのサイズを表す。「データ格納先のポインタ」は、例えば、読み出したデータを格納するデータ格納先を指定するポインタである。「データ格納先のポインタ」は、例えば、ホスト２００があらかじめ確保したホスト２００のメモリ２２のアドレスである。
【００８０】
図１２は、データ読み出し処理の処理手順の一例を示すフローチャートである。まず、読み出し受付部１４１で読み出しコマンドＣ４を受け付けると、読み出し方法選択部１４２が、読み出しコマンドＣ４で指定された「ネームスペース識別情報」と「アドレス情報」と「データサイズ」を基に、変換テーブル記憶部１３４に記憶されている変換テーブルとデータ種別設定記憶部１３２に記憶されているデータ種別設定を参照して、読み出し対象データの読み出し方法を決定する（ステップＳ３０１）。
【００８１】
この処理では、まず、「ネームスペース識別情報」から変換テーブルのどのネームスペースのテーブルかを特定する。次に、「アドレス情報」と「データサイズ」から読み出しの対象となる「論理ページ番号」を特定する。次に、特定された「論理ページ番号」に対応する「データ種別ＩＤ」と「読み書きパラメータＩＤ」を取得し、それに対応する「読み書きパラメータ」をデータ種別設定記憶部１３２に記憶されているデータ種別設定から取得する。
【００８２】
ここで、取得した「読み書きパラメータ」の「冗長書き込み数」と「冗長読み出し数」が等しくない場合には（ステップＳ３０２：Ｎｏ）、記憶部１１０の異なる領域に重複して書き込まれている複数の読み出し対象データのうち、どの領域に書き込まれた読み出し対象データを読み出すかを選択する（ステップＳ３０３）。これは、「読み書きパラメータ」の「冗長読み出し元選択ポリシー」に従って選択される。例えば、ＮＡＮＤコントローラ１２０から、各ＮＡＮＤコントローラ１２０の負荷をチャネル毎に取得する負荷取得部（図示しない）をＮＡＮＤコントローラ１２０毎に設けて、そこから負荷情報を取得し、冗長データの書き込まれているＮＡＮＤフラッシュメモリのうち、ＮＡＮＤコントローラ１２０やチャネルの負荷が低いものを選択してもよい。どれでもよい場合には、任意に選択することを示す値が設定できてもよい。また、ページの含まれるブロックの「エラー発生回数」を調べてエラーの低いものを選択するようにしてもよい。
【００８３】
次に、読み出し方法選択部１４２は、以上のように選択した読み出し対象データが書き込まれた記憶部１１０の領域全てについて、読み出し実行部１２３に読み出し対象データとエラー訂正符号の読み出しを指示する（ステップＳ３０４）。冗長書き込みがされている場合には、重複して書き込まれている複数の読み出し対象データのうち、いずれか一つの読み出し対象データとエラー訂正符号の読み出しが完了するまで待ち（ステップＳ３０５）、読み出しが完了したら（ステップＳ３０５：Ｙｅｓ）、エラー訂正処理部１４３にてエラー訂正処理を実行する（ステップＳ３０６）。なお、冗長書き込みがされていない場合には、読み出し対象データとエラー訂正符号の読み出しが完了するまで待ち、読み出しが完了したらエラー訂正処理を実行する。
【００８４】
ここで、訂正不能なエラーが発生した場合には（ステップＳ３０７：Ｙｅｓ）、まず、エラーの発生をブロック管理情報に記録する（ステップＳ３０８）。そして、冗長読み出しを行った場合には、他に読み出しが完了していないデータとエラー訂正符号があるかどうかを判定する（ステップＳ３０９）。そして、読み出しが完了していないものがあれば（ステップＳ３０９：Ｙｅｓ）、そちらから訂正不能なエラーが発生せずに読み出せる可能性があるため、ステップＳ３０５に戻って、新たにデータとエラー訂正符号の読み出しが完了するまで待つ。
【００８５】
一方、冗長書き込みがされていない場合など、他に読み出しが完了していないデータとエラー訂正符号がなければ（ステップＳ３０９：Ｎｏ）、既定回数読み出しをリトライする。すなわち、規定回数以上読み出しが失敗したか否かを判定し（ステップＳ３１０）、読み出しが失敗した回数が規定回数に達していなければ（ステップＳ３１０：Ｎｏ）、ステップＳ３０４に戻って再度読み出しを行う。一方、読み出しが失敗した回数が既定回数に達した場合には（ステップＳ３１０：Ｙｅｓ）、他に読み出しを試みていない冗長データがあるかを確認する（ステップＳ３１１）。例えば、「冗長書き込み数」が“３”で「冗長読み出し数」が“２”の場合であり、まだ読み出しを行っていない冗長データがある場合には（ステップＳ３１１：Ｙｅｓ）、ステップＳ３０３に戻ってその冗長データの書き込み先を読み出し先として選択し、その冗長データの読み出しを試みる。一方、読み出しを試みていない冗長データがない場合には（ステップＳ３１１：Ｎｏ）、ホスト２００に読み出しエラーを通知して（ステップＳ３１２）、処理を終了する。
【００８６】
一方、エラー訂正処理部１４３で訂正不能なエラーが検出されなかった場合は（ステップＳ３０７：Ｎｏ）、一時記憶部１３９に読み出し元の情報とエラー訂正処理を行ったデータを記憶させる（ステップＳ３１１）。そして、ホスト２００からの読み出しコマンドＣ４に含まれる「アドレス情報」と「データサイズ」で指定された全てのデータが揃うのを待ち（ステップＳ３１４）、全てのデータが揃ったら（ステップＳ３１４：Ｙｅｓ）、一時記憶部１３９からデータを取り出して、データが暗号化されている場合には復号処理部１４４でデータの復号を行う（ステップＳ３１５）。そして、データをホスト２００に出力し、読み出し完了をホスト２００に通知する（ステップＳ３１６）。その後、一時記憶部１３９からデータと読み出し元の情報を消去して（ステップＳ３１７）、処理を終了する。
【００８７】
次に、ガベージコレクション処理について説明する。ガベージコレクション処理は、上述したように、「データ種別ＩＤ」と「読み書きパラメータＩＤ」などで識別される種別毎に管理された書き込み可能ページテーブルにおいて、「書き込み可能ページ数」が一定以下になった場合にスケジュールされる。基本的にはこのタイミングでガベージコレクション処理が行われるが、ガベージコレクション処理よりも読み書き処理が優先される場合には、ガベージコレクション処理が間に合わない場合がある。その場合は、上述したように、書き込み処理により書き込み可能なページが一定数より少なくなった時点でガベージコレクションがスケジュールされる。
【００８８】
図１３は、ガベージコレクション処理の処理手順の一例を示すフローチャートである。ガベージコレクション処理では、まず、再書き込み指示部１４５が、ブロック管理情報記憶部１３３に記憶されているブロック管理情報を参照し、消去対象の候補となる消去対象候補ブロックを選択する（ステップＳ４０１）。消去対象候補ブロックの選択は、例えば、ブロック管理テーブルの「ステータス」が“消去待”であるものを優先する。“消去待”のものがない場合には、「ステータス」が“使用中”のもののうち、「ページ使用状況」を参照し、消去待のページが多いものを優先する。
【００８９】
次に、再書き込み指示部１４５は、消去対象候補ブロックに使用中のページがあるかどうかを確認する（ステップＳ４０２）。そして、消去対象候補ブロックに使用中のページがなければ（ステップＳ４０２：Ｎｏ）、消去実行部１２２により消去対象候補ブロックの消去を実行し（ステップＳ４０３）、ブロック管理情報の更新を行う（ステップＳ４０４）。すなわち、まず、ブロック管理情報のブロック管理テーブルの更新を行う。具体的には、消去を行った「物理ブロック番号」に対応する「データ種別ＩＤ」と「読み書きパラメータＩＤ」に、書き込み可能ページテーブルの不足した「書き込み可能ページ数」に対応する「データ種別ＩＤ」と「読み書きパラメータＩＤ」を設定し、「ステータス」を“消去済”に設定し、「ページ使用状況」を、全て未使用を表す“０”に設定する。そして、「消去回数」を１増加させる。次に、ブロック管理情報の書き込み可能ページテーブルの更新を行う。具体的には、不足した「書き込み可能ページ数」に１ブロックに含まれるページ数を加算し、処理を終了する。
【００９０】
一方、消去対象候補ブロックに使用中のページがあれば（ステップＳ４０２：Ｙｅｓ）、再書き込み指示部１４５は、そのページに書き込まれているデータとエラー訂正符号の読み出しを、読み出し方法選択部１４２を介して、読み出し実行部１２３に指示する（ステップＳ４０５）。そして、読み出されたデータとエラー訂正符号から、エラー訂正処理部１４３においてエラー訂正処理を実行する（ステップＳ４０６）。ここで、訂正不能なエラーが発生した場合には（ステップＳ４０７：Ｙｅｓ）、ブロック管理テーブルにエラーを記録する（ステップＳ４０８）。すなわち、ブロック管理テーブルの「読み出しエラー発生回数」を１増加させる。
【００９１】
その後、データ読み出し処理と同様に、既定回数読み出しをリトライする。すなわち、規定回数以上読み出しエラーが発生したか否かを判定し（ステップＳ４０９）、読み出しエラーが発生した回数が規定回数に達していなければ（ステップＳ４０９：Ｎｏ）、ステップＳ４０５に戻って再度読み出しを行う。一方、読み出しエラーが発生した回数が既定回数に達した場合には（ステップＳ４０９：Ｙｅｓ）、ホスト２００にエラーを通知し（ステップＳ４１０）、ステップＳ４０１に戻って別のブロックを消去対象候補ブロックにして、以降の処理を再度試みる。一方、エラー訂正処理により訂正不能なエラーが発生しなければ（ステップＳ４０７：Ｎｏ）、一時記憶部１３９に読み出し元の情報と読み出したデータを記憶させる（ステップＳ４１１）。
【００９２】
次に、再書き込み指示部１４５は、変換テーブル記憶部１３４に記憶されている変換テーブルを参照し、先ほど読み出したページの「データ種別ＩＤ」と、そのページの現在の「読み書きパラメータＩＤ」を取得する。そして、データ種別設定記憶部１３２に記憶されているデータ種別設定（図６参照）を参照し、再書き込みを行う「読み書きパラメータ」、つまり「再書き込み時パラメータ」を取得する（ステップＳ４１２）。例えば、現在の「読み書きパラメータＩＤ」が“０”であれば、再書き込みは１回目になるため、「読み書きパラメータＩＤ」が“１”の「１回目の再書き込み時パラメータ」を取得する。また、現在の「読み書きパラメータＩＤ」が“１”であれば、再書き込みは２回目になるため、「読み書きパラメータＩＤ」が“２”の「２回目の再書き込み時パラメータ」を取得する。
【００９３】
なお、図６に例示したデータ種別設定では「再書き込み時パラメータ」を再書き込みの回数に応じて分けるようにしているが、例えば図１４に示すように、「再書き込み時パラメータ」をガベージコレクション処理とタイマ処理で分けてもよいし、これらを併用してもよい。
【００９４】
次に、再書き込み指示部１４５は、ブロック管理情報記憶部１３３に記憶されているブロック管理情報を参照し、ステップＳ４１２で取得した「再書き込み時パラメータ」の条件を満たし、かつ、書き込み可能なページを探索する（ステップＳ４１３）。ここで、条件を満たす書き込み可能なページが見つからない場合には（ステップＳ４１４：Ｎｏ）、ステップＳ４０１に戻って別のブロックを消去対象候補ブロックにし、以降の処理を再度試みる。一方、条件を満たす書き込み可能なページが見つかった場合には（ステップＳ４１４：Ｙｅｓ）、そのページを再書き込み先に決定して、以降のステップＳ４１５〜ステップＳ４２２において、データ書き込み処理のＳ２１１〜Ｓ２１８（図１１参照）と同様の処理を行う。ただし、ステップＳ４１５でデータに付与するエラー訂正符号は、ステップＳ４１２で取得した「再書き込み時パラメータ」で指定される「エラー訂正方式」および「エラー訂正符号長」に従って生成される。
【００９５】
次に、タイマ処理について説明する。タイマ処理は、書き込みから時間の経ったページのデータを読み出して他のページに書き込む処理である。タイマ処理は、タイマにより定期的に起動される。
【００９６】
図１５は、タイマ処理の処理手順の一例を示すフローチャートである。タイマ処理では、まず、再書き込み指示部１４５が、変換テーブル記憶部１３４に記憶されている変換テーブルを参照し、「書き込み時刻」が現在時刻から所定時間以上前のページ、つまり、書き込みから所定時間経過したページがあるか否かを判定する（ステップＳ５０１）。ここで、書き込みから所定時間経過したページがなければ（ステップＳ５０１：Ｎｏ）、そのまま処理を終了する。
【００９７】
一方、書き込みから所定時間経過したページがあれば（ステップＳ５０１：Ｙｅｓ）、そのページに書き込まれているデータとエラー訂正符号の読み出しを、読み出し方法選択部１４２を介して、読み出し実行部１２３に指示する（ステップＳ５０２）。そして、以降のステップＳ５０３〜ステップＳ５１１およびステップＳ５１４〜Ｓ５２１において、ガベージコレクション処理のステップＳ４０６〜ステップＳ４２２（図１３参照）と同様の処理を行う。ただし、タイマ処理の場合は、ステップＳ５１１において書き込み可能なページが見つからなかった場合（ステップＳ５１１：Ｎｏ）、そのデータ種別に対応する再書き込みパラメータの条件を満たすブロックを対象にガベージコレクション処理を実行する（ステップＳ５１２）。そして、ガベージコレクション処理により書き込み可能なページができたら（ステップＳ５１３：Ｙｅｓ）、ステップＳ５１１の処理に移行し、書き込み可能なページができなければ（ステップＳ５１３：Ｎｏ）、ステップＳ５０１に戻って処理をやり直す。
【００９８】
なお、以上説明したタイマ処理では、変換テーブルの「書き込み時刻」を用いて所定時間経過したページを書き換えの対象としたが、これはパトロール処理のように、データの書かれているアドレスから読み出しを行い、エラーを検知したものを書き換えの対象としてもよい。
【００９９】
以上、具体的な例を挙げながら詳細に説明したように、本実施形態では、書き込み対象データの種別を識別し、データ種別毎に設定された「読み書きパラメータ」のうち、書き込み対象データの種別に応じた「読み書きパラメータ」を用いて、書き込み対象データの記憶部１１０への書き込み方法を決定するようにしている。したがって、本実施形態によれば、記憶部１１０に多種多様なデータを書き込むことが要求される環境であっても、それぞれのデータの種別に合せて最適な方法でデータの書き込みを行うことができる。
【０１００】
また、データ種別毎に設定された「読み書きパラメータ」は、「書き込み要求時パラメータ」と「再書き込み時パラメータ」とを含み、ホスト２００からのデータ書き込み要求時には「書き込み要求時パラメータ」を用い、ガベージコレクション処理やタイマ処理などのデータ再書き込み時には「再書き込み時パラメータ」を用いるようにしている。したがって、同一の書き込み対象データについて、データ書き込み要求時とデータ再書き込み時とで、それぞれ最適な方法で書き込み対象データの書き込みを行うことができる。
【０１０１】
さらに、「再書き込み時パラメータ」は、再書き込みの回数に応じて異なるパラメータ（図６の例では「１回目の再書き込み時パラメータ」と「２回目の再書き込みパラメータ」）を含み、再書き込みの回数に応じて「再書き込み時パラメータ」を切り替えるようにしている。したがって、同一の書き込み対象データの再書き込み時に、再書き込みの回数に応じて最適な方法でデータ再書き込みを行うことができる。
【０１０２】
また、本実施形態では、記憶部１１０からデータを読み出す際に、読み出し対象データの種別に応じた「読み書きパラメータ」を用いて、記憶部１１０から読み出す読み出し対象データの読み出し方法を決定するようにしている。したがって、本実施形態によれば、記憶部１１０に多種多様なデータを書き込むことが要求される環境であっても、それぞれのデータの種別に合せて最適な方法でデータの書き込みを行うことができる。
【０１０３】
また、データ種別毎に設定された「読み書きパラメータ」は「冗長読み出し数」を含み、データ読み出し処理を行う場合は、読み出し対象データの種別に対応する「読み書きパラメータ」の「冗長読み出し数」に応じて読み出し数を決定し、最も応答が速いデータをホスト２００に返すようにしている。したがって、読み出し対象データの種別に応じて、読み出し時の遅延（レイテンシ）を制御することができる。
【０１０４】
また、本実施形態では、書き込み対象データの種別を、少なくとも、書き込みコマンドＣ３に含まれる「ネームスペース識別情報」に基づいて識別するようにしているので、ネームスペースごとに適用する「読み書きパラメータ」を切り替えて、それぞれ最適な方法で書き込み対象データの書き込みを行うことができる。
【０１０５】
また、本実施形態では、書き込み対象データの種別を、さらに、書き込みコマンドＣ３に含まれる「アドレス範囲」、すなわちストレージ１００の論理アドレス範囲に基づいて識別するようにしているので、同じネームスペースに対応するアドレス空間内で領域に応じて異なる「読み書きパラメータ」を適用することができ、それぞれ最適な方法で書き込み対象データの書き込みを行うことができる。
【０１０６】
また、本実施形態では、書き込み対象データの種別を、さらに、書き込み対象データの指定された位置の値に基づいて識別するようにしているので、書き込み対象データの指定された位置の値に応じて適用する「読み書きパラメータ」を切り替えて、それぞれ最適な方法で書き込み対象データの書き込みを行うことができる。例えば、書き込み対象データの指定された位置に優先度を表す値が格納されている場合、書き込み対象データの優先度に応じて最適な方法で書き込みを行うことができる。
【０１０７】
また、データ種別毎に設定された「読み書きパラメータ」は、「エラー訂正符号長」、「多値記録モード」、「冗長書き込み数」などを含み、書き込み対象データの種別に応じて、書き込み対象データに付与するエラー訂正符号長、多値記録モード、冗長書き込み数などを変更するようにしているので、書き込み対象データの種別に応じた書込み強度で書き込みを行うことができる。
【０１０８】
さらに、データ種別毎に設定された「読み書きパラメータ」は、「冗長書き込み先ポリシー」を含み、書き込み対象データの種別に応じて冗長書き込みを行う際の書き込み先を選択するようにしているので、書き込み対象データの種別に応じて最適な書き込み先に書き込みを行うことができる。
【０１０９】
＜第２実施形態＞
上述の第１実施形態では、制御装置１の内部にストレージ１００を設けた構成を説明したが、制御装置１とストレージ１００がネットワーク５００を介して接続されたネットワークシステムとして構成されてもよい。
【０１１０】
図１６は、第２実施形態に係るネットワークシステムのハードウェア構成例を示すブロック図である。このネットワークシステムは、制御装置１’とストレージ１００’とがネットワーク５００を介して接続されている。制御装置１’は、上述の第１実施形態に係る制御装置１のように内部にストレージ１００を持たない。その代り、外部のストレージ１００’とネットワーク５００を介して接続されている。
【０１１１】
図１７は、第２実施形態に係るネットワークシステムの機能的な構成例を示すブロック図である。図４に示した第１実施形態に係る制御装置１の構成と比較して、ストレージ１００’が、ネットワーク５００を介して制御装置１’と通信を行うための通信部１５１（ネットワークインタフェース１５０）を備え、この通信部１５１を介して、データ種別設定受付部１３１、書き込み受付部１３５および読み出し受付部１４１がホスト２００からの各種要求を受け付ける構成である点が異なる。
【０１１２】
ホスト２００からは、例えばＮＶＭ  Ｅｘｐｒｅｓｓ  ｏｖｅｒ  ｆａｂｒｉｃｓなどのプロトコルで接続される。このような構成の場合、データ種別識別情報として、上述の第１実施形態で説明したものに加えて、ホスト２００から送信されたフレームの情報を用いてデータ種別の識別を行うことができる。これを実現するためには、例えば、任意データ識別情報の位置を、フレームの先頭の位置と定義し直す。このように、第２実施形態によれば、例えばフレームに含まれるＰＣＰ（Ｐｒｉｏｒｉｔｙ  Ｃｏｄｅ  Ｐｏｉｎｔ）といった優先度の値を用いて、書き込み対象データに適用する「読み書きパラメータ」を切り替えることができる。
【０１１３】
＜第３実施形態＞
上述の第２実施形態では、制御装置１’とストレージ１００’が１対１で接続されることを想定したが、複数の制御装置１’や複数のストレージ１００’がネットワーク５００を介して接続された構成であってもよい。
【０１１４】
図１８は、第３実施形態に係るネットワークシステムのハードウェア構成例を示すブロック図である。このネットワークシステムは、複数（図１８の例では２つ）の制御装置１’Ａ，１’Ｂと複数（図１８の例では２つ）のストレージ１００’Ａ，１００’Ｂが、ネットワーク５００を介して相互に接続されている。ネットワーク５００上にはスイッチングハブ６１０を備えた通信装置６００があり、この通信装置６００のスイッチングハブ６１０により、制御装置１’Ａ、制御装置１’Ｂ、ストレージ１００’Ａ、ストレージ１００’Ｂ間の通信路の切り替えが行われる。
【０１１５】
図１９は、第３実施形態に係るネットワークシステムの機能的な構成例を示すブロック図である。図１７に示した第２実施形態に係るネットワークシステムの構成と比較して、ストレージ１００’Ａが、ネットワーク５００を介して他のストレージ１００Ｂ’に書き込みを指示する書き込み指示部１４６と、ネットワーク５００を介して他のストレージ１００Ｂ’に読み出しを指示する読み出し指示部１４７とを備える点が異なる。なお、図１８に示したスイッチングハブ６１０は、図１９においては機能的に転送部６２０として示している。
【０１１６】
このような構成の場合、ストレージ１００’Ａに設定されるデータ種別設定の「読み書きパラメータ」を、上述の第１実施形態で説明したものから少し変更を加えることで、他のストレージ１００Ｂ’に書き込み対象データを書き込んだり、他のストレージ１００Ｂ’から読み出し対象データを読み出したりすることができる。例えば、「読み書きパラメータ」の「冗長書き込み先選択ポリシー」で冗長書き込み先として他のストレージ１００Ｂ’を選択できるようにし、「冗長読み出し元選択ポリシー」で、例えば負荷が低いストレージからデータを読み出せるようにすればよい。そして、物理ブロック番号や物理ページ番号にストレージの識別子を埋め込むことで、複数ストレージへの対応が可能となる。
【０１１７】
なお、ストレージ１００’Ｂは、ストレージ１００Ａ’と同じ構成であってもよいし、例えば従来の一般的なストレージ装置のように、ストレージ１００Ａ’とは異なる構成であってもよい。ストレージ１００’Ｂをストレージ１００’Ａと同じ構成とした場合はストレージ１００’Ｂは、ストレージ１００Ａ’に書き込み対象データを書き込んだり、ストレージ１００Ａ’から読み出し対象データを読み出したりすることができる。
【０１１８】
本実施形態に係るネットワークシステムは、例えば自動車に搭載される車載ネットワークシステムに対して有効に適用することができる。図２０は、車載ネットワークシステムへの適用例を説明する図である。この車載ネットワークシステム７１０は、自動車７００内の物理的に離れた位置に配置された複数（図２０の例では２つ）の制御装置１’Ａ，１’Ｂと複数（図２０の例では２つ）のストレージ１００’Ａ，１００’Ｂが、ネットワーク５００を介して相互に接続されている。ネットワーク５００上には複数のスイッチ６３０が設けられ、これらスイッチ６３０により、制御装置１’Ａ、制御装置１’Ｂ、ストレージ１００’Ａ、ストレージ１００’Ｂ間の通信路の切り替えが行われる。
【０１１９】
以上のように、第３実施形態に係るネットワークシステムによれば、ストレージ１００Ａ’が他のストレージ１００Ｂ’への書き込みや読み出しの指示を行うことにより、物理的に離れた位置へデータを記憶させることができる。したがって、例えば車載ネットワークシステム７１０に適用した場合、事故などにより複数のストレージ１００’Ａ，１００’Ｂの一方が壊れた場合にも、もう一方からデータの読み出しを可能とすることができる。
【０１２０】
＜第４実施形態＞
上述の各実施形態では、データ種別に応じた書き込みや読み出しの制御をストレージ１００内のストレージコントローラ１３０が行う構成を説明したが、データ種別に応じた書き込みや読み出しの制御をホスト２００の機能として実現してもよい。
【０１２１】
図２１は、第４実施形態に係る制御装置１”の機能的な構成例を示すブロック図である。本実施形態に係る制御装置１”では、第１実施形態に係る制御装置１においてストレージ１００内のストレージコントローラ１３０により実現されていた各機能が、ホスト２００’の機能として実現されている。ストレージコントローラ１３０の機能は、アプリケーション２１０ａ〜２１０ｆやオペレーティングシステム２００ａ，２００ｂによって実現されてもよい。このような構成により、例えば、Ｏｐｅｎ  Ｃｈａｎｎｅｌ  ＳＳＤのようにホスト２００’側でストレージ１００”の制御を行う場合においても、上述の第１実施形態と同様の効果を得ることができる。なお、上述の第２実施形態や第３実施形態と同様に、ホスト２００’とストレージ１００”が通信部３１０，１５１により接続され、ネットワーク５００を経由して制御できるようにしてもよい。
【０１２２】
＜変形例＞
なお、上述の各実施形態において、「読み書きパラメータ」の「多値記憶モード」については、冗長書き込みを行う場合に各冗長データの書き込みにおいて同じ「多値記録モード」を適用するものとしたが、冗長データ毎に「多値記憶モード」を切り替えてもよい。例えば、ある冗長データは“ｐＳＬＣ”で書き込みを行い、他の冗長データは“ＭＬＣ”で書き込みを行うといったように、冗長データ毎の切り替えを行ってもよい。また、「多値記憶モード」の“ＭＬＣ”は、ＴＬＣ（Ｔｒｉｐｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）やＱＬＣ（Ｑｕａｄｒｕｐｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）であってもよい。
【０１２３】
以上述べた少なくとも一つの実施形態や変形例によれば、データの種別に合せて最適な方法でデータの書き込みを行うことができる。
【０１２４】
＜補足説明＞
上述したデータ種別設定受付部１３１、書き込み受付部１３５、データ種別識別部１３６、暗号化処理部１３７と、書き込み方法選択部１３８、エラー訂正符号付与部１４０、読み出し受付部１４１、読み出し方法選択部１４２、エラー訂正処理部１４３、復号処理部１４４および再書き込み指示部１４５は、例えば、ストレージコントローラ１３０のプロセッサ１１やホスト２００のプロセッサ２１にプログラムを実行させることにより実現することができる。このプログラムは、例えば、ストレージコントローラ１３０やホスト２００に予めインストールされてもよいし、ネットワーク経由で配布され、適宜インストールされてもよい。
【０１２５】
以上、本発明の実施形態およびその変形例を説明したが、ここで説明した実施形態および変形例は、例として提示したものであり、発明の範囲を限定することは意図していない。ここで説明した新規な実施形態および変形例は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。ここで説明した実施形態やその変形例は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２６】
１（１’，１’Ａ，１’Ｂ，１”）  制御装置
１００（１００’，１００’Ａ，１００’Ｂ）  ストレージ
１１０  記憶部
１２０  ＮＡＮＤコントローラ
１３０  ストレージコントローラ
１３１  データ種別設定受付部
１３２  データ種別設定記憶部
１３３  ブロック管理情報記憶部
１３４  変換テーブル記憶部
１３５  書き込み受付部
１３６  データ種別識別部
１３７  暗号化処理部
１３８  書き込み方法選択部
１３９  一時記憶部
１４０  エラー訂正符号付与部
１４１  読み出し受付部
１４２  読み出し方法選択部
１４３  エラー訂正処理部
１４４  復号処理部
１４５  再書き込み指示部
２００（２００’）  ホスト
２１０ａ〜２１０ｆ  アプリケーション
５００  ネットワーク
７１０  車載ネットワークシステム
【図１】
2019164728.tif 000003
【図２】
2019164728.tif 000004
【図３】
2019164728.tif 000005
【図４】
2019164728.tif 000006
【図５】
2019164728.tif 000007
【図６】
2019164728.tif 000008
【図７】
2019164728.tif 000009
【図８−１】
2019164728.tif 000010
【図８−２】
2019164728.tif 000011
【図９−１】
2019164728.tif 000012
【図９−２】
2019164728.tif 000013
【図９−３】
2019164728.tif 000014
【図９−４】
2019164728.tif 000015
【図１０】
2019164728.tif 000016
【図１１】
2019164728.tif 000017
【図１２】
2019164728.tif 000018
【図１３】
2019164728.tif 000019
【図１４】
2019164728.tif 000020
【図１５】
2019164728.tif 000021
【図１６】
2019164728.tif 000022
【図１７】
2019164728.tif 000023
【図１８】
2019164728.tif 000024
【図１９】
2019164728.tif 000025
【図２０】
2019164728.tif 000026
【図２１】
2019164728.tif 000027