(57)【要約】【課題】暗号化と共にデータ圧縮効率に優れたメモリシステムを提供する。【解決手段】実施形態のメモリシステム１は、不揮発性メモリ９と、第１、第２、第３領域を有するキャッシュメモリ３と、第１領域に格納されたデータを圧縮可能な圧縮器４と、圧縮器から出力されたデータを暗号化して第２領域に格納する暗号器５と、第３領域に格納されたデータを復号して第１領域に格納する復号器７と、データフローコントローラ１０とを備える。データフローコントローラは、ホストから受信し第１領域に格納されたユーザーデータを非圧縮状態で暗号器に暗号化させて第２領域を経由して不揮発性メモリに書き込ませ、その後所定のタイミングにおいてユーザーデータを不揮発性メモリから第３領域に読み出して復号器に復号させて第１領域に格納し、ユーザーデータを圧縮器により圧縮してから暗号器により暗号化させて第２領域を経由して不揮発性メモリに書き込ませる。【選択図】図１
2014052899.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
第１領域と、前記不揮発性メモリに書き込むデータを格納する第２領域と、前記不揮発性メモリから読み出したデータを格納する第３領域を有するキャッシュメモリと、
前記第１領域に格納されたデータを圧縮可能な圧縮器と、
前記圧縮器から出力されたデータを暗号化して前記第２領域に格納する暗号器と、
前記第３領域に格納されたデータを復号して前記第１領域に格納する復号器と、
ホストから受信し前記第１領域に格納されたユーザーデータを、非圧縮状態で前記暗号器に暗号化させて前記第２領域を経由して前記不揮発性メモリに書き込ませ、その後所定のタイミングにおいて当該ユーザーデータを前記不揮発性メモリから前記第３領域に読み出して前記復号器に復号させて前記第１領域に格納し、当該ユーザーデータを前記圧縮器により圧縮してから前記暗号器により暗号化させて前記第２領域を経由して前記不揮発性メモリに書き込ませるデータフローコントローラと、
を備える
ことを特徴とするメモリシステム。
【請求項２】
前記ユーザーデータのデータパタン出現頻度を集計するパタン出現数集計器をさらに備え、
前記圧縮器における圧縮処理はハフマン符号を用いる
ことを特徴とする請求項１に記載のメモリシステム。
【請求項３】
不揮発性メモリと、第１領域と第２領域と第３領域を有するキャッシュメモリと、圧縮器と、暗号器と、復号器と、を備えたメモリシステムの制御方法であって、
ホストから受信したユーザーデータを前記第１領域に格納するステップと、
前記第１領域に格納された前記ユーザーデータを前記暗号器が暗号化して前記第２領域に格納するステップと、
前記第２領域に格納された前記ユーザーデータを前記不揮発性メモリに書き込むステップと、
その後所定のタイミングにおいて、前記不揮発性メモリの前記ユーザーデータを前記第３領域に読み出すステップと、
前記第３領域に読み出された前記ユーザーデータを前記復号器が復号して前記第１領域に再格納するステップと、
前記第１領域に再格納された前記ユーザーデータを前記圧縮器が圧縮してから前記暗号器が暗号化して前記第２領域に再格納するステップと、
前記第２領域に再格納された前記ユーザーデータを前記不揮発性メモリに書き込むステップと、
を備えた
ことを特徴とするメモリシステムの制御方法。
【請求項４】
前記メモリシステムは、前記ユーザーデータのデータパタン出現頻度を集計するパタン出現数集計器をさらに備え、
前記圧縮器における圧縮処理はハフマン符号を用いる
ことを特徴とする請求項３に記載のメモリシステムの制御方法。
【請求項５】
不揮発性メモリと、
第１領域と、前記不揮発性メモリに書き込むデータを格納する第２領域と、前記不揮発性メモリから読み出したデータを格納する第３領域を有するキャッシュメモリと、
前記第１領域に格納されたデータを圧縮する圧縮器と、
前記圧縮器から出力されたデータを暗号化して前記第２領域に格納する暗号器と、
ホストから受信し前記第１領域に格納されたユーザーデータを前記圧縮器により圧縮してから前記暗号器により暗号化させて前記第２領域を経由して前記不揮発性メモリに書き込ませるデータフローコントローラと、
を備える
ことを特徴とするメモリシステム。
【請求項６】
前記メモリシステムは、ホストから受信した前記ユーザーデータのデータパタン出現頻度を集計してから前記第１領域に格納するパタン出現数集計器をさらに備え、
前記圧縮器における圧縮処理はハフマン符号を用いる
ことを特徴とする請求項５に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムとその制御方法に関する。
【背景技術】
【０００２】
既に、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などの不揮発性半導体記憶装置においてもデータの圧縮が検討されはじめている。データ圧縮はユーザーデータのデータパタンにより圧縮効率が異なる。たとえば、一般的な可逆圧縮符号であるハフマン符号は、データ列の出現パタンを検出し、出現頻度に応じて短符号を割り当てて圧縮する。ハフマン符号はＺＩＰ等の一般的な圧縮方式に応用されている。つまり、ハフマン符号による圧縮を用いた場合、実用的な観点から言うと、テキストファイルの様な「パタンが限定される様なデータ」、或いは、セクタアラインのパディングをする為の０パディングデータの様な「同一パタンで構成されるデータ」などで圧縮効率が良いという事になる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１５１８４０号公報
【特許文献２】特開２０１０−１５２５１６号公報
【特許文献２】特表２０１１−５０５０４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、ユーザーデータの暗号化が可能であると共に、データ圧縮効率に優れたメモリシステムとその制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態のメモリシステムは、不揮発性メモリと、第１領域と、前記不揮発性メモリに書き込むデータを格納する第２領域と、前記不揮発性メモリから読み出したデータを格納する第３領域を有するキャッシュメモリと、前記第１領域に格納されたデータを圧縮可能な圧縮器と、前記圧縮器から出力されたデータを暗号化して前記第２領域に格納する暗号器と、前記第３領域に格納されたデータを復号して前記第１領域に格納する復号器と、データフローコントローラとを備える。前記データフローコントローラは、ホストから受信し前記第１領域に格納されたユーザーデータを、非圧縮状態で前記暗号器に暗号化させて前記第２領域を経由して前記不揮発性メモリに書き込ませ、その後所定のタイミングにおいて当該ユーザーデータを前記不揮発性メモリから前記第３領域に読み出して前記復号器に復号させて前記第１領域に格納し、当該ユーザーデータを前記圧縮器により圧縮してから前記暗号器により暗号化させて前記第２領域を経由して前記不揮発性メモリに書き込ませる。
【図面の簡単な説明】
【０００６】
【図１】図１は、実施形態におけるＳＳＤの内部構成ブロック図を含む図面である。
【図２】図２は、実施形態における論理データ管理テーブルの構成を示す図である。
【図３】図３は、実施形態における論理データ管理テーブルの作成および更新の手順の詳細を示すフローチャートである。
【図４】図４は、実施形態における論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブルの構成を示す図である。
【図５】図５は、実施形態における論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブルの作成および更新の手順の詳細を示すフローチャートである。
【図６】図６は、実施形態におけるユーザーデータライト処理について説明するフローチャートである。
【図７】図７は、実施形態におけるユーザーデータの圧縮処理について説明するフローチャートである。
【図８】図８は、実施形態におけるデータコンパクション処理について説明するフローチャートである。
【図９】図９は、実施形態におけるユーザーデータリード処理について説明するフローチャートである。
【図１０】図１０は、実施形態における圧縮済みデータレイアウトについて説明するデータ配置の説明図である。
【図１１】図１１は、実施形態における圧縮および暗号化処理の詳細について説明するフローチャートである。
【図１２】図１２は、実施形態における別のユーザーデータライト処理について説明するデータフロー図である。
【図１３】図１３は、実施形態における別のユーザーデータライト処理について説明するフローチャートである。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるメモリシステムとその制御方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（実施形態）
図１は、本実施形態におけるメモリシステムとしてのＳＳＤ１の内部構成ブロック図を含む図面である。ＳＳＤ１は、ホスト装置２からのデータ送受信の仲介を行うホストＩ／Ｆ１２、キャッシュメモリ３、圧縮器４、暗号器５、伸張器６、復号器７、ＮＡＮＤフラッシュメモリＩ／Ｆ８、およびＮＡＮＤフラッシュメモリ９を備える。圧縮器４における圧縮処理はハフマン符号を用いる。そのため、ＳＳＤ１は、データパタン出現頻度（エントロピー）を集計するパタン出現数集計器１１をさらに備える。ハフマン符号の原理およびパタン出現数集計器１１が集計するデータパタン出現頻度（エントロピー）については、http://www.snap-tck.com/room03/c02/comp/comp.htmlなどを参照のこと。
【０００９】
（ユーザーデータライト処理）
図６のフローチャートを用いて、データフローコントローラ１０により制御されるユーザーデータライト処理について説明する。ホスト装置２はＳＳＤ１に対してユーザーデータのライト処理を依頼する（ステップＳ１０１）。データフローコントローラ１０は、パタン出現数集計器１１を初期化（ステップＳ１０２）した後に、ホスト装置２よりホストＩ／Ｆ１２を介在してユーザーデータをＳＳＤ１に受信させる。受信されたユーザーデータは、パタン出現数集計器１１にてデータパタン出現頻度（エントロピー）の集計が行われ、キャッシュメモリ３の領域Ａに格納される（ステップＳ１０３）。
【００１０】
キャッシュメモリ３の領域Ａに規定量のユーザーデータが格納された場合、或いはホスト装置２が要求した最後ユーザーデータが格納された場合、これらのユーザーデータは圧縮器４と暗号器５（ステップＳ１０４）のパスを通り、再びキャッシュメモリ３に格納される。ただし、先ほどの領域Ａとは別の領域Ｂに格納される（ステップＳ１０５）。なお、キャッシュメモリ３の領域Ａ（第１領域）、領域Ｂ（第２領域）、および後述する領域Ｃ（第３領域）は、それぞれリングバッファ形式で構成されていてもよい。キャッシュメモリ３の領域Ａにホスト装置２が要求した最後ユーザーデータが格納された場合を除き、パタン出現数集計器１１によるデータパタン出現頻度は確定していない。すなわち、データパタン出現頻度が集計中である為、圧縮器４は圧縮処理を行わない。ただし、暗号器５による暗号化は実行される（ステップＳ１０４）。キャッシュメモリ３の領域Ｂに格納されたユーザーデータについては領域Ａより消去する。そうする事でホスト装置２より転送される次のユーザーデータを受信することが可能となる。
【００１１】
データパタン出現頻度の集計結果（データパタン集計結果）は、ホスト装置２の要求により書き込まれるユーザーデータが要求分（１つのライトコマンドの指示分）転送されて初めて確定する。データパタン集計結果は、確定後に、図２に示す１エントリ分の「論理データ管理テーブル」に添付する「圧縮符号変換テーブル」に書き込まれ、これを用いて圧縮によるデータ変換を行う。従って、「圧縮符号変換テーブル」はデータパタンに応じて変化する。ホスト装置２からライトコマンドが来ると、データフローコントローラ１０は、ホスト装置２から要求されたＬＢＡ情報とセクタ数情報、さらにデータパタン集計結果を、それぞれ「ＬＢＡ」、「セクタサイズ」、および「圧縮符号変換テーブル」などを含んだ図２の「論理データ管理テーブル」１エントリ分をキャッシュメモリ３の領域Ｄに構築する（ステップＳ１０６）。領域Ｄは、領域Ａ、領域Ｂ、および後述する領域Ｃとは別の領域である。図２の論理データ管理テーブルの「ＬＢＡ管理ｍａｐ」は、開始ＬＢＡよりセクタサイズ分のＬＢＡ有効フラグ（当該ＬＢＡが有効か無効かを示すフラグ）で構成されており、「セクタサイズ」に応じて動的に長さが変動する。新規のユーザーデータライトであるので、「ＬＢＡ管理ｍａｐ」は全ＬＢＡ有効となっている。しかし、この後、ＡＴＡ規格のコマンドにおいて定義されたデータ無効化命令であるＤＡＴＡ  ＳＥＴ  ＭＡＮＡＧＥＭＥＮＴ(ＴＲＩＭ)コマンド(以下、ＴＲＩＭ（トリム）コマンドと記載)（詳細はＡＴＡコマンドの規格(http://www.t13.org/Documents/UploadedDocuments/docs2009/d2015r1a-ATAATAPI_Command_Set_-_2_ACS-2.pdf)などを参照）などにより無効化されたＬＢＡに対しては無効フラグがたてられる。また、「管理情報」には非圧縮状態または圧縮状態のいずれであるかについての情報および当該「論理データ管理テーブル」１エントリ分のサイズ情報が登録される。
【００１２】
その後、既に登録済みの全論理データ管理テーブルを検索し、既にデータが書き込まれているＬＢＡに上書きする場合、即ち、既にデータが書き込まれているＬＢＡと重複するＬＢＡを有する論理データ管理テーブルについて「ＬＢＡ管理ｍａｐ」を更新し、今回重複したＬＢＡを無効化する。「論理データ管理テーブル」の作成および更新の手順（ステップＳ１０６）の詳細を図３のフローチャートに示す。まず、新規にライト要求されたＬＢＡについて、新規の「論理データ管理テーブル」を作成する（ステップＳ１１）。次に、既存の「論理データ管理テーブル」を全部評価したか否かを判断する（ステップＳ１２）。全部評価してはいない場合（ステップＳ１２：Ｎｏ）は、未評価の「論理データ管理テーブル」の中から選択し（ステップＳ１３）、新規の「論理データ管理テーブル」と比較し（ステップＳ１４）、一致するＬＢＡがなければ（ステップＳ１５：Ｎｏ）、ステップＳ１２に戻る。一致するＬＢＡがあれば（ステップＳ１５：Ｙｅｓ）、既存の「論理データ管理テーブル」の「ＬＢＡ管理ｍａｐ」の一致するＬＢＡのＬＢＡ有効フラグを無効にして（ステップＳ１６）、ステップＳ１２に戻る。ステップＳ１２で、全部評価した場合（ステップＳ１２：Ｙｅｓ）は、図６のステップＳ１０６は終了である。
【００１３】
データフローコントローラ１０は、キャッシュメモリ３の領域Ｂに規定量のユーザーデータが格納された場合、或いはホスト装置２が要求した最後のユーザーデータが格納された場合、領域Ｂに格納された暗号化済みユーザーデータをＮＡＮＤフラッシュメモリ９に書き込む（ステップＳ１０７）。そしてホスト装置２が要求した最後のユーザーデータがＮＡＮＤフラッシュメモリに書き込まれたら、領域Ｄに構築された論理データ管理テーブルをＮＡＮＤフラッシュメモリ９上に書きこむ。
【００１４】
そして、同じく領域Ｄに構築された図４に示した「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」における「ＬＢＡ管理ｍａｐ」を更新してＮＡＮＤフラッシュメモリ９上に書き込む（ステップＳ１０８）。「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」は、ＮＡＮＤフラッシュメモリ９のチップのページ単位でのＮＡＮＤ物理アドレスとデータ論理アドレス（ＬＢＡ）の対応関係を示している。各テーブルの「ＬＢＡ管理ｍａｐ」は「開始ＬＢＡ」より「セクタサイズ」分のＬＢＡ有効フラグで構成されるが、その長さは固定とする。これは、本テーブルが物理アドレス分すでに存在していて、ＬＢＡが未割り付けであってもその管理がされるため、「ＬＢＡ管理ｍａｐ」を動的にサイズ変更可能とするとテーブルの管理が難しいからである。「ＬＢＡ管理ｍａｐ」は圧縮効率最大を想定したサイズとする。「圧縮データサイズ」は登録ＬＢＡから開始されるセクタデータを圧縮したサイズを記録する。本実施形態の場合、未圧縮の場合もそのサイズを記録する。ＮＡＮＤ物理アドレスにＬＢＡが割り付けられていない場合（つまりフリーエリアの場合）は、開始ＬＢＡ値を任意の未定義属性値として弁別してもよいし、「セクタサイズ」を０として弁別してもよい。既にデータが書き込まれているＬＢＡに上書きする場合、即ち、既にデータが書き込まれているＬＢＡと重複するＬＢＡを有する「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」について「ＬＢＡ管理ｍａｐ」を更新し、今回重複したＬＢＡを無効化する（ステップＳ１０８）。
【００１５】
このようにして、「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」においても有効ＬＢＡが重複しない様に管理する。ステップＳ１０８の手順を図５のフローチャートに示す。まず、新規にライト要求されたＬＢＡについて、新規の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」を作成する（ステップＳ２１）。次に、既存の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」を全部評価したか否かを判断する（ステップＳ２２）。全部評価してはいない場合（ステップＳ２２：Ｎｏ）は、未評価の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」の中から選択し（ステップＳ２３）、新規の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」と比較し（ステップＳ２４）、一致するＬＢＡがなければ（ステップＳ２５：Ｎｏ）、ステップＳ２２に戻る。一致するＬＢＡがあれば（ステップＳ２５：Ｙｅｓ）、既存の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」の「ＬＢＡ管理ｍａｐ」の一致するＬＢＡのＬＢＡ有効フラグを無効にして（ステップＳ２６）、ステップＳ２２に戻る。ステップＳ２２で、全部評価した場合（ステップＳ２２：Ｙｅｓ）は、図６のステップＳ１０８は終了である。
【００１６】
以上の一連の処理が完了したらキャッシュメモリ３から領域Ｄは消去しても良いし、そのままユーザーデータキャッシュとして利用しても良い。
【００１７】
（ユーザーデータの圧縮処理）
ＳＳＤ１においてウェアレベリングやコンパクションと言われている記録済みユーザーデータ領域の最適化処理が行われる。これら処理は通常ＳＳＤ１の裏（バックグラウンド）処理で行われる。本実施形態においても、上述した非圧縮状態で記録済みのユーザーデータについての圧縮処理はＳＳＤ１の裏処理で行われる。
【００１８】
以下、図７のフローチャートを用いて、裏処理としてデータフローコントローラ１０により制御されるユーザーデータの圧縮処理を説明する。ホスト装置２からのＳＳＤ１に対するデータアクセスコマンドが所定時間(たとえばＮ（秒)間)途切れた事をトリガとして裏処理がＳＳＤ１の内部で開始される（ステップＳ２０１）。
【００１９】
まず、図２の「論理データ管理テーブル」を参照し、未圧縮データを抽出する。そして、圧縮未完ＬＢＡについて図４の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」を参照し、該当するデータをＮＡＮＤフラッシュメモリＩ／Ｆ８を介在してＮＡＮＤフラッシュメモリ９からキャッシュメモリ３の領域Ｃに読み出す（ステップＳ２０２）。そして読み出した暗号化されたユーザーデータについて復号器７で復号し（ステップＳ２０３）、さらに伸張器６を通してキャッシュメモリ３の領域Ａに格納する（ステップＳ２０４）。データは非圧縮状態なので伸張器６を通しても状態は変わらない。そして圧縮器４に対して図２の「論理データ管理テーブル」に添付されている「圧縮符号変換テーブル」をセットし、圧縮器４で領域Ａのユーザーデータの圧縮を行い（ステップＳ２０５）、さらに暗号器５を通して暗号化を行う（ステップＳ２０６）。
【００２０】
なお、ステップＳ２０５の圧縮では圧縮後のデータをその後の暗号化の暗号化処理のブロックのサイズにアラインさせるために図１０および図１１の様に操作する。なお、本実施形態ではページサイズ自体が暗号化処理のブロックサイズアラインである事を前提とする。図１０はＮＡＮＤフラッシュメモリ９の記録単位（ページ単位）に対する圧縮済みデータレイアウトの説明である。セクタ合計サイズを暗号化処理のブロックサイズアラインに整形した圧縮後のデータサイズがＮＡＮＤフラッシュメモリ９における管理単位であるページサイズ以下であれば同一ページに格納できる。セクタ毎の圧縮後のサイズは一定ではないが、たとえば図１０の場合、セクタ１からセクタ２０までは１つのページに格納する。セクタ２１以降は次に割り当てられたページに格納する。
【００２１】
この処理を説明したのが、図１１の圧縮および暗号化処理の詳細について説明するフローチャートである。圧縮済みデータの合計サイズを管理し、ページサイズ超過の場合はその直前のセクタまでの圧縮データを１単位として暗号化の対象とする。暗号化処理のブロックサイズアラインに調整する為のパディングデータは暗号器５で任意パタンが付加されるのでそれを含めた暗号化データをＮＡＮＤフラッシュメモリ９への記録対象とする。具体的には、まず、ステップＳ３０にて、圧縮器４内の「セクタ数カウンタ」、「直前圧縮済みサイズカウンタ」、および「圧縮済みサイズカウンタ」をそれぞれ０にリセットする。そして、まず、１セクタ分圧縮器４が圧縮し（ステップＳ３１）、「セクタ数カウンタ」を１インクリメントし（ステップＳ３２）、「直前圧縮済みサイズカウンタ」の値に「圧縮済みサイズカウンタ」の値を上書きする（ステップＳ３３）。さらに、ステップＳ３１で１セクタ分圧縮した圧縮後のデータサイズを「圧縮済みサイズカウンタ」の値に加算する（ステップＳ３４）。上述したようにセクタ毎の圧縮後のサイズは一定ではないのでここでの加算値は一定ではない。例えば、１セクタ５１２バイト分のデータがステップＳ３１で１００バイトに圧縮されたとしたら、「圧縮済みサイズカウンタ」への加算値は１００バイトである。
【００２２】
そして、「圧縮済みサイズカウンタ」の値がページサイズを超えた場合（ステップＳ３５：Ｙｅｓ）は、「直前圧縮済みサイズカウンタ」で示された圧縮済みデータを暗号器５で暗号化する（ステップＳ３８）。すなわち、ページサイズ超過の場合はその直前のセクタまでの圧縮データを１単位として暗号化の対象とする。その後、「セクタ数カウンタ」を１にして（ステップＳ３９）、「圧縮済みサイズカウンタ」に（「圧縮済みサイズカウンタ」―「直前圧縮済みサイズカウンタ」）の値を書き込み（ステップＳ４０）、「直前圧縮済みサイズカウンタ」を０にリセットして（ステップＳ４１）、ステップＳ３１に戻って次のセクタを圧縮する。
【００２３】
他方、ステップＳ３５で「圧縮済みサイズカウンタ」の値がページサイズ以下の場合（ステップＳ３５：Ｎｏ）は、全セクタが圧縮されたか否かが判定され（ステップＳ３６）、未だ全セクタが圧縮されていない場合（ステップＳ３６：Ｎｏ）は、ステップＳ３１に戻って次のセクタを圧縮する。全セクタが圧縮された場合（ステップＳ３６：Ｙｅｓ）は、「セクタ数カウンタ」分の圧縮済みデータを暗号器５で暗号化して（ステップＳ３７）、図７のステップＳ２０６は終了である。
【００２４】
また、「圧縮符号変換テーブル」のデータパタン出現頻度（エントロピー）は、データが領域Ａに格納されたステップＳ２０４の時点で、パタン出現数集計器１１で新たに集計したものを用いることも可能である。暗号化されたユーザーデータはキャッシュメモリ３の領域Ｂに格納される（ステップＳ２０７）。そして暗号化されたユーザーデータについて領域Ｄに展開された図２の「論理データ管理テーブル」の「管理情報」の状態を圧縮済みに更新し（ステップＳ２０８）、同じく領域Ｄに展開された図４の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」を更新してＮＡＮＤフラッシュメモリ９の新たな領域にユーザーデータをリプレイスしなおす(同時にリプレイス前のＮＡＮＤフラッシュメモリ９の領域は「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」における登録をクリアまたは「ＬＢＡ管理ｍａｐ」をフリーエリアとなるように更新をする)。そして、領域Ｂの暗号化されたユーザーデータをＮＡＮＤフラッシュメモリＩ／Ｆ８を介在してＮＡＮＤフラッシュメモリ９に書き込む（ステップＳ２０９）。それと共に、領域Ｄの更新状態を反映させるために、ＮＡＮＤフラッシュメモリ９上の「論理データ管理テーブル」の状態を圧縮済みに更新し、ＮＡＮＤフラッシュメモリ９上の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」に書き込みを実行する（ステップＳ２１０）。
【００２５】
以上説明したように、本実施形態においては、ホスト装置２からのＳＳＤ１に対するデータアクセスコマンドが所定時間(たとえばＮ（秒)間)途切れた場合など、ＳＳＤ１の動作に余裕があるときに、ユーザーデータを圧縮してから暗号化する。ハフマン符号などを用いたデータ圧縮においては、暗号化してから圧縮すると圧縮効率を上げることが難しい。例えば、ＴＣＧ Ｏｐａｌ（詳細はＴｒｕｓｔｅｄ Ｃｏｍｐｕｔｉｎｇ Ｇｒｏｕｐ資料(http://www.trustedcomputinggroup.org/files/resource_files/88023378-1D09-3519-AD740D9CA8DFA342/Opal_SSC_1.0_rev1.0-Final.pdf)等を参照）デバイスの場合ユーザーデータを暗号化する必要があり、前述したような単純パタンデータの場合でも暗号化によりランダマイズされてしまう。たとえば、近年のストレージ暗号化法はＡＥＳ２５６ＸＴＳモードが主流である。これはＡＥＳ２５６のブロック（１２８ｂｉｔ）単位でのランダマイズ化を実現しており、同じ平文パタン（Ａｌｌ“０”データ等）でもＡＥＳ２５６のブロック単位でランダマイズ化される。その為、圧縮効率悪化してしまう事が懸念されていた。しかしながら、本実施形態によれば、特に、ＴＣＧ  Ｏｐａｌ対応をした様な「ユーザーデータ暗号化機能」と「ユーザーデータを自己圧縮する機能」の両方の機能を持つＳＳＤ装置において、データ圧縮効率を高めた上で暗号化が可能となる。
【００２６】
なお、ここではＳＳＤ１の裏処理中にデータ圧縮処理を行うとして説明したが、上述したようにキャッシュメモリ３の領域Ａにホスト装置２が要求した最後のユーザーデータが格納された時点でパタン出現数集計器１１によるデータパタン出現頻度は確定しているので、この時点で圧縮は可能である。従って、ホスト装置２からのユーザーデータライト要求時に、データパタン出現頻度の確定後直ちにデータの圧縮を実施して、さらに暗号化してＮＡＮＤフラッシュメモリ９に格納するようにしてもよく、図１のＳＳＤ１は、それが可能なシステム構成をとっている。
【００２７】
また、図１２のデータフロー図に示す様に、ホスト装置２からのユーザーデータライト要求単位が所定セクタ数（図１２では１００ｈセクタ）超過の場合、所定セクタ数（図１２では１００ｈセクタ）毎に即時圧縮処理と暗号化処理を行う事も可能としている。前記所定セクタ数はたとえばキャッシュメモリ３の領域Ａに割り当てられたサイズを超過しない程度のサイズを想定する。
【００２８】
図１３は、このときの処理の流れを説明するフローチャートである。まず、ホスト装置２はＳＳＤ１に対してユーザーデータのライト処理を依頼する（ステップＳ５０１）。データフローコントローラ１０は、パタン出現数集計器１１を初期化（ステップＳ５０２）した後に、ユーザーデータを所定セクタ数（例えば、１００ｈセクタ）分だけ、パタン出現数集計器１１でデータパタン出現頻度を集計してからキャッシュメモリ３の領域Ａに格納する（ステップＳ５０３）。この制御のために、例えば、図１のホストＩ／Ｆ１２とパタン出現数集計器１１との間に何らかのデータバッファを設けてもよい。その後、圧縮器４で領域Ａに保持された所定セクタ数分のユーザーデータの圧縮を行い（ステップＳ５０４）、さらに暗号器５を通して暗号化を行う（ステップＳ５０５）。暗号化されたユーザーデータはキャッシュメモリ３の領域Ｂに格納される（ステップＳ５０６）。そして暗号化されたユーザーデータについて領域Ｄに展開された図２の「論理データ管理テーブル」の作成および更新を行って（ステップＳ５０７）、領域Ｂの暗号化されたユーザーデータをＮＡＮＤフラッシュメモリＩ／Ｆ８を介在してＮＡＮＤフラッシュメモリ９に書き込む（ステップＳ５０８）。さらに、「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」の作成および更新を行なう（ステップＳ５０９）。そして、未圧縮のユーザーデータが残っているか否かが判定され（ステップＳ５１０）、残っている場合（ステップＳ５１０：Ｙｅｓ）はステップＳ５０２に戻り、残っていない場合（ステップＳ５１０：Ｎｏ）は終了である。
【００２９】
（データコンパクション処理）
次に、図８のフローチャートを用いて、図２の「論理データ管理テーブル」、および図４の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」に夫々管理されている「ＬＢＡ管理ｍａｐ」に無効化されたＬＢＡの情報が残っている場合の整理方法について説明する。これは、ＬＢＡが連続する有効データをかき集めるいわゆるデータコンパクションなどと称されるものである。
【００３０】
まず図２の「論理データ管理テーブル」を参照し、無効ＬＢＡを含むエントリを抽出する（ステップＳ３０１）。そして、無効ＬＢＡを含むデータについて図４の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」を参照し、該当するデータをＮＡＮＤフラッシュメモリＩ／Ｆ８を介在してＮＡＮＤフラッシュメモリ９からキャッシュメモリ３の領域Ｃに読み出す（ステップＳ３０２）。そして読み出したユーザーデータについて復号器７と伸張器６を通して復号（ステップＳ３０３）および伸張（ステップＳ３０４）をする。復号に際してはページ単位での復号となる。復号後にページ単位で付加されている暗号化処理のブロックサイズアライン調整用のパディングデータは破棄される。伸張に際しては、図２の「論理データ管理テーブル」に添付された「圧縮符号変換テーブル」を伸張器６にセットする必要がある。復号および伸張されたユーザーデータはキャッシュメモリ３の領域Ａに格納される（ステップＳ３０５）。格納されたユーザーデータの内、「ＬＢＡ管理ｍａｐ」において無効ＬＢＡとして登録されているＬＢＡのユーザーデータを消去する（ステップＳ３０６）。そしてＬＢＡの連続するユーザーデータがあれば、それを単位として「論理データ管理テーブル」を再構築する。ＬＢＡの連続する夫々のユーザーデータについてパタン出現数集計器１１によりパタン集計処理を行う（ステップＳ３０７）。そして集計結果を加工して上記再構築した「論理データ管理テーブル」に添付する「圧縮符号変換テーブル」として新規登録する（ステップＳ３０８）。無効ＬＢＡを含んでいた旧い「論理データ管理テーブル」は破棄する。
【００３１】
そして、ＬＢＡの連続する夫々のユーザーデータについて圧縮処理を行う。その手順は以下である。圧縮器４に対して「論理データ管理テーブル」に添付されている「圧縮符号変換テーブル」をセットし、圧縮器４と暗号器５を通して領域ＡのＬＢＡの連続する夫々のユーザーデータの圧縮（ステップＳ３０９）と暗号化（ステップＳ３１０）を行う。暗号化されたユーザーデータは領域Ｂに格納される（ステップＳ３１１）。そして暗号化されたユーザーデータについて領域Ｄに展開された図２の「論理データ管理テーブル」の「管理情報」の状態を圧縮済みに更新し（ステップＳ３１２）、同じく領域Ｄに展開された図４の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」を更新してＮＡＮＤフラッシュメモリ９の新たな領域にユーザーデータをリプレイスしなおす(同時にリプレイス前のＮＡＮＤフラッシュメモリ９の領域は「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」における登録をクリアまたは「ＬＢＡ管理ｍａｐ」をフリーエリアとなるように更新をする)。そして、領域Ｂの暗号化されたユーザーデータをＮＡＮＤフラッシュメモリＩ／Ｆ８を介在してＮＡＮＤフラッシュメモリ９に書き込む（ステップＳ３１３）。それと共に、領域Ｄの更新状態を反映させるために、ＮＡＮＤフラッシュメモリ９上の「論理データ管理テーブル」の状態を圧縮済みに更新し、ＮＡＮＤフラッシュメモリ９上の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」に書き込みを実行する（ステップＳ３１４）。なお、このような「ＬＢＡ管理ｍａｐ」において無効ＬＢＡとして登録されているＬＢＡのユーザーデータを消去してから圧縮することは、上述したＴＲＩＭ（トリム）コマンドにより無効化されたＬＢＡについてウェアレベリング時に行ってもよい。
【００３２】
（ユーザーデータリード処理）
以下、図９のフローチャートを用いて、ホストＩ／Ｆ１２を介してホスト装置２よりＳＳＤ１に対してユーザーデータリードの要求がされた場合の手順を説明する。
【００３３】
まず図２の「論理データ管理テーブル」を参照し、リード要求されたＬＢＡを含むエントリを抽出する（ステップＳ４０１）。そして、リード要求されたＬＢＡについて図４の「論理アドレス(ＬＢＡ)＜−＞物理アドレス（ＮＡＮＤ物理アドレス）変換テーブル」を参照し、該当するデータをＮＡＮＤフラッシュメモリＩ／Ｆ８を介在してＮＡＮＤフラッシュメモリ９からキャッシュメモリ３の領域Ｃに読み出す（ステップＳ４０２）。そして読み出したユーザーデータについて復号器７と伸張器６を通して復号（ステップＳ４０３）を行った後に、伸張（ステップＳ４０４）をする。伸張に際しては、図２の「論理データ管理テーブル」に添付された「圧縮符号変換テーブル」を伸張器６にセットする必要がある。復号および伸張されたユーザーデータはキャッシュメモリ３の領域Ａに格納される（ステップＳ４０５）。そして、領域Ａに格納されたユーザーデータの内データリードの要求がされているＬＢＡのユーザーデータのみをホストＩ／Ｆ１２を介してホスト装置２に転送（ステップＳ４０６）してデータリード処理を終える。
【００３４】
このように、本実施形態によれば、ユーザーデータ圧縮機能とユーザーデータ暗号化機能を有するＳＳＤ装置において、そのデータアクセスパフォーマンスを悪化させる事なく、ユーザーデータの暗号化と圧縮効率の高い圧縮アルゴリズムを提供することができる。
【００３５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００３６】
１  ＳＳＤ、２  ホスト装置、３  キャッシュメモリ、４  圧縮器、５  暗号器、６  伸張器、７  復号器、８  ＮＡＮＤフラッシュメモリＩ／Ｆ、９  ＮＡＮＤフラッシュメモリ。
【図１】
2014052899.tif 000003
【図２】
2014052899.tif 000004
【図３】
2014052899.tif 000005
【図４】
2014052899.tif 000006
【図５】
2014052899.tif 000007
【図６】
2014052899.tif 000008
【図７】
2014052899.tif 000009
【図８】
2014052899.tif 000010
【図９】
2014052899.tif 000011
【図１０】
2014052899.tif 000012
【図１１】
2014052899.tif 000013
【図１２】
2014052899.tif 000014
【図１３】
2014052899.tif 000015