(57)【特許請求の範囲】
【請求項１】
複数のデータブロックを圧縮して生成された複数の圧縮ブロックと、それぞれが前記複数の圧縮ブロックの中の対応する圧縮ブロックの長さを含む複数のヘッダーを有するヘッダーコードワードと、を含むページデータを、読み出し要求に基づき、不揮発性メモリデバイスから読み出し、内部バッファにストアすることと、
前記内部バッファから前記ヘッダーコードワードをデコーダに読み出し、前記ヘッダーコードワードを前記デコーダでデコードすることと、
前記ヘッダーコードワードの前記デコーダによるデコード結果に基づき、前記読み出し要求により指定された圧縮ブロックに関連するオフセットを特定することと、
当該特定された前記指定された圧縮ブロックに関連するオフセットに基づき、前記指定された圧縮ブロックを前記内部バッファから前記デコーダに読み出し、前記指定された圧縮ブロックを前記デコーダでデコードすることと、
を含み、
前記読み出し要求により指定された圧縮ブロックに関連するオフセットを特定することは、前記ヘッダーコードワードの前記デコード結果に基づき、前記指定された圧縮ブロックの一つ前までの圧縮ブロックのそれぞれの長さを合計することを含む、
方法。
【請求項２】
前記複数のデータブロックの論理識別子を前記複数の圧縮ブロックの物理位置に関係付けるテーブルを更新することをさらに含み、前記テーブルは前記不揮発性メモリデバイス内の論理部の物理位置のみを指示し、前記圧縮ブロックの長さまたは前記論理部の前記物理位置からのオフセット値を記憶することはない、請求項１に記載の方法。
【請求項３】
前記ヘッダーコードワードは１つまたは複数の誤り訂正ビットを含む、請求項１〜２のいずれか一項に記載の方法。
【請求項４】
前記複数のヘッダーは、前記ページデータの中で連続して存在する、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記複数の圧縮ブロックは、連続する前記複数のヘッダーよりも後に配置される、請求項４に記載の方法。
【請求項６】
前記複数の圧縮ブロックは一つまたは複数のコードワードとして生成され、前記一つまたは複数のコードワードは１つまたは複数の誤り訂正ビットを含む、請求項１〜５のいずれか一項に記載の方法。
【請求項７】
前記複数のヘッダーはそれぞれ、前記複数の圧縮ブロックのうちの対応する圧縮ブロックの識別子をさらに含む、請求項１〜６のいずれか一項に記載の方法。
【請求項８】
前記不揮発性メモリデバイスはフラッシュメモリとして構成される、請求項１〜７のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
当発明は、フラッシュメモリシステムにおける圧縮データにアクセスするシステムに関する。
【背景技術】
【０００２】
ＳＳＤとも称されるソリッドステートドライブは、ＮＡＮＤフラッシュメモリデバイスを記憶素子として使用するデータ記憶デバイスである。一般にこのようなデバイスは、ホストコマンドを一端で受け付けて、もう一端でＮＡＮＤフラッシュへ伝達するＳＳＤコントローラを有する。ＮＡＮＤフラッシュは、電源が切られている時にデータを保持する不揮発性記憶デバイスの一種である。ＳＳＤコントローラは、ＮＡＮＤインターフェイスを介してＮＡＮＤフラッシュデバイスにアクセスする。ＮＡＮＤデバイスは、有限数の書き込み／プログラムサイクルを有する。ＮＡＮＤフラッシュへのデータ書き込み動作には、２つの段階が含まれる。データ転送段階と、メモリプログラム段階である。同様に、データ読み出しも、２つの段階に分類される。第１にメモリ読み出し段階と、第２にデータ転送段階である。メモリ読み出し段階は、データの読み出し時間と比較して、コントローラに非常に大きな遅延（約６０μｓ）を生じる。
【０００３】
ＮＡＮＤフラッシュダイの物理階層は、プレーン、ブロック、ページに分解される。ＮＡＮＤフラッシュダイは複数のプレーンを含むことが可能であり、各プレーンはブロックに分割され、そして全てのブロックはＮページを含む。典型的なＮＡＮＤは、２プレーン、約４０００ブロック、及び２５６ページ／ブロックを有する。
【０００４】
容易に理解されるように、ページが読み出し及び書き込み動作の最小メモリ単位であり、すなわちプログラムまたは読み出し動作はページ上で行われる。典型的ＮＡＮＤのページサイズは、約４キロバイト、約８キロバイト、及び約１６キロバイトである。ページサイズは、ＥＣＣパリティデータを収容するために、４キロバイト、８キロバイト、または１６キロバイトより少し大きくあり得る。典型的ＮＡＮＤインターフェイスのデータ速度は、２００ＭＢｐｓから４００ＭＢｐｓであり得る。読み出しに関して、メモリ読み出し時間は約６０μｓであり、データ転送は１６ＫＢデータでは約４０μｓ、８ＫＢデータでは約２０μｓ、４ＫＢデータでは約１０μｓであり得る。
【０００５】
論理ブロックアドレス（ＬＢＡ）とは、コンピュータ記憶デバイス、一般にハードドライブ及びＳＳＤ等のシステム上に記憶されたデータのブロックの位置を特定するために使用される一般的なスキームである（例えばｈｔｔｐ：／／ｅｎ．ｗｉｋｉｐｅｄｉａ．ｏｒｇ／ｗｉｋｉ／Ｃｏｍｐｕｔｅｒ＿ｓｔｏｒａｇｅ参照）。
【０００６】
ＳＳＤ認識ホストにおいて、典型的ホストＬＢＡ粒度は５１２バイト及び４ＫＢである。ＳＳＤコントローラは、４キロバイトで作動することを選択可能であり、５１２バイトホストＬＢＡ番号と４キロバイトコントローラＬＢＡ番号間のマッピングを管理する。システム内の各ＬＢＡは、一意のデータユニットにマッピングされる必要がある。当データユニットのサイズにより、物理アドレスポインタの大きさが定義される。その結果、ＬＢＡポインタのサイズは、ページ内のデータユニットのサイズに応じて、ダイ数、ブロック数、ページ数、及びデータユニットのサイズの関数となり得る。
【０００７】
例えば、１つの例示的構成において、ＳＳＤは以下の通りに構成される。
【０００８】
システム内のダイ数：１２８ダイ＝２＾７
【０００９】
ダイ毎のブロック数：４０００＋ブロック＝２＾１３
【００１０】
ブロック毎のページ数：２５６ページ＝２＾８
【００１１】
ＬＢＡデータユニットサイズ：約４ＫＢ
【００１２】
１６ＫＢページ内の４ＫＢのＬＢＡ数：４
【００１３】
物理デバイス容量：１２８＊４０００（＋）＊２５６＊１６ＫＢ＋＝２＾４３
【００１４】
論理デバイス容量：１２８＊４０００＊２５６＊１６ＫＢ＝２＾４１＝２ＴＢ
【００１５】
デバイス内のＬＢＡ位置数：２ＴＢ／４ＫＢ＝２＾２９
【００１６】
物理位置を示すためのＬＢＡテーブルの１エントリにおける全ビット数＝７（ダイ用）＋１３（ブロック用）＋８（ページ用）＋２（４ＬＢＡ用）＝３０ビット
【００１７】
物理ＬＢＡ位置を記憶する全ＬＢＡテーブルサイズ＝３０ビット＊２＾２９エントリ＝１．８７５ギガバイト
【００１８】
ＬＢＡエントリは通常、ファームウェア管理スキーマ毎のバイト粒度に丸められる。その結果、各ＬＢＡエントリに４バイトが使用され、全ＬＢＡテーブルサイズは、４バイト＊２＾２９エントリ＝２ギガバイトとなる。この場合、４ＫＢホストデータは、４ＫＢデータ及びパリティビットとしてＮＡＮＤフラッシュ内にコード化され、マッピングされる。
【００１９】
本明細書において開示される装置及び方法は、ＮＡＮＤフラッシュＳＳＤまたは他の不揮発性記憶デバイスにデータを記憶する改善された装置及び方法を提供する。開示される装置及び方法はどちらも、ＳＳＤに記憶され得るデータ量を増大し、ＳＳＤにアクセスするために使用されるＬＢＡテーブルのサイズを縮小する。
【００２０】
発明の利点が容易に理解されるように、上記で簡単に説明された発明のより詳細な説明が、添付の図面に例示される特定の実施形態を参照して提供される。これらの図面は、単に発明の典型的実施形態を描くものであり、よって発明の範囲を限定するものとしてみなされてはならないという理解の下、添付図面の使用を通して追加の特定性及び詳細により、発明は記述及び説明される。
【図面の簡単な説明】
【００２１】
【図１】発明の実施形態による方法を実施するのに好適なコンピューティングシステムの概略ブロック図である。
【図２】先行技術による記憶システムの構成要素の概略ブロック図である。
【図３】図３Ａ〜３Ｄは、本発明の実施形態による記憶スキーマを含むデータ記憶スキーマを例示する。
【図４】発明の実施形態によるハードウェアデコーダの概略ブロック図である。
【図５】本発明の実施形態による圧縮データの読み出し方法のプロセスフロー図である。
【図６】発明の実施形態によるデータ読み出しのタイムラインである。
【図７】本発明の実施形態による圧縮データの読み出し方法のプロセスフロー図である。
【図８】発明の実施形態によるガベージコレクションの方法のプロセスフロー図である。
【発明を実施するための形態】
【００２２】
本明細書において図の実施例により概して説明及び例示される本発明の構成要素は、多様に異なる構成で配置及び設計され得ることは、容易に理解されよう。従って、図で示される発明の実施形態及び実施例に関する以下のより詳細な説明は、請求項に記述される発明の範囲を限定する意図はなく、発明により現時点で考えられる実施形態のある実施例の代表に過ぎない。本明細書において記述される実施形態は、図面を参照することで最もよく理解されよう。図面において同じ構成部分は、全体にわたって同じ番号により示される。
【００２３】
本発明は、当該技術分野の現状に応じて、特に現在利用可能な装置及び方法により完全に解消されていない当該技術分野における問題及び必要性に応じて、開発された。よって本発明は、フラッシュメモリにおいて圧縮データを記憶しアクセスを行う装置及び方法を提供するために開発された。
【００２４】
本発明による実施形態は、装置、方法、またはコンピュータプログラム製品として具現化され得る。従って、本発明は、完全なハードウェア実施形態、完全なソフトウェア実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、または本明細書において全て「モジュール」または「システム」と概して称され得るソフトウェア及びハードウェアの態様を組み合わせた実施形態の形を取り得る。さらに本発明は、コンピュータ使用可能プログラムコードを有する式の任意の有形媒体に具現化されたコンピュータプログラム製品の形態を取り得る。当該コンピュータ使用可能プログラムコードを有する式は、当該媒体に取り込まれる。
【００２５】
１つまたは複数のコンピュータ使用可能媒体またはコンピュータ可読媒体のうちの任意の組合せが使用され得る。例えば、コンピュータ可読媒体は、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ)デバイス、読み出し専用メモリ（ＲＯＭ）デバイス、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）デバイス、ポータブルコンパクトディスク読み出し専用メモリ（ＣＤＲＯＭ）、光学記憶デバイス、及び磁気記憶デバイスのうちの１つまたは複数を含み得る。選択された実施形態において、コンピュータ可読媒体は、命令実施システム、装置、またはデバイスにより使用される、またはこれらと接続するプログラムを保持、記憶、伝達、伝搬、または転送することが可能な任意の非一時的媒体を備え得る。
【００２６】
本発明の動作を実行するコンピュータプログラムコードは、ジャバ（Ｊａｖａ）、スモールトーク（Ｓｍａｌｌｔａｌｋ）、Ｃ＋＋等のオブジェクト指向プログラミング言語、及び「Ｃ」プログラミング言語もしくは同様のプログラミング言語等の従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語のうちの任意の組み合わせにより書かれ得る。プログラムコードは、独立型ソフトウェアパッケージとしてコンピュータシステム上で完全に、独立型ハードウェアユニット上で、コンピュータからある距離を置いて位置する遠隔コンピュータ上で部分的に、または遠隔コンピュータもしくはサーバ上で完全に実行され得る。後者のシナリオにおいて、遠隔コンピュータは、ローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介してコンピュータに接続され得る、または外部コンピュータへ接続され得る（例えばインターネットサービスプロバイダを使用するインターネットを介して）。
【００２７】
本発明の実施形態による方法、装置（システム）、及びコンピュータプログラム製品のフローチャート図及び／またはブロック図を参照して、本発明が後述される。フローチャート図及び／またはブロック図の各ブロック、及びフローチャート図及び／またはブロック図のブロックの組合せは、コンピュータプログラム命令またはコードにより実施可能であることは理解されよう。これらのコンピュータプログラム命令は、マシンを引き起こすために、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供され得る。これにより、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行される当該命令は、フローチャート及び／またはブロック図のブロック（複数可）において特定される機能／作動を実施する手段を生み出す。
【００２８】
これらのコンピュータプログラム命令はまた、コンピュータまたは他のプログラム可能データ処理装置に特定の態様で機能するように指示可能な非一時的コンピュータ可読媒体にも記憶され得る。これにより、コンピュータ可読媒体に記憶された当該命令は、フローチャート及び／またはブロック図のブロック（複数可）において特定される機能／作動を実施する命令手段を含む製品を引き起こす。
【００２９】
コンピュータまたは他のプログラム可能データ処理装置上で一連の動作ステップを実行させてコンピュータ実施プロセスを引き起こすように、コンピュータプログラム命令は、コンピュータまたは他のプログラム可能データ処理装置上にもロードされ得る。これにより、コンピュータまたは他のプログラム可能装置上で実行される当該命令は、フローチャート及び／またはブロック図のブロック（複数可）において特定される機能／作動を実施するプロセスを提供する。
【００３０】
図１は、例示的コンピューティングデバイス１００を例示するブロック図である。コンピューティングデバイス１００は、本明細書で論述されるプロシージャ等、様々なプロシージャを実行するのに使用され得る。コンピューティングデバイス１００は、サーバ、クライアント、またはその他のコンピューティングエンティティとして機能可能である。コンピューティングデバイスは、本明細書において論述される様々な監視機能を実行可能であり、本明細書に記述されるアプリケーションプログラム等の１つまたは複数のアプリケーションプログラムを実行可能である。コンピューティングデバイス１００は、デスクトップコンピュータ、ノートブックコンピュータ、サーバコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータ等、多様なコンピューティングデバイスのうちのいずれでもあり得る。
【００３１】
コンピューティングデバイス１００は、１つまたは複数のプロセッサ１０２と、１つまたは複数のメモリデバイス１０４と、１つまたは複数のインターフェイス１０６と、１つまたは複数の大容量記憶デバイス１０８と、１つまたは複数の入出力（Ｉ／Ｏ）デバイス１１０と、ディスプレイデバイス１３０とを備え、これら全てはバス１１２に接続される。プロセッサ（複数可）１０２は、メモリデバイス（複数可）１０４及び／または大容量記憶デバイス（複数可）１０８に記憶された命令を実行する１つまたは複数のプロセッサまたはコントローラを含む。プロセッサ（複数可）１０２はまた、キャッシュメモリ等の様々な種類のコンピュータ可読媒体も含み得る。
【００３２】
メモリデバイス（複数可）１０４は、揮発性メモリ（例えばランダムアクセスメモリ（ＲＡＭ）１１４）及び／または不揮発性メモリ（例えば読み出し専用メモリ（ＲＯＭ）１１６）等、様々なコンピュータ可読媒体を含む。メモリデバイス（複数可）１０４はまた、フラッシュメモリ等の書き換え可能ＲＯＭも含み得る。
【００３３】
大容量記憶デバイス（複数可）１０８は、磁気テープ、磁気ディスク、光ディスク、ソリッドステートメモリ（例えばフラッシュメモリ）等の様々なコンピュータ可読媒体を含む。図１に示されるように、特定の大容量記憶デバイスは、ハードディスクドライブ１２４である。様々なコンピュータ可読媒体からの読み出し及び／または様々なコンピュータ可読媒体への書き込みを可能にするために、様々なドライブがまた大容量記憶デバイス（複数可）１０８に含まれ得る。大容量記憶デバイス（複数可）１０８は、取り外し可能媒体１２６及び／または取り外し不可媒体を含む。
【００３４】
Ｉ／Ｏデバイス（複数可）１１０は、データ及び／または他の情報を、コンピューティングデバイス１００に対し入力する、またはコンピューティングデバイス１００から取得することを可能にする様々なデバイスを含む。例示的Ｉ／Ｏデバイス（複数可）１１０は、カーソル制御装置、キーボード、キーパッド、マイク、モニタもしくは他のディスプレイデバイス、スピーカ、プリンタ、ネットワークインターフェイスカード、モデム、レンズ、ＣＣＤもしくは他の画像取り込みデバイス等を含む。
【００３５】
ディスプレイデバイス１３０は、コンピューティングデバイス１００の１人または複数のユーザに対し情報を表示可能な任意の種類のデバイスを含む。ディスプレイデバイス１３０の実施例には、モニタ、ディスプレイ端末、映像投影デバイス等が含まれる。
【００３６】
インターフェイス（複数可）１０６は、コンピューティングデバイス１００が他のシステム、デバイス、またはコンピューティング環境と対話することを可能にする様々なインターフェイスを含む。例示的インターフェイス（複数可）１０６は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、無線ネットワーク、及びインターネットに対するインターフェイス等、任意の数の異なるネットワークインターフェイス１２０を含む。他のインターフェイス（複数可）は、ユーザインターフェイス１１８及び周辺デバイスインターフェイス１２２を含む。インターフェイス（複数可）１０６はまた、１つまたは複数のユーザインターフェイス要素１１８も含む。インターフェイス（複数可）１０６はまた、プリンタ、ポインティングデバイス（マウス、トラックパッド等）、キーボード等に対するインターフェイス等、１つまたは複数の周辺インターフェイスも含む。
【００３７】
バス１１２は、プロセッサ（複数可）１０２、メモリデバイス（複数可）１０４、インターフェイス（複数可）１０６、大容量記憶デバイス（複数可）１０８、及びＩ／Ｏデバイス（複数可）１１０がお互いに通信すること、並びにバス１１２に接続された他のデバイスまたは構成要素と通信することを可能にする。バス１１２は、システムバス、ＰＣＩバス、ＩＥＥＥ１３９４バス、ＵＳＢバス等のいくつかの種類のバス構造のうちの１つまたは複数に相当する。
【００３８】
プログラム及び他の実行可能プログラムコンポーネントは、コンピューティングデバイス１００の異なる記憶構成要素に様々な回数存在可能であり、プロセッサ（複数可）１０２により実行されることは理解されるが、例示のため、このようなプログラム及び他の実行可能プログラムコンポーネントは、本明細書において個別のブロックとして示される。あるいは、本明細書において説明されるシステム及びプロシージャは、ハードウェア、またはハードウェア、ソフトウェア及び／またはファームウェアの組み合わせで実施可能である。例えば、１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）は、本明細書において説明されるシステム及びプロシージャのうちの１つまたは複数を実行するようにプログラム可能である。
【００３９】
図２を参照すると、いくつかの実施形態において、ＳＳＤ２００を含むシステム２００は、複数のＮＡＮＤフラッシュメモリ２０２を含み得る。１つまたは複数のＮＡＮＤデバイス２０２は、ＳＳＤコントローラ２０６と対話するＮＡＮＤインターフェイス２０４と接続し得る。ＳＳＤコントローラ２０６は、コンピューティングデバイス１００の属性の一部または全てを備えるデバイス等のホストデバイス上で、またはホストデバイス用に実施される、ホストインターフェイス２０８からの読み出し及び書き込み命令を受信し得る。ホストインターフェイス２０８は、コンピューティングデバイスの入出力システムのデータバス、メモリコントローラ、または他の構成要素であり得る。
【００４０】
本明細書において開示されるシステム及び方法は、ホストインターフェイス２０８とＮＡＮＤインターフェイス２０４の間に置かれるＳＳＤコントローラ２０６により実施され得る。別の実施形態において、ＮＡＮＤインターフェイス２０４は、本明細書において開示される機能性の一部または全てを実施し得る。さらに別の実施形態において、本明細書において開示される機能の全てまたは一部を実施するために、追加構成要素が通常のＮＡＮＤインターフェイス２０４とＳＳＤコントローラ２０６の間に置かれ得る。
【００４１】
本明細書において開示されるシステム及び方法は、ＮＡＮＤフラッシュメモリ、ＳＳＤコントローラ、ホストコンピューティングデバイスのＲＡＭ、またはある他のメモリデバイスに記憶されたＬＢＡテーブル等、圧縮データをマッピングしアクセスするのに必要なデータも同時に縮小する、ＮＡＮＤフラッシュメモリ２０２内に記憶されたデータの圧縮を、より有利に規定する。
【００４２】
代表的活用事例が、実施例として本明細書において提供される。
【実施例】
【００４３】
事例１：単純データ圧縮手法
圧縮の特有の利点は、論理システムの全容量を増大させ、読み出し及び書き込み動作の間に消費される全電力を削減することである。特に同数のホストＬＢＡは、非圧縮データと比べて、より少ない空間を占め得る。その結果、同じ物理空間でＮＡＮＤ内に記憶可能なＬＢＡ（すなわちデータ）の数が増える。最大圧縮率が５０％の場合、同じ容量に対し２倍までのデータ（及びＬＢＡ）が割り当て可能となる。前述の実施例において、全ＬＢＡが当該圧縮率を有すると仮定すると、１６ＫＢの１物理ページ中に、４非圧縮ＬＢＡではなく、８圧縮ＬＢＡが記憶可能ということになる。圧縮率により、ページに書き込まれるデータの長さが定義される。
【００４４】
異なるＬＢＡデータが異なる圧縮率を有する場合（圧縮アルゴリズムにおいて典型的である）、圧縮されたこれらのＬＢＡデータの最終的な長さは異なる。そして粒度は４ＫＢではなく最小単位に依存し、圧縮されたＬＢＡデータの各サイズは可変的である。いくつかの実施形態において、粒度は、コード化されたコードワードデータの開始位置から正確なオフセット値を指定するために１バイト、あるいは最小単位が１ＫＢであるとすれば１ＫＢであり得る（これは本明細書において記述される他の事例においては該当しない）。これは、ＬＢＡポインタサイズに直接関係する。そして１６ＫＢ＋（＝２＾１５バイト）ページ内のＬＢＡデータの正確な開始位置を示すために、位置を示す２ビットの代わりに、１５ビットが保持される必要がある、または１ＫＢ粒度の場合は、５ビットが保持される必要がある。下記の計算において示されるように、これはＬＢＡマッピングテーブルに必要な物理空間を５０％増大させるだけでなく、ＬＢＡポインタを３２ビット（非整列）より大きくする（ＬＢＡテーブルはファームウェア管理にもう少しビットを要する）。３２ビットを超える任意のアクセスは多重読み出し及び重複データの管理を要するため、ＳＲＡＭ空間の点、及びＬＢＡテーブル検索の点から、これはシステムにおいて膨大なオーバヘッドである。
【００４５】
各ＬＢＡは個別のコードワードに割り当て可能なため、これはＬＢＡテーブル内のＬＢＡ毎に開始位置を提供することを要する。圧縮されたＬＢＡの長さは可変的であり得るため、各ＬＢＡの開始位置は、１バイトまたは２バイトで詳細化を要する可能性があり得る。すなわち１６ＫＢ＋のページにおいて、オフセット値は０〜２＾１５の範囲内であり、当該ページ内の位置を指示するアドレスポインタは１５ビットであり得る。２５％までの圧縮率を仮定すると、ユーザデータの各４ＫＢは、１ＫＢとコードワードビットに圧縮可能である。極端な場合には、全ＬＢＡが２５％に圧縮され、各１６ＫＢ＋ページは１６ＬＢＡ含むことが可能である。従って、事例１のスキーマの特性値は以下の通りである。
【００４６】
論理デバイス容量：１２８＊４０００＊２５６＊１６ＫＢ＝２＾４１＝２ＴＢ
【００４７】
デバイス内のＬＢＡ位置数：２ＴＢ／４ＫＢ＝２＾２９エントリ
【００４８】
１６ＫＢ＋ページ長にわたる可変オフセット値を考慮したＬＢＡテーブルの１エントリにおける全ビット数＝７（ダイ用）＋１３（ブロック用）＋８（ページ用）＋１５（１６ＫＢ＋ページサイズにわたる可変ＬＢＡオフセット値）＝４３ビット／エントリ
【００４９】
物理ＬＢＡ位置を記憶する全ＬＢＡテーブルサイズ＝４３ビット＊２＾２９エントリ＝２．６８７５ギガバイト
【００５０】
各エントリをバイト境界、６バイト／エントリに丸めた時の全ＬＢＡテーブルサイズ＝６バイト＊２＾２９＝３ギガバイト
【００５１】
事例１に関して、ＬＢＡの圧縮データへのアクセスは、以下の通りに行われ得る。
【００５２】
１）ファームウェア（例えばホストデバイスのファームウェア）は、ＬＢＡオフセットに割り当てられたＮビット（例えば４３）を伴って、ＬＢＡテーブルのエントリを読み出す。
【００５３】
２）ＬＢＡコードワード全体のＮＡＮＤ読み出しを行う。
【００５４】
３）コードワードをデコードする。
【００５５】
４）ホスト転送のため、またはガベージコレクションのような内部動作のために、ＬＢＡユーザデータが取得される。
【００５６】
事例１の単純手法は、非常に大きなＬＢＡテーブルサイズという問題を有する。当問題を処理する１つの手法は、ＬＢＡテーブルではなく、ＮＡＮＤページ自体に各ＬＢＡのポインタを保持することであろう。当手法は、さらに詳しく下記（事例３、４、５）において論述される。ヘッダーがポインタ情報を記憶するのに使用された場合、物理ページ内のＬＢＡ開始位置またはＬＢＡオフセット値を取得するために、ヘッダー情報を読み出すことを要するであろう。当ヘッダー情報はまた、ユーザデータと同じ訂正能力でコード化される必要がある。ＬＢＡデータを取得するために、当手法は２つの方法で行うことが可能である。第１の方法は、ポインタ情報を取得するためにまずヘッダーを読み出し、そして次の読み出しにおいてＬＢＡデータを読み出す。この方法では、ＮＡＮＤから２回の読み出しを要する（下記の事例３を参照）。第２の方法は、１回の読み出しでヘッダーとＬＢＡデータの両方を一緒に読み出し、ＬＢＡデータの位置を後で特定する。ポインタ情報を見つける前にＬＢＡデータの位置を特定することは不可能なため、この第２の手法は、ＮＡＮＤからの冗長データ読み出しを生じる（下記の事例４を参照）。
【００５７】
事例２：ＮＡＮＤデバイス内のＬＢＡポインタ記憶
別の手法は、ポインタ情報をユーザデータと一緒に、コードワードにコード化する。この場合、ポインタ情報の読み出しは、ユーザデータを含むコードワード全体を読み出し、読み出したコードワードをデコード化し、そしてＬＢＡデータへのポインタ情報を見つけることを伴い得る。当手法において、ポインタ情報とＬＢＡデータを読み出すために、ＬＢＡテーブルは、コードワード位置とＬＢＡ毎のコードワード数を記憶する必要がある。２５％までの圧縮率に関して、１６ＫＢ＋物理ページ内のＬＢＡ数は、４ＬＢＡから１６ＬＢＡまで及び得る。ＬＢＡテーブル内のコードワード識別に割り当てられるビット数は、コード化されたコードワードのサイズに依存し得る。２ＫＢのコードワードの場合、１６ＫＢ物理ページ内の全コードワード数は８個であり、ＬＢＡテーブル内に３ビットを必要とし得る。コードワードのサイズが大きい程、コードワード毎に含まれるＬＢＡ数は多くなる。圧縮されたＬＢＡは複数のコードワードにわたることが可能であるため、例えば４ＫＢデータは、３個の２ＫＢのコードワードにわたることが可能である。従って、コード化されたコードワード内のＬＢＡコンテンツを示すには、３ビットの上にもう２ビット、すなわち５ビットが必要となる。
【００５８】
図３Ａを参照すると、従来の手法において、ページは、それぞれが同一の幅を有する複数のＬＢＡ‐Ａ〜Ｄを含む。ポインタがＬＢＡテーブルに記憶される単純圧縮手法では（事例１）、ページは、図３Ｂに示されるように可変的な長さを有する複数のＬＢＡ‐Ａ〜Ｄを含み得る。ＬＢＡ‐Ａ〜Ｄが可変的な長さを有するため、ＬＢＡ‐Ａ〜Ｄのうちの複数は、同一のコードワードにコード化され得る。例えばＬＢＡ‐Ａは小さいため、圧縮されたＬＢＡ‐Ａ及びＬＢＡ‐Ｂは、誤り訂正目的で単一コードワードにコード化され得る。例えばＬＢＡ‐Ａ及びＬＢＡ‐Ｂは、両ＬＢＡ‐Ａ及びＬＢＡ‐Ｂを取得するようデコード可能な単一のコードワードＣＷＡＢにコード化され得る。
【００５９】
図３Ｃを参照すると、事例２は、各ＬＢＡ‐Ａ〜Ｄを対応ヘッダーＨＡ〜ＨＤと共に記憶し得る。各ＬＢＡ‐Ａ〜Ｄ及びその対応ヘッダーＨＡ〜ＨＤは、単一コードワードＣＷＡ〜ＣＷＤにコード化され得る。
【００６０】
事例２の記憶スキームに関して、特性値は以下の通りである。
【００６１】
論理デバイス容量：１２８＊４０００＊２５６＊１６ＫＢ＝２＾４１＝２ＴＢ
【００６２】
デバイス内のＬＢＡ位置数：２ＴＢ／４ＫＢ＝２＾２９エントリ
【００６３】
１６ＫＢ＋ページ長にわたる可変オフセット値を考慮したＬＢＡテーブルの１エントリにおける全ビット数＝７（ダイ用）＋１３（ブロック用）＋８（ページ用）＋５（２ＫＢコードワードオフセットと２ＫＢコードワード内の４ＫＢまでのデータオフセット）＝３３ビット／エントリ
【００６４】
物理ＬＢＡ位置を記憶する全ＬＢＡテーブルサイズ＝３３ビット＊２＾２９エントリ＝２．０６２５ギガバイト
【００６５】
各エントリをバイトに丸める、毎エントリ５バイト＝５バイト＊２＾２９＝２．５ギガバイト
【００６６】
事例２に関して、ＬＢＡの圧縮データへのアクセスは、以下の通りに行われ得る。
【００６７】
１）ファームウェアは、コードワードに割り当てられるＮビットを伴って、ＬＢＡテーブルエントリを読み出す。Ｎはコードワード内のビット数である。
【００６８】
２）コードワード全体のＮＡＮＤ読み出しを行う（約６０μｓのＮＡＮＤフラッシュ読み出し時間と約１０μｓの転送時間）。
【００６９】
３）コードワードをデコードする。
【００７０】
４）ＬＢＡ開始位置を示すポインタ情報を取得する。
【００７１】
５）ホスト転送のため、またはガベージコレクションのような内部動作のために、ポインタ情報により示される位置のデータをＬＢＡユーザデータとして使用する。
【００７２】
事例２の欠点は、必要以上のデータを読み出すことにある。すなわち、コードワードが８ＬＢＡを含む場合、１ＬＢＡを読み出すには、残りの７ＬＢＡも同様に読み出すことを伴う。これは転送電力とＮＡＮＤ転送時間を消費する。また８ＬＢＡ及びヘッダー情報に対しデコードが行われる必要があるため、追加のデコーダ電力を消費する（７倍の電力が必要）。また１ＬＢＡの代わりに８ＬＢＡをデコードすることは追加時間を要するため、パフォーマンスに影響を与える。当手法（事例２）で、ＬＢＡテーブルサイズは２５％増大し、ＬＢＡの読み出しは、コードワード全体の追加読み出し、及びＬＢＡオフセットを取得するためのヘッダー情報の後処理計算を生じる。
【００７３】
事例３：ポインタの個別コードワードでの分離記憶
別の実施例において、各ＬＢＡは独立したコードワードにコード化され、ポインタ情報はＮＡＮＤ内に個別コードワードとして保存される。例えば、図３Ｄに示されるように、ＬＢＡ‐Ａ〜Ｄに対応するヘッダーＨＡ〜ＨＤは、ＬＢＡ‐Ａ〜Ｄ自体ではなく、個別コードワードまたは複数のコードワードに記憶される。例えば、ＨＡ及びＨＢは、コードワードＣＷＨ１にコード化され得る。一方ヘッダーＨＣ及びＨＤはコードワードＣＷＨ２にコード化される。ＬＢＡ‐Ａ〜Ｄは、１つまたは複数のコードワードＣＷＡ〜ＣＷＤに別々にコード化される。本明細書に開示される別の実施形態に関して、複数のＬＢＡ‐Ａ〜Ｄは、単一のコードワードで表され得る。例えば、ＬＢＡ‐Ａ及びＬＢＡ‐Ｂは、同一のコードワードＣＷＡにより表され得る。あるいは、各ＬＢＡ‐Ａ〜Ｄは、各自のコードワードＣＷＡ〜ＣＷＤにより表され得る。
【００７４】
事例３に関して、特定のＬＢＡからのデータの読み出しは、以下の通りに進められ得る。
【００７５】
１）ファームウェアは特定ＬＢＡデータに対するポインタを含まないＬＢＡテーブルエントリを読み出す。
【００７６】
２）ＮＡＮＤ読み出し命令を発行し、ヘッダーコードワードを読み出す（約６０μｓのメモリ読み出し時間とデータ転送時間）。
【００７７】
２）ヘッダーコードワードをデコードする。
【００７８】
３）ＬＢＡ開始位置を示すポインタ情報を取得するように、デコードされたヘッダーコードワードに対し後処理を行う。
【００７９】
４）さらに約６０μｓのＮＡＮＤ読み出し時間とデータ転送時間を生じさせるページ読み出し命令を再発行する。
【００８０】
５）ＬＢＡデータをデコードする。
【００８１】
６）ホスト転送のため、またはガベージコレクションのような内部動作のために、当該位置のデータをＬＢＡユーザデータとして使用する。
【００８２】
事例４：後続データ抽出を伴うヘッダー及びＬＢＡ両方の読み出し
別の手法において、図３Ｄで示される記憶データは、以下の通りにアクセスされ得る。
【００８３】
１）ＮＡＮＤページ読み出し命令を発行し、ページコンテンツ全体を読み出す（約６０μｓのメモリ読み出し時間とデータ転送時間）。
【００８４】
２）ヘッダーポインタコードワードを含むページコンテンツ全体をデコードし、ＬＢＡの開始位置を示すポインタ情報を取得するようにデコードされたヘッダーコードワードに対し後処理を行う。
【００８５】
３）ポインタ情報を使用して、デコードされたページコンテンツからＬＢＡデータを取得する。
【００８６】
４）ホスト転送のため、またはガベージコレクションのような内部動作のために、当該位置のデータをＬＢＡユーザデータとして使用する。
【００８７】
事例５：単一ページ読み出しのためのヘッダー及びＬＢＡデータの分離転送を実施するハードウェアデコーダ
以下に記述される事例５の手法は、前述の手法の欠陥を改善する。事例５は特に、以下のことを行う点で有利であり得る。
【００８８】
１）ＬＢＡテーブルからＬＢＡオフセットビットを取り除く。ＬＢＡテーブルは、物理ページレベルまでのＬＢＡの位置を含むだけで良く、ページ内のオフセット値を含む必要はない。
【００８９】
２）要求されるＬＢＡとヘッダー部に対して読み出し及びデコードを行う必要のあるデータを削減して、転送時間及び転送電力を節約する。
【００９０】
３）特定のＬＢＡ及びヘッダー部に対してデコードを行うことのみを要求することで、デコーダエンジン電力及びＤＲＡＭアクセス電力を含むデコード電力を節約する。
【００９１】
４）ハードウェアデコーダにより行うため、ファームウェアにより後処理を行いヘッダーとデータを分離させる必要がなく、高パフォーマンスを達成する。
【００９２】
５）ガベージコレクションまたはシステムデータリサイクルプロセス中に、ＬＢＡの再コード化を必要としない。
【００９３】
図４を参照すると、本明細書において開示されるシステム及び方法により圧縮されたデータへアクセスを提供するために、例示されたシステムは、ＳＳＤコントローラ２０６またはＮＡＮＤインターフェイス２０４に組み込まれ得る。ハードウェアデコーダ４０４は、読み出しエンジン４０２とホストインターフェイス４１０の間に置かれ得る。読み出しエンジン４０２は、ハードウェアデコーダ４０４からのページ読み出し命令に応じるように動作可能であり、それに応じてＮＡＮＤフラッシュメモリ２０２から要求されるページを取得し、内部バッファに記憶し得る。読み出しエンジン４０２はさらに、内部バッファからの転送命令により指示されるデータを読み出し、ハードウェアデコーダへ当該データを提供することにより、ハードウェアデコーダからの転送命令に応じるように動作可能であり得る。
【００９４】
ハードウェアデコーダ４０４は、ヘッダーデコーダモジュール４０６と、ＬＢＡオフセット値計算モジュール４０８と、ＬＢＡ／ヘッダー終了位置検出モジュール４１０とを備え得る。ヘッダーデコーダモジュール４０６は、ヘッダーコードワードをデコードするように動作可能である。オフセット値計算モジュール４０８は、各ＬＢＡコードワードのオフセット値を計算し、ハードウェアデコーダ４０４がホストインターフェイス４１２から受信した読み出し命令において要求される特定のＬＢＡのオフセット値を特定するように構成され得る。ＬＢＡ／ヘッダー終了位置検出モジュール４１０は、ヘッダーから特定されるオフセット値を使用して、要求されるＬＢＡに関してページ内の実際のオフセット値を特定する。これは、ベースオフセット値を取得するように、ヘッダー部の終了位置を特定することを含み得る。そして要求されるＬＢＡに関するページ内のオフセット値を取得するために、ヘッダーから特定されたオフセット値は当ベースオフセット値に追加され得る。
【００９５】
ハードウェアデコーダ４０４は、要求されるＬＢＡに関して特定されたオフセット値のＬＢＡに対する適切なＬＢＡ読み出し命令を、自動で発行するように構成され得る。当作動全体がハードウェアにより実行される実施形態において、ホストデバイスのファームウェアがデータに対し後処理を行う必要はない。またハードウェアデコーダ４０４はヘッダーをデコードしてオフセットを計算するため、ヘッダーコードワード及びＬＢＡデータコードワードの両方を読み出すのに、同じページ読み出し動作が使用され、従って第２のページ読み出し動作の必要がなくなる。ページ内のヘッダー及びデータの形式、並びに動作の順序に関しては、さらに詳しく後述される。
【００９６】
図５を参照すると、ホストデバイスからの読み出し命令に対して例示される方法５００を実行するのに、システム４００が使用され得る。当該読み出し命令は、ＮＡＮＤフラッシュ記憶デバイス内のページのＬＢＡを指示する。読み出しエンジン４０２は、ＬＢＡ要求内のヘッダーデータの転送を受信し、それに応じてＮＡＮＤフラッシュからページデータ５０２を受信する。前記のように、読み出しエンジン４０２は、ＮＡＮＤフラッシュデバイスに対しページデータ５０２を要求して、内部バッファにページデータ５０２を記憶する、ページ読み出し要求を実行し得る。読み出しエンジン４０２は、ヘッダーデータ５０６をヘッダーデコーダモジュール４０６に提供し得る。ヘッダーデータ５０６は、ハードウェアデコーダ４０４からのデータ転送命令に応じて提供され得る。ヘッダーデコーダモジュール４０６は、ヘッダーデータをデコードし、デコード済みヘッダー５１０を取得する。デコード済みヘッダー５１０は、ＬＢＡオフセット値計算モジュール４０８により使用され、方法５００が実行される読み出し命令において指示される特定のＬＢＡに関するオフセット値５１４が特定される。オフセット値５１４は、ＬＢＡ／ヘッダー終了位置検出モジュール４１０により使用され、要求されるＬＢＡが始まるページ内のオフセット値が特定される。例えば、オフセット値５１４は、ページ内に記憶されるデータのヘッダー部の終了位置であると判定されるベースアドレスに対し追加され得る。オフセット値５１４は、ＬＢＡ／ヘッダー終了位置検出モジュール４１０により使用され、要求されるＬＢＡのページ内のオフセット値が特定され得る。当オフセット値を指示する要求５１８は、読み出しエンジン４０２に提出され、そして読み出しエンジン４０２は、ＬＢＡデータ５２０、すなわち要求されるＬＢＡに対するＬＢＡコードワードを出力する。
【００９７】
図４のシステム及び図５の方法は、各ＬＢＡを図３Ｄに示される独立コードワードにコード化するデータを読み出すのに使用され得る。つまり各コードワードサイズは、圧縮データの結果により変化し得る。１つの実施例において、２５％圧縮に関して、非圧縮サイズ４ＫＢを有する各コードワードは、１ＫＢ（元のデータの２５％）から４ＫＢ（元のデータの１００％）まで及び得る。３２ＫＢページ等の物理ページ内の全ＬＢＡのヘッダーは、図３Ｄに関して前述されるように、物理ページ内においてグループ化され、ヘッダーコードワードにコード化される。各ヘッダーは、当該ヘッダーが記憶されるページ内に記憶されるＬＢＡのうちの１つに対応する。各ヘッダーは、当該ヘッダーが示すＬＢＡの識別子と、当該ヘッダーが示すＬＢＡの長さと、ファームウェアデータを含み得る。
【００９８】
ホストインターフェイスからの読み出し要求に応じて、読み出しエンジンにその内部バッファにページを読み出すように命令した後、ハードウェアエンジンは、まずヘッダーコードワードを読み出し、そしてこれらのヘッダーコードワードをデコードし得る。当デコード処理は、ＮＡＮＤフラッシュからの残りのデータの転送と同時に実行可能である。これらのコードワードのデコード及びヘッダーの取得後、オフセット値モジュール４０８は、ヘッダー内の長さを累算して、コード化されたＬＢＡコードワードのオフセット値（すなわち開始位置のポインタ）を生成する。例えば、ＬＢＡ‐Ｎの開始位置アドレス／オフセットは、ヘッダーコードワードサイズ＊ヘッダーコードワード数＋長さ（ＬＢＡ‐Ｍ）であり得る。ヘッダーは圧縮されたＬＢＡデータストリーム毎の長さを含むため、ハードウェアデコーダ４０４は、ファームウェア（例えばホストインターフェイス）から要求されるＬＢＡを、デコード済みヘッダーコンテンツに結び付けて、ＬＢＡオフセット値を引き出し得る。
【００９９】
１度ＬＢＡオフセット値が取得されると、ハードウェアデコーダ４０４は、ＬＢＡコードワードを読み出すようにデータ転送命令を発行し得る。読み出されたＬＢＡコードワードは、ハードウェアデコーダ等のデコーダに送信される。ハードウェアデコーダは物理ページ内のＬＢＡコードワードの識別及び読み出しを行うため、ページ読み出し命令を再発行する必要がなく、従ってヘッダー及びＬＢＡ両方の読み出しを、単一ページ読み出しメモリアクセスにより達成する（約５５μｓ）。
【０１００】
ＬＢＡコードワードの読み出し及びデコードと比較すると、ヘッダーコードワードは十分に小さく、短い時間で読み出し及びデコードが行われ得る。その結果、ＬＢＡテーブル内のオフセット値に基づいた非圧縮ＬＢＡコードワードの単純読み出しと比較すると、パフォーマンスインパクトは非常に小さい。大抵の場合、圧縮により処理されるデータ量は削減されるため、非圧縮データと比較すると、実際に良いパフォーマンスを発揮する。例えば図６は、事例５の方法による読み出し動作のタイムラインを例示する。示されるように、ページ読み出しの約６０μｓの第１遅延６０２の後に、ヘッダーデータをハードウェアデコーダ４０４に転送する約１．５μｓの遅延６０４が続く。ヘッダーのデコードは、約２μｓの遅延６０６をもたらし得る。遅延６０６の間、ダイへのページ読み出しは、ハードウェアデコーダ４０４または読み出しエンジン２０２によりブロックされ得る。特に遅延６０６は、ＮＡＮＤアイドルサイクルにより占められ得る。そして要求されるＬＢＡコードワードが転送され、ＬＢＡコードワードの長さによる遅延６０８を生じ得る（１ＫＢで約２．５μｓから４ＫＢで約１０μｓ）。ＬＢＡコードワードはデコードされ、約２μｓの遅延６１０を生じ得る。
【０１０１】
図７は、読み出し命令を処理する方法７００を例示する。方法６００は、読み出しエンジン４０２を組み合わせたハードウェアデコーダ４０４により実行され得る。方法７００は、ＮＡＮＤフラッシュデバイスから特定のＬＢＡを読み出すよう、ホストインターフェイスからの命令の受信、またはガベージコレクション等のある他の内部プロセスの後に起こり得る。当該命令は、ＬＢＡが見つかったページを指示し、かつページのどのＬＢＡを読み出すかを特定する。
【０１０２】
方法７００は、ホストインターフェイスからの読み出し命令において指示されるページに関して、ＮＡＮＤフラッシュデバイスに対しページ読み出し命令を発行すること７０２を含み得る。これに応じて、読み出しエンジン４０２は、ページのページデータを、それが記憶されるＮＡＮＤフラッシュデバイス（例えば適切なＮＡＮＤダイ）から読み出し、ページデータをバッファ内に記憶し得る。
【０１０３】
方法７００は、１つまたは複数のヘッダーコードワードをページデータから読み出すこと７０４と、ヘッダーを取得するためにヘッダーコードワードをデコードすること７０６とを含み得る。そしてヘッダーは、ＬＢＡの一部または全てのオフセット情報を取得する７０８のために、分析され得る。例えば、読み出し命令においてＬＢＡ‐Ｎが指示される場合、ＬＢＡ‐Ｎのオフセット値を取得するために、ＬＢＡ‐０〜Ｎ−１までの長さが合計され得る。あるいは、ＬＢＡ‐Ｎのオフセット値を取得するために、ＬＢＡ‐Ｎ−１のオフセット値を計算し、それからＬＢＡ‐Ｎ−１の長さに合計する再帰法が実行され得る。ＬＢＡ‐Ｎ−１のオフセット値は、０であるＬＢＡ‐０のオフセット値、またはヘッダー部の最後のビットまで、ＬＢＡ‐Ｎ−１のオフセット値とその長さ等に基づいて、同じ方法で取得され得る。
【０１０４】
１度オフセットが取得されると、方法７００は、そのオフセットアドレスにおけるＬＢＡを読み出すこと７１０を含み得る。例えば、ＬＢＡ‐Ｎが要求される場合、ＬＢＡ‐Ｎのコードワードの長さＬを特定するために、対応ヘッダーが査定され得る。ステップ７０８において特定されたＬＢＡ‐Ｎのオフセット値の後に、Ｌビットが転送され得る。
【０１０５】
そしてステップ７０８において転送されたＬＢＡコードワードはデコードされ７１２、ＬＢＡのユーザデータが、ホストインターフェイスまたは他の要求構成要素またはプロセスへ返され得る７１４。デコード７１２はＬＢＡを解凍することを含む、あるいは、読み出し命令を発行したホストインターフェイスもしくは他の要求エンティティに対する圧縮ＬＢＡの提供後、またはある他の介在エンティティもしくはプロセスにより、ＬＢＡは解凍され得る。
【０１０６】
事例５の手法の特性値は以下の通りである。
【０１０７】
論理デバイス容量：１２８＊４０００＊２５６＊１６ＫＢ＝２＾４１＝２ＴＢ
【０１０８】
デバイス内のＬＢＡ位置数：２ＴＢ／４ＫＢ＝２＾２９エントリ
【０１０９】
１６ＫＢ＋ページ長にわたる可変オフセット値を考慮したＬＢＡテーブルの１エントリにおける全ビット数＝７（ダイ用）＋１３（ブロック用）＋８（ページ用）＋０（ヘッダーはＬＢＡコードワードオフセット情報を含む）＝２８ビット／エントリ
【０１１０】
物理ＬＢＡ位置を記憶する全ＬＢＡテーブルサイズ＝２８ビット＊２＾２９エントリ＝１．７５ギガバイト
【０１１１】
各エントリをバイトに丸める、毎エントリ４バイト＝４バイト＊２＾２９＝２ギガバイト
【０１１２】
他の手法（事例１〜４）と比べて明らかなように、事例５の手法は、非圧縮データと比較してみても、エントリ毎により多くの空きビットを有する。下記のテーブル１は、他の３つの事例と比較して、事例５のビット要求は削減されていることを示す。これは、ハードウェアメモリ資源を節約することを指示することにつながり、そしてＬＢＡテーブルエントリを管理する複雑さを軽減する。特に、ページに書き込まれる各ＬＢＡに関して、各ＬＢＡの長さまたは各ＬＢＡへのページ内のオフセット値を記憶しない、ＬＢＡテーブル内の対応エントリが作成または保持され得る。
【表１】
0006316974.tif 000002
【０１１３】
図８を参照すると、図３に示される圧縮ＬＢＡの記憶スキームは、単純で効率的なガベージコレクションまたはＬＢＡのデフラグを可能にし得る。例えば、ハードウェアデコーダ４０４、読み出しエンジン４０２、または他の構成要素が、例示された方法８００を実行し得る。例えば、方法８００は、ページからの有効ＬＢＡのコードワードを読み出すこと８０２と、無効ＬＢＡの読み出しを省略することとを含み得る。無効ＬＢＡは、削除され、記憶されるデータをもはや表さないＬＢＡであり得る。そして方法８００は、有効ＬＢＡのみを含み、無効ＬＢＡを省くページに書き換えること８０４を含み得る。図３Ｄの記憶スキーマの利点は、有効ＬＢＡのコードワードは、ガベージコレクションプロセス中にそれらをデコード及び再コード化、またはそれらを解凍及び圧縮することなく、ガベージコレクションプロセス中に読み出し及び書き換え可能である。
【０１１４】
方法８００はさらに、方法８００の対象であるページのヘッダー部を更新すること８０６を含み得る。特に、有効ＬＢＡ毎に対応するヘッダーは、１つまたは複数のヘッダーコードワードにコード化され、さらにページに書き込まれ得る。ヘッダーは、ＬＢＡ識別子及び長さ等の情報を含む、前述の方法において言及された情報を含み得る。
【０１１５】
本明細書において開示されるシステム及び方法は、ＮＡＮＤフラッシュデバイスへの圧縮データの記憶を可能にするスマートヘッダー及び検索に関するハードウェア技術を提供する。ヘッダーをデコードし、ＮＡＮＤページ内のＬＢＡ位置を取得し、ＬＢＡコードワードの自動読み出しを実行するハードウェア自動化技術は、システムにおける圧縮の現実的な使用に関して特有の利点を提供する。これらの手法の組み合わせは、システム並びにホスト動作に関しても、節電及びパフォーマンスの向上へと導く。
【０１１６】
本発明は、その精神または主要な特徴から逸脱することなく、他の特定の形態に具現化することが可能である。記載される実施形態は、あらゆる点において、限定ではなく、単なる例示としてみなされるべきである。特に、ＮＡＮＤフラッシュＳＳＤに関して方法は説明されるが、他のＳＳＤデバイスまたはハードディスクドライブ等の不揮発記憶デバイスもまた、本明細書において開示される方法の恩恵を受け得る。ゆえに発明の範囲は、前述の説明ではなく、添付の特許請求により示される。特許請求の均等物の意味及び範囲に入るすべての変更は、特許請求の範囲内に含まれる。
【図１】
0006316974.tif 000003
【図２】
0006316974.tif 000004
【図３Ａ】
0006316974.tif 000005
【図３Ｂ】
0006316974.tif 000006
【図３Ｃ】
0006316974.tif 000007
【図３Ｄ】
0006316974.tif 000008
【図４】
0006316974.tif 000009
【図５】
0006316974.tif 000010
【図６】
0006316974.tif 000011
【図７】
0006316974.tif 000012
【図８】
0006316974.tif 000013