(57)【要約】      （修正有）【課題】効率的にアトミックライトを実行できるメモリシステムの制御方法を提供する。【解決手段】ホストから指定される位置情報である論理位置情報と不揮発性の第１メモリ内の物理的な位置を示す位置情報である物理位置情報との対応関係を示す第１翻訳情報を揮発性の第２メモリにキャッシュする第１ステップと、第２メモリにキャッシュされた第１翻訳情報である第２翻訳情報１４５ａを管理する第２ステップと、アトミックライトを指定するモードである第１ライトモードでホストから受信するデータ群に含まれる第１データを第１メモリに格納する場合に、第２翻訳情報の複製であり第２メモリに格納された第３翻訳情報１４５ｂを更新する第３ステップと、第１ライトモードが終了する場合に第３翻訳情報を第２翻訳情報に反映する第４ステップと、を備える。【選択図】図１２
2018206415.tif 000002
【特許請求の範囲】
【請求項１】
ホストから指定される位置情報である論理位置情報と不揮発性の第１メモリ内の物理的な位置を示す位置情報である物理位置情報との対応関係を示す第１翻訳情報を揮発性の第２メモリにキャッシュする第１ステップと、
前記第２メモリにキャッシュされた前記第１翻訳情報である第２翻訳情報を管理する第２ステップと、
アトミックライトを指定するモードである第１ライトモードで前記ホストから受信するデータ群に含まれる第１データを前記第１メモリに格納する場合に、前記第２翻訳情報の複製であり前記第２メモリに格納された第３翻訳情報を更新する第３ステップと、
前記第１ライトモードが終了する場合に前記第３翻訳情報を前記第２翻訳情報に反映する第４ステップと、
を備えるメモリシステムの制御方法。
【請求項２】
前記第１メモリから前記ホストへのデータ転送を実行する場合に、前記第２翻訳情報を参照することによって前記第１メモリ内のデータ転送元の物理位置情報を取得するステップ、
をさらに備える請求項１に記載のメモリシステムの制御方法。
【請求項３】
前記第１ライトモードと異なる第２ライトモードで前記ホストから受信したデータである第２データを前記第１メモリに格納する場合に、前記第２翻訳情報を更新するステップ、
をさらに備える請求項２に記載のメモリシステムの制御方法。
【請求項４】
前記ホストからエンドコマンドを受信する第５ステップをさらに備え、
前記第４ステップは、前記エンドコマンドの受信に応じて前記第３翻訳情報を前記第２翻訳情報に反映する、ステップである、
請求項１に記載のメモリシステムの制御方法。
【請求項５】
前記第４ステップは、前記エンドコマンドの受信の後、かつ、前記データ群のうちの最後の第１データに応じて前記第３翻訳情報を更新した後、前記第３翻訳情報を前記第２翻訳情報に反映する、ステップである、
請求項４に記載のメモリシステムの制御方法。
【請求項６】
前記データ群を複数、並行して受信する第６ステップと、
データ群毎に前記第３翻訳情報を生成する第７ステップと、
をさらに備える請求項１に記載のメモリシステムの制御方法。
【請求項７】
エンドコマンドをデータ群毎に受信する第５ステップをさらに備え、
前記第４ステップは、前記受信されたエンドコマンドに対応するデータ群にかかる第３翻訳情報を前記第２翻訳情報に反映する、ステップである、
請求項６に記載のメモリシステムの制御方法。
【請求項８】
前記第４ステップは、前記受信されたエンドコマンドに対応するデータ群にかかる第３翻訳情報を、前記受信されたエンドコマンドに対応する前記データ群のうちの最後の第１データに応じて更新した後に、前記受信されたエンドコマンドに対応するデータ群にかかる第３翻訳情報を前記第２翻訳情報に反映する、ステップである、
請求項７に記載のメモリシステムの制御方法。
【請求項９】
前記エンドコマンドは、対応するデータ群を識別する識別情報を備える、
請求項８に記載のメモリシステムの制御方法。
【請求項１０】
所定のタイミングで前記第２翻訳情報の更新部分を前記第１メモリに保存するステップをさらに備える、
請求項１に記載のメモリシステムの制御方法。
【請求項１１】
前記所定のタイミングは、電源断のタイミングを含む、
請求項１０に記載のメモリシステムの制御方法。
【請求項１２】
電源復帰後、前記保存された更新部分に基づいて前記第２翻訳情報を復元する、ステップをさらに備える、
請求項１１に記載のメモリシステムの制御方法。
【請求項１３】
前記第１ライトモードで前記ホストから受信する前記データ群に含まれるデータを前記第１メモリに最初に格納する場合に前記第２翻訳情報を複製して前記第３翻訳情報を生成する、ステップをさらに備える、
請求項１に記載のメモリシステムの制御方法。
【請求項１４】
ホストから指定される位置情報である論理位置情報と不揮発性の第１メモリ内の物理的な位置を示す位置情報である物理位置情報との対応関係を示す第１翻訳情報を管理する第１ステップと、
アトミックライトを指定するモードである第１ライトモードで前記ホストから受信するデータ群に含まれる第１データを前記第１メモリに格納する場合に、前記第１翻訳情報の複製である第２翻訳情報を更新する第２ステップと、
前記ホストからエンドコマンドを受信する第３ステップと、
前記エンドコマンドの受信に応じて前記第２翻訳情報を前記第１翻訳情報に反映する第４ステップと、
を備えるメモリシステムの制御方法。
【請求項１５】
ホストから指定される位置情報である論理位置情報と不揮発性の第１メモリ内の物理的な位置を示す位置情報である物理位置情報との対応関係を示す第１翻訳情報を揮発性の第２メモリにキャッシュする第１ステップと、
アトミックライトを指定するモードである第１ライトモードで前記ホストから受信するデータ群に含まれるデータを前記第１メモリに最初に格納する場合に前記第１翻訳情報を複製することによって前記第２メモリに第２翻訳情報を生成する第２ステップと、
前記データ群に含まれる各データを前記第１メモリに格納する場合に、前記第２翻訳情報を更新する第３ステップと、
前記第１ライトモードが終了する場合に前記第２翻訳情報を前記第１翻訳情報に反映する第４ステップと、
を備えるメモリシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステムの制御方法に関する。
【背景技術】
【０００２】
従来、NAND型のフラッシュメモリを記憶媒体に用いたメモリシステムが知られている。前記メモリシステムは、外部から指定される論理的な位置情報（論理アドレス）と記憶媒体内の位置を物理的に示す位置情報（物理アドレス）との間の対応関係を記録した翻訳情報を管理する。
【０００３】
また、書き込み要求されたデータの転送エラーが生じた場合、メモリシステムは、その書き込み要求されたデータの書き込みを開始する直前の状態に戻ることが要求されるケースがある。そのような書き込みモードを、アトミックライト（Atomic  Write）と表記する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１５／００７４３３６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一つの実施形態は、アトミックライトを効率的に実行できるメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
一つの実施形態によれば、メモリシステムの制御方法は、第１ステップと、第２ステップと、第３ステップと、第４ステップと、を備える。前記第１ステップは、ホストから指定される位置情報である論理位置情報と不揮発性の第１メモリ内の物理的な位置を示す位置情報である物理位置情報との対応関係を示す第１翻訳情報を揮発性の第２メモリにキャッシュするステップである。前記第２ステップは、前記第２メモリにキャッシュされた前記第１翻訳情報である第２翻訳情報を管理するステップである。前記第３ステップは、アトミックライトを指定するモードである第１ライトモードで前記ホストから受信するデータ群に含まれる第１データを前記第１メモリに格納する場合に、前記第２翻訳情報の複製であり前記第２メモリに格納された第３翻訳情報を更新するステップである。前記第４ステップは、前記第１ライトモードが終了する場合に前記第３翻訳情報を前記第２翻訳情報に反映するステップである。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態によるメモリシステムの構成の一例を示す図である。
【図２】図２は、アトミックライトモードのライトコマンドが送受信される一例を示す図である。
【図３】図３は、第１の実施形態におけるNANDメモリでのデータの処理単位と位置の管理単位とを模式的に示す図である。
【図４】図４は、リージョンを説明する図である。
【図５】図５は、第１テーブルキャッシュ、第２テーブル、および第２テーブルキャッシュを説明する図である。
【図６】図６は、第２テーブルのデータ構成例を示す図である。
【図７】図７は、ログ情報のデータ構成例を示す図である。
【図８】図８は、巻き戻し処理の一例を説明するフローチャートである。
【図９】図９は、第２の実施形態によるメモリシステムの構成の一例を示す図である。
【図１０】図１０は、第２テーブルの第２の実施形態のキャッシュを説明する図である。
【図１１】図１１は、第２の実施形態のデータ処理部の動作を説明するフローチャートである。
【図１２】図１２は、第２の実施形態の管理部の動作を説明するフローチャートである。
【図１３】図１３は、メモリシステムの実装例を示す図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００９】
（第１の実施形態）
図１は、第１の実施形態によるメモリシステムの構成の一例を示す図である。このメモリシステム１は、例えば、ＳＳＤ（Solid  State  Drive）である。以下では、不揮発性メモリとしてNAND型のフラッシュメモリ（以下、NANDメモリという）を用いる場合を例に挙げる。
【００１０】
メモリシステム１は、ホスト２と接続可能に構成されている。例えばCPU（Central  Processing  Unit）、パーソナルコンピュータ、携帯用情報機器、サーバ、等がホスト２に該当する。メモリシステム１とホスト２との間の通信のインタフェース規格としては、任意のインタフェース規格が採用可能である。２以上のホスト２がメモリシステム１に同時に接続されてもよい。ホスト２とメモリシステム１とは、ネットワークを介して接続されてもよい。
【００１１】
メモリシステム１は、ホスト２からのアクセス要求に応じてホスト２との間でデータの送受信を実行する。アクセス要求は、ライトコマンドおよびリードコマンドを含む。アクセス要求は、アクセス位置を論理的に示すアドレス情報を含む。アドレス情報としては、例えばLBA（Logical  Block  Address）が採用可能である。また、例えばメモリシステム１とホスト２との間の通信のインタフェース規格としてNVMeが採用される場合には、アドレス情報は、ネームスペースの識別情報とLBAとが含まれていてもよい。ネームスペースとは、ネームスペースの識別情報によって特定される論理アドレス空間である。即ち、NVMeが採用される場合には、メモリシステム１は、複数の論理アドレス空間を管理することが可能である。
【００１２】
メモリシステム１は、ホスト２からアトミックライトのモードのライトコマンドを受信することができる。アトミックライトとは、書き込みのモードのうちの１つである。アトミックライトのモードによれば、そのモードで書き込み要求されたユーザデータの受信が中断された場合には、そのモードで書き込み要求されたデータの書き込みを開始する直前の状態に戻ることが要求される。アトミックライトのモードが開始されてから終了するまでの間に書き込み要求された１以上のユーザデータについては、ホスト２の視点からみると、全てのユーザデータが書き込まれるか、または、１つのユーザデータも書き込まれない。
【００１３】
図２は、アトミックライトのモードのライトコマンドが送受信される一例を示す図である。アトミックライトのモードを、アトミックライトモード、と表記する。ホスト２は、アトミックライトモードのライトコマンドを送信する前に、アトミックライトのスタートコマンドを送信する（Ｓ１０１）。アトミックライトのスタートコマンドは、アトミックライトID（AW  ID）が付されている。メモリシステム１は、複数のスレッドのアトミックライトを実行することができる。AW  IDは、スレッドを区別するための識別情報である。スレッドとは、アトミックライトがスタートしてからアトミックライトが終了するまでに時系列順に発行される、アトミックライトモードの複数のライトコマンドの組み合わせである。メモリシステム１は、複数のスレッドが並行して入力されている場合には、各スレッドは、夫々個別に終了される。複数のスレッドのうちの一のスレッドは、前記一のスレッドを終了するためのエンドコマンドによって終了が要求される。
【００１４】
なお、スレッドは、AW  IDとは異なる情報によって識別されるようにメモリシステム１が構成されてもよい。例えば、アトミックライトの対象の空間がスレッド毎に論理アドレスによって指定されてもよい。例えば、１つのネームスペースには２以上のスレッドが実行できないように制約される場合には、スレッドは、ネームスペースの識別情報によって識別可能である。
【００１５】
Ｓ１０１においては、ホスト２は、例えば、AW  ID="0"のスレッドを開始する。ホスト２は、スタートコマンドの送信後に、そのスタートコマンドによって開始されたスレッドに属する、アトミックライトモードのライトコマンドを送信することができる（Ｓ１０２）。アトミックライトモードのライトコマンドは、AW  IDを含む。メモリシステム１は、アトミックライトモードのライトコマンドに含まれるAW  IDに基づいて、そのライトコマンドが属するスレッドを識別することができる。ホスト２は、アトミックライトモードのライトコマンドの間に、通常のライトコマンド、即ちアトミックライトモードでないライトコマンドを送信することができる（Ｓ１０３）。アトミックライトモードでないライトコマンドは、AW  IDを含まない。または、アトミックライトモードでないライトコマンドは、AW  IDとして無効値（例えば「NULL」）が含まれていてもよい。ホスト２は、１つのスレッドを終える前に、他のスレッドを開始するスタートコマンドを送信したり（Ｓ１０４）、前記他のスレッドのライトコマンドを送信したりすることができる（Ｓ１０５）。他のスレッドのライトコマンドとは、他のスレッドに属するライトコマンドの意である。Ｓ１０５の処理では、AW  ID="0"のスレッドの終了前に、AW  ID="1"のスレッドが開始されている。ホスト２は、AW  ID="0"のスレッドを終了する前に、AW  ID="1"のスレッドを終了するためのエンドコマンドを送信することができる（Ｓ１０６）。エンドコマンドがAW  IDを含んでいることによって、メモリシステム１は、終了するスレッドを認識することができる。なお、ホスト２は、AW  ID="1"のスレッドを終了する前にAW  ID="0"のスレッドを終了するエンドコマンドを送信することも可能である。図２の例においては、ホスト２は、再びAW  ID="0"のスレッドのライトコマンドを送信し（Ｓ１０７）、その後、AW  ID="0"のスレッドを終了するエンドコマンドを送信している（Ｓ１０８）。
【００１６】
メモリシステム１は、ホストインタフェース部１１、NANDメモリ１２、NANDコントローラ１３、RAM（Random  Access  Memory）１４、および制御部１５を備える。
【００１７】
制御部１５は、例えばCPU（Central  Processing  Unit）などの演算装置によって構成される。制御部１５は、予めメモリシステム１内の所定の位置に格納されているプログラムを実行することによって、データ処理部１５１および管理部１５２として機能する。プログラムの格納位置は任意に設計される。例えば、プログラムは、予めNANDメモリ１２に格納され、起動時にRAM１４にロードされる。制御部１５は、RAM１４にロードされたプログラムを実行する。データ処理部１５１の機能のうちの一部または全部はハードウェアによって実現されてもよい。管理部１５２の機能のうちの一部または全部はハードウェアによって実現されてもよい。
【００１８】
データ処理部１５１は、ホスト２とNANDメモリ１２との間のデータ転送を実行する。データ処理部１５１は、NANDメモリ１２にユーザデータを書き込む場合には、当該ユーザデータに対応する書き込みログ１２２３（後述する）をNANDメモリ１２に書き込む。
【００１９】
管理部１５２は、管理情報の管理を実行する。管理情報は、翻訳情報、統計情報、ブロック情報、などを含む。翻訳情報は、論理アドレスとNANDメモリ１２内の物理的な位置を示すアドレス情報（物理アドレス）との対応関係を記録した情報である。統計情報は、メモリシステム１の使用状況、パワーオン時間、電源断の回数、などを記録した情報である。ブロック情報は、例えば、書き換え回数、有効なデータ数、などを、物理ブロック（後述する）毎に記録した情報である。管理部１５２は、論理アドレスと物理アドレスとの間の翻訳を実行する。
【００２０】
管理部１５２は、スレッドが中断された場合に、翻訳情報を、そのスレッドが開始される前の状態に戻す処理（以降、巻き戻し処理）を実行する。スレッドが中断されるとは、そのスレッドを構成する一連のライトコマンドによって書き込み要求されたユーザデータの全部をNANDメモリ１２に書き込めない事象をいう。例えば、スレッドの受信の途中でメモリシステム１が電源断された場合に、そのスレッドが中断される。
【００２１】
ホストインタフェース部１１は、ホスト２と通信を行うためのインタフェース装置である。例えばホストインタフェース部１１は、データ処理部１５１の制御下で、ホスト２とRAM14との間のユーザデータの転送を実行する。
【００２２】
NANDコントローラ１３は、NANDメモリ１２に対するアクセスを行うためのインタフェース装置である。NANDコントローラ１３は、制御部１５による制御下で、RAM14とNANDメモリ１２との間のユーザデータまたは管理情報の転送を実行する。詳細を省略するが、NANDコントローラ１３は、誤り訂正処理を行うことができる。
【００２３】
NANDメモリ１２は、ストレージとして機能する不揮発性の記憶媒体である。NANDメモリ１２は、１以上のチップによって構成される。
【００２４】
図３は、第１の実施形態におけるNANDメモリ１２でのデータの処理単位と位置の管理単位とを模式的に示す図である。NANDメモリ１２を構成するチップの内部において、データの記憶領域は、複数の物理ブロックによって構成される。各物理ブロックは、複数の物理ページによって構成される。物理ページは、ライトおよびリードのアクセスが可能な単位である。物理ブロックは、一括してデータの消去が可能な最小単位が物理ブロックである。
【００２５】
データの記憶領域には、１物理ページより小さい単位に対して物理アドレスが割り当てられる。ここでは、物理アドレスが割り当てられる単位を、クラスタ、と表記する。翻訳情報は、クラスタ単位で管理される。１クラスタのサイズは、ホスト２からの最小のアクセス単位と等しくてもよいし異なっていてもよい。図３の例では、１物理ページは１０個のクラスタで構成されるものとされている。図３の例では、１物理ブロックは、n（nは自然数）個の物理ページで構成されるものとされている。
【００２６】
RAM１４は、データを一時的に記憶するための記憶媒体である。RAM１４としては、例えば、NANDメモリ１２よりも高速な種類の記憶媒体が採用可能である。RAM１４としては、例えば、揮発性または不揮発性の記憶媒体が採用可能である。RAM１４としては、例えば、DRAM（Dynamic  RAM）、SRAM（Ｓtatic  RAM）、FeRAM（Ferroelectric  RAM）、MRAM（Magnetoresistive  RAM）、PRAM（Phase  change  RAM）などが採用可能である。
【００２７】
NANDメモリ１２には、管理情報領域１２１およびユーザデータ領域１２２が確保されている。各領域１２１、１２２は、例えば、複数の物理ブロックによって構成される。ユーザデータ領域１２２は、ホスト２から書き込み要求された１以上のデータ（ユーザデータ１２２１）およびログ情報１２２２が格納される。ここでは、各ユーザデータ１２２１のサイズはクラスタのサイズである、として説明する。
【００２８】
管理情報領域１２１は、第１テーブル１２１１が格納される。また、管理情報領域１２１は、１以上の第２テーブル１２１３が格納されるLUT領域１２１２が確保されている。LUT領域１２１２は、例えば複数の物理ブロックによって構成される。第１テーブル１２１１および１以上の第２テーブル１２１３は、翻訳情報を構成する。
【００２９】
RAM１４は、ライトバッファ１４１、リードバッファ１４２、およびLUTキャッシュ領域１４４が確保されている。また、RAM１４は、第１テーブルキャッシュ１４３が格納される。
【００３０】
ライトバッファ１４１およびリードバッファ１４２は、ホスト２とNANDメモリ１２との間のデータ転送のバッファである。ライトバッファ１４１およびリードバッファ１４２は、FIFOのルールに従ってデータが入出力される。ライトバッファ１４１は、ホストインタフェース部１１がホスト２から受信したユーザデータが格納される。ライトバッファ１４１に格納されたユーザデータは、NANDコントローラ１３によってユーザデータ領域１２２に書き込まれる。リードバッファ１４２は、NANDコントローラ１３によって、ユーザデータ領域１２２から読み出されたユーザデータ１２２１が格納される。リードバッファ１４２に格納されたユーザデータ１２２１は、ホストインタフェース部１１によってホスト２に転送される。
【００３１】
第１テーブル１２１１および１以上の第２テーブル１２１３は、RAM１４にキャッシュされ、RAM１４上で更新される。LUTキャッシュ領域１４４は、第２テーブル１２１３がキャッシュされる領域である。LUTキャッシュ領域１４４にキャッシュされた第２テーブル１２１３を、第２テーブルキャッシュ１４５と表記する。第１テーブルキャッシュ１４３は、RAM１４にキャッシュされた第１テーブル１２１１である。
【００３２】
図４、図５、および図６を用いることによって、翻訳情報を説明する。管理部１５２は、翻訳情報を、２以上の階層に階層化する。ここでは一例として、管理部１５２は、翻訳情報を２階層のテーブル群として管理する。第１テーブル１２１１および第１テーブルキャッシュ１４３は、第１階層目のテーブルに該当する。１以上の第２テーブル１２１３および１以上の第２テーブルキャッシュ１４５は第２階層目のテーブルに該当する。
【００３３】
管理部１５２は、論理アドレス空間を複数の部分空間に分割する。部分空間を、リージョン（Region）と表記する。図４は、リージョンを説明する図である。各リージョンは、論理アドレスが連続する複数のクラスタを含む。ここでは、各リージョンは、m（mは自然数）個のクラスタを含む。各リージョンは、リージョン番号（Region  No.）によって識別される。リージョン番号は、例えば、論理アドレスを右方向にシフトすることによって得られる。リージョン#iは、論理アドレスi*mから論理アドレス((i+1)*m-1)までの範囲である。リージョン内のアドレスは、リージョンの先頭からのオフセットによって表現される。論理アドレスの所定の桁よりも上位桁がリージョン番号に相当し、論理アドレスの前記所定の桁よりも下位桁がリージョン内のアドレスに相当する。
【００３４】
図５は、第１テーブルキャッシュ１４３、第２テーブル１２１３、および第２テーブルキャッシュ１４５を説明する図である。第１テーブルキャッシュ１４３は、リージョン毎にテーブルアドレスが記録される。テーブルアドレスとは、第２テーブル１２１３または第２テーブルキャッシュ１４５の格納位置を物理的に示すアドレス情報である。ここでは、第１テーブルキャッシュ１４３は、第２テーブルキャッシュ１４５の格納位置を示すRAM１４内のテーブルアドレスと、第２テーブル１２１３の格納位置を示すNANDメモリ１２内のテーブルアドレスと、の両方が、リージョン毎に記録される。あるリージョンに関して第２テーブルキャッシュ１４５がキャッシュされていない場合には、当該リージョンに対応する第２テーブルキャッシュ１４５の格納位置のテーブルアドレスとして、無効値（例えば「NULL」）が記録される。管理部１５２は、RAM１４内のテーブルアドレスとして「NULL」が記録されているか否かに基づいて、前記あるリージョンに関して第２テーブルキャッシュ１４５がキャッシュされているか否かを判定することができる。なお、各リージョンに関して第２テーブルキャッシュ１４５がキャッシュされているか否かの管理は、上記の手法に限定されない。
【００３５】
図６は、第２テーブル１２１３のデータ構成例を示す図である。第２テーブル１２１３および第２テーブルキャッシュ１４５は、例えば同じデータ構成を有している。第２テーブル１２１３は、ユーザデータ１２２１の格納位置を物理的に示すアドレス（データアドレス）が、リージョン内のアドレス毎に記録される。各リージョンがｍ個のクラスタによって構成される場合には、第２テーブル１４５は、少なくともｍ個のエントリを備える。物理アドレスが対応づけられていない論理アドレスに対しては、第２テーブル１４５に無効値（例えば「NULL」）が記録される。
【００３６】
管理部１５２は、NANDメモリ１２からRAM１４に翻訳情報を読み出して、RAM１４に読み出された翻訳情報を使用する。使用するとは、更新することおよび参照することを含む。管理部１５２は、例えば、第１テーブル１２１１の全エントリを第１テーブルキャッシュ１４３としてRAM１４に読み出す。管理部１５２は、例えば、LUT領域１２１２に格納されている１以上の第２テーブル１２１３のうち、少なくとも使用の対象のエントリを含む第２テーブル１２１３をLUTキャッシュ領域１４４に読み出す。
【００３７】
管理部１５２がRAM１４に読み出された翻訳情報を更新することによって、RAM１４に格納されている翻訳情報は、NANDメモリ１２に格納されている翻訳情報と異なる状態になる。NANDメモリ１２に格納されている翻訳情報と異なるRAM１４に格納されている翻訳情報の状態を、ダーティと表記する。管理部１５２は、翻訳情報のうちのダーティな部分を所定のタイミングでNANDメモリ１２に書き込む。翻訳情報のうちのダーティな部分は、NANDメモリ１２に書き込まれることによって、非ダーティの状態に遷移する。ダーティであるか非ダーティであるかの管理の単位は任意に設計される。管理部１５２は、例えば、第１テーブルキャッシュ１４３に関し、エントリ毎にダーティであるか非ダーティであるかを管理する。管理部１５２は、例えば、第２テーブルキャッシュ１４５毎にダーティであるか非ダーティであるかを管理する。
【００３８】
例えば、データ処理部１５１は、ライトバッファ１４１からNANDメモリ１２にユーザデータを書き込む際に、ユーザデータの位置を示す論理アドレスに関し、当該論理アドレスと物理アドレスとの対応関係を更新するための更新要求を、管理部１５２に送信する。管理部１５２は、更新要求によって指定される論理アドレスを含む第２テーブルキャッシュ１４５を、当該更新要求に基づいて更新する。管理部１５２は、更新した第２テーブルキャッシュ１４５を、ダーティとして管理する。また、管理部１５２は、第１テーブルキャッシュ１４３のレコードのうち、ダーティな第２テーブルキャッシュ１４５を指すレコードを、ダーティとして管理する。管理部１５２は、ダーティな第２テーブルキャッシュ１４５をLUT領域１２１２に書き込んだ後、当該第２テーブルキャッシュ１４５を非ダーティとして管理する。管理部１５２は、第１テーブルキャッシュ１４３のレコードのうちのダーティなレコードを第２テーブルキャッシュ１４５のLUT領域１２１２への書き込みに応じて更新後、更新したレコードを管理情報領域１２１に書き込む。管理部１５２は、更新したレコードを管理情報領域１２１に書き込んだ後、当該レコードを非ダーティとして管理する。
【００３９】
翻訳情報のうちのダーティな部分をNANDメモリ１２に書き込むタイミングは、任意に設計される。例えば、翻訳情報のうちのダーティな部分の合計サイズに基づいてタイミングが決定される。例えば、翻訳情報のうちのダーティな部分の合計サイズが所定のしきい値を超えたタイミングで前記ダーティな部分のうちの一部または全部がNANDメモリ１２に書き込まれる。また、電源断時には、翻訳情報のうちの少なくともダーティな部分がNANDメモリ１２に書き込まれる。メモリシステム１がバッテリを具備する場合には、電源断時には、管理部１５２は、当該バッテリに蓄えられたエネルギーによって駆動されてもよい。電源断時には、翻訳情報のうちの少なくともダーティな部分は、管理情報領域１２１に書き込まれる。NANDメモリ１２が緊急に管理情報を退避するための領域（緊急退避領域）を管理情報領域１２１およびユーザデータ領域１２２の他に有する場合には、翻訳情報のうちの少なくともダーティな部分は、緊急退避領域に書き込まれ得る。このように、管理部１５２は、翻訳情報のうちのダーティな部分を可能な限り喪失しないように、RAM１４内の翻訳情報を管理する。
【００４０】
なお、第１テーブル１２１１は、第１テーブルキャッシュ１４３と同一のデータ構成を有していてもよいし、LUTキャッシュ領域１４４内のテーブルアドレスの記録が省略されたデータ構成を有していてもよい。
【００４１】
図７は、ログ情報１２２２のデータ構成例を示す図である。ログ情報１２２２は、１以上の書き込みログ１２２３を含む。各書き込みログ１２２３は、ユーザデータ１２２１がNANDメモリ１２に書き込まれた際の論理アドレスと物理アドレスとの対応関係を、クラスタ単位で示す情報である。例えば、１つのログ情報１２２２は、対応する１つの物理ページに含まれる全てのクラスタの書き込みログ１２２３を含む。ログ情報１２２２は、何れかのユーザデータ１２２１と対応する。例えば、ログ情報１２２２は、各物理ブロック内の所定位置のクラスタ（たとえば最後のクラスタ）に書き込まれる。本実施形態では、アトミックライトモードのスレッドが中断された場合に当該スレッドの最初のライトコマンドによって書き込み要求されたユーザデータをNANDメモリ１２に書き込む前の状態に翻訳情報を戻すための情報が、書き込みログ１２２３に付加されている。
【００４２】
書き込みログ１２２３は、論理アドレス２００、旧物理アドレス２０１、新物理アドレス２０２、AW  ID２０３、およびStart  End  Flag２０４を含む。旧物理アドレス２０１は、ユーザデータ１２２１の書き込み前に論理アドレス２００に対応づけられていた物理アドレスである。新物理アドレス２０２は、対応するユーザデータ１２２１が書き込まれることによって論理アドレス２００に新たに対応付けられた物理アドレスである。言い換えると、新物理アドレス２０２は、対応するユーザデータ１２２１が書き込まれた位置を示す物理アドレスである。AW  ID２０３は、アトミックライトモードで書き込み要求されたユーザデータ１２２１、の書き込みログ１２２３に付される。AW  ID２０３は、アトミックライトモードのライトコマンドに含まれるAW  IDと等しい。Start  End  Flag２０４は、スレッドの最初に書き込まれたユーザデータ１２２１であるか否かを示すスタートフラグと、スレッドの最後に書き込まれたユーザデータ１２２１であるか否かを示すエンドフラグと、の組み合わせである。即ち、Start  End  Flag２０４は、少なくとも２ビットのサイズを有する。Start  End  Flag２０４は、スタートコマンドおよびエンドコマンドに基づいて操作される。
【００４３】
アトミックライトモードでないライトコマンドによって書き込み要求されたユーザデータをライトバッファ１４１からNANDメモリ１２に書き込む場合について下記に説明する。データ処理部１５１は、書き込みログ１２２３に、論理アドレス２００、旧物理アドレス２０１、および新物理アドレス２０２を書き込む。データ処理部１５１は、AW  ID２０３およびStart  End  Flag２０４を使用しない。例えば、データ処理部１５１は、AW  ID２０３には無効値（「NULL」など）を記録する。データ処理部１５１は、Start  End  Flag２０４には、スタートフラグもエンドフラグも立てない。
【００４４】
アトミックライトモードのライトコマンドによって書き込み要求されたユーザデータをライトバッファ１４１からNANDメモリ１２に書き込む場合について下記に説明する。データ処理部１５１は、書き込みログ１２２３に、論理アドレス２００、旧物理アドレス２０１、および新物理アドレス２０２の他に、AW  ID２０３を記録する。データ処理部１５１は、各スレッドの最初のライトコマンドによって書き込み要求されたユーザデータに対しては、書き込みログ１２２３のStart  End  Flag２０４に、スタートフラグを立てる。データ処理部１５１は、各スレッドの最後のライトコマンドによって書き込み要求されたユーザデータに対しては、書き込みログ１２２３のStart  End  Flag２０４に、エンドフラグを立てる。データ処理部１５１は、各スレッドに属するライトコマンドのうちの、各スレッドの最初のライトコマンドおよび各スレッドの最後のライトコマンドの何れにも該当しないライトコマンドによって書き込み要求されたユーザデータに対しては、Start  End  Flag２０４には、スタートフラグもエンドフラグも立てない。
【００４５】
例えば、エンドコマンドは、データ処理部１５１によってライトバッファ１４１に格納される。データ処理部１５１は、アトミックライトモードのライトコマンドによって書き込み要求されたユーザデータをNANDメモリ１２に書き込む際に、当該書き込み対象のユーザデータの後に当該書き込み対象のユーザデータと同一のスレッドのライトコマンドによって書き込み要求されたユーザデータの受信を介在することなくエンドコマンドの受信があったか否かを、ライトバッファ１４１を参照することによって判定する。書き込み対象のユーザデータと同一のスレッドのライトコマンドによって書き込み要求されたユーザデータの受信を介在することなくエンドコマンドの受信があった場合には、データ処理部１５１は、書き込み対象のユーザデータがスレッドの最後のライトコマンドによって書き込み要求されたユーザデータであると判定する。
【００４６】
スレッドが中断された場合、当該中断されたスレッドのライトコマンドによって書き込み要求され、かつ、NANDメモリ１２に書き込み済みのユーザデータが存在する場合、当該ユーザデータの格納位置を示す物理アドレスは、巻き戻し処理によって、論理アドレスに対応付けられた状態から論理アドレスに対応づけられていない状態に遷移する。論理アドレスに対応づけられていない状態のユーザデータは、ホスト２からアクセスすることが不可能である。したがって、ホスト２の視点から見ると、スレッドが中断されるまでにメモリシステム１に送信したユーザデータはNANDメモリ１２に書き込まれなかったものとして見える。即ち、スレッドが中断された場合には、ホスト２の視点から見ると、メモリシステム１はそのスレッドが開始される前の状態に戻ったように見えるため、アトミックライトの動作が実現する。
【００４７】
図８は、巻き戻し処理の一例を説明するフローチャートである。まず、管理部１５２は、スレッドの中断の発生時点での第１テーブルキャッシュ１４３をRAM１４に復元する。
【００４８】
続いて、管理部１５２は、中断の発生時に最後に書いた書き込みログ１２２３から、書き込み順とは逆順に、所定個数の書き込みログ１２２３を読み出す（Ｓ２０１）。管理部１５２は、読み出した所定個数の書き込みログ１２２３に基づいて、キャンセル対象のスレッドを特定する（Ｓ２０２）。
【００４９】
具体的には、例えば、管理部１５２は、読み出した所定個数の書き込みログ１２２３から、全てのAW  IDを抽出する。例えば、読み出した所定個数の書き込みログ１２２３がAW  ID="0"が記録された書き込みログ１２２３、AW  ID="1"が記録された書き込みログ１２２３、およびAW  ID="2"が記録された書き込みログ１２２３、を含む場合には、管理部１５２は、AW  ID="0"、AW  ID="1"、およびAW  ID="2"を抽出する。そして、管理部１５２は、読み出した所定個数の書き込みログ１２２３から、エンドフラグを有する書き込みログ１２２３を検索する。エンドフラグを有する書き込みログ１２２３が取得された場合には、管理部１５２は、エンドフラグを有する書き込みログ１２２３に記録されたAW  IDを取得する。記録されたAW  IDを除外することによって、中断されたスレッドを示すAW  IDを取得する。管理部１５２は、中断されたスレッドをキャンセル対象のスレッドとして特定する。
【００５０】
Ｓ２０２の処理の後、管理部１５２は、中断の発生時に最後に書いた書き込みログ１２２３を選択する（Ｓ２０３）。そして、管理部１５２は、選択された書き込みログ１２２３は、キャンセル対象のスレッドにかかる書き込みログ１２２３であるか否かを判定する（Ｓ２０４）。選択された書き込みログ１２２３は、中断されたスレッドにかかる書き込みログ１２２３であるか否かは、選択された書き込みログ１２２３に記録されたAW  ID２０３が中断されたスレッドを示すAW  IDの何れかに含まれるか否かに基づいて判定可能である。
【００５１】
選択された書き込みログ１２２３がキャンセル対象のスレッドにかかる書き込みログ１２２３である場合（Ｓ２０４、Ｙｅｓ）、管理部１５２は、論理アドレス２００と旧物理アドレス２０１とを取得する。そして、管理部１５２は、取得した論理アドレス２００に翻訳情報において対応付けられた物理アドレスを、取得した旧物理アドレス２０１に変更する（Ｓ２０５）。
【００５２】
例えば、管理部１５２は、取得した論理アドレス２００にかかる対応関係を記録した第２テーブル１２１３の格納位置を、復元された第１テーブルキャッシュ１４３を参照することによって取得する。そして、管理部１５２は、取得された格納位置から第２テーブル１２１３を読み出して、読み出された第２テーブル１２１３をLUTキャッシュ領域１４４に第２テーブルキャッシュ１４５として格納する。管理部１５２は、第２テーブルキャッシュ１４５をLUTキャッシュ領域１４４に格納するに応じて、第１テーブルキャッシュ１４３を更新する。そして、管理部１５２は、第２テーブルキャッシュ１４５上で、Ｓ２０５の処理による変更を実行する。管理部１５２は、Ｓ２０５の処理によって変更された第２テーブルキャッシュ１４５を、ダーティとして管理する。管理部１５２は、第１テーブルキャッシュ１４３のレコードのうち、Ｓ２０５の処理によって変更された第２テーブルキャッシュ１４５を指すレコードを、ダーティとして管理する。
【００５３】
Ｓ２０５の処理に続いて、管理部１５２は、選択された書き込みログ１２２３にスタートフラグが立っているか否かを判定する（Ｓ２０６）。選択された書き込みログ１２２３にスタートフラグが立っている場合（Ｓ２０６、Ｙｅｓ）、管理部１５２は、選択された書き込みログ１２２３に記録されたAW  ID２０３が示すスレッドを、キャンセル対象のスレッドから削除する（Ｓ２０７）。選択された書き込みログ１２２３にスタートフラグが立っていない場合（Ｓ２０６、Ｎｏ）、またはＳ２０７の処理の後、管理部１５２は、キャンセル対象のスレッドがまだ存在するか否かを判定する（Ｓ２０８）。
【００５４】
選択された書き込みログ１２２３がキャンセル対象のスレッドにかかる書き込みログ１２２３でない場合（Ｓ２０４、Ｎｏ）、またはキャンセル対象のスレッドがまだ存在する場合（Ｓ２０８、Ｙｅｓ）、管理部１５２は、現在選択中の書き込みログ１２２３よりも１つ前に書き込まれた書き込みログ１２２３を新たに選択し（Ｓ２０９）、新たに選択された書き込みログ１２２３についてＳ２０４の処理を実行する。キャンセル対象のスレッドが存在しない場合には（Ｓ２０８、Ｎｏ）、管理部１５２は、巻き戻し処理を終了する。
【００５５】
このように、第１の実施形態によれば、データ処理部１５１は、ユーザデータのNANDメモリ１２への書き込み毎に書き込みログ１２２３を記録する。また、データ処理部１５１は、アトミックライトのスタートおよびアトミックライトの終了を書き込みログ１２２３に記録する。管理部１５２は、スレッドが中断された場合には、書き込みログ１２２３を書き込み順とは逆の順番に読み出すことによって、翻訳情報をスレッドが中断される前の状態に戻す。これによって、アトミックライトの動作が実現する。
【００５６】
なお、以上の説明によれば、データ処理部１５１は、ユーザデータを書き込み要求したライトコマンドがアトミックライトモードのライトコマンドであるかアトミックライトモードでないライトコマンドであるかに関わらず、そのユーザデータをNANDメモリ１２に書き込む際に更新要求を発行する。データ処理部１５１は、ユーザデータを書き込み要求したライトコマンドがアトミックライトモードのライトコマンドである場合には更新要求を内部にキューイングしておき、内部にキューイングされた更新要求をエンドコマンドの受信を確認した後に管理部１５２に送信してもよい。これにより、スレッドの終了後に翻訳情報が更新されるので、巻き戻し処理を行うことなくアトミックライトの動作が実現する。
【００５７】
また、以上の説明によれば、管理部１５２は、翻訳情報のうちのダーティな部分を可能な限り喪失しないように、RAM１４内の翻訳情報を管理する。翻訳情報のうちのダーティな部分を喪失した場合には、管理部１５２は、例えば、書き込み順とは逆順に書き込みログ１２２３を参照することによって、翻訳情報を再構築する。管理部１５２は、翻訳情報を再構築する際には、キャンセル対象のスレッドを特定し、書き込み順とは逆順に書き込みログ１２２３を読み出す。管理部１５２は、キャンセル対象のスレッドにかかる書き込みログ１２２３ではない書き込みログ１２２３が読み出され、かつ、当該書き込みログ１２２３の論理アドレス２００が翻訳情報において何れの物理アドレスにも対応付けられていない場合には、当該書き込みログ１２２３に記録されている論理アドレス２００と当該書き込みログ１２２３に記録されている新物理アドレス２０２との対応関係を翻訳情報に上書き形式で記録する。管理部１５２は、キャンセル対象のスレッドにかかる書き込みログ１２２３が読み出された場合には、次の書き込みログ１２２３を読み出す。管理部１５２は、順次読み出された書き込みログ１２２３に対して上述の処理を行うことによって、翻訳情報を再構築する。
【００５８】
（第２の実施形態）
図９は、第２の実施形態によるメモリシステムの構成の一例を示す図である。なお、第１の実施形態と同じ機能を有する構成要素には第１の実施形態と同じ名称および符号を付す。第１の実施形態と同じ機能を有する構成要素について、説明を省略する。
【００５９】
メモリシステム１ａは、ホスト２と接続可能である。メモリシステム１ａは、複数のホスト２に接続可能に構成されてもよい。メモリシステム１ａは、第１の実施形態のメモリシステム１と同様に、ホスト２からアトミックライトモードのライトコマンドを受信することができる。メモリシステム１ａは、ホストインタフェース部１１、NANDメモリ１２、NANDコントローラ１３、RAM１４、および制御部１５を備える。制御部１５は、予めメモリシステム１ａ内の所定の位置に格納されているプログラムを実行することによって、データ処理部１５１ａおよび管理部１５２ａとして機能する。
【００６０】
データ処理部１５１ａは、ホスト２とNANDメモリ１２との間のデータ転送を実行する。管理部１５２ａは、管理情報の管理を実行する。管理情報は、翻訳情報、統計情報、ブロック情報、などを含む。管理部１５２ａは、論理アドレスと物理アドレスとの間の翻訳を実行する。管理部１５２ａは、翻訳情報のうちのダーティな部分を可能な限り喪失しないように、RAM１４内の翻訳情報を管理する。
【００６１】
NANDメモリ１２には、管理情報領域１２１およびユーザデータ領域１２２が確保されている。ユーザデータ領域１２２は、１以上のユーザデータ１２２１およびログ情報１２２２が格納される。第２の実施形態においては、ログ情報１２２２は記録されなくてもよい。管理情報領域１２１は、第１テーブル１２１１が格納される。また、管理情報領域１２１は、１以上の第２テーブル１２１３が格納されるLUT領域１２１２が確保されている。RAM１４は、ライトバッファ１４１、リードバッファ１４２、およびLUTキャッシュ領域１４４が確保されている。RAM１４は、第１テーブルキャッシュ１４３が格納される。LUTキャッシュ領域１４４は、第２テーブル１２１３が格納される。
【００６２】
図１０は、第２テーブル１２１３の第２の実施形態のキャッシュを説明する図である。第２の実施形態においては、各リージョンの第２テーブル１２１３は、１つの第２テーブルキャッシュ１４５ａとしてキャッシュされ得る。また、各リージョンの第２テーブル１２１３は、１つの第２テーブルキャッシュ１４５ａとしてキャッシュされると同時に、１以上の第２テーブルキャッシュ１４５ｂとしてもキャッシュされ得る。各第２テーブルキャッシュ１４５ｂは、対応するリージョンの第２テーブルキャッシュ１４５ａが複製されることによって生成される。あるリージョンに関する第２テーブルキャッシュ１４５ｂの個数は、そのリージョンの第２テーブル１２１３の使用を必要とするスレッドの数に等しい。即ち、スレッド毎に第２テーブルキャッシュ１４５ｂがキャッシュされる。
【００６３】
第２テーブルキャッシュ１４５ａおよび第２テーブルキャッシュ１４５ｂは、ポインタ２１０およびAW  ID２１１が記録される。第２テーブルキャッシュ１４５ｂのAW  ID２１１は、その第２テーブルキャッシュ１４５ｂの使用を必要とするスレッドを示す。
【００６４】
第２テーブルキャッシュ１４５ａの格納位置は、第１テーブルキャッシュ１４３によって示される。第２テーブルキャッシュ１４５ｂの格納位置は、第１テーブルキャッシュ１４３によって示されない。ポインタ２１０は、第２テーブルキャッシュ１４５ａから、その第２テーブルキャッシュ１４５ａを複製元とする１以上の第２テーブルキャッシュ１４５ｂの格納位置を参照するための、リスト構造を構成する。即ち、第２テーブルキャッシュ１４５ａを複製元とする１以上の第２テーブルキャッシュ１４５ｂが存在する場合には、第２テーブルキャッシュ１４５ａのポインタ２１０は、１以上の第２テーブルキャッシュ１４５ｂのうちの一の第２テーブルキャッシュ１４５ｂの格納位置を示す。他に第２テーブルキャッシュ１４５ｂが存在しない場合には、前記一の第２テーブルキャッシュ１４５ｂのポインタ２１０には、リスト構造の終端を示す値（例えば「NULL」）が記録される。他の１以上の第２テーブルキャッシュ１４５ｂが存在する場合には、前記一の第２テーブルキャッシュ１４５ｂのポインタ２１０は、他の１以上の第２テーブルキャッシュ１４５ｂのうちの一の第２テーブルキャッシュ１４５ｂの格納位置を示す。第２テーブルキャッシュ１４５ａを複製元とする第２テーブルキャッシュ１４５ｂが存在しない場合には、その第２テーブルキャッシュ１４５ａのポインタ２１０には、例えばリスト構造の終端を示す値が記録される。
【００６５】
なお、第２テーブルキャッシュ１４５ａと、その第２テーブルキャッシュ１４５ａを複製元とする１以上の第２テーブルキャッシュ１４５ｂと、の対応関係の管理の手法は、ポインタ２１０のリスト構造を用いた管理の手法だけに限定されない。第２テーブルキャッシュ１４５ａと、その第２テーブルキャッシュ１４５ａを複製元とする１以上の第２テーブルキャッシュ１４５ｂと、の対応関係は、別途設けられたテーブルを用いて管理されてもよい。また、第１テーブルキャッシュ１４３に専用のエントリが設けられ、当該専用のエントリによって第２テーブルキャッシュ１４５ａと、その第２テーブルキャッシュ１４５ａを複製元とする１以上の第２テーブルキャッシュ１４５ｂと、の対応関係が管理されてもよい。ポインタ２１０は、双方向のポインタであってもよい。
【００６６】
アトミックライトモードのライトコマンドによって書き込み要求されたユーザデータのNANDメモリ１２への書き込みの際には、管理部１５２ａは、対応するスレッドの第２テーブルキャッシュ１４５ｂを使用する。アトミックライトモードでないライトコマンドによって書き込み要求されたユーザデータのNANDメモリ１２への書き込みの際、および、NANDメモリ１２からのユーザデータのリードの際には、管理部１５２ａは、第２テーブルキャッシュ１４５ａを使用する。
【００６７】
図１１は、第２の実施形態のデータ処理部１５１ａの動作を説明するフローチャートである。データ処理部１５１ａは、ライトコマンドの受信があったか否かを判定する（Ｓ３０１）。ライトコマンドの受信があった場合（Ｓ３０１、Ｙｅｓ）、データ処理部１５１ａは、当該ライトコマンドによって書き込み要求されたユーザデータをライトバッファ１４１に格納する（Ｓ３０２）。ライトコマンドの受信がない場合（Ｓ３０１、Ｎｏ）、データ処理部１５１ａは、Ｓ３０２の処理をスキップする。
【００６８】
続いて、データ処理部１５１ａは、書き込みタイミングに至ったか否かを判定する（Ｓ３０３）。任意のタイミングを書き込みタイミングに設定することが可能である。例えば、ライトバッファ１４１に格納されているユーザデータの合計サイズに基づいて書き込みタイミングが決定される。例えば、書き込みタイミングは、ライトバッファ１４１に格納されているユーザデータの合計サイズが所定のしきい値を超えたタイミングである。例えば、書き込みタイミングは、ホスト２からFlushコマンドを受信したタイミングである。Flushコマンドとは、ライトバッファ１４１に格納され、かつ、NANDメモリ１２に書き込まれていない全てのユーザデータを、NANDメモリ１２に書き込ませるためのコマンドである。
【００６９】
書き込みタイミングに至った場合（Ｓ３０３、Ｙｅｓ）、データ処理部１５１ａは、ライトバッファ１４１からユーザデータを１つ選択する（Ｓ３０４）。データ処理部１５１ａは、選択されたユーザデータをNANDメモリ１２に書き込む（Ｓ３０５）。データ処理部１５１ａは、書き込まれたユーザデータはアトミックライトモードのライトコマンドで書き込み要求されたユーザデータであるか否かを判定する（Ｓ３０６）。書き込まれたユーザデータはアトミックライトモードのライトコマンドで書き込み要求されたユーザデータでない場合（Ｓ３０６、Ｎｏ）、データ処理部１５１ａは、第１更新要求を管理部１５２ａに送信する（Ｓ３０７）。書き込まれたユーザデータはアトミックライトモードのライトコマンドで書き込み要求されたユーザデータである場合（Ｓ３０６、Ｙｅｓ）、データ処理部１５１ａは、第２更新要求を管理部１５２ａに送信する（Ｓ３０８）。
【００７０】
第１更新要求および第２更新要求は、翻訳情報の更新のための要求である。第１更新要求は、論理アドレス、旧物理アドレス、および新物理アドレスを少なくとも含む。第１更新要求に含まれる論理アドレスは、ユーザデータを書き込み要求したライトコマンドによって指定された論理アドレスである。旧物理アドレスは、第１更新要求に含まれる論理アドレスに、ユーザデータの書き込み前に対応づけられていた物理アドレスである。新物理アドレスは、ユーザデータが書き込まれることによって論理アドレスに新たに対応付けられた物理アドレスである。
【００７１】
第２更新要求は、論理アドレス、旧物理アドレス、および新物理アドレスの他に、AW  IDを少なくとも含む。第２更新要求に含まれるAW  IDは、書き込まれたユーザデータを書き込み要求したライトコマンドが属するスレッドを示す。
【００７２】
書き込みタイミングに至っていない場合（Ｓ３０３、Ｎｏ）、またはＳ３０７の処理、またはＳ３０８の処理の後、データ処理部１５１ａは、エンドコマンドの受信があったか否かを判定する（Ｓ３０９）。エンドコマンドの受信があった場合（Ｓ３０９、Ｙｅｓ）、データ処理部１５１ａは、更新確定要求を管理部１５２ａに送信する（Ｓ３１０）。
【００７３】
更新確定要求は、エンドコマンドによって終了せしめられるスレッドに対応する第２テーブルキャッシュ１４５ｂを、複製元の第２テーブルキャッシュ１４５ａに反映させるための要求である。更新確定要求は、エンドコマンドによって終了せしめられるスレッドを示すAW  IDを少なくとも含む。なお、データ処理部１５１ａは、エンドコマンドに含まれるAW  IDによって特定されるスレッドのライトコマンドによって書き込み要求された全てのライトデータについて第２更新要求を送信した後に、更新確定要求を送信する。
【００７４】
エンドコマンドの受信がない場合（Ｓ３０９、Ｎｏ）、またはＳ３１０の処理の後、データ処理部１５１ａは、リードコマンドの受信があったか否かを判定する（Ｓ３１１）。リードコマンドの受信があった場合（Ｓ３１１、Ｙｅｓ）、データ処理部１５１ａは、翻訳要求を管理部１５２ａに送信する（Ｓ３１２）。翻訳要求は、リードコマンドによって指定された論理アドレスを少なくとも含む。管理部１５２ａは、翻訳要求に含まれる論理アドレスを翻訳し、翻訳によって得られた物理アドレスをデータ処理部１５１ａに返す。データ処理部１５１ａは、返された物理アドレスが示す位置からライトバッファ１４１にユーザデータを読み出す（Ｓ３１３）。データ処理部１５１ａは、ライトバッファ１４１に読み出されたユーザデータをホスト２に送信する（Ｓ３１４）。Ｓ３１４の処理の後、データ処理部１５１ａは、Ｓ３０１の処理を再び実行する。
【００７５】
図１２は、第２の実施形態の管理部１５２ａの動作を説明するフローチャートである。管理部１５２ａは、第１更新要求の受信があったか否かを判定する（Ｓ４０１）。第１更新要求の受信があった場合（Ｓ４０１、Ｙｅｓ）、管理部１５２ａは、第１更新要求に含まれる論理アドレスにかかる第２テーブル１２１３がLUTキャッシュ領域１４４にキャッシュされているか否かを判定する（Ｓ４０２）。該当の第２テーブル１２１３がLUTキャッシュ領域１４４にキャッシュされていない場合（Ｓ４０２、Ｎｏ）、管理部１５２ａは、該当の第２テーブル１２１３を、第２テーブルキャッシュ１４５ａとしてLUTキャッシュ領域１４４に読み出す（Ｓ４０３）。管理部１５２ａは、第２テーブルキャッシュ１４５ａのポインタ２１０およびAW  ID２１１に「NULL」を記録する。
【００７６】
該当の第２テーブル１２１３がLUTキャッシュ領域１４４にキャッシュされている場合（Ｓ４０２、Ｙｅｓ）、またはＳ４０３の処理の後、管理部１５２ａは、第２テーブルキャッシュ１４５ａを更新する（Ｓ４０４）。具体的には、管理部１５２ａは、第１更新要求に含まれる論理アドレスに、第１更新要求に含まれる新物理アドレスを対応付ける。Ｓ４０４の処理の後、管理部１５２ａは、第２テーブルキャッシュ１４５ａのうちの更新されたエントリをダーティとして設定する（Ｓ４０５）。また、第１テーブルキャッシュ１４３のうちの、更新された第２テーブルキャッシュ１４５ａの格納位置を示すエントリを、ダーティとして設定する（Ｓ４０６）。
【００７７】
第１更新要求の受信がない場合（Ｓ４０１、Ｎｏ）、またはＳ４０６の処理の後、管理部１５２ａは、第２更新要求の受信があったか否かを判定する（Ｓ４０７）。第２更新要求の受信があった場合（Ｓ４０７、Ｙｅｓ）、管理部１５２ａは、第２更新要求に含まれる論理アドレスの翻訳のための第２テーブル１２１３がLUTキャッシュ領域１４４にキャッシュされているか否かを判定する（Ｓ４０８）。該当の第２テーブル１２１３がLUTキャッシュ領域１４４にキャッシュされていない場合（Ｓ４０８、Ｎｏ）、管理部１５２ａは、該当の第２テーブル１２１３を、第２テーブルキャッシュ１４５ａとしてLUTキャッシュ領域１４４に読み出す（Ｓ４０９）。管理部１５２ａは、第２テーブルキャッシュ１４５ａのポインタ２１０およびAW  ID２１１に「NULL」を記録する。
【００７８】
該当の第２テーブル１２１３がLUTキャッシュ領域１４４にキャッシュされている場合（Ｓ４０８、Ｙｅｓ）、またはＳ４０９の処理の後、管理部１５２ａは、第２更新要求に含まれるAW  IDによって示されるスレッドに関する第２テーブルキャッシュ１４５ｂ（以降、対象の第２テーブルキャッシュ１４５ｂ）がLUTキャッシュ領域１４４にキャッシュされているか否かを判定する（Ｓ４１０）。Ｓ４１０の処理においては、管理部１５２ａは、第２テーブルキャッシュ１４５ａから順番に、ポインタ２１０をたどることによって、第２更新要求に含まれるAW  IDと同じAW  ID２１１が記録された第２テーブルキャッシュ１４５ｂを検索する。
【００７９】
対象の第２テーブルキャッシュ１４５ｂがLUTキャッシュ領域１４４にキャッシュされていない場合（Ｓ４１０、Ｎｏ）、管理部１５２ａは、LUTキャッシュ領域１４４の空き領域に第２テーブルキャッシュ１４５ａを複製することによって対象の第２テーブルキャッシュ１４５ｂを生成する（Ｓ４１１）。対象の第２テーブルキャッシュ１４５ｂのポインタ２１０にはNULLが記録される。対象の第２テーブルキャッシュ１４５ｂのAW  ID２１１に第２更新要求に含まれるAW  IDが記録される。
【００８０】
Ｓ４１１の処理の後、管理部１５２ａは、リスト構造を構成する各ポインタ２１０を更新する（Ｓ４１２）。具体的には、例えば、管理部１５２ａは、リスト構造の終端のポインタ２１０を、対象の第２テーブルキャッシュ１４５ｂの格納位置を示すアドレスで上書きする。対象の第２テーブルキャッシュ１４５ｂがLUTキャッシュ領域１４４にキャッシュされている場合（Ｓ４１０、Ｙｅｓ）、またはＳ４１２の処理の後、管理部１５２ａは、対象の第２テーブルキャッシュ１４５ｂを更新する（Ｓ４１３）。具体的には、管理部１５２ａは、第２更新要求に含まれる論理アドレスに、第２更新要求に含まれる新物理アドレスを対応付ける。
【００８１】
第２更新要求の受信がない場合（Ｓ４０７、Ｎｏ）、またはＳ４１３の処理の後、管理部１５２ａは、更新確定要求の受信があったか否かを判定する（Ｓ４１４）。更新確定要求の受信があった場合（Ｓ４１４、Ｙｅｓ）、管理部１５２ａは、更新確定要求に含まれるAW  IDをAW  ID２１１として含む全ての第２テーブルキャッシュ１４５ｂを、夫々対応する第２テーブルキャッシュ１４５ａに反映させる（Ｓ４１５）。
【００８２】
Ｓ４１５の処理の具体例を下記に説明する。管理部１５２ａは、更新確定要求に含まれるAW  IDをAW  ID２１１として含む１つの第２テーブルキャッシュ１４５ｂに着目する。管理部１５２ａは、着目された第２テーブルキャッシュ１４５ｂのエントリを、当該着目された第２テーブルキャッシュ１４５ｂが生成されてから更新されたエントリと更新されていないエントリとに分類する。管理部１５２ａは、更新されていないエントリに、複製元の第２テーブルキャッシュ１４５ａに記録された値を上書き形式で書き込む。管理部１５２ａは、着目された第２テーブルキャッシュ１４５ｂのAW  ID２１１にNULLを記録し、第１テーブルキャッシュ１４３を、着目された第２テーブルキャッシュ１４５ｂを示すように更新する。これにより、着目された第２テーブルキャッシュ１４５ｂは、以降、第２テーブルキャッシュ１４５ａとして扱われる。元の第２テーブルキャッシュ１４５ａは、例えば消去される。管理部１５２ａは、リスト構造を構成する各ポインタ２１０を更新する。管理部１５２ａは、更新確定要求に含まれるAW  IDをAW  ID２１１として含む全ての第２テーブルキャッシュ１４５ｂの夫々に着目し、着目された夫々の第２テーブルキャッシュ１４５ｂについて上記の一連の処理を実行する。
【００８３】
Ｓ４１５の処理の後、管理部１５２ａは、Ｓ４１５の処理の対象となった全ての第２テーブルキャッシュ１４５ａをダーティとして設定する（Ｓ４１６）。また、第１テーブルキャッシュ１４３のうちの、Ｓ４１５の処理の対象となった第２テーブルキャッシュ１４５ａの格納位置を示す全てのエントリを、ダーティとして設定する（Ｓ４１７）。
【００８４】
更新確定要求の受信がない場合（Ｓ４１４、Ｎｏ）、またはＳ４１７の処理の後、管理部１５２ａは、翻訳要求の受信があったか否かを判定する（Ｓ４１８）。翻訳要求の受信があった場合（Ｓ４１８、Ｙｅｓ）、管理部１５２ａは、翻訳要求に含まれる論理アドレスにかかる第２テーブル１２１３がLUTキャッシュ領域１４４にキャッシュされているか否かを判定する（Ｓ４１９）。該当の第２テーブル１２１３がLUTキャッシュ領域１４４にキャッシュされていない場合（Ｓ４１９、Ｎｏ）、管理部１５２ａは、該当の第２テーブル１２１３を、第２テーブルキャッシュ１４５ａとしてLUTキャッシュ領域１４４に読み出す（Ｓ４２０）。管理部１５２ａは、第２テーブルキャッシュ１４５ａのポインタ２１０およびAW  ID２１１に「NULL」を記録する。該当の第２テーブル１２１３がLUTキャッシュ領域１４４にキャッシュされている場合（Ｓ４１９、Ｙｅｓ）、またはＳ４２０の処理の後、管理部１５２ａは、第２テーブルキャッシュ１４５ａに基づいて翻訳要求に含まれる論理アドレスを物理アドレスに翻訳する（Ｓ４２１）。管理部１５２ａは、翻訳によって得られた物理アドレスをデータ処理部１５１ａに返す。翻訳要求の受信がない場合（Ｓ４１８、Ｎｏ）、またはＳ４２１の処理の後、管理部１５２ａは、Ｓ４０１の処理を再び実行する。
【００８５】
このように、第２の実施形態においては、管理部１５２ａは、第２テーブルキャッシュ１４５ａを複製することによって第２テーブルキャッシュ１４５ｂを生成する。管理部１５２ａは、アトミックライトモードのライトコマンドによって書き込み要求されたユーザデータがNANDメモリ１２に書き込まれる際には、第２テーブルキャッシュ１４５ｂを使用する。アトミックライトモードの終了の際には、管理部１５２ａは、第２テーブルキャッシュ１４５ｂを第２テーブルキャッシュ１４５ａに反映する。スレッドが終了するまで第２テーブルキャッシュ１４５ａはアトミックライトモードのライトコマンドの処理によって更新されないので、スレッドが中断された場合、かつ、当該中断されたスレッドのライトコマンドによって書き込み要求され、かつ、NANDメモリ１２に書き込み済みのユーザデータが存在する場合、当該ユーザデータの格納位置を示す物理アドレスは、第２テーブルキャッシュ１４５ａによって論理アドレスに対応付けられていない状態となっている。したがって、スレッドが中断された時点の第２テーブルキャッシュ１４５ａが復元されたとしても、復元された第２テーブルキャッシュ１４５ａの状態はスレッドが開始されていない状態であるので、アトミックライトの動作が実現する。
【００８６】
なお、データ処理部１５１がスレッドの終了時まで更新要求をキューイングし、スレッドの終了時に管理部１５２がキューイングされている全ての更新要求を実行する場合、管理部１５２は、更新要求毎に翻訳情報にアクセスする必要がある。これに対し、第２の実施形態によれば、スレッドの終了時には、管理部１５２ａは、リージョン単位で翻訳情報の反映を実行するため、スレッドの終了時の翻訳情報の更新をより早く完了することができる。
【００８７】
また、管理部１５２ａは、リードコマンドによって読み出し要求されたユーザデータ１２２１のNANDメモリ１２からの読み出しの際には、第２テーブルキャッシュ１４５ａを使用する。これにより、スレッドの実行中であっても、スレッドが開始されない状態の翻訳情報に基づいてNANDメモリ１２からのユーザデータ１２２１の読み出しが実行可能である。
【００８８】
また、管理部１５２ａは、アトミックライトモードでないライトコマンドによって書き込み要求されたユーザデータのNANDメモリ１２への書き込みの際には、第２テーブルキャッシュ１４５ａを使用する。これにより、スレッドの実行中であっても、スレッドが開始されない状態の翻訳情報に基づいてNANDメモリ１２へのユーザデータの書き込みが実行可能である。
【００８９】
なお、管理部１５２ａは、エンドコマンドの受信に応じて第２テーブルキャッシュ１４５ｂを第２テーブルキャッシュ１４５ａに反映する。スレッドの終了後に第２テーブルキャッシュ１４５ｂが第２テーブルキャッシュ１４５ａに反映せしめられるので、メモリシステム１は、スレッドの終了前は、スレッドのライトコマンドによって書き込み要求された何れのユーザデータも書き込まれない状態に保たれ、スレッドの終了後に、スレッドのライトコマンドによって書き込み要求された全てのユーザデータが書き込まれた状態に移行する。即ち、アトミックライトの動作が実現する。
【００９０】
管理部１５２ａは、スレッドのライトコマンドによって書き込み要求された１以上のユーザデータのうちの最後に書き込み要求されたユーザデータのNANDメモリ１２への書き込みに対応して第２テーブルキャッシュ１４５ｂを更新した後に、当該第２テーブルキャッシュ１４５ｂを第２テーブルキャッシュ１４５ａに反映する。
【００９１】
データ処理部１５１ａは、複数のスレッドのライトコマンドを並行して受信することができる。管理部１５２ａは、スレッド毎に第２テーブルキャッシュ１４５ｂを生成する。これにより、メモリシステム１ａは、複数のスレッドのアトミックライトの動作を実現することが可能となる。
【００９２】
エンドコマンドは、対応するスレッドを特定するための識別情報を含む。これによりメモリシステム１は、終了の対象のスレッドをエンドコマンドが含む識別情報に基づいて特定することが可能である。
【００９３】
メモリシステム１が外部に提供する論理アドレス空間のサイズは、表記容量と呼ばれる。メモリシステム１の表記容量は、ユーザデータ１２２１が書き込み可能な領域（即ちユーザデータ領域１２２）の容量よりも小さい。ユーザデータ領域１２２には、翻訳情報によって格納位置が論理アドレスに対応付けられているユーザデータ１２２１と、翻訳情報によって格納位置が論理アドレスに対応付けられていないユーザデータ１２２１と、が格納されるからである。ユーザデータ領域１２２の容量から表記容量を減算して得られる容量は、余裕容量と呼ばれる。ユーザデータ領域１２２は、翻訳情報によって格納位置が論理アドレスに対応付けられていないユーザデータ１２２１を、最大で余裕容量までため込むことができる。第１の実施形態においては、処理中の全てのスレッドによってホスト２から受け付け可能なユーザデータの合計容量は、余裕容量を超えることができない。即ち、データ処理部１５１ａがスレッドの最後の第１データまでに受信可能なユーザデータの当該スレッドの最初のユーザデータからの合計のサイズは、メモリシステム１ａの余裕容量以下である。
【００９４】
（第３の実施形態）
図１３は、メモリシステム１の実装例を示す図である。メモリシステム１は、例えばサーバシステム１０００に実装される。サーバシステム１０００は、ディスクアレイ２０００とラックマウントサーバ３０００とが通信インタフェース４０００によって接続されて構成される。通信インタフェース４０００の規格としては任意の規格が採用可能である。ラックマウントサーバ３０００は、サーバラックに１以上のホスト２がマウントされて構成される。複数のホスト２は、通信インタフェース４０００を介してディスクアレイ２０００にアクセスすることができる。
【００９５】
また、ディスクアレイ２０００は、サーバラックに１以上のメモリシステム１がマウントされて構成される。ディスクアレイ２０００は、メモリシステム１の他に、１以上のハードディスクユニットがマウントされてもよい。各メモリシステム１は、各ホスト２からのコマンドを実行することができる。また、各メモリシステム１は、第１または第２の実施形態が採用された構成を有している。これにより、各メモリシステム１は、簡単にアトミックライトを実行することができる。
【００９６】
なお、ディスクアレイ２０００においては、例えば、各メモリシステム１は、１以上のハードディスクユニットのキャッシュとして使用されてもよい。ディスクアレイ２０００は、１以上のメモリシステム１を利用してＲＡＩＤを構築するストレージコントローラユニットがマウントされてもよい。
【００９７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９８】
１，１ａ  メモリシステム、２  ホスト、１２  NANDメモリ、１５  制御部、１２１  管理情報領域、１２２  ユーザデータ領域、１４１  ライトバッファ、１４３  第１テーブルキャッシュ、１４４  LUTキャッシュ領域、１４５，１４５ａ，１４５ｂ  第２テーブルキャッシュ、１５１，１５１ａ  データ処理部、１５２，１５２ａ  管理部、１０００  サーバシステム、１２１１  第１テーブル、１２１２  LUT領域、１２１３  第２テーブル、１２２１  ユーザデータ、１２２２  ログ情報、１２２３  書き込みログ、２０００  ディスクアレイ、３０００  ラックマウントサーバ、４０００  通信インタフェース。
【図１】
2018206415.tif 000003
【図２】
2018206415.tif 000004
【図３】
2018206415.tif 000005
【図４】
2018206415.tif 000006
【図５】
2018206415.tif 000007
【図６】
2018206415.tif 000008
【図７】
2018206415.tif 000009
【図８】
2018206415.tif 000010
【図９】
2018206415.tif 000011
【図１０】
2018206415.tif 000012
【図１１】
2018206415.tif 000013
【図１２】
2018206415.tif 000014
【図１３】
2018206415.tif 000015