(57)【特許請求の範囲】
【請求項１】
方法であって、
I/Oデバイスにおいて、ホストを介してI/Oデバイスインターフェースに送られた読み出し要求を受け取るステップであって、該読み出し要求は、前記I/Oデバイスの不揮発性メモリから、該読み出し要求の論理ブロックアドレスに対応するデータを読み出すための要求である、ステップと、
前記読み出し要求を受け取ったことに応答して、
マップの複数のエントリのうちの特定のエントリを読み出して、前記不揮発性メモリの複数のページのうちの特定のページの物理アドレスと、前記読み出し要求の前記論理ブロックアドレスに対応するデータの書き込みに応答して以前に格納された圧縮データ（圧縮されているデータ）に対する前記特定のページ内のオフセットと、前記圧縮データのバイト長とを取得するステップであって、前記特定のマップエントリは、前記読み出し要求の前記論理ブロックアドレスに関連付けられている、ステップと、
前記圧縮データに対する前記特定のページ内のオフセット及び前記圧縮データのバイト長を、前記特定のページ内の複数の読み出しユニットのうちの第１の読み出しユニットのアドレス、及び、前記特定のページから読み出される読み出しユニットの数に変換するステップと、
前記特定のページから前記数の読み出しユニットだけを読み出すステップと、
前記特定のページから読み出した前記読み出しユニットの各々に対して誤り訂正復号処理を実施して、訂正されたデータを得るステップと、
前記圧縮データに対する前記特定のページ内のオフセット、及び、前記圧縮データのバイト長にしたがって、前記訂正されたデータから前記圧縮データを取り出すステップと、
前記圧縮データを解凍してリターンデータを生成するステップと、
前記リターンデータを前記ホストに返すステップ
を実行するステップと、
前記圧縮データに対する前記特定のページ内のオフセット及び前記圧縮データのバイト長と、前記特定のページ内のユーザーデータの量との組み合わせにしたがって、前記圧縮データの少なくとも一部が、前記不揮発性メモリの前記ページに続くページの１以上の読み出しユニットに存在するか否かを判定するステップ
を含む方法。
【請求項２】
方法であって、
I/Oデバイスにおいて、ホストを介してI/Oデバイスインターフェースに送られた読み出し要求を受け取るステップであって、該読み出し要求は、前記I/Oデバイスの不揮発性メモリから、該読み出し要求の論理ブロックアドレスに対応するデータを読み出すための要求である、ステップと、
前記読み出し要求を受け取ったことに応答して、
マップの複数のエントリのうちの特定のエントリを読み出して、前記不揮発性メモリの複数のページのうちの特定のページの物理アドレスと、前記読み出し要求の前記論理ブロックアドレスに対応するデータの書き込みに応答して以前に格納された圧縮データ（圧縮されているデータ）に対する前記特定のページ内のオフセットと、前記圧縮データのバイト長とを取得するステップであって、前記特定のマップエントリは、前記読み出し要求の前記論理ブロックアドレスに関連付けられている、ステップと、
前記圧縮データに対する前記特定のページ内のオフセット及び前記圧縮データのバイト長を、前記特定のページ内の複数の読み出しユニットのうちの第１の読み出しユニットのアドレス、及び、前記特定のページから読み出される読み出しユニットの数に変換するステップと、
前記特定のページから前記数以上で、前記特定のページ内の全ての読み出しユニットよりは少ない数の読み出しユニットを読み出すステップと、
前記特定のページから読み出した前記読み出しユニットの各々に対して誤り訂正復号処理を実施して、訂正されたデータを得るステップと、
前記圧縮データに対する前記特定のページ内のオフセット、及び、前記圧縮データのバイト長にしたがって、前記訂正されたデータから前記圧縮データを取り出すステップと、
前記圧縮データを解凍してリターンデータを生成するステップと、
前記リターンデータを前記ホストに返すステップ
を実行するステップと、
前記圧縮データに対する前記特定のページ内のオフセット及び前記圧縮データのバイト長と、前記特定のページ内のユーザーデータの量との組み合わせにしたがって、前記圧縮データの少なくとも一部が、前記不揮発性メモリの前記ページに続くページの１以上の読み出しユニットに存在するか否かを判定するステップ
を含む方法。
【請求項３】
読み出される読み出しユニットの数が、前記特定のページ内の全ての読み出しユニットの数よりも少ない、請求項１または２の方法。
【請求項４】
前記不揮発性メモリの前記ページのうちの第１のページは、第１の数の読み出しユニットを含み、前記不揮発性メモリの前記ページのうちの第２のページは、第２の数の読み出しユニットを含み、前記第１の数は前記第２の数とは異なる、請求項１〜３のいずれかの方法。
【請求項５】
前記不揮発性メモリの前記ページのうちの第１のページは、第１の量のユーザーデータを含み、前記不揮発性メモリの前記ページのうちの第２のページは、第２の量のユーザーデータを含み、ユーザーデータの前記第１の量はユーザーデータの前記第２の量とは異なる、請求項１〜４のいずれかの方法。
【請求項６】
I/Oデバイスにおいて、前記ホストを介してI/Oデバイスインターフェースに送られた書き込み要求を受け取るステップであって、該書き込み要求は、前記論理ブロックアドレスに対応するデータを書き込むための要求である、ステップと、
前記書き込み要求を受け取ったことに応答して、
前記論理ブロックアドレスに対応する前記データを圧縮して、前記論理ブロックアドレスに対応する前記データよりも小さな圧縮された書き込みデータを生成するステップと、
前記特定のページに、前記圧縮された書き込みデータの少なくとも第１の部分を書き込むステップと、
前記特定のエントリに、前記特定のページの物理アドレス、前記圧縮された書き込みデータに対する前記特定のページ内のオフセット、及び、前記圧縮された書き込みデータのバイト長を格納するステップ
を実施するステップ
をさらに含む、請求項１〜５のいずれかの方法。
【請求項７】
前記書き込みデータに対する要求を受け取ったことに応答して、前記特定のページにヘッダーを書き込むステップをさらに含む請求項６の方法であって、前記ヘッダーは、前記要求の前記論理ブロックアドレスの少なくとも一部と前記圧縮データのバイト長とを含む、方法。
【請求項８】
前記論理ブロックアドレスが、複数の論理ブロックアドレスのうちの第１の論理ブロックアドレスであり、前記数の読み出しユニットのうちの少なくとも１つが、前記論理ブロックアドレスのそれぞれに対応する少なくともいくつかのデータを含む、請求項１〜７のいずれかの方法。
【請求項９】
前記数の読み出しユニットのうちの少なくとも１つが、前記圧縮データの一部に加えて、１以上のヘッダーを含む、請求項１〜８のいずれかの方法。
【請求項１０】
方法であって、
I/Oデバイスにおいて、ホストを介してI/Oデバイスインターフェースに送られた読み出し要求を受け取るステップであって、該読み出し要求は、前記I/Oデバイスの不揮発性メモリから、該読み出し要求の論理ブロックアドレスに対応するデータを読み出すための要求である、ステップと、
前記読み出し要求を受け取ったことに応答して、
マップの複数のエントリのうちの特定のエントリを読み出して、前記不揮発性メモリの複数のページのうちの特定のページの物理アドレスと、前記読み出し要求の前記論理ブロックアドレスに対応するデータの書き込みに応答して以前に格納された可変サイズのデータ（以下、可変サイズのデータを可変サイズデータという）に対する前記特定のページ内のオフセットと、前記可変サイズデータのバイト長とを取得するステップであって、前記特定のマップエントリは、前記読み出し要求の前記論理ブロックアドレスに関連付けられている、ステップと、
前記可変サイズデータに対する前記特定のページ内のオフセット及び前記可変サイズデータのバイト長を、前記特定のページ内の複数の読み出しユニットのうちの第１の読み出しユニットのアドレス、及び、前記特定のページから読み出される読み出しユニットの数に変換するステップと、
前記特定のページから前記数の読み出しユニットだけを読み出すステップと、
前記特定のページから読み出した前記読み出しユニットの各々に対して誤り訂正復号処理を実施して、訂正されたデータを得るステップと、
前記可変サイズデータに対する前記特定のページ内のオフセット、及び、前記可変サイズデータのバイト長にしたがって、前記訂正されたデータから前記可変サイズデータを取り出すステップと、
前記取り出したデータを前記ホストに返すステップ
を実行するステップと、
前記可変サイズデータに対する前記特定のページ内のオフセット及び前記可変サイズデータのバイト長と、前記特定のページ内のユーザーデータの量との組み合わせにしたがって、前記可変サイズデータの少なくとも一部が、前記不揮発性メモリの前記ページに続くページの１以上の読み出しユニットに存在するか否かを判定するステップ
を含む方法。
【請求項１１】
I/Oデバイスにおいて、前記ホストを介してI/Oデバイスインターフェースに送られた書き込み要求を受け取るステップであって、該書き込み要求は、前記論理ブロックアドレスに対応する可変サイズデータ、及び前記可変サイズデータのサイズを書き込むための要求である、ステップと、
前記書き込み要求を受け取ったことに応答して、
前記特定のページに、前記可変サイズデータの少なくとも第１の部分を書き込むステップと、
前記特定のエントリに、前記特定のページの物理アドレス、前記可変サイズデータに対する前記特定のページ内のオフセット、及び、前記可変サイズデータのサイズに対応する該可変サイズデータのバイト長を格納するステップ
を実施するステップ
をさらに含む、請求項１０の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願の優先権の利益の請求は、本願の出願データシート、リクエスト（Request）、または、（必要であれば）通達（Transmittal）においてなされている。本願のタイプが許容する範囲内で、本願は、あらゆる目的のために、参照によって下記の出願を組み込むものとする。下記の全ての出願は、本願発明がなされたときに本願の出願人と出願人が共通であった。
米国仮出願（整理番号がSF-11-15でシリアルナンバーは61/521,739）：２０１１年８月９日出願。第一発明者はEarl T. Cohen。発明の名称は、「I/O DEVICE AND COMPUTING HOSTINTEROPERATION」。
米国仮出願（整理番号がSF-11-15Aでシリアルナンバーは61/531,551）：２０１１年9月６日出願。第一発明者はEarl T. Cohen。発明の名称は、「I/O DEVICEAND COMPUTING HOST INTEROPERATION」。
米国仮出願（整理番号がSF-11-15Bでシリアルナンバーは61/543,666）：２０１１年１０月５日出願。第一発明者はEarl T. Cohen。発明の名称は、「I/O DEVICE AND COMPUTING HOSTINTEROPERATION」。
米国仮出願（整理番号がSF-10-02でシリアルナンバーは61/316,373）：２０１０年３月２２日出願。第一発明者はRadoslav Danilak。発明の名称は、「Accessing Compressed Data ofVarying-Sized Quanta in Non-Volatile Memory」。
米国出願（整理番号がSF-10-02USでシリアルナンバーは13/053,175）：２０１１年３月２１日出願。第一発明者はRadoslav Danilak。発明の名称は、「Accessing Compressed Data ofVarying-Sized Quanta in Non-Volatile Memory」。
米国仮出願（整理番号がSF-10-10でシリアルナンバーは61/418,846）：２０１０年１月１２日出願。第一発明者はJeremy IssacNathaniel Werner。発明の名称は、「DYNAMIC HIGHER-LEVEL REDUNDANCY MODEMANAGEMENT WITH INDEPENDENT SILICON ELEMENTS」。
米国仮出願（整理番号がSF-10-10でシリアルナンバーは61/543,707）：２０１１年５月１０日出願。第一発明者はEarl T. Cohen。発明の名称は、「SELF-JOURNALING AND HIERARCHICALCONSISTENCY FOR NON-VOLATILE STORAGE」。
米国仮出願（整理番号がSF-10-06でシリアルナンバーは61/543,707）：２０１１年１０月５日出願。第一発明者はEarl T. Cohen。発明の名称は、「SELF-JOURNALING AND HIERARCHICALCONSISTENCY FOR NON-VOLATILE STORAGE」。
ＰＣＴ出願（整理番号がSF-10-06PCTでシリアルナンバーはPCTUS1258583）：２０１２年１０月４日出願。第一発明者はEarl T. Cohen。発明の名称は、「SELF-JOURNALING AND HIERARCHICALCONSISTENCY FOR NON-VOLATILE STORAGE」。
米国仮出願（整理番号がSF-10-12でシリアルナンバーは61/755,169）：２０１３年１月２２日出願。第一発明者はEarl T. Cohen。発明の名称は、「Storage Address Space to NVM Address,Span, and Length Mapping/Converting」。
【０００２】
分野：コンピューティングホスト及びI/Oデバイス技術における進歩が、性能、効率、及び実用性を向上させるために必要とされている。
【背景技術】
【０００３】
関連技術：本明細書で言及している、コンテキスト、定義、もしくは比較のためのものを含む技術及び概念は、公知または周知であると明示されている場合を除いて、既に公知であるかまたは先行技術の一部であると解釈されるべきではない。本明細書で引用されている、特許、特許出願、及び刊行物を含む全ての参考文献（もしあれば）は、それらが本明細書に具体的に組み込まれているか否かにかかわらず、あらゆる目的のために、参照により全体が本明細書に組み込まれるものとする。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第2012/075200
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明を、多くのやり方で、たとえば、プロセス、製造品、装置、システム、物質の組成ないし構成、コンピューター可読記憶媒体（たとえば、ディスクなどの光学式及び／または磁気式大容量記憶装置における媒体や、フラッシュストレージ（フラッシュ記憶装置）などの不揮発性記憶装置を有する集積回路）などのコンピューター可読媒体、または、プログラム命令が光学的もしくは電子的な通信リンクを介して送られるコンピューターネットワークとして、実施することができる。詳細な説明には、上記の分野におけるコスト、利益性、性能、効率、及び実用性を改善可能にする本発明の１以上の実施形態が開示されている。詳細な説明には、詳細な説明の残りの部分の理解を容易にするためのイントロダクションが含まれている。このイントロダクションには、本明細書及び／または図面に開示されている概念にしたがうシステム、方法、製造品、及び、コンピューター可読媒体のうちの１以上の例示的な実施形態が含まれている。「結論」においてより詳細に記載されているように、本発明は、特許請求の範囲に含まれる全ての可能な改変及び変更を含む。
【図面の簡単な説明】
【０００６】
【図１】フラッシュページ内の固定サイズ領域に対して論理ブロックアドレスをマッピングする１実施形態の選択された細部を示す。
【図２】オプションとしてフラッシュページにわたる可変サイズ領域に対して論理ブロックアドレスをマッピングする１実施形態の選択された細部を示す。
【図３】整数の数の読み出しユニットを含むフラッシュページの１実施形態を示す。
【図４】１以上の読み出しユニットにわたる可変サイズ領域に論理ブロックアドレスをマッピングする１実施形態の選択された細部を示す。
【図５】ヘッダー及びデータを含む読み出しユニットの１実施形態の選択された細部を示す。
【図６】ヘッダー及びデータを含むフラッシュページの１実施形態の選択された細部を示す。
【図７】ヘッダー及びデータを含むフラッシュページの１実施形態の選択された細部を示す。
【図８】種々のタイプのヘッダーの１実施形態の選択された細部を示す。
【図９】マップエントリの１実施形態の選択された細部を示す。
【図１０】種々の圧縮されたマップエントリの１実施形態の選択された細部を示す。
【図１１】不揮発性メモリに対する読み出しのフローチャートを示す。
【図１２】SSDコントローラの１実施形態の選択された細部を示す。
【発明を実施するための形態】
【０００７】
本発明の１以上の実施形態の詳細な説明が、本発明の選択された細部を示す添付の図面と共に以下で提供される。本発明は、それらの実施形態に関連して説明される。それらの実施形態は、単なる例示であって、本発明は、本明細書及び図面において開示されている任意のまたは全ての実施形態に限定されず、また、それらの実施形態によって網羅されるものでもないこと、及び、本発明は、多くの代替形態、変形形態、及び等価物を含むことが理解されるべきである。説明が単調になるのを避けるために、種々の単語ラベル（「第１の」、「最後の」、「ある」、「種々の」、「更なる」、「他の」、「特定の」、「選択された」、「いくつかの」、及び、「注目すべき」を含むが、これらには限定されない）を実施形態の個別の組に適用することができる。ただし、本明細書で使用されているそれらのラベルは、品質、または、任意の形態の好みもしくは先入観を表明するのではなく、単に、それらの個別の組を便利に識別するためのものであることが意図されている。開示されているプロセスのいくつかの動作ないし処理の順番は、本発明の範囲内で変更可能である。複数の実施形態が、プロセス、方法、及び／またはプログラム命令の特徴に違いがあるように説明されているときは常に、所定のもしくは動的に決定された基準にしたがって、該複数の実施形態にそれぞれ対応する複数の動作モードの１つの静的な及び／または動的な選択を行う他の実施形態が考慮されている。本発明を十分に理解できるようにするために、以下の説明では、多くの特定の細部が説明される。それらの細部は例示のために提供されており、それらの細部の一部または全てがなくても、特許請求の範囲にしたがって本発明を実施することができる。本発明がいたずらに不明瞭にならないようにするために、本発明に関連する技術分野において既知の技術事項については詳しくは説明していない。
【０００８】
イントロダクション
このイントロダクションは、詳細な説明をより早く理解できるようにするためにのみ設けられたものであり、本発明は、このイントロダクションで提示されている（明示的な例を含む）概念には限定されない。任意のイントロダクションのパラグラフは、当然ながら主題全体を要約したものであって、説明を網羅することも、説明されていることに限定することも意図されていない。たとえば、下記のイントロダクションは、特定の実施形態に対してのみ空間及び構成によって限定された概略情報を提供する。最終的には特許請求の範囲に含まれる実施形態を含むその他の多くの実施形態が明細書の残りの部分を通じて説明されている。
【０００９】
本明細書において定義されている種々の略語（たとえば頭字語）の少なくともいくつは、本明細書で使用されている所定の要素を示している。
【表１】
0005978259.tif 000002
【００１０】
フラッシュトランスレーションレイヤ（FTS。フラッシュ変換レイヤともいう）は、（たとえば、I/Oデバイス（入出力装置）に対するI/O処理を実行するためにホストによって使用される）論理ブロックアドレス空間内の論理ブロックアドレス（LBA）を、NANDフラッシュ不揮発性メモリ（NAND Flash NVM）などの不揮発性メモリ（NVM）内の物理的位置にマッピングする。このマッピングは、マッピングユニットと呼ばれる、１以上の論理ブロックからなる整列したユニット（アラインされたユニット）に対して作用して、各マッピングユニットが、該マッピングユニットのデータが格納される対応する物理的位置を有するようにする（ただし、マッピングユニットに書き込みがされていない、すなわちマッピングユニットに変更が加えられていない場合には、物理的位置が空である可能性がある）。たとえば、４KBのマッピングユニットの場合は、８つの連続する（及び典型的には８つのセクタが整列した）SATA  ５１２バイトセクタが単一のユニットとしてマッピングされる。一般に、マップなどの変換テーブル（トランスレーションテーブル）は、マッピングユニットに関連する論理ブロックアドレスからNVM内の物理アドレスへの、及び／または、他の制御情報へのそれぞれの変換（トランスレーション）を格納するために、マッピングユニット毎に１つのエントリを有している。
【００１１】
NANDフラッシュなどの不揮発性メモリは、フラッシュページ（flash page）と呼ばれる書き込み可能な（プログラム可能な）ユニットを提供する。フラッシュページは、複数のユーザー（非ECC）データバイト、並びに、メタデータ及び誤り訂正コーディング（ECC）用のある量のもしくはかなりの量の予備の空間を含んでおり、一般に、NVMの最小の書き込み可能なユニットである。典型的なフラッシュページのサイズは、８KBまたは１６KBまたは３２KB（ユーザーデータ）であり、一方、典型的なマッピングユニットのサイズは４KBまたは８KBである（「ユーザー」データという用語が、フラッシュページに関して使用されているが、いくつかのフラッシュページは、マップデータ及び／またはチェックポイントデータなどの「システム」データを格納している。ユーザーデータは、一般に、フラッシュページの非ECC部分を指すことが意図されている）。フラッシュページは、複数のブロックに編成ないし構成され、典型的には、１ブロック当たり、１２８、２５６、または５１２個のフラッシュページが存在する。ブロックは、消去することができる最小サイズのユニットであり、フラッシュページは、該フラッシュページに（再）書き込みできるようになる前に消去されなければならない。
【００１２】
図１に示すように、従来のFTLは、フラッシュページ（たとえば、フラッシュページ１００）内のユーザーデータバイトの数（もしくはいくつかの該ユーザーデータバイト）は２の累乗（及び／または、セクタサイズの倍数）であることを前提としており、フラッシュページを、整数個のマッピングユニット（図１にそれぞれが「データ」として示されている）に分割する。たとえば、１つのフラッシュページ当たりのユーザーデータが１６KBで、マッピングユニットが４KBの場合、フラッシュページの各々は４つのマッピングユニットを含み、FTLは、マッピングユニットの各々のアドレス（たとえば、LBA[m:u]１１０）を、それぞれのフラッシュページ、及び、それぞれのフラッシュページ内の４つのマッピングユニットのうちの１つにマッピングする。すなわち、各マップエントリは、flash_page_address[n-1:0]、mapping_unit_within_flash_page[k-1:0]などのそれぞれのフィールドを含む。ここで、flash_page_addressは、NVM内の一意のフラッシュページを指し、mapping_unit_within_flash_pageは、各フラッシュページの２のｋ乗個のmapping-unit-size（マッピングユニットサイズ）部分のうちの１つを指す（ｋはNVM全体について一定である）。サブページアドレス１０４は、flash_page_addressとmapping_unit_within_flash_pageの組み合わせである。セクタベースのアドレス指定では、論理ブロックアドレスの下位側のビット（たとえば、LBA[u-1:0]１１１）は、マッピングユニット内の複数のセクタ（たとえば、サブページ１１３内の（１以上の）セクタ）などの副部分（sub-portion）を指定する。
【００１３】
概念的には、図２に示すように、可変サイズフラッシュトランスレーションレイヤ（VFTL）は、マッピングユニットのアドレス（たとえば、LBA[m:u]１１０）を、１以上のフラッシュページの可変サイズ領域にマッピングする（なぜなら、たとえば、マッピングユニットのデータは、フラッシュに格納される前に圧縮されるからであり、及び／または、別の例では、マッピングユニットは、オブジェクト格納のためなどに、可変サイズ部分としてホストによって書き込まれるからである）。しかしながら、各マップエントリに完全なバイトアドレス２０４及びバイトデータ長２０６を提供すると、従来のFTLよりもマップエントリが大きくなってしまう。
【００１４】
VFTLは、いくつかのソリッドステートディスク（SSD）で使用されている。それらのシステムは、一般的には、よりハイエンドのクライアント向け、及び／または、ランダムアクセス性能の制約が全体システム設計における要因（ドライビングファクタ）である企業用途向けに設計されている。ローエンド及び／またはモバイル環境に対してVFTLを最適化するために、要因（ドライビングファクタ）としてのシーケンシャル性能（順次または連続アクセス性能）を最適化するための変更が必要である。ユーザーデータ及びVFTLメタデータを編成ないし構成する新しいやり方は、順次読み出し性能が主たる制約である、より低コストで、より効率的なローエンドのモバイルNVMシステムを可能にする。
【００１５】
いくつかの実施形態では、VFTLは、「読み出しユニット」アドレスとも呼ばれるEpage（ECCページ）アドレスにマッピングすることによって、マッピングユニットのアドレスから物理アドレスへのマッピングを実行する。Epage（すなわち読み出しユニット）は、NVMから読み出すことができ、かつ、NVMの内容を保護するために使用されるECCコード（ECC符号）によって訂正することができる最小量のデータである。すなわち、読み出しユニットの各々は、ある量のデータ、及び、それらのデータを保護する対応するECCチェックバイトを含んでいる。いくつかの実施形態では（フラッシュページ１００などの）フラッシュページが、また、いくつかの実施形態では、書き込みのためのユニットとして扱われるフラッシュページのグループが、図３に示すように、整数個の読み出しユニットに分割される。
【００１６】
種々の実施形態において、１つのフラッシュページ当たりの読み出しユニットの数を変更することができる。たとえば、NVMのいくつかの部分は、（ECC用のフラッシュページにおいてより多くのバイトを使って）他のものより強いECCを使用し、並びに、読み出しユニットがより少なく、及び／もしくは、１つの読み出しユニット当たりの使用可能なデータがより少ない。あるいは、別の例では、１つのフラッシュページ当たりの読み出しユニットの数は、NVMが多く使用されるにしたがって変わる。なぜなら、プログラム／消去サイクルは、NVMを劣化させる傾向があるので、NVMがより多く使用される（使い尽くされる）ほど強いECCが必要とされるからである。
【００１７】
種々の実施形態によれば、使用されるECCは、リードソロモン符号（Reed-Solomon code）、BCH符号、ターボ符号（turbo code）、LDPC符号、ポーラー符号（polar code）、多元符号（non-binary code）、RAID符号（RAIDコード）、消失符号（erasure code）、任意の他の誤り訂正符号、及びそれらの符号の任意の組み合わせ（合成、連結、及びインターリーブを含む）のうちの１以上である。典型的な符号語（コードワード）のサイズは、５１２バイト（＋ECCバイト）から２１７６バイト（＋ECCバイト）の範囲内である。ECCバイトの典型的な数は、ほんの数バイトから数百バイトの範囲内である。
【００１８】
いくつかの実施形態では、図４に示すように、VFTLマッピングは、可変サイズの（たとえば圧縮された）マッピングユニットのアドレス（たとえば、LBA[m:u]１１０）を、読み出しユニットアドレス４０４及びスパン（複数の読み出しユニット）４０６としてマップのエントリの各々において表される複数の読み出しユニットにマッピングする。マップエントリの１つによって参照される読み出しユニットは、１以上の（論理的及び／または物理的に）連続するフラッシュページ内にある。すなわち、該複数の読み出しユニットは、オプションとして及び／または選択的にフラッシュページの境界を横断する。マップのエントリだけでは、関連するデータの位置を特定するのには十分ではなく（なぜなら、エントリは、読み出しユニットを指示するだけで、読み出しユニット内のデータの位置を指示しないからである）、指示された読み出しユニット内の（ヘッダーなどの）さらなる情報が、関連するデータの位置を正確に特定するために使用される。
【００１９】
いくつかの実施形態では、データは、NVMの複数のダイにわたって（ストライプ状に）細分化されてフラッシュページに書き込まれる。書き込みデータを複数のダイにわたって（ストライプ）に細分化することは、１つのフラッシュページを、１つの細片（ストライプ）につき一回だけ所与の１つのダイに単に書き込むことによって、書き込み帯域幅を大きくできる点で有利である。複数のダイを横断する細片（ストライプ）を構成するブロックは、Rblock（Rブロック）と呼ばれる。なぜなら、他の実施形態及び／または使用状況において、RAID類似の冗長性が、たとえば１つの冗長ダイを用いて、１つのRblock毎に追加されるからである。種々の実施形態において、NVMのいくつかのブロックは、欠陥を有しており、書き込み時にはスキップされ、このため、細分化（ストライプ化）によって、（不良ブロックのフラッシュページに書き込むのではなく）ダイの１つがスキップされる「ホール」が生じる場合がある。これらの実施形態では、「連続する」フラッシュページは、フラッシュページに書き込む順番によって決定される論理的な順序で連続している。
【００２０】
種々の実施形態において、図４に示すマッピングは、読み出しユニット内の可変サイズのデータの位置を特定する必要性を引き起こす。図５に示すように、各読み出しユニット（たとえば、読み出しユニット５００及び５１０）は、一組のヘッダー５０１を有しており、それらのヘッダーは、可変サイズのデータが、１以上の読み出しユニットに「タイルのように重なり合わないように並べられる」（たとえば、余分な空間がない状態で密に詰め込まれる）ときに、典型的にはハードウェアによって書き込まれる。ヘッダーは、NVMが読み取られるときに、可変サイズのデータを取り出すために、典型的には他のハードウェアによって解釈される。可変サイズのデータは、適合する論理ブロックアドレスを有するヘッダーのうちの１つのヘッダー内のそれぞれのオフセット及び長さによって特定され、データは、オプションとして及び／または選択的に、（たとえば、「データ、開始」及び「データ、続く」によって示された可変サイズのデータによって例示されているように）複数の読み出しユニットに及ぶ。
【００２１】
種々の実施形態において、ヘッダーは、リサイクリングすなわち再利用（ガーベジコレクション）の一部としても使用される。すなわち、ヘッダーに論理ブロックアドレス（または、等価的にはマッピングユニットアドレス）を含めることによって、読み出しユニット内の可変サイズのデータを見つけることが可能になり、及び、読み出しユニットのうちの特定の１つの読み出しユニットが読み出されたときに、（マップ内の論理ブロックアドレスを調べて（または探して）、該マップが、該特定の読み出しユニットの物理アドレスを依然として指示しているか、または、該読み出しユニットの別の物理アドレスを指示するように更新されているかを判定することによって）該読み出しユニット内の可変サイズのデータが、依然として有効であるかまたは上書きされているかを決定する手段が提供される。
【００２２】
いくつかの実施形態では、論理ブロックアドレスに基づいて読み出しユニットからデータを取り出すための専用のハードウェアが、ランダム読み出しに対して高い効率で動作するために必要である。該専用のハードウェアは、１以上の読み出しユニット内のヘッダーを解析して、所与の論理ブロックアドレスを有するヘッダーのうちの１つを見つけ、その後、それぞれの長さ及びオフセットを用いて関連付けられている可変サイズのデータを取り出す。しかしながら、ハードウェアベースのソリューションは（シリコン面積及び電力の点で）コストが高い。シーケンシャル性能もしくは連続性能がランダム性よりも重要なローエンド及び／またはモバイル環境の場合には、シリコン面積を小さくし、電力を節約し、及び、高いシーケンシャルスループットレート（順次スループットレート）を達成するために、VFTLに対する変更が必要である。
【００２３】
いくつかの実施形態では、順次読み出し最適化可変サイズフラッシュトランスレーションレイヤ（SRO-VFTL: Sequential-Read-OptimizedVariable-size Flash Translation Layer）は、データ内のヘッダーにギャップ（すき間）がないようにして、データをフラッシュページ（または、いくつかの実施形態では、書き込みためのユニットとして扱われるフラッシュページのグループ）にタイルのように（重ならないように）並べる。この場合、全てのヘッダーは、フラッシュページの一つの部分においてグループ化される。他の実施形態では、ヘッダーは、データをアクセスするために動的には使用されず（いくつかのVFTLではそのように動的に使用される）、再利用及び回復のためにのみ使用される。その代わり、マップのエントリは、フラッシュページ内の可変サイズの（たとえば圧縮された）データを見つけるのに必要な完全な情報を含んでいる。ヘッダーとデータをフラッシュページの異なる部分に分けることによって、ヘッダーだけを含む読み出しユニット、ヘッダーとデータの両方を含む読み出しユニット（ただし、この読み出しユニットは１つのフラッシュページに１つだけ存在する）、及び、データだけを含む読み出しユニットを提供することができる。
【００２４】
SRO-VFTLは、順次読み出しスループットに対して低コストで最適化されるが、ランダム読み出しIOP、ランダム書き込みIOP、及び、順次書き込みスループットなどの他の基準についても比較的良好に動作することができる。しかしながら、各読み出しユニットにおけるヘッダーを伴うVFTLタイプのデータタイリングなどの機能に対するハードウェア支援を除去することは、必然的に、制御プロセッサにより大きな負荷を与えることになる。
【００２５】
図６は、SRO-VFTLフラッシュページの第１の実施形態を示し、図７は、SRO-VFTLフラッシュページの第２の実施形態を示す。図６の実施形態と図７の実施形態の違いは、前のフラッシュページ６４０から継続するデータが、ヘッダーの前にあるか後にあるかである。種々の実施形態、及び、フラッシュページ内のデータの種々の配列が考慮されている。
【００２６】
種々の実施形態によれば、フラッシュページ（FP）は、下記のうちの１以上を含む。
・マスターヘッダー６１０、Rblockヘッダー６２０（たとえば、Rblock内の各ブロックの最初のページ内に追加されたヘッダー）、及び、ゼロ以上の追加のパックされたヘッダー（packed header）６３０を含むヘッダー（ただし、Rblockヘッダーはオプションとして及び／または選択的に含まれる）。
・前のフラッシュページから継続するデータ（マッピングユニットの可変サイズのデータの一部）６４０。ただし、該データはオプションとして及び／または選択的に含まれる。
・フラッシュページを満たすための、１以上のマッピングユニット６５０のパックされた（たとえば、オプションとして及び／または選択的に圧縮された）データ。該データの最後は、オプションとして及び／または選択的に、後続のフラッシュページ内へと継続する。
・フラッシュページの最後にあるオプションのパディング（６５０に含まれている）。パディングは、たとえば、
i)フラッシュページに追加された最後の可変サイズのデータ部分の後に、ヘッダーのサイズより小さい未使用バイトが残された（このため、別の可変サイズのデータ部分を開始するために新しいヘッダーを追加することができなくなった）場合、
ii)オプションとして及び／または選択的に、１つのフラッシュページ当たりの指定された数のヘッダーを超えている場合（このため、フラッシュページに格納されているマッピングユニットの数が、マッピングユニットのデータのサイズによってではなく、ヘッダーの指定された数によって制限されている）
に使用される。
【００２７】
いくつかの実施形態では、SRO-VFTLによる回復及び／または再利用（すなわちガーベジコレクション）は、非SRO-VFTLのように全ての読み出しユニットではなく、フラッシュページの各々のヘッダー部分だけを読み出し及び／または誤り訂正し及び／または検査できるようにされている点で有利である。再利用において、フラッシュページのデータを書き換えなければならないと判断された場合には、そのデータを読み出して、誤り訂正をしなければならない。いくつかの実施形態では、フラッシュページ全体が再利用のために読み出されるが、フラッシュページ内のデータを再利用する必要があるということが決定されるまでは、ヘッダー部分だけが誤り訂正される。
【００２８】
種々の実施形態では、１つのフラッシュページ当たりのヘッダーの数は、全てのヘッダーがNVMから読み出されること確保するために、読み出す必要がある１つのフラッシュページ当たりの読み出しユニットの数がある限度内にとどまるように制限される。図６の実施形態では、ヘッダーの最大数を含むのに十分な数の読み出しユニットだけを読み出さなければならない。図７の実施形態では、前のフラッシュページから続いて完了する最大サイズのデータ（たとえば、継続データ６４０）に対処するために、追加の数の読み出しユニットを読み出さなければならない。しかしながら、図７の実施形態は、前のフラッシュページから続くデータの完了部（以下、データ完了部という）にアクセスするための読み出しユニットの数（または複数の読み出しユニット）を、関連するマップエントリから決定できるようにする。なぜなら、そのデータ完了部内のバイト数は、関連するマップエントリのそれぞれのオフセット及び長さ、並びに、前のフラッシュページ内のユーザー（非ECC）データのバイト数に基づいて決定可能であるからである。さらに、そのデータ完了部に先行するヘッダーだけが、オプションの（各ブロックの最初のページなどの既知のフラッシュページにのみ存在する）Rblockヘッダー、及び、（各フラッシュページに常に存在する）マスターヘッダーである。図６の実施形態では、NVMに２回アクセスすることなくデータ完了部を読み出すためには、最大数のヘッダーが存在することが前提とされていなければならない（または、フラッシュページ全体を読み出さなければならない）。
【００２９】
いくつかの実施形態では、SRO-VFTLは、複数のマップエントリを有する単一レベルのマップを使用する。他の実施形態では、SRO-VFTLは、第２レベルマップ（SLM：Second-LevelMap）ページを指示する第１レベルマップ（FLM：First-Level Map）を有する２レベルのマップなどの多レベルのマップを使用し、この場合、第２レベルマップページの各々は複数のマップエントリを含んでいる。さらに他の実施形態では、多レベルのマップは、３レベルなどの３以上のレベルを有している。いくつかの実施形態及び／または使用状況では、多レベルのマップの使用は、マップの（たとえば使用に）関連する部分だけを、ローカルメモリ（たとえばオンチップメモリ）に格納（たとえば、キャッシュ）できるようにし、これによって、マップを維持するコストを低減することができる。たとえば、典型的な使用パターンが、任意の時点において、１ＧＢの論理ブロックアドレス空間をアクティブにする場合には、論理ブロックアドレス空間のそのアクティブな１ＧＢの部分にアクセスするのに十分なマップの部分だけが、NVMに格納する場合に比べて高速にアクセスするために局所的に格納される。論理ブロックアドレス空間のアクティブな部分の外部への参照によって、NVMから多レベルのマップの１以上のレベルのうちの必要な部分がフェッチされて（取り出されて）、オプションとして及び／または選択的に、該マップの局所的に格納されている他の部分が置き換えられる。
【００３０】
マップエントリの各々は、複数のマッピングユニットのうちの１つのマッピングユニットのアドレスに関連付けられている（対応している）。論理ブロックアドレスは、論理ブロックアドレスのゼロ以上の最下位ビット（LSB）を除去し、及び／または、整列のために論理ブロックアドレスに定数を加えることなどによって、マッピングユニットアドレスに変換され、該マッピングユニットアドレスは、対応するマップのエントリを決定するために、該マップ内で調べられる。
【００３１】
図８は、種々のタイプのヘッダーの１実施形態の詳細を示す。図８の例では、ヘッダーは、それぞれ、６バイトにぴったり収まるようにフォーマットされている。種々の実施形態によれば、種々のタイプのヘッダーは、以下のうちの１以上を満たす。
・全てが同じサイズ。
・オプションとして及び／または選択的にサイズが異なる。
・それぞれのヘッダーが、該ヘッダーのサイズを指定するそれぞれのフィールドを含む。
・異なるフラッシュページ間ではサイズが異なる。
・上記の任意の組み合わせ。
【００３２】
種々の実施形態によれば、フラッシュページ内のヘッダーは、下記のうちの１以上を含む。
・可変サイズデータ部分に関連付けられている情報を示すデータヘッダー（８１０）。いくつかの実施形態では、データヘッダーに関連付けられているデータは、該データヘッダーが現れるのと同じフラッシュページ内で開始する。他の実施形態及び／または使用状況では、あるフラッシュページだけがデータヘッダー用の残りの空間を有している場合には、関連付けられている全てのデータは、後続のフラッシュページ内で開始する。
・第２レベルマップ（SLM）ヘッダー（８２０）などのマップヘッダー。第２レベルマップヘッダーは、（第２レベルマップの再利用及び／または回復などのために）どの第２レベルマップページが格納されているかを示す第１レベルマップインデックス（FLMI）を含む。
・ログ／チェックポイントヘッダー（８２０）。ログ／チェックポイントヘッダーは、再利用、回復、エラー処理、デバッグ（デバッギング）、または他の特別な状況ないし条件で使用されるデータを示す。
・データを対応するマップ／チェックポイント情報に関連付けるための回復（処理）の一部として使用されるエポック（Epoch）ヘッダー（８３０）。典型的には、１つのフラッシュページ毎に少なくとも１つのエポックヘッダーがある。
・マスターヘッダー（８７０）。マスターヘッダー（８７０）は、フラッシュページ内のヘッダーの数に関する情報を提供するために該フラッシュページについて１回使用され、非ヘッダーデータ（ヘッダーではないデータ）は、該フラッシュページ内で開始する。図６及び図７の実施形態に示すように、非ヘッダーデータの開始を決定する種々の技術がある。
・Rblockヘッダー（８８０）。Rblockヘッダー（８８０）は、Rblockの各ブロック内の最初のフラッシュページなどの所定のフラッシュページにおいて使用される。
・パディングヘッダーやより長い長さをサポートするチェックポイントヘッダーなどの他のタイプのヘッダー（８４０）。
いくつかの実施形態では、ヘッダーのいくつかは、ヘッダーの複数のサブタイプを提供するTYPE（タイプ）フィールドを含む。種々の実施形態では、ヘッダーのいくつかは、ヘッダーに関連付けられているデータの長さを含むLEN（長さ）フィールドを含む。
【００３３】
図９は、マップエントリ９００の１実施形態の選択された細部を示している。種々の実施形態によれば、マップのエントリは、下記のうちの１以上を含む。
・物理的なフラッシュページアドレス。
・可変サイズデータ項目に対するフラッシュページ内のオフセット。
・可変サイズデータ項目の長さ。
・他の制御情報。
いくつかの実施形態では、たとえば、ゼロの値が所定の最小長に対応するようにオフセットすることによって、長さが符号化される。別の実施形態では、該所定の最小長よりも短くなるように圧縮されたデータは、そのサイズが少なくとも該所定の最小長になるまでパディングされる。
【００３４】
種々の実施形態において、SRO-VFTLマップエントリはVFTLマップエントリよりも大きい。なぜなら、SRO-VFTLマップエントリは、対応するデータの全オフセット及びバイト長（バイトで表わした長さ）を格納しているからである。したがって、マップエントリがNVMに格納されるときには、それらのマップエントリのサイズを小さくすることが有利である。典型的な用途では、データは、少なくとも、ある粒度のシーケンシャルマッピングユニット及び／または１より大きな平均数のシーケンシャルマッピングユニットでもって、しばしばシーケンシャルすなわち順次に読み出され及び書き込まれ、書き込みのシーケンシャル性（順次性）を利用するマップエントリ圧縮フォーマットは、比較的安価で実施できて、高いマップ圧縮率を達成する。マップエントリの圧縮は、フラッシュページの境界を横切るまで、シーケンシャルに書き込まれたデータが同じフラッシュページに入ることによってさらに支援される。図１０は、種々の圧縮されたマップエントリの１実施形態の選択された細部を示しており、それらは、非圧縮（１０１０）を含み、以前のマップエントリ（１０２０）と同じフラッシュページアドレス（１０２０）を有し、以前のマップエントリと同じフラッシュページアドレスであって、以前のデータが終了したオフセットで開始するフラッシュページアドレス（１０３０）を有し、及び、以前のマップエントリと同じフラッシュページアドレスであって、以前のデータが終了したオフセットで開始し、かつ以前のマップエントリと同じ長さを有するフラッシュページアドレス（１０４０）を含む。
【００３５】
多レベルのマップを有するいくつかの実施形態では、（リーフレベルなどの）より下位のレベルのマップページのキャッシュが維持される。キャッシュされたマップページは、非圧縮形態であり、プロセッサによって高速にアクセスされることができる。マップページが（NVMやDRAMなどから）キャッシュ内に移動させられるときは、それらのマップページは非圧縮である（すなわち圧縮されていない）。マップページが（たとえば変更されたために）キャッシュからフラッシュ（またはクリア）されるときは、それらのマップページは（NVMなどに）格納するために圧縮される。マップページの一部または全てをDRAMに格納することによって待ち時間を短くするために該DRAMを使用する種々の実施形態によれば、該DRAM内のマップページは、圧縮された形態と、非圧縮の形態（すなわち圧縮されていない形態）と、選択的に圧縮された形態もしくは選択的に非圧縮の形態と、DRAM内のマップページの圧縮バージョン（すなわちそれらのマップページを圧縮したもの）にアクセスするために使用される間接指定テーブル（indirection table：インダイレクションテーブルともいう）を有する形態とのうちの１以上の形態で格納される。
【００３６】
いくつかの実施形態では、ホスト書き込みコマンドのホスト書き込みデータは、該データが到着するときにオプションとして及び／または選択的に圧縮され、及び、（オンチップメモリなどの）ローカルメモリにFIFO類似のやり方で格納される。たとえば、いくつかの実施形態では、ホスト書き込みデータは、ファームウェアデータ構造、フラッシュ統計（flash statistics）、マップの１以上のページを保持するキャッシュなどのマップの一部、再利用読み出しデータを含むNVMからの読み出しデータ、NVMに書き込まれるデータのヘッダー、ファームウェアコード、及び他の使用形態と共に、統合バッファ（たとえば、図１２のUBUF）に格納される（統合バッファ（unified buffer）はユニファイドバッファともいう）。他の実施形態では、１以上の専用のメモリ（記憶装置）が、SSDの種々の局所的格納の必要性のために使用される。
【００３７】
ホストから到来するデータのマッピングユニットの各々について、SSDの制御プロセッサ（たとえば、図１２のCPU）に、それぞれのマッピングユニットアドレス、それぞれのローカルメモリアドレス、及び／または、可変サイズ（たとえば圧縮されている）ホストデータのそれぞれのマッピングユニットのそれぞれの長さ、のうちの１以上が通知される。制御プロセッサは、フラッシュページの書き込み順、及び、フラッシュページの各々で利用可能な非ECCバイトの総数を決定できるようになっている。制御プロセッサは、フラッシュページのうちの所与のフラッシュページで利用できる非ECCバイトの総数にしたがって、該所与のフラッシュページに配置されているヘッダーの量及びデータの量を決定できるようになっている。たとえば、制御プロセッサは、該所与のフラッシュページのヘッダーを累算し（及び、これまでに使用されたヘッダーのバイト数を追跡ないし把握し）、該所与のフラッシュページが一杯になるまで、マッピングユニットの可変サイズのデータ及びヘッダーを該所与のフラッシュページに一つずつ追加する。該所与のフラッシュページが一杯になると、該所与のフラッシュページに追加されたマッピングユニットの最後のマッピングユニットのデータの最後の部分は、該所与のフラッシュページに収まらなかった可能性があり、そのように収まらなかった場合には、該最後の部分は、該フラッシュページに後続するフラッシュページのデータ完了部分として使用され、これによって、該後続するフラッシュページにおいて新しいヘッダー及びデータ用に利用できる非ECCバイトの総数が少なくなる。
【００３８】
特定の時点において、１以上のフラッシュページをホスト書き込みデータで一杯にすることができ、１以上のフラッシュページを再利用データで一杯にすることができる。たとえば、「ホット」データ（ホストからのフレッシュなデータ）及び「コールド」データ（再利用データ）で満たされた少なくとも２つのバンド（FIFO類似の一連のRblock）がある。この例を続けると、種々の実施形態において、ホスト書き込みデータを、ホットバンドまたはコールドバンドのどちらかに送ることができ、再利用データを、ホットバンドまたはコールドバンドのどちらかに送ることができる。
【００３９】
制御プロセッサは、一連のそれぞれのマッピングユニットアドレス、ローカルメモリアドレス及び長さを、下記のうちの１以上に変換できるようになっている。
・フラッシュページのヘッダー部分としてフラッシュページに書き込まれる一連のヘッダー。
・フラッシュページのユーザーデータ部分として該フラッシュページに書き込まれる、ローカルメモリの連続する部分（シーケンシャルな部分）の最初の（または第１の）開始アドレス及び最初の（または第１の）長さ。
・少なくとも１つのマッピングユニットのデータの少なくとも一部を含むフラッシュページのユーザーデータ部分。
・後続のフラッシュページのユーザーデータ完了部分として該後続のフラッシュページに書き込まれる、ローカルメモリの連続する部分（シーケンシャルな部分）の２番目の（または第２の）開始アドレス及び２番目の（または第２の）長さ。
・１つのマッピングユニットのデータの一部を含むかまたは空であるユーザーデータ完了部分。
・フラッシュページに書き込まれるゼロ以上のパディングバイトの数（または該パディングバイト。ここで、パディングバイトは、たとえば、ユーザーデータ完了部分が空で、かつ、フラッシュページが一杯ではない場合に使用される。
制御プロセッサは、一連のそれぞれのマッピングユニットアドレス、ローカルメモリアドレス及び長さを、再フォーマットによって一連のヘッダーに簡単に変換できるようになっており、及び、少数のダイレクトメモリアクセス（DMA）コマンドを生成して、フラッシュページを構成する部分（一連のヘッダー、以前のフラッシュページの完了部分、ユーザーデータ部分、及び任意のパディングバイト）をNVMに転送できるようになっている点で有利である。
【００４０】
種々の実施形態において、ホスト書き込みデータの圧縮をオプションとして及び／または選択的に行うことができる。第１の例では、ホスト書き込みコマンドの情報が圧縮を選択的に可能にする。第２の例では、圧縮は、ホスト書き込みコマンドの論理ブロックアドレスの関数として選択的に可能にされる。第３の例では、圧縮は、ホスト書き込みデータの圧縮によって該ホスト書き込みデータのサイズが小さくならなかった場合には、選択的に無効（不能）にされる。圧縮が可能にされない場合には、ホスト書き込みデータは非圧縮で格納される。種々の実施形態によれば、マップのエントリは、マップの各エントリ内のそれぞれのビット及び／または各マップエントリに格納されている長さの値によって対応するデータが圧縮されているか圧縮されていないかを示す。たとえば、マッピングユニットが４KBの場合には、マップエントリにおける４KBの長さは、該マップエントリの関連するデータが圧縮されていないことを示しており、一方、４KBより小さい長さは、該関連するデータが圧縮されていることを示している。
【００４１】
いくつかの実施形態では、データは、再利用されるRblockを選択し、フラッシュページが書き込まれた順番で該Rblockのフラッシュページを読み出し、該フラッシュページのヘッダーを含んでいる読み出しユニットを単に処理し、マップ内のデータヘッダーであるヘッダーの各々の論理ブロックアドレス（または、等価的にはマッピングユニットアドレス）を調べて、該データが依然として有効であるかどうかを確かめ、及び、該データが依然として有効な場合には、該データが新しいフラッシュページの一部として再利用されるように該データをまとめる（アセンブルする）ために、適切な新しいヘッダー及びDMAコマンドを作成することによって、再利用される。その後、該新しいフラッシュページがNVMに書き込まれる。
【００４２】
図１１は、不揮発性メモリを読み出すフローチャート１１００である。非SRO-VFTLとは対照的に、読み出しユニット内（またはフラッシュページ内）のヘッダーは、読み出しデータを取り出すのに必要ではない。非SRO-VFTLとSRO-VFTLの両方とも、可変サイズのデータにアクセスできるようになっており、及び、所望の読み出しデータを含む読み出しユニットにアクセスすることだけを要するようになっている点で有利である。
【００４３】
いくつかの実施形態では、制御プロセッサ及び／または種々のハードウェアユニットは、ホストから、論理ブロックアドレス（LBA）を含む読み出しコマンドを受け取った（ステップ１１１０）ことに応答して、下記のうちの１以上を実行できるようになっている。
・該論理ブロックアドレスをマッピングユニットアドレスに変換する（ステップ１１１４）。
・複数のマップエントリを含むマップ内のマッピングユニットアドレスを調べて、それらのマップエントリのうちの関連する１つのマップエントリを決定する（ステップ１１１８）。
・該関連するマップエントリのそれぞれのフラッシュページアドレスを取り出して（ステップ１１２２）、関連するフラッシュページが、フラッシュページキャッシュ内にあるか、または、NVMから読み出す必要があるかを判定する（ステップ１１３０）。
・該関連するマップエントリからそれぞれのオフセット及び長さを取り出し、該それぞれのオフセット及び長さにしたがって、
・該関連するフラッシュページ内でアクセスする複数の読み出しユニットの数（または番号）と、
・該アクセスされた読み出しユニットのフラッシュページ内の読み出しユニットオフセット及び全読み出しユニット長（読み出しユニット全体の長さ）と、
・該アクセスされた読み出しユニットのデコード（復号）されたバージョンから、マッピングユニットアドレスに関連付けられているデータを取り出して処理する（たとえば（圧縮を）解凍する）ためのDMAコマンド
を決定する（ステップ１１２６）。
・該関連するフラッシュページがフラッシュページキャッシュ内にないと判定したことに応答して、NVMから該関連するフラッシュページの該アクセスされた読み出しユニットを読み出し（ステップ１１３４）、該アクセスされた読み出しユニットに対して誤り訂正復号（誤り訂正デコーディング）を実行して（ステップ１１３８）、訂正されたデータを生成する。
・該関連するマップエントリのそれぞれのオフセット及び長さにしたがって、該訂正されたデータ内の関連付けられたデータを取り出して、該取り出したデータを解凍する（ステップ１１４２）。
・読み出しコマンドに応答して、該解凍されたデータをホストに提供する（ステップ１１４６）。
ランダム読み出しの場合に典型的には、関連付けられたデータを読み出すために関連するフラッシュページ内でアクセスする読み出しユニット（の数）は、該関連するフラッシュページ内の全ての読み出しユニットより少ない。さらに、関連付けられたデータが可変サイズであるため、最初の（または第１の）論理ブロックアドレスを指示する最初の（または第１の）読み出しコマンドに対する、関連するフラッシュページ内でアクセスする読み出しユニットの数（または番号）は、２番目の（または第２の）論理ブロックアドレスを指示する２番目の（または第２の）読み出しコマンドに対する、関連するフラッシュページ内でアクセスする読み出しユニットの数（または番号）とは異なり、該２番目の（または第２の）論理ブロックアドレスは、該最初の（または第１の）論理ブロックアドレスとは異なる。いくつかの実施形態では、関連するフラッシュページ内でアクセスする（数の）読み出しユニットだけが、該関連するフラッシュページから読み出される。すなわち、関連付けられたデータの一部を含む読み出しユニットのうちの（少なくともいくつかの）読み出しユニットだけが、該関連付けられたデータにアクセスするために読み出される。
【００４４】
図１２は、SSDコントローラ１２００の１実施形態の選択された細部を示す。いくつかの実施形態では、SSDコントローラ１２００は、SRO-VFTLを実施できるようになっている。図１２に示すように、ホストインターフェース（HIF）は、SerDes（サーデス）などのI/O受信機を介して、読み出し及び書き込みコマンドなどのコマンドを受信し、書き込みデータを受信し、及び読み出しデータを送信する。コマンドは、共有メモリ（OpRAM）を介してCPUに送られる。CPUは、それらのコマンドを解釈して、共有メモリ（OpRAM）を介してSSDコントローラの他の部分を制御する。たとえば、CPUは、共有メモリ（OpRAM）を介して、DMAコマンドを送り、及び、Host Receive DataPath（HDRx：ホスト受信データパス）やFlash Transmit Datapath（FDTx：フラッシュ送信データパス）などの種々のデータパス送受信ユニットから応答を受け取る。
【００４５】
ホストインターフェース（HIF）からの書き込みデータは、Host Receive DataPath（HDRx）を介して統合バッファ（UBUF）へと送られる。種々の実施形態において、Host Receive DataPath（HDRx）は、ホスト書き込みデータを、オプションとして及び／または選択的に圧縮し及び／または暗号化するためのロジック（論理回路）を備える。この場合、オプションとして及び／または選択的に圧縮された及び／または暗号化されたホスト書き込みデータは、統合バッファ（UBUF）から、Flash Transmit Datapath（FDTx）及びジェネリックフラッシュインターフェース（GAFI：generic flash interface）を介してNVMへと送られる。種々の実施形態において、Flash Transmit Datapath（FDTx）は、暗号化及び／またはスクランブリング（scrambling）及び／または誤り訂正符号化を実行するためのロジック（論理回路）を備える。ホスト読み出しコマンドに応答して、データは、ジェネリックフラッシュインターフェース（GAFI）を介してNVMから読み出されて、Flash Receive Datapath（FDRx：フラッシュ受信データパス）を介して統合バッファ（UBUF）に送られる。種々の実施形態において、Flash Receive Datapath（FDRx）は、誤り訂正復号化及び／または暗号解読及び／またはデスクランブリング（de-scrambling。スクランブリングの解除）の機能を有している。他の実施形態では、別個の誤り訂正復号器（LDPC符号を実施するためのLDPC-D）が、FlashReceive Datapath（FDRx）によって統合バッファ（UBUF）に格納された「生の」データに作用できるようになっている。この場合、統合バッファ（UBUF）内の復号された読み出しデータは、Host Transmit Datapath（HDTx：ホスト送信データパス）を介してホストインターフェース（HIF）に送られる。種々の実施形態において、Host Transmit Datapath（HDTx）は、復号された読み出しデータを、オプションとして及び／または選択的に、暗号解読し及び／または解凍するためのロジック（論理回路）を備える。いくつかの実施形態では、RASP（RAID-like And Soft-decision Processing：RAID類似及び軟判定処理）ユニットが、NVMに格納されているホスト書き込みデータ及び／またはシステムデータを追加的に保護するためのRAID類似の冗長性を提供し、及び／または、LDPC-Dと共に使用するための軟判定処理を実行できるようになっている。
【００４６】
種々の実施形態によれば、制御プロセッサの処理はいずれも、１以上のCPUのうちの任意のCPU、及び／または、１以上のハードウェアユニット（ハードウェア装置）、及び／または、それらの任意の組み合わせによって実行される。たとえば、書き込みについては、一連のそれぞれのマッピングユニットアドレス、ローカルメモリアドレス及び長さの一連のヘッダーへの変換は、該一連のヘッダーのフォーマットと同じ及び／またはそれに類似のフォーマット（形式）で、該一連のそれぞれのマッピングユニットアドレス、ローカルメモリアドレス及び長さを提供するハードウェアによって支援される。
【００４７】
種々の実施形態によれば、不揮発性メモリに結合されたSSDコントローラは、下記のうちの１以上を使用できるようになっている。
・従来のFTL。
・可変サイズのFTL。
・最適化された可変サイズのFTLのシーケンシャルリード（順次読み出し）。
・不揮発性メモリの異なる物理的部分における上記の任意の組み合わせ。
・SSDコントローラの論理アドレス空間の異なる論理的部分における上記の任意の組み合わせ。
・不揮発性メモリに対する生の物理的アクセス（raw physical access。直接な物理的アクセス）。
・SSDコントローラに結合されたホストの制御下における上記の任意の組み合わせ。
【００４８】
種々の実施形態によれば、ホスト書き込みデータは、NVMに書き込まれる前にオプションとして暗号化され、NVMから読み出された後に解読（暗号解除）される。他の実施形態では、暗号化は、ホスト書き込みデータの圧縮後に行われ、解読は、ホストに返すために読み出されているデータの解凍の前に行われる。
【００４９】
例示した実施形態はSSDを用いているが、本明細書及び／または図面に記載されている技術は、一般的に、他のI/Oデバイス、及び／またはHDDなどのデータ記憶装置にも適用できる。
【００５０】
例示的な実施形態
詳細な説明のイントロダクションに続いて、一群の例示的な実施形態を示すが、それらの実施形態は、少なくともいくつかの「EC」（例の組み合わせ）のように明示的に列挙されたものを含み、本明細書及び／または図面に記載されている概念に従う種々の実施形態のタイプの追加の説明を提供するが、それらの例は、相互排他的であること、網羅的であること、及び、それらの例に限定ことのいずれも意図していない。本発明は、それらの例示的な実施形態には限定されず、特許請求の範囲及びそれの等価物の範囲内の全て可能性のある修正及び変更を包含する。
【００５１】
EC１）
方法であって、
I/Oデバイスにおいて、ホストを介してI/Oデバイスインターフェースに送られた読み出し要求を受け取るステップであって、該読み出し要求は、前記I/Oデバイスの不揮発性メモリから、該読み出し要求の論理ブロックアドレスに対応するデータを読み出すための要求である、ステップと、
前記読み出し要求を受け取ったことに応答して、
マップの複数のエントリのうちの特定のエントリを読み出して、前記不揮発性メモリの複数のページのうちの特定のページの物理アドレスと、前記読み出し要求の前記論理ブロックアドレスに対応するデータの書き込みに応答して以前に格納された圧縮データ（圧縮されているデータ）に対する前記特定のページ内のオフセットと、前記圧縮データのバイト長とを取得するステップであって、前記特定のマップエントリは、前記読み出し要求の前記論理ブロックアドレスに関連付けられている、ステップと、
前記圧縮データに対する前記特定のページ内のオフセット及び前記圧縮データのバイト長を、前記特定のページ内の複数の読み出しユニットのうちの最初の（または第１の）読み出しユニットのアドレス、及び、前記特定のページから読み出される読み出しユニットの数（または番号）に変換するステップと、
前記特定のページから前記数（または前記番号）の読み出しユニットだけを読み出すステップと、
前記特定のページから読み出した前記読み出しユニットの各々に対して誤り訂正復号（処理）を実施して、訂正されたデータを得るステップと、
前記圧縮データに対する前記特定のページ内のオフセット、及び、前記圧縮データのバイト長にしたがって、前記訂正されたデータから前記圧縮データを取り出すステップと、
前記圧縮データを解凍してリターンデータ（ホストに返すデータ）を生成するステップと、
前記リターンデータを前記ホストに返すステップ
を実行するステップ
を含む方法。
【００５２】
EC２）
方法であって、
I/Oデバイスにおいて、ホストを介してI/Oデバイスインターフェースに送られた読み出し要求を受け取るステップであって、該読み出し要求は、前記I/Oデバイスの不揮発性メモリから、該読み出し要求の論理ブロックアドレスに対応するデータを読み出すための要求である、ステップと、
前記読み出し要求を受け取ったことに応答して、
マップの複数のエントリのうちの特定のエントリを読み出して、前記不揮発性メモリの複数のページのうちの特定のページの物理アドレスと、前記読み出し要求の前記論理ブロックアドレスに対応するデータの書き込みに応答して以前に格納された圧縮データ（圧縮されているデータ）に対する前記特定のページ内のオフセットと、前記圧縮データのバイト長とを取得するステップであって、前記特定のマップエントリは、前記読み出し要求の前記論理ブロックアドレスに関連付けられている、ステップと、
前記圧縮データに対する前記特定のページ内のオフセット及び前記圧縮データのバイト長を、前記特定のページ内の複数の読み出しユニットのうちの最初の（または第１の）読み出しユニットのアドレス、及び、前記特定のページから読み出される読み出しユニットの数（または番号）に変換するステップと、
前記特定のページから前記数以上で、前記特定のページ内の全ての読み出しユニットよりは少ない数の読み出しユニットを読み出すステップと、
前記特定のページから読み出した前記読み出しユニットの各々に対して誤り訂正復号を実施して、訂正されたデータを得るステップと、
前記圧縮データに対する前記特定のページ内のオフセット、及び、前記圧縮データのバイト長にしたがって、前記訂正されたデータから前記圧縮データを取り出すステップと、
前記圧縮データを解凍してリターンデータ（ホストに返すデータ）を生成するステップと、
前記リターンデータを前記ホストに返すステップ
を実行するステップ
を含む方法。
【００５３】
EC３）読み出される読み出しユニットの数が、前記特定のページ内の全ての読み出しユニットの数よりも少ない、上記EC１またはＥ２の方法。
【００５４】
EC４）前記圧縮データに対する前記特定のページ内のオフセット及び前記圧縮データのバイト長と、前記特定のページ内のユーザーデータの量との組み合わせにしたがって、前記圧縮データの少なくとも一部が、前記不揮発性メモリの前記ページに続くページの１以上の読み出しユニットに存在するか否かを判定するステップをさらに含む、上記EC１またはＥC２の方法。
【００５５】
EC５）第２の処理ノードにおけるグローバルな冗長データの更新に応答して、該第２の処理ノードのそれぞれのローカルな冗長度計算ユニットが、前記第２の処理ノードのそれぞれのディスクのうちの少なくともいくつかに格納するために、前記グローバルな冗長データの更新のデータにしたがって、第２の冗長データを計算できるようになっている、上記EC４の方法。
【００５６】
EC６）前記不揮発性メモリの前記ページのうちの最初の（または第１の）ページは、第１の数の読み出しユニットを含み、前記不揮発性メモリの前記ページのうちの２番目の（または第２の）ページは、第２の数の読み出しユニットを含み、前記第１の数は前記第２の数とは異なる、上記EC１またはEC２の方法。
【００５７】
EC７）前記不揮発性メモリの前記ページのうちの最初の（または第１の）ページは、第１の量のユーザーデータを含み、前記不揮発性メモリの前記ページのうちの２番目の（または第２の）ページは、第２の量のユーザーデータを含み、ユーザーデータの前記第１の量はユーザーデータの前記第２の量とは異なる、上記EC１またはEC２の方法。
【００５８】
EC８）
I/Oデバイスにおいて、前記ホストを介してI/Oデバイスインターフェースに送られた書き込み要求を受け取るステップであって、該書き込み要求は、前記論理ブロックアドレスに対応するデータを書き込むための要求である、ステップと、
前記書き込み要求を受け取ったことに応答して、
前記論理ブロックアドレスに対応する前記データを圧縮して、前記論理ブロックアドレスに対応する前記データよりも小さな圧縮された書き込みデータを生成するステップと、
前記特定のページに、前記圧縮された書き込みデータの少なくとも最初の（または第１の）部分を書き込むステップと、
前記特定のエントリに、前記特定のページの物理アドレス、前記圧縮された書き込みデータに対する前記特定のページ内のオフセット、及び、前記圧縮された書き込みデータのバイト長を格納するステップ
を実施するステップ
をさらに含む、上記EC１またはEC２の方法。
【００５９】
EC９）
前記書き込みデータに対する要求を受け取ったことに応答して、前記特定のページにヘッダーを書き込むステップをさらに含む上記EC８の方法であって、前記ヘッダーは、前記要求の前記論理ブロックアドレスの少なくとも一部と前記圧縮データのバイト長とを含む、方法。
【００６０】
EC１０）
前記論理ブロックアドレスが、複数の論理ブロックアドレスのうちの最初の（または第１の）論理ブロックアドレスであり、前記数の読み出しユニットのうちの少なくとも１つが、前記論理ブロックアドレスのそれぞれに対応する少なくともいくつかのデータを含む、上記EC１またはEC２の方法。
【００６１】
EC１１）前記数の読み出しユニットのうちの少なくとも１つが、前記圧縮データの一部に加えて、１以上のヘッダーを含む、上記EC１またはEC２の方法。
【００６２】
EC１２）
方法であって、
I/Oデバイスにおいて、ホストを介してI/Oデバイスインターフェースに送られた読み出し要求を受け取るステップであって、該読み出し要求は、前記I/Oデバイスの不揮発性メモリから、該読み出し要求の論理ブロックアドレスに対応するデータを読み出すための要求である、ステップと、
前記読み出し要求を受け取ったことに応答して、
マップの複数のエントリのうちの特定のエントリを読み出して、前記不揮発性メモリの複数のページのうちの特定のページの物理アドレスと、前記読み出し要求の前記論理ブロックアドレスに対応するデータの書き込みに応答して以前に格納された可変サイズのデータ（以下、可変サイズのデータを可変サイズデータともいう）に対する前記特定のページ内のオフセットと、前記可変サイズデータのバイト長とを取得するステップであって、前記特定のマップエントリは、前記読み出し要求の前記論理ブロックアドレスに関連付けられている、ステップと、
前記可変サイズデータに対する前記特定のページ内のオフセット及び前記可変サイズデータのバイト長を、前記特定のページ内の複数の読み出しユニットのうちの最初の（または第１の）読み出しユニットのアドレス、及び、前記特定のページから読み出される読み出しユニットの数（または番号）に変換するステップと、
前記特定のページから前記数（または前記番号）の読み出しユニットだけを読み出すステップと、
前記特定のページから読み出した前記読み出しユニットの各々に対して誤り訂正復号を実施して、訂正されたデータを得るステップと、
前記可変サイズデータに対する前記特定のページ内のオフセット、及び、前記可変サイズデータのバイト長にしたがって、前記訂正されたデータから前記可変サイズデータを取り出すステップと、
前記取り出したデータを前記ホストに返すステップ
を実行するステップ
を含む方法。
【００６３】
EC１３）
I/Oデバイスにおいて、前記ホストを介してI/Oデバイスインターフェースに送られた書き込み要求を受け取るステップであって、該書き込み要求は、前記論理ブロックアドレスに対応する可変サイズデータ、及び前記可変サイズデータのサイズを書き込むための要求である、ステップと、
前記書き込み要求を受け取ったことに応答して、
前記特定のページに、前記可変サイズデータの少なくとも最初の（または第１の）部分を書き込むステップと、
前記特定のエントリに、前記特定のページの物理アドレス、前記可変サイズデータに対する前記特定のページ内のオフセット、及び、前記可変サイズデータのサイズに対応する該可変サイズデータのバイト長を格納するステップ
を実施するステップ
をさらに含む、上記EC１またはEC１２の方法。
【００６４】
例示的な実装技術
いくつかの実施形態では、複数ノードの記憶装置または該装置の（１以上の）一部、たとえば、I/OデバイスのHDDもしくはSSDコントローラによって実行される全てのまたは一部の処理の種々の組み合わせが、コンピュータシステムによる処理と互換性のある仕様によって指定され、この場合、それらのHDDもしくはSSDコントローラは、（CPUなどの）プロセッサ、（ROCチップなどのI/Oコントローラ、及び、上記の処理の全てもしくは一部を提供するプロセッサもしくはマイクロプロセッサもしくはシステムオンチップもしくは特定用途向け集積回路もしくはハードウェアアクセラレータもしくは他の回路の一部と相互運用（ないし相互作用）できるようにされている。該仕様は、ハードウェア記述言語、回路記述、ネットリスト記述、マスク記述、もしくはレイアウト記述などの種々の記述にしたがう。例示的な記述には、Verilog、VHDL、SPICE、PSpiceなどのSPICEの変形バージョン、IBIS、LEF、DEF、GDS-II、OASIS、または他の記述が含まれる。種々の実施形態において、処理には、１以上の集積回路に含めるのに適切なロジック（論理回路）及び／または回路を生成し、検証し、または指定するための解釈、コンパイル、シミュレーション、及び合成の任意の組み合わせが含まれる。種々の実施形態によれば、集積回路の各々は、種々の技術にしたがって設計可能であり及び／または製造可能である。それらの技術には、（フィールドもしくはマスクプログラマブルゲートアレイ集積回路などの）プログラム可能な技術、（完全にもしくは部分的にセルベースの集積回路などの）セミカスタム技術、（実質的に特化された集積回路などの）フルカスタム技術、それらの任意の組み合わせ、または、集積回路の設計及び／または製造と互換性のある任意の他の技術が含まれる。
【００６５】
いくつかの実施形態では、一組の命令が格納されているコンピューター可読媒体によって記述される全てもしくは一部の処理の種々の組み合わせが、１以上のプログラム命令の実行及び／または解釈によって、または、１以上のソース及び／もしくはスクリプト言語ステートメントの解釈及び／またはコンパイルによって、または、プログラミング及び／またはスクリプト言語ステートメントで表現されている、コンパイル、翻訳及び／または解釈情報によって生成されたバイナリ命令の実行によって実施される。これらのステートメントは、（Ｃ、C++、フォートラン、パスカル（Pascal）、Ada、Java、VBスクリプト、及びシェル（Shell）などの）任意の標準的なプログラミングもしくはスクリプト言語と互換性がある。それらのプログラム命令、言語ステートメント、もしくはバイナリ命令のうちの１以上は、オプションとして、１以上のコンピューター可読記憶媒体素子に格納される。種々の実施形態において、それらのプログラム命令の一部もしくは全てもしくは種々の部分は、１以上の関数、ルーチン、サブルーチン、内部（インライン）ルーチン、手続き（プロシージャ）、マクロ、もしくはそれらの一部として実現される。
【００６６】
結論
上記の説明では、単にテキスト及び図面の準備の便宜のために、いくつかの選択がされており、それらの選択は、別様であることが表示ないし示唆されていない限り、それ自体が、説明した実施形態の構造または動作に関する追加の情報を伝えるものとして解釈されるべきではない。それらの選択の例には、図面の番号付けに使用される表示の特定の編成もしくは割り当て、及び、実施形態の特徴及び要素を識別し及び参照するために使用される要素の識別情報（たとえばコールアウト（吹き出しなど）や数値表示）の特定の編成もしくは割り当てが含まれる。
【００６７】
「を備える」もしくは「備えている」という用語は、限定されない範囲の論理的な集合を記述する抽象的概念として解釈されることが明確に意図されており、「内の」もしくは「内にある」という用語が明示的に後続していない限り、物理的な限定を表すことは意図されていない。
【００６８】
上記の実施形態は、説明の明確化と理解のために幾分詳細に説明されているが、本発明は、提供したそれらの細部には限定されない。本発明の多くの実施形態がある。開示されている実施形態は例示的なものであって限定的なものではない。
【００６９】
構成、配列、及び使用に関して、上記の説明と整合する多くの変形形態が可能であり、それらは、特許請求の範囲内のものであることが理解されよう。たとえば、各構成要素ブロックにおいて、相互接続、機能ユニット、ビット幅、クロック速度、及び、使用する技術のタイプを、種々の実施形態にしたがって変更できる。相互接続及びロジック（論理回路）に付された名称は、単に例示であって、開示されている概念を限定するものとして解釈されるべきではない。フローチャート及び流れ図の処理、動作、機能要素の順番及び配列は、種々の実施形態にしたがって変更可能である。また、別様であることが明示されていない限り、指定されている値の範囲、使用されている最大値及び最小値、または、（I/Oデバイス技術のタイプ、及び、レジスタ及びバッファ内のエントリもしくはステージ（段）の数などの）他の特定の仕様は、説明した実施形態について例示したものに過ぎず、実装技術の進歩及び変化に応じて変更されることが予定されているのであって、それらに限定されるものとして解釈されるべきではない。
【００７０】
本技術分野において既知の機能的に等価な技術を、種々の構成要素、サブシステム、処理、機能、ルーチン、サブルーチン、内部（インライン）ルーチン、手続き（プロシージャ）、マクロ、または、それらの一部を実施するために説明したものの代わりに使用するこができる。また、実施形態の多くの機能的な側面は、設計上の制約、並びに、（以前はハードウェアで実現しいた機能をソフトウェアに移行するのを容易にする）高速処理化及び（以前はソフトウェアで実現していた機能をハードウェアに移行するのを容易にする）高集積密度化の技術動向に依存する実施形態の機能として、ハードウェア（たとえば、概ね専用の回路）または（たとえば、何らかのタイプのプログラムされたコントローラもしくはプロセッサを用いた）ソフトウェアにおいて選択的に実現できることが理解される。種々の実施形態における特定の変更には、異なる分割（パーティショニング）、異なる形態の要素及び構成、異なるオペレーティングシステム及び他のシステムソフトウェアの使用、異なるインターフェース規格、ネットワークプロトコル、もしくは通信リンクの使用、異なる符号化タイプの使用、及び、特定の用途の固有の工学上及び事業上の制約にしたがって、本明細書及び／または図面に開示されている概念を実施するときに予定されている他の変更が含まれる（ただし、それらには限定されない）。
【００７１】
いくつかの実施形態を、説明した実施形態の多くの側面を最小限度で実施するのに必要なものを十分に超える細部及び環境状況とともに説明した。当業者には、いくつかの実施形態では、開示されている構成要素もしくは特徴が、残りの要素間の基本的な協働を変更することなく省かれていることが理解されよう。したがって、開示されている細部の多くは、説明した実施形態の種々の側面を実施するのに必要ではない。残りの要素が先行技術と区別できる限度において、省略された構成要素及び特徴は、本明細書及び／または図面に開示されている概念を制限するものではない。
【００７２】
設計におけるそのような全ての変更は、説明した実施形態によって提供される教示に対するわずかな変更に過ぎない。本明細書及び／または図面に記載されている実施形態は、他のコンピューティング及びネットワーキングアプリケーションに広く適用可能であり、説明した実施形態の特定の用途もしくは産業には限定されないことも理解される。したがって、本発明は、特許請求の範囲に含まれる全ての可能性のある修正及び変更を含むものとして解釈されるべきである。
【図１】
0005978259.tif 000003
【図２】
0005978259.tif 000004
【図３】
0005978259.tif 000005
【図４】
0005978259.tif 000006
【図５】
0005978259.tif 000007
【図６】
0005978259.tif 000008
【図７】
0005978259.tif 000009
【図８】
0005978259.tif 000010
【図９】
0005978259.tif 000011
【図１０】
0005978259.tif 000012
【図１１】
0005978259.tif 000013
【図１２】
0005978259.tif 000014