(57)【要約】  【課題】  不揮発性メモリ（ＮＶＭ）を有する不揮発性記憶システムが、自己ジャーナリングおよび階層的整合性を提供し、低待ち時間回復および強制ユニット・アクセス・ハンドシェークを可能にする。  【解決手段】  ホストアドレスとＮＶＭ内のアドレスとの間のマッピングが、１若しくはそれ以上のマップエントリによって維持され、ＮＶＭに書き込まれたホストデータの位置特定を可能にする。ＮＶＭに記憶されたオブジェクトは、もっぱらオブジェクト自体の内部にオブジェクトを回復するのに十分な情報を含む。ＮＶＭは、１若しくはそれ以上のデータストリーム、マップストリーム、およびチェックポイントストリームとして管理される。ホストデータがデータストリームに書き込まれ、マップエントリがマップストリームに書き込まれ、マップエントリおよび他のデータ構造のチェックポイントがチェックポイントストリームに書き込まれる。ストリームに組み込まれたタイムマーカが、回復時に、ストリームの選択された部分が相互と整合性を有さず、廃棄されるべきであるという決定を可能にする。  【選択図】      図９
2014534503.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
不揮発性メモリ（ＮＶＭ）に一連のデータ単位を第１の順序で配列する手段であって、前記データ単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記データ単位を第１の順序で配列する手段と、
前記不揮発性メモリに一連のデータマップ単位を第２の順序で配列する手段であって、前記データマップ単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記データマップ単位を第２の順序で配列する手段と
を有し、
前記データマップ単位の各々は、前記不揮発性メモリ内に前記データ単位のうちの１つに対応する位置を有し、
前記データ単位の各々と関連付けられた前記各タイムスタンプの時点は、前記対応するデータマップ単位と関連付けられた前記タイムスタンプの時点と同一であるか、または当該タイムスタンプの時点より前である
システム。
【請求項２】
請求項１記載のシステムにおいて、
前記データ単位の各々は、ホストから各論理ブロックアドレス（ＬＢＡ）への各データ書き込みに対応し、
前記データ単位のうち先行するデータ単位および後続のデータ単位は、前記各論理ブロックアドレスのうち同一の論理ブロックアドレスへの先行するデータ書き込みおよび後続のデータ書き込みに対応するものであり、
前記先行するデータ単位は前記データマップ単位のうち関連付けられたデータマップ単位を有しないものである
システム。
【請求項３】
請求項１記載のシステムにおいて、さらに、
前記データ単位のうち最後に有効となり且つ連続したデータ単位を決定する手段と、
前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位を決定する手段であって、当該最後に有効となり且つ連続したデータマップ単位と関連付けられたタイムスタンプの時点は前記データ単位のうち前記最後に有効となり且つ連続したデータ単位と関連付けられたタイムスタンプの時点と同一であるか、またはそれより前である、前記データマップ単位を決定する手段と、
前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位のみを回復する手段と
を有し、
これにより、前記データ単位のうち前記最後に有効となり且つ連続したデータ単位と関連付けられた前記タイムスタンプより後のタイムスタンプに関連付けられた前記データマップ単位は全て回復時に無視されるものである
システム。
【請求項４】
システムであって、
不揮発性メモリ（ＮＶＭ）に一連のデータ記憶単位を書き込む手段であって、前記データ記憶単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記データ記憶単位を書き込む手段と、
前記不揮発性メモリに一連のデータマップ単位を書き込む手段であって、前記データマップ単位の各々は前記タイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記データマップ単位を書き込む手段と
を有し、
前記データマップ単位の各々は、前記不揮発性メモリ内に前記データ記憶単位のうちの１つに対応する位置を有し、
前記データ記憶単位の各々と関連付けられた前記各タイムスタンプは、前記対応するデータマップ単位と関連付けられた前記タイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである
システム。
【請求項５】
請求項４記載のシステムにおいて、
前記データ記憶単位のうち第１のデータ記憶単位は、ホストから特定の論理ブロックアドレス（ＬＢＡ）への第１のデータ書き込みに対応し、
前記データ記憶単位のうち第２のデータ記憶単位は、前記ホストから前記特定のＬＢＡへの第２のデータ書き込みに対応し、
前記第１のデータ書き込みは、時間の順序において、前記第２のデータ書き込みに先行するものであり、
前記データマップ単位のいずれも前記第１のデータ記憶単位に対応しないものである
システム。
【請求項６】
請求項４記載のシステムにおいて、前記データ記憶単位の書き込みは第１の順序に従うものであり、前記データマップ単位の前記書き込みは第２の順序に従うものであるシステム。
【請求項７】
請求項６記載のシステムにおいて、さらに、
前記データ記憶単位のうち最後に有効となり且つ連続したデータ記憶単位を前記第１の順序に従って決定する手段と、
前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位であって、前記タイムスタンプのうちの１つと関連付けられたデータマップ単位を前記第２の順序に従って決定する手段であって、当該タイムスタンプのうちの１つは、前記データ記憶単位のうち前記最後に有効となり且つ連続したデータ記憶単位と関連付けられたタイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである、前記第２の順序に従って決定する手段と、
前記第１の順序および前記第２の順序に従って、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位のみを回復する手段と
を有するものであるシステム。
【請求項８】
請求項６記載のシステムにおいて、さらに、
前記データ記憶単位のうち最後に有効となり且つ連続したデータ記憶単位である第１のデータ記憶単位を前記第１の順序に従って決定する手段と、
前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位であって、前記タイムスタンプのうちの１つと関連付けられたデータマップ単位を前記第２の順序に従って決定する手段であって、当該タイムスタンプのうちの１つは、前記データ記憶単位のうち前記最後に有効となり且つ連続したデータ記憶単位と関連付けられたタイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである、前記データマップ単位を第２の順序に従って決定する手段と、
前記データ記憶単位のうち最新であって、前記タイムスタンプのうちの１つと関連付けられたデータ記憶単位である第２のデータ記憶単位を前記第１の順序に従って決定する手段であって、当該タイムスタンプのうちの１つは、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位と関連付けられた前記タイムスタンプによって示される前記相対的経過時間に先行する所定の決定された量と同一、またはそれよりも先行する相対的経過時間を示すものである、前記第２のデータ記憶単位を前記第１の順序に従って決定する手段と、
前記データ記憶単位のうち前記第２のデータ記憶単位から前記第１のデータ記憶単位までのデータ単位のみを使用して、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位を前記第１の順序および前記第２の順序に従って回復する手段と
を有するものであるシステム。
【請求項９】
請求項８記載のシステムにおいて、さらに、
前記データマップ単位のうち変更され且つ以前に前記不揮発性メモリに書き込まれていなかったデータマップ単位ごとに、前記データ記憶単位のうち特定のデータ記憶単位と関連付けられたタイムスタンプと等しい最も古い更新と関連付けられたタイムスタンプを特定する手段であって、前記変更されたデータマップ単位は、前記不揮発性メモリ内に前記特定のデータ記憶単位に対応する位置を有するものである、前記特定する手段と、
以前に前記不揮発性メモリに書き込まれていなかった前記変更されたデータマップ単位の各々を、前記変更されたデータマップ単位の最も古い更新と関連付けられたタイムスタンプに続く前記決定された量よりも大きいタイムスタンプのうちの１つと関連付けられた前記データ記憶単位のうちの１つを書き込む時点で、またはそれより前に、前記不揮発性メモリに書き込む手段と
を有するものであるシステム。
【請求項１０】
システムであって、
記憶ストリームに従って不揮発性メモリ（ＮＶＭ）に複数の記憶単位を書き込む手段であって、当該記憶単位の各々はデータ部分と、当該データ部分に対応するタイムスタンプ部分とを有するものである、前記記憶単位を書き込む手段と、
マップストリームに従って前記不揮発性メモリに複数のマップ単位を書き込む手段であって、当該マップ単位の各々はエントリ部分と、当該エントリ部分に対応するタイムスタンプ部分とを有するものである、前記マップ単位を書き込む手段と
を有し、
前記各エントリ部分の少なくとも一部は、前記データ部分のうち少なくとも１つの対応するデータ部分を特定することによって、それぞれの論理ブロック（ＬＢ）が前記不揮発性メモリに書き込まれている場所を決定することを可能にし、
時間的順序は前記タイムスタンプ部分によって示され、前記記憶単位のタイムスタンプ部分および前記マップ単位のタイムスタンプ部分は、タイムスタンプの相対的順序に従って単調に増加するものであり、
前記不揮発性メモリに書き込まれた前記マップ単位のうち少なくとも１つが、１つの特定の時点で前記不揮発性メモリに書き込まれた前記記憶単位のタイムスタンプ部分のうち前記時間的順序において最も遅いものよりも遅いタイムスタンプ部分を有する少なくとも１つの特定の時点が存在するものである
システム。
【請求項１１】
請求項１０記載のシステムにおいて、前記記憶単位を書き込む手段は、前記記憶単位のタイムスタンプ部分によって示される前記時間的順序に対応する時間の順序で前記記憶単位を書き込み、前記マップ単位を書き込む手段は、前記マップ単位のタイムスタンプ部分によって示される前記時間的順序に対応する時間の順序で前記マップ単位を書き込むものであるシステム。
【請求項１２】
請求項１０記載のシステムにおいて、さらに、
チェックポイントストリームに従って前記不揮発性メモリに１若しくはそれ以上のチェックポイント単位を書き込む手段であって、当該チェックポイント単位の各々はマップ部分と当該マップ部分に対応するタイムスタンプ部分とを有するものである、前記チェックポイント単位を書き込む手段
を有し、
前記チェックポイントのタイムスタンプ部分は、前記タイムスタンプの相対的順序に従って単調に増加するものであるシステム。
【請求項１３】
請求項１、４、または１０記載のシステムにおいて、さらに、
ホストとインターフェースして前記不揮発性メモリから読み出され、かつ／または前記不揮発性メモリへ書き込まれる情報を通信する手段を有するものであるシステム。
【請求項１４】
請求項１３記載のシステムにおいて、前記インターフェースする手段は、
ユニバーサル・シリアル・バス（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ：ＵＳＢ）インターフェース規格、
コンパクトフラッシュ（登録商標）（Ｃｏｍｐａｃｔ  Ｆｌａｓｈ：ＣＦ）インターフェース規格、
マルチメディアカード（ＭｕｌｔｉＭｅｄｉａＣａｒｄ：ＭＭＣ）インターフェース規格、
組み込みＭＭＣ（ｅｍｂｅｄｄｅｄ  ＭＭＣ：ｅＭＭＣ）インターフェース規格、
サンダーボルト（Ｔｈｕｎｄｅｒｂｏｌｔ（商標））インターフェース規格、
ＵＦＳインターフェース規格、
セキュアディジタル（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ：ＳＤ）インターフェース規格、
メモリ・スティック・インターフェース規格、
ｘＤピクチャ・カード・インターフェース規格、
統合ドライブエレクトロニクス（Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ：ＩＤＥ）インターフェース規格、
シリアル・アドバンスド・テクノロジ・アタッチメント（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ：ＳＡＴＡ）インターフェース規格、
外部ＳＡＴＡ（ｅｘｔｅｒｎａｌ  ＳＡＴＡ：ｅＳＡＴＡ）インターフェース規格、
小型コンピュータ・システム・インターフェース（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ：ＳＣＳＩ）インターフェース規格、
シリアル小型コンピュータ・システム・インターフェース（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ：ＳＡＳ）インターフェース規格、
ファイバ・チャネル・インターフェース規格、
イーサネット（登録商標）（Ｅｔｈｅｒｎｅｔ（登録商標））インターフェース規格、
周辺装置相互接続エクスプレス（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ：ＰＣＩｅ）インターフェース規格
のうち１若しくはそれ以上と適合するものであるシステム。
【請求項１５】
請求項１３記載のシステムにおいて、前記ホストは、
コンピュータ、
ワークステーションコンピュータ、
サーバコンピュータ、
ストレージサーバ、
ストレージ・アタッチト・ネットワーク（Ｓｔｏｒａｇｅ  Ａｔｔａｃｈｅｄ  Ｎｅｔｗｏｒｋ：ＳＡＮ）、
ネットワーク・アタッチト・ストレージ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ：ＮＡＳ）デバイス、
ダイレクト・アタッチト・ストレージ（Ｄｉｒｅｃｔ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ：ＤＡＳ）デバイス、
ストレージアプライアンス、
パーソナルコンピュータ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ：ＰＣ）、
ラップトップコンピュータ、
ノートブックコンピュータ、
ネットブックコンピュータ、
タブレット機器またはタブレットコンピュータ、
ウルトラブックコンピュータ、
電子読み出し装置（ｅ−ｒｅａｄｅｒ）、
携帯情報端末（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ：ＰＤＡ）、
ナビゲーションンシステム、
（ハンドヘルド型）全地球測位システム（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ：ＧＰＳ）機器、
自動通信路制御システム、
自動車媒体制御システムまたはコンピュータ、
プリンタ、コピー機またはファックス機またはオールインワン機器、
販売時点（Ｐｏｉｎｔ  Ｏｆ  Ｓａｌｅ：ＰＯＳ）機器、
金銭登録機、
メディアプレーヤ、
テレビ、
メディアレコーダ、
ディジタル・ビデオ・レコーダ（Ｄｉｇｉｔａｌ  Ｖｉｄｅｏ  Ｒｅｃｏｒｄｅｒ：ＤＶＲ）、
ディジタルカメラ、
セルラハンドセット、
コードレス電話機ハンドセット、および
電子ゲーム
のうち１若しくはそれ以上を有するシステム。
【請求項１６】
請求項１５記載のシステムにおいて、さらに、
前記ホストの全部またはいずれかの部分を有するものであるシステム。
【請求項１７】
請求項１、４、または１０記載のシステムにおいて、さらに、
前記不揮発性メモリの全部または部分を有する１若しくはそれ以上のフラッシュメモリとインターフェースする手段を有するものであるシステム。
【請求項１８】
請求項１７記載のシステムにおいて、前記インターフェースする手段は、
オープンＮＡＮＤフラッシュインターフェース（Ｏｐｅｎ  ＮＡＮＤ  Ｆｌａｓｈ  Ｉｎｔｅｒｆａｃｅ：ＯＮＦＩ）、
トグルモードインターフェース、
ダブルデータレート（Ｄｏｕｂｌｅ−Ｄａｔａ−Ｒａｔｅ：ＤＤＲ）同期インターフェース、
ＤＤＲ２同期インターフェース、
同期インターフェース、および
非同期インターフェース
のうち１若しくはそれ以上と適合するものであるシステム。
【請求項１９】
請求項１７記載のシステムにおいて、前記フラッシュメモリのうち少なくとも１つは、
ＮＡＮＤフラッシュ技術記憶セル、および
ＮＯＲフラッシュ技術記憶セル
のうち１若しくはそれ以上を有するものであるシステム。
【請求項２０】
請求項１７記載のシステムにおいて、前記フラッシュメモリのうち少なくとも１つは、
シングルレベルセル（Ｓｉｎｇｌｅ−Ｌｅｖｅｌ  Ｃｅｌｌ：ＳＬＣ）フラッシュ技術記憶セル、および
マルチレベルセル（Ｍｕｌｔｉ−Ｌｅｖｅｌ  Ｃｅｌｌ：ＭＬＣ）フラッシュ技術記憶セル
のうち１若しくはそれ以上を有するものであるシステム。
【請求項２１】
請求項１７記載のシステムにおいて、さらに、
前記フラッシュメモリのうち全部または任意の１若しくはそれ以上を有するものであるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願の優先権利益の主張を、（それがある場合には、適宜）添付の出願データシート、請求、または送達状において行う。本出願の種類によって許容される範囲内で、本出願はこの参照によりあらゆる目的で以下の出願を組み込むものであり、以下の出願はすべて、発明がなされた時点において本出願と所有者を同じくするものである。
【０００２】
２０１１年１０月５日付で出願された、Ｅａｒｌ  Ｔ．ＣＯＨＥＮを筆頭発明者とする、「ＳＥＬＦ−ＪＯＵＲＮＡＬＩＮＧ  ＡＮＤ  ＨＩＥＲＡＲＣＨＩＣＡＬ  ＣＯＮＳＩＳＴＥＮＣＹ  ＦＯＲ  ＮＯＮ−ＶＯＬＡＴＩＬＥ  ＳＴＯＲＡＧＥ」という名称の、米国仮出願（整理番号第ＳＦ−１０−０６号および出願番号第６１／５４３７０７号）。
【０００３】
分野：不揮発性記憶の技術および製造における前進が、使用のコスト、収益性、性能、効率、および有用性の改善を提供するために必要とされている。
【背景技術】
【０００４】
関連技術：公知である、または周知であるものとして明記されない限り、コンテキスト、定義、または比較を目的とするものを含む本明細書における技法および概念の言及は、そのような技法または概念が以前から公知であり、あるいは先行技術の一部であることの容認と解釈すべきではない。特許、特許出願、および出版物を含む、本明細書で引用されるあらゆる参照文献は（それがある場合には）、具体的に組み込まれているか否かを問わず、あらゆる目的で、この参照によりその全体が本明細書に組み込まれるものである。
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明は多くの方法で実施されてよく、例えば、プロセス、製造品、装置、システム、組成物、ならびに、コンピュータ可読記憶媒体（ディスクといった光学的大容量記憶装置および／または磁気的大容量記憶装置、フラッシュストレージといった不揮発性記憶を有する集積回路など）や、プログラム命令が光通信リンクまたは電子通信リンク上で送られるコンピュータネットワークといったコンピュータ可読媒体として実施されてよい。詳細な説明では、上記の分野における使用のコスト、収益性、性能、効率、および有用性の改善を可能にする本発明の１若しくはそれ以上の実施形態の説明を行う。詳細な説明は、詳細な説明の残りの部分の理解を容易にするための概説を含む。概説は、本明細書で説明する概念に従うシステム、方法、製造品、およびコンピュータ可読媒体の１若しくはそれ以上の例示的実施形態を含む。結論の項でより詳細に論じるように、本発明は、発行される特許請求の範囲内のあらゆる可能な改変形態および変形形態を包含するものである。
【図面の簡単な説明】
【０００６】
【図１Ａ】図１Ａは、フラッシュメモリといった、不揮発性記憶を管理するための自己ジャーナリングおよび階層的整合性を使用するＳＳＤコントローラを含むソリッドステートディスク（Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｄｉｓｋ：ＳＳＤ）の実施形態の選択された詳細を示す図である。
【図１Ｂ】図１Ｂは、図１ＡのＳＳＤの１若しくはそれ以上のインスタンスを含むシステムの様々な実施形態の選択された詳細を示す図である。
【図２】図２は、論理ブロックアドレス（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ：ＬＢＡ）の論理ページ番号（Ｌｏｇｉｃａｌ  Ｐａｇｅ  Ｎｕｍｂｅｒ：ＬＰＮ）部分のマッピングの実施形態の選択された詳細を示す図である。
【図３】図３は、読み出し単位の量として測った長さを総体として有する、様々な読み出し単位数として編成された読み出しデータを生成するための読み出し単位アドレスのところの不揮発性メモリ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ：ＮＶＭ）へのアクセスの実施形態の選択された詳細を示す図である。
【図４Ａ】図４Ａは、読み出し単位の実施形態の選択された詳細を示す図である。
【図４Ｂ】図４Ｂは、読み出し単位の別の実施形態の選択された詳細を示す図である。
【図５】図５は、いくつかのフィールドを有するヘッダの実施形態の選択された詳細を示す図である。
【図６】図６は、複数のＮＶＭデバイスのブロック、ページ、および読み出し単位の実施形態の選択された詳細を示す図である。
【図７】図７は、Ｒ−ブロックの実施形態の選択された詳細を示す図である。
【図８】図８は、第１レベルマップ（Ｆｉｒｓｔ−Ｌｅｖｅｌ  Ｍａｐ：ＦＬＭ）および１若しくはそれ以上の第２レベルマップ（Ｓｅｃｏｎｄ−Ｌｅｖｅｌ  Ｍａｐ：ＳＬＭ）ページを有する２レベルマップによるＬＢＡのＮＶＭに記憶された論理ブロック（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋｓ：ＬＢｓ）へのマッピングの実施形態の選択された詳細を示す図である。
【図９】図９は、ＳＬＭおよびＦＬＭ情報の書き込み、ならびに様々な形の自己ジャーナリングおよびタイムスタンプ記録を含む、ホストからＮＶＭへデータの受け取りおよび書き込みの様々な実施形態の選択された詳細を示す図である。
【図１０】図１０は、ホストおよび／または再利用データ、マップ情報、ならびにチェックポイント先入れ先出し（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ：ＦＩＦＯ）部分のＮＶＭへのストリーミングの様々な実施形態の選択された詳細を示す図である。
【図１１】図１１は、例えば誤動作の後の、ＦＬＭおよびＳＬＭ情報ならびに他のＮＶＭ管理データ構造の復元および／または再構築の選択された詳細を示す図である。
【０００７】
図面中の参照番号の一覧
【表１】
2014534503.tif 000003
2014534503.tif 000004
2014534503.tif 000005
2014534503.tif 000006
2014534503.tif 000007
2014534503.tif 000008
【発明を実施するための形態】
【０００８】
本発明の１若しくはそれ以上の実施形態の詳細な説明を、以下で、本発明の選択された詳細を図示する添付の図を併用して行う。本発明を実施形態との関連で説明する。実施形態は、本明細書では、単なる例示であると理解されるものであり、本発明は、明確に、本明細書中の実施形態のいずれか若しくは全部に、またはいずれか若しくは全部によって限定されるものではなく、本発明は、多数の代替形態、改変形態、および均等物を包含するものである。説明が単調にならないように、様々な言葉によるラベル（最初の、最後の、ある一定の、様々な、別の、他の、特定の、選択の、いくつかの、目立ったなど）が実施形態のセットを区別するために適用される場合がある。本明細書で使用する場合、そのようなラベルは、明確に、質を伝えるためのものでも、いかなる形の好みや先入観を伝えるためのものでもなく、単に、別々のセットを都合よく区別するためのものにすぎない。開示するプロセスのいくつかの動作の順序は本発明の範囲内で変更可能である。多様な実施形態がプロセス、方法、および／またはプログラム命令の各特徴の差異を説明するのに使用される場合は常に、所定の、または動的に決定される基準に従って、複数の多様な実施形態にそれぞれ対応する複数の動作モードの１つの静的選択および／または動的選択を行う他の実施形態が企図されている。以下の説明では、本発明の十分な理解を提供するために、多数の具体的詳細を示す。それらの詳細は例として示すものであり、本発明は、それらの詳細の一部または全部がなくても、特許請求の範囲に従って実施されうる。わかりやすくするために、本発明に関連した技術分野で公知の技術資料は、本発明が不必要に曖昧になることのないように詳細に説明していない。
【０００９】
概説
この概説は、詳細な説明のより迅速な理解を助けるために含まれるにすぎず、本発明は、（それがある場合には、明示的な例を含む）この概説で提示される概念だけに限定されるものではなく、どんな概説の段落も、必然的に、主題全体の縮約された見方であり、網羅的な、または限定的な記述であることを意味するものではない。例えば、以下の概説は、スペースおよび編成によりある一定の実施形態だけに限定される概要情報を提供するものである。特許請求の範囲が究極的にそこに導かれることになる実施形態を含む多くの他の実施形態があり、それらを本明細書の残りの部分にわたって論じる。
【００１０】
頭字語
以下で定義する様々な省略形（頭字語など）の少なくともいくつかは、本明細書で使用するある一定の要素を指す。
【００１１】
【表２】
2014534503.tif 000009
2014534503.tif 000010
2014534503.tif 000011
ＮＶＭとしてフラッシュメモリを使用して実施されるあるＳＳＤといったある不揮発性記憶システムにおける第１の課題は、不揮発性記憶システムのＮＶＭに記憶されたデータについてのデータ完全性をどのようにして効率よく確実に提供すべきかである。第１の課題の一例は、書き込みがホスト（コンピューティングホストやインターフェースホストなど）からＳＳＤに送られたときと、書き込みに関連したすべての影響が不揮発性記憶システムのＮＶＭ（フラッシュメモリなど）に保存されたときとの間で、（例えばＳＳＤのコントローラに含まれる）不揮発性記憶システムの制御に関連したデータ構造を整合的に維持することである。例えば、書き込みと保存との合間に発生する誤動作（ＳＳＤまたはＳＳＤ内の回路のクラッシュ、電源障害、または様々な種類の障害など）が、不揮発性記憶システムがデータ完全性を保証するように（例えば１若しくはそれ以上の回復法によって）処理することを可能とされるイベントを表す。
【００１２】
第１の課題の別の例は、高可用性アプリケーション（ＦＵＡビットセットを用いたＳＡＴＡ書き込みなど）のための書き込みの効率的な処理であり、高可用性書き込み（本明細書の別の箇所では「ＦＵＡ」書き込みともいう）は、ホストによって、誤りなしでの完了後に初めて記憶システムによって完了したと確認されるよう要求される。高可用性書き込みの待ち時間が最小化されれば、より高い性能が得られることになる。ＦＵＡ以外のすべての書き込み（本明細書の別の箇所では「非ＦＵＡ」書き込みともいう）は、たとえ非ＦＵＡ書き込みのあるデータが誤動作発生の際にＮＶＭに保存されることが保証されていない場合でさえも、ある実施形態および／または使用シナリオでは、あたかも完了したかのように確認されることに留意されたい。ＳＡＳ、ＳＡＴＡ、ファイバチャネル、ＰＣＩｅ、ホストと記憶システムとの間の記憶通信を可能にする任意のプロトコルといった様々なプロトコルにおいて高可用性書き込みおよび他の種ルの書き込みをサポートする実施形態が企図されている。
【００１３】
あるＮＶＭ技術（例えばある種のＮＡＮＤフラッシュメモリ）における第２の課題は、フラッシュメモリにおけるデータの位置の確実な動的マッピングにより、ある不揮発性記憶システム（あるＳＳＤ実施態様など）に十分な性能をどのようにして確実に得るべきかである。フラッシュメモリは消去後に初めて書き込み可能になるため、動的マッピングが行われる。例えば、ＳＳＤがホストから特定のＬＢＡの書き込みを受け取るときに、新しいページ（または、ある実施形態では、１若しくはそれ以上の読み出し単位といった１若しくはそれ以上のページの１若しくはそれ以上の部分）が書き込みの書き込みデータを記憶するために割り振られる。読み出し単位の一例は、独立の低レベルＥＣＣ処理と適合するフラッシュメモリの最小部分である（例えば、単一の読み出し単位は、低レベルＥＣＣを使用して単一の読み出し単位内の誤りを訂正するのに十分な大きさである）。特定のＬＢＡを新しいページ（または１若しくはそれ以上の読み出し単位といった１若しくはそれ以上のページの部分）と関連付けるマップが、ホストから特定のＬＢＡへのその後の読み出し動作がその書き込みデータを返すように更新される。
【００１４】
ある実施形態では、動的マッピングは１レベルマップによるものである。例えば、動的マッピングは、ＬＢＡを単一の表に適用し、ＬＢＡに対応するデータが記憶されているＮＶＭ内の位置を獲得することを含む。ある実施形態では、マッピングは２レベルマップによるものである。例えば、動的マッピングは、概念的には、ＬＢＡを第１の表（ＦＬＭなど）に適用し、第２の表の一部分（ＳＬＭの一部分など）を指し示すポインタを獲得し、次いで、ＬＢＡをその部分に適用し、ＬＢＡに対応するデータが記憶されているＮＶＭ内の位置を獲得することを含む。
【００１５】
第２の課題の一例は、例えば書き込みのためのデータの書き込みとマップの更新との間に発生する誤動作の瞬間においてさえも、マップを維持し、管理することである。例えば、書き込みデータはフラッシュメモリに保存されるが、マップ（保存された書き込みデータに対応するマップへの１若しくはそれ以上の更新など）は誤動作の前にフラッシュメモリに保存されない場合には、少なくともいくつかの状況において、フラッシュメモリから保存された書き込みデータの少なくとも一部分を回復することを可能にする技法が（例えばリセットおよび／または電源の再印加の後に）行われる。ある実施形態および／または使用シナリオでは、ＦＵＡ書き込みが、書き込みデータが不揮発的に保存され次第、対応するマップ更新も不揮発的に保存されるかどうかに関わらず確認され、ある状況では性能の改善を可能にする。別の例では、マップ（またはマップへの１若しくはそれ以上の更新）がフラッシュメモリへ保存されるが、対応する書き込みデータの少なくとも一部分が（誤動作などが原因で）フラッシュメモリに保存されない場合には、マップ（またはマップの１若しくはそれ以上の更新）が、フラッシュメモリに保存されているデータと整合しないことを認識する技法が（例えばリセットおよび／または電源の再印加の後に）行われる。例えば、マップの一部分が、消去以来書き込まれていない、または対応する書き込みデータで書き込まれていないフラッシュメモリの一部分を指し示しているという決定が行われる。さらに別の例では、ＦＵＡ書き込みが、関連付けられた書き込みデータおよび対応するマップ情報（またはマップ情報への任意の更新）がフラッシュメモリに保存された後で確認される場合には、ある実施形態および／または使用シナリオでは、相対的に大きい性能ペナルティが生じる。相対的に大きい性能ペナルティは、いくつかのプロトコル（ＳＡＴＡなど）の待ち行列の制限、書き込みデータおよびマップ情報をフラッシュメモリに書き込むためのプログラミング時間、ならびに書き込み増幅を低減させるためにマップ書き込みを集約することができる能力の低下のうち１若しくはそれ以上が原因で生じる。
【００１６】
ある実施形態および／または使用シナリオでは、前述の課題のうち１若しくはそれ以上が、不揮発性記憶に適用される、例えばＳＳＤで使用される、すなわち、ＳＳＤコントローラまたはＮＶＭ（フラッシュメモリなど）コントローラによって管理される自己ジャーナリングおよび／または階層的整合性によって対処される。例えば、自己ジャーナリングと階層的整合性の組み合わせは、誤動作が生じたときにマップ情報の全部または一部を再構築することを可能にする。ある状況では、自己ジャーナリングおよび階層的整合性の技法を使用したマップ情報の再構築は、これらの技法を用いない再構築よりも効率がよい。別の例では、自己ジャーナリングと階層的整合性との組み合わせは、相対的に低待ち時間のＦＵＡハンドシェークを可能にする。
【００１７】
ある実施形態および／または使用シナリオでは、自己ジャーナリングおよび／または階層的整合性は、概念的には、ＮＶＭが管理される単位（本明細書の別の箇所で説明されるＲ−ブロックなど）、ＮＶＭ管理単位がどのようにして書き込まれるか（バンドなど）、および管理単位の書き込みがどのようにして管理されるか（ストリームとしてなど）に関連したものである。Ｒ−ブロックの一例は、ＮＶＭブロックの集合体である（例えば、ＳＳＤ内の各ＮＶＭダイからの１ブロックであり、各ブロック内のＮＶＭ位置がストライピング方式で書き込まれる）。バンドの一例は、情報が（特定の時間順などで）逐次的に書き込まれ、任意選択で、類似の属性および／または特性を有する情報が読み込まれるＲ−ブロックの集合体である。ストリームの一例は、バンド内で、情報がＮＶＭに書き込むために提示されるのと同じ順序でその情報がＮＶＭに書き込まれるように管理されるバンドである（例えば、より早くに提示される情報がより遅くに提示される情報よりも前に書き込まれる）。概念的には、ストリームとして管理されるバンドに書き込まれる情報は、ＦＩＦＯ様の方式でＮＶＭにストリームされ、時間順に編成される。特定のＮＶＭダイへの書き込みが成功するかどうかは、電源障害といったある特定のイベントが発生した場合には予測できないため、ストリームの終わりに書き込まれるデータには、ある状況では、「穴」がある。例えば、（電源障害より前の）ストリームで最後に書き込まれたダイは書き込みに成功するが、そのストリームのデータのより早い部分を有する前のダイは書き込みに成功せず、前のダイの部分に穴（無効な、訂正不能な、かつ／または欠落したデータなど）を生じる。
【００１８】
ある実施形態は複数のストリームを用いて動作する。例えば、各ストリームは、ホストデータ（ホストからの書き込みコマンドと関連付けられた書き込みデータなど）および再利用データ（ＮＶＭのより大きい連続した部分を利用できるようにするためにＮＶＭのある部分から別の部分へ移動されるデータなど）のための１若しくはそれ以上のデータストリームを含む。例えば、各ストリームは、（例えば、ＮＶＭのどこに特定のホスト書き込みデータが記憶されているか決定するのに使用される）マッピング情報のための１若しくはそれ以上のマップストリームを含む。例えば、各ストリームは、（マッピング情報や使用統計といった）ＮＶＭデータ記憶を管理するのに使用されるデータ構造の全部または一部のイメージを記憶するための１若しくはそれ以上のチェックポイントストリームを含む。
【００１９】
自己ジャーナリングは、特定のオブジェクト内で利用可能な情報だけを使用した、特定のオブジェクトと整合性を有する情報の回復を可能にする。例えば、ホストデータは、ホストデータがどのＬＢＡに対応するか特定する情報と一緒にＮＶＭに記憶される。別の例では、再利用データが、再利用データがどのＬＢＡに対応するか特定する情報と一緒にＮＶＭに記憶される。ある実施形態および／または使用シナリオでは、自己ジャーナリングは、すべてのデータが書き込まれた順序を知っていることと組み合わされて、マップ情報および他のデータ構造の遅いながらも完全な回復を可能にする。例えば、ＳＳＤのすべての（自己ジャーナルされた）データを読み出すことにより、ＬＢＡをＮＶＭ内の物理的位置と関連付けるマップの再構築が可能になる。
【００２０】
階層的整合性は、データ構造のどのバージョンが別のデータ構造のどのバージョンによって決定されるか判定することを可能にし、各バージョンは、例えば、別々に書き込まれ、かつ／またはチェックポイント設定された情報に起因するものである。例えば、データストリームはマップストリームよりも優先され、さらにマップストリームはチェックポイントストリームよりも優先される。誤動作は、ストリームからの情報が相互に対して順不同でＮＶＭに記憶される結果を生じる。情報と共にストリームに記憶されたタイムマーカ（エポックヘッダおよび／またはタイムスタンプなど）が、ＮＶＭに記憶されているストリーム情報の相対順序付けを決定することを可能にする。ある実施形態および／または使用シナリオでは、階層的整合性と組み合わされた自己ジャーナリングが、マップ情報および他のデータ構造の完全で迅速な回復を可能にする。例えば、ＬＢＡをＮＶＭ内の物理的位置と関連付けるマップの回復は、マップストリームからマップのバージョンを読み出し、マップのバージョンよりも優先されるデータストリームの部分からもっぱら獲得された更新でマップを更新することによって迅速化される。
【００２１】
ある実施形態では、階層的整合性は、ローリングチェックポイントの使用を可能にする。マップといったデータ構造のローリングチェックポイントは、別々のそれぞれの時点でのデータ構造の各部分の状態を保存し、それによって、データ構造の１より大きい数のローリングチェックポイントが保存された後で、全データ構造が保存される。動作は各ローリングチェックポイントの保存の間に続行するため、ローリングチェックポイントの各々は、データ構造のそれぞれの部分がローリングチェックポイントによって保存されたそれぞれの時点におけるデータ構造のそれぞれの部分のスナップショットである。しかし、必ずしも、全データ構造の単一の時間的整合性を有するコピーが保存されているとは限らない。ある実施形態および／または使用シナリオでは、タイムスタンプと組み合わされた階層的整合性が、ローリングチェックポイントと、データ構造を含むストリームよりも階層的に優先される他のストリーム内の情報とから、全データ構造の単一の時間的整合性を有するコピーの回復を可能にする。別の実施形態および／または使用シナリオでは、ローリングチェックポイントの使用が、例えば、待ち時間に影響を及ぼすこと、割り込みの期間および／またはチェックポイント設定に起因する通常処理の遅延を最小限に抑えることなどにより、チェックポイント設定がシステム挙動をあまり分断させないようにすることができる。
【００２２】
自己ジャーナリングおよび階層的整合性を含むコンテキストにおける回復技法は、チェックポイントをＮＶＭに記憶する（ロールする）こと、および、誤動作に応答して、記憶された（ローリング）チェックポイントを、ＬＢＡとＮＶＭ位置との対応を追跡するマッピング情報を再構築するように処理することを含む。
【００２３】
様々な実施形態では、（例えば、ホスト書き込みデータおよび再利用データを有する）データストリームのデータページ、（例えば、ＳＬＭエントリまたはＳＬＭエントリへの更新を有する）マップストリームのマップページ、ならびにＮＶＭに記憶された（例えば、ＦＬＭエントリまたはＦＬＭエントリへの更新を有する）チェックポイントストリームのチェックポイントページのうち１若しくはそれ以上が自己ジャーナリングを行う。例えば、各ページは、それらが存在する場合には、個々のデータ構造のコヒーレンシを保証するのに必要な情報を含む。しかしこれはデータ構造間の整合性を示唆するものではなく、データ構造間の整合性は、タイムマーカによって供給されるような、時間の観念を必要とする。データバンド（データページなどを含む）およびマップバンド（例えば、マップエントリおよび／または更新を含む）は、ストリームとして管理され、時間順に（少なくともストリーム内では）編成される。
【００２４】
ある実施形態および／または使用シナリオでは、ＮＶＭに記憶される（ＬＢといった）各ホストページが、ホストページの（ＬＢＡといった）ホスト・ページ・アドレスを含むヘッダと関連付けられる。よって、ホストページがＮＶＭに書き込まれている場合、（対応するヘッダからの）関連付けられたホスト・ページ・アドレスは、書き込まれたホストページがどのホストページであるか指示する。ホストページの書き込みに対応するＳＬＭエントリが（例えば、誤動作より前に）ＮＶＭに記録されなかった場合には、ホストページ自体がＳＬＭエントリを再構築するのに十分な情報（ホスト・ページ・アドレス）を含む。あるコンテキストでは、データのコンテナからデータを再構築することができることを参照整合性という。
【００２５】
ある実施形態では、階層的整合性が、別々に書き込まれ、かつ／またはチェックポイント設定された複数のデータ構造の間で、データ構造のうち最高優先度のデータ構造（またはその部分）が識別可能であるようにデータ構造の順序付けを定義する。例えば、データバンド、マップバンド、およびチェックポイントＦＩＦＯすべての整合性がとれている（例えばすべて時間順である）ときに、データバンドはマップバンドよりも優先され、マップバンドは、チェックポイントＦＩＦＯよりも優先される。
【００２６】
様々な実施形態によれば、マップは、１レベルマップ、２レベルマップ、マルチレベルマップ、直接マップ、連想マップ、およびホストプロトコルのＬＢＡをＮＶＭ内の物理的記憶アドレスと関連付ける他の手段のうち１若しくはそれ以上である。例えば、ある実施形態では、２レベルマップは、ＬＢＡの第１の関数を、複数の第２レベル・マップ・ページのうち１つのＮＶＭ内のそれぞれのアドレスと関連付ける第１レベルマップを有し、第２レベル・マップ・ページの各々は、ＬＢＡの第２の関数をＬＢＡに対応するデータのＮＶＭ内のそれぞれのアドレスと関連付ける。別の実施形態では、ＬＢＡの第１の関数およびＬＢＡの第２の関数の例は、第２レベル・マップ・ページの各々に含まれる固定数のエントリによって除算されるときに得られる商および余りである。複数の第２レベル・マップ・ページをまとめて第２レベルマップと呼ぶ。本明細書では、マップの１若しくはそれ以上のエントリという場合、それは、１レベルマップ、２レベルマップの第１レベル、２レベルマップの第２レベル、マルチレベルマップの任意のレベル、またはエントリを有する任意の他の種類のマップを含む、任意の種類のマップの１若しくはそれ以上のエントリをいう。
【００２７】
様々な実施形態によれば、第２レベルマップ（またはマルチレベルマップの低レベル）のマップページの各々は、マップページの他のものと同数のエントリを含む、マップページの少なくとも他のいくつかと異なる数のエントリを含む、マップページの他のものと同じ粒度のエントリを含む、マップページの他のものと異なる粒度のエントリを含む、すべて同じ粒度ものであるエントリを含む、複数の粒度のものであるエントリを含む、マップページの内容の書式および／またはレイアウトを指定するそれぞれのヘッダを含む、ならびにマップページのエントリを表す任意の他の書式、レイアウト、または編成を有する、のうち１若しくはそれ以上である。例えば、第１の第２レベル・マップ・ページは、１エントリ当たり４ＫＢの粒度の仕様を有し、第２の第２レベル・マップ・ページは、１エントリ当たり８ＫＢの粒度、および第１の第２レベル・マップ・ページの半数だけのエントリの仕様を有する。
【００２８】
別の実施形態では、高レベルマップのエントリは、対応する低レベル・マップページの書式および／またはレイアウト情報を含む。例えば、第１レベルマップ内のエントリの各々は、関連付けられた第２レベル・マップ・ページ内のエントリについての粒度仕様を含む。
【００２９】
ある実施形態では、マップは複数のエントリを有し、エントリの各々は、１若しくはそれ以上のＬＢＡを、ＬＢＡのデータが記憶されているＮＶＭ内のそれぞれの位置を選択的に含む情報と関連付ける。例えば、ＬＢＡは５１２Ｂのセクタを指定し、マップ内の各エントリは、ＬＢＡの並んだ８セクタ（４ＫＢ）領域と関連付けられている。
【００３０】
様々な実施形態によれば、マップのエントリの情報は、ＮＶＭ内の位置、ＮＶＭ内の読み出し単位のアドレス、ＮＶＭに記憶された関連付けられたＬＢＡのデータを獲得するために読み出すべき読み出し単位の数、ＮＶＭに記憶された関連付けられたＬＢＡのデータのサイズであって、任意選択で、かつ／または選択的に１バイトより大きい粒度を有するサイズ、関連付けられたＬＢＡのデータが切り捨てられているといった理由で、関連付けられたＬＢＡのデータがＮＶＭに存在しないという表示、関連付けられたＬＢＡのデータに適用された任意の非標準変更子を含む、関連付けられたＬＢＡのデータの属性、および関連付けられたＬＢＡのデータの任意の他のメタデータ、属性、または性質のうち１若しくはそれ以上を含む。
【００３１】
ある実施形態では、ＮＶＭ内のアドレスは、アドレスのうち１つを表すのに必要とされるビット数を低減させるために領域へグループ化される。例えば、入出力装置のＬＢＡが６４領域に分割され、ＮＶＭが、ＬＢＡ領域の各々に１つずつ、６４領域に分割される場合には、特定のＬＢＡと関連付けられたマップエントリは、必要とするアドレスビット数が６少なくて済む。というのは、ＮＶＭ内の領域のうち１つが特定のＬＢＡの領域によって決定されうるからである。様々な実施形態によれば、ＬＢＡの領域とＮＶＭの領域との間の関連付けは、同等性、１対１数値関数といった直接的関連付け、表ルックアップ、動的マッピング、および２セットの数を関連付ける任意の他の方法のうち１若しくはそれ以上によるものである。
【００３２】
様々な実施形態では、ＮＶＭ内の位置は、複数の読み出し単位のうち１つのアドレス、ならびに読み出し単位での長さおよび／または範囲を含む。長さは、ＮＶＭに記憶された複数のデータ項目のうち特定の１つのサイズであり、マップのエントリと関連付けられた特定のデータ項目は長さを含む。様々な実施形態によれば、長さは、１バイト、１より大きいバイト、１読み出し単位、読み出し単位の指定された小部分、データ項目のうち１つの最大許容圧縮率に従った粒度、および記憶使用量を追跡するのに使用される任意の他の粒度のうち１若しくはそれ以上の粒度を有する。範囲は、特定のデータ項目のそれぞれの部分を記憶する、整数の読み出し単位といった読み出し単位の数である。別の実施形態および／または使用シナリオでは、読み出し単位の範囲内の最初の読み出し単位および／または読み出し単位の範囲内の最後の読み出し単位は、任意選択で、かつ／または選択的に、データ項目のうち複数のデータ項目の一部または全部を記憶する。ある実施形態および／または使用シナリオでは、長さおよび／または範囲は、例えば、長さ（長さおよび／または範囲が符号化されるコンテキストではサイズともいう）を範囲からのオフセットとして記憶することによって、符号化されて記憶される。ある実施形態および／または使用シナリオでは、長さおよび／または範囲の未使用の符号化が、非標準変更子の指示や、関連付けられたデータ項目がＮＶＭに存在するかどうかについての指示といった追加情報を符号化する。
【００３３】
ＮＶＭ内の位置をアドレスおよび長さとして符号化することにより、ＮＶＭに記憶されたデータをサイズ変更することが可能になる。例えば、第１の４ＫＢ領域は４００Ｂのサイズに圧縮され、全体が単一の読み出し単位に記憶され、１読み出し単位の長さを有し、他方第２の４ＫＢ領域は圧縮不能であり、１より大の読み出し単位にまたがり、１より大の読み出し単位の長さを有する。別の実施形態では、ＬＢＡの領域と関連付けられた記憶の読み出し単位での長さおよび／または範囲を有することにより、ＮＶＭの必要な部分だけを読み出すことでＬＢＡの領域のデータを検索することを可能にする。
【００３４】
ある実施形態では、マップのエントリの各々は、エントリと関連付けられたＬＢＡの領域の属性を指定する、メタデータともいう情報を含む。別の実施形態では、メタデータの少なくとも一部は、例えば、領域の複数のＬＢＡの各々について別々のメタデータ仕様を有することによって、領域の粒度より細かい粒度ものである。様々な実施形態によれば、メタデータは、領域と関連付けられたＮＶＭ内のデータに適用可能な、かつ／または領域と関連付けられたＮＶＭ内のデータの書き込み、データへのアクセス、データの読み出し、および／若しくはデータの再利用を変更し、かつ／または制御するのに使用されるべき１若しくはそれ以上の非標準変更子を含む。
【００３５】
例示的実施形態
詳細な説明の概説を終えるにあたり、以下に、例示的実施形態をまとめて示す。これらの例示的実施形態は、少なくとも一部は「ＥＣ」（Ｅｘａｍｐｌｅ  Ｃｏｍｂｉｎａｔｉｏｎｓ：ＥＣｓ）として明示的に列挙されたものを有し、本明細書で説明する概念に従った様々な種類の実施形態の詳細な説明を提供するものである。これらの例は、相互排他的であることも、網羅的であることも、限定的であることも意図されておらず、本発明は、これらの例示的実施形態だけに限定されるものではなく、発行される特許請求の範囲およびその均等物の範囲内のすべての可能な改変形態および変形形態を包含するものである。
【００３６】
ＥＣ１）方法であって、
不揮発性メモリ（ＮＶＭ）に一連のデータ単位を第１の順序で配列する工程であって、前記データ単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記データ単位を第１の順序で配列する工程と、
前記不揮発性メモリに一連のデータマップ単位を第２の順序で配列する工程であって、前記データマップ単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記データマップ単位を第２の順序で配列する工程と
を有し、
前記データマップ単位の各々は、前記不揮発性メモリ内に前記データ単位のうちの１つに対応する位置を有し、
前記データ単位の各々と関連付けられた前記各タイムスタンプの時点は、前記対応するデータマップ単位と関連付けられたタイムスタンプの時点と同一であるか、またはそれより前である
方法。
【００３７】
ＥＣ２）ＥＣ１記載の方法において、
前記データ単位の各々は、ホストから各論理ブロックアドレス（ＬＢＡ）への各データ書き込みに対応し、
前記データ単位のうち先行するデータ単位および後続のデータ単位は、前記各論理ブロックアドレスのうち同一の論理ブロックアドレスへの先行するデータ書き込みおよび後続のデータ書き込みに対応するものであり、
前記先行するデータ単位は前記データマップ単位のうち関連付けられたデータマップ単位を有しない方法。
【００３８】
ＥＣ３）ＥＣ１記載の方法において、さらに、電源障害の後に、
前記データ単位のうち最後に有効となり且つ連続したデータ単位を決定する工程と、
前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位を決定する工程であって、当該最後に有効となり且つ連続したデータマップ単位と関連付けられたタイムスタンプの時点は、前記データ単位のうち前記最後に有効となり且つ連続したデータ単位と関連付けられたタイムスタンプの時点と同一であるか、またはそれより前である、前記データマップ単位を決定する工程と、
データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位のみを回復する工程と
を有し、
これにより、前記データ単位のうち前記最後に有効となり且つ連続したデータ単位と関連付けられた前記タイムスタンプより後のタイムスタンプと関連付けられたデータマップ単位は全て回復時に無視されるものである
方法。
【００３９】
ＥＣ４）ＥＣ１記載の方法において、データ単位はデータ記憶単位である方法。
【００４０】
ＥＣ５）方法であって、
不揮発性メモリ（ＮＶＭ）に一連のデータ記憶単位を書き込む工程であって、前記データ記憶単位の各々は複数のタイムスタンプのうちの１つとそれぞれと関連付けられているものである、前記データ記憶単位を書き込む工程と、
前記不揮発性メモリに一連のデータマップ単位を書き込む工程であって、前記データマップ単位の各々は前記タイムスタンプのうちの１つとそれぞれと関連付けられているものである、前記データマップ単位を書き込む工程と
を有し、
前記データマップ単位の各々は、前記不揮発性メモリ内に前記データ記憶単位のうちの１つに対応する位置を有し、
前記データ記憶単位の各々と関連付けられた前記各タイムスタンプは、前記対応するデータマップ単位と関連付けられた前記タイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである、
方法。
【００４１】
ＥＣ６）ＥＣ５記載の方法において、前記データ記憶単位を書き込む工程は第１の順序に従うものであり、前記データマップ単位を書き込む工程は第２の順序に従うものである方法。
【００４２】
ＥＣ７）ＥＣ５記載の方法において、前記データ記憶単位は不揮発性メモリ内で第１の順序に従って配列され、前記データマップ単位は不揮発性メモリ内で第２の順序に従って配置されるものである方法。
【００４３】
ＥＣ８）ＥＣ１、ＥＣ６、またはＥＣ７記載の方法において、第１の順序は第２の順序と異なる方法。
【００４４】
ＥＣ９）ＥＣ５記載の方法において、
前記データ記憶単位のうち第１のデータ記憶単位は、ホストから特定の論理ブロックアドレスへの第１のデータ書き込みに対応し、
前記データ記憶単位のうち第２のデータ記憶単位は、ホストから特定の論理ブロックアドレスへの第２のデータ書き込みに対応し、
前記第１のデータ書き込みは、時間的順序において前記第２のデータ書き込みに先行し、
前記データマップ単位はいずれも前記第１のデータ記憶単位に対応しないものである方法。
【００４５】
ＥＣ１０）ＥＣ６記載の方法において、さらに、所定のイベントの後に、
前記データ記憶単位のうち最後に有効となり且つ連続したデータ記憶単位を前記第１の順序に従って決定する工程と、
前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位であって、前記タイムスタンプのうちの１つと関連付けられたデータマップ単位を前記第２の順序に従って決定する工程であって、当該タイムスタンプのうちの１つは、前記データ記憶単位のうち前記最後に有効となり且つ連続したデータ記憶単位と関連付けられたタイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである、前記第２の順序に従って決定する工程と、
前記第１の順序および前記第２の順序に従って、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位のみを回復する工程と
を有するものである方法。
【００４６】
ＥＣ１１）ＥＣ６記載の方法において、さらに、
前記データ記憶単位のうち最後に有効となり且つ連続したデータ記憶単位である第１のデータ記憶単位を第１の順序に従って決定する工程と、
前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位であって、前記タイムスタンプのうちの１つと関連付けられたデータマップ単位を前記第２の順序に従って決定する工程であって、当該タイムスタンプのうちの１つは、前記データ記憶単位のうち前記最後に有効となり且つ連続したデータ記憶単位と関連付けられたタイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである、前記データマップ単位を第２の順序に従って決定する工程と、
前記データ記憶単位のうち最新であって、前記タイムスタンプのうちの１つと関連付けられたデータ記憶単位である第２のデータ記憶単位を前記第１の順序に従って決定する工程であって、当該タイムスタンプのうちの１つは、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位と関連付けられた前記タイムスタンプによって示される前記相対的経過時間に先行する所定の決定された量と同一、またはそれよりも先行する相対的経過時間を示すものである、前記第２のデータ記憶単位を前記第１の順序に従って決定する工程と、
前記データ記憶単位のうち前記第２のデータ記憶単位から前記第１のデータ記憶単位までのデータ単位のみを使用して、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位を前記第１の順序および前記第２の順序に従って回復する工程と
を有するものである方法。
【００４７】
ＥＣ１２）ＥＣ１１記載の方法において、さらに、
前記データマップ単位のうち変更され且つ以前に前記不揮発性メモリに書き込まれていなかったデータマップ単位ごとに、前記データ記憶単位のうち特定のデータ記憶単位と関連付けられたタイムスタンプと等しい最も古い更新と関連付けられたタイムスタンプを特定する工程であって、前記変更されたデータマップ単位は、前記不揮発性メモリ内に前記特定のデータ記憶単位に対応する位置を有するものである、前記特定する工程と、
以前に前記不揮発性メモリに書き込まれていなかった前記変更されたデータマップ単位の各々を、前記変更されたデータマップ単位の最も古い更新と関連付けられたタイムスタンプに続く前記決定された量よりも大きいタイムスタンプのうちの１つと関連付けられた前記データ記憶単位のうちの１つを書き込む時点で、またはそれより前に、前記不揮発性メモリに書き込む工程と
を有するものである方法。
【００４８】
ＥＣ１３）ＥＣ１０記載の方法において、さらに、
回復する工程において、前記データ記憶単位のうち前記最後に有効となり且つ連続したデータ記憶単位のタイムスタンプによって示される相対的経過時間よりも若い相対的経過時間を示するタイムスタンプを有するデータマップ単位を全て無視する工程を
有するものである方法。
【００４９】
ＥＣ１４）ＥＣ１０記載の方法において、イベントは誤動作を含むものである方法。
【００５０】
ＥＣ１５）ＥＣ１４記載の方法において、誤動作は、
電源障害、
クラッシュ、および
回路障害
のうち１若しくはそれ以上を含む方法。
【００５１】
ＥＣ１６）ＥＣ４またはＥＣ５記載の方法において、データマップ単位のうち少なくとも２つは同位置を有し、当該同位置は、前記データ単位のうち少なくとも２つのデータ単位の同位置と同一である方法。
【００５２】
ＥＣ１７）ＥＣ４またはＥＣ５記載の方法において、さらに、
前記データ記憶単位のうち少なくとも一部と共に、データ記憶単位と関連付けられたそれぞれのタイムスタンプを記憶する工程と、データマップ単位のうち少なくとも一部と共に、データマップ単位と関連付けられたそれぞれのタイムスタンプを記憶する工程とを有するものである方法。
【００５３】
ＥＣ１８）ＥＣ４またはＥＣ５記載の方法において、データ記憶単位の各々とそれぞれのデータ記憶単位のそれぞれのタイムスタンプとの関連付けが不揮発性メモリを読み出すことによって決定されるように、データ記憶単位のそれぞれのタイムスタンプのうち十分なタイムスタンプがデータ記憶単位と共に記憶される方法。
【００５４】
ＥＣ１９）ＥＣ４またはＥＣ５記載の方法において、データ記憶単位のそれぞれのタイムスタンプのうち少なくとも一部の各々は、関連付けられたデータ記憶単位と共に不揮発性メモリに記憶される方法。
【００５５】
ＥＣ２０）ＥＣ４またはＥＣ５記載の方法において、データマップ単位の各々とそれぞれのデータマップ単位のそれぞれのタイムスタンプとの関連付けが不揮発性メモリを読み出すことによって決定されるように、データマップ単位のそれぞれのタイムスタンプのうち十分なタイムスタンプがデータマップ単位と共に記憶される方法。
【００５６】
ＥＣ２１）ＥＣ４またはＥＣ５記載の方法において、データマップ単位のそれぞれのタイムスタンプのうち少なくとも一部の各々は、関連付けられたデータマップ単位と共に不揮発性メモリに記憶される方法。
【００５７】
ＥＣ２２）ＥＣ４またはＥＣ５記載の方法において、データ記憶単位のうち特定のデータ記憶単位は、特定のデータ記憶単位と関連付けられたそれぞれのタイムスタンプと共に不揮発性メモリに記憶され、データマップ単位のうち特定のデータマップ単位は、特定のデータマップ単位と関連付けられたそれぞれのタイムスタンプと共に不揮発性メモリに記憶される方法。
【００５８】
ＥＣ２３）方法であって、
記憶ストリームに従って不揮発性メモリ（ＮＶＭ）に複数の記憶単位を書き込む工程であって、当該記憶単位の各々はデータ部分と、当該データ部分に対応するタイムスタンプ部分とを有するものである、前記記憶単位を書き込む工程と、
マップストリームに従って前記不揮発性メモリに複数のマップ単位を書き込む工程であって、当該マップ単位の各々はエントリ部分と、当該エントリ部分に対応するタイムスタンプ部分とを有するものである、前記マップ単位を書き込む工程と
を有し、
前記エントリ部分のうち少なくとも一部は、前記データ部分のうち少なくとも１つの対応するデータ部分を特定することによって、それぞれの論理ブロック（ＬＢ）が前記不揮発性メモリに書き込まれている場所を決定することを可能にし、
時間的順序は前記タイムスタンプ部分によって示され、前記記憶単位のタイムスタンプ部分および前記マップ単位のタイムスタンプ部分は、タイムスタンプの相対的順序に従って単調に増加するものであり、
前記不揮発性メモリに書き込まれたマップ単位のうち少なくとも１つが、前記不揮発性メモリに書き込まれた前記記憶単位のタイムスタンプ部分のうち前記時間的順序において最も遅いものよりも遅いタイムスタンプ部分を有する少なくとも１つの特定の時点が存在するものである
方法。
【００５９】
ＥＣ２４）ＥＣ２３記載の方法において、前記記憶単位の書き込む工程は、前記記憶単位のタイムスタンプ部分によって示される時間的順序に対応する時間の順序で記憶単位を書き込むものであり、前記マップ単位の書き込む工程は、前記マップ単位のタイムスタンプ部分によって示される時間的順序に対応する時間の順序で前記マップ単位を書き込むものである方法。
【００６０】
ＥＣ２５）ＥＣ２３記載の方法において、さらに、
チェックポイントストリームに従って前記不揮発性メモリに１若しくはそれ以上のチェックポイント単位を書き込む工程であって、当該チェックポイント単位の各々はマップ部分と、当該マップ部分に対応するタイムスタンプ部分とを有するものである、前記チェックポイント書き込む工程
を有し、
前記チェックポイントのタイムスタンプ部分は、前記タイムスタンプの相対的順序に従って単調に増加するものである
方法。
【００６１】
ＥＣ２６）ＥＣ２５記載の方法において、前記チェックポイント単位の書き込む工程は、前記チェックポイントのタイムスタンプ部分によって示される時間的順序に対応する時間の順序でチェックポイント単位を書き込むものである方法。
【００６２】
ＥＣ２７）ＥＣ２５記載の方法において、所定数のチェックポイント単位の連続したグループは、エントリ部分が従うマップの少なくとも１つの全体のチェックポイントを有する方法。
【００６３】
ＥＣ２８）ＥＣ２７記載の方法において、さらに、
マップ部分および／またはチェックポイント単位のタイムスタンプ部分のうち１若しくはそれ以上の１若しくはそれ以上の部分に少なくとも一部は基づいてマップを復元する工程
を有するものである方法。
【００６４】
ＥＣ２９）ＥＣ２８記載の方法において、復元する工程は、さらに、エントリ部分および／またはマップ単位のタイムスタンプ部分のうち１若しくはそれ以上の１若しくはそれ以上の部分に少なくとも一部は基づくものである方法。
【００６５】
ＥＣ３０）ＥＣ２９記載の方法において、復元する工程は、さらに、データ部分および／または記憶単位のタイムスタンプ部分のうち１若しくはそれ以上の１若しくはそれ以上の部分に少なくとも一部は基づくものである方法。
【００６６】
ＥＣ３１）ＥＣ３０記載の方法において、データ部分の各々は、それぞれの１若しくはそれ以上のデータ単位と、それぞれの対応する１若しくはそれ以上のヘッダとを有し、ヘッダの各々は、データ単位のうちそれぞれの対応するデータ単位と論理ブロックのうち１つとの間のそれぞれのマッピングを特定し、マッピングは、論理ブロックのうちそれぞれの論理ブロックがデータ単位のうちそれぞれのデータ単位として不揮発性メモリのどこに書き込まれているか決定することを可能にし、復元する工程は、さらに、不揮発性メモリに書き込まれた記憶単位に含まれるそれぞれのヘッダのうち１若しくはそれ以上に少なくとも一部は基づくものである方法。
【００６７】
ＥＣ３２）ＥＣ３１に記載の方法において、エントリ部分のうち特定のエントリ部分はそれぞれの論理ブロックのそれぞれのデータ部分を決定し、それぞれのデータ単位はヘッダのうち特定のヘッダを有し、特定のヘッダは、データ単位のうち特定のデータ単位と特定のエントリ部分のそれぞれの論理ブロックとの間のそれぞれのマッピングを特定する方法。
【００６８】
ＥＣ３３）ＥＣ２７記載の方法において、マップは１レベルマップである方法。
【００６９】
ＥＣ３４）ＥＣ３３記載の方法において、さらに、
マップの少なくとも一部分をキャッシュに入れ、かつ／またはバッファに入れる工程
を有するものであり、
マップ部分の少なくとも１つの少なくとも一部は、キャッシュに入れる工程および／またはバッファに入れる工程に従ったものである方法。
【００７０】
ＥＣ３５）ＥＣ２７記載の方法において、マップは、第１レベルマップと第２レベルマップとを有する２レベルマップであり、マップ部分は第１レベルマップの部分に対応し、エントリ部分は第２レベルマップのエントリに対応する方法。
【００７１】
ＥＣ３６）ＥＣ３５記載の方法において、さらに、
第１レベルマップおよび／または第２レベルマップの少なくとも一部分をキャッシュに入れ、かつ／またはバッファに入れる工程
を有するものであり、
マップ部分およびエントリ部分の少なくとも１つの少なくとも一部は、キャッシュに入れる工程および／またはバッファに入れる工程に従ったものである方法。
【００７２】
ＥＣ３７）ＥＣ２７記載の方法において、前記マップ部分の各々は、それぞれのマップ部分の対応するタイムスタンプ部分よりも時間的順序において早い対応するタイムスタンプ部分を有するエントリ部分のすべてと一致するものである方法。
【００７３】
ＥＣ３８）ＥＣ２５記載の方法において、１つの特定の時点は第１の特定の時点であり、前記不揮発性メモリに書き込まれたチェックポイント単位のうち少なくとも１つが、第２の特定の時点で前記不揮発性メモリに書き込まれた前記マップ単位のタイムスタンプ部分のうち時間的順序において最も遅いものよりも遅いタイムスタンプ部分を有する少なくとも１つの第２の特定の時点が存在するものである方法。
【００７４】
ＥＣ３９）ＥＣ２５記載の方法において、１つの特定の時点は第１の特定の時点であり、前記不揮発性メモリに書き込まれた前記チェックポイント単位のうち少なくとも１つが、第２の特定の時点で前記不揮発性メモリに書き込まれた前記記憶単位のタイムスタンプ部分のうち前記時間的順序において最も遅いものよりも遅いタイムスタンプ部分を有する少なくとも１つの第２の特定の時点が存在するものである方法。
【００７５】
ＥＣ４０）ＥＣ２３記載の方法において、前記複数の記憶単位は第１の複数の記憶単位であり、前記記憶ストリームは第１の記憶ストリームであり、さらに、
前記第２の記憶ストリームに従って前記不揮発性メモリに第２の複数の記憶単位を書き込む工程であって、前記第２の記憶単位の各々はデータ部分と、当該データ部分に対応するタイムスタンプ部分とを有し、前記第２の記憶単位のタイムスタンプ部分は、タイムスタンプの相対的順序に従って単調に増加するものである、前記第２の記憶単位を書き込む工程
を有するものである方法。
【００７６】
ＥＣ４１）ＥＣ４０記載の方法において、前記第２の記憶単位の書き込む工程は、前記第２の記憶単位のタイムスタンプ部分によって示される時間的順序に対応する時間の順序で第２の記憶単位を書き込むものである方法。
【００７７】
ＥＣ４２）ＥＣ４０記載の方法において、前記第２の記憶単位のうち少なくとも１つは、時間的順序において２つの前記第１の記憶単位の間に書き込まれ、前記少なくとも１つの第２の記憶単位のタイムスタンプ部分は、時間的順序において２つの前記第１の記憶単位のタイムスタンプ部分の間にある方法。
【００７８】
ＥＣ４３）ＥＣ４０記載の方法において、第１の複数の記憶単位のデータ部分のうち少なくとも１つは、ホストデータ書き込みコマンドと関連付けられたホストからのホストデータを有し、第２の複数の記憶単位のデータ部分のうち少なくとも１つは、再利用動作に応答して不揮発性メモリから読み出された再利用データを有する方法。
【００７９】
ＥＣ４４）ＥＣ２３記載の方法において、タイムスタンプ部分は、比較されるタイムスタンプ部分の数値比較により時間的順序に従ってタイムスタンプ部分を比較することを可能にするように符号化されている方法。
【００８０】
ＥＣ４５）ＥＣ４４記載の方法において、数値比較は、比較されるタイムスタンプ部分の１若しくはそれ以上の連続した最上位のビットを無視する方法。
【００８１】
ＥＣ４６）ＥＣ４４記載の方法において、比較される記憶単位のタイムスタンプ部分のうち特定のタイムスタンプ部分が、比較されるマップ単位のタイムスタンプ部分のうち特定のタイムスタンプと数値的に同一である場合には、比較は、タイムスタンプ部分が同一であるときには、比較される記憶単位のタイムスタンプ部分は比較されるマップ単位のタイムスタンプ部分よりも早いという事前の決定によって判定される方法。
【００８２】
ＥＣ４７）ＥＣ４６記載の方法において、数値的に同一であることは、比較されるタイムスタンプ部分の１若しくはそれ以上の連続した最上位のビットを無視するものである方法。
【００８３】
ＥＣ４８）ＥＣ２３記載の方法において、エントリ部分の各々は、それぞれのエントリ部分の対応するタイムスタンプ部分よりも時間的順序によれば早い対応するタイムスタンプ部分を有するデータ部分のすべてと一致するものである方法。
【００８４】
ＥＣ４９）ＥＣ２３記載の方法において、記憶単位の各々は原子的に書き込まれる方法。
【００８５】
ＥＣ５０）ＥＣ２３記載の方法において、マップ単位の各々は原子的に書き込まれる方法。
【００８６】
ＥＣ５１）ＥＣ２３記載の方法において、データ部分のうち少なくとも１つは、ホストデータ書き込みコマンドと関連付けられたホストからのホストデータを有する方法。
【００８７】
ＥＣ５２）ＥＣ２３記載の方法において、データ部分のうち少なくとも１つは、再利用動作に応答して不揮発性メモリから読み出された再利用データを有する方法。
【００８８】
ＥＣ５３）ＥＣ２３記載の方法において、データ部分の各々は、それぞれの１若しくはそれ以上のデータ単位と、それぞれの対応する１若しくはそれ以上のヘッダとを有し、ヘッダの各々は、データ単位のうちそれぞれの対応するデータ単位と論理ブロックのうち１つとの間のそれぞれのマッピングを特定し、マッピングは、論理ブロックのうちそれぞれの論理ブロックがデータ単位のうちそれぞれのデータ単位として不揮発性メモリのどこに書き込まれているか決定することを可能にする方法。
【００８９】
ＥＣ５４）ＥＣ５３記載の方法において、ヘッダの各々は不揮発性メモリにおいて連続して書き込まれ、それぞれのデータ単位はそれぞれのヘッダによって特定される方法。
【００９０】
ＥＣ５５）ＥＣ２、ＥＣ９、ＥＣ４３、またはＥＣ５１記載の方法において、さらに、
データ書き込みに従ってホストとインターフェースする工程
を有するものである方法。
【００９１】
ＥＣ５６）ＥＣ５５記載の方法において、インターフェースする工程は記憶インターフェース規格と適合する方法。
【００９２】
ＥＣ５７）ＥＣ２、ＥＣ９、ＥＣ４３、またはＥＣ５１記載の方法において、ホストはコンピューティングホストであり、さらに、
データ書き込みに従ってコンピューティングホストを動作させる工程
を有するものである方法。
【００９３】
ＥＣ５８）ＥＣ１、ＥＣ５、またはＥＣ２３記載の方法において、不揮発性メモリは１若しくはそれ以上のフラッシュメモリを有する方法。
【００９４】
ＥＣ５９）ＥＣ５８記載の方法において、さらに、
フラッシュ・メモリ・インターフェースによりフラッシュメモリとインターフェースする工程
を有するものである方法。
【００９５】
ＥＣ６０）命令のセットを格納する有形のコンピュータ可読媒体であって、当該命令セットは処理要素によって実行されると、当該処理要素に、
不揮発性メモリ（ＮＶＭ）に一連のデータ単位を第１の順序で配列する工程であって、前記データ単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記配列する工程と、
前記不揮発性メモリに一連のデータマップ単位を第２の順序で配列する工程であって、前記データマップ単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられたものである、前記配列する工程と
を有する動作を実行させ、および／または制御させるものであり、
前記データマップ単位の各々は、前記不揮発性メモリ内に前記データ単位のうちの１つに対応する位置を有し
前記データ単位の各々と関連付けられた前記各タイムスタンプの時点は、前記対応するデータマップ単位と関連付けられた前記タイムスタンプの時点と同一であるか、または当該タイムスタンプの時点より前である
有形のコンピュータ可読媒体。
【００９６】
ＥＣ６１）ＥＣ６０記載の有形のコンピュータ可読媒体において、
前記データ単位の各々は、ホストから各論理ブロックアドレス（ＬＢＡ）への各データ書き込みに対応し、
前記データ単位のうち先行するデータ単位および後続のデータ単位は、前記各論理ブロックアドレスのうち同一の論理ブロックアドレスへの先行するデータ書き込みおよび後続のデータ書き込みに対応するものであり、
前記先行するデータ単位は前記データマップ単位のうち関連付けられたデータマップ単位を有しないものである
有形のコンピュータ可読媒体。
【００９７】
ＥＣ６２）ＥＣ６０記載の有形のコンピュータ可読媒体において、前記動作は、さらに、
電源障害の後に、前記データ単位のうち最後に有効となり且つ連続したデータ単位を決定する工程と、
電源障害の後に、前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位を決定する工程であって、当該最後に有効となり且つ連続したデータマップ単位と関連付けられたタイムスタンプの時点は前記データ単位のうち前記最後に有効となり且つ連続したデータ単位と関連付けられたタイムスタンプの時点と同一であるか、またはそれより前である、、前記データマップ単位を決定する工程と、
前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位のみを回復する工程と
を有するものであり、
これにより、前記データ単位のうち前記最後に有効となり且つ連続したデータ単位と関連付けられた前記タイムスタンプより後のタイムスタンプに関連付けられた前記データマップ単位は全て回復時に無視されるものである
有形のコンピュータ可読媒体。
【００９８】
ＥＣ６３）ＥＣ６０記載の有形のコンピュータ可読媒体において、データ単位はデータ記憶単位である有形のコンピュータ可読媒体。
【００９９】
ＥＣ６４）命令のセットを格納する有形のコンピュータ可読媒体であって、当該命令セットは処理要素によって実行されると、当該処理要素に、
不揮発性メモリ（ＮＶＭ）において一連のデータ記憶単位を書き込む工程であって、前記データ記憶単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記データ記憶単位を書き込む工程と、
前記不揮発性メモリに一連のデータマップ単位を書き込む工程であって、前記データマップ単位の各々は前記タイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記データマップ単位を書き込む工程と
を有する動作を実行させ、および／または制御させるものであり、
前記データマップ単位の各々は、前記不揮発性メモリ内に前記データ記憶単位のうちの１つに対応する位置を有し、
前記データ記憶単位の各々と関連付けられた前記各タイムスタンプは、前記対応するデータマップ単位と関連付けられた前記タイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである
有形のコンピュータ可読媒体。
【０１００】
ＥＣ６５）ＥＣ６４記載の有形のコンピュータ可読媒体において、前記データ記憶単位の書き込む工程は第１の順序に従ったものであり、前記データマップ単位の書き込む工程は第２の順序に従ったものである有形のコンピュータ可読媒体。
【０１０１】
ＥＣ６６）ＥＣ６４記載の有形のコンピュータ可読媒体において、前記データ記憶単位は不揮発性メモリ内で第１の順序に従って配列され、前記データマップ単位は不揮発性メモリ内で第２の順序に従って配置されるものである有形のコンピュータ可読媒体。
【０１０２】
ＥＣ６７）ＥＣ６０、ＥＣ６５、またはＥＣ６６記載の有形のコンピュータ可読媒体において、前記第１の順序は前記第２の順序と異なる有形のコンピュータ可読媒体。
【０１０３】
ＥＣ６８）ＥＣ６４記載の有形のコンピュータ可読媒体において、
前記データ記憶単位のうち第１のデータ記憶単位は、ホストから特定の論理ブロックアドレスへの第１のデータ書き込みに対応し、
前記データ記憶単位のうち第２のデータ記憶単位は、ホストから特定の論理ブロックアドレスへの第２のデータ書き込みに対応し、
前記第１のデータ書き込みは、時間の順序において、前記第２のデータ書き込みに先行するものであり、
前記データマップ単位のいずれも前記第１のデータ記憶単位に対応しないものである
有形のコンピュータ可読媒体。
【０１０４】
ＥＣ６９）ＥＣ６５記載の有形のコンピュータ可読媒体において、前記動作は、さらに、
イベントの後に、前記データ記憶単位のうち最後に有効となり且つ連続したデータ記憶単位を前記第１の順序に従って決定する工程と、
イベントの後に、前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位であって、前記タイムスタンプのうちの１つと関連付けられたデータマップ単位を前記第２の順序に従って決定する工程であって、当該タイムスタンプのうちの１つは、前記データ記憶単位のうち前記最後に有効となり且つ連続したデータ記憶単位と関連付けられたタイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである、前記第２の順序に従って決定する工程と、
前記第１の順序および前記第２の順序に従って、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位のみを回復する工程と
を有するものである有形のコンピュータ可読媒体。
【０１０５】
ＥＣ７０）ＥＣ６５記載の有形のコンピュータ可読媒体において、前記動作は、さらに、
前記データ記憶単位のうち最後に有効となり且つ連続したデータ記憶単位である第１のデータ記憶単位を前記第１の順序に従って決定する工程と、
前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位であって、前記タイムスタンプのうちの１つと関連付けられたデータマップ単位を前記第２の順序に従って決定する工程であって、当該タイムスタンプのうちの１つは、前記データ記憶単位のうち前記最後に有効となり且つ連続したデータ記憶単位と関連付けられたタイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである、前記第２の順序に従って決定する工程と、
前記データ記憶単位のうち最新であって、前記タイムスタンプのうちの１つと関連付けられたデータ記憶単位である第２のデータ記憶単位を前記第１の順序に従って決定する工程であって、当該タイムスタンプのうちの１つは、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位と関連付けられた前記タイムスタンプによって示される前記相対的経過時間に先行する所定の決定された量と同一、またはそれよりも先行する相対的経過時間を示すものである、前記第２のデータ記憶単位を前記第１の順序に従って決定する工程と、
前記データ記憶単位のうち前記第２のデータ記憶単位から前記第１のデータ記憶単位までのデータ単位のみを使用して、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位を前記第１の順序および前記第２の順序に従って回復する工程と
を有するものである有形のコンピュータ可読媒体。
【０１０６】
ＥＣ７１）ＥＣ７０記載の有形のコンピュータ可読媒体において、前記動作は、さらに、
前記データマップ単位のうち変更され且つ以前に前記不揮発性メモリに書き込まれていなかったデータマップ単位ごとに、前記データ記憶単位のうち特定のデータ記憶単位と関連付けられたタイムスタンプと等しい最も古い更新と関連付けられたタイムスタンプを特定する工程であって、前記変更されたデータマップ単位は、前記不揮発性メモリ内に前記特定のデータ記憶単位に対応する位置を有するものである、前記特定する工程と、
以前に前記不揮発性メモリに書き込まれていなかった前記変更されたデータマップ単位の各々を、前記変更されたデータマップ単位の最も古い更新と関連付けられたタイムスタンプに続く前記決定された量よりも大きいタイムスタンプのうちの１つと関連付けられた前記データ記憶単位のうちの１つを書き込む時点で、またはそれより前に、前記不揮発性メモリに書き込む工程と
を有するものである有形のコンピュータ可読媒体。
【０１０７】
ＥＣ７２）ＥＣ６９記載の有形のコンピュータ可読媒体において、前記動作は、回復する工程に関して、データ記憶単位のうち最後に有効となり且つ連続したデータ記憶単位のそれぞれのタイムスタンプによって示される相対的経過時間よりも若い相対的経過時間を指示するそれぞれのタイムスタンプを有するデータマップ単位のうちいずれも無視する工程をさらに有するものである有形のコンピュータ可読媒体。
【０１０８】
ＥＣ７３）ＥＣ６９記載の有形のコンピュータ可読媒体において、イベントは誤動作を有する有形のコンピュータ可読媒体。
【０１０９】
ＥＣ７４）ＥＣ７３記載の有形のコンピュータ可読媒体において、誤動作は、
電源障害、
クラッシュ、および
回路障害
のうち１若しくはそれ以上を有する有形のコンピュータ可読媒体。
【０１１０】
ＥＣ７５）ＥＣ６３またはＥＣ６４記載の有形のコンピュータ可読媒体において、データマップ単位のうち少なくとも２つは同じ位置を有し、同じ位置は、データ単位のうち少なくとも２つのそれぞれのデータ単位の同じ位置である有形のコンピュータ可読媒体。
【０１１１】
ＥＣ７６）ＥＣ６３またはＥＣ６４記載の有形のコンピュータ可読媒体において、前記動作は、データ記憶単位のうち少なくとも一部と共に、データ記憶単位と関連付けられたそれぞれのタイムスタンプを記憶する工程と、データマップ単位のうち少なくとも一部と共に、データマップ単位と関連付けられたそれぞれのタイムスタンプを記憶する工程とをさらに有するものである有形のコンピュータ可読媒体。
【０１１２】
ＥＣ７７）ＥＣ６３またはＥＣ６４記載の有形のコンピュータ可読媒体において、データ記憶単位の各々とそれぞれのデータ記憶単位のそれぞれのタイムスタンプとの関連付けが不揮発性メモリを読み出すことによって決定されるように、データ記憶単位のそれぞれのタイムスタンプのうち十分なタイムスタンプがデータ記憶単位と共に記憶される有形のコンピュータ可読媒体。
【０１１３】
ＥＣ７８）ＥＣ６３またはＥＣ６４記載の有形のコンピュータ可読媒体において、データ記憶単位のそれぞれのタイムスタンプのうち少なくとも一部の各々は、関連付けられたデータ記憶単位と共に不揮発性メモリに記憶される有形のコンピュータ可読媒体。
【０１１４】
ＥＣ７９）ＥＣ６３またはＥＣ６４記載の有形のコンピュータ可読媒体において、データマップ単位の各々とそれぞれのデータマップ単位のそれぞれのタイムスタンプとの関連付けが不揮発性メモリを読み出すことによって決定されるように、データマップ単位のそれぞれのタイムスタンプのうち十分なタイムスタンプがデータマップ単位と共に記憶される有形のコンピュータ可読媒体。
【０１１５】
ＥＣ８０）ＥＣ６３またはＥＣ６４記載の有形のコンピュータ可読媒体において、データマップ単位のそれぞれのタイムスタンプのうち少なくとも一部の各々は、関連付けられたデータマップ単位と共に不揮発性メモリに記憶される有形のコンピュータ可読媒体。
【０１１６】
ＥＣ８１）ＥＣ６３またはＥＣ６４記載の有形のコンピュータ可読媒体において、データ記憶単位のうち特定のデータ記憶単位は、特定のデータ記憶単位と関連付けられたそれぞれのタイムスタンプと共に不揮発性メモリに記憶され、データマップ単位のうち特定のデータマップ単位は、特定のデータマップ単位と関連付けられたそれぞれのタイムスタンプと共に不揮発性メモリに記憶される有形のコンピュータ可読媒体。
【０１１７】
ＥＣ８２）命令のセットを格納する有形のコンピュータ可読媒体であって、当該命令セットは処理要素によって実行されると、当該処理要素に、
記憶ストリームに従って不揮発性メモリ（ＮＶＭ）に複数の記憶単位を書き込む工程であって、当該記憶単位の各々はデータ部分と、当該データ部分に対応するタイムスタンプ部分とを有するものである、前記記憶単位を書き込む工程と、
マップストリームに従って前記不揮発性メモリに複数のマップ単位を書き込む工程であって、当該マップ単位の各々はエントリ部分と、当該エントリ部分に対応するタイムスタンプ部分とを有するものである、前記マップ単位を書き込む工程と
を有する動作を実行させ、および／または制御させるものであり、
前記各エントリ部分の少なくとも一部は、前記データ部分のうち少なくとも１つの対応するデータ部分を特定することによって、それぞれの論理ブロック（ＬＢ）が前記不揮発性メモリに書き込まれている場所を決定することを可能にし、
時間的順序は前記タイムスタンプ部分によって示され、前記記憶単位のタイムスタンプ部分および前記マップ単位のタイムスタンプ部分は、タイムスタンプの相対的順序に従って単調に増加するものであり、
前記不揮発性メモリに書き込まれた前記マップ単位のうち少なくとも１つが、１つの特定の時点で前記不揮発性メモリに書き込まれた前記記憶単位のタイムスタンプ部分のうち前記時間的順序において最も遅いものよりも遅いタイムスタンプ部分を有する少なくとも１つの特定の時点が存在するものである
有形のコンピュータ可読媒体。
【０１１８】
ＥＣ８３）ＥＣ８２記載の有形のコンピュータ可読媒体において、前記記憶単位の書き込む工程は、前記記憶単位のタイムスタンプ部分によって示される時間的順序に対応する時間の順序で記憶単位を書き込み、前記マップ単位の書き込む工程は、前記マップ単位のタイムスタンプ部分によって示される前記時間的順序に対応する時間の順序で前記マップ単位を書き込むものである有形のコンピュータ可読媒体。
【０１１９】
ＥＣ８４）ＥＣ８２記載の有形のコンピュータ可読媒体において、前記動作は、さらに、
チェックポイントストリームに従って前記不揮発性メモリに１若しくはそれ以上のチェックポイント単位を書き込む工程であって、当該チェックポイント単位の各々はマップ部分と当該マップ部に対応するタイムスタンプ部分とを有するものである、前記書き込む工程を有し、
前記チェックポイントのタイムスタンプ部分は、タイムスタンプの相対的順序に従って単調に増加するものである
有形のコンピュータ可読媒体。
【０１２０】
ＥＣ８５）ＥＣ８４記載の有形のコンピュータ可読媒体において、チェックポイント単位の書き込む工程は、チェックポイントのタイムスタンプ部分によって示される時間的順序に対応する時間の順序でチェックポイント単位を書き込む有形のコンピュータ可読媒体。
【０１２１】
ＥＣ８６）ＥＣ８４記載の有形のコンピュータ可読媒体において、所定数のチェックポイント単位の連続したグループは、エントリ部分が従うマップの少なくとも１つの全体のチェックポイントを有する有形のコンピュータ可読媒体。
【０１２２】
ＥＣ８７）ＥＣ８６記載の有形のコンピュータ可読媒体において、前記動作は、マップ部分および／またはチェックポイント単位のタイムスタンプ部分のうち１若しくはそれ以上の１若しくはそれ以上の部分に少なくとも一部は基づいてマップを復元する工程をさらに有するものである有形のコンピュータ可読媒体。
【０１２３】
ＥＣ８８）ＥＣ８７記載の有形のコンピュータ可読媒体において、復元する工程は、さらに、エントリ部分および／またはマップ単位のタイムスタンプ部分のうち１若しくはそれ以上の１若しくはそれ以上の部分に少なくとも一部は基づくものである有形のコンピュータ可読媒体。
【０１２４】
ＥＣ８９）ＥＣ８８記載の有形のコンピュータ可読媒体において、復元する工程は、さらに、データ部分および／または記憶単位のタイムスタンプ部分のうち１若しくはそれ以上の１若しくはそれ以上の部分に少なくとも一部は基づくものである有形のコンピュータ可読媒体。
【０１２５】
ＥＣ９０）ＥＣ８９記載の有形のコンピュータ可読媒体において、データ部分の各々は、それぞれの１若しくはそれ以上のデータ単位と、それぞれの対応する１若しくはそれ以上のヘッダとを有し、ヘッダの各々は、データ単位のうちそれぞれの対応するデータ単位と論理ブロックのうち１つとの間のそれぞれのマッピングを特定し、マッピングは、論理ブロックのうちそれぞれの論理ブロックがデータ単位のうちそれぞれのデータ単位として不揮発性メモリのどこに書き込まれているか決定することを可能にし、復元する工程は、さらに、不揮発性メモリに書き込まれた記憶単位に含まれるそれぞれのヘッダのうち１若しくはそれ以上に少なくとも一部は基づくものである有形のコンピュータ可読媒体。
【０１２６】
ＥＣ９１）ＥＣ９０記載の有形のコンピュータ可読媒体において、エントリ部分のうち特定のエントリ部分はそれぞれの論理ブロックのそれぞれのデータ部分を決定し、それぞれのデータ単位はヘッダのうち特定のヘッダを有し、特定のヘッダは、データ単位のうち特定のデータ単位と特定のエントリ部分のそれぞれの論理ブロックとの間のそれぞれのマッピングを特定する有形のコンピュータ可読媒体。
【０１２７】
ＥＣ９２）ＥＣ８６記載の有形のコンピュータ可読媒体において、マップは１レベルマップである有形のコンピュータ可読媒体。
【０１２８】
ＥＣ９３）ＥＣ９２記載の有形のコンピュータ可読媒体において、前記動作は、マップの少なくとも一部分をキャッシュに入れ、かつ／またはバッファに入れる工程をさらに有するものであり、マップ部分の少なくとも１つの少なくとも一部は、キャッシュに入れる工程および／またはバッファに入れる工程に従ったものである有形のコンピュータ可読媒体。
【０１２９】
ＥＣ９４）ＥＣ８６記載の有形のコンピュータ可読媒体において、マップは、第１レベルマップと第２レベルマップとを有する２レベルマップであり、マップ部分は第１レベルマップの部分に対応し、エントリ部分は第２レベルマップのエントリに対応する有形のコンピュータ可読媒体。
【０１３０】
ＥＣ９５）ＥＣ９４記載の有形のコンピュータ可読媒体において、前記動作は、第１レベルマップおよび／または第２レベルマップの少なくとも一部分をキャッシュに入れ、かつ／またはバッファに入れる工程をさらに有するものであり、マップ部分およびエントリ部分の少なくとも１つの少なくとも一部は、キャッシュに入れる工程および／またはバッファに入れる工程に従ったものである有形のコンピュータ可読媒体。
【０１３１】
ＥＣ９６）ＥＣ８６記載の有形のコンピュータ可読媒体において、マップ部分の各々は、それぞれのマップ部分の対応するタイムスタンプ部分よりも時間的順序によれば早い対応するタイムスタンプ部分を有するエントリ部分のすべてと一致するものである有形のコンピュータ可読媒体。
【０１３２】
ＥＣ９７）ＥＣ８４記載の有形のコンピュータ可読媒体において、１つの特定の時点は第１の特定の時点であり、不揮発性メモリに書き込まれたチェックポイント単位のうち少なくとも１つが、第２の特定の時点に不揮発性メモリに書き込まれたマップ単位のタイムスタンプ部分のうち時間的順序によれば最も遅いものよりも時間的順序によれば遅いタイムスタンプ部分を有する少なくとも１つの第２の特定の時点がある有形のコンピュータ可読媒体。
【０１３３】
ＥＣ９８）ＥＣ８４記載の有形のコンピュータ可読媒体において、１つの特定の時点は第１の特定の時点であり、不揮発性メモリに書き込まれたチェックポイント単位のうち少なくとも１つが、第２の特定の時点に不揮発性メモリに書き込まれた記憶単位のタイムスタンプ部分のうち時間的順序によれば最も遅いものよりも時間的順序によれば遅いタイムスタンプ部分を有する少なくとも１つの第２の特定の時点がある有形のコンピュータ可読媒体。
【０１３４】
ＥＣ９９）ＥＣ８２記載の有形のコンピュータ可読媒体において、複数の記憶単位は第１の複数の記憶単位であり、記憶ストリームは第１の記憶ストリームであり、さらに、
第２の記憶ストリームに従って不揮発性メモリに第２の複数の記憶単位を書き込む工程であって、第２の記憶単位の各々がデータ部分と対応するタイムスタンプ部分を有し、第２の記憶単位のタイムスタンプ部分が、前記タイムスタンプの相対的順序に従って単調に増加する、書き込む工程
を有するものであるある有形のコンピュータ可読媒体。
【０１３５】
ＥＣ１００）ＥＣ９９記載の有形のコンピュータ可読媒体において、第２の記憶単位の書き込む工程は、第２の記憶単位のタイムスタンプ部分によって示される時間的順序に対応する時間の順序で第２の記憶単位を書き込む有形のコンピュータ可読媒体。
【０１３６】
ＥＣ１０１）ＥＣ９９記載の有形のコンピュータ可読媒体において、第２の記憶単位のうち少なくとも１つは、第１の記憶単位のうち２つの間に時間の順序で書き込まれ、少なくとも１つの第２の記憶単位のタイムスタンプ部分は、時間的順序によれば２つの第１の記憶単位のタイムスタンプ部分の間にある有形のコンピュータ可読媒体。
【０１３７】
ＥＣ１０２）ＥＣ９９記載の有形のコンピュータ可読媒体において、第１の複数の記憶単位のデータ部分のうち少なくとも１つは、ホストデータ書き込みコマンドと関連付けられたホストからのホストデータを有し、第２の複数の記憶単位のデータ部分のうち少なくとも１つは、再利用工程に応答して不揮発性メモリから読み出された再利用データを有する有形のコンピュータ可読媒体。
【０１３８】
ＥＣ１０３）ＥＣ８２記載の有形のコンピュータ可読媒体において、タイムスタンプ部分は、比較されるタイムスタンプ部分の数値比較により時間的順序に従ってタイムスタンプ部分を比較することを可能にするように符号化されている有形のコンピュータ可読媒体。
【０１３９】
ＥＣ１０４）ＥＣ１０３記載の有形のコンピュータ可読媒体において、数値比較は、比較されるタイムスタンプ部分の１若しくはそれ以上の連続した最上位のビットを無視する有形のコンピュータ可読媒体。
【０１４０】
ＥＣ１０５）ＥＣ１０３記載の有形のコンピュータ可読媒体において、比較される記憶単位のタイムスタンプ部分のうち特定のタイムスタンプ部分が、比較されるマップ単位のタイムスタンプ部分のうち特定のタイムスタンプと数値的に同一である場合には、比較は、タイムスタンプ部分が同一であるときには、比較される記憶単位のタイムスタンプ部分は比較されるマップ単位のタイムスタンプ部分よりも早いという事前の決定によって判定される有形のコンピュータ可読媒体。
【０１４１】
ＥＣ１０６）ＥＣ１０５記載の有形のコンピュータ可読媒体において、数値的に同一であることは、比較されるタイムスタンプ部分の１若しくはそれ以上の連続した最上位のビットを無視するものである有形のコンピュータ可読媒体。
【０１４２】
ＥＣ１０７）ＥＣ８２記載の有形のコンピュータ可読媒体において、エントリ部分の各々は、それぞれのエントリ部分の対応するタイムスタンプ部分よりも時間的順序によれば早い対応するタイムスタンプ部分を有するデータ部分のすべてと一致するものである有形のコンピュータ可読媒体。
【０１４３】
ＥＣ１０８）ＥＣ８２記載の有形のコンピュータ可読媒体において、記憶単位の各々は原子的に書き込まれる有形のコンピュータ可読媒体。
【０１４４】
ＥＣ１０９）ＥＣ８２記載の有形のコンピュータ可読媒体において、マップ単位の各々は原子的に書き込まれる有形のコンピュータ可読媒体。
【０１４５】
ＥＣ１１０）ＥＣ８２記載の有形のコンピュータ可読媒体において、データ部分のうち少なくとも１つは、ホストデータ書き込みコマンドと関連付けられたホストからのホストデータを有する有形のコンピュータ可読媒体。
【０１４６】
ＥＣ１１１）ＥＣ８２記載の有形のコンピュータ可読媒体において、データ部分のうち少なくとも１つは、再利用工程に応答して不揮発性メモリから読み出された再利用データを有する有形のコンピュータ可読媒体。
【０１４７】
ＥＣ１１２）ＥＣ８２記載の有形のコンピュータ可読媒体において、データ部分の各々は、それぞれの１若しくはそれ以上のデータ単位と、それぞれの対応する１若しくはそれ以上のヘッダとを有し、ヘッダの各々は、データ単位のうちそれぞれの対応するデータ単位と論理ブロックのうち１つとの間のそれぞれのマッピングを特定し、マッピングは、論理ブロックのうちそれぞれの論理ブロックがデータ単位のうちそれぞれのデータ単位として不揮発性メモリのどこに書き込まれているか決定することを可能にする有形のコンピュータ可読媒体。
【０１４８】
ＥＣ１１３）ＥＣ１１２記載の有形のコンピュータ可読媒体において、ヘッダの各々は不揮発性メモリに連続して書き込まれ、それぞれのデータ単位はそれぞれのヘッダによって特定される有形のコンピュータ可読媒体。
【０１４９】
ＥＣ１１４）ＥＣ６１、ＥＣ６８、ＥＣ１０２、またはＥＣ１１０記載の有形のコンピュータ可読媒体において、前記動作は、データ書き込みに従ってホストとインターフェースする工程をさらに有するものである有形のコンピュータ可読媒体。
【０１５０】
ＥＣ１１５）ＥＣ１１４記載の有形のコンピュータ可読媒体において、インターフェースする工程は記憶インターフェース規格と適合する有形のコンピュータ可読媒体。
【０１５１】
ＥＣ１１６）ＥＣ６１、ＥＣ６８、ＥＣ１０２、またはＥＣ１１０記載の有形のコンピュータ可読媒体において、ホストはコンピューティングホストであり、コンピューティングホストはデータ書き込みに従って動作する有形のコンピュータ可読媒体。
【０１５２】
ＥＣ１１７）ＥＣ６０、ＥＣ６４、またはＥＣ８２記載の有形のコンピュータ可読媒体において、不揮発性メモリは１若しくはそれ以上のフラッシュメモリを有する有形のコンピュータ可読媒体。
【０１５３】
ＥＣ１１８）ＥＣ１１７記載の有形のコンピュータ可読媒体において、前記動作は、フラッシュ・メモリ・インターフェースによりフラッシュメモリとインターフェースする工程をさらに有するものである有形のコンピュータ可読媒体。
【０１５４】
ＥＣ１１９）装置であって、
不揮発性メモリ（ＮＶＭ）に一連のデータ単位を第１の順序で配列することが可能な第１のハードウェア論理回路であって、前記データ単位の各々は複数のタイムスタンプのうちの１つと関連付けられているものである、前記第１のハードウェア論理回路と、
前記不揮発性メモリに一連のデータマップ単位を第２の順序で配列することが可能な第２のハードウェア論理回路であって、前記データマップ単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記第２のハードウェア論理回路と
を有し、
前記データマップ単位の各々は、前記不揮発性メモリ内に前記データ単位のうちの１つに対応する位置を有し、
前記データ単位の各々と関連付けられた前記各タイムスタンプの時点は、前記対応するデータマップ単位と関連付けられた前記タイムスタンプの時点と同一であるか、または当該タイムスタンプの時点より前である
装置。
【０１５５】
ＥＣ１２０）ＥＣ１１９記載の装置において、前記第１のハードウェア論理回路の少なくとも一部分は、前記第２のハードウェア論理回路の少なくとも一部分でもある共用ハードウェア論理回路である装置。
【０１５６】
ＥＣ１２１）ＥＣ１１９記載の装置において、
前記データ単位の各々は、ホストから各論理ブロックアドレス（ＬＢＡ）への各データ書き込みに対応し、
前記データ単位のうち先行するデータ単位および後続のデータ単位は、前記各論理ブロックアドレスのうち同一の論理ブロックアドレスへの先行するデータ書き込みおよび後続のデータ書き込みに対応するものであり、
前記先行するデータ単位は前記データマップ単位のうち関連付けられたデータマップ単位を有しないものである
装置。
【０１５７】
ＥＣ１２２）ＥＣ１１９記載の装置において、さらに、
電源障害の後に、前記データ単位のうち最後に有効となり且つ連続したデータ単位を決定することが可能な第３のハードウェア論理回路と、
電源障害の後に、前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位を決定することが可能な第４のハードウェア論理回路であって、当該最後に有効となり且つ連続したデータマップ単位と関連付けられたタイムスタンプの時点は前記データ単位のうち前記最後に有効となり且つ連続したデータ単位と関連付けられたタイムスタンプの時点と同一であるか、またはそれより前である、前記第４のハードウェア論理回路と、
前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位のみを回復することが可能な第５のハードウェア論理回路と
を有し、
これにより、前記データ単位のうち最後に有効となり且つ連続したデータ単位と関連付けられた前記タイムスタンプより後のタイムスタンプに関連付けられた前記データマップ単位は全て回復時に無視されるものである
装置。
【０１５８】
ＥＣ１２３）ＥＣ１１９記載の装置において、データ単位はデータ記憶単位である装置。
【０１５９】
ＥＣ１２４）装置であって、
不揮発性メモリ（ＮＶＭ）に一連のデータ記憶単位を書き込むことが可能な第１のハードウェア論理回路であって、前記データ記憶単位の各々は複数のタイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記第１のハードウェア論理回路と、
前記不揮発性メモリに一連のデータマップ単位を書き込むことが可能な第２のハードウェア論理回路であって、前記データマップ単位の各々は前記タイムスタンプのうちの１つとそれぞれ関連付けられているものである、前記第２のハードウェア論理回路と
を有し、
前記データマップ単位の各々は、前記不揮発性メモリ内に前記データ記憶単位のうちの１つに対応する位置を有し、
前記データ記憶単位の各々と関連付けられた前記各タイムスタンプは、前記対応するデータマップ単位と関連付けられた前記タイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである
装置。
【０１６０】
ＥＣ１２５）ＥＣ１２４記載の装置において、前記第１のハードウェア論理回路の少なくとも一部分は、前記第２のハードウェア論理回路の少なくとも一部分でもある共用ハードウェア論理回路である装置。
【０１６１】
ＥＣ１２６）ＥＣ１２４記載の装置において、前記データ記憶単位の書き込みは第１の順序に従ったものであり、データマップ単位の書き込みは第２の順序に従ったものである装置。
【０１６２】
ＥＣ１２７）ＥＣ１２４記載の装置において、前記データ記憶単位は不揮発性メモリ内で第１の順序に従って配列され、前記データマップ単位は不揮発性メモリ内で第２の順序に従って配置されるものである装置。
【０１６３】
ＥＣ１２８）ＥＣ１２４記載の装置において、
前記データ記憶単位のうち第１のデータ記憶単位は、ホストから特定の論理ブロックアドレス（ＬＢＡ）への第１のデータ書き込みに対応し、
前記データ記憶単位のうち第２のデータ記憶単位は、前記ホストから特定の論理ブロックアドレスへの第２のデータ書き込みに対応し、
前記第１のデータ書き込みは、時間の順序において、前記第２のデータ書き込みに先行するものであり、
前記データマップ単位のいずれも前記第１のデータ記憶単位に対応しないものである
装置。
【０１６４】
ＥＣ１２９）ＥＣ１２６記載の装置において、さらに、
イベントの後に、前記データ記憶単位のうち最後に有効となり且つ連続したデータ記憶単位を前記第１の順序に従って決定することが可能な第３のハードウェア論理回路と、
イベントの後に、前記データマップ単位のうち最後に有効となり且つ連続したデータマップ単位であって、前記タイムスタンプのうちの１つと関連付けられたデータマップ単位を前記第２の順序に従って決定することが可能な第４のハードウェア論理回路であって、当該タイムスタンプのうちの１つは、前記データ記憶単位のうち前記最後に有効となり且つ連続したデータ記憶単位と関連付けられたタイムスタンプによって示される相対的経過時間と同一、またはそれよりも以前の相対的経過時間を示すものである、前記第４のハードウェア論理回路と、
前記第１の順序および前記第２の順序に従って、前記データマップ単位のうち前記最後に有効となり且つ連続したデータマップ単位までのデータマップ単位のみを回復することが可能な第５のハードウェア論理回路と
を有するものである装置。
【０１６５】
ＥＣ１３０）装置であって、
記憶ストリームに従って不揮発性メモリ（ＮＶＭ）に複数の記憶単位を書き込むことが可能な第１のハードウェア論理回路であって、当該記憶単位の各々はデータ部分と、当該データ部分に対応するタイムスタンプ部分とを有するものである、前記第１のハードウェア論理回路と、
マップストリームに従って前記不揮発性メモリに複数のマップ単位を書き込むことが可能な第２のハードウェア論理回路であって、当該マップ単位の各々はエントリ部分と、当該エントリ部分に対応するタイムスタンプ部分とを有するものである、前記第２のハードウェア論理回路と
を有し、
前記各エントリ部分の少なくとも一部は、前記データ部分のうち少なくとも１つの対応するデータ部分を特定することによって、それぞれの論理ブロック（ＬＢ）が前記不揮発性メモリに書き込まれている場所を決定することを可能にし、
時間的順序は前記タイムスタンプ部分によって示され、前記記憶単位のタイムスタンプ部分および前記マップ単位のタイムスタンプ部分は、タイムスタンプの相対的順序に従って単調に増加するものであり、
前記不揮発性メモリに書き込まれた前記マップ単位のうち少なくとも１つが、１つの特定の時点で前記不揮発性メモリに書き込まれた前記記憶単位のタイムスタンプ部分のうち前記時間的順序において最も遅いものよりも遅いタイムスタンプ部分を有する少なくとも１つの特定の時点が存在するものである
装置。
【０１６６】
ＥＣ１３１）ＥＣ１３０記載の装置において、前記第１のハードウェア論理回路の少なくとも一部分は、前記第２のハードウェア論理回路の少なくとも一部分でもある共用ハードウェア論理回路である装置。
【０１６７】
ＥＣ１３２）ＥＣ１３０記載の装置において、前記第１のハードウェア論理回路は前記記憶単位のタイムスタンプ部分によって示される前記時間的順序に対応する時間の順序で前記記憶単位を書き込み、前記第２のハードウェア論理回路は前記マップ単位のタイムスタンプ部分によって示される前記時間的順序に対応する時間の順序で前記マップ単位を書き込むものである装置。
【０１６８】
ＥＣ１３３）ＥＣ１３０記載の装置において、さらに、
チェックポイントストリームに従って前記不揮発性メモリに１若しくはそれ以上のチェックポイント単位を書き込むことが可能な第３のハードウェア論理回路であって、当該チェックポイント単位の各々はマップ部分と当該マップ部分に対応するタイムスタンプ部分とを有するものである、前記第３のハードウェア論理回路
を有するものであり、
前記チェックポイントのタイムスタンプ部分は、前記タイムスタンプの相対的順序に従って単調に増加するものである装置。
【０１６９】
ＥＣ１３４）ＥＣ１３３記載の装置において、前記第３のハードウェア論理回路は、前記チェックポイントのタイムスタンプ部分によって示される時間的順序に対応する時間の順序でチェックポイント単位を書き込む装置。
【０１７０】
ＥＣ１３５）ＥＣ１３３記載の装置において、所定数のチェックポイント単位の連続したグループは、前記エントリ部分が従うマップの少なくとも全体のチェックポイントを有する装置。
【０１７１】
ＥＣ１３６）記憶インターフェース規格を有し、または参照する前述のＥＣのうちいずれかであって、記憶インターフェース規格は、
ユニバーサル・シリアル・バス（ＵＳＢ）インターフェース規格、
コンパクトフラッシュ（登録商標）（ＣＦ）インターフェース規格、
マルチメディアカード（ＭＭＣ）インターフェース規格、
組み込みＭＭＣ（ｅＭＭＣ）インターフェース規格、
サンダーボルト（Ｔｈｕｎｄｅｒｂｏｌｔ）インターフェース規格、
ＵＦＳインターフェース規格、
セキュアディジタル（ＳＤ）インターフェース規格、
メモリ・スティック・インターフェース規格、
ｘＤピクチャ・カード・インターフェース規格、
統合ドライブエレクトロニクス（ＩＤＥ）インターフェース規格、
シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）インターフェース規格、
外部ＳＡＴＡ（ｅＳＡＴＡ）インターフェース規格、
小型コンピュータ・システム・インターフェース（ＳＣＳＩ）インターフェース規格、
シリアル小型コンピュータ・システム・インターフェース（ＳＡＳ）インターフェース規格、
ファイバ・チャネル・インターフェース規格、
イーサネット（登録商標）（Ｅｔｈｅｒｎｅｔ（登録商標））インターフェース規格、および
周辺装置相互接続エクスプレス（ＰＣＩｅ）インターフェース規格
のうち１若しくはそれ以上を有するＥＣ。
【０１７２】
ＥＣ１３７）フラッシュ・メモリ・インターフェースを有し、または参照する前述のＥＣのうちいずれかであって、フラッシュ・メモリ・インターフェースは、
オープンＮＡＮＤフラッシュインターフェース（ＯＮＦＩ）、
トグルモードインターフェース、
ダブルデータレート（ＤＤＲ）同期インターフェース、
ＤＤＲ２同期インターフェース、
同期インターフェース、および
非同期インターフェース
のうち１若しくはそれ以上と適合するＥＣ。
【０１７３】
ＥＣ１３８）コンピューティングホストを有し、または参照する前述のＥＣのうちいずれかであって、コンピューティングホストは、
コンピュータ、
ワークステーションコンピュータ、
サーバコンピュータ、
ストレージサーバ、
ストレージ・アタッチト・ネットワーク（ＳＡＮ）、
ネットワーク・アタッチト・ストレージ（ＮＡＳ）デバイス、
ダイレクト・アタッチト・ストレージ（ＤＡＳ）デバイス、
ストレージアプライアンス、
パーソナルコンピュータ（ＰＣ）、
ラップトップコンピュータ、
ノートブックコンピュータ、
ネットブックコンピュータ、
タブレット機器またはタブレットコンピュータ、
ウルトラブックコンピュータ、
電子読み出し装置（ｅ−ｒｅａｄｅｒ）、
携帯情報端末（ＰＤＡ）
ナビゲーションンシステム
（ハンドヘルド型）全地球測位システム（ＧＰＳ）機器、
自動通信路制御システム、
自動車媒体制御システムまたは自動車媒体制御コンピュータ、
プリンタ、コピー機またはファックス機またはオールインワン機器、
販売時点（ＰＯＳ）機器、
金銭登録機、
メディアプレーヤ、
テレビ、
メディアレコーダ、
ディジタル・ビデオ・レコーダ（ＤＶＲ）、
ディジタルカメラ、
セルラハンドセット、
コードレス電話機ハンドセット、および
電子ゲーム
のうち１若しくはそれ以上を有するＥＣ。
【０１７４】
ＥＣ１３９）少なくとも１つのフラッシュメモリを有し、または参照する前述のＥＣのうちいずれかであって、少なくとも１つのフラッシュメモリの少なくとも一部分は、
ＮＡＮＤフラッシュ技術記憶セル、および
ＮＯＲフラッシュ技術記憶セル
のうち１若しくはそれ以上を有するＥＣ。
【０１７５】
ＥＣ１４０）少なくとも１つのフラッシュメモリを有し、または参照する前述のＥＣのうちいずれかであって、少なくとも１つのフラッシュメモリの少なくとも一部分は、
シングルレベルセル（ＳＬＣ）フラッシュ技術記憶セル、および
マルチレベルセル（ＭＬＣ）フラッシュ技術記憶セル
のうち１若しくはそれ以上を有するＥＣ。
【０１７６】
ＥＣ１４１）少なくとも１つのフラッシュメモリを有し、または参照する前述のＥＣのうちいずれかであって、少なくとも１つのフラッシュメモリの少なくとも一部分は、
多結晶シリコン技術ベースの電荷蓄積セル、および
シリコン窒化膜技術ベースの電荷蓄積セル
のうち１若しくはそれ以上を有するＥＣ。
【０１７７】
ＥＣ１４２）少なくとも１つのフラッシュメモリを有し、または参照する前述のＥＣのうちいずれかであって、少なくとも１つのフラッシュメモリの少なくとも一部分は、
２次元技術ベースのフラッシュメモリ技術、および
３次元技術ベースのフラッシュメモリ技術
のうち１若しくはそれ以上を有するＥＣ。
システム
ある実施形態では、ＳＳＤといった入出力装置がＳＳＤコントローラを有する。ＳＳＤコントローラはホストインターフェースとＳＳＤのＮＶＭとの間のブリッジとして働き、ＳＳＤのホストインターフェースを介してコンピューティングホストから送られるホストプロトコルのコマンドを実行する。コマンドの少なくとも一部は、ＳＳＤに、コンピューティングホストから送られたデータおよびコンピューティングホストに送られるデータについて、それぞれ、ＮＶＭの書き込みおよび読み出しを行うよう指図する。別の実施形態では、ＳＳＤコントローラは、マップを使用してホストプロトコルのＬＢＡとＮＶＭ内の物理的記憶アドレスとを変換することができるようになっている。別の実施形態では、マップの少なくとも一部分が、入出力装置の専用記憶（コンピューティングホストからは見えない）に使用される。例えば、コンピューティングホストからアクセスできないＬＢＡの部分が、入出力装置によって、ログ、統計、または他の専用データへのアクセスを管理するのに使用される。
【０１７８】
ある実施形態では、ＮＶＭ内の様々なサイズの量の圧縮データにアクセスすることにより、ある使用シナリオでは記憶効率が改善される。例えば、ＳＳＤコントローラは、コンピューティングホストから（例えばディスク書き込みコマンドに関連した）（圧縮されていない）データを受け取り、データを圧縮し、データをフラッシュメモリへ記憶する。コンピューティングホストからの（例えばディスク読み出しコマンドに関連した）後続の要求に応答して、ＳＳＤコントローラはフラッシュメモリから圧縮データを読み出し、圧縮データを解凍し、解凍されたデータをコンピューティングホストに提供する。圧縮データは、様々なサイズの量に従ってフラッシュメモリに記憶され、各量のサイズは、例えば、圧縮アルゴリズム、動作モード、様々なデータに関する圧縮有効性により変動する。ＳＳＤコントローラは、一部は、含まれるマップ表を調べて（１つまたは複数の）ヘッダがフラッシュメモリのどこに記憶されているか確認することによってデータを解凍する。ＳＳＤコントローラは、適切な（圧縮）データがフラッシュメモリのどこに記憶されているか確認するためにフラッシュメモリから得た（１つまたは複数の）ヘッダをパースする。ＳＳＤコントローラは、コンピューティングホストに提供すべき解凍データを生成するために、フラッシュメモリからの適切なデータを解凍する。本出願では、「解凍する（ｕｎｃｏｍｐｒｅｓｓ）」（およびその変形）は、「伸張する（ｄｅｃｏｍｐｒｅｓｓ）」（およびその変形）と同義である。
【０１７９】
様々な実施形態では、ＳＳＤコントローラは、コンピューティングホストとインターフェースするためのホストインターフェースと、フラッシュメモリといったＮＶＭとインターフェースするためのインターフェースと、各インターフェースを制御し、圧縮および解凍と共に、低レベル冗長性および／または誤り訂正、高レベル冗長性および／または誤り訂正、ならびに独立シリコン素子を用いた動的高レベル冗長性モード管理を行う（かつ／または行うことの様々な態様を制御する）ための回路とを有する。
【０１８０】
様々な実施形態によれば、あるホストインターフェースは、ＵＳＢインターフェース規格、ＣＦインターフェース規格、ＭＭＣインターフェース規格、ｅＭＭＣインターフェース規格、サンダーボルトインターフェース規格、ＵＦＳインターフェース規格、ＳＤインターフェース規格、メモリ・スティック・インターフェース規格、ｘＤピクチャ・カード・インターフェース規格、ＩＤＥインターフェース規格、ＳＡＴＡインターフェース規格、ＳＣＳＩインターフェース規格、ＳＡＳインターフェース規格、およびＰＣＩｅインターフェース規格のうち１若しくはそれ以上と適合する。様々な実施形態によれば、コンピューティングホストは、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＳＡＮ、ＮＡＳデバイス、ＤＡＳデバイス、ストレージアプライアンス、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、ネットブックコンピュータ、タブレット機器またはタブレットコンピュータ、ウルトラブックコンピュータ、電子読み出し装置（ｅ−ｒｅａｄｅｒなど）、ＰＤＡ、ナビゲーションンシステム、（ハンドヘルド型）ＧＰＳ機器、自動通信路制御システム、自動車媒体制御システムまたはコンピュータ、プリンタ、コピー機またはファックス機またはオールインワン機器、ＰＯＳ機器、金銭登録機、メディアプレーヤ、テレビ、メディアレコーダ、ＤＶＲ、ディジタルカメラ、セルラハンドセット、コードレス電話機ハンドセット、および電子ゲームのうち全部または任意の部分である。ある実施形態では、インターフェースホスト（ＳＡＳ／ＳＡＴＡブリッジなど）は、コンピューティングホストおよび／またはコンピューティングホストへのブリッジとして動作する。
【０１８１】
様々な実施形態では、ＳＳＤコントローラは、１若しくはそれ以上のプロセッサを有する。プロセッサは、ＳＳＤコントローラの動作を制御し、かつ／または行うためにファームウェアを実行する。ＳＳＤコントローラは、コマンドおよび／または状況ならびにデータを送り、受け取るためにコンピューティングホストと通信する。コンピューティングホストは、オペレーティングシステム、ドライバ、およびアプリケーションのうち１若しくはそれ以上を実行する。コンピューティングホストによるＳＳＤコントローラとの通信は、任意選択で、かつ／または選択的に、ドライバおよび／またはアプリケーションによるものである。第１の例では、ＳＳＤコントローラへのすべての通信がドライバによるものであり、アプリケーションは、ドライバに高レベルコマンドを提供し、ドライバがそれをＳＳＤコントローラのための特定のコマンドに変換する。第２の例では、ドライバはバイパスモードを実施し、アプリケーションは、ドライバを介してＳＳＤコントローラに特定のコマンドを送ることができるようになっている。第３の例では、ＰＣＩｅ  ＳＳＤコントローラが１若しくはそれ以上の仮想機能（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎｓ：ＶＦｓ）をサポートし、アプリケーションが、一度構成されると、ドライバをバイパスしてＳＳＤコントローラを直接通信することを可能にする。
【０１８２】
様々な実施形態によれば、あるＳＳＤは、ＨＤＤ、ＣＤドライブ、ＤＶＤドライブといった磁気的不揮発性記憶および／または光学的不揮発性記憶によって使用されるフォームファクタ、電気的インターフェース、および／またはプロトコルと適合する。様々な実施形態では、ＳＳＤは、０以上のパリティ符号、０以上のＲＳ符号、０以上のＢＣＨ符号、０以上のビタビ符号または他のトレリス符号、および０以上のＬＤＰＣ符号の様々な組み合わせを使用する。
【０１８３】
図１Ａに、フラッシュメモリといった不揮発性記憶を管理するのに自己ジャーナリングおよび階層的整合性を使用するＳＳＤコントローラを有するＳＳＤ１０１の実施形態の選択された詳細を図示する。ＳＳＤコントローラは、ＮＶＭ素子（フラッシュメモリなど）によって実施されるような不揮発性記憶を管理するためのものである。ＳＳＤコントローラ１００は１若しくはそれ以上の外部インターフェース１１０を介してホスト（不図示）に通信可能に結合されている。様々な実施形態によれば、外部インターフェース１１０は、ＳＡＴＡインターフェース、ＳＡＳインターフェース、ＰＣＩｅインターフェース、ファイバ・チャネル・インターフェース、イーサネット（登録商標）（Ｅｔｈｅｒｎｅｔ（登録商標））インターフェース（１０ギガビットイーサネット（登録商標）など）、上記のインターフェースのいずれかの非標準バージョン、カスタムインターフェース、またはストレージおよび／若しくは通信および／若しくはコンピューティング機器を相互接続するのに使用される任意の他の種類のインターフェースのうち１若しくはそれ以上である。例えば、ある実施形態では、ＳＳＤコントローラ１００は、ＳＡＴＡインターフェースおよびＰＣＩｅインターフェースを有する。
【０１８４】
ＳＳＤコントローラ１００は、さらに、１若しくはそれ以上のデバイスインターフェース１９０を介して、フラッシュデバイス１９２の１若しくはそれ以上のインスタンスといった、１若しくはそれ以上の記憶デバイスを有するＮＶＭ１９９に通信可能に結合されている。様々な実施形態によれば、デバイスインターフェース１９０は、非同期インターフェース、同期インターフェース、シングルデータレート（ＳＤＲ）インターフェース、ダブルデータレート（ＤＤＲ）インターフェース、ＤＲＡＭ互換ＤＤＲ若しくはＤＤＲ２同期インターフェース、ＯＮＦＩ２．２やＯＮＦＩ３．０互換インターフェースといったＯＮＦＩ互換インターフェース、トグルモード互換フラッシュインターフェース、上記のインターフェースのいずれかの非標準バージョン、カスタムインターフェース、または記憶デバイスに接続するのに使用される任意の他の種類のインターフェースのうち１若しくはそれ以上である。
【０１８５】
フラッシュデバイス１９２の各々は、ある実施形態では、１若しくはそれ以上の個々のフラッシュダイ１９４を有する。フラッシュデバイス１９２のうち特定のフラッシュデバイスの種類に従って、特定のフラッシュデバイス１９２内の複数のフラッシュダイ１９４に、並列に、任意選択で、かつ／または選択的にアクセスすることができる。フラッシュデバイス１９２は、単に、ＳＳＤコントローラ１００に通信可能に結合することが可能な記憶デバイスの一種を表しているにすぎない。様々な実施形態では、ＳＬＣ  ＮＡＮＤフラッシュメモリ、ＭＬＣ  ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、多結晶シリコン若しくはシリコン窒化膜技術ベースの電荷蓄積セルを使用したフラッシュメモリ、２次元若しくは３次元技術ベースのフラッシュメモリ、読み出し専用メモリ、スタティック・ランダム・アクセス・メモリ、ダイナミック・ランダム・アクセス・メモリ、強磁性メモリ、相変化メモリ、レーストラックメモリ、ＲｅＲＡＭ、または任意の他の種類のメモリデバイス若しくは記憶媒体といった、任意の種類の記憶デバイスを使用することができる。
【０１８６】
様々な実施形態によれば、デバイスインターフェース１９０は、１つのバスにつきフラッシュデバイス１９２の１若しくはそれ以上のインスタンスを有する１若しくはそれ以上のバス；グループ内のバスにおおむね並列にアクセスさせる、１つのバスにつきフラッシュデバイス１９２の１若しくはそれ以上のインスタンスを有する１若しくはそれ以上のバスグループ；またはデバイスインターフェース１９０上へのフラッシュデバイス１９２の１若しくはそれ以上のインスタンスの任意の他の編成として編成される。
【０１８７】
引き続き図１Ａにおいて、ＳＳＤコントローラ１００は、ホストインターフェース１１１、データ処理１２１、バッファ１３１、マップ１４１、リサイクラ１５１、ＥＣＣ１６１、デバイスインターフェース論理１９１、ＣＰＵ１７１といった１若しくはそれ以上のモジュールを有する。図１Ａに図示する具体的なモジュールおよび相互接続は、単に、一実施形態を表すにすぎず、これらのモジュールの一部または全部、および図示されていないさらに別のモジュールの多くの配置および相互接続が考えられる。第１の例として、ある実施形態では、デュアルポーティングを提供するための２つ以上のホストインターフェース１１１がある。第２の例として、ある実施形態では、データ処理１２１および／またはＥＣＣ１６１がバッファ１３１と組み合わされている。第３の例として、ある実施形態では、ホストインターフェース１１１がバッファ１３１に直接結合されており、データ処理１２１が、バッファ１３１に記憶されたデータに任意選択で、かつ／または選択的に作用する。第４の例として、ある実施形態では、デバイスインターフェース論理１９１がバッファ１３１に直接結合されており、ＥＣＣ１６１が、バッファ１３１に記憶されたデータに任意選択で、かつ／または選択的に作用する。
【０１８８】
ホストインターフェース１１１は、外部インターフェース１１０を介してコマンドおよび／またはデータを送受信し、ある実施形態では、タグ追跡１１３によって個々のコマンドの進捗を追跡する。例えば、コマンドは、読み出すべきアドレス（ＬＢＡなど）およびデータの量（ＬＢＡ量、例えばセクタの数など）を指定する読み出しコマンドを有し、これに応答してＳＳＤは、読み出し状況および／または読み出しデータを提供する。別の例として、コマンドは、書き込むべきアドレス（ＬＢＡなど）およびデータの量（ＬＢＡ量、例えばセクタの数など）を指定する書き込みコマンドを有し、これに応答してＳＳＤは、書き込み状況を提供し、かつ／または書き込みデータを要求し、任意選択でその後に書き込み状況を提供する。さらに別の例として、コマンドは、もはや割り振られる必要のなくなった１若しくはそれ以上のアドレス（１若しくはそれ以上のＬＢＡなど）を指定する割り振り解除コマンド（ｔｒｉｍコマンドなど）を有し、これに応答してＳＳＤは、マップをしかるべく変更し、任意選択で割り振り解除状況を提供する。あるコンテキストでは、ＡＴＡ互換ＴＲＩＭコマンドが割り振り解除コマンドの例である。さらに別の例として、コマンドは、超コンデンサ・テスト・コマンドまたはデータハーデニング成功問い合わせを有し、これに応答してＳＳＤは、適切な状況を提供する。ある実施形態では、ホストインターフェース１１１は、ＳＡＴＡプロトコルと適合し、ＮＣＱコマンドを使用して、最高３２までの未処理のコマンドを有することができるようになっており、各コマンドは０から３１までの数として表された一意のタグを有する。ある実施形態では、タグ追跡１１３は、外部インターフェース１１０を介して受け取ったコマンドのための外部タグを、ＳＳＤコントローラ１００による処理の間にコマンドを追跡するのに使用される内部タグと関連付けることができるようになっている。
【０１８９】
様々な実施形態によれば、データ処理１２１は、任意選択で、かつ／または選択的に、バッファ１３１と外部インターフェース１１０との間で送られる一部または全部のデータを処理する、およびデータ処理１２１は、任意選択で、かつ／または選択的に、バッファ１３１に記憶されたデータを処理する、以下のうち１若しくはそれ以上が行われる。ある実施形態では、データ処理１２１は、１若しくはそれ以上のエンジン１２３を使用して、書式設定、書式設定の変更、符号変換、ならびに他のデータ処理および／または操作タスクのうち１若しくはそれ以上を行う。
【０１９０】
バッファ１３１は、外部インターフェース１１０からデバイスインターフェース１９０へ／デバイスインターフェース１９０から外部インターフェース１１０へ送られたデータを記憶する。ある実施形態では、バッファ１３１は、さらに、ＳＳＤコントローラ１００によってフラッシュデバイス１９２の１若しくはそれ以上のインスタンスを管理するのに使用される、一部または全部のマップ表といったシステムデータも記憶する。様々な実施形態では、バッファ１３１は、データの一時記憶に使用されるメモリ１３７、バッファ１３１への、かつ／またはバッファ１３１からのデータの移動を制御するのに使用されるＤＭＡ１３３、ならびに高レベル誤り訂正および／または冗長性機能と、他のデータ移動および／または操作機能とを提供するのに使用されるＥＣＣ−Ｘ１３５のうち１若しくはそれ以上を有する。高レベル冗長性機能の一例がＲＡＩＤ様の能力（ＲＡＳＩＥなど）であり、ディスクレベルではなく、フラッシュ・デバイス・レベル（フラッシュデバイス１９２のうち複数のものなど）および／またはフラッシュダイ・レベル（フラッシュダイ１９４など）の冗長性を備える。
【０１９１】
様々な実施形態によれば、以下のうち１若しくはそれ以上である。ＥＣＣ１６１は、任意選択で、かつ／または選択的に、バッファ１３１とデバイスインターフェース１９０との間で送られる一部または全部のデータを処理する；およびＥＣＣ１６１は、任意選択で、かつ／または選択的に、バッファ１３１に記憶されたデータを処理する。ある実施形態では、ＥＣＣ１６１は、例えば１若しくはそれ以上のＥＣＣ技法に従った低レベル誤り訂正および／または冗長性機能を提供するのに使用される。ある実施形態では、ＥＣＣ１６１は、ＣＲＣ符号、ハミング符号、ＲＳ符号、ＢＣＨ符号、ＬＤＰＣ符号、ビタビ符号、トレリス符号、硬判定符号、軟判定符号、消去ベースの符号、任意の誤り検出および／または訂正符号、ならびに上記の任意の組み合わせのうち１若しくはそれ以上を実施する。ある実施形態では、ＥＣＣ１６１は、１若しくはそれ以上の復号器（ＬＤＰＣ復号器など）を有する。
【０１９２】
デバイスインターフェース論理１９１は、デバイスインターフェース１９０を介してフラッシュデバイス１９２のインスタンスを制御する。デバイスインターフェース論理１９１は、フラッシュデバイス１９２のプロトコルに従ってフラッシュデバイス１９２のインスタンスへ／からデータを送ることができるようになっている。デバイスインターフェース論理１９１は、デバイスインターフェース１９０を介したフラッシュデバイス１９２のインスタンスの制御を選択的に配列するスケジューリング１９３を有する。例えば、ある実施形態では、スケジューリング１９３は、フラッシュデバイス１９２のインスタンスへの操作を待ち行列に入れ、フラッシュデバイス１９２（またはフラッシュダイ１９４）のインスタンスの個々のインスタンスへの操作を、フラッシュデバイス１９２（またはフラッシュダイ１９４）のインスタンスの個々のインスタンスが利用可能になるに従って選択的に送ることができるようになっている。
【０１９３】
マップ１４１は、外部インターフェース１１０上で使用されるデータアドレス指定と、デバイスインターフェース１９０上で使用されるデータアドレス指定との間の変換を行い、表１４３を使用して外部データアドレスからＮＶＭ１９９内の位置へマップする。例えば、ある実施形態では、マップ１４１は、外部インターフェース１１０上で使用されるＬＢＡを、表１４３によって提供されるマッピングにより、１若しくはそれ以上のフラッシュダイ１９４を対象とするブロックおよび／またはページアドレスに変換する。ドライブ製造または割り振り解除以来一度も書き込まれていないＬＢＡでは、マップは、ＬＢＡが読み出された場合に返すべきデフォルト値を指し示す。例えば、割り振り解除コマンドを処理するときに、マップは、割り振り解除されたＬＢＡに対応するエントリがデフォルト値のうち１つを指し示すように変更される。様々な実施形態では、様々なデフォルト値があり、各々が対応するポインタを有する。複数のデフォルト値は、ある（例えば第１の範囲内の）割り振り解除されたＬＢＡを１つのデフォルト値として読み出し、ある（例えば第２の範囲内の）割り振り解除されたＬＢＡを別のデフォルト値として読み出すことを可能にする。デフォルト値は、様々な実施形態では、フラッシュメモリ、ハードウェア、ファームウェア、コマンドおよび／若しくはプリミティブ引数および／若しくはパラメータ、プログラマブルレジスタ、またはそれらの様々な組み合わせによって定義される。
【０１９４】
ある実施形態では、マップ１４１は、表１４３を使用して、外部インターフェース１１０上で使用されるアドレスと、デバイスインターフェース１９０上で使用されるデータアドレス指定との間の変換を行い、かつ／またはルックアップする。様々な実施形態によれば、表１４３は、１レベルマップ、２レベルマップ、マルチレベルマップ、マップキャッシュ、圧縮マップ、あるアドレス空間から別のアドレス空間への任意の種類のマッピング、および上記の任意の組み合わせのうち１若しくはそれ以上である。様々な実施形態によれば、表１４３は、スタティック・ランダム・アクセス・メモリ、ダイナミック・ランダム・アクセス・メモリ、ＮＶＭ（フラッシュメモリなど）、キャッシュメモリ、オンチップメモリ、オフチップメモリ、および上記の任意の組み合わせのうち１若しくはそれ以上を有する。
【０１９５】
ある実施形態では、リサイクラ１５１は、不要部分の整理を行う。例えば、ある実施形態では、フラッシュデバイス１９２のインスタンスは、ブロックが書き換え可能になる前に消去されなければならないブロックを有する。リサイクラ１５１は、例えば、マップ１４１によって維持されるマップをスキャンすることによって、フラッシュデバイス１９２のインスタンスのどの部分が実際に使用されているか（例えば、割り振り解除されているのではなく割り振られていること）を決定し、フラッシュデバイス１９２のインスタンスの未使用の（例えば割り振り解除された）部分を、未使用の部分を消去することによって書き込みに利用できるようにすることができるようになっている。別の実施形態では、リサイクラ１５１は、フラッシュデバイス１９２のインスタンスのより大きい連続した部分を書き込みに利用できるようにするために、フラッシュデバイス１９２のインスタンス内に記憶されたデータを移動することができるようになっている。
【０１９６】
ある実施形態では、フラッシュデバイス１９２のインスタンスは、異なる種類および／または属性のデータを記憶するための１若しくはそれ以上のバンドを保持するように、選択的に、かつ／または動的に構成され、管理され、かつ／または使用される。バンドの数、配置、サイズ、および種類は、動的に変更可能である。例えば、コンピューティングホストからのデータはホット（アクティブな）バンドに書き込まれ、リサイクラ１５１からのデータはコールド（あまりアクティブではない）バンドに書き込まれる。ある使用シナリオでは、コンピューティングホストが長い順次のストリームを書き込む場合には、ホットバンドのサイズが増大し、コンピューティングホストがランダムな書き込みを行い、またはわずかな書き込みしか行わない場合には、コールドバンドのサイズが増大する。
【０１９７】
ＣＰＵ１７１は、ＳＳＤコントローラ１００の様々な部分を制御する。ＣＰＵ１７１は、ＣＰＵコア１７２を有する。ＣＰＵコア１７２は、様々な実施形態によれば、１若しくはそれ以上のシングルコアプロセッサまたはマルチコアプロセッサである。ＣＰＵコア１７２内の個々のプロセッサコアは、ある実施形態では、マルチスレッド化されている。ＣＰＵコア１７２は、命令および／またはデータのキャッシュおよび／またはメモリを有する。例えば、命令メモリは、ＣＰＵコア１７２が、ＳＳＤコントローラ１００を制御するためのプログラム（ファームウェアとも呼ばれるソフトウェアなど）を実行することを可能にする命令を有する。ある実施形態では、ＣＰＵコア１７２によって実行されるファームウェアの一部または全部が、（例えば、図１ＢのＮＶＭ１９９のファームウェア１０６として図示されている）フラッシュデバイス１９２のインスタンス上に記憶される。
【０１９８】
様々な実施形態では、ＣＰＵ１７１は、外部インターフェース１１０を介して受け取られるコマンドを、コマンドが進行している間に追跡し、制御するコマンド管理１７３、バッファ１３１の割り振りおよび使用を制御するバッファ管理１７５、マップ１４１を制御する変換管理１７７、データアドレス指定の整合性を制御し、例えば、外部データアクセスと再利用データアクセスとの間の矛盾を回避するコヒーレンシ管理１７９、デバイスインターフェース論理１９１を制御するデバイス管理１８１、識別情報の変更および通信を制御する識別情報管理１８２、ならびに、任意選択で、他の管理部をさらに有する。ＣＰＵ１７１によって果たされる管理機能は、そのいずれか、若しくは全部が、ハードウェア、ソフトウェア（ＣＰＵコア１７２上や、外部インターフェース１１０を介して接続されたホスト上で実行されるファームウェアなど）、またはそれらの任意の実施形態によって制御され、かつ／または管理され、あるいは、そのどれも、制御も管理もされないものである。
【０１９９】
ある実施形態では、ＣＰＵ１７１は、性能統計の収集および／または報告、ＳＭＡＲＴの実施、電源逐次開閉機構の制御、電力消費の制御および／または調整、電源障害への応答、クロック速度の制御および／またはモニタリングおよび／または調整、ならびに他の管理タスクのうち１若しくはそれ以上といった、他の管理タスクを行うことができるようになっている。
【０２００】
様々な実施形態は、ＳＳＤコントローラ１００と同様の、例えば、ホストインターフェース１１１および／または外部インターフェース１１０の適応による、様々なコンピューティングホストを用いた動作と適合するコンピューティングホスト・フラッシュ・メモリ・コントローラを有する。様々なコンピューティングホストは、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＳＡＮ、ＮＡＳデバイス、ＤＡＳデバイス、ストレージアプライアンス、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、ネットブックコンピュータ、タブレット機器またはタブレットコンピュータ、ウルトラブックコンピュータ、電子読み出し装置（ｅ−ｒｅａｄｅｒなど）、ＰＤＡ、ナビゲーションンシステム、（ハンドヘルド型）ＧＰＳ機器、自動通信路制御システム、自動車媒体制御システムまたはコンピュータ、プリンタ、コピー機またはファックス機またはオールインワン機器、ＰＯＳ機器、金銭登録機、メディアプレーヤ、テレビ、メディアレコーダ、ＤＶＲ、ディジタルカメラ、セルラハンドセット、コードレス電話機ハンドセット、および電子ゲームのうち１つまたはそれらの任意の組み合わせを有する。
【０２０１】
様々な実施形態では、ＳＳＤコントローラ（またはコンピューティングホスト・フラッシュ・メモリ・コントローラ）の全部または任意の部分が、単一のＩＣ、マルチダイＩＣの単一のダイ、マルチダイＩＣの複数のダイ、または複数のＩＣ上で実施される。例えば、バッファ１３１は、ＳＳＤコントローラ１００の他の要素と同じダイ上に実施される。別の例では、バッファ１３１は、ＳＳＤコントローラ１００の他の要素と異なるダイ上に実施される。
【０２０２】
図１Ｂに、図１ＡのＳＳＤの１若しくはそれ以上のインスタンスを有するシステムの様々な実施形態の選択された詳細を図示する。ＳＳＤ１０１は、デバイスインターフェース１９０を介してＮＶＭ１９９に結合されたＳＳＤコントローラ１００を有する。図には、様々な種別の実施形態、すなわち、ホストに直接結合された単一のＳＳＤ、各々がそれぞれの外部インターフェースを介してホストに直接それぞれ結合されている複数のＳＳＤ、および様々な相互接続要素を介してホストに間接的に結合された１若しくはそれ以上のＳＳＤが示されている。
【０２０３】
ホストに直接結合された単一のＳＳＤの例示的実施形態としては、ＳＳＤ１０１の１つのインスタンスが、外部インターフェース１１０を介してホスト１０２に直接結合される（例えば、スイッチ／ファブリック／中間コントローラ１０３が省かれ、バイパスされ、またはパススルーされる）。各々がそれぞれの外部インターフェースを介してホストに直接結合されている複数のＳＳＤの例示的実施形態としては、ＳＳＤ１０１の複数のインスタンスの各々が、外部インターフェース１１０のそれぞれのインスタンスを介してホスト１０２に直接それぞれ結合される（例えば、スイッチ／ファブリック／中間コントローラ１０３が省かれ、バイパスされ、またはパススルーされる）。様々な相互接続要素を介してホストに間接的に結合された１若しくはそれ以上のＳＳＤの例示的実施形態としては、ＳＳＤ１０１の１若しくはそれ以上のインスタンスの各々が、ホスト１０２に間接的にそれぞれ結合される。各間接結合は、スイッチ／ファブリック／中間コントローラ１０３に結合された外部インターフェース１１０のそれぞれのインスタンス、およびホスト１０２に結合する中間インターフェース１０４を介したものである。
【０２０４】
スイッチ／ファブリック／中間コントローラ１０３を有する実施形態の一部は、メモリインターフェース１８０を介して結合された、ＳＳＤによってアクセス可能なカードメモリ１１２Ｃも有する。様々な実施形態では、ＳＳＤ、スイッチ／ファブリック／中間コントローラ、および／またはカードメモリのうち１若しくはそれ以上が、物理的に識別可能なモジュール、カード、または差し込み可能な要素（入出力カード１１６など）上に含まれる。ある実施形態では、ＳＳＤ１０１（またはその変形）は、ホスト１０２として動作するイニシエータ（開始プログラム）に結合されたＳＡＳドライブまたはＳＡＴＡドライブに対応する。
【０２０５】
ホスト１０２は、ＯＳ１０５、ドライバ１０７、アプリケーション１０９、マルチデバイス管理ソフトウェア１１４の様々な組み合わせといった、ホストソフトウェア１１５の様々な要素を実行することができるようになっている。点線矢印１０７Ｄは、ホストソフトウェア←→入出力装置通信、例えば、ＳＳＤ１０１のインスタンスのうち１若しくはそれ以上から／へ、ドライバ１０７を介したＯＳ１０５、ドライバ１０７、および、ドライバ１０７を介して、またはＶＦとして直接アプリケーション１０９のうち任意の１若しくはそれ以上へ／から送られ／受け取られるデータを表す。
【０２０６】
ＯＳ１０５は、ＳＳＤとインターフェースするための（概念的にはドライバ１０７によって図示されている）ドライバを有し、かつ／またはそのようなドライバを用いて動作することができるようになっている。Ｗｉｎｄｏｗｓ（登録商標）の様々なバージョン（９５、９８、ＭＥ、ＮＴ、ＸＰ、２０００、サーバ、Ｖｉｓｔａ、および７など）、Ｌｉｎｕｘ（登録商標）の様々なバージョン（Ｒｅｄ  Ｈａｔ、Ｄｅｂｉａｎ、およびＵｂｕｎｔｕなど）、ならびにＭａｃＯＳの様々なバージョン（８、９およびＸなど）がＯＳ１０５の例である。様々な実施形態では、ドライバは、ＳＡＴＡ、ＡＨＣＩ、ＮＶＭ  Ｅｘｐｒｅｓｓといった標準のインターフェースおよび／またはプロトコルを用いて動作する標準のドライバおよび／または汎用のドライバ（「シュリンクラップされた（市販の）」または「プリインストールされた」ともいう）であり、あるいは、任意選択で、ＳＳＤ１０１に特有のコマンドの使用を可能にするようにカスタマイズされており、かつ／またはベンダ特有のものである。あるドライブおよび／またはドライバは、アプリケーションレベルのプログラム、例えば最適化ＮＡＮＤアクセス（Ｏｐｔｉｍｉｚｅｄ  ＮＡＮＤ  Ａｃｃｅｓｓ）（ＯＮＡともいう）または直接ＮＡＮＤアクセス（Ｄｉｒｅｃｔ  ＮＡＮＤ  Ａｃｃｅｓｓ）（ＤＮＡともいう）の各技法によるアプリケーション１０９などが、コマンドをＳＳＤ１０１に直接伝えることを可能にするパススルーモードを有し、カスタマイズされたアプリケーションが、汎用ドライバとでさえもＳＳＤ１０１に特有のコマンドを使用することを可能にする。ＯＮＡの技法は、非標準変更子（ｈｉｎｔｓ）の使用、ベンダ特有のコマンドの使用、非標準の統計の通信、例えば圧縮可能性に従った実際のＮＶＭの使用、および他の技法のうち１若しくはそれ以上を有する。ＤＮＡの技法は、ＮＶＭへのマップされていない読み出し、書き込み、および／または消去アクセスを提供する非標準のコマンドまたはベンダ特有の（コマンド）の使用、例えば、入出力装置が通常は行うはずのデータの書式設定をバイパスすることによる、ＮＶＭへのより直接的なアクセスを提供する非標準の、またはベンダ特有のコマンドの使用、および他の技法のうち１若しくはそれ以上を有する。ドライバの例は、ＯＮＡまたはＤＮＡサポートなしのドライバ、ＯＮＡ使用可能ドライバ、ＤＮＡ使用可能ドライバ、ＯＮＡ／ＤＮＡ使用可能ドライバである。ドライバの別の例は、ベンダ提供ドライバ、ベンダ開発ドライバ、および／またはベンダ拡張ドライバ、ならびにクライアント提供ドライバ、クライアント開発ドライバ、および／またはクライアント拡張ドライバである。
【０２０７】
アプリケーションレベルのプログラムの例は、ＯＮＡまたはＤＮＡサポートなしのアプリケーション、ＯＮＡ使用可能アプリケーション、ＤＮＡ使用可能アプリケーション、およびＯＮＡ／ＤＮＡ使用可能アプリケーションである。点線矢印１０９Ｄは、アプリケーション←→入出力装置通信（ドライバによるバイパスや、アプリケーションのためのＶＦによるバイパスなど）、例えば、ＯＳを仲介として使用するアプリケーションなしでＳＳＤと通信するＯＮＡ使用可能アプリケーションおよびＯＮＡ使用可能ドライバなどを表す。点線矢印１０９Ｖは、アプリケーション←→入出力装置通信（アプリケーションのためのＶＦによるバイパスなど）、例えば、ＯＳまたはドライバを仲介として使用するアプリケーションなしでＳＳＤと通信するＤＮＡ使用可能アプリケーションおよびＤＮＡ使用可能ドライバなどを表す。
【０２０８】
ＮＶＭ１９９の１若しくはそれ以上の部分が、ある実施形態では、ファームウェア記憶、例えばファームウェア１０６に使用される。ファームウェア記憶は、１若しくはそれ以上のファームウェアイメージ（またはその部分）を有する。ファームウェアイメージは、例えばＳＳＤコントローラ１００のＣＰＵコア１７２によって実行される、例えばファームウェアの１若しくはそれ以上のイメージを有する。ファームウェアイメージは、別の例では、例えばファームウェア実行時にＣＰＵコアによって参照される、定数、パラメータ値、ＮＶＭデバイス情報の１若しくはそれ以上のイメージを有する。ファームウェアのイメージは、例えば、現在のファームウェアイメージおよび０以上の（ファームウェア更新に対して）前のファームウェアイメージに対応する。様々な実施形態では、ファームウェアは、汎用動作モード、標準動作モード、ＯＮＡ動作モード、および／またはＤＮＡ動作モードを提供する。ある実施形態では、ファームウェア動作モードのうち１若しくはそれ以上が、ドライバによって任意選択で伝えられ、かつ／または提供される、鍵または様々なソフトウェア技法によって使用可能とされる（例えば、１若しくはそれ以上のＡＰＩが「ロック解除」される）。
【０２０９】
スイッチ／ファブリック／中間コントローラを欠くある実施形態では、ＳＳＤは、外部インターフェース１１０を介して直接ホストに結合される。様々な実施形態では、ＳＳＤコントローラ１００は、ＲＡＩＤコントローラといった他のコントローラの１若しくはそれ以上の中間レベルを介してホストに結合される。ある実施形態では、ＳＳＤ１０１（またはその変形）は、ＳＡＳドライブまたはＳＡＴＡドライブに対応し、スイッチ／ファブリック／中間コントローラ１０３は、イニシエータにさらに結合されたエキスパンダに対応し、あるいは、スイッチ／ファブリック／中間コントローラ１０３は、エキスパンダを介してイニシエータに間接的に結合されたブリッジに対応する。ある実施形態では、スイッチ／ファブリック／中間コントローラ１０３は、１若しくはそれ以上のＰＣＩｅスイッチおよび／またはファブリックを有する。
【０２１０】
様々な実施形態、例えば、コンピューティングホストとしてのホスト１０２（コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＳＡＮ、ＮＡＳデバイス、ＤＡＳデバイス、ストレージアプライアンス、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、および／またはネットブックコンピュータなど）を有する実施形態のあるものでは、コンピューティングホストは、任意選択で、１若しくはそれ以上のローカルサーバおよび／またはリモートサーバ（例えば、任意選択のサーバ１１８）と（例えば、任意選択の入出力装置／リソースおよび記憶装置／リソース１１７および任意選択のＬＡＮ／ＷＡＮ１１９を介して）通信することができるようになっている。通信は、例えば、ＳＳＤ１０１要素のうち任意の１若しくはそれ以上のローカルおよび／またはリモートのアクセス、管理、および／または使用を可能にする。ある実施形態では、通信は、全部または一部がイーサネット（登録商標）（Ｅｔｈｅｒｎｅｔ（登録商標））によるものである。ある実施形態では、通信は、全部または一部がファイバチャネルによるものである。ＬＡＮ／ＷＡＮ１１９は、様々な実施形態では、１若しくはそれ以上のローカル・エリア・ネットワークおよび／または広域ネットワーク、例えば、サーバファーム内のネットワーク、サーバファームを結合するネットワーク、メトロエリアネットワーク、およびインターネットのうち任意の１若しくはそれ以上を表す。
【０２１１】
様々な実施形態では、１若しくはそれ以上のＮＶＭと組み合わされたＳＳＤコントローラおよび／またはコンピューティングホスト・フラッシュ・メモリ・コントローラが、ＵＳＢ記憶コンポーネント、ＣＦ記憶コンポーネント、ＭＭＣ記憶コンポーネント、ｅＭＭＣ記憶コンポーネント、サンダーボルト記憶コンポーネント、ＵＦＳ記憶コンポーネント、ＳＤ記憶コンポーネント、メモリスティック記憶コンポーネント、ｘＤピクチャカード記憶コンポーネントといった不揮発性記憶コンポーネントとして実施される。
【０２１２】
様々な実施形態では、ＳＳＤコントローラ（またはコンピューティングホスト・フラッシュ・メモリ・コントローラ）の全部またはいずれかの部分、またはその機能が、コントローラが結合されるべきホスト（図１Ｂのホスト１０２など）において実施される。様々な実施形態では、ＳＳＤコントローラ（若しくはコンピューティングホスト・フラッシュ・メモリ・コントローラ）の全部またはいずれかの部分、またはその機能が、ハードウェア（論理回路など）、ソフトウェアおよび／若しくはファームウェア（ドライバソフトウェアおよび／若しくはＳＳＤ制御ファームウェアなど）、またはそれらの任意の組み合わせによって実施される。例えば、（例えば図１ＡのＥＣＣ１６１および／またはＥＣＣ−Ｘ１３５と同様の）ＥＣＣ部の、またはＥＣＣ部と関連付けられた機能が、一部はホスト上のソフトウェアによって、一部はＳＳＤコントローラ内のファームウェアとハードウェアとの組み合わせによって実施される。別の例として、（例えば図１Ａのリサイクラ１５１と同様の）リサイクラ部の、またはリサイクラ部と関連付けられた機能が、一部はホスト上のソフトウェアによって、一部はコンピューティングホスト・フラッシュ・メモリ・コントローラ内のハードウェアによって実施される。
【０２１３】
マッピング操作
図２に、ＬＢＡのＬＰＮ部分のマッピングの実施形態の選択された詳細を図示する。ある実施形態では、読み出し単位は、ＮＶＭのページの部分といった、独立に読み出すことのできるＮＶＭの最も細かい粒度である。別の実施形態では、読み出し単位は、検査ビットによって保護されるすべてのデータに（低レベル）誤り訂正符号の検査ビット（冗長性ともいう）を加えたものに対応する。例えば、図１ＡのＥＣＣ１６１は、検査ビットによる、例えばＬＤＰＣ符号による誤り訂正を実施し、読み出し単位は、ＬＤＰＣ符号化ビットによって保護されるデータビットにＬＤＰＣ符号を加えたものを実施する符号化ビットに対応する。
【０２１４】
ある実施形態では、マップ１４１は、ＬＢＡ２１１のＬＰＮ２１３部分を、例えば（図１Ａに図示される）表１４３によって、ＬＰＮのためのマップ情報２２１にマップする。ＬＰＮのためのマップ情報（例えばＬＰＮのためのマップ情報２２１）をマップエントリともいう。マップ１４１は、ＬＰＮを対応するマップエントリと関連付けるといわれる。様々な実施形態では、マッピングは、１若しくはそれ以上の連想ルックアップ、１若しくはそれ以上の非連想ルックアップ、および／または１若しくはそれ以上の他の技法によるものである。
【０２１５】
ある実施形態では、ＳＳＤコントローラ１００は、潜在的に、かつ／またはアクティブに使用されているＬＰＮごとに１つのマップエントリを維持する。
【０２１６】
ある実施形態では、ＬＰＮのためのマップ情報２２１は、それぞれの読み出し単位アドレス２２３および読み出し単位での長さ２２５を有する。ある実施形態では、長さおよび／または範囲は、例えば、読み出し単位での長さ２２５の全部またはいずれかの部分において、例えば、長さを範囲からのオフセットとして記憶することによって、符号化して記憶される。別の実施形態では、第１のＬＰＮは第１のマップエントリと関連付けられており、（第１のＬＰＮと異なるが、第１のＬＰＮによって参照される論理ページと同サイズの論理ページを参照する）第２のＬＰＮは第２のマップエントリと関連付けられており、第１のマップエントリのそれぞれの読み出し単位での長さは、第２のマップエントリのそれぞれの読み出し単位での長さと異なる。
【０２１７】
様々な実施形態では、同じ時点において、第１のＬＰＮは第１のマップエントリと関連付けられており、（第１のＬＰＮと異なる）第２のＬＰＮは第２のマップエントリと関連付けられており、第１のマップエントリのそれぞれの読み出し単位アドレスは、第２のマップエントリのそれぞれの読み出し単位アドレスと同じである。別の実施形態では、第１のＬＰＮと関連付けられたデータおよび第２のＬＰＮと関連付けられたデータは、どちらも、ＮＶＭ１９９内の同じデバイスの同じ物理ページに記憶されている。
【０２１８】
様々な実施形態によれば、読み出し単位アドレス２２３は、ＮＶＭ内の開始アドレス、ＮＶＭ内の終了アドレス、上記のいずれかのオフセット、およびＬＰＮ２１３と関連付けられたＮＶＭの部分を特定するための任意の他の技法のうち１若しくはそれ以上と関連付けられている。
【０２１９】
図３に、読み出し単位の量で測った長さを総体として有する、様々な読み出し単位として編成された読み出しデータを生成するための、読み出し単位アドレスのところのＮＶＭへのアクセスの実施形態の選択された詳細を図示する。様々な実施形態によれば、最初の読み出し単位３１３は、ＮＶＭのアドレス空間における最低のアドレスを有する読み出しデータ３１１内の読み出し単位のうち１つ、読み出し単位のうち固定された１つ、読み出し単位のうち任意の１つ、読み出し単位のうち可変の１つ、および任意の他の技法によって選択される読み出し単位のうち１つのうち１若しくはそれ以上である。様々な実施形態では、ＳＳＤコントローラ１００は、ＮＶＭ１９９にアクセスし、読み出し単位での長さ２２５によって指定される数以下の数の読み出し単位を読み出すことによって読み出しデータ３１１を生成することができるようになっている。
【０２２０】
図４Ａに、（図３の読み出し単位３１３や読み出し単位３１５といった）読み出し単位の実施形態の選択された詳細を読み出し単位４０１Ａとして図示する。様々な実施形態および／または使用シナリオにおいて、ヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａは連続しており、ヘッダの各々によって（例えばそれぞれのオフセットにより）特定されるそれぞれのデータ領域は、ヘッダの最後のものに後に続いて連続している。各データ領域は総体としてデータバイト４２１Ａを形成している。各データ領域は、各ヘッダが記憶される位置順と一致した位置順で記憶される。例えば、読み出し単位の先頭のところの第１のヘッダを考えると、第２のヘッダおよび第３のヘッダは、第１のヘッダのすぐ後に続く。（第１のヘッダ内の第１のオフセットによって特定される）第１のデータ領域は第３のヘッダのすぐ後に続く。（第２のヘッダ内の第２のオフセットによって特定される）第２のデータ領域は第１のデータ領域のすぐ後に続く。同様に、（第３のヘッダ内によって特定される）第３データ領域も第２のデータ領域のすぐ後に続く。
【０２２１】
図４Ｂに、（図３の読み出し単位３１３や読み出し単位３１５といった）読み出し単位の別の実施形態の選択された詳細を読み出し単位４０１Ｂとして図示する。様々な実施形態および／または使用シナリオにおいて、ヘッダマーカ（ＨＭ）４１０Ｂは、後に続く連続したヘッダ（ヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ...ヘッダＮ  ４１９Ｂ）の数を指示する任意選択の最初のフィールド（例えば１バイトのフィールド）である。データ領域（データバイト４２１Ｂ、データバイト４２２Ｂ...データバイト４２９Ｂ）は、それぞれ、ヘッダ（ヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ...ヘッダＮ  ４１９Ｂ）によって特定され、ヘッダが記憶される位置順とは逆の位置順で記憶される。ヘッダは読み出し単位の先頭から開始し、対応するデータ領域は読み出し単位の末尾から開始する。ある実施形態では、データ領域内のデータバイト（例えば、データバイト４２１Ｂ、データバイト４２２Ｂ...データバイト４２９Ｂ）は、前方順（位置順と一致するバイト順）に配置され、別の実施形態では、データバイトは、逆順（位置順に対して反転されたバイト順）に配置される。ある実施形態では、ヘッダマーカが、（例えば図４Ａに示すように）ヘッダおよびデータバイトが同じ位置順で記憶されている読み出し単位で使用される。
【０２２２】
ある実施形態では、任意選択のパディングバイト４３１Ａ（または４３１Ｂ）は、特定のＬＰＮと関連付けられたデータの粒度に従ったものである。例えば、ある実施形態では、データバイト４２１Ａ（またはデータバイト４２１Ｂ、データバイト４２２Ｂ...データバイト４２９Ｂの総体）が、ヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａまで（またはヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ...ヘッダＮ  ４１９Ｂ）の最後のヘッダを除くすべてのヘッダと関連付けられたデータを記憶した後で、決まった量、例えば８バイトより少ない残りのスペースを有する場合には、最後のヘッダと関連付けられたＬＰＮのデータは後続の読み出し単位において開始する。別の実施形態では、最後のヘッダ内の特定のオフセット値（例えばすべて１）が、最後のヘッダと関連付けられたＬＰＮのデータが後続の読み出し単位において開始することを指示する。
【０２２３】
図５に、いくつかのフィールドを有するヘッダ（例えば、図４Ａのヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａまでや、図４Ｂのヘッダ１  ４１１Ｂからヘッダ  ４１９Ｂまでのいずれか）の実施形態の選択された詳細を図示する。ある実施形態では、ヘッダは固定長である（例えば、各ヘッダは同じバイト数の長さである）。ヘッダ５０１は、種類５１１、最終標識５１３、フラグ５１５、ＬＰＮ５１７、長さ５１９、およびオフセット５２１の各フィールドを有する。様々な実施形態によれば、ヘッダ５０１は、エポック５２３を有し、かつ／またはエポック５２３と関連付けられており、かつ／または、任意選択で、かつ／若しくは選択的に、エポック５２３が前若しくは後に付加されている。種類フィールドは、データバイトのカテゴリを特定する。例えば、種類フィールドは、データバイトのカテゴリが、ホストデータ（論理ページデータなど）またはシステムデータ（マップ情報やチェックポイント情報など）の１つであることを指示する。最終フィールドは、ヘッダがデータバイトの前の最終ヘッダであることを指示する。ヘッダマーカを用いるある実施形態では、最終フィールドは任意選択で割愛される。ＬＰＮフィールドは、ヘッダが関連付けられているＬＰＮである。ＬＰＮフィールドは、特定のＬＰＮと関連付けられたヘッダのうち特定のヘッダを、例えば、特定のＬＰＮと一致するＬＰＮフィールドを有するヘッダを求めてヘッダをサーチすることによって決定するためのヘッダのパーシングを可能にする。長さフィールドは、データバイトのバイト単位の長さ（例えば、ヘッダ５０１と関連付けられたデータバイト４２１Ａに何バイトのデータがあるか）である。ある実施形態では、オフセットフィールド内のオフセットは、特定の粒度（８バイトの粒度など）に従って丸められる。エポックフィールドは、同じストリームまたは異なるストリームの他のオブジェクトに関連してヘッダがその一部であるオブジェクトの書き込み順を特定するタイムマーカである。
【０２２４】
様々な実施形態では、特定のＬＰＮと関連付けられた一部または全部の情報が、特定のＬＰＮと関連付けられたマップエントリ、特定のＬＰＮと関連付けられたヘッダ、またはその両方に記憶される。例えば、ある実施形態では、長さ５１９の一部または全部が、ヘッダではなくマップエントリに記憶される。
【０２２５】
図６に、複数のＮＶＭデバイス（１若しくはそれ以上のフラッシュダイおよび／またはフラッシュチップなど）のブロック、ページ、および読み出し単位の実施形態の選択された詳細を図示する。
【０２２６】
各デバイス（デバイス６０１、６０３...および６０９のうちいずれか１つなど）は、ブロック（デバイス６０１のブロック６３１、６３３...および６３９；デバイス６０３のブロック６６１、６６３...および６６９；以下同様など）として編成された記憶を提供する。ある実施形態では、各デバイスは、整数個のブロックを有し、ブロックは消去の最小の量である。各ブロックは、さらに、ページ（ブロック６３１のページ６２１、６２３...および６２９；ブロック６６１のページ６５１、６５３...および６５９；以下同様など）を有する。ある実施形態では、各ブロックは整数個のページを有し、ページは書き込みの最小の量である。各ページは、さらに、読み出し単位（ページ６２１の読み出し単位６１１、６１３...および６１９；ページ６５１の読み出し単位６４１、６４３...および６４９；以下同様など）を有する。様々な実施形態によれば、以下のうち１若しくはそれ以上である。読み出し単位は読み出しおよび誤り訂正の最小の量である、各ページは整数個の読み出し単位を有する、２つ以上のページの関連付けられたグループは整数個の読み出し単位を有する、および読み出し単位は、任意選択で、かつ／または選択的に、ページ境界にまたがる。デバイスにおける情報の読み出しおよび／または書き込みは、「読み出し単位優先」順や、「ページ優先」順といった順序に従って行われる。図示の読み出し単位の読み出し単位優先順の一例は、読み出し単位６１１から開始し、その後に６４１、６７１、６１３、６４３、６７３などが続き、６７９で終了する。図示の読み出し単位のページ優先順の一例は、読み出し単位６１１から開始し、その後に６１３、６１９、６４１、６４３、６４９、６７１、６７３などが続き、６７９で終了する。
【０２２７】
様々な実施形態では、フラッシュダイ６０１、６０３...および６０９は、図１Ａの１若しくはそれ以上の個々のフラッシュダイ１９４のそれぞれのフラッシュダイに対応する。ある実施形態では、デバイス６０１、６０３...および６０９は、ＮＶＭ１９９の全部より小さい部分である。例えば、様々な実施形態では、データはフラッシュダイの複数のグループにまたがって独立にストライピングされ、フラッシュダイのグループの各々に独立にアクセスすることができる。
【０２２８】
ある実施形態では、様々なＮＶＭ管理機能（読み出し、再利用、消去、プログラミング／書き込み、および／またはＮＶＭの使用に関連した機能のうち１若しくはそれ以上など）が、Ｒ−ブロックともいう、論理スライスおよび／またはセクション単位で行われる。様々な実施形態では、Ｒ−ブロックは、例えばフラッシュメモリの様々なダイ（例えば、すべてのダイ、全部若しくは一部が故障しているものを除くすべてのダイ、および／またはダイの１若しくはそれ以上の選択されたサブセット）にまたがる論理スライスまたはセクションとして例示される。例えば、Ｒ個のフラッシュダイを有し、各フラッシュダイがＮ個のブロックを有するフラッシュメモリにおいて、各Ｒ−ブロックは、合計でＮ個のＲ−ブロックでは、全部合わせたフラッシュダイの各々からの第ｉのブロックである。別の例として、Ｒ個のフラッシュダイを有し、各フラッシュダイがＮ個のブロックを有するフラッシュメモリにおいて、各Ｒ−ブロックは、合計でＮ／２個のＲ−ブロックでは、フラッシュダイの各々からの第ｉのブロックおよび第（ｉ＋１）のブロックである。さらに別の例として、複数のデュアル・プレーン・デバイスを有するフラッシュメモリにおいて、各Ｒ−ブロックは、デュアル・プレーン・デバイスの各々からの第ｉの偶数ブロックおよび第ｉの奇数ブロックである。
【０２２９】
Ｒ−ブロックとしての管理のためのフラッシュ・ダイ・ブロックの他の配置も企図されており、これは、いくつかのブロックが動作不能である場合でさえも、Ｒ−ブロックが各ダイからの１つのブロックを有するようにするための仮想ブロックアドレスと物理ブロックアドレスとの間のマッピングを有する。様々な実施形態では、仮想ブロックアドレスと物理ブロックアドレスとの間のマッピングが、Ｒ−ブロック内のブロックのうち不良ブロックを置き換えるための予備の（そうでなければ未使用の）ブロックを有するように、各フラッシュダイ内のＮ個のブロックのうち一部が予備として使用される。
【０２３０】
図７に、Ｒ−ブロックの実施形態の選択された詳細を図示する。図には、６６個のフラッシュダイ（フラッシュダイ７１０．６５...７１０．０）を有する実施形態が図示されている。ブロック、ページ、およびＲ−ブロックとしてのブロックの管理が図示されている。各フラッシュダイは、Ｎ個のブロック（例えば、フラッシュダイ７１０．６５のブロック７１０．６５Ｂ０、ブロック７１０．６５Ｂ１...ブロック７１０．６５ＢＢ）を有するものとして図示されている。Ｒ−ブロックの具体例は、各Ｒ−ブロックが、全部合わせたフラッシュダイの各々からの第ｉのブロックであるものであり、例えば、Ｒ−ブロック７６０．０は、フラッシュダイ７１０．６５からのブロック７１０．６５Ｂ０、フラッシュダイ７１０．６４からのブロック０（明確に図示されていない）、および以下同様に、フラッシュダイ７１０．０のブロック７１０．０Ｂ０までである。よって、合計でＮ個のＲ−ブロック（Ｒ−ブロック７６０．０、Ｒ−ブロック７６０．１...Ｒ−ブロック７６０．Ｒ）がある。Ｒ−ブロックの別の具体例は、各Ｒ−ブロックが、全部合わせたフラッシュダイの各々からの第ｉのブロックおよび第（ｉ＋１）のブロックであるものである（例えば、フラッシュダイ７１０．６５からのブロック７１０．６５Ｂ０およびブロック７１０．６５Ｂ１、フラッシュダイ７１０．６４からのブロック０およびブロック１、および以下同様に、フラッシュダイ７１０．０からのブロック７１０．０Ｂ０およびブロック７１０．０Ｂ１まで）。よって、各フラッシュダイにＮ個のブロックがある場合には、Ｎ／２個のＲ−ブロックがある。
【０２３１】
ブロックが、Ｒ−ブロックを形成することの一部として、対で、または他の関連付けられたグループとして扱われる様々な実施形態では、ブロックの関連付けられたグループの各ブロックからのそれぞれのページも、例えば、書き込み、より大きいマルチブロックページのための単位として扱われる。例えば、偶数ブロックおよび奇数ブロックを有する様々なデュアルプレーンの実施形態では、偶数ブロックの特定の１つの第１のページおよび奇数ブロックの関連付けられた１つの第１のページが、書き込みのための単位として、また任意選択で、かつ／または選択的に、読み出しのための単位として扱われる。同様に、特定の偶数ブロックの第２のページおよび関連付けられた奇数ブロックの第２のページも単位として扱われる。様々な実施形態によれば、本明細書で使用するＮＶＭのページは、ＮＶＭの単一のページ、ＮＶＭのマルチブロックページ、任意選択で、かつ／または選択的に、読み出しのための１若しくはそれ以上の個々のページとして扱われる書き込みのためのＮＶＭのマルチブロックページ、およびＮＶＭのページの任意の他のグループ化または関連付けのうち１若しくはそれ以上をいう。
【０２３２】
ある実施形態では、例えば、故障した（例えば不良の）ブロックのスキップなどが原因で、すべてのＲ−ブロックが同じサイズではない。例えば、ブロック７１０．０Ｂ０が不良であり、使用できない場合には、Ｒ−ブロック７６０．０はＲ−ブロック７６０．１より１少ないブロックを有する。
【０２３３】
ある実施形態では、各Ｒ−ブロックは、Ｒ−ブロックヘッダ、例えば特定の形のヘッダ５０１を有し、種類フィールドは（データの種類などではなく）Ｒ−ブロックの種類を指定する。別の実施形態では、Ｒ−ブロックヘッダは、Ｒ−ブロック内の複数のブロックで、例えば、Ｒ−ブロック内のブロックの各々の第１のページで繰り返される。様々な実施形態によれば、Ｒ−ブロックヘッダは、Ｒ−ブロックの種類、Ｒ−ブロックのバンド、Ｒ−ブロックの順序番号、前のＲ−ブロック番号、および他の情報のうち１若しくはそれ以上を有する。Ｒ−ブロックの種類は、Ｒ−ブロックに含まれる情報の種類、例えば、ホストデータ情報、マップ情報、チェックポイント情報を指示する。Ｒ−ブロックのバンドは、複数のバンドのうちどのバンドがＲ−ブロックを有するか指定する。例えば、Ｒ−ブロックのバンドは、ホット・データ・バンド、コールド・データ・バンド、マップバンド、またはチェックポイントバンドのうち１つを指定する。Ｒ−ブロックの順序番号は、使用されるＲ−ブロックごとに１回増分され、Ｒ−ブロック作成の順序付けを提供する。ある使用シナリオでは、Ｒ−ブロックの順序番号はバンドごとであり、別の使用シナリオでは、Ｒ−ブロックの順序番号はグローバルである。前のＲ−ブロック番号は各バンドのうち所与のバンド内のＲ−ブロックが逆の（例えば、時間を遡る）順に相互にリンクされることを可能にする。
【０２３４】
ある実施形態では、回復は、Ｒ−ブロックの各々のＲ−ブロックヘッダを決定すること、およびＲ−ブロックヘッダの内容を使用して、バンドの各々の最後の（最も新しく書き込まれた）Ｒ−ブロックを決定することを有する（例えば、これらのことから開始する）。
【０２３５】
自己ジャーナリングおよび階層的整合性
自己ジャーナリングの一例は、オブジェクトが、もっぱらオブジェクト自体の内部にオブジェクトを回復するのに十分な情報を有する（例えば、ＬＢＡをそのＬＢＡが対応するＬＢと共に記憶している）ときである。階層的整合性の一例は、構造化された別のデータのバージョンを調べることによりデータ構造のどのバージョンを使用すべきか決定することである。例えば、特定のタイムマーカによって特定されるデータバージョンは、特定のタイムマーカによって特定されるマップバージョンよりも優先され、特定のタイムマーカによって特定されるマップバージョンは、さらに、特定のタイムマーカによって特定されるチェック・ポイント・バージョンよりも優先される。自己ジャーナリングの技法を階層的整合性の技法と併用することにより、ある実施形態および／または使用シナリオでは、これらの技法を使用しない場合よりも効率のよいマップ再構築および／または低待ち時間のＦＵＡハンドシェークが可能になる。
【０２３６】
様々な実施形態では、マップ（ＬＢＡから読み出し単位への、例えば、図１Ａのマップ１４１の全部または任意の部分）は、１レベル、２レベル、またはマルチレベルのマップであり、表、ＣＡＭ、ハッシュ表、探索木、キー（ＬＢＡなど）を値（読み出し単位アドレスなど）と関連付ける任意の構造、またはそれらの任意の組み合わせのうち１若しくはそれ以上として実施される。ある実施形態では、マップは、頻繁にアクセスされるエントリおよび／またはダーティエントリを保持するためのキャッシュを有する。マップキャッシュは、表、ＣＡＭ、ハッシュ表、探索木、キー（ＬＢＡなど）を値（読み出し単位アドレスなど）と関連付ける任意の構造、またはそれらの任意の組み合わせのうち１若しくはそれ以上として実施される。
【０２３７】
様々な実施形態では、書き込みデータは、論理ページ、ＮＶＭのページ、単一の読み出し単位として、または上記のうち１若しくはそれ以上として、各ＬＢＡと関連付けられたマップエントリに長さを記憶することにより記憶される。ホストは（ＬＢＡによってアドレス指定された）ＬＢの最も細かい粒度で書き込みデータを提供する。様々な実施形態では、ホストからのＬＢは、任意選択で、かつ／または選択的に圧縮され、１未満の読み出し単位、１つの読み出し単位、１より大の読み出し単位、非整数個の読み出し単位、または何らかの他のサイズを消費する。
【０２３８】
別の実施形態では、ホストは書き込みデータを、ＬＢの粒度よりも細かい粒度、例えばセクタ粒度で提供する。例えば、１セクタは５１２Ｂであり、各ＬＢは８個の連続したセクタを有する。ＬＢのサイズより小さいデータサイズを有する、または特定のＬＢの一部分だけを書き込ませるアラインメントを有するホストからの書き込み操作は、読み出し・変更・書き込み操作として処理される。
【０２３９】
ある実施形態では、読み出し単位を例に取ると、マップは、特定のＬＢＡを、それぞれの読み出し単位アドレス、ならびに、例えば読み出し単位でのそれぞれの長さおよび／または範囲と関連付ける（例えば、ＬＢＡ２１１は、図２に示すように、マップ１４１によって読み出し単位アドレス２２３および読み出し単位での長さ２２５にマップされ、読み出し単位での長さ２２５は、特定のＬＢＡのデータのサイズとしての長さ、およびデータを獲得するために読み出すべき読み出し単位の数としての範囲を符号化している）。特定のＬＢＡによって参照される論理ブロック（ＬＢ）は、それぞれの読み出し単位アドレスによってアドレス指定されるＮＶＭ内の特定の読み出し単位において開始し、それぞれの範囲によって与えられる読み出し単位の数にまたがって記憶されている。例えば、あるＬＢの範囲は、ＬＢが特定の読み出し単位に含まれることを指示する。様々な実施形態および／または実施態様において、特定の読み出し単位は、他のＬＢを全く記憶せず、他のＬＢの一部を記憶し、または１若しくはそれ以上の他のＬＢを記憶している。
【０２４０】
特定の読み出し単位は、特定の読み出し単位で開始する１若しくはそれ以上のＬＢの各々についてのヘッダを有する（例えば、図４Ａのヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａまでや、図４Ｂのヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ...ヘッダＮ  ４１９Ｎ）。ヘッダの各々は、特定の読み出し単位に記憶されているＬＢのそれぞれのＬＢＡを有する（例えば、図５のヘッダ５０１のＬＰＮ５１７および／またはオフセット５２１）。例えば、特定のＬＢＡと関連付けられたヘッダのうち特定の１つが特定のＬＢＡを有する。様々な実施形態では、ヘッダは、ＬＢが見つかる読み出し単位内のオフセット、ＬＢで使用された圧縮の種類の指示、バイト単位で記憶されたＬＢＡの長さ、他の情報といった他の情報を有する。
【０２４１】
例えば、データ編成および／または順序付け、ＬＢの先頭を保持しない読み出し単位内のヘッダの存在（または非存在）、ヘッダが読み出し単位の先頭または末尾を指示するかどうか、ならびにヘッダが、それらのヘッダがそれぞれ対応するデータの最初の読み出し単位または最後の読み出し単位に記憶されているかどうかに関して、ヘッダおよびデータを読み出し単位に記憶するための様々な技法のうち１若しくはそれ以上を使用した様々な実施形態が企図されている。
【０２４２】
自己ジャーナリング属性の一例は、読み出し単位に記憶されている１若しくはそれ以上のそれぞれのＬＢの（例えば、読み出し単位の１若しくはそれ以上のヘッダにおける）１若しくはそれ以上のそれぞれのＬＢＡの前述の記憶である。自己ジャーナリング属性は、読み出し単位がフラッシュメモリに書き込まれた後の（例えばヘッダからの）ＬＢＡおよび対応するＬＢデータのためのマップ情報の回復を可能にする。というのは、読み出し単位だけの処理がマップ情報の回復を可能にするからである。
【０２４３】
様々な実施形態および／または使用シナリオにおいて、回復のための様々な技法が（例えば、予期しない電源喪失、誤動作、またはＮＶＭへのデータの記憶を中断させ、かつ／または妨げる他のイベントに応答して）使用される。例えば、チェックポイントが、誤動作からの回復を全部または一部可能にするための情報を周期的に書き出すことによって維持される。ある実施形態では、チェックポイントは複数のエントリを有し、各エントリは、アクティビティのストリーム内のある点までの回復情報を不揮発性記憶システム（ＳＳＤのＮＶＭなど）に提供する。様々な実施形態において、様々なチェックポイントエントリは異なる種類の情報を有し、例えば、異なるチェックポイント情報が異なるときに記録される。
【０２４４】
ある実施形態では、ローリングチェックポイントが書き込まれ、複数のチェックポイントエントリが、各々、１若しくはそれ以上のデータ構造の少なくとも一部分（例えば、第１レベルマップの一部分および／またはＲ−ブロック使用カウント表の全部）を有する。ローリングチェックポイントは、ある期間にわたるチェックポイント情報を保存する（性能、ＮＶＭへの余分な書き込み、およびＮＶＭの管理オーバーヘッドの）コストを分散させる。ある実施形態では、ローリングチェックポイントは、チェックポイントの作成時にチェックポイント設定されているデータ構造の一部分だけをロックし、データ構造の残りの部分を、ロックされず、よって、非チェックポイント用に使用できる状態のままにすることを可能にする。
【０２４５】
例えば、様々な実施形態では、（必ずしも全部とは限らないが）チェックポイントエントリのうち少なくとも一部は、（空きＲ−ブロックが使用されるべき順に記憶された）空きＲ−ブロックのリストを有する。チェックポイントは、回復時に、（ａ）チェックポイントをＮＶＭ内で位置特定することができ、（ｂ）最も遅いチェックポイントを決定することができ、（ｃ）ある実施形態では、チェックポイントを、時間経過順に、かつ／または逆時間順に再生できるように書き込まれる。例えば、チェックポイントは、ＮＶＭ内の特定の位置に、ＦＩＦＯ順で（遅いエントリが早いエントリの後になるように）書き込まれる。最終的には、チェックポイントＦＩＦＯへの書き込みが「終了し」、最も古いエントリが消去され、かつ／または若いエントリで上書きされる。チェックポイントＦＩＦＯへ書き込むことは、任意選択で、（例えば、ＦＩＦＯ内の最も若いエントリと最も古いエントリとを区別するために）チェックポイントエントリのそれぞれの経過時間を決定することができるようにタイムスタンプと一緒に書き込むことを有する。様々な他の実施形態では、ＦＩＦＯ以外のデータ構造（ピンポン構造、表、チェックポイントエントリを記憶することが可能な他のデータ構造など）がチェックポイントを記憶するのに使用される。ある実施形態では、チェックポイントＦＩＦＯは先入れ先出しデータ構造であるが、他の実施形態では、チェックポイントＦＩＦＯは、他の構造、例えば、待ち行列、ストリーム、所定の順序で書き込まれたランダムにアクセスできる構造を用いて実施される。
【０２４６】
ある実施形態では、データは、１若しくはそれ以上のデータストリームに書き込まれる。ホストが書き込みデータを提供する際には、たとえデータが非連続領域のためのもの（ＬＢＡの無関係なグループなど）でも、書き込みデータはＲ−ブロックへ集約される。書き込みデータのデータストリームはホスト書き込みアクティビティのログと同様のものである。というのは、（必ずしも、すべての実施形態において、同一の順序で、データがホストから到来するとは限らないが）データストリームがホスト書き込みのデータを記録するからである。様々な実施形態では、１若しくはそれ以上のデータストリームがある。例えば、ある実施形態では、再利用アクティビティ（全部および／または一部が上書きされているＲ−ブロックから空きスペースを取り戻すこと）は、再利用データストリームを対象とし、ホスト書き込みアクティビティは、再利用データストリームとは別個のホストデータストリームを対象とする。別の実施形態では、ホストデータが第１のＲ−ブロックに書き込まれ、同時に発生する再利用データが、第２の異なるＲ−ブロックに書き込まれる。再利用される（コールド）データを新しく書き込まれる（ホット）データと分離することは、ある使用シナリオでは好都合である。さらに別の実施形態では、ホストデータの一部、例えば、コールドであると決定されたホストデータの部分が、第２のＲ−ブロックに選択的に書き込まれる。
【０２４７】
様々な実施形態によれば、チェックポイントエントリが、時間周期的に、例えば、ホストコマンドに応答して、かつ／または指定された量のアクティビティ（指定された量のホスト書き込みデータ、指定された数のマップ参照、および／または指定された量のダーティマップ情報など）に応答して作成される。別の実施形態では、異なる構造が、異なるときに、かつ／または異なる規則に従ってチェックポイント設定される。
【０２４８】
様々な実施形態では、チェックポイントは、例えば、第１レベルマップ、マップキャッシュ、Ｒ−ブロック使用表、消去カウントといったＲ−ブロック統計、Ｒ−ブロック他に基づいて累積された誤りカウントや読み出し妨害情報といった他の統計、フリーリスト、ならびに不揮発性記憶システムにおける他の状態情報および／または使用の表といった１若しくはそれ以上のデータ構造の一部または全部を有する。
【０２４９】
ある実施形態では、チェックポイントエントリのうち１若しくはそれ以上に全部または一部が含まれるデータ構造が回復プロセスで使用される。別の実施形態では、例えばローリングチェックポイントを用いて、複数のチェックポイントエントリが、第１レベルマップといったデータ構造を回復するのに使用される。
【０２５０】
一例では、回復時に、チェックポイントＦＩＦＯを使用して、チェックポイントＦＩＦＯのチェックポイントのエントリに保存された空きＲ−ブロックの１若しくはそれ以上のリストのうち最も遅いリストが見つけられる。次いで、Ｒ−ブロックのうちどれがすでに使用されているか（使用されているＲ−ブロックは消去状態にはないため決定可能である）を知るために、空きＲ−ブロックの最も遅いリスト内のＲ−ブロックが読み出される。ある使用シナリオでは、Ｒ−ブロックのわずかな部分が誤動作よりも先に書き込まれたものであり、その書き込まれたＲ−ブロックのわずかな部分を回復することができる。空きＲ−ブロックの最も遅いリスト内のＲ−ブロック内の読み出し単位が、読み出し単位内のヘッダを見つけるためにスキャンされる。ヘッダは、読み出し単位に記憶されたＬＢを指示するＬＢＡを有する。（ＮＶＭのどこにＬＢＡのためのデータが記憶されているか決定することを可能にする）マップが、ＬＢＡのいずれかがマップから欠落しているかどうか決定するために検査される。例えば、ＬＢＡのうち１つについてのマップのエントリが、ＬＢＡが見つかった読み出し単位よりも古い読み出し単位を参照している場合である。マップの情報が古くなっている場合、マップは更新される。ある使用シナリオでは、例えば、ＬＢＡがチェックポイント期間の間に複数回書き込まれたときに、同じＬＢＡが最初の読み出し単位で見つかり、続いて第２の読み出し単位で見つかる。よって、この例では、データ読み出し単位が、概念的には、回復時に順番に処理され、場合によっては、同じＬＢＡが読み出し単位内のヘッダで複数回見つかる場合には、マップ内の同じエントリが回復時に複数回更新される。別の例では、データ読み出し単位が、概念的には、（前方へなど順番にではなく）逆方向に処理され、同じＬＢＡへの反復書き込みが廃棄される。
【０２５１】
様々な技法を使用して、マップとＮＶＭに書き込まれた書き込みデータとが同期される。技法のあるものは１レベルマップを用いた実施形態に適用することができ、技法の別のものは２レベルまたはマルチレベルマップを用いた実施形態に適用することができる。
【０２５２】
ある実施形態では、マップは、マップのうち一部または全部をチェックポイントエントリに書き込むことによって周期的にチェックポイント設定される。ある実施形態では、マップ全体がチェックポイントＦＩＦＯに書き込まれる。別の実施形態では、マップは、ＮＶＭ内の特定のピンポン位置に（また任意選択で、タイムスタンプと共に）書き込まれる。さらに別の実施形態では、マップがＮＶＭのどこに書き込まれているか指示するＮＶＭ内のアドレスがチェックポイントＦＩＦＯに書き込まれる。さらに別の実施形態では、マップは、マップ全体が複数のチェックポイントエントリにまたがってチェックポイント設定されるように（ローリングチェックポイントなど）一度に一部分ずつチェックポイント設定される。ある使用シナリオでは、一度に一部分ずつマップをチェックポイント設定することにより、ホスト書き込みコマンドといったいくつかのコマンドの待ち時間の上限を低減することが可能になる。
【０２５３】
ある実施形態では、整合性の問題を解決するために、階層的整合性書き込み順序付けを課して、整合性、例えば、書き込みデータが、常に、対応する更新されたマップエントリがＮＶＭに書き込まれるよりも先にＮＶＭに書き込まれることが保証される。例えば、ある実施形態では、マップエントリは、書き込みデータがＮＶＭにコミットされた後で初めて更新され、書き込みデータは、書き込みデータが関連付けられているＬＢＡを記録したヘッダを有する。その間に、マップへの待ち状態の更新が、マップキャッシュといった別の構造において保持される。ある実施形態では、マップキャッシュは、エントリが「待ち状態」である（例えば、ＮＶＭへの書き込みデータの書き込みが完了するのを待っている）かどうか指示するマップキャッシュ内のエントリごとの情報を有する。チェックポイント設定されているマップのバージョンの更新を、書き込みデータがＮＶＭに書き込まれるまで遅延させることによって、マップのチェックポイントは常に書き込みデータよりも古いことになり、マップと書き込みデータとの整合性が明確に定義される。というのは、書き込みデータヘッダからのＬＢＡマッピング情報が、マップからの競合する（より古い）情報よりも優先されるからである。
【０２５４】
階層的整合性書き込み順序付けを使用することにより、（ＮＶＭに記憶され、回復時に復元される）マップは、常に、データ読み出し単位よりも早い情報だけを有することになる。回復されたマップは、常に、回復されたデータ読み出し単位からのデータよりも古く、（例えば、チェックポイントＦＩＦＯ内の空きＲ−ブロックのリストから決定される）回復されたデータ読み出し単位内のヘッダがマップを更新するのに使用される。
【０２５５】
ある２レベルマップ実施形態では、第２レベル・マップ・エントリが周期的にＮＶＭに記憶される。（複数の第２レベル・マップ・エントリを有する）第２レベル・マップ・ページが第１レベルマップインデックスを有するマップヘッダを有し、第１レベルマップインデックスと関連付けられたＦＬＭのエントリが第２レベル・マップ・ページを指し示す。第１レベルマップインデックスは、第２レベル・マップ・ページのための自己ジャーナリング属性を提供する。階層的整合性書き込み順序付けは、書き込みデータがまずＮＶＭに書き込まれ、書き込みデータと関連付けられた第２レベル・マップ・エントリのうち特定の１つを有する第２レベル・マップ・ページが、書き込みデータの書き込みが完了した後で初めてＮＶＭに書き込まれ、第２レベル・マップ・ページを指し示す第１レベル・マップ・エントリが、第２レベル・マップ・ページ書き込みが完了した後で初めて（第２レベル・マップ・ページの更新された位置を参照するように）更新されるように拡張適用される。空きＲ−ブロックのリストは、任意選択で、かつ／または選択的に、第２レベル・マップ・エントリならびに書き込みデータを記憶するのに使用されたＲ−ブロックを有する。ある実施形態では、空きＲ−ブロックのあるリストが第２レベル・マップ・エントリに使用され、空きＲ−ブロックの別のリストがデータに使用され、Ｒ−ブロックが２つのリスト間で隔離される。２つのリストは、データ読み出し単位から１レベルマップを回復するのと同様に、第２レベル・マップ・ページ内のヘッダから第１レベルマップを回復することを可能にする。よって、第１レベルマップのチェックポイントは、常に、復元された第２レベル・マップ・ページよりも古い（また第１レベルマップは、復元された第２レベル・マップ・ページ内のヘッダを使用して更新される）。同様に、第２レベル・マップ・ページは書き込みデータよりも古く、第２レベル・マップ・ページは、復元されたデータ読み出し単位内のヘッダを使用して更新される。
【０２５６】
ある実施形態、例えば、ローリングチェックポイントを用いるある実施形態では、追加のジャーナルヘッダが、チェックポイントイベントを記録するために、データ読み出し単位に、かつ／またはマップ読み出し単位に追加される。ジャーナルヘッダはイベントを記録する情報を有し、この情報は回復を支援するのに使用される。例えば、ジャーナルヘッダは、マップの一部分がデータストリーム内のその時点まで整合している（例えばチェックポイント設定されている）ことを指示するためにデータ読み出し単位に書き込まれる。
【０２５７】
ジャーナルヘッダは、ある実施形態では、データストリームをどれほど遡って回復プロセスを開始すべきか指示する。例えば、ローリングチェックポイントを用いて、１若しくはそれ以上のデータ構造のチェックポイント情報を割愛するいくつかのチェックポイントエントリを用いる別の実施形態では、回復は、すべてのデータ構造が完全にチェックポイント設定されている最も遅い時点に対応する情報を使用して処理を開始する。例えば、マップがＮ個のチェックポイントエントリにまたがってＮ個の部分としてチェックポイント設定されている場合には、回復は、その後にマップのＮ個の部分すべてがチェックポイント設定された最も遅い時点に対応するデータページ内の位置（「最も遠いバックポイント」という）から開始する。
【０２５８】
ある実施形態では、ジャーナルヘッダは、ある特定の点において整合性を有するデータ構造の部分を指示する。上記のマップ回復の例を続けると、最も遠いバックポイントでは、マップのＮ個の部分のうち最初の部分がチェックポイント設定されている（また、最も遠いバックポイントの定義によれば、データストリーム内の後の時点ではチェックポイント設定されない）。マップの最初の部分の後に続く、マップの最初の部分に影響を及ぼすすべての更新がマップに適用される。しかし、マップの他の部分は、データストリーム内の後続のデータがチェックポイントにおいて記録されていないことを指示する対応するジャーナルヘッダに遭遇した後に初めて更新される。
【０２５９】
ある実施形態では、階層的に整合性を有するデータおよび／またはデータ構造の時間順序付けが、タイムスタンプおよび／または順序番号によって決定される。すなわち、書き込みデータがＮＶＭに書き込まれたのが、対応する更新されたマップエントリよりも後かそれとも先かの決定は、タイムスタンプおよび／または順序番号の比較によるものである。タイムスタンプおよび／または順序番号は、ＮＶＭへの物理的書き込みが行われる順序に対して不変であるストリーム間での更新の順序の仕様を提供するために、例えば、書き込み／再利用データ、マップ情報、および／またはチェックポイントエントリを保持するそれぞれのストリームにおいて任意選択で、かつ／または選択的に出力される。別の実施形態では、タイムスタンプおよび／または順序番号は、エポックヘッダと呼ばれる特殊なヘッダとしてストリームにおいて出力される。各エポックヘッダは、エポックと呼ばれる現在のタイムスタンプおよび／または順序番号（図５のエポック５２３など）を有する。
【０２６０】
様々な実施形態では、エポックは、データ書き込みごとに進められ、かつ／または増分され、データ書き込みが行われた順序を一意に決定する。別の実施形態では、データ書き込みのうち特定のデータ書き込みから生じるデータ構造更新に、特定のデータ書き込みのエポックが割り当てられる。データ構造更新が特定のデータ書き込みのエポックと共にストリームに書き込まれるときに、特定のデータ書き込みおよびデータ構造更新の順序付けが、特定のデータ書き込みおよびデータ構造更新がＮＶＭに書き込まれる順序とは独立に、特定のデータ書き込みのエポックおよびデータ構造更新のエポックを指定するそれぞれのエポックヘッダから決定される。
【０２６１】
様々な実施形態によれば、エポックヘッダは、データ書き込みごとに１回、あるデータ書き込みと共にのみ、データストリームにおいて周期的に、ＮＶＭの１ページ当たり少なくとも１回、および１バンドスイッチあたり少なくとも１回、のうち１若しくはそれ以上として出力される。単一のデータバンドを用いた第１の例では、エポックヘッダは、データストリームのデータで書き込まれるＮＶＭの１ページ当たり少なくとも１回出力される。データストリームのページごとにエポックヘッダを設けることは、複数のページを読み取らなくてもページ内のデータのエポックを決定することを可能にする。複数のデータバンド、例えばホットバンドとコールドバンドを用いた第２の例では、エポックヘッダは、バンドと関係なく書き込まれるＮＶＭの１ページ当たり少なくとも１回出力され、さらに、直前のデータ書き込みが、バンドのうち、現在のデータ書き込みとは異なるバンドへのものであったとき（バンドスイッチという）にも必ず出力される。バンドスイッチにつき少なくとも１回エポックヘッダを設けることは、すべてのデータ書き込みがそれぞれのエポックヘッダを保持しているとは限らない場合でさえも各データ書き込みのエポックを決定することを可能にする。さらに、バンドスイッチにつき少なくとも１回エポックヘッダを設けることは、２つ以上のバンド、例えばホットバンドとコールドバンドを、バンド間で整合性を有する書き込みの順序付けを提供することによって単一のストリームとして扱うことを可能にする。
【０２６２】
ある実施形態では、複数のエポックシーケンスがある。第１の例では、別々のエポックシーケンスが新しく書き込まれたデータ対再利用データに使用される。関連付けられたデータ書き込みに応じて、データ構造更新に、エポックシーケンスのうち１若しくはそれ以上からのエポックが割り当てられる。第２の例では、ＮＶＭへのデータ書き込みに（例えば第１のエポックシーケンスからの）第１のエポックでタイムスタンプが設定され、ＮＶＭへの第２レベルマップ書き込みには、（例えば第２のエポックシーケンスからの）第２のエポックでタイムスタンプが設定される。第２レベルマップへの更新には、関連付けられたデータ書き込みに対応する第１のエポック値が割り当てられ、第１レベルマップへの更新には、関連付けられた第２レベルマップ書き込みに対応する第２のエポック値が割り当てられる。マップストリームは、任意選択で、かつ／または選択的に、２種類のエポックヘッダを有し、１つは第１のエポック値のヘッダであり、１つは第２のエポック値のヘッダである。
【０２６３】
上記はマップの回復を説明しているが、他のデータ構造も、自己ジャーナリングおよび階層的整合性を使用して同様に回復することができる。例えば、Ｒ−ブロック使用カウント表も同様にチェックポイント設定することができ、回復することができる。ある実施形態では、Ｒ−ブロック使用カウントは、各Ｒ−ブロック内のアクティブな（上書きされていない）ＬＢの数のカウントを有する。
【０２６４】
自己ジャーナリング属性および階層的整合性属性は、キャッシュに入れられた（一部の）データ構造にも適用できる。例えば、マップキャッシュがマップのダーティエントリを有する。ある実施形態では、マップ・キャッシュ・エントリの各々は、複数の第２レベル・マップ・ページのうちの１つに対応し、第２レベル・マップ・ページの各々は複数の第２レベル・マップ・エントリを有し、マップ・キャッシュ・エントリのうち特定のマップ・キャッシュ・エントリは、特定のマップ・キャッシュ・エントリ内の第２レベル・マップ・エントリのいずれかがダーティである場合にはダーティである。マップキャッシュは、階層的整合性に従って、（全体で、ローリングチェックポイント方式で、またはマップキャッシュのダーティエントリを周期的にフラッシュすることによって）チェックポイントエントリに周期的に記録される。ある実施形態では、階層的整合性が、マップエントリごとに守られる。例を続けて、マップキャッシュの一部分がチェックポイントエントリに保存されるときには、完了された書き込みデータ（例えばＮＶＭにコミットされることによって不揮発的に記憶されている書き込みデータ）に対応するマップエントリだけがチェックポイント設定される。例えば、マップキャッシュ内のエントリが更新され、対応するデータがまだ不揮発的に記憶されていない場合、更新されたマップエントリのチェックポイント設定は、対応するデータが不揮発的に記憶されるまで延期される。
【０２６５】
ある実施形態では、マップキャッシュが、１エントリあたり２つの読み出し単位アドレス、例えば、階層的に整合性を有する読み出し単位アドレスと、待ち状態の読み出し単位アドレスを有する。不揮発性記憶システムへの読み出しアクセスは、待ち状態の読み出し単位アドレスを使用して（例えば、ＮＶＭへの書き込みを保留にする読み出し単位アドレス指定によってアクセスされるデータキャッシュに記憶されている）最も遅いデータを位置特定することができるようになっている。しかし、チェックポイント操作は、階層的に整合性を有する読み出し単位アドレスを使用することができるようになっている。書き込みデータがＮＶＭに書き込まれるときに、影響を受けるマップ・キャッシュ・エントリ内の対応する待ち状態のアドレスは、階層的に整合性を有するアドレスにコピーされる（次いで、チェックポイント設置に利用することができる）。
【０２６６】
様々な実施形態では、マップキャッシュの複数のエントリの各々は複数の第２レベル・マップ・ページのうちの１つに対応し、第２レベル・マップ・ページの各々は複数の第２レベル・マップ・エントリを有し、マップ・キャッシュ・エントリのうち特定のマップ・キャッシュ・エントリは、その特定のマップ・キャッシュ・エントリ内の第２レベル・マップ・エントリのいずれかがダーティである場合には、ダーティである。様々な実施形態によれば、マップキャッシュのダーティエントリの各々は、ダーティエントリの最も古い更新のエポックを指定するタイムスタンプと関連付けられている、ダーティエントリの最も新しい更新のエポックを指定するタイムスタンプと関連付けられている、および現在のデータ書き込みのエポックと関連付けられている、のうち１若しくはそれ以上である。ある実施形態では、ダーティエントリの各々は、ダーティエントリの最も古い更新のエポックを指定する関連付けられたタイムスタンプが、現在のデータ書き込みのエポックよりも決定された量を超えて後になるときよりも先にフラッシュされる。ある実施形態では、ダーティエントリのうちフラッシュされたダーティエントリと共にＮＶＭに記憶されたタイムスタンプは、フラッシュされたダーティエントリと関連付けられたタイムスタンプのうち任意の１若しくはそれ以上である。
【０２６７】
例えば、別々の階層的に整合性を有するマップキャッシュと待ち状態のマップキャッシュを使用し、例えば、待ち状態のマップキャッシュ内のエントリが、ＮＶＭに書き込まれる際に、階層的に整合性を有するマップキャッシュにコピーされるなど、他の方式も可能である。
【０２６８】
ある実施形態では、ＬＢＡを動的に（すなわち、ＬＢＡが書き込まれているときに）マップするのに使用されるマップキャッシュといった動的構造が、チェックポイント設定された形でＮＶＭに存在するにすぎない。例えば、これらの構造は、マップ自体と異なり、永続記憶を持たない。例えば、ある実施形態では、マップキャッシュ内のダーティエントリだけがチェックポイント設定され、マップキャッシュが長期間にわたってダーティエントリを保持しなかった（かつ、チェックポイントＦＩＦＯが終了している）場合には、マップキャッシュのためのチェックポイントが存在しない。動的構造は（必要なときに）チェックポイントに存在するため、動的構造は誤動作後の回復時に再構築可能でもある。
【０２６９】
特定の実施形態
様々な特定の実施形態が、不揮発性記憶システムにおける自己ジャーナリングおよび階層的整合性に適用でき、かつ／またはそれらに関連する、１若しくはそれ以上の技法を実施する。２レベルマッピング方式は、マップストリームおよびチェックポイントストリームへの書き込みによって管理され、１若しくはそれ以上のデータストリームへのホストおよび再利用データ書き込みを伴う。２レベルマッピング方式のＦＬＭ要素およびＳＬＭ要素の復元は、チェックポイントストリームからの情報を使用し、続いてマップストリームからの情報を使用し、次いで、データストリームからの情報を使用する。復元時に、データストリームはマップストリームよりも優先され、マップストリームはチェックポイントストリームよりも優先される。
【０２７０】
図８に、ＬＢＡからＮＶＭへの位置マッピング８００として、ＦＬＭと１若しくはそれ以上のＳＬＭページとを有する２レベルマップによる、ＬＢＡからＮＶＭに記憶されたＬＢへのマッピングの実施形態の選択された詳細を図示する。２レベルマップは、（概念的には単一の要素ＳＬＭページ８２０として図示されている）１若しくはそれ以上の第２レベル要素に結合された第１レベル要素（ＦＬＭ８１０）によって実施される。ＦＬＭは複数のエントリ（ＳＬＭページ／長さ８１０．１...ＳＬＭページ／長さ８１０．Ｍ）を有する。ＦＬＭのエントリの各々はＳＬＭページのうちの１つ（例えばＳＬＭページ８２０）を指し示す。ＳＬＭページは複数のエントリ（ＬＢページ／長さ８２０．１...ＬＢページ／長さ８２０．Ｎ）を有する。ＳＬＭページのエントリの各々は、データが開始するＮＶＭ内の位置（例えば、少なくとも、ＬＢＡについてのホスト書き込みデータの先頭を記憶している読み出し単位など）を指し示す。除算器（整数除算器８２２）は、例えば、プログラマブル・ハードウェア・レジスタ（ＳＬＭエントリ／ＳＬＭページ（ＣＳＲ）８２３）からパラメータを受け取って、入ってくるＬＢＡを除算して、どのＦＬＭエントリを選択すべきか、および（選択されたＦＬＭエントリによって指し示されたＳＬＭページ内の）どのＳＬＭエントリを選択すべきか決定する。除算器は、ＦＬＭとＳＬＭページとに結合されている。
【０２７１】
様々な実施形態では、図は、図１Ａのマップ１４１および／若しくは表１４３の、またはそれらに関連した選択された詳細を示す。例えば、ある実施形態では、マップ１４１および／または表１４３は、例えば、ＦＬＭの１若しくはそれ以上のエントリおよび／またはＳＬＭの１若しくはそれ以上のエントリといったマッピング情報の１若しくはそれ以上のキャッシュを実施する。ＦＬＭおよび／またはＳＬＭの全体イメージは、ＮＶＭ（図１ＡのＮＶＭ１９９など）の一部分に維持され、例えば、キャッシュが前にキャッシュされたＦＬＭおよび／またはＳＬＭエントリを置き換えるときに更新される。ある実施形態では、ＦＬＭおよび／またはＳＬＭの全体イメージは、ローリングチェックポイントまたはピンポンチェックポイントによって実施され、チェックポイントの各々はそれぞれの全体マップイメージの一部分である。
【０２７２】
動作に際して、ＬＢＡ８２１が整数除算器８２２に提示される。除算器はＬＢＡを、ＳＬＭエントリ／ＳＬＭページ（ＣＳＲ）８２３によって提供される１ＳＬＭページあたりのＳＬＭエントリの数で除算し、結果として商（ＦＬＭインデックス８２２Ｑ）および余り（ＳＬＭページインデックス８２２Ｒ）が得られる。商はＦＬＭエントリのうちの１つを選択するのに使用され、選択されたＦＬＭエントリのページフィールドが読み出される（ＳＬＭポインタ８１０Ｓ）。ページフィールドはＳＬＭページのうちの１つ（ＳＬＭページ８２０など）を選択するのに使用され、余りは、選択されたＳＬＭページのエントリを（例えばオフセットとして）選択するのに使用される。選択されたＳＬＭページエントリのページフィールドが、少なくとも、提示されたＬＢＡに対応するＬＢの先頭が記憶されている特定のＮＶＭ内の位置、例えば、特定の読み出し単位を選択するのに使用される（ＬＢポインタ８２０Ｌ）。様々な実施形態では、ＬＢポインタは、ＮＶＭの読み出し単位のアドレス（図２の読み出し単位アドレス２２３など）を有する。ある実施形態では、ＳＬＭエントリの各々は、ＬＢのデータのすべてを獲得するのに何個の読み出し単位を読み出すべきか、および／または読み出し単位内のどこでＬＢのデータが始まるか（図２の読み出し単位での長さ２２５など）を指示する長さフィールド（符号化サイズおよび／または範囲など）を有する。ある実施形態では、ＦＬＭエントリの各々は、ＦＬＭエントリのページフィールドによって指定されたそれぞれのＳＬＭエントリのすべてを獲得するのに何個の読み出し単位を読み出すべきか（図２の読み出し単位での長さ２２５など）を指示する長さフィールド（符号化サイズおよび／または範囲など）を有する。
【０２７３】
様々な実施形態では、商は、キャッシュ、例えば、ＳＬＭページのフル・アソシアティブ・キャッシュにアクセスするためのキーとして使用される。キャッシュに特定のＳＬＭページについてのヒットがある場合には、特定のＳＬＭページの最も遅いコピーがＮＶＭにアクセスせずにキャッシュ内で見つかる。複数のＳＬＭページへの高速アクセスを提供することにより、ある実施形態および／または使用シナリオでは、ＮＶＭへの順次データアクセスの複数の独立ストリームのより効率的な処理（例えば、ＬＢＡの第１の領域への順次データアクセスの第１のストリームに、ＬＢＡ第２の領域への順次データアクセスの第２のストリームを割り込ませるなど）が可能になる。
【０２７４】
図９に、データ、マップ、およびチェックポイント書き込み処理９００として、ＳＬＭおよびＦＬＭ情報の書き込みを有する、ホストからＮＶＭへの受け取りおよび書き込み、ならびに様々な形の自己ジャーナリングおよびタイムスタンプ記録の様々な実施形態の選択された詳細を図示する。また処理は、再利用動作から発生したデータにも適用できる。処理は、概念的には、２つの部分を有し、第１の部分はホスト（または再利用）データ本体（「データを受け取り、書き込む９１０」）に関し、第２の部分はデータのマッピング（「マップエントリを作成し、書き込む９２０」）に関する。さらに、図示の動作のうち選択された動作がチェックポイント設定される（「要素をチェックポイント設定する９９５」）。
【０２７５】
処理は、ホスト書き込みコマンドの受け取り（または再利用動作データ生成）ときに開始する（「開始９０１」）。次いでホスト（または再利用）データが得られる（「ホストからデータを受け取る９１１」）。データは、次いで、ＮＶＭに書き込むために、例えば、圧縮、暗号化、パディング、および／または様々な書式設定操作により変換される（「データを書式設定する９１２」）。続いて、自己ジャーナル情報が、例えば、データがどのＬＢＡに対応するかを指示するヘッダにより、データに挿入される（「データを自己ジャーナルする９１３」）。ある実施形態では、ヘッダは、図５に示すように、長さおよび／またはオフセットおよび／または他の情報を有する。次いで、タイムマーカが、例えば、ヘッダ内のエポックフィールドにより、データに挿入される（「データにタイムスタンプを設定する９１４」）。様々な実施形態では、タイムマーカは、特定の種類のヘッダとして挿入される。続いて、データ、ヘッダ、およびタイムマーカが他のホスト（または再利用）データおよびヘッダ情報と共に集約される（「データをバッファに入れる９１５」）。十分な情報が集約されると、集約情報がＮＶＭに書き込まれる（「ＮＶＭにデータを書き込む９１６」）。
【０２７６】
データの書式設定（「データを書式設定する９１２」）は、一部はマップエントリを作成するのに使用される情報を提供し、マップエントリは、データが書き込まれるＮＶＭ内の位置を指し示す２レベルマップの第２レベルのための情報、例えば、読み出し単位アドレスおよび読み出し単位での長さから開始する（「データのためのＳＬＭエントリを作成する９２２」）。ある実施形態では、マップエントリを作成するためのさらなる情報が、「データをバッファに入れる９１５」によって決定される、データがＮＶＭのどこに書き込まれているか決定することによって一部は提供される。次いで、自己ジャーナリング情報が、例えば、ＳＬＭエントリに対応するＦＬＭインデックスを提供するヘッダにより、エントリに挿入される（「ＳＬＭエントリを自己ジャーナルする９２３」）。ある実施形態では、ヘッダは、図５に示すように、長さ、オフセット、および／または他の情報を有する。続いて、タイムマーカが、例えば、ヘッダ内のエポックフィールドにより、エントリに挿入される（「ＳＬＭエントリにタイムスタンプを設定する９２４」）。様々な実施形態では、タイムマーカは、特定の種類のヘッダとして挿入される。次いで、エントリ、ヘッダ、およびタイムマーカが他のＳＬＭエントリおよびヘッダと共に集約される（「ＳＬＭエントリをバッファに入れる９２５」）。十分な情報が集約されると、集約情報がＮＶＭに書き込まれる（「ＮＶＭにＳＬＭエントリを書き込む９２６」）。ある実施形態では、ＳＬＭ情報の集約は、少なくとも一部は、１若しくはそれ以上のキャッシュによるものである。
【０２７７】
ＳＬＭエントリの作成（「データのためのＳＬＭエントリを作成する９２２」）は、ＳＬＭエントリを指し示すＦＬＭエントリを作成する（「ＳＬＭエントリのためのＦＬＭエントリを作成する９３２」）ことによって、マップエントリの作成を完了するのに一部は使用される情報を提供する。ＳＬＭエントリと同様に、自己ジャーナリングおよびタイムマーカ挿入（「ＦＬＭエントリを自己ジャーナルする９３３」および「ＦＬＭエントリにタイムスタンプを設定する９３４」）が行われ、その後にバッファリングおよびＮＶＭへの書き込み（「ＦＬＭエントリをバッファに入れる９３５」および「ＮＶＭにＦＬＭエントリを書き込む９３６」）が続く。ＮＶＭにデータ、ＳＬＭエントリおよびＦＬＭエントリを書き込んだ（「ＮＶＭにデータを書き込む９１６」、「ＮＶＭにＳＬＭエントリを書き込む９２６」、および「ＮＶＭにＦＬＭエントリを書き込む９３６」）後で、処理が終了する（「終了９９９」）。
【０２７８】
ある実施形態では、ＳＬＭエントリがＳＬＭページとして編成され、ＳＬＭページが（例えばキャッシュに）キャッシュされ、ＮＶＭへのＳＬＭページの書き込み（「ＳＬＭエントリを自己ジャーナルする９２３」から「ＮＶＭにＳＬＭエントリを書き込む９２６」まで）よりも先行するＳＬＭページのエントリの複数の更新（「データのためのＳＬＭエントリを作成する９２２」）を可能にする。ＳＬＭページのうちキャッシュされたＳＬＭページの各々は、１若しくはそれ以上のデータ書き込みからの更新を累積することができるようになっており、任意選択で、かつ／または選択的に、それぞれのキャッシュされたＳＬＭページがキャッシュからフラッシュされるまでＮＶＭに書き込まれない。様々な実施形態によれば、キャッシュされたＳＬＭページのうちフラッシュされたＳＬＭページと共にＮＶＭに書き込まれるタイムマーカは、フラッシュされたＳＬＭページ内のエントリに影響を及ぼした最も遅いデータ書き込みに対応するタイムマーカ、フラッシュされたＳＬＭページがキャッシュされて以来、フラッシュされたＳＬＭページ内のエントリに影響を及ぼした最も早いデータ書き込みに対応するタイムマーカ、現在のデータ書き込みに対応するタイムマーカ、およびマップストリームに対応するタイムマーカのうち１若しくはそれ以上である。
【０２７９】
ある実施形態では、ＦＬＭエントリがＮＶＭに、ローリングチェックポイントの一部としての部分単位で書き込まれ、ＮＶＭへのＦＬＭの書き込み（「ＦＬＭエントリを自己ジャーナルする９３３」から「ＮＶＭにＦＬＭエントリを書き込む９３６」まで）よりも先行するＦＬＭの部分のエントリの複数の更新（「ＳＬＭエントリのためのＦＬＭエントリを作成する９３２」）を可能にする。ＦＬＭの部分の各々は、１若しくはそれ以上のＳＬＭエントリからの更新を累積することができるようになっており、任意選択で、かつ／または選択的に、ＦＬＭの部分のチェックポイントが（例えばローリングチェックポイントの一部として）作成されるまでＮＶＭに書き込まれない。様々な実施形態によれば、ＦＬＭの部分のうちの１つと共にＮＶＭに書き込まれるタイムマーカは、ＦＬＭの部分内のエントリに影響を及ぼした最も遅いデータ書き込みに対応するタイムマーカ、ＦＬＭの部分が最後にチェックポイント設定されて以来ＦＬＭの部分内のエントリに影響を及ぼした最も早いデータ書き込みに対応するタイムマーカ、現在のデータ書き込みに対応するタイムマーカ、マップストリームに対応するタイムマーカ、例えば、ＦＬＭの部分に対応する更新を有するＳＬＭエントリのマップストリーム内のタイムマーカのうち１若しくはそれ以上である。
【０２８０】
様々な実施形態では、例えば、ヘッダにより挿入される自己ジャーナリング情報は、図４Ａ、図４Ｂ、および図５に示すように、ヘッダに含まれている。ある実施形態では、ＦＬＭ情報の集約は、少なくとも一部は１若しくはそれ以上のキャッシュによるものであり、ＳＬＭ情報のキャッシングがあったとしてもそれから独立に、あるいはＳＬＭ情報のキャッシングと協働して行われる。
【０２８１】
受け取りからＮＶＭへの書き込みまでのデータ処理（「データを書式設定する９１２」から「ＮＶＭにデータを書き込む９１６」）は、様々な実施形態および使用シナリオでは、作成からＮＶＭへの書き込みまでのマップ処理（「データのためのＳＬＭエントリを作成する９２２」から「ＮＶＭにＳＬＭエントリを書き込む９２６」および／または「ＳＬＭエントリのためのＦＬＭエントリを作成する９３２」から「ＮＶＭにＦＬＭエントリを書き込む９３６」）から独立して進む。さらに、作成からＮＶＭへの書き込みまでのＳＬＭとＦＬＭの処理（それぞれ、「データのためのＳＬＭエントリを作成する９２２」から「ＮＶＭにＳＬＭエントリを書き込む９２６」と「ＳＬＭエントリのためのＦＬＭエントリを作成する９３２」から「ＮＶＭにＦＬＭエントリを書き込む９３６」）も、様々な実施形態および使用シナリオでは、相互に独立して進む。データ、ＳＬＭ、およびＦＬＭの処理は、全部または一部が相互に並列に行われ、もっぱら、ＳＬＭエントリの作成（「データを書式設定する９１２」から「データのためのＳＬＭエントリを作成する９２２」）と、ＦＬＭエントリの作成（「データのためのＳＬＭエントリを作成する９２２」から「ＳＬＭエントリのためのＦＬＭエントリを作成する９３２」）に関連した依存関係だけによって制限される。
【０２８２】
様々な実施形態では、書き込みデータ間の処理（「データを受け取り、書き込む９１０」）とマップエントリの処理（「マップエントリを作成し、書き込む９２０」のＳＬＭおよびＦＬＭに関連した部分）とが独立している（よって、一部または全部が並列に、またはオーバーラップしている）ことに加えて、９１０ならびにＳＬＭおよびＦＬＭに関連した部分の各々の内部での処理も、全部または一部が並列であり、オーバーラップし、かつ／またはパイプライン化される。例えば、第１のホストデータが受け取られ（「ホストからデータを受け取る９１１」）、第１のホストデータが書式設定されている（「データを書式設定する９１２」）間に、第２のホストデータが並列に受け取られる（「ホストからデータを受け取る９１１」）。別の例としては、第１のＳＬＭエントリが作成され（「データのためのＳＬＭエントリを作成する９２２」）、次いで、第１のＳＬＭエントリが自己ジャーナルされている（「ＳＬＭエントリを自己ジャーナルする９２３」）間に第２のＳＬＭエントリが並列に作成される（「データのためのＳＬＭエントリを作成する９２２」）。さらに、第２のＳＬＭエントリの作成（および第１のＳＬＭエントリの自己ジャーナリング）と並列に、第１のＳＬＭエントリのためのエントリが作成される（「ＳＬＭエントリのためのＦＬＭエントリを作成する９３２」）。
【０２８３】
ある実施形態では、後の方の動作が、その後の方の動作よりも先に開始した動作よりも早く完了することができるようになっている。第１の例では、２つの異なるバンドへのデータ書き込みがＮＶＭに書き込まれる順序が指定されない。第２の例では、ＳＬＭページのキャッシングが、後の方のデータ書き込みからのＳＬＭエントリの更新が、後の方のデータ書き込みよりも早いデータ書き込みからのＳＬＭエントリの更新よりも先にＮＶＭに書き込まれることを可能にする。
【０２８４】
様々な実施形態では、タイムマーカの挿入が選択的であり、任意選択であり、かつ／または割愛される（例えば、「データにタイムスタンプを設定する９１４」、「ＳＬＭエントリにタイムスタンプを設定する９２４」、および「ＦＬＭエントリにタイムスタンプを設定する９３４」のうち１若しくはそれ以上が割愛され、または選択的にのみ挿入される）。さらに、マップ情報の書き込みが、データ情報の書き込みを完了するまで遅延される（またはデータ情報の書き込みに応答して行われる）。例えば、ＮＶＭへのＳＬＭエントリ情報の記録は、ＮＶＭへのデータの書き込みの完了を待って行われる（例えば、「ＮＶＭにＳＬＭエントリを書き込む９２６」は、「完了９１６Ｃ」で示されるように、「ＮＶＭにデータを書き込む９１６」に依存する）。例を続けて、ＮＶＭでのＦＬＭエントリ情報の記録は、ＮＶＭへのＳＬＭ情報の書き込みの完了を待って行われる（例えば、「ＮＶＭにＦＬＭエントリを書き込む９３６」は、「完了９２６Ｃ」で示されるように、「ＮＶＭにＳＬＭエントリを書き込む９２６」に依存する）。回復処理は、ＮＶＭに書き込まれたすべてのＦＬＭ情報、ならびにＮＶＭに書き込まれたすべてのＳＬＭ情報を使用する。というのは、ＦＬＭおよびＳＬＭ情報は、ＦＬＭおよびＳＬＭ情報によって指し示されるデータ情報が前に書き込まれるまで書き込まれないからである。よってＮＶＭ上のデータおよびマップ情報は相互に整合性を有する。
【０２８５】
ある実施形態では、タイムマーカが選択的に挿入される。例えば、同じページに記憶された連続したデータ書き込みのためにＮＶＭの同じページに連続したタイムマーカを挿入するのではなく、タイムマーカのうち第１のタイムマーカだけが挿入される。タイムマーカのうち後続のタイムマーカの値が第１のタイムマーカの値および介在する連続したデータ書き込みの数から推測される。
【０２８６】
様々な実施形態では、タイムマーカが挿入され、相互から独立した、例えば、全部若しくは一部が並列の、または相互に順不同でのデータ、ＳＬＭ、およびＦＬＭ情報の書き込みを可能にする。独立の書き込みは、ある実施形態および／または使用シナリオでは、（例えば、概念的には、「完了９１６Ｃ」および「完了９２６Ｃ」によって図示される）依存的書き込みよりも効率のよい処理（例えば、低待ち時間および／または高バンド幅）を可能にする。
【０２８７】
具体的な動作シナリオでは、データ書き込みがＮＶＭのデータストリームに対するものであり（例えば、「ＮＶＭにデータを書き込む９１６」がデータストリームに対するものであり）、マップ書き込みが、ＮＶＭのマップストリームおよび／またはチェックポイントストリームに対するものである（例えば、「ＮＶＭにＳＬＭエントリを書き込む９２６」および「ＮＶＭにＦＬＭエントリを書き込む９３６」が、それぞれ、マップストリームおよびチェックポイントストリームに対するものである）。データ書き込みのうち１若しくはそれ以上が（例えば、データストリームの書き込みと競合する消去操作の完了を待っているために）遅延される。一方、マップストリーム書き込みのうち少なくとも１つは、全部または一部が消去操作と並列に行われ、そのため、遅延された書き込みデータの少なくとも一部に対応する少なくとも１つのマップエントリの書き込みが、遅延された書き込みデータが書き込まれる前に完了する。続いて、消去操作が完了し、次いで、遅延されたデータ書き込みが完了する。遅延されたデータ書き込みを完了する前に誤動作が生じた場合には、後続の回復は、データおよびマップストリーム内のタイムスタンプの検査に基づいて、遅延されたデータ書き込みに対応するマップストリーム書き込みのうちいずれかが無視されるべきであると決定するはずである。具体的には、遅延された書き込みに対応するマップストリーム書き込みのタイムマーカは、データストリーム書き込みの最も遅いもの（例えば最も新しいものまたは最も若いもの）よりも前方にある（例えば、より新しい、またはより若い）はずである。
【０２８８】
様々な実施形態では、マップ情報の自己ジャーナリングの挿入は任意選択であり、かつ／または割愛される（例えば、「ＳＬＭエントリを自己ジャーナルする９２３」および「ＦＬＭエントリを自己ジャーナルする９３３」のうち１若しくはそれ以上が割愛される）。
【０２８９】
ある実施形態および／または使用シナリオでは、図の各要素のうち１若しくはそれ以上がチェックポイント設定される（「要素をチェックポイント設定する９９５」）。あるシナリオでは、より効率のよい、かつ／またはロバストな回復処理を可能にするために、チェックポイントが様々な時点でＮＶＭに書き込まれる。例えば、集約されたデータ、ＳＬＭ情報、およびＦＬＭ情報（「データをバッファに入れる９１５」、「ＳＬＭエントリをバッファに入れる９２５」、および「ＦＬＭエントリをバッファに入れる９３５」）のうち１若しくはそれ以上がチェックポイントに含まれる。様々な実施形態では、回復処理は、チェックポイントに含まれるタイムマーカを使用して、チェックポイントのある特定の部分を無視すべきか否か決定する。例えば、（「データをバッファに入れる９１５」に対応する）データストリームの最も遅い部分が、（「ＮＶＭにＳＬＭエントリを書き込む９２６」に対応する）チェックポイントの最も遅いＳＬＭ部分よりも遅いタイムマーカを保持していない場合には、チェックポイントの最も遅いＳＬＭ部分が回復処理時に廃棄される。
【０２９０】
図１０に、ホストおよび／または再利用データ、マップ情報、ならびにチェックポイントＦＩＦＯ部分のＮＶＭへのストリーミングの様々な実施形態の選択された詳細を図示する。Ｒ−ブロックの３つのストリームが図示されており、１つはデータ書き込みのためのもの（データＲ−ブロック１０２０）であり、１つは更新されたＳＬＭ書き込みのためのもの（ＳＬＭ（マップ）Ｒ−ブロック１０３０）であり、１つはデータ構造チェックポイント書き込み、例えばＦＬＭの部分のためのもの（チェックポイントＦＩＦＯ  Ｒ−ブロック１０４０）であり、ストリームとして管理されるそれぞれのデータ、マップ、およびチェックポイントバンドに対応する。「エポック」要素は（図５のエポック５２３によって図示されるような）タイムマーカ、例えば、それぞれのヘッダ内のタイムスタンプに対応する。図１０において、時間は、それぞれのストリームの順序に従って、左から右へ経過時間が最も長いものから経過時間が最も短いものである。さらに、図は、各ストリーム内の書き込み順も表しており、各ストリーム内の書き込み順は、ＮＶＭのページごとなど、ＮＶＭ書き込みの粒度の制限を受ける。ＮＶＭのページのうちの１つを用いる要素は、たとえ物理的には同時に書き込まれるとしても、概念的には図示の順序で書き込まれる。よって、データＲ−ブロックの要素は、エポック−１  １０２１Ｅ（経過時間が最も長い）、データ−１  １０２１、エポック−２  １０２２Ｅ、データ−２  １０２２、エポック−３  １０２３Ｅ、およびデータ−３  １０２３（経過時間が最も短い）の順に書き込まれる。マップＲ−ブロックの要素は、エポック−１  １０３１Ｅ（経過時間が最も長い）、ＳＬＭ−１  １０３１、エポック−２  １０３２Ｅ、ＳＬＭ−２  １０３２、エポック−３  １０３３Ｅ、およびＳＬＭ−３  １０３３（経過時間が最も短い）の順に書き込まれる。チェックポイントマップＲ−ブロックの要素は、エポック−１  １０４１Ｅ（経過時間が最も長い）、ＦＬＭ−１  １０４１、エポック−２  １０４２Ｅ、ＦＬＭ−２  １０４２、エポック−３  １０４３Ｅ、およびＦＬＭ−３  １０４３（経過時間が最も短い）の順に書き込まれる。
【０２９１】
データＲ−ブロック内の情報は、何がＮＶＭに有効に記憶されているか決定するため、厳密なコヒーレンシを有する。厳密なコヒーレンシとは、ＮＶＭに書き込まれたデータ構造の最も遅い部分からのデータ構造の有効な状態の完全な回復を可能にする（ＮＶＭに書き込まれたデータを有する）データ構造の属性をいう。厳密なコヒーレンシは、複数のデータ構造の間の整合性と区別される。例えば、２つのデータ構造がそれぞれ厳密なコヒーレンシを有するが、データ構造の一方が他方のデータ構造に存在しない状態変化を反映しているために、相互に対して整合しないなどである。ある実施形態および／または使用シナリオでは、回復の目標は、可能な最も遅い時点での相互との整合性も有するデータ構造の厳密にコヒーレントなバージョンを決定することである。
【０２９２】
マップＲ−ブロック内の情報は、更新されたＳＬＭページのＦＩＦＯ様のストリームであり、少なくとも一部はマップＲ−ブロックに記憶されたＳＬＭの厳密なコヒーレンスを維持するのに使用される。ある状況では、マップＲ−ブロック内の情報は、例えば、データＲ−ブロック内の対応する情報よりも経過時間が短いＳＬＭページなど、データＲ−ブロック内の情報と整合しないＳＬＭページが原因で、ＮＶＭに書き込まれたデータと整合しない。
【０２９３】
チェックポイントＲ−ブロック内の情報は、ＦＬＭおよび他のデータ構造の部分または全部のＦＩＦＯ（またはストリーム）であり、ＦＬＭの厳密なコヒーレンスおよびその他のデータ構造の厳密な、またはおおよそのコヒーレンスを維持するのに使用される。しかし、マップＲ−ブロックと同様に、ある状況では、チェックポイントＲ−ブロック内の情報は、例えば、マップＲ−ブロックまたはデータＲ−ブロック内の対応する情報よりも経過時間の短いＦＬＭエントリなど、他のＲ−ブロック内の情報と整合しない。
【０２９４】
ある実施形態および／または使用シナリオでは、チェックポイントＦＩＦＯに記憶されたあるデータ構造は、他のデータ構造とおおよそコヒーレントであるにすぎず、または整合しない。第１の例では、読み出し妨害カウントがＮＶＭ内のブロックごとに維持され、読み出し妨害カウントは、複数の部分で、例えば、一度に読み出し妨害カウントの１／４が、時間の経過と共に均一に分散されて、チェックポイントＦＩＦＯにチェックポイント設定される。読み出し妨害カウントが回復されるときに、回復された読み出し妨害カウントは、使用中であった読み出し妨害カウントのどのバージョンともコヒーレントではない。というのは、４つの部分の各々は異なる時点からのものだからである。第２の例では、Ｒ−ブロック使用情報が、対応するタイムスタンプなしで、チェックポイントＦＩＦＯにチェックポイント設定される。回復時に復元されるＲ−ブロック使用情報の最も遅いバージョンはコヒーレントであるが、ある状況では他のデータ構造と整合しない。
【０２９５】
概念的には、図は、回復操作時のストリーム優先順位を表している。Ｒ−ブロックのデータストリーム内の情報はＲ−ブロックのマップストリーム内の情報よりも優先され、Ｒ−ブロックのマップストリーム内の情報は、さらに、Ｒ−ブロックのチェックポイントストリーム内の情報よりも優先される。（ある実施形態および／または使用シナリオでは、ストリームの各々の内部の書き込みは明確に順序付けられているが）ストリーム間の書き込みは明確に順序付けられていないため、ストリーム間の書き込みの整合性を有する順序付けを決定するための追加情報の必要がある。様々な実施形態および／または使用シナリオにおいて、タイムスタンプおよび／またはタイムマーカ、例えばエポック値は、複数のバンドおよび／またはストリームへの書き込みの相対順が決定されることを可能にする。
【０２９６】
図示のように、Ｒ−ブロックのデータ、マップ、およびチェックポイントストリームへの書き込みは、以下のように、相互に対して整合性を有する。データ書き込みの各々は、それぞれのデータ書き込みに対応するそれぞれのＳＬＭに先行し、さらに、ＳＬＭ更新の各々は、それぞれのＳＬＭ更新を指し示すポインタを（例えばＦＬＭエントリとして）有する任意のそれぞれのチェックポイント書き込みに先行する。具体的には、ＳＬＭ−１  １０３１はデータ−１  １０２１にマップし、データ−１  １０２１の書き込みは、エポック−１  １０３１ＥおよびＳＬＭ−１  １０３１の書き込みが開始する前に完了する。さらに、ＦＬＭ−１  １０４１はＳＬＭ−１  １０３１を指し示すポインタを有し、ＳＬＭ−１  １０３１の書き込みは、エポック−１  １０４１ＥおよびＦＬＭ−１  １０４１の書き込みが開始する前に完了する。同様の依存関係および書き込み順序付けが、データ−２  １０２２、エポック−２  １０３２ＥおよびＳＬＭ−２  １０３２と、エポック−２  １０４２ＥおよびＦＬＭ−２  １０４２、ならびにデータ−３  １０２３、エポック−３  １０３３ＥおよびＳＬＭ−３  １０３３と、エポック−３  １０４３ＥおよびＦＬＭ−３  １０４３にも適用される。
【０２９７】
ある実施形態では、ストリーム間の整合性が、エポック値によって以下のように示される。エポック−１  １０３１Ｅは、エポック−１  １０２１Ｅと同一であり、あるいは、エポック−１  １０３１Ｅがエポック−１  １０２１Ｅの後に書き込まれたことを指示する。エポック−１  １０４１Ｅはエポック−１  １０３１Ｅと同一であり、あるいはエポック−１  １０４１Ｅがエポック−１  １０３１Ｅの後に書き込まれたことを指示する。同様に、エポック−２  １０３２Ｅはエポック−２  １０２２Ｅと同一であり（またはエポック−２  １０２２Ｅの後の書き込みを指示し）、エポック−２  １０４２Ｅは、エポック−２  １０３２Ｅと同一である（またはエポック−２  １０３２Ｅの後の書き込みを指示する）。同様に、エポック−３  １０３３Ｅはエポック−３  １０２３Ｅと同一であり（またはエポック−３  １０２３Ｅの後の書き込みを指示し）、エポック−３  １０４３Ｅはエポック−３  １０３３Ｅと同一である（またはエポック−３  １０３３Ｅの後の書き込みを指示する）。
【０２９８】
様々な実施形態および／または使用シナリオにおいて、各ストリーム内の書き込み順序付けは図示のままである。しかし、Ｒ−ブロックのストリーム間の書き込みの相対的タイミングは図示のものとは異なる。例えば、エポック−２  １０３２ＥおよびＳＬＭ−２  １０３２の書き込みは、データ−２  １０２２の書き込みが開始する前に（しかし、データ−１  １０２１の書き込みが完了した後で）完了する。よって、ＳＬＭ−２  １０３２は、エポック−２  １０３２Ｅによって示されるものよりも古い経過時間を指示するＲ−ブロックのデータストリームの最も新しく書き込まれたタイムマーカ（エポック−１  １０２１Ｅ）によって示されるように、一時的に、データ−２  １０２２に対して整合しない。エポック−２  １０２２Ｅおよびデータ−２  １０２２の書き込みが完了する前に誤動作が発生した場合には、ＳＬＭ−２  １０３２の一時的な不整合性が永続的になる。不整合性を解決するために、後続の回復処理は、（エポック−２  １０３２Ｅがエポック−１  １０２１Ｅよりも経過時間が短いことに基づいて）ＳＬＭ−２  １０３２を廃棄するはずである。別の例として、Ｒ−ブロックのマップストリームでの対応するＳＬＭ更新の書き込みの前のＲ−ブロックのチェックポイントストリームでのＦＬＭエントリの書き込みの後に（対応するＳＬＭ更新の書き込みの前の）誤動作および後続の回復処理が続く場合には、回復処理はＦＬＭエントリを廃棄する。
【０２９９】
図には、チェックポイントＲ−ブロックのストリームの領域が、ＦＬＭのすべてのエントリ（完全なＦＬＭ１０５０）に対応するものとして示されている。この領域は、ＦＬＭが部分（チャンクなど）としてチェックポイント設定されるある実施形態に対応する。図示のように、３つの任意選択で、かつ／または選択的にオーバーラップする部分（ＦＬＭ−１  １０４１、ＦＬＭ−２  １０４２、およびＦＬＭ−３  １０４３）は、総体としてＦＬＭのエントリのすべてのチェックポイントを形成するが、部分の各々は異なる時点からのものであり、よって、それ自体では、ＦＬＭのコヒーレントなイメージではない。回復プロセスは、ＦＬＭおよび他のデータ構造のチェックポイントから、ＦＬＭのコヒーレントで整合性を有するバージョンを復元することができるようになっている。同様に、回復プロセスは、マップストリームおよび他のデータ構造内のマップのおそらくはコヒーレントではないコピーから、マップのコヒーレントで整合性を有するバージョンを復元することができるようになっている。
【０３００】
ある実施形態では、特定のデータ構造の整合性が、一部は、特定のデータ構造へのいくつかの関連した更新と、特定のデータ構造の後続のタイムスタンプ設定とが、少なくとも、特定のデータ構造のチェックポイントに関して、原子単位として行われることを保証することによって維持される。例えば、チェックポイントＦＩＦＯにチェックポイント設定されるＲ−ブロック使用カウントデータ構造を考える。データストリーム内のデータ書き込みのうち特定のデータ書き込みが、データストリーム内の対応するエポック値と関連付けられる。特定のデータ書き込みは、データ書き込みを有するＲ−ブロックの使用を増加させ、特定のデータ書き込みと同じＬＢＡと関連付けられた前のデータ書き込みを有するＲ−ブロックの使用を減少させる。データ書き込みに従ってＲ−ブロック使用カウントデータ構造を更新することは、３つの動作、すなわち、データ書き込みを有するＲ−ブロックの使用カウントを増加させること、前のデータ書き込みを含むＲ−ブロックの使用カウントを減少させること、およびＲ−ブロック使用カウントデータ構造に、特定のデータ書き込みの対応するエポック値でタイムスタンプ設定することを含む。Ｒ−ブロック使用カウントデータ構造のチェックポイントが、３つの動作のうち少なくとも１つを行った後で、３つの動作のすべてを完了するよりも先に発生することができるようになっていた場合、そのチェックポイントは、Ｒ−ブロック使用カウントデータ構造の整合性のないバージョンを記録するはずであり、Ｒ−ブロック使用カウントデータ構造の復元は、例えば電源障害後で、復元後のＲ−ブロックの実際の使用を反映しない整合性のない値をもたらすはずである。したがって、様々な実施形態では、各データ書き込みに従ったＲ−ブロック使用カウントデータ構造へのそれぞれの更新が、チェックポイントに対して原子的に行われる。
【０３０１】
図１１に、ＦＬＭおよびＳＬＭ復元処理１１００として、例えば誤動作の後の、（例えば図２および図８のうち１若しくはそれ以上に示した）ＦＬＭおよびＳＬＭ情報および他のＮＶＭ管理データ構造の復元および／または再構築の選択された詳細を図示する。復元動作および再構築動作は、図９および図１０のうち１若しくはそれ以上に示した自己ジャーナリングおよび階層的整合性の技法と併用した動作と適合する。
【０３０２】
図１１に示す処理は、誤動作の後のイベント、例えば、回復／再構築要求、ソフトリセット若しくはハードリセット、または電源オンに応答して開始する（開始１１０１）。チェックポイントＲ−ブロックの最後の（例えば最も新しく書き込まれた）Ｒ−ブロックが位置特定され、最後のチェックポイントＲ−ボック内の最後の（例えば最も新しく書き込まれた）情報が位置特定される（ＦＩＦＯ終わりの位置を特定する１１１１）。次いで、最も新しく書き込まれたものよりも早い直前のチェックポイントＲ−ブロックの部分が、ＦＬＭの全体イメージが再構築されるまで処理される。ある実施形態では、ＦＬＭ再構築処理は、最も新しいＦＬＭ部分を位置特定し、最も古いタイムマーカを位置特定し（最も新しいＦＬＭチャンクおよび最も古いエポックの位置を特定する１１１２）、次いで、最も古いタイムマーカの時点のＦＬＭを再構築する（最も古いエポックの時点のＦＬＭを復元する１１１３）ことを含む。ある実施形態および／または使用シナリオでは、ＦＬＭの１若しくはそれ以上の遅い部分が、例えば、電源障害が発生したときに完了することができなかった書き込みによる穴が原因で早い部分と連続しない。早い部分と連続しない部分は回復時に廃棄される。
【０３０３】
チェックポイントＲ−ブロックに基づいてＦＬＭを再構築した後で、再構築されたＦＬＭより（更新と共に記憶されたタイムマーカによれば）新しい任意のＳＬＭ更新がＦＬＭに適用される（ＳＬＭ更新に従ってＦＬＭを更新する１１１４）。次いで、ＳＬＭは、対応するＳＬＭエントリより（書き込みデータと共に記憶されたタイムマーカよれば）新しいデータ書き込みについて更新される（データ更新に従ってＳＬＭを更新する１１１５）。次いで処理は終了し（終了１１９９）、ＦＬＭ、ＳＬＭ、および他のデータ構造がコヒーレントで、整合性を有し、ＳＳＤのＮＶＭを操作するために使用できるようになる。
【０３０４】
ある実施形態では、ＳＬＭを更新するために処理される書き込みデータの量が、キャッシュされている変更されたＳＬＭエントリが、マップフラッシュ間隔と呼ばれる、所定数のエポック値以内にＮＶＭにフラッシュされるよう保証することによって制限される。例えば、変更された各ＳＬＭエントリ（または変更された各ＳＬＭページ）は、それぞれの変更されたＳＬＭエントリ（またはＳＬＭページ）が最後にフラッシュされて以来最も早い変更のエポック値を追跡し、それぞれの変更されたＳＬＭエントリ（またはＳＬＭページ）は、それぞれの変更されたＳＬＭエントリ（またはＳＬＭページ）が、最も遅いデータ書き込みよりも１００００エポック値も後になる前にフラッシュされる。より新しいデータ書き込みからＳＬＭを再構築するときには、（エポック値で測った）最も新しいおおよそ１００００のデータ書き込みだけがＳＬＭ更新として考慮される。というのは、それより古いデータ書き込みはすでにＮＶＭに書き込まれているからである。
【０３０５】
ある実施形態では、復元プロセスは、データストリーム、マップストリーム、およびチェックポイントＦＩＦＯの各々について、それぞれの最も遅い有効なエポックおよびそれぞれの最も早い必要とされるエポックを決定する。復元プロセスは、チェックポイントＦＩＦＯの最も早い必要とされるエポックとチェックポイントＦＩＦＯの最も遅い有効なエポックとの間にあるＦＬＭの部分からＦＬＭを復元する。マップストリーム内の最も早い必要とされるエポックとマップストリーム内の最も遅い有効なエポックとの間のマップストリーム内にあるＳＬＭ更新が、ＦＬＭがマップストリームと整合性を有するようにＦＬＭに適用される。データストリーム内の最も早い必要とされるエポックとデータストリーム内の最も遅い有効なエポックとの間のデータストリーム内にあるデータ書き込みからの更新が、次いで、ＳＬＭがデータストリームと整合性を有するようにＳＬＭに適用される。様々な実施形態および／または使用シナリオでは、データストリーム内のデータ書き込みからの更新をＳＬＭに適用することは、任意選択で、かつ／または選択的に、例えば、キャッシュが回復に必要なすべての更新を保持することができないときに、キャッシュからマップストリームへＳＬＭエントリおよび／またはページをフラッシュする。回復時のＳＬＭエントリおよび／またはページのフラッシュがＦＬＭのエントリを更新し、さらには、ＦＬＭの１若しくはそれ以上の部分が、任意選択で、かつ／または選択的に、回復時にチェックポイントＦＩＦＯに書き込まれる。様々な実施形態では、復元プロセスの完了は、「復元完了」マーカ、例えば特定の種類のヘッダをストリームのうち１若しくはそれ以上に書き込む。
【０３０６】
ある実施形態では、データストリーム内の最も遅い有効なエポックは、回復に必要とされるデータストリームのすべての先行する部分と連続した（データストリーム内のデータ書き込みに対応する）データストリーム内の最後に書き込まれたエポック値である。マップストリーム内の最も遅い有効なエポックは、回復に必要とされるマップストリームのすべての先行する部分と連続した（マップストリーム内のＳＬＭエントリおよび／またはページ書き込みに対応する）マップストリーム内の最後に書き込まれたエポック値であり、データストリーム内の最も遅い有効なエポックの時点、またはそれよりも先である。チェックポイントＦＩＦＯ内の最も遅い有効なエポックは、回復に必要とされるチェックポイントＦＩＦＯのすべての先行する部分と連続した（チェックポイントＦＩＦＯ内のＦＬＭの部分に対応する）チェックポイントＦＩＦＯの最後に書き込まれたエポック値であり、マップストリーム内の最も遅い有効なエポックの時点、またはそれよりも先である。別の実施形態では、チェックポイントＦＩＦＯ内の最も遅い有効なエポックは、１若しくはそれ以上の他のデータ構造の連続したチェックポイントとも、例えば、Ｒ−ブロック使用スペースデータ構造とも関連付けられている。
【０３０７】
ある実施形態では、チェックポイントＦＩＦＯ内の最も早い必要とされるエポックは、ＦＬＭの１つの完全な（ただしコヒーレントではない）バージョンが、チェックポイントＦＩＦＯ内の最も早い必要とされるエポックおよびチェックポイントＦＩＦＯの最も遅い有効なエポックの範囲内で得られるようなＦＬＭの最も遅い部分のエポック値である。マップストリーム内の最も早い必要とされるエポックは、チェックポイントＦＩＦＯ内の最も早い必要とされるエポックの時点、またはそれより前であるマップストリーム内の最も遅いＳＬＭエントリおよび／またはページのエポック値である。データストリーム内の最も早い必要とされるエポックは、マップストリーム内の最も遅い有効なエポックよりも先行するマップフラッシュ間隔以前の最も遅いデータ書き込みのエポック値である。
【０３０８】
ある実施形態および／または使用シナリオでは、例えば誤動作が生じているときに、データストリーム内の穴が回復時に発見される。穴よりも先行する情報は有効であり、穴の後の情報は無効である。穴と回復開始指示との間の情報は無効であり、回復開始指示後の情報は新しい有効な情報の先頭であることを指示するために、ログ記録が、任意選択で、（例えば回復時に）データストリームに追加される。様々な実施形態では、回復開始指示は、回復処理の開始を指示する、特殊なヘッダ、例えばジャーナルヘッダである。
【０３０９】
ある状況では、復元処理は相対的に低待ち時間である。例えば、誤動作が、比較的長時間にわたって書き込みも再利用も行われなかったときの電源喪失である場合には、ＦＬＭに適用すべきＳＬＭ更新がなく、すでにＳＬＭに反映されているデータ書き込みがない。あるいは、別の状況では、復元プロセスは相対的に高待ち時間である。例えば、誤動作が、チェックポイントＲ−ブロックおよび／またはマップＲ−ブロックが全部、またはおおむね整合していないようなものである場合には、有効なデータ情報を記憶しているデータＲ−ブロックのすべてまでがＦＬＭを再構築するために読み出され、ＳＬＭも完全に再構築される。さらに別の状況では、復元プロセスは、中程度の待ち時間である。例えば、誤動作が、チェックポイントＲ−ブロックは完全な状態であり、相対的に少数のマップ更新がまだチェックポイントＲ−ブロックに反映されていないにすぎず、相対的に少数のデータ書き込みがまだマップＲ−ブロックに反映されていないにすぎないようなものである場合には、必要とされるＦＬＭおよびＳＬＭの再構築は相対的に少ない。
【０３１０】
様々な実施形態では、図６から図１１の１若しくはそれ以上の要素が図１Ａの１若しくはそれ以上の要素に対応し、またはそれらと関連したものである。例えば、図６のデバイス６０１...６０９のうち１若しくはそれ以上は、総体として、ＮＶＭ１９９の全部または部分に対応する。別の例として、図７のフラッシュダイ７１０．６５...７１０．０は、総体として、フラッシュダイ１９４のインスタンスに対応する。さらに別の例として、図１０に示すＲ−ブロックのストリームは、ＮＶＭ１９９の全部または部分に記憶される。様々な実施形態では、図１Ａの１若しくはそれ以上の要素が、本明細書の別の箇所で説明した自己ジャーナリングおよび／または階層的整合性に関連した技法の全部またはいずれかの部分を管理し、制御し、かつ／または実施する。例えば、ＣＰＵ１７１のソフトウェア実行機能の一部分が、（例えば図１１によって示す）マップ情報の回復を管理するのに使用される。別の例としては、バッファ１３１の全部または部分が、図９で説明したバッファリングの全部またはいずれかの部分を実施する。
【０３１１】
追加の実施態様／実施形態情報
様々な実施形態では、例えば、図８から図１１で説明した動作および／または機能の全部またはいずれかの部分が、例えば、１若しくはそれ以上の状態機械によって実施される。状態機械の実施態様の例には、ハードウェア（論理ゲートおよび／若しくは回路、専用状態機械回路、配線制御回路など）、ソフトウェア（ファームウェアやマイクロコードなど）、またはハードウェアとソフトウェアの組み合わせが含まれる。ある実施形態では、状態機械のうち１若しくはそれ以上が、少なくとも一部は、１若しくはそれ以上のファームウェアイメージ、１若しくはそれ以上のドライバ、および／または１若しくはそれ以上のアプリケーションによって実施される。具体例として、状態機械のうち１若しくはそれ以上が、一部が図１ＡのＳＳＤコントローラ１００によって、一部がＣＰＵコア１７２によって実行されるファームウェアによって、一部が図１Ｂのファームウェア１０６によって、一部がドライバ１０７によって、かつ／または一部がアプリケーション１０９によって実施される。
【０３１２】
様々な実施形態では、図８から図１１で説明した動作および／または機能の全部またはいずれかの部分が、ハードウェアおよび／またはファームウェアの技法の任意の組み合わせにより、例えば、図１Ａのコヒーレンシ管理１７９、変換管理１７７、および／またはマップ１４１のうちいずれか１若しくはそれ以上によって、その制御下で、かつ／またはそれに従って実施される。
【０３１３】
実施技法の例
ある実施形態では、（例えばフラッシュメモリを有する）不揮発性記憶、コンピューティングホスト・フラッシュ・メモリ・コントローラ、および／またはＳＳＤコントローラ（例えば図１ＡのＳＳＤコントローラ１００）、ならびにプロセッサ、マイクロプロセッサ、システム・オン・チップ、特定用途向け集積回路、ハードウェアアクセラレータ、または前述の動作の全部または部分を提供する他の回路を管理するための自己ジャーナリングおよび階層的整合性を実施するシステムによって行われる動作の全部またはいずれかの部分の様々な組み合わせが、コンピュータシステムによる処理と適合する仕様によって指定される。仕様は、様々な記述、例えば、ハードウェア記述言語、回路記述、ネットリスト記述、マスク記述、またはレイアウト記述に従ったものである。記述の例には、Ｖｅｒｉｌｏｇ、ＶＨＤＬ、ＳＰＩＣＥ、ＳＰＩＣＥの変形、例えば、ＰＳｐｉｃｅ、ＩＢＩＳ、ＬＥＦ、ＤＥＦ、ＧＤＳ−ＩＩ、ＯＡＳＩＳ、または他の記述が含まれる。様々な実施形態では、処理は、１若しくはそれ以上の集積回路上に含めるのに適する論理および／または回路を生成し、検証し、または指定するための解釈、コンパイル、シミュレーション、および合成の任意の組み合わせを含む。各集積回路は、様々な実施形態によれば、様々な技法に従って設計することができ、かつ／または製造することができる。技法には、プログラマブルな技法（例えば、フィールド若しくはマスク・プログラマブル・ゲート・アレイ集積回路）、セミカスタムの技法（例えば、全部若しくは一部がセルベースの集積回路）、およびフルカスタムの技法（例えば、実質的に専門化された集積回路）、それらの任意の組み合わせ、または集積回路の設計および／若しくは製造と適合する任意の他の技法が含まれる。
【０３１４】
ある実施形態では、命令のセットを記憶しているコンピュータ可読媒体によって記述される動作の全部または部分の様々な組み合わせが、１若しくはそれ以上のプログラム命令の実行および／若しくは解釈によって、１若しくはそれ以上のソースおよび／若しくはスクリプト言語命令文の解釈および／若しくはコンパイルによって、または、プログラミングおよび／若しくはスクリプティング言語命令文で表現された情報をコンパイルし、変換し、かつ／または解釈することによって生成されるバイナリ命令の実行によって実行される。命令文は任意の標準のプログラミングまたはスクリプティング言語（例えば、Ｃ、Ｃ＋＋、Ｆｏｒｔｒａｎ、Ｐａｓｃａｌ、Ａｄａ、Ｊａｖａ（登録商標）、ＶＢｓｃｒｉｐｔ、Ｓｈｅｌｌ）と適合する。プログラム命令、言語命令文、またはバイナリ命令のうち１若しくはそれ以上が、任意選択で、１若しくはそれ以上のコンピュータ可読記憶媒体要素上に記憶される。様々な実施形態では、プログラム命令の一部、全部、または様々な部分が、１若しくはそれ以上の関数、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはそれらの部分として実現される。
【０３１５】
結論
ある特定の選択が、説明において、テキストおよび図面を作成するに際の単なる便宜のためになされており、別の指示がない限り、それらの選択は、それ自体で、前述の実施形態の構造または動作に関する追加情報を伝えるものと解釈すべきではない。選択の例には、図の符番に使用される呼称の特定の編成または割り当て、および実施形態の特徴および要素を識別し、参照するのに使用される要素識別子（コールアウトや数値識別子など）の特定の編成または割り当てが含まれる。
【０３１６】
「ｉｎｃｌｕｄｅｓ」または「ｉｎｃｌｕｄｉｎｇ」という語は、開放型範囲の論理集合を記述する抽象概念として解釈されるべきことが明確に意図されており、後に続けて「ｗｉｔｈｉｎ」という語が明示されない限り物理的包含を伝えるためのものではない。
【０３１７】
前述の実施形態は、説明および理解の明確さのためにある程度詳細に説明されているが、本発明は提示した詳細だけに限定されるものではない。本発明の多くの実施形態がある。開示の実施形態は例示であり、限定ではない。
【０３１８】
説明と整合性を有する、構成、配置、および使用における多くの変形が可能であり、それらの変形は、発行される特許の特許請求の範囲内にあることが理解されるであろう。例えば、相互接続および機能ユニットのビット幅、クロック速度、および使用される技術の種類は、各構成要素ブロックにおける様々な実施形態に従って変わりうる。相互接続および論理に与えられた名称は、単なる例であり、説明した概念を限定するものと解釈すべきではない。フローチャートおよび流れ図のプロセス、動作、および機能要素の順序および配置は、様々な実施形態に従って変わりうる。また、特に別に指定しない限り、指定される値範囲、使用される最大値および最小値、または他の特定の仕様（例えば、フラッシュメモリ技術の種類、レジスタおよびバッファ内のエントリまたは段の数）は、単に前述の実施形態のものにすぎず、実施技術の改善および変更を追跡することが見込まれるものであり、限定として解釈すべきではない。
【０３１９】
当分野で公知の機能的に等価の技法を、様々なコンポーネント、サブシステム、動作、関数、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはそれらの部分を実施するのに、前述の技法の代わりに用いることができる。また、実施形態の多くの機能的態様を、より高速な処理（以前にハードウェアにあった機能のソフトウェアへの移行を円滑化する）およびより高い集積密度（以前にソフトウェアにあった機能のハードウェアへの移行を円滑化する）の実施形態に依存する設計制約条件および技術傾向に応じて、選択的に、ハードウェア（おおむね専用の回路など）で、またはソフトウェアで（例えば、プログラムされたコントローラ若しくはプロセッサのある方式によって）実現できることも理解される。様々な実施形態の具体的な変形は、これに限定されるものではないが、分割の違い、フォームファクタおよび構成の違い、異なるオペレーティングシステムおよび他のシステムソフトウェアの使用、異なるインターフェース規格、ネットワークプロトコル、または通信リンクの使用、本明細書で説明した概念を、特定の用途の固有の技術的業務的制約条件に従って実施するときに予期されるべき他の変形を含む。
【０３２０】
各実施形態は、前述の各実施形態の多くの態様の最小限の実施に必要とされるものを大きく超えた詳細および環境的コンテキストと共に説明されている。ある実施形態は、残りの要素間での基本的協働を変更せずに開示の構成要素または機能を割愛することを当業者は理解するであろう。よって、開示の詳細の多くが前述の実施形態の様々な態様を実施するのに必要ではないことが理解される。残りの要素が先行技術と区別できる範囲内で、割愛される構成要素および特徴は本明細書で説明した概念を限定するものではない。
【０３２１】
設計におけるすべてのそのような変形は、前述の実施形態によって伝えられる教示に対する実質的な変更ではない。また、本明細書で説明した実施形態は、他のコンピューティング用途およびネットワーキング用途に幅広い適用性を有し、前述の実施形態の特定の用途または産業だけに限定されるものではないことも理解される。よって本発明は、発行される特許の特許請求の範囲内に包含されるあらゆる可能な改変形態および変形形態を含むものと解釈すべきである。
【図１Ａ】
2014534503.tif 000012
【図１Ｂ】
2014534503.tif 000013
【図２】
2014534503.tif 000014
【図３】
2014534503.tif 000015
【図４Ａ】
2014534503.tif 000016
【図４Ｂ】
2014534503.tif 000017
【図５】
2014534503.tif 000018
【図６】
2014534503.tif 000019
【図７】
2014534503.tif 000020
【図８】
2014534503.tif 000021
【図９】
2014534503.tif 000022
【図１０】
2014534503.tif 000023
【図１１】
2014534503.tif 000024
【国際調査報告】
2014534503.tif 000025
2014534503.tif 000026
2014534503.tif 000027