(57)【要約】【課題】不揮発性メモリの寿命を延ばすメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、不揮発性メモリと、ランダムアクセスメモリと、コントローラとを含む。コントローラは、ライトコマンドに対応するデータをランダムアクセスメモリにライトし、当該データに対応する第１の論理アドレスとランダムアクセスメモリ上の当該データに対応する第１の物理アドレスとをマッピングするようにアドレス変換データを更新する。また、コントローラは、不正電源断を検知した場合に、蓄電装置からの電力に基づいて、ランダムアクセスメモリに保存されている当該データを不揮発性メモリにライトし、第１の論理アドレスと不揮発性メモリ上の当該データに対応する第２の物理アドレスとをマッピングするようにアドレス変換データを更新する。【選択図】図１
2018073040.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
前記不揮発性メモリより高速かつライト可能上限回数の多いランダムアクセスメモリと、
前記不揮発性メモリおよび前記ランダムアクセスメモリと電気的に接続され、アドレス変換データを使用して論理アドレスと物理アドレスとの間のマッピングを管理するコントローラと、
を具備し、
前記コントローラは、
ホストから受信したライトコマンドが前記ランダムアクセスメモリを使用することを示すと判断する場合に、前記ライトコマンドに対応するデータを前記ランダムアクセスメモリにライトし、前記データに対応する第１の論理アドレスと前記ランダムアクセスメモリ上の前記データに対応する第１の物理アドレスとをマッピングするように前記アドレス変換データを更新し、
不正電源断を検知した場合に、蓄電装置からの電力に基づいて、前記ランダムアクセスメモリに保存されている前記データを前記不揮発性メモリにライトし、前記第１の論理アドレスと前記不揮発性メモリ上の前記データに対応する第２の物理アドレスとをマッピングするように前記アドレス変換データを更新する、
メモリシステム。
【請求項２】
前記コントローラは、
前記ホストから受信した前記ライトコマンドが前記ランダムアクセスメモリを使用することを示すことを、前記ライトコマンドで指定される前記第１の論理アドレス、前記不揮発性メモリの使用を抑制することを示す情報、または、コマンド種別、のいずれかから判断する、
請求項１に記載のメモリシステム。
【請求項３】
前記コントローラは、
前記ランダムアクセスメモリに、前記データと前記第１の論理アドレスとを関連付けてライトし、
前記不正電源断を検知した場合に、前記ランダムアクセスメモリに保存されている前記第１の論理アドレスと、前記第２の物理アドレスとに基づいて、前記アドレス変換データを更新する、
請求項１または請求項２に記載のメモリシステム。
【請求項４】
前記コントローラは、
前記ライトコマンドが前記ランダムアクセスメモリを使用することを示す場合に、前記データをライトする前記ランダムアクセスメモリ上の対象エリアを管理する、
請求項１ないし請求項３のいずれか１項に記載のメモリシステム。
【請求項５】
前記コントローラは、
前記ホストから、前記対象エリアの解放を要求するコマンドを受信した場合に、前記対象エリアに保存されている前記データを前記不揮発性メモリにライトすることなく前記対象エリアを解放する、
請求項４に記載のメモリシステム。
【請求項６】
前記コントローラは、
前記ランダムアクセスメモリに追記的にライトされたデータ群のうち最新の追記的ライト位置から所定の範囲内の前記データに対して前記ランダムアクセスメモリ上でリライト可能とし、
前記ランダムアクセスメモリに保存されている前記データが前記所定の範囲から外れた場合に、前記データを前記不揮発性メモリにライトする、
請求項１ないし請求項３のいずれか１項に記載のメモリシステム。
【請求項７】
前記コントローラは、
前記ランダムアクセスメモリに保存されている前記データが前記不揮発性メモリにライトされたが前記データが前記不揮発性メモリからリード不可の場合に、前記ランダムアクセスメモリ上の前記データの保存エリアを維持し、前記データが前記不揮発性メモリメモリからリード可能な場合に、前記保存エリアを解除する、
請求項６に記載のメモリシステム。
【請求項８】
前記コントローラは、
管理データにより、前記最新の追記的ライト位置と前記所定の範囲のサイズとを管理する、
請求項６または請求項７に記載のメモリシステム。
【請求項９】
前記コントローラは、
前記ホストから、前記所定の範囲の開始位置と前記所定の範囲のサイズとを指定するコマンドを受信する、
請求項６ないし請求項８のいずれか１項に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、不揮発性メモリを備えるメモリシステムに関する。
【背景技術】
【０００２】
不揮発性メモリを備えるメモリシステムの一例として、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、その低電力消費、高性能という特徴により、様々なコンピューティングデバイスのメインストレージとして使用される。ＳＳＤはストレージサーバにおいても広く利用されている。
【０００３】
ＳＳＤに備えられるＮＡＮＤフラッシュメモリには、ライト（書き込み）回数の上限がある。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Viking Technology’s ArxCis-NV(tm)、[online]、［平成２８年１０月１９日検索］、インターネット<URL:http://www.vikingtechnology.com/nvdimm-technology>
【非特許文献２】“Storage in the DIMM Socket”、Adrian Proctor、[online]、［平成２８年１０月１９日検索］、インターネット<URL:http://www.snia.org/sites/default/files/SNIA_Tutorial_Storage_in_a_DIMM_Socket_RevC.pdf)>
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本実施形態では、不揮発性メモリの寿命を長期化するためのメモリシステムを提供する。
【課題を解決するための手段】
【０００６】
実施形態によれば、メモリシステムは、不揮発性メモリと、ランダムアクセスメモリと、コントローラとを備える。ランダムアクセスメモリは、不揮発性メモリより高速かつライト可能上限回数が多い。コントローラは、不揮発性メモリおよびランダムアクセスメモリと電気的に接続され、アドレス変換データを使用して論理アドレスと物理アドレスとの間のマッピングを管理する。コントローラは、ホストから受信したライトコマンドがランダムアクセスメモリを使用することを示すと判断する場合に、ライトコマンドに対応するデータをランダムアクセスメモリにライトし、当該データに対応する第１の論理アドレスとランダムアクセスメモリ上の当該データに対応する第１の物理アドレスとをマッピングするようにアドレス変換データを更新する。コントローラは、不正電源断を検知した場合に、蓄電装置からの電力に基づいて、ランダムアクセスメモリに保存されている当該データを不揮発性メモリにライトし、第１の論理アドレスと不揮発性メモリ上のデータに対応する第２の物理アドレスとをマッピングするようにアドレス変換データを更新する。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態に係るメモリシステムを備える情報処理システムの構成例を示すブロック図。
【図２】第１の実施形態に係るＮＡＮＤフラッシュメモリの構成例を示すブロック図。
【図３】第１の実施形態に係るメモリシステムを備える情報処理システムで実行される処理の一例を示すシーケンス図。
【図４】第１の実施形態に係る管理テーブルの一例を示すデータ構造図。
【図５】第１の実施形態に係るバッファメモリでのデータの保存状態の一例を示す図。
【図６】第１の実施形態に係るルックアップテーブルの一例を示すデータ構造図。
【図７】ライトコマンドWrite(addr=10, data=Y, rbp_id=1)を受信した後の管理テーブルとルックアップテーブルとバッファメモリとの状態を例示する図。
【図８】ライトコマンドWrite(addr=2, data=Z, rbp_id=1)を受信した後の管理テーブルとルックアップテーブルとバッファメモリとの状態を例示する図。
【図９】ライトコマンドWrite(addr=10, data=X, rbp_id=1)を受信した後の管理テーブルとルックアップテーブルとバッファメモリとの状態を例示する図。
【図１０】解放コマンドRBP_Release(rbp_id=1)を受信した後の管理テーブルの状態を例示する図。
【図１１】解放コマンドRBP_Release(rbp_id=1)を受信した後のルックアップテーブルの状態を例示する図。
【図１２】不正電源断を検知した場合の管理テーブルとルックアップテーブルとＮＡＮＤフラッシュメモリとの状態を例示する図。
【図１３】第２の実施形態に係るライト抑制管理部によって実現される第２のライト抑制管理に用いられるリライト可能ウィンドウを説明するための図。
【図１４】第２の実施形態に係る管理テーブルの一例を示すデータ構造図。
【図１５】第２の実施形態に係る管理テーブルとＤＲＡＭ（Dynamic Random Access Memory）とＮＡＮＤフラッシュメモリとの関係の第１の状態を例示する図。
【図１６】第２の実施形態に係る管理テーブルとＤＲＡＭとＮＡＮＤフラッシュメモリとの関係の第２の状態を例示する図。
【図１７】第２の実施形態に係る管理テーブルとＤＲＡＭとＮＡＮＤフラッシュメモリとの関係の第３の状態を例示する図。
【図１８】第２の実施形態に係る管理テーブルとＤＲＡＭとＮＡＮＤフラッシュメモリとの関係の第４の状態を例示する図。
【図１９】第２の実施形態に係る管理テーブルとＤＲＡＭとＮＡＮＤフラッシュメモリとの関係の第５の状態を例示する図。
【図２０】ホストとして機能する情報処理装置のハードウェア構成例を示すブロック図。
【図２１】複数のＳＳＤとホストとを含む情報処理装置の構成例を示す斜視図。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、各実施形態を説明する。
【０００９】
（第１の実施形態）
図１は、本実施形態に係るメモリシステムを備える情報処理システムの構成例を示すブロック図である。
【００１０】
本実施形態に係るメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリード（読み出し）する半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）３として実現される。
【００１１】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、ＳＳＤ３をアクセスする情報処理装置（コンピューティングデバイス）である。ホスト２は、大量且つ多様なデータをＳＳＤ３に記憶するストレージサーバ（サーバ）でもよく、パーソナルコンピュータでもよい。
【００１２】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１３】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、ＳＡＳ（Serial Attached SCSI）、ＡＴＡ、ＳＡＴＡ（Serial ATA）、ＰＣＩｅ（PCI Express）、Ｅｔｈｅｒｎｅｔ（登録商標），Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭｅ（登録商標）（NVM Express）等を使用し得る。
【００１４】
ＳＳＤ３は、コントローラ４、不揮発性メモリ（ＮＡＮＤフラッシュメモリ）５、ＤＲＡＭ６、蓄電装置１５を備える。ＳＳＤ３は、ＤＲＡＭ６に代えて、他の種類のメモリをバッファメモリ又はキャッシュメモリとして用いてもよい。例えば、ＳＳＤ３は、ＤＲＡＭ６に代えて、ＮＡＮＤフラッシュメモリ５よりも高速にアクセス可能であり、ＮＡＮＤフラッシュメモリ５よりもライト可能回数が大きいランダムアクセスメモリを用いることができる。具体的には、例えば、ＤＲＡＭ６に代えてＭＲＡＭ（Magnetoresistive Random Access Memory）などが用いられてもよい。ＤＲＡＭ６は、ホスト２側に備えられていてもよく、ホスト２とＳＳＤ３との双方に備えられていてもよい。
【００１５】
ＮＡＮＤフラッシュメモリ５は、限定されないが、複数のＮＡＮＤフラッシュメモリチップを含んでいてもよい。ＮＡＮＤフラッシュメモリ５は、メモリセルアレイを含む。このメモリセルアレイは、多数のＮＡＮＤブロック（ブロック）Ｂ０〜Ｂｍ−１を含む。ブロックＢ０〜Ｂｍ−１は、消去単位として機能する。ブロックは「物理ブロック」または「消去ブロック」と称されることもある。
【００１６】
ブロックＢ０〜Ｂｍ−１は多数のページ（物理ページ）を含む。つまり、ブロックＢ０〜Ｂｍ−１の各々は、ページＰ０〜Ｐｎ−１を含む。ＮＡＮＤフラッシュメモリ５においては、データのリードおよびデータのライトはページ単位で実行される。データの消去はブロック単位で実行される。
【００１７】
コントローラ４は、Ｔｏｇｇｌｅ、ＯＮＦＩのようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤフラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤフラッシュメモリ５のデータ管理とＮＡＮＤフラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能し得る。さらに、コントローラ４は、ＤＲＡＭ６に電気的に接続されている。
【００１８】
データ管理には、（１）論理アドレスそれぞれとＮＡＮＤフラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス（ＬＢＡ）が使用される。以下では、論理アドレスが論理ブロックアドレス（ＬＢＡ）である場合を想定する。
【００１９】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３２を用いて実行される。コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を使用して、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。管理サイズ単位は、限定されないが、例えば、４キロバイトであってもよい。アドレス変換テーブル（ＬＵＴ３２）は、ＳＳＤ３の電源オン時にＮＡＮＤフラッシュメモリ５からＤＲＡＭ６にロードされてもよく、電源オフ時にＤＲＡＭ６からＮＡＮＤフラッシュメモリ５にライトされてもよい。
【００２０】
あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤフラッシュメモリ５内の物理記憶位置を示す。物理アドレスは、物理ブロックアドレスと物理ページアドレスとを含む。物理ページアドレスは全てのページに割り当てられており、また物理ブロックアドレスは全てのブロックに割り当てられている。
【００２１】
ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、同じＬＢＡへのライト（上書き）を、ＮＡＮＤフラッシュメモリ５上の異なるページにマッピングする。つまり、コントローラ４は、ホスト２から受信されるライトコマンドによって指定されるデータ（ライトデータ）を、このデータのＬＢＡとは無関係に、ライト先ブロックとして現在割り当てられているブロック内の次の利用可能ページにライトする。そして、コントローラ４は、ＬＵＴ３２を更新して、このＬＢＡを、このデータが実際にライトされたこのページの物理アドレスに関連付ける。ライト先ブロックに利用可能ページが無くなると、新たなブロックがライト先ブロックとして割り当てられる。
【００２２】
ブロック管理には、不良ブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
【００２３】
ホスト２は、リード要求（リードコマンド）、ライト要求（ライトコマンド）、他の様々な要求（他の様々なコマンド）をＳＳＤ３に送出する。リードコマンドは、ＳＳＤ３に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータのＬＢＡ（先頭ＬＢＡ）と、リードすべきデータのデータ長（転送長）とを含む。ライトコマンドは、ＳＳＤ３に対してデータのライトを要求するコマンドである。ライトコマンドは、ライトデータ（つまり書き込むべきデータ）のＬＢＡ（先頭ＬＢＡ）と、ライトデータのデータ長（転送長）とを含む。
【００２４】
本実施形態において、ＳＳＤ３上の位置を示す位置データ（例えばＬＢＡ）をＳＳＤアドレスと呼ぶ。メモリアドレスは、ＤＲＡＭ６上の位置を示すアドレスである。ＮＡＮＤアドレスは、ＳＳＤ３が保持するＮＡＮＤフラッシュメモリ５の物理的なアドレスである。ＳＳＤ３は、ＳＳＤアドレスとＮＡＮＤアドレスとを相互に変換するアドレス変換を行う。
【００２５】
次に、コントローラ４の構成について説明する。
【００２６】
コントローラ４は、ホストインタフェース１１、ＣＰＵ（Central Processing unit）１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。なお、ＣＰＵに代えて、例えばＭＰＵ（Microprocessor Unit）などのような他の種類のプロセッサが用いられてもよい。
【００２７】
ホストインタフェース１１は、ホスト２から様々なコマンド（例えば、ライトコマンド、リードコマンド、消去コマンド、アンマップ（ＵＮＭＡＰ）／トリム（Ｔｒｉｍ）コマンド、等）を受信する。
【００２８】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行する。
【００２９】
コマンド処理には、データ圧縮機能を含むライト処理、データ伸張機能を含むリード処理が含まれる。データ圧縮／伸張機能はＣＰＵ１２によって実行されてもよく、専用のハードウェアによって実行されてもよい。
【００３０】
これらＦＴＬ処理およびコマンド処理は、ＣＰＵ１２によって実行されるファームウェアによって制御されてもよい。このファームウェアは、ＣＰＵ１２を、ライト動作制御部２１、リード動作制御部２２として機能させる。ライト動作制御部２１は、ライト抑制（制限）管理部２１ａを含む。
【００３１】
ライト動作制御部２１は、ホスト２からのライト要求（ライトコマンド）の受信に応答して、データをホスト２から受信する。そして、ライト動作制御部２１は、データをバッファメモリ３１へ一時的にライトし、その後、バッファメモリ３１にライトされたデータのうちＮＡＮＤフラッシュメモリ５へライト可能なデータをＮＡＮＤフラッシュメモリ５内の記憶領域にライトする。ここで、ライト動作制御部２１は、圧縮されたデータをＮＡＮＤフラッシュメモリ５へライトするとしてもよい。
【００３２】
ライト抑制管理部２１ａは、ホスト２によって指定された特定のデータを、可能な限りＤＲＡＭ３１内のバッファメモリ３１にライトし、ＮＡＮＤフラッシュメモリ５へライトされることを抑制または制限する。このライト抑制管理部２１ａによって実行される処理により、ＮＡＮＤフラッシュメモリ５の寿命を長期化する。ライト抑制管理部２１ａの制御の詳細は、後述する。
【００３３】
リード動作制御部２２は、ホスト２からの読み出し要求（リードコマンド）によって読み出し対象の論理アドレスが指定された場合、読み出し対象の論理アドレスにマッピングされた物理アドレスに基づいて、バッファメモリ３１又はＮＡＮＤフラッシュメモリ５からデータを読み出す。そして、リード動作制御部２２は、データをホストインタフェース１１を介してホスト２に返す。ここで、リード動作制御部２２は、圧縮されているデータを伸張し、この伸張されたデータをホストインタフェース１１を介してホスト２に返すとしてもよい。
【００３４】
蓄電装置１５は、例えば不正電源断のような、予期せぬ動作終了が発生した場合に、ＤＲＡＭ６上のデータのうち必要なデータをＮＡＮＤフラッシュメモリ５にライトするための電力をコントローラ４、ＮＡＮＤフラッシュメモリ５、ＤＲＡＭ６に供給する。なお、この蓄電装置１５は、ホスト２または他のデバイスに備えられてもよい。この場合、予期せぬ動作終了が発生すると、ホスト２または他のデバイスからＳＳＤ３へＤＲＡＭ６上のデータのうち必要なデータをＮＡＮＤフラッシュメモリ５にライトするための電力が供給される。
【００３５】
本実施形態において、コントローラ４は、ホスト２から受信したライトコマンドがＮＡＮＤフラッシュメモリ５の使用を抑制しＤＲＡＭ６を使用することを促すことを、ライトコマンドで指定される論理アドレス、ＮＡＮＤフラッシュメモリ５の使用を抑制することを示す情報、または、コマンド種別、のいずれかから判断する。
【００３６】
コントローラ４は、受信したライトコマンドがＮＡＮＤフラッシュメモリ５の使用を抑制しＤＲＡＭ６を使用することを示すと判断する場合に、ライトコマンドに対応する当該データをＤＲＡＭ６にライトし、当該データに対応する論理アドレスとＤＲＡＭ６上の当該データに対応する物理アドレスとをマッピングするようにＬＵＴ３２を更新する。そして、コントローラ４は、不正電源断を検知した場合に、蓄電装置１５からの電力に基づいて、ＤＲＡＭ６に保存されている当該データをＮＡＮＤフラッシュメモリ５にライトし、論理アドレスとＮＡＮＤフラッシュメモリ５上の当該データに対応する物理アドレスとをマッピングするようにＬＵＴ３２を更新する。
【００３７】
コントローラ４は、ＤＲＡＭ６にデータをライトする場合には、例えば、データと当該データの論理アドレスとをライトする。そして、コントローラ４は、不正電源断を検知した場合に、ＤＲＡＭ６に保存されている論理アドレスと、ＮＡＮＤフラッシュメモリ５上の当該データに対応する物理アドレスとに基づいて、ＬＵＴ３２を更新する。
【００３８】
コントローラ４は、管理テーブル３３により、ライトコマンドがＮＡＮＤフラッシュメモリ５の使用を抑制しＤＲＡＭ６６を使用することを示す場合に、ライトコマンドに対応するデータをライトするＤＲＡＭ６上の対象エリア３１ａを管理する。
【００３９】
コントローラ４は、ホスト３から、対象エリア３１ａの解放を要求するコマンドを受信した場合に、対象エリア３１ａに保存されているデータをＮＡＮＤフラッシュメモリ５にライトすることなく対象エリア３１ａを解放する。
【００４０】
次に、ホスト２の構成について説明する。
【００４１】
ホスト２は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェア４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３が含まれる。
【００４２】
一般に知られているように、ＯＳ４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションソフトウェア４１がハードウェアおよびＳＳＤ３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００４３】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。例えば、ＺＦＳ、Ｂｔｒｆｓ、ＸＦＳ、ｅｘｔ４、ＮＴＦＳなどがファイルシステム４３として使用されてもよい。あるいは、ファイルオブジェクトシステム（例えば、Ceph Object Storage Daemon）、Key Value Store System (例えば、Rocks DB) がファイルシステム４３として使用されてもよい。
【００４４】
様々なアプリケーションソフトウェア４１は、アプリケーションソフトウェアレイヤ上で走る。アプリケーションソフトウェア４１の例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【００４５】
アプリケーションソフトウェア４１がリードコマンドまたはライトコマンドのようなリクエストをＳＳＤ３に送出することが必要な時、アプリケーションソフトウェア４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをファイルシステム４３に送出する。ファイルシステム４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。ファイルシステム４３は、コマンドを、ＳＳＤ３に送出する。ＳＳＤ３からのレスポンスが受信された際、ファイルシステム４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションソフトウェア４１に送出する。
【００４６】
図２は、本実施形態に係るＮＡＮＤフラッシュメモリ５の構成例を示すブロック図である。
【００４７】
ＮＡＮＤフラッシュメモリ５は、チャンネルＣｈ１〜Ｃｈ８と呼ばれる通信線を用いてＮＡＮＤインタフェース１３と接続されている。チャンネルＣｈ１〜Ｃｈ８のそれぞれには、複数のＮＡＮＤメモリチップが接続される。複数のＮＡＮＤメモリチップのそれぞれは、複数の消去ブロックを含む。
【００４８】
以下で、本実施形態に係るライト抑制管理部２１ａによって実行される第１のライト抑制管理の意義について説明する。
【００４９】
ＳＳＤ３に備えられるＮＡＮＤフラッシュメモリ５は、不揮発メモリであるがライト回数が有限であり、一定のライト回数を超えると使用できなくなる性質がある。
【００５０】
例えばＤＲＡＭ６などのような情報処理システム１に備えられているＤＲＡＭは、高速でライト回数の限界はほぼ無視できるものであるが揮発メモリである。
【００５１】
情報処理システム１は、当該情報処理システム１に備えられているＤＲＡＭ６上のデータが失われないように、ＤＲＡＭ６上のデータをＳＳＤ３のＮＡＮＤフラッシュメモリ５にライトする。通常は、ＳＳＤ３は、ＮＡＮＤフラッシュメモリ５にデータをライトすることで、データをそのまま永続的に保存する。
【００５２】
しかしこの他に、例えば不正電源断などに対応するため、ＳＳＤ５は、ＤＲＡＭ６のデータを一時的にＮＡＮＤフラッシュメモリ５にライトすることによりデータが失われないようにし、当該一時的にＮＡＮＤフラッシュメモリ５に書き込まれたデータを効率的な形に整え、改めてＮＡＮＤフラッシュメモリ５にライトし、この一時的にＮＡＮＤフラッシュメモリ５に保存されたデータを削除する、という処理を行う場合がある。このような処理が実行されるデータの一例としては、ファイルシステムにおけるジャーナルなどがある。ジャーナルとは、例えば、コンピュータまたは通信機器が稼働中に半自動的に保存する記録または更新履歴などのデータである。
【００５３】
ＳＳＤ３にライトされるデータの中には、ＳＳＤ３に一度ライトされるとその後ほとんどの場合に上書きによりリライトされるデータも多く存在する。例えば、ＳＳＤ３に複数のデータを追記的にライトしていき、その追記的にライトされたデータの末尾の位置を示す末尾位置データをＳＳＤ３にライトする場合を考える。このような場合、本来ならＤＲＡＭ６内に末尾位置データをライトし、正常終了時にこのＤＲＡＭ６の末尾位置データをＮＡＮＤフラッシュメモリ５にライトすればよい。しかし、予期せぬ電源断などに備えるために、追記的なデータのライトが実行される都度、末尾位置データもＮＡＮＤフラッシュメモリ５にライトされる場合がある。また、追記型でデータがライトされる場合、データの一貫性を保証するために追記されるデータの末尾にチェックサムが付与される場合がある。この場合、データがさらに追加的にライトされると、ライト済みのチェックサムが消去され、その消去した位置からデータの追記が再開され、追記されるデータの末尾にさらに新しいチェックサムがライトされることも考えられる。
【００５４】
このような末尾位置データ及びチェックサムは、定常的にＮＡＮＤフラッシュメモリ５にライトされる必要がなく、不正電源断のような予期せぬ終了に対して保護的にライトされているに過ぎない。
【００５５】
このように、繰り返し上書きされるデータをＮＡＮＤフラッシュメモリ５へライトすることは、ＮＡＮＤフラッシュメモリ５のようなライト回数が有限である記憶装置の寿命を短くする原因となる。
【００５６】
上記のように、ＤＲＡＭ６をバッファメモリ又はキャッシュメモリとして利用するが、キャッシュメモリ又はバッファメモリからＮＡＮＤフラッシュメモリ５へのデータのライトを制御（抑制）しない場合には、本来ＮＡＮＤフラッシュメモリ５にライトされなくてもよい一時的なデータが、ＮＡＮＤフラッシュメモリ５にライトされる可能性がある。
【００５７】
ＳＳＤ３がＮＡＮＤフラッシュメモリ５と同じ記憶容量のＤＲＡＭ６と蓄電装置１５（バッテリまたはキャパシタ）とを備え、通常はＤＲＡＭ６がデータを保存し、不正電源断の際に蓄電装置１５を用いてＤＲＡＭ６のデータがＮＡＮＤフラッシュメモリ５にライトされる方式もある。しかしながらこの方式では、ＤＲＡＭ６の記憶容量をＮＡＮＤフラッシュメモリ５の記憶容量と同じにする必要があり、ＳＳＤ３の大容量化が困難となる。
【００５８】
このような事情に鑑みて、本実施形態に係るＳＳＤ３は、ライト抑制管理部２１ａを備える。これにより、ＳＳＤ３の大容量化を実現可能とし、不正電源断のような予期せぬ終了に備えるためのＮＡＮＤフラッシュメモリ５に対するデータのライトを抑制し、ＮＡＮＤフラッシュメモリ５の寿命の低下を防止する。
【００５９】
以下で、ライト抑制管理部２１ａによって実現される第１のライト抑制管理を具体的に説明する。
【００６０】
ＳＳＤ３は、一定量のＤＲＡＭ６と、不正電源断のような予期せぬ終了時にＤＲＡＭ６のデータをＮＡＮＤフラッシュメモリ５にライトするための蓄電装置１５とを備える。
【００６１】
アプリケーションソフトウェア４１は、ライトデータ全体が一時データ（例えばジャーナル）の場合に、ＳＳＤ３に対してライトデータ全体をＤＲＡＭ６へ専有的または優先的に割り当てることを要求する。第１のライト抑制管理は、この割り当ての要求に基づいて、データをＮＡＮＤフラッシュメモリ９よりもＤＲＡＭ６へ割り当てる管理であり、ＲＢＰ（Rigid Buffer Pinning）と表記してもよい。この第１のライト抑制管理は、バッファメモリまたはキャッシュメモリに対するデータの固定的割り付けを行う。第１のライト抑制管理ＲＢＰによってデータが固定的に割り付けられるバッファメモリまたはキャッシュメモリを、ＲＷＭ（Rigid Write-suppression Memory）と称してもよい。
【００６２】
第１のライト抑制管理ＲＢＰを使用するデータは、すべてＤＲＡＭ６にライトされる。第１のライト抑制管理ＲＢＰを使用するデータがＤＲＡＭ６にライトされる場合には、当該データに加えて本来のＳＳＤ３上の位置データ（例えば、データのＬＢＡ）もＤＲＡＭ６にライトされる。不正電源断のような予期せぬ終了が発生した場合、ライト抑制管理部２１ａは、蓄電装置１５の電力を使用して、ＤＲＡＭ６に保存されているデータを、ＤＲＡＭ６に保存されているＳＳＤアドレスにしたがって全てＮＡＮＤフラッシュメモリ５にライトする。ＬＵＴ３２は、ＮＡＮＤフラッシュメモリ５へライトされる場合には、更新後の内容でライトされる。
【００６３】
第１のライト抑制管理ＲＢＰに用いられるＤＲＡＭ６のバッファメモリ３１のエリアの指定は、ＳＳＤ３上の位置データ（例えば、ＬＢＡ）の範囲で指定されてもよい。すなわち、一定のＬＢＡの範囲内であれば、自動的に第１のライト抑制管理ＲＢＰの対象データとして扱われてもよい。
【００６４】
あるいは、アプリケーションソフトウェア４１が、ライト要求毎に、第１のライト抑制管理ＲＢＰによる管理対象であるか否かを明示的に指示してもよい。バッファメモリ３１における第１のライト抑制管理ＲＢＰの対象エリア３１ａは、複数のエリアに分割されていてもよい。この場合、第１のライト抑制管理ＲＢＰの対象エリア３１ａのそれぞれのエリアに、識別子rbp_idが与えられ、識別子によって識別される。
【００６５】
アプリケーションソフトウェア４１が第１のライト抑制管理ＲＢＰを要求したにも関わらず、第１のライト抑制管理ＲＢＰの対象エリア３１ａとして使用可能なＤＲＡＭ６の空きが不足した場合、ライト抑制管理部２１ａは、ホスト２のアプリケーションソフトウェア４１へエラーを送出する。
【００６６】
アプリケーションソフトウェア４１は、可能なら第１のライト抑制管理ＲＢＰを使用する旨（optimistic RBP）を要求することもできる。すなわち、optimistic RBPは、バッファメモリまたはキャッシュメモリに対する楽観的なデータの割り付けである。このoptimistic RBPが要求された場合、第１のライト抑制管理ＲＢＰの対象エリア３１ａとして使用できるＤＲＡＭ６の空きが不足すると、その後、たとえ第１のライト抑制管理ＲＢＰを用いるデータであっても、当該データは、ＤＲＡＭ６にライトされるのではなく、ＮＡＮＤフラッシュメモリ５にライトされる。
【００６７】
アプリケーションソフトウェア４１は、事前にＤＲＡＭ６における第１のライト抑制管理ＲＢＰの対象エリア３１ａの記憶容量を宣言し、その第１のライト抑制管理ＲＢＰの対象エリア３１ａを予約してもよい。この対象エリア３１ａの予約において、アプリケーションソフトウェア４１は、ライトされる実データのデータ量に対応する対象エリア３１ａの予約を、ＳＳＤ３に対して命令してもよい。この場合、ＳＳＤ３のライト抑制管理部２１ａは、実データと当該実データの管理に必要なデータ（例えばＬＢＡ）とを保存可能な記憶容量の対象エリア３１ａを予約してもよい。
【００６８】
第１のライト抑制管理ＲＢＰで使用されるＤＲＡＭ６の対象エリア３１ａの予約が成功した場合、宣言した記憶容量を超えない範囲であれば、ＤＲＡＭ６における第１のライト抑制管理ＲＢＰの対象エリア３１ａの記憶容量の不足によるエラーは、起きないことが保証される。
【００６９】
ＳＳＤ３は、ランダムなＳＳＤ３上のデータ位置（ＬＢＡの示す位置）へのライトに対して第１のライト抑制管理ＲＢＰを許可してもよいし、連続したＳＳＤ３上のデータ位置の範囲内で第１のライト抑制管理ＲＢＰを許可してもよい。
【００７０】
また、ＳＳＤ３が物理的または仮想的な消去ブロックを指定したライトを許す場合、第１のライト抑制管理ＲＢＰによってバッファメモリ３１からＮＡＮＤフラッシュメモリ５へライトされるデータのライト先は、指定された消去ブロックとしてもよい。同様に、複数の消去ブロックをまとめて一つのライト先エリアとして扱える場合、第１のライト抑制管理ＲＢＰによってバッファメモリ３１からＮＡＮＤフラッシュメモリ５へライトされるデータのライト先は、その複数の消去ブロックをまとめたエリアとしてもよい。
【００７１】
この場合、バッファメモリ３１における第１のライト抑制管理ＲＢＰの対象エリア３１ａを、一つの消去ブロックのエリアまたは複数の消去ブロックをまとめたエリアの大きさと等しくしてもよいし、より少ない一部のエリアとしてもよい。
【００７２】
ＳＳＤ３は、物理的または仮想的な消去ブロックを指定したライトを許可する場合、この指定されたエリア対して、ランダムなデータライトを許さず、エリアの先頭から順に追記していくデータライトを許可する場合がある。しかしながらこのような場合であっても、ＳＳＤ３のライト抑制管理部２１ａは、第１のライト抑制管理ＲＢＰを使用する場合、対象エリア３１ａに対してランダムなデータライトを許可してもよい。
【００７３】
アプリケーションソフトウェア４１は、バッファメモリ３１における第１のライト抑制管理ＲＢＰの対象エリア３１ａを解放することが可能である。このとき、バッファメモリ３１における第１のライト抑制管理ＲＢＰの対象エリア３１ａに保存されているデータは、破棄され、ＮＡＮＤフラッシュメモリ５にライトされないとしてもよい。
【００７４】
アプリケーションソフトウェア４１は、バッファメモリ３１における第１のライト抑制管理ＲＢＰの対象エリア３１ａを解放する前に、第１のライト抑制管理ＲＢＰの対象エリア３１ａに保存されているデータを、ＮＡＮＤフラッシュメモリ５にライトすることを要求可能としてもよい。また、アプリケーションソフトウェア４１は、バッファメモリ３１における第１のライト抑制管理ＲＢＰの対象エリア３１ａを解放する前にＮＡＮＤフラッシュメモリ５へライトするデータを、第１のライト抑制管理ＲＢＰの対象エリア３１ａの全体としてもよく、第１のライト抑制管理ＲＢＰの対象エリア３１ａの一部（例えばＬＢＡの特定の範囲）に限定してもよい。
【００７５】
以下で、図３のフローチャートおよび図４から図１２を用いて、本実施形態に係るライト抑制管理部２１ａによって実現される第１のライト抑制管理ＲＢＰを具体的に説明する。
【００７６】
図３は、本実施形態に係る情報処理システム１で実行される処理の一例を示すシーケンス図である。この図３において、アプリケーションソフトウェア４１は、バッファメモリ３１における第１のライト抑制管理ＲＢＰの対象エリア３１ａの記憶容量は指定せずに、第１のライト抑制管理ＲＢＰの使用を要求する。すなわち、この図３において、アプリケーションソフトウェア４１は、第１のライト抑制管理ＲＢＰを適用するＳＳＤアドレスの範囲を指定しない場合を例示している。
【００７７】
ステップＳＴ１において、アプリケーションソフトウェア４１は、第１のライト抑制管理ＲＢＰの使用を、ＯＳ４２経由で、ファイルシステム４３へ要求する。この結果、ホスト２のファイルシステム４３は、例えば、第１のライト抑制管理ＲＢＰのリクエストRBP_Request(size=0, addr_range(null, null), flag=false)をＳＳＤ３へ送出する。
【００７８】
ここで、sizeは、バッファメモリ３１に確保される第１のライト抑制管理ＲＢＰの対象エリア３１ａのデータサイズを示す。size=0は、対象エリア３１ａを予約せず可変長として扱うことを示す。size>0は、対象エリア３１ａを予約することを示す。第１のライト抑制管理ＲＢＰのリクエストを受信した時点で、ＳＳＤ３のライト抑制管理部２１ａは、sizeで指定されたデータを保存できる対象エリア３１ａを確保し、後で図４を用いて説明する対象エリア３１ａを指定するバッファポインタを管理テーブル３３により管理する。ライト抑制管理部２１ａは、対象エリア３１ａを確保できない場合には、ホスト２のアプリケーションソフトウェア４１へファイルシステム４３およびＯＳ４２経由でエラーを返す。第１のライト抑制管理ＲＢＰのリクエストにおいてsize<0の場合には、ライト抑制管理部２１ａは、ホスト２のアプリケーションソフトウェア４１へ、ファイルシステム４３およびＯＳ４２経由でエラーを返す。
【００７９】
addr_range(start, end)は、第１のライト抑制管理ＲＢＰを用いるＳＳＤアドレスの範囲を示す。startは、ＳＳＤアドレスの範囲の先頭を示す。endは、ＳＳＤアドレスの範囲の末尾を示す。endは、例えば、startからのオフセットの値を示すとしてもよく、ＳＳＤアドレスの範囲のサイズを示すとしてもよい。startおよびendが「null」の場合には、第１のライト抑制管理ＲＢＰを用いるＳＳＤアドレスの範囲は指定されない。flagは、可能であれば第１のライト抑制管理ＲＢＰを用いることを示す場合、「ture」であり、単に第１のライト抑制管理ＲＢＰを用いる場合には、「false」であるとする。すなわち、flagは、上記のoptimistic RBPを使用するか否かを示す。flagが「true」であれば、ライト抑制管理部２１ａは、optimistic RBPを使用する。
【００８０】
ステップＳＴ２において、ＳＳＤ３のライト抑制管理部２１ａは、第１のライト抑制管理ＲＢＰのリクエストを受信すると、バッファメモリ３１における第１のライト抑制管理ＲＢＰの対象エリア３１ａを確保し、要求された第１のライト抑制管理ＲＢＰに対応する識別子rbp_idに「1」を割り当て、図４に示すように、管理テーブル３３に、rbp_id、flag、第１のライト抑制管理ＲＢＰを用いるＳＳＤアドレスの範囲（start, end）、確保された第１のライト抑制管理ＲＢＰの対象エリア３１ａを示すバッファポインタをライトする。管理テーブル３３におけるＳＳＤアドレスの範囲においてstart=null、end=nullの場合、第１のライト抑制管理ＲＢＰを用いるＳＳＤアドレスの範囲は未指定であることを示す。
【００８１】
ステップＳＴ３において、ＳＳＤ３のライト抑制管理部２１ａは、管理テーブル３３の更新が成功した場合に、割り当てられたrbp_idを含む応答RBP_Reply(rbp_id=1)を、ファイルシステム４３およびＯＳ４２経由でアプリケーションソフトウェア４１へ送出する。
【００８２】
ステップＳＴ４において、アプリケーションソフトウェア４１は、第１のライト抑制管理ＲＢＰの対象となるデータ「Y」のライト要求を、ＯＳ４２経由で、ファイルシステム４３へ送出する。この結果、ホスト２のファイルシステム４３は、例えば、第１のライト抑制管理ＲＢＰを使用するライトコマンドWrite(addr=10, data=Y, rbp_id=1)をＳＳＤ３へ送出する。
【００８３】
ここで、addrはデータのＳＳＤアドレス(例えばＬＢＡ)を示し、dataはデータを示し、rbp_idは第１のライト抑制管理ＲＢＰを指定する識別子である。このように、第１のライト抑制管理ＲＢＰを用いるデータをＳＳＤ３にライトする場合、ライトコマンドは、第１のライト抑制管理ＲＢＰの識別子であるrbp_idを指定する。
【００８４】
ステップＳＴ５において、ＳＳＤ３のライト抑制管理部２１ａは、第１のライト抑制管理ＲＢＰを使用するライトコマンドを受信すると、管理テーブル３３とＬＵＴ３２とを更新し、データと当該データに対応するＳＳＤアドレスとを第１のライト抑制管理ＲＢＰの対象エリア３１ａにライトする。
【００８５】
図５は、バッファメモリ３１でのデータの保存状態の一例である。バッファメモリ３１は、ＳＳＤアドレスと、当該ＳＳＤアドレスに対応するデータとを保存する。
【００８６】
図６は、ＬＵＴ３２の一例を示すデータ構造図である。ＬＵＴ３２は、ＳＳＤアドレス、ＳＳＤアドレスに対応するデータの保存先タイプ、保存先アドレスを管理する。保存先タイプは、データがＮＡＮＤフラッシュメモリ５に保存されているか、または、ＤＲＡＭ６に保存されているか、を指定する。保存先アドレスは、保存先タイプがＤＲＡＭ６の場合にはメモリアドレスを示し、保存先タイプがＮＡＮＤフラッシュメモリ５の場合にはＮＡＮＤアドレスを示す。ＬＵＴ３２中の「null」は、データが保存されていない状態を示す。
【００８７】
例えば、ＳＳＤ３のライト抑制管理部２１ａは、上記のライトコマンドWrite(addr=10, data=Y, rbp_id=1)を受信すると、図７に示すように、rbp_idは「1」であるため、rbp_id「1」に対応するバッファポインタの示す対象エリア３１ａに、ＳＳＤアドレス「10」とデータ「Y」とをライトする。ライト抑制管理部２１ａは、ＬＵＴ３２に対して、ＳＳＤアドレス「10」のデータ「Y」がＤＲＡＭ６上にあるため、ＳＳＤアドレス「10」に対応する保存先タイプをＤＲＡＭ６を示す「DRAM」とし、ＳＳＤアドレス「10」に対応する保存先アドレスをＤＲＡＭ６上のデータ「Y」のメモリアドレスとする。
【００８８】
ステップＳＴ６において、ＳＳＤ３のライト抑制管理部２１ａは、データ「Y」のライトと、管理テーブル３３及びＬＵＴ３２の更新が成功した場合に、ＳＳＤアドレス「10」を含むライト完了Write_ok(addr=10)を、ホスト２へ送出する。ホスト２のアプリケーションソフトウェア４１は、ライト完了Write_ok(addr=10)を、ファイルシステム４３、ＯＳ４２経由で受信する。
【００８９】
ステップＳＴ７において、アプリケーションソフトウェア４１は、第１のライト抑制管理ＲＢＰの対象となるデータ「Z」のライト要求を、ＯＳ４２経由で、ファイルシステム４３へ送出する。この結果、ホスト２のファイルシステム４３は、例えば、第１のライト抑制管理ＲＢＰを使用するライトコマンドWrite(addr=2, data=Z, rbp_id=1)をＳＳＤ３へ送出する。
【００９０】
ステップＳＴ８において、ＳＳＤ３のライト抑制管理部２１ａは、上記のライトコマンドWrite(addr=2, data=Z, rbp_id=1)を受信する。この場合において、ＳＳＤアドレス「2」は、第１のライト抑制管理ＲＢＰの対象エリア３１ａにまだ保存されていない。したがって、ライト抑制管理部２１ａは、図８に示すように、rbp_id「1」に対応するバッファポインタの示す対象エリア３１ａにタプルを追加し、ＳＳＤアドレス「2」とデータ「Z」とをライトする。ライト抑制管理部２１ａは、ＬＵＴ３２に対して、ＳＳＤアドレス「2」のデータ「Z」がＤＲＡＭ６上にあるため、ＳＳＤアドレス「2」に対応する保存先タイプを「DRAM」とし、ＳＳＤアドレス「2」に対応する保存先アドレスをＤＲＡＭ６上のデータ「Z」のメモリアドレスとする。
【００９１】
ステップＳＴ９において、ＳＳＤ３のライト抑制管理部２１ａは、データ「Z」のライトと、管理テーブル３３及びＬＵＴ３２の更新が成功した場合に、SSDアドレス「2」を含むライト完了Write_ok(addr=2)を、ホスト２へ送出する。ホスト２のアプリケーションソフトウェア４１は、ライト完了Write_ok(addr=2)を、ファイルシステム４３、ＯＳ４２経由で受信する。
【００９２】
ステップＳＴ１０において、アプリケーションソフトウェア４１は、第１のライト抑制管理ＲＢＰの対象となるデータ「X」のライト要求を、ＯＳ４２経由で、ファイルシステム４３へ送出する。この結果、ホスト２のファイルシステム４３は、例えば、第１のライト抑制管理ＲＢＰを使用するライトコマンドWrite(addr=10, data=X, rbp_id=1)をＳＳＤ３へ送出する。
【００９３】
ステップＳＴ１１において、ＳＳＤ３のライト抑制管理部２１ａは、上記のライトコマンドWrite(addr=10, data=X, rbp_id=1)を受信する。この場合において、ＳＳＤアドレス「10」は、過去に第１のライト抑制管理ＲＢＰの対象エリア３１ａに対するライトが行われたＳＳＤアドレスである。したがって、ライト抑制管理部２１ａは、図９に示すように、rbp_id「1」に対応するバッファポインタの示す対象エリア３１ａにタプルを追加することなく、ＳＳＤアドレス「10」に対応するデータ「Y」を、データ「X」に更新する。
【００９４】
ステップＳＴ１２において、ＳＳＤ３のライト抑制管理部２１ａは、データ「X」のライトと、管理テーブル３３及びＬＵＴ３２の更新が成功した場合に、SSDアドレス「10」を含むライト完了Write_ok(addr=10)を、ホスト２へ送出する。ホスト２のアプリケーションソフトウェア４１は、ライト完了Write_ok(addr=10)を、ファイルシステム４３、ＯＳ４２経由で受信する。
【００９５】
ステップＳＴ１３において、アプリケーションソフトウェア４１は、第１のライト抑制管理ＲＢＰの対象のデータ「X」「Z」が不要になった場合に、rbp_idが「1」の第１のライト抑制管理ＲＢＰの解放要求を、ＯＳ４２経由で、ファイルシステム４３へ送出する。この結果、ホスト２のファイルシステム４３は、例えば、第１のライト抑制管理ＲＢＰを解放する解放コマンドRBP_Release(rbp_id=1)をＳＳＤ３へ送出する。
【００９６】
ステップＳＴ１４において、ＳＳＤ３のライト抑制管理部２１ａは、上記の解放コマンドRBP_Release(rbp_id=1)を受信する。すると、ライト抑制管理部２１ａは、管理テーブル３３を参照し、バッファメモリ６上の識別子「1」に対応する対象エリア３１ａに保存されているＳＳＤアドレスとデータとを全て削除し（保存されていない状態とし）、対象エリア３１ａを解放する。そして、ライト抑制管理部２１ａは、図１０に示すように、識別子「1」に対応するタプルを管理テーブル３３から削除する。さらに、ライト抑制管理部２１ａは、図１１に示すように、解放された対象エリア３１ａに対応するＳＳＤアドレス「10」「2」の保存先タイプと保存先アドレスとを「null」とする。
【００９７】
ステップＳＴ１５において、ＳＳＤ３のライト抑制管理部２１ａは、第１のライト抑制管理ＲＢＰの対象エリア３１ａの解放が成功した場合に、rbp_id「1」を含む解放完了Release_ok(rbp_id=1)を、ホスト２へ送出する。ホスト２のアプリケーションソフトウェア４１は、解放完了Release_ok(rbp_id=1)を、ファイルシステム４３、ＯＳ４２経由で受信する。
【００９８】
本実施形態において、アプリケーションソフトウェア４１は、ＤＲＡＭ６の空き領域が許す範囲内で第１のライト抑制管理ＲＢＰのための対象エリア３１ａを確保し、当該対象エリア３１ａにデータをライト可能である。第１のライト抑制管理ＲＢＰにおいて、過去にＳＳＤ３へ保存されたＳＳＤアドレスのデータと、その後に指定された同一のＳＳＤアドレスのデータとは、同一のメモリアドレスに保存される。第１のライト抑制管理ＲＢＰにおいて、過去に保存されたことのないＳＳＤアドレスのデータは、確保された対象エリア３１ａの中でまだ使用されていない新しい位置に保存される。
【００９９】
第１のライト抑制管理ＲＢＰにおいて、確保された対象エリア３１ａに対してこの対象エリア３１ａの記憶容量を超えるデータが保存された場合には，新たな対象エリアが確保されてもよい。新たな対象エリアが確保されなかった場合においては、flagが「false」の場合にはエラーとなり、flagが「true」の場合には第１のライト抑制管理ＲＢＰを用いない通常のＳＳＤ３に対する保存が行われるとしてもよい。
【０１００】
本実施形態において、たとえライトコマンドに第１のライト抑制管理ＲＢＰの識別子が指定されていなくても、アプリケーションソフトウェア４１が指定したＳＳＤアドレスの範囲が第１のライト抑制管理ＲＢＰの対象エリア３１ａに所属する場合には、当該ライトコマンドに対して第１のライト抑制管理ＲＢＰを用いる。具体的には、例えば、第１のライト抑制管理ＲＢＰを使用するコマンドがRBP_Request(size=16, addr_range(100, 16), flag=false)の場合、ライトコマンドWrite(addr=101, data=Y)は第１のライト抑制管理ＲＢＰの識別子rbp_idを含まないが、ＳＳＤアドレス「101」が第１のライト抑制管理ＲＢＰのＳＳＤアドレスの範囲addr_range(100, 16)に含まれるため、ライト抑制管理部２１ａは、このライトコマンドに対して第１のライト抑制管理ＲＢＰを使用し、データ「Y」を対象エリア３１ａにライトする。一方、ライトコマンドWrite(addr=117, data=Z)は、ＳＳＤアドレス「117」が第１のライト抑制管理ＲＢＰのＳＳＤアドレスの範囲addr_range(100, 16)に含まれないため、ライト抑制管理部２１ａは、データ「Z」を通常の処理にしたがってＳＳＤ３にライトする。
【０１０１】
本実施形態において、例えばＳＳＤアドレス、メモリアドレス、ＮＡＮＤアドレスなどのような各種のアドレスは、単なる数字とは限らず、データ構造を持つとしてもよい。例えば、ＳＳＤ３の保存先をチャンネル、ＮＡＮＤメモリチップ、消去ブロック、ページオフセットなどで指定してもよい。
【０１０２】
以下で、図１２を用いて、本実施形態に係るライト抑制管理部２１ａが不正電源断を検知した場合の処理について説明する。
【０１０３】
ライト抑制管理部２１ａは、不正電源断を検知した場合、対象エリア３１ａに保存されているデータを、ＮＡＮＤフラッシュメモリ５にライトする。ライト抑制管理部２１ａは、このライトの際に、あたかもホスト２がＳＳＤアドレスに対してデータをライトしたようにＬＵＴ３２を更新する。すなわち、ライト抑制管理部２１ａは、不正電源断を検知した後、対象エリア３１ａからＮＡＮＤフラッシュメモリ５に移動したデータについて、論理アドレスとＮＡＮＤフラッシュメモリ５における物理アドレスとを関連付けるようにＬＵＴ３２を更新する。これにより、コントローラ４は、ＬＵＴ３２を用いて、データがＮＡＮＤフラッシュメモリ５上にあることを正しく認識する。
【０１０４】
例えば、上記図３のステップＳＴ９の時点、すなわち、アプリケーションソフトウェア４１からＳＳＤ３へライトコマンドWrite(addr=2, data=Z, rbp_id=1)が送出され、ＳＳＤ３からアプリケーションソフトウェア４１へライト完了Write_ok(addr=2)が送出された後に、不正電源断が発生し、その後電源が復帰したとする。
【０１０５】
図１２は、電源復帰後の管理テーブル３３とＬＵＴ３２とＮＡＮＤフラッシュメモリ５との関係を例示する図である。
【０１０６】
管理テーブル３３は初期化されている。不正電源断の発生時に、対象エリア３１ａに保存されていたデータ「Y」「Z」は、ＮＡＮＤフラッシュメモリ５にライトされている。ＬＵＴ３２は、データ「Y」のＳＳＤアドレスと、ＮＡＮＤフラッシュメモリ５を示す保存先タイプ「NAND」、保存先アドレスとを関連付けて管理しており、データ「Z」のＳＳＤアドレスと、保存先タイプ「NAND」、保存先アドレスとを関連付けて管理している。
【０１０７】
以上説明した本実施形態において、ホスト２は繰り返し書き直すデータ、または、不正電源断のような予期せぬ終了のために一時的に保存するデータが、ＮＡＮＤフラッシュメモリ５にライトされることを抑制することができ、ＳＳＤ３に備えられているＮＡＮＤフラッシュメモリ５の寿命を伸ばすことができる。
【０１０８】
また、本実施形態において、ＤＲＡＭ６はＮＡＮＤフラッシュメモリ５よりも高速であるため、ホスト２は、繰り返し書き直すデータ、または、不正電源断のような予期せぬ終了のために一時的に保存するデータのライト制御を高速化することができ、ホスト２の処理を高速化することができる。
【０１０９】
（第２の実施形態）
本実施形態においては、上記第１の実施形態の変形例について説明する。本実施形態においては、ライト抑制管理部２１ａが、第２のライト抑制管理を実行する。
【０１１０】
上記第１の実施形態では、バッファメモリ３１における第１のライト抑制管理ＲＢＰの対象エリア３１ａが、例えば、必要に応じて固定的に確保され、不要になると解放される。これに対して、本実施形態では、ＮＡＮＤフラッシュメモリ５に対するライトを許可しないデータを保存するバッファメモリ３１のエリアが、ライト抑制管理部２１ａの管理にしたがって自動的に切り替わる。
【０１１１】
本実施形態において、コントローラ４は、ＤＲＡＭ６に追記的にライトされたデータ群のうち最新のライトデータから所定の範囲（リライト可能ウィンドウ）内のデータに対してＤＲＡＭ６上でリライト可能とする。そして、コントローラ４は、ＤＲＡＭ６に保存されているデータがリライト可能ウィンドウから外れた場合に、このデータをＮＡＮＤフラッシュメモリ５にライトする。
【０１１２】
コントローラ４は、ホスト２から、リライト可能ウィンドウの開始位置とリライト可能ウィンドウサイズとを指定するコマンドを受信してもよい。
【０１１３】
コントローラ４は、例えば、管理データ３３Ａにより、追記的にライトされたデータ群のうち最新のライトデータの位置と所定の範囲のサイズとを管理する。
【０１１４】
コントローラ４は、ＤＲＡＭ６に保存されているデータがＮＡＮＤフラッシュメモリ５にライトされたが当該データがＮＡＮＤフラッシュメモリ５からリード不可の場合に、ＤＲＡＭ６上の当該データの保存エリアを維持し、当該データがＮＡＮＤフラッシュメモリ５からリード可能となった場合に、ＤＲＡＭ６上の当該データの保存エリアを解除してもよい。
【０１１５】
図１３は、本実施形態に係るライト抑制管理部２１ａによって実現される第２のライト抑制管理に用いられるリライト可能ウィンドウを説明するための図である。
【０１１６】
アプリケーションソフトウェア４１は、例えば追記的なデータのライトを要求する。追記的なデータのライトにおいては、例えば、末尾のデータが繰り返し更新される場合がある。本実施形態に係る第２のライト抑制管理は、このように追記的にデータがライトされ、末尾のデータに対する更新が繰り返される場合であっても、効率的なデータのライトを行う。本実施形態に係るライト抑制管理は、バッファメモリ３１に、位置的に連続となるライトにあわせて移動する一定量のリライト可能ウィンドウrwを確保し、追記的データにおける末尾のデータを専有的にリライト可能ウィンドウrwに割り当てる。この追記的データにおける末尾のデータを専有的にリライト可能ウィンドウrwに割り当てる第２のライト抑制管理は、ＡＢＰ（Append Buffer Pinning）と表記してもよい。この第２のライト抑制管理ＡＢＰは、バッファメモリまたはキャッシュメモリに対するデータの可動的割り付けを行う。第２のライト抑制管理ＡＢＰによってデータが可能的に割り付けられるバッファメモリまたはキャッシュメモリを、ＡＷＭ（Appendable Write-suppression Memory）と称してもよい。
【０１１７】
アプリケーションソフトウェア４１は、第２のライト抑制管理ＡＢＰを要求する場合に、ＳＳＤ３上のライト開始位置を示す位置データ（例えばＬＢＡ）と、バッファメモリ３１における第２のライト抑制管理ＡＢＰで用いられるリライト可能ウィンドウrwの記憶容量（リライト可能ウィンドウサイズ）を指定する。
【０１１８】
第２のライト抑制管理ＡＢＰを用いるライトでは、ライトヘッドからライト開始位置の方向へリライト可能ウィンドウサイズだけ向かった範囲内のエリアについては、自由な位置に何度でもライト可能（オーバーライト可能）である。図１３において、ライトヘッドからライト開始位置の方向へリライト可能ウィンドウサイズだけ向かった範囲内のエリアが、リライト可能ウィンドウrwに相当する。
【０１１９】
ライトヘッドの初期値は、ライト開始位置にリライト可能ウィンドウサイズを足した値である。
【０１２０】
第２のライト抑制管理ＡＢＰを用いたライトでは、リライト可能ウィンドウrwの範囲外へのライトは、１つの例外の位置を除いて許されない。１つの例外の位置とは、リライト可能ウィンドウrwの範囲外側であり、ライトヘッドに隣接する位置である。本実施形態では、この例外の位置を、次の追記可能位置という。
【０１２１】
第２のライト抑制管理ＡＢＰを用いたライトでは、 全ての有効（valid）なライトの要求はすべてＤＲＡＭ６にライトされる。ライト抑制管理部２１ａは、必要であれば、第２のライト抑制管理ＡＢＰを用いたライトに対して、新しく、第２のライト抑制管理ＡＢＰの対象エリア２１ａをＤＲＡＭ６上に確保し、第２のライト抑制管理ＡＢＰのために対象エリア２１ａを専有化する。
【０１２２】
第２のライト抑制管理ＡＢＰにおいて、次の追記可能位置にライトが行われた場合、ライトヘッドはそのライトの最後の位置へ移動する。すなわち、リライト可能ウィンドウrwは、１つのライト単位分ずれる（移動する）。リライト可能ウィンドウrwの外側に保存されているデータは、ＮＡＮＤフラッシュメモリ５にライトされる。リライト可能ウィンドウrwから外れたエリアについては更新（オーバーライト）不可とする。
【０１２３】
本実施形態においては、ＮＡＮＤフラッシュメモリ５にデータがライトされても、直ちにこのライトされたデータはＮＡＮＤフラッシュメモリ５からリード可能ではなく、しばらくの時間を経過することでＮＡＮＤフラッシュメモリ５からリード可能になるとする。第２のライト抑制管理ＡＢＰにおいて、リライト可能ウィンドウrwから外れたデータがＮＡＮＤフラッシュメモリ５にライトされ、当該データがＮＡＮＤフラッシュメモリ５からリード可能な場合、ＤＲＡＭ６上の当該データの保存エリアは、第２のライト抑制管理ＡＢＰによる専有から解放可能である。ライト抑制管理部２１ａは、ＮＡＮＤフラッシュメモリ５にライトされたデータがＮＡＮＤフラッシュメモリ５からリード可能になっているか否かを、実際にＮＡＮＤフラッシュメモリ５からのリードを実行して確認してもよい。ライト抑制管理部２１ａは、ＮＡＮＤフラッシュメモリ５にライトされたデータがＮＡＮＤフラッシュメモリ５からリード可能になっているか否かを、事前にリード可能な条件（ライト後の時間、ライト量、または、ライトパターンなどの条件）を定めておき、この条件を満たすか否かにより判断してもよい。
【０１２４】
ライトヘッドは、第２のライト抑制管理ＡＢＰを用いるライトにおけるＤＲＡＭ６上の最新のライト位置を示す。
【０１２５】
リードテールは、リライト可能ウィンドウrwから外れたためＮＡＮＤフラッシュメモリ５へライトされたがＮＡＮＤフラッシュメモリ５から未だにリード不可なデータのうち、次にＮＡＮＤフラッシュメモリ５からリード可能になるデータの位置を示す。
【０１２６】
ＳＳＤ３が物理的または仮想的な消去ブロックを指定したライトを許可する場合、第２のライト抑制管理ＡＢＰにおいて、データの保存先は、指定された消去ブロックとしてもよい。
【０１２７】
ＳＳＤ３が複数の消去ブロックをまとめて一つの保存先のエリアとして扱い、複数の消去ブロックのまとまりを指定したライトを許可する場合、第２のライト抑制管理ＡＢＰにおいて、データの保存先は、指定された複数の消去ブロックのまとまりとしてもよい。
【０１２８】
第２のライト抑制管理ＡＢＰが物理的または仮想的な消去ブロック、または、複数の消去ブロックのまとまりと関連付けられている場合、第２のライト抑制管理ＡＢＰは、物理的または仮想的な消去ブロック、または、複数の消去ブロックのまとまりの末尾を超えたライトを許容してもよく、許容しなくてもよい。
【０１２９】
第２のライト抑制管理ＡＢＰにおいて関連付けられている範囲を超えたライトを許容する場合、第２のライト抑制管理ＡＢＰは、暗黙的に新しい物理的または仮想的な消去ブロック、または、複数の消去ブロックのまとまりを第２のライト抑制管理ＡＢＰに対して割り当てて処理を継続するとしてもよい。
【０１３０】
第２のライト抑制管理ＡＢＰにおいて関連付けられている範囲を超えたライトを許容しない場合、第２のライト抑制管理ＡＢＰは、関連付けられている範囲を超えたライトをエラーとして扱う。
【０１３１】
アプリケーションソフトウェア４１は、バッファメモリ３１における第２のライト抑制管理ＡＢＰのリライト可能ウィンドウrwを解放することが可能である。このとき、バッファメモリ３１におけるリライト可能ウィンドウrwに保存されているデータは、破棄され、ＮＡＮＤフラッシュメモリ５にライトされない。
【０１３２】
アプリケーションソフトウェア４１は、バッファメモリ３１におけるリライト可能ウィンドウrwを解放する前に、リライト可能ウィンドウrwに保存されているデータを、ＮＡＮＤフラッシュメモリ５にライトすることを要求可能としてもよい。また、アプリケーションソフトウェア４１は、リライト可能ウィンドウrwを解放する前にＮＡＮＤフラッシュメモリ５へライトするデータを、リライト可能ウィンドウrwの全体のデータとしてもよく、リライト可能ウィンドウrwのデータの一部（例えばリライト可能ウィンドウrwの先頭から特定の範囲）に限定してもよい。
【０１３３】
不正電源断のような予期せぬ終了が発生した場合、ライト抑制管理部２１ａは、蓄電装置１５の電力を使用して、ＤＲＡＭ６に保存されているデータを、ＤＲＡＭ６に保存されているＳＳＤアドレスにしたがって全てＮＡＮＤフラッシュメモリ５にライトするとともに、ＤＲＡＭ６に保存されているデータがＮＡＮＤフラッシュメモリ５にライトされた後の状態でＬＵＴ３２を更新する。
【０１３４】
以下で、図１４から図１９を用いて、本実施形態に係るライト抑制管理部２１ａによって実現される第２のライト抑制管理ＡＢＰを具体的に説明する。
【０１３５】
まず、アプリケーションソフトウェア４１は、第２のライト抑制管理ＡＢＰの使用を、ＯＳ４２経由で、ファイルシステム４３へ要求する。この結果、ホスト２のファイルシステム４３は、例えば、第２のライト抑制管理ＡＢＰのリクエストABP_Request(start_addr=1000, rewritable_window_size=4)をＳＳＤ３へ送出する。
【０１３６】
ここで、start_addrは、ライト開始位置を示すＳＳＤアドレスを示す。rewritable_window_sizeは、リライト可能ウィンドウサイズの値を示す。リライト可能ウィンドウサイズの１単位は、start_addrで示される範囲の１単位と同じとする。例えば、ＳＳＤアドレスが４キロバイト単位のＬＢＡに相当するＳＳＤ３において、リライト可能ウィンドウサイズが「1」と表記されている場合には、リライト可能ウィンドウサイズの実際の記憶容量は、４キロバイトとなる。
【０１３７】
次に、ＳＳＤ３のライト抑制管理部２１ａは、第２のライト抑制管理ＡＢＰのリクエストABP_Request(start_addr=1000, rewritable_window_size=4)を受信すると、指定されたリライト可能ウィンドウサイズ及び必要となるリードオンリーのバッファエリアが十分に収容できるサイズのＤＲＡＭ６上の第２のライト抑制管理ＡＢＰの対象エリア３１ａを確保する。本実施形態においては、例えば、確保された対象エリア３１ａのメモリアドレスが、対象エリア３１ａを示すバッファポインタとして管理される。確保された対象エリア３１ａは、リスト形式でもよく、リングバッファのような形式でもよい。
【０１３８】
ライト抑制管理部２１ａは、対象エリア３１ａが確保できなかった場合、ホスト２へエラーを返す。ホスト２のアプリケーションソフトウェア４１は、ファイルシステム４３、ＯＳ４２経由で、エラーを受信する。
【０１３９】
ライト抑制管理部２１ａは、対象エリア３１ａが確保できた場合、要求された第２のライト抑制管理ＡＢＰに対応する識別子abp_idに「1」を割り当て、図１４に示すように、管理テーブル３３Ａに、識別子abp_idとして「1」、スタートアドレスstart_addrとして「1000」、リライト可能ウィンドウサイズrewritable_window_sizeとして「4」、ライトヘッドwh、リードテールrt、バッファポインタをライトする。例えば、バッファポインタは、確保された対象エリア３１ａの先頭のメモリアドレスでもよい。
【０１４０】
ライトヘッドwhは、現在のライトヘッドを、スタートアドレスからのオフセット値で示している。ライトヘッドwhの初期値は、start_addr＋rewritable_window_size−1となる。ライト抑制管理部３１ａは、ＤＲＡＭ６における実際の位置を求める場合には、例えば４キロバイト（４０９６バイト）などのＳＳＤアドレスの単位を乗算する処理を行う。
【０１４１】
リードテールrtは、現在のリードテールをスタートアドレスからのオフセット値で示している。リードテールrtの初期値はゼロとする。
【０１４２】
ＳＳＤ３のライト抑制管理部２１ａは、管理テーブル３３Ａの更新が成功した場合に、割り当てられた識別子abp_idを含む応答ABP_Reply(abp_id=1)を、ホスト２へ送出する。ホスト２のアプリケーションソフトウェア４１は、ファイルシステム４３、ＯＳ４２経由で、応答ABP_Reply(abp_id=1)を受信する。
【０１４３】
次に、アプリケーションソフトウェア４１は、データ「A」「B」「C」「D」「E」「F」「G」「H」「I」「J」を、ＳＳＤアドレス「1000」から順次ライトすることを、ＯＳ４２、ファイルシステム４３経由で、ＳＳＤ３へ送出する。データ「A」「B」「C」「D」「E」「F」「G」「H」「I」「J」は、それぞれ4キロバイトであるとする。
【０１４４】
図１５は、ＳＳＤアドレスが「1000」であるデータ「A」がＤＲＡＭ６にライトされた場合の管理テーブル３３ＡとＤＲＡＭ６とＮＡＮＤフラッシュメモリ５との関係を例示する図である。
【０１４５】
ライト抑制管理部２１ａは、データ「A」のライトがリライト可能ウィンドウrwの範囲内で行われるため、ＤＲＡＭ６にのみデータ「A」をライトする。
【０１４６】
図１６は、ＳＳＤアドレスが「1000」から「1003」であるデータ「A」からデータ「D」までがＤＲＡＭ６にライトされた場合の管理テーブル３３ＡとＤＲＡＭ６とＮＡＮＤフラッシュメモリ５との関係を例示する図である。
【０１４７】
ライト抑制管理部２１ａは、データ「A」からデータ「D」までのライトがリライト可能ウィンドウrwの範囲内で行われるため、ＤＲＡＭ６にのみデータ「A」からデータ「D」までをライトする。
【０１４８】
この図１６の状態では、ライト抑制管理部２１ａは、リライト可能ウィンドウrwの範囲内に保存されているデータ「A」からデータ「D」のまでのいずれのデータであっても、ＤＲＡＭ６上で更新することができる。
【０１４９】
上記図１６の状態で、さらにＳＳＤアドレスが「1004」であるデータ「E」のライトが発生したとする。この場合、ＤＲＡＭ６に対するデータ「E」のライトは、上記図１６におけるリライト可能ウィンドウrwの範囲を超える。しかしながら、ＤＲＡＭ６に対するデータ「E」のライトの位置は、次の追加可能位置である「wh＋１」に等しいため、ＤＲＡＭ６の当該次の追加可能位置にデータ「E」をライトする。
【０１５０】
図１７は、ＳＳＤアドレスが「1004」であるデータ「E」がＤＲＡＭ６にライトされた場合の管理テーブル３３ＡとＤＲＡＭ６とＮＡＮＤフラッシュメモリ５との関係を例示する図である。
【０１５１】
この図１７では、上記図１６における次の追加可能位置にデータ「E」がライトされたため、ライトヘッドwhが、上記図１６の場合よりも１単位移動している。したがって、図１７のリライト可能ウィンドウrwの位置は、上記図１６のリライト可能ウィンドウrwの位置から新たなライトの行われた側へ１単位ずれている。
【０１５２】
このリライト可能ウィンドウrwの移動により、ＤＲＡＭ６におけるデータ「A」の位置は、リライト可能ウィンドウrwから外れる。すると、ライト抑制管理部２１ａは、リライト可能ウィンドウrwから外れたデータ「A」を、ＮＡＮＤフラッシュメモリ５にライトする。
【０１５３】
ＮＡＮＤフラッシュメモリ５にライトされた当該データ「A」がまだＮＡＮＤフラッシュメモリからリードすることができない場合、ライト抑制管理部２１ａは、リードテールrtを移動することなく、データ「A」が保存されているＤＲＡＭ６上の位置をリードオンリーのバッファエリアrobとし、解放を行わない。
【０１５４】
図１８は、ＳＳＤアドレスが「1005」から「1007」であるデータ「F」からデータ「H」までがＤＲＡＭ６にライトされた場合の管理テーブル３３ＡとＤＲＡＭ６とＮＡＮＤフラッシュメモリ５との関係を例示する図である。
【０１５５】
ライト抑制管理部２１ａは、ＤＲＡＭ６にデータ「F」「G」「H」をライトし、ライトの順にライトヘッドwhを移動し、リライト可能ウィンドウrwから外れたＤＲＡＭ６上のデータ「B」「C」「D」をＮＡＮＤフラッシュメモリ５へライトする。仮に、データ「A」「B」「C」「D」がまだＮＡＮＤフラッシュメモリ５からリードできない場合には、ライト抑制管理部２１ａは、リードテールrtを移動することなく、ＤＲＡＭ６上のリードオンリーのバッファエリアrobが広がり、ライト抑制管理部２１ａは、ＤＲＡＭ６上のデータ「A」「B」「C」「D」の保存エリアを解放しない。
【０１５６】
図１９は、ＳＳＤアドレスが「1008」であるデータ「I」がＤＲＡＭ６にライトされた場合の管理テーブル３３ＡとＤＲＡＭ６とＮＡＮＤフラッシュメモリ５との関係を例示する図である。
【０１５７】
ライト抑制管理部２１ａは、ＤＲＡＭ６にデータ「I」をライトし、ライトヘッドwhを移動し、ＤＲＡＭ６に保存されているデータ「E」をＮＡＮＤフラッシュメモリ５へライトする。ここで、データ「A」がＮＡＮＤフラッシュメモリ５からリード可能になったとする。この場合、ライト抑制管理部２１ａは、リードテールrtを移動し、ライト抑制管理部２１ａは、ＤＲＡＭ６上のデータ「A」の保存エリアを解放する。
【０１５８】
以上説明した本実施形態においては、上記第１の実施形態の場合と同様に、ＤＲＡＭ６６へのライトが優先され、ＮＡＮＤフラッシュメモリ５へのライトが抑制される。したがって、ＳＳＤ３のライト動作を高速化することができ、ＮＡＮＤフラッシュメモリ５に対する不要なライトを防止することによりＮＡＮＤフラッシュメモリ５の寿命を延ばすことができる。
【０１５９】
図２０は、上記の各実施形態に係るホスト２として機能する情報処理装置（コンピューティングデバイス）のハードウェア構成例を示すブロック図である。
【０１６０】
この情報処理装置は、サーバ（例えばストレージサーバ）のようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０１６１】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。プロセッサ１０１によって実行されるプログラムは、上述のアプリケーションソフトウェア４１、ＯＳ４２およびファイルシステム４３を含む。また、プロセッサ１０１によって実行されるプログラムは、Ｉ／Ｏ管理モジュール４４を含んでいてもよい。このＩ／Ｏ管理モジュール４４は、上述の最小データ長の単位で、またはこの最小データ長の整数倍のデータ長単位で、ＳＳＤ３にデータＩ／Ｏ要求（書き込み要求、読み出し要求）を送出する。Ｉ／Ｏ管理モジュール４４は、アプリケーションソフトウェア４１に含まれていてもよいし、あるいはＯＳ４２またはファイルシステム４３に含まれていてもよい。
【０１６２】
Ｉ／Ｏ管理モジュール４４は、ＳＳＤ３のＬＢＡ空間を使用して、データ管理を実行する。
【０１６３】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０１６４】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０１６５】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続される。コントローラ１０７は、SAS expander、PCIe Switch、PCIe expander、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０１６６】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。ＥＣ１０８は、キーボード（ＫＢ）などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【０１６７】
図２１は、上記各実施形態に係る複数のＳＳＤ３とホスト２とを含む情報処理装置の構成例を示す斜視図である。
【０１６８】
この情報処理装置は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のＳＳＤ３は筐体２０１内に配置されてもよい。この場合、各ＳＳＤ３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０１６９】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０１７０】
上記各実施形態では、不揮発性メモリとしてＮＡＮＤフラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ、ＰＲＡＭ（Phase change Random Access Memory）、ＲｅＲＡＭ（Resistive Random Access Memory）、または、ＦｅＲＡＭ（Ferroelectric Random Access Memory）のような他の様々な不揮発性メモリにも適用できる。
【０１７１】
上記各実施形態において、テーブル形式のデータは、例えば、ハッシュテーブル構造、木構造、リスト構造など、他のデータ構造を持つとしてもよい。
【０１７２】
上記各実施形態においては、アプリケーションソフトウェア４１が各種要求を、ＯＳ４２経由でファイルシステム４３に送出し、ファイルシステム４３が各種要求に対応するコマンドをＳＳＤ３に送出している。しかしながら、アプリケーションソフトウェア４１、ＯＳ４２、ホスト２で実行される他のソフトウェアのいずれであっても、各種のコマンドを生成してもよい。
【０１７３】
上記各実施形態においては、アプリケーションソフトウェア４１が、ＳＳＤ３からの各種の完了の通知を、ファイルシステム４３、ＯＳ４２経由で受信している。しかしながら、完了の通知は、ファイルシステム４３またはＯＳ４２が受信するとしてもよい。また、アプリケーションソフトウェア４１は、ファイルシステム４３、ＯＳ４２のうちの少なくとも一方を経由することなく、完了の通知を受信してもよい。
【０１７４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１７５】
１…情報処理システム、２…ホスト、４１…アプリケーションソフトウェア、４２…ＯＳ、４３…ファイルシステム、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤフラッシュメモリ、６…ＤＲＡＭ、２１…ライト動作制御部、２１ａ…ライト抑制管理部、２２…リード動作制御部、３１…バッファメモリ、３１ａ…ライト抑制管理の対象エリア、３２…ＬＵＴ、３３…管理テーブル。
【図１】
2018073040.tif 000003
【図２】
2018073040.tif 000004
【図３】
2018073040.tif 000005
【図４】
2018073040.tif 000006
【図５】
2018073040.tif 000007
【図６】
2018073040.tif 000008
【図７】
2018073040.tif 000009
【図８】
2018073040.tif 000010
【図９】
2018073040.tif 000011
【図１０】
2018073040.tif 000012
【図１１】
2018073040.tif 000013
【図１２】
2018073040.tif 000014
【図１３】
2018073040.tif 000015
【図１４】
2018073040.tif 000016
【図１５】
2018073040.tif 000017
【図１６】
2018073040.tif 000018
【図１７】
2018073040.tif 000019
【図１８】
2018073040.tif 000020
【図１９】
2018073040.tif 000021
【図２０】
2018073040.tif 000022
【図２１】
2018073040.tif 000023