(57)【特許請求の範囲】
【請求項１】
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラであって、
ホストから、前記複数のブロック内のコピー元ブロックと、前記コピー元ブロック内のコピー開始ページと、前記複数のブロック内のコピー先ブロックと、前記コピー先ブロック内の転送開始ページと、前記コピー元ブロック内の各ページのデータが有効データまたは無効データのいずれであるかを示す管理データと、コピー終了までにコピーすべき有効データの数またはコピー終了までに検出すべき無効データの数のいずれかを指定する終了条件とを含むデータコピーコマンドを受信し、
前記管理データに基づき、前記コピー元ブロック内の有効データを前記コピー先ブロック内の前記転送開始ページから始まるコピー先領域にコピーし且つ前記コピー元ブロック内の無効データのコピーをスキップするデータコピー動作を、前記コピー元ブロック内の前記コピー開始ページから開始し、
前記終了条件が満たされた場合、前記データコピー動作を終了するように構成されているコントローラとを具備するストレージシステム。
【請求項２】
前記コントローラは、コピーされた有効データ毎に有効データの識別子と有効データが格納されている前記コピー先ブロック内の位置とを示す情報を前記ホストに通知するように構成されている請求項１記載のストレージシステム。
【請求項３】
前記コピー元ブロック内の各ページが複数のデータを含む場合、
前記コントローラは、
一つ以上の有効データを含む前記コピー元ブロック内のページそれぞれからページ単位でデータを読み出し、
読み出したデータから有効データを抽出することによって１ページのページサイズに対応する数の有効データを準備し、
準備された１ページのページサイズに対応する数の有効データを前記コピー先領域にページ単位で書き込むことによって、有効データを前記コピー先領域にコピーし且つ無効データのコピーをスキップし、
前記コピー先領域にコピーされた有効データの数が、前記コピー終了までにコピーすべき有効データの数以上である場合、または前記コピーがスキップされた無効データの数が前記コピー終了までに検出すべき無効データの数以上である場合、前記データコピー動作を終了するように構成されている請求項１記載のストレージシステム。
【請求項４】
前記コントローラは、コピーされた有効データ毎に有効データの識別子と有効データが格納されている前記コピー先ブロック内の位置とを示す情報を前記ホストに通知するように構成され、前記コピー先ブロック内の位置は、ブロックアドレス、ページアドレス、およびページ内オフセットとによって表される請求項３記載のストレージシステム。
【請求項５】
前記不揮発性メモリにおいては、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが前記一つのページに後続する１以上のページへのデータ書き込み後に可能となり、
前記コントローラは、前記終了条件が満たされた場合、前記データコピー動作によって有効データがコピーされた前記コピー先ブロックのページ群の中で、読み出し可能なデータを保持する最新のページを示すページアドレスを、前記ホストに通知するように構成されている請求項１記載のストレージシステム。
【請求項６】
不揮発性メモリとコントローラとを含むストレージシステムを制御する情報処理システムであって、
メモリと、
前記メモリに格納されたプログラムを実行するように構成されたプロセッサとを具備し、
前記プロセッサは、
論理ブロックアドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルを管理し、
有効データのみをコピーすることを要求するデータコピーコマンドであって、前記不揮発性メモリに含まれる複数のブロック内のコピー元ブロックと、前記コピー元ブロック内のコピー開始ページと、前記複数のブロック内のコピー先ブロックと、前記コピー先ブロック内の転送開始ページと、前記コピー元ブロック内の各ページのデータが有効データまたは無効データのいずれであるかを示す管理データと、コピー終了までにコピーすべき有効データの数またはコピー終了までに検出すべき無効データの数のいずれかを指定する終了条件とを含むデータコピーコマンドを、前記ストレージシステムに送信し、
前記コピー先ブロックにコピーされた有効データ毎に有効データの論理ブロックアドレスと有効データが格納されている前記コピー先ブロック内の位置を示す物理アドレスとを示すデータコピー情報を前記ストレージシステムから受信し、
前記データコピー情報に基づいて、論理ブロックアドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルを更新するように構成されている情報処理システム。
【請求項７】
複数のブロックを含む不揮発性メモリの制御方法であって、
ホストから、前記複数のブロック内のコピー元ブロックと、前記コピー元ブロック内のコピー開始ページと、前記複数のブロック内のコピー先ブロックと、前記コピー先ブロック内の転送開始ページと、前記コピー元ブロック内の各ページのデータが有効データまたは無効データのいずれであるかを示す管理データと、コピー終了までにコピーすべき有効データの数またはコピー終了までに検出すべき無効データの数のいずれかを指定する終了条件とを含むデータコピーコマンドを受信することと、
前記管理データに基づき、前記コピー元ブロック内の有効データを前記コピー先ブロック内の前記転送開始ページから始まるコピー先領域にコピーし且つ前記コピー元ブロック内の無効データのコピーをスキップするデータコピー動作を、前記コピー元ブロック内の前記コピー開始ページから開始することと、
前記終了条件が満たされた場合、前記データコピー動作を終了することとを具備する制御方法。
【請求項８】
コピーされた有効データ毎に有効データの識別子と有効データが格納されている前記コピー先ブロック内の位置とを示す情報を前記ホストに通知することをさらに具備する請求項７記載の制御方法。
【請求項９】
前記コピー元ブロック内の各ページは複数のデータを含み、
前記データコピー動作は、
一つ以上の有効データを含む前記コピー元ブロック内のページそれぞれからページ単位でデータを読み出すことと、
読み出したデータから有効データを抽出することによって１ページのページサイズに対応する数の有効データを準備することと、
準備された１ページのページサイズに対応する数の有効データを前記コピー先領域にページ単位で書き込むことによって、有効データを前記コピー先領域にコピーし且つ無効データのコピーをスキップすることとを含み、
前記コピー先領域にコピーされた有効データの数が、前記コピー終了までにコピーすべき有効データの数以上である場合、または前記コピーがスキップされた無効データの数が前記コピー終了までに検出すべき無効データの数以上である場合、前記データコピー動作が終了される請求項７記載の制御方法。
【請求項１０】
コピーされた有効データ毎に有効データの識別子と有効データが格納されている前記コピー先ブロック内の位置とを示す情報を前記ホストに通知することをさらに具備し、
前記コピー先ブロック内の位置は、ブロックアドレス、ページアドレス、およびページ内オフセットとによって表される請求項９記載の制御方法。
【請求項１１】
前記不揮発性メモリにおいては、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが前記一つのページに後続する１以上のページへのデータ書き込み後に可能となり、
前記終了条件が満たされた場合、前記データコピー動作によって有効データがコピーされた前記コピー先ブロックのページ群の中で、読み出し可能なデータを保持する最新のページを示すページアドレスを、前記ホストに通知することをさらに具備する請求項７記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるストレージシステムが広く利用されている。このようなストレージシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、その低電力消費、高性能という特徴により、様々なコンピュータのメインストレージとして使用されている。
【０００３】
最近では、ストレージシステムの性能改善が望まれている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１４／０２１５１２９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ストレージシステムの性能改善を図るため、ホストによる不揮発性メモリの制御を助けるための新たな機能の実現が要求される。
【０００６】
本発明が解決しようとする課題は、ホストによる不揮発性メモリの制御を助けることができるストレージシステム、情報処理システムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、ストレージシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、ホストから、前記複数のブロック内のコピー元ブロックと、前記コピー元ブロック内のコピー開始ページと、前記複数のブロック内のコピー先ブロックと、前記コピー先ブロック内の転送開始ページと、前記コピー元ブロック内の各ページのデータが有効データまたは無効データのいずれであるかを示す管理データと、コピー終了までにコピーすべき有効データの数またはコピー終了までに検出すべき無効データの数のいずれかを指定する終了条件とを含むデータコピーコマンドを受信する。前記コントローラは、前記管理データに基づき、前記コピー元ブロック内の有効データを前記コピー先ブロック内の前記転送開始ページから始まるコピー先領域にコピーし且つ前記コピー元ブロック内の無効データのコピーをスキップするデータコピー動作を、前記コピー元ブロック内の前記コピー開始ページから開始する。前記コントローラは、前記終了条件が満たされた場合、前記データコピー動作を終了する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係るストレージシステムを含む情報処理システムの構成例を示すブロック図。
【図２】同実施形態のストレージシステムを制御するホストソフトウェアを示すブロック図。
【図３】同実施形態のストレージシステム内のＮＡＮＤインタフェースと複数のＮＡＮＤメモリチップとの関係を示すブロック図。
【図４】同実施形態のストレージシステムによって管理される、物理ＮＡＮＤアクセス管理アプリケーションプログラムインタフェース（ＡＰＩ）用のブロック群と仮想ＮＡＮＤアクセス管理アプリケーションプログラムインタフェース（ＡＰＩ）用のブロック群とを示す図。
【図５】同実施形態のストレージシステムによって管理される仮想ブロックの構造を示す図。
【図６】同実施形態のストレージシステム内に維持される、ブロックそれぞれ消去回数を管理する消去回数管理テーブルを示す図。
【図７】同実施形態のストレージシステム内に維持される、仮想ブロックそれぞれの消去回数を管理する別の消去回数管理テーブルを示す図。
【図８】同実施形態のストレージシステム内に維持される、ネームスペースそれぞれの消去回数を管理するさらに別の消去回数管理テーブルを示す図。
【図９】同実施形態のストレージシステム内に維持される物理ブロック構造情報テーブルを示す図。
【図１０】同実施形態のストレージシステム内に維持される仮想ブロック構造情報テーブルを示す図。
【図１１】同実施形態のストレージシステム内に維持される、物理ＮＡＮＤアクセス管理ＡＰＩ用のネームスペース情報テーブルを示す図。
【図１２】同実施形態のストレージシステム内に維持される、仮想ＮＡＮＤアクセス管理ＡＰＩ用のネームスペース情報テーブルを示す図。
【図１３】同実施形態のストレージシステム内の仮想ブロックとこの仮想ブロックを構成するブロックそれぞれのブロックアドレスとの関係を説明するための図。
【図１４】同実施形態のストレージシステムによって実行される不良ブロック置き換え動作を説明するための図。
【図１５】同実施形態のストレージシステムに適用される、物理ＮＡＮＤアクセス管理ＡＰＩ用のバッドブロック化コマンドを示す図。
【図１６】同実施形態のストレージシステムに適用される、仮想ＮＡＮＤアクセス管理ＡＰＩ用のバッドブロック化コマンドを示す図。
【図１７】同実施形態のストレージシステムによって実行されるバッドブロック化処理の手順を示すフローチャート。
【図１８】同実施形態のストレージシステムとホストとによって実行される、物理ＮＡＮＤアクセスおよび仮想ＮＡＮＤアクセスのための処理シーケンスを示す図。
【図１９】同実施形態のストレージシステムとホストとによって実行される、物理ＮＡＮＤアクセスのためのライト処理の処理シーケンスを示す図。
【図２０】同実施形態のストレージシステムとホストとによって実行される、仮想ＮＡＮＤアクセスのためのライト処理の処理シーケンスを示す図。
【図２１】同実施形態のストレージシステムとホストとによって実行される、物理ＮＡＮＤアクセスのためのリード処理の処理シーケンスを示す図。
【図２２】同実施形態のストレージシステムとホストとによって実行される、仮想ＮＡＮＤアクセスのためのリード処理の処理シーケンスを示す図。
【図２３】同実施形態のストレージシステムとホストとによって実行される、物理ＮＡＮＤアクセスのための消去処理の処理シーケンスを示す図。
【図２４】同実施形態のストレージシステムとホストとによって実行される、仮想ＮＡＮＤアクセスのための消去処理の処理シーケンスを示す図。
【図２５】同実施形態のストレージシステムによって実行されるコマンド優先度管理動作を説明するための図。
【図２６】同実施形態のストレージシステムに適用されるブロック割り当て・消去コマンドを示す図。
【図２７】同実施形態のストレージシステムによって管理される使用中ブロックリスト、フリーブロックリスト、使用中仮想ブロックリスト、およびフリー仮想ブロックリストを示す図。
【図２８】同実施形態のストレージシステムとホストとによって実行されるブロック割り当て・消去処理の処理シーケンスを示す図。
【図２９】同実施形態のストレージシステムに適用される、物理ＮＡＮＤアクセス管理ＡＰＩ用のライトコマンドを示す図。
【図３０】同実施形態のストレージシステムに適用される、仮想ＮＡＮＤアクセス管理ＡＰＩ用のライトコマンドを示す図。
【図３１】ブロック内の多数のページへのデータ書き込み順序に関する制約を説明するための図。
【図３２】ページからのデータ読み出しのタイミングに関する制約を説明するための図。
【図３３】同実施形態のストレージシステムのＮＡＮＤメモリによって実行される、複数の書き込みステージを含むプログラム動作の例を説明する図。
【図３４】同実施形態のストレージシステムによって実行されるデータライト処理の手順を示すフローチャート。
【図３５】ライトコマンドのコマンド完了レスポンスの受信に応答してホストによって実行される処理の手順を示すフローチャート。
【図３６】ネースペース識別子（ＮＳＩＤ）を含むライトコマンドのコマンド完了レスポンスの受信に応答してホストによって実行される処理の手順を示すフローチャート。
【図３７】同実施形態のストレージシステムに適用される、物理ＮＡＮＤアクセス管理ＡＰＩ用のリードコマンドを示す図。
【図３８】同実施形態のストレージシステムに適用される、仮想ＮＡＮＤアクセス管理ＡＰＩ用のリードコマンドを示す図。
【図３９】同実施形態のストレージシステムとホストとによって実行されるデータリード処理の処理シーケンスを示す図。
【図４０】同実施形態のストレージシステムによって実行されるデータリード処理の手順を示すフローチャート。
【図４１】コピーすべき有効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の例を説明する図。
【図４２】検出すべき無効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の例を説明するための図。
【図４３】複数のコピー元ブロックが指定され且つコピーすべき有効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の例を説明するための図。
【図４４】複数のコピー元ブロックが指定され且つ検出すべき無効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の例を説明するための図。
【図４５】データサイズがページサイズよりも小さく且つコピーすべき有効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の例を説明するための図。
【図４６】データサイズがページサイズよりも小さく且つ検出すべき無効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の例を説明するための図。
【図４７】同実施形態のストレージシステムに適用されるデータコピーコマンドの入力パラメータを示す図。
【図４８】同実施形態のストレージシステムに適用されるデータコピーコマンドの出力パラメータ（返り値）を示す図。
【図４９】コピーすべき有効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の手順を示すフローチャート。
【図５０】検出すべき無効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の手順を示すフローチャート。
【図５１】データサイズがページサイズよりも小さく且つコピーすべき有効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の手順を示すフローチャート。
【図５２】データサイズがページサイズよりも小さく且つ検出すべき無効データ数が終了条件として指定された場合において、同実施形態のストレージシステムによって実行されるデータコピー動作の手順を示すフローチャート。
【図５３】同実施形態のストレージシステムのネームスペース管理機能を説明するための図。
【図５４】同実施形態のストレージシステムのネームスペース管理アーキテクチャを示す図。
【図５５】同実施形態のストレージシステムに適用されるネームスペース割り当てコマンドを示す図。
【図５６】同実施形態のストレージシステムによって実行されるネームスペース割り当て処理の手順を示すフローチャート。
【図５７】同実施形態のストレージシステムに適用される、ネームスペース識別子（ＮＳＩＤ）を含むブロック割り当て・消去コマンドを示す図。
【図５８】ネームスペース識別子（ＮＳＩＤ）を含むブロック割り当て・消去コマンドの受信に応答して同実施形態のストレージシステムによって実行されるブロック割り当て・消去処理の手順を示すフローチャート。
【図５９】同実施形態のストレージシステムに適用される、ネームスペース用の消去コマンドを示す図。
【図６０】ネームスペース識別子（ＮＳＩＤ）を含む消去コマンドの受信に応答して同実施形態のストレージシステムによって実行される消去処理の手順を示すフローチャート。
【図６１】同実施形態のストレージシステムに適用される、ネームスペース識別子（ＮＳＩＤ）を含むブロック返却コマンドを示す図。
【図６２】ネームスペース識別子（ＮＳＩＤ）を含むブロック返却コマンドの受信に応答して同実施形態のストレージシステムによって実行されるブロック返却処理の手順を示すフローチャート。
【図６３】同実施形態のストレージシステムに適用される、ネームスペース識別子（ＮＳＩＤ）を含む消去回数ゲットコマンドを示す図。
【図６４】同実施形態のストレージシステムによって実行される消去回数通知処理の手順を示すフローチャート。
【図６５】ホストの構成例を説明するブロック図。
【図６６】同実施形態のストレージシステムとホストとを含むコンピュータの構成例を示すブロック図。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、実施形態を説明する。  
［システム構成］
まず、図１を参照して、一実施形態に係るストレージシステムを含む情報処理システム１の構成を説明する。
【００１０】
情報処理システム１においては、このストレージシステムは、この情報処理システム１のメインストレージ（外部ストレージデバイス）として機能し得る。このストレージシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成されている。このストレージシステムは、例えば、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）３として実現されていてもよい。ＳＳＤ３は、不揮発性メモリであるＮＡＮＤフラッシュを備えたストレージデバイスである。
【００１１】
情報処理システム１は、様々なファイルのようなデータを、ストレージシステムであるＳＳＤ３を使用して管理する。この情報処理システム１は、ＳＳＤ３内の不揮発性メモリのリード動作、ライト動作、消去動作を制御するように構成されたコンピュータシステムとして機能し得る。
【００１２】
この情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、ＳＳＤ３にデータに保存するように構成された情報処理装置である。この情報処理装置の例には、サーバコンピュータ、パーソナルコンピュータ等が含まれる。
【００１３】
ＳＳＤ３は、ホスト２として機能する情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１４】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ等を使用し得る。
【００１５】
ＳＳＤ３は、コントローラ４、不揮発性メモリ（ＮＡＮＤメモリ）５、およびＤＲＡＭ６を備えていてもよい。ＮＡＮＤメモリ５は、限定されないが、複数のＮＡＮＤフラッシュメモリチップを含んでいてもよい。
【００１６】
ＮＡＮＤメモリ５はメモリセルアレイを含み、このメモリセルアレイは、多数のＮＡＮＤブロック（ブロック）Ｂ０〜Ｂｍ−１を含む。ブロックＢ０〜Ｂｍ−１は、消去単位として機能する。ブロックは「物理ブロック」または「消去ブロック」と称されることもある。
【００１７】
ブロックＢ０〜Ｂｍ−１は多数のページ（物理ページ）を含む。つまり、ブロックＢ０〜Ｂｍ−１の各々は、ページＰ０〜Ｐｎ−１を含む。同じワード線に接続された複数のメモリセルが一つのページ（物理ページ）として編成される。ＮＡＮＤメモリ５においては、データのリードおよびデータのライトはページ単位で実行される。データの消去は複数ページを含むブロック単位で実行される。
【００１８】
コントローラ４は、Toggle、ONFIのようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤメモリ５に電気的に接続されている。コントローラ４は、ＳＳＤ３の物理リソース、つまりＮＡＮＤメモリ５、を管理するための物理リソース管理機能を有していてもよい。コントローラ４の物理リソース管理機能は、ホスト２がＳＳＤ３の物理リソースを直接的にアクセスするのを助けるために使用し得る。
【００１９】
ホスト２がＳＳＤ３の物理リソースを直接的に制御およびアクセスするのを可能にするために、ホスト２においては、フラッシュトランスレーション層（ＦＴＬ）４３が実行されてもよい。ホスト２がフラッシュトランスレーション層（ＦＴＬ）４３を有するシステム構成は、ホスト２がＳＳＤ３の物理リソースを直接的に制御およびアクセスするのを可能にし、またＳＳＤ３の処理負荷を低減することを可能にする。
【００２０】
フラッシュトランスレーション層（ＦＴＬ）４３は、データ管理とＮＡＮＤメモリ５のブロック管理とを実行してもよい。
【００２１】
データ管理は、（１）論理ブロックアドレス（ＬＢＡ）それぞれとＮＡＮＤメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位で実行されるリード／ライトとブロック単位で実行される消去動作とを隠蔽するための処理、等を含み得る。ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、論理物理アドレス変換テーブルとして機能するルックアップテーブル（ＬＵＴ）４５を用いて実行される。
【００２２】
ＦＴＬ４４は、複数のネームスペースを管理するマルチネームスペース機能をサポートしてもよい。マルチネームスペース機能は、一つのストレージデバイス（ここではＳＳＤ３）をあたかも複数のドライブであるかのように扱うことを可能にするために、複数のネームスペースそれぞれに対応する複数の論理アドレス空間（ＬＢＡ空間）を管理することができる。各ネームスペースには、ＬＢＡ範囲（ＬＢＡ０〜ＬＢＡｎ−１）が割り当てられる。ＬＢＡ範囲のサイズ（つまりＬＢＡの数）はネームスペース毎に可変であってもよい。各ＬＢＡ範囲は、ＬＢＡ０から始まる。
【００２３】
ＦＴＬ４４は、クリエートされたネームスペースの数と同数のルックアップテーブル（ＬＵＴ）４５を使用することによって、ネームスペース毎に、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを管理してもよい。
【００２４】
ある特定のネームスペースに対応するルックアップテーブル（ＬＵＴ）４５においては、特定のネームスペースに関連づけられたＬＡＢ範囲内のＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングが管理されてもよい。ＬＢＡと物理アドレスとの間のマッピングの管理は、特定の管理サイズ単位で行われる。特定の管理サイズ単位としてはシステム設計に応じた様々なサイズを使用することができる。特定の管理サイズ単位の例は、制限されないが、例えば、４Ｋバイトであってもよい。
【００２５】
ある特定のＬＢＡに対応する物理アドレスは、この特定のＬＢＡのデータが格納されているＮＡＮＤメモリ５内の位置（物理記憶位置）を示す。物理アドレスは、ブロックアドレスとページアドレスとの組み合わせによって表現されてもよい。ブロックアドレスは、個々のブロックを指定するアドレスであり、「物理ブロックアドレス」または「ブロック番号」とも称される。ページアドレスは一つのブロック内の個々のページを指定するアドレスであり、「物理ページアドレス」または「ページ番号」とも称される。
【００２６】
ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。換言すれば、データは、消去状態のページ（利用可能ページ）に対してのみ書き込むことができる。データが書き込まれたページは有効ページとなる。
【００２７】
一方、データの最少消去単位は、複数ページを含むブロックである。
【００２８】
このため、ＦＴＬ４４は、同じＬＢＡへのライト（上書き）を、ＮＡＮＤメモリ５上の異なるページにマッピングする。つまり、ＦＴＬ４４は、データ（ライトデータ）を、このデータのＬＢＡとは無関係に、次の利用可能ページにライトする。そして、ＦＴＬ４４は、ルックアップテーブル（ＬＵＴ）４５を更新して、このＬＢＡを、このデータが実際にライトされたこのページに対応する物理アドレスに関連付ける。元のページ（つまりこのＬＢＡが関連付けられていた古いデータ）は、無効化される。
【００２９】
ＦＴＬ４４は、有効データと無効データとを管理することができる。有効／無効データは、物理アドレスそれぞれに対応する有効／無効フラグを保持するページ管理テーブルを使用して管理してもよい。各有効／無効フラグは、特定の管理サイズ単位（例えば、４Ｋバイト）で、物理アドレスそれぞれに対応するデータが有効であるか無効であるかを示してもよい。データが有効であるとは、そのデータが最新のデータであることを意味する。データが無効であるとは、そのデータが更新（書き替え）によってもはや利用されないことを意味する。
【００３０】
ＦＴＬ４４によって実行されるブロック管理の例には、ウェアレベリングと、ガベージコレクション等が含まれていてもよい。ウェアレベリングは、ブロックそれぞれの消去回数を平準化するための動作である。ガベージコレクションは、ＮＡＮＤメモリ５内のフリースペースを作り出すための動作である。このガベージコレクションは、有効データと無効データとが混在する幾つかのブロック内の全ての有効データを別のブロック（コピー先フリーブロック）にコピーする。そして、ガベージコレクションは、ルックアップテーブル（ＬＵＴ）４５を更新して、コピーされた有効データのＬＢＡそれぞれを正しい物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみなったブロックはフリーブロックとして解放される。これによって、このブロックは消去後に再利用することが可能となる。
【００３１】
ホスト２は、ライトコマンド、リードコマンド、消去コマンドのような様々なコマンド（アクセス要求）をＳＳＤ３に送出する。上述したように、この情報処理システム１においては、ＦＴＬ４４がホスト２上で実行されるので、これらコマンドの各々は、ＬＢＡではなく、ＮＡＮＤメモリ５上の位置を指定する物理アドレス（ブロックアドレス、ページアドレス）を含むことができる。
【００３２】
次に、コントローラ４の構成について説明する。
【００３３】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００３４】
ホストインタフェース１１は、ホスト２から様々なコマンド（ライトコマンド、リードコマンド、消去コマンド、等）を受信する。
【００３５】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、ＮＡＮＤメモリ５を管理する物理リソース管理処理、ホスト２から受信される様々なコマンドを処理するためのコマンド処理等を実行する。物理リソース管理処理およびコマンド処理は、ＣＰＵ１２によって実行されるファームウェアによって制御されてもよい。
【００３６】
このファームウェアは、ホスト２がＮＡＮＤメモリ５を制御するのを助けるための処理を実行することができる。
【００３７】
このファームウェアは、ＣＰＵ１２を、物理ＮＡＮＤアクセス管理アプリケーションプログラムインタフェース（ＡＰＩ）２１、仮想ＮＡＮＤアクセス管理アプリケーションプログラムインタフェース（ＡＰＩ）２２、ブロック情報管理部２３、バッドブロック管理部２４、ブロック割り当て・消去制御部２５、ライト制御部２６、リード制御部２７、データコピー制御部２８、ネームスペース制御部２９として機能させる。
【００３８】
＜物理ＮＡＮＤアクセス管理ＡＰＩと仮想ＮＡＮＤアクセス管理ＡＰＩ＞
これら物理ＮＡＮＤアクセス管理ＡＰＩ２１および仮想ＮＡＮＤアクセス管理ＡＰＩ２２の各々は、ホスト２とＳＳＤ３との間の通信に関するソフトウェアインタフェースであり、ホスト２がＮＡＮＤメモリ５内のブロックを直接的に制御することを可能にする。物理ＮＡＮＤアクセス管理ＡＰＩ２１においては、ホスト２によるＮＡＮＤメモリ５内のブロックの制御は、個々のブロックの単位で、つまり、物理ブロックの単位で実行される。一方、仮想ＮＡＮＤアクセス管理ＡＰＩ２２においては、ホスト２によるＮＡＮＤメモリ５内のブロックの制御は、基本的には、複数個のブロック（複数個の物理ブロック）を纏めことによって得られるブロックグループの単位で実行される。複数個のブロックを含むブロックグループは、以下では、「仮想ブロック」とも称する。
【００３９】
物理ＮＡＮＤアクセス管理ＡＰＩ２１、仮想ＮＡＮＤアクセス管理ＡＰＩ２２のどちらにおいても、アクセスされるべきＮＡＮＤメモリ５上の位置は、ホスト２からのコマンドに含まれる物理アドレス（ブロックアドレス、ページアドレス）によって指定され得る。
【００４０】
ＣＰＵ１２は、ＮＡＮＤメモリ５内の複数のブロック（物理ブロック）を、複数の第１ブロックと、複数の第２ブロックとに分類する。
【００４１】
複数の第１ブロックは、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロックであり、これらブロックはブロック単独（単一の物理ブロック）の単位でＮＡＮＤメモリ５をアクセスするためのブロックとして使用される。
【００４２】
複数の第２ブロックは、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロックであり、複数個のブロックを各々が含む複数のブロックグループ（複数の仮想ブロック）として編成されるブロックである。これら第２ブロックは、複数個のブロック（複数個の物理ブロック）を纏めることによって得られるブロックグループの単位でＮＡＮＤメモリ５をアクセスするためのブロックとして使用される。
【００４３】
ホスト２が物理ＮＡＮＤアクセス管理ＡＰＩ２１を使用してＳＳＤ３をアクセスするケースにおいては、ＣＰＵ１２は、ホスト２からの、複数の第１ブロック内の一つのブロック（物理ブロック）を指定する物理アドレスを含む第１のリード、ライトまたは消去のコマンドの受信に応答して、この第１ブロックに対するリード動作、ライト動作、または消去動作を実行する。
【００４４】
ホスト２が仮想ＮＡＮＤアクセス管理ＡＰＩ２２を使用してＳＳＤ３をアクセスするケースにおいては、ＣＰＵ１２は、複数の仮想ブロック内の一つの仮想ブロックを指定する物理アドレスを含む第２のリード、ライトまたは消去のコマンドの受信に応答して、一つの仮想ブロックに対するリード動作、ライト動作、または消去動作を実行する。
【００４５】
この仮想ＮＡＮＤアクセス管理ＡＰＩ２２においては、単一のブロックの単位では無く、仮想ブロックを構成する複数個のブロックの纏まりの単位でリード動作、ライト動作、または消去動作を実行することができる。よって、仮想ＮＡＮＤアクセス管理ＡＰＩ２２は、ユーザデータのような比較的大きいサイズのデータを高速にリード／ライト／消去可能なインタフェースとして利用することができる。例えば、ページサイズが１６Ｋバイトであり、一つの仮想ブロックが４個のブロック（４個の物理ブロック）から構成されているケースにおいては、最大で６４Ｋバイトのバンド幅を実現することができる。また、例えば、ページサイズが１６Ｋバイトであり、一つの仮想ブロックが８個のブロックから構成されているケースにおいては、最大で１２８Ｋバイトのバンド幅を実現することができる。
【００４６】
一方、物理ＮＡＮＤアクセス管理ＡＰＩ２１では、単一のブロックに対するリード動作、ライト動作、または消去動作が実行される。物理ＮＡＮＤアクセス管理ＡＰＩ２１において保証される最大バンド幅は、仮想ＮＡＮＤアクセス管理ＡＰＩ２において保証される最大バンド幅よりも狭い。その反面、物理ＮＡＮＤアクセス管理ＡＰＩ２１は、仮想ＮＡＮＤアクセス管理ＡＰＩ２２よりも小さい粒度でリード／ライト／消去を制御することができる。よって、物理ＮＡＮＤアクセス管理ＡＰＩ２１は、例えば、メタデータのような比較的小さいサイズのデータをＮＡＮＤメモリ５上の所望の位置に配置するというデータ配置制御、および小さなデータサイズの粒度でアクセス（リード／ライト／消去）するためのインタフェースとして有用である。
【００４７】
ホスト２は、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロックそれぞれを指定する物理アドレス、および仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の仮想ブロックそれぞれを指定する物理アドレスを、ＳＳＤ３から予め取得してよいし、あるいは、ある一つのブロックまたはある一つの仮想ブロックの割り当てをＳＳＤ３に要求することによってある一つのブロックを指定する物理アドレスまたはある一つの仮想ブロックを指定する物理アドレスをＳＳＤ３から取得してもよい。
【００４８】
一つの仮想ブロックに含まれる複数個のブロックの組み合わせは、限定されないが、例えば、並列（同時）アクセス可能な複数個のブロック（複数個の物理ブロック）によって一つの仮想ブロックが形成されてもよい。
【００４９】
例えば、ＮＡＮＤインタフェース１３が複数のチャンネルを有しており、且つ各チャンネルに１つ以上のＮＡＮＤフラッシュチップが接続されている場合には、異なるチャンネルにそれぞれ接続されたＮＡＮＤフラッシュチップから一つずつ選択された、チャンネル数分のブロックによって一つの仮想ブロックが構成されてもよい。これにより、ＮＡＮＤメモリ５の構造上の最大バンド幅に対応するアクセス速度を保証することができる。
【００５０】
メタデータは、ファイル管理情報であってもよい。ファイル管理情報は、ファイル内のデータの記憶位置を示すデータ、このファイルの作成日時を示すデータ、このファイルが更新された日時を示すデータ、またはこのファイルが最後にリードされた日時を示すデータ、の少なくとも一つを含んでいてもよい。
【００５１】
物理ＮＡＮＤアクセス管理ＡＰＩ２１用のリードコマンド、ライトコマンド、消去コマンドは、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のリードコマンド、ライトコマンド、消去コマンドと異なるオペレーションコードを有していてもよい。
【００５２】
＜ブロック情報管理＞
ブロック情報管理部２３は、ＮＡＮＤメモリ５内の個々のブロックおよび個々の仮想ブロックに関する情報を管理し、個々のブロックおよび個々の仮想ブロックに関する情報をホスト２に提供することができる。個々のブロックおよび個々の仮想ブロックに関する情報は、個々のブロックそれぞれの消去回数、個々の仮想ブロックそれぞれの消去回数を含んでいてもよい。
【００５３】
データセンタ等においては、あるサーバコンピュータに接続されているＳＳＤが、別のサーバコンピュータ等において過去に使用されていた別のＳＳＤに交換されるというケースがあり得る。
【００５４】
ＳＳＤ３があるサーバコンピュータから別のサーバコンピュータに移設された場合、ＳＳＤ３のブロック情報管理部２３は、ＮＡＮＤメモリ５内の個々のブロックおよび個々の仮想ブロックの使用履歴に関する情報（現在の消去回数、等）を、この別のサーバコンピュータに提供することができる。よって、この別のサーバコンピュータは、ＳＳＤ３の過去の使用履歴をも考慮した状態で個々のブロックまたは個々の仮想ブロックの実際の消去回数を正しく理解できるので、例えば、ＳＳＤ３から取得した消去回数の情報に基づいてウェアレベリングのための処理等を精度良く行うことができる。
【００５５】
＜バッドブロック管理＞
バッドブロック管理部２４は、プライマリー欠陥リスト（「工場出荷欠陥リスト」とも云う）によって指定される使用できない不良ブロック（プライマリーバッドブロック）、およびシステム稼動中にホスト２によって指定される不良ブロック（グロウンバッドブロック）を管理するための処理を実行することができる。
【００５６】
例えば、プライマリー欠陥リストによってまたはホスト２によってある仮想ブロック内の一つのブロックが使用できない不良ブロック（バッドブロック）として指定された場合、バッドブロック管理部２４は、仮想ブロック内のバッドブロックを仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の別のブロックに置き換える処理を実行してもよい。この別のブロックは、バッドブロック以外のこの仮想ブロック内の他の全てのブロックと並列アクセス可能なブロック群の中から選択されてもよい。
【００５７】
＜ブロック割り当て・消去＞
ブロック割り当て・消去制御部２５は、有効データを含むブロックそれぞれと有効データを含まないブロック（フリーブロック）それぞれとを管理することができる。有効データを含むブロックとは、ホスト２を介してＳＳＤ３を利用するユーザによって使用されているブロックを意味する。幾つかのクライアント端末５１がネットワーク５０を介してホスト２に接続されている場合には、これらクライアント端末５１のユーザがホスト２を介してＳＳＤ３を利用するユーザであってもよい。有効データを含まないブロックとは、どのユーザによっても使用されていないブロックを意味する。
【００５８】
さらに、ブロック割り当て・消去制御部２５は、有効データを含む仮想ブロックそれぞれと有効データを含まない仮想ブロック（フリー仮想ブロック）それぞれとを管理することもできる。
【００５９】
ホスト２から一つのブロックの割り当てが要求された場合、ブロック割り当て・消去制御部２５は、フリーブロックの中から一つのブロック（物理ブロック）をホスト２に割り当ててもよく、そしてこの割り当てられたブロックを指定する物理アドレス（ブロックアドレス）をホスト２に通知してもよい。以降、ホスト２は、この通知された物理アドレスを使用することによって、この割り当てられたブロックをアクセス（リード／ライト／消去）することができる。
【００６０】
ホスト２から一つの仮想ブロックの割り当てが要求された場合、ブロック割り当て・消去制御部２５は、フリー仮想ブロックの中から一つの仮想ブロックをホスト２に割り当ててもよく、そしてこの割り当てられた仮想ブロックを指定する物理アドレス（仮想ブロックアドレス）をホスト２に通知してもよい。以降、ホスト２は、この通知された物理アドレスを使用することによって、この割り当てられた仮想ブロックをアクセス（リード／ライト／消去）することができる。
【００６１】
仮想ブロックをアクセスするための物理アドレスは、仮想ブロックアドレス、仮想ブロック内ブロック番号、およびページアドレスを含んでいてもよい。仮想ブロックアドレスは仮想ブロックそれぞれに割り当てられた仮想ブロック番号のいずれかを指定する。仮想ブロック内ブロック番号は、アクセス対象ブロックが仮想ブロック内の何番目のブロックであるかを指定する。ページアドレスはアクセス対象ブロック内のページ番号を示す。
【００６２】
このブロック割り当て・消去制御部２５は、ホスト２自身が有効データを含むブロックと有効データを含まないブロックとを管理すること無く、有効データを含まないブロックをホスト２が取得することを可能にする。よって、ホスト２によるＮＡＮＤメモリ５の管理コストを低減することができる。
【００６３】
ブロック（または仮想ブロック）の割り当て要求は、ブロック（または仮想ブロック）の割り当てのみを要求するコマンドであってもよい。あるいは、ブロック（または仮想ブロック）の割り当てとブロック（または仮想ブロック）の消去との双方を要求するコマンド、つまりブロック割り当て・消去コマンド、または仮想ブロック割り当て・消去コマンド、が使用されてもよい。
【００６４】
ブロック割り当て・消去コマンドは、ブロックの割り当てを要求するコマンドの機能とブロックの消去を要求するコマンドの機能とを組み合わせた一つのコマンドである。同様に、仮想ブロック割り当て・消去コマンドは、仮想ブロックの割り当てを要求するコマンドの機能と仮想ブロックの消去を要求するコマンドの機能とを組み合わせた一つのコマンドである。
【００６５】
ホスト２からのブロック割り当て・消去コマンドの受信に応答して、ブロック割り当て・消去制御部２５は、フリーブロックの中から一つのブロックをホスト２に割り当て、そしてこの割り当てられたブロックを自動的に消去し、そしてこの割り当ておよび消去されたブロックを指定する物理アドレス（ブロックアドレス）をホスト２に通知する。
【００６６】
各フリーブロックは有効データを含まないが、いずれかのユーザが過去に書き込んだ古いデータを保持している場合がある。したがって、割り当てられたブロックを自動的に消去する上述の機能により、ユーザデータの漏洩を未然に防止することができる。また、ホスト２は、割り当てられたブロックを消去するための消去コマンドをＳＳＤ３に送信すること無く、この割り当てられたブロックへのデータの書き込みを即座に開始することができる。
【００６７】
ホスト２からの仮想ブロック割り当て・消去コマンドの受信に応答して、ブロック割り当て・消去制御部２５は、フリー仮想ブロックの中から一つの仮想ブロックをホスト２に割り当て、この割り当てられた仮想ブロックを自動的に消去し、そしてこの割り当ておよび消去された仮想ブロックを指定する物理アドレス（仮想ブロックアドレス）をホスト２に通知する。
【００６８】
＜ライト制御＞
ライト制御部２６は、ある特定のブロックを指定するブロックアドレスとこの特定のブロック内の複数ページ内のある特定のページを指定するページアドレスとを含むライトコマンドを受信し、このライトコマンドによって指定されるデータを、特定のブロック内の特定のページに書き込む（直接アドレス指定モード）。ライト制御部２６は、物理ＮＡＮＤアクセス管理ＡＰＩ２１および仮想ＮＡＮＤアクセス管理ＡＰＩ２２の双方をサポートする。物理ＮＡＮＤアクセス管理ＡＰＩ２１においては、特定のブロックは特定の物理ブロックであり、仮想ＮＡＮＤアクセス管理ＡＰＩ２２においては、特定のブロックは、特定の仮想ブロック内のアクセス対象ブロックである。
【００６９】
ライト制御部２６は、読み出し可能なデータを保持するブロック内の最新のページをホスト２に通知する「読み出し可能ページ通知機能」を有している。ＮＡＮＤメモリ５として使用されるＮＡＮＤメモリの種類によっては、たとえあるブロックの最初のページにデータが書かれても、このブロック内の後続する幾つかのページにデータがさらに書き込まれるまでは、このブロックの最初のページからデータを正常に読み出すことができない場合がある。もし最初のページに後続する幾つかのページにデータが書き込まれる前にこの最初のページがホスト２によってリードアクセスされたならば、ＥＣＣによって訂正不能な誤ったデータが最初のページから読み出されてしまい、ホスト２にリードエラーを示すステータスが返されてしまう場合がある。最初のページのデータは後続する幾つかのページへのデータ書き込み後に正常にリードできるにもかかわらず、ホスト２は、このリードエラーを物理的なメモリ欠陥によるものと誤って認識してしまうかもしれない。
【００７０】
同様に、このブロックの２番目のページに書かれたデータも、この２番目のページに後続する幾つかのページにデータが書き込まれるまでは、正常に読み出すことができない場合がある。各ページのデータが読み出し可能となるタイミングはＮＡＮＤメモリによって異なる。
【００７１】
ライト制御部２６は、読み出し可能なデータを保持するブロック内の最新のページをホスト２に通知することができる。例えば、書き込み対象ブロック内の幾つかのページにデータが書かれることによって書き込み対象ブロック内の最初のページが読み出し可能となった時には、ライト制御部２６は、最初のページのページアドレスを読み出し可能なデータを保持する最新のページとしてホスト２に通知してもよい。書き込み対象ブロックへのさらなる書き込みによって書き込み対象ブロック内の２番目のページが読み出し可能となった時には、ライト制御部２６は、２番目のページのページアドレスを読み出し可能なデータを保持する最新のページとしてホスト２に通知してもよい。
【００７２】
より詳しくは、ライト制御部２６は、以下の動作を実行する。
【００７３】
ライト制御部２６は、ホスト２から、ＮＡＮＤメモリ５の複数のブロック内の第１ブロックを指定するブロックアドレスとこの第１ブロック内の複数ページ内の第１ページを指定するページアドレスとを含むライトコマンドを受信する。ライト制御部２６は、このライトコマンドによって指定されるデータを、第１ブロック内の第１ページに書き込む。そして、ライト制御部２６は、第１ページへのデータの書き込みの前にホスト２によってデータが書き込まれた第１ブロック内のページ群の中で、第１ページへのデータの書き込みによって読み出し可能となった最新のページを示すページアドレスを、ホスト２に通知する。
【００７４】
ホスト２は、この通知に基づいて、データをライトしたブロック内のどのページまでがリード可能状態であるかを認識することができる。よって、この「読み出し可能ページ通知機能」により、ホスト２がＮＡＮＤメモリ５を直接アクセスするのを助けることができる。
【００７５】
ライト制御部２６は、さらに、「不正書き込み順序警告」機能を有している。「不正書き込み順序警告」機能は、ブロック内では最初のページから最後のページに向けてシーケンシャルにデータを書き込むことが必要とされるという書き込み順序の制約がホスト２によって守られなかった場合に不正書き込み順序の警告をホスト２に返す機能である。
【００７６】
ホスト２はデータが書き込まれるべき物理アドレス（ブロックアドレスおよびページアドレス）を指定することができる。このことは、ホスト２が、誤った書き込み順序でライトアクセスを実行する可能性があることを意味する。この「不正書き込み順序警告」機能により、ホスト２がＮＡＮＤメモリ５へのライトを直接コントロールするのを支援することができる。
【００７７】
より詳しくは、ライト制御部２６は、以下の動作を実行する。
【００７８】
ライト制御部２６は、ホスト２から、ＮＡＮＤメモリ５の複数のブロック内の第１ブロックを指定するブロックアドレスと第１ブロック内の複数ページ内の第１ページを指定するページアドレスとを含むライトコマンドを受信する。ライト制御部２６は、このライトコマンド内のページアドレスに基づいて、このライトコマンドが、第１ブロック内の複数ページ内の最初のページから最後のページの順でデータを書き込むという書き込み順序に関する制約を満たしているか否かを判定する。このライトコマンドが書き込み順序に関する制約を満たしている場合、ライト制御部２６は、このライトコマンドによって指定されるデータを、第１ブロック内の第１ページにデータを書き込む。このライトコマンドが書き込み順序に関する制約を満たしていない場合、ライト制御部２６は、このライトコマンドによって指定されるデータを、第１ブロック内の第１ページにデータを書き込まずに、不正書き込み順序の警告を含むコマンド完了レスポンスをホスト２に通知する。
【００７９】
ライト制御部２６は、さらに、上述の「直接アドレス指定モード」に加え、「自動アドレス生成モード」をサポートしてもよい。
【００８０】
直接アドレス指定モードは、ホスト２が、データがライトされるべきＮＡＮＤメモリ５内のブロックとこのブロック内のページとの双方を直接的に指定するライトモードである。この直接アドレス指定モードにおいては、ホスト２は、ブロックアドレスおよびページアドレスの双方を含むライトコマンドをＳＳＤ３に送信する。
【００８１】
一方、自動アドレス生成モードは、ホスト２が、データがライトされるべきＮＡＮＤメモリ５上のブロックのみを指定するライトモードである。この指定されるブロックは物理ブロックであってもよいし、仮想ブロック内のアクセス対象ブロックであってもよい。
【００８２】
自動アドレス生成モードにおいて利用されるライトコマンドは、ブロックアドレスのみを含み、ページアドレスを含まない。この指定されたブロック内の書き込み対象ページのページアドレスは、ＳＳＤ３によって自動的に発行される。データが書き込まれたページを示すページアドレス、つまり自動発行されたページアドレスは、ＳＳＤ３からホスト２に通知される。
【００８３】
上述の「読み出し可能ページ通知機能」は、自動アドレス生成モードにおいて利用可能である。自動アドレス生成モードにおいては、ライト制御部２６は、以下の動作を実行することができる。
【００８４】
ライト制御部２６は、ホスト２から、ブロックアドレスを含み、ページアドレスを含まないライトコマンドを受信する。ライト制御部２６は、ブロックアドレスによって指定される第１ブロック内の複数のページ内の最初のページから最後のページの順でデータを書き込むという書き込み順序に従って、第１ブロック内の複数のページ内の次の利用可能ページを指定するページアドレスを自動発行する。ライト制御部２６は、ライトコマンドによって指定されるデータを、第１ブロック内の次の利用可能ページ（自動発行されたページアドレスによって指定されるページ）に書き込む。ライト制御部２６は、次の利用可能ページへのデータの書き込みの前にホスト２によってデータが書き込まれた第１ブロック内のページ群の中で、次の利用可能ページへのデータの書き込みによって読み出し可能となった最新のページを示すページアドレスを、ホスト２に通知する。
【００８５】
ライト制御部２６は、さらに、データが書き込まれたページが現在の書き込み対象ブロックの最後のページに達したことをホスト２に通知する機能を有している。この通知に応じて、ホスト２は、新たなブロックの割り当てが必要なことを認識することができる。
【００８６】
ライト制御部２６は、さらに、データが書き込まれた現在の書き込み対象ブロック内のページ数が特定ページ数に達したことをホスト２に通知する機能を有している。ホスト２は、各ブロック内の特定のページ、例えば最後のページ、に特定の管理情報（例えばメタデータ）を書き込むことを望む場合がある。したがって、現在の書き込み対象ブロック内においてデータが書き込まれたページ数が「特定ページ数」に達したことをホスト２に通知することにより、この書き込み対象ブロックの最後のページなどに特定の管理情報を書き込むというホスト２の作業を助けることができる。「特定ページ数」は、ホスト２からのライトコマンドによって指定できる。
【００８７】
＜リード制御＞
リード制御部２７がホスト２からリードコマンドを受信した時、リード制御部２７は、このリードコマンド内のブロックアドレスおよびページアドレスによって指定されるブロック内のページからデータをリードする。この指定されるブロックは、物理ＮＡＮＤアクセス管理ＡＰＩ２１用の物理ブロックであってもよいし、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の仮想ブロック内のアクセス対象ブロックであってもよい。
【００８８】
＜データコピー制御＞
データコピー制御部２８は、ホスト２がガベージコレクションを実行するのを支援するためのデータコピー動作を実行する。データコピー動作は、ホスト２から受信されるデータコピーコマンドに基づいて、ＳＳＤ３においてローカルに実行される。つまり、ＮＡＮＤメモリ５の特定のコピー元ブロックから特定のコピー先ブロックへデータをコピーするためのデータ転送動作は、ホスト２を経由せずに、ＳＳＤ３内において実行される。
【００８９】
このため、ＮＡＮＤメモリ５の特定のコピー元ブロックからリードされるデータをホスト２のメモリに転送し、且つこのデータ内の有効データをホスト２のメモリからＮＡＮＤメモリ５の特定のコピー先ブロックに書き込むという処理を行わずとも、ガベージコレクションのために必要な有効データをＮＡＮＤメモリ５内の特定のブロックに集める動作をＳＳＤ３内でローカルに実行することができる。
【００９０】
データコピーコマンドは、コピー元ブロック、コピー元ブロック内のコピー開始ページ、コピー先ブロック、コピー先ブロック内の転送開始ページ、コピー終了条件（コピー先ブロックにコピーすべき有効データ数、またはコピー終了までに検出すべき無効データ数）を指定することができる。ここで、有効データ数は有効ページ数であってもよく、また無効データ数は無効ページ数であってよい。コピー元ブロックは、物理ＮＡＮＤアクセス管理ＡＰＩ２１用の物理ブロックであってもよいし、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の仮想ブロック内の一つのブロックであってもよい。同様に、コピー先ブロックも、物理ＮＡＮＤアクセス管理ＡＰＩ２１用の物理ブロックであってもよいし、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の仮想ブロック内の一つのブロックであってもよい。
【００９１】
コピー開始ページは、コピー元ブロック内のコピー対象の最初のページを示す。転送開始ページは、コピー先ブロック内の転送対象の最初のページを示す。これらコピー開始ページおよび転送開始ページの指定により、コピー元ブロック内の任意のページ範囲内の有効データを、コピー先ブロック内の任意のページ範囲内にコピー（移動）するというきめ細かなコピー動作を実行することができる。
【００９２】
また、データコピー動作においては、データコピー制御部２８は、無効データのコピーを自動的にスキップし、特定のページ範囲内の有効データのみをコピー先ブロックにコピーする。これにより、ホスト２がどのデータをどこにコピーすべきかを指定することなく、ガベージコレクションのために必要な有効データのコピーを実行することができる。
【００９３】
＜ネームスペース制御＞
ネームスペース制御部２９は、複数のネームスペースを個別に扱うためのマルチネームスペース機能をサポートすることができる。マルチネームスペース機能は、ＮＡＮＤメモリ５を複数の領域に論理的に分割すること可能にするために、複数の論理アドレス空間（ＬＢＡ空間）がそれぞれ割り当てられた複数のネームスペースを管理することができる。各ネームスペースはＮＡＮＤメモリ５内の一つの領域として機能する。ある特定のネームスペースに関連づけられたデータは、この特定のネームスペースに割り当てられたブロック群に書き込まれる。
【００９４】
ネームスペース制御部２９は、ネームスペース割り当てコマンド等をサポートする。
【００９５】
ネームスペース割り当てコマンドは、ＳＳＤ３に対して、個々のネームスペースのために確保すべきブロックの個数を要求する。確保すべきブロックの個数は、物理ＮＡＮＤアクセス管理ＡＰＩ２１用の物理ブロックの個数であってもよいし、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の仮想ブロックの個数であってもよい。
【００９６】
ホスト２からのネームスペース割り当てコマンドの受信に応答して、ネームスペース制御部２９は、特定のネームスペースに対して、ホスト２によって指定された個数のブロックを確保（割り当て）することができる。
【００９７】
ネームスペース割り当てコマンドは、ホスト２（ホストソフトウェア）が、ホスト２内のワークロードに適した個数のブロックを個々のネームスペースのために確保することを可能にする。例えば、ランダムライトアクセスを多く使用するワークロードに関連づけられたネームスペースに関しては、このネームスペース用の論理ブロックアドレス（ＬＢＡ）の数に対応する容量よりも多くの容量に相当する個数のブロックを確保してもよい。例えば、あるネームスペース用の論理ブロックアドレス（ＬＢＡ）の数（ＬＢＡ範囲）に対応する容量が１００Ｇバイトであり、このネームスペース用に１５０Ｇバイトに相当する個数のブロックが確保されたならば、ＬＢＡ範囲に対応する容量（ユーザスペースの容量）の５０パーセント分のサイズを有するオーバープロビジョン領域を確保することができる。
【００９８】
オーバープロビジョニングは、ホスト２からはその利用可能ユーザスペース（ユーザアクセス可能ＬＢＡスペース）として見えないストレージ容量を、ホスト２に割り当てることを意味する。ホスト２からはユーザアクセス可能ＬＢＡスペースとして見えないストレージ容量が割り当てられたスペースが、オーバープロビジョン領域である。オーバープロビジョニングにより、ユーザアクセス可能ＬＢＡスペース（ユーザ領域の容量）を超える容量のブロック群を特定のネームスペースに割り当てることができる。
【００９９】
更新頻度の高いデータを扱うネームスペースに関しては、データの書き替えが多発するため、多くのブロックがフラグメント化される場合がある。この結果、ガベージコレクションの実行回数が増加され、これによってライトアンプリフィケーションが増加されるので、ブロックそれぞれの消去回数も増加する。消去回数の増加は、ＳＳＤ３の耐久性および寿命の劣化を引き起こす要因となる。
【０１００】
多くのオーバープロビジョン領域が割り当てられたネームスペースに関しては、ガベージコレクションの開始タイミングを遅らせることができる。例えば、１００Ｇバイトのユーザスペース（ＬＢＡ範囲）を有する特定のネームスペースに１５０Ｇバイトに相当する個数のブロック（または仮想ブロック）が確保されているケースを想定する。この場合、たとえ１００Ｇバイト分の個数のブロックがデータで満たされて、この結果、たとえ、これらブロックがそのブロックの消去無しでは利用可能ページを含まない状態になっても、これらブロックの代わりにオーバープロビジョン領域に対応するブロックそれぞれをデータのライトに使用することができる。よって、この特定のネームスペース用のガベージコレクション動作が実行されるタイミングを遅らせることができる。オーバープロビジョン領域のブロック群にデータがライトされるにつれ、ユーザスペースのブロック群内のデータはその更新によって無効化されるかもしれない。全てのデータが無効化されたブロックはそのガベージコレクションなしで再利用することができる。よって、オーバープロビジョン領域のサイズを最適化することにより、消去回数の増加を抑制することができる。
【０１０１】
さらに、ネームスペース制御部２９は、個々のネームスペース毎に消去回数（合計消去回数ともいう）をカウントし、カウントされたネームスペース毎の消去回数をホスト２に通知することができる。
【０１０２】
ホスト２（ホスト２の管理者）は、特定のネームスペースに対応する合計消去回数を、この特定のネームスペース（このネームスペースを使用しているユーザ）によってＮＡＮＤメモリ５がどのくらい消耗されているかを判定するための指標として利用することができる。ホスト２は、ネームスペースそれぞれに対応する合計消去回数を、これらネームスペースの管理に活用することができる。
【０１０３】
例えば、合計消去回数が多いネームスペースに関しては、ホスト２は、このネームスペース用に確保すべきブロックの数を追加してもよい。この場合、ホスト２は、ネームスペース割り当てコマンドをＳＳＤ３に送信することによって、特定の数のブロックの追加をＳＳＤ３に要求してもよい。このネームスペースに特定の数のブロックが追加されることによってこのネームスペースのオーバープロビジョン領域の量が増加されるので、このネームスペースに対応するライトアンプリフィケーションを抑制することができ、結果としてＳＳＤ３の寿命を最大化することができる。
【０１０４】
データセンタ等においては、ストレージスペースそれぞれをユーザに有料で貸し出すというレンタルサービスが行われるケースがある。この場合、ＮＡＮＤメモリ５は複数のネームスペースにそれぞれ対応する複数の領域（ストレージスペース）に論理的に分割される。あるユーザは、あるネームスペースの識別子に関連づけられたストレージスペースをアクセスし、別のユーザは、別のネームスペースの識別子に関連づけられた別のストレージスペースをアクセスする。データセンタ事業者は、個々のネームスペースの合計消去回数、つまり個々のネームスペースの消耗度を、個々のストレージスペースの使用料（レンタル料）に反映させても良い。例えば、合計消去回数が非常に多いネームスペースを使用しているユーザについては、このネームスペースの容量（このネームスペースのために確保されたブロックの数に相当する容量）から決定される基本使用料に加え、消耗度に応じた追加料金を課金してもよい。
【０１０５】
次に、コントローラ４内の他のコンポーネントについて説明する。
【０１０６】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤメモリ５を制御するように構成されたＮＡＮＤコントローラである。ＮＡＮＤインタフェース１３は、複数のチャンネルを有していてもよい。各チャンネルには、幾つかのＮＡＮＤメモリチップが接続される。コントローラ４は、ＮＡＮＤインタフェース１３の異なるチャンネルに接続された複数のＮＡＮＤメモリチップを並列にアクセスすることができる。
【０１０７】
ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭコントローラである。
【０１０８】
ＤＲＡＭ６の記憶領域の一部は、ＮＡＮＤメモリ５にライトすべきデータを一時的に格納するためのライトバッファ（ＷＢ）３１として利用されてもよい。また、ＤＲＡＭ６の記憶領域は、データコピー動作中にコピー元ブロックからリードされたデータを一時的に格納するためのコピーバッファ３２として利用されてもよい。また、ＤＲＡＭ６の記憶領域は、様々な管理テーブルを含むシステム管理情報３３の格納のために用いられてもよい。システム管理情報３３は、ＳＳＤ３の電源のオン時にＮＡＮＤメモリ５からＤＲＡＭ６にロードされてもよい。ＳＳＤ３の電源がオフされるべき時、更新されたシステム管理情報３３は、ＮＡＮＤメモリ５に保存されてもよい。システム管理情報３３は、ＮＡＮＤメモリ５のブロック構造（または仮想ブロック構造）と、消去回数のようなＮＡＮＤメモリ５の使用履歴情報とを含んでいてもよい。
【０１０９】
次に、ホスト２の構成について説明する。
【０１１０】
ホスト２は、様々なプログラムを実行可能な情報処理装置である。ホスト２によって実行されるプログラムには、アプリケーションソフトウェアレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３、および上述のＦＴＬ４４が含まれる。
【０１１１】
一般に知られているように、オペレーティングシステム（ＯＳ）４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションおよび各クライアント端末５１が、ホスト２のハードウェアおよびＳＳＤ３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【０１１２】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。例えば、ＺＦＳ、Ｂｔｒｆｓ、ＸＦＳ、ｅｘｔ４、ＮＴＦＳなどがファイルシステム４３として使用されても良い。あるいは、ファイルオブジェクトシステム、Key Value Store Systemがファイルシステム４３として使用されても良い。
【０１１３】
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ４１上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【０１１４】
アプリケーションソフトウェアレイヤ４１がリード要求、ライト要求、消去要求のようなリクエストをＳＳＤ３に送出することが必要な時、アプリケーションソフトウェアレイヤ４１は、ＯＳ４２にそのリクエストを送信する。ＯＳ４２はそのリクエストをファイルシステム４３を介してＦＴＬ４４に送信する。ＦＴＬ４４は、そのリクエストを、コマンド（リードコマンド、ライトコマンド、消去コマンド、等）にトランスレートする。この場合、ＦＴＬ４４は、リクエストに含まれるＬＢＡをＮＡＮＤメモリ５の物理アドレスに変換する論理物理アドレス変換を行う。複数のネームスペースそれぞれに対応する複数のＦＴＬ４４が実行されてもよい。この場合、論理アドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、ネームスペース毎に異なるＬＵＴ４５を使用して実行されてもよい。
【０１１５】
ＦＴＬ４４は、コマンドを、ＳＳＤ３に送出する。ＳＳＤ３からのレスポンスが受信された際、ＦＴＬ４４は、そのレスポンスをファイルシステム４３を介してＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションソフトウェアレイヤ４１に送出する。
【０１１６】
［ホストソフトウェア］
図２は、ホスト２上で実行されるソフトウェア（ホストソフトウェア）の例を示す。
【０１１７】
あるアプリケーションは複数のファイルを取り扱う場合がある。個々のファイルに関しては、データを書き込むためのライトアクセスはシーケンシャルライトによって実行される。もしこれらファイルそれぞれに対応するシーケンシャルライトが一つのＦＴＬ４４によってマージされたならば、これらシーケンシャルライトそれぞれの書き込み先ＬＢＡが混ざり合う。このため、マージされたシーケンシャルライトは、ランダムライトとしてＳＳＤ３に送られる結果となり得る。ランダムライトの増加はＳＳＤ３のライトアンプリフィケーションを増加させる要因となり得る。
【０１１８】
図２に示されているように、ホスト２においては、これらファイルそれぞれに対応する幾つかのＦＴＬ４４が同時に実行され得る。
【０１１９】
図２の例では、４つのＦＴＬ４４Ａ、ＦＴＬ４４Ｂ、ＦＴＬ４４Ｃ、ＦＴＬ４４Ｄが実行される場合が想定されている。これらＦＴＬ４４Ａ、ＦＴＬ４４Ｂ、ＦＴＬ４４Ｃ、ＦＴＬ４４Ｄは、互いに独立して動作することができる。例えば、ＦＴＬ４４Ａは、ＮＳＩＤ＃１に対応するＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを管理し、ＦＴＬ４４Ｂは、ＮＳＩＤ＃２に対応するＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを管理し、ＦＴＬ４４Ｃは、ＮＳＩＤ＃３に対応するＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを管理し、ＦＴＬ４４Ｄは、ＮＳＩＤ＃４に対応するＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを管理してもよい。
【０１２０】
ＮＳＩＤ＃１に関連付けられたデータ（例えば、ファイル“Ａ”のデータ）を書き込むための幾つかのライト要求は、ファイルシステム４３Ａを介してＦＴＬ４４Ａに送られる。このＦＴＬ４４Ａは、これら幾つかのライト要求に対応する幾つかのライトコマンドをＳＳＤ３に送出する。ＳＳＤ３は、これらライトコマンドによって指定されたデータを、ＮＳＩＤ＃１に割り当てられたブロックに書き込むことができる。これにより、あるＬＢＡ範囲に関連づけられたファイル“Ａ”のデータを、ＮＳＩＤ＃１に割り当てられたブロックにシーケンシャルに書き込むことができる。
【０１２１】
同様に、ＮＳＩＤ＃２に関連付けられたデータ（例えば、ファイル“Ｂ”のデータ）を書き込むための幾つかのライト要求は、ファイルシステム４３Ｂを介してＦＴＬ４４Ｂに送られる。このＦＴＬ４４Ｂは、これら幾つかのライト要求に対応する幾つかのライトコマンドをＳＳＤ３に送出する。ＳＳＤ３は、これらライトコマンドによって指定されたデータを、ＮＳＩＤ＃２用に割り当てられたブロックに書き込むことができる。
【０１２２】
したがって、ファイル“Ａ”のデータを書き込むためのシーケンシャルライトとファイル“Ｂ”のデータを書き込むためのシーケンシャルライトとがマージされることを防止できるので、ＳＳＤ３のライトアンプリフィケーションの増加を抑制することができる。
【０１２３】
［チャンネル］
図３は、ＮＡＮＤインタフェース１３と複数のＮＡＮＤメモリチップとの関係を示す。
【０１２４】
図３においては、ＮＡＮＤインタフェース１３が有する８個のチャンネル（Ｃｈ＃１〜Ｃｈ＃８）の各々に４つのＮＡＮＤメモリチップが接続されている場合が例示されている。コントローラ４の制御の下、ＮＡＮＤインタフェース１３は、８個のチャンネル（Ｃｈ＃１〜Ｃｈ＃８）に接続された８個のＮＡＮＤメモリチップを同時駆動することによって、８個のブロックに対するリード、ライト、消去を並列（同時）に実行することができる。
【０１２５】
［物理ブロックと仮想ブロック］
図４は、ＳＳＤ３によって管理される、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロック群と仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロック群とを示す。
【０１２６】
ここでは、ＮＡＮＤインタフェース１３が４個のチャンネル（Ｃｈ．Ａ〜Ｃｈ．Ｄ）を有する場合が想定されている。
【０１２７】
Ｃｈ．Ａ〜Ｃｈ．Ｂの各々には、一つ以上のＮＡＮＤメモリチップが接続されている。各チャンネルに接続された一つ以上のＮＡＮＤメモリチップは、複数個のブロック、例えば、１１１個のブロック（ブロックアドレス０〜１１０）を含む。
【０１２８】
ＳＳＤ３のコントローラ４は、ＮＡＮＤメモリ５内の複数のブロック（物理ブロック）を、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロックのグループ＃Ｘと物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロックのグループ＃Ｙとに分類する。ブロックのグループ＃Ｘは、チャンネル当たり、例えば１０１個のブロック（ブロックアドレス０〜１００）を含んでもよい。ブロックのグループ＃Ｙは、チャンネル当たり、例えば１０個のブロック（ブロックアドレス１０１〜１１０）を含んでもよい。
【０１２９】
グループ＃Ｘ内のブロックは、複数の仮想ブロックとして編成される。複数の仮想ブロックの各々は、複数個のブロックを含む。複数の仮想ブロックの各々は、並列アクセス可能な複数のブロックの組み合わせを含んでもよい。
【０１３０】
より詳しくは、一つの仮想ブロックは、Ｃｈ．Ａを介してアクセス可能なブロックと、Ｃｈ．Ｂを介してアクセス可能なブロックと、Ｃｈ．Ｃを介してアクセス可能なブロックと、Ｃｈ．Ｄを介してアクセス可能なブロックとを含んでもよい。図５に示されているように、ＮＡＮＤメモリチップ＃０〜＃３がチャンネルＣｈ．Ａ〜Ｃｈ．Ｄに接続されている場合には、一つの仮想ブロックは、チップ＃０内の一つのブロックと、チップ＃１内の一つのブロックと、チップ＃２内の一つのブロックと、チップ＃３内の一つのブロックとを含んでもよい。この仮想ブロックへのデータの書き込み順序は、チップ＃０内のブロック内のページＰ０、チップ＃１内のブロック内のページＰ０、チップ＃２内のブロック内のページＰ０、チップ＃３内のブロック内のページＰ０、チップ＃０内のブロック内のページＰ１、チップ＃１内のブロック内のページＰ１、チップ＃２内のブロック内のページＰ１、チップ＃３内のブロック内のページＰ１…となる。
【０１３１】
６４Ｋバイトのライトデータがライトされるケースにおいては、このライトデータを構成する各１６Ｋバイトの４つのデータ部を、例えば、チップ＃０内のブロック内のページＰ０、チップ＃１内のブロック内のページＰ０、チップ＃２内のブロック内のページＰ０、チップ＃３内のブロック内のページＰ０に並列に書き込むことができる。
【０１３２】
図４に示されるグループ＃Ｙ内のブロックそれぞれは、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロック、つまりブロック単独でアクセスされるブロック（物理ブロック）として使用される。
【０１３３】
このように、ＮＡＮＤメモリ５内の複数のブロックは、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロックのグループ＃Ｘと物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロックのグループ＃Ｙとに分類されているので、同じ一つのブロックが、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロックと仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロックとに共用されてしまうことを防止することができる。つまり、物理ＮＡＮＤアクセス管理ＡＰＩ２１用の各ブロックは、どの仮想ブロックにも属さない。この結果、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のある特定のブロックが、仮想ブロックに向けられたアクセスによって誤ってアクセス（リード、ライト、消去）されてしまうことを防止できるので、安全性を高めることができる。
【０１３４】
［物理ブロック情報、仮想ブロック情報、ネームスペース情報］
図６は、ＳＳＤ３内に維持される消去回数管理テーブル３３Ａを示す。
【０１３５】
消去回数管理テーブル３３Ａは、グループ＃Ｙ内のブロック（物理ブロック）それぞれの消去回数を管理する。例えば、物理ＮＡＮＤアクセス管理ＡＰＩ２１用の特定のブロック（例えばブロックアドレス０）がホスト２からのコマンド（消去コマンド、ブロック割り当て・消去コマンド）によって消去された時、ＳＳＤ３内のコントローラ４は、この特定のブロック（例えばブロックアドレス０）の消去回数を＋１インクリメントする。
【０１３６】
図７は、ＳＳＤ３内に維持される別の消去回数管理テーブル３３Ｂを示す。
【０１３７】
消去回数管理テーブル３３Ｂは、グループ＃Ｘ内の仮想ブロックそれぞれの消去回数を管理する。例えば、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の特定の仮想ブロック（例えば仮想ブロックアドレス０）がホスト２からのコマンド（消去コマンド、仮想ブロック割り当て・消去コマンド）によって消去された時、ＳＳＤ３内のコントローラ４は、この特定の仮想ブロック（例えば仮想ブロックアドレス０）の消去回数を＋１インクリメントする。仮想ＮＡＮＤアクセス管理ＡＰＩ２２においては、一つの仮想ブロックに含まれる複数個のブロックが同時に消去される。したがって、消去回数は仮想ブロックの単位で管理される。
【０１３８】
図８は、ＳＳＤ３内に維持されるさらに別の消去回数管理テーブル３３Ｃを示す。
【０１３９】
消去回数管理テーブル３３Ｃは、ネームスペースＩＤ（ＮＳＩＤ）それぞれに対応する合計消去回数を管理する。あるＮＳＩＤの合計消去回数は、このＮＳＩＤのネームスペース（領域）に対して実行された消去動作の累積値であり、合計消去回数は、このＮＳＩＤのネームスペースに割り当てられたブロック中のいずれかに対して消去動作が実行される度に１だけ増やされる。このＮＳＩＤに割り当てられたブロックは、物理ＮＡＮＤアクセス管理ＡＰＩ２１においては物理ブロックであり、仮想ＮＡＮＤアクセス管理ＡＰＩ２２においては仮想ブロックである。
【０１４０】
例えば、特定のブロック（例えばブロックアドレス０）がホスト２からのコマンド（消去コマンド、またはブロック割り当て・消去コマンド）によって消去された時、ＳＳＤ３内のコントローラ４は、この特定のブロック（例えばブロックアドレス０）が割り当てられているＮＳＩＤを特定し、特定されたＮＳＩＤの消去回数を＋１インクリメントする。同様に、特定の仮想ブロック（例えば仮想ブロックアドレス０）がホスト２からのコマンド（消去コマンド、または仮想ブロック割り当て・消去コマンド）によって消去された時、ＳＳＤ３内のコントローラ４は、この特定の仮想ブロック（例えば仮想ブロックアドレス０）が割り当てられているＮＳＩＤを特定し、特定されたＮＳＩＤの消去回数を＋１インクリメントする。
【０１４１】
図９は、ＳＳＤ３内に維持される物理ブロック構造情報テーブル３３Ｄを示す。
【０１４２】
物理ブロック構造情報テーブル３３Ｄは、ＮＡＮＤメモリ５内の各ブロック（物理ブロック）の構造を示す情報である。物理ブロック構造情報テーブル３３Ｄは、ブロックサイズ、ページサイズ、推定書き込み時間、消去時間、等を含む。ブロックサイズは、一つのブロックのサイズ（容量）を示す。ページサイズは、一つのページのサイズ（容量）を示す。推定書き込み時間は、データをページバッファからメモリセルにプログラムするのに要する時間（ｔＰｒｏｇ）を示す。
【０１４３】
図１０は、ＳＳＤ３内に維持される仮想ブロック構造情報テーブル３３Ｅを示す。
【０１４４】
仮想ブロック構造情報テーブル３３Ｅは、各仮想ブロックの構造を示す情報である。仮想ブロック構造情報テーブル３３Ｅは、等価的なブロックサイズ、ページサイズ、推定書き込み時間、消去時間、一つの仮想ブロックに含まれるブロックの数等を含む。等価的なブロックサイズは、一つの仮想ブロックに含まれるブロックそれぞれの容量の合計であってもよい。
【０１４５】
図１１は、ＳＳＤ３内に維持される、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のネームスペース情報テーブル３３Ｆを示す。
【０１４６】
ネームスペース情報テーブル３３Ｆは、（１）存在するネームスペースの総数、（２）ネームスペース毎のブロック割り当て数、（３）ネームスペース毎のブロックアドレスのリスト、（４）ネームスペース毎の合計消去回数を管理する。
【０１４７】
例えば、ＮＳＩＤ＃１に関しては、ＮＳＩＤ＃１に対応するブロック割り当て数は、ＮＳＩＤ＃１用に確保されたブロック（物理ブロック）の総数を示してもよい。ＮＳＩＤ＃１に対応するブロックアドレスのリストは、ＮＳＩＤ＃１に割り当てられて実際に使用されているブロックそれぞれのブロックアドレスを示す。
【０１４８】
図１２は、ＳＳＤ３内に維持される、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のネームスペース情報テーブル３３Ｇを示す。
【０１４９】
ネームスペース情報テーブル３３Ｇは、（１）存在するネームスペースの総数、（２）ネームスペース毎の仮想ブロック割り当て数、（３）ネームスペース毎の仮想ブロックアドレスのリスト、（４）ネームスペース毎の合計消去回数を管理する。
【０１５０】
例えば、ＮＳＩＤ＃１に関しては、ＮＳＩＤ＃１に対応する仮想ブロック割り当て数は、ＮＳＩＤ＃１用に確保された仮想ブロックの総数を示してもよい。ＮＳＩＤ＃１に対応する仮想ブロックアドレスのリストは、ＮＳＩＤ＃１に割り当てられて実際に使用されている仮想ブロックそれぞれの仮想ブロックアドレスを示す。
【０１５１】
［仮想ブロック管理］
図１３は、ＳＳＤ３内の複数の仮想ブロックとこれら仮想ブロックを構成するブロック（物理ブロック）それぞれのブロックアドレスとの関係を示す。
【０１５２】
各仮想ブロックに属する複数個のブロック（物理ブロック）それぞれのブロックアドレスの組み合わせは、各仮想ブロックの仮想ブロックアドレスから数学的規則に基づいて一意に決定される。仮想ブロックアドレスから数学的規則に基づいて一意にブロックアドレスの組み合わせを決定するという方法を使用することにより、仮想ブロック毎にこの仮想ブロックに属するブロックアドレスを保持する専用の管理テーブルを使用することなく、各仮想ブロックアドレスのみからこの仮想ブロックに属するブロックアドレスの組み合わせを容易に特定することができる。
【０１５３】
数学的規則としては、仮想ブロックアドレスから一意にブロックアドレスの組み合わせを決定することが可能な任意の規則を使用し得る。
【０１５４】
図１３においては、Ｃｈ．Ａに関連付けられたブロックアドレス０〜１００については昇順に仮想ブロックアドレスＶＢ０〜ＶＢ１００に割り当て、Ｃｈ．Ｂに関連付けられたブロックアドレス０〜１００については降順に仮想ブロックアドレスＶＢ０〜ＶＢ１００に割り当て、Ｃｈ．Ｃに関連付けられたブロックアドレス０〜１００については昇順に仮想ブロックアドレスＶＢ０〜ＶＢ１００に割り当て、Ｃｈ．Ｄに関連付けられたブロックアドレス０〜１００については降順に仮想ブロックアドレスＶＢ０〜ＶＢ１００に割り当てるという数学的規則が適用された場合が例示されている。
【０１５５】
この場合、例えば、仮想ブロックアドレスＶＢ０を有する仮想ブロックに属する複数個のブロックそれぞれのブロックアドレスの組み合わせは、Ｃｈ．Ａのブロックアドレス０、Ｃｈ．Ｂのブロックアドレス１００、Ｃｈ．Ｃのブロックアドレス０、およびＣｈ．Ｄのブロックアドレス１００として決定される。同様に、仮想ブロックアドレスＶＢ１の仮想ブロックに属する複数個のブロックそれぞれのブロックアドレスの組み合わせは、Ｃｈ．Ａのブロックアドレス１、Ｃｈ．Ｂのブロックアドレス９９、Ｃｈ．Ｃのブロックアドレス１、およびＣｈ．Ｄのブロックアドレス９９として決定される。
【０１５６】
適用可能な数学的規則の例はこれに限定されず、例えば、仮想ブロックアドレスの値と同じ値のブロックアドレスを各チャンネルから選択するという数学的規則を適用してもよい。この場合、例えば、仮想ブロックアドレスＶＢ０の仮想ブロックに属する複数個のブロックそれぞれのブロックアドレスの組み合わせは、Ｃｈ．Ａのブロックアドレス０、Ｃｈ．Ｂのブロックアドレス０、Ｃｈ．Ｃのブロックアドレス０、およびＣｈ．Ｄのブロックアドレス０として決定される。同様に、仮想ブロックアドレスＶＢ１の仮想ブロックに属する複数個のブロックそれぞれのブロックアドレスの組み合わせは、Ｃｈ．Ａのブロックアドレス１、Ｃｈ．Ｂのブロックアドレス１、Ｃｈ．Ｃのブロックアドレス１、およびＣｈ．Ｄのブロックアドレス１として決定される。
【０１５７】
ホスト２は、個々の仮想ブロックを指定可能な物理アドレス（仮想ブロックアドレス）のみを認識すれば良く、各仮想ブロックに含まれるブロックそれぞれのブロックアドレス自体を認識する必要は無い。
【０１５８】
例えば、仮想ブロックアドレスＶＢ０の仮想ブロックにおいては、ＶＢ０−０は、仮想ブロックアドレス（ＶＢ０）とこの仮想ブロック内の最初のブロックのブロック番号（０）との組合わせを示す。ホスト２によってＶＢ０−０が指定された場合には、ＳＳＤ３は、ＶＢ０−０をＣｈ．Ａのブロックアドレス０に変換し、このＣｈ．Ａのブロックアドレス０をアクセスすることができる。
【０１５９】
［仮想ブロックのバッドブロック管理］
図１４は、ＳＳＤ３によって実行される不良ブロック（バッドブロック）置き換え動作を示す。
【０１６０】
例えば、仮想ブロック（仮想ブロックアドレスＶＢ２）内のチャンネルＣｈ．Ｃのブロック（ＶＢ２−２）が使用できない不良ブロック（バッドブロック）として指定された場合、ＳＳＤ３のコントローラ４は、数学的規則に基づいて、ＶＢ２−２から、チャンネルＣｈ．Ｃのブロックアドレス（＝２）を特定することができる。そして、コントローラ４は、このブロックアドレス（＝２）のブロックをバッドブロックリストに登録する。そして、コントローラ４は、ブロックアドレス（＝２）のブロックを、仮想ブロック（仮想ブロックアドレスＶＢ２）内の他の全てのブロック（ここでは、Ｃｈ．Ａのブロックアドレス２のブロック、Ｃｈ．Ｂのブロックアドレス９８のブロック、Ｃｈ．Ｄのブロックアドレス９８のブロック）と並列アクセス可能な別のブロックに置換する。例えば、Ｃｈ．Ｃのブロック群の内で、物理ＮＡＮＤアクセスおよび仮想ＮＡＮＤアクセスのどちらにも現在使用されていないブロック、例えば、Ｃｈ．Ｃのブロックアドレス１０２のブロックが、この別のブロックとして選択され得る。
【０１６１】
コントローラ４は、仮想ブロックアドレスＶＢ２のチャンネルＣｈ．Ｃのブロックアドレス２がＣｈ．Ｃの別のブロックアドレス１０２に置換されたことだけを管理しておけばよい。
【０１６２】
［バッドブロック化コマンド］
図１５は、ＳＳＤ３に適用される、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のバッドブロック化コマンドを示す。
【０１６３】
物理ＮＡＮＤアクセス管理ＡＰＩ２１用のバッドブロック化コマンドは、ＳＳＤ３に対して、特定のブロックをバッドブロックとすべきことを要求する。ホスト２は、リードエラーの回数等に基づいて、バッドブロック化すべきブロックを特定してもよい。バッドブロック化コマンドは、以下の入力パラメータを含む。
【０１６４】
（１）ブロックアドレス：  このブロックアドレスは、バッドブロック化すべきブロック（物理ブロック）を指定する。
【０１６５】
バッドブロック化コマンドは、以下の出力パラメータを含む。
【０１６６】
（１）終了ステータス：  バッドブロック化コマンドの成功またはエラーを示す終了ステータスがホスト２に返される。
【０１６７】
図１６は、ＳＳＤ３に適用される、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のバッドブロック化コマンドを示す。
【０１６８】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のバッドブロック化コマンドは、ＳＳＤ３に対して、特定の仮想ブロック内ブロックをバッドブロックとすべきことを要求する。ホスト２は、リードエラーの回数等に基づいて、特定の仮想ブロック内の何番目のブロックをバッドブロック化すべきかを決定してもよい。バッドブロック化コマンドは、以下の入力パラメータを含む。
【０１６９】
（１）仮想ブロックアドレスと仮想ブロック内ブロック番号
仮想ブロックアドレスと仮想ブロック内ブロック番号は、どの仮想ブロック内の何番目のブロックをバッドブロック化すべきかを指定する。仮想ブロック内ブロック番号は、チャンネル番号を指定する値であってもよい。
【０１７０】
バッドブロック化コマンドは、以下の出力パラメータを含む。
【０１７１】
（１）終了ステータス
バッドブロック化コマンドの成功またはエラーを示す終了ステータスがホスト２に返される。
【０１７２】
［バッドブロック化処理の手順］
図１７のフローチャートは、ＳＳＤ３によって実行される、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の処理とバッドブロック化処理の手順を示す。
【０１７３】
ＳＳＤ３のコントローラ４は、ＮＡＮＤメモリ５内のブロック群を２つのグループ（グループ＃Ｘ、グループ＃Ｙ）に分類し（ステップＳ１）、グループ＃Ｘのブロック群を複数の仮想ブロックとして編成する（ステップＳ２）。
【０１７４】
ステップＳ２では、コントローラ４は、数学的規則に基づいて、各仮想ブロックに属するべきブロックアドレスの組み合わせを決定する。もし上述のプライマリー欠陥リストによってある仮想ブロック内のブロックがバッドブロックとして指定されているならば、コントローラ４は、このバッドブロックと同じチャンネルに接続されている別のブロックをグループ＃Ｙから選択し、このバッドブロックを、選択したブロックで置き換えても良い。グループ＃Ｙ内の残りのブロックが、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロックとして使用される。
【０１７５】
そして、コントローラ４は、ホスト２からの、ある仮想ブロックを指定する物理アドレス（仮想ブロックアドレス、仮想ブロック内ブロック番号、ページアドレス）を含むリード、ライトまたは消去のコマンドの受信に応答して、この仮想ブロックに対するリード動作、ライト動作、または消去動作を実行する（ステップＳ３）。ステップＳ３では、コントローラ４は、数学的規則に基づいて物理アドレス（仮想ブロックアドレス、仮想ブロック内ブロック番号）からアクセス対象の仮想ブロック内のアクセス対象ブロックのブロックアドレスを決定し、このブロックに対するリード動作、ライト動作、または消去動作を実行する。
【０１７６】
コントローラ４がホスト２からのバッドブロック化コマンドを受信したならば、コントローラ４は、バッドブロック化コマンドが仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のバッドブロック化コマンドまたは物理ＮＡＮＤアクセス管理ＡＰＩ２１用のバッドブロック化コマンドのいずれであるかを判定する（ステップＳ４、Ｓ５）。仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のバッドブロック化コマンドと物理ＮＡＮＤアクセス管理ＡＰＩ２１用のバッドブロック化コマンドとが異なるオペレーションコードを有している場合には、この判定はオペレーションコードに基づいて実行される。仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のバッドブロック化コマンドと物理ＮＡＮＤアクセス管理ＡＰＩ２１用のバッドブロック化コマンドとが同じオペレーションコードを有する場合には、この判定は、バッドブロック化コマンドに含まれるアドレスの種類（ブロックアドレス／仮想ブロックアドレスと仮想ブロック内ブロック番号）に基づいて行われてもよい。
【０１７７】
バッドブロック化コマンドが物理ＮＡＮＤアクセス管理ＡＰＩ２１用のバッドブロック化コマンドであるならば（ステップＳ５のＹＥＳ）、コントローラ４は、バッドブロック化コマンドによって指定されるブロックアドレスのブロックをバッドブロックリストに登録して、このブロックアドレスのブロックをバッドブロックとして管理する（ステップＳ６）。このバッドブロックを別のブロックに置き換える処理は実行されない。
【０１７８】
バッドブロック化コマンドが仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のバッドブロック化コマンドであるならば（ステップＳ４のＹＥＳ）、コントローラ４は、ステップＳ２で使用された数学的規則に基づいて、仮想ブロックアドレスと仮想ブロック内ブロック番号から、バッドブロック化すべきブロックのブロックアドレスを特定する（ステップＳ７）。
【０１７９】
コントローラ４は、特定されたブロックアドレスのブロックをバッドブロックリストに登録して、この特定されたブロックアドレスのブロックをバッドブロックとして管理する（ステップＳ８）。
【０１８０】
そして、コントローラ４は、この特定されたブロックアドレスのブロック（バッドブロック）と同じチャンネルに接続されているブロックの中から、物理ＮＡＮＤアクセスおよび仮想ＮＡＮＤアクセスのどちらにも現在使用されていないブロックを選択し（ステップＳ９）、この特定されたブロックアドレスのブロック（バッドブロック）を、選択されたブロックで置き換える（ステップＳ１０）。
【０１８１】
［物理ＮＡＮＤアクセスおよび仮想ＮＡＮＤアクセスのための処理シーケンス］
図１８は、ＳＳＤ３とホスト２とによって実行される、物理ＮＡＮＤアクセスおよび仮想ＮＡＮＤアクセスのための処理シーケンスを示す。
【０１８２】
ホスト２が物理ＮＡＮＤアクセス管理ＡＰＩ２１を使用してＳＳＤ３をアクセスすることを望む場合、ホスト２は、一つのブロックの割り当てをＳＳＤ３に要求してもよい。この要求は、上述のブロック割り当て・消去コマンドであってもよい。ＳＳＤ３のコントローラ４は、グループ＃Ｙ内のブロック中から有効データを含まないブロック（現在使用されていないブロック）を選択し、この選択したブロックをホスト２に割り当て、この割り当てたブロックの物理アドレス（ブロックアドレス）をホスト２に通知する。
【０１８３】
ホスト２が仮想ＮＡＮＤアクセス管理ＡＰＩ２２を使用してＳＳＤ３をアクセスすることを望む場合、ホスト２は、一つの仮想ブロックの割り当てをＳＳＤ３に要求してもよい。この要求は、上述の仮想ブロック割り当て・消去コマンドであってもよい。ＳＳＤ３のコントローラ４は、複数の仮想ブロックから有効データを含まない仮想ブロック（現在使用されていない仮想ブロック）を選択し、この選択した仮想ブロックをホスト２に割り当て、この割り当てた仮想ブロックの物理アドレス（仮想ブロックアドレス）をホスト２に通知する。
【０１８４】
ホスト２は、通知されたブロックアドレスを含むリード、ライトまたは消去のコマンド、つまり物理ＮＡＮＤアクセス管理ＡＰＩ２１用のリード、ライトまたは消去のコマンドを、ＳＳＤ３に送信する。ブロックアドレスを含むリード、ライトまたは消去のコマンド、つまり物理ＮＡＮＤアクセス管理ＡＰＩ２１用のリード、ライトまたは消去のコマンド、の受信に応答して、コントローラ４は、このブロックアドレスによって指定される特定の単一のブロックに対するリード動作、ライト動作、または消去動作を実行する（ステップＳ１１）。
【０１８５】
ホスト２は、通知された仮想ブロックアドレスを含むリード、ライトまたは消去のコマンドをＳＳＤ３に送信する。仮想ブロックアドレスを含むリード、ライトまたは消去のコマンド、つまり仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のリード、ライトまたは消去のコマンド、の受信に応答して、コントローラ４は、この仮想ブロックアドレスによって指定される特定の仮想ブロックに含まれるブロックの纏まりに対するリード動作、ライト動作、または消去動作を実行する（ステップＳ１２）。
【０１８６】
［ライト処理］
図１９は、ＳＳＤ３とホスト２とによって実行される、単一の物理ブロックをアクセスする物理ＮＡＮＤアクセスのためのライト処理の処理シーケンスを示す。
【０１８７】
ホスト２は、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のライトコマンドをＳＳＤ３に送信する。このライトコマンドは、データがライトされるべきブロックを指定するブロックアドレスを含む。上述の直接アドレス指定モードの場合は、ライトコマンドは、ブロックアドレスとページアドレスの双方を含む。物理ＮＡＮＤアクセス管理ＡＰＩ２１用のライトコマンドの受信に応答して、ＳＳＤ３のコントローラ４は、このライトコマンドによって指定されるデータを、ライトコマンド内のブロックアドレスによって指定されるブロック内の書き込み対象ページに書き込む（ステップＳ１３）。直接アドレス指定モードの場合は、書き込み対象のページはライトコマンド内のページアドレスによって指定される。上述の自動アドレス生成モードの場合は、書き込み対象のページは、コントローラ４によって自動生成されるページアドレスによって指定される。
【０１８８】
そして、コントローラ４は、ライトコマンドのコマンド完了レスポンスをホスト２に送信する。
【０１８９】
図２０は、ＳＳＤ３とホスト２とによって実行される、複数の物理ブロックを含む仮想ブロックをアクセスする仮想ＮＡＮＤアクセスのためのライト処理の処理シーケンスを示す。
【０１９０】
ホスト２は、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のライトコマンドをＳＳＤ３に送信する。このライトコマンドは、データがライトされるべき仮想ブロックを指定する仮想ブロックアドレスを含む。上述の直接アドレス指定モードの場合は、ライトコマンドは、仮想ブロックアドレスとページアドレスの双方を含む。上述したように、このライトコマンドは、仮想ブロックアドレスと、仮想ブロック内ブロック番号と、ページアドレスとを含んでもよい。
【０１９１】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のライトコマンドの受信に応答して、ＳＳＤ３のコントローラ４は、このライトコマンドによって指定されるデータを、ライトコマンド内の仮想ブロックアドレスによって指定される仮想ブロック内の書き込み対象ページに書き込む（ステップＳ１４）。直接アドレス指定モードの場合は、書き込み対象のページはライトコマンド内のページアドレスによって指定される。上述の自動アドレス生成モードの場合は、書き込み対象のページは、コントローラ４によって自動生成されるページアドレスによって指定される。また、上述の自動アドレス生成モードでは、仮想ブロック内ブロック番号と、ページアドレスの双方が自動生成されてもよい。
【０１９２】
そして、コントローラ４は、ライトコマンドのコマンド完了レスポンスをホスト２に送信する。
【０１９３】
［リード処理］
図２１は、ＳＳＤ３とホスト２とによって実行される、物理ＮＡＮＤアクセスのためのリード処理の処理シーケンスを示す。
【０１９４】
ホスト２は、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のリードコマンドをＳＳＤ３に送信する。このリードコマンドは、ブロックアドレスとページアドレスとを含む。物理ＮＡＮＤアクセス管理ＡＰＩ２１用のリードコマンドの受信に応答して、ＳＳＤ３のコントローラ４は、リードコマンド内のブロックアドレスおよびページアドレスによって指定されるブロック内のリード対象ページからデータをリードする（ステップＳ１５）。そして、コントローラ４は、リードされたデータと、リードコマンドのコマンド完了レスポンスとをホスト２に送信する。
【０１９５】
図２２は、ＳＳＤ３とホスト２とによって実行される、仮想ＮＡＮＤアクセスのためのリード処理の処理シーケンスを示す。
【０１９６】
ホスト２は、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のリードコマンドをＳＳＤ３に送信する。このリードコマンドは、仮想ブロックアドレスとページアドレスとを含む。リードコマンドは、仮想ブロックアドレスと、仮想ブロック内ブロック番号と、ページアドレスとを含んでもよい。
【０１９７】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のリードコマンドの受信に応答して、ＳＳＤ３のコントローラ４は、リードコマンド内の仮想ブロックアドレス、仮想ブロック内ブロック番号、およびページアドレスによって指定される仮想ブロック内のリード対象ページからデータをリードする（ステップＳ１６）。そして、コントローラ４は、リードされたデータと、リードコマンドのコマンド完了レスポンスとをホスト２に送信する。
【０１９８】
［消去処理］
図２３は、ＳＳＤ３とホスト２とによって実行される、物理ＮＡＮＤアクセスのための消去処理の処理シーケンスを示す。
【０１９９】
ホスト２は、物理ＮＡＮＤアクセス管理ＡＰＩ２１用の消去コマンドをＳＳＤ３に送信する。この消去コマンドは、ブロックアドレスを含む。物理ＮＡＮＤアクセス管理ＡＰＩ２１用の消去コマンドの受信に応答して、ＳＳＤ３のコントローラ４は、消去コマンド内のブロックアドレスによって指定されるブロックを消去して、このブロック内の全てのページを消去状態にする（ステップＳ１７）。そして、コントローラ４は、消去コマンドのコマンド完了レスポンスをホスト２に送信する。
【０２００】
図２４は、ＳＳＤ３とホスト２とによって実行される、仮想ＮＡＮＤアクセスのための消去処理の処理シーケンスを示す。
【０２０１】
ホスト２は、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の消去コマンドをＳＳＤ３に送信する。この消去コマンドは、仮想ブロックアドレスを含む。仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の消去コマンドの受信に応答して、ＳＳＤ３のコントローラ４は、消去コマンド内の仮想ブロックアドレスによって指定される仮想ブロック内の複数個のブロックを同時に消去して、これらブロック内の全てのページを消去状態にする（ステップＳ１８）。そして、コントローラ４は、消去コマンドのコマンド完了レスポンスをホスト２に送信する。
【０２０２】
［優先度管理］
図２５は、コントローラ４によるコマンド優先度の管理動作を示す。  
ホスト２から受信される全てのコマンドには、それらコマンドの実行の優先順位（優先クラス）を示す値（優先度）がホスト２によって付与されてもよい。各コマンドは、その優先度を示す入力パラメータを有していてもよい。
【０２０３】
優先順位（優先クラス）の種類の数は２以上の任意の数であってもよい。優先クラスの種類には、例えば、最も高い優先度を示す「Ｈｉｇｈ」、最も低い優先度を示す「Ｌｏｗ」、中間の優先度を示す「Ｍｅｄｉｕｍ」が含まれていてもよい。
【０２０４】
コントローラ４によって実行される優先度管理においては、優先度の高いコマンドは優先度の低いコマンドよりも先に実行されることができる。同一優先度を有するコマンド間の実行順序は、先入れ先出し方式によって決定されてもよい。消去コマンドのようにコマンドの処理の完了までに多くの時間がかかるコマンドについては、そのコマンド（例えば消去コマンド）の実行を中断し、優先順位の高いコマンドを先に実行し、優先順位の高いコマンドの完了後に、中断されたコマンド（例えば消去コマンド）の処理を続行してもよい。
【０２０５】
優先度管理のために、ＮＡＮＤチップ毎に優先度付キュー６１、６２、６３を設けてもよい。どのコマンドが実行されたかを識別できるようにするために全てのコマンドと全てのコマンド完了レスポンスにキューＩＤが付与されてもよい。ホスト２が全てのコマンドにキューＩＤを付与してもよい。
【０２０６】
「Ｈｉｇｈ」の優先度が付与された各コマンドは、優先度付キュー６１に格納（キューイング）される。「Ｍｅｄｉｕｍ」の優先度が付与された各コマンドは、優先度付キュー６２に格納される。「Ｌｏｗ」の優先度が付与された各コマンドは、優先度付キュー６３に格納される。優先度付キュー６１からのコマンドの取り出しは、優先度付キュー６２からのコマンドの取り出しおよび優先度付キュー６３からのコマンドの取り出しよりも優先的に実行される。優先度付キュー６２からのコマンドの取り出しは、優先度付キュー６３からのコマンドの取り出しよりも優先的に実行される。
【０２０７】
［ブロック割り当て・消去コマンド］
図２６を参照して、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロック割り当て・消去コマンドと、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロック割り当て・消去コマンドとを説明する。
【０２０８】
物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロック割り当て・消去コマンドは、以下の入力パラメータを含む。
【０２０９】
（１）ブロックタイプ＝ブロック：  ブロックタイプは、割り当てられるべきブロックのタイプを示す。物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロック割り当て・消去コマンドのブロックタイプは、ブロック（物理ブロック）である。フリーブロックから一つのブロックがホスト２用に割り当てられ、且つこのブロックが自動消去される。
【０２１０】
（２）処理優先度：  処理優先度はこのコマンドの優先度を示す。
【０２１１】
（３）ＮＳＩＤ（オプショナル）：  ＮＳＩＤはブロックが割り当てられるべきネームスペースのＩＤを示す。
【０２１２】
物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロック割り当て・消去コマンドは、以下の出力パラメータを含む。
【０２１３】
（１）終了ステータス：  ブロック割り当て・消去コマンドの成功またはエラーを示す終了ステータスがホスト２に返される。
【０２１４】
（２）ブロックアドレス：  割り当てられたブロックのブロックアドレスがホスト２に返される。
【０２１５】
（３）残りブロック数：  ＮＳＩＤが指定された場合にのみ、このＮＳＩＤ用に確保された残りブロックの数がホスト２に返される。
【０２１６】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロック割り当て・消去コマンド（「仮想ブロック割り当て・消去コマンド」とも云う）は、以下の入力パラメータを含む。
【０２１７】
（１）ブロックタイプ＝仮想ブロック：  仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロック割り当て・消去コマンドのブロックタイプは、仮想ブロックである。フリー仮想ブロックから一つの仮想ブロックがホスト２用に割り当てられ、且つこの仮想ブロック内の複数個のブロックが自動消去される。
【０２１８】
（２）処理優先度：  処理優先度はこのコマンドの優先度を示す。
【０２１９】
（３）ＮＳＩＤ（オプショナル）：  ＮＳＩＤは仮想ブロックが割り当てられるべきネームスペースのＩＤを示す。
【０２２０】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロック割り当て・消去コマンドは、以下の出力パラメータを含む。
【０２２１】
（１）終了ステータス：  ブロック割り当て・消去コマンドの成功またはエラーを示す終了ステータスがホスト２に返される。
【０２２２】
（２）仮想ブロックアドレス：  割り当てられた仮想ブロックの仮想ブロックアドレスがホスト２に返される。
【０２２３】
（３）残りブロック数：  ＮＳＩＤが指定された場合にのみ、このＮＳＩＤ用に確保された残り仮想ブロックの数がホスト２に返される。
【０２２４】
［物理ブロック管理と仮想ブロック管理］
図２７は、ＳＳＤ３のコントローラ４によって管理される使用中ブロックリスト７１Ａ、フリーブロックリスト７１Ｂ、使用中仮想ブロックリスト７２Ａ、およびフリー仮想ブロックリスト７２Ｂを示す。
【０２２５】
使用中ブロックリスト７１Ａは、グループ＃Ｙのブロック群の中で有効データを保持しているブロック（物理ブロック）のリスト、つまりホスト２によって使用されている使用中ブロックのリストを示す。フリーブロックリスト７１Ｂは、グループ＃Ｙのブロック群の中で有効データを保持していないブロック（物理ブロック）のリスト、つまりホスト２によって使用されていないフリーブロックのリストを示す。
【０２２６】
使用中仮想ブロックリスト７２Ａは、グループ＃Ｘの仮想ブロック群の中で有効データを保持している仮想ブロックのリスト、つまりホスト２によって使用されている使用中仮想ブロックのリストを示す。フリー仮想ブロックリスト７２Ｂは、グループ＃Ｘの仮想ブロック群の中で有効データを保持していない仮想ブロックのリスト、つまりホスト２によって使用されていないフリー仮想ブロックのリストを示す。
【０２２７】
［ブロック割り当て・消去処理］
図２８は、ＳＳＤ３とホスト２とによって実行されるブロック割り当て・消去処理の処理シーケンスを示す。
【０２２８】
最初に、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロック割り当て・消去処理について説明する。
【０２２９】
ホスト２のために現在割り当てられているブロック（物理ブロック）がホスト２からのデータで満たされた場合、ホスト２は、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロック割り当て・消去コマンドをＳＳＤ３に送信してもよい。
【０２３０】
ＳＳＤ３のコントローラ４がこのブロック割り当て・消去コマンドをホスト２から受信した時、コントローラ４は、フリーブロックリスト７１Ｂから一つのブロック（物理ブロック）を選択し、選択したブロック（物理ブロック）をホスト２に書き込み対象ブロックとして割り当てる（ステップＳ２１）。フリーブロックリスト７１Ｂからのブロック（書き込み対象ブロック）の選択の権限はコントローラ４が保有している。したがって、コントローラ４は、信頼性の高いブロックを書き込み対象ブロックとしてホスト２に割り当てる事ができる。ステップＳ２１では、コントローラ４は、最少消去回数のブロックをフリーブロックリスト７１Ｂから選択し、この最少消去回数のブロックを書き込み対象ブロックとしてホスト２に割り当ててもよい。
【０２３１】
コントローラ４は、この割り当てたブロックを消去し、この割り当てたブロックの消去回数を更新する（ステップＳ２２）。コントローラ４は、この割り当てたブロックのブロックアドレスをホスト２に通知する（ステップＳ２３）。このブロックアドレスは、ブロック割り当て・消去コマンドに対するコマンド完了レスポンス内の返り値としてホスト２に通知されてもよい。
【０２３２】
次に、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロック割り当て・消去処理について説明する。
【０２３３】
ホスト２のために現在割り当てられている仮想ブロックがホスト２からのデータで満たされた場合、ホスト２は、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロック割り当て・消去コマンドをＳＳＤ３に送信してもよい。
【０２３４】
ＳＳＤ３のコントローラ４がこのブロック割り当て・消去コマンドをホスト２から受信した時、コントローラ４は、フリー仮想ブロックリスト７２Ｂから一つの仮想ブロックを選択し、選択した仮想ブロックをホスト２に書き込み対象仮想ブロックとして割り当てる（ステップＳ２１）。フリー仮想ブロックリスト７２Ｂからの仮想ブロック（書き込み対象仮想ブロック）の選択の権限はコントローラ４が保有しているので、コントローラ４は、信頼性の高い仮想ブロックを書き込み対象仮想ブロックとしてホスト２に割り当てる事ができる。ステップＳ２１では、コントローラ４は、最少消去回数の仮想ブロックをフリー仮想ブロックリスト７２Ｂから選択し、この最少消去回数の仮想ブロックを書き込み対象仮想ブロックとしてホスト２に割り当ててもよい。
【０２３５】
コントローラ４は、この割り当てた仮想ブロックに含まれる複数個のブロックを同時に消去し、この割り当てた仮想ブロックの消去回数を更新する（ステップＳ２２）。コントローラ４は、この割り当てた仮想ブロックの仮想ブロックアドレスをホスト２に通知する（ステップＳ２３）。この仮想ブロックアドレスは、ブロック割り当て・消去コマンドに対するコマンド完了レスポンス内の返り値としてホスト２に通知されてもよい。
【０２３６】
［ライトコマンド］
図２９は、ＳＳＤ３に適用される物理ＮＡＮＤアクセス管理ＡＰＩ２１用のライトコマンドを示す。
【０２３７】
ライトコマンドは、以下の入力パラメータを含む。
【０２３８】
（１）ブロックアドレス、またはブロックアドレスとページアドレス：  この入力パラメータ値は、データがライトされるべきＮＡＮＤメモリ５上の位置を指定する物理アドレスである。ブロックアドレスのみが指定された場合には、書き込み対象ページはＳＳＤ３によって自動更新される。
【０２３９】
（２）ＮＳＩＤ（オプショナル）：  ブロックアドレスが指定されない場合は、ＮＳＩＤが指定される。ＮＳＩＤが指定された場合、ブロックアドレスとページアドレスがＳＳＤ３によって自動発行される。データはＮＳＩＤに最後に割り当てられたブロック（現在の書き込み対象ブロック）にライトされる。
【０２４０】
（３）処理優先度：  処理優先度はこのライトコマンドの優先度を示す。
【０２４１】
（４）書き込みデータの先頭アドレス：  書き込みデータの先頭アドレスは、書き込みデータが格納されている出力バッファ（ホストのメモリ）上の先頭アドレスを示す。
【０２４２】
（５）書き込むページ数：  書き込むページ数は、データが書き込まれるべきページの数、つまり上述の「特定ページ数」を示す。データが書き込まれたブロック内のページ数が書き込むページ数（「特定ページ数」）に達した場合、その旨がホスト２に通知される。
【０２４３】
（６）ＮＡＮＤモード（オプショナル）：  ＮＡＮＤモードには、ＳＬＣ／ＭＬＣ／ＴＬＣ等が含まれる。
【０２４４】
ライトコマンドは、以下の出力パラメータを含む。
【０２４５】
（１）終了ステータス：  ライトコマンドの成功またはエラーを示す終了ステータスがホスト２に返される。
【０２４６】
（２）ブロックアドレスとページアドレス：  ブロックアドレスとページアドレスは、データが書き込まれたＮＡＮＤメモリ５上の位置を示す。ライトコマンドが、ブロックアドレスのみを含む場合、またはＮＳＩＤのみを含む場合、ホスト２は、この返り値に基づいてデータが書き込まれたＮＡＮＤメモリ５上の位置を知ることができる。
【０２４７】
（３）書き込んだページ数：  この値は、データが書き込まれたページの数を示す。
【０２４８】
（４）不正書き込み順序警告：  不正書き込み順序が検出された場合、ホスト２に警告またはエラーが返される。
【０２４９】
（５）リード可能最新ページアドレス：  読み出し可能なデータを保持する最新ページアドレスがホスト２に返される。ホスト２は、このブロック内のどのページまでがリード可能であるかを知ることができる。
【０２５０】
図３０は、ＳＳＤ３に適用される仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のライトコマンドを示す。
【０２５１】
このライトコマンドは、以下の入力パラメータを含む。
【０２５２】
（１）仮想ブロックアドレス、または仮想ブロックアドレスとページアドレス：  これは、データがライトされるべきＮＡＮＤメモリ５上の位置を指定する物理アドレスである。この物理アドレスは、仮想ブロックアドレス、仮想ブロック内ブロック番号、ページアドレスによって表現されてもよい。仮想ブロックアドレスのみが指定された場合には、仮想ブロック内ブロック番号、ページアドレスがＳＳＤ３によって自動更新されてもよい。
【０２５３】
（２）ＮＳＩＤ（オプショナル）：  仮想ブロックアドレスが指定されない場合は、ＮＳＩＤが指定される。ＮＳＩＤが指定された場合、仮想ブロックアドレス、仮想ブロック内ブロック番号、ページアドレスがＳＳＤ３によって自動発行される。データはＮＳＩＤに割り当てられた仮想ブロックにライトされる。
【０２５４】
（３）処理優先度：  処理優先度はこのライトコマンドの優先度を示す。
【０２５５】
（４）書き込みデータの先頭アドレス：  書き込みデータの先頭アドレスは、書き込みデータが格納されている出力バッファ（ホストのメモリ）上の先頭アドレスを示す。
【０２５６】
（５）書き込むページ数：  書き込むページ数は、データが書き込まれるべきページの数を示す。データが書き込まれたブロック内のページ数が書き込むページ数に達した場合、その旨がホスト２に通知される。
【０２５７】
（６）ＮＡＮＤモード（オプショナル）：  ＮＡＮＤモードには、ＳＬＣ／ＭＬＣ／ＴＬＣ等が含まれる。
【０２５８】
ライトコマンドは、以下の出力パラメータを含む。
【０２５９】
（１）終了ステータス：  ライトコマンドの成功またはエラーを示す終了ステータスがホスト２に返される。
【０２６０】
（２）仮想ブロックアドレスとページアドレス：  この値は、データが書き込まれたＮＡＮＤメモリ５上の位置を示す物理アドレスである。この物理アドレスは、仮想ブロックアドレス、仮想ブロック内ブロック番号、ページアドレスによって表現されてもよい。ライトコマンドが仮想ブロックアドレスのみまたはＮＳＩＤのみを含む場合、ホスト２は、この返り値に基づいてデータが書き込まれたＮＡＮＤメモリ５上の位置を知ることができる。
【０２６１】
（３）書き込んだページ数：  この値は、データが書き込まれたページの数を示す。
【０２６２】
（４）不正書き込み順序警告：  不正書き込み順序が検出された場合、ホスト２に警告またはエラーが返される。
【０２６３】
（５）リード可能最新ページアドレス：  読み出し可能なデータを保持する最新ページアドレスがホスト２に返される。ホスト２は、仮想ブロック内アクセス対象ブロック内のどのページまでがリード可能であるかを知ることができる。
【０２６４】
［書き込み順序制約］
図３１は、ブロック内の多数のページへのデータ書き込み順序に関する制約を示す。
【０２６５】
ここでは、一つのブロックがページ０〜ページ２５５を含む場合を想定する。データリードに関しては、ブロック内の任意の幾つかのページを任意の順序でリードすることができる。一方、データ書き込みに関しては、ある一つのブロック内においては、データはページ０、ページ１、ページ２、ページ３、…ページ２５４、ページ２５５の順序でシーケンシャルに書き込まれることが必要とされる。したがって、「不正書き込み順序警告」機能は、ホスト２が、直接アドレス指定モードを使用することを、つまりデータが書き込まれるべきブロックアドレスおよびページアドレスをコントロールすることを、助けることができる。
【０２６６】
［ページからのデータ読み出しのタイミングに関する制約］
ＮＡＮＤメモリによっては、たとえブロック内のあるページにデータが書き込まれても、このページに書き込まれたデータは、書き込み直後には読み出すことができず、このページに書き込まれたデータは、このページに後続する１以上のページへのデータ書き込み完了後に可能となるケースがある。
【０２６７】
図３２は、ページからのデータ読み出しのタイミングに関する制約を示す。
【０２６８】
ここでは、ページＰ０〜Ｐ３へのデータ書き込み後にページＰ０が読み出し可能なデータを保持する状態となる場合が例示されている。このように、たとえある特定のページ（例えばページＰ０）への書き込みが完了しても、後続する幾つかのページ（例えばページＰ１〜Ｐ３）への書き込みが完了するまでは、この特定のページ（例えばページＰ０）からデータを正しくリードできない場合がある。
【０２６９】
このような、ページからのデータ読み出しのタイミングに関する制約は、ＮＡＮＤメモリ内で実行されるプログラム動作に起因する。
【０２７０】
すなわち、ＮＡＮＤメモリにおいては、セルの微細化が進んでおり、セルへのデータ書き込みによって隣接するセルの閾値レベルが変動するというプログラムディスターブが起こり得る。このため、ＮＡＮＤメモリにおいては、プログラムディスターブによる影響を考慮して、あるページ内の各セルへのデータの書き込みによって、その直前の一つ以上のページ内の各セルの閾値レベルを補正するといったプログラム動作が実行される場合がある。補正が完了する前のページからデータをリードすると、本来のデータとは異なる誤ったデータがリードされてしまう。補正を完了するタイミングは使用されるＮＡＮＤメモリのタイプによって異なる。
【０２７１】
コントローラ４は、補正が完了するタイミングをホスト２に通知することができる。換言すれば、コントローラ４は、書き込んだデータが読めるブロック内の最後のページをホスト２に通知することができる。
【０２７２】
より詳しくは、コントローラ４は、以下の処理を実行する。
【０２７３】
コントローラ４は、ホスト２から、ある特定のブロックを指定するブロックアドレスとこの特定のブロック内の書き込み対象ページを指定するページアドレスとを含むライトコマンドを受信する。コントローラ４は、ライトコマンドに従って、特定のブロック内の書き込み対象ページにデータを書き込む。そして、コントローラ４は、この特定のブロック内の書き込み対象ページへのデータの書き込みによって読み出し可能状態となったこの特定のブロック内の最新ページ（この特定のブロック内のページ群の中で、最後に読み出し可能となったページ）を示すページアドレスを、ホスト２に通知する。
【０２７４】
ホスト２は、この通知に応じて、書き込んだデータが読めるページを示すホスト２上のリード可能ページアドレス管理情報を更新してもよい。あるページのデータがリード可能であることを示す通知を受信した後、ホスト２は、このページのデータを保持しているホスト２のメモリ領域（ライトバッファ）を解放してもよい。換言すれば、ホスト２は、まず、ＳＳＤ３のＮＡＮＤメモリ５に書き込むべきデータをホスト２のメモリ内に一時的に格納し、そして、この書き込むべきデータを書き込むためのライトコマンドをＳＳＤ３に送信する。そして、ホスト２は、このデータが不揮発性メモリ５から読み出し可能になるまで、このデータをホスト２のメモリに維持する。
【０２７５】
また、プログラムディスターブによる影響を低減するために、ＮＡＮＤメモリは、図３３に示されているようなプログラム順序でプログラム動作を実行するケースもある。図３３では、各ページへデータを書き込むためのプログラム動作が、複数回の書き込みステージを含む。各ページへの複数回の書き込みステージの内の少なくとも最後の書き込みステージは、後続する１以上のページへの１以上の書き込みステージの完了後に実行される。この場合においても、たとえある特定のページ（例えばページＰ０）へ書き込むべきデータをＮＡＮＤメモリに転送することによってこの特定のページへの書き込みが完了しても、他の１以上のページへ書き込むべきデータをＮＡＮＤメモリに転送することによってこの１以上のページへの書き込みが完了するまでは、この特定のページからデータを正しくリードすることができない場合がある。
【０２７６】
セル当たりに３ビットのデータを書き込むＴＬＣ書き込みにおいては、以下のプログラム順序でプログラム動作が実行されてもよい。
【０２７７】
（１）ページ０への第１書き込みステージ（ページ０への下位ページデータのライト）
（２）ページ１への第１書き込みステージ（ページ１への下位ページデータのライト）
（３）ページ０への第２書き込みステージ（ページ０への中位ページデータのライト）
（４）ページ２への第１書き込みステージ（ページ２への下位ページデータのライト）
（５）ページ１への第２書き込みステージ（ページ１への中位ページデータのライト）
（６）ページ０への第３書き込みステージ（ページ０への上位ページデータのライト）
（７）ページ３への第１書き込みステージ（ページ３への下位ページデータのライト）
（８）ページ２への第２書き込みステージ（ページ２への中位ページデータのライト）
（９）ページ１への第３書き込みステージ（ページ１への上位ページデータのライト）
使用可能なプログラム順序はこの例に限定されず、ＮＡＮＤメモリ毎に異なる様々なプログラム順序が使用され得る。
【０２７８】
［ライト処理の手順］
図３４のフローチャートは、ＳＳＤ３によって実行されるデータライト処理の手順を示す。
【０２７９】
ＳＳＤ３のコントローラ４は、ブロック割り当て・消去コマンドの受信に応答して書き込み対象ブロックをホスト２に割り当て、そして、書き込み対象ページを初期値（ページ０）に設定する（ステップＳ３１）。コントローラ４がホスト２からライトコマンドを受信したならば（ステップＳ３２のＹＥＳ）、コントローラ４は、受信されたライトコマンドが、ページアドレスを含む直接アドレス指定モードのライトコマンドであるか否かを判定する（ステップＳ３３）。
【０２８０】
受信されたライトコマンドが直接アドレス指定モードのライトコマンドであるならば（ステップＳ３３のＹＥＳ）、コントローラ４は、このライトコマンドによって指定されるページアドレスが現在の書き込み対象ページ（ここではページ０）に一致するか否かを判定する（ステップＳ３４）。
【０２８１】
ライトコマンドによって指定されるページアドレスが現在の書き込み対象ページに一致しないならば（ステップＳ３４のＮＯ）、コントローラ４は、不正書き込み順序が発生したことを検出し、不正書き込み順序の警告を含むコマンド完了レスポンスをホスト２に通知する（ステップＳ３５）。ステップＳ３５では、コントローラ４は、ライトコマンドによって指定されるページアドレスにデータを書き込まずに、不正書き込み順序の警告を含むコマンド完了レスポンスをホスト２に通知する。
【０２８２】
一方、ライトコマンドによって指定されるページアドレスが現在の書き込み対象ページに一致するならば（ステップＳ３４のＹＥＳ）、コントローラ４は、ライトコマンドによって指定されるデータをＮＡＮＤメモリ５に転送し、データをライトコマンドのページアドレスによって指定される書き込み対象ブロック内のページに書き込む（ステップＳ３６）。コントローラ４は、最初のページから最後のページの順でデータを書き込むという書き込み順序に関する制約に基づいて、書き込み対象ページを更新する（ここでは、ページ０からページ１に更新される）（ステップＳ３７）。
【０２８３】
受信されたライトコマンドが直接アドレス指定モードのライトコマンドでないならば（ステップＳ３３のＮＯ）、コントローラ４は、現在の書き込み対象ページのページアドレス（ここではページ０）を自動発行し、ライトコマンドによって指定されるデータをＮＡＮＤメモリ５に転送し、データを書き込み対象ブロック内の現在の書き込み対象ページに書き込む（ステップＳ３８）。コントローラ４は、上述の書き込み順序に関する制約に基づいて、書き込み対象ページを更新する（ここでは、ページ０からページ１に更新される）（ステップＳ３９）。
【０２８４】
ステップＳ３７またはＳ３９の後、コントローラ４は、リード可能なデータを保持する最新のページアドレスを特定する（ステップＳ４０）。
【０２８５】
そして、コントローラ４は、今回の書き込みによって書き込み対象ブロック内の最後のページまでデータが書き込まれたか否か、およびデータが書き込まれたページ数が「書き込むページ数」（上述の「特定ページ数」）に達したか否かを判定する（ステップＳ４１、Ｓ４２）。
【０２８６】
そして、コントローラ４は、返り値を作成し、返り値を含むコマンド完了レスポンスをホスト２に送信する。
【０２８７】
書き込み対象ブロック内の最後のページまでデータが書き込まれたならば（ステップＳ４１のＹＥＳ）、コントローラ４は、終了ステータスと、返り値とを含むコマンド完了レスポンスをホスト２に送信する（ステップＳ４３）。返り値は、以下の値を含む。
【０２８８】
（１）データが書き込まれたＮＡＮＤメモリ５上の位置を示す物理アドレス（この物理アドレスは、ブロックアドレスとページアドレスであってもよく、または仮想ブロックアドレスとページアドレスであってもよい）
（２）リード可能最新ページアドレス
（３）ブロック内の全ページの書き込み完了を示すステータス
データが書き込まれたページ数が「書き込むページ数」（上述の「特定ページ数」）に達したならば（ステップＳ４２のＹＥＳ）、コントローラ４は、終了ステータスと返り値とを含むコマンド完了レスポンスをホスト２に送信する（ステップＳ４４）。返り値は、以下の値を含む。
【０２８９】
（１）データが書き込まれたＮＡＮＤメモリ５上の位置を示す物理アドレス（この物理アドレスは、ブロックアドレスとページアドレスであってもよく、または仮想ブロックアドレスとページアドレスであってもよい）
（２）リード可能最新ページアドレス
（３）特定ページ数の書き込み完了を示すステータス
図３５のフローチャートは、ライトコマンドのコマンド完了レスポンスの受信に応答してホスト２によって実行される処理の手順を示す。
【０２９０】
ＳＳＤ３からのライトコマンドのコマンド完了レスポンスの受信に応答して、ホスト２は、このライトコマンドのコマンド処理が成功したか否かを判定する（ステップＳ５１）。
【０２９１】
ライトコマンドのコマンド処理が成功したならば（ステップＳ５１のＹＥＳ）、ホスト２は、コマンド完了レスポンスに含まれるブロックアドレスとページアドレスを使用することによって、アドレス変換テーブル（つまりルックアップテーブルＬＵＴ４５）を更新し、これによってこのライトコマンドによって書き込まれたデータに対応するＬＢＡに正しい物理アドレスをマッピングする（ステップＳ５２）。そして、ホスト２は、リード可能最新ページアドレスに基づいて上述のリード可能ページアドレス管理情報を更新し、このリード可能最新ページアドレスへライトされたデータを保持しているホスト２のメモリ領域（ライトバッファ）を解放する（ステップＳ５３）。
【０２９２】
つまり、このライトコマンドによって書き込まれたデータのＳＳＤ３からの読み出しが可能になるまでは、このライトコマンドによって書き込まれたデータはホスト２のメモリ領域（ライトバッファ）に維持される。このライトコマンドによって書き込まれたデータのＳＳＤ３からの読み出しが可能になった後は、このデータに対するリード要求のアクセス先は、ライトバッファからＳＳＤ３に切り換えられる。
【０２９３】
そして、ホスト２は、特定ページ数の書き込みが完了したか否か、ブロックの最後のページまで書き込みが完了したか否かを判定する（ステップＳ５４、Ｓ５６）。
【０２９４】
特定ページ数の書き込みが完了したならば（ステップＳ５４のＹＥＳ）、ホスト２は、メタデータのような管理情報の書き込みを要求するライトコマンドをＳＳＤ３に送信する（ステップ５５）。これにより、各ブロックの最終ページなどにメタデータのような管理情報を書き込むことができる。
【０２９５】
ブロックの最後のページまで書き込みが完了したならば（ステップＳ５６のＹＥＳ）、ホスト２は、ブロック割り当て・消去コマンドをＳＳＤ３に送信する（ステップ５７）。
【０２９６】
ライトコマンドのコマンド処理がエラーしたならば（ステップＳ５１のＮＯ）、ホスト２は、不正書き込み順によるエラーであるか否かを判定する（ステップＳ５８）。
【０２９７】
不正書き込み順によるエラーであるならば（ステップＳ５８のＹＥＳ）、ホスト２は、不正書き込み順の原因を特定するための処理を含むエラー処理を実行する（ステップＳ５９）。
【０２９８】
図３６のフローチャートは、ＮＳＩＤを含むライトコマンドのコマンド完了レスポンスの受信に応答してホスト２によって実行される処理の手順を示す。
【０２９９】
ＳＳＤ３からのライトコマンドのコマンド完了レスポンスの受信に応答して、ホスト２は、ライトコマンドのコマンド処理が成功したか否かを判定する（ステップＳ６１）。
【０３００】
ライトコマンドのコマンド処理が成功したならば（ステップＳ６１のＹＥＳ）、ホスト２は、このライトコマンドによって書き込まれたデータに関連づけられたＮＳＩＤを特定する（ステップＳ６２）。コマンド完了レスポンスが、ライトコマンド内のＮＳＩＤと同じＮＳＩＤを含んでいてもよい。
【０３０１】
ホスト２は、コマンド完了レスポンスに含まれるブロックアドレスとページアドレスを使用することによって、特定されたＮＳＩＤに対応するアドレス変換テーブル（つまりルックアップテーブルＬＵＴ４５）を更新し、これによって書き込まれたデータに対応するＬＢＡに正しい物理アドレスをマッピングする（ステップＳ６３）。そして、ホスト２は、リード可能最新ページアドレスを上述のリード可能ページアドレス管理情報に保存することによってリード可能ページアドレス管理情報を更新し、このリード可能最新ページアドレスへライトされたデータを保持しているホスト２のメモリ領域（ライトバッファ）を解放する（ステップＳ６４）。
【０３０２】
そして、ホスト２は、特定ページ数の書き込みが完了したか否か、ブロックの最後のページまで書き込みが完了したか否かを判定する（ステップＳ６５、Ｓ６７）。
【０３０３】
特定ページ数の書き込みが完了したならば（ステップＳ６５のＹＥＳ）、ホスト２は、メタデータのような管理情報の書き込みを要求するライトコマンドをＳＳＤ３に送信する（ステップ６６）。
【０３０４】
ブロックの最後のページまで書き込みが完了したならば（ステップＳ６７のＹＥＳ）、ホスト２は、ブロック割り当て・消去コマンドをＳＳＤ３に送信する（ステップ６８）。
【０３０５】
ライトコマンドのコマンド処理がエラーしたならば（ステップＳ６１のＮＯ）、ホスト２は、不正書き込み順によるエラーであるか否かを判定する（ステップＳ６９）。
【０３０６】
不正書き込み順によるエラーであるならば（ステップＳ６９のＹＥＳ）、ホスト２は、このライトコマンドによって書き込まれるべきデータに関連づけられたＮＳＩＤを特定する処理、不正書き込み順の原因を特定するための処理等を含むエラー処理を実行する（ステップＳ７０）。
【０３０７】
［リードコマンド］
図３７は、ＳＳＤ３に適用される物理ＮＡＮＤアクセス管理ＡＰＩ２１用のリードコマンドを示す。
【０３０８】
リードコマンドは、以下の入力パラメータを含む。
【０３０９】
（１）ブロックアドレスとページアドレス：  これは、データがリードされるべきＮＡＮＤメモリ５上の位置を指定する物理アドレスである。
【０３１０】
（２）処理優先度：  処理優先度はこのリードコマンドの優先度を示す。
【０３１１】
（３）読み出しデータの転送先アドレス：  読み出しデータの転送先アドレスは、読み出しデータが転送されるべき入力バッファ（ホストのメモリ）上の位置を示す。
【０３１２】
（４）読み出しページ数：  読み出しページ数は、読み出すべきページの数を示す。
【０３１３】
（５）許容レイテンシー：  許容レイテンシーは、最少レイテンシー、通常レイテンシー、または長レイテンシーのいずれかを指定する。
【０３１４】
リードコマンドは、以下の出力パラメータを含む。
【０３１５】
（１）終了ステータス：  リードコマンドの成功またはエラーを示す終了ステータスがホスト２に返される。
【０３１６】
（２）ブロックアドレスとページアドレス：  ブロックアドレスとページアドレスは、データが読み出されたＮＡＮＤメモリ５上の位置を示す。
【０３１７】
（３）ページ数：  この値は、データが読み出されたページの数を示す。
【０３１８】
（４）先頭アドレス：  これは、読み出しデータの先頭アドレスを示す。
【０３１９】
図３８は、ＳＳＤ３に適用される仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のリードコマンドを示す。
【０３２０】
このリードコマンドは、以下の入力パラメータを含む。
【０３２１】
（１）仮想ブロックアドレスとページアドレス：  これは、データがリードされるべきＮＡＮＤメモリ５上の位置を指定する物理アドレスである。
【０３２２】
（２）処理優先度：  処理優先度はこのリードコマンドの優先度を示す。
【０３２３】
（３）読み出しデータの転送先アドレス：  読み出しデータの転送先アドレスは、読み出しデータが転送されるべき入力バッファ（ホストのメモリ）上の位置を示す。
【０３２４】
（４）読み出しページ数：  読み出しページ数は、読み出すべきページの数を示す。
【０３２５】
（５）許容レイテンシー：  許容レイテンシーは、最少レイテンシー、通常レイテンシー、または長レイテンシーのいずれかを指定する。
【０３２６】
リードコマンドは、以下の出力パラメータを含む。
【０３２７】
（１）終了ステータス：  リードコマンドの成功またはエラーを示す終了ステータスがホスト２に返される。
【０３２８】
（２）仮想ブロックアドレスとページアドレス：  仮想ブロックアドレスとページアドレスは、データが読み出されたＮＡＮＤメモリ５上の位置を示す。
【０３２９】
（３）ページ数：  この値は、データが読み出されたページの数を示す。
【０３３０】
（４）先頭アドレス：  これは、読み出しデータの先頭アドレスを示す。
【０３３１】
［リード処理の手順］
図３９と図４０を参照して、ＳＳＤ３とホスト２とによって実行されるデータリード処理の手順を示す。
【０３３２】
図３９に示されているように、ホスト２は、アドレス変換テーブル（つまりルックアップテーブルＬＵＴ４５）を参照して、リード対象のデータのＬＢＡをＮＡＮＤメモリ５の物理アドレスに変換する（ステップＳ７１）。そして、ホスト２は、この物理アドレスを含むリードコマンドをＳＳＤ３に送信する。
【０３３３】
ＳＳＤ３のコントローラ４は、この物理アドレスによって指定されるブロック内のページからデータを読み出す（ステップＳ７２）。このステップＳ７２では、コントローラ４は、図４０に示されている処理を実行する。
【０３３４】
すなわち、図４０に示されているように、コントローラ４は、物理アドレスによって指定される物理位置（あるブロック内のあるページ）からデータを読み出す動作と、読み出されたデータのエラー訂正動作とを実行する（ステップＳ５１）。そして、コントローラ４は、読み出されたデータがＥＣＣによって訂正不能なエラーを含むか否かを判定する（ステップＳ８２）。もし、まだリード可能な状態になっていないページがリードされたならば、読み出されたデータはＥＣＣによって訂正不能な多くのエラーを含む。
【０３３５】
読み出されたデータが訂正不能なエラーを含まない場合には（ステップＳ８２のＮＯ）、コントローラ４は、この読み出されたデータをホスト２に転送し、且つ成功を示すコマンド完了レスポンスをホスト２に転送する（ステップＳ８３）。
【０３３６】
一方、読み出されたデータが訂正不能なエラーを含む場合には（ステップＳ８２のＹＥＳ）、コントローラ４は、エラーを示すコマンド完了レスポンスをホスト２に転送する（ステップＳ８４）。
【０３３７】
［データコピー］
図４１は、ＳＳＤ３によって実行されるデータコピー動作の例を示す。
【０３３８】
ＳＳＤ３のコントローラ４は、コピー元ブロック内の全てのテータをコピー先ブロックにコピーするのではなく、コピー元ブロック内の指定されたページ範囲内の無効データをスキップし、このページ範囲内の有効データのみをコピー先ブロック内の指定されたページ範囲にコピーする。このデータコピー動作は、上述したようにガベージコレクションの目的で実行される。
【０３３９】
データコピー動作においては、上述したように、コントローラ４は、有効データを含まない無効ページのコピーを自動的にスキップする。これにより、ホスト２がコピーすべきページをページ単位で個別に指定せずとも、有効ページのみをコピー先ブロックにコピーすることができる。
【０３４０】
また、ホスト２は、コピーコマンドによってコピー元ブロックとコピー先ブロックだけでなく、コピー元ブロック内のコピー開始ページおよびコピー先ブロック内の転送開始ページを指定することができる。これにより、コピー元ブロック内の特定のページ群を、コピー先ブロック内の特定のページ群にコピーするというきめ細かなコピー動作を実行することができる。なお、複数個のコピー元ブロックが指定されてもよい。
【０３４１】
さらに、ホスト２は、データコピーの終了条件として、「コピー終了までにコピーすべき有効データ数」、または「コピー終了までに検出すべき無効データ数」のどちらを指定してもよい。
【０３４２】
「コピー終了までにコピーすべき有効データ数」がデータコピー動作の終了条件として指定された場合には、コピー先ブロックに所望の数の有効データがコピーされるまでデータコピー動作が継続される。コピー先ブロックに所望の数の有効データがコピーされた時に、データコピー動作が終了される。例えば、「コピー終了までにコピーすべき有効データ数」として一つのブロック分のデータ数が指定されたならば、幾つかのコピー元ブロックからコピーされた有効データでコピー先ブロックを満たすことができ、また幾つかのコピー元ブロックを無効データのみを含むフリーブロックにすることができる。なお、必ずしも一回のデータコピー動作でフリーブロック数を一つ増やす必要は無く、何回かのデータコピー動作によってフリーブロック数を一つ増やしてもよい。このため、「コピー終了までにコピーすべき有効データ数」は、どのような数であってもよい。
【０３４３】
「コピー終了までに検出すべき無効データ数」がデータコピー動作の終了条件として指定された場合には、無効データのコピーがスキップされた回数が所望の回数になるまでデータコピー動作が継続される。無効データのコピーがスキップされた回数が所望の回数になった時に、データコピー動作が終了される。通常、選択された幾つかのコピー元ブロックそれぞれは有効データと無効データとが混在するブロックである。また、これら選択された幾つかのコピー元ブロックに含まれる無効データ数の合計は、少なくとも、一つのブロック分のデータ数以上である。このため、例えば、「コピー終了までに検出すべき無効データ数」として一つのブロック分のデータ数が指定されたならば、コピー動作が終了されるまでに、少なくとも一つのコピー元ブロックを無効データのみを含むフリーブロックにすることができる。上述したように、何回かのデータコピー動作によってフリーブロック数を一つ増やしてもよいので、「コピー終了までに検出すべき無効データ数」も、どのような数であってもよい。
【０３４４】
図４１では、説明を簡単にするために、ホスト２からのデータコピーコマンドによって以下のパラメータが指定された場合を想定する。
【０３４５】
（１）コピー元ブロック＝ブロックＢ０
（２）コピー元開始ページ＝Ｐ３１
（３）コピー先ブロック＝ブロックＢ１０
（４）転送先開始ページ＝Ｐ１１
（５）有効／無効ビットマップ＝ビットマップデータ８１
（６）コピー終了までにコピーすべき有効データ数＝３
ビットマップデータ８１は、コピー対象範囲内の各ページのデータの有効／無効を示す。コントローラ４は、まず、コピー元ブロックＢ０のコピー開始ページＰ３１のデータの有効／無効を判定する。図４１のケースでは、ページＰ３１のデータは有効である。このため、コントローラ４は、ページＰ３１からデータをリードし、このリードしたデータをコピー先ブロックＢ１０の転送先開始ページＰ１１にコピーする。コピー先ブロックＢ１０にコピーされた有効データ数は１となる。
【０３４６】
コントローラ４は、コピー元ブロックＢ０のページＰ３２のデータの有効／無効を判定する。図４１のケースでは、ページＰ３２のデータは無効である。このため、コントローラ４は、ページＰ３２のデータのコピーをスキップする。コピー先ブロックＢ１０にコピーされた有効データ数は１のまま維持される。
【０３４７】
コントローラ４は、コピー元ブロックＢ０のページＰ３３のデータの有効／無効を判定する。図４１のケースでは、ページＰ３３のデータは有効である。このため、コントローラ４は、ページＰ３３からデータをリードし、このリードしたデータをコピー先ブロックＢ１０のページＰ１２にコピーする。コピー先ブロックＢ１０にコピーされた有効データ数は２となる。
【０３４８】
コントローラ４は、コピー元ブロックＢ０のページＰ３４のデータの有効／無効を判定する。図４１のケースでは、ページＰ３４のデータは無効である。このため、コントローラ４は、ページＰ３４のデータのコピーをスキップする。コピー先ブロックＢ１０にコピーされた有効データ数は２のまま維持される。
【０３４９】
コントローラ４は、コピー元ブロックＢ０のページＰ３５のデータの有効／無効を判定する。図４１のケースでは、ページＰ３５のデータは有効である。このため、コントローラ４は、ページＰ３５からデータをリードし、このリードしたデータをコピー先ブロックＢ１０のページＰ１３にコピーする。コピー先ブロックＢ１０にコピーされた有効データ数は３となる。コピー先ブロックＢ１０にコピーされた有効データ数が、終了条件（コピー終了までにコピーすべき有効データ数）に達したため、コピー動作は終了される。
【０３５０】
図４２は、検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作の例を示す。
【０３５１】
図４２では、ホスト２からのデータコピーコマンドによって以下のパラメータが指定された場合を想定する。
【０３５２】
（１）コピー元ブロック＝ブロックＢ０
（２）コピー元開始ページ＝Ｐ３１
（３）コピー先ブロック＝ブロックＢ１０
（４）転送先開始ページ＝Ｐ１１
（５）有効／無効ビットマップ＝ビットマップデータ８１
（６）コピー終了までに検出すべき無効データ数＝３
コントローラ４は、まず、コピー元ブロックＢ０のコピー開始ページＰ３１のデータの有効／無効を判定する。図４２のケースでは、ページＰ３１のデータは有効である。このため、コントローラ４は、ページＰ３１からデータをリードし、このリードしたデータをコピー先ブロックＢ１０の転送先開始ページＰ１１にコピーする。
【０３５３】
コントローラ４は、コピー元ブロックＢ０のページＰ３２のデータの有効／無効を判定する。図４２のケースでは、ページＰ３２のデータは無効である。このため、コントローラ４は、ページＰ３２のデータのコピーをスキップする。検出された無効データ数（つまりコピーがスキップされたデータの数）は、１となる。
【０３５４】
コントローラ４は、コピー元ブロックＢ０のページＰ３３のデータの有効／無効を判定する。図４２のケースでは、ページＰ３３のデータは有効である。このため、コントローラ４は、ページＰ３３からデータをリードし、このリードしたデータをコピー先ブロックＢ１０のページＰ１２にコピーする。検出された無効データ数は１に維持される。
【０３５５】
コントローラ４は、コピー元ブロックＢ０のページＰ３４のデータの有効／無効を判定する。図４２のケースでは、ページＰ３４のデータは無効である。このため、コントローラ４は、ページＰ３４のデータのコピーをスキップする。検出された無効データ数は２となる。
【０３５６】
コントローラ４は、コピー元ブロックＢ０のページＰ３５のデータの有効／無効を判定する。図４２のケースでは、ページＰ３５のデータは有効である。このため、コントローラ４は、ページＰ３５からデータをリードし、このリードしたデータをコピー先ブロックＢ１０のページＰ１３にコピーする。検出された無効データ数は２に維持される。
【０３５７】
コントローラ４は、コピー元ブロックＢ０のページＰ３６のデータの有効／無効を判定する。図４２のケースでは、ページＰ３６のデータは有効である。このため、コントローラ４は、ページＰ３６からデータをリードし、このリードしたデータをコピー先ブロックＢ１０のページＰ１４にコピーする。検出された無効データ数は２に維持される。
【０３５８】
コントローラ４は、コピー元ブロックＢ０のページＰ３７のデータの有効／無効を判定する。図４２のケースでは、ページＰ３７のデータは無効である。このため、コントローラ４は、ページＰ３７のデータのコピーをスキップする。検出された無効データ数は３となる。検出された無効データ数が、終了条件（コピー終了までに検出すべき無効データ数）に達したため、コピー動作は終了される。
【０３５９】
図４３は、複数のコピー元ブロックが指定され且つコピーすべき有効データ数が終了条件として指定された場合におけるデータコピー動作の例を示す。
【０３６０】
ここでは、図示の簡単化のために、１ブロックに含まれるページ数が３、コピー終了までにコピーすべき有効データ数が３、である場合を想定する。ビットマップデータ８１Ａ、８１ＢはブロックＢ１１、Ｂ２０にそれぞれ対応する有効／無効ビットマップである。
【０３６１】
ブロックＢ１１、Ｂ２０はホスト２からのコピーコマンドによって指定されたコピー元ブロック、ブロックＢ３０はコピーコマンドによって指定されたコピー先ブロックである。
【０３６２】
コントローラ４は、まず、コピー元ブロックＢ１１のコピー開始ページＰ０のデータの有効／無効を判定する。図４３のケースでは、ページＰ０のデータは有効である。このため、コントローラ４は、ページＰ０からデータをリードし、このリードしたデータをコピー先ブロックＢ３０の転送先開始ページＰ０にコピーする。コピー先ブロックＢ３０にコピーされた有効データ数は１となる。
【０３６３】
コントローラ４は、コピー元ブロックＢ１１のページＰ１のデータの有効／無効を判定する。図４３のケースでは、ページＰ１のデータは有効である。このため、コントローラ４は、ページＰ１からデータをリードし、このリードしたデータをコピー先ブロックＢ３０のページＰ１にコピーする。コピー先ブロックＢ３０にコピーされた有効データ数は２となる。
【０３６４】
コントローラ４は、コピー元ブロックＢ１１のページＰ２のデータの有効／無効を判定する。図４３のケースでは、ページＰ２のデータは無効である。このため、コントローラ４は、ページＰ２のデータのコピーをスキップする。コピー先ブロックＢ３０にコピーされた有効データ数は２に維持される。
【０３６５】
コントローラ４は、次のコピー元ブロックＢ２０のページＰ０のデータの有効／無効を判定する。図４３のケースでは、コピー元ブロックＢ２０のページＰ０のデータは有効である。このため、コントローラ４は、コピー元ブロックＢ２０のページＰ０からデータをリードし、このリードしたデータをコピー先ブロックＢ３０のページＰ２にコピーする。コピー先ブロックＢ３０にコピーされた有効データ数は３となる。コピー先ブロックＢ３０にコピーされた有効データ数が、終了条件（コピー終了までにコピーすべき有効データ数）に達したため、コピー動作は終了される。
【０３６６】
コントローラ４は、コピーコマンドのコマンド完了レスポンスとして、コピーされた有効データ毎に有効データＩＤとこの有効データが格納されているコピー先ブロック内の位置（コピー先位置）とを示すデータコピー情報をホスト２に通知する。このデータコピー情報に基づき、ホスト２は、アドレス変換テーブル（ＬＵＴ４５）を更新して個々のコピーされたデータを正しい物理アドレスにマッピングする。ブロックＢ１１のページＰ０のデータ、ページＰ１のデータは無効化される。これにより、ブロックＢ１１は有効データを含まないフリーブロックとなる。同様に、ブロックＢ２０のページＰ０のデータも無効化される。
【０３６７】
さらに、コントローラ４は、コピー元ブロックＢ２０のページＰ１を次回のコピー元開始ページとして決定し、そして、次回のコピー元開始ページの物理アドレス（コピー元ブロックＢ２０のブロックアドレス、ページＰ１のページアドレス）をホスト２に通知する。
【０３６８】
さらに、コントローラ４は、データコピー動作によって有効データがコピーされたコピー先ブロックのページ群の中で、読み出し可能なデータを保持する最新のページを示すページアドレス（最新ページアドレス）を特定し、特定された最新ページアドレスホスト２に通知する。これにより、ホスト２は、コピー先ブロックＢ３０内のページ群中の読み出し可能な最後のページを知ることができる。
【０３６９】
図４４は、複数のコピー元ブロックが指定され且つ検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作の例を示す。
【０３７０】
ここでは、図示の簡単化のために、１ブロックに含まれるページ数が３、コピー終了までに検出すべき無効データ数が３、である場合を想定する。ビットマップデータ８１Ａ、８１Ｂ、８１ＣはブロックＢ１１、Ｂ２０、Ｂ２５にそれぞれ対応する有効／無効ビットマップである。
【０３７１】
ブロックＢ１１、Ｂ２０、Ｂ２５はホスト２からのコピーコマンドによって指定されたコピー元ブロック、ブロックＢ３０、Ｂ３１はコピーコマンドによって指定されたコピー先ブロックである。
【０３７２】
コントローラ４は、まず、コピー元ブロックＢ１１のコピー開始ページＰ０のデータの有効／無効を判定する。図４４のケースでは、ページＰ０のデータは有効である。このため、コントローラ４は、ページＰ０からデータをリードし、このリードしたデータをコピー先ブロックＢ３０の転送先開始ページＰ０にコピーする。
【０３７３】
コントローラ４は、コピー元ブロックＢ１１のページＰ１のデータの有効／無効を判定する。図４４のケースでは、ページＰ１のデータは有効である。このため、コントローラ４は、ページＰ１からデータをリードし、このリードしたデータをコピー先ブロックＢ３０のページＰ１にコピーする。
【０３７４】
コントローラ４は、コピー元ブロックＢ１１のページＰ２のデータの有効／無効を判定する。図４４のケースでは、ページＰ２のデータは無効である。このため、コントローラ４は、ページＰ２のデータのコピーをスキップする。検出された無効データ数（つまりコピーがスキップされたデータの数）は、１となる。
【０３７５】
コントローラ４は、次のコピー元ブロックＢ２０のページＰ０のデータの有効／無効を判定する。図４４のケースでは、コピー元ブロックＢ２０のページＰ０のデータは有効である。このため、コントローラ４は、コピー元ブロックＢ２０のページＰ０からデータをリードし、このリードしたデータをコピー先ブロックＢ３０のページＰ２にコピーする。検出された無効データ数はまだ終了条件に達していないため、コピー動作は継続される。
【０３７６】
コントローラ４は、コピー元ブロックＢ２０のページＰ１のデータの有効／無効を判定する。図４４のケースでは、ページＰ１のデータは無効である。このため、コントローラ４は、コピー元ブロックＢ２０のページＰ１のデータのコピーをスキップする。検出された無効データ数は、２となる。
【０３７７】
コントローラ４は、コピー元ブロックＢ２０のページＰ２のデータの有効／無効を判定する。図４４のケースでは、コピー元ブロックＢ２０のページＰ２のデータは有効である。このため、コントローラ４は、コピー元ブロックＢ２０のページＰ２からデータをリードし、このリードしたデータをコピー先ブロックＢ３１のページＰ０にコピーする。
【０３７８】
コントローラ４は、次のコピー元ブロックＢ２５のページＰ０のデータの有効／無効を判定する。図４４のケースでは、コピー元ブロックＢ２５のページＰ０のデータは無効である。このため、コントローラ４は、コピー元ブロックＢ２５のページＰ０のデータのコピーをスキップする。検出された無効データ数は、３となる。検出された無効データ数が、終了条件（コピー終了までに検出すべき有効データ数）に達したため、コピー動作は終了される。
【０３７９】
コントローラ４は、コピーコマンドのコマンド完了レスポンスとして、コピーされたデータ毎にデータＩＤとコピー先位置とを示すデータコピー情報をホスト２に通知する。このデータコピー情報に基づき、ホスト２は、アドレス変換テーブル（ＬＵＴ４５）を更新して個々のコピーされたデータを正しい物理アドレスにマッピングする。ブロックＢ１１のページＰ０のデータ、ページＰ１のデータは無効化される。これにより、ブロックＢ１１は有効データを含まないフリーブロックとなる。同様に、ブロックＢ２０のページＰ０のデータ、ページＰ２のデータも無効化される。これにより、ブロックＢ１１、Ｂ２０は有効データを含まないフリーブロックとなる。
【０３８０】
さらに、コントローラ４は、コピー元ブロックＢ２５のページＰ１を次回のコピー元開始ページとして決定し、そして、次回のコピー元開始ページの物理アドレス（コピー元ブロックＢ２５のブロックアドレス、ページＰ１のページアドレス）をホスト２に通知する。
【０３８１】
さらに、コントローラ４は、読み出し可能なデータを保持するコピー先ブロックＢ３０内の最新ページアドレスと読み出し可能なデータを保持するコピー先ブロックＢ３１内の最新ページアドレスとを特定し、これら最新ページアドレスをホスト２に通知する。これにより、ホスト２は、各コピー先ブロック内のページ群中の読み出し可能な最後のページを知ることができる。
【０３８２】
図４５は、データサイズがページサイズよりも小さく且つコピーすべき有効データ数が終了条件として指定された場合におけるデータコピー動作を示す。
【０３８３】
ここでは、一例として、ページサイズが１６Ｋバイトであり、データサイズが４Ｋバイトである場合を想定する。このデータサイズは、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを管理するための上述の管理サイズに対応する。コピー元ブロックＢ０のコピー開始ページＰ３１には、各々が４Ｋバイトのデータサイズを有するデータＤ１、データＤ２、データＤ３、データＤ４が格納されている。各データのコピー元ブロックＢ０の次のページＰ３２には、各々が４Ｋバイトのデータサイズを有するデータＤ５、データＤ６、データＤ７、データＤ８が格納されている。ビットマップデータ８１は、データＤ１、データＤ２、データＤ３、データＤ４、データＤ５、データＤ６、データＤ７、データＤ８、…それぞれの有効／無効を示す。
【０３８４】
このように、データサイズがページサイズよりも小さい場合には、コピー元ブロックＢ０の各ページは、ビットマップデータ８１によってその有効／無効がそれぞれ示される複数のデータを含む。
【０３８５】
コントローラ４は、（１）一つ以上の有効データを含むコピー元ブロックＢ０内のページそれぞれからページ単位でデータを読み出し、（２）読み出したデータから有効データを抽出することによって１ページのページサイズに対応する数の有効データを準備し、（３）準備された１ページのページサイズに対応する数の有効データをコピー先ブロックＢ１０のコピー先領域（転送先開始ページから始まる領域）にページ単位で書き込むことによって有効データをコピー先領域にコピーし且つ無効データのコピーをスキップする。そして、コントローラ４は、コピー先領域にコピーされた有効データの数が、コピー終了までにコピーすべき有効データの数以上である場合に、またはコピーがスキップされた無効データの数が、コピー終了までに検出すべき無効データの数以上である場合に、データコピー動作を終了する。
【０３８６】
つまり、有効データを含む個々のページに関しては、コントローラ４は、これらページからページ単位でデータを順次読み出す。１ページ分の有効データ（ここでは４個の有効データ）が準備できたならば、コントローラ４は、この１ページ分の有効データを、コピー先ブロックにページ単位で書き込む。これにより、有効データのみを、それら有効データをページ単位にアラインした状態でコピー先ブロックに効率良くコピーすることができる。１ページ分の有効データが揃う前にコピー元ブロックのデータがなくなった場合は、コントローラ４は、現在準備されている有効データにダミーデータをパディングし、これによって得られる１ページ分のデータをコピー先ブロックに書き込む。
【０３８７】
より詳しくは、以下のコピー動作が実行される。以下では、図示の簡単化のために、コピー終了までにコピーすべき有効データ数が２である場合を想定する。
【０３８８】
コントローラ４は、まず、コピー元ブロックＢ０のコピー開始ページＰ３１が有効データを含むか否かを判定する。図４５のケースでは、ページＰ３１は有効データＤ１、Ｄ３を含む。このため、コントローラ４は、ページＰ３１から１ページ分のデータ（Ｄ１〜Ｄ４）をリードする。リードされたデータはコピーバッファ３２に一時的に格納されてもよい。
【０３８９】
リードされた有効データの数はＤ１、Ｄ３の２つだけであり、１ページ分のサイズに対応する４つの有効データが揃っていないので、コントローラ４は、コピー元ブロックＢ０からページ単位でデータをリードする処理を続ける。
【０３９０】
コントローラ４は、コピー元ブロックＢ０のページＰ３２が有効データを含むか否かを判定する。図４５のケースでは、ページＰ３２は有効データＤ５、Ｄ６を含む。このため、コントローラ４は、ページＰ３２から１ページ分のデータ（Ｄ５〜Ｄ８）をリードする。リードされたデータはコピーバッファ３２に一時的に格納されてもよい。
【０３９１】
コントローラ４は、ページＰ３１からリードされた１ページ分のデータから有効データＤ１、Ｄ３を抽出し、ページＰ３２からリードされた１ページ分のデータから有効データＤ５、Ｄ６を抽出し、１ページ分の有効データ（Ｄ１、Ｄ３、Ｄ５、Ｄ６）を生成する。そして、コントローラ４は、１ページ分の有効データ（Ｄ１、Ｄ３、Ｄ５、Ｄ６）を、コピー先ブロックＢ１０の転送先開始ページＰ１１にコピーする。これにより、無効データＤ２、Ｄ３、Ｄ７、Ｄ８のコピーがスキップされ、有効データのみがページ単位でコピー先ブロックＢ１０にコピーされる。このように有効データをページ単位にアラインする処理が優先的に実行され、有効データがページ単位にアラインされた後に、終了条件の判定が行われる。
【０３９２】
コピー先ブロックＢ１０にコピーされた有効データ数は４となる。コピー先ブロックＢ１０にコピーされた有効データ数４は、終了条件によって指定される有効データ数（ここでは２）以上であるので、コピー動作は終了される。
【０３９３】
以上のコピー動作により、たとえ個々のデータのサイズがページサイズよりも小さい場合であっても、有効データのみを、それら有効データをページ単位にアラインした状態でコピー先ブロックに効率良くコピーすることができる。
【０３９４】
コントローラ４は、コピーコマンドのコマンド完了レスポンスとして、コピーされたデータ毎にデータＩＤとコピー先位置とを示すデータコピー情報をホスト２に通知する。コピー先位置は、ブロックアドレス、ページアドレス、およびページ内オフセットによって表現されてもよい。ある４Ｋバイトのデータに対応するページ内オフセットは、この４Ｋバイトのデータが格納されているページ内のオフセット位置を示すページ内アドレスである。このデータコピー情報に基づき、ホスト２は、アドレス変換テーブル（ＬＵＴ４５）を更新して個々のコピーされたデータ（ここでは、Ｄ１、Ｄ３、Ｄ５、Ｄ６）を正しい物理アドレスにマッピングする。ブロックＢ０のページＰ３１のデータＤ１、Ｄ３、ページＰ３２のデータＤ５、Ｄ６は無効化される。
【０３９５】
さらに、コントローラ４は、コピー元ブロックＢ０のページＰ３３を次回のコピー元開始ページとして決定し、そして、次回のコピー元開始ページの物理アドレス（コピー元ブロックＢ０のブロックアドレス、ページＰ３３のページアドレス）をホスト２に通知する。
【０３９６】
さらに、コントローラ４は、読み出し可能なデータを保持するコピー先ブロックＢ１０内の最新ページアドレスを特定し、この最新ページアドレスをホスト２に通知する。
【０３９７】
図４６は、データサイズがページサイズよりも小さく且つ検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作を示す。以下では、コピー終了までに検出すべき無効データ数が２である場合を想定する。
【０３９８】
コントローラ４は、まず、コピー元ブロックＢ０のコピー開始ページＰ３１が有効データを含むか否かを判定する。図４６のケースでは、ページＰ３１は有効データＤ１、Ｄ３を含む。このため、コントローラ４は、ページＰ３１から１ページ分のデータ（Ｄ１〜Ｄ４）をリードする。リードされたデータはコピーバッファ３２に一時的に格納されてもよい。
【０３９９】
リードされた１ページ分のデータ（Ｄ１〜Ｄ４）に含まれる無効データ数はＤ２、Ｄ４の２つだけであるので、コントローラ４は、コピー元ブロックＢ０からページ単位でデータをリードする処理を続ける。
【０４００】
コントローラ４は、コピー元ブロックＢ０のページＰ３２が有効データを含むか否かを判定する。図４６のケースでは、ページＰ３２は有効データＤ５、Ｄ６を含む。このため、コントローラ４は、ページＰ３２から１ページ分のデータ（Ｄ５〜Ｄ８）をリードする。リードされたデータはコピーバッファ３２に一時的に格納されてもよい。
【０４０１】
コントローラ４は、ページＰ３１からリードされた１ページ分のデータから有効データＤ１、Ｄ３を抽出し、ページＰ３２からリードされた１ページ分のデータから有効データＤ５、Ｄ６を抽出し、１ページ分の有効データ（Ｄ１、Ｄ３、Ｄ５、Ｄ６）を生成する。そして、コントローラ４は、１ページ分の有効データ（Ｄ１、Ｄ３、Ｄ５、Ｄ６）を、コピー先ブロックＢ１０の転送先開始ページＰ１１にコピーする。これにより、無効データＤ２、Ｄ４、Ｄ７、Ｄ８のコピーがスキップされ、有効データのみがページ単位でコピー先ブロックＢ１０にコピーされる。
【０４０２】
検出された無効データ数、つまりコピーがスキップされた無効データ数は４となる。検出された無効データ数４が、終了条件によって指定される無効データ数（ここでは２）以上であるので、コピー動作は終了される。
【０４０３】
［データコピーコマンド］
図４７は、ＳＳＤ３に適用されるデータコピーコマンドの入力パラメータを示す。データコピーコマンドは以下の入力パラメータを含む。
【０４０４】
（１）コピー元ブロックアドレス（コピー元ブロックアドレスリスト）：  このパラメータ値は、コピー元ブロックのブロックアドレスを示す。コピー元ブロックのブロックアドレスは、仮想ブロックアドレスと仮想ブロック内ブロック番号によって指定することも可能である。コピー元ブロックアドレスリストは複数のコピー元ブロックそれぞれのブロックアドレスを含む。つまり、ホスト２は一つ以上のコピー元ブロックを指定することができる。
【０４０５】
（２）コピー元ブロック内のコピー開始位置：  このパラメータ値は、データがコピーされるべきコピー元ブロック内の開始位置（コピー元開始ページ）を示す。複数のコピー元ブロックが指定された場合には、１つ目のコピー元ブロック内のコピー開始位置のみがこのパラメータ値によって指定されてもよい。
【０４０６】
（３）コピー先ブロックアドレス：  コピー先ブロックアドレスは、コピー先ブロックのブロックアドレスを示す。コピー先ブロックのブロックアドレスは、仮想ブロックアドレスと仮想ブロック内ブロック番号によって指定することも可能である。
【０４０７】
（４）コピー先ブロック内の開始位置：  コピー先ブロック内の開始位置は、データが転送されるべきコピー先ブロック内の開始位置（転送先開始ページ）を示す。
【０４０８】
（５）有効／無効ビットマップ：  有効／無効ビットマップは、コピー元ブロック内の有効データと無効データの配置を示す情報（ビットマップデータ）である。
【０４０９】
（６）コピー終了までにコピーすべき有効データ数：  このパラメータ値は、コピー先ブロックに転送つまりコピーすべきデータ数（例  ページ数）を指定する。このパラメータ値は、コピー動作の終了条件として使用される。データコピー動作は、無効データのコピーをスキップしながら有効データのみをコピーする。
【０４１０】
（７）コピー終了までに検出すべき無効データ数：  このパラメータ値も、コピー動作の終了条件として使用可能である。ホスト２は、一つのコピーコマンドにおいては（６）の終了条件または（７）の終了条件の何れか一方のみを指定することができる。
【０４１１】
（８）データの大きさ（データサイズ）
この他、データコピーコマンドは、処理優先度等の他の入力パラメータ値を含んでもよい。
【０４１２】
図４８は、データコピーコマンドの出力パラメータを示す。データコピーコマンドは以下の出力パラメータを含む。
【０４１３】
（１）コピー終了までに検出した無効データ数
（２）コピー先ブロックにコピーしたデータの総数：  このパラメータ値は、コピー先ブロックに実際にコピーされたデータの総数を示す。コピー終了までに検出すべき無効データ数が終了条件として指定された場合、コピー先ブロックに実際にコピーされるデータの総数は不定である。このため、このパラメータ値は、コピー終了までに検出すべき無効データ数が終了条件として指定された場合において有用である。
【０４１４】
（３）コピー先ブロックにコピーしたデータの識別子とコピー先の記録位置の組：  このパラメータ値は、どの有効データがコピー先ブロック内のどこにコピーされたかを示す。
【０４１５】
（４）次回にコピーを開始すべきデータの位置：  このパラメータ値は、次回のコピーにおけるコピー元ブロック内のコピー開始位置を示す。
【０４１６】
（５）リード可能最新ページアドレス：  このパラメータ値は、コピー先ブロック内で、読み出し可能なデータを保持する最新ページアドレスを示す。
【０４１７】
［データコピー処理の手順］
図４９のフローチャートは、コピーすべき有効データ数が終了条件として指定された場合におけるデータコピー動作の手順を示す。
【０４１８】
コントローラ４は、まず、データコピーコマンドによって指定されるコピー元ブロック内のコピー開始位置（コピー元開始ページ）を現在のコピー対象ページとして設定する。そして、コントローラ４は、ビットマップデータに基づいて、現在のコピー対象ページが有効データであるか否かを判定する（ステップＳ９１）。
【０４１９】
現在のコピー対象ページが無効データであるならば（ステップＳ９１のＮＯ）、コントローラ４は、現在のコピー対象ページのコピー動作をスキップし（ステップＳ９２）、現在のコピー対象ページを次のページに変更する（ステップＳ９３）。
【０４２０】
現在のコピー対象ページが有効データであるならば（ステップＳ９１のＹＥＳ）、コントローラ４は、現在のコピー対象ページからこの有効データをリードし（ステップＳ９４）、このリードされた有効データをコピー先ブロックの転送先開始ページに書き込む（ステップＳ９５）。コントローラ４は、コピーした有効データ数を更新し（ステップＳ９６）、コピーした有効データ数が、コピーすべき有効データ数に達したか否かを判定する（ステップＳ９７）。
【０４２１】
コピーした有効データ数が、コピーすべき有効データ数に達していないならば（ステップＳ９７のＮＯ）、コントローラ４は、現在のコピー対象ページを次のページに変更し（ステップＳ９８）、そしてステップＳ９１〜Ｓ９７の処理を再び実行する。
【０４２２】
コピーした有効データ数が、コピーすべき有効データ数に達したならば（ステップＳ９７のＹＥＳ）、コントローラ４は、終了処理を実行する（ステップＳ９９）。ステップＳ９９では、コントローラ４は、返り値のデータを作成し、返り値のデータを含むコマンド完了レスポンスをホスト２に送信する。
【０４２３】
図５０のフローチャートは、検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作の手順を示す。
【０４２４】
コントローラ４は、まず、データコピーコマンドによって指定されるコピー元ブロック内のコピー開始位置（コピー元開始ページ）を現在のコピー対象ページとして設定する。そして、コントローラ４は、ビットマップデータに基づいて、現在のコピー対象ページが有効データであるか否かを判定する（ステップＳ１０１）。
【０４２５】
現在のコピー対象ページが有効データであるならば（ステップＳ１０１のＹＥＳ）、コントローラ４は、現在のコピー対象ページからこの有効データをリードし（ステップＳ１０２）、このリードされた有効データをコピー先ブロックの転送先開始ページに書き込む（ステップＳ１０３）。コントローラ４は、現在のコピー対象ページを次のページに変更し（ステップＳ１０４）、ステップＳ１０１の処理に進む。
【０４２６】
現在のコピー対象ページが無効データであるならば（ステップＳ１０１のＮＯ）、コントローラ４は、現在のコピー対象ページのコピーをスキップし（ステップＳ１０５）、検出した無効データ数を更新（ステップＳ１０６）し、そして、検出した無効データ数が、検出すべき無効データ数に達したか否かを判定する（ステップＳ１０７）。
【０４２７】
検出した無効データ数が、検出すべき無効データ数に達していないならば（ステップＳ１０７のＮＯ）、コントローラ４は、現在のコピー対象ページを次のページに変更し（ステップＳ１０８）、ステップＳ１０１の処理に進む。
【０４２８】
検出した無効データ数が、検出すべき無効データ数に達しているならば（ステップＳ１０７のＹＥＳ）、コントローラ４は、終了処理を実行する（ステップＳ１０９）。ステップＳ１０９では、コントローラ４は、返り値のデータを作成し、返り値のデータを含むコマンド完了レスポンスをホスト２に送信する。
【０４２９】
図５１のフローチャートは、データサイズがページサイズよりも小さく且つコピーすべき有効データ数が終了条件として指定された場合におけるデータコピー動作の手順を示す。
【０４３０】
コントローラ４は、まず、データコピーコマンドによって指定されるコピー元ブロック内のコピー開始位置（コピー元開始ページ）を現在のコピー対象ページとして設定する。そして、コントローラ４は、ビットマップデータに基づいて、現在のコピー対象ページが少なくとも一つの有効データを含むか否かを判定する（ステップＳ１１１）。
【０４３１】
現在のコピー対象ページが無効データのみを含むページであるならば（ステップＳ１１１のＮＯ）、コントローラ４は、現在のコピー対象ページのコピー動作をスキップし（ステップＳ１１２）、現在のコピー対象ページを次のページに変更し（ステップＳ１１３）、ステップＳ１１１の処理に進む。
【０４３２】
現在のコピー対象ページが少なくとも一つの有効データを含むページであるならば（ステップＳ１１１のＹＥＳ）、コントローラ４は、現在のコピー対象ページ内のデータをページ単位でリードし、リードしたデータをコピーバッファ３２に格納する（ステップＳ１１４）。コントローラ４は、リードしたデータから有効データだけを抽出し、これによって無効データをスキップして、ページサイズにアラインされた有効データのセットを準備する（ステップＳ１１５）。コントローラ４は、ページサイズにアラインされた有効データのセット（１ページ分のサイズを有する有効データ）が準備できたか否かを判定する（ステップＳ１１６）。
【０４３３】
準備された有効データのサイズが１ページ分のサイズよりも少ないならば（ステップＳ１１６のＮＯ）、コントローラ４は、現在のコピー対象ページを次のページに変更し（ステップＳ１１７）、ステップＳ１１１〜Ｓ１１５の処理を再び実行する。
【０４３４】
ページサイズにアラインされた有効データのセット（１ページ分のサイズを有する有効データ）が準備できたならば（ステップＳ１１６のＹＥＳ）、コントローラ４は、この１ページ分のサイズを有する有効データをコピー先ブロックの転送先開始ページに書き込む（ステップＳ１１８）。コントローラ４は、コピーした有効データ数を更新し（ステップＳ１１９）、コピーした有効データ数が、コピーすべき有効データ数以上になったか否かを判定する（ステップＳ１２０）。
【０４３５】
コピーした有効データ数が、コピーすべき有効データ数よりも少ないならば（ステップＳ１２０のＮＯ）、コントローラ４は、現在のコピー対象ページを次のページに変更し（ステップＳ１１７）、そしてステップＳ１１１からの処理を再び実行する。
【０４３６】
コピーした有効データ数が、コピーすべき有効データ数以上ならば（ステップＳ１２０のＹＥＳ）、コントローラ４は、終了処理を実行する（ステップＳ１２１）。ステップＳ１２１では、コントローラ４は、返り値のデータを作成し、返り値のデータを含むコマンド完了レスポンスをホスト２に送信する。
【０４３７】
図５２のフローチャートは、データサイズがページサイズよりも小さく且つ検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作の手順を示す。
【０４３８】
図５２の処理では、図５１のステップＳ１１９、Ｓ１２０の代わりに、ステップＳ１３１、Ｓ１３２の処理が実行される。
【０４３９】
すなわち、ページサイズにアラインされた有効データのセット（１ページ分のサイズを有する有効データ）をコピー先ブロックの転送先開始ページに書き込んだ後（ステップＳ１１８）、コントローラ４は、検出された無効データ数を更新し（ステップ１３１）、検出された無効データ数が、検出すべき無効データ数以上であるか否かを判定する（ステップＳ１３２）。
【０４４０】
検出された無効データ数が、検出すべき無効データ数よりも少ないならば（ステップＳ１３２のＮＯ）、コントローラ４は、現在のコピー対象ページを次のページに変更し（ステップＳ１１７）、そしてステップＳ１１１からの処理を再び実行する。
【０４４１】
検出した無効データ数が、検出すべき無効データ数以上ならば（ステップＳ１３２のＹＥＳ）、コントローラ４は、終了処理を実行する（ステップＳ１２１）。
【０４４２】
［ネームスペース管理］
図５３は、ＳＳＤ３のネームスペース管理機能を示す。
【０４４３】
ＳＳＤ３においては、ＮＳＩＤ＃１のネームスペースに対して指定された個数のブロックを確保（予約）することができ、同様にＮＳＩＤ＃ｎのネームスペースに対しても指定された個数のブロックを確保（予約）することができる。ホスト２に接続されたあるクライアント端末５１（ユーザＡ）は、ＮＳＩＤ＃１を使用してＳＳＤ３をアクセス（リード、ライト、消去）することができ、またホスト２に接続された別のクライアント端末５１（ユーザＢ）は、ＮＳＩＤ＃ｎを使用してＳＳＤ３をアクセス（リード、ライト、消去）することができる。
【０４４４】
いま、ユーザＡが更新頻度の高いデータを扱い、ユーザＢが更新頻度の低いデータを扱う場合を想定する。この場合、ＮＳＩＤ＃１のネームスペースにおいてはライトアンプリフィケーションが増加する可能性がある。ライトアンプリフィケーション（ＷＡ）は、以下のように定義される。
【０４４５】
WA=「ＳＳＤにライトされたデータの総量」 ／ 「ホストからのライトコマンドによってＳＳＤにライトされたデータの総量」
「ＳＳＤにライトされたデータの総量」は、ホストからのライトコマンドによってライトされたデータの総量とガベージコレクション（データコピー動作）等によって内部的にＳＳＤにライトされたデータの総量との和に相当する。
【０４４６】
ライトアンプリフィケーション（ＷＡ）の増加は、ＳＳＤ３内のブロックそれぞれの消去回数の増加を引き起こす。つまり、ライトアンプリフィケーション（ＷＡ）が大きい程、ブロックの消去回数が、その消去回数の上限値に速く達しやすくなる。この結果、ＳＳＤ３の耐久性および寿命の劣化が引き起こされる。
【０４４７】
したがって、ＮＳＩＤ＃１のネームスペースへの書き込みに起因するＳＳＤ３の消耗度は、ＮＳＩＤ＃ｎのネームスペースへの書き込みに起因するＳＳＤ３の消耗度より大きい。
【０４４８】
ＳＳＤ３のネームスペース管理機能は、個々のネームスペース毎にブロック（または仮想ブロック）の合計消去回数を管理し、ホスト２によって指定された特定のネームスペースに対応する合計消去回数をホスト２に対してこの特定のネームスペースによるＳＳＤ３の消耗度の指標として通知することができる。ＮＳＩＤ＃１の合計消去回数は合計消去回数カウンタ３００−１によってカウントされ、ＮＳＩＤ＃ｎの合計消去回数は合計消去回数カウンタ３００−ｎによってカウントされる。あるＮＳＩＤの合計消去回数は、このＮＳＩＤに割り当てられたブロックに対して実行される消去動作の回数をカウントすることによって得られる。
【０４４９】
この通知により、ホスト２は、個々のネームスペースがどのくらいＳＳＤ３を消耗させているかを評価することができる。この結果、ホスト２は、この評価結果に基づいて、合計消去回数の多いネームスペースに対してより多くの個数のブロックを追加的に確保するといった対策を行うことができる。
【０４５０】
例えば、ホストソフトウェアは、ＮＳＩＤ＃１のネームスペースに関しては、ＮＳＩＤ＃１のＬＢＡ範囲に対応する容量（ユーザデータ容量）を超える十分な個数のブロックの確保をＳＳＤ３に要求してもよい。この要求に応答して、ＳＳＤ３のコントローラ４は、指定された個数のブロックを、ＮＳＩＤ＃１のネームスペース用に確保する。
【０４５１】
ＮＳＩＤ＃１のＬＢＡ範囲に対応する容量が１００Ｇバイトである場合、ホストソフトウェアは、１００Ｇバイトに相当する個数の物理ブロックの追加をＳＳＤ３に要求して合計２００Ｇバイトに相当する個数の物理ブロックをＮＳＩＤ＃１のネームスペース用に確保してもよい。２００Ｇバイトからユーザデータ容量を引いた残りの１００ＧＢの物理リソースは、ＮＳＩＤ＃１のネームスペースのオーバープロビジョン領域として機能する。
【０４５２】
別の実施形態では、ホストソフトウェアは、ＮＳＩＤ＃１のネームスペース用に確保されたブロックの数と、このネームスペースに対応する合計消去回数とに基づいて、このネームスペースを使用しているユーザＡに課金すべきストレージ使用料（レンタル料）を決定してもよい。合計消去回数が多いほど、レンタル料は高く設定されてもよい。
【０４５３】
図５４は、ＳＳＤ３のネームスペース管理アーキテクチャを示す。
【０４５４】
コントローラ４は、ＮＡＮＤメモリ４のフリーブロックを共通フリーブロックプール９０で管理し、幾つかのブロックを、共通フリーブロックプール９０からＮＳＩＤ＃１のネームスペースに割り当てる。これら割り当てられたブロックは、ＮＳＩＤ＃１のネームスペースに関連づけられたデータの格納のために使用される。つまり、コントローラは、みれら幾つかのブロックを、ＮＳＩＤ＃１のネームスペースに関連づけられたデータを格納するためのブロックとしてＮＳＩＤ＃１のネームスペースに割り当てる。ホスト２からの、これらブロックの一つをリード、ライトまたは消去するためのコマンドの受信に応答して、コントローラ４は、これらブロックの一つに対するリード動作、ライト動作、または消去動作を実行する。コントローラ４は、これらブロックに対して実行される消去動作の回数をカウントする。コントローラ４は、ホスト２からの、ＮＳＩＤ＃１のネームスペースに関連づけられた消去回数の取得を要求するコマンドの受信に応答して、消去動作の回数のカウント値（ＮＳＩＤ＃１の合計消去回数）をホスト２に通知する。ＮＳＩＤ＃ｎのネームスペースについても、コントローラ４は、ＮＳＩＤ＃１のネームスペースに対する処理と同様の処理を実行する。
【０４５５】
以下、ネームスペース管理アーキテクチャについて説明する。
【０４５６】
ＳＳＤ３においては、ネームスペースごとに独立した仮想フラッシュプールが設けられている。仮想フラッシュプール８１は、ＮＳＩＤ＃１のネームスペース用に確保（予約）された物理リソース量（確保されたブロックの総数）を管理するために使用される。同様に、仮想フラッシュプール８２は、ＮＳＩＤ＃ｎのネームスペース用に確保（予約）された物理リソース量（確保されたブロックの総数）を管理するために使用される。この場合、どのブロックを確保（予約）すべきかを考慮する必要は無く、確保（予約）すべきブロックの個数のみが各仮想フラッシュプールで管理される。確保すべきブロックの個数は、物理ＮＡＮＤアクセス管理ＡＰＩ２１では物理ブロックの個数であり、仮想ＮＡＮＤアクセス管理ＡＰＩ２２では仮想ブロックの個数である。
【０４５７】
フリーブロックそれぞれは複数のネームスペースによって共有される共通フリーブロックプール９０で管理される。各ネームスペースの仮想フラッシュプールから返却されたブロックは、共通フリーブロックプール９０で管理される。
【０４５８】
ウェアレベリングは、共通フリーブロックプール９０から各ネームスペースに新たなブロック（例えば、書き込み対象ブロック、または書き込み対象仮想ブロック）を割り当てる際に行われる。コントローラ４が、特定のＮＳＩＤを含むブロック割り当てコマンド（例えば上述のブロック割り当て・消去コマンド）をホスト２から受信した時、コントローラ４は、共通フリーブロックプール９０から一つのフリーブロックを選択する。選択されるフリーブロックは、物理ＮＡＮＤアクセス管理ＡＰＩ２１が使用されるケースにおいては物理ブロックであり、仮想ＮＡＮＤアクセス管理ＡＰＩ２２が使用されるケースにおいては仮想ブロックである。コントローラ４は、この選択したブロックを、この特定のＮＳＩＤに対応するネームスペースに割り当て、且つこのネームスペース用に確保されたブロックの総数を１だけ減算する。共通フリーブロックプール９０からのフリーブロックの選択においては、コントローラ４は、最少消去回数のブロック（最少消去回数の物理ブロックまたは最少消去回数の仮想ブロック）を選択してもよい。これにより、ＮＳＩＤ＃ｎのネームスペースから返却される消去回数の少ないブロックを、頻繁にデータが書き替えられるＮＳＩＤ＃１のネームスペースに割り当てる事ができるので、ネームスペース間でのウェアレベリングを実現できる。
【０４５９】
コントローラ４は、ＮＳＩＤ＃１のネームスペースに対応する管理情報として、ＮＳＩＤ＃１用に確保されたブロックの総数、ＮＳＩＤ＃１用に割り当てられたブロックアドレスのリスト、およびＮＳＩＤ＃１の合計消去回数等を管理する。ＮＳＩＤ＃１の合計消去回数は、ＮＳＩＤ＃１に割り当てられたブロックそれぞれに対して実行される消去動作の回数をカウントすることによって得られる。
【０４６０】
ＮＳＩＤ＃１のネームスペース管理は次のように実行されてもよい。以下では、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のネームスペース管理について例示する。
【０４６１】
コントローラ４が、ＮＳＩＤ＃１を含むネームスペース割り当てコマンドをホスト２から受信した時、コントローラ４は、ネームスペース割り当てコマンドによって指定された個数のブロックをＮＳＩＤ＃１用に確保する。ＮＳＩＤ＃１用に確保されているブロックの総数は仮想フラッシュプール８１によって管理される。ＮＳＩＤ＃１のネームスペースに割り当て可能なブロックの数の上限は、ＮＳＩＤ＃１用に確保されたブロックの総数以下に制限される。
【０４６２】
コントローラ４が、ＮＳＩＤ＃１を含むブロック割り当て・消去コマンドをホスト２から受信した時、コントローラ４は、共通フリーブロックプール９０から最少消去回数のブロックを選択し、この選択したフリーブロックをＮＳＩＤ＃１のネームスペース用に割り当て、この割り当てたブロックを消去し、この割り当て且つ消去されたブロックの物理アドレスをホスト２に通知し、且つ仮想フラッシュプール８１によって管理されているブロックの総数、つまりＮＳＩＤ＃１に割り当て可能な残りブロックの数、を１だけ減算する。ＮＳＩＤ＃１に割り当て可能な残りブロックの数は、ＮＳＩＤ＃１のネームスペースに用に割り当て可能なブロックの現在の個数を示す。この割り当ておよび消去されたブロックは、例えば、ＮＳＩＤ＃１用の書き込み対象ブロック９１として使用することができる。
【０４６３】
もし仮想フラッシュプール８１によって管理されているブロックの現在の総数（残りブロックの数）がゼロの場合には、たとえＮＳＩＤ＃１を含むブロック割り当て・消去コマンドがホスト２から受信されても、コントローラ４は、ＮＳＩＤ＃１のネームスペースに対して新たなブロックを割り当てない。
【０４６４】
コントローラ４が、ＮＳＩＤ＃１を含むライトコマンドをホスト２から受信した時、コントローラ４は、ライトコマンドによって指定されるデータを書き込み対象ブロック９１に書き込む。ライトコマンドは、データが書き込まれるべき物理アドレス（ブロックアドレスとページアドレスの双方）を含んでいてもよいし（直接アドレス指定モード）、データが書き込まれるべきブロックアドレスのみを含んでいてもよいし（自動アドレス生成モード）、あるいはＮＳＩＤ＃１のみを含んでいてもよい。
【０４６５】
ライトコマンドがＮＳＩＤ＃１のみを含む場合には、自動アドレス生成モードの場合と同様に、データが書き込まれるべき物理アドレスはコントローラ４によって自動生成される。この場合、ライトコマンドによって指定されたデータは、現在の書き込み対象ブロック９１内のページＰ０〜Ｐ２５５の順序で書き込まれる。コントローラ４は、データが書き込まれた物理アドレス（ブロックアドレスとページアドレスの双方）をホスト２に通知する。
【０４６６】
現在の書き込み対象ブロック９１がデータで満たされた時、この書き込み対象ブロック９１はアクティブブロックプール９２に移動されてもよい。アクティブブロックプール９２は、ＮＳＩＤ＃１によって現在使用されているブロック（アクティブブロック）のリストを管理する。現在の書き込み対象ブロック９１がデータで満たされた時、ホスト２は、ＮＳＩＤ＃１を含むブロック割り当て・消去コマンドをＳＳＤ３に送信して、新たな書き込み対象ブロックの割り当て・消去を要求してもよい。
【０４６７】
ホスト２は、アクティブブロックプール９２内の任意のブロックをリードまたは消去することができる。また、ホスト２は、ブロック返却コマンドをＳＳＤ３に送信し、アクティブブロックプール９２内のブロックを共通フリーブロックプール９０に返却することをＳＳＤ３に要求することができる。例えば、消去したブロック、データ更新によって無効化されたデータのみを含むブロック、あるいは上述のデータコピー動作等によって無効化されたデータのみを含むブロック等が返却される。コントローラ４は、ブロック返却コマンドの受信に応答して、このブロック返却コマンドによって指定されるブロックを共通フリーブロックプール９０に移動すると共に、仮想フラッシュプール８１によって管理されているブロックの総数（残りブロックの数）を１だけ増やす。
【０４６８】
コントローラ４は、ＮＳＩＤ＃ｎのネームスペースに対応する管理情報、確保されたブロックの総数、割り当てられたブロックアドレスのリスト、およびＮＳＩＤ＃ｎの合計消去回数等も管理する。
【０４６９】
ＮＳＩＤ＃ｎのネームスペース管理は次のように実行される。
【０４７０】
コントローラ４が、ＮＳＩＤ＃ｎを含むネームスペース割り当てコマンドをホスト２から受信した時、コントローラ４は、ネームスペース割り当てコマンドによって指定された個数のブロックをＮＳＩＤ＃ｎ用に確保する。ＮＳＩＤ＃ｎ用に確保されているブロックの総数は仮想フラッシュプール８２によって管理される。
【０４７１】
コントローラ４が、ＮＳＩＤ＃ｎを含むブロック割り当て・消去コマンドをホスト２から受信した時、コントローラ４は、共通フリーブロックプール９０から最少消去回数のブロックを選択し、この選択したフリーブロックをＮＳＩＤ＃ｎのネームスペース用に割り当て、この割り当てたブロックを消去し、且つ仮想フラッシュプール８２によって管理されているブロックの総数、つまりＮＳＩＤ＃ｎに割り当て可能な残りブロックの数、を１だけ減算する。この割り当ておよび消去されたブロックは、例えば、ＮＳＩＤ＃ｎ用の書き込み対象ブロック９３として使用することができる。
【０４７２】
もし仮想フラッシュプール８２によって管理されているブロックの現在の総数（残りブロックの数）がゼロの場合には、たとえＮＳＩＤ＃ｎを含むブロック割り当て・消去コマンドがホスト２から受信されても、コントローラ４は、ＮＳＩＤ＃ｎのネームスペースに対して新たなブロックを割り当てない。
【０４７３】
コントローラ４が、ＮＳＩＤ＃ｎを含むライトコマンドをホスト２から受信した時、コントローラ４は、ライトコマンドによって指定されるデータを書き込み対象ブロック９３に書き込む。ライトコマンドは、データが書き込まれるべき物理アドレス（ブロックアドレスとページアドレスの双方）を含んでいてもよいし（直接アドレス指定モード）、データが書き込まれるべきブロックアドレスのみを含んでいてもよいし（自動アドレス生成モード）、あるいはＮＳＩＤ＃ｎのみを含んでいてもよい。
【０４７４】
ライトコマンドがＮＳＩＤ＃ｎのみを含む場合には、自動アドレス生成モードの場合と同様に、データが書き込まれるべき物理アドレスはコントローラ４によって自動生成される。この場合、ライトコマンドによって指定されたデータは、現在の書き込み対象ブロック９３内のページＰ０〜Ｐ２５５に順次書き込まれる。コントローラ４は、データが書き込まれた物理アドレス（ブロックアドレスとページアドレスの双方）をホスト２に通知する。
【０４７５】
現在の書き込み対象ブロック９３がデータで満たされた時、この書き込み対象ブロック９３はアクティブブロックプール９４に移動されてもよい。アクティブブロックプール９４は、ＮＳＩＤ＃ｎによって現在使用されているブロックのリストを管理する。現在の書き込み対象ブロック９３がデータで満たされた時、ホスト２は、ＮＳＩＤ＃ｎを含むブロック割り当て・消去コマンドをＳＳＤ３に送信して、新たな書き込み対象ブロックの割り当て・消去を要求してもよい。
【０４７６】
ホスト２は、アクティブブロックプール９４内の任意のブロックをリードまたは消去することができる。また、ホスト２は、ブロック返却コマンドをＳＳＤ３に送信し、アクティブブロックプール９４内のブロックの返却をＳＳＤ３に要求することができる。コントローラ４は、ブロック返却コマンドの受信に応答して、このブロック返却コマンドによって指定されるブロックを共通フリーブロックプール９０に移動すると共に、仮想フラッシュプール８２によって管理されているブロックの総数（残りブロックの数）を１だけ増やす。
【０４７７】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のネームスペース管理も、物理ＮＡＮＤアクセス管理ＡＰＩ２１用のネームスペース管理と同様の手順で実行することができる。仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のネームスペース管理では、確保されたブロックの個数の代わりに確保された仮想ブロックの個数が管理され、割り当てられたブロックアドレスのリストの代わりに割り当てられた仮想ブロックアドレスのリストが管理されてもよい。
【０４７８】
また、仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のネームスペース管理では、ＮＳＩＤ＃１に割り当てられた仮想ブロックに対して実行された消去動作の回数をカウントすることによって得られるカウント値がＮＳＩＤ＃１の合計消去回数として管理されてもよく、ＮＳＩＤ＃ｎに割り当てられた仮想ブロックに対して実行された消去動作の回数をカウントすることによって得られるカウント値が、ＮＳＩＤ＃ｎの合計消去回数として管理されてもよい。
【０４７９】
［ネームスペース割り当てコマンド］
図５５は、ネームスペース割り当てコマンドを示す。ネームスペース割り当てコマンドは、ＳＳＤ３に対して、このネームスペース割り当てコマンドによって指定された数のブロックの確保（または追加）を要求する。
【０４８０】
ネームスペース割り当てコマンドは、以下の入力パラメータを含む。
【０４８１】
（１）ＮＳＩＤ：  この入力パラメータ値は、対象ネームスペースの識別子（ＩＤ）を示す。
【０４８２】
（２）物理リソース量：  この物理リソース量は、確保されるべきブロックの数を示す。物理ＮＡＮＤアクセス管理ＡＰＩ２１では、確保されるべきブロックの数は、ブロック（物理ブロック）の粒度で指定され、仮想ＮＡＮＤアクセス管理ＡＰＩ２２では、確保されるべきブロックの数は、仮想ブロック（一つの仮想ブロックを構成する複数ブロック）の粒度で指定される。
【０４８３】
また、ネームスペース割り当てコマンドは、処理優先度を示す入力パラメータを含んでもよい。
【０４８４】
ネームスペース割り当てコマンドは、以下の出力パラメータを含む。
【０４８５】
（１）物理リソース量：  この物理リソース量は、確保されたブロックの数を示す。物理ＮＡＮＤアクセス管理ＡＰＩ２１では、確保されたブロックの数は、ブロック（物理ブロック）の粒度で示され、仮想ＮＡＮＤアクセス管理ＡＰＩ２２では、確保されたブロックの数は、仮想ブロック（一つの仮想ブロックを構成する複数ブロック）の粒度で示される。
【０４８６】
［ネームスペース割り当て処理の手順］
図５６のフローチャートは、ＳＳＤ３によって実行されるネームスペース割り当て処理の手順を示す。
【０４８７】
ＳＳＤ３のコントローラ４は、ネームスペース割り当てコマンドをホスト２から受信する（ステップＳ１４１）。ネームスペース割り当てコマンド内の入力パラメータ（物理リソース量）によって指定された個数のブロックを確保可能か否かを、共通フリーブロックプール９０内の残りブロックの個数に基づいて判定する（ステップＳ１４２）。上述したように、物理ＮＡＮＤアクセス管理ＡＰＩ２１では、確保されるべきブロックの数が、ブロック（物理ブロック）の粒度で指定され、仮想ＮＡＮＤアクセス管理ＡＰＩ２２では、確保されるべきブロックの数が、仮想ブロック（一つの仮想ブロックを構成する複数ブロック）の粒度で指定される。
【０４８８】
残りブロック（または残り仮想ブロック）の個数が、指定された個数以上であるならば（ステップＳ１４２のＹＥＳ）、コントローラ４は、ネームスペース割り当てコマンドによって指定されたＮＳＩＤのネームスペースのために、指定された個数のブロック（または仮想ブロック）を確保し（ステップＳ１４３）、そして確保されたブロック（または仮想ブロック）の個数を示す出力パラメータを含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１４４）。
【０４８９】
残りブロック（または残り仮想ブロック）の個数が、指定された個数よりも少ないならば（ステップＳ１４２のＮＯ）、コントローラ４は、エラーをホスト２に通知する（ステップＳ１４５）。エラーが報告されたホスト２は、確保すべきブロック（または仮想ブロック）の個数を変更してもよい。
【０４９０】
［ネームスペース用のブロック割り当て・消去コマンド］
図５７は、ネームスペース用のブロック割り当て・消去コマンドを示す。
【０４９１】
ネームスペース用のブロック割り当て・消去コマンド、以下の入力パラメータを含む。
【０４９２】
（１）処理優先度：  処理優先度はこのコマンドの優先度を示す。
【０４９３】
（２）ＮＳＩＤ：  ＮＳＩＤはブロック（または仮想ブロック）が割り当てられるべきネームスペースのＩＤを示す。
【０４９４】
ネームスペース用のブロック割り当て・消去コマンドは、以下の出力パラメータを含む。
【０４９５】
（１）終了ステータス：  ブロック割り当て・消去コマンドの成功またはエラーを示す終了ステータスがホスト２に返される。
【０４９６】
（２）ブロックアドレス：  割り当てられたブロックのブロックアドレス（または割り当てられた仮想ブロックの仮想ブロックアドレス）がホスト２に返される。
【０４９７】
（３）残りブロック数：  このＮＳＩＤ用に確保された残りブロックの数（または残り仮想ブロックの数）がホスト２に返される。
【０４９８】
［ネームスペース用のブロック割り当て・消去処理の手順］
図５８のフローチャートは、ＳＳＤ３によって実行されるブロック割り当て・消去処理の手順を示す。ここでは、物理ＮＡＮＤアクセス管理ＡＰＩ２１のためのブロック割り当て・消去処理を例示して説明する。
【０４９９】
ＳＳＤ３のコントローラ４は、ＮＳＩＤを含むブロック割り当て・消去コマンドをホスト２から受信する（ステップＳ１５１）。コントローラ４は、このＮＳＩＤ用の残りブロックがあるか否かを判定する（ステップＳ１５２）。
【０５００】
このＮＳＩＤ用の残りブロックがあるならば（ステップＳ１５２のＹＥＳ）、コントローラ４は、共通フリーブロックプール９０から一つのブロックを、指定されたＮＳＩＤ用の書き込み対象ブロックとして割り当て、割り当てたブロックを自動消去する（ステップＳ１５２）。コントローラ４は、指定されたＮＳＩＤ用の残りブロック数から１を減算する（ステップＳ１５４）。コントローラ４は、指定されたＮＳＩＤに対応する合計消去回数を更新する（ステップＳ１５５）。ステップＳ１５５では、コントローラ４は、この指定されたＮＳＩＤに対応する合計消去回数を＋１だけ増やす。そして、コントローラ４は、返り値（出力パラメータ）を生成し、返り値を含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１５６）。
【０５０１】
一方、このＮＳＩＤ用の残りブロックがないならば（ステップＳ１５２のＮＯ）、コントローラ４は、このＮＳＩＤ用に確保された残りブロック数がゼロであるため新たなブロックが割り当てられないことを表すエラーステータスを含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１５７）。
【０５０２】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２のためのブロック割り当て・消去処理においては、コントローラ４は、このＮＳＩＤ用の残り仮想ブロックがあるか否かを判定する（ステップＳ１５２）。
【０５０３】
このＮＳＩＤ用の残り仮想ブロックがあるならば（ステップＳ１５２のＹＥＳ）、コントローラ４は、共通フリーブロックプール９０から一つの仮想ブロックを、指定されたＮＳＩＤ用の書き込み対象ブロック（書き込み対象仮想ブロック）として割り当て、割り当てた仮想ブロックを自動消去する（ステップＳ１５２）。コントローラ４は、指定されたＮＳＩＤ用の残り仮想ブロック数から１を減算する（ステップＳ１５４）。コントローラ４は、指定されたＮＳＩＤに対応する合計消去回数を更新する（ステップＳ１５５）。ステップＳ１５５では、コントローラ４は、この指定されたＮＳＩＤに対応する合計消去回数を＋１だけ増やす。そして、コントローラ４は、返り値（出力パラメータ）を生成し、返り値を含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１５６）。
【０５０４】
一方、このＮＳＩＤ用の残り仮想ブロックがないならば（ステップＳ１５２のＮＯ）、コントローラ４は、このＮＳＩＤ用に確保された残り仮想ブロック数がゼロであるため新たなブロックが割り当てられないことを表すエラーステータスを含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１５７）。
【０５０５】
［ネームスペース用の消去コマンド］
図５９は、あるネームスペースに割り当てられた特定のブロックを消去するための消去コマンドを示す。
【０５０６】
この消去コマンドは、以下の入力パラメータを含む。
【０５０７】
（１）ブロックアドレス：  この入力パラメータ値は消去されるべきブロックのブロックアドレスを示す。仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の消去コマンドにおいては、この入力パラメータ値は、ブロックアドレスの代わりに、消去されるべき仮想ブロックの仮想ブロックアドレスを示す。
【０５０８】
（２）処理優先度：  この入力パラメータ値はこのコマンドの優先度を示す。
【０５０９】
（３）ＮＳＩＤ：  この入力パラメータ値は消去されるべきブロック（または仮想ブロック）に対応するＮＳＩＤを示す。
【０５１０】
この消去コマンドは、以下の出力パラメータを含む。
【０５１１】
（１）終了ステータス：  この消去コマンドの成功またはエラーがホストに返される
（２）ブロックアドレス：  この出力パラメータ値は、消去されたブロックのブロックアドレスを示す。仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の消去コマンドにおいては、この出力パラメータ値は、消去された仮想ブロックの仮想ブロックアドレスを示す。
【０５１２】
（３）合計消去回数：  この出力パラメータ値は、このＮＳＩＤに割り当てられたブロックそれぞれの消去回数の合計を示す。仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の消去コマンドにおいては、この出力パラメータ値は、このＮＳＩＤに割り当てられた仮想ブロックそれぞれの消去回数の合計を示す。
【０５１３】
［消去処理の手順］
図６０のフローチャートは、ＳＳＤ３によって実行される消去処理の手順を示す。ここでは、物理ＮＡＮＤアクセス管理ＡＰＩ２１のための消去処理を例示して説明する。
【０５１４】
ＳＳＤ３のコントローラ４は、消去コマンドをホスト２から受信する（ステップＳ１７１）。コントローラ４は、この消去コマンドによって指定されたブロックを消去するための消去動作を実行し（ステップＳ１７２）、この消去されたブロックの消去回数を＋１だけ増やし（ステップＳ１７３）、そして、この消去されたブロックが割り当てられているＮＳＩＤに対応する合計消去回数を＋１だけ増やす（ステップＳ１７４）。消去コマンドがＮＳＩＤを含む場合には、この消去されたブロックが割り当てられているＮＳＩＤは、この消去コマンド内のＮＳＩＤによって特定される。一方、消去コマンドがＮＳＩＤを含まない場合には、この消去されたブロックが割り当てられているＮＳＩＤは、この消去されたブロックのブロックアドレスと、各ＮＳＩＤに割り当てられているブロックアドレスのリストとに基づいて特定されてもよい。
【０５１５】
そして、返り値（出力パラメータ）を生成し、返り値を含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１７５）。
【０５１６】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２のための消去処理においては、コントローラ４は、この消去コマンドによって指定された仮想ブロック内の複数個のブロックを消去するための消去動作を実行し（ステップＳ１７２）、この消去された仮想ブロックの消去回数を＋１だけ増やし（ステップＳ１７３）、そして、この消去された仮想ブロックが割り当てられているＮＳＩＤに対応する合計消去回数を＋１だけ増やす（ステップＳ１７４）。
【０５１７】
［ブロック返却コマンド］
図６１は、ＳＳＤ３に適用されるブロック返却コマンドを示す。このブロック返却コマンドは、特定のネームスペースに対応するアクティブブロックプール内のブロックを共通フリーブロックプール９０に返却するために使用される。
【０５１８】
このブロック返却コマンドは、以下の入力パラメータを含む。
【０５１９】
（１）ブロックアドレス：  この入力パラメータ値は返却されるべきブロックのブロックアドレスを示す。仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロック返却コマンドにおいては、この入力パラメータ値は、ブロックアドレスの代わりに、返却されるべき仮想ブロックの仮想ブロックアドレスを示す。
【０５２０】
（２）処理優先度：  この入力パラメータ値はこのコマンドの優先度を示す。
【０５２１】
（３）ＮＳＩＤ：  この入力パラメータ値は返却されるべきブロック（または仮想ブロック）に対応するＮＳＩＤを示す。
【０５２２】
このブロック返却コマンドは、以下の出力パラメータを含む。
【０５２３】
（１）終了ステータス：  このブロック返却コマンドの成功またはエラーがホストに返される
（２）残りブロック数：  この出力パラメータ値は、ブロック返却後の残りブロック数を示す。仮想ＮＡＮＤアクセス管理ＡＰＩ２２用のブロック返却コマンドにおいては、この出力パラメータ値は、仮想ブロック返却後の残り仮想ブロック数を示す。
【０５２４】
［ブロック返却処理の手順］
図６２のフローチャートは、ＳＳＤ３によって実行されるブロック返却処理の手順を示す。ここでは、物理ＮＡＮＤアクセス管理ＡＰＩ２１のためのブロック返却処理を例示して説明する。
【０５２５】
ＳＳＤ３のコントローラ４は、ブロック返却コマンドをホスト２から受信する（ステップＳ１８１）。コントローラ４は、このブロック返却コマンドによって指定されたブロックを、このブロック返却コマンドによって指定されたＮＳＩＤに対応するアクティブブロックプールから共通フリーブロックプール９０に移動させる（ステップＳ１８２）。これにより、このＮＳＩＤに対するこのブロックの割り当ては解除され、このブロックは有効データを含まないフリーブロックとして共通フリーブロックプール９０にて管理される。
【０５２６】
コントローラ４は、指定されたＮＳＩＤに対応する残りブロック数を１だけ増やす（ステップＳ１８３）。そして、コントローラ４は、返り値（出力パラメータ）を生成し、返り値を含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１８４）。
【０５２７】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２のためのブロック返却処理においては、コントローラ４は、このブロック返却によって指定された仮想ブロックを共通フリーブロックプール９０に移動させ（ステップＳ１８２）、指定されたＮＳＩＤに対応する残り仮想ブロック数を１だけ増やし（ステップＳ１８３）、そして返り値を含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１８４）。
【０５２８】
［消去回数ゲットコマンド］
図６３は、ＳＳＤ３に適用される、ネームスペース用の消去回数ゲットコマンドを示す。この消去回数ゲットコマンドは、ＳＳＤ３に対して、特定のネームスペースの合計消去回数を通知すべきことを要求する。
【０５２９】
消去回数ゲットコマンドは、以下の入力パラメータを含む。
【０５３０】
（１）ＮＳＩＤ：  この入力パラメータ値は対象ＮＳＩＤを示す。この入力パラメータ値がある特別な値である場合、全てのＮＳＩＤが対象ＮＳＩＤとして決定されてもよい。
【０５３１】
（２）処理優先度：  この入力パラメータ値はこのコマンドの優先度を示す。
【０５３２】
消去回数ゲットコマンドは、以下の出力パラメータを含む。
【０５３３】
（１）終了ステータス：  この消去回数ゲットコマンドの成功またはエラーがホストに返される
（２）合計消去回数：  この出力パラメータ値は、指定されたＮＳＩＤの合計消去回数を示す。
【０５３４】
［消去回数通知処理］
図６４のフローチャートは、ＳＳＤ３によって実行される消去回数通知処理の手順を示す。ここでは、物理ＮＡＮＤアクセス管理ＡＰＩ２１のための消去回数通知処理を例示して説明する。
【０５３５】
ＳＳＤ３のコントローラ４が消去回数ゲットコマンドをホスト２から受信した時、コントローラ４は、この消去回数ゲットコマンドによって特定のＮＳＩＤが指定されたか、あるいは全てのＮＳＩＤが指定されたかを判定する（ステップＳ１９１）。
【０５３６】
特定のＮＳＩＤが指定されたならば（ステップＳ１９１のＹＥＳ）、コントローラ４は、この特定のＮＳＩＤの現在の合計消去回数（カウント値）を取得し（ステップＳ１９２）、この特定のＮＳＩＤの現在の合計消去回数を含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１９４）。
【０５３７】
全てのＮＳＩＤが指定されたならば（ステップＳ１９１のＮＯ）、コントローラ４は、全てのＮＳＩＤにそれぞれ対応する現在の合計消去回数のリストを取得し（ステップＳ１９３）、全てのＮＳＩＤにそれぞれ対応する現在の合計消去回数のリストを含むコマンド完了レスポンスをホスト２に送信する（ステップＳ１９４）。
【０５３８】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２のための消去回数通知処理においては、指定された特定のＮＳＩＤに割り当てられた仮想ブロックそれぞれに対して実行された消去動作の回数がカウントされ、このカウント値が、指定された特定のＮＳＩＤの合計消去回数としてホスト２に通知される。
【０５３９】
ここでは、消去回数ゲットコマンドによって指定されたＮＳＩＤの合計消去回数をホスト２に通知する処理を説明したが、ＮＳＩＤの代わりに、ブロックアドレスまたは仮想ブロックアドレスのいずれかを指定するパラメータを含む消去回数ゲットコマンドを使用することもできる。
【０５４０】
物理ＮＡＮＤアクセス管理ＡＰＩ２１用の消去コマンドはブロックアドレス（ブロックを指定する物理アドレス）を含む。コントローラは、ホスト２から受信される消去コマンド内のブロックアドレスによって指定されるブロックを消去し、グループ＃Ｙ内のブロックそれぞれの消去回数を管理し、ホスト２から、あるブロックアドレスを含む消去回数ゲットコマンドが受信された場合、この消去回数ゲットコマンド内のブロックアドレスによって指定されるブロックの消去回数をホスト２に通知する。
【０５４１】
仮想ＮＡＮＤアクセス管理ＡＰＩ２２用の消去コマンドは仮想ブロックアドレス（仮想ブロックを指定する物理アドレス）を含む。コントローラは、ホスト２から受信される消去コマンド内の仮想ブロックアドレスによって指定される仮想ブロック内の複数個のブロックを消去し、グループ＃Ｘ内の仮想ブロックそれぞれの消去回数を管理し、ホスト２から、ある仮想ブロックアドレスを含む消去回数ゲットコマンドが受信された場合、この消去回数ゲットコマンド内の仮想ブロックアドレスによって指定される仮想ブロックの消去回数をホスト２に通知する。
【０５４２】
［ネームスペース管理のための他のコマンド］
コントローラ４は、ネームスペース解体コマンドもサポートする。ネームスペース解体コマンドは、コントローラ４に対して、ネームスペースの削除（解体）を要求する。ネームスペース解体コマンドは、この特定のＮＳＩＤに現在割り当てられているブロックの数（解体すべきブロック数）を示す入力パラメータを含んでいてもよい。このブロックの数は、物理ＮＡＮＤアクセス管理ＡＰＩ２１においてはこの特定のＮＳＩＤに現在割り当てられている物理ブロックの数であり、仮想ＮＡＮＤアクセス管理ＡＰＩ２２においてはこの特定のＮＳＩＤに現在割り当てられている仮想ブロックの数である。ホスト２からの、特定のＮＳＩＤを含むネームスペース解体コマンドの受信に応答して、コントローラ４は、この特定のＮＳＩＤに対応する仮想フラッシュプール内の全てのブロックを共通フリーブロック９０にフリーブロックとして移動する。そして、コントローラ４は、ネームスペース解体コマンドに対するコマンド完了のレスポンスをホスト２に送信する。このコマンド完了のレスポンスは、解体されたブロックの数を示す返り値を含んでいてもよい。
【０５４３】
ホスト２は、上述のネームスペース割り当てコマンドおよびネームスペース解体コマンドを使用することによって、ネームスペースを増減することができる。
【０５４４】
［ホスト構成］
図６５は、ホスト２として機能する情報処理装置のハードウェア構成例を示す。
【０５４５】
この情報処理装置は、サーバコンピュータ、またはパーソナルコンピュータとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０５４６】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。プロセッサ１０１によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ４１、ＯＳ４２、ファイルシステム４３、およびＦＴＬ４４を含む。プロセッサ１０１によって実行されるプログラムは、さらに、リソース管理部４５を含んでいてもよい。
【０５４７】
このリソース管理部４５は、消去回数ゲットコマンドをＳＳＤ３に送信して各ネームスペースの合計消去回数をＳＳＤ３から取得し、取得した各ネームスペースの合計消去回数に基づいて個々のネームスペースに起因するＳＳＤ３の物理リソースの消耗度を判定してもよい。もしある特定のネームスペースに起因するＳＳＤ３の物理リソースの消耗度が閾値よりも大きい場合には、このリソース管理部４５は、この特定のネームスペース用に確保すべきブロックの個数を増やすための処理を実行しても良い。この場合、このリソース管理部４５は、指定された個数のブロックをこの特定のネームスペース用に追加すべきことを要求するネームスペース割り当てコマンドをＳＳＤ３に送信してもよい。これにより、この特定のネームスペースのオーバープロビジョン領域のサイズが増加されるので、この特定のネームスペースのライトアンプリフィケーションを下げることが可能となり、この結果、この特定のネームスペースに起因するＳＳＤ３の物理リソースの消耗度を下げることができる。
【０５４８】
また、上述したように、データセンタ事業者は、このネームスペース用に確保されたブロックの数（または仮想ブロックの数）と、このネームスペースに対応する合計消去回数とに基づいて、このネームスペースに対応するレンタル料を決定してもよい。この場合、リソース管理部４５は、データセンタ事業者がレンタル料を決定するのを支援するためのサービスを実行してもよい。例えば、あるネームスペースに関する基本レンタル料金は、まずは、このネームスペースに対応する領域の容量（ブロックの個数）によって決定されてもよい。そして、合計消去回数の関数で求められる追加料金が基本レンタル料金に加えられた合計料金が、このネームスペースに関するレンタル料金として決定されてもよい。
【０５４９】
このネームスペースをレンタルしているユーザが、このネームスペース用に確保すべきブロックの個数の追加を要求した場合には、リソース管理部４５は、追加料金の課金を免除し、追加されたブロックの数と確保済みのブロックの数との合計のみに基づいて新たなレンタル料金を設定してもよい。そして、リソース管理部４５は、ユーザによって指定された個数のブロックをこの特定のネームスペース用に追加すべきことを要求するネームスペース割り当てコマンドをＳＳＤ３に送信してもよい。
【０５５０】
また、リソース管理部４５はＦＴＬ４４と共同して動作し、各アプリケーションが、物理ＮＡＮＤアクセス管理ＡＰＩ／仮想ＮＡＮＤアクセス管理ＡＰＩを使用してＳＳＤ３のＮＡＮＤメモリ５を制御することを可能にする。例えば、リソース管理部４５は、ユーザ（あるアプリケーションプログラム、またはあるクライアント端末）からの、ＮＡＮＤメモリ５内の物理ＮＡＮＤアクセス管理ＡＰＩ２１用のブロック中の一つのブロックを指定する物理アドレスを含む第１のリード、ライトまたは消去の要求の受信に応答して、上述のリードコマンド、ライトコマンド、または消去コマンドをＳＳＤ３に送信して、この指定されたブロックに対するリード動作、ライト動作、または消去動作を制御する。また、リソース管理部４５は、ユーザ（あるアプリケーションプログラム、またはあるクライアント端末）からの、ＮＡＮＤメモリ５内の仮想ブロック中の一つの仮想ブロックを指定する物理アドレス（仮想ブロックアドレス）を含む第２のリード、ライトまたは消去の要求の受信に応答して、上述のリードコマンド、ライトコマンド、または消去コマンドをＳＳＤ３に送信して、この指定された仮想ブロックに対するリード動作、ライト動作、または消去動作を制御する。
【０５５１】
さらに、リソース管理部４５は、ＳＳＤ３から通知される、読み出し可能なデータを保持する最新ページアドレスに基づいて、ユーザ（あるアプリケーションプログラム、またはあるクライアント端末）からのリード要求が向けられるべき記憶領域（ライトデータを一定期間保持するホスト２内のメモリ、またはＳＳＤ３内のＮＡＮＤメモリ５）を自動的に変更する制御を行っても良い。この場合、リソース管理部４５は、ＳＳＤ３に書き込んだある特定のデータがリード可能になるまでは、この特定のデータに対するリード要求に応答してホスト２内のメモリをリードアクセスし、特定のデータがリード可能になった後は、この特定のデータに対するリード要求に応答してＳＳＤ３内のＮＡＮＤメモリ５をリードアクセスしてもよい。
【０５５２】
また、リソース管理部４５は、ＦＴＬ４４と共同して動作し、複数のネームスペースを管理することを可能にする。リソース管理部４５は、ＳＳＤ３内のＮＡＮＤメモリ５内の複数のブロック内、第１ネームスペースに割り当てられた複数の第１ブロックの一つを、リード、ライトまたは消去するためのコマンドをＳＳＤ３に送信する。そして、リソース管理部４５は、その第１ネームスペースに関連づけられた消去回数の取得を要求するコマンドをＳＳＤ３に送信することによって、複数の第１ブロックに対して実行された消去動作の回数をカウントすることによって得られるカウント値を、ＳＳＤ３から取得する。
【０５５３】
さらに、リソース管理部４５は、第１ネームスペース用のブロックを確保するためのコマンドをＳＳＤ３に送信することによって、ＳＳＤ３に、第１個数のブロックを第１ネームスペース用に確保させ、第１ネームスペースに割り当て可能な複数の第１ブロックの数の上限は第１個数以下に制限される。また、リソース管理部４５は、第１ネームスペース用に確保すべきブロックの個数を追加するためのコマンドをＳＳＤ３に送信することによって、ＳＳＤ３に、第２個数のブロックを第１ネームスペース用に確保すべきブロックとして追加させるように構成され、第１ネームスペースに割り当て可能な数の第１ブロックの数の上限は第１個数と第２個数の和に増やされる。
【０５５４】
さらに、リソース管理部４５は、上述のデータコピーコマンドをＳＳＤ３に送信することによってガベージコレクション（データコピー動作）を制御する。
【０５５５】
すなわち、プロセッサ１０１は、ＦＴＬ４４を実行することによって、論理ブロックアドレスそれぞれとＮＡＮＤメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。プロセッサ１０１は、さらに、リソース管理部４５を実行することによって、ガベージコレクション（データコピー動作）を制御する。
【０５５６】
この場合、プロセッサ１０１は、有効データのみをコピーすることを要求するデータコピーコマンドをＳＳＤ３に送信する。データコピーコマンドは、上述したように、コピー元ブロックと、コピー元ブロック内のコピー開始ページと、コピー先ブロックと、コピー先ブロック内の転送開始ページと、コピー元ブロック内の各ページのデータが有効データまたは無効データのいずれであるかを示すビットマップデータと、コピー終了までにコピーすべき有効データの数またはコピー終了までに検出すべき無効データの数のいずれかを指定する終了条件とを含む。
【０５５７】
そして、プロセッサ１０１は、コピー先ブロックにコピーされた有効データ毎に有効データの識別子と有効データが格納されているコピー先ブロック内の位置とを示すデータコピー情報をＳＳＤ３から受信する。プロセッサ１０１は、データコピー情報に基づいて、アドレス変換テーブルを更新する。
【０５５８】
さらに、プロセッサ１０１は、ＳＳＤ３から通知される、次回にコピーを開始すべきデータの位置に基づいて、次回のガベージコレクション（データコピー動作）を制御する。
【０５５９】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０５６０】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０５６１】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続される。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０５６２】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。ＥＣ１０８は、キーボード（ＫＢ）などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【０５６３】
図６６は、複数のＳＳＤ３とホスト２とを含む情報処理装置の構成例を示す。
【０５６４】
この情報処理装置は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のＳＳＤ３は筐体２０１内に配置されても良い。この場合、各ＳＳＤ３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０５６５】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０５６６】
以上説明したように、本実施形態のデータコピー動作によれば、ホスト２からのデータコピーコマンドに基づいて、コピー対象データの有効／無効を考慮してコピー対象データのコピーが制御される。この場合、データコピーコマンドによってコピー開始ページおよび転送開始ページを指定することができるので、コピー元ブロック内の任意のコピー開始ページから始まるページ範囲内の有効データを、コピー先ブロック内の任意の転送開始ページから始まるページ範囲内にコピー（移動）するというきめ細かなコピー動作を実行することができる。
【０５６７】
また、データコピー動作においては、無効データのコピーが自動的にスキップされ、コピー元ブロック内の有効データのみがコピー先ブロックにコピーされる。これにより、ホスト２は、どのデータをどこにコピーすべきかを個別に指定することなく、コピー元ブロック、コピー元ブロック内のコピー開始ページ、コピー先ブロックと、コピー先ブロック内の転送開始ページと、管理データ（ビットマップデータ）とを指定するだけで、コピー元ブロック内の任意のコピー開始ページから始まるページ範囲内の有効データを、コピー先ブロック内の任意の転送開始ページから始まるページ範囲に集めることが可能となり、ガベージコレクションのために必要な有効データのコピーを実行することができる。
【０５６８】
さらに、コピー先ブロックにコピーされた有効データ毎にこの有効データの識別子とこの有効データが格納されているコピー先ブロック内の位置とを示すデータコピー情報がＳＳＤ３からホスト２に通知される。したがって、ホスト２は、アドレス変換テーブルを更新して、コピー先ブロックにコピーされた有効データそれぞれのＬＢＡに対して正しい物理アドレスをマッピングすることができる。
【０５６９】
したがって、ホスト２によるＮＡＮＤメモリ５の制御を助けることができ、ホスト２からの制御によって、ガベージコレクション目的のデータコピー動作を効率良く実行することができる。
【０５７０】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０５７１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０５７２】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤメモリ、２１…物理ＮＡＮＤアクセス管理ＡＰＩ、２２…仮想ＮＡＮＤアクセス管理ＡＰＩ、２３…ブロック情報管理部、２４…バッドブロック管理部、２５…ブロック割り当て・消去制御部、２６…ライト制御部、２７…リード制御部、２８…データコピー制御部、２９…ネームスペース制御部。
【図１】
0006448570.tif 000002
【図２】
0006448570.tif 000003
【図３】
0006448570.tif 000004
【図４】
0006448570.tif 000005
【図５】
0006448570.tif 000006
【図６】
0006448570.tif 000007
【図７】
0006448570.tif 000008
【図８】
0006448570.tif 000009
【図９】
0006448570.tif 000010
【図１０】
0006448570.tif 000011
【図１１】
0006448570.tif 000012
【図１２】
0006448570.tif 000013
【図１３】
0006448570.tif 000014
【図１４】
0006448570.tif 000015
【図１５】
0006448570.tif 000016
【図１６】
0006448570.tif 000017
【図１７】
0006448570.tif 000018
【図１８】
0006448570.tif 000019
【図１９】
0006448570.tif 000020
【図２０】
0006448570.tif 000021
【図２１】
0006448570.tif 000022
【図２２】
0006448570.tif 000023
【図２３】
0006448570.tif 000024
【図２４】
0006448570.tif 000025
【図２５】
0006448570.tif 000026
【図２６】
0006448570.tif 000027
【図２７】
0006448570.tif 000028
【図２８】
0006448570.tif 000029
【図２９】
0006448570.tif 000030
【図３０】
0006448570.tif 000031
【図３１】
0006448570.tif 000032
【図３２】
0006448570.tif 000033
【図３３】
0006448570.tif 000034
【図３４】
0006448570.tif 000035
【図３５】
0006448570.tif 000036
【図３６】
0006448570.tif 000037
【図３７】
0006448570.tif 000038
【図３８】
0006448570.tif 000039
【図３９】
0006448570.tif 000040
【図４０】
0006448570.tif 000041
【図４１】
0006448570.tif 000042
【図４２】
0006448570.tif 000043
【図４３】
0006448570.tif 000044
【図４４】
0006448570.tif 000045
【図４５】
0006448570.tif 000046
【図４６】
0006448570.tif 000047
【図４７】
0006448570.tif 000048
【図４８】
0006448570.tif 000049
【図４９】
0006448570.tif 000050
【図５０】
0006448570.tif 000051
【図５１】
0006448570.tif 000052
【図５２】
0006448570.tif 000053
【図５３】
0006448570.tif 000054
【図５４】
0006448570.tif 000055
【図５５】
0006448570.tif 000056
【図５６】
0006448570.tif 000057
【図５７】
0006448570.tif 000058
【図５８】
0006448570.tif 000059
【図５９】
0006448570.tif 000060
【図６０】
0006448570.tif 000061
【図６１】
0006448570.tif 000062
【図６２】
0006448570.tif 000063
【図６３】
0006448570.tif 000064
【図６４】
0006448570.tif 000065
【図６５】
0006448570.tif 000066
【図６６】
0006448570.tif 000067