(57)【要約】【課題】Ｉ／Ｏ性能の改善を図ることができるメモリシステムを実現する。【解決手段】メモリシステムは、各々が複数のページを含む複数のブロックを含む不揮発性メモリと、前記不揮発性メモリを制御するコントローラとを含む。前記コントローラは、第１の論理アドレスと第１のブロック番号とを指定するライト要求をホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定し、前記ホストからのデータを前記第１のブロック内の前記第１の位置に書き込む。前記コントローラは、前記第１の位置を示す第１のブロック内物理アドレス、または前記第１の論理アドレスと前記第１のブロック番号と前記第１のブロック内物理アドレスとの組のいずれかを、前記ホストに通知する。【選択図】図２
2019079463.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
各々が複数のページを含む複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
第１の論理アドレスと第１のブロック番号とを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定し、前記ホストからのデータを前記第１のブロック内の前記第１の位置に書き込み、前記第１の位置を示す第１のブロック内物理アドレス、または前記第１の論理アドレスと前記第１のブロック番号と前記第１のブロック内物理アドレスとの組のいずれかを、前記ホストに通知し、
前記不揮発性メモリのガベージコレクションのためのコピー元ブロック番号およびコピー先ブロック番号を指定する制御コマンドを前記ホストから受信した場合、前記複数のブロックから、前記コピー元ブロック番号を有する第２のブロックと前記コピー先ブロック番号を有する第３のブロックとを選択し、前記第２のブロックに格納されている有効データを書き込むべき前記第３のブロック内のコピー先位置を決定し、前記有効データを前記第３のブロックの前記コピー先位置にコピーし、前記有効データの論理アドレスと、前記コピー先ブロック番号と、前記コピー先位置を示す第２のブロック内物理アドレスとを前記ホストに通知するように構成されている、メモリシステム。
【請求項２】
前記コントローラは、前記第１のブロック番号と前記第１のブロック内物理アドレスを指定するリード要求を前記ホストから受信した場合、前記第１のブロック番号と前記第１のブロック内物理アドレスとに基づいて、前記第１のブロック内の前記第１の位置からデータをリードするように構成されている請求項１記載のメモリシステム。
【請求項３】
前記第１のブロック内物理アドレスは、前記第１のブロックの先頭から前記第１の位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す第１のブロック内オフセットによって表され、
前記第２のブロック内物理アドレスは、前記第３のブロックの先頭から前記コピー先位置までのオフセットを前記粒度の倍数で示す第２のブロック内オフセットによって表される請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、
前記ライト要求を前記ホストから受信した場合、前記第１の論理アドレスを前記ホストからのデータと一緒に前記第１のブロックに書き込み、
前記制御コマンドを前記ホストから受信した場合、前記第２のブロック内に格納されている、前記有効データおよび前記有効データの論理アドレスの双方を、前記第３のブロックにコピーするように構成されている請求項１記載のメモリシステム。
【請求項５】
前記コントローラは、
前記複数のブロック内のフリーブロック群を管理し、
前記ホストからブロック割り当て要求を受信した場合、前記フリーブロック群の一つのフリーブロックを前記ホストに割り当て、前記割り当てられたブロックのブロック番号を前記ホストに通知するように構成され、
前記第１のブロック番号は、前記コントローラによって前記ホストに割り当てられた前記フリーブロックのブロック番号を示す請求項１記載のメモリシステム。
【請求項６】
前記コントローラは、
最大ブロック番号を要求する第１のコマンドを前記ホストから受信した場合、前記複数のブロックの数を示す最大ブロック番号を前記ホストに通知し、
ブロックサイズを要求する第２のコマンドを前記ホストから受信した場合、前記複数のブロックの各々のブロックサイズを前記ホストに通知するように構成されている請求項１記載のメモリシステム。
【請求項７】
前記コントローラは、前記第２のコマンドにブロック番号が含まれている場合、前記第２のコマンドに含まれている前記ブロック番号を有するブロックのブロックサイズを前記ホストに通知するように構成されている請求項６記載のメモリシステム。
【請求項８】
ホストに接続可能なメモリシステムであって、
各々が複数のページを含む複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
最大ブロック番号を要求する第１のコマンドを前記ホストから受信した場合、前記複数のブロックの数を示す最大ブロック番号を前記ホストに通知し、
ブロックサイズを要求する第２のコマンドを前記ホストから受信した場合、前記複数のブロックの各々のブロックサイズを前記ホストに通知し、
第１の論理アドレスと第１のブロック番号とを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定し、前記ホストからのデータを前記第１のブロック内の前記第１の位置に書き込み、前記第１の位置を示す第１のブロック内物理アドレス、または前記第１の論理アドレスと前記第１のブロック番号と前記第１のブロック内物理アドレスとの組のいずれかを、前記ホストに通知し、
前記不揮発性メモリのガベージコレクションのためのコピー元ブロック番号およびコピー先ブロック番号を指定する制御コマンドを前記ホストから受信した場合、前記複数のブロックから、前記コピー元ブロック番号を有する第２のブロックと前記コピー先ブロック番号を有する第３のブロックとを選択し、前記第２のブロックに格納されている有効データを書き込むべき前記第３のブロック内のコピー先位置を決定し、前記有効データを前記第３のブロックの前記コピー先位置にコピーし、前記有効データの論理アドレスと、前記コピー先ブロック番号と、前記コピー先位置を示す第２のブロック内物理アドレスとを前記ホストに通知するように構成されている、メモリシステム。
【請求項９】
前記コントローラは、前記第１のブロック番号と前記第１のブロック内物理アドレスを指定するリード要求を前記ホストから受信した場合、前記第１のブロック番号と前記第１のブロック内物理アドレスとに基づいて、前記第１のブロック内の前記第１の位置からデータをリードするように構成されている請求項８記載のメモリシステム。
【請求項１０】
前記第１のブロック内物理アドレスは、前記第１のブロックの先頭から前記第１の位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す第１のブロック内オフセットによって表され、
前記第２のブロック内物理アドレスは、前記第３のブロックの先頭から前記コピー先位置までのオフセットを前記粒度の倍数で示す第２のブロック内オフセットによって表される請求項８記載のメモリシステム。
【請求項１１】
前記コントローラは、
前記ライト要求を前記ホストから受信した場合、前記第１の論理アドレスを前記ホストからのデータと一緒に前記第１のブロックに書き込み、
前記制御コマンドを前記ホストから受信した場合、前記第２のブロック内に格納されている、前記有効データおよび前記有効データの論理アドレスの双方を、前記第３のブロックにコピーするように構成されている請求項８記載のメモリシステム。
【請求項１２】
各々が複数のページを含む複数のブロックを含む不揮発性メモリを制御する制御方法であって、
第１の論理アドレスと第１のブロック番号とを指定するライト要求をホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定する動作と、前記ホストからのデータを前記第１のブロック内の前記第１の位置に書き込む動作と、前記第１の位置を示す第１のブロック内物理アドレス、または前記第１の論理アドレスと前記第１のブロック番号と前記第１のブロック内物理アドレスとの組のいずれかを、前記ホストに通知する動作とを実行することと、
前記不揮発性メモリのガベージコレクションのためのコピー元ブロック番号およびコピー先ブロック番号を指定する制御コマンドを前記ホストから受信した場合、前記複数のブロックから、前記コピー元ブロック番号を有する第２のブロックと前記コピー先ブロック番号を有する第３のブロックとを選択する動作と、前記第２のブロックに格納されている有効データを書き込むべき前記第３のブロック内のコピー先位置を決定する動作と、前記有効データを前記第３のブロックの前記コピー先位置にコピーする動作と、前記有効データの論理アドレスと、前記コピー先ブロック番号と、前記コピー先位置を示す第２のブロック内物理アドレスとを前記ホストに通知する動作とを実行することとを具備する制御方法。
【請求項１３】
前記第１のブロック番号と前記第１のブロック内物理アドレスを指定するリード要求を前記ホストから受信した場合、前記第１のブロック番号と前記第１のブロック内物理アドレスとに基づいて、前記第１のブロック内の前記第１の位置からデータをリードすることとをさらに具備する請求項１２記載の制御方法。
【請求項１４】
ホストに接続可能なメモリシステムであって、
各々が複数のページを含む複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
第１の論理アドレスと第１のブロック番号とを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定し、前記ホストからのデータを前記第１のブロック内の前記第１の位置に書き込み、前記第１の位置を示す第１のブロック内物理アドレス、または前記第１の論理アドレスと前記第１のブロック番号と前記第１のブロック内物理アドレスとの組のいずれかを、前記ホストに通知するように構成されている、メモリシステム。
【請求項１５】
前記コントローラは、前記不揮発性メモリのガベージコレクションのためのコピー元ブロック番号およびコピー先ブロック番号を指定する制御コマンドを前記ホストから受信した場合、前記複数のブロックから、前記コピー元ブロック番号を有する第２のブロックと前記コピー先ブロック番号を有する第３のブロックとを選択し、前記第２のブロックに格納されている有効データを書き込むべき前記第３のブロック内のコピー先位置を決定し、前記有効データを前記第３のブロックの前記コピー先位置にコピーし、前記有効データの論理アドレスと、前記コピー先ブロック番号と、前記コピー先位置を示す第２のブロック内物理アドレスとを前記ホストに通知するように構成されている請求項１４記載のメモリシステム。
【請求項１６】
前記コントローラは、前記第１のブロック番号と前記第１のブロック内物理アドレスを指定するリード要求を前記ホストから受信した場合、前記第１のブロック番号と前記第１のブロック内物理アドレスとに基づいて、前記第１のブロック内の前記第１の位置からデータをリードするように構成されている請求項１４記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。
【０００４】
最近では、ホストとストレージとの間の新たなインタフェースが提案され始めている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Yiying Zhang, 外, "De-indirection for flash-based SSDs with nameless writes." FAST. 2012, [online], [平成29年9月13日検索], インターネット<URL: https://www.usenix.org/system/files/conference/fast12/zhang.pdf >
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、一般に、ＮＡＮＤ型フラッシュメモリの制御は複雑であるため、Ｉ／Ｏ性能を改善するための新たなインタフェースの実現に際しては、ホストとストレージ（メモリシステム）との間の適切な役割分担を考慮することが必要とされる。
【０００７】
本発明が解決しようとする課題は、Ｉ／Ｏ性能の改善を図ることができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００８】
実施形態によれば、ホストに接続可能なメモリシステムは、各々が複数のページを含む複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、第１の論理アドレスと第１のブロック番号とを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定し、前記ホストからのデータを前記第１のブロック内の前記第１の位置に書き込み、前記第１の位置を示す第１のブロック内物理アドレス、または前記第１の論理アドレスと前記第１のブロック番号と前記第１のブロック内物理アドレスとの組のいずれかを、前記ホストに通知する。前記コントローラは、前記不揮発性メモリのガベージコレクションのためのコピー元ブロック番号およびコピー先ブロック番号を指定する制御コマンドを前記ホストから受信した場合、前記複数のブロックから、前記コピー元ブロック番号を有する第２のブロックと前記コピー先ブロック番号を有する第３のブロックとを選択し、前記第２のブロックに格納されている有効データを書き込むべき前記第３のブロック内のコピー先位置を決定し、前記有効データを前記第３のブロックの前記コピー先位置にコピーし、前記有効データの論理アドレスと、前記コピー先ブロック番号と、前記コピー先位置を示す第２のブロック内物理アドレスとを前記ホストに通知する。
【図面の簡単な説明】
【０００９】
【図１】ホストと実施形態のメモリシステム（フラッシュストレージデバイス）との関係を示すブロック図。
【図２】従来型ＳＳＤとホストとの間の役割分担と、同実施形態のフラッシュストレージデバイスとホストとの間の役割分担とを説明するための図。
【図３】複数のホストと複数のフラッシュストレージデバイスとの間のデータ転送がネットワーク機器を介して実行される計算機システムの構成例を示すブロック図。
【図４】同実施形態のメモリシステムの構成例を示すブロック図。
【図５】同実施形態のメモリシステムに設けられたＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリダイとの関係を示すブロック図。
【図６】複数のブロックの集合によって構築されるスーパーブロックの構成例を示す図。
【図７】ホストが論理アドレスとブロック番号とを指定し且つ同実施形態のメモリシステムがブロック内物理アドレス（ブロック内オフセット）を決定するデータ書き込み動作と、ホストがブロック番号とブロック内物理アドレス（ブロック内オフセット）とを指定するデータ読み出し動作とを説明するための図。
【図８】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【図９】図８のライトコマンドに対するレスポンスを説明するための図。
【図１０】同実施形態のメモリシステムに適用されるＴｒｉｍコマンドを説明するための図。
【図１１】物理アドレスを表す、ブロック番号およびオフセットを説明するための図。
【図１２】ライトコマンドに応じて実行される書き込み動作を説明するための図。
【図１３】不良ページをスキップする書き込み動作を説明するための図。
【図１４】不良ページをスキップする書き込み動作の別の例を説明するための図。
【図１５】論理アドレスとデータのペアをブロック内のページに書き込む動作を説明するための図。
【図１６】データをブロック内のページのユーザデータ領域に書き込み、このデータの論理アドレスをこのページの冗長領域に書き込む動作を説明するための図。
【図１７】スーパーブロックが使用される場合におけるブロック番号とオフセットとの関係を説明するための図。
【図１８】同実施形態のメモリシステムに適用される最大ブロック番号ゲットコマンドを説明するための図。
【図１９】最大ブロック番号ゲットコマンドに対するレスポンスを説明するための図。
【図２０】同実施形態のメモリシステムに適用されるブロックサイズゲットコマンドを説明するための図。
【図２１】ブロックサイズゲットコマンドに対するレスポンスを説明するための図。
【図２２】同実施形態のメモリシステムに適用されるブロックアロケートコマンド（ブロック割り当て要求）を説明するための図。
【図２３】ブロックアロケートコマンドに対するレスポンスを説明するための図。
【図２４】ホストと同実施形態のメモリシステムとによって実行されるブロック情報取得処理を示すシーケンスチャート。
【図２５】ホストと同実施形態のメモリシステムとによって実行される書き込み処理のシーケンスを示すシーケンスチャート。
【図２６】すでに書き込まれているデータに対する更新データを書き込むデータ更新動作を示す図。
【図２７】同実施形態のメモリシステムによって管理されるブロック管理テーブルを更新する動作を説明するための図。
【図２８】ホストによって管理されるルックアップテーブル（論理物理アドレス変換テーブル）を更新する動作を説明するための図。
【図２９】無効化すべきデータに対応するブロック番号および物理アドレスを示すホストからの通知に応じてブロック管理テーブルを更新する動作を説明するための図。
【図３０】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
【図３１】同実施形態のメモリシステムによって実行されるリード動作を説明するための図。
【図３２】ホストからのリードコマンドに応じて、異なる物理記憶位置にそれぞれ格納されているデータ部をリードする動作を説明するための図。
【図３３】ホストと同実施形態のメモリシステムとによって実行されるリード処理のシーケンスを示すシーケンスチャート。
【図３４】同実施形態のメモリシステムに適用されるガベージコレクション（ＧＣ）制御コマンドを説明するための図。
【図３５】同実施形態のメモリシステムに適用されるＧＣ用コールバックコマンドを説明するための図。
【図３６】ホストと同実施形態のメモリシステムとによって実行されるガベージコレクション（ＧＣ）動作の手順を示すシーケンスチャート。
【図３７】ガベージコレクション（ＧＣ）のために実行されるデータコピー動作の例を説明するための図。
【図３８】図３７のデータコピー動作の結果に基づいて更新されるホストのルックアップテーブルの内容を説明するための図。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、実施形態を説明する。  
【００１１】
まず、図１を参照して、一実施形態に係るメモリシステムを含む計算機システムの構成を説明する。
【００１２】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ＮＡＮＤフラッシュ技術ベースのフラッシュストレージデバイス３として実現されている。
【００１３】
この計算機システムは、ホスト（ホストデバイス）２と、複数のフラッシュストレージデバイス３とを含んでいてもよい。ホスト２は、複数のフラッシュストレージデバイス３によって構成されるフラッシュアレイをストレージとして使用するように構成されたサーバであってもよい。ホスト（サーバ）２と複数のフラッシュストレージデバイス３は、インタフェース５０を介して相互接続される（内部相互接続）。この内部相互接続のためのインタフェース５０としては、これに限定されないが、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）等を使用し得る。
【００１４】
ホスト２として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
【００１５】
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク５１を介して複数のエンドユーザ端末（クライアント）６１に接続されてもよい。ホスト２は、これらエンドユーザ端末６１に対して様々なサービスを提供することができる。
【００１６】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム稼働プラットフォームを各クライアント（各エンドユーザ端末６１）に提供するプラットホーム・アズ・ア・サービス（ＰａａＳ）、（２）仮想サーバのようなインフラストラクチャを各クライアント（各エンドユーザ端末６１）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００１７】
複数の仮想マシンが、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。ホスト（サーバ）２上で走るこれら仮想マシンの各々は、対応する幾つかのクライアント（エンドユーザ端末６１）に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【００１８】
ホスト（サーバ）２は、フラッシュアレイを構成する複数のフラッシュストレージデバイス３を管理するストレージ管理機能と、エンドユーザ端末６１それぞれに対してストレージアクセスを含む様々なサービスを提供するフロントエンド機能とを含む。
【００１９】
従来型ＳＳＤにおいては、ＮＡＮＤ型フラッシュメモリのブロック／ページの階層構造はＳＳＤ内のフラッシュトランスレーション層（ＦＴＬ）によって隠蔽されている。つまり、従来型ＳＳＤのＦＴＬは、（１）論理物理アドレス変換テーブルとして機能するルックアップテーブルを使用して、論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスそれぞれとの間のマッピングを管理する機能、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための機能、（３）ＮＡＮＤ型フラッシュメモリのガベージコレクション（ＧＣ）を実行する機能、等を有している。論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスとの間のマッピングは、ホストからは見えない。ＮＡＮＤ型フラッシュメモリのブロック／ページ構造もホストからは見えない。
【００２０】
一方、ホストにおいても、一種のアドレス変換（アプリケーションレベルアドレス変換）が実行されることがある。このアドレス変換は、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーションレベルの論理アドレスそれぞれとＳＳＤ用の論理アドレスそれぞれとの間のマッピングを管理する。また、ホストにおいても、ＳＳＤ用の論理アドレス空間上に生じるフラグメントの解消のために、この論理アドレス空間上のデータ配置を変更する一種のＧＣ（アプリケーションレベルＧＣ）が実行される。
【００２１】
しかし、ホストおよびＳＳＤがそれぞれアドレス変換テーブルを有するという冗長な構成（ＳＳＤは論理物理アドレス変換テーブルとして機能するルックアップテーブルを有し、ホストはアプリケーションレベルアドレス変換テーブルを有する）においては、これらアドレス変換テーブルを保持するために膨大なメモリリソースが消費される。さらに、ホスト側のアドレス変換とＳＳＤ側のアドレス変換とを含む２重のアドレス変換は、Ｉ／Ｏ性能を低下させる要因にもなる。
【００２２】
さらに、ホスト側のアプリケーションレベルＧＣは、ＳＳＤへのデータ書き込み量を実際のユーザデータ量の数倍（例えば２倍）程度に増やす要因となる。このようなデータ書き込み量の増加は、ＳＳＤのライトアンプリフィケーションとあいまってシステム全体のストレージ性能を低下させ、またＳＳＤの寿命も短くする。
【００２３】
このような問題点を解消するために、従来型ＳＳＤのＦＴＬの機能の全てをホストに移すという対策も考えられる。
【００２４】
しかし、この対策を実装するためには、ＮＡＮＤ型フラッシュメモリのブロックおよびページをホストが直接的にハンドリングすることが必要となる。ＮＡＮＤ型フラッシュメモリにおいては、ページ書き込み順序制約があるため、ホストがページを直接ハンドリングすることは困難である。また、ＮＡＮＤ型フラッシュメモリにおいては、ブロックが不良ページ（バッドページ）を含む場合がある。バッドページをハンドリングすることはホストにとってはなおさら困難である。
【００２５】
そこで、本実施形態では、ＦＴＬの役割はホスト２とフラッシュストレージデバイス３との間で分担される。概していえば、ホスト２は論理物理アドレス変換テーブルとして機能するルックアップテーブルを管理するが、ホスト２はデータが書き込まれるべきブロックのブロック番号とこのデータに対応する論理アドレスだけを指定し、このデータが書き込まれるべきこのブロック内の位置（書き込み先位置）はフラッシュストレージデバイス３によって決定される。決定されたこのブロック内の位置（書き込み先位置）を示すブロック内物理アドレスは、フラッシュストレージデバイス３からホスト２に通知される。
【００２６】
このように、ホスト２はブロックのみをハンドリングし、ブロック内の位置（例えば、ページ、ページ内の位置）はフラッシュストレージデバイス３によってハンドリングされる。
【００２７】
フラッシュストレージデバイス３にデータを書き込む必要がある時、ホスト２は、ブロック番号を選択（またはフラッシュストレージデバイス３にフリーブロックを割り当てるように要求）し、論理アドレスと、選択したブロックのブロック番号（またはフラッシュストレージデバイス３によって通知される割り当てられたブロックのブロック番号）とを指定するライト要求（ライトコマンド）をフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３は、指定されたブロック番号を有するブロックにホスト２からのデータを書き込む。この場合、フラッシュストレージデバイス３は、このブロック内の位置（書き込み先位置）を決定し、ホスト２からのデータをこのブロック内の位置（書き込み先位置）に書き込む。そして、フラッシュストレージデバイス３は、このブロック内の位置（書き込み先位置）を示すブロック内物理アドレスを、ライト要求に対するレスポンス（返り値）としてホスト２に通知する。以下では、ホスト２に移されたＦＴＬ機能をグローバルＦＴＬと称する。
【００２８】
ホスト２のグローバルＦＴＬは、ストレージサービスを実行する機能、ウェアー制御機能、高可用性を実現するための機能、同じ内容を有する複数の重複データ部がストレージに格納されることを防止する重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）機能、ガベージコレクション（ＧＣ）ブロック選択機能、ＱｏＳ制御機能等を有する。ＱｏＳ制御機能には、ＱｏＳドメイン毎（またはブロック毎）にアクセス単位を決める機能が含まれる。アクセス単位は、ホスト２がライト／リードすることが可能な最小データサイズ（Ｇｒａｉｎ）を示す。フラッシュストレージデバイス３は単一、あるいは複数のアクセス単位（Ｇｒａｉｎ）をサポートしており、ホスト２は、フラッシュストレージデバイス３が複数のアクセス単位をサポートしている場合にはＱｏＳドメイン毎（またはブロック毎）に、使用すべきアクセス単位をフラッシュストレージデバイス３に指示することができる。
【００２９】
また、ＱｏＳ制御機能には、ＱｏＳドメイン間の性能干渉をできるだけ防ぐための機能が含まれている。この機能は、基本的には、安定したレイテンシを保つための機能である。
【００３０】
一方、フラッシュストレージデバイス３は、ローレベルアブストラクション（ＬＬＡ）を実行することができる。ＬＬＡはＮＡＮＤ型フラッシュメモリのアブストラクションのための機能である。ＬＬＡは、不良ページ（バッドページ）を隠蔽する機能、ページ書き込み順序制約を守る機能を含む。ＬＬＡは、ＧＣ実行機能も含む。ＧＣ実行機能は、ホスト２によって指定されたコピー元ブロック（ＧＣソースブロック）内の有効データを、ホスト２によって指定されたコピー先ブロック（ＧＣデスティネーションブロック）にコピーする。フラッシュストレージデバイス３のＧＣ実行機能は、有効データを書き込むべきＧＣデスティネーションブロック内の位置（コピー先位置）を決定し、ＧＣソースブロック内の有効データを、ＧＣデスティネーションブロック内のコピー先位置にコピーする。
【００３１】
図２は、従来型ＳＳＤとホストとの間の役割分担と、本実施形態のフラッシュストレージデバイス３とホスト２との間の役割分担とを示す。
【００３２】
図２の左部は、従来型ＳＳＤと仮想ディスクサービスを実行するホストとを含む計算機システム全体の階層構造を表している。
【００３３】
ホスト（サーバ）においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス１０１が実行される。仮想マシンサービス１０１上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション１０２が実行される。
【００３４】
また、ホスト（サーバ）においては、複数のユーザアプリケーション１０２に対応する複数の仮想ディスクサービス１０３が実行される。各仮想ディスクサービス１０３は、従来型ＳＳＤ内のストレージリソースの容量の一部を、対応するユーザアプリケーション１０２用のストレージリソース（仮想ディスク）として割り当てる。各仮想ディスクサービス１０３においては、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーションレベルの論理アドレスをＳＳＤ用の論理アドレスに変換するアプリケーションレベルアドレス変換も実行される。さらに、ホストにおいては、アプリケーションレベルＧＣ１０４も実行される。
【００３５】
ホスト（サーバ）から従来型ＳＳＤへのコマンドの送信および従来型ＳＳＤからホスト（サーバ）へのコマンド完了のレスポンスの返送は、ホスト（サーバ）および従来型ＳＳＤの各々に存在するＩ／Ｏキュー２００を介して実行される。
【００３６】
従来型ＳＳＤは、ライトバッファ（ＷＢ）３０１、ルックアップテーブル（ＬＵＴ）３０２、ガベージコレクション機能３０３、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）３０４を含む。従来型ＳＳＤは、一つのルックアップテーブル（ＬＵＴ）３０２のみを管理しており、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）３０４のリソースは複数の仮想ディスクサービス１０３によって共有される。
【００３７】
この構成においては、仮想ディスクサービス１０３下のアプリケーションレベルＧＣ１０４と従来型ＳＳＤ内のガベージコレクション機能３０３（ＬＵＴレベルＧＣ）とを含む重複したＧＣにより、ライトアンプリフィケーションが大きくなる。また、従来型ＳＳＤにおいては、あるエンドユーザまたはある仮想ディスクサービス１０３からのデータ書き込み量の増加によってＧＣの頻度が増加し、これによって他のエンドユーザまたは他の仮想ディスクサービス１０３に対するＩ／Ｏ性能が劣化するというノイジーネイバー問題が生じうる。
【００３８】
また、各仮想ディスクサービス内のアプリケーションレベルアドレス変換テーブルと従来型ＳＳＤ内のＬＵＴ３０２とを含む重複したリソースの存在により、多くのメモリリソースが消費される。
【００３９】
図２の右部は、本実施形態のフラッシュストレージデバイス３とホスト２とを含む計算機システム全体の階層構造を表している。
【００４０】
ホスト（サーバ）２においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス４０１が実行される。仮想マシンサービス４０１上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション４０２が実行される。
【００４１】
また、ホスト（サーバ）２においては、複数のユーザアプリケーション４０２に対応する複数のＩ／Ｏサービス４０３が実行される。これらＩ／Ｏサービス４０３には、ＬＢＡベースのブロックＩ／Ｏサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各Ｉ／Ｏサービス４０３は、論理アドレスそれぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル（ＬＵＴ）４１１を含む。ここで、論理アドレスとは、アクセス対象のデータを識別可能な識別子を意味する。この論理アドレスは、論理アドレス空間上の位置を指定する論理ブロックアドレス（ＬＢＡ）であってもよいし、あるいは、キー・バリュー・ストアのキー（タグ）であってもよいし、キーのハッシュ値であってもよい。
【００４２】
ＬＢＡベースのブロックＩ／Ｏサービスにおいては、論理アドレス（ＬＢＡ）それぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するＬＵＴ４１１が使用されてもよい。
【００４３】
キー・バリュー・ストアサービスにおいては、論理アドレス（つまり、キーのようなタグ）それぞれとこれら論理アドレス（つまり、キーのようなタグ）に対応するデータが格納されているフラッシュストレージデバイス３内の物理記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理するＬＵＴ４１１が使用されてもよい。このＬＵＴ４１１においては、タグと、このタグによって識別されるデータが格納されている物理アドレスと、このデータのデータ長との対応関係が管理されてもよい。
【００４４】
各エンドユーザは、使用すべきアドレッシング方法（ＬＢＡ、キー・バリュー・ストアのキー、等）を選択することができる。
【００４５】
これら各ＬＵＴ４１１は、ユーザアプリケーション４０２からの論理アドレスそれぞれをフラッシュストレージデバイス３用の論理アドレスそれぞれに変換するのではなく、ユーザアプリケーション４０２からの論理アドレスそれぞれをフラッシュストレージデバイス３の物理アドレスそれぞれに変換する。つまり、これら各ＬＵＴ４１１は、フラッシュストレージデバイス３用の論理アドレスを物理アドレスに変換するテーブルとアプリケーションレベルアドレス変換テーブルとが統合（マージ）されたテーブルである。
【００４６】
また、各Ｉ／Ｏサービス４０３は、ＧＣブロック選択機能を含む。ＧＣブロック選択機能は、対応するＬＵＴを使用して各ブロックの有効データ量を管理することができ、これによってＧＣソースブロックを選択することができる。
【００４７】
ホスト（サーバ）２においては、上述のＱｏＳドメイン毎にＩ／Ｏサービス４０３が存在してもよい。あるＱｏＳドメインに属するＩ／Ｏサービス４０３は、対応するＱｏＳドメイン内のユーザアプリケーション４０２によって使用される論理アドレスそれぞれと対応するＱｏＳドメインに割り当てられたリソースグループに属するブロック群のブロック番号それぞれとの間のマッピングを管理してもよい。
【００４８】
ホスト（サーバ）２からフラッシュストレージデバイス３へのコマンドの送信およびフラッシュストレージデバイス３からホスト（サーバ）２へのコマンド完了のレスポンス等の返送は、ホスト（サーバ）２およびフラッシュストレージデバイス３の各々に存在するＩ／Ｏキュー５００を介して実行される。これらＩ／Ｏキュー５００も、複数のＱｏＳドメインに対応する複数のキューグループに分類されていてもよい。
【００４９】
フラッシュストレージデバイス３は、複数のＱｏＳドメインに対応する複数のライトバッファ（ＷＢ）６０１、複数のＱｏＳドメインに対応する複数のガベージコレクション（ＧＣ）機能６０２、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）６０３を含む。
【００５０】
この図２の右部に示す構成においては、上位階層（ホスト２）はブロック境界を認識することができるので、ブロック境界／ブロックサイズを考慮してユーザデータを各ブロックに書き込むことができる。つまり、ホスト２はＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）６０３の個々のブロックを認識することができ、これにより、例えば、一つのブロック全体に一斉にデータを書き込む、一つのブロック内のデータ全体を削除または更新によって無効化する、といった制御を行うことが可能となる。この結果、一つのブロックに有効データと無効データが混在されるという状況を起こりにくくすることが可能となる。したがって、ＧＣを実行することが必要となる頻度を低減することができる。ＧＣの頻度を低減することにより、ライトアンプリフィケーションが低下され、フラッシュストレージデバイス３の性能の向上、フラッシュストレージデバイス３の寿命の最大化を実現できる。このように、上位階層（ホスト２）がブロック番号を認識可能な構成は有用である。
【００５１】
一方、データが書き込まれるべきブロック内の位置は、上位階層（ホスト２）ではなく、フラッシュストレージデバイス３によって決定される。したがって、不良ページ（バッドページ）を隠蔽することができ、またページ書き込み順序制約を守ることができる。
【００５２】
図３は、図１のシステム構成の変形例を示す。
【００５３】
図３においては、複数のホスト２Ａと複数のフラッシュストレージデバイス３との間のデータ転送がネットワーク機器（ここでは、ネットワークスイッチ１）を介して実行される。
【００５４】
すなわち、図３の計算機システムにおいては、図１のホスト（サーバ）２のストレージ管理機能がマネージャ２Ｂに移され、且つホスト（サーバ）２のフロントエンド機能が複数のホスト（エンドユーザサービス用ホスト）２Ａに移されている。
【００５５】
マネージャ２Ｂは、複数のフラッシュストレージデバイス３を管理し、各ホスト（エンドユーザサービス用ホスト）２Ａからの要求に応じて、これらフラッシュストレージデバイス３のストレージリソースを各ホスト（エンドユーザサービス用ホスト）２Ａに割り当てる。
【００５６】
各ホスト（エンドユーザサービス用ホスト）２Ａは、ネットワークを介して一つ以上のエンドユーザ端末６１に接続される。各ホスト（エンドユーザサービス用ホスト）２Ａは、上述の統合（マージ）された論理物理アドレス変換テーブルであるルックアップテーブル（ＬＵＴ）を管理する。各ホスト（エンドユーザサービス用ホスト）２Ａは、自身のＬＵＴを使用して、対応するエンドユーザによって使用される論理アドレスそれぞれと自身に割り当てられたリソースの物理アドレスそれぞれとの間のマッピングのみを管理する。したがって、この構成は、システムを容易にスケールアウトすることを可能にする。
【００５７】
各ホスト２ＡのグローバルＦＴＬは、ルックアップテーブル（ＬＵＴ）を管理する機能、高可用性を実現するための機能、ＱｏＳ制御機能、ＧＣブロック選択機能等を有する。
【００５８】
マネージャ２Ｂは、複数のフラッシュストレージデバイス３を管理するための専用のデバイス（計算機）である。マネージャ２Ｂは、各ホスト２Ａから要求された容量分のストレージリソースを予約するグローバルリソース予約機能を有する。さらに、マネージャ２Ｂは、各フラッシュストレージデバイス３の消耗度を監視するためのウェアー監視機能、予約されたストレージリソース（ＮＡＮＤリソース）を各ホスト２Ａに割り当てるＮＡＮＤリソース割り当て機能、ＱｏＳ制御機能、グローバルクロック管理機能、等を有する。
【００５９】
各フラッシュストレージデバイス３のローレベルアブストラクション（ＬＬＡ）は、不良ページ（バッドページ）を隠蔽する機能、ページ書き込み順序制約を守る機能、ライトバッファを管理する機能、ＧＣ実行機能等を有する。
【００６０】
図３のシステム構成によれば、各フラッシュストレージデバイス３の管理はマネージャ２Ｂによって実行されるので、各ホスト２Ａは、自身に割り当てられた一つ以上のフラッシュストレージデバイス３にＩ／Ｏ要求を送信する動作と、フラッシュストレージデバイス３からのレスポンスを受信するという動作とのみを実行すればよい。つまり、複数のホスト２Ａと複数のフラッシュストレージデバイス３との間のデータ転送はネットワークスイッチ１のみを介して実行され、マネージャ２Ｂはこのデータ転送には関与しない。また、上述したように、ホスト２Ａそれぞれによって管理されるＬＵＴの内容は互いに独立している。よって、容易にホスト２Ａの数を増やすことができるので、スケールアウト型のシステム構成を実現することができる。
【００６１】
図４は、フラッシュストレージデバイス３の構成例を示す。
【００６２】
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００６３】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００６４】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。ブロックＢＬＫ０〜ＢＬＫｍ−１は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００６５】
コントローラ４は、Ｔｏｇｇｌｅ、オープンＮＡＮＤフラッシュインタフェース（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラ（制御回路）である。
【００６６】
ＮＡＮＤ型フラッシュメモリ５は、図５に示すように、複数のＮＡＮＤ型フラッシュメモリダイを含む。各ＮＡＮＤ型フラッシュメモリダイは、複数のブロックＢＬＫを含むメモリセルアレイとこのメモリセルアレイを制御する周辺回路とを含む不揮発性メモリダイである。個々のＮＡＮＤ型フラッシュメモリダイは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリダイは、並列動作単位として機能する。ＮＡＮＤ型フラッシュメモリダイは、「ＮＡＮＤ型フラッシュメモリチップ」または「不揮発性メモリチップ」とも称される。図５においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６が接続されており、これらチャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６の各々に、同数（例えばチャンネル当たり２個のダイ）のＮＡＮＤ型フラッシュメモリダイそれぞれが接続されている場合が例示されている。各チャンネルは、対応するＮＡＮＤ型フラッシュメモリダイと通信するための通信線（メモリバス）を含む。
【００６７】
コントローラ４は、チャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６を介してＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２を制御する。コントローラ４は、チャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６を同時に駆動することができる。
【００６８】
チャンネルＣｈ１〜Ｃｈ１６に接続された１６個のＮＡＮＤ型フラッシュメモリダイ＃１〜＃１６は第１のバンクとして編成されてもよく、またチャンネルＣｈ１〜Ｃｈ１６に接続された残りの１６個のＮＡＮＤ型フラッシュメモリダイ＃１７〜＃３２は第２のバンクとして編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図５の構成例においては、１６チャンネルと、２つのバンクを使用したバンクインタリーブとによって、最大３２個のＮＡＮＤ型フラッシュメモリダイを並列動作させることができる。
【００６９】
本実施形態では、コントローラ４は、各々が複数のブロックＢＬＫから構成される複数のブロック（以下、スーパーブロックと称する）を管理してもよく、スーパーブロックの単位で消去動作を実行してもよい。
【００７０】
スーパーブロックは、これに限定されないが、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２から一つずつ選択される計３２個のブロックＢＬＫを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２に対応する６４個のプレーンから一つずつ選択される計６４個のブロックＢＬＫを含んでいてもよい。図６には、一つのスーパーブロックＳＢが、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２から一つずつ選択される計３２個のブロックＢＬＫ（図５においては太枠で囲まれているブロックＢＬＫ）から構成される場合が例示されている。
【００７１】
図４に示されているように、コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００７２】
このホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってもよい。ホストインタフェース１１は、ホスト２から様々な要求（コマンド）を受信する。これら要求（コマンド）には、ライト要求（ライトコマンド）、リード要求（リードコマンド）、他の様々な要求（コマンド）が含まれる。
【００７３】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答してＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭから制御プログラム（ファームウェア）をＤＲＡＭ６にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ４内の図示しないＳＲＡＭ上にロードされてもよい。このＣＰＵ１２は、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００７４】
ＣＰＵ１２は、ライト動作制御部２１、リード動作制御部２２、およびＧＣ動作制御部２３として機能することができる。これらライト動作制御部２１、リード動作制御部２２、およびＧＣ動作制御部２３においては、図２の右部に示すシステム構成を実現するためのアプリケーションプログラムインタフェース（ＡＰＩ）が実装されている。
【００７５】
ライト動作制御部２１は、ブロック番号と論理アドレスを指定するライト要求（ライトコマンド）をホスト２から受信する。論理アドレスは、書き込むべきデータ（ユーザデータ）を識別可能な識別子であり、例えば、ＬＢＡであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよいし、キーのハッシュ値であってもよい。ブロック番号は、このデータが書き込まれるべきブロックを指定する識別子である。ブロック番号としては、複数のブロック内の任意の一つを一意に識別可能な様々な値を使用し得る。ブロック番号によって指定されるブロックは、物理ブロックであってもよいし、上述のスーパーブロックであってもよい。ライトコマンドを受信した場合、ライト動作制御部２１は、まず、ホスト２からのデータを書き込むべき、この指定されたブロック番号を有するブロック（書き込み先ブロック）内の位置（書き込み先位置）を決定する。次いで、ライト動作制御部２１は、ホスト２からのデータ（ライトデータ）を、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト動作制御部２１は、ホスト２からのデータのみならず、このデータとこのデータの論理アドレスの双方を書き込み先ブロックに書き込むことができる。
【００７６】
そして、ライト動作制御部２１は、この書き込み先ブロックの上述の書き込み先位置を示すブロック内物理アドレスをホスト２に通知する。このブロック内物理アドレスは、この書き込み先ブロック内の書き込み先位置を示すブロック内オフセットによって表される。
【００７７】
この場合、このブロック内オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセット、つまり書き込み先ブロックの先頭に対する書き込み先位置のオフセットを示す。書き込み先ブロックの先頭から書き込み先位置までのオフセットのサイズは、ページサイズとは異なるサイズを有する粒度（Ｇｒａｉｎ）の倍数で示される。粒度（Ｇｒａｉｎ）は、上述のアクセス単位である。粒度（Ｇｒａｉｎ）のサイズの最大値は、ブロックサイズまでに制限される。換言すれば、ブロック内オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す。
【００７８】
粒度（Ｇｒａｉｎ）は、ページサイズよりも小さいサイズを有していてもよい。例えば、ページサイズが１６Ｋバイトである場合、粒度（Ｇｒａｉｎ）は、そのサイズが４Ｋバイトであってもよい。この場合、ある一つのブロックにおいては、各々サイズが４Ｋバイトである複数のオフセット位置が規定される。ブロック内の最初のオフセット位置に対応するブロック内オフセットは、例えば０であり、ブロック内の次のオフセット位置に対応するブロック内オフセットは、例えば１である、ブロック内のさらに次のオフセット位置に対応するブロック内オフセットは、例えば２である。
【００７９】
あるいは、粒度（Ｇｒａｉｎ）は、ページサイズよりも大きなサイズを有していてもよい。例えば、粒度（Ｇｒａｉｎ）は、ページサイズの数倍のサイズであってもよい。ページサイズが１６Ｋバイトである場合、粒度は、３２Ｋバイトのサイズであってもよい。
【００８０】
このように、ライト動作制御部２１は、ホスト２からのブロック番号を有するブロック内の書き込み先位置を自身で決定し、そしてホスト２からのライトデータをこのブロック内のこの書き込み先位置に書き込む。そして、ライト動作制御部２１は、この書き込み先位置を示すブロック内物理アドレス（ブロック内オフセット）をライト要求に対応するレスポンス（返り値）としてホスト２に通知する。あるいは、ライト動作制御部２１は、ブロック内物理アドレス（ブロック内オフセット）のみをホスト２に通知するのではなく、論理アドレスとブロック番号とブロック内物理アドレス（ブロック内オフセット）との組をホスト２に通知してもよい。
【００８１】
したがって、フラッシュストレージデバイス３は、ブロック番号をホスト２にハンドリングさせつつ、ページ書き込み順序制約、バッドページ、ページサイズ等を隠蔽することができる。
【００８２】
この結果、ホスト２は、ブロック境界は認識できるが、ページ書き込み順序制約、バッドページ、ページサイズについては意識することなく、どのユーザデータがどのブロック番号に存在するかを管理することができる。
【００８３】
リード動作制御部２２は、物理アドレス（すなわち、ブロック番号およびブロック内オフセット）を指定するリード要求（リードコマンド）をホスト２から受信した場合、これらブロック番号およびブロック内オフセットに基づいて、リード対象のブロック内のリード対象の物理記憶位置からデータをリードする。リード対象のブロックは、ブロック番号によって特定される。このブロック内のリード対象の物理記憶位置は、ブロック内オフセットによって特定される。このブロック内オフセットを使用することにより、ホスト２は、ＮＡＮＤ型フラッシュメモリの世代毎の異なるページサイズをハンドリングする必要がない。
【００８４】
リード対象の物理記憶位置を得るために、リード動作制御部２２は、まず、このブロック内オフセットを、ページサイズを表す粒度の数（ページサイズが１６Ｋバイトで粒度（Ｇｒａｉｎ）が４Ｋバイトである場合には、ページサイズを表す粒度の数は４）で除算し、そしてこの除算によって得られる商および余りを、リード対象のページ番号およびリード対象のページ内オフセットとしてそれぞれ決定してもよい。
【００８５】
ＧＣ動作制御部２３は、ＮＡＮＤ型フラッシュメモリ５のガベージコレクションのためのコピー元ブロック番号（ＧＣソースブロック番号）およびコピー先ブロック番号（ＧＣデスティネーションブロック番号）を指定するＧＣ制御コマンドをホスト２から受信した場合、ＮＡＮＤ型フラッシュメモリ５の複数のブロックから、指定されたコピー元ブロック番号を有するブロックと指定されたコピー先ブロック番号を有するブロックとをコピー元ブロック（ＧＣソースブロック）およびコピー先ブロック（ＧＣデスティネーションブロック）として選択する。ＧＣ動作制御部２３は、選択されたＧＣソースブロックに格納されている有効データを書き込むべきＧＣデスティネーションブロック内のコピー先位置を決定し、有効データをＧＣデスティネーションブロック内のコピー先位置にコピーする。
【００８６】
そして、ＧＣ動作制御部２３は、有効データの論理アドレスと、コピー先ブロック番号と、ＧＣデスティネーションブロック内のコピー先位置を示すブロック内物理アドレス（ブロック内オフセット）とを、ホスト２に通知する。
【００８７】
有効データ／無効データの管理は、ブロック管理テーブル３２を使用して実行されてもよい。このブロック管理テーブル３２は、例えば、ブロック毎に存在してもよい。あるブロックに対応するブロック管理テーブル３２においては、このブロック内のデータそれぞれの有効／無効を示すビットマップフラグが格納されている。ここで、有効データとは、論理アドレスから最新のデータとして紐付けられているデータであって、後にホスト２からリードされる可能性があるデータを意味する。無効データとは、もはやホスト２からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。
【００８８】
上述したように、ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）内に格納されている有効データを書き込むべきコピー先ブロック（ＧＣデスティネーションブロック）内の位置（コピー先位置）を決定し、有効データをコピー先ブロック（ＧＣデスティネーションブロック）のこの決定された位置（コピー先位置）にコピーする。この場合、ＧＣ動作制御部２３は、有効データとこの有効データの論理アドレスの双方を、コピー先ブロック（ＧＣデスティネーションブロック）にコピーしてもよい。
【００８９】
本実施形態では、上述したように、ライト動作制御部２１は、ホスト２からのデータ（ライトデータ）とホスト２からの論理アドレスの双方を書き込み先ブロックに書き込むことができる。このため、ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）内の各データの論理アドレスをこのコピー元ブロック（ＧＣソースブロック）から容易に取得することができるので、コピーされた有効データの論理アドレスをホスト２に容易に通知することができる。
【００９０】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリ制御回路である。ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、ライトバッファ（ＷＢ）３１の格納のために使用される。また、ＤＲＡＭ６の記憶領域の他の一部は、ブロック管理テーブル３２の格納のために使用される。なお、これらライトバッファ（ＷＢ）３１、およびブロック管理テーブル３２は、コントローラ４内の図示しないＳＲＡＭに格納されてもよい。
【００９１】
図７は、ホスト２が論理アドレスとブロック番号とを指定し且つフラッシュストレージデバイス３がブロック内物理アドレス（ブロック内オフセット）を決定するデータ書き込み動作と、ホスト２がブロック番号とブロック内物理アドレス（ブロック内オフセット）とを指定するデータ読み出し動作とを示す。
【００９２】
データ書き込み動作は以下の手順で実行される。
【００９３】
（１）ホスト２のライト処理部４１２がフラッシュストレージデバイス３にデータ（ライトデータ）を書き込むことが必要な時、ライト処理部４１２は、フリーブロックを割り当てるようにフラッシュストレージデバイス３に要求してもよい。フラッシュストレージデバイス３のコントローラ４は、ＮＡＮＤ型フラッシュメモリ５のフリーブロック群を管理するブロック割り当て部７０１を含む。ブロック割り当て部７０１がライト処理部４１２からこの要求（ブロック割り当て要求）を受信した時、ブロック割り当て部７０１は、フリーブロック群の一つのフリーブロックをホスト２に割り当て、割り当てられたブロックのブロック番号（ＢＬＫ＃）をホスト２に通知する。
【００９４】
あるいは、ライト処理部４１２がフリーブロック群を管理する構成においては、ライト処理部４１２が自身で書き込み先ブロックを選択してもよい。
【００９５】
（２）ライト処理部４１２は、ライトデータに対応する論理アドレス（例えばＬＢＡ）と書き込み先ブロックのブロック番号（ＢＬＫ＃）とを指定するライト要求をフラッシュストレージデバイス３に送信する。
【００９６】
（３）フラッシュストレージデバイス３のコントローラ４は、データ書き込み用のページを割り当てるページ割り当て部７０２を含む。ページ割り当て部７０２がライト要求を受信した時、ページ割り当て部７０２は、ライト要求によって指定されたブロック番号を有するブロック（書き込み先ブロック）内の書き込み先位置を示すブロック内物理アドレス（ブロック内ＰＢＡ）を決定する。ブロック内物理アドレス（ブロック内ＰＢＡ）は、上述のブロック内オフセット（単にオフセットとしても参照される）によって表すことができる。コントローラ４は、ライト要求によって指定されたブロック番号と、ブロック内物理アドレス（ブロック内ＰＢＡ）とに基づいて、ホスト２からのライトデータを、書き込み先ブロック内の書き込み先位置に書き込む。
【００９７】
（４）コントローラ４は、書き込み先位置を示すブロック内物理アドレス（ブロック内ＰＢＡ）をライト要求に対するレスポンスとしてホスト２に通知する。あるいは、コントローラ４は、ライトデータに対応する論理アドレス（ＬＢＡ）と、書き込み先ブロックのブロック番号（ＢＬＫ＃）と、書き込み先位置を示すブロック内ＰＢＡ（オフセット）との組を、ライト要求に対するレスポンスとしてホスト２に通知してもよい。換言すれば、コントローラは、ブロック内物理アドレス、または論理アドレスとブロック番号とブロック内物理アドレスとの組のいずれかを、ホスト２に通知する。ホスト２においては、ライトデータが書き込まれた物理記憶位置を示す物理アドレス（ブロック番号、ブロック内物理アドレス（ブロック内オフセット））が、このライトデータの論理アドレスにマッピングされるように、ＬＵＴ４１１が更新される。
【００９８】
データリード動作は以下の手順で実行される。
【００９９】
（１）’ホスト２がフラッシュストレージデバイス３からデータをリードすることが必要な時、ホスト２は、ＬＵＴ４１１を参照して、リードすべきデータの論理アドレスに対応する物理アドレス（ブロック番号、ブロック内物理アドレス（ブロック内オフセット））をＬＵＴ４１１から取得する。
【０１００】
（２）’ホスト２は、取得されたブロック番号およびブロック内物理アドレス（ブロック内オフセット）を指定するリード要求をフラッシュストレージデバイス３に送出する。フラッシュストレージデバイス３のコントローラ４がこのリード要求をホスト２から受信した時、コントローラ４は、ブロック番号およびブロック内物理アドレスに基づいて、リード対象のブロックおよびリード対象の物理記憶位置を特定し、このリード対象のブロック内のリード対象の物理記憶位置からデータをリードする。
【０１０１】
図８は、フラッシュストレージデバイス３に適用されるライトコマンドを示す。
【０１０２】
ライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドＩＤ、ブロック番号ＢＬＫ＃、論理アドレス、長さ、等を含んでもよい。
【０１０３】
コマンドＩＤはこのコマンドがライトコマンドであることを示すＩＤ（コマンドコード）であり、ライトコマンドにはライトコマンド用のコマンドＩＤが含まれる。
【０１０４】
ブロック番号ＢＬＫ＃は、データが書き込まれるべきブロックを一意に識別可能な識別子（ブロックアドレス）である。
【０１０５】
論理アドレスは、書き込まれるべきライトデータを識別するための識別子である。この論理アドレスは、上述したように、ＬＢＡであってもよいし、キー・バリュー・ストアのキーであってもよいし、キーのハッシュ値であってもよい。論理アドレスがＬＢＡである場合には、このライトコマンドに含まれる論理アドレス（開始ＬＢＡ）は、ライトデータが書き込まれるべき論理位置（最初の論理位置）を示す。
【０１０６】
長さは、書き込まれるべきライトデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【０１０７】
ホスト２からライトコマンドを受信した時、コントローラ４は、ライトコマンドによって指定されたブロック番号を有するブロック内の書き込み先位置を決定する。この書き込み先位置は、ページ書き込み順序の制約およびバッドページ等を考慮して決定される。そして、コントローラ４は、ホスト２からのデータを、ライトコマンドによって指定されたブロック番号を有するこのブロック内のこの書き込み先位置に書き込む。
【０１０８】
図９は、図８のライトコマンドに対するレスポンスを示す。
【０１０９】
このレスポンスは、ブロック内物理アドレス、長さを含む。ブロック内物理アドレスは、データが書き込まれたブロック内の位置（物理記憶位置）を示す。ブロック内物理アドレスは、上述したように、ブロック内オフセットによって指定可能である。長さは、書き込まれたデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【０１１０】
あるいは、このレスポンスは、ブロック内物理アドレスおよび長さだけでなく、論理アドレスおよびブロック番号をさらに含んでいてもよい。論理アドレスは、図８のライトコマンドに含まれていた論理アドレスである。ブロック番号は、図８のライトコマンドに含まれていた論理アドレスである。
【０１１１】
図１０は、フラッシュストレージデバイス３に適用されるＴｒｉｍコマンドを示す。
【０１１２】
このＴｒｉｍコマンドは、無効にすべきデータが格納されている物理記憶位置を示すブロック番号およびブロック内物理アドレス（ブロック内オフセット）を含むコマンドである。つまり、このＴｒｉｍコマンドは、ＬＢＡのような論理アドレスではなく、物理アドレスを指定可能である。このＴｒｉｍコマンドは、コマンドＩＤ、物理アドレス、長さを含む。
【０１１３】
コマンドＩＤはこのコマンドがＴｒｉｍコマンドであることを示すＩＤ（コマンドコード）であり、ＴｒｉｍコマンドにはＴｒｉｍコマンド用のコマンドＩＤが含まれる。
【０１１４】
物理アドレスは、無効化すべきデータが格納されている最初の物理記憶位置を示す。本実施形態では、この物理アドレスは、ブロック番号とオフセット（ブロック内オフセット）との組み合わせによって指定される。
【０１１５】
長さは、無効化すべきデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、バイトによって指定されてもよい。
【０１１６】
コントローラ４は、複数のブロックの各々に含まれるデータそれぞれの有効／無効を示すフラグ（ビットマップフラグ）をブロック管理テーブル３２を使用して管理する。無効にすべきデータが格納されている物理記憶位置を示すブロック番号およびオフセット（ブロック内オフセット）を含むＴｒｉｍコマンドをホスト２から受信した場合、コントローラ４は、ブロック管理テーブル３２を更新して、Ｔｒｉｍコマンドに含まれるブロック番号およびブロック内オフセットに対応する物理記憶位置のデータに対応するフラグ（ビットマップフラグ）を無効を示す値に変更する。
【０１１７】
図１１は、ブロック内物理アドレスを規定するブロック内オフセットを示す。
【０１１８】
ブロック番号はある一つのブロックＢＬＫを指定する。各ブロックＢＬＫは、図１１に示されているように、複数のページ（ここでは、ページ０〜ページｎ）を含む。
【０１１９】
ページサイズ（各ページのユーザデータ格納領域）が１６Ｋバイトであり、粒度（Ｇｒａｉｎ）が４ＫＢのサイズであるケースにおいては、このブロックＢＬＫは、４×（ｎ＋１）個の領域に論理的に分割される。
【０１２０】
オフセット＋０はページ０の最初の４ＫＢ領域を示し、オフセット＋１はページ０の２番目の４ＫＢ領域を示し、オフセット＋２はページ０の３番目の４ＫＢ領域を示し、オフセット＋３はページ０の４番目の４ＫＢ領域を示す。
【０１２１】
オフセット＋４はページ１の最初の４ＫＢ領域を示し、オフセット＋５はページ１の２番目の４ＫＢ領域を示し、オフセット＋６はページ１の３番目の４ＫＢ領域を示し、オフセット＋７はページ１の４番目の４ＫＢ領域を示す。
【０１２２】
図１２は、ライトコマンドに応じて実行される書き込み動作を示す。
【０１２３】
いま、ブロックＢＬＫ＃１が書き込み先ブロックとして割り当てられている場合を想定する。コントローラ４は、ページ０、ページ１、ページ２、…ページｎという順序で、データをページ単位でブロックＢＬＫ＃１に書き込む。
【０１２４】
図１１においては、ブロックＢＬＫ＃１のページ０に１６Ｋバイト分のデータがすでに書き込まれている状態で、ブロック番号（＝ＢＬＫ＃１）、論理アドレス（ＬＢＡｘ）および長さ（＝４）を指定するライトコマンドがホスト２から受信された場合が想定されている。コントローラ４は、ブロックＢＬＫ＃１のページ１を書き込み先位置として決定し、ホスト２から受信される１６Ｋバイト分のライトデータをブロックＢＬＫ＃１のページ１に書き込む。そして、コントローラ４は、このライトコマンドに対するレスポンスとして、オフセット（ブロック内オフセット）、長さをホスト２に返す。このケースにおいては、オフセット（ブロック内オフセット）は＋５であり、長さは４である。あるいは、コントローラ４は、このライトコマンドに対するレスポンスとして、論理アドレス、ブロック番号、オフセット（ブロック内オフセット）、長さをホスト２に返してもよい。このケースにおいては、論理アドレスはＬＢＡｘであり、ブロック番号はＢＬＫ＃１であり、オフセット（ブロック内オフセット）は＋５であり、長さは４である。
【０１２５】
図１３は、不良ページ（バッドページ）をスキップする書き込み動作を示す。
【０１２６】
図１３においては、ブロックＢＬＫ＃１のページ０、ページ１にデータがすでに書き込まれている状態で、ブロック番号（＝ＢＬＫ＃１）、論理アドレス（ＬＢＡｘ＋１）および長さ（＝４）を指定するライトコマンドがホスト２から受信された場合が想定されている。もしブロックＢＬＫ＃１のページ２が不良ページであるならば、コントローラ４は、ブロックＢＬＫ＃１のページ３を書き込み先位置として決定し、ホスト２から受信される１６Ｋバイト分のライトデータをブロックＢＬＫ＃１のページ３に書き込む。そして、コントローラ４は、このライトコマンドに対するレスポンスとして、オフセット（ブロック内オフセット）、長さをホスト２に返す。このケースにおいては、オフセット（ブロック内オフセット）は＋１２であり、長さは４である。あるいは、コントローラ４は、このライトコマンドに対するレスポンスとして、論理アドレス、ブロック番号、オフセット（ブロック内オフセット）、長さをホスト２に返してもよい。このケースにおいては、論理アドレスはＬＢＡｘ＋１であり、ブロック番号はＢＬＫ＃１であり、オフセット（ブロック内オフセット）は＋１２であり、長さは４である。
【０１２７】
図１４は、不良ページをスキップする書き込み動作の別の例を示す。
【０１２８】
図１４においては、不良ページを挟む２つのページに跨がってデータが書き込まれる場合が想定されている。いま、ブロックＢＬＫ＃２のページ０、ページ１にデータがすでに書き込まれており、且つライトバッファ３１に未書き込みの８Ｋバイト分のライトデータが残っている場合を想定する。この状態で、ブロック番号（＝ＢＬＫ＃２）、論理アドレス（ＬＢＡｙ）および長さ（＝６）を指定するライトコマンドが受信されたならば、コントローラ４は、未書き込みの８Ｋバイトライトデータと、ホスト２から新たに受信される２４Ｋバイトライトデータ内の最初の８Ｋバイトライトデータとを使用して、ページサイズに対応する１６Ｋバイトライトデータを準備する。そして、コントローラ４は、この準備した１６ＫバイトライトデータをブロックＢＬＫ＃２のページ２に書き込む。
【０１２９】
もしブロックＢＬＫ＃２の次のページ３が不良ページであるならば、コントローラ４は、ブロックＢＬＫ＃２のページ４を次の書き込み先位置として決定し、ホスト２から受信された２４Ｋバイトライトデータ内の残りの１６Ｋバイトライトデータを、ブロックＢＬＫ＃２のページ４に書き込む。
【０１３０】
そして、コントローラ４は、このライトコマンドに対するレスポンスとして、２つのオフセット（ブロック内オフセット）と、２つの長さをホスト２に返す。このケースにおいては、このレスポンスは、オフセット（＝＋１０）、長さ（＝２）、オフセット（＝＋１６）、長さ（＝４）を含んでもよい。あるいは、コントローラ４は、このライトコマンドに対するレスポンスとして、ＬＢＡｙ、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１０）、長さ（＝２）、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１６）、長さ（＝４）をホスト２に返してもよい。
【０１３１】
図１５、図１６は、論理アドレスとデータのペアをブロック内のページに書き込む動作を示す。
【０１３２】
各ブロックにおいて、各ページは、ユーザデータを格納するためのユーザデータ領域と管理データを格納するための冗長領域とを含んでもよい。ページサイズは１６ＫＢ＋アルファである。
【０１３３】
コントローラ４は、４ＫＢユーザデータとこの４ＫＢユーザデータに対応する論理アドレス（例えばＬＢＡ）との双方を書き込み先ブロックＢＬＫに書き込む。この場合、図１５に示すように、各々がＬＢＡと４ＫＢユーザデータとを含む４つのデータセットが同じページに書き込まれてもよい。ブロック内オフセットは、セット境界を示してもよい。
【０１３４】
あるいは、図１６に示されているように、４つの４ＫＢユーザデータがページ内のユーザデータ領域に書き込まれ、これら４つの４ＫＢユーザデータに対応する４つのＬＢＡがこのページ内の冗長領域に書き込まれてもよい。
【０１３５】
図１７は、スーパーブロックが使用されるケースにおけるブロック番号とオフセット（ブロック内オフセット）との関係を示す。以下では、ブロック内オフセットは単にオフセットとしても参照される。
【０１３６】
ここでは、図示を簡単化するために、ある一つのスーパーブロックＳＢ＃１が４つのブロックＢＬＫ＃１１、ＢＬＫ＃２１、ＢＬＫ＃３１、ＢＬＫ＃４１から構成されている場合が想定されている。コントローラ４は、ブロックＢＬＫ＃１１のページ０、ブロックＢＬＫ＃２１のページ０、ブロックＢＬＫ＃３１のページ０、ブロックＢＬＫ＃４１のページ０、ブロックＢＬＫ＃１１のページ１、ブロックＢＬＫ＃２１のページ１、ブロックＢＬＫ＃３１のページ１、ブロックＢＬＫ＃４１のページ１、…という順序でデータを書き込む。
【０１３７】
オフセット＋０はブロックＢＬＫ＃１１のページ０の最初の４ＫＢ領域を示し、オフセット＋１はブロックＢＬＫ＃１１のページ０の２番目の４ＫＢ領域を示し、オフセット＋２はブロックＢＬＫ＃１１のページ０の３番目の４ＫＢ領域を示し、オフセット＋３はブロックＢＬＫ＃１１のページ０の４番目の４ＫＢ領域を示す。
【０１３８】
オフセット＋４はブロックＢＬＫ＃２１のページ０の最初の４ＫＢ領域を示し、オフセット＋５はブロックＢＬＫ＃２１のページ０の２番目の４ＫＢ領域を示し、オフセット＋６はブロックＢＬＫ＃２１のページ０の３番目の４ＫＢ領域を示し、オフセット＋７はブロックＢＬＫ＃２１のページ０の４番目の４ＫＢ領域を示す。
【０１３９】
同様に、オフセット＋１２はブロックＢＬＫ＃４１のページ０の最初の４ＫＢ領域を示し、オフセット＋１３はブロックＢＬＫ＃４１のページ０の２番目の４ＫＢ領域を示し、オフセット＋１４はブロックＢＬＫ＃４１のページ０の３番目の４ＫＢ領域を示し、オフセット＋１５はブロックＢＬＫ＃４１のページ０の４番目の４ＫＢ領域を示す。
【０１４０】
オフセット＋１６はブロックＢＬＫ＃１１のページ１の最初の４ＫＢ領域を示し、オフセット＋１７はブロックＢＬＫ＃１１のページ１の２番目の４ＫＢ領域を示し、オフセット＋１８はブロックＢＬＫ＃１１のページ１の３番目の４ＫＢ領域を示し、オフセット＋１９はブロックＢＬＫ＃１１のページ１の４番目の４ＫＢ領域を示す。
【０１４１】
オフセット＋２０はブロックＢＬＫ＃２１のページ１の最初の４ＫＢ領域を示し、オフセット＋２１はブロックＢＬＫ＃２１のページ１の２番目の４ＫＢ領域を示し、オフセット＋２２はブロックＢＬＫ＃２１のページ１の３番目の４ＫＢ領域を示し、オフセット＋２３はブロックＢＬＫ＃２１のページ１の４番目の４ＫＢ領域を示す。
【０１４２】
同様に、オフセット＋２８はブロックＢＬＫ＃４１のページ１の最初の４ＫＢ領域を示し、オフセット＋２９はブロックＢＬＫ＃４１のページ１の２番目の４ＫＢ領域を示し、オフセット＋３０はブロックＢＬＫ＃４１のページ１の３番目の４ＫＢ領域を示し、オフセット＋３１はブロックＢＬＫ＃４１のページ１の４番目の４ＫＢ領域を示す。
【０１４３】
図１８は、フラッシュストレージデバイス３に適用される最大ブロック番号ゲットコマンドを示す。
【０１４４】
最大ブロック番号ゲットコマンドは、フラッシュストレージデバイス３から最大ブロック番号を取得するためのコマンドである。ホスト２は、フラッシュストレージデバイス３に最大ブロック番号ゲットコマンドに送信することにより、フラッシュストレージデバイス３に含まれるブロックの数を示す最大ブロック番号を認識することができる。最大ブロック番号ゲットコマンドは、最大ブロック番号ゲットコマンド用のコマンドＩＤを含み、パラメータは含まない。
【０１４５】
図１９は、最大ブロック番号ゲットコマンドに対するレスポンスを示す。
【０１４６】
最大ブロック番号ゲットコマンドをホスト２から受信した時、フラッシュストレージデバイス３は、図１９に示すレスポンスをホスト２に返す。このレスポンスは、最大ブロック番号（つまり、フラッシュストレージデバイス３に含まれる利用可能なブロックの総数）を示すパラメータを含む。
【０１４７】
図２０は、フラッシュストレージデバイス３に適用されるブロックサイズゲットコマンドを示す。
【０１４８】
ブロックサイズゲットコマンドは、フラッシュストレージデバイス３からブロックサイズを取得するためのコマンドである。ホスト２は、フラッシュストレージデバイス３にブロックサイズゲットコマンドに送信することにより、フラッシュストレージデバイス３に含まれるＮＡＮＤ型フラッシュメモリ５のブロックサイズを認識することができる。
【０１４９】
なお、別の実施形態では、ブロックサイズゲットコマンドは、ブロック番号を指定するパラメータを含んでいてもよい。あるブロック番号を指定するブロックサイズゲットコマンドをホスト２から受信した場合、フラッシュストレージデバイス３は、このブロック番号を有するブロックのブロックサイズをホスト２に返す。これにより、たとえＮＡＮＤ型フラッシュメモリ５に含まれるブロックそれぞれのブロックサイズが不均一である場合であっても、ホスト２は、個々のブロックそれぞれのブロックサイズを認識することができる。
【０１５０】
図２１は、ブロックサイズゲットコマンドに対するレスポンスを示す。
【０１５１】
ブロックサイズゲットコマンドをホスト２から受信した時、フラッシュストレージデバイス３は、ブロックサイズ（ＮＡＮＤ型フラッシュメモリ５に含まれるブロックそれぞれの共通のブロックサイズ）をホスト２に返す。この場合、もしブロック番号がブロックサイズゲットコマンドによって指定されていたならば、フラッシュストレージデバイス３は、上述したように、このブロック番号を有するブロックのブロックサイズをホスト２に返す。
【０１５２】
図２２は、フラッシュストレージデバイス３に適用されるブロックアロケートコマンドを示す。
【０１５３】
ブロックアロケートコマンドは、フラッシュストレージデバイス３にブロック（フリーブロック）の割り当てを要求するコマンド（ブロック割り当て要求）である。ホスト２は、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによって、フリーブロックを割り当てるようにフラッシュストレージデバイス３に要求し、これによってブロック番号（割り当てられたフリーブロックのブロック番号）を取得することができる。
【０１５４】
フラッシュストレージデバイス３がフリーブロック群をフリーブロックリストによって管理し、ホスト２はフリーブロック群を管理しないケースにおいては、ホスト２は、フリーブロックを割り当てるようにフラッシュストレージデバイス３に要求し、これによってブロック番号を取得する。一方、ホスト２がフリーブロック群を管理するケースにおいては、ホスト２は、フリーブロック群の一つを自身で選択することができるので、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信する必要は無い。
【０１５５】
図２３は、ブロックアロケートコマンドに対するレスポンスを示す。
【０１５６】
ブロックアロケートコマンドをホスト２から受信した時、フラッシュストレージデバイス３は、フリーブロックリストから、ホスト２に割り当てるべきフリーブロックを選択し、選択したフリーブロックのブロック番号を含むレスポンスをホスト２に返す。
【０１５７】
図２４は、ホスト２とフラッシュストレージデバイス３とによって実行されるブロック情報取得処理を示す。
【０１５８】
ホスト２がフラッシュストレージデバイス３の使用を開始する時、ホスト２は、まず、最大ブロック番号ゲットコマンドをフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３のコントローラは、最大ブロック番号をホスト２に返す。最大ブロック番号は、利用可能なブロックの総数を示す。なお、上述のスーパーブロックが使用されるケースにおいては、最大ブロック番号は、利用可能なスーパーブロックの総数を示してもよい。
【０１５９】
次いで、ホスト２は、ブロックサイズゲットコマンドをフラッシュストレージデバイス３に送信して、ブロックサイズを取得する。この場合、ホスト２は、ブロック番号１を指定するブロックサイズゲットコマンド、ブロック番号２を指定するブロックサイズゲットコマンド、ブロック番号３を指定するブロックサイズゲットコマンド、…をフラッシュストレージデバイス３にそれぞれ送信して、全てのブロックそれぞれのブロックサイズを個別に取得してもよい。
【０１６０】
このブロック情報取得処理により、ホスト２は、利用可能ブロック数、個々のブロックのブロックサイズを認識することができる。
【０１６１】
図２５は、ホスト２とフラッシュストレージデバイス３とによって実行される書き込み処理のシーケンスを示す。
【０１６２】
ホスト２は、まず、書き込みのために使用すべきブロック（フリーブロック）を自身で選択するか、またはブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによってフリーブロックを割り当てるようにフラッシュストレージデバイス３に要求する。そして、ホスト２は、自身で選択したブロックのブロック番号ＢＬＫ＃（またはフラッシュストレージデバイス３によって割り当てられたフリーブロックのブロック番号ＢＬＫ＃）と、論理アドレス（ＬＢＡ）と、長さとを含むライトコマンドをフラッシュストレージデバイス３に送信する（ステップＳ２０）。
【０１６３】
フラッシュストレージデバイス３のコントローラ４がこのライトコマンドを受信した時、コントローラ４は、ホスト２からのライトデータを書き込むべき、このブロック番号ＢＬＫ＃を有するブロック（書き込み先ブロックＢＬＫ＃）内の書き込み先位置を決定し、この書き込み先ブロックＢＬＫ＃の書き込み先位置にライトデータを書き込む（ステップＳ１１）。ステップＳ１１では、コントローラ４は、論理アドレス（ここではＬＢＡ）とライトデータの双方を書き込み先ブロックに書き込んでもよい。
【０１６４】
コントローラ４は、書き込み先ブロックＢＬＫ＃に対応するブロック管理テーブル３２を更新して、書き込まれたデータに対応するビットマップフラグ（つまり、このデータが書き込まれたオフセット（ブロック内オフセット）に対応するビットマップフラグ）を０から１に変更する（ステップＳ１２）。
【０１６５】
例えば、図２６に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ＃１のオフセット＋４〜＋７に対応する物理記憶位置に書き込まれた場合を想定する。この場合、図２７に示されているように、ブロックＢＬＫ＃１用のブロック管理テーブルにおいては、オフセット＋４〜＋７に対応するビットマップフラグそれぞれが０から１に変更される。
【０１６６】
そして、図２５に示すように、コントローラ４は、このライトコマンドに対するレスポンスをホスト２に返す（ステップＳ１３）。このレスポンスは、このデータが書き込まれたオフセット（ブロック内オフセット）を少なくとも含む。
【０１６７】
ホスト２がこのレスポンスを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴ４１１を更新して、書き込まれたライトデータに対応する論理アドレスそれぞれに物理アドレスをマッピングする。図２８に示されているように、ＬＵＴ４１１は、複数の論理アドレス（例えばＬＢＡ）それぞれに対応する複数のエントリを含む。ある論理アドレス（例えばあるＬＢＡ）に対応するエントリには、このＬＢＡに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示す物理アドレスＰＢＡ、つまりブロック番号、オフセット（ブロック内オフセット）が格納される。図２６に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ＃１のオフセット＋４〜＋７に対応する物理記憶位置に書き込まれたならば、図２８に示されているように、ＬＵＴ４１１が更新されて、ＬＢＡｘに対応するエントリにＢＬＫ＃１、オフセット＋４が格納され、ＬＢＡｘ＋１に対応するエントリにＢＬＫ＃１、オフセット＋５が格納され、ＬＢＡｘ＋２に対応するエントリにＢＬＫ＃１、オフセット＋６が格納され、ＬＢＡｘ＋３に対応するエントリにＢＬＫ＃１、オフセット＋７が格納される。
【０１６８】
図２５に示すように、この後、ホスト２は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのＴｒｉｍコマンドをフラッシュストレージデバイス３に送信する。図２６に示されているように、以前のデータがブロックＢＬＫ＃０のオフセット＋０、オフセット＋１、オフセット＋２、オフセット＋３に対応する位置に格納されている場合には、図２９に示すように、ブロック番号（＝ＢＬＫ＃０）、オフセット（＝＋０）、長さ（＝４）を指定するＴｒｉｍコマンドがホスト２からフラッシュストレージデバイス３に送信される。フラッシュストレージデバイス３のコントローラ４は、このＴｒｉｍコマンドに応じて、ブロック管理テーブル３２を更新する（図２５、ステップＳ１４）。ステップＳ１５においては、図２９に示すように、ブロックＢＬＫ＃０用のブロック管理テーブルにおいて、オフセット＋０〜＋３に対応するビットマップフラグそれぞれが１から０に変更される。
【０１６９】
図３０は、フラッシュストレージデバイス３に適用されるリードコマンドを示す。
【０１７０】
リードコマンドは、フラッシュストレージデバイス３にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドＩＤ、物理アドレスＰＢＡ、長さ、転送先ポインタを含む。
【０１７１】
コマンドＩＤはこのコマンドがリードコマンドであることを示すＩＤ（コマンドコード）であり、リードコマンドにはリードコマンド用のコマンドＩＤが含まれる。
【０１７２】
物理アドレスＰＢＡは、データが読み出されるべき最初の物理記憶位置を示す。物理アドレスＰＢＡは、ブロック番号、オフセット（ブロック内オフセット）によって指定される。
【０１７３】
長さは、リードすべきデータの長さを示す。このデータ長は、Ｇｒａｉｎの数によって指定可能である。
【０１７４】
転送先ポインタは、読み出されたデータが転送されるべきホスト２内のメモリ上の位置を示す。
【０１７５】
一つのリードコマンドは、物理アドレスＰＢＡ（ブロック番号、オフセット）と長さの組を複数指定することができる。
【０１７６】
図３１は、リード動作を示す。
【０１７７】
ここでは、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋５）、長さ（＝３）を指定するリードコマンドがホスト２から受信された場合が想定されている。フラッシュストレージデバイス３のコントローラ４は、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋５）、長さ（＝３）に基づいて、ＢＬＫ＃２からデータｄ１〜ｄ３をリードする。この場合、コントローラ４は、ＢＬＫ＃２のページ１から１ページサイズ分のデータをリードし、このリードデータからデータｄ１〜データｄ３を抽出する。次いで、コントローラ４は、データｄ１〜データｄ３を、転送先ポインタによって指定されるホストメモリ上に転送する。
【０１７８】
図３２は、ホスト２からのリードコマンドに応じて、異なる物理記憶位置にそれぞれ格納されているデータ部をリードする動作を示す。
【０１７９】
ここでは、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１０）、長さ（＝２）、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１６）、長さ（＝４）を指定するリードコマンドがホスト２から受信された場合が想定されている。フラッシュストレージデバイス３のコントローラ４は、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１０）、長さ（＝２）に基づいて、ＢＬＫ＃２のページ２から１ページサイズ分のデータをリードし、このリードデータからデータｄ１〜データｄ２を抽出する。次いで、コントローラ４は、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１６）、長さ（＝４）に基づいて、ＢＬＫ＃２のページ４から１ページサイズ分のデータ（データｄ３〜データｄ６）をリードする。そして、コントローラ４は、データｄ１〜データｄ２とデータｄ３〜データｄ６とを結合することによって得られる長さ（＝６）のリードデータを、リードコマンド内の転送先ポインタによって指定されるホストメモリ上に転送する。
【０１８０】
これにより、たとえブロック内に不良ページが存在する場合であっても、リードエラーを引き起こすことなく、別個の物理記憶位置からデータ部をリードすることができる。また、たとえデータが２つのブロックに跨がって書き込まれている場合であっても、このデータを一つのリードコマンドの発行によってリードすることができる。
【０１８１】
図３３は、ホスト２とフラッシュストレージデバイス３とによって実行されるリード処理のシーケンスを示す。
【０１８２】
ホスト２は、ホスト２によって管理されているＬＵＴ４１１を参照して、ユーザアプリケーションからのリード要求に含まれる論理アドレスをブロック番号、オフセットに変換する。そして、ホスト２は、このブロック番号、オフセット、長さを指定するリードコマンドをフラッシュストレージデバイス３に送信する。
【０１８３】
フラッシュストレージデバイス３のコントローラ４がリードコマンドをホスト２から受信した時、コントローラ４は、このリードコマンドによって指定されたブロック番号に対応するブロックをリード対象のブロックとして決定するとともに、このリードコマンドによって指定されたオフセットに基づいてリード対象のページを決定する（ステップＳ３１）。ステップＳ３１では、コントローラ４は、まず、リードコマンドによって指定されたオフセットを、ページサイズを表す粒度の数（ここでは、４）で除算してもよい。そして、コントローラ４は、この除算によって得られる商および余りを、リード対象のページ番号およびリード対象のページ内オフセット位置としてそれぞれ決定してもよい。
【０１８４】
コントローラ４は、ブロック番号、オフセット、長さによって規定されるデータをＮＡＮＤ型フラッシュメモリ５からリードし（ステップＳ３２）、このリードデータをホスト２に送信する。
【０１８５】
図３４は、フラッシュストレージデバイス３に適用されるＧＣ制御コマンドを示す。
【０１８６】
ＧＣ制御コマンドは、ＧＣソースブロック番号およびＧＣデスティネーションブロック番号をフラッシュストレージデバイス３に通知するために使用される。ホスト２は、各ブロックの有効データ量／無効データ量を管理しており、有効データ量がより少ない幾つかのブロックをＧＣソースブロックとして選択することができる。また、ホスト２は、フリーブロックリストを管理しており、幾つかのフリーブロックをＧＣデスティネーションブロックとして選択することができる。このＧＣ制御コマンドは、コマンドＩＤ、ＧＣソースブロック番号、ＧＣデスティネーションブロック番号、等を含んでもよい。
【０１８７】
コマンドＩＤはこのコマンドがＧＣ制御コマンドであることを示すＩＤ（コマンドコード）であり、ＧＣ制御コマンドにはＧＣ制御コマンド用のコマンドＩＤが含まれる。
【０１８８】
ＧＣソースブロック番号は、ＧＣソースブロックを示すブロック番号である。ホスト２は、どのブロックをＧＣソースブロックとすべきかを指定することができる。ホスト２は、複数のＧＣソースブロック番号を一つのＧＣ制御コマンドに設定してもよい。
【０１８９】
ＧＣデスティネーションブロック番号は、ＧＣデスティネーションブロックを示すブロック番号である。ホスト２は、どのブロックをＧＣデスティネーションブロックとすべきかを指定することができる。ホスト２は、複数のＧＣデスティネーションブロック番号を一つのＧＣ制御コマンドに設定してもよい。
【０１９０】
図３５は、ＧＣ用コールバックコマンドを示す。
【０１９１】
ＧＣ用コールバックコマンドは、ＧＣによってコピーされた有効データの論理アドレスとこの有効データのコピー先位置を示すブロック番号およびオフセットとをホスト２に通知するために使用される。
【０１９２】
ＧＣ用コールバックコマンドは、コマンドＩＤ、論理アドレス、長さ、デスティネーション物理アドレスを含んでよい。
【０１９３】
コマンドＩＤはこのコマンドがＧＣ用コールバックコマンドであることを示すＩＤ（コマンドコード）であり、ＧＣ用コールバックコマンドにはＧＣ用コールバックコマンド用のコマンドＩＤが含まれる。
【０１９４】
論理アドレスは、ＧＣによってＧＣソースブロックからＧＣデスティネーションブロックにコピーされた有効データの論理アドレスを示す。
【０１９５】
長さは、このコピーされたデータの長さを示す。このデータ長は、粒度（Ｇｒａｉｎ）の数によって指定されてもよい。
【０１９６】
デスティネーション物理アドレスは、有効データがコピーされたＧＣデスティネーションブロック内の位置を示す。デスティネーション物理アドレスは、ブロック番号、オフセット（ブロック内オフセット）によって指定される。
【０１９７】
図３６は、ガベージコレクション（ＧＣ）動作の手順を示す。
【０１９８】
例えば、ホスト２は、ホスト２によって管理されているフリーブロックリストに含まれている残りフリーブロックの数が閾値以下に低下した場合、ＧＣソースブロックおよびＧＣデスティネーションブロックを選択し、選択されたＧＣソースブロックおよび選択されたＧＣデスティネーションブロックを指定するＧＣ制御コマンドをフラッシュストレージデバイス３に送信する（ステップＳ４１）。あるいは、ライト処理部４１２がフリーブロック群を管理する構成においては、残りフリーブロックの数が閾値以下に低下した際にライト処理部４１２がホスト２にその旨通知を行ない、通知を受信したホスト２がブロック選択およびＧＣ制御コマンドの送信を行なってもよい。
【０１９９】
このＧＣ制御コマンドを受信すると、フラッシュストレージデバイス３のコントローラ４は、ＧＣソースブロック内の有効データを書き込むべきＧＣデスティネーションブロック内の位置（コピー先位置）を決定する動作と、ＧＣソースブロック内の有効データをＧＣデスティネーションブロック内のコピー先位置にコピーする動作とを含むデータコピー動作を実行する（ステップＳ５１）。ステップＳ５１では、コントローラ４は、ＧＣソースブロック（コピー元ブロック）内の有効データのみならず、この有効データとこの有効データに対応する論理アドレスの双方を、ＧＣソースブロック（コピー元ブロック）からＧＣデスティネーションブロック（コピー先ブロック）にコピーする。これにより、ＧＣデスティネーションブロック（コピー先ブロック）内にデータと論理アドレスとのペアを保持することができる。
【０２００】
また、ステップＳ５１では、ＧＣソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。複数のＧＣソースブロックがＧＣ制御コマンドによって指定された場合には、全てのＧＣソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。
【０２０１】
そして、コントローラ４は、コピーされた有効データ毎に、その有効データの論理アドレス（ＬＢＡ）と、その有効データのコピー先位置を示すデスティネーション物理アドレス等を、ＧＣ用コールバックコマンドを使用してホスト２に通知する（ステップＳ５２）。ある有効データに対応するデスティネーション物理アドレスは、この有効データがコピーされたコピー先ブロック（ＧＣデスティネーションブロック）のブロック番号と、この有効データがコピーされたコピー先ブロック内の物理記憶位置を示すブロック内物理アドレス（ブロック内オフセット）とによって表される。
【０２０２】
ホスト２がこのＧＣ用コールバックコマンドを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴ４１１を更新して、コピーされた各有効データに対応する論理アドレスにデスティネーション物理アドレス（ブロック番号、ブロック内オフセット）をマッピングする（ステップＳ４２）。
【０２０３】
図３７は、ＧＣのために実行されるデータコピー動作の例を示す。
【０２０４】
図３７では、ＧＣソースブロック（ここではブロックＢＬＫ＃５０）のオフセット＋４に対応する位置に格納されている有効データ（ＬＢＡ＝１０）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃１００）のオフセット＋０に対応する位置にコピーされ、ＧＣソースブロック（ここではブロックＢＬＫ＃５０）のオフセット＋１０に対応する位置に格納されている有効データ（ＬＢＡ＝２０）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃１００）のオフセット＋１に対応する位置にコピーされた場合が想定されている。この場合、コントローラ４は、｛ＬＢＡ１０、ＢＬＫ＃１００、オフセット（＝＋０）、ＬＢＡ２０、ＢＬＫ＃１００、オフセット（＝＋１）｝をホストに通知する（ＧＣ用コールバック処理）。
【０２０５】
図３８は、図３７のデータコピー動作の結果に基づいて更新されるホスト２のＬＵＴ４１１の内容を示す。
【０２０６】
このＬＵＴ４１１においては、ＬＢＡ１０に対応するブロック番号およびオフセットは、ＢＬＫ＃５０、オフセット（＝＋４）から、ＢＬＫ＃１００、オフセット（＝＋０）に更新される。同様に、ＬＢＡ２０に対応するブロック番号およびオフセットは、ＢＬＫ＃５０、オフセット（＝＋１０）から、ＢＬＫ＃１００、オフセット（＝＋１）に更新される。
【０２０７】
ＬＵＴ４１１が更新された後、ホスト２は、ＢＬＫ＃５０およびオフセット（＝＋４）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ＃５０のオフセット（＝＋４）に対応する位置に格納されているデータを無効化してもよい。さらに、ホスト２は、ＢＬＫ＃５０およびオフセット（＝＋１０）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ＃５０のオフセット（＝＋１０）に対応する位置に格納されているデータを無効化してもよい。
あるいは、ホスト２からＴｒｉｍコマンドを送信せず、ＧＣ処理の一環としてコントローラ４がブロック管理テーブル３２を更新してこれらのデータを無効化してもよい。
【０２０８】
以上説明したように、本実施形態によれば、第１の論理アドレスと第１のブロック番号とを指定するライト要求をホスト２から受信した場合、フラッシュストレージデバイス３のコントローラ４は、ホスト２からのデータを書き込むべき、第１のブロック番号を有するブロック（書き込み先ブロック）内の位置（書き込み先位置）を決定し、ホスト２からのデータを書き込み先ブロックの書き込み先位置に書き込み、第１の位置を示す第１のブロック内物理アドレス、または第１の論理アドレスと第１のブロック番号と第１のブロック内物理アドレスとの組のいずれかを、ホスト２に通知する。
【０２０９】
したがって、ホスト２がブロック番号をハンドリングし、フラッシュストレージデバイス３がページ書き込み順序制約／バッドページ等を考慮して、ホスト２によって指定されるブロック番号を有するブロック内の書き込み先位置（ブロック内オフセット）を決定するという構成を実現できる。ホスト２がブロック番号をハンドリングすることにより、上位階層（ホスト２）のアプリケーションレベルアドレス変換テーブルと従来型ＳＳＤのＬＵＴレベルアドレス変換テーブルとのマージを実現できる。また、フラッシュストレージデバイス３は、ＮＡＮＤ型フラッシュメモリ５の特徴／制約を考慮してＮＡＮＤ型フラッシュメモリ５を制御することができる。さらに、ホスト２はブロック境界を認識することができるので、ブロック境界／ブロックサイズを考慮してユーザデータを各ブロックに書き込むことができる。これにより、ホスト２が同一ブロック内のデータをデータ更新等によって一斉に無効化する等の制御を行うことが可能となるので、ＧＣが実行される頻度を下げることが可能となる。この結果、ライトアンプリフィケーションが低下され、フラッシュストレージデバイス３の性能の向上、フラッシュストレージデバイス３の寿命の最大化を実現できる。
【０２１０】
したがって、ホスト２とフラッシュストレージデバイス３との間の適切な役割分担を実現でき、これによってホスト２とフラッシュストレージデバイス３とを含むシステム全体のＩ／Ｏ性能の向上を図ることができる。
【０２１１】
また、ガベージコレクションのためのコピー元ブロック番号およびコピー先ブロック番号を指定する制御コマンドをホスト２から受信した場合、フラッシュストレージデバイス３のコントローラ４は、複数のブロックから、コピー元ブロック番号を有する第２のブロックとコピー先ブロック番号を有する第３のブロックとを選択し、第２のブロックに格納されている有効データを書き込むべき第３のブロック内のコピー先位置を決定し、有効データを第３のブロックのコピー先位置にコピーする。そして、コントローラは、有効データの論理アドレスと、コピー先ブロック番号と、第３のブロック内のコピー先位置を示す第２のブロック内物理アドレスとを、ホスト２に通知する。これにより、ＧＣにおいても、ホスト２がブロック番号（コピー元ブロック番号、コピー先ブロック番号）のみをハンドリングし、フラッシュストレージデバイス３がコピー先ブロック内のコピー先位置を決定する、という構成を実現できる。
【０２１２】
なお、フラッシュストレージデバイス３は、ストレージアレイ内に設けられる複数のフラッシュストレージデバイス３の一つとして利用されてもよい。ストレージアレイは、サーバ計算機のような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のフラッシュストレージデバイス３を制御するコントローラを含む。フラッシュストレージデバイス３がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス３のホスト２として機能してもよい。
【０２１３】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２１４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２１５】
２…ホスト、３…フラッシュストレージデバイス、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ライト動作制御部、２２…リード動作制御部、２３…ＧＣ動作制御部。
【図１】
2019079463.tif 000003
【図２】
2019079463.tif 000004
【図３】
2019079463.tif 000005
【図４】
2019079463.tif 000006
【図５】
2019079463.tif 000007
【図６】
2019079463.tif 000008
【図７】
2019079463.tif 000009
【図８】
2019079463.tif 000010
【図９】
2019079463.tif 000011
【図１０】
2019079463.tif 000012
【図１１】
2019079463.tif 000013
【図１２】
2019079463.tif 000014
【図１３】
2019079463.tif 000015
【図１４】
2019079463.tif 000016
【図１５】
2019079463.tif 000017
【図１６】
2019079463.tif 000018
【図１７】
2019079463.tif 000019
【図１８】
2019079463.tif 000020
【図１９】
2019079463.tif 000021
【図２０】
2019079463.tif 000022
【図２１】
2019079463.tif 000023
【図２２】
2019079463.tif 000024
【図２３】
2019079463.tif 000025
【図２４】
2019079463.tif 000026
【図２５】
2019079463.tif 000027
【図２６】
2019079463.tif 000028
【図２７】
2019079463.tif 000029
【図２８】
2019079463.tif 000030
【図２９】
2019079463.tif 000031
【図３０】
2019079463.tif 000032
【図３１】
2019079463.tif 000033
【図３２】
2019079463.tif 000034
【図３３】
2019079463.tif 000035
【図３４】
2019079463.tif 000036
【図３５】
2019079463.tif 000037
【図３６】
2019079463.tif 000038
【図３７】
2019079463.tif 000039
【図３８】
2019079463.tif 000040