(57)【要約】      （修正有）【課題】ライトバッファによって消費されるメモリリソース量の削減を図ることができるメモリシステムを提供する。【解決手段】メモリシステム３は、第１のライトデータが書き込まれるべき第１の書き込み先ブロックを指定する第１のブロック識別子を含む第１のライト要求をホスト２から受信する。メモリシステム３は、各ライト要求に対応するライトデータを一時的に保持するライトバッファ３１から第１のライトデータを取得し、第１のライトデータを第１の書き込み先ブロック内の書き込み先ページに書き込む。メモリシステム３は、書き込み先ページへの第１のライトデータの書き込みによって第１の書き込み先ブロックから読み出し可能となる、書き込み先ページに先行する前記第１の書き込み先ブロック内のページのデータが格納されている、ライトバッファ３１内の領域を、解放する。【選択図】図２
2019133391.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 >
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、同時に利用可能な書き込み先ブロックの数が増えると、ライトバッファに保持することが必要なデータ量が増加し、これによりライトバッファによって消費されるメモリリソース量が増える。通常、ライトバッファとして利用可能なメモリリソース量は有限であるので、ライトバッファによって消費されるメモリリソース量を削減できるようにするための技術の実現が要求される。
【０００９】
本発明が解決しようとする課題は、ライトバッファによって消費されるメモリリソース量の削減を図ることができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【００１０】
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記複数のブロックから割り当てられた複数の書き込み先ブロックを管理し、書き込み先ブロック毎に先頭のページから最後のページの順序でデータを書き込むように構成されたコントローラとを具備する。一つの書き込み先ブロックの１つのページに書き込まれたデータは、前記一つの書き込み先ブロックの後続の１以上のページにデータが書き込まれた後に読み出し可能となる。前記ホストから受信されるライト要求の各々は、ライトデータが書き込まれるべき書き込み先ブロックを指定するブロック識別子を含む。前記コントローラは、第１のライトデータが書き込まれるべき第１の書き込み先ブロックを指定する第１のブロック識別子を含む第１のライト要求を前記ホストから受信する。前記コントローラは、各ライト要求に対応するライトデータを一時的に保持するライトバッファから、前記第１のライトデータを取得する。前記コントローラは、前記第１のライトデータを前記第１の書き込み先ブロック内の書き込み先ページに書き込む。前記コントローラは、前記第１のライトデータが書き込まれた前記書き込み先ページのページアドレスを前記ホストに通知する。前記コントローラは、次にデータが書き込まれるべき前記第１の書き込み先ブロック内のページアドレスを１ページ分だけ増やす。前記コントローラは、前記書き込み先ページへの前記第１のライトデータの書き込みによって前記第１の書き込み先ブロックから読み出し可能となる、前記書き込み先ページに先行する前記第１の書き込み先ブロック内のページのデータが格納されている、前記ライトバッファ内の領域を、解放する。
【図面の簡単な説明】
【００１１】
【図１】ホストと実施形態に係るメモリシステム（フラッシュストレージデバイス）との関係を示すブロック図。
【図２】同実施形態のメモリシステムの構成例を示すブロック図。
【図３】同実施形態のメモリシステムにおいて使用される複数のチャンネルと複数のＮＡＮＤ型フラッシュメモリチップとの関係を示すブロック図。
【図４】同実施形態のメモリシステムにおいて使用される、あるスーパーブロックの構成例を示す図。
【図５】同実施形態のメモリシステムによって管理される、アクティブブロックプールとフリーブロックプールと複数の書き込み先ブロックとの関係を示すブロック図。
【図６】ホストが書き込み先ブロックを指定し且つ同実施形態のメモリシステムが書き込み先ページを決定するデータ書き込み動作と、ホストがブロックアドレスとページアドレスとを指定するデータ読み出し動作とを説明するための図。
【図７】同実施形態のメモリシステムに適用されるブロックアロケートコマンド（ブロック割り当て要求）を説明するための図。
【図８】ブロックアロケートコマンドに対するレスポンスを説明するための図。
【図９】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【図１０】ライトコマンドに対するレスポンスを説明するための図。
【図１１】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
【図１２】ホストと同実施形態のメモリシステムとによって実行される書き込み処理の手順を示すシーケンス図。
【図１３】ある書き込み先ブロックへのデータの書き込みによってこの書き込み先ブロックから読み出し可能となるデータが格納されている、ライトバッファ内の領域を解放する動作を説明するための図。
【図１４】ライトバッファ内の複数の領域のすべてがライトデータの保持のために使用されている状態を示す図。
【図１５】ある書き込み先ブロックへのダミーデータの書き込みによってこの書き込み先ブロックから読み出し可能となるデータが格納されている、ライトバッファ内の領域を解放する動作を説明するための図。
【図１６】複数段階のプログラム動作の例を説明するための図。
【図１７】図１６のフォギー・ファイン・プログラム動作を時系列順に示すタイミングチャート。
【図１８】ライトバッファに未使用の領域がなくなった場合に同実施形態のメモリシステムによって実行されるダミーデータ書き込み動作の手順を示すフローチャート。
【図１９】所定期間当たりに所定ページ数分のデータの書き込みが実行されていないことを検出した場合に同実施形態のメモリシステムによって実行されるダミーデータ書き込み動作の手順を示すフローチャート。
【図２０】同実施形態のメモリシステムによって管理される書き込み順序管理テーブルの構成例を示す図。
【発明を実施するための形態】
【００１２】
以下、図面を参照して、実施形態を説明する。  
【００１３】
まず、図１を参照して、本実施形態に係るメモリシステムとホストとの関係を説明する。
【００１４】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ＮＡＮＤフラッシュ技術ベースのフラッシュストレージデバイス３として実現されてい
る。
【００１５】
ホスト（ホストデバイス）２は、複数のフラッシュストレージデバイス３を制御するように構成されている。ホスト２は、複数のフラッシュストレージデバイス３によって構成されるフラッシュアレイをストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
【００１６】
なお、フラッシュストレージデバイス３は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ（例えば複数のフラッシュストレージデバイス３）を制御するコントローラを含む。フラッシュストレージデバイス３がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス３のホストとして機能してもよい。
【００１７】
以下では、サーバコンピュータのような情報処理装置がホスト２として機能する場合を例示して説明する。
【００１８】
ホスト（サーバ）２と複数のフラッシュストレージデバイス３は、インタフェース５０を介して相互接続される（内部相互接続）。この相互接続のためのインタフェース５０としては、これに限定されないが、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）等を使用し得る。
【００１９】
ホスト２として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ（以下、サーバと称する）が挙げられる。
【００２０】
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク５１を介して複数のエンドユーザ端末（クライアント）６１に接続されてもよい。ホスト２は、これらエンドユーザ端末６１に対して様々なサービスを提供することができる。
【００２１】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム稼働プラットフォームを各クライアント（各エンドユーザ端末６１）に提供するプラットホーム・アズ・ア・サービス（ＰａａＳ）、（２）仮想サーバのようなインフラストラクチャを各クライアント（各エンドユーザ端末６１）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００２２】
複数の仮想マシンが、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。ホスト（サーバ）２上で走るこれら仮想マシンの各々は、この仮想マシンに対応する幾つかのクライアント（エンドユーザ端末６１）に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【００２３】
ホスト（サーバ）２は、フラッシュアレイを構成する複数のフラッシュストレージデバイス３を管理するストレージ管理機能と、エンドユーザ端末６１それぞれに対してストレージアクセスを含む様々なサービスを提供するフロントエンド機能とを含む。
【００２４】
フラッシュストレージデバイス３は、ＮＡＮＤ型フラッシュメモリのような不揮発性メモリを含む。フラッシュストレージデバイス３は、不揮発性メモリ内の複数のブロックから割り当てられた複数の書き込み先ブロックを管理する。書き込み先ブロックとは、データが書き込まれるべきブロックを意味する。ホスト２からフラッシュストレージデバイス３に送出されるライト要求（ライトコマンド）には、データが書き込まれるべき一つの書き込み先ブロックを指定するブロック識別子が含まれる。フラッシュストレージデバイス３は、このライト要求に含まれるこのブロック識別子を有する書き込み先ブロックに、ホスト２からのデータ（ライトデータ）を書き込む。したがって、ホスト２は、データが書き込まれるべき特定の書き込み先ブロックを指定することができる。例えば、ホスト２は、あるエンドユーザ端末６１（クライアント）からのデータをこのエンドユーザ端末６１に対応する１以上の特定の書き込み先ブロックに書き込むようにストレージデバイス３に要求してもよく、他のエンドユーザ端末６１（クライアント）からのデータをこのエンドユーザ端末６１に対応する１以上の別の特定の書き込み先ブロックに書き込むようにストレージデバイス３に要求してもよい。
【００２５】
このホスト２から送出されるライト要求に含まれるブロック識別子は、特定の書き込み先ブロックを指定するブロックアドレス（ブロック番号）によって表されてもよい。あるいは、フラッシュストレージデバイス３が複数のＮＡＮＤ型フラッシュメモリチップを含むケースにおいては、このブロック識別子は、ブロックアドレス（ブロック番号）とチップ番号との組み合わせによって表されてもよい。
【００２６】
フラッシュストレージデバイス３によって管理される複数の書き込み先ブロックは、このフラッシュストレージデバイス３を共有する複数のエンドユーザ（クライアント）によってそれぞれ使用され得る。この場合、フラッシュストレージデバイス３においては、フラッシュストレージデバイス３を共有するエンドユーザの数と同数の、またはそれ以上の数の書き込み先ブロックがオープンされる。
【００２７】
しかし、同時に利用可能な書き込み先ブロックの数が増えると、ライトバッファに保持することが必要なデータ量が増加し、これによりライトバッファによって消費されるメモリリソース量が増える。
【００２８】
そこで、本実施形態では、フラッシュストレージデバイス３は、ライトバッファによって消費されるメモリリソース量を削減するための動作を実行する。本実施形態では、ホスト２のメモリ上の所定の記憶領域がライトバッファとして利用されてもよいし、あるいはフラッシュストレージデバイス３内のランダムアクセスメモリ上の所定の記憶領域がライトバッファとして利用されてもよい。
【００２９】
図２は、フラッシュストレージデバイス３の構成例を示す。
【００３０】
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００３１】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００３２】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は複数のページ（ここではページＰ０〜Ｐｎ−１）を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００３３】
コントローラ４は、Ｔｏｇｇｌｅ、オープンＮＡＮＤフラッシュインタフェース（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして動作する。このコントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現されてもよい。
【００３４】
ＮＡＮＤ型フラッシュメモリ５は、図３に示すように、複数のＮＡＮＤ型フラッシュメモリチップ（ＮＡＮＤ型フラッシュメモリダイ）を含んでいてもよい。個々のＮＡＮＤ型フラッシュメモリチップは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリチップは、並列動作可能な単位として機能する。図３においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ．１〜Ｃｈ．１６が接続されており、１６個のチャンネルＣｈ．１〜Ｃｈ．１６の各々に２つのＮＡＮＤ型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルＣｈ．１〜Ｃｈ．１６に接続された１６個のＮＡＮＤ型フラッシュメモリチップ＃１〜＃１６がバンク＃０として編成されてもよく、またチャンネルＣｈ．１〜Ｃｈ．１６に接続された残りの１６個のＮＡＮＤ型フラッシュメモリチップ＃１７〜＃３２がバンク＃１として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図３の構成例においては、１６チャンネルと、２つのバンクを使用したバンクインタリーブとによって、最大３２個のＮＡＮＤ型フラッシュメモリチップを並列動作させることができる。
【００３５】
消去動作は、一つのブロック（物理ブロック）の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含む並列単位（スーパーブロック）の単位で実行されてもよい。一つの並列単位、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２から一つずつ選択される計３２個の物理ブロックを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２に対応する６４個のプレーンから一つずつ選択される計６４個の物理ブロックを含んでいてもよい。
【００３６】
図４には、３２個の物理ブロック（ここでは、ＮＡＮＤ型フラッシュメモリチップ＃１内の物理ブロックＢＬＫ２、ＮＡＮＤ型フラッシュメモリチップ＃２内の物理ブロックＢＬＫ３、ＮＡＮＤ型フラッシュメモリチップ＃３内の物理ブロックＢＬＫ７、ＮＡＮＤ型フラッシュメモリチップ＃４内の物理ブロックＢＬＫ４、ＮＡＮＤ型フラッシュメモリチップ＃５内の物理ブロックＢＬＫ６、…ＮＡＮＤ型フラッシュメモリチップ＃３２内の物理ブロックＢＬＫ３）を含む一つのスーパーブロック（ＳＢ）が例示されている。
【００３７】
書き込み先ブロックは一つの物理ブロックであってもよいし、一つのスーパーブロックであってもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【００３８】
次に、図２のコントローラ４の構成について説明する。
【００３９】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００４０】
このホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってもよい。あるいは、フラッシュストレージデバイス３がＥｔｈｅｒｎｅｔ（登録商標）を介してホスト２に接続される構成においては、ホストインタフェース１１は、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）コントローラであってもよい。フラッシュストレージデバイス３がＥｔｈｅｒｎｅｔ（登録商標）を介してホスト２に接続される構成は、必要に応じて、フラッシュストレージデバイス３の数を容易に増やすことを可能にする。さらに、ホスト２の数を容易に増やすことも可能である。
【００４１】
ホストインタフェース１１は、ホスト２から様々な要求（コマンド）を受信する。これら要求（コマンド）には、ライト要求（ライトコマンド）、リード要求（リードコマンド）、他の様々な要求（コマンド）が含まれる。
【００４２】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答してＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭから制御プログラム（ファームウェア）をＤＲＡＭ６にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ４内の図示しないＳＲＡＭ上にロードされてもよい。このＣＰＵ１２は、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００４３】
ＣＰＵ１２は、ライト動作制御部２１およびリード動作制御部２２として機能することができる。
【００４４】
ライト動作制御部２１は、ＮＡＮＤ型フラッシュメモリ５の複数のブロックから割り当てられた複数の書き込み先ブロックを管理し、書き込み先ブロック毎に先頭のページから最後のページの順序でデータを書き込む。
【００４５】
多くのＮＡＮＤ型フラッシュメモリにおいては、一つの書き込み先ブロックの１つのページに書き込まれたデータは、その書き込みの直後は書き込み先ブロックから読み出すことはできず、この書き込み先ブロックの後続の１以上のページにデータが書き込まれた後に読み出し可能となる。
【００４６】
例えば、書き込み先ブロックの各ページへのデータ書き込みが第１段階と第２段階とを含む複数段階のプログラム動作によって実行されるケースにおいては、書き込み先ブロック内のあるページ（第１ページ）に第１段階のプログラム動作によって書き込まれたデータは、後続の１以上のページに第１段階のプログラム動作によってデータが書き込まれた後に読み出し可能となる。なぜなら、後続の１以上のページに第１段階のプログラム動作によってデータが書き込まれるまでは、第１ページに対する第２段階のプログラム動作を実行できないからである。このため、たとえ書き込み先ブロックの第１ページに第１段階のプログラム動作によってデータが書き込まれても、この書き込みの直後はこのデータは書き込み先ブロックから読み出すことはできず、後続の１以上のページにデータが第１段階のプログラム動作によって書き込まれた後に読み出し可能となる。
【００４７】
このような複数段階のプログラム動作の例として、フォギー・ファイン・プログラム動作が挙げられる。フォギー・ファイン・プログラム動作では、同じワード線に接続されたメモリセル群へのデータの書き込みは、各メモリセルの閾値分布を荒く設定するフォギー・プログラム動作と、各メモリセルの閾値分布を調整するファイン・プログラム動作とによって実行される。隣接するワード線間のプログラム・ディスターブを低減するために、あるワード線に接続されたメモリセル群へのファイン・プログラム動作は、隣接するワード線に接続されたメモリセル群へのフォギー・プログラム動作が実行された後に実行される。
【００４８】
このため、フォギー・ファイン・プログラム動作によってデータを書き込むケースにおいては、たとえ書き込み先ブロック内の最初のワード線（ＷＬ０）に接続されたメモリセル群へのフォギー・プログラム動作が実行されても、この書き込み先ブロック内の次のワード線（ＷＬ１）に接続されたメモリセル群へのフォギー・プログラム動作が終了されるまでは、最初のワード線（ＷＬ０）に接続されたメモリセル群へのファイン・プログラム動作を実行できない。このため、少なくとも、次のワード線（ＷＬ１）に接続されたメモリセル群へのフォギー・プログラム動作が終了するまでは、最初のワード線（ＷＬ０）に接続されたメモリセル群に書き込まれたページデータを読み出すことはできない。
【００４９】
ライト動作制御部２１は、ライトデータが書き込まれるべき書き込み先ブロックを指定するブロック識別子を含むライト要求をホスト２から受信する。ライト動作制御部２１がこのライト要求をホスト２から受信した時、ライト動作制御部２１は、このライト要求に対応するライトデータをライトバッファ（ＷＢ）から取得する。このライトバッファ（ＷＢ）は、各ライト要求に対応するライトデータを一時的に保持するバッファである。あるライト要求に対応するライトデータは、このライトデータがＮＡＮＤ型フラッシュメモリ５から読み出し可能になるまでライトバッファ（ＷＢ）に保持される。このライトバッファ（ＷＢ）は、ホスト２のメモリ上に設けられたライトバッファ（ＷＢ）４５によって実現されてもよいし、ＤＲＡＭ６上のライトバッファ（ＷＢ）３１によって実現されてもよい。
【００５０】
ライト動作制御部２１は、取得したライトデータを、受信したライト要求によって指定されるブロック識別子を有する書き込み先ブロック内のページ（書き込み先ページ）に書き込む。ライト要求はブロック識別子（ブロックアドレス）を含むが、ページアドレスは含まない。書き込み先ページは、ライト動作制御部２１によって自動的に決定される。
【００５１】
ライト動作制御部２１は、ライトデータが書き込まれたページのページアドレスをホスト２に通知する。
【００５２】
また、ライト動作制御部２１は、次にデータが書き込まれるべきこの書き込み先ブロック内のページアドレスを１ページ分だけ増やす。そして、ライト動作制御部２１は、書き込み先ページへのライトデータの書き込みによって書き込み先ブロックから読み出し可能となる、この書き込み先ページに先行するこの書き込み先ブロック内のページのデータが格納されている、ライトバッファ内の領域を、解放する。ここで、書き込み先ページに先行するページとは、書き込み先ブロックのページ書き込み順に関して、この書き込み先ページよりも以前にデータが書き込まれているページを意味する。例えば、書き込み先ブロックのｎ番目のページへのデータの書き込みによって、ｎ番目のページに先行するこの書き込み先ブロック内の例えば第１番目のページが読み出し可能となった場合には、この第１番目のページのデータが格納されている、ライトバッファ内の領域が、解放される。同様に、書き込み先ブロックのｎ＋１番目のページへのデータの書き込みによって、この書き込み先ブロック内の例えば第２番目のページが読み出し可能となった場合には、この第２番目のページのデータが格納されている、ライトバッファ内の領域が、解放される。
【００５３】
各ページへのデータ書き込みが第１段階と第２段階とを含む複数段階のプログラム動作によって実行されるケースにおいては、書き込み先ブロックの書き込み先ページへのデータ書き込みによって書き込み先ブロックから読み出し可能となるページは、書き込み先ページへの第１段階のプログラム動作の実行によって第２段階のプログラム動作が実行可能となるページである。例えば、書き込み先ブロックのｎ番目のページへの第１段階のプログラム動作（例えば、フォギー・プログラム動作）によって書き込み先ブロックの１番目のページへの第２段階のプログラム動作（例えば、ファイン・プログラム動作）が可能となる場合には、書き込み先ページへのデータ書き込みによって書き込み先ブロックから読み出し可能となるページは、この１番目のページである。
【００５４】
このように、書き込み先ブロック内のある書き込み先ページへのデータの書き込みによって読み出し可能となる、この書き込み先ページに先行するこの書き込み先ブロック内のページのデータが格納されている、ライトバッファ内の領域を解放する、という制御を行うことにより、書き込み先ブロック当たりに消費されるライトバッファの量を必要最小限に抑えることが可能となり、これによってライトバッファによって消費されるメモリリソース量の削減を図ることができる。
【００５５】
なお、ここでは、１ページ分のライトデータ（ユーザデータ）を書き込み先ブロックに書き込む場合を想定したが、２ページ分の新たなライトデータ（ユーザデータ）を書き込み先ブロックに書き込んだ場合には、この書き込み先ブロックに以前に書き込まれた２ページ分のデータ（ユーザデータ）が読み出し可能となる。したがって、この場合には、この読み出し可能となった２ページ分のデータ（ユーザデータ）が格納されている、ライトバッファ内の領域を解放することがとできる。
【００５６】
同様に、３ページ分の新たなライトデータ（ユーザデータ）を書き込み先ブロックに書き込んだ場合には、この書き込み先ブロックに以前に書き込まれた３ページ分のデータ（ユーザデータ）が読み出し可能となる。したがって、この場合には、この読み出し可能となった３ページ分のデータ（ユーザデータ）が格納されている、ライトバッファ内の領域を解放することがとできる。
【００５７】
さらに、ライト動作制御部２１は、ライトバッファ内の利用可能領域を増やすために、必要に応じて、書き込み先ブロックに１ページ分以上のダミーデータを書き込む動作も実行する。
【００５８】
例えば、ライトバッファに未使用の領域がなくなった場合に、ライト動作制御部２１は、ある書き込み先ブロック内の１以上のページにダミーデータを書き込んでもよい。これにより、この書き込み先ブロックに以前に書き込まれた１ページ分以上のデータ（ユーザデータ）が読み出し可能となり、この読み出し可能となった１ページ分以上のデータ（ユーザデータ）が格納されている、ライトバッファ内の領域を解放することができる。よって、このライトバッファ内の領域を次のライトデータ（ユーザデータ）の格納のために利用することが可能となる。なお、ダミーデータに対するリード要求がホスト２から発行されることはないので、このダミーデータはライトバッファに格納する必要は無い。したがって、たとえダミーデータを書き込み先ブロックに書き込んでも、このダミーデータによってライトバッファが消費されることはない。
【００５９】
また、ライト動作制御部２１は、複数の書き込み先ブロックのいずれか一つの書き込み先ブロックに対して所定期間当たりに所定ページ数分のデータ（ユーザデータ、またはダミーデータ）の書き込みが実行されていないことを検出した場合、この書き込み先ブロック内の１以上のページにダミーデータを書き込んでもよい。この場合、例えば、ライト動作制御部２１は、ある書き込み先ブロックにデータ（ユーザデータ、またはダミーデータ）が最後に書き込まれてからの経過時間が閾値以上である否かを判定してもよく、経過時間が閾値以上である場合に、この書き込み先ブロック内の１以上のページにダミーデータを書き込んでもよい。この結果、この書き込み先ブロックに以前に書き込まれた１ページ分以上のデータ（ユーザデータ）が読み出し可能となり、この読み出し可能となった１ページ分以上のデータ（ユーザデータ）が格納されている、ライトバッファ内の領域を解放することができる。同様に、他の各書き込み先ブロックについても、ライト動作制御部２１は、この書き込み先ブロックにデータ（ユーザデータ、またはダミーデータ）が最後に書き込まれてからの経過時間が閾値以上である否かを判定してもよく、経過時間が閾値以上である場合に、この書き込み先ブロック内の１以上のページにダミーデータを書き込んでもよい。
【００６０】
リード動作制御部２２は、リードすべきデータが格納されているＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す物理アドレス（ブロックアドレス、ページアドレス）を指定するリード要求（リードコマンド）をホスト２から受信する。そして、リード動作制御部２２は、これらブロックアドレスおよびページアドレスに基づいて、リード対象のブロック内のリード対象の物理記憶位置からデータをリードする。リード対象のブロックは、ブロックアドレスによって特定される。このブロック内のリード対象の物理記憶位置は、ページアドレスによって特定される。なお、リードコマンドは、ブロックアドレスおよびページアドレスに加え、ページ内オフセットを含んでいてもよい。
【００６１】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリ制御回路である。
【００６２】
ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、リードバッファ（ＲＢ）３０、ライトバッファ（ＷＢ）３１、ブロック管理テーブル３２、不良情報管理テーブル３３の格納のために使用されてもよい。なお、これらリードバッファ（ＲＢ）３０、ライトバッファ（ＷＢ）３１、ブロック管理テーブル３２、不良情報管理テーブル３３は、コントローラ４内の図示しないＳＲＡＭに格納されてもよい。ブロック管理テーブル３２は、ＮＡＮＤ型フラッシュメモリ５内の複数のブロックそれぞれに対応する複数の管理テーブルを含む。各管理テーブルは、この管理テーブルに対応するブロックに含まれている複数のデータにそれぞれ対応する複数の有効／無効管理情報を含む。各有効／無効管理情報は、この有効／無効管理情報に対応するデータが有効データまたは無効データのいずれであるかを示す。不良情報管理テーブル３３は、不良ブロックのリストを管理する。
【００６３】
上述したように、ホスト２は、様々なプログラムを実行するように構成された情報処理装置（例えば計算機システム）であってもよい。計算機システムによって実行されるプログラムには、アプリケーションソフトウェアレイヤ４１、オペレーティングシステム４２、ファイルシステム４３、デバイスドライバ４３、等が含まれる。
【００６４】
一般に知られているように、オペレーティングシステム４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびフラッシュストレージデバイス３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００６５】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。
【００６６】
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ４１上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【００６７】
デバイスドライバ４４は、ファイルシステム４３の制御の下、フラッシュストレージデバイス３を制御する。
【００６８】
ファイルシステム４３またはデバイスドライバ４４は、アドレス変換テーブルとして機能するルックアップテーブル（ＬＵＴ）４５を管理するためのフラッシュトランスレーションレイヤ（ＦＴＬ）２Ａを含んでいてもよい。図２においては、デバイスドライバ４４がフラッシュトランスレーションレイヤ（ＦＴＬ）２Ａを含むケースが例示されている。
【００６９】
ルックアップテーブル（ＬＵＴ）４５は、個々のデータを識別するためのタグそれぞれとフラッシュストレージデバイス３（つまり、ＮＡＮＤ型フラッシュメモリ５）内の個々の物理記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理する。タグは、論理ブロックアドレス（ＬＢＡ）のような論理アドレスによって表されてもよいし、キー・バリュー・ストアのキーによって表されてもよいし、ファィル名とファイルオフセットとの組によって表されてもよい。
【００７０】
ホスト２のメモリ上の所定の記憶領域は、ライトバッファ（ＷＢ）４５（ＵＷＢ：Ｕｎｉｆｉｅｄ  Ｗｒｉｔｅ  Ｂｕｆｆｅｒ）として利用されてもよい。ホスト２が複数の書き込み先ブロック内の任意の書き込み先ブロックにデータを書き込むことを希望するとき、ホスト２は、この書き込み先ブロックに書き込むべきデータ（ライトデータ）をライトバッファ（ＷＢ）４５に格納する。そして、ホスト２は、この書き込み先ブロックを指定するブロック識別子（ブロックアドレス）を含むライト要求をストレージデバイス３に送出する。なお、このライト要求は、さらに、このライトデータが格納されているライトバッファ（ＷＢ）４５内の領域（記憶領域）を示す記憶位置情報を含んでいてもよい。
【００７１】
フラッシュストレージデバイス３はこのライトデータをＮＡＮＤ型フラッシュメモリ５に書き込む際に、上述の記憶位置情報を含む転送要求をホスト２に送出することによって上述のライトデータをライトバッファ（ＷＢ）４６から取得することができる。
【００７２】
図５は、フラッシュストレージデバイス３によって管理される、アクティブブロックプールとフリーブロックプールと複数の書き込み先ブロックとの関係を示す。
【００７３】
ＮＡＮＤ型フラッシュメモリ５内の各ブロックの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。アクティブブロックである各ブロックは、アクティブブロックプール５１と称されるリストによって管理される。一方、フリーブロックである各ブロックは、フリーブロックプール５２と称されるリストによって管理される。
【００７４】
有効データとは、あるタグに関連付けられているデータ（このタグに関連付けられている最新のデータ）を意味する。無効データとは、どのタグにも関連付けられていないデータを意味する。
【００７５】
フラッシュストレージデバイス３のコントローラ４がホスト２からブロック割り当て要求を受信した時、コントローラ４は、フリーブロックプール５２内の複数のフリーブロックから１つのフリーブロックを選択し、選択したフリーブロックを、ホスト２から受信されたライトデータを書き込むことが可能な書き込み先ブロックとして割り当てる。ホスト２からブロック割り当て要求が受信される度に、コントローラ４は、フリーブロックプール５２内の複数のフリーブロックから１つのフリーブロックを選択する動作と、選択したフリーブロックを書き込み先ブロックとして割り当てる動作とを実行する。これにより、フラッシュストレージデバイス３においては、利用可能な書き込み先ブロックが同時に複数個存在する。図５においては、ブロックＢＬＫ１１、ＢＬＫ１２、ＢＬＫ１３、…が書き込み先ブロックとして割り当てられている場合が想定されている。
【００７６】
書き込み先ブロックを割り当てる処理においては、コントローラ４は、まず、フリーブロックプール５２内の複数のフリーブロックから選択された一つのブロック（フリーブロック）に対する消去動作を実行し、これによってこのブロックを、書き込み可能な消去状態にする。割り当てられた各書き込み先ブロックのブロック識別子（ブロックアドレス）は、コントローラ４からホスト２に通知される。ホスト２は、現在割り当てられている複数の書き込み先ブロックＢＬＫ１１、ＢＬＫ１２、ＢＬＫ１３、…の一つを選択し、選択した書き込み先ブロックを指定するブロック識別子（ブロックアドレス）を含むライト要求をフラッシュストレージデバイス３に送出することによって、書き込み先ブロックＢＬＫ１１、ＢＬＫ１２、ＢＬＫ１３、…内の任意の書き込み先ブロックにデータを書き込むことができる。
【００７７】
ある書き込み先ブロックの全体がホスト２からのライトデータ（ユーザデータ）で満たされると、コントローラ４は、この書き込み先ブロックをアクティブブロックプール５１に移動する。
【００７８】
アクティブブロックプール５１内のあるブロック内の全ての有効データが、データ更新、アンマップ、ガベージコレクション等によって無効化されると、コントローラ４は、このブロックをフリーブロックプール５２に移動する。
【００７９】
図６は、ホスト２が書き込み先ブロックを指定し且つフラッシュストレージデバイス３が書き込み先ページを決定するデータ書き込み動作と、ホスト２がブロックアドレスとページアドレスとを指定するデータ読み出し動作とを説明するための図である。
【００８０】
ホスト２は、ブロック割り当て要求およびライト要求をフラッシュストレージデバイス３に送出するように構成されたライト処理部４１２を含む。このライト処理部４１２は、図２で説明したＦＴＬ２Ａに含まれていてもよい。
【００８１】
フラッシュストレージデバイス３のコントローラ４は、ブロック割り当て部７０１、およびページ割り当て部７０２を含む。ブロック割り当て部７０１、およびページ割り当て部７０２は、図２で説明したライト動作制御部２１に含まれていてもよい。
【００８２】
データ書き込み動作は以下の手順で実行される。
【００８３】
（１）  ホスト２のライト処理部４１２がフラッシュストレージデバイス３にデータ（ライトデータ）を書き込むことが必要な時、ライト処理部４１２は、フリーブロックを割り当てるようにフラッシュストレージデバイス３に要求してもよい。フラッシュストレージデバイス３のコントローラ４は、ＮＡＮＤ型フラッシュメモリ５のフリーブロック群を管理するブロック割り当て部７０１を含む。ブロック割り当て部７０１がライト処理部４１２からこの要求（ブロック割り当て要求）を受信した時、ブロック割り当て部７０１は、フリーブロック群の一つのフリーブロックをホスト２に割り当て、割り当てられたブロックのブロックアドレス（ＢＬＫ＃）をホスト２に通知する。
【００８４】
（２）  ライト処理部４１２は、ライトデータを識別するタグ（例えばＬＢＡのような論理アドレス）と書き込み先ブロックを指定するブロックアドレス（ＢＬＫ＃）とを含むライト要求を、フラッシュストレージデバイス３に送信する。
【００８５】
（３）  フラッシュストレージデバイス３のコントローラ４は、データ書き込み用のページを割り当てるページ割り当て部７０２を含む。ページ割り当て部７０２がライト要求を受信した時、ページ割り当て部７０２は、ライト要求によって指定されたブロックアドレスを有するブロック（書き込み先ブロック）内の書き込み先ページを示すページアドレスを決定する。コントローラ４は、書き込み先ブロック内のこの決定された書き込み先ページに、ホスト２からのライトデータを書き込む。
【００８６】
（４）  コントローラ４は、この書き込み先ページを示すページアドレスを、ライト要求に対するレスポンスとしてホスト２に通知する。あるいは、コントローラ４は、ライト要求に含まれているタグと、ライト要求に含まれているブロックアドレスと、決定されたページアドレスとの組を、ライト要求に対するレスポンスとしてホスト２に通知してもよい。ホスト２においては、ライトデータが書き込まれた物理記憶位置を示す物理アドレス（ブロックアドレス、ページアドレス）が、このライトデータのタグにマッピングされるように、ＬＵＴ２Ｂが更新される。
【００８７】
データリード動作は以下の手順で実行される。
【００８８】
（１）’  ホスト２がフラッシュストレージデバイス３からデータをリードすることが必要な時、ホスト２は、ＬＵＴ２Ｂを参照することによって、リードすべきデータのタグに対応する物理アドレス（ブロックアドレス、ページアドレス）をＬＵＴ４１１から取得する。
【００８９】
（２）’  ホスト２は、取得されたブロックアドレスおよびページアドレスを指定するリード要求をフラッシュストレージデバイス３に送出する。フラッシュストレージデバイス３のコントローラ４がこのリード要求をホスト２から受信した時、コントローラ４は、ブロックアドレスおよびページアドレスに基づいて、データを、リード対象のブロック内のリード対象の物理記憶位置からリードする。
【００９０】
図７は、フラッシュストレージデバイス３に適用されるブロックアロケートコマンドを示す。
【００９１】
ブロックアロケートコマンドは、フラッシュストレージデバイス３に書き込み先ブロック（フリーブロック）の割り当てを要求するコマンド（ブロック割り当て要求）である。ホスト２は、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによって、書き込み先ブロックを割り当てるようにフラッシュストレージデバイス３に要求し、これによってブロックアドレス（割り当てられた書き込み先ブロックのブロックアドレス）を取得することができる。
【００９２】
図８は、ブロックアロケートコマンドに対するレスポンスを示す。
【００９３】
ブロックアロケートコマンドをホスト２から受信した時、フラッシュストレージデバイス３は、フリーブロックリストから、ホスト２に割り当てるべきフリーブロックを選択し、選択したフリーブロックを書き込み先ブロックとして割り当て、そしてこの書き込み先ブロックのブロックアドレスを含むレスポンスをホスト２に返す。
【００９４】
図９は、フラッシュストレージデバイス３に適用されるライトコマンドを示す。
【００９５】
ライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドＩＤ、ブロックアドレス、タグ、長さ、等を含んでもよい。
【００９６】
コマンドＩＤはこのコマンドがライトコマンドであることを示すＩＤ（コマンドコード）であり、ライトコマンドにはライトコマンド用のコマンドＩＤが含まれる。
【００９７】
ブロックアドレスは、データが書き込まれるべき書き込み先ブロックを指定する物理アドレスである。
【００９８】
タグは、書き込まれるべきライトデータを識別するための識別子である。このタグは、上述したように、ＬＢＡのような論理アドレスであってもよいし、キー・バリュー・ストアのキーであってもよい。タグがＬＢＡのような論理アドレスである場合には、このライトコマンドに含まれる論理アドレス（開始ＬＢＡ）は、ライトデータが書き込まれるべき、論理アドレス空間内の論理位置（最初の論理位置）を示す。
【００９９】
長さは、書き込まれるべきライトデータの長さを示す。
【０１００】
ホスト２からライトコマンドを受信した時、コントローラ４は、ライトコマンドによって指定されたブロックアドレスを有する書き込み先ブロック内の書き込み先位置（書き込み先ページ）を決定する。この書き込み先ページは、ページ書き込み順序の制約およびバッドページ等を考慮して決定される。そして、コントローラ４は、ホスト２からのデータを、この書き込み先ブロック内のこの書き込み先位置（書き込み先ページ）に書き込む。
【０１０１】
図１０は、図９のライトコマンドに対するレスポンスを示す。
【０１０２】
このレスポンスは、ページアドレス、長さを含む。ページアドレスは、データが書き込まれた、書き込み先ブロック内の物理記憶位置を示す物理アドレスである。この物理アドレスは、ブロック内オフセット（つまりページアドレスとページ内オフセットとの組）によって表されてもよい。長さは、書き込まれたデータの長さを示す。
【０１０３】
あるいは、このレスポンスは、ページアドレス（ブロック内オフセット）および長さだけでなく、タグ、ブロックアドレスをさらに含んでいてもよい。タグは、図９のライトコマンドに含まれていたタグである。ブロックアドレスは、図９のライトコマンドに含まれていたブロックアドレスである。
【０１０４】
図１１は、フラッシュストレージデバイス３に適用されるリードコマンドを示す。
【０１０５】
リードコマンドは、フラッシュストレージデバイス３にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドＩＤ、タグ、ブロックアドレス、ページアドレス、長さを含む。
【０１０６】
コマンドＩＤはこのコマンドがリードコマンドであることを示すＩＤ（コマンドコード）であり、リードコマンドにはリードコマンド用のコマンドＩＤが含まれる。
【０１０７】
ブロックアドレスは、リードすべきデータが格納されているブロックを指定する。ページアドレスは、リードすべきデータが格納されているページを指定する。このページアドレスは、リードすべきデータが格納されているブロック内の物理記憶位置を示すブロック内オフセット（つまりページアドレスとページ内オフセットとの組）によって表されてもよい。長さは、リードすべきデータの長さを示す。
【０１０８】
図１２は、ホスト２とフラッシュストレージデバイス３とによって実行される書き込み処理のシーケンスを示す。
【０１０９】
ホスト２は、まず、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによって書き込み先ブロックを割り当てるようにフラッシュストレージデバイス３に要求する。既に割り当てられている書き込み先ブロックにデータを書き込む場合には、ホスト２は、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信しなくてもよい。
【０１１０】
そして、ホスト２は、ライトデータを識別するタグと、ライトデータが書き込まれるべき書き込み先ブロックを指定するブロックアドレスと、ライトデータの長さとを含むライトコマンドを、フラッシュストレージデバイス３に送信する（ステップＳ２０）。
【０１１１】
フラッシュストレージデバイス３のコントローラ４がこのライトコマンドを受信した時、コントローラ４は、このライトコマンドによって指定されるブロックアドレスを有する書き込み先ブロック内の書き込み先ページを決定し、ライトデータをライトバッファ（ＷＢ）から取得し、この書き込み先ブロック内のこの決定された書き込み先ページにライトデータを書き込む（ステップＳ１１）。ライトバッファ（ＷＢ）がホスト２のメモリ上に設けられたライトバッファ（ＷＢ）４５によって実現されている場合には、ライトコマンドは、ライトデータが格納されている、ライトバッファ内の位置（領域）を示す記憶位置情報を含んでいてもよい。コントローラ４は、この記憶位置情報を含む転送要求をホスト２に送出することによって、ホスト２のメモリ上に設けられたライトバッファ（ＷＢ）４５からライトデータを取得することができる。
【０１１２】
コントローラ４は、このライトコマンドに対するレスポンスをホスト２に返す（ステップＳ１２）。このレスポンスは、このデータが書き込まれたページアドレス（例えば、ページアドレスとページ内オフセットとの組）を少なくとも含む。
【０１１３】
ホスト２がこのレスポンスを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴ２Ｂを更新することによって、ライトデータが書き込まれた物理記憶位置を示す物理アドレス（ブロックアドレス、ページアドレス、ページ内オフセットの組）をライトデータのタグにマッピングする（ステップＳ２１）。
【０１１４】
さらに、コントローラ４は、書き込み先ブロック内の書き込み先ページへのライトデータの書き込みによってこの書き込み先ブロックから読み出し可能となる、この書き込み先ページに先行するこの書き込み先ブロック内のページを特定し、この特定されたページのデータが格納されている、ライトバッファ（ＷＢ）内の領域を解放する（ステップＳ１３）。書き込み先ブロックの各ページへのデータ書き込みが第１段階と第２段階とを含む複数段階のプログラム動作によって実行されるケースにおいては、この読み出し可能なページは、この書き込み先ページへの第１段階のプログラム動作によって第２段階のプログラム動作が実行可能となるページである。
【０１１５】
ライトバッファ（ＷＢ）内のこの領域を解放する処理は、例えば、この特定されたページに書き込むべきデータがライトバッファ（ＷＢ）からＮＡＮＤ型フラッシュメモリ５のページバッファに転送された時点で実行されてもよいし、この特定されたページへの第２段階のプログラム動作（例えばファイン・プログラム動作）の実行後に実行されてもよい。
【０１１６】
ライトバッファ（ＷＢ）がホスト２のメモリ上に設けられたライトバッファ（ＷＢ）４５によって実現されている場合には、ステップＳ１３では、コントローラ４は、読み出し可能となったページのデータが格納されている、ライトバッファ（ＷＢ）４５内のこの領域、を解放するための要求をホスト２に送出する。
【０１１７】
図１３は、ある書き込み先ブロックへのデータの書き込みによってこの書き込み先ブロックから読み出し可能となるデータが格納されている、ライトバッファ内の領域を解放する動作を示す。
【０１１８】
ライトバッファ（ＷＢ）３１（または４５）においては、各ライト要求に対応するライトデータが格納される。ライトバッファ（ＷＢ）３１（または４５）は、複数ページ分のデータを格納するための複数の領域を含む。図１３においては、図示の簡単化のために、ライトバッファ（ＷＢ）３１（または４５）が、領域１０１〜１０９を含む場合が例示されている。これら領域１０１〜１０９の各々は１ページ分のサイズを有している。
【０１１９】
ライトバッファ（ＷＢ）の領域１０１〜１０９に格納されたライトデータＤ１、Ｄ２、Ｄ３が書き込み先ブロックＢＬＫ１１に書き込むべきライトデータである場合、これらライトデータＤ１、Ｄ２、Ｄ３は、例えば、書き込み先ブロックＢＬＫ１１のページＰ０、ページＰ１、ページＰ２にそれぞれ書き込まれる。
【０１２０】
ライトバッファ（ＷＢ）の領域１０７、１０８、１０４、１０５に格納されたライトデータＤ１１、Ｄ１２、Ｄ１３、Ｄ１４が書き込み先ブロックＢＬＫ１２に書き込むべきライトデータである場合、これらライトデータＤ１１、Ｄ１２、Ｄ１３、Ｄ１４は、例えば、書き込み先ブロックＢＬＫ１２のページＰ０、ページＰ１、ページＰ２、ページＰ３にそれぞれ書き込まれる。
【０１２１】
各書き込み先ブロックにおいては、たとえ先頭のページＰ０にデータが書き込まれても、このページＰ０から直ちにデータを読み出すことはできず、後続する幾つかのページへのデータ書き込みが実行された後に、このページＰ０からデータを読み出すことが可能となる。同様に、ページＰ１にデータが書き込まれても、このページＰ１から直ちにデータを読み出すことはできず、後続する幾つかのページへのデータ書き込みが実行された後に、このページＰ１からデータを読み出すことが可能となる。
【０１２２】
ここでは、例として、ページＰ０に後続するページＰ１〜Ｐ３にデータが書き込まれた後に、これらページＰ１〜Ｐ３に先行するページＰ０からデータが読み出し可能となるケースを想定する。
【０１２３】
この場合、コントローラ４がライトデータＤ１４を書き込み先ブロックＢＬＫ１２のページＰ３に書き込んだ後、コントローラ４は、ライトデータＤ１４の書き込みによって読み出し可能となる、ページＰ３に先行する書き込み先ブロックＢＬＫ１２内のページＰ０のライトデータＤ１１が格納されているライトバッファ（ＷＢ）内の領域１０７を解放する。これにより、解放された領域１０７は新たなライトデータの格納に利用可能となる。
【０１２４】
図１４は、ライトバッファ（ＷＢ）内の複数の領域のすべてがライトデータの保持のために使用されている状態を示す。
【０１２５】
図１４では、ライトバッファ（ＷＢ）の領域１０１〜１０９は、書き込み先ブロックＢＬＫ１１に書き込まれたライトデータＤ１、Ｄ２、Ｄ３、書き込み先ブロックＢＬＫ１２に書き込まれたライトデータＤ１２、Ｄ１３、Ｄ１４、書き込み先ブロックＢＬＫ１３に書き込まれたライトデータＤ２１、Ｄ２２、Ｄ２３の格納のために利用されている。
【０１２６】
このように、ライトバッファ（ＷＢ）に未使用の領域が存在しない状態においては、ホスト２は、新たなライトデータをライトバッファ（ＷＢ）に格納することができなくなる。
【０１２７】
この場合、コントローラ４は、図１５に示すように、例えば、書き込み先ブロックＢＬＫ１２の１以上のページにダミーデータを書き込む。
【０１２８】
書き込み先ブロックＢＬＫ１２のページＰ４にダミーデータが書き込まれることにより、ページＰ４に先行する書き込み先ブロックＢＬＫ１２内のあるページのデータが読み出し可能となる。ここでは、書き込み先ブロックＢＬＫ１２のページＰ１のライトデータＤ１２が書き込み先ブロックＢＬＫ１２から読み出し可能となる場合を想定する。この場合、コントローラ４は、ライトデータＤ１２が格納されているライトバッファ（ＷＢ）内の領域１０８を解放する。
【０１２９】
同様に、書き込み先ブロックＢＬＫ１２のページＰ５にダミーデータが書き込まれることにより、ページＰ４に先行する書き込み先ブロックＢＬＫ１２内のあるページのデータが読み出し可能となる。ここでは、書き込み先ブロックＢＬＫ１２のページＰ２のライトデータＤ１３が書き込み先ブロックＢＬＫ１２から読み出し可能となる場合を想定する。この場合、コントローラ４は、ライトデータＤ１３が格納されているライトバッファ（ＷＢ）内の領域１０４を解放する。
【０１３０】
ホスト２は、新たなライトデータをライトバッファ（ＷＢ）内の領域１０８または領域１０４に格納することができる。
【０１３１】
次に、図１６を参照して、第１段階と第２段階とを含む複数段階のプログラム動作によって書き込み先ブロックの各ページにデータを書き込む動作の例を説明する。
【０１３２】
図１６では、ＮＡＮＤ型フラッシュメモリ５が、メモリセル当たりに３ビットのデータを書き込むトリプルレベルセル（ＴＬＣ）−フラッシュメモリである場合が想定されている。また、図１６では、隣接する２つのワード線を往復しながら複数段階のプログラム動作（ここでは、フォギー・ファイン・プログラム動作）が実行される場合が想定されている。
【０１３３】
（１）  コントローラ４は、ワード線ＷＬ０のページＰ０、Ｐ１、Ｐ２に対する第１段階のプログラム動作（フォギー・プログラム動作（フォギー・書き込み動作ともいう）を実行する。たとえページＰ０、Ｐ１、Ｐ２に対する第１段階のプログラム動作（フォギー・プログラム動作）が終了しても、ワード線ＷＬ１のページＰ３、Ｐ４、Ｐ５に対する第１段階のプログラム動作（フォギー・プログラム動作）が実行されるまでは、ページＰ０、Ｐ１、Ｐ２に対する第２段階のプログラム動作（ファイン・プログラム動作（ファイン・書き込み動作ともいう））を実行することはできない。このため、ページＰ０、Ｐ１、Ｐ２に対する第１段階のプログラム動作（フォギー・プログラム動作）が終了した段階では、ページＰ０、Ｐ１、Ｐ２のデータを読み出すことはできない。
【０１３４】
（２）（３）  ページＰ０、Ｐ１、Ｐ２に対する第１段階のプログラム動作（フォギー・プログラム動作）が終了すると、コントローラ４は、ワード線ＷＬ１のページＰ３、Ｐ４、Ｐ５に対する第１段階のプログラム動作（フォギー・プログラム動作）を実行する。ワード線ＷＬ１のページＰ３、Ｐ４、Ｐ５に対する第１段階のプログラム動作（フォギー・プログラム動作）が終了すると、ページＰ０、Ｐ１、Ｐ２に対する第２段階のプログラム動作（ファイン・プログラム動作）を実行することが可能となり、これによってページＰ０、Ｐ１、Ｐ２のデータを読み出すことが可能となる。
【０１３５】
（４）（５）  ページＰ０、Ｐ１、Ｐ２に対する第２段階のプログラム動作（ファイン・プログラム動作）が終了すると、コントローラ４は、ワード線ＷＬ２のページＰ６、Ｐ７、Ｐ８に対する第１段階のプログラム動作（フォギー・プログラム動作）を実行する。ワード線ＷＬ２のページＰ６、Ｐ７、Ｐ８に対する第１段階のプログラム動作（フォギー・プログラム動作）が終了すると、ページＰ３、Ｐ４、Ｐ５に対する第２段階のプログラム動作（ファイン・プログラム動作）を実行することが可能となり、これによってページＰ３、Ｐ４、Ｐ５のデータを読み出すことが可能となる。
【０１３６】
図１７のタイミングチャートは、図１６のプログラム動作を時系列順に示している。
【０１３７】
コントローラ４は、まず、ページＰ０、Ｐ１、Ｐ２に対する第１段階のプログラム動作（フォギー・プログラム動作）を実行し、そして、後続するページＰ３、Ｐ４、Ｐ５に対する第１段階のプログラム動作（フォギー・プログラム動作）を実行する。後続するページＰ３、Ｐ４、Ｐ５に対する第１段階のプログラム動作（フォギー・プログラム動作）によって先行するページＰ０、Ｐ１、Ｐ２に対する第２段階のプログラム動作（ファイン・プログラム動作）が実行可能となるので、ページＰ３、Ｐ４、Ｐ５に対する第１段階のプログラム動作（フォギー・プログラム動作）によって、先行するページＰ０、Ｐ１、Ｐ２のデータを読み出すことが可能となる。そして、例えば、ページＰ５に対するフォギー・プログラム動作を実行すると、コントローラ４は、次にデータが書き込まれるべきページアドレスを１ページ分だけ増やしてページＰ６とする。
【０１３８】
そして、コントローラ４は、先行するページＰ０、Ｐ１、Ｐ２に対する第２段階のプログラム動作（ファイン・プログラム動作）を実行した後、後続するページＰ６、Ｐ７、Ｐ８に対する第１段階のプログラム動作（フォギー・プログラム動作）を実行する。
【０１３９】
後続するページＰ６、Ｐ７、Ｐ８に対する第１段階のプログラム動作（フォギー・プログラム動作）によって先行するページＰ３、Ｐ４、Ｐ５に対する第２段階のプログラム動作（ファイン・プログラム動作）が実行可能となるので、ページＰ６、Ｐ７、Ｐ８に対する第１段階のプログラム動作（フォギー・プログラム動作）によって、先行するページＰ３、Ｐ４、Ｐ５のデータを読み出すことが可能となる。
【０１４０】
つまり、コントローラ４がブロックアドレスを含むライト要求をホスト２から受信した場合には、コントローラ４は、このライト要求に対応するライトデータをライトバッファから取得し、このライトデータを、ライト要求内に含まれるブロックアドレスを有する書き込み先ブロック内の書き込み先ページに第１段階のプログラム動作（フォギー・プログラム動作）によって書き込む。そして、コントローラ４は、レスポンスをホスト２に返すことによって、このライトデータが書き込まれた書き込み先ページのページアドレスをホスト２に通知する。そして、コントローラ４は、次にデータが書き込まれるべき、この書き込み先ブロック内のページアドレスを１ページ分だけ増やす。そして、コントローラ４は、書き込み先ページへの第１段階のプログラム動作（フォギー・プログラム動作）によって実行可能となる第２段階のプログラム動作（ファイン・プログラム動作）の実行によって読み出し可能となる、書き込み先ページに先行するこの書き込み先ブロック内のページのデータが格納されている、ライトバッファ内の領域を、解放する。
【０１４１】
図１８のフローチャートは、ライトバッファ（ＷＢ）に未使用の領域がなくなった場合にフラッシュストレージデバイス３によって実行されるダミーデータ書き込み動作の手順を示す。
【０１４２】
フラッシュストレージデバイス３のコントローラ４は、ライトバッファ（ＷＢ）に未使用の領域（空き領域）が存在するか否かを判定する（ステップＳ１０１）。ライトバッファ（ＷＢ）の複数の領域の全てが、現在オープンされている複数の書き込み先ブロックへのライトデータで満たされているならば、つまりライトバッファ（ＷＢ）に未使用の領域（空き領域）が存在しないならば（ステップＳ１０１のＮＯ）、コントローラ４は、複数の書き込み先ブロックの中から、ダミーデータを書き込むべき書き込み先ブロックを選択する（ステップＳ１０２）。例えば、コントローラ４は、複数の書き込み先ブロックの中から、最も古いデータ（最も長い間更新されていないデータ）を保持している書き込み先ブロックを、ダミーデータを書き込むべき書き込み先ブロックとして選択してもよい。
【０１４３】
コントローラ４は、選択した書き込み先ブロック内の１以上のページにダミーデータを書き込み（ステップＳ１０３）、次にデータが書き込まれるべきこの書き込み先ブロック内のページアドレスを１以上のページの数（つまり書き込んだダミーデータのページ数）だけ増やす（ステップＳ１０４）。ステップＳ１０４では、１ページ分のダミーデータを書いた場合にはページアドレスは１ページ分だけ増やされ、２ページ分のダミーデータを書いた場合にはページアドレスは３ページ分だけ増やされる。
【０１４４】
コントローラ４は、１以上のページ分のダミーデータの書き込みによって当該書き込み先ブロックから読み出し可能となる、当該ダミーデータが書き込まれた１以上のページに先行する１以上のページのデータが格納されている、ライトバッファ（ＷＢ）内の１以上の領域を解放する（ステップＳ１０４）。
【０１４５】
各ページへのデータ書き込みが複数段階のプログラム動作によって実行されるケースにおいては、ライトバッファに未使用の領域がなくなった場合、コントローラ４は、複数の書き込み先ブロックの１つの書き込み先ブロック内の１以上のページに第１段階のプログラム動作（フォギー・プログラム動作）によってダミーデータを書き込み、次にデータが書き込まれるべきこの書き込み先ブロック内のページアドレスをダミーデータが書き込まれた１以上のページの数だけ増やす。そして、コントローラ４は、ダミーデータの第１段階のプログラム動作によって実行可能となる第２段階のプログラム動作（ファイン・プログラム動作）の実行によって読み出し可能となる、当該１以上のページに先行するこの書き込み先ブロック内の１以上のページのデータが格納されている、ライトバッファ内の１以上の領域を、解放する。
【０１４６】
なお、ダミーデータ以外のこの書き込み先ブロック内の全てのデータが読み出し可能となった場合には、コントローラ４は、この書き込み先ブロックへのダミーデータの書き込みを停止する。例えば、図１５において、書き込み先ブロックＢＬＫ１２の複数のページにダミーデータが書き込まれ、これによってダミーデータ以外のこの書き込み先ブロックＢＬＫ１２内の全てのデータ（ユーザデータ）Ｄ１１、Ｄ１２、Ｄ１３、Ｄ１４が読み出し可能となった場合には、コントローラ４は、この書き込み先ブロックへのダミーデータのさらなる書き込みを停止する。
【０１４７】
図１９のフローチャートは、所定期間当たりに所定ページ数分のデータの書き込みが実行されていないことを検出した場合にフラッシュストレージデバイス３によって実行されるダミーデータ書き込み動作の手順を示す。
【０１４８】
フラッシュストレージデバイス３のコントローラ４は、現在オープンされている複数の書き込み先ブロックのうちの一つを選択する（ステップＳ２０１）。コントローラ４は、この選択したブロックに最後にデータ（ユーザデータ、またはダミーデータ）が書き込まれてからしきい時間が経過したか否かを判定する（ステップＳ２０２）。
【０１４９】
最後にデータ（ユーザデータ、またはダミーデータ）が書き込まれてからしきい時間が経過していないならば（ステップＳ２０２のＮＯ）、コントローラ４は、全ての書き込み先ブロックに対するステップＳ２０２のチェック処理が終了したか否かを判定し（ステップＳ２０６）、終了していないならば（ステップＳ２０６のＮＯ）、ステップＳ２０１に進み、ステップＳ２０１で、次の書き込み先ブロックを選択する。
【０１５０】
最後にデータ（ユーザデータ、またはダミーデータ）が書き込まれてからしきい時間が経過しているならば（ステップＳ２０２のＹＥＳ）、コントローラ４は、この選択したブロックが、所定期間当たりに所定ページ数分のデータの書き込みが実行されていないブロックであると判定し、この選択したブロック全体が特定の制限時間内にデータで満たされるように、この選択した書き込み先ブロック内の１以上のページにダミーデータを書き込む（ステップＳ２０３）。そして、コントローラ４は、次にデータが書き込まれるべきこの書き込み先ブロック内のページアドレスを１以上のページの数だけ（つまり書き込んだダミーデータのページ数だけ）増やす（ステップＳ２０４）。ステップＳ２０４では、例えば、１ページ分のダミーデータをこの選択したブロックに書き込んだ場合にはページアドレスは１ページ分だけ増やされ、２ページ分のダミーデータをこの選択したブロックに書き込んだ場合にはページアドレスは２ページ分だけ増やされ、３ページ分のダミーデータをこの選択したブロックに書き込んだ場合にはページアドレスは３ページ分だけ増やされる。この後、コントローラ４は、ダミーデータの書き込みによってこの選択した書き込み先ブロックから読み出し可能となる、ダミーデータが書き込まれた１以上のページに先行するこの選択した書き込み先ブロック内の１以上のページのデータが格納されている、ライトバッファ内の１以上の領域を、解放する（ステップＳ２０５）。そして、コントローラ４は、全ての書き込み先ブロックに対するステップＳ２０２のチェック処理が終了したか否かを判定し（ステップＳ２０６）、終了していないならば（ステップＳ２０６のＮＯ）、ステップＳ２０１に進み、ステップＳ２０１で、次の書き込み先ブロックを選択する。
【０１５１】
各ページへのデータ書き込みが複数段階のプログラム動作によって実行されるケースにおいては、ある書き込み先ブロックに最後にデータが書き込まれてからしきい時間が経過した場合、コントローラ４は、この書き込み先ブロック内の１以上のページに第１段階のプログラム動作（フォギー・プログラム動作）によってダミーデータを書き込み、次にデータが書き込まれるべきこの書き込み先ブロック内のページアドレスをダミーデータが書き込まれた１以上のページの数だけ増やす。そして、コントローラ４は、ダミーデータの第１段階のプログラム動作によって実行可能となる第２段階のプログラム動作（ファイン・プログラム動作）の実行によって読み出し可能となる、当該１以上のページに先行するこの書き込み先ブロック内の１以上のページのデータが格納されている、ライトバッファ内の１以上の領域を、解放する。
【０１５２】
なお、ダミーデータ以外のこの書き込み先ブロック内の全てのデータが読み出し可能となった場合には、コントローラ４は、この書き込み先ブロックへのダミーデータの書き込みを停止してもよい。例えば、図１５において、書き込み先ブロックＢＬＫ１２の複数のページにダミーデータが書き込まれ、これによってダミーデータ以外のこの書き込み先ブロックＢＬＫ１２内の全てのデータ（ユーザデータ）Ｄ１１、Ｄ１２、Ｄ１３、Ｄ１４が読み出し可能となった場合には、コントローラ４は、この書き込み先ブロックへのダミーデータのさらなる書き込みを停止してもよい。
【０１５３】
図２０は、フラッシュストレージデバイス３によって管理される書き込み順序管理テーブルの構成例を示す。
【０１５４】
コントローラ４は、複数の書き込み先ブロックに対応する複数の書き込み順序管理テーブルを管理する。各書き込み順序管理テーブルは、この書き込み順序管理テーブルに対応する書き込み先ブロック内の複数のページに対応する複数の書き込み済みフラグを保持する。
【０１５５】
複数の書き込み済みフラグの各々は、このフラグに対応するページにデータが書き込まれているか否かを示す。データが書き込まれたページに対応する書き込み済みフラグは、データが書き込まれたことを示す値（例えば“１”）にセットされる。データが書き込まれていないページに対応する書き込み済みフラグは、データが書き込まれていないことを示す値（例えば“０”）にセットされる。
【０１５６】
ある書き込み先ブロックのページＰ０、Ｐ１、Ｐ２にデータが書き込まれた場合、図２０に示されているように、コントローラ４は、この書き込み先ブロックに対応する書き込み順序管理テーブルを更新し、ページＰ０に対応する書き込み済みフラグ、ページＰ１に対応する書き込み済みフラグ、およびページＰ２に対応する書き込み済みフラグを、データが書き込まれたことを示す値（例えば“１”）にそれぞれセットする。
【０１５７】
コントローラ４がこの書き込み先ブロックのページＰ３、Ｐ４、Ｐ５にダミーデータが書き込んだ場合、コントローラ４は、この書き込み先ブロックに対応する書き込み順序管理テーブルを更新し、ページＰ３に対応する書き込み済みフラグ、ページＰ４に対応する書き込み済みフラグ、およびページＰ５に対応する書き込み済みフラグを、データが書き込まれたことを示す値（例えば“１”）にそれぞれセットする。
【０１５８】
ダミーデータはホスト２によってリードされることはないので、ダミーデータはライトバッファには格納されない。ダミーデータが書き込み先ブロックの１以上のページに書き込まれた場合には、この１以上のページに対応する１以上の書き込み済みフラグが、データが書き込まれたことを示す値（例えば“１”）にそれぞれセットされる。したがって、コントローラ４がダミーデータをいずれかの書き込み先ブロックに書き込んだ場合であっても、コントローラ４は、各書き込み順序管理テーブルを参照することによって、各書き込み先ブロックにおけるページ書き込み順序を正しく管理することができる。
【０１５９】
以上説明したように、本実施形態によれば、コントローラ３は、複数の書き込み先ブロックを管理し、ホスト２からのライト要求によって指定されるブロック識別子を有する書き込み先ブロックにデータを書き込む。このように、ホスト２が書き込み先ブロックを指定することを可能にする構成により、例えば、異なるエンドユーザに関連付けられたデータを異なる書き込み先ブロックに書き込むという制御を実現することができる。また、コントローラ４は、ある書き込み先ブロック内のある書き込み先ページへのデータの書き込みによって読み出し可能となる、この書き込み先ページに先行するこの書き込み先ブロック内のページのデータが格納されている、ライトバッファ内の領域を解放する、という制御を行う。これにより、複数の書き込み先ブロックが存在する環境においては、例えば、ある書き込み先ブロック用のライトデータを格納しているライトバッファ内の領域を解放し、この領域をこの書き込み先ブロック用の新たなライトデータまたは別の書き込み先ブロック用の新たなライトデータの格納に利用する、といったバッファ管理を行うことが可能となる。よって、書き込み先ブロック当たりに消費されるライトバッファの量を必要最小限に抑えることが可能となるので、複数の書き込み先ブロックが存在する環境においても、ライトバッファによって消費されるメモリリソース量の削減を図ることができる。
【０１６０】
さらに、コントローラ４は、書き込み先ブロックに１ページ分以上のダミーデータを書き込む動作も実行する。これにより、ライトバッファ内の利用可能領域を容易に増やすことが可能となる。
【０１６１】
また、本実施形態では、ホスト２のメモリ上にライトバッファを設けることができる。したがって、コントローラ４は、ライトデータをホスト２のメモリ上のライトバッファから取得できるので、フラッシュストレージデバイス３に大容量のライトバッファを用意することなく、同時に利用可能な書き込み先ブロックの数を容易に増やすことができる。よって、フラッシュストレージデバイス３のコストアップを招くことなく、フラッシュストレージデバイス３を共有するエンドユーザの数を容易に増やすことが可能となる。
【０１６２】
なお、本実施形態で説明したライトバッファの解放制御は、ホスト２側でタグそれぞれと物理アドレスそれぞれとの間のマッピングを管理する構成のみならず、フラッシュストレージデバイス３側でタグ（例えば、ＬＢＡのような論理アドレス）それぞれと物理アドレスそれぞれとの間のマッピングを、論理物理アドレス変換テーブルを用いて管理する構成に適用してもよい。
【０１６３】
また、本実施形態で説明したライトバッファの解放制御は、ホスト２側で書き込み先ブロックを決定する構成のみならず、フラッシュストレージデバイス３側で書き込み先ブロックを決定する構成に適用してもよい。フラッシュストレージデバイス３側で書き込み先ブロックを決定する構成においては、ホスト２から送信される各ライト要求は、ブロックアドレスを含まなくてもよい。また、フラッシュストレージデバイス３側で書き込み先ブロックを決定する構成においては、フラッシュストレージデバイス３のコントローラ４は、ライト要求毎に、書き込み先ブロックと書き込み先ページの双方を決定してもよい。
【０１６４】
したがって、フラッシュストレージデバイス３のコントローラ４は、以下のように動作するように構成されてもよい。
【０１６５】
コントローラ４は、各ライト要求に対応するライトデータを一時的に保持するライトバッファ（ＷＢ）から、ホスト２からの第１のライト要求に対応する第１のライトデータを取得する。コントローラ４は、第１のライトデータを、複数の書き込み先ブロックのうち、第１の書き込み先ブロック内の書き込み先ページに書き込む。そして、コントローラ４は、書き込み先ページへの第１のライトデータの書き込みによって第１の書き込み先ブロックから読み出し可能となる、書き込み先ページに先行する第１の書き込み先ブロック内のページのデータが格納されている、ライトバッファ（ＷＢ）内の領域を、解放する。ライトバッファ（ＷＢ）内のこの領域を解放する処理は、例えば、書き込み先ページに先行する第１の書き込み先ブロック内のこのページに書き込むべきライトデータがライトバッファ（ＷＢ）からＮＡＮＤ型フラッシュメモリ５に転送された時点で実行されてもよいし、このページへの第２段階のプログラム動作（例えばファイン・プログラム動作）の実行後に実行されてもよい。
【０１６６】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０１６７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１６８】
２…ホスト、２Ａ…フラッシュトランスレーションレイヤ、ライトバッファ、３…フラッシュストレージデバイス、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ライト制御部、２２…リード制御部、３１、４５…ライトバッファ。
【図１】
2019133391.tif 000003
【図２】
2019133391.tif 000004
【図３】
2019133391.tif 000005
【図４】
2019133391.tif 000006
【図５】
2019133391.tif 000007
【図６】
2019133391.tif 000008
【図７】
2019133391.tif 000009
【図８】
2019133391.tif 000010
【図９】
2019133391.tif 000011
【図１０】
2019133391.tif 000012
【図１１】
2019133391.tif 000013
【図１２】
2019133391.tif 000014
【図１３】
2019133391.tif 000015
【図１４】
2019133391.tif 000016
【図１５】
2019133391.tif 000017
【図１６】
2019133391.tif 000018
【図１７】
2019133391.tif 000019
【図１８】
2019133391.tif 000020
【図１９】
2019133391.tif 000021
【図２０】
2019133391.tif 000022