(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024044792
(43)【公開日】2024-04-02
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/00 20060101AFI20240326BHJP
G06F 12/02 20060101ALI20240326BHJP
G06F 21/60 20130101ALI20240326BHJP
【FI】
G06F12/00 560F
G06F12/02 530C
G06F12/00 597U
G06F21/60 320
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022150539
(22)【出願日】2022-09-21
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】山口 健作
(72)【発明者】
【氏名】岩崎 清隆
(72)【発明者】
【氏名】竹本 卓
(72)【発明者】
【氏名】及川 恒平
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CB03
5B160MM20
(57)【要約】 (修正有)
【課題】データの部分的なオーバーライトを効率的に行う。
【解決手段】第1のデータ群は、第1のデータが第1の論理アドレスに関連付けられ、第2のデータが第2の論理アドレスに関連付けられる。コントローラは、圧縮された第1のデータ群を暗号化し、暗号化された第1のデータ群に基づくデータを不揮発性メモリにライトする。コントローラは、ホストからのコマンドに応じて、暗号化された第1のデータ群をリードする。コマンドは、第3のデータのライトを指示する。第3のデータは、第1のサイズより小さい第2のサイズと第1の論理アドレスとを指定する。コントローラは、第3のデータを非圧縮で暗号化し、複合データを生成する。複合データは、暗号化された第1のデータ群と暗号化された第3のデータとがグループ化れ、第3のデータが第1のデータに代わって第1の論理アドレスに関連付けられる。複合データに基づくデータを不揮発性メモリにライトする。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ホストと接続可能であって、
不揮発性メモリと、
第1のデータ及び第2のデータを含み前記第1のデータが第1の論理アドレスに関連付けられ前記第2のデータが第2の論理アドレスに関連付けられた第1のサイズを有する第1のデータ群を圧縮し、圧縮された第1のデータ群を暗号化し、前記暗号化された第1のデータ群に基づくデータを前記不揮発性メモリにライトし、前記第1のサイズより小さい第2のサイズと前記第1の論理アドレスとを指定する第3のデータのライトを指示する前記ホストからのコマンドに応じて、前記暗号化された第1のデータ群をリードし、前記第3のデータを非圧縮で暗号化し、前記暗号化された第1のデータ群と前記暗号化された第3のデータとがグループ化され前記第3のデータが前記第1のデータに代わって前記第1の論理アドレスに関連付けられる複合データを生成し、前記複合データに基づくデータを前記不揮発性メモリにライトするコントローラと、
を備えたメモリシステム。
【請求項2】
前記複合データの生成は、前記第3のデータが前記第1のデータに代わって前記第1の論理アドレスに関連付けられることを示す情報を含むヘッダを前記第1のデータ群及び前記第3のデータに付加することを含む
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、前記暗号化された第1のデータ群を前記不揮発性メモリにライトする際に前記第1の論理アドレスと前記暗号化された第1のデータ群に基づくデータがライトされる第1の物理アドレスとの第1の対応関係をアドレス変換情報に登録し、前記複合データに基づくデータを前記不揮発性メモリにライトする際に前記アドレス変換情報における前記第1の対応関係を前記第1の論理アドレスと前記複合データに基づくデータがライトされる第2の物理アドレスとの第2の対応関係に置き換える
請求項2に記載のメモリシステム。
【請求項4】
前記コントローラは、前記暗号化された第1のデータ群を前記不揮発性メモリにライトする際に前記第1の論理アドレスと圧縮され暗号化された第1のデータ群に基づくデータがライトされる第1の物理アドレスとの第1の対応関係をアドレス変換情報に登録し、前記複合データに基づくデータを前記不揮発性メモリにライトする際に前記アドレス変換情報における前記第1の対応関係に対して前記第1の論理アドレスと前記第3のデータがライトされる第2の物理アドレスとの第2の対応関係を追加して更新する
請求項2に記載のメモリシステム。
【請求項5】
前記コントローラは、前記第3のデータの暗号化の後、前記コマンドに対するレスポンスを前記ホストに送信する
請求項1に記載のメモリシステム。
【請求項6】
前記コントローラは、前記第2のサイズと前記第2の論理アドレスとを指定する第4のデータのライトを指示するコマンドに応じて、前記暗号化された第1のデータ群と前記暗号化された第3のデータとを含む前記複合データに基づくデータをリードし、前記第4のデータを非圧縮で暗号化し、前記暗号化された第1のデータ群と前記暗号化された第3のデータと前記暗号化された第4のデータとがグループ化され前記第3のデータが前記第1のデータに代わって前記第1の論理アドレスに関連付けられ前記第4のデータが前記第2のデータに代わって前記第2の論理アドレスに関連付けられるように前記複合データを更新し、更新された複合データに基づくデータを前記不揮発性メモリにライトする
請求項1に記載のメモリシステム。
【請求項7】
前記コントローラは、前記複合データにおける前記暗号化された第1のデータ群と前記暗号化された第3のデータと前記暗号化された第4のデータとのグループ化を解除し、前記第3のデータ及び前記第4のデータを含み前記第3のデータが前記第1の論理アドレスに関連付けられ前記第4のデータが前記第2の論理アドレスに関連付けられ非圧縮で暗号化された第2のデータ群を作成し、前記作成した第2のデータ群を前記不揮発性メモリにライトする
請求項6に記載のメモリシステム。
【請求項8】
ホストと接続可能であって、
不揮発性メモリと、
第1のデータ及び第2のデータを含み前記第1のデータが第1の論理アドレスに関連付けられ前記第2のデータが第2の論理アドレスに関連付けられた第1のサイズを有する第1のデータ群を圧縮し、圧縮された第1のデータ群を暗号化し、前記暗号化された第1のデータ群に基づくデータを前記不揮発性メモリにライトし、前記第1のサイズより小さい第2のサイズと前記第1の論理アドレスとを指定する第3のデータのライトを指示する前記ホストからのコマンドに応じて、前記第1のデータ群を復号するか否かを判断し、
前記第1のデータ群を復号しない場合、前記暗号化された第1のデータ群をリードし、前記第3のデータを非圧縮で暗号化し、前記暗号化された第1のデータ群と前記暗号化された第3のデータとがグループ化され前記第3のデータが前記第1のデータに代わって前記第1の論理アドレスに関連付けられる複合データを生成し、前記複合データに基づくデータを前記不揮発性メモリにライトし、
前記第1のデータ群を復号する場合、前記暗号化された第1のデータ群をリードし、前記暗号化された第1のデータ群を復号し、復号された第1のデータ群を伸張し、復号され伸張された第1のデータ群を前記第1のデータが前記第3のデータに置き換わるように更新し、更新された第1のデータ群を前記不揮発性メモリにライトするコントローラと、
を備えたメモリシステム。
【請求項9】
ホストと接続可能であって、
不揮発性メモリと、
第1のデータ及び第2のデータを含み前記第1のデータが第1の論理アドレスに関連付けられ前記第2のデータが第2の論理アドレスに関連付けられた第1のサイズを有する第1のデータ群を圧縮し、圧縮された第1のデータ群を暗号化し、前記暗号化された第1のデータ群に基づくデータを前記不揮発性メモリにライトし、前記第1のサイズより小さい第2のサイズと前記第1の論理アドレスとを指定する第3のデータのライトを指示する前記ホストからのコマンドに応じて、前記暗号化された第1のデータ群をリードし、前記第3のデータを圧縮し、圧縮された第3のデータを暗号化し、前記暗号化された第1のデータ群と前記暗号化された第3のデータとがグループ化され前記第3のデータが前記第1のデータに代わって前記第1の論理アドレスに関連付けられる複合データを生成し、前記複合データに基づくデータを前記不揮発性メモリにライトするコントローラと、
を備えたメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステムに関する。
【背景技術】
【0002】
圧縮機能を有するメモリシステムでは、データを圧縮して不揮発性メモリにライトすることができる。メモリシステムでは、ライトされたデータに対して、部分的にオーバーライトを要求されることがある。このとき、データの部分的なオーバーライトを効率的に行うことが望まれる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2021/263682号明細書
【特許文献2】米国特許出願公開第2016/18993号明細書
【特許文献3】米国特許出願公開第2020/387316号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
一つの実施形態は、データの部分的なオーバーライトを効率的に行うことができるメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
一つの実施形態によれば、ホストと接続可能であって、不揮発性メモリとコントローラとを有するメモリシステムが提供される。コントローラは、第1のデータ群を圧縮する。第1のデータ群は、第1のデータ及び第2のデータを含む。第1のデータ群は、第1のデータが第1の論理アドレスに関連付けられ、第2のデータが第2の論理アドレスに関連付けられる。第1のデータ群は、第1のサイズを有する。コントローラは、圧縮された第1のデータ群を暗号化する。コントローラは、暗号化された第1のデータ群に基づくデータを不揮発性メモリにライトする。コントローラは、ホストからのコマンドに応じて、暗号化された第1のデータ群をリードする。コマンドは、第3のデータのライトを指示する。第3のデータは、第1のサイズより小さい第2のサイズと第1の論理アドレスとを指定する。コントローラは、第3のデータを非圧縮で暗号化する。コントローラは、複合データを生成する。複合データは、暗号化された第1のデータ群と暗号化された第3のデータとがグループ化される。複合データでは、第3のデータが第1のデータに代わって第1の論理アドレスに関連付けられる。コントローラは、複合データに基づくデータを不揮発性メモリにライトする。
【図面の簡単な説明】
【0006】
【
図1】第1の実施形態にかかるメモリシステムの構成を示すブロック図。
【
図2】第1の実施形態におけるデータの管理単位を示す図。
【
図3】第1の実施形態における圧縮単位のサイズと平均圧縮率との関係を示す図である。
【
図4】第1の実施形態にかかるライト動作の流れを示すフローチャート。
【
図5】第1の実施形態における各クラスタの構成を示す図。
【
図6】第1の実施形態におけるアドレス変換情報の構成を示す図。
【
図7】第1の実施形態における複合クラスタの生成処理を示す図。
【
図8】第1の実施形態におけるアドレス変換情報及び物理空間に関する動作を示す図。
【
図9】第1の実施形態の変形例におけるアドレス変換情報及び物理空間に関する動作を示す図。
【
図10】第2の実施形態にかかるメモリシステムの動作を示すフローチャート。
【
図11】第2の実施形態における複合クラスタの生成・更新処理を示す図。
【
図12】第3の実施形態における複合クラスタの生成・更新処理及び非圧縮クラスタの生成処理を示す図。
【
図13】第3の実施形態におけるアドレス変換情報及び物理空間に関する動作を示す図。
【
図14】第4の実施形態における複合クラスタの生成・更新処理を示す図。
【
図15】第4の実施形態におけるアドレス変換情報及び物理空間に関する動作を示す図。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0008】
(第1の実施形態)
第1の実施形態にかかるメモリシステムは、圧縮機能を有し、データを圧縮して不揮発性メモリにライトすることができるが、圧縮対象となるデータの単位である圧縮単位より小さいサイズのデータによる部分的なオーバーライトを効率的に行うための工夫が施される。メモリシステム1は、例えば
図1に示すように構成される。
図1は、メモリシステム1の構成を示すブロック図である。
【0009】
メモリシステム1は、ホストチャネルHCHを介してホスト100と通信可能に接続され、ホスト100に対する記憶媒体として機能し得る。例えば、メモリシステム1は、SSD(Solid State Drive)などであり、ホスト100は、パーソナルコンピュータ等の端末又はそのCPU(Central Processing Unit)などであり、ホストチャネルHCHは、有線通信路等である。
【0010】
メモリシステム1は、コントローラ2、1以上の不揮発性メモリ3及びバッファメモリ4を有する。メモリシステム1は、複数の不揮発性メモリ3-1~3-N(Nは任意の2以上の整数)を有してもよい。
【0011】
コントローラ2は、ホストチャネルHCHを介してホスト100に接続可能であり、ホスト100との間でコマンド・データ等を送受信可能である。コントローラ2は、チャネルCH1を介して複数の不揮発性メモリ3-1~3-Nに接続され、コマンド・データ等を不揮発性メモリ3との間で転送可能である。コントローラ2は、チャネルCH2を介してバッファメモリ4に接続され、データ・管理情報等をバッファメモリ4に一時的に格納可能である。
【0012】
複数の不揮発性メモリ3-1~3-Nのそれぞれは、データ・管理情報等を不揮発に記憶可能である。不揮発性メモリ3における記憶領域のうち、データを記憶するための領域をストレージ領域と呼び、管理情報等を記憶するための領域を管理情報格納領域と呼ぶことがある。
【0013】
各不揮発性メモリ3は、例えばNAND型フラッシュメモリ、ReRAM(Resistance Random Access Memory)、PRAM(Phase change RAM)、MRAM(Magnetoresistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)であってもよい。以下では、各不揮発性メモリ3がNAND型フラッシュメモリである場合を中心に説明する。
【0014】
バッファメモリ4は、データ・管理情報等を一時的に格納可能である。バッファメモリ4は、例えば、DRAM(Dynamic Random Access Memory)等の揮発性メモリである。バッファメモリ4は、コントローラ2による作業領域として用いられ得る。バッファメモリ4は、ライト処理・リード処理に関するデータを一時的に格納したり、ガーベージコレクション等の内部処理のデータを一時的に格納したり、アドレス変換情報等の管理情報を一時的に格納したりする。
【0015】
コントローラ2は、メモリシステム1の各部を統括的に制御する。コントローラ2は、例えばSoC(System-on-a-Chip)を含むコントローラパッケージとして実装され得る。コントローラ2は、セキュリティの要求に応じて暗号化機能を有するとともに、記憶容量増加の要求に応じて圧縮機能を有する。
【0016】
コントローラ2は、ホストインタフェース(ホストI/F)21、プロセッサ22、バッファインタフェース(バッファI/F)23、ECC(Error Correction Code)回路24、圧縮・伸張回路25、暗号化回路26及びメモリインタフェース(メモリI/F)27、バス28を有する。
【0017】
ホストインタフェース21、プロセッサ22、バッファインタフェース23、ECC回路24、圧縮・伸張回路25、暗号化回路26及びメモリインタフェース27は、バス28を介して通信可能に接続される。
【0018】
ホストインタフェース21は、ホストチャネルHCHを介してホスト100に接続可能である。ホストインタフェース21は、ホスト100からコマンド・データを受信したり、ホスト100へレスポンス・データを送信したりする。
【0019】
プロセッサ22は、コントローラ2の各部を統括的に制御する。プロセッサ22は、CPU(Central Processing Unit)等として実装され得る。プロセッサ22は、ホストインタフェース21で受信されたホスト100からのライトコマンドに応じて、不揮発性メモリ3にデータをライトするライト処理を制御する。プロセッサ22は、ホストインタフェース21で受信されたホスト100からのリードコマンドに応じて、不揮発性メモリ3からデータをリードするリード処理を制御する。
【0020】
バッファインタフェース23は、プロセッサ22による制御のもと、バッファメモリ4に対するインタフェース動作を行う。バッファインタフェース23は、ライト処理・リード処理に関するデータ、ガーベージコレクション等の内部処理のデータ、アドレス変換情報等の管理情報などをバッファメモリ4との間で転送可能である。
【0021】
ECC回路24は、リードデータにおける誤り検出および誤り訂正のために、データのエンコードおよびデコードを行う。ECC回路24は、不揮発性メモリ3にライトされるデータ(ライトデータ)をエンコードする。また、ECC回路24は、不揮発性メモリ3からリードされたデータ(リードデータ)をデコードする。ECC回路24は、デコードによって、リードデータにおける誤り検出および誤り訂正を実行する。ECC回路24は、誤り訂正に失敗した場合には、誤り訂正の失敗をプロセッサ22に通知する。
【0022】
ECC回路24によるエンコードおよびデコードのアルゴリズムには、RS(リード・ソロモン)符号やBCH(Bose-Chaudhuri-Hocquenghem)符号や低密度パリティ検査(LDPC)符号等を用いた任意のアルゴリズムを適用することが可能である。
【0023】
圧縮・伸張回路25は、ライトデータを取得する。圧縮・伸張回路25は、ライトデータを後述のクラスタ単位で圧縮し、圧縮クラスタを生成する。圧縮・伸張回路25は、クラスタについて、可逆的な圧縮方式による圧縮処理を行う。圧縮・伸張回路25は、圧縮クラスタを出力する。クラスタサイズは、ホスト100からメモリシステム1への最小アクセス単位である論理ブロック(セクタ)のサイズより大きいサイズとなるように定められる。
【0024】
可逆的な圧縮方式は、例えば、Lempel-Ziv(LZ77,LZ78等)、あるいは、その他各種の辞書式圧縮、ブロックソートに基づく符号化(例えばbzip2等)や、各種のエントロピー符号化等、またはこれらのいくつかを組み合わせたものを含む。
【0025】
なお、クラスタのデータの特性や圧縮方式により、クラスタに対する、圧縮後の圧縮クラスタの圧縮率が、閾値未満の場合がある。すなわち、圧縮処理しても、データサイズが小さくならない、または、データサイズが大きくなる場合がある。このため、圧縮率が閾値未満である場合、圧縮・伸張回路25は、圧縮クラスタに代えて、元のクラスタ(非圧縮クラスタ)を出力してもよい。圧縮率の閾値には、例えば、圧縮後のデータサイズが元のクラスタのデータサイズから物理アドレスのアドレス粒度を引いたサイズとなる圧縮率を、予め設定すればよい。このようにすることで、圧縮によりデータサイズが増大してしまうことを防ぐことができる。
【0026】
圧縮・伸張回路25は、圧縮クラスタを取得する。圧縮・伸張回路25は、圧縮クラスタを伸長し、クラスタデータを生成する。圧縮・伸張回路25は、可逆的な圧縮方法に応じた伸張処理を行う。圧縮・伸張回路25は、伸張に失敗した場合には、伸張の失敗をプロセッサ22に通知する。
【0027】
暗号化回路26は、自己暗号化ドライブ(Self Encrypting Drive)のセキュリティ要件が予め設定される。暗号化回路26は、セキュリティ要件に従って、不揮発性メモリ3にライトするデータを暗号鍵で暗号化する。暗号化回路26は、セキュリティ要件に従って、不揮発性メモリ3からリードされた暗号化データを暗号化時と同じ暗号鍵で復号する。暗号化回路26は、暗号化データの復号に失敗した場合、復号の失敗をプロセッサ22に通知する。
【0028】
セキュリティ要件として、TCG(Trusted Computing Group)のSSC(Security Subsystem Class)が例示される。TCGのSSCは、Opal、Enterpriseなどを含む。Opalは、主にエンドユーザー向けであり、パーソナルコンピュータ用に策定されたセキュリティ仕様を含む。Enterpriseは、主に企業向けであり、サーバー用に策定されたセキュリティ仕様を含む。セキュリティ仕様では、暗号化の手順が規定されている。
【0029】
例えば、セキュリティ仕様に規定された手順に従って暗号化回路26で暗号化が行われれば、セキュリティ要件が満たされ、暗号化回路26で復号が可能であることが保証され得る。一方、セキュリティ仕様に規定された手順と異なる手順に従って暗号化回路26で暗号化が行われる場合、又は、そのように見なせる場合、セキュリティ要件が満たされず、暗号化回路26で復号に失敗する可能性がある。
【0030】
メモリインタフェース27は、プロセッサ22による制御のもと、不揮発性メモリ3に対するインタフェース動作を行う。メモリインタフェース27は、ライト処理・リード処理に関するデータ(例えば、圧縮クラスタ及び/又は非圧縮クラスタ)、ガーベージコレクション等の内部処理のデータ、アドレス変換情報等の管理情報などを不揮発性メモリ3との間で転送可能である。
【0031】
不揮発性メモリ3におけるデータ管理単位は、
図2に示すように構成され得る。
図2は、不揮発性メモリ3のデータの管理単位を示す図である。
【0032】
不揮発性メモリ3は、複数のメモリチップで構成され得る。各メモリチップ内部において、一括してデータのライトおよびリードのアクセスが可能な単位が物理ページである。複数の物理ページから構成され、独立してデータの消去が可能な最小のアクセス単位が物理ブロックである。各物理ブロックは、複数のメモリセルを有する。各メモリセルは多値記憶が可能である。各物理ブロックにおける同一のワード線に接続されたメモリセル群における各メモリセルがnピットの情報を格納可能である場合、そのメモリセル群はn個の物理ページとして扱われる。
【0033】
また、
図2では、8つのチャネルch0~ch7にメモリチップが接続されている場合が例示されている。チャネルch0~ch7は、チャネルCH1(
図1参照)の例示である。コントローラ2は、各チャネルch0~ch7を互いに並列して制御することが可能である。また、コントローラ2は、各チャネルch0~ch7についてさらにバンクインタリーブにより複数の並列動作を行うことが可能である。そして、コントローラ2は、並列にほぼ一括してライト/リードが可能な16個の物理ページをデータ記録領域となる1スーパーページとして管理し、並列に消去可能な16個の物理ブロックをデータブロックである1スーパーブロックとして管理する。不揮発性メモリ3に記録されたクラスタは物理アドレスMCA(Media Cluster Address)でアドレス指定される。物理アドレスMCAは、論理クラスタアドレスとも呼ばれる。論理クラスタアドレスは、例えば、論理クラスタ番号を含んでもよい。物理アドレスMCAは、スーパーブロックアドレス(MBA:Media Block Address)+スーパーページアドレス(MPA:Media Page Address)+スーパーページ内のクラスタオフセット(MCO:Media Cluster Offset)を含み得る。
【0034】
また、1物理ページよりも小さい単位のデータ管理単位で、コントローラ2により、不揮発性メモリ3内でのデータが管理され得る。
【0035】
メモリシステム1では、コントローラ2でユーザデータを圧縮・伸張可能である。ライト対象のユーザデータは、バッファメモリ4上で圧縮単位ごとにまとめられ、データ圧縮されたのち、不揮発性メモリ3にライトされる。ユーザデータは論理ブロックの単位で与えられる。本明細書における論理ブロックは、ホスト100で指定される論理ブロックであり、論理アドレスLBA(Logical Block Address)でアドレス指定される。以下では、ホスト100で指定される論理ブロックをセクタと呼ぶことにする。
【0036】
セクタごとにライト先のLBAが指定される。セクタのサイズと圧縮単位のサイズとは必ずしも同じではない。以下では、LBAで実現されるアドレス空間を論理空間と呼ぶことにする。また、物理アドレスMCAで実現されるアドレス空間を物理空間と呼ぶことにする。物理空間は、不揮発性メモリ3におけるユーザデータがライト可能なストレージ領域に相当する。
【0037】
ライトされるデータのLBAと同じLBAに既存のユーザデータがある場合、論理空間におけるデータのオーバーライトとなる。論理空間におけるデータのオーバーライトは、物理空間におけるデータの別のアドレスへのライトで実現される。不揮発性メモリ3の特性上、消去しなければ既にデータが書かれた物理アドレスMCAにデータをオーバーライトすることができない。このため、物理空間では、オーバーライト前の圧縮データと異なる物理アドレスMCAにオーバーライト後の圧縮データがライトされる。これに応じて、LBAと物理アドレスMCAとの対応関係を示すアドレス変換情報における物理アドレスMCAが、オーバーライト後の物理アドレスMCAに変更される。アドレス変換情報はLBAの所定サイズごとに物理アドレスMCAを保持する。
【0038】
クラスタのサイズがセクタのサイズ、つまりLBAの単位より大きければ、クラスタ内に複数のセクタのデータが記録され、これらセクタは連続のLBAとなる。アドレス変換情報は通常ひとつのクラスタにひとつだけ物理アドレスを保持するため、クラスタ内のセクタはひとつの物理アドレスから開始して連続的にライトされる。つまり、クラスタ内のセクタはLBAも物理アドレスも連続している。あるクラスタに記録されていたすべてのセクタをオーバーライトする場合は、新しいクラスタを用意してオーバーライトデータを記録すればよく、元のクラスタの内容を参照する必要がない。なお、本明細書において、「オーバーライトデータ」とは、あるデータに対してオーバーライトすべきデータを指す。
【0039】
しかし、クラスタに含まれる複数のセクタのうち、いくつかがオーバーライトされ、いくつかがオーバーライトされないこと(以下、部分的なオーバーライト)がある。この場合、オーバーライトされないセクタのデータは、元のクラスタから新しいクラスタにコピーされ、クラスタ内のセクタを連続した物理アドレスにライトする。
【0040】
暗号化されたデータは圧縮できないことがある。このため、データを暗号化して記録するメモリシステム1では、圧縮が実行された後に暗号化が実行される。その後、プロセッサ22がECC回路24に、暗号化回路26で暗号化されたデータに対して誤り訂正エンコード処理を実行させる。ECC回路25は、誤り訂正用のパリティ(ECCパリティ)を生成し、生成したECCパリティと暗号化されたデータとを有する符号語を生成する。そして、プロセッサ22が、符号語をメモリインタフェース27経由で不揮発性メモリ3へライトするように構成される。つまり、プロセッサ22は、暗号化回路26で暗号化されたデータに基づくデータを、メモリインタフェース27を介して不揮発性メモリ3にライトするように構成される。
【0041】
また、プロセッサ22は、例えばホスト100からホストインタフェース27を介してリードコマンドを受信する場合、当該リードコマンドに基づくデータをメモリインタフェース27を介して不揮発性メモリ3からリードする。プロセッサ22は、ECC回路24に、リードデータに対する誤り訂正デコード処理を実行させる。誤り訂正デコード処理が実行されたリードデータは暗号化されたデータとしてプロセッサ22により暗号化回路26へ入力される。暗号化回路26により復号されたデータは圧縮データとしてプロセッサ22により圧縮・伸張回路25へ入力される。圧縮・伸張回路25は、入力された圧縮データを伸張する。つまり、プロセッサ22は、ホスト100からのリードコマンドに対して、不揮発性メモリ3からリードされたデータに基づくデータを復号及び伸張して、伸張したデータをホスト100へ送信するようにする。
【0042】
図3は、圧縮単位のサイズと平均圧縮率との関係を示す。平均圧縮率はメモリシステム1でライトされる頻度が比較的高いと予想される複数のデータパターンについて平均された圧縮率を示す。圧縮率は、圧縮後のデータサイズの圧縮前のデータサイズに対する比率(圧縮比)で示され得る。
図3に示すように、圧縮単位が大きいほど大きな圧縮率が得られる傾向にある。そのため、本実施形態では、圧縮単位をクラスタサイズとして、複数のセクタをクラスタ単位にまとめてデータ圧縮をしてから暗号化して記録される状況を想定する。
【0043】
この状況でクラスタの部分的なオーバーライトをする場合を考える。圧縮率を確保するために、クラスタに含まれる複数のセクタは一括して圧縮され、圧縮後に暗号鍵を用いて暗号化され得る。一括して圧縮・暗号化される複数のセクタは、オーバーライト前にライトされている部分であり、オリジナル部と呼ぶことにする。オリジナル部は、一括して圧縮・暗号化される。すなわち、圧縮単位がオリジナル部全体であるため、セクタを圧縮単位とした場合に比べて圧縮率を向上でき、不揮発性メモリ3におけるストレージ領域に格納可能なデータ容量を容易に増加できる。
【0044】
オリジナル部における一部のセクタをオーバーライトする場合、オリジナル部を復号してから伸張することがある。オリジナル部を復号するために、暗号化時と同じ暗号鍵が用いられるべきである。暗号鍵は変更され得ることなどを想定すると、復号が成功するとは限らない。この場合、コントローラ2は、オリジナル部の一部のセクタを置き換えることができない。また、メモリシステム1は、ライトデータが不揮発性メモリ3へ転送されたことと不揮発性メモリ3からライト完了通知が送信されたか否かに応じて、ライトコマンドに対するレスポンスをホスト100へ返す。部分的なオーバーライトにおいて、復号と伸張の処理を行うと、復号と伸張の処理時間が余計にかかる。これにより、圧縮クラスタに対する部分的なオーバーライトのコマンド処理のレイテンシは、非圧縮のライトデータのコマンド処理に比べて、大幅に増大する可能性がある。
【0045】
TCG Opalといったメモリシステムに関するセキュリティ仕様では、暗号化を行うことができる論理アドレス範囲と復号を行うことができる論理アドレス範囲を別々に指定することができる。例えば、オリジナル部が暗号化された時点より後で暗号鍵が変更され得る。すなわち、オーバーライト部については暗号化に用いた暗号鍵と復号に用いる暗号鍵とが異なってしまうことがある。あるいは、オーバーライト部の論理アドレス範囲が復号を行うことができる論理アドレス範囲から外れている可能性がある。これらにより、復号に失敗する可能性がある。例えば、元と異なる内容に復号される(データが化ける)か、または復号が失敗する(チェックサム等の不一致が検出される)可能性が考えられる。あるいは、(暗号鍵とは無関係に)、復号を行うことができる論理アドレス範囲ではないため復号が許可されない状況が考えられる。復号が失敗する場合、上記の部分的なオーバーライトの手順を適正に実行することができない。このため、ライトコマンドに対してライト失敗の応答を返すことになってしまう。
【0046】
本実施形態では、部分的なオーバーライトを実施する際、オリジナル部が復号できなければ、オリジナル部の圧縮データがそのまま記録され、オーバーライト部が非圧縮で暗号化され、オリジナル部のデータに連接して複合クラスタが生成される。これにより、セキュリティ仕様を満たしつつ上記レイテンシの増大を抑制できる。
【0047】
次に、ライト動作の流れについて
図4を用いて説明する。
図4は、ライト動作の流れを示すフローチャートである。
【0048】
コントローラ2は、メモリシステム1の起動時等に、アドレス変換情報LUTを不揮発性メモリ3の管理情報格納領域からリードしてバッファメモリ4に一時的に格納する。
【0049】
コントローラ2は、ホスト100からライトコマンドを受信すると、ライトコマンドで部分的なオーバーライトが指示されているか否かを判定する(S1)。
【0050】
例えば、ライト対象のユーザデータはホストインタフェース21からコントローラ内に転送され、LBAにしたがってクラスタ単位に分割される。メモリシステム1内では、各クラスタCLは、
図5に示すように、同じ数のセクタSCを含んでもよい。
図5は、各クラスタCLの構成を示す図であり、各クラスタが4つのセクタを含む構成を例示する。
図5では、クラスタCL00が4個のセクタSC0~SC3を含み、クラスタCL01が4個のセクタSC4~SC7を含む。セクタSC0~SC3がLBA=2000~2003に対応し、セクタSC4~SC7がLBA=2004~2007に対応する。
【0051】
各クラスタCLにおいて、クラスタCL内のセクタSCに対するライトを指示するライトコマンドが受信されたとする。ライトコマンドがクラスタCLに含まれるすべてのセクタSCをライトする場合、およびライトコマンドのクラスタCLのLBA範囲に既存のデータがライトされていない場合、コントローラ2は、クラスタの部分的なオーバーライトではない(S1でNo)と判定する。ライトコマンドのクラスタCLのLBA範囲に既存のデータがライトされている場合、コントローラ2は、部分的なオーバーライトである(S1でYes)と判定する。
【0052】
例えば、ライトコマンドで
図5に示すようなクラスタCL00のセクタSC2(LBA=2002)に対するライトが指示された場合、コントローラ2は、クラスタCL00のLBA範囲2000~2003に既存のデータがライトされているか確認する。
【0053】
コントローラ2は、
図6に示すようなアドレス変換情報LUTを参照して任意のLBA範囲に既存のデータがライトされているか否かを確認することができる。
図6は、アドレス変換情報LUTの構成を示す図である。アドレス変換情報LUTは、クラスタごとにLBAと物理アドレスMCAの対応関係を含む。
図6では、LBA=2000のデータが物理アドレスMCA=400にライトされていることが示される。LBA=2000は、クラスタCLの先頭セクタSCのLBAを示す。このため、コントローラ2は、LBA範囲2000~2003に既存のデータがライトされていることを確認する。
【0054】
ライトコマンドで指示されたセクタSCのLBA範囲に既存のデータがライトされていることに応じて、コントローラ2は、そのライトがクラスタの部分的なオーバーライトであると判定する。ライトコマンドで指示されたセクタSCのLBA範囲に既存のデータがライトされていないことに応じて、コントローラ2は、そのライトがクラスタの部分的なオーバーライトでないと判定する。
【0055】
クラスタの部分的なオーバーライトではない場合(S1でNo)、コントローラ2は、例えばクラスタCLに含まれるべき複数のセクタSCが揃った時点で、クラスタCLのデータを圧縮・伸張回路25で圧縮し、暗号処理回路26で暗号化する(S2)。
図5の例では、コントローラ2は、クラスタCL00に含まれるセクタSC0~SC3が揃った時点で、クラスタCL00のデータを圧縮・伸張回路25で圧縮し、暗号処理回路26で暗号化する。これにより、コントローラ2は、その含まれるセクタSC0~SC3が一括して圧縮・暗号化されたクラスタCL0(
図7(a)参照)を生成する。クラスタCL0は、その全体が一括して圧縮されているクラスタであり、圧縮クラスタと呼ぶことができる。圧縮クラスタCL0において、複数のセクタSC0~SC3の集まりは、オリジナル部5を構成する。
【0056】
なお、クラスタCL00を圧縮した場合の圧縮率が閾値未満の場合、コントローラ2は、クラスタCL00のデータを非圧縮の状態で暗号化回路26により暗号化する。これにより、コントローラ2は、その含まれるセクタSC0~SC3が非圧縮で暗号化されたクラスタCL0’を生成する。このクラスタCL0’は、その全体が非圧縮であり、非圧縮クラスタと呼ぶことができる。
【0057】
また、セキュリティ要件に従い、コントローラ2は、暗号化の完了に応じて、ライト完了通知をコマンド完了のレスポンスとしてホスト100へかえす。
【0058】
コントローラ2は、圧縮・暗号化されたクラスタCLを不揮発性メモリ3へライトする(S3)。ライト完了後、コントローラ2は、バッファメモリ4におけるアドレス変換情報LUTを更新する。すなわち、コントローラ2は、ライトされたクラスタCLの物理アドレスMCAをそのLBAに関連付けてアドレス変換情報LUTに登録する(S4)。
【0059】
ライトコマンドの指示がクラスタCLの部分的なオーバーライトである場合(S1でYes)、クラスタCLにおける同じLBAを含むオリジナル部5のデータを復号するか否かを判定する(S5)。TCG Opal等のセキュリティ仕様の要求により復号を行うことが不可能な場合や、レイテンシ抑制を重視するため伸張完了までコマンド完了のレスポンスを待たせたくないことがある。この場合、コントローラ2は、オリジナル部5のデータを復号しない(S5でNo)と判定する。それ以外の場合、コントローラ2は、オリジナル部5のデータを復号する(S5でYes)と判定する。
【0060】
コマンド完了のレスポンスを待たせたくないか否かの判断に関して、コントローラ2は、コマンドとともに明示的に指示された場合はそれに従う。このほか、コントローラ2は、ひとつのコマンドでライトされるデータの量や、コマンドを受けた時点で実行中のライトに関する他の処理の量やコマンド毎のデータ量をもとに判断をしてもよい。
【0061】
オリジナル部5のデータを復号すると判定する場合(S5でYes)、コントローラ2は、不揮発性メモリ3からクラスタCLをリードする(S6)。コントローラ2は、リードされたクラスタCLをバッファメモリ4に一時的に格納する。コントローラ2は、リードされたクラスタCLが圧縮クラスタであれば、クラスタCLに対して復号と伸張を行う(S7)。コントローラ2は、復号・伸張されたクラスタデータをバッファメモリ4に一時的に格納する。コントローラ2は、クラスタデータに対してオーバーライトデータで更新をする(S8)。例えば、ライトコマンドでセクタSC2のオーバーライトが指示される場合、コントローラ2は、バッファメモリ4上のクラスタCL0におけるセクタSC2のデータをオーバーライトデータでオーバーライトする。これにより、クラスタCLが更新される。コントローラ2は、更新後のクラスタCLに対して圧縮と暗号化とを行う(S9)。これにより、含まれるセクタSC0~SC3が一括して圧縮されたクラスタCL0(圧縮クラスタCL0)が再び生成される。コントローラ2は、クラスタCLの圧縮と暗号化とが完了したことに応じて、コマンド完了のレスポンスをホスト100へ返す。
【0062】
更新したクラスタCLを暗号化した後は、コントローラ2は、部分的なオーバーライトではない場合と同様に、クラスタCLを不揮発性メモリ3にライトする(S3)。ライト完了後、コントローラ2は、アドレス変換情報LUTを更新する。すなわち、コントローラ2は、ライトされたクラスタCLの物理アドレスMCAをそのLBAに関連付けてアドレス変換情報LUTに登録する(S4)。
【0063】
オリジナル部5のデータを復号しないと判定する場合(S5でNo)、コントローラ2は、まずオーバーライトデータを非圧縮で暗号化する(S10)。コントローラ2は、暗号化されたオーバーライトデータをバッファメモリ4に一時的に格納する。コントローラ2は、暗号化の完了に応じて、コマンド完了のレスポンスをホスト100へ返す。暗号化と並行して、または暗号化が完了した後に、コントローラ2は、クラスタCLのデータをリードする(S11)。コントローラ2は、リードされたクラスタCLのデータをバッファメモリ4に一時的に格納する。コントローラ2は、リードされたデータに応じて、処理対象のクラスタCLが圧縮クラスタであるか否か判断する(S12)。コントローラ2は、処理対象のクラスタCLが一括して圧縮されていれば、処理対象のクラスタCLが圧縮クラスタである(S12でYes)と判断する。コントローラ2は、処理対象のクラスタCLがそれ以外であれば、処理対象のクラスタCLが圧縮クラスタでない(S12でNo)と判断する。
【0064】
処理対象のクラスタが圧縮クラスタである場合(S12でYes)、コントローラ2は、オリジナル部5とオーバーライト部6とをパッキングして複合クラスタCL0aを生成する(S13)。パッキングとは、複数のデータを1つのまとまりとしてグループ化することである。パッキングは、オリジナル部5及びオーバーライト部6が物理空間にライトされる際に、オリジナル部5とオーバーライト部6とを1つのまとまりとしてグループ化する情報を含むヘッダ7が付加されることで行われてもよい。
【0065】
コントローラ2は、オリジナル部5の一部のセクタSC2に代わってオーバーライト部6のセクタSC2aが複合クラスタCL0aのLBAに関連付けられるように、複合クラスタCL0aを生成する。オリジナル部5及びオーバーライト部6に付加されるヘッダ7は、セクタSC2に代わってセクタSC2aがLBAに関連付けられることを示す情報を含んでもよい。
【0066】
コントローラ2は、
図7及び
図8に示すように、複合クラスタCL0aを生成してもよい。
図7は、複合クラスタCL0aの生成処理の概略を示す図である。
図8は、複合クラスタCL0aの生成処理の詳細を示す図である。
【0067】
図7(a)は、圧縮クラスタCL0を示す。圧縮クラスタCL0は、4つのセクタSC0,SC1,SC2,SC3からなるクラスタCL0が圧縮・暗号化されたオリジナル部5を含む。4つのセクタSC0,SC1,SC2,SC3は、それぞれ、データD
0,D
1,D
2,D
3を有する。
図7(b)は、圧縮クラスタCL0のオリジナル部5に対し、データD
2を有するセクタSC2の論理アドレスに新たなデータD
2’がオーバーライトされた場合に作られる複合クラスタCL0aを示している。
【0068】
コントローラ2は、
図7(a)に示す圧縮クラスタCL0の内容(オリジナル部5)に対して、オーバーライトする暗号化済みの非圧縮データ(オーバーライト部6)を連結して、
図7(b)に示す複合クラスタCL0aを生成し得る。複合クラスタCL0aは、オリジナル部5とオーバーライト部6とを含む。オリジナル部5は、その全体が一括して圧縮・暗号化されている。オーバーライト部6は、オリジナル部5と異なり、その全体が非圧縮で暗号化されている。オリジナル部5は、複数のセクタSC0~SC3を含む。オーバーライト部6は、複数のセクタSC0a~SC3aを含む。複数のセクタSC0a~SC3aは、複数のセクタSC0~SC3に対応している。
【0069】
複合クラスタCL0aでは、部分的なオーバーライトにより、有効なセクタが例えばセクタSC2からセクタSC2aに置き換えられる。この場合、複数のセクタSC0~SC3のうち、セクタSC0,SC1,SC3は有効なデータを含むが、セクタSC2は無効なデータである。オーバーライト部6は、複数のセクタSC0a~SC3aを含む。複数のセクタSC0a~SC3aのうち、セクタSC0a,SC1a,SC3aは無効なデータだが、セクタSC2aは有効なデータを含む。
【0070】
例えば、コントローラ2は、バッファメモリ4上の
図8(a)に示すようなアドレス変換情報LUTを参照し、圧縮クラスタCL0の物理アドレスMCAを特定する。
図8(a)の場合、コントローラ2は、圧縮クラスタCL0の物理アドレスMCA=400を特定する。コントローラ2は、不揮発性メモリ3にアクセスし、不揮発性メモリ3の物理アドレスMCA=400から圧縮クラスタCL0のオリジナル部5のデータをリードしてバッファメモリ4に一時的に格納する。コントローラ2は、オリジナル部5の先頭にヘッダ7を追加するとともに、オリジナル部5の末尾にオーバーライト部6を追加する。
【0071】
ヘッダ7は、オリジナル部5とオーバーライト部6とがパッキングされていることを示す情報を含む。ヘッダ7は、オリジナル部5に含まれる各セクタSCの論理オフセットとオーバーライト部6に含まれる各セクタSCの論理オフセットとを含む。ヘッダ7は、オリジナル部5に含まれる各セクタSCのデータが有効か無効かを示す情報を含み、オーバーライト部6に含まれる各セクタSCのデータが有効か無効かを示す情報を含む。これにより、ヘッダ7は、クラスタCL0内の論理的にオーバーライトされたセクタSCを示すことができる。ヘッダ7は、ビットマップ情報を含んでもよい。
【0072】
図8(b)の場合、ヘッダ7は、ビットマップ情報“11010010”を含んでもよい。ビットマップ情報“11010010”において、前半の4ビットがオリジナル部5の4つのセクタSC0~SC3に対応し、後半の4ビットがオーバーライト部6の4つのセクタSC0a~SC3aに対応する。ビットマップ情報“11010010”は、そのビット数でオリジナル部5とオーバーライト部6とがパッキングされていることを示す。
【0073】
ビットマップ情報“11010010”は、そのビット位置で各セクタSCの論理オフセットを示す。論理オフセットは、論理アドレスの先頭セクタの論理アドレスからのオフセットを示す。前半の4ビットは、そのビット位置で、オリジナル部5におけるセクタSC0,SC1,SC2,SC3の論理オフセットが+0,+1,+2,+3であることを示す。アドレス変換情報LUTとヘッダ7とにより、セクタSC0,SC1,SC2,SC3の論理アドレスが2000,2001,2002,2003であることが示される。後半の4ビットは、オーバーライト部6におけるセクタSC0a,SC1a,SC2a,SC3aの論理オフセットが+0,+1,+2,+3であることを示す。アドレス変換情報LUTとヘッダ7とにより、セクタSC0a,SC1a,SC2a,SC3aの論理アドレスが2000,2001,2002,2003であることが示される。
【0074】
ビットマップ情報“11010010”は、そのビット値でデータが有効か無効かを示す。前半の4ビット“1101”は、オリジナル部5におけるセクタSC0,SC1,SC3が有効なデータD0,D1,D3を含むが、セクタSC2が無効なデータD2であることを示す。後半の4ビット“0010”は、オーバーライト部6におけるセクタSC0a,SC1a,SC3aが無効なデータであるが、セクタSC2aが有効なデータD2’を含むことを示す。
【0075】
複合クラスタCL0aの生成後、コントローラ2は、複合クラスタCL0aを不揮発性メモリ3にライトする(S3)。
図8(b)の場合、コントローラ2は、複合クラスタCL0aを物理アドレスMCA=500にライトする。このとき、物理空間(不揮発性メモリ3の記憶領域)では、ヘッダ7が物理アドレスMCA=500にライトされる。オリジナル部5が物理アドレスMCA=500に応じた物理位置(例えば、ヘッダ7の後)にコピーされる。オーバーライト部6が物理アドレスMCA=500に応じた物理位置(例えば、オリジナル部5の後)にライトされる。ライト完了後、コントローラ2は、アドレス変換情報LUTを更新する。すなわち、コントローラ2は、ライトされた複合クラスタCL0aの物理アドレスMCAをそのLBAに関連付けてアドレス変換情報LUTに登録する(S4)。
図8(b)、
図8(c)の場合、アドレス変換情報LUTにおいて、LBA=2000と物理アドレスMCA=400との対応関係が、LBA=2000と複合クラスタCLaがライトされる物理アドレスMCA=500との対応関係に置き換えられる。
【0076】
例えば、その後、LBA=2002のセクタSC2のリードを指示するリードコマンドをホスト100から受信した場合、コントローラ2は、セクタSC2を含むクラスタCLの論理アドレスがLBA=2000であると特定する。コントローラ2は、アドレス変換情報LUTを参照し、セクタSC2を含むクラスタのLBA=2000に対応する物理アドレスMCA=500にアクセスする。物理アドレスMCA=500には、ヘッダ7が格納されており、ヘッダ7のビットマップ情報“11010010”に応じて、コントローラ2は、セクタSC2ではなくセクタSC2aのデータD2’をリードする。これにより、コントローラ2は、部分的にオーバーライトされた後のデータD2’をリードすることができる。
【0077】
図4に戻って、コントローラ2は、処理対象のクラスタが圧縮クラスタでない場合(S12でNo)、処理対象のクラスタが既に複合クラスタCL0aであると判断する。この場合、コントローラ2は、複合クラスタCL0aのうちオーバーライト部6をオーバーライトデータで更新する(S14)。
【0078】
例えば、セクタSC0のオーバーライトが指示された場合、コントローラ2は、バッファメモリ4上の
図8(c)に示すようなアドレス変換情報LUTを参照し、複合クラスタCL0aの物理アドレスMCAを特定する。
図8(c)の場合、コントローラ2は、複合クラスタCL0aの物理アドレスMCA=500を特定する。コントローラ2は、不揮発性メモリ3にアクセスし、不揮発性メモリ3の物理アドレスMCA=500から複合クラスタCL0aのデータをリードしてバッファメモリ4に一時的に格納する。コントローラ2は、バッファメモリ4上でオーバーライト部6のセクタSC0aにオーバーライトデータをオーバーライトするとともに、セクタSC0に代えてセクタSC0aが有効になるようにヘッダ7の情報を変更する。コントローラ2は、ヘッダ7のビットマップ情報を“11010010”から“01011010”へ変更してもよい。
【0079】
複合クラスタCL0aの更新後、コントローラ2は、複合クラスタCL0aを不揮発性メモリ3にライトする(S3)。コントローラ2は、複合クラスタCL0aを物理アドレスMCA=600にライトする。このとき、図示しないが、物理アドレスMCA=600にヘッダ7がライトされる。ライト完了後、コントローラ2は、アドレス変換情報LUTを更新する。すなわち、コントローラ2は、ライトされた複合クラスタCL0aの物理アドレスMCAをそのLBAに関連付けてアドレス変換情報LUTに登録する(S4)。コントローラ2は、LBA=2000に対応する物理アドレスをMCA=500からMCA=600に置き換える。
【0080】
あるいは、処理対象のクラスタが非圧縮クラスタCLであった場合(S12でNo)、コントローラ2は、非圧縮クラスタに含まれる複数のセクタSCのうち該当セクタSCをオーバーライトデータで更新する(S14)。
【0081】
例えば、セクタSC2のオーバーライトが指示された場合、コントローラ2は、バッファメモリ4上のアドレス変換情報LUTを参照し、非圧縮クラスタCLの物理アドレスMCAを特定する。コントローラ2は、不揮発性メモリ3にアクセスし、不揮発性メモリ3における特定された物理アドレスMCAから非圧縮クラスタCLのデータをリードしてバッファメモリ4に一時的に格納する。コントローラ2は、バッファメモリ4上で非圧縮クラスタCLのセクタSC2にオーバーライトデータをオーバーライトし、非圧縮クラスタCLを更新する。
【0082】
非圧縮クラスタCLの更新後、コントローラ2は、非圧縮クラスタCLを不揮発性メモリ3にライトする(S3)。ライト完了後、コントローラ2は、アドレス変換情報LUTを更新する。すなわち、コントローラ2は、ライトされた非圧縮クラスタCLの物理アドレスMCAをそのLBAに関連付けてアドレス変換情報LUTに登録する(S4)。
【0083】
図4に示すライト処理では、オリジナル部5のデータを復号しない場合、オリジナル部5のデータのリードやその復号を待つことなくコマンド完了のレスポンスをホスト100へ返すことができる。これにより、部分的なオーバーライトによるレイテンシの増大を抑えることができる。
【0084】
図4に示す手順によりライトされた複合クラスタCLaのデータをリードする際、オリジナル部5のデータを復号・伸張する。その後、LBA毎に、オーバーライト部6にデータが記録されたLBAでは、非圧縮のオーバーライト部6のデータを復号して使用され、それ以外のLBAでは、復号・伸張したオリジナル部5のデータが使用される。例えば、
図7に示した複合クラスタCLaをリードする場合、セクタSC2(データD
2)およびセクタSC2a(データD
2’)のLBAに関しては、非圧縮のデータD
2’が復号して使用され、それ以外のLBAでは、復号・伸張したオリジナル部5のデータが使用される。ただし、必要なLBAのデータがすべてオーバーライト部6に記録されている場合、オリジナル部5のデータの復号・伸張が省略されても良い。
【0085】
以上のように、本実施形態では、メモリシステム1において、一括して圧縮・暗号化されたオリジナル部5の部分的なオーバーライトが実施される。これにより、ストレージ領域のデータ容量を容易に増加できる。この際、コントローラ2は、オリジナル部5を圧縮状態のままとし、オーバーライト部6を非圧縮で暗号化する。暗号化の完了に応じて、コントローラ2は、コマンド完了のレスポンスをホスト100へ返す。それとともに、コントローラ2は、オリジナル部5とオーバーライト部6とをパッキングしオリジナル部5の一部のセクタSC2に代わってオーバーライト部6のセクタSC2aをLBAに関連付けて複合クラスタCL0aを生成する。これにより、オリジナル部5のデータのリードやその復号を待つことなくコマンド完了のレスポンスをホスト100へ返すことができる。この結果、一括して圧縮・暗号化されたオリジナル部5の部分的なオーバーライトが実施される場合に、セキュリティ仕様を満たしつつレイテンシの増大を抑制できる。
【0086】
なお、第1の実施形態の第1の変形例として、
図4に示すオリジナル部5とオーバーライト部6とのパッキング(S13)は、
図9に示すように、アドレス変換情報LUTaで論理アドレスとオーバーライトされる物理アドレスとの対応関係が追加されることで行われてもよい。
図9は、アドレス変換情報LUTa及び物理空間(不揮発性メモリ3の記憶領域)に関する動作を示す図である。
【0087】
コントローラ2は、圧縮クラスタCL0を不揮発性メモリ3にライトし、それに応じて、アドレス変換情報LUTaを更新する。アドレス変換情報LUTaは、
図9(a)に示すように、論理アドレスに対して複数の物理アドレスが対応付けられていてもよい。アドレス変換情報LUTaは、例えばテーブル形式で実装され、論理アドレスが記録される第1のカラム、第1物理アドレスが記録される第2のカラム、第2物理アドレスが記録される第3のカラムを含む。部分的なオーバーライトがされていないクラスタに関しては、第1のカラム及び第2のカラムが使用される。第3のカラムは、空欄(Null)でもよい。
【0088】
例えば、コントローラ2は、LBA=2000の圧縮クラスタCL0を、
図9(b)に示すように、物理空間の物理アドレスMCA=400にライトする。これに応じて、コントローラ2は、アドレス変換情報LUTaに、LBA=2000と第1物理アドレスMCA=400との対応関係を登録する。
【0089】
その後、コントローラ2は、オリジナル部5の一部のセクタSC2のライトを指示するライトコマンドを受信すると、ライトコマンドが圧縮クラスタCL0(オリジナル部5)に対する部分的なオーバーライトを指示していると判断する。コントローラ2は、部分的なオーバーライトを指示するライトコマンドに応じて、オーバーライトデータを非圧縮で暗号化しバッファメモリ4に一時的に格納する。このとき、コントローラ2は、圧縮クラスタCL0をリードしない。コントローラ2は、バッファメモリ4上において、非圧縮で暗号化されたオーバーライトデータでオーバーライト部6を構成するとともに、ヘッダ7bを付加する。これにより、コントローラ2は、複合クラスタCLaの非圧縮部分CL0bを構成する。
【0090】
ヘッダ7bは、オーバーライト部6に含まれる各セクタSCの論理オフセットを含む。ヘッダ7bは、オーバーライト部6に含まれる各セクタSCのデータが有効か無効かを示す情報を含む。これにより、ヘッダ7bは、クラスタCL0内の論理的にオーバーライトされたセクタSCを示すことができる。ヘッダ7bは、ビットマップ情報を含んでもよい。
【0091】
図9(b)の場合、ヘッダ7bは、ビットマップ情報“0010”を含んでもよい。ビットマップ情報“0010”は、そのビット位置で各セクタSCの論理オフセットを示す。論理オフセットは、論理アドレスの先頭セクタの論理アドレスからのオフセットを示す。4ビットは、オーバーライト部6におけるセクタSC0a,SC1a,SC2a,SC3aの論理オフセットが+0,+1,+2,+3であることを示す。アドレス変換情報LUTaとヘッダ7bとにより、セクタSC0a,SC1a,SC2a,SC3aの論理アドレスが2000,2001,2002,2003であることが示される。
【0092】
ビットマップ情報“0010”は、そのビット値でデータが有効か無効かを示す。4ビット“0010”は、オーバーライト部6におけるセクタSC0a,SC1a,SC3aが無効なデータであるが、セクタSC2aが有効なデータD2’を含むことを示す。
【0093】
非圧縮部分CL0bの生成後、コントローラ2は、非圧縮部分CL0bを不揮発性メモリ3にライトする。
図9(b)の場合、コントローラ2は、ヘッダ7b及びオーバーライト部6を物理アドレスMCA=500にライトする。このとき、物理空間(不揮発性メモリ3の記憶領域)では、ヘッダ7bが物理アドレスMCA=500にライトされる。オーバーライト部6が物理アドレスMCA=500に応じた物理位置(例えば、ヘッダ7bの後)にライトされる。ライト完了後、コントローラ2は、アドレス変換情報LUTaを更新する。すなわち、コントローラ2は、ライトされた非圧縮部分CL0bの物理アドレスMCAをそのLBAに関連付けてアドレス変換情報LUTに追加的に登録する。
図9(b)、
図9(c)の場合、コントローラ2は、アドレス変換情報LUTaにおけるLBA=2000に対応する第3のカラムに、第2物理アドレスMCA=500を追記する。これにより、アドレス変換情報LUTaにおいて、LBA=2000と物理アドレスMCA=400との対応関係に加えて、LBA=2000とヘッダ7b及びオーバーライト部6がライトされる物理アドレスMCA=500との対応関係が登録される。これにより、コントローラ2は、複合クラスタCL0aを生成する。複合クラスタCL0aでは、圧縮クラスタCL0のオリジナル部5と非圧縮部分CL0bのオーバーライト部6とがパッキングされる。複合クラスタCL0aでは、オリジナル部5の一部のセクタに代えてオーバーライト部6のセクタがLBAに関連付けられる。
【0094】
例えば、その後、LBA=2002のセクタSC2のリードを指示するリードコマンドをホスト100から受信した場合、コントローラ2は、セクタSC2を含むクラスタCLの論理アドレスがLBA=2000であると特定する。コントローラ2は、アドレス変換情報LUTaを参照し、セクタSC2を含むクラスタのLBA=2000に対応する第1物理アドレスMCA=400と第2物理アドレスMCA=500とにそれぞれアクセスする。物理アドレスMCA=500には、ヘッダ7bが格納されており、ヘッダ7bのビットマップ情報“0010”に応じて、コントローラ2は、セクタSC2,SC2aのデータD2,D2’をそれぞれリードするが、セクタSC2aのデータD2’を有効なデータとする。これにより、コントローラ2は、部分的にオーバーライトされた後のデータD2’を有効なデータとすることができる。
【0095】
あるいは、その後、LBA=2000のセクタSC0のリードを指示するリードコマンドをホスト100から受信した場合、コントローラ2は、セクタSC0を含むクラスタCLの論理アドレスがLBA=2000であると特定する。コントローラ2は、アドレス変換情報LUTaを参照し、セクタSC0を含むクラスタのLBA=2000に対応する第1物理アドレスMCA=400と第2物理アドレスMCA=500とにそれぞれアクセスする。物理アドレスMCA=500には、ヘッダ7bが格納されており、ヘッダ7bのビットマップ情報“0010”に応じて、コントローラ2は、セクタSC2,SC2aのデータD2,D2’をそれぞれリードするが、セクタSC2aのデータD2’を有効なデータとする。これにより、コントローラ2は、部分的にオーバーライトされた後のデータD2’を有効なデータとすることができる。
【0096】
このように、メモリシステム1において、部分的なオーバーライトの際、オーバーライト部6を不揮発性メモリ3にライトし、オーバーライト部6の物理アドレスMCAをLBAに追加的に関連付ける。これによっても、オリジナル部5及びオーバーライト部6がパッキングされオリジナル部5の一部のセクタに代えてオーバーライト部6のセクタがLBAに関連付けられた複合クラスタCL0aを生成できる。
【0097】
(第2の実施形態)
次に、第2の実施形態にかかるメモリシステム1について説明する。以下では、第1の実施形態と異なる部分を中心に説明する。
【0098】
第2の実施形態では、部分的なオーバーライトを実施する際、オリジナル部5となる元のクラスタの圧縮データをそのまま記録し、オーバーライト部6について圧縮単位をセクタ単位に切り替えて暗号化し、オリジナル部5のデータに連接して複合クラスタCLcを構成する。
【0099】
第2の実施形態では、
図10に示すように、次の点で異なるライト動作が行われる。
図10は、ライト動作の流れを示すフローチャートである。第2の実施形態では、複合クラスタのオーバーライト部のデータにもデータ圧縮を適用する。部分的なオーバーライトではないライト、およびオリジナル部を復号するオーバーライトの際の動作は第1の実施形態と同様である。
【0100】
部分的なオーバーライトでオリジナル部5を復号しない場合(S5でNo)、コントローラ2は、オーバーライトデータをオリジナル部5より小さい圧縮単位で圧縮をしたのち暗号化する(S21)。オリジナル部5より小さい圧縮単位は、最小アクセス単位(例えば、セクタ単位)であってもよい。コントローラ2は、圧縮・暗号化と並行して、または圧縮・暗号化が完了した後に、クラスタCLのデータをリードする(S11)。コントローラ2は、リードされたクラスタCLのデータをバッファメモリ4に一時的に格納する。コントローラ2は、リードされたデータに応じて、処理対象のクラスタCLが複合クラスタであるか否か判断する(S22)。コントローラ2は、処理対象のクラスタCLがヘッダ7、オリジナル部5、オーバーライト部6を含み且つオリジナル部5が一括して圧縮されていれば、処理対象のクラスタCLが複合クラスタCLcである(S22でYes)と判断する。コントローラ2は、処理対象のクラスタCLがそれ以外であれば、処理対象のクラスタCLが複合クラスタCLcでない(S22でNo)と判断する。
【0101】
処理対象のクラスタCLが複合クラスタCLcでない場合(S22でNo)、コントローラ2は、処理対象のクラスタCLが非圧縮クラスタであるか否か判断する(S23)。コントローラ2は、処理対象のクラスタCLがオリジナル部5を含みオーバーライト部6を含まず且つオリジナル部5が非圧縮であれば、処理対象のクラスタCLが非圧縮クラスタである(S23でYes)と判断する。コントローラ2は、処理対象のクラスタCLがそれ以外であれば、処理対象のクラスタCLが非圧縮クラスタでない(S23でNo)と判断する。
【0102】
処理対象のクラスタCLが非圧縮クラスタでない場合(S23でNo)、コントローラ2は、オリジナル部5とオーバーライト部6とをパッキングして複合クラスタCLcを生成する(S24)。コントローラ2は、
図11及び
図8に示すように、複合クラスタCL0cを生成してもよい。
図11は、複合クラスタCL0cの生成処理の概略を示す図である。
【0103】
図11(a)は、圧縮クラスタCL0を示す。コントローラ2は、
図11(a)に示す圧縮クラスタCL0の内容(オリジナル部5)に対して、オーバーライトする圧縮・暗号化済みのデータ(オーバーライト部6)を連結(パッキング)して、
図11(b)に示す複合クラスタCL0cを生成し得る。パッキングは、
図8(a)~
図8(c)に示すように、オリジナル部5及びオーバーライト部6が物理空間にライトされる際に、オリジナル部5とオーバーライト部6とを1つのまとまりとしてグループ化する情報を含むヘッダ7が付加されることで行われてもよい。コントローラ2は、オリジナル部5の一部のセクタSC2に代わってオーバーライト部6のセクタSC2aがLBAに関連付けられるように、複合クラスタCL0aを生成する。オリジナル部5及びオーバーライト部6に付加されるヘッダ7は、セクタSC2に代わってセクタSC2aがLBAに関連付けられることを示す情報を含んでもよい。コントローラ2は、
図11(b)に示すように、複数のセクタSC0~SC3が一括で圧縮・暗号化されたオリジナル部5と各セクタSC0a~SC3aがそれぞれ圧縮・暗号化されたオーバーライト部6とを含む複合クラスタCL0cを生成する。オーバーライト部6におけるオーバーライトデータが存在しないセクタSC0a,SC1a,SC3aには、データがライトされない。その後、第1の実施形態と同様に、S3,S4の処理が行われる。
【0104】
処理対象のクラスタCLが非圧縮クラスタである場合(S23でYes)、コントローラ2は、オーバーライトデータを非圧縮で暗号化する。なお、非圧縮で暗号化するためのオーバーライトデータについて、S21でオーバーライトデータを圧縮する際に圧縮前のデータも一時的に保持しておいてもよい。または、S21で圧縮・暗号化されたオーバーライトデータを復号・伸張して取得してもよい。コントローラ2は、非圧縮で暗号化されたオーバーライトデータで非圧縮クラスタを更新する(S25)。その後、第1の実施形態と同様に、S3,S4の処理が行われる。
【0105】
処理対象のクラスタCLが複合クラスタである場合(S22でYes)、コントローラ2は、複合クラスタCLcにおけるオーバーライト部6を圧縮・暗号化されたオーバーライトデータで更新する(S26)。コントローラ2は、
図11(b)、
図11(c)に示すように、複合クラスタCL0cを更新してもよい。コントローラ2は、オリジナル部5の一部のセクタSC0に代わってオーバーライト部6のセクタSC0aがLBAに関連付けられるように、複合クラスタCL0cを更新する。オーバーライト部6のセクタSC0aにオーバーライトデータがライトされるとともに、セクタSC0に代わってセクタSC0aがLBAに関連付けられるようにヘッダ7が変更されてもよい。
【0106】
以上のように、第2の実施形態では、メモリシステム1において、複合クラスタのオーバーライト部6のデータをオリジナル部5より小さな圧縮単位(例えば、最小アクセス単位)で圧縮する。これにより、クラスタのデータサイズの増加を抑えることができる。
【0107】
(第3の実施形態)
次に、第3の実施形態にかかるメモリシステム1について説明する。以下では、第1の実施形態及び第2の実施形態と異なる部分を中心に説明する。
【0108】
第1の実施形態では、オリジナル部5の部分的なオーバーライトが複合クラスタの生成で実現される場合について例示する。オリジナル部5の部分的なオーバーライトが繰り返されると、オリジナル部5の全てのセクタがオーバーライトされた状態になる。このとき、複合クラスタは、一括して圧縮・暗号化されたオリジナル部5に加えて、各セクタが非圧縮で暗号化されたオーバーライト部6を含む。
【0109】
第3の実施形態では、オリジナル部5のすべてのセクタがオーバーライトされた場合にオリジナル部5を削除してオーバーライト部6に相当する部分を非圧縮クラスタとする。
【0110】
コントローラ2は、
図12及び
図13に示すように、複合クラスタCL0aを生成・更新し、さらに非圧縮クラスタを生成してもよい。
図12は、複合クラスタの生成・更新処理及び非圧縮クラスタの生成処理を示す図である。
図13は、アドレス変換情報LUT及び物理空間に関する動作を示す図である。
【0111】
コントローラ2は、LBA=2000のデータを圧縮・暗号化して、
図12(a)に示す圧縮クラスタCL0を生成する。コントローラ2は、
図13(b)に示すように、圧縮クラスタCL0を物理アドレスMCA=400にライトする。コントローラ2は、
図13(a)に示すように、LBA=2000と物理アドレスMCA=400との対応関係をアドレス変換情報LUTに登録する。
【0112】
コントローラ2は、
図12(b)に示すように、オリジナル部5及びオーバーライト部6をパッキングしセクタSC2に代わってセクタSC2aがLBAに関連付けられた複合クラスタCL0cを生成する。コントローラ2は、ヘッダ7を物理アドレスMCA=500にライトする。コントローラ2は、オリジナル部5を物理アドレスMCA=500に応じた物理位置(例えば、ヘッダ7の後)にコピーする。コントローラ2は、オーバーライト部6を物理アドレスMCA=500に応じた物理位置(例えば、オリジナル部5の後)にライトする。これに応じて、コントローラ2は、アドレス変換情報LUTを更新する。
図13(b)、
図13(c)の場合、アドレス変換情報LUTにおいて、LBA=2000と物理アドレスMCA=400との対応関係が、LBA=2000と複合クラスタCLaがライトされる物理アドレスMCA=500との対応関係に置き換えられる。
【0113】
その後、コントローラ2は、セクタSC0,SC1,SC3に代わってセクタSC0a,SC1a,SC3aがLBAに関連付けられるように複合クラスタCL0cを順次更新する。
【0114】
図12(c)に示すように、オリジナル部5の全てのセクタSC0~SC3がオーバーライトされた状態になると、コントローラ2は、複合クラスタCL0aにおけるオリジナル部5及びオーバーライト部6のパッキングを解除し、オーバーライト部6を取得する。
図13(b)の場合、コントローラ2は、物理アドレスMCA=500から複合クラスタCL0aをリードしてバッファメモリ4に一時的に格納する。コントローラ2は、ヘッダ7及びオリジナル部5を破棄し、オーバーライト部6を取得する。すなわち、コントローラ2は、複合クラスタCL0aからオリジナル部5を削除しオーバーライト部6を残す。オーバーライト部6は、各セクタSC0a~SC3aが非圧縮で暗号化された状態である。
【0115】
図12(d)に示すように、コントローラ2は、各セクタが非圧縮で暗号化されたオーバーライト部6を非圧縮クラスタCL0dとして不揮発性メモリ3にライトする。
図13(b)の場合、コントローラ2は、非圧縮クラスタCL0dを物理アドレスMCA=600にライトする。これに応じて、コントローラ2は、アドレス変換情報LUTを更新する。
図13(b)、
図13(d)の場合、アドレス変換情報LUTにおいて、LBA=2000と物理アドレスMCA=500との対応関係が、LBA=2000と複合クラスタCLaがライトされる物理アドレスMCA=600との対応関係に置き換えられる。
【0116】
以上のように、第3の実施形態では、メモリシステム1において、コントローラ2は、複合クラスタCL0aにおけるオリジナル部5の全てのセクタがオーバーライトされた状態になることに応じて、オリジナル部5を削除してオーバーライト部6を取得する。コントローラ2は、取得されたオーバーライト部6を非圧縮クラスタCL0dとして不揮発性メモリ3にライトする。これにより、クラスタのデータサイズの増加をさらに抑えることができる。
【0117】
(第4の実施形態)
次に、第4の実施形態にかかるメモリシステム1について説明する。以下では、第1の実施形態から第3の実施形態と異なる部分を中心に説明する。
【0118】
第2の実施形態では、オリジナル部5の部分的なオーバーライトが複合クラスタの生成で実現される場合について例示する。オリジナル部5の部分的なオーバーライトが繰り返されると、オリジナル部5の全てのセクタがオーバーライトされた状態になる。このとき、複合クラスタは、一括して圧縮・暗号化されたオリジナル部5に加えて、各セクタが圧縮・暗号化されたオーバーライト部6を含む。
【0119】
第3の実施形態では、オリジナル部5のすべてのセクタがオーバーライトされた場合にオリジナル部5を削除してオーバーライト部6に相当する部分を新圧縮クラスタとする。圧縮クラスタ(オリジナル部5)は、複数セクタが一括して圧縮・暗号化されているが、新圧縮クラスタは、各セクタが圧縮・暗号化されている。
【0120】
コントローラ2は、
図14及び
図15に示すように、複合クラスタCL0aを生成・更新し、さらに新圧縮クラスタを生成してもよい。
図14は、複合クラスタの生成・更新処理及び新圧縮クラスタの生成処理を示す図である。
図15は、アドレス変換情報LUT及び物理空間に関する動作を示す図である。
【0121】
コントローラ2は、LBA=2000のデータを圧縮・暗号化して、
図14(a)に示す圧縮クラスタCL0を生成する。コントローラ2は、
図15(b)に示すように、圧縮クラスタCL0を物理アドレスMCA=400にライトする。コントローラ2は、
図14(a)に示すように、LBA=2000と物理アドレスMCA=400との対応関係をアドレス変換情報LUTに登録する。
【0122】
コントローラ2は、
図14(b)に示すように、オリジナル部5及びオーバーライト部6をパッキングしセクタSC2に代わってセクタSC2aがLBAに関連付けられた複合クラスタCL0cを生成する。コントローラ2は、ヘッダ7を物理アドレスMCA=500にライトする。コントローラ2は、オリジナル部5を物理アドレスMCA=500に応じた物理位置(例えば、ヘッダ7の後)にコピーする。コントローラ2は、オーバーライト部6を物理アドレスMCA=500に応じた物理位置(例えば、オリジナル部5の後)にライトする。これに応じて、コントローラ2は、アドレス変換情報LUTを更新する。
図15(b)、
図15(c)の場合、アドレス変換情報LUTにおいて、LBA=2000と物理アドレスMCA=400との対応関係が、LBA=2000と複合クラスタCLaがライトされる物理アドレスMCA=500との対応関係に置き換えられる。
【0123】
その後、コントローラ2は、セクタSC0,SC1,SC3に代わってセクタSC0a,SC1a,SC3aがLBAに関連付けられるように複合クラスタCL0cを順次更新する。
【0124】
図14(c)に示すように、オリジナル部5の全てのセクタSC0~SC3がオーバーライトされた状態になると、コントローラ2は、複合クラスタCL0cにおけるオリジナル部5及びオーバーライト部6のパッキングを解除し、オーバーライト部6を取得する。
図15(b)の場合、コントローラ2は、物理アドレスMCA=500から複合クラスタCL0aをリードしてバッファメモリ4に一時的に格納する。コントローラ2は、ヘッダ7及びオリジナル部5を破棄し、オーバーライト部6を取得する。すなわち、コントローラ2は、複合クラスタCL0aからオリジナル部5を削除しオーバーライト部6を残す。オーバーライト部6は、各セクタSC0a~SC3aが圧縮・暗号化された状態である。
【0125】
図14(d)に示すように、コントローラ2は、各セクタが圧縮・暗号化されたオーバーライト部6を新圧縮クラスタCL0eとして不揮発性メモリ3にライトする。
図15(b)の場合、コントローラ2は、新圧縮クラスタCL0eを物理アドレスMCA=600にライトする。これに応じて、コントローラ2は、アドレス変換情報LUTを更新する。
図15(b)、
図15(d)の場合、アドレス変換情報LUTにおいて、LBA=2000と物理アドレスMCA=500との対応関係が、LBA=2000と複合クラスタCLaがライトされる物理アドレスMCA=600との対応関係に置き換えられる。
【0126】
以上のように、第4の実施形態では、メモリシステム1において、コントローラ2は、複合クラスタCL0cにおけるオリジナル部5の全てのセクタがオーバーライトされた状態になることに応じて、オリジナル部5を削除してオーバーライト部6を取得する。コントローラ2は、取得されたオーバーライト部6を新圧縮クラスタCL0eとして不揮発性メモリ3にライトする。これにより、クラスタのデータサイズの増加をさらに抑えることができる。
【0127】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0128】
1 メモリシステム、2 コントローラ、3,3-1~3-N 不揮発性メモリ、4 バッファメモリ。