(57)【要約】【課題】性能を改善することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、ホストによって指定される第１の論理アドレスに対応するデータが格納されている不揮発性メモリの物理記憶位置を示す第１の物理アドレスを含む第１のアドレス変換データが第１のキャッシュに存在せず且つ第１のアドレス変換データに対応する第１の圧縮アドレス変換データが第２のキャッシュに存在する場合、第２のキャッシュ内の第１の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを第１のキャッシュに格納する動作と、非圧縮アドレス変換データから第１の物理アドレスを取得する動作とを実行する。【選択図】図１
2019160215.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに格納された論理物理アドレス変換テーブルの内容の一部を第１のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルの内容を圧縮することによって得られる圧縮アドレス変換データを第２のキャッシュとして前記ランダムアクセスメモリに格納するように構成されたコントローラとを具備し、
前記コントローラは、
前記ホストによって指定される第１の論理アドレスに対応するデータが格納されている前記不揮発性メモリの物理記憶位置を示す第１の物理アドレスを含む第１のアドレス変換データが前記第１のキャッシュに存在せず且つ前記第１のアドレス変換データに対応する第１の圧縮アドレス変換データが前記第２のキャッシュに存在する場合、前記第２のキャッシュ内の前記第１の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第１のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第１の物理アドレスを取得する動作とを実行し、
前記第１のアドレス変換データが前記第１のキャッシュに存在せず且つ前記第１の圧縮アドレス変換データが前記第２のキャッシュに存在しない場合、前記論理物理アドレス変換テーブルから前記第１のアドレス変換データをリードする動作と、前記リードされた第１のアドレス変換データを前記第１のキャッシュに格納する動作と、前記リードされた第１のアドレス変換データから前記第１の物理アドレスを取得する動作と、前記リードされた第１のアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを前記第２のキャッシュに格納する動作とを実行するように構成されている、メモリシステム。
【請求項２】
前記第２のキャッシュは、前記メモリシステムの全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能なサイズを有する請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、前記第２のキャッシュが、前記メモリシステムの全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能な第１のサイズを有するように、前記ランダムアクセスメモリ上に前記第２のキャッシュ用の第１の領域を確保し、前記ランダムアクセスメモリの残りの第２の領域を前記第１のキャッシュとして使用するように構成されている請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、前記第２のキャッシュにキャッシュされる前記圧縮アドレス変換データの量が増加されるに連れて前記第２のキャッシュのサイズが増えるように、前記第２のキャッシュのサイズを初期サイズから前記第１のサイズまで変更し、且つ前記第２のキャッシュのサイズが前記第１のサイズに増加されるまでは、前記第１の領域内の未使用領域と前記第２の領域の双方を前記第１のキャッシュとして使用するように構成されている請求項３記載のメモリシステム。
【請求項５】
前記コントローラは、前記第２のキャッシュとして使用される領域が前記第１の領域の端部から前記第１の領域と前記第２の領域との間の境界に向かう方向に増加し且つ前記第１のキャッシュとして使用される領域が前記第２の領域の端部から前記境界に向かう方向に増加するように前記第１のキャッシュおよび前記第２のキャッシュを前記ランダムアクセスメモリ上に配置するように構成されている請求項４記載のメモリシステム。
【請求項６】
前記コントローラは、圧縮データを伸張するデコーダ回路と、データを圧縮するエンコーダ回路とを備え、
前記第１のアドレス変換データが前記第１のキャッシュに存在せず且つ前記第１のアドレス変換データに対応する前記第１の圧縮アドレス変換データが前記第２のキャッシュに存在する場合、前記コントローラは、前記デコーダ回路によって前記第１の圧縮アドレス変換データを伸張し、
前記第１のアドレス変換データが前記第１のキャッシュに存在せず且つ前記第１の圧縮アドレス変換データが前記第２のキャッシュに存在しない場合、前記コントローラは、前記エンコーダ回路によって、前記リードされた第１のアドレス変換データを圧縮するように構成されている請求項１記載のメモリシステム。
【請求項７】
前記第１のキャッシュは複数のキャッシュエントリを含み、前記第１のキャッシュの各キャッシュエントリは、連続する複数の論理アドレスに対応する複数の物理アドレスを含むアドレス変換データを格納し、
前記第２のキャッシュは複数のキャッシュエントリを含み、前記第２のキャッシュの各キャッシュエントリは、前記複数の物理アドレスを含む前記アドレス変換データを圧縮することによって得られる圧縮アドレス変換データを格納する請求項１記載のメモリシステム。
【請求項８】
メモリシステム内の不揮発性メモリを制御する制御方法であって、
前記不揮発性メモリに格納された論理物理アドレス変換テーブルの内容の一部を第１のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルの内容を圧縮することによって得られる圧縮アドレス変換データを第２のキャッシュとして前記ランダムアクセスメモリに格納することと、
ホストによって指定される第１の論理アドレスに対応するデータが格納されている前記不揮発性メモリの物理記憶位置を示す第１の物理アドレスを含む第１のアドレス変換データが前記第１のキャッシュに存在せず且つ前記第１のアドレス変換データに対応する第１の圧縮アドレス変換データが前記第２のキャッシュに存在する場合、前記第２のキャッシュ内の前記第１の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第１のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第１の物理アドレスを取得する動作とを実行することと、
前記第１のアドレス変換データが前記第１のキャッシュに存在せず且つ前記第１の圧縮アドレス変換データが前記第２のキャッシュに存在しない場合、前記論理物理アドレス変換テーブルから前記第１のアドレス変換データをリードする動作と、前記リードされた第１のアドレス変換データを前記第１のキャッシュに格納する動作と、前記リードされた第１のアドレス変換データから前記第１の物理アドレスを取得する動作と、前記リードされた第１のアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを前記第２のキャッシュに格納する動作とを実行することとを具備する、制御方法。
【請求項９】
前記第２のキャッシュは、前記メモリシステムの全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能なサイズを有する請求項８記載の制御方法。
【請求項１０】
前記第２のキャッシュが、前記メモリシステムの全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能な第１のサイズを有するように、前記ランダムアクセスメモリ上に前記第２のキャッシュ用の第１の領域を確保することと、
前記ランダムアクセスメモリの残りの第２の領域を前記第１のキャッシュとして使用することとをさらに具備する請求項８記載の制御方法。
【請求項１１】
前記第２のキャッシュにキャッシュされる前記圧縮アドレス変換データの量が増加されるに連れて前記第２のキャッシュのサイズが増えるように、前記第２のキャッシュのサイズを初期サイズから前記第１のサイズまで変更することと、
前記第２のキャッシュのサイズが前記第１のサイズに増加されるまでは、前記第１の領域内の未使用領域と前記第２の領域の双方を前記第１のキャッシュとして使用することとをさらに具備する請求項１０記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムとしては、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。
【０００４】
このようなメモリシステムにおいては、論理アドレスを不揮発性メモリの物理アドレスに変換するための論理物理アドレス変換が実行される。この論理物理アドレス変換に要する時間が長くなると、メモリシステムの性能の低下が引き起こされる場合がある
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１９６１１５号公報
【特許文献２】特許第５１３０６４６号公報
【特許文献３】米国特許出願公開第２０１７／０１７７４９７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、性能を改善することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに格納された論理物理アドレス変換テーブルの内容の一部を第１のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルの内容を圧縮することによって得られる圧縮アドレス変換データを第２のキャッシュとして前記ランダムアクセスメモリに格納する。前記コントローラは、前記ホストによって指定される第１の論理アドレスに対応するデータが格納されている前記不揮発性メモリの物理記憶位置を示す第１の物理アドレスを含む第１のアドレス変換データが前記第１のキャッシュに存在せず且つ前記第１のアドレス変換データに対応する第１の圧縮アドレス変換データが前記第２のキャッシュに存在する場合、前記第２のキャッシュ内の前記第１の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第１のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第１の物理アドレスを取得する動作とを実行する。前記コントローラは、前記第１のアドレス変換データが前記第１のキャッシュに存在せず且つ前記第１の圧縮アドレス変換データが前記第２のキャッシュに存在しない場合、前記論理物理アドレス変換テーブルから前記第１のアドレス変換データをリードする動作と、前記リードされた第１のアドレス変換データを前記第１のキャッシュに格納する動作と、前記リードされた第１のアドレス変換データから前記第１の物理アドレスを取得する動作と、前記リードされた第１のアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを前記第２のキャッシュに格納する動作とを実行する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【図２】同実施形態のメモリシステム内の不揮発性メモリの構成例を示す図。
【図３】同実施形態のメモリシステム内のＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリチップとの関係を示すブロック図。
【図４】同実施形態のメモリシステムにおいて使用される並列単位（論理ブロック）の構成例を示す図。
【図５】圧縮論理物理アドレス変換テーブルキャッシュ（圧縮Ｌ２Ｐテーブルキャッシュ）が存在しない構成に適用される論理物理アドレス変換処理を説明するための図。
【図６】論理物理アドレス変換テーブルキャッシュ（Ｌ２Ｐテーブルキャッシュ）の構成例を示す図。
【図７】Ｌ２Ｐテーブルキャッシュと圧縮Ｌ２Ｐテーブルキャッシュとを使用した論理物理アドレス変換処理を説明するための図。
【図８】Ｌ２Ｐテーブルキャッシュのキャッシュヒットが起きた時に同実施形態のメモリシステムによって実行されるキャッシュ制御処理の処理シーケンスを示す図。
【図９】Ｌ２Ｐテーブルキャッシュのキャッシュミスが起こり且つ圧縮Ｌ２Ｐテーブルキャッシュのキャッシュヒットが起きた時に同実施形態のメモリシステムによって実行されるキャッシュ制御処理の処理シーケンスを示す図。
【図１０】Ｌ２Ｐテーブルキャッシュのキャッシュミスが起こり且つ圧縮Ｌ２Ｐテーブルキャッシュのキャッシュミスが起きた時に同実施形態のメモリシステムによって実行されるキャッシュ制御処理の処理シーケンスを示す図。
【図１１】Ｌ２ＰテーブルとＬ２Ｐテーブルキャッシュと圧縮Ｌ２Ｐテーブルキャッシュとの関係と、ランダムアクセスメモリ上におけるＬ２Ｐテーブルキャッシュおよび圧縮Ｌ２Ｐテーブルキャッシュの配置例を示す図。
【図１２】Ｌ２ＰテーブルとＬ２Ｐテーブルキャッシュと圧縮Ｌ２Ｐテーブルキャッシュとの関係と、ランダムアクセスメモリ上におけるＬ２Ｐテーブルキャッシュおよび圧縮Ｌ２Ｐテーブルキャッシュの別の配置例を示す図。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、実施形態を説明する。  
【００１０】
まず、図１を参照して、実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１１】
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成されたストレージデバイスである。このメモリシステムは、例えば、ソリッドステートドライブ（ＳＳＤ）として実現されてもよいし、メモリカードとして実現されてもよい。以下では、このメモリシステムが、ソリッドステートドライブ（ＳＳＤ）３として実現されている場合を想定する。
【００１２】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、パーソナルコンピュータやサーバ、携帯電話、撮像装置であってもよいし、タブレット、スマートフォンなどの携帯端末であってもよいし、ゲーム機器であってもよいし、カーナビゲーションシステムなどの車載端末であってもよい。
【００１３】
ＳＳＤ３は、ホスト２として機能する情報処理装置の外部記憶装置として使用され得る。ＳＳＤ３は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１４】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、ユニバーサルシリアルバス（ＵＳＢ）、Ｍｏｂｉｌｅ  Ｉｎｄｕｓｔｒｙ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＭＩＰＩ）、ＵｎｉＰｒｏ等を使用し得る。
【００１５】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。ＮＡＮＤ型フラッシュメモリ５は、限定されないが、複数のＮＡＮＤ型フラッシュメモリチップを含んでいてもよい。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５に電気的に接続され、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして動作する。このコントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現されてもよい。
【００１６】
ＮＡＮＤ型フラッシュメモリ５は、ユーザデータ６と、論理物理アドレス変換テーブル（ｌｏｇｉｃａｌ−ｔｏ−ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ  ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ（Ｌ２Ｐテーブル））７のような管理情報とを格納する。論理物理アドレス変換テーブル７は、以下、単にＬ２Ｐテーブル７としても参照される。このＬ２Ｐテーブル７は、ホスト２によって指定される論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。論理アドレスは、ＳＳＤ３の論理アドレス空間内の位置をアドレス指定するためにホスト２によって使用されるアドレスである。この論理アドレスとしては、ＬＢＡ（ｌｏｇｉｃａｌ  ｂｌｏｃｋ  ａｄｄｒｅｓｓ（ａｄｄｒｅｓｓｉｎｇ））が使用され得る。物理アドレスは、データが格納されているＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。論理物理アドレス変換テーブル７、つまりＬ２Ｐテーブル７は、ホスト２によって指定される論理アドレスを、この論理アドレスに対応する最新のデータが格納されているＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す物理アドレスに変換するために使用される。
【００１７】
ＮＡＮＤ型フラッシュメモリ５は、メモリセルアレイを有する１以上のＮＡＮＤ型フラッシュメモリチップを有する。メモリセルアレイは、マトリクス状に配列された複数のメモリセルを有する。ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、図２に示されているように、複数のブロック（物理ブロック）ＢＬＫ０〜ＢＬＫ（ｊ−１）を含む。ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）は、消去動作の単位として機能する。
【００１８】
ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）は複数のページ（物理ページ）を含む。つまり、ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）の各々は、ページＰ０、Ｐ１、…Ｐ（ｋ−１）を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。ＮＡＮＤ型フラッシュメモリ５においては、データのリードおよびデータのライトはページ単位で実行される。
【００１９】
図１において、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理とＮＡＮＤ型フラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能し得る。
【００２０】
データ管理には、（１）論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ＮＡＮＤ型フラッシュメモリ５の制約（例えば、ページ単位のリード／ライト動作とブロック単位の消去動作）とを隠蔽するための処理、等が含まれる。論理アドレスと物理アドレスとの間のマッピングの管理は、Ｌ２Ｐテーブル７を用いて実行される。コントローラ４は、Ｌ２Ｐテーブル７を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。この管理サイズとしては、これに限定されないが、例えばクラスタが使用されてもよい。クラスタは論理アドレス空間内の位置を指定する単位であり、１つのクラスタは連続する複数のセクタ（例えば、８個のセクタ、１６個のセクタ、または３２個のセクタ、等）を含む。以下では、これに限定されないが、１つのクラスタが８個のセクタを含む場合を想定する。この場合、１つのセクタのサイズが５１２バイトであるならば、一つのクラスタのサイズは４Ｋバイト（４ＫＢ）となる。Ｌ２Ｐテーブル７は、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングをこの４ＫＢのクラスタ単位で管理してもよい。
【００２１】
ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータがライトされたＮＡＮＤ型フラッシュメモリ５内の最新の物理記憶位置を示す。
【００２２】
ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、Ｌ２Ｐテーブル７を更新して、この論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。
【００２３】
ブロック管理には、不良ブロック（バッドブロック）の管理と、ウェアレベリングと、ガベージコレクション等が含まれる。ウェアレベリングは、ブロックそれぞれの消耗を均一化するための動作である。
【００２４】
ガベージコレクションは、フリーブロックの個数を増やすための動作である。フリーブロックは有効データを含まないブロックである。ガベージコレクションにおいては、コントローラ４は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック（例えばフリーブロック）にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、Ｌ２Ｐテーブル７から参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)は有効データであり、後にホスト２からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト２からリードされる可能性が無いデータである。そして、コントローラ４は、Ｌ２Ｐテーブル７を更新して、コピーされた有効データの論理アドレスそれぞれに対して、コピー先の物理アドレスをマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後にデータの書き込みのために再利用することが可能となる。
【００２５】
ホスト２は、ＳＳＤ３に様々なコマンドを送出する。これらコマンドには、リードコマンド、ライトコマンド、アンマップコマンド、等が含まれる。リードコマンドは、ＳＳＤ３に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータに対応する論理アドレス（開始ＬＢＡ）と、リードすべきデータの長さとを含む。
【００２６】
コントローラ４がホスト２からリードコマンドを受信した時、コントローラ４は、Ｌ２Ｐテーブル７を参照して、リードコマンド内の開始ＬＢＡに対応する物理アドレスを得る。コントローラ４は、この得られた物理アドレスに対応するＮＡＮＤ型フラッシュメモリ５の物理記憶位置からデータをリードし、リードしたデータをホスト２に返す。
【００２７】
ライトコマンドは、ＳＳＤ３に対してデータの書き込みを要求するコマンドである。ライトコマンドは、ライトデータ（つまり書き込むべきデータ）の論理アドレス（開始ＬＢＡ）と、ライトデータの長さとを含む。コントローラ４は、ライトデータを、ＮＡＮＤ型フラッシュメモリ５内の利用可能な物理記憶位置に書き込む。さらに、コントローラ４は、Ｌ２Ｐテーブル７を更新することによって、ライトデータが書き込まれた物理記憶位置に対応する物理アドレスを、このライトデータに対応する論理アドレスにマッピングする。
【００２８】
コントローラ４は、ＤＲＡＭ６のようなランダムアクセスメモリ内のメモリ領域を、Ｌ２Ｐテーブル７の内容の一部をキャッシュするＬ２Ｐテーブルキャッシュ３１として使用する。換言すれば、コントローラ４は、Ｌ２Ｐテーブル７の内容の一部をＬ２Ｐテーブルキャッシュ３１としてＤＲＡＭ６のようなランダムアクセスメモリに格納する。コントローラ４は、このＬ２Ｐテーブルキャッシュ３１を使用して、ホスト２によって指定される論理アドレスをＮＡＮＤ型フラッシュメモリ５の物理アドレスに変換するための論理物理アドレス変換を実行する。
【００２９】
ＤＲＡＭ６のようなランダムアクセスメモリは、ＮＡＮＤ型フラッシュメモリ５よりも高速にアクセスすることができる。したがって、Ｌ２Ｐテーブルキャッシュ３１を使用することにより、論理物理アドレス変換を迅速に実行することが可能となり、これによって論理物理アドレス変換性能の改善、ひいてはＳＳＤ３の性能を改善することができる。
【００３０】
しかし、通常、ランダムアクセスメモリは比較的高価であり、またＬ２Ｐテーブルのサイズ（典型的には、ＳＳＤ３の容量の１０００分の１程度）に適した容量を有するランダムアクセスメモリが入手できるとは限らない。
【００３１】
特に、ＤＲＡＭベンダーが提供するＤＲＡＭデバイス（ＤＲＡＭチップ）に関しては、Ｌ２Ｐテーブルのサイズに適した容量を有するＤＲＡＭチップは入手し難い場合がある。なぜなら、ＤＲＡＭチップの容量は、例えば、５１２Ｍビット−ＤＲＡＭ、１０２４Ｍビット−ＤＲＡＭ、４０９６Ｍビット−ＤＲＡＭのように、２のべき乗で増加する傾向にある一方、ＮＡＮＤ型フラッシュメモリの容量は整数倍で増加する傾向にあるためである。
【００３２】
したがって、ＳＳＤの設計においては、次の２つの選択肢がありうる。
【００３３】
（１）ＤＲＡＭチップを複数個使う、あるいは、Ｌ２Ｐテーブルのサイズに適した容量よりも一段高容量のＤＲＡＭチップを使用し且つあまり分を別用途に使うこと、によって、コスト増を許容して論理物理アドレス変換性能を優先する。
【００３４】
（２）コストを重視して、実装するＤＲＡＭの容量を増やさず、Ｌ２Ｐテーブルキャッシュのキャッシュミス率の増加に起因する論理物理アドレス変換の性能低下を許容する。
【００３５】
コスト重視のＳＳＤのケースでは、（２）が適用される場合が多い。この結果、Ｌ２Ｐテーブルキャッシュのキャッシュミス率の増加によって論理物理アドレス変換の性能低下、ＳＳＤの性能低下が引き起こされる可能性がある。
【００３６】
そこで、本実施形態では、コントローラ４は、ＤＲＡＭ６のようなランダムアクセスメモリのメモリ領域を効率よく利用するために、このメモリ領域を、論理物理アドレス変換用の２種類のキャッシュ、つまりＬ２Ｐテーブルキャッシュ３１および圧縮Ｌ２Ｐテーブルキャッシュ３２として使用する。換言すれば、コントローラ４は、Ｌ２Ｐテーブル７の内容の一部をＬ２Ｐテーブルキャッシュ３１としてＤＲＡＭ６のようなランダムアクセスメモリに格納するだけでなく、Ｌ２Ｐテーブル７の内容を圧縮することによって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２としてランダムアクセスメモリに格納する。
【００３７】
Ｌ２Ｐテーブルキャッシュ３１はＬ２Ｐテーブル７の内容の一部（非圧縮のアドレス変換データ）をキャッシュするために使用される。Ｌ２Ｐテーブルキャッシュ３１は複数のキャッシュエントリ（複数のキャッシュライン）を含み、各キャッシュエントリはアドレス変換データを格納する。一つのキャッシュエントリに格納されるアドレス変換データは、連続する複数の論理アドレスにそれぞれ対応するＮＡＮＤ型フラッシュメモリ５の複数の物理アドレスを含んでいてもよいし、一つの論理アドレスに対応するＮＡＮＤ型フラッシュメモリ５の一つの物理アドレスを含んでいてもよい。以下では、一つのキャッシュエントリに格納されるアドレス変換データが、連続する複数の論理アドレスにそれぞれ対応する複数の物理アドレスを含む場合、つまり一つのキャッシュエントリに格納されるアドレス変換データが、複数の要素（複数の物理アドレス）を含む配列である場合を想定する。一般に、ＮＡＮＤ型フラッシュメモリ５に対するアクセスは空間的局所性を有するので、連続する複数の論理アドレスにそれぞれ対応する複数の物理アドレスを各々が格納する複数のキャッシュエントリを含むＬ２Ｐテーブルキャッシュ３１構成はキャッシュヒット率を高めることを可能にする。
【００３８】
圧縮Ｌ２Ｐテーブルキャッシュ３２は、Ｌ２Ｐテーブル７の内容を圧縮することによって得られる圧縮アドレス変換データをキャッシュするために使用される。圧縮Ｌ２Ｐテーブルキャッシュ３２も複数のキャッシュエントリ（複数のキャッシュライン）を含む。圧縮Ｌ２Ｐテーブルキャッシュ３２に含まれるキャッシュエントリの数は、Ｌ２Ｐテーブルキャッシュ３１に含まれるキャッシュエントリの数よりも多くてもよい。圧縮Ｌ２Ｐテーブルキャッシュ３２の一つのキャッシュエントリに格納される圧縮アドレス変換データは、連続する複数の論理アドレスにそれぞれ対応するＮＡＮＤ型フラッシュメモリ５の複数の物理アドレスを圧縮することによって得られる圧縮データであってもよいし、一つの論理アドレスに対応するＮＡＮＤ型フラッシュメモリ５の一つの物理アドレスを圧縮することによって得られる圧縮データであってもよい。以下では、圧縮Ｌ２Ｐテーブルキャッシュ３２の一つのキャッシュエントリに格納される圧縮アドレス変換データが、連続する複数の論理アドレスにそれぞれ対応する複数の物理アドレスを含むアドレス変換データを圧縮することによって得られる圧縮データである場合を想定する。
【００３９】
圧縮Ｌ２Ｐテーブルキャッシュ３２の１キャッシュエントリ分の圧縮アドレス変換データのサイズは、Ｌ２Ｐキャッシュ３１の１キャッシュエントリ分のアドレス変換データのサイズの数分の１程度である。したがって、圧縮Ｌ２Ｐテーブルキャッシュ３２は、少ないメモリ容量で、より多くの論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持することができる。
【００４０】
コントローラ４は、Ｌ２Ｐテーブル７の内容の一部をＬ２Ｐテーブルキャッシュ３１にキャッシュし、またＬ２Ｐテーブル７の内容を圧縮することによって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２にキャッシュする。
【００４１】
コントローラ４がホスト２からリード要求（リードコマンド）を受信した場合、コントローラ４は、以下の論理物理アドレス変換処理を実行する。
【００４２】
コントローラ４は、まず、ホスト２から受信したリード要求によって指定される論理アドレスに対応するＮＡＮＤ型フラッシュメモリ５の物理アドレスを含むアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在するか否かを判定する（キャッシュヒットチェック）。このアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在しないならば（キャッシュミス）、コントローラ４は、このアドレス変換データに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在するか否かを判定する（圧縮キャッシュヒットチェック）。この圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在するならば（圧縮キャッシュヒット）、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２のこの圧縮アドレス変換データを使用して、論理物理アドレス変換を実行する。
【００４３】
圧縮Ｌ２Ｐテーブルキャッシュ３２を有さない構成においては、もしＬ２Ｐテーブルキャッシュ３１のキャッシュミスが起きたならば、コントローラ４は、指定された論理アドレスに対応するアドレス変換データをＮＡＮＤ型フラッシュメモリ５内のＬ２Ｐテーブル７からリードすることが必要となる。このため、論理物理アドレス変換に多くの時間を要することになる。本実施形態では、Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起きた場合は、ＤＲＡＭ６上の圧縮Ｌ２Ｐテーブルキャッシュ３２から、指定された論理アドレスに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５の物理記憶位置を示す物理アドレスを含む圧縮アドレス変換データを迅速に取得することができる。
【００４４】
Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起き、且つ圧縮Ｌ２Ｐテーブルキャッシュ３２の圧縮キャッシュミスが起きたならば、コントローラ４は、指定された論理アドレスに対応するアドレス変換データをＮＡＮＤ型フラッシュメモリ５内のＬ２Ｐテーブル７からリードする。この場合、コントローラ４は、リードされたアドレス変換データをＬ２Ｐテーブルキャッシュ３１に格納すると共に、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に格納する。
【００４５】
次に、コントローラ４の構成について説明する。
【００４６】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＤＲＡＭインタフェース１３、バックエンド部１４、および専用ハードウェア（ＨＷ）１５等を含む。これらホストインタフェース１１、ＣＰＵ１２、ＤＲＡＭインタフェース１３、バックエンド部１４、および専用ハードウェア（ＨＷ）１５は、バス１０を介して相互接続される。
【００４７】
ホストインタフェース１１は、ホスト２からライトコマンド、リードコマンド、等の様々なコマンドを受信する回路として機能する。
【００４８】
ＣＰＵ１２は、ホストインタフェース１１、ＤＲＡＭインタフェース１３、バックエンド部１４、および専用ハードウェア（ＨＷ）１５等の動作を制御するように構成されたプロセッサである。ＣＰＵ１２は、図示しないＲＯＭ等に格納されている制御プログラム（ファームウェア：ＦＷ）を実行することによって様々な処理を行う。このＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行する。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行されるファームウェアによって制御される。なお、上述のコマンド処理の一部または全部は、専用ハードウェア１５によって実行してもよい。
【００４９】
ＤＲＡＭインタフェース１３は、ＤＲＡＭ６を制御するＤＲＡＭ制御回路として機能する。このＤＲＡＭ６のメモリ領域は、Ｌ２Ｐテーブルキャッシュ３１および圧縮Ｌ２Ｐテーブルキャッシュ３２として機能するのみならず、データキャッシュ３０として機能してもよい。このデータキャッシュ３０は、ホスト２から受信されるリードコマンドに応じてＮＡＮＤ型フラッシュメモリ５からリードされるデータをキャッシュするように構成されたリードキャッシュであってもよいし、ＮＡＮＤ型フラッシュメモリ５からリードされたデータと、ホスト２から受信されるライトデータの双方をキャッシュするリード／ライトキャッシュであってよい。このデータキャッシュ３０は、各キャッシュエントリの内容を特定するためのキャッシュインデックスとして論理アドレスを保持していてもよい。この場合、ホスト２から受信されるリード／ライト要求によって指定される論理アドレスに基づいて、データキャッシュ３０のキャッシュヒット／ミスを容易に判定することができる。例えば、ホスト２からのリード要求によって指定された論理アドレスに対応するデータがデータキャッシュ３０に存在するならば、コントローラ４は、論理物理アドレス変換を行うことなく、このデータをデータキャッシュ３０から即座にリードすることができる。
【００５０】
バックエンド部１４は、符号化／復号化部１４１と、ＮＡＮＤインタフェース１４２とを含む。符号化／復号化部１４１は、例えば、エラー訂正コード（ＥＣＣ）エンコーダおよびＥＣＣデコーダとして機能し得る。ＮＡＮＤ型フラッシュメモリ５にデータをライトすべき時、符号化／復号化部１４１は、書き込むべきライトデータをエンコード（ＥＣＣエンコード）することによってこのデータにエラー訂正コード（ＥＣＣ）を冗長コードとして付加する。ＮＡＮＤ型フラッシュメモリ５からデータがリードされた時、符号化／復号化部１４１は、リードされたデータに付加されたＥＣＣを使用して、このデータのエラー訂正を行う（ＥＣＣデコード）。
【００５１】
ＮＡＮＤインタフェース１４２は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。ＮＡＮＤインタフェース１４２は、複数のチャンネルを介してＮＡＮＤ型フラッシュメモリ５に接続されてもよい。
【００５２】
専用ハードウェア１５は、ＤＭＡ（direct memory access）転送、圧縮、伸張、他の様々な演算処理等を実行するように構成されたハードウェアロジックであってもよい。これらハードウェアロジックの一部として、専用ハードウェア１５は、エンコードＤＭＡ（direct memory access）コントローラ１５１と、デコードＤＭＡ（direct memory access）コントローラ１５２とを含む。エンコードＤＭＡコントローラ１５１はＤＭＡ転送および圧縮を実行するハードウェアであり、アドレス変換データを圧縮するエンコーダ回路として使用される。このエンコードＤＭＡコントローラ１５１は、転送元のメモリから転送先のメモリにデータをＤＭＡ転送する経路と、この経路を通るデータを圧縮する回路とを含んでいてもよい。デコードＤＭＡコントローラ１５２はＤＭＡ転送および伸張を実行するハードウェアであり、圧縮アドレス変換データを伸張して非圧縮のアドレス変換データを生成するデコーダ回路として機能する。デコードＤＭＡコントローラ１５２は、転送元のメモリから転送先のメモリにデータをＤＭＡ転送する経路と、この経路を通るデータを伸張する回路とを含んでいてもよい。
【００５３】
図３は、ＮＡＮＤインタフェース１４２と複数のＮＡＮＤ型フラッシュメモリチップとの関係の例を示す。
【００５４】
ＮＡＮＤ型フラッシュメモリ５は、図３に示すように、複数のＮＡＮＤ型フラッシュメモリチップを含んでいてもよい。図３においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ．１〜Ｃｈ．１６が接続されており、１６個のチャンネルＣｈ．１〜Ｃｈ．１６の各々に２つのＮＡＮＤ型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルＣｈ．１〜Ｃｈ．１６に接続された１６個のＮＡＮＤ型フラッシュメモリチップ＃１〜＃１６がバンク＃０として編成されてもよく、またチャンネルＣｈ．１〜Ｃｈ．１６に接続された残りの１６個のＮＡＮＤ型フラッシュメモリチップ＃１７〜＃３２がバンク＃１として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図３の構成例においては、１６チャンネルと、２つのバンクを使用したバンクインタリーブとによって、最大３２個のＮＡＮＤ型フラッシュメモリチップを並列動作させることができる。
【００５５】
ＮＡＮＤ型フラッシュメモリ５に対するリード／ライト動作の並列性を高めるために、コントローラ４は、複数の並列単位を管理してもよい。各並列単位は、異なるチャンネルに接続された複数のＮＡＮＤ型フラッシュメモリチップから一つずつ選択される複数のブロックを含む。並列単位は、論理ブロック（あるいはスーパーブロック）と称されることもある。一つの並列単位は、これに限定されないが、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２から一つずつ選択される計３２個のブロックを含んでいてもよい。図３においては、ハッチングによって示されるブロックそれぞれは、ある一つの並列単位に含まれるブロックを表している。各ＮＡＮＤ型フラッシュメモリチップは、チャンネル番号およびバンク番号によって識別可能である。また、各ブロックは、チップ番号およびチップ内のブロック番号（ブロックアドレス）によって識別可能である。
【００５６】
なお、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つの並列単位は、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２に対応する６４個のプレーンから一つずつ選択される計６４個のブロックを含んでいてもよい。
【００５７】
ここで、図４に示すように、ある一つの並列単位が、３２個の物理ブロック（ＮＡＮＤ型フラッシュメモリチップ＃１内の物理ブロックＢｌｋ２、ＮＡＮＤ型フラッシュメモリチップ＃２内の物理ブロックＢｌｋ３、ＮＡＮＤ型フラッシュメモリチップ＃３内の物理ブロックＢｌｋ７、ＮＡＮＤ型フラッシュメモリチップ＃４内の物理ブロックＢｌｋ４、ＮＡＮＤ型フラッシュメモリチップ＃５内の物理ブロックＢｌｋ６、…ＮＡＮＤ型フラッシュメモリチップ＃３２内の物理ブロックＢｌｋ３）を含む場合を想定する。
【００５８】
この並列単位にデータを書き込む動作においては、例えば、コントローラ４は、ＮＡＮＤ型フラッシュメモリチップ＃１内のブロックＢｌｋ２のページ０、ＮＡＮＤ型フラッシュメモリチップ＃２内のブロックＢｌｋ３のページ０、ＮＡＮＤ型フラッシュメモリチップ＃３内のブロックＢｌｋ７のページ０、ＮＡＮＤ型フラッシュメモリチップ＃４内のブロックＢｌｋ４のページ０、ＮＡＮＤ型フラッシュメモリチップ＃５内のブロックＢｌｋ６のページ０、…ＮＡＮＤ型フラッシュメモリチップ＃３２内のブロックＢｌｋ３のページ０という順序でデータを書き込んでもよい。これにより、最大３２ページへのデータ書き込みを並列に実行することができる。また、この並列単位からデータをリードする動作においても、最大で３２ページからのデータリードを並列に実行することができる。
【００５９】
なお、並列単位の構成およびアクセス順序は上述の例に限定されるものではなく、他の様々な並列単位の構成やアクセス順序を利用することができる。
【００６０】
次に、コントローラ４によって実行される論理物理アドレス変換処理を説明する。
【００６１】
説明を分かり易くするために、まず、図５を参照して、圧縮Ｌ２Ｐテーブルキャッシュが存在しない構成に適用される論理物理アドレス変換処理について説明する。
【００６２】
ホスト２から受信されるデータアクセス要求（Ｄａｔａ  Ａｃｃｅｓｓ  Ｒｅｑｕｅｓｔ  Ｆｒｏｍ  Ｈｏｓｔ）は、論理アドレス（Ｌｏｇｉｃａｌ  Ａｄｄｒｅｓｓ）を指定する。ここでは、データアクセス要求がリード要求（リードコマンド）である場合を想定する。
【００６３】
コントローラ４がリード要求（リードコマンド）をホスト２から受信した時（ステップＳ１１）、コントローラ４は、このリード要求によって指定される論理アドレスに対応するデータがデータキャッシュ（Ｌｏｇｉｃａｌ  Ａｄｄｒｅｓｓ  Ｄａｔａ  Ｃａｃｈｅ）３０に存在するか否かを判定する（Ｌｏｇｉｃａｌ  Ａｄｄｒｅｓｓ  Ｄａｔａ  Ｃａｃｈｅ  Ｃｈｅｃｋ）（ステップＳ１２）。
【００６４】
このリード要求によって指定される論理アドレスに対応するデータがデータキャッシュ３０に存在するならば（ヒット）、コントローラ４は、この指定される論理アドレスに対応するデータをデータキャッシュ３０からリードし（Ａｃｃｅｓｓ  Ｌｏｇｉｃａｌ  Ａｄｄｒｅｓｓ  Ｄａｔａ  Ｃａｃｈｅ）（ステップＳ１３），リードされたデータをホスト２に返す（Ｄａｔａ  Ｒｅｓｐｏｎｓｅ  Ｔｏ  Ｈｏｓｔ）（ステップＳ１４）。
【００６５】
リード要求によって指定される論理アドレスに対応するデータがデータキャッシュ３０に存在しないならば（ミス）、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１またはＬ２Ｐテーブル７を使用して論理物理アドレス変換処理（Ｌｏｇｉｃａｌ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ  Ｔｒａｎｓｌａｔｉｏｎｓ）を実行する（ステップＳ１５）。コントローラ４は、論理物理アドレス変換処理によって得られる物理アドレス（Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ）を使用してＮＡＮＤ型フラッシュメモリ５からデータ（Ｄｅｖｉｃｅ  Ｄａｔａ）をリードする（Ｄｅｖｉｃｅ  Ａｃｃｅｓｓ  ｂｙ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ）（ステップＳ１６）。そして、コントローラ４は、リードされたデータをデータキャッシュ３０に格納し（Ｕｐｄａｔｅ  Ｌｏｇｉｃａｌ  Ａｄｄｒｅｓｓ  Ｄａｔａ  Ｃａｃｈｅ）（ステップＳ１３）し、リードされたデータをホスト２に返す（Ｄａｔａ  Ｒｅｓｐｏｎｓｅ  Ｔｏ  Ｈｏｓｔ）（ステップＳ１４）。
【００６６】
ステップＳ１５で実行される論理物理アドレス変換処理の手順の例は、以下の通りである。
【００６７】
コントローラ４は、ホスト２から受信されるリード要求によって指定される論理アドレスを、クラスタインデックス（Ｃｌｕｓｔｅｒ  Ｉｄｘ）とオフセット（Ｏｆｆｓｅｔ）の形に変換する。クラスタインデックス（Ｃｌｕｓｔｅｒ  Ｉｄｘ）は、論理アドレス空間内の位置をそれぞれ指定する複数のクラスタ内の特定の一つを指定する識別子（クラスタ番号）を示す。オフセットは、このクラスタ内のアクセス対象セクタの位置を示す。例えば、１クラスタが８セクタから構成される場合には、論理アドレス（［３１：０］）の下位３ビット（［２：０］）がオフセットとして使用され、論理アドレス（［３１：０］）の上位２９ビット（［３１：３］）がアクセス対象の特定クラスタを指定するためのクラスタインデックスとして使用される。
【００６８】
さらに、Ｌ２Ｐテーブルキャッシュの各キャッシュエントリ（つまり、各キャッシュライン）に含まれる物理アドレスの数がＮＡＮＤ型フラッシュメモリ５のアクセスに都合のよい数になるように、コントローラ４は、クラスタインデックス（［３１：３］）を、リージョンインデックス（Ｒｅｇｉｏｎ  Ｉｄｘ）とリージョンオフセット（Ｒｅｇｉｏｎ  Ｏｆｆｓｅｔ）の形に変換する。
【００６９】
リージョンインデックスは、論理アドレス（［３１：０］）によって表現される論理アドレス空間を分割することによって得られる複数の論理アドレス範囲（複数のリージョン）内の一つの論理アドレス範囲（一つのリージョン）を示す。リージョンオフセットは、各リージョン（各論理アドレス範囲）のサイズ、つまり各リージョンに含まれるクラスタの数を示す。
【００７０】
Ｌ２Ｐテーブルキャッシュ３１の各キャッシュエントリには一つのリージョン（一つのリージョンインデックス）が割り当てられ、各キャッシュエントリのサイズは、各リージョンに含まれるクラスタの数と同数の物理アドレスを格納するサイズに設定される。
【００７１】
各リージョン（各論理アドレス範囲）のサイズは、上述の並列単位の構成等を考慮して決定されてもよい。例えば、各リージョンのサイズは、これに限定されないが、例えば、１２８個のクラスタを含むサイズに決定されてもよい。
【００７２】
この場合、Ｌ２Ｐテーブルキャッシュの各キャッシュエントリのサイズは、その論理アドレスが連続する１２８個のクラスタに対応する１２８個の物理アドレスを格納するサイズに設定される。各キャッシュエントリは１２８個の物理アドレスを格納するので、一つのクラスタに対応する物理アドレスが４バイトのサイズを有するならば、各キャッシュエントリのサイズは５１２バイト（＝４バイト×１２８）となる。
【００７３】
各リージョンに属する１２８個の論理アドレスはＮＡＮＤ型フラッシュメモリ５の１２８個の物理記憶位置にそれぞれマッピングされ、１２８個の論理アドレスに対応する１２８個のクラスタ（１２８個の４ＫＢデータ部）はＮＡＮＤ型フラッシュメモリ５のこれら１２８個の物理記憶位置にそれぞれ書き込まれる。例えば、これら１２８個の物理記憶位置は、異なるチャンネルに接続された幾つかのＮＡＮＤ型フラッシュメモリチップに、つまり上述の並列単位を構成する複数のブロックに、分散されてもよい。そして、これら１２８個の物理記憶位置を示す１２８個の物理アドレスが、これら１２８個の論理アドレスにそれぞれマッピングされる。
【００７４】
各リージョンが１２８個のクラスタを含む場合には、クラスタインデックス（［３１：３］）の下位７ビット（［９：３］）がリージョンオフセットとして使用され、クラスタインデックス（［３１：３］）の上位２２ビット（［３１：１０］）がリージョンインデックスとして使用される。
【００７５】
Ｌ２Ｐテーブルキャッシュ３１はＮ＋１個のキャッシュエントリ（Ｎ＋１個のキャッシュライン）を含む。ここで、Ｎ＋１は、全リージョンの数（＝（Ｍ＋１））よりも少なくてもよい。Ｌ２Ｐテーブルキャッシュ３１の各キャッシュエントリに対応するタグフィールドは、どのリージョンのアドレス変換データ（１２８個の物理アドレス）がそのキャッシュエントリに格納されているかを示す。例えば、あるキャッシュエントリに関連づけられた“０”のタグフィールドは、リージョン番号＝０のリージョンに対応するアドレス変換データがこのキャッシュエントリに格納されていることを示し、あるキャッシュエントリに関連づけられた“２”のタグフィールドは、リージョン番号＝２のリージョンに対応するアドレス変換データがこのキャッシュエントリに格納されていることを示す。
【００７６】
Ｌ２Ｐテーブルキャッシュ３１の各キャッシュエントリは、リージョンオフセット＝＋０に対応するフィールド、リージョンオフセット＝＋１に対応するフィールド、リージョンオフセット＝＋２に対応するフィールド、リージョンオフセット＝＋３に対応するフィールド、…、リージョンオフセット＝＋１２７に対応するフィールドを含む。
【００７７】
例えば、リージョン番号＝０のリージョンに属する最初の論理アドレスに対応するデータが、図５にデバイスイメージとして示されているように、デバイス（ＮＡＮＤ型フラッシュメモリチップ）＃１の物理記憶位置（クラスタａ）に書き込まれている場合には、このリージョンに対応するアドレス変換データ内のリージョンオフセット＝＋０に対応するフィールドは、デバイス（ＮＡＮＤ型フラッシュメモリチップ）＃１の物理記憶位置（クラスタａ）を示す物理アドレスを含む。また、リージョン番号＝０のリージョンに属する２番目の論理アドレスに対応するデータが、図５にデバイスイメージとして示されているように、デバイス（ＮＡＮＤ型フラッシュメモリチップ）＃２の物理記憶位置（クラスタａ）に書き込まれている場合には、このリージョンに対応するアドレス変換データ内のリージョンオフセット＝＋１に対応するフィールドは、デバイス（ＮＡＮＤ型フラッシュメモリチップ）＃２の物理記憶位置（クラスタａ）を示す物理アドレスを含む。同様に、リージョン番号＝０のリージョンに属する３番目の論理アドレスに対応するデータが、図５にデバイスイメージとして示されているように、デバイス（ＮＡＮＤ型フラッシュメモリチップ）＃１の物理記憶位置（クラスタｂ）に書き込まれている場合には、このリージョンに対応するアドレス変換データ内のリージョンオフセット＝＋２に対応するフィールドは、デバイス（ＮＡＮＤ型フラッシュメモリチップ）＃１の物理記憶位置（クラスタｂ）を示す物理アドレスを含む。
【００７８】
なお、「Ｎｏｔ  Ａｓｓｉｎｅｄ」と記載されているフィールドは、このフィールドに対応する論理アドレスのデータがＮＡＮＤ型フラッシュメモリ５にまだ書き込まれていないことを表している。
【００７９】
論理物理アドレス変換処理では、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１の各キャッシュエントリに対応するタグフィールドを参照して、ホスト２によって指定された論理アドレスに対応するアドレス変換データ、つまり、この論理アドレスのリージョンインデックスに対応するアドレス変換データが、Ｌ２Ｐテーブルキャッシュ３１に存在するか否かを判定する（Ｔｒａｎｓｌａｔｅ  Ｃａｃｈｅ  Ｃｈｅｃｋ）（ステップＳ２１）。
【００８０】
この論理アドレスのリージョンインデックスに対応するアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在するならば（ｈｉｔ）、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１内のこのアドレス変換データから、ホスト２によって指定された論理アドレスに対応する物理アドレスを取得する。この物理アドレスは、この論理アドレスのデータが格納されているＮＡＮＤ型フラッシュメモリ５の物理記憶位置を示す。
【００８１】
より詳しくは、コントローラ４は、物理アドレスを取得するために以下の処理を行う。
【００８２】
コントローラ４は、まず、この論理アドレスのリージョンインデックスに対応するアドレス変換データが存在するＬ２Ｐテーブルキャッシュ３１内のキャッシュエントリを示すポインタ（Ｌｏｇｉｃａｌ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ｔｒａｎｓｌａｔｅ  Ａｒｒａｙ  Ｐｏｉｎｔｅｒ）を取得する。このポインタは、このキャッシュエントリが格納されているＤＲＡＭ６のメモリ領域の先頭アドレスを示す。このキャッシュエントリ内のアドレス変換データは１２８個のオフセット要素（つまり１２８個のクラスタに対応する１２８個の物理アドレス）を含む。したがって、コントローラ４は、このポインタによって指定されるこれら１２８個のオフセット要素（１２８個の物理アドレス）の中から、リージョンオフセット（Ｒｅｇｉｏｎ  Ｏｆｆｓｅｔ）の値に対応する一つのオフセット要素（一つの物理アドレス）を特定する。そして、コントローラ４は、この特定されたオフセット要素（物理アドレス）にオフセット（Ｏｆｆｓｅｔ）を加えることによって、ホスト２によって指定された論理アドレスのデータが格納されているＮＡＮＤ型フラッシュメモリ５の物理アドレスを得る。
【００８３】
本実施形態では、Ｌ２Ｐテーブルキャッシュ３１から物理アドレスを取得するために要する時間、つまりポインタ（Ｌｏｇｉｃａｌ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ｔｒａｎｓｌａｔｅ  Ａｒｒａｙ  Ｐｏｉｎｔｅｒ）を取得するのに要する時間は、Ｔｈｉｔとして参照される。
【００８４】
Ｌ２Ｐテーブル７は、図５に示されているように、全リージョン数と同数のエントリ（Ｍ＋１個のエントリ）を含む。各Ｌ２Ｐテーブル７の各エントリにはリージョンインデックスが関連付けられている。各Ｌ２Ｐテーブル７の各エントリに格納されているアドレス変換データは、Ｌ２Ｐテーブルキャッシュ３１と同様に、連続する１２８個の論理アドレスに対応する１２８個の物理アドレスを含む。
【００８５】
ホスト２によって指定された論理アドレスのリージョンインデックスに対応するアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在しなかったならば（Ｍｉｓｓ）、コントローラ４は、このリージョンインデックスに対応するアドレス変換データをＮＡＮＤ型フラッシュメモリ５上のＬ２Ｐテーブル７からリードする。
【００８６】
そして、コントローラ４は、このリードしたアドレス変換データをＬ２Ｐテーブルキャッシュ３１の一つのキャッシュエントリに格納するとともに、このリードしたアドレス変換データから、ホスト２によって指定された論理アドレスに対応する物理アドレスを取得する。
【００８７】
より詳しくは、コントローラ４は、まず、リードされたアドレス変換データが格納されたＬ２Ｐテーブルキャッシュ３１のキャッシュエントリを示すポインタ（Ｌｏｇｉｃａｌ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ｔｒａｎｓｌａｔｅ  Ａｒｒａｙ  Ｐｏｉｎｔｅｒ）を取得する。コントローラ４は、このポインタによって指定されるこれら１２８個のオフセット要素（１２８個の物理アドレス）の中から、リージョンオフセット（Ｒｅｇｉｏｎ  Ｏｆｆｓｅｔ）の値に対応する一つのオフセット要素（物理アドレス）を特定する。そして、コントローラ４は、この特定されたオフセット要素（物理アドレス）にオフセット（Ｏｆｆｓｅｔ）を加えることによって、ホスト２によって指定された論理アドレスに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５の物理アドレスを得る。
【００８８】
なお、Ｌ２Ｐテーブルキャッシュ３１の全ての置換対象キャッシュエントリ候補が使用中であるならば、つまり未使用のキャッシュエントリがこれら置換対象キャッシュライン候補内に存在しないならば、コントローラ４は、置換対象キャッシュエントリ候補の中から一つの置換対象キャッシュエントリを決定する。そして、コントローラ４は、この置換対象キャッシュエントリをＬ２Ｐテーブルキャッシュ３１から追い出し、そして上述のリードしたアドレス変換データをこの置換対象キャッシュエントリに格納する。Ｌ２Ｐテーブルキャッシュ３１がフルアソシアティブ・キャッシュによって実現されている場合には、全てのキャッシュエントリが置換対象キャッシュライン候補となる。
【００８９】
通常、ＮＡＮＤ型フラッシュメモリに対するリードレイテンシは、ＤＲＡＭのようなランダムアクセスメモリのリードレイテンシよりも長い。このため、Ｌ２Ｐテーブル７内のアドレス変換データから物理アドレスを取得するために要する時間Ｔｍｉｓｓは、上述のＴｈｉｔよりも長くなる。
【００９０】
上述したように、Ｌ２Ｐテーブルキャッシュ３１のキャッシュエントリ数（＝Ｎ＋１）はＬ２Ｐテーブル７のエントリ数（＝Ｍ＋１）よりも少ない。このため、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒット率（Ｎ／Ｍ）が１を切り、平均アクセスレイテンシ（Ｌａｔｅｎｃｙ：Ｔｈｉｔ×（Ｎ／Ｍ）＋Ｔｍｉｓｓ×（１−Ｎ／Ｍ））は比較的大きな値となる可能性がある。
【００９１】
図６は、Ｌ２Ｐテーブルキャッシュ３１の構成例を示す。
【００９２】
Ｌ２Ｐテーブルキャッシュ３１は、第１レベルテーブル（Ａｓｓｏｃｉａｔｉｖｅ  ＣａｃｈｅＩＤ  Ｔａｂｌｅ）３１Ａと、第２レベルテーブルとして機能するＬ２Ｐテーブルキャッシュ本体３１Ｂとを含んでいてもよい。
【００９３】
第１レベルテーブル（Ａｓｓｏｃｉａｔｉｖｅ  ＣａｃｈｅＩＤ  Ｔａｂｌｅ）３１Ａは、Ｎ＋１個のポインタ（Ｃａｃｈｅ  Ｅｎｔｒｙ  Ｐｔｒ）を含む。第１レベルテーブル３１Ａは、例えば、ダイレクトマップ・キャッシュとして実現されてもよい。この場合、０ｘ００００００００から０ｘ０００００３ｆｆまでの論理アドレス範囲に対応するリージョン番号０（＝０ｘ００００００００）は、Ｎ＋１個のポインタ内の最初のポインタにマッピングされる。０ｘ０００００４００から０ｘ０００００７ｆｆまでの論理アドレス範囲に対応するリージョン番号１（＝０ｘ０００００００１）は、Ｎ＋１個のポインタ内の２番目のポインタにマッピングされる。同様にして、例えば、０ｘ００００１０００から０ｘ００００１３ｆｆまでの論理アドレス範囲に対応するリージョン番号４（＝０ｘ０００００００４）は、Ｎ＋１個のポインタ内の５番目のポインタにマッピングされる。
【００９４】
Ｌ２Ｐテーブルキャッシュ本体３１Ｂは、Ｎ＋１個のキャッシュエントリを含む。各キャッシュエントリにはタグフィールドが関連付けられている。Ｎ＋１個のキャッシュエントリは、キャッシュＩＤ（ＣａｃｈｅＩＤ）によってそれぞれ識別される。このＬ２Ｐテーブルキャッシュ本体３１Ｂは、例えば、フルアソシアティブ・キャッシュとして実現されてもよい。
【００９５】
ＳＳＤ３の電源がオンされた直後、Ｌ２Ｐテーブルキャッシュ３１のどのキャッシュエントリも空である。このため、Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり、Ｌ２Ｐテーブル７からリードされたアドレス変換データがＬ２Ｐテーブルキャッシュ３１のキャッシュエントリに格納される。
【００９６】
いま、ＳＳＤ３の電源オン後、コントローラ４が、０ｘ００００１０００から０ｘ００００１３ｆｆまでの論理アドレス範囲に属する論理アドレスを指定するリード要求（１番目のリード要求）、０ｘ００００１ｃ００から０ｘ００００１ｆｆｆまでの論理アドレス範囲に属する論理アドレスを指定するリード要求（２番目のリード要求）、…、０ｘ００００００００から０ｘ０００００３ｆｆまでの論理アドレス範囲に属する論理アドレスを指定するリード要求（９番目のリード要求）、という順序で、リード要求をホスト２から受信した場合を想定する。
【００９７】
１番目のリード要求に対する処理：  Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり、コントローラ４は、０ｘ００００１０００から０ｘ００００１３ｆｆまでの論理アドレス範囲に対応するリージョン番号４のアドレス変換データをＬ２Ｐテーブル７からリードし、このリードされたアドレス変換データを、Ｌ２Ｐテーブルキャッシュ３１の最初のキャッシュエントリ（つまり、ＣａｃｈｅＩＤ＝０ｘ００００００００に対応するキャッシュエントリ）に格納する。第１レベルテーブル（Ａｓｓｏｃｉａｔｉｖｅ  ＣａｃｈｅＩＤ  Ｔａｂｌｅ）３１Ａにおいては、リージョン番号４のポインタ（Ｃａｃｈｅ  Ｅｎｔｒｙ  Ｐｔｒ）がＣａｃｈｅＩＤ＝０ｘ００００００００を指し示すように、リージョン番号４のポインタ（Ｃａｃｈｅ  Ｅｎｔｒｙ  Ｐｔｒ）がコントローラ４によって更新される。
【００９８】
２番目のリード要求に対する処理：  Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり、コントローラ４は、０ｘ００００１ｃ００から０ｘ００００１ｆｆｆまでの論理アドレス範囲に対応するリージョン番号７のアドレス変換データをＬ２Ｐテーブル７からリードし、このリードされたアドレス変換データを、Ｌ２Ｐテーブルキャッシュ３１の２番目のキャッシュエントリ（つまり、ＣａｃｈｅＩＤ＝０ｘ０００００００１に対応するキャッシュエントリ）に格納する。第１レベルテーブル（Ａｓｓｏｃｉａｔｉｖｅ  ＣａｃｈｅＩＤ  Ｔａｂｌｅ）３１Ａにおいては、リージョン番号７のポインタ（Ｃａｃｈｅ  Ｅｎｔｒｙ  Ｐｔｒ）がＣａｃｈｅＩＤ＝０ｘ０００００００１を指し示すように、リージョン番号７のポインタ（Ｃａｃｈｅ  Ｅｎｔｒｙ  Ｐｔｒ）がコントローラ４によって更新される。
【００９９】
９番目のリード要求に対する処理：  Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり、コントローラ４は、０ｘ００００００００から０ｘ０００００３ｆｆまでの論理アドレス範囲に対応するリージョン番号０のアドレス変換データをＬ２Ｐテーブル７からリードし、このリードされたアドレス変換データを、Ｌ２Ｐテーブルキャッシュ３１の９番目のキャッシュエントリ（つまり、ＣａｃｈｅＩＤ＝０ｘ０００００００８に対応するキャッシュエントリ）に格納する。第１レベルテーブル（Ａｓｓｏｃｉａｔｉｖｅ  ＣａｃｈｅＩＤ  Ｔａｂｌｅ）３１Ａにおいては、リージョン番号０のポインタ（Ｃａｃｈｅ  Ｅｎｔｒｙ  Ｐｔｒ）がＣａｃｈｅＩＤ＝０ｘ０００００００８を指し示すように、リージョン番号０のポインタ（Ｃａｃｈｅ  Ｅｎｔｒｙ  Ｐｔｒ）がコントローラ４によって更新される。
【０１００】
図７は、Ｌ２Ｐテーブルキャッシュ３１と圧縮Ｌ２Ｐテーブルキャッシュ３２とを使用した論理物理アドレス変換処理を示す。
【０１０１】
本実施形態では、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒットチェックは図６で説明した手順と同じ手順で実行される。Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こった場合には、ポインタ（Ｌｏｇｉｃａｌ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ｔｒａｎｓｌａｔｅ  Ａｒｒａｙ  Ｐｏｉｎｔｅｒ）を高速に取得できるようにするために、圧縮Ｌ２Ｐテーブルキャッシュ３２の圧縮キャッシュヒットチェックが実行される。
【０１０２】
論理物理アドレス変換処理では、コントローラ４は、Ｌ２Ｐテーブルキャッシュの各キャッシュエントリに対応するタグフィールドを参照して、ホスト２によって指定された論理アドレスに対応するアドレス変換データ、つまり、この論理アドレスのリージョンインデックスに対応するアドレス変換データが、Ｌ２Ｐテーブルキャッシュ３１に存在するか否かを判定する（Ｔｒａｎｓｌａｔｅ  Ｃａｃｈｅ  Ｃｈｅｃｋ）（ステップＳ３１）。
【０１０３】
この論理アドレスのリージョンインデックスに対応するアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在するならば（ｈｉｔ）、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１内のこのアドレス変換データから、ホスト２によって指定された論理アドレスに対応する物理アドレスを取得する。
【０１０４】
より詳しくは、コントローラ４は、まず、この論理アドレスのリージョンインデックスに対応するアドレス変換データが存在するＬ２Ｐテーブルキャッシュ３１内のキャッシュエントリを示すポインタ（Ｌｏｇｉｃａｌ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ｔｒａｎｓｌａｔｅ  Ａｒｒａｙ  Ｐｏｉｎｔｅｒ）を取得する。コントローラ４は、このポインタによって指定されるこれら１２８個のオフセット要素（１２８個の物理アドレス）の中から、リージョンオフセット（Ｒｅｇｉｏｎ  Ｏｆｆｓｅｔ）の値に対応する一つのオフセット要素（物理アドレス）を特定する。そして、コントローラ４は、この特定されたオフセット要素（物理アドレス）にオフセット（Ｏｆｆｓｅｔ）を加えることによって、ホスト２によって指定された論理アドレスのデータが格納されているＮＡＮＤ型フラッシュメモリ５の物理アドレスを得る。
【０１０５】
ホスト２によって指定された論理アドレスのリージョンインデックスに対応するアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在しなかったならば（Ｍｉｓｓ）、コントローラ４は、このアドレス変換データに対応する圧縮アドレス変換データ、つまりこのリージョンインデックスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在するか否かを判定する（圧縮キャッシュヒットチェック）（ステップＳ３２）。
【０１０６】
圧縮Ｌ２Ｐテーブルキャッシュ３２は、図７に示すように、Ｌ２Ｐテーブル７のエントリの数と同数のキャッシュエントリ（Ｍ＋１個のキャッシュエントリ）を含んでいてもよい。圧縮Ｌ２Ｐテーブルキャッシュ３２の各キャッシュエントリは、１２８個のクラスタに対応する１２８個の物理アドレスを含むアドレス変換データを圧縮することによって得られる圧縮アドレス変換データ（Ｃｏｎｐｒｅｓｓｅｄ  Ａｒｒａｙ  Ｒｅｇｉｏｎ）を格納する。
【０１０７】
ホスト２によって指定された論理アドレスのリージョンインデックスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在するならば（Ｃｏｍｐｈｉｔ）、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２内のこの圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データをＬ２Ｐテーブルキャッシュ３１のキャッシュエントリに格納する動作と、この非圧縮アドレス変換データから、ホスト２によって指定された論理アドレスに対応する物理アドレスを取得する動作とを実行する。
【０１０８】
圧縮アドレス変換データを伸張するデコード動作とこのデコード動作によって得られる非圧縮アドレス変換データをＬ２Ｐテーブルキャッシュ３１のキャッシュエントリに転送する動作とを含む伸張転送動作は、デコードＤＭＡコントローラ１５２によって実行することができる。
【０１０９】
なお、Ｌ２Ｐテーブルキャッシュ３１の全ての置換対象キャッシュエントリ候補が使用中であるならば、つまり未使用のキャッシュエントリがこれら置換対象キャッシュライン候補内に存在しないならば、コントローラ４は、置換対象キャッシュエントリ候補の中から一つの置換対象キャッシュエントリを決定する。そして、コントローラ４は、この置換対象キャッシュエントリをＬ２Ｐテーブルキャッシュ３１から追い出し、そして上述のリードしたアドレス変換データをこの置換対象キャッシュエントリに格納する。
【０１１０】
非圧縮アドレス変換データから、ホスト２によって指定された論理アドレスに対応する物理アドレスを取得する動作においては、コントローラ４は、まず、リードされたアドレス変換データが格納されたＬ２Ｐテーブルキャッシュ３１のキャッシュエントリを示すポインタ（Ｌｏｇｉｃａｌ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ｔｒａｎｓｌａｔｅ  Ａｒｒａｙ  Ｐｏｉｎｔｅｒ）を取得する。コントローラ４は、このポインタによって指定されるこれら１２８個のオフセット要素（１２８個の物理アドレス）の中から、リージョンオフセット（Ｒｅｇｉｏｎ  Ｏｆｆｓｅｔ）の値に対応する一つのオフセット要素（物理アドレス）を特定する。そして、コントローラ４は、この特定されたオフセット要素（物理アドレス）にオフセット（Ｏｆｆｓｅｔ）を加えることによって、ホスト２によって指定された論理アドレスのデータが格納されているＮＡＮＤ型フラッシュメモリ５の物理アドレスを得る。
【０１１１】
圧縮Ｌ２Ｐテーブルキャッシュ３２の圧縮アドレス変換データから物理アドレスを取得するために要する時間、つまり圧縮Ｌ２Ｐテーブルキャッシュ３２を使用してポインタ（Ｌｏｇｉｃａｌ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ｔｒａｎｓｌａｔｅ  Ａｒｒａｙ  Ｐｏｉｎｔｅｒ）を取得するのに要する時間は、Ｔｃｏｍｐ＿ｈｉｔである。Ｔｃｏｍｐ＿ｈｉｔは、Ｔｈｉｔよりも、圧縮Ｌ２Ｐテーブルキャッシュ３２の圧縮アドレス変換データの伸張転送に要するレイテンシ（Ｔｄｅｃｏｄｅ）分だけ増加する。しかし、Ｔｃｏｍｐ＿ｈｉｔとＴｈｉｔの比は、高々１桁内に収まる程度であり、Ｔｃｏｍｐ＿ｈｉｔはＴｍｉｓｓに比して遙かに短い。
【０１１２】
一方、ホスト２によって指定された論理アドレスのリージョンインデックスに対応する圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在しないならば（ＣｏｍｐＭｉｓｓ）、コントローラ４は、このリージョンインデックスに対応するアドレス変換データをＮＡＮＤ型フラッシュメモリ５上のＬ２Ｐテーブル７からリードする。
【０１１３】
そして、コントローラ４は、このリードしたアドレス変換データをＬ２Ｐテーブルキャッシュ３１に格納する動作と、リードされたアドレス変換データから、ホスト２によって指定された論理アドレスに対応する物理アドレスを取得する動作と、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に格納する動作とを実行する。
【０１１４】
リードされたアドレス変換データを圧縮するエンコード動作とエンコード動作によって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に格納する動作とを含む圧縮転送は、エンコードＤＭＡコントローラ１５１によって実行することができる。
【０１１５】
リードされたアドレス変換データから、ホスト２によって指定された論理アドレスに対応する物理アドレスを取得する動作においては、コントローラ４は、まず、リードされたアドレス変換データが格納されたＬ２Ｐテーブルキャッシュ３１のキャッシュエントリを示すポインタ（Ｌｏｇｉｃａｌ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ｔｒａｎｓｌａｔｅ  Ａｒｒａｙ  Ｐｏｉｎｔｅｒ）を取得する。コントローラ４は、このポインタによって指定されるこれら１２８個のオフセット要素（１２８個の物理アドレス）の中から、リージョンオフセット（Ｒｅｇｉｏｎ  Ｏｆｆｓｅｔ）の値に対応する一つのオフセット要素（物理アドレス）を特定する。そして、コントローラ４は、この特定されたオフセット要素（物理アドレス）にオフセット（Ｏｆｆｓｅｔ）を加えることによって、ホスト２によって指定された論理アドレスのデータが格納されているＮＡＮＤ型フラッシュメモリ５の物理アドレスを得る。
【０１１６】
なお、Ｌ２Ｐテーブルキャッシュ３１の全ての置換対象キャッシュエントリ候補が使用中であるならば、つまり未使用のキャッシュエントリがこれら置換対象キャッシュライン候補内に存在しないならば、コントローラ４は、置換対象キャッシュエントリ候補の中から一つの置換対象キャッシュエントリを決定する。そして、コントローラ４は、この置換対象キャッシュエントリをＬ２Ｐテーブルキャッシュ３１から追い出し、そして上述のリードしたアドレス変換データをこの置換対象キャッシュエントリに格納する。
【０１１７】
ＣｏｍｐＭｉｓｓが起きた時にＬ２Ｐテーブル７内のアドレス変換データから物理アドレスを取得するために要する時間Ｔｃｏｍｐ＿ｍｉｓｓは、Ｔｍｉｓｓに、圧縮Ｌ２Ｐテーブルキャッシュ３２のヒットミス判定（圧縮キャッシュチェック）に要する時間を加えた値となる。圧縮キャッシュチェックに要する時間はわずかであるので、Ｔｃｏｍｐ＿ｍｉｓｓは、Ｔｍｉｓｓに対してほとんど増加しない。
【０１１８】
また、圧縮転送に要する時間Ｔｅｎｃｏｄｅは、Ｔｄｅｃｏｄｅとほぼ同じであり、Ｔｃｏｍｐ＿ｍｉｓｓと比して十分小さい。
【０１１９】
圧縮Ｌ２Ｐテーブルキャッシュ３２がＳＳＤ３の全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能なサイズを有する場合、つまりＭ＋１個のキャッシュエントリを有する場合には、Ｍ＋１個のキャッシュエントリの全てに圧縮アドレス変換データが転送された後は、更新データの書き込みによってＬ２Ｐテーブル７の内容が更新されない限り、圧縮Ｌ２Ｐテーブルキャッシュ３２のヒット率はほぼ１となる。したがって、Ｔｃｏｍｐ＿ｍｉｓｓの影響は実際上無視でき、本実施形態において論理物理アドレス変換に要する平均レイテンシ（平均時間）であるＴｃｏｍｐ＿ｌａｔｅｎｃｙは、ＴｈｉｔとＴｃｏｍｐ＿ｈｉｔとの割合によって決定される。
【０１２０】
まとめると、圧縮Ｌ２Ｐテーブルキャッシュ３２を使用しない図５の論理物理アドレス変換処理においては、論理物理アドレス変換に要する平均レイテンシ（平均時間）であるＴｌａｔｅｎｃｙは、
Ｔｌａｔｅｎｃｙ＝Ｔｈｉｔ×（Ｎ／Ｍ）＋Ｔｍｉｓｓ×（１−Ｎ／Ｍ）
となる。
【０１２１】
圧縮Ｌ２Ｐテーブルキャッシュ３２がＭ＋１個のキャッシュエントリを有する場合におけるＴｃｏｍｐ＿ｌａｔｅｎｃｙは、
Ｔｃｏｍｐ＿ｌａｔｅｎｃｙ＝Ｔｈｉｔ×（Ｎ’／Ｍ）＋Ｔｃｏｍｐ＿ｈｉｔ×（１−Ｎ’／Ｍ）
となる。
【０１２２】
ここで、Ｎ’は、Ｍ＋１個のキャッシュエントリを有する圧縮Ｌ２Ｐテーブルキャッシュ３２をＤＲＡＭ６上の論理物理アドレス変換用メモリ領域に確保し且つこのメモリ領域の残りの領域をＬ２Ｐテーブルキャッシュ３１として使用した場合におけるＬ２Ｐテーブルキャッシュ３１のキャッシュエントリの数を示している。
【０１２３】
Ｔｈｉｔ＝２５０ｎｓ，Ｔｍｉｓｓ＝４μｓ，Ｔｃｏｍｐ＿ｈｉｔ＝１μｓとしたとき、Ｌ２Ｐテーブルキャッシュ３１のヒット率が４０％であった場合のＴｌａｔｅｎｃｙは２．５μｓである。一方、Ｔｃｏｍｐ＿ｌａｔｅｎｃｙについては、たとえ、Ｌ２Ｐテーブルキャッシュ３１が存在しないと仮定しても（つまり、（Ｎ’／Ｍ）＝０とし、ＤＲＡＭ６上に圧縮Ｌ２Ｐテーブルキャッシュ３２のみを確保したとしても）、Ｔｃｏｍｐ＿ｌａｔｅｎｃｙは１μｓとなり、Ｔｃｏｍｐ＿ｌａｔｅｎｃｙ＜Ｔｌａｔｅｎｃｙの結果を得ることができる。
【０１２４】
図８は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒットが起きた時に実行されるキャッシュ制御処理の処理シーケンスを示す。
【０１２５】
ホスト２は、リードコマンドをＳＳＤ３に送出する（ステップＳ１０１）。コントローラ４がホスト２からのリードコマンドを受信した時、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒットチェックを実行し（ステップＳ１０２）、このキャッシュヒットチェックの結果に基づいて、Ｌ２Ｐテーブルキャッシュ３１が、キャッシュヒット、キャッシュミスのいずれの状態であるかを判定する（ステップＳ１０３）。
【０１２６】
キャッシュヒットとは、リードコマンドによって指定された論理アドレスに対応する物理アドレスを含むアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在する状態を意味する。キャッシュミスとは、リードコマンドによって指定された論理アドレスに対応する物理アドレスを含むアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在しない状態を意味する。
【０１２７】
キャッシュヒットの場合には、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１をリードアクセスして、このアドレス変換データをＬ２Ｐテーブルキャッシュ３１からリードする（ステップＳ１０４、Ｓ１０５）。そして、コントローラ４は、このアドレス変換データから、リードコマンド内の論理アドレスに対応する物理アドレスを取得する。なお、コントローラ４は、このアドレス変換データ内のこの物理アドレスだけをＬ２Ｐテーブルキャッシュ３１からリードすることもできる。
【０１２８】
そして、コントローラ４は、この物理アドレスを使用してＮＡＮＤ型フラッシュメモリ５をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをＮＡＮＤ型フラッシュメモリ５からリードする（ステップＳ１０６、Ｓ１０７）。コントローラ４は、ユーザデータをホスト２に返す（ステップＳ１０８）。
【０１２９】
図９は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり且つ圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュヒットが起きた時に実行されるキャッシュ制御処理の処理シーケンスを示す。
【０１３０】
ホスト２は、リードコマンドをＳＳＤ３に送出する（ステップＳ１１１）。コントローラ４がホスト２からのリードコマンドを受信した時、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒットチェックを実行し（ステップＳ１１２）、このキャッシュヒットチェックの結果に基づいて、Ｌ２Ｐテーブルキャッシュ３１が、キャッシュヒット、キャッシュミスのいずれの状態であるかを判定する（ステップＳ１１３）。
【０１３１】
キャッシュミスの場合には、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュヒットチェック（圧縮キャッシュヒットチェック）を実行し（ステップＳ１１４）、この圧縮キャッシュヒットチェックの結果に基づいて、圧縮Ｌ２Ｐテーブルキャッシュ３２が、キャッシュヒット（圧縮キャッシュヒット）、キャッシュミス（圧縮キャッシュミス）のいずれの状態であるかを判定する（ステップＳ１１５）。
【０１３２】
圧縮キャッシュヒットとは、リードコマンドによって指定された論理アドレスに対応する物理アドレスを含むアドレス変換データを圧縮することによって得られる圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３１に存在する状態を意味する。圧縮キャッシュミスとは、この圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３１に存在しない状態を意味する。圧縮Ｌ２Ｐテーブルキャッシュ３１がＭ＋１個のキャッシュエントリを有する構成であったとしても、圧縮Ｌ２Ｐテーブルキャッシュ３１のこれら全てのキャッシュエントリに圧縮アドレス変換データがキャッシュされるまでは、圧縮キャッシュミスが起こりうる。
【０１３３】
また、Ｌ２Ｐテーブルキャッシュ３１においては、必要に応じてキャッシュエントリがＬ２Ｐテーブルキャッシュ３１から追い出される。このため、Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり、且つ圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュヒット（圧縮キャッシュヒット）が起こる、というケースがある。
【０１３４】
この場合、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２をリードアクセスして、この圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２からリードする（ステップＳ１１６、Ｓ１１７）。この場合、圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２からリードする動作、圧縮アドレス変換データを伸張するデコード動作、このデコード動作によって得られる非圧縮アドレス変換データをＬ２Ｐテーブルキャッシュ３１のキャッシュエントリに転送する動作は、デコードＤＭＡコントローラ１５２によって実行することができる。そして、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュエントリに転送された非圧縮アドレス変換データから、リードコマンド内の論理アドレスに対応する物理アドレスを取得する。
【０１３５】
そして、コントローラ４は、この物理アドレスを使用してＮＡＮＤ型フラッシュメモリ５をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをＮＡＮＤ型フラッシュメモリ５からリードする（ステップＳ１１８、Ｓ１１９）。コントローラ４は、ユーザデータをホスト２に返す（ステップＳ１２０）。
【０１３６】
図１０は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュミスが起こり且つ圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュミスが起きた時に実行されるキャッシュ制御処理の処理シーケンスを示す。
【０１３７】
ホスト２は、リードコマンドをＳＳＤ３に送出する（ステップＳ１３１）。コントローラ４がホスト２からのリードコマンドを受信した時、コントローラ４は、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒットチェックを実行し（ステップＳ１３２）、このキャッシュヒットチェックの結果に基づいて、Ｌ２Ｐテーブルキャッシュ３１が、キャッシュヒット、キャッシュミスのいずれの状態であるかを判定する（ステップＳ１３３）。
【０１３８】
キャッシュミスの場合には、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュヒットチェック（圧縮キャッシュヒットチェック）を実行し（ステップＳ１３４）、この圧縮キャッシュヒットチェックの結果に基づいて、圧縮Ｌ２Ｐテーブルキャッシュ３２が、キャッシュヒット（圧縮キャッシュヒット）、キャッシュミス（圧縮キャッシュミス）のいずれの状態であるかを判定する（ステップＳ１３５）。
【０１３９】
圧縮キャッシュミスの場合、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５内のＬ２Ｐテーブル７をリードアクセスして、この論理アドレスに対応する物理アドレスを含むアドレス変換データをＬ２Ｐテーブル７からリードする動作と、リードされたアドレス変換データをＬ２Ｐテーブルキャッシュ３１に格納する動作と、リードされたアドレス変換データから、リードコマンド内の論理アドレスに対応する物理アドレスを取得する動作と、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に格納する動作とを実行する（ステップＳ１３６、Ｓ１３７）。アドレス変換データをＬ２Ｐテーブル７からリードする動作と、リードされたアドレス変換データを圧縮するエンコード動作と、エンコード動作によって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に格納する動作とを含む圧縮転送は、エンコードＤＭＡコントローラ１５１によって実行することができる。
【０１４０】
そして、コントローラ４は、この物理アドレスを使用してＮＡＮＤ型フラッシュメモリ５をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをＮＡＮＤ型フラッシュメモリ５からリードする（ステップＳ１３８、Ｓ１３９）。コントローラ４は、ユーザデータをホスト２に返す（ステップＳ１４０）。
【０１４１】
図１１は、Ｌ２Ｐテーブル７とＬ２Ｐテーブルキャッシュ３１と圧縮Ｌ２Ｐテーブルキャッシュ３２との関係と、ＤＲＡＭ６上におけるＬ２Ｐテーブルキャッシュ３１および圧縮Ｌ２Ｐテーブルキャッシュ３２の配置例を示す。
【０１４２】
上述したように、Ｌ２Ｐテーブルキャッシュ３１と圧縮Ｌ２Ｐテーブルキャッシュ３２の双方のキャッシュミスが起きた場合には、Ｌ２Ｐテーブル７からＬ２Ｐテーブルキャッシュ３１および圧縮Ｌ２Ｐテーブルキャッシュ３２の双方にアドレス変換データが転送される。この場合、Ｌ２Ｐテーブル７からＬ２Ｐテーブルキャッシュ３１へのアドレス変換データの転送においては、このアドレス変換データは、圧縮されずに、非圧縮の状態でＬ２Ｐテーブルキャッシュ３１のキャッシュエントリに格納される。一方、Ｌ２Ｐテーブル７から圧縮Ｌ２Ｐテーブルキャッシュ３２へのアドレス変換データの転送においては、このアドレス変換データは、エンコードＤＭＡコントローラ１５１による圧縮転送によって圧縮され、圧縮されたアドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュエントリに格納される。
【０１４３】
図１１の右部は、ＤＲＡＭ６上におけるＬ２Ｐテーブルキャッシュ３１および圧縮Ｌ２Ｐテーブルキャッシュ３２の配置例を示している。
【０１４４】
コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２が、ＳＳＤ３の全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能な最大サイズを有するように、ＤＲＡＭ６上の論理物理アドレス変換用メモリ領域（Ｌ２Ｐ  Ｃａｃｈｅ  ＲＡＭ）に圧縮Ｌ２Ｐテーブルキャッシュ３２用の領域６１を確保し、Ｌ２Ｐ  Ｃａｃｈｅ  ＲＡＭの残りの領域６２をＬ２Ｐテーブルキャッシュ３１として使用する。
【０１４５】
圧縮Ｌ２Ｐテーブルキャッシュ３２は、Ｌ２Ｐテーブル７のエントリの数と同数のキャッシュエントリを含む。Ｌ２Ｐテーブル７の最終エントリのリージョン番号がＲｅｇｉｏｎＭａｘによって示される場合には、圧縮Ｌ２Ｐテーブルキャッシュ３２の最終キャッシュエントリのリージョン番号もＲｅｇｉｏｎＭａｘによって示される。つまり、圧縮Ｌ２Ｐテーブルキャッシュ３２はＲｅｇｉｏｎＭａｘ＋１個のキャッシュエントリを含み、領域６１は、これらＲｅｇｉｏｎＭａｘ＋１個のキャッシュエントリに対応する圧縮アドレス変換データ（Ｃｏｍｐｒｅｓｓｅｄ  Ｌ２Ｐ  Ｍａｐ  Ｄａｔａ）の格納のために使用される。
【０１４６】
Ｌ２Ｐテーブルキャッシュ３１の最終キャッシュエントリのキャッシュＩＤは、Ｍａｘ  Ｃａｃｈｅ  ＩＤ’によって表される。Ｌ２Ｐ  Ｃａｃｈｅ  ＲＡＭ全体をＬ２Ｐテーブルキャッシュ３１として使用した場合のＬ２Ｐテーブルキャッシュ３１の最終キャッシュエントリのキャッシュＩＤを、Ｍａｘ  Ｃａｃｈｅ  ＩＤとすると、Ｍａｘ  Ｃａｃｈｅ  ＩＤ’＜Ｍａｘ  Ｃａｃｈｅ  ＩＤの関係となる。
【０１４７】
つまり、Ｌ２Ｐテーブルキャッシュ３１はＭａｘ  Ｃａｃｈｅ  ＩＤ’＋１個のキャッシュエントリを含み、領域６２は、これらＭａｘ  Ｃａｃｈｅ  ＩＤ’＋１個のキャッシュエントリに対応するアドレス変換データ（Ｌ２Ｐ  Ｔｒａｎｓｌａｔｅ  Ｃａｃｈｅ  Ｌｉｎｅ  Ｄａｔａ）と、Ｍａｘ  Ｃａｃｈｅ  ＩＤ’＋１個のタグ（Ｃａｃｈｅ  Ｔａｇ）の格納のために使用される。
【０１４８】
Ｌ２Ｐ  Ｃａｃｈｅ  ＲＡＭの容量は、以下の式によって表すことができる。
L2P Cache RAM＝MaxCacheId’× (size of (CacheLine)＋size of (CacheTag))＋RegionMax×size of (Compressed L2P Address Map Line)
ここで、RegionMax×size of (Compressed L2P Address Map Line)は、圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズ、つまり領域６１のサイズを示す。MaxCacheId’× (size of (CacheLine)＋size of (CacheTag))は、Ｌ２Ｐテーブルキャッシュ３１のサイズ、つまり領域６２のサイズを示す。
【０１４９】
一方で、L2P Cache RAMをMaxCacheIdで表すと、
L2P Cache RAM＝MaxCacheId×(size of (CacheLine)＋size of (CacheTag))なので、Ｍａｘ  Ｃａｃｈｅ  ＩＤ’は、以下の式によって表すことができる。
Max Cache Id’＝Max Cache Id−RegionMax×size of (Compressed L2P Address Map Line)／(size of (CacheLine)＋size of (CacheTag))
圧縮率CompressRateは、size of (Compressed L2P Address Map Line)／size of (CacheLine)を示すので、size of (CacheLine) ＞＞ size of (CacheTag)が成り立つならば、MaxCacheIdは次のように近似できる。
Max Cache Id’ ≒  Max Cache Id−RegionMax×CompressRate
このように、Ｌ２Ｐ  Ｃａｃｈｅ  ＲＡＭ上に固定サイズ（最大サイズ）の圧縮Ｌ２Ｐテーブルキャッシュ３２を割り当て、その余りにＬ２Ｐテーブルキャッシュ３１を確保する構成においては、Ｌ２Ｐ  Ｃａｃｈｅ  ＲＡＭのサイズが図１１のように固定であるならば、必然的にＬ２Ｐテーブルキャッシュ３１のサイズが小さくなる。
【０１５０】
このため、圧縮Ｌ２Ｐテーブルキャッシュ３２が圧縮アドレス変換データでまだ満たされていない状態であっても、Ｌ２Ｐテーブルキャッシュ３１のキャッシュエントリの追い出しが起こりやすくなり、この結果、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒット率が低下される場合がある。
【０１５１】
そこで、本実施形態では、コントローラ４は、可変長の圧縮Ｌ２Ｐテーブルキャッシュ３２をＬ２Ｐ  Ｃａｃｈｅ  ＲＡＭ上に割り当てる。
【０１５２】
より詳しくは、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２にキャッシュされる圧縮アドレス変換データの量が増加されるに連れて圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズが動的に増えるように、圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズを初期サイズから上述の最大サイズまで変更し、且つ圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズが上述の最大サイズに増加されるまでは（つまり、圧縮Ｌ２Ｐテーブルキャッシュ３２のほぼ全体が圧縮アドレス変換データで満たされるまでは）、領域６１内の未使用領域６１ａと領域６２の双方をＬ２Ｐテーブルキャッシュ３１として使用する。
【０１５３】
これにより、Ｌ２Ｐテーブルキャッシュ３１のサイズを比較的大きくすることでき、圧縮Ｌ２Ｐテーブルキャッシュ３２のほぼ全体が圧縮アドレス変換データで満たされるまでは、Ｌ２Ｐテーブルキャッシュ３１のキャッシュエントリの追い出しを起こしに難くすることができる。この結果、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒット率を高めることが可能となる。
【０１５４】
図１２は、可変長の圧縮Ｌ２Ｐテーブルキャッシュ３２を使用する場合のＤＲＡＭ６上におけるＬ２Ｐテーブルキャッシュ３１および圧縮Ｌ２Ｐテーブルキャッシュ３２の配置例を示す。
【０１５５】
圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズは、上述したように、初期サイズから最大サイズにまで拡大される。まず、圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズは初期サイズに設定される。圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズが初期サイズである場合、圧縮Ｌ２Ｐテーブルキャッシュ３２の最終キャッシュエントリのリージョン番号はＣｕｒｒｅｎｔＲｅｇｉｏｎＭａｘによって示される。つまり、圧縮Ｌ２Ｐテーブルキャッシュ３２はＣｕｒｒｅｎｔＲｅｇｉｏｎＭａｘ＋１個のキャッシュエントリを含み、領域６１は、これらＣｕｒｒｅｎｔＲｅｇｉｏｎＭａｘ＋１個のキャッシュエントリに対応する圧縮アドレス変換データ（Ｃｏｍｐｒｅｓｓｅｄ  Ｌ２Ｐ  Ｍａｐ  Ｄａｔａ）の格納のために使用される。
【０１５６】
圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズが初期サイズである場合、コントローラ４は、領域６１内の領域６１内の未使用領域６１ａと領域６２の双方をＬ２Ｐテーブルキャッシュ３１として使用する。
【０１５７】
つまり、Ｌ２Ｐテーブルキャッシュ３１はＭａｘ  Ｃａｃｈｅ  ＩＤ’＋１個のキャッシュエントリを含むが、Ｍａｘ  Ｃａｃｈｅ  ＩＤ’の値は、図１１のＭａｘ  Ｃａｃｈｅ  ＩＤ’よりも大きくなる。領域６２および未使用領域６１ａの双方は、Ｍａｘ  Ｃａｃｈｅ  ＩＤ’＋１個のキャッシュエントリに対応するアドレス変換データ（Ｌ２Ｐ  Ｔｒａｎｓｌａｔｅ  Ｃａｃｈｅ  Ｌｉｎｅ  Ｄａｔａ）と、Ｍａｘ  Ｃａｃｈｅ  ＩＤ’＋１個のタグ（Ｃａｃｈｅ  Ｔａｇ）の格納のために使用される。
【０１５８】
圧縮Ｌ２Ｐテーブルキャッシュ３２にキャッシュされる圧縮アドレス変換データの量が増え、ＣｕｒｒｅｎｔＲｅｇｉｏｎＭａｘ＋１個のキャッシュエントリが圧縮アドレス変換データでほぼ満たされると、ＣｕｒｒｅｎｔＲｅｇｉｏｎＭａｘの値は増加される。ＣｕｒｒｅｎｔＲｅｇｉｏｎＭａｘはＲｅｇｉｏｎＭａｘまで増加可能である。ＣｕｒｒｅｎｔＲｅｇｉｏｎＭａｘがＲｅｇｉｏｎＭａｘに達した時の圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズが上述の最大サイズである。
【０１５９】
ＣｕｒｒｅｎｔＲｅｇｉｏｎＭａｘの値の増加に伴い、Ｍａｘ  Ｃａｃｈｅ  ＩＤ’の値は減少される。
【０１６０】
圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズは、初期サイズから最大サイズまで、段階的に増加されてもよい。例えば、コントローラ１０は、最初の１０個程度のキャッシュエントリを含む圧縮Ｌ２Ｐテーブルキャッシュ３２を領域６１上に確保し、この１０個程度のキャッシュエントリが圧縮アドレス変換データでほほ埋まった時に、圧縮Ｌ２Ｐテーブルキャッシュ３２のキャッシュエントリの数を計２０個程度にまで増やしてもよい。計２０個程度のキャッシュエントリが圧縮アドレス変換データでほほ埋まった時に、コントローラ４は、キャッシュエントリの数を計２０個程度にまで増やしてもよい。このようにして、圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズ、つまりキャッシュエントリの数は、初期サイズから最大サイズにまで段階的に増加される。
【０１６１】
Ｌ２Ｐ  Ｃａｃｈｅ  ＲＡＭの容量は、以下の式によって表すことができる。
L2P Cache RAM＝MaxCacheId’×(size of (CacheLine)＋size of (CacheTag))＋CurrentRegionMax×size of (Compressed L2P Address Map Line)
図１２でも、図１１と同じくL2P Cache RAMをMaxCacheIdで表すと、
L2P Cache RAM ＝MaxCacheId×(size of (CacheLine)＋size of (CacheTag))なので、Ｍａｘ  Ｃａｃｈｅ  ＩＤ’は、以下の式によって表すことができる。
Max Cache Id’＝Max Cache Id−CurrentRegionMax×size of (Compressed L2P Address Map Line)／(size of (CacheLine) + size of (CacheTag))
ここで、図１２でも、図１１と同様に、(size of (CacheLine) + size of (CacheTag)は、Ｌ２Ｐテーブルキャッシュ３２の一つのキャッシュエントリ（キャッシュライン）のサイズと一つのキャッシュエントリに対応するキャッシュタグのサイズとの和を示す。
【０１６２】
また、size of (CacheLine) ＞＞ size of (CacheTag)である条件は変わらず、圧縮率CompressRateでＭａｘ  Ｃａｃｈｅ  ＩＤ’は、以下の式によって近似することができる。
Max Cache Id’≒ Max Cache Id−CurrentRegionMax×CompressRate
本実施形態では、CurrentRegionMax ＜ RegionMaxとなるように、領域６１の未使用領域６１ａをＬ２Ｐテーブルキャッシュ３１として利用することによって、Ｌ２Ｐテーブルキャッシュ３１のサイズを比較的大きくすることでき、Ｌ２Ｐテーブルキャッシュ３１のキャッシュヒット率を高めることが可能となる。
【０１６３】
また、圧縮Ｌ２Ｐテーブルキャッシュ３２の占有域は、ＤＲＡＭ６のアドレスが増加する方向から見て、Ｌ２Ｐテーブルキャッシュ３１と反対側から確保される。
【０１６４】
つまり、圧縮Ｌ２Ｐテーブルキャッシュ３２は、リージョン番号０ｘ００００００００に対応するキャッシュエントリからＣｕｒｒｅｎｔＲｅｇｉｏｎＭａｘに対応するキャッシュエントリが、領域６１と領域６２との間の境界と反対側に位置する領域６１の端部から境界に向けて並ぶように、領域６１上に配置される。
【０１６５】
一方、Ｌ２Ｐテーブルキャッシュ３１においては、Ｃａｃｈｅ  Ｔａｇは、領域６２と領域６１との間の境界と反対側に位置する領域６２の端部に配置される。そして、Ｃａｃｈｅ  Ｔａｇに後続して、０ｘ００００００００に対応するキャッシュエントリからＭａｘ  Ｃａｃｈｅ  ＩＤ’に対応するキャッシュエントリが配置される。
【０１６６】
このように、コントローラ４は、圧縮Ｌ２Ｐテーブルキャッシュ３２として使用される領域（圧縮Ｌ２Ｐテーブルキャッシュ３２の占有域）が、領域６１の端部から領域６１と領域６２との間の境界に向かう方向に増加し、且つＬ２Ｐテーブルキャッシュ３１として使用される領域（Ｌ２Ｐテーブルキャッシュ３１の占有域）が、領域６２の端部から領域６１と領域６２との間の境界に向かう方向に増加するように、Ｌ２Ｐテーブルキャッシュ３１および圧縮Ｌ２Ｐテーブルキャッシュ３２をＤＲＡＭ６のＬ２Ｐ  Ｃａｃｈｅ  ＲＡＭ上に配置する。
【０１６７】
通常、時間経過とともにホスト２によってアクセスされる論理アドレスの範囲が拡大し、ＳＳＤ３の使用容量が増加していく。本実施形態では、上述したように、圧縮Ｌ２Ｐテーブルキャッシュ３２の占有域は、ＤＲＡＭ６のアドレスが増加する方向から見て、Ｌ２Ｐテーブルキャッシュ３１と反対側から確保される。したがって、圧縮Ｌ２Ｐテーブルキャッシュ３２内のデータ量の増加に応じて圧縮Ｌ２Ｐテーブルキャッシュ３２のサイズを容易に拡大することができる。
【０１６８】
以上説明したように、本実施形態によれば、ＮＡＮＤ型フラッシュメモリ５に格納されたＬ２Ｐテーブル７の内容の一部がＬ２Ｐテーブルキャッシュ３１としてＤＲＡＭ６に格納され、またＬ２Ｐテーブル７の内容を圧縮することによって得られる圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２としてＤＲＡＭ６に格納される。
【０１６９】
そして、ホストによって指定される論理アドレスに対応する物理アドレスを含むアドレス変換データがＤＲＡＭ６上のＬ２Ｐテーブルキャッシュ３１に存在する場合には、Ｌ２Ｐテーブルキャッシュ３１内のこのアドレス変換データから、ホストによって指定される論理アドレスに対応する物理アドレスが取得される。
【０１７０】
このアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在せず且つこのアドレス変換データに対応する圧縮アドレス変換データがＤＲＡＭ６上の圧縮Ｌ２Ｐテーブルキャッシュ３２に存在する場合には、圧縮Ｌ２Ｐテーブルキャッシュ３２内のこの圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データがＬ２Ｐテーブルキャッシュ３１に格納する動作と、この非圧縮アドレス変換データから、ホストによって指定される論理アドレスに対応する物理アドレスを取得する動作とが実行される。
【０１７１】
また、このアドレス変換データがＬ２Ｐテーブルキャッシュ３１に存在せず且つこの圧縮アドレス変換データが圧縮Ｌ２Ｐテーブルキャッシュ３２に存在しない場合には、ＮＡＮＤ型フラッシュメモリ５内のＬ２Ｐテーブル７からこのアドレス変換データをリードする動作と、リードされたアドレス変換データをＬ２Ｐテーブルキャッシュ３１に格納する動作と、リードされたアドレス変換データから、ホストによって指定される論理アドレスに対応する物理アドレスを取得する動作と、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮Ｌ２Ｐテーブルキャッシュ３２に格納する動作とが実行される。
【０１７２】
このように、ＤＲＡＭ６のようなランダムアクセスメモリ上にＬ２Ｐテーブルキャッシュ３１と圧縮Ｌ２Ｐテーブルキャッシュ３２とを配置することにより、ＮＡＮＤ型フラッシュメモリ５内のＬ２Ｐテーブル７へのアクセスではなく、ＮＡＮＤ型フラッシュメモリ５よりも高速アクセス可能なランダムアクセスメモリへのアクセスが行われる確率を高くすることが可能となる。よって、論理物理アドレス変換の性能を向上でき、ひいてはＳＳＤ３の性能を改善することができる。
【０１７３】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０１７４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１７５】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、７…論理物理アドレス変換テーブル（Ｌ２Ｐテーブル）、３１…論理物理アドレス変換テーブルキャッシュ（Ｌ２Ｐテーブルキャッシュ）、３２…圧縮論理物理アドレス変換テーブルキャッシュ（圧縮Ｌ２Ｐテーブルキャッシュ）、５１…エンコードＤＭＡコントローラ、５２…デコードＤＭＡコントローラ。
【図１】
2019160215.tif 000003
【図２】
2019160215.tif 000004
【図３】
2019160215.tif 000005
【図４】
2019160215.tif 000006
【図５】
2019160215.tif 000007
【図６】
2019160215.tif 000008
【図７】
2019160215.tif 000009
【図８】
2019160215.tif 000010
【図９】
2019160215.tif 000011
【図１０】
2019160215.tif 000012
【図１１】
2019160215.tif 000013
【図１２】
2019160215.tif 000014