(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0009】
(第1の実施形態)
図1は、第1の実施形態によるメモリシステムの構成の一例を示す図である。このメモリシステム1は、例えば、SSD(Solid State Drive)である。以下では、不揮発性メモリとしてNAND型のフラッシュメモリ(以下、NANDメモリという)を用いる場合を例に挙げる。
【0010】
メモリシステム1は、ホスト2と接続可能に構成されている。例えばCPU(Central Processing Unit)、パーソナルコンピュータ、携帯用情報機器、サーバ、等がホスト2に該当する。メモリシステム1とホスト2との間の通信のインタフェース規格としては、任意のインタフェース規格が採用可能である。2以上のホスト2がメモリシステム1に同時に接続されてもよい。ホスト2とメモリシステム1とは、ネットワークを介して接続されてもよい。
【0011】
メモリシステム1は、ホスト2からのアクセス要求に応じてホスト2との間でデータの送受信を実行する。アクセス要求は、ライトコマンドおよびリードコマンドを含む。アクセス要求は、アクセス位置を論理的に示すアドレス情報を含む。アドレス情報としては、例えばLBA(Logical Block Address)が採用可能である。また、例えばメモリシステム1とホスト2との間の通信のインタフェース規格としてNVMeが採用される場合には、アドレス情報は、ネームスペースの識別情報とLBAとが含まれていてもよい。ネームスペースとは、ネームスペースの識別情報によって特定される論理アドレス空間である。即ち、NVMeが採用される場合には、メモリシステム1は、複数の論理アドレス空間を管理することが可能である。
【0012】
メモリシステム1は、ホスト2からアトミックライトのモードのライトコマンドを受信することができる。アトミックライトとは、書き込みのモードのうちの1つである。アトミックライトのモードによれば、そのモードで書き込み要求されたユーザデータの受信が中断された場合には、そのモードで書き込み要求されたデータの書き込みを開始する直前の状態に戻ることが要求される。アトミックライトのモードが開始されてから終了するまでの間に書き込み要求された1以上のユーザデータについては、ホスト2の視点からみると、全てのユーザデータが書き込まれるか、または、1つのユーザデータも書き込まれない。
【0013】
図2は、アトミックライトのモードのライトコマンドが送受信される一例を示す図である。アトミックライトのモードを、アトミックライトモード、と表記する。ホスト2は、アトミックライトモードのライトコマンドを送信する前に、アトミックライトのスタートコマンドを送信する(S101)。アトミックライトのスタートコマンドは、アトミックライトID(AW ID)が付されている。メモリシステム1は、複数のスレッドのアトミックライトを実行することができる。AW IDは、スレッドを区別するための識別情報である。スレッドとは、アトミックライトがスタートしてからアトミックライトが終了するまでに時系列順に発行される、アトミックライトモードの複数のライトコマンドの組み合わせである。メモリシステム1は、複数のスレッドが並行して入力されている場合には、各スレッドは、夫々個別に終了される。複数のスレッドのうちの一のスレッドは、前記一のスレッドを終了するためのエンドコマンドによって終了が要求される。
【0014】
なお、スレッドは、AW IDとは異なる情報によって識別されるようにメモリシステム1が構成されてもよい。例えば、アトミックライトの対象の空間がスレッド毎に論理アドレスによって指定されてもよい。例えば、1つのネームスペースには2以上のスレッドが実行できないように制約される場合には、スレッドは、ネームスペースの識別情報によって識別可能である。
【0015】
S101においては、ホスト2は、例えば、AW ID="0"のスレッドを開始する。ホスト2は、スタートコマンドの送信後に、そのスタートコマンドによって開始されたスレッドに属する、アトミックライトモードのライトコマンドを送信することができる(S102)。アトミックライトモードのライトコマンドは、AW IDを含む。メモリシステム1は、アトミックライトモードのライトコマンドに含まれるAW IDに基づいて、そのライトコマンドが属するスレッドを識別することができる。ホスト2は、アトミックライトモードのライトコマンドの間に、通常のライトコマンド、即ちアトミックライトモードでないライトコマンドを送信することができる(S103)。アトミックライトモードでないライトコマンドは、AW IDを含まない。または、アトミックライトモードでないライトコマンドは、AW IDとして無効値(例えば「NULL」)が含まれていてもよい。ホスト2は、1つのスレッドを終える前に、他のスレッドを開始するスタートコマンドを送信したり(S104)、前記他のスレッドのライトコマンドを送信したりすることができる(S105)。他のスレッドのライトコマンドとは、他のスレッドに属するライトコマンドの意である。S105の処理では、AW ID="0"のスレッドの終了前に、AW ID="1"のスレッドが開始されている。ホスト2は、AW ID="0"のスレッドを終了する前に、AW ID="1"のスレッドを終了するためのエンドコマンドを送信することができる(S106)。エンドコマンドがAW IDを含んでいることによって、メモリシステム1は、終了するスレッドを認識することができる。なお、ホスト2は、AW ID="1"のスレッドを終了する前にAW ID="0"のスレッドを終了するエンドコマンドを送信することも可能である。
図2の例においては、ホスト2は、再びAW ID="0"のスレッドのライトコマンドを送信し(S107)、その後、AW ID="0"のスレッドを終了するエンドコマンドを送信している(S108)。
【0016】
メモリシステム1は、ホストインタフェース部11、NANDメモリ12、NANDコントローラ13、RAM(Random Access Memory)14、および制御部15を備える。
【0017】
制御部15は、例えばCPU(Central Processing Unit)などの演算装置によって構成される。制御部15は、予めメモリシステム1内の所定の位置に格納されているプログラムを実行することによって、データ処理部151および管理部152として機能する。プログラムの格納位置は任意に設計される。例えば、プログラムは、予めNANDメモリ12に格納され、起動時にRAM14にロードされる。制御部15は、RAM14にロードされたプログラムを実行する。データ処理部151の機能のうちの一部または全部はハードウェアによって実現されてもよい。管理部152の機能のうちの一部または全部はハードウェアによって実現されてもよい。
【0018】
データ処理部151は、ホスト2とNANDメモリ12との間のデータ転送を実行する。データ処理部151は、NANDメモリ12にユーザデータを書き込む場合には、当該ユーザデータに対応する書き込みログ1223(後述する)をNANDメモリ12に書き込む。
【0019】
管理部152は、管理情報の管理を実行する。管理情報は、翻訳情報、統計情報、ブロック情報、などを含む。翻訳情報は、論理アドレスとNANDメモリ12内の物理的な位置を示すアドレス情報(物理アドレス)との対応関係を記録した情報である。統計情報は、メモリシステム1の使用状況、パワーオン時間、電源断の回数、などを記録した情報である。ブロック情報は、例えば、書き換え回数、有効なデータ数、などを、物理ブロック(後述する)毎に記録した情報である。管理部152は、論理アドレスと物理アドレスとの間の翻訳を実行する。
【0020】
管理部152は、スレッドが中断された場合に、翻訳情報を、そのスレッドが開始される前の状態に戻す処理(以降、巻き戻し処理)を実行する。スレッドが中断されるとは、そのスレッドを構成する一連のライトコマンドによって書き込み要求されたユーザデータの全部をNANDメモリ12に書き込めない事象をいう。例えば、スレッドの受信の途中でメモリシステム1が電源断された場合に、そのスレッドが中断される。
【0021】
ホストインタフェース部11は、ホスト2と通信を行うためのインタフェース装置である。例えばホストインタフェース部11は、データ処理部151の制御下で、ホスト2とRAM14との間のユーザデータの転送を実行する。
【0022】
NANDコントローラ13は、NANDメモリ12に対するアクセスを行うためのインタフェース装置である。NANDコントローラ13は、制御部15による制御下で、RAM14とNANDメモリ12との間のユーザデータまたは管理情報の転送を実行する。詳細を省略するが、NANDコントローラ13は、誤り訂正処理を行うことができる。
【0023】
NANDメモリ12は、ストレージとして機能する不揮発性の記憶媒体である。NANDメモリ12は、1以上のチップによって構成される。
【0024】
図3は、第1の実施形態におけるNANDメモリ12でのデータの処理単位と位置の管理単位とを模式的に示す図である。NANDメモリ12を構成するチップの内部において、データの記憶領域は、複数の物理ブロックによって構成される。各物理ブロックは、複数の物理ページによって構成される。物理ページは、ライトおよびリードのアクセスが可能な単位である。物理ブロックは、一括してデータの消去が可能な最小単位が物理ブロックである。
【0025】
データの記憶領域には、1物理ページより小さい単位に対して物理アドレスが割り当てられる。ここでは、物理アドレスが割り当てられる単位を、クラスタ、と表記する。翻訳情報は、クラスタ単位で管理される。1クラスタのサイズは、ホスト2からの最小のアクセス単位と等しくてもよいし異なっていてもよい。
図3の例では、1物理ページは10個のクラスタで構成されるものとされている。
図3の例では、1物理ブロックは、n(nは自然数)個の物理ページで構成されるものとされている。
【0026】
RAM14は、データを一時的に記憶するための記憶媒体である。RAM14としては、例えば、NANDメモリ12よりも高速な種類の記憶媒体が採用可能である。RAM14としては、例えば、揮発性または不揮発性の記憶媒体が採用可能である。RAM14としては、例えば、DRAM(Dynamic RAM)、SRAM(Static RAM)、FeRAM(Ferroelectric RAM)、MRAM(Magnetoresistive RAM)、PRAM(Phase change RAM)などが採用可能である。
【0027】
NANDメモリ12には、管理情報領域121およびユーザデータ領域122が確保されている。各領域121、122は、例えば、複数の物理ブロックによって構成される。ユーザデータ領域122は、ホスト2から書き込み要求された1以上のデータ(ユーザデータ1221)およびログ情報1222が格納される。ここでは、各ユーザデータ1221のサイズはクラスタのサイズである、として説明する。
【0028】
管理情報領域121は、第1テーブル1211が格納される。また、管理情報領域121は、1以上の第2テーブル1213が格納されるLUT領域1212が確保されている。LUT領域1212は、例えば複数の物理ブロックによって構成される。第1テーブル1211および1以上の第2テーブル1213は、翻訳情報を構成する。
【0029】
RAM14は、ライトバッファ141、リードバッファ142、およびLUTキャッシュ領域144が確保されている。また、RAM14は、第1テーブルキャッシュ143が格納される。
【0030】
ライトバッファ141およびリードバッファ142は、ホスト2とNANDメモリ12との間のデータ転送のバッファである。ライトバッファ141およびリードバッファ142は、FIFOのルールに従ってデータが入出力される。ライトバッファ141は、ホストインタフェース部11がホスト2から受信したユーザデータが格納される。ライトバッファ141に格納されたユーザデータは、NANDコントローラ13によってユーザデータ領域122に書き込まれる。リードバッファ142は、NANDコントローラ13によって、ユーザデータ領域122から読み出されたユーザデータ1221が格納される。リードバッファ142に格納されたユーザデータ1221は、ホストインタフェース部11によってホスト2に転送される。
【0031】
第1テーブル1211および1以上の第2テーブル1213は、RAM14にキャッシュされ、RAM14上で更新される。LUTキャッシュ領域144は、第2テーブル1213がキャッシュされる領域である。LUTキャッシュ領域144にキャッシュされた第2テーブル1213を、第2テーブルキャッシュ145と表記する。第1テーブルキャッシュ143は、RAM14にキャッシュされた第1テーブル1211である。
【0032】
図4、
図5、および
図6を用いることによって、翻訳情報を説明する。管理部152は、翻訳情報を、2以上の階層に階層化する。ここでは一例として、管理部152は、翻訳情報を2階層のテーブル群として管理する。第1テーブル1211および第1テーブルキャッシュ143は、第1階層目のテーブルに該当する。1以上の第2テーブル1213および1以上の第2テーブルキャッシュ145は第2階層目のテーブルに該当する。
【0033】
管理部152は、論理アドレス空間を複数の部分空間に分割する。部分空間を、リージョン(Region)と表記する。
図4は、リージョンを説明する図である。各リージョンは、論理アドレスが連続する複数のクラスタを含む。ここでは、各リージョンは、m(mは自然数)個のクラスタを含む。各リージョンは、リージョン番号(Region No.)によって識別される。リージョン番号は、例えば、論理アドレスを右方向にシフトすることによって得られる。リージョン#iは、論理アドレスi*mから論理アドレス((i+1)*m-1)までの範囲である。リージョン内のアドレスは、リージョンの先頭からのオフセットによって表現される。論理アドレスの所定の桁よりも上位桁がリージョン番号に相当し、論理アドレスの前記所定の桁よりも下位桁がリージョン内のアドレスに相当する。
【0034】
図5は、第1テーブルキャッシュ143、第2テーブル1213、および第2テーブルキャッシュ145を説明する図である。第1テーブルキャッシュ143は、リージョン毎にテーブルアドレスが記録される。テーブルアドレスとは、第2テーブル1213または第2テーブルキャッシュ145の格納位置を物理的に示すアドレス情報である。ここでは、第1テーブルキャッシュ143は、第2テーブルキャッシュ145の格納位置を示すRAM14内のテーブルアドレスと、第2テーブル1213の格納位置を示すNANDメモリ12内のテーブルアドレスと、の両方が、リージョン毎に記録される。あるリージョンに関して第2テーブルキャッシュ145がキャッシュされていない場合には、当該リージョンに対応する第2テーブルキャッシュ145の格納位置のテーブルアドレスとして、無効値(例えば「NULL」)が記録される。管理部152は、RAM14内のテーブルアドレスとして「NULL」が記録されているか否かに基づいて、前記あるリージョンに関して第2テーブルキャッシュ145がキャッシュされているか否かを判定することができる。なお、各リージョンに関して第2テーブルキャッシュ145がキャッシュされているか否かの管理は、上記の手法に限定されない。
【0035】
図6は、第2テーブル1213のデータ構成例を示す図である。第2テーブル1213および第2テーブルキャッシュ145は、例えば同じデータ構成を有している。第2テーブル1213は、ユーザデータ1221の格納位置を物理的に示すアドレス(データアドレス)が、リージョン内のアドレス毎に記録される。各リージョンがm個のクラスタによって構成される場合には、第2テーブル145は、少なくともm個のエントリを備える。物理アドレスが対応づけられていない論理アドレスに対しては、第2テーブル145に無効値(例えば「NULL」)が記録される。
【0036】
管理部152は、NANDメモリ12からRAM14に翻訳情報を読み出して、RAM14に読み出された翻訳情報を使用する。使用するとは、更新することおよび参照することを含む。管理部152は、例えば、第1テーブル1211の全エントリを第1テーブルキャッシュ143としてRAM14に読み出す。管理部152は、例えば、LUT領域1212に格納されている1以上の第2テーブル1213のうち、少なくとも使用の対象のエントリを含む第2テーブル1213をLUTキャッシュ領域144に読み出す。
【0037】
管理部152がRAM14に読み出された翻訳情報を更新することによって、RAM14に格納されている翻訳情報は、NANDメモリ12に格納されている翻訳情報と異なる状態になる。NANDメモリ12に格納されている翻訳情報と異なるRAM14に格納されている翻訳情報の状態を、ダーティと表記する。管理部152は、翻訳情報のうちのダーティな部分を所定のタイミングでNANDメモリ12に書き込む。翻訳情報のうちのダーティな部分は、NANDメモリ12に書き込まれることによって、非ダーティの状態に遷移する。ダーティであるか非ダーティであるかの管理の単位は任意に設計される。管理部152は、例えば、第1テーブルキャッシュ143に関し、エントリ毎にダーティであるか非ダーティであるかを管理する。管理部152は、例えば、第2テーブルキャッシュ145毎にダーティであるか非ダーティであるかを管理する。
【0038】
例えば、データ処理部151は、ライトバッファ141からNANDメモリ12にユーザデータを書き込む際に、ユーザデータの位置を示す論理アドレスに関し、当該論理アドレスと物理アドレスとの対応関係を更新するための更新要求を、管理部152に送信する。管理部152は、更新要求によって指定される論理アドレスを含む第2テーブルキャッシュ145を、当該更新要求に基づいて更新する。管理部152は、更新した第2テーブルキャッシュ145を、ダーティとして管理する。また、管理部152は、第1テーブルキャッシュ143のレコードのうち、ダーティな第2テーブルキャッシュ145を指すレコードを、ダーティとして管理する。管理部152は、ダーティな第2テーブルキャッシュ145をLUT領域1212に書き込んだ後、当該第2テーブルキャッシュ145を非ダーティとして管理する。管理部152は、第1テーブルキャッシュ143のレコードのうちのダーティなレコードを第2テーブルキャッシュ145のLUT領域1212への書き込みに応じて更新後、更新したレコードを管理情報領域121に書き込む。管理部152は、更新したレコードを管理情報領域121に書き込んだ後、当該レコードを非ダーティとして管理する。
【0039】
翻訳情報のうちのダーティな部分をNANDメモリ12に書き込むタイミングは、任意に設計される。例えば、翻訳情報のうちのダーティな部分の合計サイズに基づいてタイミングが決定される。例えば、翻訳情報のうちのダーティな部分の合計サイズが所定のしきい値を超えたタイミングで前記ダーティな部分のうちの一部または全部がNANDメモリ12に書き込まれる。また、電源断時には、翻訳情報のうちの少なくともダーティな部分がNANDメモリ12に書き込まれる。メモリシステム1がバッテリを具備する場合には、電源断時には、管理部152は、当該バッテリに蓄えられたエネルギーによって駆動されてもよい。電源断時には、翻訳情報のうちの少なくともダーティな部分は、管理情報領域121に書き込まれる。NANDメモリ12が緊急に管理情報を退避するための領域(緊急退避領域)を管理情報領域121およびユーザデータ領域122の他に有する場合には、翻訳情報のうちの少なくともダーティな部分は、緊急退避領域に書き込まれ得る。このように、管理部152は、翻訳情報のうちのダーティな部分を可能な限り喪失しないように、RAM14内の翻訳情報を管理する。
【0040】
なお、第1テーブル1211は、第1テーブルキャッシュ143と同一のデータ構成を有していてもよいし、LUTキャッシュ領域144内のテーブルアドレスの記録が省略されたデータ構成を有していてもよい。
【0041】
図7は、ログ情報1222のデータ構成例を示す図である。ログ情報1222は、1以上の書き込みログ1223を含む。各書き込みログ1223は、ユーザデータ1221がNANDメモリ12に書き込まれた際の論理アドレスと物理アドレスとの対応関係を、クラスタ単位で示す情報である。例えば、1つのログ情報1222は、対応する1つの物理ページに含まれる全てのクラスタの書き込みログ1223を含む。ログ情報1222は、何れかのユーザデータ1221と対応する。例えば、ログ情報1222は、各物理ブロック内の所定位置のクラスタ(たとえば最後のクラスタ)に書き込まれる。本実施形態では、アトミックライトモードのスレッドが中断された場合に当該スレッドの最初のライトコマンドによって書き込み要求されたユーザデータをNANDメモリ12に書き込む前の状態に翻訳情報を戻すための情報が、書き込みログ1223に付加されている。
【0042】
書き込みログ1223は、論理アドレス200、旧物理アドレス201、新物理アドレス202、AW ID203、およびStart End Flag204を含む。旧物理アドレス201は、ユーザデータ1221の書き込み前に論理アドレス200に対応づけられていた物理アドレスである。新物理アドレス202は、対応するユーザデータ1221が書き込まれることによって論理アドレス200に新たに対応付けられた物理アドレスである。言い換えると、新物理アドレス202は、対応するユーザデータ1221が書き込まれた位置を示す物理アドレスである。AW ID203は、アトミックライトモードで書き込み要求されたユーザデータ1221、の書き込みログ1223に付される。AW ID203は、アトミックライトモードのライトコマンドに含まれるAW IDと等しい。Start End Flag204は、スレッドの最初に書き込まれたユーザデータ1221であるか否かを示すスタートフラグと、スレッドの最後に書き込まれたユーザデータ1221であるか否かを示すエンドフラグと、の組み合わせである。即ち、Start End Flag204は、少なくとも2ビットのサイズを有する。Start End Flag204は、スタートコマンドおよびエンドコマンドに基づいて操作される。
【0043】
アトミックライトモードでないライトコマンドによって書き込み要求されたユーザデータをライトバッファ141からNANDメモリ12に書き込む場合について下記に説明する。データ処理部151は、書き込みログ1223に、論理アドレス200、旧物理アドレス201、および新物理アドレス202を書き込む。データ処理部151は、AW ID203およびStart End Flag204を使用しない。例えば、データ処理部151は、AW ID203には無効値(「NULL」など)を記録する。データ処理部151は、Start End Flag204には、スタートフラグもエンドフラグも立てない。
【0044】
アトミックライトモードのライトコマンドによって書き込み要求されたユーザデータをライトバッファ141からNANDメモリ12に書き込む場合について下記に説明する。データ処理部151は、書き込みログ1223に、論理アドレス200、旧物理アドレス201、および新物理アドレス202の他に、AW ID203を記録する。データ処理部151は、各スレッドの最初のライトコマンドによって書き込み要求されたユーザデータに対しては、書き込みログ1223のStart End Flag204に、スタートフラグを立てる。データ処理部151は、各スレッドの最後のライトコマンドによって書き込み要求されたユーザデータに対しては、書き込みログ1223のStart End Flag204に、エンドフラグを立てる。データ処理部151は、各スレッドに属するライトコマンドのうちの、各スレッドの最初のライトコマンドおよび各スレッドの最後のライトコマンドの何れにも該当しないライトコマンドによって書き込み要求されたユーザデータに対しては、Start End Flag204には、スタートフラグもエンドフラグも立てない。
【0045】
例えば、エンドコマンドは、データ処理部151によってライトバッファ141に格納される。データ処理部151は、アトミックライトモードのライトコマンドによって書き込み要求されたユーザデータをNANDメモリ12に書き込む際に、当該書き込み対象のユーザデータの後に当該書き込み対象のユーザデータと同一のスレッドのライトコマンドによって書き込み要求されたユーザデータの受信を介在することなくエンドコマンドの受信があったか否かを、ライトバッファ141を参照することによって判定する。書き込み対象のユーザデータと同一のスレッドのライトコマンドによって書き込み要求されたユーザデータの受信を介在することなくエンドコマンドの受信があった場合には、データ処理部151は、書き込み対象のユーザデータがスレッドの最後のライトコマンドによって書き込み要求されたユーザデータであると判定する。
【0046】
スレッドが中断された場合、当該中断されたスレッドのライトコマンドによって書き込み要求され、かつ、NANDメモリ12に書き込み済みのユーザデータが存在する場合、当該ユーザデータの格納位置を示す物理アドレスは、巻き戻し処理によって、論理アドレスに対応付けられた状態から論理アドレスに対応づけられていない状態に遷移する。論理アドレスに対応づけられていない状態のユーザデータは、ホスト2からアクセスすることが不可能である。したがって、ホスト2の視点から見ると、スレッドが中断されるまでにメモリシステム1に送信したユーザデータはNANDメモリ12に書き込まれなかったものとして見える。即ち、スレッドが中断された場合には、ホスト2の視点から見ると、メモリシステム1はそのスレッドが開始される前の状態に戻ったように見えるため、アトミックライトの動作が実現する。
【0047】
図8は、巻き戻し処理の一例を説明するフローチャートである。まず、管理部152は、スレッドの中断の発生時点での第1テーブルキャッシュ143をRAM14に復元する。
【0048】
続いて、管理部152は、中断の発生時に最後に書いた書き込みログ1223から、書き込み順とは逆順に、所定個数の書き込みログ1223を読み出す(S201)。管理部152は、読み出した所定個数の書き込みログ1223に基づいて、キャンセル対象のスレッドを特定する(S202)。
【0049】
具体的には、例えば、管理部152は、読み出した所定個数の書き込みログ1223から、全てのAW IDを抽出する。例えば、読み出した所定個数の書き込みログ1223がAW ID="0"が記録された書き込みログ1223、AW ID="1"が記録された書き込みログ1223、およびAW ID="2"が記録された書き込みログ1223、を含む場合には、管理部152は、AW ID="0"、AW ID="1"、およびAW ID="2"を抽出する。そして、管理部152は、読み出した所定個数の書き込みログ1223から、エンドフラグを有する書き込みログ1223を検索する。エンドフラグを有する書き込みログ1223が取得された場合には、管理部152は、エンドフラグを有する書き込みログ1223に記録されたAW IDを取得する。記録されたAW IDを除外することによって、中断されたスレッドを示すAW IDを取得する。管理部152は、中断されたスレッドをキャンセル対象のスレッドとして特定する。
【0050】
S202の処理の後、管理部152は、中断の発生時に最後に書いた書き込みログ1223を選択する(S203)。そして、管理部152は、選択された書き込みログ1223は、キャンセル対象のスレッドにかかる書き込みログ1223であるか否かを判定する(S204)。選択された書き込みログ1223は、中断されたスレッドにかかる書き込みログ1223であるか否かは、選択された書き込みログ1223に記録されたAW ID203が中断されたスレッドを示すAW IDの何れかに含まれるか否かに基づいて判定可能である。
【0051】
選択された書き込みログ1223がキャンセル対象のスレッドにかかる書き込みログ1223である場合(S204、Yes)、管理部152は、論理アドレス200と旧物理アドレス201とを取得する。そして、管理部152は、取得した論理アドレス200に翻訳情報において対応付けられた物理アドレスを、取得した旧物理アドレス201に変更する(S205)。
【0052】
例えば、管理部152は、取得した論理アドレス200にかかる対応関係を記録した第2テーブル1213の格納位置を、復元された第1テーブルキャッシュ143を参照することによって取得する。そして、管理部152は、取得された格納位置から第2テーブル1213を読み出して、読み出された第2テーブル1213をLUTキャッシュ領域144に第2テーブルキャッシュ145として格納する。管理部152は、第2テーブルキャッシュ145をLUTキャッシュ領域144に格納するに応じて、第1テーブルキャッシュ143を更新する。そして、管理部152は、第2テーブルキャッシュ145上で、S205の処理による変更を実行する。管理部152は、S205の処理によって変更された第2テーブルキャッシュ145を、ダーティとして管理する。管理部152は、第1テーブルキャッシュ143のレコードのうち、S205の処理によって変更された第2テーブルキャッシュ145を指すレコードを、ダーティとして管理する。
【0053】
S205の処理に続いて、管理部152は、選択された書き込みログ1223にスタートフラグが立っているか否かを判定する(S206)。選択された書き込みログ1223にスタートフラグが立っている場合(S206、Yes)、管理部152は、選択された書き込みログ1223に記録されたAW ID203が示すスレッドを、キャンセル対象のスレッドから削除する(S207)。選択された書き込みログ1223にスタートフラグが立っていない場合(S206、No)、またはS207の処理の後、管理部152は、キャンセル対象のスレッドがまだ存在するか否かを判定する(S208)。
【0054】
選択された書き込みログ1223がキャンセル対象のスレッドにかかる書き込みログ1223でない場合(S204、No)、またはキャンセル対象のスレッドがまだ存在する場合(S208、Yes)、管理部152は、現在選択中の書き込みログ1223よりも1つ前に書き込まれた書き込みログ1223を新たに選択し(S209)、新たに選択された書き込みログ1223についてS204の処理を実行する。キャンセル対象のスレッドが存在しない場合には(S208、No)、管理部152は、巻き戻し処理を終了する。
【0055】
このように、第1の実施形態によれば、データ処理部151は、ユーザデータのNANDメモリ12への書き込み毎に書き込みログ1223を記録する。また、データ処理部151は、アトミックライトのスタートおよびアトミックライトの終了を書き込みログ1223に記録する。管理部152は、スレッドが中断された場合には、書き込みログ1223を書き込み順とは逆の順番に読み出すことによって、翻訳情報をスレッドが中断される前の状態に戻す。これによって、アトミックライトの動作が実現する。
【0056】
なお、以上の説明によれば、データ処理部151は、ユーザデータを書き込み要求したライトコマンドがアトミックライトモードのライトコマンドであるかアトミックライトモードでないライトコマンドであるかに関わらず、そのユーザデータをNANDメモリ12に書き込む際に更新要求を発行する。データ処理部151は、ユーザデータを書き込み要求したライトコマンドがアトミックライトモードのライトコマンドである場合には更新要求を内部にキューイングしておき、内部にキューイングされた更新要求をエンドコマンドの受信を確認した後に管理部152に送信してもよい。これにより、スレッドの終了後に翻訳情報が更新されるので、巻き戻し処理を行うことなくアトミックライトの動作が実現する。
【0057】
また、以上の説明によれば、管理部152は、翻訳情報のうちのダーティな部分を可能な限り喪失しないように、RAM14内の翻訳情報を管理する。翻訳情報のうちのダーティな部分を喪失した場合には、管理部152は、例えば、書き込み順とは逆順に書き込みログ1223を参照することによって、翻訳情報を再構築する。管理部152は、翻訳情報を再構築する際には、キャンセル対象のスレッドを特定し、書き込み順とは逆順に書き込みログ1223を読み出す。管理部152は、キャンセル対象のスレッドにかかる書き込みログ1223ではない書き込みログ1223が読み出され、かつ、当該書き込みログ1223の論理アドレス200が翻訳情報において何れの物理アドレスにも対応付けられていない場合には、当該書き込みログ1223に記録されている論理アドレス200と当該書き込みログ1223に記録されている新物理アドレス202との対応関係を翻訳情報に上書き形式で記録する。管理部152は、キャンセル対象のスレッドにかかる書き込みログ1223が読み出された場合には、次の書き込みログ1223を読み出す。管理部152は、順次読み出された書き込みログ1223に対して上述の処理を行うことによって、翻訳情報を再構築する。
【0058】
(第2の実施形態)
図9は、第2の実施形態によるメモリシステムの構成の一例を示す図である。なお、第1の実施形態と同じ機能を有する構成要素には第1の実施形態と同じ名称および符号を付す。第1の実施形態と同じ機能を有する構成要素について、説明を省略する。
【0059】
メモリシステム1aは、ホスト2と接続可能である。メモリシステム1aは、複数のホスト2に接続可能に構成されてもよい。メモリシステム1aは、第1の実施形態のメモリシステム1と同様に、ホスト2からアトミックライトモードのライトコマンドを受信することができる。メモリシステム1aは、ホストインタフェース部11、NANDメモリ12、NANDコントローラ13、RAM14、および制御部15を備える。制御部15は、予めメモリシステム1a内の所定の位置に格納されているプログラムを実行することによって、データ処理部151aおよび管理部152aとして機能する。
【0060】
データ処理部151aは、ホスト2とNANDメモリ12との間のデータ転送を実行する。管理部152aは、管理情報の管理を実行する。管理情報は、翻訳情報、統計情報、ブロック情報、などを含む。管理部152aは、論理アドレスと物理アドレスとの間の翻訳を実行する。管理部152aは、翻訳情報のうちのダーティな部分を可能な限り喪失しないように、RAM14内の翻訳情報を管理する。
【0061】
NANDメモリ12には、管理情報領域121およびユーザデータ領域122が確保されている。ユーザデータ領域122は、1以上のユーザデータ1221およびログ情報1222が格納される。第2の実施形態においては、ログ情報1222は記録されなくてもよい。管理情報領域121は、第1テーブル1211が格納される。また、管理情報領域121は、1以上の第2テーブル1213が格納されるLUT領域1212が確保されている。RAM14は、ライトバッファ141、リードバッファ142、およびLUTキャッシュ領域144が確保されている。RAM14は、第1テーブルキャッシュ143が格納される。LUTキャッシュ領域144は、第2テーブル1213が格納される。
【0062】
図10は、第2テーブル1213の第2の実施形態のキャッシュを説明する図である。第2の実施形態においては、各リージョンの第2テーブル1213は、1つの第2テーブルキャッシュ145aとしてキャッシュされ得る。また、各リージョンの第2テーブル1213は、1つの第2テーブルキャッシュ145aとしてキャッシュされると同時に、1以上の第2テーブルキャッシュ145bとしてもキャッシュされ得る。各第2テーブルキャッシュ145bは、対応するリージョンの第2テーブルキャッシュ145aが複製されることによって生成される。あるリージョンに関する第2テーブルキャッシュ145bの個数は、そのリージョンの第2テーブル1213の使用を必要とするスレッドの数に等しい。即ち、スレッド毎に第2テーブルキャッシュ145bがキャッシュされる。
【0063】
第2テーブルキャッシュ145aおよび第2テーブルキャッシュ145bは、ポインタ210およびAW ID211が記録される。第2テーブルキャッシュ145bのAW ID211は、その第2テーブルキャッシュ145bの使用を必要とするスレッドを示す。
【0064】
第2テーブルキャッシュ145aの格納位置は、第1テーブルキャッシュ143によって示される。第2テーブルキャッシュ145bの格納位置は、第1テーブルキャッシュ143によって示されない。ポインタ210は、第2テーブルキャッシュ145aから、その第2テーブルキャッシュ145aを複製元とする1以上の第2テーブルキャッシュ145bの格納位置を参照するための、リスト構造を構成する。即ち、第2テーブルキャッシュ145aを複製元とする1以上の第2テーブルキャッシュ145bが存在する場合には、第2テーブルキャッシュ145aのポインタ210は、1以上の第2テーブルキャッシュ145bのうちの一の第2テーブルキャッシュ145bの格納位置を示す。他に第2テーブルキャッシュ145bが存在しない場合には、前記一の第2テーブルキャッシュ145bのポインタ210には、リスト構造の終端を示す値(例えば「NULL」)が記録される。他の1以上の第2テーブルキャッシュ145bが存在する場合には、前記一の第2テーブルキャッシュ145bのポインタ210は、他の1以上の第2テーブルキャッシュ145bのうちの一の第2テーブルキャッシュ145bの格納位置を示す。第2テーブルキャッシュ145aを複製元とする第2テーブルキャッシュ145bが存在しない場合には、その第2テーブルキャッシュ145aのポインタ210には、例えばリスト構造の終端を示す値が記録される。
【0065】
なお、第2テーブルキャッシュ145aと、その第2テーブルキャッシュ145aを複製元とする1以上の第2テーブルキャッシュ145bと、の対応関係の管理の手法は、ポインタ210のリスト構造を用いた管理の手法だけに限定されない。第2テーブルキャッシュ145aと、その第2テーブルキャッシュ145aを複製元とする1以上の第2テーブルキャッシュ145bと、の対応関係は、別途設けられたテーブルを用いて管理されてもよい。また、第1テーブルキャッシュ143に専用のエントリが設けられ、当該専用のエントリによって第2テーブルキャッシュ145aと、その第2テーブルキャッシュ145aを複製元とする1以上の第2テーブルキャッシュ145bと、の対応関係が管理されてもよい。ポインタ210は、双方向のポインタであってもよい。
【0066】
アトミックライトモードのライトコマンドによって書き込み要求されたユーザデータのNANDメモリ12への書き込みの際には、管理部152aは、対応するスレッドの第2テーブルキャッシュ145bを使用する。アトミックライトモードでないライトコマンドによって書き込み要求されたユーザデータのNANDメモリ12への書き込みの際、および、NANDメモリ12からのユーザデータのリードの際には、管理部152aは、第2テーブルキャッシュ145aを使用する。
【0067】
図11は、第2の実施形態のデータ処理部151aの動作を説明するフローチャートである。データ処理部151aは、ライトコマンドの受信があったか否かを判定する(S301)。ライトコマンドの受信があった場合(S301、Yes)、データ処理部151aは、当該ライトコマンドによって書き込み要求されたユーザデータをライトバッファ141に格納する(S302)。ライトコマンドの受信がない場合(S301、No)、データ処理部151aは、S302の処理をスキップする。
【0068】
続いて、データ処理部151aは、書き込みタイミングに至ったか否かを判定する(S303)。任意のタイミングを書き込みタイミングに設定することが可能である。例えば、ライトバッファ141に格納されているユーザデータの合計サイズに基づいて書き込みタイミングが決定される。例えば、書き込みタイミングは、ライトバッファ141に格納されているユーザデータの合計サイズが所定のしきい値を超えたタイミングである。例えば、書き込みタイミングは、ホスト2からFlushコマンドを受信したタイミングである。Flushコマンドとは、ライトバッファ141に格納され、かつ、NANDメモリ12に書き込まれていない全てのユーザデータを、NANDメモリ12に書き込ませるためのコマンドである。
【0069】
書き込みタイミングに至った場合(S303、Yes)、データ処理部151aは、ライトバッファ141からユーザデータを1つ選択する(S304)。データ処理部151aは、選択されたユーザデータをNANDメモリ12に書き込む(S305)。データ処理部151aは、書き込まれたユーザデータはアトミックライトモードのライトコマンドで書き込み要求されたユーザデータであるか否かを判定する(S306)。書き込まれたユーザデータはアトミックライトモードのライトコマンドで書き込み要求されたユーザデータでない場合(S306、No)、データ処理部151aは、第1更新要求を管理部152aに送信する(S307)。書き込まれたユーザデータはアトミックライトモードのライトコマンドで書き込み要求されたユーザデータである場合(S306、Yes)、データ処理部151aは、第2更新要求を管理部152aに送信する(S308)。
【0070】
第1更新要求および第2更新要求は、翻訳情報の更新のための要求である。第1更新要求は、論理アドレス、旧物理アドレス、および新物理アドレスを少なくとも含む。第1更新要求に含まれる論理アドレスは、ユーザデータを書き込み要求したライトコマンドによって指定された論理アドレスである。旧物理アドレスは、第1更新要求に含まれる論理アドレスに、ユーザデータの書き込み前に対応づけられていた物理アドレスである。新物理アドレスは、ユーザデータが書き込まれることによって論理アドレスに新たに対応付けられた物理アドレスである。
【0071】
第2更新要求は、論理アドレス、旧物理アドレス、および新物理アドレスの他に、AW IDを少なくとも含む。第2更新要求に含まれるAW IDは、書き込まれたユーザデータを書き込み要求したライトコマンドが属するスレッドを示す。
【0072】
書き込みタイミングに至っていない場合(S303、No)、またはS307の処理、またはS308の処理の後、データ処理部151aは、エンドコマンドの受信があったか否かを判定する(S309)。エンドコマンドの受信があった場合(S309、Yes)、データ処理部151aは、更新確定要求を管理部152aに送信する(S310)。
【0073】
更新確定要求は、エンドコマンドによって終了せしめられるスレッドに対応する第2テーブルキャッシュ145bを、複製元の第2テーブルキャッシュ145aに反映させるための要求である。更新確定要求は、エンドコマンドによって終了せしめられるスレッドを示すAW IDを少なくとも含む。なお、データ処理部151aは、エンドコマンドに含まれるAW IDによって特定されるスレッドのライトコマンドによって書き込み要求された全てのライトデータについて第2更新要求を送信した後に、更新確定要求を送信する。
【0074】
エンドコマンドの受信がない場合(S309、No)、またはS310の処理の後、データ処理部151aは、リードコマンドの受信があったか否かを判定する(S311)。リードコマンドの受信があった場合(S311、Yes)、データ処理部151aは、翻訳要求を管理部152aに送信する(S312)。翻訳要求は、リードコマンドによって指定された論理アドレスを少なくとも含む。管理部152aは、翻訳要求に含まれる論理アドレスを翻訳し、翻訳によって得られた物理アドレスをデータ処理部151aに返す。データ処理部151aは、返された物理アドレスが示す位置からライトバッファ141にユーザデータを読み出す(S313)。データ処理部151aは、ライトバッファ141に読み出されたユーザデータをホスト2に送信する(S314)。S314の処理の後、データ処理部151aは、S301の処理を再び実行する。
【0075】
図12は、第2の実施形態の管理部152aの動作を説明するフローチャートである。管理部152aは、第1更新要求の受信があったか否かを判定する(S401)。第1更新要求の受信があった場合(S401、Yes)、管理部152aは、第1更新要求に含まれる論理アドレスにかかる第2テーブル1213がLUTキャッシュ領域144にキャッシュされているか否かを判定する(S402)。該当の第2テーブル1213がLUTキャッシュ領域144にキャッシュされていない場合(S402、No)、管理部152aは、該当の第2テーブル1213を、第2テーブルキャッシュ145aとしてLUTキャッシュ領域144に読み出す(S403)。管理部152aは、第2テーブルキャッシュ145aのポインタ210およびAW ID211に「NULL」を記録する。
【0076】
該当の第2テーブル1213がLUTキャッシュ領域144にキャッシュされている場合(S402、Yes)、またはS403の処理の後、管理部152aは、第2テーブルキャッシュ145aを更新する(S404)。具体的には、管理部152aは、第1更新要求に含まれる論理アドレスに、第1更新要求に含まれる新物理アドレスを対応付ける。S404の処理の後、管理部152aは、第2テーブルキャッシュ145aのうちの更新されたエントリをダーティとして設定する(S405)。また、第1テーブルキャッシュ143のうちの、更新された第2テーブルキャッシュ145aの格納位置を示すエントリを、ダーティとして設定する(S406)。
【0077】
第1更新要求の受信がない場合(S401、No)、またはS406の処理の後、管理部152aは、第2更新要求の受信があったか否かを判定する(S407)。第2更新要求の受信があった場合(S407、Yes)、管理部152aは、第2更新要求に含まれる論理アドレスの翻訳のための第2テーブル1213がLUTキャッシュ領域144にキャッシュされているか否かを判定する(S408)。該当の第2テーブル1213がLUTキャッシュ領域144にキャッシュされていない場合(S408、No)、管理部152aは、該当の第2テーブル1213を、第2テーブルキャッシュ145aとしてLUTキャッシュ領域144に読み出す(S409)。管理部152aは、第2テーブルキャッシュ145aのポインタ210およびAW ID211に「NULL」を記録する。
【0078】
該当の第2テーブル1213がLUTキャッシュ領域144にキャッシュされている場合(S408、Yes)、またはS409の処理の後、管理部152aは、第2更新要求に含まれるAW IDによって示されるスレッドに関する第2テーブルキャッシュ145b(以降、対象の第2テーブルキャッシュ145b)がLUTキャッシュ領域144にキャッシュされているか否かを判定する(S410)。S410の処理においては、管理部152aは、第2テーブルキャッシュ145aから順番に、ポインタ210をたどることによって、第2更新要求に含まれるAW IDと同じAW ID211が記録された第2テーブルキャッシュ145bを検索する。
【0079】
対象の第2テーブルキャッシュ145bがLUTキャッシュ領域144にキャッシュされていない場合(S410、No)、管理部152aは、LUTキャッシュ領域144の空き領域に第2テーブルキャッシュ145aを複製することによって対象の第2テーブルキャッシュ145bを生成する(S411)。対象の第2テーブルキャッシュ145bのポインタ210にはNULLが記録される。対象の第2テーブルキャッシュ145bのAW ID211に第2更新要求に含まれるAW IDが記録される。
【0080】
S411の処理の後、管理部152aは、リスト構造を構成する各ポインタ210を更新する(S412)。具体的には、例えば、管理部152aは、リスト構造の終端のポインタ210を、対象の第2テーブルキャッシュ145bの格納位置を示すアドレスで上書きする。対象の第2テーブルキャッシュ145bがLUTキャッシュ領域144にキャッシュされている場合(S410、Yes)、またはS412の処理の後、管理部152aは、対象の第2テーブルキャッシュ145bを更新する(S413)。具体的には、管理部152aは、第2更新要求に含まれる論理アドレスに、第2更新要求に含まれる新物理アドレスを対応付ける。
【0081】
第2更新要求の受信がない場合(S407、No)、またはS413の処理の後、管理部152aは、更新確定要求の受信があったか否かを判定する(S414)。更新確定要求の受信があった場合(S414、Yes)、管理部152aは、更新確定要求に含まれるAW IDをAW ID211として含む全ての第2テーブルキャッシュ145bを、夫々対応する第2テーブルキャッシュ145aに反映させる(S415)。
【0082】
S415の処理の具体例を下記に説明する。管理部152aは、更新確定要求に含まれるAW IDをAW ID211として含む1つの第2テーブルキャッシュ145bに着目する。管理部152aは、着目された第2テーブルキャッシュ145bのエントリを、当該着目された第2テーブルキャッシュ145bが生成されてから更新されたエントリと更新されていないエントリとに分類する。管理部152aは、更新されていないエントリに、複製元の第2テーブルキャッシュ145aに記録された値を上書き形式で書き込む。管理部152aは、着目された第2テーブルキャッシュ145bのAW ID211にNULLを記録し、第1テーブルキャッシュ143を、着目された第2テーブルキャッシュ145bを示すように更新する。これにより、着目された第2テーブルキャッシュ145bは、以降、第2テーブルキャッシュ145aとして扱われる。元の第2テーブルキャッシュ145aは、例えば消去される。管理部152aは、リスト構造を構成する各ポインタ210を更新する。管理部152aは、更新確定要求に含まれるAW IDをAW ID211として含む全ての第2テーブルキャッシュ145bの夫々に着目し、着目された夫々の第2テーブルキャッシュ145bについて上記の一連の処理を実行する。
【0083】
S415の処理の後、管理部152aは、S415の処理の対象となった全ての第2テーブルキャッシュ145aをダーティとして設定する(S416)。また、第1テーブルキャッシュ143のうちの、S415の処理の対象となった第2テーブルキャッシュ145aの格納位置を示す全てのエントリを、ダーティとして設定する(S417)。
【0084】
更新確定要求の受信がない場合(S414、No)、またはS417の処理の後、管理部152aは、翻訳要求の受信があったか否かを判定する(S418)。翻訳要求の受信があった場合(S418、Yes)、管理部152aは、翻訳要求に含まれる論理アドレスにかかる第2テーブル1213がLUTキャッシュ領域144にキャッシュされているか否かを判定する(S419)。該当の第2テーブル1213がLUTキャッシュ領域144にキャッシュされていない場合(S419、No)、管理部152aは、該当の第2テーブル1213を、第2テーブルキャッシュ145aとしてLUTキャッシュ領域144に読み出す(S420)。管理部152aは、第2テーブルキャッシュ145aのポインタ210およびAW ID211に「NULL」を記録する。該当の第2テーブル1213がLUTキャッシュ領域144にキャッシュされている場合(S419、Yes)、またはS420の処理の後、管理部152aは、第2テーブルキャッシュ145aに基づいて翻訳要求に含まれる論理アドレスを物理アドレスに翻訳する(S421)。管理部152aは、翻訳によって得られた物理アドレスをデータ処理部151aに返す。翻訳要求の受信がない場合(S418、No)、またはS421の処理の後、管理部152aは、S401の処理を再び実行する。
【0085】
このように、第2の実施形態においては、管理部152aは、第2テーブルキャッシュ145aを複製することによって第2テーブルキャッシュ145bを生成する。管理部152aは、アトミックライトモードのライトコマンドによって書き込み要求されたユーザデータがNANDメモリ12に書き込まれる際には、第2テーブルキャッシュ145bを使用する。アトミックライトモードの終了の際には、管理部152aは、第2テーブルキャッシュ145bを第2テーブルキャッシュ145aに反映する。スレッドが終了するまで第2テーブルキャッシュ145aはアトミックライトモードのライトコマンドの処理によって更新されないので、スレッドが中断された場合、かつ、当該中断されたスレッドのライトコマンドによって書き込み要求され、かつ、NANDメモリ12に書き込み済みのユーザデータが存在する場合、当該ユーザデータの格納位置を示す物理アドレスは、第2テーブルキャッシュ145aによって論理アドレスに対応付けられていない状態となっている。したがって、スレッドが中断された時点の第2テーブルキャッシュ145aが復元されたとしても、復元された第2テーブルキャッシュ145aの状態はスレッドが開始されていない状態であるので、アトミックライトの動作が実現する。
【0086】
なお、データ処理部151がスレッドの終了時まで更新要求をキューイングし、スレッドの終了時に管理部152がキューイングされている全ての更新要求を実行する場合、管理部152は、更新要求毎に翻訳情報にアクセスする必要がある。これに対し、第2の実施形態によれば、スレッドの終了時には、管理部152aは、リージョン単位で翻訳情報の反映を実行するため、スレッドの終了時の翻訳情報の更新をより早く完了することができる。
【0087】
また、管理部152aは、リードコマンドによって読み出し要求されたユーザデータ1221のNANDメモリ12からの読み出しの際には、第2テーブルキャッシュ145aを使用する。これにより、スレッドの実行中であっても、スレッドが開始されない状態の翻訳情報に基づいてNANDメモリ12からのユーザデータ1221の読み出しが実行可能である。
【0088】
また、管理部152aは、アトミックライトモードでないライトコマンドによって書き込み要求されたユーザデータのNANDメモリ12への書き込みの際には、第2テーブルキャッシュ145aを使用する。これにより、スレッドの実行中であっても、スレッドが開始されない状態の翻訳情報に基づいてNANDメモリ12へのユーザデータの書き込みが実行可能である。
【0089】
なお、管理部152aは、エンドコマンドの受信に応じて第2テーブルキャッシュ145bを第2テーブルキャッシュ145aに反映する。スレッドの終了後に第2テーブルキャッシュ145bが第2テーブルキャッシュ145aに反映せしめられるので、メモリシステム1は、スレッドの終了前は、スレッドのライトコマンドによって書き込み要求された何れのユーザデータも書き込まれない状態に保たれ、スレッドの終了後に、スレッドのライトコマンドによって書き込み要求された全てのユーザデータが書き込まれた状態に移行する。即ち、アトミックライトの動作が実現する。
【0090】
管理部152aは、スレッドのライトコマンドによって書き込み要求された1以上のユーザデータのうちの最後に書き込み要求されたユーザデータのNANDメモリ12への書き込みに対応して第2テーブルキャッシュ145bを更新した後に、当該第2テーブルキャッシュ145bを第2テーブルキャッシュ145aに反映する。
【0091】
データ処理部151aは、複数のスレッドのライトコマンドを並行して受信することができる。管理部152aは、スレッド毎に第2テーブルキャッシュ145bを生成する。これにより、メモリシステム1aは、複数のスレッドのアトミックライトの動作を実現することが可能となる。
【0092】
エンドコマンドは、対応するスレッドを特定するための識別情報を含む。これによりメモリシステム1は、終了の対象のスレッドをエンドコマンドが含む識別情報に基づいて特定することが可能である。
【0093】
メモリシステム1が外部に提供する論理アドレス空間のサイズは、表記容量と呼ばれる。メモリシステム1の表記容量は、ユーザデータ1221が書き込み可能な領域(即ちユーザデータ領域122)の容量よりも小さい。ユーザデータ領域122には、翻訳情報によって格納位置が論理アドレスに対応付けられているユーザデータ1221と、翻訳情報によって格納位置が論理アドレスに対応付けられていないユーザデータ1221と、が格納されるからである。ユーザデータ領域122の容量から表記容量を減算して得られる容量は、余裕容量と呼ばれる。ユーザデータ領域122は、翻訳情報によって格納位置が論理アドレスに対応付けられていないユーザデータ1221を、最大で余裕容量までため込むことができる。第1の実施形態においては、処理中の全てのスレッドによってホスト2から受け付け可能なユーザデータの合計容量は、余裕容量を超えることができない。即ち、データ処理部151aがスレッドの最後の第1データまでに受信可能なユーザデータの当該スレッドの最初のユーザデータからの合計のサイズは、メモリシステム1aの余裕容量以下である。
【0094】
(第3の実施形態)
図13は、メモリシステム1の実装例を示す図である。メモリシステム1は、例えばサーバシステム1000に実装される。サーバシステム1000は、ディスクアレイ2000とラックマウントサーバ3000とが通信インタフェース4000によって接続されて構成される。通信インタフェース4000の規格としては任意の規格が採用可能である。ラックマウントサーバ3000は、サーバラックに1以上のホスト2がマウントされて構成される。複数のホスト2は、通信インタフェース4000を介してディスクアレイ2000にアクセスすることができる。
【0095】
また、ディスクアレイ2000は、サーバラックに1以上のメモリシステム1がマウントされて構成される。ディスクアレイ2000は、メモリシステム1の他に、1以上のハードディスクユニットがマウントされてもよい。各メモリシステム1は、各ホスト2からのコマンドを実行することができる。また、各メモリシステム1は、第1または第2の実施形態が採用された構成を有している。これにより、各メモリシステム1は、簡単にアトミックライトを実行することができる。
【0096】
なお、ディスクアレイ2000においては、例えば、各メモリシステム1は、1以上のハードディスクユニットのキャッシュとして使用されてもよい。ディスクアレイ2000は、1以上のメモリシステム1を利用してRAIDを構築するストレージコントローラユニットがマウントされてもよい。
【0097】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。