(57)【要約】      （修正有）【課題】性能を改善することができるメモリシステムを提供する。【解決手段】情報処理システム１は、ホスト２とメモリシステム（ソリッドステートドライブ）３を含む。メモリシステムは、不揮発性メモリ５に格納された論理物理アドレス変換テーブル８の一部を第１のキャッシュ３１としてランダムアクセスメモリ６に格納し、論理物理アドレス変換テーブルを圧縮することによって得られる圧縮論理物理アドレス変換テーブルを第２のキャッシュ３２としてランダムアクセスメモリに格納する。第１のアドレス変換データが格納される第２のキャッシュの第１のエントリのうち圧縮論理物理アドレス変換テーブルとして使用される領域以外の第１領域に、第１のアドレス変換データの一部を示す第１情報を格納する。第１のキャッシュに存在しない第１のアドレス変換データの一部をチェックする場合、第２のキャッシュの第１のエントリに格納されている第１情報を参照する。【選択図】図１
2020154603.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに格納された論理物理アドレス変換テーブルの一部を第１のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルを圧縮することによって得られる圧縮論理物理アドレス変換テーブルを第２のキャッシュとして前記ランダムアクセスメモリに格納するように構成されたコントローラとを具備し、
前記コントローラは、
前記ホストによって指定される第１の論理アドレスに対応する前記不揮発性メモリの第１の物理アドレスを含む第１のアドレス変換データが前記第１のキャッシュに存在せず、且つ前記第１のアドレス変換データを圧縮することによって得られる第１の圧縮アドレス変換データが前記第２のキャッシュに存在する場合、前記第１の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第１のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第１の物理アドレスを取得する動作とを実行し、
前記第１の圧縮アドレス変換データが格納される前記第２のキャッシュの第１のエントリのうち圧縮論理物理アドレス変換テーブルとして使用される領域以外の第１領域に、前記第１のアドレス変換データの一部を示す第１情報を格納し、
前記第１のキャッシュに存在しない前記第１のアドレス変換データの一部をチェックする処理を実行する場合、前記第２のキャッシュの前記第１のエントリに格納されている前記第１情報を参照するように構成されている、メモリシステム。
【請求項２】
前記第１のアドレス変換データは複数の論理アドレスに対応するアドレス領域に対応する複数の物理アドレスを含み、
前記第１情報は、前記アドレス領域に対応する前記複数の論理アドレスのうち、物理アドレスが割り当てられていない論理アドレスを識別可能な情報を含む請求項１記載のメモリシステム。
【請求項３】
前記第１の圧縮アドレス変換データが格納される前記第２のキャッシュの各々のエントリは所定のサイズを有し、前記所定のサイズは前記第１のアドレス変換データが格納される前記第１のキャッシュの各エントリのサイズより小さい請求項１に記載のメモリシステム。
【請求項４】
前記コントローラは、前記第１情報の終了を示す識別子である第２情報を前記第１情報が格納される領域に隣接する領域に格納する請求項１に記載のメモリシステム。
【請求項５】
前記コントローラは、前記第１領域にさらに所定のビットパターンである第３情報を格納する請求項４に記載のメモリシステム。
【請求項６】
前記コントローラは、前記第３情報を前記第２情報が格納される領域に隣接する領域に格納する請求項５に記載のメモリシステム。
【請求項７】
前記コントローラは、前記第１領域に前記第１情報を格納できない場合、前記第１領域に前記第１情報を格納せず前記第１領域に前記第２情報を格納する請求項４に記載のメモリシステム。
【請求項８】
前記コントローラは、前記第１のアドレス変換データの一部をチェックする処理を実行する場合、前記第１の圧縮アドレス変換データを伸張することなく前記第１情報を参照する請求項１に記載のメモリシステム。
【請求項９】
前記第１のアドレス変換データは複数の論理アドレスに対応するアドレス領域に対応する複数の物理アドレスを含み、
前記コントローラは、前記第１のアドレス変換データを圧縮して前記第１の圧縮アドレス変換データを生成する圧縮回路を含み、
前記圧縮回路は、前記第１のアドレス変換データを圧縮する場合に、前記第１のアドレス変換データに含まれ且つ特定のビットパターンを有する物理アドレスを識別可能な情報を前記第１情報として生成するように構成されている請求項１記載のメモリシステム。
【請求項１０】
前記コントローラは、検出すべきビットパターンを前記特定のビットパターンとして前記圧縮回路に通知するように構成されている請求項９記載のメモリシステム。
【請求項１１】
前記コントローラは、
前記第１のエントリに含まれる前記第１の圧縮アドレス変換データに対応する複数の物理アドレスのうちの第１物理アドレスを更新する場合、前記第１のエントリの前記複数の物理アドレスのうち前記第１物理アドレスが保存される位置を示すオフセット値と、前記第１物理アドレスの更新後の物理アドレスとを、前記第１のエントリの前記第１領域に格納するように構成されている請求項１記載のメモリシステム。
【請求項１２】
前記コントローラは、前記第１のエントリに格納されている前記第１の圧縮アドレス変換データを伸張する場合、前記第１のエントリに格納されている前記第１の圧縮アドレス変換データを伸張することによって得られる前記非圧縮アドレス変換データを、前記オフセット値と前記更新後の物理アドレスとを用いて更新するように構成されている請求項１１記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムとしては、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。
【０００４】
このようなメモリシステムにおいては、論理アドレスを不揮発性メモリの物理アドレスに変換するための論理物理アドレス変換がアドレス変換テーブルを用いて実行される。アドレス変換テーブルの参照等に要する時間が長くなると、メモリシステムの性能の低下が引き起こされる場合がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１９６１１５号公報
【特許文献２】特許第５１３０６４６号公報
【特許文献３】米国特許出願公開第２０１７／０１７７４９７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、性能を改善することができるメモリシステムを提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記不揮発性メモリに格納された論理物理アドレス変換テーブルの一部を第１のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルを圧縮することによって得られる圧縮論理物理アドレス変換テーブルを第２のキャッシュとして前記ランダムアクセスメモリに格納する。前記コントローラは、前記ホストによって指定される第１の論理アドレスに対応する前記不揮発性メモリの第１の物理アドレスを含む第１のアドレス変換データが前記第１のキャッシュに存在せず、前記第１のアドレス変換データを圧縮することによって得られる第１の圧縮アドレス変換データが前記第２のキャッシュに存在する場合、前記第１の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第１のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第１の物理アドレスを取得する動作とを実行する。前記コントローラは、前記第１の圧縮アドレス変換データが格納される前記第２のキャッシュの第１のエントリのうち圧縮論理物理アドレス変換テーブルとして使用される領域以外の第１領域に、前記第１のアドレス変換データの一部を示す第１情報を格納する。前記コントローラは、前記第１のキャッシュに存在しない前記第１のアドレス変換データの一部をチェックする処理を実行する場合、前記第２のキャッシュの前記第１のエントリに格納されている前記第１情報を参照する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【図２】同実施形態のメモリシステム内の不揮発性メモリの構成例を示す図。
【図３】同実施形態のメモリシステム内の論理物理アドレス変換テーブル（Ｌ２Ｐテーブル）の構成例を示す図。
【図４】同実施形態のメモリシステム内の論理物理アドレス変換テーブルキャッシュ（Ｌ２Ｐテーブルキャッシュ）の構成例を示す図。
【図５】同実施形態のメモリシステム内の圧縮論理物理アドレス変換テーブルキャッシュ（圧縮Ｌ２Ｐテーブルキャッシュ）の構成例を示す図。
【図６】メタデータ生成機能を含まない圧縮伸張モジュールの構成例を示すブロック図。
【図７】非圧縮アドレス変換データとメタデータを保持しない圧縮アドレス変換データとの関係を示す図。
【図８】メタデータを保持しない圧縮Ｌ２Ｐテーブルキャッシュの各エントリの内容の例を示す図。
【図９】メタデータを保持しない圧縮Ｌ２Ｐテーブルキャッシュを用いて実行されるアンマップチェック処理を示す図。
【図１０】メタデータを保持しない圧縮Ｌ２Ｐテーブルキャッシュを用いて実行されるアンマップチェック処理の手順を示すフローチャート。
【図１１】メタデータを保持しない圧縮Ｌ２Ｐテーブルキャッシュを用いて実行されるアドレス更新処理を示す図。
【図１２】メタデータを保持しない圧縮Ｌ２Ｐテーブルキャッシュを用いて実行されるアドレス更新処理の手順を示すフローチャート。
【図１３】メタデータ生成機能を含む圧縮伸張モジュールの構成例を示すブロック図。
【図１４】非圧縮アドレス変換データとメタデータを保持する圧縮アドレス変換データとの関係を示す図。
【図１５】圧縮Ｌ２Ｐテーブルキャッシュの各エントリの空き領域に格納されるメタデータのフォーマットの例を示す図。
【図１６】メタデータを保持する圧縮Ｌ２Ｐテーブルキャッシュの各エントリの内容の例を示す図。
【図１７】非圧縮アドレス変換データとメタデータを保持する圧縮アドレス変換データとの関係を示す図。
【図１８】メタデータを保持する圧縮Ｌ２Ｐテーブルキャッシュを用いて実行されるアンマップチェック処理を示す図。
【図１９】メタデータを保持する圧縮Ｌ２Ｐテーブルキャッシュを用いて実行されるアンマップチェック処理の手順を示すフローチャート。
【図２０】メタデータを保持する圧縮Ｌ２Ｐテーブルキャッシュを用いて実行されるアドレス更新処理を示す図。
【図２１】メタデータを保持する圧縮Ｌ２Ｐテーブルキャッシュ内の圧縮アドレス変換データを伸張する処理において実行されるアドレス更新処理の手順を示すフローチャート。
【図２２】Ｌ２Ｐテーブルキャッシュのキャッシュヒットが起きた時に同実施形態のメモリシステムによって実行されるキャッシュ制御処理の処理シーケンスを示す図。
【図２３】Ｌ２Ｐテーブルキャッシュのキャッシュミスが起こり且つ圧縮Ｌ２Ｐテーブルキャッシュのキャッシュヒットが起きた時に同実施形態のメモリシステムによって実行されるキャッシュ制御処理の処理シーケンスを示す図。
【図２４】Ｌ２Ｐテーブルキャッシュのキャッシュミスが起こり且つ圧縮Ｌ２Ｐテーブルキャッシュのキャッシュミスが起きた時に同実施形態のメモリシステムによって実行されるキャッシュ制御処理の処理シーケンスを示す図。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１０】
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成されたストレージデバイスである。このメモリシステムは、例えば、ソリッドステートドライブ（ＳＳＤ）として実現されてもよいし、メモリカードとして実現されてもよい。以下では、このメモリシステムが、ソリッドステートドライブ（ＳＳＤ）３として実現されている場合を想定する。
【００１１】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、パーソナルコンピュータやサーバ、携帯電話、撮像装置であってもよいし、タブレット、スマートフォンなどの携帯端末であってもよいし、ゲーム機器であってもよいし、カーナビゲーションシステムなどの車載端末であってもよい。
【００１２】
ＳＳＤ３は、ホスト２として機能する情報処理装置の外部記憶装置として使用され得る。ＳＳＤ３は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１３】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、ユニバーサルシリアルバス（ＵＳＢ）、Ｍｏｂｉｌｅ  Ｉｎｄｕｓｔｒｙ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＭＩＰＩ）、ＵｎｉＰｒｏ等を使用し得る。
【００１４】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。ＮＡＮＤ型フラッシュメモリ５は、限定されないが、複数のＮＡＮＤ型フラッシュメモリチップを含んでいてもよい。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５に電気的に接続され、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして動作する。このコントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現されてもよい。
【００１５】
ＮＡＮＤ型フラッシュメモリ５は、ユーザデータ７と、論理物理アドレス変換テーブル（ｌｏｇｉｃａｌ−ｔｏ−ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ  ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ（Ｌ２Ｐテーブル））７のような管理情報とを格納する。論理物理アドレス変換テーブル８は、以下、単にＬ２Ｐテーブル８としても参照される。このＬ２Ｐテーブル８は、ＳＳＤ３をアクセスするためにホスト２によって指定される論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。論理アドレスは、ＳＳＤ３の論理アドレス空間内の位置をアドレス指定するためにホスト２によって使用されるアドレスである。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。
【００１６】
論理物理アドレス変換テーブル８、つまりＬ２Ｐテーブル８は、ホスト２によって指定される論理アドレスを、この論理アドレスに対応する最新のデータが格納されているＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す物理アドレスに変換する論理物理アドレス変換動作のために使用される。
【００１７】
ＮＡＮＤ型フラッシュメモリ５は、メモリセルアレイを有する１以上のＮＡＮＤ型フラッシュメモリチップを有する。メモリセルアレイは、マトリクス状に配列された複数のメモリセルを有する。ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、図２に示されているように、複数のブロック（物理ブロック）ＢＬＫ０〜ＢＬＫ（ｊ−１）を含む。ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）は、消去動作の単位として機能する。
【００１８】
ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）は複数のページ（物理ページ）を含む。つまり、ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）の各々は、ページＰ０、Ｐ１、…Ｐ（ｋ−１）を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。ＮＡＮＤ型フラッシュメモリ５においては、データのリードおよびデータのライトはページ単位で実行される。
【００１９】
図１において、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理とＮＡＮＤ型フラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能し得る。
【００２０】
データ管理には、（１）論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ＮＡＮＤ型フラッシュメモリ５の制約（例えば、ページ単位のリード／ライト動作とブロック単位の消去動作）とを隠蔽するための処理、等が含まれる。論理アドレスと物理アドレスとの間のマッピングの管理は、Ｌ２Ｐテーブル８を用いて実行される。
【００２１】
コントローラ４は、Ｌ２Ｐテーブル８を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。この管理サイズとしては、これに限定されないが、例えばクラスタが使用されてもよい。クラスタは論理アドレス空間内の位置を指定する単位であり、１つのクラスタは連続する複数のセクタ（例えば、８個のセクタ、１６個のセクタ、または３２個のセクタ、等）を含む。以下では、これに限定されないが、１つのクラスタが８個のセクタを含む場合を想定する。この場合、１つのセクタのサイズが５１２バイトであるならば、一つのクラスタのサイズは４Ｋバイト（４ＫＢ）となる。Ｌ２Ｐテーブル８は、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングをこの４ＫＢのクラスタ単位で管理してもよい。
【００２２】
あるクラスタを指定する論理アドレスは論理クラスタアドレス（ＬＣＡ）と称され、ある論理クラスタアドレス（ＬＣＡ）に対応する物理アドレスは、メディアクラスタアドレス（ＭＣＡ）と称される。
【００２３】
ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、Ｌ２Ｐテーブル８を更新することによってこの論理アドレスをこの別の物理記憶位置に関連付け、以前のデータを無効化する。
【００２４】
ブロック管理には、不良ブロック（バッドブロック）の管理と、ウェアレベリングと、ガベージコレクション等が含まれる。ウェアレベリングは、ブロックそれぞれの消耗を均一化するための動作である。
【００２５】
ガベージコレクションは、フリーブロックの個数を増やすための動作である。フリーブロックは有効データを含まないブロックである。ガベージコレクションにおいては、コントローラ４は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック（例えばフリーブロック）にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、Ｌ２Ｐテーブル８から参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)は有効データであり、後にホスト２からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト２からリードされる可能性が無いデータである。そして、コントローラ４は、Ｌ２Ｐテーブル８を更新して、コピーされた有効データの論理アドレスそれぞれに対して、コピー先の物理アドレスをマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後にデータの書き込みのために再利用することが可能となる。
【００２６】
ホスト２は、ＳＳＤ３に様々なコマンドを送出する。これらコマンドには、リードコマンド、ライトコマンド、アンマップコマンド、等が含まれる。リードコマンドは、ＳＳＤ３に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータに対応する論理アドレス（開始ＬＢＡ）と、リードすべきデータの長さとを含む。
【００２７】
コントローラ４がホスト２からリードコマンドを受信した時、コントローラ４は、Ｌ２Ｐテーブル８を参照して、リードコマンド内の開始ＬＢＡに対応する物理アドレスを得る。コントローラ４は、この得られた物理アドレスに対応するＮＡＮＤ型フラッシュメモリ５の物理記憶位置からデータをリードし、リードしたデータをホスト２に返す。
【００２８】
ライトコマンドは、ＳＳＤ３に対してデータの書き込みを要求するコマンドである。ライトコマンドは、ライトデータ（つまり書き込むべきデータ）の論理アドレス（開始ＬＢＡ）と、ライトデータの長さとを含む。コントローラ４は、ライトデータを、ＮＡＮＤ型フラッシュメモリ５内の利用可能な物理記憶位置に書き込む。さらに、コントローラ４は、Ｌ２Ｐテーブル８を更新することによって、ライトデータが書き込まれた物理記憶位置に対応する物理アドレスを、このライトデータに対応する論理アドレスにマッピングする。
【００２９】
コントローラ４は、ＤＲＡＭ６のようなランダムアクセスメモリ内のメモリ領域を、Ｌ２Ｐテーブル８の内容の一部をキャッシュするＬ２Ｐテーブルキャッシュ３１として使用する。換言すれば、コントローラ４は、Ｌ２Ｐテーブル８の内容の一部を論理物理アドレス変換テーブルキャッシュ（以下、Ｌ２Ｐテーブルキャッシュと称する）３１としてＤＲＡＭ６のようなランダムアクセスメモリに格納する。コントローラ４は、このＬ２Ｐテーブルキャッシュ３１を使用して、ホスト２によって指定される論理アドレスをＮＡＮＤ型フラッシュメモリ５の物理アドレスに変換するための論理物理アドレス変換を実行する。
【００３０】
本実施形態では、コントローラ４は、ＤＲＡＭ６のようなランダムアクセスメモリのメモリ領域を効率よく利用するために、このメモリ領域を、論理物理アドレス変換用の２種類のキャッシュ、つまりＬ２Ｐテーブルキャッシュ３１および圧縮論理物理アドレス変換テーブルキャッシュ（以下、圧縮Ｌ２Ｐテーブルキャッシュと称する）３２として使用する。
【００３１】
換言すれば、コントローラ４は、Ｌ２Ｐテーブル８の内容の一部をＬ２Ｐテーブルキャッシュ３１としてＤＲＡＭ６のようなランダムアクセスメモリに格納するだけでなく、Ｌ２Ｐテーブル８の内容を圧縮することによって得られる圧縮論理物理アドレス変換テーブルの内容を圧縮Ｌ２Ｐテーブルキャッシュ３２としてランダムアクセスメモリに格納する。
【００３２】
Ｌ２Ｐテーブルキャッシュ３１は複数のエントリ（複数のキャッシュライン）を含み、各エントリはアドレス変換データを格納する。一つのエントリに格納されるアドレス変換データは、連続する複数の論理アドレスにそれぞれ対応するＮＡＮＤ型フラッシュメモリ５の複数の物理アドレスを含んでいてもよい。一般に、ＮＡＮＤ型フラッシュメモリ５に対するアクセスは空間的局所性を有するので、連続する複数の論理アドレスにそれぞれ対応する複数の物理アドレスを各々が格納する複数のエントリを含むＬ２Ｐテーブルキャッシュ３１構成はキャッシュヒット率を高めることを可能にする。
【００３３】
圧縮Ｌ２Ｐテーブルキャッシュ３２は、Ｌ２Ｐテーブル８の内容を圧縮することによって得られる圧縮アドレス変換データをキャッシュするために使用される。圧縮Ｌ２Ｐテーブルキャッシュ３２も複数のエントリ（複数のキャッシュライン）を含む。圧縮Ｌ２Ｐテーブルキャッシュ３２に含まれるエントリの数は、Ｌ２Ｐテーブルキャッシュ３１に含まれるエントリの数よりも多くてもよい。
【００３４】
圧縮Ｌ２Ｐテーブルキャッシュ３２の一つのエントリに格納される圧縮アドレス変換データは、連続する複数の論理アドレスにそれぞれ対応するＮＡＮＤ型フラッシュメモリ５の複数の物理アドレスを圧縮することによって得られる圧縮データである。
【００３５】
圧縮Ｌ２Ｐテーブルキャッシュ３２の１エントリ分の圧縮アドレス変換データのサイズは、Ｌ２Ｐキャッシュ３１の１エントリ分のアドレス変換データのサイズの数分の１程度である。したがって、圧縮Ｌ２Ｐテーブルキャッシュ３２は、少ないメモリ容量で、より多くの論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持することができる。
【００３６】
コントローラ４は、Ｌ２Ｐテーブル８の内容の一部をＬ２Ｐテーブルキャッシュ３１にキャッシュし、またＬ２Ｐテーブル８の内容を圧縮することによって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２にキャッシュする。
【００３７】
コントローラ４がホスト２からリード要求（リードコマンド）を受信した場合、コントローラ４は、以下の論理物理アドレス変換動作を実行する。
【００３８】
コントローラ４は、まず、ホスト２から受信したリード要求によって指定される論理アドレスに対応するＮＡＮＤ型フラッシュメモリ５の物理アドレスを含むアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在するか否かを判定する（キャッシュヒットチェック）。このアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在しないならば（キャッシュミス）、コントローラ４は、このアドレス変換データに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在するか否かを判定する（圧縮キャッシュヒットチェック）。この圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在するならば（圧縮キャッシュヒット）、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２のこの圧縮アドレス変換データを使用して、論理物理アドレス変換を実行する。
【００３９】
圧縮Ｌ２Ｐテーブルキャッシュ３２を有さない構成においては、もしＬ２Ｐテーブルキャッシュ３１のキャッシュミスが起きたならば、コントローラ４は、指定された論理アドレスに対応するアドレス変換データをＮＡＮＤ型フラッシュメモリ５内のＬ２Ｐテーブル８からリードすることが必要となる。このため、論理物理アドレス変換に多くの時間を要することになる。
【００４０】
本実施形態では、Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起きた場合は、ＮＡＮＤ型フラッシュメモリ５よりも高速にアクセス可能なＤＲＡＭ６上に存在する圧縮Ｌ２Ｐテーブルキャッシュ３２から、指定された論理アドレスに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５の物理記憶位置を示す物理アドレスを含む圧縮アドレス変換データを迅速に取得することができる。
【００４１】
Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起き、且つ圧縮Ｌ２Ｐテーブルキャッシュ３２の圧縮キャッシュミスが起きたならば、コントローラ４は、指定された論理アドレスに対応するアドレス変換データをＮＡＮＤ型フラッシュメモリ５内のＬ２Ｐテーブル８からリードする。この場合、コントローラ４は、リードされたアドレス変換データをＬ２Ｐテーブルキャッシュ３１に格納すると共に、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に格納する。
【００４２】
次に、コントローラ４の構成について説明する。
【００４３】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、専用ハードウェア（ＨＷ）１３、バックエンド部１４等を含む。これらホストインタフェース１１、ＣＰＵ１２、専用ハードウェア（ＨＷ）１３、バックエンド部１４は、バス１０を介して相互接続される。
【００４４】
ホストインタフェース１１は、ホスト２からライトコマンド、リードコマンド、等の様々なコマンドを受信する回路として機能する。
【００４５】
ＣＰＵ１２は、ホストインタフェース１１、専用ハードウェア（ＨＷ）１３、バックエンド部１４等の動作を制御するように構成されたプロセッサである。ＣＰＵ１２は、図示しないＲＯＭ等に格納されている制御プログラム（ファームウェア：ＦＷ）を実行することによって様々な処理を行う。このＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行する。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行されるファームウェアによって制御される。なお、上述のコマンド処理の一部または全部は、専用ハードウェア１３によって実行してもよい。
【００４６】
専用ハードウェア１３は、圧縮伸張モジュール１３１、ＤＲＡＭインタフェース１３２、ＤＭＡ（direct memory access）コントローラ（ＤＭＡＣ）１３３等を含む。圧縮伸張モジュール１３１は、アドレス変換データを圧縮して圧縮アドレス変換データを生成するエンコード処理、および圧縮アドレス変換データを伸張して元のアドレス変換データを生成するデコード処理を実行する。
【００４７】
圧縮伸張モジュール１３１は、ＤＲＡＭインタフェース１３２と通信するＲＡＭ側インタフェースと、ＤＭＡＣ１３３と通信するＤＲＡＭ側インタフェースとを含む。ＤＲＡＭインタフェース１３２は、ＤＲＡＭ６を制御するＤＲＡＭ制御回路として機能する。このＤＲＡＭ６のメモリ領域は、Ｌ２Ｐテーブルキャッシュ３１および圧縮Ｌ２Ｐテーブルキャッシュ３２として機能するのみならず、ワークＲＡＭ３３としも機能してもよい。なお、コントローラ４はＳＲＡＭを含んでいてもよく、このＳＲＡＭがワークＲＡＭ３３としも機能してもよい。
【００４８】
ＤＭＡＣ１３３は、ＮＡＮＤ型フラッシュメモリ５とＤＲＡＭ６との間のデータ転送（ＤＭＡ転送）を制御する。Ｌ２Ｐテーブル８のアドレス変換データをＤＲＡＭ６上の圧縮Ｌ２Ｐテーブルに転送する際には、このアドレス変換データはＤＭＡＣ１３３から圧縮伸張モジュール１３１に転送され、圧縮伸張モジュール１３１によって圧縮される。
【００４９】
圧縮されたアドレス変換データはＤＲＡＭインタフェース１３２を介してＤＲＡＭ６上の圧縮Ｌ２Ｐテーブルに格納される。ＤＲＡＭ６上の圧縮Ｌ２Ｐテーブルの圧縮アドレス変換データをＮＡＮＤ型フラッシュメモリ５上のＬ２Ｐテーブル８またはＤＲＡＭ６上のＬ２Ｐテーブルキャッシュ３１に転送する際には、この圧縮アドレス変換データは、ＤＭＡＣ１３３の制御の下、ＤＲＡＭインタフェース１３２から圧縮伸張モジュール１３１に転送され、圧縮伸張モジュール１３１によって伸張され、これによって元の非圧縮アドレス変換データが得られる。この非圧縮アドレス変換データは、ＤＭＡＣ１３３の制御の下、ＮＡＮＤ型フラッシュメモリ５またはＤＲＡＭ６に転送される。
【００５０】
バックエンド部１４は、符号化／復号化部１４１と、ＮＡＮＤインタフェース１４２とを含む。符号化／復号化部１４１は、例えば、エラー訂正コード（ＥＣＣ）エンコーダおよびＥＣＣデコーダとして機能し得る。ＮＡＮＤ型フラッシュメモリ５にデータをライトすべき時、符号化／復号化部１４１は、書き込むべきライトデータをエンコード（ＥＣＣエンコード）することによってこのデータにエラー訂正コード（ＥＣＣ）を付加する。ＮＡＮＤ型フラッシュメモリ５からデータがリードされた時、符号化／復号化部１４１は、リードされたデータに付加されたＥＣＣを使用して、このデータのエラー訂正を行う（ＥＣＣデコード）。
【００５１】
ＮＡＮＤインタフェース１４２は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。ＮＡＮＤインタフェース１４２は、複数のチャンネルを介してＮＡＮＤ型フラッシュメモリ５に接続されてもよい。
【００５２】
図３は、Ｌ２Ｐテーブル８の構成例を示す。
【００５３】
ＳＳＤ３をアクセスするためにホスト２によって使用される論理アドレス空間は、複数のアドレス領域（以下、Ｒｅｇｉｏｎと称する）に分割される。各Ｒｅｇｉｏｎは連続する複数の論理アドレスを含む。
【００５４】
Ｌ２Ｐテーブル８は、複数のＲｅｇｉｏｎにそれぞれ対応する複数のエントリを含む。図３では、論理アドレス空間は、Ｒｅｇｉｏｎアドレス０を有するＲｅｇｉｏｎ(Region addr. が0)、Ｒｅｇｉｏｎアドレス１を有するＲｅｇｉｏｎ(Region addr. が1)、Ｒｅｇｉｏｎアドレス２を有するＲｅｇｉｏｎ(Region addr. が2)、…、ＲｅｇｉｏｎアドレスＭを有するＲｅｇｉｏｎ(Region addr. がM)を含むＭ＋１個のＲｅｇｉｏｎに分割されている場合が例示されている。この場合、Ｌ２Ｐテーブル８は、Ｍ＋１個のエントリを含む。
【００５５】
各エントリは、このエントリに対応するＲｅｇｉｏｎに属する複数の論理アドレスに対応する複数の物理アドレスをアドレス変換データとして格納する。つまり、各エントリ内のアドレス変換データは、複数の論理アドレスに対応するＲｅｇｉｏｎに対応する複数の物理アドレスを含む。上述したように、これら物理アドレスはメディアクラスタアドレス（ＭＣＡ）であってもよい。
【００５６】
一つのＲｅｇｉｏｎに対応するアドレス変換データは、例えば、１６個のＭＣＡを含む。一つのＭＣＡは、例えば４バイトのサイズを有する。この場合、一つのＲｅｇｉｏｎに対応するアドレス変換データは６４バイトのサイズを有する。
【００５７】
ホスト２によって指定される論理アドレスは、この論理アドレスが属するＲｅｇｉｏｎを示すＲｅｇｉｏｎアドレスとこのＲｅｇｉｏｎ内のオフセットとに分割される。例えば、論理アドレス（ＬＣＡ）が３２ビット［ｂ３１：ｂ０］で表現されるケースを想定した場合、ＬＣＡ［ｂ３１：ｂ０］のうちの［ｂ３１：ｂ３］がＲｅｇｉｏｎアドレスとして使用され、ＬＣＡ［ｂ３１：ｂ０］のうちの［ｂ３：ｂ０］がオフセットとして使用される。
【００５８】
Ｌ２Ｐテーブル８においては、あるＲｅｇｉｏｎアドレスに対応するエントリは、＋０〜＋１５の１６個のオフセット位置にそれぞれ対応する１６個のＭＣＡを保持する。
【００５９】
図４は、Ｌ２Ｐテーブルキャッシュ３１の構成例を示す。
【００６０】
Ｌ２Ｐテーブルキャッシュ３１は、Ｎ＋１個のエントリ（Ｎ＋１個のキャッシュライン）を含む。ここで、Ｎ＋１は、通常、全Ｒｅｇｉｏｎの数（＝（Ｍ＋１））よりも少ない。Ｌ２Ｐテーブルキャッシュ３１の各エントリはＩＤフィールドとタグフィールドとを含む。ＩＤフィールドはこのエントリの識別子を示す。タグフィールドは、どのＲｅｇｉｏｎのアドレス変換データ（１６個の物理アドレス）がこのエントリに格納されているのかを示す。
【００６１】
例えば、あるエントリに関連づけられた“０”のタグフィールドは、Ｒｅｇｉｏｎアドレス＝０を有するＲｅｇｉｏｎに対応するアドレス変換データがこのエントリに格納されていることを示し、あるエントリに関連づけられた“２”のタグフィールドは、Ｒｅｇｉｏｎアドレス＝２を有するＲｅｇｉｏｎに対応するアドレス変換データがこのエントリに格納されていることを示す。
【００６２】
Ｌ２Ｐテーブルキャッシュ３１の各エントリは、＋０〜＋１５の１６個のオフセット位置にそれぞれ対応する１６個のＭＣＡを保持する。
【００６３】
図５は、圧縮Ｌ２Ｐテーブルキャッシュ３２の構成例を示す。
【００６４】
圧縮Ｌ２Ｐテーブルキャッシュ３２は、Ｌ２Ｐテーブル８のエントリの数と同数のエントリ（Ｍ＋１個のエントリ）を含んでいてもよい。この場合、これらＭ＋１個のエントリは、Ｍ＋１個のＲｅｇｉｏｎアドレス０〜Ｍにそれぞれ対応する。
【００６５】
圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリは、このエントリに対応するＲｅｇｉｏｎに属する１６個の連続する論理アドレスにそれぞれ対応する１６個のＭＣＡを含むアドレス変換データを圧縮することによって得られる圧縮アドレス変換データ（Ｃｏｍｐｒｅｓｓｅｄ  Ｄａｔａ）を格納する。ホスト２によって全てのＲｅｇｉｏｎがリードアクセされた後は、圧縮Ｌ２Ｐテーブルキャッシュ３２は、そののＭ＋１個のエントリの全てに圧縮アドレス変換データが格納された状態となる。このため、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５４上のＬ２Ｐテーブル８をリードすることなく、ＤＲＡＭ６上の圧縮Ｌ２Ｐテーブルキャッシュ３２をリードするだけで、迅速に論理物理アドレス変換動作を実行することができる。
【００６６】
図６は、メタデータ生成機能を含まない圧縮伸張モジュール１３１の構成例を示す。
【００６７】
ここで、メタデータ生成機能とは、アドレス変換データを圧縮する事により生じる圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリの空き領域に、非圧縮のメタデータを追加的に格納するための機能である。圧縮Ｌ２Ｐテーブルキャッシュ３２はＳＳＤ３の全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能であるが、通常、圧縮Ｌ２Ｐテーブルキャッシュ３２内の圧縮アドレス変換データに対応する元のアドレス変換データの内容の一部のみをチェック（または検索）したい場合であっても、この圧縮アドレス変換データ全体を一旦伸張することが必要とされる。
【００６８】
また、圧縮Ｌ２Ｐテーブルキャッシュ３２の内容の更新する場合にも、更新対象の圧縮アドレス変換データを一旦伸張した後に、この伸張された圧縮アドレス変換データを更新し、再び圧縮することが必要となる。
【００６９】
上述のメタデータ生成機能によって生成されるメタデータは、圧縮アドレス変換データに対応する元のアドレス変換データの内容の一部を示す情報である。圧縮アドレス変換データは、元のアドレス変換データの内容の一部を示すメタデータと一緒に、圧縮Ｌ２Ｐテーブルキャッシュ３２の一つのエントリに格納される。このメタデータは、元のアドレス変換データを圧縮する際に、元のアドレス変換データの内容に基づいて生成される。
【００７０】
まず、理解しやくするために、メタデータ生成機能を含まない圧縮伸張モジュール１３１の構成例について説明する。
【００７１】
圧縮伸張モジュール１３１は、一つのＲｅｇｉｏｎ分のアドレス変換データを圧縮して一つのＲｅｇｉｏｎ分の圧縮アドレス変換データを生成し、この一つのＲｅｇｉｏｎ分の圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２としてＤＲＡＭ６に格納する。
【００７２】
上述したように、一つのＲｅｇｉｏｎ分のアドレス変換データは、各々が４バイトのサイズを有する１６個のＭＣＡ、すなわち６４バイトの総サイズを有するデータで構成されている。このため、Ｌ２Ｐテーブルキャッシュ３１の各エントリのサイズは、例えば、６４バイトである。
【００７３】
圧縮伸張モジュール１３１では、目標圧縮率が例えば１／４に設定されている。この場合、圧縮伸張モジュール１３１は、６４バイトのアドレス変換データを圧縮して、１６バイト以内のサイズを有する圧縮アドレス変換データを生成する。このため、圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリのサイズは、例えば、１６バイトであり、Ｌ２Ｐテーブルキャッシュ３１の各エントリのサイズよりも小さい。また、圧縮伸張モジュール１３１は、１６バイト以内の圧縮アドレス変換データを伸張して、６４バイトのアドレス変換データ（非圧縮アドレス変換データ）を生成する。
【００７４】
圧縮伸張モジュール１３１は、バッファ２０１、エンコーダ２０２、デコーダ２０３、バッファ２０４、制御レジスタ２０５等を含む。
【００７５】
バッファ２０１は、ＤＭＡＣ１３３から受信される６４バイトアドレス変換データを一時的に格納する。この６４バイトのアドレス変換データは、ＤＭＡＣ１３３から受信される６４バイトライト要求に関連付けられたデータである。エンコーダ２０２は、６４バイトアドレス変換データを圧縮する。例えば、エンコーダ２０２は、バッファ２０１に格納されている６４バイトアドレス変換データを各々が所定サイズ（例えば４バイト）を有する複数のデータ部分（例えば１６個のデータ部分）に分割し、各データ部分のビットパターンを別の短いビットパターン（符号）に変換する。これにより、６４バイトアドレス変換データに含まれる１６個のＭＣＡの各々は、そのビットパターンに対応する符号に変換される。上述したように目標圧縮率が１／４に設定されているケースにおいては、６４バイトアドレス変換データは１６バイトデータに圧縮される。この１６バイトデータは圧縮アドレス変換データとして１６バイトライト要求に関連付けられ、そしてこの１６バイトライト要求がＤＲＡＭインタフェース１３２に送られる。そして、この１６バイトデータ（圧縮アドレス変換データ）は、ＤＲＡＭインタフェース１３２を介して、ＤＲＡＭ６上の圧縮Ｌ２Ｐテーブルキャッシュ３２の一つのエントリに格納される
デコーダ２０３は、１６バイトリード要求に関連付けられた１６バイトデータ（圧縮アドレス変換データ）をＤＲＡＭインタフェース１３２から受信し、この圧縮アドレス変換データを伸張する。この圧縮アドレス変換データを伸張することによって得られる元の６４バイトアドレス変換データはバッファ２０４に格納される。そして、バッファ２０４に格納された６４バイトアドレス変換データが関連付けられた６４バイトリード要求がＤＭＡＣ１３３に送られる。
【００７６】
制御レジスタ３０５は、ファームウェアがエンコーダ２０２およびデコーダ２０３の各々の動作を制御するために使用される。
【００７７】
図７は、非圧縮アドレス変換データと圧縮アドレス変換データとの関係を示す。
【００７８】
図７の上部に示されているように、一つのＲｅｇｉｏｎに対応するアドレス変換データ（非圧縮アドレス変換データ）は、１６個のＭＣＡ（ＭＣＡ１、ＭＣＡ２、…、ＭＣＡ１６）を含む。上述したように各ＭＣＡは４バイトのサイズを有しているので、一つのＲｅｇｉｏｎに対応する非圧縮アドレス変換データは６４バイトのサイズを有する。
【００７９】
図７の下部は、非圧縮アドレス変換データをエンコーダ２０２によって圧縮することによって得られる圧縮アドレス変換データを示す。圧縮アドレス変換データのサイズは最大で１６バイトである。非圧縮アドレス変換データに含まれている１６個のＭＣＡそれぞれの値に応じて、実際の圧縮後の圧縮アドレス変換データサイズが圧縮前の１／４未満となる場合がある。したがって、１６バイト未満のサイズを有する圧縮アドレス変換データが生成される場合がある。例えば、６４バイトの非圧縮アドレス変換データが１０バイトのサイズに圧縮された場合には、１６バイトのサイズを有する圧縮アドレス変換データのうち、先頭から１０バイトまでが有意なデータ部分となる。この有意なデータ部分に後続する残りの６バイトのデータ部分は、有意なデータを含まない空き領域（余白）となる。空き領域はパディングによって埋められてもよい。図７では、１６バイトの圧縮アドレス変換データの空き領域が「空」として示されている。
【００８０】
図８は、圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリの内容の例を示す。
【００８１】
図８において、「０ｘ」は１６進表記を表している。各Ｒｅｇｉｏｎが１６個の連続する論理アドレスを含む場合には、ＬＣＡ［ｂ３１：ｂ０］のうちの［ｂ３１：ｂ３］、つまりＬＣＡの上位２８ビット、がＲｅｇｉｏｎアドレスとして使用され、ＬＣＡの下位４ビットがオフセットとして使用される。
【００８２】
圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリは、このエントリに対応するＲｅｇｉｏｎに対応する非圧縮アドレス変換データを圧縮することによって得られる圧縮アドレス変換データを保持する。圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリは、１６バイトのサイズを有する。各Ｒｅｇｉｏｎのアドレス変換データの圧縮率の違いにより空き領域のサイズにばらつきはあるが、１６バイト未満の各圧縮アドレス変換データは、その末尾に空き領域がある形で圧縮Ｌ２Ｐテーブルの一つのエントリに格納される。空き領域は、このエントリのうち圧縮論理物理アドレス変換テーブルとして使用される領域以外の領域である。なお、通常は、空き領域はオール０のようなビットパターンによってパディングされる。
【００８３】
上述したように、圧縮Ｌ２Ｐテーブルキャッシュ３２はＳＳＤ３の全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能であるので、圧縮Ｌ２Ｐテーブルキャッシュ３２は、ＳＳＤ３の全論理アドレスに対するアドレス変換データの内容を参照または検索するために有用である。
【００８４】
しかし、圧縮Ｌ２Ｐテーブルキャッシュ３２内のアドレス変換データは圧縮されているため、圧縮Ｌ２Ｐテーブルキャッシュ３２内の圧縮アドレス変換データに対応する元のアドレス変換データの内容の一部のみをチェック（または検索）したい場合であっても、上述したように、この圧縮アドレス変換データを一旦伸張することが必要とされる。
【００８５】
元のアドレス変換データの内容の一部をチェックする処理の一例としては、これに限定されないが、Ｕｎｍａｐ検索などがある。このＵｎｍａｐ検索は、ホスト２から指定される論理アドレスに対応する有効データがＮＡＮＤ型フラッシュメモリ５に格納されているか否かをチェックする処理である。Ｕｎｍａｐ検索はアンマップチェック処理とも称される。
【００８６】
Ｌ２Ｐテーブル８のアドレス変換データおよびＬ２Ｐテーブルキャッシュ３１のアドレス変換データの各々においては、論理アドレスにマッピングされていないＭＣＡ値は、オール１のような特定のビットパターンによって表される。オール１のような特定のビットパターンは、データの格納に使用されていないＭＣＡを示す。換言すれば、オール１のような特定のビットパターンは、ＮＡＮＤ型フラッシュメモリ５の物理アドレスが未割り当てである論理アドレスを識別するために使用される。
【００８７】
また、圧縮Ｌ２Ｐテーブルキャッシュ３２内のあるＲｅｇｉｏｎに対応する圧縮アドレス変換データを更新する必要がある場合には、上述したように、この圧縮アドレス変換データを伸張して元のアドレス変換データを得る処理、元のアドレス変換データ内のＭＣＡが別のＭＣＡで上書きされるように元のアドレス変換データを更新する処理、更新されたアドレス変換データを再び圧縮する処理を実行することが必要となる。
【００８８】
このようなアドレス更新処理は、例えば、ユーザデータをＮＡＮＤ型フラッシュメモリ５に書き込む場合、あるいは、ガベージコレクションによって有効データをＮＡＮＤ型フラッシュメモリ５上のある物理記憶位置から別の物理記憶位置にコピーする場合に必要となる。
【００８９】
Ｕｎｍａｐ検索を、図９を用いて説明する。
【００９０】
Ｕｎｍａｐ検索では、まず、ホスト２によって指定される論理アドレス（論理クラスタアドレス：ＬＣＡ）から、このＬＣＡが属するＲｅｇｉｏｎのＲｅｇｉｏｎアドレスとこのＲｅｇｉｏｎ内のオフセット（Ｒｅｇｉｏｎオフセット）とが算出される。この場合、ＬＣＡの下位４ビットがオフセットとして算出され、下位４ビットを除くＬＣＡの上位ビット部がこのＬＣＡが属するＲｅｇｉｏｎとして算出される。
【００９１】
そして、この算出されたＲｅｇｉｏｎアドレスに対応するアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在しない場合には、この算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２から読み出される。読み出された圧縮アドレス変換データはデコーダ２０３によって伸張され、この圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データがワークＲＡＭ３３に格納される。そして、算出されたオフセットに基づいて、非圧縮アドレス変換データに含まれる１６個のＭＣＡ内の一つのＭＣＡが特定される。特定されたＭＣＡが、オール１のような特定のビットパターン（図９では、特定のビットパターンを有するＭＣＡは「Ｕ」として示されている）を有するならば、ホスト２によって指定されるＬＣＡは、物理アドレスが未割り当てのＬＣＡ（Ｕｎｍａｐ）であると判定される。
【００９２】
図１０のフローチャートは、Ｕｎｍａｐ検索（Ｕｎｍａｐチェック）処理の手順を示す。
【００９３】
まず、ＣＰＵ１２は、ホスト２によって指定される論理アドレス（論理クラスタアドレス：ＬＣＡ）から、この論理アドレスが属するＲｅｇｉｏｎのＲｅｇｉｏｎアドレスとこのＲｅｇｉｏｎ内のオフセットとを算出する（ステップＳ１１）。ＣＰＵ１２は、算出されたＲｅｇｉｏｎアドレスに対応するアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在するか否か、および算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在するか否かを判定する（ステップＳ１２）。
【００９４】
算出されたＲｅｇｉｏｎアドレスに対応するアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在せず（Ｌ２Ｐテーブルキャッシュミス）、且つ算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在する（圧縮Ｌ２Ｐテーブルキャッシュヒット）場合、ＣＰＵ１２は、圧縮伸張モジュール１３１のデコーダ２０３を用いて、算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データを伸長する（ステップＳ１３）。
【００９５】
ステップＳ１３では、ＣＰＵ１２の制御の下、圧縮伸張モジュール１３１は、算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２から読み出す動作と、読み出された圧縮アドレス変換データを伸張して元の非圧縮アドレス変換データを得る動作と、元の非圧縮アドレス変換データをワークＲＡＭ３３に格納する動作と、を含む伸張転送動作を実行する。ワークＲＡＭ３３上においては、非圧縮アドレス変換データに含まれる１６個のＭＣＡはそれらのオフセット位置の順に配置される。
【００９６】
ＣＰＵ１２は、算出されたオフセットによって指定されるオフセット位置に存在するＭＣＡの値をチェックする（ステップＳ１４）。このＭＣＡの値がＵｎｍａｐを示す特定のビットパターン（例えばオール１のビットパターン）を有するならば（ステップＳ１５のＹＥＳ）、ＣＰＵ１２は、ホスト２によって指定されるＬＣＡは、物理アドレスが未割り当てのＬＣＡ（Ｕｎｍａｐ）であると判定する（ステップＳ１６）。一方、このＭＣＡの値が特定のビットパターン（例えばオール１のビットパターン）を有していないならば（ステップＳ１５のＮＯ）、ＣＰＵ１２は、ホスト２によって指定されるＬＣＡは、物理アドレスが未割り当てのＬＣＡ（Ｕｎｍａｐ）ではないと判定する（ステップＳ１７）。
【００９７】
このように、Ｕｎｍａｐ検索においては、コントローラ４は、ハードウェアであるデコーダ２０３の制御と、ワークＲＡＭ３３の検索を実行することが必要となる。
【００９８】
次に、アドレス更新動作を、図１１を用いて説明する。
【００９９】
あるＬＣＡに対応するＭＣＡを更新すべき場合、このＬＣＡからこのＬＣＡが属しているＲｅｇｉｏｎのＲｅｇｉｏｎアドレスとこのＲｅｇｉｏｎ内のオフセットとが算出される。そして、この算出されたＲｅｇｉｏｎアドレスに対応する圧縮Ｌ２Ｐテーブルキャッシュ３２内のエントリから圧縮アドレス変換データがチェック対象圧縮アドレス変換データとして読み出される。読み出された圧縮アドレス変換データはデコーダ２０３によって伸張され、この圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データがワークＲＡＭ３３に格納される。
【０１００】
そして、算出されたオフセットに基づいて、非圧縮アドレス変換データに含まれる１６個のＭＣＡの一つが特定される。特定されたＭＣＡの値（図１１では、「Ｍ」として示されている）は、新たなＭＣＡの値（図１１では、「Ｍ’」として示されている）に更新される。
【０１０１】
特定されたＭＣＡの値が更新された非圧縮アドレス変換データは、エンコーダ２０２によって圧縮される。更新された非圧縮アドレス変換データを圧縮することによって得られた圧縮アドレス変換データは、算出されたＲｅｇｉｏｎアドレスに対応する圧縮Ｌ２Ｐテーブルキャッシュ３２内のエントリに再び格納される。
【０１０２】
図１２のフローチャートは、アドレス更新（ＭＣＡ  ｕｐｄａｔｅ）動作の手順を示す。
【０１０３】
あるＬＣＡに対応するＭＣＡを更新すべき場合、まず、ＣＰＵ１２は、このＬＣＡからこのＬＣＡが属するＲｅｇｉｏｎのＲｅｇｉｏｎアドレスとこのＲｅｇｉｏｎ内のオフセットとを算出する（ステップＳ２１）。ＣＰＵ１２は、算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在するか否かを判定する（ステップＳ２２）。
【０１０４】
算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在する場合（圧縮Ｌ２Ｐテーブルキャッシュヒット）、ＣＰＵ１２は、圧縮伸張モジュール１３１のデコーダ２０３を用いて、算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データを伸長する（ステップＳ２３）。ステップＳ２３では、ＣＰＵ１２の制御の下、圧縮伸張モジュール１３１は、算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２から読み出す動作と、読み出された圧縮アドレス変換データを伸張して元の非圧縮アドレス変換データを得る動作と、元の非圧縮アドレス変換データをワークＲＡＭ３３に格納する動作と、を含む伸張転送動作を実行する。ワークＲＡＭ３３上においては、非圧縮アドレス変換データに含まれる１６個のＭＣＡはそれらオフセット位置の順に配置される。
【０１０５】
ＣＰＵ１２は、算出されたオフセットによって指定されるオフセット位置に存在するＭＣＡの値を更新する（ステップＳ２４）。ＣＰＵ１２は、ＭＣＡの値が更新された非圧縮アドレス変換データを、エンコーダ２０２を用いて再び圧縮する（ステップＳ２５）。ステップＳ２５では、ＣＰＵ１２の制御の下、圧縮伸張モジュール１３１は、非圧縮アドレス変換データを圧縮して圧縮アドレス変換データを得る動作と、この圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に書き戻す動作とを含む、圧縮転送動作を実行する。
【０１０６】
このように、アドレス更新（ＭＣＡ  ｕｐｄａｔｅ）動作においては、コントローラ４は、デコーダ２０３を制御して圧縮アドレス変換データを伸張する動作と、エンコーダ２０２を制御して、更新されたアドレス変換データを再び圧縮する動作とを実行することが必要となる。
【０１０７】
図１３は、メタデータ生成機能を含む圧縮伸張モジュール１３１の構成例を示す。
【０１０８】
図１３の圧縮伸張モジュール１３１は、バッファ２０１、エンコーダ２０２、デコーダ２０３、バッファ２０４、制御レジスタ２０５に加え、メタデータジェネレータ３０１およびメタデータデコーダ３０２を含む。
【０１０９】
メタデータジェネレータ３０１は、非圧縮アドレス変換データをエンコーダ２０２によって圧縮する際に、この非圧縮アドレス変換データに含まれ且つ特定ビットパターンを有する物理アドレスを識別可能な情報を上述の非圧縮のメタデータとして生成するように構成されている。
【０１１０】
より詳しくは、非圧縮アドレス変換データをエンコーダ２０２によって圧縮する動作において、メタデータジェネレータ３０１は、エンコーダ２０２から出力される元の非圧縮アドレス変換データの内容に基づいて、圧縮後の非圧縮アドレス変換データの空き領域の量を把握する。空き領域に余裕があれば、メタデータジェネレータ３０１は、元の非圧縮アドレス変換データの内容に基づいてメタデータを生成し、生成したメタデータを、エンコーダ２０２から出力される圧縮アドレス変換データの末尾に追加する。
【０１１１】
上述したように、エンコーダ２０２は、バッファ２０１に格納されている６４バイトのアドレス変換データを各々が所定サイズ（例えば４バイト）を有する複数のデータ部分（例えば１６個のデータ部分）に分割し、各データ部分のビットパターンを別の短いビットパターン（符号）に変換する。
【０１１２】
この場合、エンコーダ２０２は、データ部分（４バイトＭＣＡ）毎に、そのデータ部分のビットパターンをメタデータジェネレータ３０１に出力してもよい。これにより、メタデータジェネレータ３０１は、元の非圧縮アドレス変換データに含まれる各ＭＣＡのビットパターンを検出することができる。なお、エンコーダ２０２は、各データ部分のビットパターンそのものではなく、そのビットパターンを識別するためのビットパターンＩＤをメタデータジェネレータ３０１に出力してもよい。この場合でも、メタデータジェネレータ３０１は、元の非圧縮アドレス変換データに含まれる各ＭＣＡのビットパターンを検出することができる。
【０１１３】
例えば、メタデータジェネレータ３０１は、特定のビットパターン（または特定のビットパターンＩＤ）に対して「１」を割り当て、他のビットパターンそれぞれ（または他のビットパターンＩＤそれぞれ）に対して「０」を割り当てる。Ｕｎｍａｐを示すオール１のビットパターン（Ｕｎｍａｐ）が検出すべき特定のビットパターンとして制御レジスタ２０５に設定されている場合、メタデータジェネレータ３０１は、オール１のビットパターン（Ｕｎｍａｐ）に対して「１」のビットを割り当て、他のビットパターンそれぞれに対して「０」のビットを割り当てる。
【０１１４】
メタデータジェネレータ３０１は、エンコーダ２０２から受信されるビットパターンそれぞれに割り当てた「１」または「０」の値を集めることによって１６ビットのメタデータを生成する。この１６ビットのメタデータは元の６４バイトのアドレス変換データに対応するＲｅｇｉｏｎに属する１６個のＬＣＡにそれぞれ対応しており、その１６ビットの各々は、対応するＬＣＡが、物理アドレスが割り当てられているＬＣＡであるか否かを示す。
【０１１５】
すなわち、この１６ビットのメタデータは、元の６４バイトのアドレス変換データに対応する１６個のＬＣＡそれぞれが、ＭＣＡが未割り当ての論理アドレスであるか否かを示すビットマップデータ（アンマップビットマップ）として使用される。この場合、このアンマップビットマップにおいては、「１」を示すビットは、このビットに対応するＬＣＡにはＭＣＡが割り当てられていないことを表し、「０」を示すビットは、このビットに対応するＬＣＡにはＭＣＡが割り当てられていることを表す。
【０１１６】
この生成された１６ビットのメタデータ（ビットマップ）は、エンコーダ２０２から出力される圧縮アドレス変換データの末尾（空き領域）に追加される。そして、末尾にメタデータが追加された圧縮アドレス変換データは、圧縮Ｌ２Ｐテーブル３２の一つのエントリに格納される。換言すれば、圧縮Ｌ２Ｐテーブル３２のこのエントリには１６バイト未満の圧縮アドレス変換データが格納され、さらにこの圧縮アドレス変換データに対応する元のアドレス変換データに関するメタデータが、このエントリの空き領域に追加の非圧縮の情報として格納される。
【０１１７】
このように、エンコーダ２０２とメタデータジェネレータ３０１とを含む圧縮伸張モジュール１３１は、非圧縮アドレス変換データを圧縮して圧縮アドレス変換データを生成する圧縮回路として機能するだけでなく、非圧縮アドレス変換データを圧縮する際に、非圧縮アドレス変換データに含まれ且つ特定ビットパターンを有するＭＣＡを識別可能な情報をメタデータとして生成する。
【０１１８】
ＣＰＵ１２は、検出すべきビットパターンを制御レジスタ２０５に設定することによって、この検出すべきビットパターンを上述の特定のビットパターンとして圧縮伸張モジュール１３１のメタデータジェネレータ３０１に通知することができる。なお、ＣＰＵ１２は、検出すべきビットパターンを示すビットパターンＩＤを制御レジスタ２０５に設定し、これによって検出すべきビットパターンを示すビットパターンＩＤを圧縮伸張モジュール１３１のメタデータジェネレータ３０１に通知してもよい。
【０１１９】
メタデータジェネレータ３０１は、非圧縮アドレス変換データに含まれる１６個のＭＣＡのうち、ＣＰＵ１２によって指定されるビットパターンを有するＭＣＡを識別可能なメタデータを生成することができる。
【０１２０】
また、本実施形態では、圧縮アドレス変換データの末尾に追加されるメタデータは、この圧縮アドレス変換データの伸張後にこの伸張された圧縮アドレス変換データの一部を上書きするための機能も有している。
【０１２１】
ＣＰＵ１２は、圧縮Ｌ２Ｐテーブルキャッシュ３２のあるエントリに格納されている圧縮アドレス変換データに対応する元のアドレス変換データに含まれる１６個のＭＣＡのうちの一つのＭＣＡを新たなＭＣＡに更新する場合、圧縮Ｌ２Ｐテーブルキャッシュ３２内のこのエントリを直接アクセスして、ＭＣＡ更新用のメタデータをこのエントリの空き領域に格納する。この場合、このＭＣＡ更新用のメタデータは、元のアドレス変換データ内の更新対象のＭＣＡの位置を示すオフセット値と、新たなＭＣＡ（更新対象のＭＣＡの更新後のＭＣＡ）とを、このエントリの空き領域にＭＣＡ更新用のメタデータとして格納する。この場合、元のアドレス変換データ内の更新対象のＭＣＡの位置は、エントリの１６個のＭＣＡのうち更新対象のＭＣＡが保存される位置を示す。
【０１２２】
このエントリに格納されている圧縮アドレス変換データをデコーダ２０３によって伸張する動作においては、メタデータデコーダ３０２は、この圧縮アドレス変換データの末尾に追加されているメタデータを参照して、この圧縮アドレス変換データの空き領域にＭＣＡ更新用のメタデータが存在するか否かを判定する。
【０１２３】
この圧縮アドレス変換データの空き領域にＭＣＡ更新用のメタデータが存在する場合、メタデータデコーダ３０２は、この圧縮アドレス変換データをデコーダ２０３によって伸張することによって得られる元のアドレス変換データを、このメタデータに含まれるオフセット値と、新たなＭＣＡとを用いて更新する。これにより、ＣＰＵ１２は、あるＬＣＡに対応するＭＣＡの値を更新することが必要な場合、この更新対象のＭＣＡを含む圧縮アドレス変換データにＭＣＡ更新用のメタデータを追加する処理だけをするだけでよく、この圧縮アドレス変換データの伸張および再圧縮をリアルタイムに実行する必要は無い。
【０１２４】
図１４は、非圧縮アドレス変換データと、メタデータを保持する圧縮アドレス変換データとの関係を示す。
【０１２５】
図１４の上部に示されているように、一つのＲｅｇｉｏｎに対応するアドレス変換データ（非圧縮アドレス変換データ）は、１６個のＭＣＡ（ＭＣＡ１、ＭＣＡ２、…、ＭＣＡ１６）を含む。上述したように各ＭＣＡは４バイトのサイズを有しているので、一つのＲｅｇｉｏｎに対応する非圧縮アドレス変換データは６４バイトのサイズを有する。
【０１２６】
図１４の下部は、非圧縮アドレス変換データをエンコーダ２０２によって圧縮することによって得られる圧縮アドレス変換データを示す。得られた圧縮アドレス変換データの実際のサイズが１６バイト未満である場合には、この圧縮アドレス変換データは、空き領域を示すビットパターン（例えばオール０）によってパディングされてもよい。本実施形態では、この圧縮アドレス変換データの空き領域を有効利用するためにこの空き領域にメタデータ（「Ｍｅｔａ」）が追加される。
【０１２７】
図１５は、圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリの空き領域に格納されるメタデータのフォーマットの例を示す。
【０１２８】
図１５（Ａ）は、圧縮アドレス変換データ用の１６バイトフレームを示す。図１５（Ａ）に「スタック方向」として示されているように、メタデータは、圧縮アドレス変換データ用の１６バイトフレームの末尾側から追加されていく。追加されるメタデータの数は１に限らず、複数のメタデータが圧縮アドレス変換データ用の１６バイトフレームに追加されてもよい。図１５（Ａ）では、「ＭｅｔａＤａｔａ１」、「ＭｅｔａＤａｔａ２」が追加された場合が示されている。メタデータの終端位置には、メタデータの終了を示す識別子（Ｅｎｄ  ｏｆ  ｏｐｅｒａｔｉｏｎ（ＥＯＰ））が追加される。このＥＯＰは、各エントリ内のメタデータの位置を容易に特定することを可能にする
ただし、元のアドレス変換データを圧縮することによって得られる圧縮アドレス変換データにメタデータを格納可能な空き領域がない場合は、この圧縮アドレス変換データに追加されるメタデータはＥＯＰのみとなる。
【０１２９】
図１５（Ｂ）は、各メタデータのフォーマットを示す。ＥＯＰの識別子は、例えば、０（＝「００００」）である。
【０１３０】
アンマップビットマップ（Ｕｎｍａｐ  Ｂｉｔｍａｐ）は、例えば、アンマップビットマップの識別子と、４ビットの予約フィールドと、１６ビットのビットマップとを含む。アンマップビットマップの識別子は、例えば、１（＝「０００１」）である。
【０１３１】
ＭＣＡ更新用のメタデータ（Ｕｐｄａｔｅ  Ｖａｌｕｅ）は、例えば、ＭＣＡ更新用のメタデータの識別子と、４ビットのオフセット値と、３２ビットの新たなＭＣＡ値（Ｕｐｄａｔｅ  Ｖａｌ．）とを含む。ＭＣＡ更新用のメタデータの識別子は、例えば、２（＝「００１０」）である。この識別子は、更新命令として利用される。４ビットのオフセット値は、更新すべきＭＣＡが存在するアドレス変換データ内の位置を示す。この４ビットのオフセット値は、上述のＲｅｇｉｏｎオフセットによって表される。
【０１３２】
図１６は、メタデータを保持する圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリの内容の例を示す。
【０１３３】
図１６では、Ｒｅｇｉｏｎアドレス「０ｘ００００００００」に対応する圧縮Ｌ２Ｐテーブルキャッシュ３２のエントリ、Ｒｅｇｉｏｎアドレス「０ｘ００００００１０」に対応する圧縮Ｌ２Ｐテーブルキャッシュ３２のエントリ、Ｒｅｇｉｏｎアドレス「０ｘ００００００２０」に対応する圧縮Ｌ２Ｐテーブルキャッシュ３２のエントリ、Ｒｅｇｉｏｎアドレス「０ｘ００００００３０」に対応する圧縮Ｌ２Ｐテーブルキャッシュ３２のエントリ、…、の各々の空き領域にメタデータが格納されている例が示されている。
【０１３４】
図１７は、非圧縮アドレス変換データとメタデータを保持する圧縮アドレス変換データとの関係を示す。
【０１３５】
図１７では、あるＲｅｇｉｏｎに対応する１６個のＬＣＡのうち、ＬＣＡ１、ＬＣＡ２，ＬＣＡ１１にのみＭＣＡ１、ＭＣＡ２、ＭＣＡ１１がそれぞれ割り当てられており、他のＬＣＡの各々にはＭＣＡが割り当てられていない場合が例示されている。この場合、このＲｅｇｉｏｎに対応する非圧縮アドレス変換データを圧縮することによって得られる圧縮アドレス変換データの空き領域に追加されるアンマップビットマップは、「Ｕｎｍａｐ」、「０ｘ３ｆｄｆ」、「ＥＯＰ」を含む。ここで、「Ｕｎｍａｐ」は４ビット「０００１」の識別子と４ビットの予約フィールドとを表し、「０ｘ３ｆｄｆ」は１６ビットのビットマップ「００１１１１１１１１０１１１１１」を表している。ビットマップ「００１１１１１１１１０１１１１１」は、ＭＣＡ、ＭＣＡ、Ｕｎｍａｐ、Ｕｎｍａｐ、Ｕｎｍａｐ、Ｕｎｍａｐ、Ｕｎｍａｐ、Ｕｎｍａｐ、Ｕｎｍａｐ、Ｕｎｍａｐ、ＭＣＡ、Ｕｎｍａｐ、Ｕｎｍａｐ、Ｕｎｍａｐ、Ｕｎｍａｐ、Ｕｎｍａｐという順序を示している。
【０１３６】
「ＥＯＰ」はメタデータの終端位置を示すので、図１７に示されているように、コントローラ４（圧縮伸張モジュール１３１）は、「Ｕｎｍａｐ」および「０ｘ３ｆｄｆ」が格納される領域に隣接する領域に「ＥＯＰ」を格納する。また、コントローラ４（圧縮伸張モジュール１３１）は、「Ｕｎｍａｐ」、「０ｘ３ｆｄｆ」、「ＥＯＰ」が格納された空き領域の残り領域に所定のビットパターン（パディングデータ）を格納する。パディングデータは「ＥＯＰ」が格納される領域に隣接する領域に格納される。
【０１３７】
図１８は、圧縮アドレス変換データの空き領域にアンマップビットマップが追加された圧縮Ｌ２Ｐテーブルキャッシュ３２の例を示す。
【０１３８】
ここでは、Ｒｅｇｉｏｎアドレス「０ｘ００００００００」に対応する圧縮Ｌ２Ｐテーブルキャッシュ３２のエントリと、Ｒｅｇｉｏｎアドレス「０ｘ００００００２０」に対応する圧縮Ｌ２Ｐテーブルキャッシュ３２のエントリに、アンマップビットマップがそれぞれ追加されている場合が例示されている。
【０１３９】
例えば、Ｒｅｇｉｏｎアドレス「０ｘ００００００２０」に属する特定のＬＣＡにＭＣＡが割り当てられているか否かをチェックするアンマップチェック処理においては、このＲｅｇｉｏｎアドレス「０ｘ００００００２０」が指定される。そして、この指定されたＲｅｇｉｏｎアドレス「０ｘ００００００２０」に対応する圧縮Ｌ２Ｐテーブルキャッシュ３２のエントリに格納されているメタデータ（ここでは、アンマップビットマップ）が参照される。
【０１４０】
図１９のフローチャートは、メタデータを保持する圧縮Ｌ２Ｐテーブルキャッシュ３２を用いて実行されるアンマップチェック処理の手順を示す。
【０１４１】
ここでは、ホスト２によって指定される特定の論理アドレス（ＬＣＡｘ）にＭＣＡが割り当てられているか否かをチェックする場合を想定する。
【０１４２】
ＣＰＵ１２は、この特定のＬＣＡｘから、この特定のＬＣＡｘが属するＲｅｇｉｏｎのＲｅｇｉｏｎアドレスとこのＲｅｇｉｏｎ内のオフセットとを算出する（ステップＳ３１）。ＣＰＵ１２は、算出されたＲｅｇｉｏｎアドレスに対応するアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在するか否か、および算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在するか否かを判定する（ステップＳ３２）。
【０１４３】
算出されたＲｅｇｉｏｎアドレスに対応するアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在せず（Ｌ２Ｐテーブルキャッシュミス）、且つ算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在する場合（圧縮Ｌ２Ｐテーブルキャッシュヒット）、ＣＰＵ１２は、算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データを伸張せずに、この圧縮アドレス変換データが格納されている圧縮Ｌ２Ｐテーブルキャッシュ３２内のエントリに格納されているメタデータ（アンマップビットマップ）を参照する（ステップＳ３３）。ステップＳ３３では、ＣＰＵ１２は、アンマップビットマップ内の１６ビットのうち、算出されたオフセットによって示されるビット位置に存在するビットの値が、「１」であるかす否かを判定する（ステップＳ３３）。
【０１４４】
このビットの値が「１」である場合（ステップＳ３５のＹＥＳ）、ＣＰＵ１２は、この特定のＬＣＡｘが、ＭＣＡ未割り当てのＬＣＡであると判定する（ステップＳ３５）。一方、このビットの値が「０」である場合（ステップＳ３５のＮＯ）、ＣＰＵ１２は、この特定のＬＣＡｘが、ＭＣＡ割り当て済みのＬＣＡであると判定する（ステップＳ３６）。
【０１４５】
このように、ＣＰＵ１２は、圧縮アドレス変換データを伸張すること無く、アンマップチェック処理を実行することができる。
【０１４６】
図２０は、メタデータを保持する圧縮Ｌ２Ｐテーブルキャッシュ３２を用いて実行されるアドレス更新処理を示す。
【０１４７】
あるＬＣＡに対応するＭＣＡを更新すべき場合、このＬＣＡからこのＬＣＡが属しているＲｅｇｉｏｎのＲｅｇｉｏｎアドレスとこのＲｅｇｉｏｎ内のオフセットとが算出される。そして、この算出されたＲｅｇｉｏｎアドレスに対応する圧縮アドレス変換データが格納されている圧縮Ｌ２Ｐテーブルキャッシュ３２内のエントリが特定される。そして、この特定されたエントリ内の空き領域に格納されているメタデータがＣＰＵ１２（ファームウェア）によって更新され、これによって、このメタデータにＭＣＡ更新用のメタデータ（Ｕｐｄａｔｅ  Ｖａｌｕｅ）が追加される。ＥＯＰの位置は、アンマップビットマップの終端位置から、ＭＣＡ更新用のメタデータ（Ｕｐｄａｔｅ  Ｖａｌｕｅ）の終端位置に変更される。
【０１４８】
この圧縮アドレス変換データを伸張する処理の実行がＣＰＵ１２によって指示された場合、デコーダ２０３は、圧縮Ｌ２Ｐテーブルキャッシュ３２から読み出されるこの圧縮アドレス変換データ（メタデータを含む）を伸張し、そして、この圧縮アドレス変換データを伸張することによって得られる元の非圧縮アドレス変換データをバッファ２０４に格納する。この圧縮アドレス変換データに追加されているメタデータはメタデータデコーダ３０２に送られる。
【０１４９】
メタデータデコーダ３０２は、このメタデータにＭＣＡ更新用のメタデータが含まれているか否かを判定する。このメタデータにＭＣＡ更新用のメタデータが含まれている場合、メタデータデコーダ３０２は、バッファ２０４に格納されている元の非圧縮アドレス変換データに含まれる１６個のＭＣＡ値のうち、このＭＣＡ更新用のメタデータに含まれるオフセットによって指定される位置に存在するＭＣＡ値を、このＭＣＡ更新用のメタデータに含まれる新たなＭＣＡ値で上書きする。これにより、このオフセットによって指定される位置に存在するＭＣＡ値はバッファ２０４上で新たなＭＣＡ値に更新される。よって、ＣＰＵ１２は、更新されたＭＣＡ値を含む非圧縮アドレス変換データを扱うことができる。
【０１５０】
図２１のフローチャートは、メタデータを保持する圧縮Ｌ２Ｐテーブルキャッシュ３２内の圧縮アドレス変換データを伸張する処理において実行されるアドレス更新処理の手順を示す
圧縮伸張モジュール１３１のデコーダ２０３は、圧縮Ｌ２Ｐテーブルキャッシュ３２から読み出される圧縮アドレス変換データを伸張し、この圧縮アドレス変換データを伸張することによって得られる元の非圧縮アドレス変換データをバッファ２０４に格納する（ステップＳ４１）。圧縮伸張モジュール１３１のメタデータデコーダ３０２は、この圧縮アドレス変換データ内のメタデータを参照し、このメタデータにＭＣＡ更新用のメタデータが存在するか否かを判定する（ステップＳ４２）。この場合、メタデータデコーダ３０２は、４ビット「００１０」の識別子（更新命令）がメタデータ内に存在するならば、このメタデータにＭＣＡ更新用のメタデータが存在すると判定する。
【０１５１】
このメタデータにＭＣＡ更新用のメタデータが存在する場合（ステップＳ４２のＹＥＳ）、メタデータデコーダ３０２は、このＭＣＡ更新用のメタデータに含まれるオフセットと新たなＭＣＡ値とを使用して、バッファ２０４に格納されている元の非圧縮アドレス変換データを更新する（ステップＳ４３）。ステップＳ４３では、メタデータデコーダ３０２は、元の非圧縮アドレス変換データに含まれる１６個のＭＣＡ値のうち、このＭＣＡ更新用のメタデータに含まれるオフセットによって指定される位置に存在するＭＣＡ値を、このＭＣＡ更新用のメタデータに含まれる新たなＭＣＡ値で上書きする。
【０１５２】
次に、Ｌ２Ｐテーブルキャッシュ３１および圧縮Ｌ２Ｐテーブルキャッシュ３２を使用して実行される論理物理アドレス変換処理について説明する。
【０１５３】
図２２は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒットが起きた時に実行されるキャッシュ制御処理の処理シーケンスを示す。
【０１５４】
ホスト２は、リードコマンドをＳＳＤ３に送出する（ステップＳ１０１）。コントローラ４がホスト２からのリードコマンドを受信した時、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒットチェックを実行し（ステップＳ１０２）、このキャッシュヒットチェックの結果に基づいて、Ｌ２Ｐテーブルキャッシュ３１が、キャッシュヒット、キャッシュミスのいずれの状態であるかを判定する（ステップＳ１０３）。
【０１５５】
キャッシュヒットとは、リードコマンドによって指定された論理アドレスに対応する物理アドレスを含むアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在する状態を意味する。キャッシュミスとは、リードコマンドによって指定された論理アドレスに対応する物理アドレスを含むアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在しない状態を意味する。
【０１５６】
キャッシュヒットの場合には、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１をリードアクセスして、このアドレス変換データをＬ２Ｐテーブルキャッシュ３１からリードする（ステップＳ１０４、Ｓ１０５）。そして、コントローラ４は、このアドレス変換データから、リードコマンド内の論理アドレスに対応する物理アドレスを取得する。なお、コントローラ４は、このアドレス変換データ内のこの物理アドレスだけをＬ２Ｐテーブルキャッシュ３１からリードすることもできる。
【０１５７】
そして、コントローラ４は、この物理アドレスを使用してＮＡＮＤ型フラッシュメモリ５をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをＮＡＮＤ型フラッシュメモリ５からリードする（ステップＳ１０６、Ｓ１０７）。コントローラ４は、ユーザデータをホスト２に返す（ステップＳ１０８）。
【０１５８】
図２３は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり且つ圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュヒットが起きた時に実行されるキャッシュ制御処理の処理シーケンスを示す。
【０１５９】
ホスト２は、リードコマンドをＳＳＤ３に送出する（ステップＳ１１１）。コントローラ４がホスト２からのリードコマンドを受信した時、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒットチェックを実行し（ステップＳ１１２）、このキャッシュヒットチェックの結果に基づいて、Ｌ２Ｐテーブルキャッシュ３１が、キャッシュヒット、キャッシュミスのいずれの状態であるかを判定する（ステップＳ１１３）。
【０１６０】
キャッシュミスの場合には、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュヒットチェック（圧縮キャッシュヒットチェック）を実行し（ステップＳ１１４）、この圧縮キャッシュヒットチェックの結果に基づいて、圧縮Ｌ２Ｐテーブルキャッシュ３２が、キャッシュヒット（圧縮キャッシュヒット）、キャッシュミス（圧縮キャッシュミス）のいずれの状態であるかを判定する（ステップＳ１１５）。
【０１６１】
圧縮キャッシュヒットとは、リードコマンドによって指定された論理アドレスに対応する物理アドレスを含むアドレス変換データを圧縮することによって得られる圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在する状態を意味する。圧縮キャッシュミスとは、この圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在しない状態を意味する。圧縮Ｌ２Ｐテーブルキャッシュ３２がＭ＋１個のエントリを有する構成であったとしても、圧縮Ｌ２Ｐテーブルキャッシュ３２のこれら全てのエントリに圧縮アドレス変換データがキャッシュされるまでは、圧縮キャッシュミスが起こりうる。
【０１６２】
また、Ｌ２Ｐテーブルキャッシュ３１においては、必要に応じてエントリがＬ２Ｐテーブルキャッシュ３１から追い出される。このため、Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり、且つ圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュヒット（圧縮キャッシュヒット）が起こる、というケースがある。
【０１６３】
この場合、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２をリードアクセスして、この圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２からリードする（ステップＳ１１６、Ｓ１１７）。この場合、圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２からリードする動作、圧縮アドレス変換データを伸張するデコード動作、このデコード動作によって得られる非圧縮アドレス変換データをＬ２Ｐテーブルキャッシュ３１のエントリに転送する動作は、専用ハードウェア１３によって実行することができる。そして、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュエントリに転送された非圧縮アドレス変換データから、リードコマンド内の論理アドレスに対応する物理アドレスを取得する。
【０１６４】
そして、コントローラ４は、この物理アドレスを使用してＮＡＮＤ型フラッシュメモリ５をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをＮＡＮＤ型フラッシュメモリ５からリードする（ステップＳ１１８、Ｓ１１９）。コントローラ４は、ユーザデータをホスト２に返す（ステップＳ１２０）。
【０１６５】
図２４は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり且つ圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュミスが起きた時に実行されるキャッシュ制御処理の処理シーケンスを示す。
【０１６６】
ホスト２は、リードコマンドをＳＳＤ３に送出する（ステップＳ１３１）。コントローラ４がホスト２からのリードコマンドを受信した時、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒットチェックを実行し（ステップＳ１３２）、このキャッシュヒットチェックの結果に基づいて、Ｌ２Ｐテーブルキャッシュ３１が、キャッシュヒット、キャッシュミスのいずれの状態であるかを判定する（ステップＳ１３３）。
【０１６７】
キャッシュミスの場合には、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュヒットチェック（圧縮キャッシュヒットチェック）を実行し（ステップＳ１３４）、この圧縮キャッシュヒットチェックの結果に基づいて、圧縮Ｌ２Ｐテーブルキャッシュ３２が、キャッシュヒット（圧縮キャッシュヒット）、キャッシュミス（圧縮キャッシュミス）のいずれの状態であるかを判定する（ステップＳ１３５）。
【０１６８】
圧縮キャッシュミスの場合、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５内のＬ２Ｐテーブル８をリードアクセスして、この論理アドレスに対応する物理アドレスを含むアドレス変換データをＬ２Ｐテーブル８からリードする動作と、リードされたアドレス変換データをＬ２Ｐテーブルキャッシュ３１に格納する動作と、リードされたアドレス変換データから、リードコマンド内の論理アドレスに対応する物理アドレスを取得する動作と、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に格納する動作とを実行する（ステップＳ１３６、Ｓ１３７）。アドレス変換データをＬ２Ｐテーブル８からリードする動作と、リードされたアドレス変換データを圧縮するエンコード動作と、エンコード動作によって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に格納する動作とを含む圧縮転送は、専用ハードウェア１３によって実行することができる。
【０１６９】
そして、コントローラ４は、この物理アドレスを使用してＮＡＮＤ型フラッシュメモリ５をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをＮＡＮＤ型フラッシュメモリ５からリードする（ステップＳ１３８、Ｓ１３９）。コントローラ４は、ユーザデータをホスト２に返す（ステップＳ１４０）。
【０１７０】
以上説明したように、本実施形態によれば、Ｌ２Ｐテーブルキャッシュ３１と圧縮Ｌ２Ｐテーブルキャッシュ３２の双方を使用いることにより、ＮＡＮＤ型フラッシュメモリ５内のＬ２Ｐテーブル８へのアクセスよりも、ＤＲＡＭ５のようなランダムアクセスメモリへのアクセスが行われる確率を高くすることが可能となる。よって、論理物理アドレス変換の性能を向上でき、ひいてはＳＳＤ３の性能を改善することができる。
【０１７１】
また、圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリの空き領域は元のアドレス変換データの内容の一部を表す非圧縮のメタデータを格納しているので、Ｌ２Ｐテーブルキャッシュ３１に存在しないアドレス変換データの内容の一部をチェックする処理を実行すべき場合、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２のメタデータを参照することにより、圧縮アドレス変換データを伸張すること無く、Ｌ２Ｐテーブルキャッシュ３１に存在しないアドレス変換データの内容の一部をチェックすることができる。よって、元のアドレス変換データの内容の一部をチェックする必要が生じる度に、圧縮アドレス変換データを伸張する処理、ワークＲＡＭを検索する処理等を行う必要がなくなる。よって、圧縮アドレス変換データを伸張する動作、伸張された圧縮アドレス変換データを再圧縮する動作の回数が減少される。この結果、アドレス変換データを参照するために要する時間を短くでき、これによってＳＳＤ３の性能を改善することができる。
【０１７２】
なお、圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリの空き領域にはメタデータの終了を示す識別子であるＥＯＰが格納されているので、コントローラ４は、容易に、圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリ内のメタデータを容易に特定および参照することができる。
【０１７３】
また、圧縮Ｌ２Ｐテーブルキャッシュ３２の各エントリの空き領域（つまり圧縮アドレス変換データの空き領域）がメタデータの格納に利用されているので、１６バイトに満たないサイズを有する圧縮アドレス変換データが格納されている各エントリの空き領域を有効利用することができる。
【０１７４】
さらに、更新対象物理アドレスを含む圧縮アドレス変換データが格納されているエントリの空き領域には、新たな物理アドレスの格納に使用することもできる。これにより、物理アドレスの更新の度に、圧縮アドレス変換データを伸張および再圧縮する処理を行う必要も無い。
【０１７５】
なお、本実施形態では、メタデータを生成する処理およびＭＣＡ更新用のメタデータに基づいてアドレスを更新する処理を圧縮伸張モジュール１３１によって実行する場合を例示したが、メタデータを生成する処理およびＭＣＡ更新用のメタデータに基づいてアドレスを更新する処理を、ＣＰＵ１２（ファームウェア）によって実行してもよい。メタデータをＣＰＵ１２（ファームウェア）によって生成するケースにおいては、ＣＰＵ１２（ファームウェア）が圧縮Ｌ２Ｐテーブルの各エントリの空き領域にメタデータを書き込むようにしてもよい。
【０１７６】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０１７７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１７８】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、７…論理物理アドレス変換テーブル（Ｌ２Ｐテーブル）、３１…論理物理アドレス変換テーブルキャッシュ（Ｌ２Ｐテーブルキャッシュ）、３２…圧縮論理物理アドレス変換テーブルキャッシュ（圧縮Ｌ２Ｐテーブルキャッシュ）、１３１…圧縮伸張モジュール。
【図１】
2020154603.tif 000003
【図２】
2020154603.tif 000004
【図３】
2020154603.tif 000005
【図４】
2020154603.tif 000006
【図５】
2020154603.tif 000007
【図６】
2020154603.tif 000008
【図７】
2020154603.tif 000009
【図８】
2020154603.tif 000010
【図９】
2020154603.tif 000011
【図１０】
2020154603.tif 000012
【図１１】
2020154603.tif 000013
【図１２】
2020154603.tif 000014
【図１３】
2020154603.tif 000015
【図１４】
2020154603.tif 000016
【図１５】
2020154603.tif 000017
【図１６】
2020154603.tif 000018
【図１７】
2020154603.tif 000019
【図１８】
2020154603.tif 000020
【図１９】
2020154603.tif 000021
【図２０】
2020154603.tif 000022
【図２１】
2020154603.tif 000023
【図２２】
2020154603.tif 000024
【図２３】
2020154603.tif 000025
【図２４】
2020154603.tif 000026