(57)【特許請求の範囲】
【請求項１】
不揮発性データ記憶を割り当てるための方法であって、
記憶クライアントに記憶インターフェースを介して複数の論理識別子（ＬＩＤ）を含む論理アドレス空間を提示することと、
前記論理アドレス空間内のＬＩＤを前記不揮発性記憶デバイス上の各記憶位置に関連付けるインデックスを維持することと、
前記論理アドレス空間の前記ＬＩＤの割り当てに基づいて、前記論理アドレス空間内の論理容量を割り当てるクライアント要求を満たすことができるかどうかを判定するために、前記インデックスを参照することと、を含み、
前記クライアント要求は、前記論理アドレス空間内のＬＩＤの１つのセットを特定し、前記クライアント要求を満たすことができるかどうかを判定することは、ＬＩＤの前記特定されたセットのうちの１つ以上のＬＩＤが前記インデックス内にあるかどうかを判定することを含む、方法。
【請求項２】
前記クライアント要求は、前記論理アドレス空間内の順序付けられたＬＩＤのセットを特定し、前記クライアント要求を満たすことができるかどうかを判定することは、ＬＩＤの前記特定され、順序付けられたセットのうちの１つ以上のＬＩＤが前記インデックス内にあるかどうかを判定することを含む、請求項１に記載の方法。
【請求項３】
前記クライアント要求を満たすことができるかどうかを判定することは、
前記論理アドレス空間の未割り付け論理容量を判定することと、
前記未割り付け論理容量を前記クライアント要求の前記論理容量と比較することと、を含む、請求項１に記載の方法。
【請求項４】
記憶位置が関連付けられていないＬＩＤの割り当てを示す割り当てエントリを維持することと、
前記割り当てインデックスを使用して、未割り当て論理容量を判定することと、をさらに含み、
前記クライアント要求を満たすことができるかどうかを判定することは、前記クライアント要求の前記論理容量を前記未割り当て論理容量と比較することを含む、請求項１に記載の方法。
【請求項５】
前記割り当てエントリは、前記インデックス内に維持される、請求項４に記載の方法。
【請求項６】
前記論理アドレス空間内の割り当てられていないＬＩＤを含む、未割り当てインデックスを維持することと、
前記未割り当てインデックス内のＬＩＤを特定することに応答して、前記論理アドレス空間内の論理容量を割り当てるクライアント要求を満たすことができることを判定することと、をさらに含む、請求項１に記載の方法。
【請求項７】
応答を提供することは、
前記クライアント要求を満たす割り当てられたＬＩＤを提供すること、
前記要求を満たすことができることを示すこと、
前記要求が満たされ得ないことを示すこと、および
前記クライアント要求を満たすＬＩＤが割り当てられることを示すこと、のうち１つを含む、請求項１に記載の方法。
【請求項８】
前記クライアント要求は、割り当てるための第１のＬＩＤを含み、前記応答を提供することは、前記第１のＬＩＤが割り当てられていることに応答して、第２の異なるＬＩＤを提供することを含む、請求項１に記載の方法。
【請求項９】
前記クライアント要求は、前記不揮発性記憶デバイス上に記憶するためのデータに関連し、前記方法は、
前記クライアント要求に関連する前記データを、前記不揮発性記憶デバイスの記憶位置に記憶することと、
前記記憶位置を前記インデックス内のＬＩＤと関連付けることと、をさらに含む、請求項１に記載の方法。
【請求項１０】
前記インデックスは、
前記不揮発性記憶デバイスの複数の記憶位置と関連付けられるＬＩＤ、および
複数のＬＩＤと関連付けられる記憶位置のうち１つを含む、請求項１に記載の方法。
【請求項１１】
前記論理アドレス空間は、前記不揮発性記憶デバイスの物理記憶容量を上回る、請求項１に記載の方法。
【請求項１２】
前記不揮発性記憶デバイス上に記憶位置を割り付けられていない割り当てられたＬＩＤのために、物理記憶容量を割り当てる要求を受け取ることと、
前記不揮発性記憶デバイスの利用可能な物理記憶容量を判定することと、
前記利用可能な物理記憶容量が前記要求を満たすかどうかを示す応答を提供することと、をさらに含む、請求項１１に記載の方法。
【請求項１３】
前記割り当てられたＬＩＤのために、物理記憶容量を割り当てる前記要求を満たすことに応答して、
前記不揮発性記憶デバイスの記憶位置に前記割り当てられたＬＩＤに対応するデータを記憶することと、
前記インデックス内に前記割り当てられたＬＩＤに対する前記記憶位置のための物理アドレスを割り付けることと、をさらに含む、請求項１２に記載の方法。
【請求項１４】
不揮発性ストレージを割り当てるための方法であって、
複数の論理識別子（ＬＩＤ）を含む不揮発性記憶デバイスの論理アドレス空間をクライアントに提示することであって、前記ＬＩＤは前記不揮発性記憶デバイスの記憶位置から独立し、前記ＬＩＤに対応する物理容量は前記不揮発性記憶デバイスの物理記憶容量を上回り、各ＬＩＤは前記不揮発性記憶デバイスの前記記憶位置にマップされることができる、前記論理アドレス空間をクライアントに提示することと、
前記クライアントから記憶容量に対する要求を受け取ることであって、前記要求は割り当てるための第１のＬＩＤを含む、前記記憶容量に対する要求を受け取ることと、
前記第１のＬＩＤが割り当てられていることを判定することに応答して、前記クライアントへ前記論理アドレス空間内の第２の異なるＬＩＤを提供することと、を含む、方法。
【請求項１５】
不揮発性ストレージを割り当てるための方法を機械に行わせるように設定される機械可読命令を含む、非一時的記憶媒体であって、前記方法は、
不揮発性記憶デバイスによって、前記不揮発性記憶デバイスの記憶位置から独立し、前記不揮発性記憶デバイスの物理記憶容量を上回る複数の論理識別子（ＬＩＤ）を含む論理アドレス空間をクライアントに提示することと、
前記クライアントから前記不揮発性記憶デバイス上にデータを記憶する要求を受け取ることであって、前記要求は前記クライアントへ割り当てるためのＬＩＤを特定する、前記データを記憶する要求を受け取ることと、
前記特定したＬＩＤが割り当てられていることを判定することに応答して、前記クライアントへ割り当てるために前記論理アドレス空間内の異なるＬＩＤを選択することと、
前記不揮発性記憶デバイス上の記憶位置に前記要求のデータを記憶することと、
前記クライアントへ割り当てられるＬＩＤを前記要求の前記データを含む前記記憶位置と関連付けることと、を含む、非一時的記憶媒体。
【請求項１６】
不揮発性ストレージを割り当てるための方法であって、
ソリッドステート記憶デバイスの論理アドレス空間内の割り当て動作、および前記ソリッドステート記憶デバイスの記憶動作に関連するインデックスを維持することであって、前記論理アドレス空間内の前記割り当て動作は、前記論理アドレス空間の論理識別子をそれぞれの記憶クライアントに割り当てることに関連する、前記インデックスを維持することと、
前記ソリッドステート記憶デバイスの記憶動作を管理するために前記インデックスにアクセスすることと、
前記ソリッドステート記憶デバイスによってサポートされる割り当てられた論理容量を管理するために、前記インデックスにアクセスすることと、を含み、
論理識別子を特定するクライアント要求を受け取ることに応答して、前記特定された論理識別子が前記インデックス内にあるかどうかに基づいて前記クライアント要求を満たすことができるかどうかを判定する、方法。
【請求項１７】
割り当て動作に関する前記インデックスは、前記ソリッドステート記憶デバイス上で行われる割り当て動作に関するメタデータと共に、共有データ構造内に記憶される、請求項１６に記載の方法。
【請求項１８】
割り当て動作に関する前記インデックスは、割り当てられた前記論理容量の論理識別子を特定する割り当て指標を含み、前記方法は、
割り当て問い合わせに応答するために前記割り当て指標を使用することをさらに含む、請求項１６に記載の方法。
【請求項１９】
装置であって、
不揮発性記憶デバイスの物理記憶容量を上回る、前記不揮発性記憶デバイスの論理アドレス空間を提示するように構成された論理空間管理モジュールであって、前記論理アドレス空間は複数の論理識別子（ＬＩＤ）を含む、論理空間管理モジュールと、
前記論理アドレス空間内のＬＩＤを前記不揮発性記憶デバイスの記憶位置にマップするように構成されたインデックスを維持するように構成されたマッピングモジュールと、
前記不揮発性記憶デバイスの利用可能な物理記憶容量を判定するために、前記インデックスを参照することにより、物理記憶容量に対するクライアント要求に応答するように構成された物理容量割り当てモジュールと、を含み、
前記クライアント要求は１つ以上のＬＩＤを含み、前記クライアント要求を満たすことができるかどうかを判定することは、前記１つ以上のＬＩＤのうちのいずれかが割り当てられているかどうかを判定することを含む、装置。
【請求項２０】
前記物理容量割り当てモジュールは、前記インデックス内のＬＩＤに割り付けられていない前記不揮発性記憶デバイスの記憶位置を特定することにより、利用可能な物理記憶容量を判定するように構成される、請求項１９に記載の装置。
【請求項２１】
前記物理容量割り当てモジュールは、前記不揮発性記憶デバイス上で行われる記憶動作に応答して、前記不揮発性記憶デバイスの利用可能な物理記憶容量の指標を維持するように構成される、請求項１９に記載の装置。
【請求項２２】
請求項２１に記載の装置であって、
前記物理容量割り当てモジュールは、記憶動作に応答して利用可能な物理記憶容量の前記指標を更新するように構成され、
前記記憶動作は、
物理記憶容量の予約に関連するデータを記憶する記憶動作であって、前記記憶は関連する物理記憶容量の予約の一部を必要としない、記憶動作と、
物理記憶容量の予約を取り消す記憶動作と、
物理記憶容量の予約の一部を取り消す記憶動作と、の内の１つ以上を含む、装置。
【請求項２３】
請求項１９に記載の装置であって、
前記マッピングモジュールは、以下のことに応答してＬＩＤと記憶位置との間の関連を更新するように構成され、
前記以下のことは、
前記不揮発性記憶デバイスの前記記憶位置に記憶されたデータを異なる記憶位置へ動かすことと、
前記記憶位置に記憶された前記データは、第２の記憶位置に記憶されたデータと同一であり、前記更新は前記ＬＩＤを前記第２の記憶位置と関連付けることを含むことと、
１つ以上のＬＩＤと関連付けられた１つ以上の記憶位置が、１つ以上の異なるＬＩＤに再マップされることと、の内の１つ以上を含む、装置。
【請求項２４】
物理記憶容量の予約を維持するように構成された、物理空間予約モジュールを、さらに含み、
利用可能な物理記憶容量を判定することは、予約にアクセスすることを、さらに含む、請求項１９に記載の装置。
【請求項２５】
前記クライアント要求を満たすことに応答して、前記不揮発性記憶デバイスの利用可能な物理記憶容量を予約するように構成され、
前記予約を満たすために、前記不揮発性記憶デバイスの十分な利用可能な物理記憶容量を維持するように構成された、物理空間予約モジュールを、さらに含む、請求項１９に記載の装置。
【請求項２６】
前記クライアント要求は、前記不揮発性記憶デバイスに記憶されるデータに関連し、
前記装置は、前記クライアント要求で参照されたデータを、前記不揮発性記憶デバイスの記憶位置に記憶するように構成された記憶コントローラを、さらに含み、
前記マッピングモジュールは、前記記憶位置を前記インデックス内のＬＩＤにマップするように構成された、請求項１９に記載の装置。
【請求項２７】
前記クライアント要求は、
要求される前記物理記憶容量を導くために用いられる、前記論理アドレス空間内の論理容量の量と、
要求される前記物理記憶容量を導くために用いられる、前記論理アドレス空間内の１つ以上のＬＩＤと、
要求される前記物理記憶容量が導かれるデータを記憶する要求と、
前記物理記憶容量を予約する要求と、
前記物理記憶容量を予約し、前記論理アドレス空間内の対応する論理容量を割り当てる要求と、の内の１つを含む、請求項１９に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ記憶の割り当てに関し、より具体的には、ソリッドステート記憶デバイス等の不揮発性記憶デバイスにおけるデータ記憶の割り当てに関する。
【背景技術】
【０００２】
［関連技術の説明］
典型的なデータ記憶デバイスは、論理ブロックアドレス（「ＬＢＡ」と物理ブロックアドレス（「ＰＢＡ」）との間に１対１に近いマッピングがある、ブロック記憶デバイスである。通常、ＬＢＡとＰＢＡとの間の１対１のマッピングの唯一の例外は、データ記憶デバイスは、不良と判定されるブロックへ再マップされ得る少量の余分ブロックを有してもよいということである。ＬＢＡとＰＢＡとの間のこの１対１のマッピングに基づいて、ＬＢＡと、オブジェクト名、ファイル名、および他の論理識別子との間のより高いレベルのマッピングが、ファイルサーバまたはファイルシステム内において行われる。典型的には、ＬＢＡとＰＢＡとの間のこの１対１のマッピングが使用されるデータ記憶デバイスは、ランダムアクセス記憶デバイスである。ファイルサーバまたはファイルシステムは、小型コンピュータシステムインターフェース（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）（「ＳＣＳＩ」）コマンドを、特定のＬＢＡに割り付けられるデータのブロックをデータ記憶デバイスに送るために使用することができる。典型的な記憶デバイスに対して、ＬＢＡは、データ記憶デバイスが初期化される時に割り当てられる。この場合、ＬＢＡの割り当ては、データ記憶デバイス上で利用可能なＬＢＡの範囲または一覧を、データ記憶デバイスに接続されているファイルサーバもしくはファイルシステムに接続されるクライアントもしくはコンピュータに対して割り当てることである。
【０００３】
サーバまたは他のコンピュータが１つより多いデータ記憶デバイスへのアクセスを有するシステムにおいて、データ記憶デバイスがランダムアクセスデバイスの場合、ファイルサーバまたはファイルシステムは、アクセスされている特定のデータ記憶デバイスを特定するために、各ＬＢＡと共に追加の識別子を典型的に含む。識別子は、ドライブ名、記憶デバイスの製造者において割り付けられる固有の識別子、論理名、またはシステム内でアクセス可能な様々なデータ記憶デバイス間を区別するために使用することができる他の識別子であってもよい。このシステムにおいて、クライアントは、１つ以上のサーバを介してデータ記憶デバイスにアクセスすることができる。各クライアントは、記憶空間を割り当てられてもよい。割り当て記憶空間は、記憶デバイス全体であってもよく、記憶デバイスの一部分であってもよく、または２つ以上の記憶デバイスの全部もしくは一部分であってもよい。典型的には、２つ以上の記憶デバイスがシステム内のサーバまたはクライアントへアクセス可能であるシステムに対して、記憶空間および対応するアドレスの割り当ては、記憶デバイスに接続されるファイルサーバまたはファイルシステム内において行われるだろう。典型的には、ファイルシステムは、割り付けられている、および割り付けられていないＬＢＡを管理する。割り付けられていないＬＢＡは、空きＬＢＡプール内に置かれる。新しいファイルが作成される際、ＬＢＡは空きＬＢＡプールから除去され、ファイルに関連付けられる。ファイルが削除される際、それらのＬＢＡは空きＬＢＡプールへ戻される。
【０００４】
ＬＢＡとＰＢＡとの間に１対１の応対がない、連続的な記憶デバイスまたはログ構造の記憶デバイス等のデータ記憶デバイスにおいて、典型的に、ランダムアクセス記憶デバイスに接続されるファイルシステムまたはファイルサーバ内に存在している論理対論理のマッピングに似た別のレベルの論理対物理のマッピングが存在する。これらのデバイスは、デバイスにアクセスする任意のファイルシステムに重複して、自身の、ＬＢＡ使用を管理する。この重複は、ファイルシステムが、デバイスへ、ファイルシステムがＬＢＡを空きＬＢＡプール内に移動しているという手がかりを提供し、デバイスが同じように行えるようにする、「トリムコマンド」を実現するために、有利である。追加の論理対論理のマッピングは、仮想プロビジョニング層をサポートすることにおけるような、他の中間の変換をサポートするために存在してもよい。連続的な記憶デバイス、ログ構造のファイルシステム、または他の同様のデバイスにおいて、ファイルシステム／ファイルサーバにおける論理対論理のマッピング、さらに追加の論理対論理および／または論理対物理のマッピングは、非効率的であり、複雑性を追加し、場合によっては冗長である。 
【発明の概要】
【０００５】
不揮発性記憶デバイスは、論理アドレス空間をクライアントに提示することができる。論理アドレス空間は、記憶デバイスの物理記憶位置（または一般的に「記憶位置」）から独立し得る複数の論理識別子（ＬＩＤ）を含むことができる。したがって、論理アドレス空間と特定の記憶位置との間に事前に決定されるおよび／または事前に設定されるマッピングがない場合がある。デバイス（または他の実体）は、論理アドレス空間内のＬＩＤを記憶デバイスの各記憶位置と関連付けるためにインデックスを維持することができる。ＬＩＤと記憶位置との関連付けは、任意であってもよい。ＬＩＤの記憶位置に対する関連付けは、利用可能な論理容量および／または利用可能な物理記憶容量を判定するために使用することができる。
【０００６】
クライアント要求は、論理アドレス空間内の論理容量に対する要求を含むことができる。要求は、論理アドレス空間内に十分な論理容量がある場合に満たすことができる。論理アドレス空間の論理容量は、割り当てられている、未割り当ての、割り付けられている、および／または未割り付けであるＬＩＤを特定することを含んでもよい。
【０００７】
本明細書に使用される、割り当てられているＬＩＤは、特定のクライアントに割り当てられている論理アドレス空間内のＬＩＤを指すことができる。割り当ては、ＬＩＤ、ＬＩＤの範囲、１セットの連続的に順序付けられたＬＩＤのセット、隣接するＬＩＤのセット、隣接および非隣接のＬＩＤのセット、および／または論理アドレス空間内の論理容量を、クライアントによる使用のために予約することを含み得る。割り当てられたＬＩＤは、記憶デバイス上の物理記憶容量に対応する場合もあれば対応しない場合もある。割り当てられていないＬＩＤは、クライアントに割り当てられていない、および／または不揮発性記憶デバイス上に記憶されているデータに関連付けられていない論理アドレス空間内のＬＩＤを指すことができる。
【０００８】
本明細書に使用される、割り付けられているＬＩＤは、不揮発性記憶デバイス上に記憶されているデータに関連付けられている割り付けられたＬＩＤを指すことができる。したがって、割り付けられているＬＩＤは、記憶デバイスの１つ以上の記憶位置に関連付けられているＬＩＤを指し得る。割り付けられていないＬＩＤは、不揮発性記憶デバイス上に記憶されるデータに関連付けられていないＬＩＤを指し得る。上述のように、割り当てられているＬＩＤは、未割り付けであってもよい。同様に、割り当てられていないＬＩＤは、未割り付けであってもよい。
【０００９】
データ記憶空間を割り当てるための装置は、割り当て要求の受け取りの必要なステップを機能的に実行するよう設定することができ、データ記憶デバイスの論理空間が十分な未割り付けおよび／または未割り当て論理空間を有するかどうかを判定し、応答を提供する。
【００１０】
割り当て要求モジュールは、要求デバイスから、論理アドレス空間内の論理容量を割り当てる割り当て要求を受け取ることができる。割り当て要求は、データ記憶デバイスにおいて受け取られる。論理容量は、データ記憶デバイス上にデータを記憶するためのものである。論理容量モジュールは、論理アドレス空間が、割り当て要求を満たすのに十分な未割り付けおよび／または未割り当て論理空間を含むかどうかを判定する。判定は、割り付けられたＬＩＤに対応するデータがデータ記憶デバイス上に記憶される、１つ以上の物理位置にマップされる論理空間の割り付け論理識別子（「ＬＩＤ」）を含む論理対物理のマップ等の、論理容量割り当てを維持しているインデックスの検索を含むことができる。しかしながら、他のデータ構造、インデックス、および／またはマップが使用されてもよい。割り当て応答モジュールは、論理空間が十分な論理空間を有するかどうかを論理容量モジュールが判定することに応じて、要求デバイスに応答を提供することができる。応答は、割り当て要求が満たされ得るどうかの指示を含んでも良い。
【００１１】
本明細書に使用される、論理識別子（「ＬＩＤ」）は、論理ブロックアドレス（「ＬＢＡ」）、ＬＢＡの範囲、非隣接のＬＢＡのセット、インデックス、ファイル名、ｉノード、または他の論理識別子のうちの１つ以上を指すことができる。ＬＩＤは、オブジェクト識別子の他の、論理識別子を指してもよい。
【００１２】
いくつかの実施形態において、データ記憶デバイスは、記憶コントローラおよび／またはドライバが記憶デバイス内の物理アドレスを含む論理対物理のマップを含む、記憶デバイスならびに記憶コントローラおよび／またはドライバを含む。別の実施形態においては、論理空間に対応する記憶容量（「論理空間容量」）は、大幅にデータ記憶デバイスの物理記憶容量よりも大きい。論理空間容量は、割り当てられている論理空間と組み合わされた未割り付けおよび／または未割り当て論理空間を含む。割り当てられた論理空間は、割り当てられた論理空間内の、割り付けられたＬＩＤおよび割り当てられていないＬＩＤを含む。
【００１３】
いくつかの実施形態において、本装置は、物理容量要求モジュール、物理容量割り当てモジュール、および物理容量応答モジュールを含む。物理容量要求モジュールは、物理容量要求を要求デバイスから受け取り、その物理容量要求はデータ記憶デバイスにおいて受け取られる。物理容量要求は、データ記憶デバイス内の物理記憶容量の利用可能量の要求を含む。物理容量割り当てモジュールは、データ記憶デバイス上の物理記憶容量の利用可能量を判定する。物理記憶容量の利用可能量は、データ記憶デバイス内の未割り付け記憶位置の物理記憶容量を含む。さらなる実施形態において、物理容量割り当てモジュールは、割り付けられている物理アドレス、未割り付け物理アドレス、割り当てられている物理アドレス容量、および／または未割り当て物理アドレス容量を追跡する。
【００１４】
別の実施形態において、割り当て要求を受け取ることは、論理的な割り当て要求を受け取ること、またはデータ記憶に対する要求を受け取ることを含む。別の実施形態において、論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を含むかどうかを判定することは、割り当てのための要求ＬＩＤの一覧を受け取ること、およびこれらのＬＩＤが割り当てのために利用可能であることを検証すること、または要求と併せて受け取られた基準に適合する割り当てられていないＬＩＤを特定すること含む。
【００１５】
一実施形態において、本装置は、論理容量モジュールが、論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を含むことを判定することに応答して、要求デバイスに対する割り当て要求を満たすのに十分な未割り当て論理空間を割り当てる割り当てモジュールを含む。さらなる実施形態において、割り当てモジュールは、データを記憶するための要求と併せて１つ以上のＬＩＤを割り当て、データを記憶するための要求と関連付けられるデータを記憶することと併せて１つ以上のＬＩＤを割り当てる。
【００１６】
一実施形態において、応答を要求デバイスに伝えることは、割り当てられたＬＩＤが割り当て要求を満たす要求デバイスに割り当てられたＬＩＤを伝えることを含む。別の実施形態において、応答を要求デバイスに伝えることは、データ記憶デバイスが割り当て要求を満たすのに十分な未割り当て論理空間を含むことを示す要求デバイスに応答を伝えることを含む。別の実施形態において、応答を要求デバイスに伝えることは、データ記憶デバイスが割り当て要求を満たすには不十分な未割り当て論理空間を有することを示す要求デバイスに応答を伝えることを含む。別の実施形態において、応答を要求デバイスに伝えることは、要求ＬＩＤが割り当てられたという確認を、要求デバイスに伝えることを含み、その割り当て要求はＬＩＤを割り当てる要求を含む。
【００１７】
一実施形態において、本装置は、割り当て問い合わせ要求モジュール、割り当て問い合わせ判定モジュール、および割り当て問い合わせ応答モジュールを含む。割り当て問い合わせ要求モジュールは、割り当て問い合わせをデータ記憶デバイスにおいて受け取る。割り当て問い合わせ判定モジュールは、割り当て問い合わせにおいて規定される基準に適合する１つ以上のＬＩＤを特定する。特定されるＬＩＤは、割り付けられた割り当てられているＬＩＤ、未割り付けの割り当てられているＬＩＤ、および／または割り当てられていないＬＩＤを含む。割り当て問い合わせ応答モジュールは、割り当て問い合わせの結果を伝え、その結果は、特定されたＬＩＤの一覧、基準に適合するＬＩＤが見つかったことの確認、および／または割り当て問い合わせにおいて基準に適合するＬＩＤが見つからなかったことの確認を含む。
【００１８】
別の実施形態において、本装置は、データ記憶デバイスの内部からデータ記憶デバイスの論理空間を管理する論理空間管理モジュールを含む。論理空間を管理することは、割り当て解除要求が１つ以上の割り当てられているＬＩＤを未割り当て状態に戻す割り当て解除要求を要求デバイスから受け取ること、および成功した割り当て解除を要求に伝えることを含んでもよい。
【００１９】
論理空間を管理することは、ＬＩＤグループコマンド要求を要求デバイスから受け取ること、および要求デバイスにＬＩＤグループコマンド要求への応答を示す応答を伝えることを含むことができる。ＬＩＤグループコマンド要求は、２つ以上のＬＩＤ（「ＬＩＤグループ」）、ＬＩＤグループに関連付けられるメタデータ、および／またはＬＩＤグループに関連付けられるデータを取り入れるための動作を含む。この動作は、メタデータを変更すること、データをバックアップすること、メタデータをバックアップすること、制御パラメータを変更すること、アクセスパラメータを変更すること、データを削除すること、データをコピーすること、データを暗号化すること、データの重複を除外すること、データを圧縮すること、および／またはデータを解凍することを含む。
【００２０】
一実施形態において、本装置は、物理空間予約要求モジュール、物理空間予約モジュール、および物理空間予約返答モジュールを含む。物理空間予約要求モジュールは、データ記憶デバイス上の利用可能な物理記憶容量を予約する要求（「物理空間予約要求」）を、要求デバイスから受け取る。物理空間予約要求は、データ記憶デバイスにおいて受け取られ、要求された物理記憶容量の量の指示を含む。
【００２１】
物理空間予約モジュールは、データ記憶デバイスが物理記憶空間要求を満たすために物理記憶容量の利用可能量を有するかどうかを判定し、物理記憶容量の利用可能量が物理空間予約要求を満たすために適切であるという判定に応答して、物理記憶空間要求を満たすためにデータ記憶デバイス上の物理記憶容量の利用可能量を予約する（「予約された物理容量）」。物理空間予約返答モジュールは、データ記憶デバイスが物理空間予約要求を満たす量の利用可能な物理記憶空間を有するかどうかを物理空間予約モジュールが判定することに応じて、物理記憶容量の要求量の利用の可用性または不可用性の指示を伝送する。
【００２２】
物理空間予約要求は、一実施形態において、物理記憶容量の要求量の指示が要求された論理空間から導き出される、論理空間の量を含む。物理空間予約要求は、別の実施形態において、物理記憶容量の要求量の指示がＬＩＤに関連付けられるデータ量から導き出される、１つ以上のＬＩＤを含む。ＬＩＤに関連付けられるデータは、ＬＩＤに割り付けられたデータ、および／または各ＬＩＤに割り当てられたデータ容量を含む。物理空間予約要求は、別の実施形態において、要求される物理記憶容量の量の指示が、データに関連付けられるデータおよび／またはメタデータから導き出されるデータを記憶するための要求を含む。
【００２３】
物理空間予約要求は、別の実施形態において、データを記憶するための要求に関連付けられる物理空間予約要求を含み、物理記憶容量の要求量の指示は、物理空間予約要求内において示され、データを記憶するために要求のデータと相関する。物理空間予約要求は、別の実施形態において、物理記憶容量の量を予約する要求を含む。物理空間予約要求は、別の実施形態において、物理記憶容量の量を予約し、予約された物理記憶容量を論理的な実体に割り当てる要求を含む。
【００２４】
一実施形態において、本装置は、取り消しのトリガーとなるイベントに応答して、予約された物理記憶空間の全部または一部分を取り消す物理空間予約取り消しモジュールを含む。取り消しトリガーイベントは、データ記憶デバイスに書き込まれるべきデータおよび物理空間予約モジュールによって予約利用可能空間に関連付けられたデータが、記憶システム内にあらかじめ記憶されているという判定を含むことができる。取り消しトリガーイベントは、タイムアウトを含んでも良い。取り消しトリガーイベントは、予約記憶空間に関連付けられるデータを、書き込みデータが関連付けられる予約された物理容量より少なく記憶されるデータ記憶デバイスに書き込むことを含んでもよい。
【００２５】
別の実施形態において、物理空間予約モジュールは、物理空間予約要求に関連付けられる要求を受け取り、その要求に応答してデータ記憶デバイスにデータを書き込むこと、あらかじめ受け取られた物理空間予約要求の物理記憶容量の全部および一部分の予約を取り消すための要求を受け取ること、および／または追加の物理記憶容量が物理空間予約要求の物理記憶容量に関連付けられる、追加の物理記憶容量を割り付ける要求を受け取ること、に応答して予約された利用可能な物理記憶容量を変更する。
【００２６】
一実施形態において、１つ以上の物理アドレスに対する１つ以上のＬＩＤのマッピングは、１つ以上の物理アドレスに記憶されたデータが、１つ以上の異なる物理アドレスに移動される時、１つ以上の物理アドレスに記憶されたデータが、第１の位置において記憶され、それは第２の位置において記憶されたデータと同一であり、１つ以上のＬＩＤのマッピングが、第２の位置に対応して変更される時、および／または１つ以上のＬＩＤ（「第１のＬＩＤ」）にマップされた１つ以上の物理位置が、１つ以上の異なるＬＩＤ（「第２のＬＩＤ」）に再マップされる時に変化する。
【００２７】
データ記憶空間を割り当てるための別の装置は、記憶デバイスドライバを含む。記憶デバイスドライバは記憶インターフェースを介してファイルシステムまたはファイルサーバに結合され、記憶インターフェースは、データ記憶デバイスの論理容量を割り当てる割り当て要求をファイルシステム／ファイルサーバから伝え（論理容量は、データ記憶デバイス上にデータを記憶するためのものである）、割り当て応答をファイルシステム／ファイルサーバに伝えるように動作可能なコマンドインターフェースを含む。
【００２８】
記憶デバイスドライバおよび／またはデータ記憶デバイスは、論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を含むかどうかを判定し、その判定は論理対物理マップの検索を含む。論理対物理マップは、割り付けられているＬＩＤに対応するデータがデータ記憶デバイス上に記憶される、１つ以上の物理位置にマップされる論理空間の割り付けられているＬＩＤを含み、割り付けられているＬＩＤは、割り付けられているＬＩＤにマップされる１つ以上の物理アドレスとは異なる。割り当て応答は、割り当て要求に応答するものであり、論理空間が割り当て要求を満たすのに十分な論理空間を含むかどうかの指示を含む。
【００２９】
一実施形態において、本装置は、記憶デバイスドライバを、データ記憶デバイスを記憶デバイスドライバに連携させて、論理空間が割り当て要求を満たすのに十分な論理容量を含むかどうかを判定するのに十分であるように、データ記憶デバイスに結合するよう動作可能な記憶デバイスインターフェースを含む。さらなる実施形態において、記憶デバイスインターフェースは、周辺機器相互接続エクスプレス（「ＰＣＩ  Ｅｘｐｒｅｓｓ」または「ＰＣＩｅ」）、シリアルＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）（「ＡＴＡ」）バス、パラレルＡＴＡバス、小型コンピュータシステムインターフェース（「ＳＣＳＩ」）、ファイアワイヤ、ファイバーチャネル（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ユニバーサルシリアルバス（「ＵＳＢ」）、およびＰＣＩｅアドバンススイッチイング（ＰＣＩｅ  Ａｄｖａｎｃｅｄ  Ｓｗｉｔｃｈｉｎｇ）（「ＰＣＩｅ−ＡＳ」）のうちの１つ以上を含む。別の実施形態において、コマンドインターフェースは、新しい入力−出力制御（「ＩＯ−ＣＴＬ」）コマンドまたは既存のＩＯ−ＣＴＬコマンドの拡張として実現される。
【００３０】
本発明のシステムは、記憶空間を割り当てるためにも提示される。システムは、不揮発性ストレージ、割り当て要求モジュール、論理容量モジュール、および割り当て応答モジュールを伴う記憶デバイスによって具現化することができる。割り当て要求モジュールは、論理容量を割り当てる割り当て要求を要求デバイスから受け取る。割り当て要求は、データ記憶デバイスにおいて受け取られ、論理容量はデータ記憶デバイス上にデータを記憶するためのものである。
【００３１】
論理容量モジュールは、論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を有するかどうかを判定し、その判定は論理対物理マップの検索を含む。論理対物理マップは、１つ以上の物理位置にマップされる論理空間の割り付け論理識別子（「ＬＩＤ」）を含み、割り付けられたＬＩＤに対応するデータはデータ記憶デバイス上に記憶され、割り付けられたＬＩＤが割り付けられたＬＩＤにマップされる１つ以上の物理アドレスと異なる。論理容量モジュールが、論理空間が十分な論理空間を有するかどうかを判定することに応答して、割り当て応答モジュールは応答を要求デバイスに伝え、その応答は、論理空間が割り当て要求を満たすのに十分な論理空間を含むかどうかの指示を含む。
【００３２】
本発明の方法は、記憶空間を割り当てるためにも提示される。開示される実施形態における方法は、実質的に、記載される装置およびシステムの動作に関して上で提示される機能を実行するために必要なステップを含む。一実施形態において、方法は、論理容量を割り当てる割り当て要求を要求デバイスから受け取ることを含み、その割り当て要求はデータ記憶デバイスにおいて受け取られる。論理容量は、データ記憶デバイス上にデータを記憶するためのものである。
【００３３】
方法はまた、論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を含むかどうかを判定することを含み、その判定は論理対物理マップの検索を含む。論理対物理マップは、１つ以上の物理位置にマップされる論理空間の割り付け論理識別子（「ＬＩＤ」）を含み、割り付けられたＬＩＤに対応するデータがデータ記憶デバイス上に記憶され、割り付けたれたＬＩＤが割り付けられたＬＩＤにマップされる１つ以上の物理アドレスと異なる。方法は、論理空間が十分な論理空間を有するかどうかを判定することに応答して、応答を要求デバイスに伝えることを含み、その応答は、論理空間が割り当て要求を満たすのに十分な論理空間を有するかどうかの指示を含む。
【００３４】
本明細書を通じた特徴、利点、または類似する言い回しの参照は、本発明で実現され得る本発明の特徴および利点の全てが、本発明の任意の一実施形態であるべき、またはそうであるということを意味しない。むしろ、特徴および利点に言及する言い回しは、実施形態に関連して記載される特定の特徴、利点、または特質が、本発明の少なくとも１つの実施形態に含まれることを意味することが理解される。したがって、本明細書を通じて、特徴および利点の考察ならびに同様の言い回しは、同一の実施形態を指し得るが、必ずしもそうとは限らない。
【００３５】
さらに、記載される本発明の特徴、利点、および特質は、１つ以上の実施形態において、あらゆる好適な方法に組み込まれてもよい。当業者は、本発明が、特定の実施形態のうちの１つ以上の特定の特徴または利点なしに実施され得ることを認識するだろう。他の事例では、本発明の全ての実施形態において提示さていない場合がある追加の特徴および利点が、ある実施形態において認識される場合がある。
【００３６】
本発明のこれらの特徴および利点は、続く説明および付属の特許請求の範囲からより十分に明白となるか、あるいは以下に記載される本発明の実施によって知ることができる。
【００３７】
本発明の利点が容易に理解されるように、上で簡潔に記載した本発明のより具体的な説明が、添付の図面に図示される特定の実施形態を参照することにより提供される。これらの図面が本発明の典型的な実施形態のみを描写し、したがってその範囲を限定すると見なされるべきではないことを理解した上で、本発明は、添付の図面を使用してさらなる特異性および詳細とともに記載および説明される。
【図面の簡単な説明】
【００３８】
【図１Ａ】本発明に従って、データ記憶空間を割り当てるためのシステムの一実施形態を図示する略ブロック図である。
【図１Ｂ】本発明に従って、データ記憶空間を割り当てるためのシステムの別の実施形態を図示する略ブロック図である。
【図１Ｃ】本発明に従って、データ記憶空間を割り当てるためのシステムのさらに別の実施形態を図示する略ブロック図である。
【図２】本発明に従って、データ記憶空間を割り当てるための装置を含むことができる、ソリッドステート記憶デバイスの特定の実施形態を図示する略ブロック図である。
【図３】本発明に従って、データ記憶空間を割り当てるための装置を含むことができる、ソリッドステート記憶デバイス内における書き込みデータパイプラインおよび読み込みデータパイプラインを図示する略ブロック図である。
【図４】本発明に従って、データ記憶空間を割り当てるための装置の一実施形態を図示する略ブロック図である。
【図５】本発明に従って、データ記憶空間を割り当てるための装置の別の実施形態を図示する略ブロック図である。
【図６】本発明に従って、データ記憶空間を割り当てるための方法の一実施形態を図示する概略フローチャート図である。
【図７】本発明に従って、記憶デバイスにおける物理容量要求に対応するための方法の実施形態を図示する概略フローチャート図である。
【図８】本発明に従って、物理記憶空間を予約するための方法の一実施形態を図示する概略フローチャート図である。
【図９】本発明に従って、データ記憶デバイス内における割り当てられた論理識別子を割り付けるための方法の一実施形態を図示する概略フローチャート図である。
【図１０】本発明に従って、データ記憶デバイス内における割り当てられた論理識別子を割り付けるための方法の別の実施形態を図示する概略フローチャート図である。
【図１１】本発明に従って、記憶デバイスにおける割り当て問い合わせに対応するための方法の実施形態を図示する概略フローチャート図である。
【図１２】論理識別子を不揮発性記憶デバイスの記憶位置と関連付けるためのインデックスの例示的な実施形態の概略図である。
【図１３】論理識別子を不揮発性記憶デバイスの記憶位置と関連付けるためのインデックスの例示的な実施形態の概略図である。
【図１４】未割り当て論理容量を維持するためのインデックスの例を描写する。
【図１５】不揮発性記憶デバイスを割り当てるための方法の一実施形態のフロー図である。
【図１６】不揮発性記憶デバイスを割り当てるための方法の一実施形態のフロー図である。
【発明を実施するための形態】
【００３９】
本明細書に記載の多くの機能ユニットは、より具体的にその実現独立性を強調するために、モジュールとして名前が付けられている。例えば、モジュールは、カスタムＶＬＳＩ回路もしくはゲートアレイ、論理チップのような既製の半導体、トランジスタ、または他の離散的な構成要素を含むハードウェア回路として実現することができる。モジュールはまた、フィールドプログラマブルゲートアレイ、プログラム可能なアレイ論理、プログラム可能な論理デバイス等のようなプログラム可能なハードウェアデバイスにおいて実現されてもよい。
【００４０】
モジュールはまた、様々な型のプロセッサによる実行のためのソフトウェアにおいて実現することもできる。実行コードの特定されるモジュールは、例えば、コンピュータ命令の１つ以上の物理または論理ブロックを含むことができ、その命令は、例えば、オブジェクト、手続き、または機能等として組織されてもよい。しかしながら、特定されるモジュールの実行ファイルは、物理的にともに位置する必要はなく、異なる位置において記憶される全く異なる命令を含むことがあり、論理的にともに結び付けられる際に、モジュールを成し、そのモジュールのために定められた目的を達成する。
【００４１】
実際、実行コードのモジュールは、単一の命令または多数の命令であってもよく、異なるプログラム間および複数のメモリデバイスにわたる複数の異なるコードセグメントにわたり分散させることさえできる。同様に、動作可能なデータは、本明細書のモジュール内で識別および図示されてもよく、任意の好適な形状において具現化され、任意の好適な型のデータ構造内で組織されてもよい。動作可能なデータは、単一のデータセットとして収集することができ、あるいは異なる記憶デバイス上を含む異なる位置にわたり分散されてもよく、少なくとも部分的に、システムまたはネットワーク上の単なる電子信号として存在してもよい。モジュールまたはモジュールの一部分が、ソフトウェアにおいて実現される場合、ソフトウェア部分は、１つ以上のコンピュータ可読媒体上に記憶される。
【００４２】
本明細書を通じての「一実施形態」、「実施形態」、または類似する言い回しへの参照は、実施形態に関連して記載される特定の特徴、構造、または特質が、本発明の少なくとも一実施形態に含まれることを意味する。したがって、本明細書を通じての「一実施形態において」、「実施形態において」という表現、および類似する言い回しの出現は、全てが同じ実施形態を指し得るが、必ずしもそうとは限らない。
【００４３】
コンピュータ可読媒体の参照は、機械可読命令をデジタルデータ処理装置上に記憶することができる任意の形状をとることができる。コンピュータ可読媒体は、伝送回線、コンパクトディスク、デジタルビデオディスク、磁気テープ、ベルヌーイドライブ（Ｂｅｒｎｏｕｌｌｉ  ｄｒｉｖｅ）、磁気ディスク、パンチカード、フラッシュメモリ、集積回路、または他のデジタル処理装置メモリデバイスによって具現化することができる。
【００４４】
さらに、本発明の記載される特徴、構造、または特質は、１つ以上の実施形態において任意の好適な方法によって組み合わされてもよい。以下の説明において、本発明の実施形態の完全な理解を提供するために、プログラミング、ソフトウェアモジュール、ユーザ選択、ネットワークトランザクション、データベース問い合わせ、データベース構造、ハードウェアモジュール、ハードウェア回路、ハードウェアチップ等の例のような、多数の特定の詳細が提供される。しかしながら、当業者は、本発明が特定の詳細の１つ以上を用いることなく、あるいは他の方法、構成要素、材料等を用いて、実施されてもよいことを認識するであろう。他の事例において、周知の構造、材料、もしくは動作は、本発明の態様を不明瞭にすることを避けるために、詳細に示されないか、または説明されない。
【００４５】
本明細書に含まれる概略フローチャート図は、一般的に、論理フローチャート図として記載される。したがって、描写される順序および名前が付けられるステップは、本発明の方法の一実施形態を示す。図示される方法の機能、論理、もしくは１つ以上のステップに対する効果と同等である、またはその一部分である他のステップおよび方法を考案することができ得る。さらに、採用される形式および記号は、本方法の論理的なステップを説明するために提供され、本方法の範囲を限定しないことを理解されたい。様々な矢印型および線型がフローチャート図において採用されることがあるが、これらは対応する方法の範囲を限定しないことを理解されたい。実際、いくつかの矢印または他のコネクタは、本方法の論理の流れのみを示すために使用されることがある。例えば、矢印は、描写される方法の一覧のステップ間の特定されない継続の待機または監視期間を示してもよい。さらに、特定の方法が発生する順番は、示された対応するステップの順番に厳重に従う場合もあれば、従わない場合もある。
【００４６】
図１Ａは、本発明に従って、データ記憶空間を割り当てるためのシステム１００の一実施形態を図示する略ブロック図である。システム１００は、記憶コントローラ１０４および記憶デバイス１０６ａ〜ｎならびに記憶デバイスドライバ１１８（以下「記憶デバイスドライバ１１８」は、「ドライバ１１８」と同じ意味で使用され得る）を有する記憶システム１０２を含む。システム１００は、コンピュータネットワーク１１２上で１つ以上のクライアント１１０に接続されるサーバ１０８を含む。サーバ１０８はまた、１つ以上のクライアント１１０を含んでもよい。サーバ１０８は、記憶インターフェース１１６を介して記憶システム１０２のドライバ１１８に接続されるファイルサーバ１１４を含む。システム１００の構成要素は以下により詳細に記載される。
【００４７】
システム１００は、記憶システム１０２を含む。記憶システム１０２は、単一のデータ記憶デバイスであってもよく、ストレージエリアネットワーク（「ＳＡＮ」）であってもよく、ただのディスク／ドライブの束（「ＪＢＯＤ」）、ネットワーク接続ストレージ（「ＮＡＳ」）、または当業者に既知の他の記憶システムであってもよい。記憶システム１０２は、システム１００が図１Ａに描写される実施形態において、ファイルシステムを含むファイルサーバ１１４に接続され、サーバ１０８内に位置するドライバ１１８を含む。以下、ファイルサーバおよびファイルシステムは、区別なく使用されてもよい。一実施形態において、ファイルサーバ１１４は、ファイルシステムを含む。他の実施形態において、１つ以上のクライアント１１０、ファイルサーバ１１４と１つ以上のクライアント１１０との組み合わせ、またはオブジェクト、ファイル、論理ブロック等のようなデータユニットを処理し、データユニットを記憶デバイス１０６上に記憶し、記憶インターフェース１１６を介してデータ記憶デバイスと連動する他の構成要素もしくはシステム。
【００４８】
好ましい実施形態において、記憶デバイス１０６および記憶デバイス１０６を制御する記憶コントローラ１０４が、データ記憶デバイスを成す。データ記憶デバイスは、記憶コントローラ１０４に結合されるドライバ１１８を含む。ドライバ１１８は、複数の記憶コントローラ１０４の間で共有することができ、記憶コントローラ１０４は複数の記憶デバイス１０６ａ〜ｎによって共有され得る。記憶システム１０２は、それぞれが記憶デバイス１０６を含む複数のデータ記憶デバイスを含んでもよい。しかしながら、複数のデータ記憶デバイスは、共有の記憶コントローラ１０４および／またはドライバ１１８を有することができる。複数のデータ記憶デバイスのいくつかは、別個の記憶コントローラ１０４および／または別個のドライバ１１８を有してもよい。データ記憶デバイスは、割り当てに関連して、図４の装置４００に関して、以下により詳しく説明される。
【００４９】
他の実施形態において、記憶システム１０２は、特定のドライバ１１８を必要とせず、ファイルサーバ１１４に直接接続され得、ファイルサーバ１１４は記憶システム１０２の記憶コントローラ１０４と直接通信することができる。描写される実施形態において、ドライバ１１８は、サーバ１０８内に位置するが、他の実施形態において、ドライバ１１８は、部分的または全体的にサーバ１０８の外部にあり得る。本発明において、論理アドレスの割り当ておよび論理アドレス管理は、以下においてさらに説明されるように、記憶システム１０２内で発生する。
【００５０】
記憶コントローラ１０４は、１つ以上の記憶デバイス１０６ａ〜ｎに接続され、記憶デバイス１０６内のデータ記憶を制御する。記憶コントローラ１０４は、１つ以上のファイルサーバ１１４／ファイルシステムと通信し、典型的にはドライバ１１８を介してファイルサーバ１１４／ファイルシステムと通信する。一実施形態において、ドライバ１１８は、記憶コントローラ１０４の拡張であってもよい。１つの特定の実施形態において、図２の装置２０１においてより詳細に説明されるように、記憶コントローラ１０４は、ソリッドステート記憶デバイスコントローラ２０２である。典型的には、記憶コントローラ１０４は、論理識別子を記憶デバイス１０６の物理アドレスにマップし、以下により詳細に説明されるように、論理識別子を割り当て、管理することができる。論理識別子の割り当ておよび管理の全部または一部は、記憶コントローラ１０４およびドライバ１１８において含まれてもよい。しかしながら、論理アドレスの広範囲の割り当ては、図１Ｃにおけるシステム１０３の説明においてより詳細に説明されるように、記憶システム１０２の外部にあってもよい。
【００５１】
一実施形態において、ドライバ１１８、または代替的に記憶インターフェース１１６は、アプリケーションプログラムインターフェース（「ＡＰＩ」）であり、コマンドおよび他のデータを、記憶コントローラ１０４に送るために好適な形状に変換するように機能する。別の実施形態において、ドライバ１１８は、記憶コントローラ１０４の１つ以上の機能を含む。例えば、ドライバ１１８は、以下に記載されるモジュールの全部または一部分を含んでもよく、記憶デバイス１０６のための１つ以上のインデックスまたはマップを含んでもよい。ドライバ１１８、１つ以上の記憶コントローラ１０４、および記憶システム１０２を含む１つ以上の記憶デバイス１０６は、ファイルシステム／ファイルサーバへの記憶インターフェース１１６接続を有し、従来はファイルシステム／ファイルサーバにおいて行われる割り当てが、記憶システム１０２へ有利に押し下げられる（つまり、負荷を取り除かれる）。
【００５２】
本出願に使用される論理識別子は、データユニットのデータが記憶される物理アドレスとは異なるデータユニットの識別子である。本出願に使用されるデータユニットは、ともに論理的にグループ化されるデータの任意のセットである。データユニットは、ファイル、オブジェクト、レイド（ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｅｘｐｅｎｓｉｖｅ／ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋｓ／ｄｒｉｖｅｓ）（「ＲＡＩＤ」）データストライプのデータセグメント、またはデータ記憶内で使用される他のデータセットであってもよい。データユニットは、実行コード、データ、メタデータ、ディレクトリ、インデックス、メモリデバイス内に記憶される任意の他のタイプのデータ、またはその組み合わせであってもよい。データユニットは、名称によって、論理アドレス、物理アドレス、アドレス範囲、またはデータユニットを特定する他の規定によって、特定することができる。論理識別子（「ＬＩＤ」）は、ファイル名、オブジェクト識別子、ｉノード、汎用一意識別子（Ｕｎｉｖｅｒｓａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）（「ＵＵＩＤ」）、グローバル一意識別子（Ｇｌｏｂａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）（「ＧＵＩＤ」）、または他のデータユニットラベル等のデータユニット識別子を含み、論理ブロックアドレス（「ＬＢＡ」）、シリンダ／ヘッド／セクタ（「ＣＨＳ」）、または他の低いレベルの論理識別子を含むこともできる。論理識別子は、一般的に、物理位置にマップされ得る任意の論理的なラベルを含む。
【００５３】
描写される記憶システム１０２は、１つの記憶コントローラ１０４を含むが、他の記憶コントローラ１０４もまた含むことができる。一実施形態において、各記憶コントローラ１０４は、記憶デバイス１０６の固有のセットを制御する。別の実施形態において、２つ以上の記憶コントローラ１０４は、記憶デバイス（例えば１０６ａ）に接続することができ、記憶デバイス１０６ａ上にデータを記憶するために互いに通信することができる。例えば、１つの記憶コントローラ１０４は、マスタであってもよく、もう１つの記憶コントローラ１０４がスレーブであってもよい。当業者は、２つ以上の記憶コントローラ１０４が、記憶システム１０２における２つ以上の記憶デバイス１０６を制御することができる他の方法を認識するであろう。
【００５４】
記憶システム１０２は、１つ以上の記憶デバイス１０６ａ〜ｎを含む。記憶デバイス１０６は、記憶コントローラ１０４によって指示されるように、データユニットのデータを記憶する。一実施形態において、記憶デバイス１０６は、少なくともいくつかのデータを連続的に、またはログ構造もしくは類似するものの中に記憶する。典型的に、そのような記憶デバイス１０６において、データは、ランダムアクセスデバイス内のようには記憶されない。例えば、データユニットが変更される際、データユニットのデータは、１つの位置から読み込まれ、変更され、次いで異なる位置に書き込まれる。データをデータ記憶デバイス１０６に書き込むオーダーおよびシーケンスはログになり、シーケンスを再生することによって、インデックスは構成または再構成することができる。
【００５５】
変更データは、データが現在連続的に記憶されているところに記憶することができる。データ記憶デバイス１０６は、連続的に記憶されたデータを記憶するための次の位置を示す１つ以上の付加ポイントを含んでもよい。そのようなデータ記憶デバイス１０６において、論理識別子は、１つ以上の物理アドレスにマップされる。例えば、論理識別子は、現在のデータならびに同一データの古いバージョンにマップされてもよい。連続的なストレージおよび論理対物理のマッピングは、以下により詳細に説明される。
【００５６】
一実施形態において、記憶デバイス１０６は、ソリッドステート記憶デバイスまたはフラッシュメモリ、ナノランダムアクセスメモリ（「ナノＲＡＭまたはＮＲＡＭ」）、磁気抵抗ＲＡＭ（「ＭＲＡＭ」）、ダイナミックＲＡＭ（「ＤＲＡＭ」）、相変化ＲＡＭ（「ＰＲＡＭ」）等のような記憶クラスメモリであってもよい。他の実施形態において、記憶デバイスは、データが連続的に記憶されるログ構造のファイルシステムとしてデータを記憶するよう組織される、ハードディスクドライブ、光学ドライブ、テープ記憶等であってもよい。
【００５７】
別の実施形態において、記憶デバイス１０６は、低い性能のためのキャッシュとして作動するフラッシュメモリ等の高性能記憶デバイス、ハードディスクドライブ等の長期記憶デバイスを含むことができる。高容量の不揮発性記憶デバイスのためのキャッシュとして作動するソリッドステートストレージの例は、２００７年１２月６日に提出されたＤａｖｉｄ  Ｆｌｙｎｎらの「Ａｐｐａｒａｔｕｓ，  Ｓｙｓｔｅｍ，  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｓｔｏｒａｇｅ  ａｓ  Ｃａｃｈｅ  ｆｏｒ  Ｈｉｇｈ−Ｃａｐａｃｉｔｙ，  Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｓｔｏｒａｇｅ」と題される米国特許出願第１１／９５２，１２３号に記載され、参照により本明細書に組み込まれる。
【００５８】
さらに別の実施形態において、記憶デバイス１０６は、記憶コントローラ１０４とともに、サーバ内ストレージエリアネットワーク（「ＳＡＮ」）の一部であってもよく、記憶デバイス１０６および記憶コントローラ１０４が属するサーバ１０８から外れて位置する１つ以上のクライアント１１０、記憶コントローラ１０４、またはサーバ１０８と通信する。サーバ内ＳＡＮの例は、２００７年１２月６日に申請された「Ａｐｐａｒａｔｕｓ，  Ｓｙｓｔｅｍ，  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  ａｎ  Ｉｎ−Ｓｅｒｖｅｒ  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ」と題されるＤａｖｉｄ  Ｆｌｙｎｎらの米国特許出願第１１／９５２，１０６号に記載され、参照により本明細書に組み込まれる。当業者は、記憶システム１０２内の論理識別子を割り当ておよび管理することが有益である他の記憶デバイス１０６を認識するであろう。
【００５９】
システム１００は、サーバ１０８を含む。サーバ１０８は、記憶デバイス１０６へのアクセスを有するワークステーション、メインフレームコンピュータ、パーソナルコンピュータ、ラップトップコンピュータ、または他のコンピューティングデバイス等のコンピュータ内において具現化することができる。サーバ１０８は、一実施形態において、コンピュータ内のパーティションである。サーバ１０８は、物理的なエンクロージャを含んでもよい。記憶システム１０２は、例えば、サーバ１０８のマザーボードに差し込まれる周辺機器相互接続エクスプレス（ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ）（「ＰＣＩ  Ｅｘｐｒｅｓｓ」または「ＰＣＩ−ｅ」）カードとして、サーバ１０８の物理的なエンクロージャに位置してもよい。記憶システム１０２は、部分的にサーバ１０８の物理的なエンクロージャ内にあってもよい。例えば、記憶システムがサーバ１０８を起動するプロセッサ上で起動するドライバ１１８を有する場合、記憶コントローラおよび／または記憶デバイス１０６は、コンピュータに差し込まれるまたはケーブルを通して接続されるエンクロージャ内にあってもよい。当業者は、記憶システム１０２がサーバ１０８またはサーバ１０８と関連付けられるコンピュータの一部に接続され得る多数の方法を認識するだろう。
【００６０】
サーバ１０８は、描写される実施形態において、記憶インターフェース１１６を経由して記憶システム１０２に接続されるファイルサーバ１１４／ファイルシステムを含む。ファイルシステムは、一実施形態において、１つ以上のクライアント１１０によってアクセスされるファイルサーバ１１４の構成要素である。クライアント１１０および／またはファイルシステム／ファイルサーバ１１４は、記憶インターフェース１１６を介して記憶システム１０２にアクセスする。
【００６１】
典型的に、ファイルシステム／ファイルサーバ１１４は、記憶システム１０２のドライバ１１８に接続され、ドライバ１１８は、記憶デバイスインターフェース１２０を介して記憶コントローラ１０４および１つ以上の記憶デバイス１０６と連動する。記憶デバイスインターフェース１１６は、ＰＣＩ−ｅバス、シリアルＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ（「シリアルＡＴＡ」）バス、パラレルＡＴＡ等であってもよい。別の実施形態において、記憶デバイスインターフェース１１６は、小型コンピュータシステムインターフェース（「ＳＣＳＩ」）、ファイアワイヤ（ＦｉｒｅＷｉｒｅ）、ファイバーチャネル（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ユニバーサルシリアルバス（「ＵＳＢ」）、ＰＣＩｅアドバンススイッチイング（ＰＣＩｅ  Ａｄｖａｎｃｅｄ  Ｓｗｉｔｃｈｉｎｇ）（「ＰＣＩｅ−ＡＳ」）等のような外部バスであってもよい。ファイルサーバ１１４／ファイルシステムは、典型的に、記憶システム１０２にアクセスする１つ以上のクライアント１１０のためのファイルを管理する。一実施形態において、ドライバ１１８は存在せず、ファイルサーバ１１４／ファイルシステムは、記憶デバイスインターフェース１２０を経由して記憶コントローラ１０４と直接通信する。例えば、記憶コントローラ１０４は、ドライバ１１８がロードされている間の一時的に、またはより長い期間のどちらでも、ファイルサーバ１１４／ファイルシステムに直接接続され得るデバイスをエミュレートすることができる。
【００６２】
システム１００は、１つ以上のクライアント１１０を含む。一実施形態において、１つ以上のクライアント１１０は、１つ以上のコンピュータネットワーク１１２上でサーバ１０８およびファイルサーバ１１４と通信する。別の実施形態において、サーバ１０８は、１つ以上のクライアント１１０を含む。クライアント１１０は、サーバ１０８または他のコンピュータ上で起動するアプリケーションであってもよい。記憶システム１０２の観点から、ファイルサーバ１１４は、クライアント１１０であってもよく、以下「クライアント」１１０は、ファイルサーバ１１４を含み得る。コンピュータネットワーク１１２は、インターネット（Ｉｎｔｅｒｎｅｔ）、広域ネットワーク（「ＷＡＮ」）、メトロポリタンエリアネットワーク（「ＭＡＮ」）、ローカルエリアネットワーク（「ＬＡＮ」）、トークンリング、ワイヤレスネットワーク、ファイバーチャネル（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）ネットワーク、ＳＡＮ、ネットワーク接続ストレージ（「ＮＡＳ」）、ＥＳＣＯＮ等、またはネットワークの任意の組み合わせを含むことができる。コンピュータネットワーク１１２は、イーサネット（登録商標）（Ｅｔｈｅｒｎｅｔ）、トークンリング、ワイファイ（ＷｉＦｉ）、ワイマックス（ＷｉＭａｘ）等のＩＥＥＥ８０２系のネットワーク技術からのネットワークも含むことができ、ケーブリングおよび通信を容易にするための構成要素を含む。
【００６３】
クライアント１１０は、ホスト、サーバ、ＳＡＮの記憶コントローラ、ワークステーション、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、スーパーコンピュータ、コンピュータクラスター、およびネットワークスイッチ、ルータ、または機器、データベースもしくは記憶機器、データ取得もしくはデータ捕捉システム、診断システム、試験システム、ロボット、ポータブル電子デバイス、ワイヤレスデバイス、ファイルサーバ１１４等であってもよい。クライアント１１０は、コンピュータネットワーク１１２上でサーバ１０８と通信してコンピュータまたはサーバ上で起動することができる。クライアント１１０は、ファイルシステムが、ファイル、オブジェクト、論理ブロック、または記憶システム１０２に記憶される他のデータユニットを読み込み、削除、変更等を行うように指示することができる。当業者は、オブジェクトが、非常に広い定義を有することを認識するだろう。オブジェクトという用語が常に全てのデータユニットを含むわけではないが、本出願における「オブジェクト」は、広い意味で解釈されるものであり、ファイルまたは他のデータ構造を含むことができる。
【００６４】
ファイルサーバ１１４／ファイルシステムは、次いで、ファイルサーバ１１４／ファイルシステムがデータユニットと関連付けたデータユニットに対する論理名と論理識別子との間のマッピングを使用して、データユニットにアクセスする。典型的な実施形態において、ファイルサーバ１１４／ファイルシステムは、データユニットのデータを論理ブロック内に組織し、論理ブロックアドレスを各論理ブロックと関連付ける。論理ブロックアドレスは、ファイルサーバ１１４／ファイルシステムが論理ブロックを記憶システム１０２に記憶するよう意図する位置であってもよい。ファイルサーバ１１４／ファイルシステムは、次いで、ＳＣＳＩコマンド読み込み要求、書き込み要求等を介して記憶システム１０２を指示する。
【００６５】
本発明において、論理ブロックアドレス等の論理識別子の管理および割り当ては、以下により詳細に説明されるように、記憶システム１０２内で起こる。一実施形態において、ファイルサーバ１１４／ファイルシステムは、記憶システム１０２がランダムアクセスでない場合でさえも、記憶システム１０２内のストレージをランダムアクセスデバイスとして扱う。典型的なランダムアクセスデバイスにおいて、論理識別子は、ランダムアクセスデバイスの物理アドレスに対してほぼ１対１の応対を有する。
【００６６】
ランダムアクセスデバイスにおけるこの１対１のマッピング（不良ブロックマッピングのために予約済みのランダムアクセスデバイス上の少数の物理アドレスを除いて）はまた、論理識別子に関連付けられる記憶容量と物理アドレスに関連付けられる物理容量との間の１対１に近い関係とも相関する。例えば、論理識別子が論理ブロックアドレス（「ＬＢＡ」）である場合、ＬＢＡに関連付けられる各論理ブロックは固定サイズを有する。ランダムアクセスデバイス上の対応する物理ブロックは、典型的に論理ブロックと同一のサイズである。これは、典型的なファイルサーバ１１４／ファイルシステムが、ＬＢＡ等の論理識別子を管理することによってランダムアクセスデバイス上の物理容量を管理することを可能にする。ＬＢＡ対ＰＢＡのマッピングのこの連続性は、一般的にデータ記憶デバイス上に記憶されたデータをデフラグするために、ファイルシステムによって依存され利用される。同様に、いくつかのシステムは、ディスクドライブを「短ストロークする（ｓｈｏｒｔ  ｓｔｒｏｋｉｎｇ）」と呼ばれる技術の場合のように性能を改善するために、この連続性を特定の物理トラック上にデータを配置するために使用することができる。高度にに予想可能なＬＢＡ対ＰＢＡのマッピングは、アプリケーションによっては、論理アドレス空間の直接管理を介して物理アドレス空間内のデータの記憶を間接的に管理するために不可欠である。
【００６７】
しかしながら、記憶システム１０２は、ログ構造のファイルシステムであってもよいため、ＬＢＡのＰＢＡに対するマッピングを判定するための「固定の」関係またはアルゴリズムはなく、また別の実施形態においては、ランダムアクセスであってもよいが、１つ以上のクライアント１１０またはファイルサーバ１１４／ファイルシステムによってアクセスされてもよいため、各クライアント１１０またはファイルサーバ１１４／ファイルシステムに割り当てられる論理識別子は、典型的なシステムの論理対物理の識別子の１対１の関係よりも大幅に大きい記憶容量を示す。記憶システム１０２はまた、１つ以上のクライアント１１０が、それぞれ記憶システム１０２における記憶デバイス１０６の記憶容量よりも大幅に大きい割り当て論理アドレス範囲を有するように仮想プロビジョニングされてもよい。システム１００において、記憶システム１０２は、論理識別子と物理識別子との間に１対１の、または１対１に近い関係が存在しないように論理識別子を管理し、割り当てる。
【００６８】
システム１００は、典型的な記憶システムよりも効率的な記憶容量の管理ができるため、有利である。例えば、多数のクライアント１１０によってアクセス可能な典型的なランダムアクセスデバイスに対して、各クライアントがある程度の記憶空間を割り当てられる場合、記憶空間は、占有される記憶空間の実際の量が非常に少ない場合でさえも、典型的に割り当て内に存在し、結び付けられる。システム１００はまた、システム１００が記憶デバイス１０６に接続される標準の仮想プロビジョニングシステムの複雑性を減少させるため、有利である。標準の仮想プロビジョニングシステムは、データが連続的に記憶されるログ構造のファイルシステムまたはソリッドステートストレージ等の記憶デバイス１０６の論理対物理のマッピングに加えて、論理対論理のマッピングを有する仮想プロビジョニング層を有する。システム１００は、多重層のマッピングが除外され、仮想プロビジョニング（論理対物理のマッピング）が最も低いレベルにおいて行われるため、より効率的である。
【００６９】
図１Ｂは、本発明に従ってデータ記憶空間を割り当てるためのシステム１０１の別の実施形態を図示する略ブロック図である。図１Ｂに描写されるシステム１０１は、図１Ａに描写されるシステム１００の変形である。システム１０１は、記憶インターフェース１１６を介してドライバ１１８に接続される記憶システム１０２、記憶デバイスインターフェース１２０を介して各記憶コントローラ１０４に接続されるドライバ１１８、および図１Ａのシステム１００に関連して上記で説明されたものと実質的に同じ記憶デバイス１０６ａ〜ｎを含む。システム１０１はまた、コンピュータネットワーク１１２に接続される１つ以上のクライアント１１０を含み、それらはまた、図１Ａのシステム１００に関連して上記で説明されたものと実質的に同じである。
【００７０】
図１Ｂのシステム１０１において、クライアント１１０はそれぞれがファイルサーバ１１４／ファイルシステムを有し、記憶機器１２２を介して記憶システム１０２にアクセスする。ファイルサーバ１１４／ファイルシステムは、ＩＢＭのＧＰＦＳまたはラスタークラスタリングファイルシステム（Ｌｕｓｔｒｅ  Ｃｌｕｓｔｅｒｉｎｇ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）等の分散型ファイルサーバ／ファイルシステムであってもよい。記憶機器１２２は、ＳＡＮコントローラ、ＲＡＩＤコントローラ等であってもよく、各ファイルサーバ１１４／ファイルシステムは、記憶システム１０２の記憶デバイス１０６に独立して接続することができる。記憶機器１２２は、記憶システム１０２に対するクライアント１１０であってもよい。この場合、システム１０１は、一実施形態において、各ファイルサーバ１１４／ファイルシステムが記憶システム１０２の付属ストレージを、標準ＳＣＳＩプロトコルまたは標準ＳＣＳＩプロトコルの拡張を使用するＳＣＳＩデバイスとして扱うため、有利である。各クライアント１１０およびそのファイルサーバ１１４／ファイルシステムは、記憶システム１０２の実際の記憶空間が様々なクライアント１１０に割り当てられた記憶空間よりも少ない場合でさえも、記憶システム１０２によってクライアント１１０に割り当てられた記憶空間への完全なアクセスを有するかのように作動することができる。
【００７１】
記憶システム１０２は、ファイルサーバ１１４／ファイルシステムが記憶システム１０２に接続するために標準プロトコルを使用することができるようにしながらも、クライアント１１０のための論理識別子を効率的に管理し、割り当てることができる。別の実施形態において、記憶システム１０２は、クライアント１１０のための論理識別子を、仮想サーバ内またはＶＭｗａｒｅ等の仮想化動作システム上のゲスト内において管理し、割り当てることができる。別の実施形態において、以下により詳しく説明されるように、ファイルサーバ１１４／ファイルシステムは、割り当て管理を記憶システム１０２の負荷を取り除き、割り当て要求、割り当て問い合わせ等を用いて記憶デバイスドライバ１１８と通信し、その要求に対する応答を受け取るように設定される。
【００７２】
記憶デバイス１０６は、記憶機器１２２内または記憶機器１２２の外部にあってもよい。一実施形態において、１つ以上の記憶デバイス１０６は、記憶機器１２２内に位置し、１つ以上の記憶デバイス１０６は、記憶機器１２２の外部に位置する。記憶デバイス１０６は、記憶機器１２２と併置されてもよく、または記憶機器１２２から離れていてもよい。当業者は、他の記憶機器１２２および記憶機器１２２と記憶デバイス１０６との他の設定を認識するであろう。
【００７３】
一実施形態において、クライアント１１０の１つ以上は、記憶システム１０２に示されるドライバ１１８に加えて、ドライバ１１８（示されない）を含む。別の実施形態において、記憶システム１０２はドライバ１１８を含まないが、各クライアント１１０はドライバ１１８を含む。ドライバ１１８は、典型的に、コマンド、および記憶システム１０２とファイルサーバ１１４／ファイルシステムまたは記憶機器１２２との間の他の通信を解釈するように機能する。一実施形態において、記憶システム１０２は、ドライバ１１８がロードされるまで、標準記憶デバイスをエミュレートする。ドライバ１１８は、次いで、ドライバ１１８なしでは利用不可能である追加の特徴およびコマンドを可能にすることができる。
【００７４】
図１Ｃは、本発明に従って、データ記憶空間を割り当てるための、システム１０３のさらに別の実施形態を図示する略ブロック図である。システム１０３は、１つ以上のコンピュータネットワーク１１２を介してそれぞれがクライアント１１０に接続されるサーバ１０８ａ〜ｎ内にある記憶デバイス１０６ａ〜ｎを伴う２つ以上の記憶システム１０２ａ〜ｎを含む。システム１０３はまた、各サーバ１０８と通信し、クライアント１１０と通信することができるマスタ割り当てマネージャ１２４を含む。記憶デバイス１０６、記憶システム１０２、サーバ１０８、クライアント１１０、およびコンピュータネットワーク１１２は、図１Ａおよび１Ｂのシステム１００、１０１と関連して上で説明されたものと実質的に同様である。さらに、システム１０３は、記憶コントローラ１０４、記憶インターフェース１１６、ファイルサーバ１１４／ファイルシステムを含み、ドライバ１１８、ならびに上述の他の構成要素および特徴を含むことができる。図１Ｃのシステム１０３において描写される実施形態は、記憶システム１０２を伴うサーバ１０８の数は限定されず、１つ以上の記憶システム１０３を含むことができることを示すように意図している。
【００７５】
システム１０３は、一実施形態において、マスタ割り当てマネージャ１２４を含む。一実施形態において、マスタ割り当てマネージャ１２４は、高いレベルで記憶空間割り当てを管理する。例えば、マスタ割り当てマネージャ１２４は、記憶容量を各クライアント１１０に割り当てることができる。マスタ割り当てマネージャ１２４は、次いで、各クライアント１１０のための論理識別子を割り当て、管理するために、各記憶システム１０２ａ〜ｎを調整する。一実施形態において、マスタ割り当てマネージャ１２４は、記憶空間を高いレベルで管理し、記憶容量を割り当て、記憶容量上に限界を設置し、記憶システム１０２または記憶デバイス１０６等をクライアント１１０に割り付ける、一方で記憶システム１０２は、論理識別子を追跡および割り当てること、ならびに論理識別子を物理位置にマッピングすることによって、低いレベルで管理し、割り当てる。マスタ割り当てマネージャ１２４は、割り当て要求、物理容量要求、割り当て問い合わせ等を記憶システム１０２ａ〜ｎに送り、マスタ割り当てマネージャ１２４が論理空間を管理できるようにする応答を受け取る。当業者は、マスタ割り当てマネージャ１２４が、論理識別子を割り当ておよび管理する記憶システム１０２と統合される他の方法を認識するだろう。
【００７６】
一実施形態において、マスタ割り当てマネージャ１２４は、同様に論理的および物理的な割り当てを管理する仮想プロビジョニング層とは異なり、論理対論理の再マッピングを必要としない。マスタ割り当てマネージャ１２４は、仮想プロビジョニングシステムと共通の他の割り当て機能を実行することができるが、主要な（論理的かつ物理的な）割り当てを記憶システム１０２へ負荷を取り除く。
ソリッドステート記憶デバイス
【００７７】
図２は、本発明に従って、データ記憶空間を割り当てるための装置を含むことができるソリッドステート記憶デバイスコントローラ２０２の特定の実施形態２００を図示する略ブロック図である。ソリッドステート記憶デバイス２０６は、図３に関連する考察でより詳しく以下で説明される、書き込みデータパイプライン３０１および読み込みデータパイプライン３０３を含む。ソリッドステート記憶デバイスコントローラ２０２は、それぞれがソリッドステートストレージ２０７を制御するいくつかのソリッドステート記憶コントローラ０〜Ｎ  ２０４ａ〜ｎを含むことができる。描写される実施形態において、ソリッドステートコントローラ０  ２０４ａおよびソリッドステート記憶コントローラＮ  ２０４ｎの２つのソリッドステートコントローラが示され、それぞれがソリッドステートストレージ２０７ａ〜ｎを制御する。
【００７８】
描写される実施形態において、ソリッドステート記憶コントローラ０  ２０４ａは、接続ソリッドステートストレージ２０７ａがデータを記憶するようにデータチャネルを制御する。ソリッドステート記憶コントローラＮ  ２０４ｎは、記憶されたデータと関連付けられるインデックスメタデータチャネルを制御し、関連付けられるソリッドステートストレージ２０７ｎがインデックスメタデータを記憶する。代替の実施形態において、ソリッドステート記憶デバイスコントローラ２０２は、単一のソリッドステートストレージ２０７ａとともに単一のソリッドステートコントローラ２０４ａを含む。別の実施形態において、複数のソリッドステート記憶コントローラ２０４ａ〜ｎおよび関連付けられるソリッドステートストレージ２０７ａ〜ｎがある。一実施形態において、それらに関連付けられるソリッドステートストレージ２０７ａ〜２０７ｎ〜１に結合される１つ以上のソリッドステートコントローラ２０４ａ〜２０４ｎ〜１がデータを制御する一方で、それらに関連付けられるソリッドステートストレージ２０７ｎに結合される少なくとも１つのソリッドステート記憶コントローラ２０４ｎが、インデックスメタデータを制御する。
【００７９】
一実施形態において、少なくとも１つのソリッドステートコントローラ２０４がフィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）であり、コントローラ機能がＦＰＧＡ中へプログラムされる。特定の実施形態において、ＦＰＧＡはＸｉｌｉｎｘ（登録商標）ＦＰＧＡである。別の実施形態において、ソリッドステート記憶コントローラ２０４は、特定用途向け集積回路（「ＡＳＩＣ」）またはカスタム論理ソリューション等のソリッドステート記憶コントローラ２０４として特定的に指定された構成要素を含む。別の実施形態において、少なくとも１つのソリッドステート記憶コントローラ２０４は、組み合わせＦＰＧＡ、ＡＳＩＣ、およびカスタム論理構成要素で構成されている。
ソリッドステートストレージ
【００８０】
ソリッドステートストレージ２０６は、不揮発性ソリッドステート記憶素子２１６、２１８、２２０の配列であり、バンク２１４内に配置され、双方向の記憶入力／出力（「Ｉ／Ｏ」）バス２１０を介して平行してアクセスされる。記憶Ｉ／Ｏバス２１０は、一実施形態において、どの時点においても一方向通信を可能にする。例えば、データがソリッドステートストレージ２０７に書き込まれている際、データはソリッドステートストレージ２０７から読み込まれ得ない。別の実施形態において、データは両方向へ同時に流れることができる。しかしながら、双方向は、データバスに関連し本明細書に使用される場合、一度に一方向にのみ流れ込むデータを有することができるデータパスウェイを指すが、双方向データバス上において一方向に流れるデータが止まる際、データは双方向データバス上において反対方向に流れ込みことができる。データは、制御バス２１２内で制御ラインおよびアドレスラインが断定されるように、記憶Ｉ／Ｏバス２１０を渡ってビットレベル上に書き込まれ、読み込まれる。
【００８１】
ソリッドステート記憶素子（例えばＳＳＳ０．０  ２１６ａ）は、回路基板上におけるチップ（１つ以上のダイのパッケージ）またはダイとして典型的に設定される。図示されるように、ソリッドステート記憶素子（例えば２１６ａ）は、たとえこれら複数の素子が、チップパッケージ、チップパッケージの積み重ね、または他のパッケージ素子内においてともにパッケージされても、他のソリッドステート記憶素子（例えば２１８ａ）から独立してまたは半独立して作動する。図示されるように、ソリッドステート記憶素子２１６、２１８、２２０の列は、バンク２１４として指定される。図示されるように、ソリッドステートストレージ２０７内のｎ×ｍ個のソリッドステート記憶素子２１６、２１８、２２０の配列内のバンク毎に、「ｎ」個のバンク２１４ａ〜ｎおよび「ｍ」個のソリッドステート記憶素子２１６ａ〜ｍ、２１８ａ〜ｍ、２２０ａ〜ｍがあってもよい。一実施形態において、ソリッドステートストレージ２０７ａは、８個のバンク２１４とともにバンク２１４毎に２０個のソリッドステート記憶素子２１６、２１８、２２０を含み、ソリッドステートストレージ２０７ｎは、１個のバンク２１４とともにバンク２１４毎に２個のソリッドステート記憶素子２１６、２１８を含む。一実施形態において、各ソリッドステート記憶素子２１６、２１８、２２０は、シングルレベルセル（「ＳＬＣ」）デバイスを具備する。別の実施形態において、各ソリッドステート記憶素子２１６、２１８、２２０は、マルチレベルセル（「ＭＬＣ」）デバイスを具備する。
【００８２】
一実施形態において、共通の記憶Ｉ／Ｏバス２１０ａ行（例えば、２１６ｂ、２１８ｂ、２２０ｂ）を共有する複数のバンクのためのソリッドステート記憶素子は、ともにまとめられる。別の実施形態において、ソリッドステート記憶素子２１６、２１８、２２０は、垂直に積み重ねられた１つ以上のチップとともに、チップ毎に１つ以上のダイを有することができ、各ダイは、独立的にアクセスされてもよい。別の実施形態において、ソリッドステート記憶素子（例えば、ＳＳＳ０．０  ２１６ａ）は、ダイ毎に１つ以上の仮想ダイおよびチップ毎に１つ以上のダイを有することができ、垂直に積み重ねられた１つ以上のチップおよび各仮想ダイは独立的にアクセスされてもよい。別の実施形態において、ソリッドステート記憶素子ＳＳＳ０．０  ２１６ａは、垂直に積み重ねられた１つ以上のダイのうちいくつかまたはその全てとともに、ダイ毎に１つ以上の仮想ダイおよびチップ毎に１つ以上のダイを有することができ、各仮想ダイは独立的にアクセスされてもよい。
【００８３】
一実施形態において、２個のダイは、各個別バンク２１４ａ〜ｎ内において、８個の記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ０．８）２１６ａ−２２０ａを形成するためにグループ毎に４個の積み重ねで垂直に積み重ねられる。別の実施形態において、２０個の記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ２０．０）２１６は、８個の仮想バンク各自が２０個の記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ２０．８）２１６、２１８、２２０を有するように、仮想バンク２１４ａ（または論理的なバンク）を形成する。データは、記憶素子（ＳＳＳ０．０〜ＳＳＳ０．８）２１６ａ、２１８ａ、２２０ａの特定のグループにおける全ての記憶素子に対する記憶Ｉ／Ｏバス２１０を越えてソリッドステートストレージ２０７へ送られる。記憶制御バス２１２ａは、全てのバンク２１４に接続される記憶Ｉ／Ｏバス２１０を越えて受け取られるデータが、ただ選択されたバンク２１４ａへ書き込まれるように、特定のバンク（例えば、バンク０  ２１４ａ）を選択するために使用される。
【００８４】
好ましい実施形態において、記憶Ｉ／Ｏバス２１０は、１つ以上の独立Ｉ／Ｏバス（２１０ａ．ａ〜ｍ、２１０ｎ．ａ〜ｍを含む「ＩＩＯＢａ〜ｍ」）を具備し、各行内でソリッドステート記憶素子が、全てのバンク２１４が同時にアクセスされるように、各ソリッドステート記憶素子２１６、２１８、２２０に平行してアクセスする独立Ｉ／Ｏバスのうち１つを共有する。例えば、記憶Ｉ／Ｏバス２１０の１個のチャネルは、各バンク２１４ａ〜ｎの第１のソリッドステート記憶素子２１６ａ、２１８ａ、２２０ａに同時にアクセスすることができる。記憶Ｉ／Ｏバス２１０の第２のチャネルは、各バンク２１４ａ〜ｎの第２のソリッドステート記憶素子２１６ｂ、２１８ｂ、２２０ｂに同時にアクセスすることがきる。ソリッドステート記憶素子２１６、２１８、２２０の各行は、同時にアクセスされる。
【００８５】
一実施形態において、ソリッドステート記憶素子２１６、２１８、２２０がマルチレベルである（物理的に積み重ねられる）場合、ソリッドステート記憶素子２１６、２１８、２２０の全ての物理レベルは、同時にアクセスされる。本明細書に使用される「同時に」は、スイッチングノイズを避けるために、デバイスがわずかに異なる間隔においてアクセスされるほぼ同時のアクセスも含む。同時には、コマンドおよび／またはデータが、次々に個々に送られる、連続的なまたは順次的なアクセスと区別されるように本コンテキスト内において使用される。
【００８６】
典型的に、バンク２１４ａ〜ｎは、記憶制御バス２１２を使用して独立的に選択される。一実施形態において、バンク２１４は、チップイネーブルまたはチップ選択を使用して選択される。チップ選択とチップイネーブルとの両方が利用可能である場合、記憶制御バス２１２は、マルチレベルソリッドステート記憶素子２１６、２１８、２２０のうちの１つのレベルを選択し得る。他の実施形態において、他のコマンドが、マルチレベルソリッドステート記憶素子２１６、２１８、２２０のうちの１つのレベルを個々に選択するために、記憶制御バス２１２によって使用される。ソリッドステート記憶素子２１６、２１８、２２０は、記憶Ｉ／Ｏバス２１０および記憶制御バス２１２上に伝送される、制御情報およびアドレス情報の組み合わせを介して選択されることもできる。
【００８７】
一実施形態において、各ソリッドステート記憶素子２１６、２１８、２２０は消去ブロックへ分割され、各消去ブロックはページへ分割される。典型的なページは２０００バイト（「２ｋＢ」）である。一例において、ソリッドステート記憶素子（例えば、ＳＳＳ０．０）は、２個のレジスタを含み、２個のレジスタソリッドステート記憶素子２１６、２１８、２２０が４ｋＢの容量を有するように、２ページをプログラムすることができる。２０個のソリッドステート記憶素子２１６、２１８、２２０のうちのバンク２１４は、次いで記憶Ｉ／Ｏバス２１０のチャネルから出て行く、同一のアドレスとともにアクセスされるページの８０ｋＢの容量を有することになる。
【００８８】
８０ｋＢのソリッドステート記憶素子２１６、２１８、２２０のバンク２１４内におけるページのこのグループは、仮想または論理ページと称することができる。同様に、バンク２１４ａの各記憶素子２１６ａ〜ｍの消去ブロックは仮想または論理消去ブロックを形成するためにグループ化され得る。好ましい実施形態において、消去コマンドがソリッドステート記憶素子２１６、２１８、２２０内で受け取られる場合、ソリッドステート記憶素子２１６、２１８、２２０内におけるページの消去ブロックが消去される。ソリッドステート記憶素子２１６、２１８、２２０内の消去ブロック、ページ、計画、または他の論理および物理区分のサイズおよび数は、長期にわたる技術の進歩を変更するように予想されるが、新しい構成と一致する多数の実施形態が可能であり、本明細書の一般的な説明と一致することが予想される。
【００８９】
典型的に、特定のバンクにおける特定の素子の特定の消去ブロックに特有である、特定のページ内の位置にパケットが書き込まれることを目的としている、ソリッドステート記憶素子２１６、２１８、２２０内の特定の位置にパケットが書き込まれる場合、物理アドレスは記憶Ｉ／Ｏバス２１０上に送られ、パケットが続く。物理アドレスは、ソリッドステート記憶素子２１６、２１８、２２０がページ内でパケットを指定された位置へ向けるのに十分な情報を含む。記憶素子の行内における全ての記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ０．Ｎ２１６ａ、２１８ａ、２２０ａ）が、記憶Ｉ／Ｏバス２１０ａ．ａ内で適切なバスによって同時にアクセスされるので、適正なページに達するためおよび記憶素子（ＳＳＳ０．０〜ＳＳＳ０．Ｎ２１６ａ、２１８ａ、２２０ａ）の行内に同様にアドレスされたページへデータパケットを書き込むことを避けるために、データパケットが書き込まれる訂正ページとともにソリッドステート記憶素子ＳＳＳ０．０  ２１６ａを含むバンク２１４ａが、記憶制御バス２１２によって同時に選択される。
【００９０】
同様に、記憶Ｉ／Ｏバス２１２上を巡回する読み込みコマンドは、単一バンク２１４ａを選択するため、記憶制御バス２１２上の同時コマンド、およびこのバンク２１４ａ内で適切なページを求める。好ましい実施形態において、読み込みコマンドがページ全体を読み込み、バンク２１４内に平行して複数のソリッドステート記憶素子２１６、２１８、２２０があるため、論理ページ全体が、読み込みコマンドとともに読み込まれる。しかしながら、バンクインターリーブに関して以下に説明されるように、読み込みコマンドは、サブコマンドに分けられてもよい。論理ページは、書き込み動作にアクセスされてもよい。
【００９１】
消去ブロックの消去コマンドが、特定の消去ブロックを消去するための特定の消去ブロックアドレスとともに、記憶Ｉ／Ｏバス２１０を渡って消去ブロックを消去するために送られてもよい。典型的に、消去ブロックの消去コマンドは、特定の消去ブロックを消去するための特定の各消去ブロックアドレスとともに、論理消去ブロックを消去するための記憶Ｉ／Ｏバス２１０の平行パスを渡って送られてもよい。同時に、特定のバンク（例えば、バンク０  ２１４ａ）は、全てのバンク（バンク１〜Ｎ２１４ｂ〜ｎ）内に同様にアドレスされた消去ブロックの消去を回避するために記憶制御バス２１２を渡って選択される。他のコマンドが、記憶Ｉ／Ｏバス２１０および記憶制御バス２１２の組み合わせを使用して特定の位置に送られてもよい。当業者は、双方向の記憶Ｉ／Ｏバス２１０および記憶制御バス２１２を使用して特定の記憶位置を選択するための他の手段を認識するであろう。
【００９２】
一実施形態において、データパケットは、ソリッドステートストレージ２０７に連続的に書き込まれる。例えば、データパケットは記憶素子２１６のバンク２１４ａの記憶書き込みバッファにストリームされ、バッファが満杯の際、データパケットは定められた論理ページにプログラムされる。データパケットは、次いで、記憶書き込みバッファを再び満たし、満杯の際、パケットは空きが存在する場合には同一の論理ページへ書き込まれ、または次の論理ページへ書き込まれる。次の論理ページは、同一のバンク２１４ａまたは別のバンク（例えば、２１４ｂ）内にある。このプロセスは、次々に論理ページについて、論理消去ブロックが満杯になるまで継続する。別の実施形態において、ストリーミングは、プロセスが継続して、次々の論理消去ブロックについて論理消去ブロックの境界にわたり継続することができる。
【００９３】
一実施形態において、論理ページ内の各ソリッドステート記憶素子（例えば、２１６ａ〜ｎ）は、１つ以上の付加ポイントを含む。付加ポイントは、書き込みバッファからデータが次に書き込まれる場所に位置することができる。付加ポイントにおいてデータが書き込まれると、付加ポイントはそのデータの末端に移動する。このプロセスは、典型的に、論理消去ブロックが満杯になるまで継続する。付加ポイントは、次いで、異なる論理消去ブロックに移動される。論理消去ブロックへ書き込むことのシーケンスは、論理アドレスと物理アドレスとの間のマッピングを含むインデックスが破損されるまたは失われる場合、記憶するデータのシーケンスが再生され、インデックスを再構築することができるように維持される。
【００９４】
この型の連続的なストレージは、ログ構造配列と称し得、連続的なストレージのこの型を伴う記憶システム１０２は、ログ構造システムの型であり得る。この連続的な記憶システムまたはログ構造ファイルシステム内において、読み込み変更書き込み動作においてデータが変更される場合、データが１つの位置から読み込まれ、変更され、そして次いで、データが読み込まれる位置の最初から書かれるのではなく、付加ポイントに書き込まれる。インデックスは、論理識別子に対応するデータが記憶される各位置に、データと関連付けられる論理識別子をマップする。無効データが必要ではない場合、そのデータはガーベジコレクション動作において消去され得、インデックスは、無効データがなくなったことを反映するように更新される。データのより古いバージョンが、各バージョンの追跡を保つためにインデックス内に追跡される場合もある。インデックスが破損された場合、シーケンスがインデックスを再建するために再生され、特定の論理識別子に対するデータが見出される毎に、そのインデックスが更新される。ひとたびシーケンス全体が再生されると、特定の論理識別子のデータの最新のバージョンが、典型的に論理識別子にマップされる。
【００９５】
一実施形態において、各ソリッドステート記憶素子２１６、２１８、２２０は１つより多くの付加ポイントを含む。例えば、ホットデータ、例えば新しいデータまたは頻繁に使用されるデータは、１つの論理消去ブロックにおける付加ポイントにおいて連続的に記憶され得、一方でコールドデータ、例えばまれに使用されるデータは、別の論理消去ブロックにおける異なる付加ポイントにおいて記憶され得る。様々な実施形態において、ソリッドステート記憶素子２１６、２１８、２２０は、２より多くの付加ポイントを有することができる。
【００９６】
読み込み、変更、書き込み動作において、データユニットと関連付けられるデータパケットが、読み込み動作においてみつけられ、読み込まれる。変更された変更データユニットのデータセグメントは、それらが読み込まれた位置へは書き込まれない。その代わりに、変更されたデータセグメントは、再びデータパケットに変換され、次いで現在書き込まれている論理ページにおける次に利用可能な位置へ書き込まれる。それぞれのデータパケットに対するインデックスエントリは、変更されたデータセグメントを含むパケットを指すように変更される。変更されていない同一のデータユニットと関連付けられるデータパケットに対するインデックス内のエントリ（単数または複数）は、変更されていないデータパケットの元の位置へのポインタを含むであろう。したがって、元のデータユニットが維持される場合、例えば、データユニットの前のバージョンを維持するために、元のデータユニットは、インデックスに、もともと書き込まれた全てのデータパケットに対するポインタを有するだろう。新しいデータユニットは、インデックスに、元のデータパケットのいくつかに対するポインタ、および現在書き込まれている論理ページ内の変更データパケットに対するポインタを有するだろう。
【００９７】
コピー動作において、インデックスは、ソリッドステートストレージ２０７内に記憶されたいくつかのパケットにマップされている元のデータユニットに対するエントリを含む。コピーがなされた際、一実施形態において新しいデータユニットが作られ、インデックス内に、新しいデータユニットを元のパケットにマップする新しいエントリが作られる。新しいデータユニットは、インデックス内に、その位置が新しいエントリにマップされて、ソリッドステートストレージ２０７にもまた書き込まれる。新しいデータユニットパケットは、コピーに伝わっていない変更が元のデータユニットでなされたか、インデックスが失われたか破損された場合のため、参照される元のデータユニット内のパケットを特定するように使用することができる。
【００９８】
連続的な記憶に対し典型的に、データが書き込まれた物理アドレスは、データが記憶デバイス１０６上に記憶される以前には知られていないが、データを記憶する際に決定される。典型的には、データ記憶デバイス内で利用可能な物理記憶容量は、ＬＩＤに対応するデータがデータ記憶デバイス上に記憶されるまで、または少なくともデータが記憶される付加ポイントの位置が決定されるまでＬＩＤにマップされない。
【００９９】
有益にも、連続的にパケットを書き込むことは、ソリッドステートストレージ２０７のより均一な使用を促進し、ソリッド記憶デバイスコントローラ２０２が記憶ホットスポットを監視し、およびソリッドステートストレージ２０７内の様々な論理ページの使用を一様にすることを可能にする。連続的にパケットを書き込むことは、強力かつ効率的なゴミ集めシステムもまた促進し、それについては以下に詳細に説明する。当業者は、データパケットの連続的な記憶の他の利益を認識するであろう。
ソリッドステート記憶デバイスコントローラ
【０１００】
様々な実施形態において、ソリッドステート記憶デバイスコントローラ２０２は、データバス２０５、ローカルバス２０９、バッファコントローラ２０８、バッファ０〜Ｎ  ２２２ａ〜ｎ、マスタコントローラ２２４、ダイレクトメモリアクセス（「ＤＭＡ」）コントローラ２２６、メモリコントローラ２２８、ダイナミックメモリ配列２３０、スタティックランダムメモリ配列２３２、管理コントローラ２３４、管理バス２３６、システムバス２４０へのブリッジ２３８、雑論理２４２もまた含み、それらを以下説明する。他の実施形態において、システムバス２４０は、１つ以上のネットワークインターフェースカード（「ＮＩＣ」）２４４（その内のいくつかは遠隔のＤＭＡ（「ＲＤＭＡ」）コントローラ２４６を含む場合がある）、１つ以上の中央処理装置（「ＣＰＵ」）２４８、１つ以上の外部のメモリコントローラ２５０および関連付けられる外部メモリアレイ２５２、１つ以上の記憶コントローラ２５４、ピアコントローラ２５６、ならびにアプリケーション特定のプロセッサ２５８に接続され、それらは以下説明する。システムバス２４０に接続される構成要素２４４〜２５８は、サーバ１０８内に位置され得るか、または他のデバイスであり得る。
【０１０１】
典型的に、ソリッドステート記憶コントローラ（１つまたは複数）２０４は、記憶Ｉ／Ｏバス２１０を渡ってソリッドステートストレージ２０７にデータを通信する。ソリッドステートストレージがバンク２１４内に配置され、各バンク２１４が並列にアクセスされる複数の記憶素子２１６、２１８、２２０を含む典型的な実施形態において、記憶Ｉ／Ｏバス２１０はバスの配列であり、それぞれがバンク２１４に渡る記憶素子２１６、２１８、２２０の各行のためのものである。本明細書に使用される「記憶Ｉ／Ｏバス」という用語は、１個の記憶Ｉ／Ｏバス２１０またはデータ独立バスの配列を指すことができる（示されない）。好ましい実施形態において、記憶素子（例えば、２１６ａ、２１８ａ、２２０ａ）の行にアクセスする各記憶Ｉ／Ｏバス２１０は、記憶素子２１６ａ、２１８ａ、２２０ａの行内にアクセスされる記憶区分（例えば、消去ブロック）のための論理対物理マッピングを含むことができる。このマッピングは、第１の記憶区分が失敗する、部分的に失敗する、アクセス不可能である、またはいくつかの他の問題を有する場合、記憶区分の物理アドレスへマップされる論理アドレスが、異なる記憶区分へ再マップされることもまた可能にすることができる。
【０１０２】
データは、クライアント１１０またはファイルサーバ１１４／ファイルシステム等の要求デバイスから、システムバス２４０、ブリッジ２３８、ローカルバス２０９、バッファ（１つまたは複数）２２２を介して、最終的にデータバス２０５を渡って、ソリッドステート記憶コントローラ（１つまたは複数）２０４にもまた通信され得る。データバス２０５は、典型的にバッファコントローラ２０８で制御される１つ以上のバッファ２２２ａ〜ｎに接続される。バッファコントローラ２０８は、典型的にローカルバス２０９からバッファ２２２へ、データバス２０５を介し、パイプライン入力バッファ３０６および出力バッファ３３０へのデータの転送を制御する（図３を参照）。バッファコントローラ２０８は、典型的に、異なるクロックドメインに対応するため、データ衝突を回避するため等、要求デバイスから到着するデータが、どのように一時的にバッファ２２２内に記憶され、次いでデータバス２０５上に転送されるか、あるいは逆もまた同様に制御する。バッファコントローラ２０８は、典型的に、データフローを調整するためにマスタコントローラ２２４と共に作動する。データが到着する際、このデータはシステムバス２４０上に到着し、ブリッジ２３８を介してローカルバス２０９に転送される。
【０１０３】
典型的に、マスタコントローラ２２４およびバッファコントローラ２０８によって指示されるように、データはローカルバス２０９から１つ以上のデータバッファ２２２へ転送される。次いでこのデータは、バッファ（１つまたは複数）２２２から出て、ソリッドステートコントローラ２０４を介し、データバス２０５へ、そしてＮＡＮＤフラッシュまたは他の記憶媒体等のソリッドステートストレージ２０７上へ流れる。好ましい実施形態において、データ、およびデータとともに到着する関連付けられた帯域外のメタデータ（「データユニットメタデータ」）は、１つ以上のソリッドステート記憶コントローラ２０４ａ−２０４ｎ−１および関連付けられるソリッドステートストレージ２０７ａ〜２０７ｎ〜１を含む１つ以上のデータチャネルを使用して通信され、一方で少なくとも１つのチャネル（ソリッドステート記憶コントローラ２０４ｎ、ソリッドステートストレージ２０７ｎ）は、ソリッドステート記憶デバイス２０６に対し内部で生じたインデックス情報および他のメタデータ等の帯域内のメタデータ専用に用いる。
【０１０４】
ローカルバス２０９は、典型的に、ソリッドステート記憶デバイスコントローラ２０２の内部のデバイス間およびソリッドステート記憶デバイス２０６の内部のデバイス間、ならびにシステムバス２４０に接続されるデバイス２４４〜２５８で、データおよびコマンドの通信を可能にさせる双方向のバスまたはバスのセットである。ブリッジ２３８は、ローカルバス２０９とシステムバス２４０との間の通信を促進する。当業者は、リング型構造またはスイッチされるスター型構成、およびバス２４０、２０９、２０５、２１０およびブリッジ２３８の機能等の他の実施形態を認識するであろう。
【０１０５】
システムバス２４０は、典型的に、ソリッドステート記憶デバイス２０６がインストールされるまたは接続されるコンピュータ、サーバ１０８、または他のデバイスのバスである。一実施形態において、システムバス２４０は、ＰＣＩ−ｅバス、直列アドバンストテクノロジーアタッチメント（「シリアルＡＴＡ」）バス、パラレルＡＴＡ等であり得る。別の実施形態において、システムバス２４０は、小型コンピュータ用周辺機器インターフェース（「ＳＣＳＩ」）、ＦｉｒｅＷｉｒｅ（ファイアワイヤ）、ファイバーチャネル、ＵＳＢ、ＰＣＩｅ−ＡＳ等のような外部バスである。ソリッドステート記憶デバイス２０６は、デバイスの内部に適合するようにまたは外部に接続されるデバイスとしてパッケージされてもよい。
【０１０６】
ソリッドステート記憶デバイスコントローラ２０２は、ソリッドステート記憶デバイス２０６内で、より高レベルな機能を制御するマスタコントローラ２２４を含む。マスタコントローラ２２４は、様々な実施形態において、記憶要求および他の要求を解釈することによってデータフローを制御し、ＤＭＡ要求を調整するなどして、関連データの物理位置にデータと関連付けられる識別子をマップするためのインデックスの作成を指示する。本明細書に記載される多くの機能は、マスタコントローラ２２４によって、その全体が、または部分的に制御される。
【０１０７】
一実施形態において、マスタコントローラ２２４は、埋め込みコントローラ（１つまたは複数）を使用する。別の実施形態において、マスタコントローラ２２４は、ダイナミックメモリ配列２３０（ダイナミックランダムアクセスメモリ「ＤＲＡＭ」）、スタティックメモリ配列３２３（スタティックランダムアクセスメモリ「ＳＲＡＭ」）等のようなローカルメモリを使用する。一実施形態において、ローカルメモリは、マスタコントローラ２２４を使用して制御される。別の実施形態において、マスタコントローラは、メモリコントローラ２２８を経由してローカルメモリにアクセスする。別の実施形態において、マスタコントローラは、リナックス（登録商標）サーバを起動し、ワールドワイドウェブ、ハイパーテキストマークアップ言語（「ＨＴＭＬ」）等のような様々な共通のサーバインターフェースを支持する可能性がある。別の実施形態において、マスタコントローラ２２４はナノプロセッサを使用する。マスタコントローラ２２４は、プログラム可能なもしくは標準論理、または上記に掲載されたコントローラ型のあらゆる組み合わせを使用して構成されることができる。当業者は、マスタコントローラ２２４のための多くの実施形態を認識するであろう。
【０１０８】
記憶コントローラ１０４／ソリッドステート記憶デバイスコントローラ２０２が複数のデータ記憶デバイス１０６／ソリッドステートストレージ２０７ａ〜ｎを管理する一実施形態において、マスタコントローラ２２４は、ソリッドステート記憶コントローラ２０４ａ〜ｎ等の内部コントローラ間の作業負荷を分割する。例えば、マスタコントローラ２２４は、データの一部分が、各添付データ記憶デバイス１０６／ソリッドステートストレージ２０７上に記憶されるように、データ記憶デバイス（例えば、ソリッドステートストレージ２０７ａ〜ｎ）に書き込まれるようにデータを分割することができる。この特性は、より迅速なデータ記憶かつデータへのアクセスを可能にする増幅性能である。一実施形態において、マスタコントローラ２２４は、ＦＰＧＡを使用して実現される。ソリッドステート記憶デバイスコントローラ２０２は、ＦＰＧＡを使用して実現されることもできる。別の実施形態において、マスタコントローラ２２４内のファームウェアは、ネットワークインターフェースカード（「ＮＩＣ」）２４４に接続されるネットワークまたはシステムバス２４０に接続される他のデバイスを越えて管理バス２３６、システムバス２４０を介して更新されてもよい。
【０１０９】
一実施形態において、オブジェクト、ファイル、別のデータユニットを管理するマスタコントローラ２２４は、コンピュータあるいはサーバ１０８または記憶デバイス１０６／ソリッドステート記憶デバイス２０６に接続される他のデバイスが、記憶デバイス１０６／ソリッドステート記憶デバイス２０６をブロック記憶デバイスと見なし、記憶デバイス１０６／ソリッドステート記憶デバイス２０６内の特定の論理ブロックアドレスに対する論理ブロック中へ分割されたデータを送るようにブロック記憶をエミュレートする。マスタコントローラ２２４は、次いで、論理ブロックを分け、オブジェクト等のあらゆる他のデータユニットであるとして論理ブロックからデータを記憶する。マスタコントローラ２２４は、次いで、データが記憶される実際の物理位置に論理ブロックとともに送られる論理ブロックおよび論理ブロックアドレスをマップする。マッピングはインデックス内に記憶される。典型的に、論理ブロックエミュレーションに対し、ブロックデバイスアプリケーションプログラムインターフェース（「ＡＰＩ」）は、サーバ１０８、クライアント１１０、またはブロック記憶デバイスとして記憶デバイス１０６／ソリッドステート記憶デバイス２０６を使用したいと願う他のデバイス内のドライバ１１８内において提供される。
【０１１０】
別の実施形態において、マスタコントローラ２２４は、ジャストインタイムのデータのＲＤＭＡ転送およびコマンドセットを送達するためのＮＩＣコントローラ２４４および埋め込みＲＤＭＡコントローラ２４６で調整する。ＮＩＣコントローラ２４４は、カスタムドライバの使用を可能にするように非透過ポートの後ろに隠される可能性がある。また、クライアント１１０上のドライバは、標準積み重ねＡＰＩを使用する、ＮＩＣ２４４に関連して作動するＩ／Ｏメモリドライバを介したコンピュータネットワーク１１８へのアクセスを有することができる。
【０１１１】
一実施形態において、マスタコントローラ２２４は、ＲＡＩＤコントローラでもある。データ記憶デバイス／ソリッドステート記憶デバイス２０６が、１つ以上の他のデータ記憶デバイス１０６／ソリッドステート記憶デバイス２０６とネットワーク接続される場合、マスタコントローラ２２４は、単一層ＲＡＩＤ、多重層ＲＡＩＤ、進歩的なＲＡＩＤ等に対するＲＡＩＤコントローラである可能性がある。マスタコントローラ２２４は、いくつかのオブジェクトがＲＡＩＤ配列内に記憶されること、および他のオブジェクトがＲＡＩＤなしで記憶されることもまた可能にする。別の実施形態において、マスタコントローラ２２４は、分散型ＲＡＩＤコントローラ素子である可能性がある。別の実施形態において、マスタコントローラ２２４は、他に説明されるように、多数のＲＡＩＤ、分散型ＲＡＩＤ、および他の機能を含んでもよい。
【０１１２】
一実施形態において、マスタコントローラ２２４は、ルーティングを確立するため、帯域幅利用フェイルオーバー等を均衡するために単一または冗長ネットワークマネジャ（例えば、スイッチ）を調整する。別の実施形態において、マスタコントローラ２２４は、定格アプリケーションの特定の論理（ローカルバス２０９を経由して）と関連ドライバソフトウェアを調整する。別の実施形態において、マスタコントローラ２２４は、添付アプリケーションの特定のプロセッサ２５８または論理（外部のシステムバス２４０を経由して）を、関連ドライバソフトウェアと調整する。別の実施形態において、マスタコントローラ２２４は、遠隔アプリケーションの特定の論理（コンピュータネットワーク１１８を経由して）を、関連ドライバソフトウェアと調整する。別の実施形態において、マスタコントローラ２２４は、ローカルバス２０９または外部バス添付のハードディスクドライブ（「ＨＤＤ」）記憶コントローラを調整する。コントローラ２０２は、クライアントに不可視の記憶コントローラ２５４を製作することができる。
【０１１３】
一実施形態において、マスタコントローラ２２４は、記憶デバイス１０６／ソリッドステート記憶デバイス２０６が、ＳＣＳＩバス、インターネットＳＣＳＩ（「ｉＳＣＳＩ」）、ファイバーチャネル等を介して接続される記憶デバイスとして出現する可能性がある場合、１つ以上の記憶コントローラ２５４に通信する。一方で、記憶デバイス１０６／ソリッドステート記憶デバイス２０６は、オブジェクト、ファイル、および他のデータユニットを自律的に管理してもよく、オブジェクトファイルシステム、分散型オブジェクトファイルシステム、ファイルシステム等として出現することができる。マスタコントローラ２２４は、ピアコントローラ２５６および／またはアプリケーションの特定のプロセッサ２５８によってアクセスされる場合もある。
【０１１４】
別の実施形態において、マスタコントローラ２２４は、ＦＰＧＡコードおよび／またはコントローラソフトウェアを定期的に有効にする、起動している一方でＦＰＧＡコードを有効にする（リセット）および／または電源オンの間にコントローラソフトウェアを有効にする（リセット）、外部のリセット要求を支持する、ウオッチドッグタイムアウトに起因するリセット要求を支持する、および電圧、電流、電力、温度、ならびに他の環境の測定および閾値割り込みの設定を支持するために自律集積管理コントローラを調整する。別の実施形態において、マスタコントローラ２２４は、再利用のために消去ブロックを解放するためのガーベジコレクションを管理する。別の実施形態において、マスタコントローラ２２４は、ウェアレベリング、記憶素子をリフレッシュすること等を管理する。
【０１１５】
別の実施形態において、マスタコントローラ２２４は、データ記憶デバイス／ソリッドステート記憶デバイス２０６が、複数の仮想デバイス中へ分割されるようにすることを可能にし、媒体の暗号化に基づく分割を可能にする。さらに別の実施形態において、マスタコントローラ２２４は、進歩したマルチビットＥＣＣ訂正とともにソリッドステート記憶コントローラ２０４を支持する。当業者は、記憶コントローラ１０４内、またより具体的にはソリッドステート記憶デバイス２０６内のマスタコントローラ２２４における他の特性および機能を認識するであろう。
【０１１６】
一実施形態において、ソリッドステート記憶デバイスコントローラ２０２は、ダイナミックランダムメモリ配列２３０および／またはスタティックランダムメモリ配列２３２を制御するメモリコントローラ２２８を含む。上述のように、メモリコントローラ２２８は、独立またはマスタコントローラ２２４と一体化する場合がある。メモリコントローラ２２８は、ＤＲＡＭ（ダイナミックランダムメモリ配列２３０）およびＳＲＡＭ（スタティックランダムメモリ配列２３２）等のいくつかのタイプの揮発性メモリを典型的に制御する。他の例において、メモリコントローラ２２８は、電気的消却可能かつプログラム可能型読取専用メモリ（「ＥＥＰＲＯＭ」）等のような他のメモリタイプもまた制御する。他の実施形態において、メモリコントローラ２２８は、２つ以上のメモリタイプを制御し、メモリコントローラ２２８は１つより多くのコントローラを含むことができる。典型的に、メモリコントローラ２２８は、ＳＲＡＭ２３２と同じくらい実行可能であり、ＳＲＡＭ２３２を補うためにＤＲＡＭ２３０によって制御する。
【０１１７】
一実施形態において、インデックスは、メモリ２３０、２３２内に記憶され、次いで、ソリッドステートストレージ２０７ｎまたは他の不揮発性メモリのチャネルに定期的に負荷を取り除かれる。当業者は、メモリコントローラ２２８、ダイナミックメモリ配列２３０、ならびにスタティックメモリ配列２３２の他の用途および設定を認識するだろう。
【０１１８】
一実施形態において、ソリッドステート記憶デバイスコントローラ２０２は、記憶デバイス／ソリッドステート記憶デバイス２０６と、１つ以上の外部メモリコントローラ２５０、関連外部メモリ配列２５２、およびＣＰＵ２４８との間のＤＭＡ動作を制御するＤＭＡコントローラ２２６を含む。外部メモリコントローラ２５０および外部のメモリ配列２５２は、記憶デバイス／ソリッドステート記憶デバイス２０６の外部にあるので、外部に呼び出されることに留意したい。さらに、ＤＭＡコントローラ２２６は、ＮＩＣ２４４および関連ＲＤＭＡコントローラ２４６を介し、要求デバイスとともにＲＤＭＡ動作もまた制御することができる。ＤＭＡおよびＲＤＭＡは、以下により詳細に説明される。
【０１１９】
一実施形態において、ソリッドステート記憶デバイスコントローラ２０２は、管理バス２３６に接続される管理コントローラ２３４を含む。典型的に、管理コントローラ２３４は、記憶デバイス／ソリッドステート記憶デバイス２０６の環境メトリクスおよびステータスを管理する。管理コントローラ２３４は、管理バス２３６を越えてデバイス温度、ファン回転速度、電力供給設定等を監視することができる。管理コントローラは、ＦＰＧＡコードおよびコントローラソフトウェアの記憶のための消却可能かつプログラム可能型読取専用メモリ（「ＥＥＰＲＯＭ」）を読み込むことおよびプログラムすることを支持することができる。
【０１２０】
典型的に、管理バス２３６は、記憶デバイス／ソリッドステート記憶デバイス２０６内で様々な構成要素に接続される。管理コントローラ２３４は、ローカルバス２０９を越えて警告、割り込み等に通信してもよいか、またはシステムバス２４０もしくは他のバスへの個別通信を含むことができる。一実施形態において、管理バス２３６は、内部集積回路（「Ｉ２Ｃ」）バスである。当業者は、管理バス２３６によって記憶デバイス／ソリッドステート記憶デバイス２０６の構成要素に接続される管理コントローラ２３４の他の関連機能および使用を認識するであろう。
【０１２１】
一実施形態において、ソリッドステート記憶デバイスコントローラ２０２は、特定のアプリケーションに対しカスタマイズされる場合がある雑論理２４２を含む。典型的に、ソリッドステートデバイスコントローラ２０２またはマスタコントローラ２２４がＦＰＧＡまたは他の構造化可能なコントローラを使用して設定される場合、カスタム論理は、特定のアプリケーション、顧客要求、記憶要求等に基づいて含まれる場合がある。
データパイプライン
【０１２２】
図３は、本発明に従ってソリッドステート記憶デバイス２０６内に書き込みデータパイプライン３０１および読み込みデータパイプライン３０３とともにソリッドステート記憶コントローラ２０４の一実施形態３００を図示する略ブロック図である。実施形態３００は、図２のソリッドステート記憶デバイスコントローラ２０２に関連して記載されるそれらと実質的に同様のデータバス２０５、ローカルバス２０９、およびバッファ制御２０８を含む。書き込みデータパイプラインは、パケタイザー３０２およびエラー訂正コード（「ＥＣＣ」）発生器３０４を含む。他の実施形態において、書き込みデータパイプラインは、入力バッファ３０６、書き込み同期化バッファ３０８、書き込みプログラムモジュール３１０、圧縮モジュール３１２、暗号化モジュール３１４、ガーベジコレクタバイパス３１６（読み込みデータパイプライン内の一部分とともに）、媒体暗号化モジュール３１８、および書き込みバッファ３２０を含む。
【０１２３】
読み込みデータパイプライン３０３は、読み込み同期化バッファ３２８、ＥＣＣ訂正モジュール３２２、デパケタイザー３２４、アライメントモジュール３２６、および出力バッファ３３０を含む。他の実施形態において、読み込みデータパイプライン３０３は、媒体解読モジュール３３２、ガーベジコレクタバイパス３１６の一部分、解読モジュール３３４、解凍モジュール３３６、および読み込みプログラムモジュール３３８を含むことができる。ソリッドステート記憶コントローラ２０４は、制御および状態レジスタ３４０ならびに制御キュー３４２、バンクインターリーブコントローラ３４４、同期化バッファ３４６、記憶バスコントローラ３４８、ならびにマルチプレクサ（「ＭＵＸ」）３５０も含むことができる。ソリッドステートコントローラ２０４ならびに関連付けられる書き込みデータパイプライン３０１および読み込みデータパイプライン３０３の構成要素は、下に記載される。他の実施形態において、同期ソリッドステートストレージ２０７は使用される場合があり、同期化バッファ３０８、３２８は、除外される場合がある。
書き込みデータパイプライン
【０１２４】
書き込みデータパイプライン３０１は、直接的または間接的に別の書き込みデータパイプライン３０１段階を介して、ソリッドステートストレージへ書き込まれるデータ、またはメタデータセグメントを受け取るパケタイザー３０２を含み、ソリッドステートストレージ２０７のための１つ以上のパケットサイズを作成する。データまたはメタデータセグメントは、典型的にオブジェクト、ファイル、ｉノード、または他のデータユニットの一部であるが、オブジェクト、ファイル、ｉノード全体も含むことができる。別の実施形態において、データセグメントはデータの論理ブロックの一部であるが、論理ブロック全体も含むことができる。典型的に、データユニットまたはデータユニットの一部分は、サーバ１０８、クライアント１１０または他のコンピュータもしくはデバイスから受け取られ、ソリッドステート記憶デバイス２０６またはサーバ１０８へストリームされたデータセグメント内のソリッドステート記憶デバイス２０６へ送られる。データセグメントは、固定長または可変になる場合があり、データパーセル等の別の名称で知られる場合もあるが、本明細書に参照されるように、ファイル、オブジェクト、論理ブロック等のようなデータユニットの全てまたはその一部分を含む。
【０１２５】
各データユニットは、１つ以上のパケットとして記憶される。各データユニットは、１つ以上のコンテナパケットを有することができる。各パケットは、ヘッダを含む。ヘッダは、ヘッダタイプフィールドを含むことができる。タイプフィールドは、データ、オブジェクト属性等の属性、メタデータ、データセグメントデリミター（マルチパケット）、オブジェクトまたは他の構造、リンケージ等を含むことができる。ヘッダは、パケットに含まれるデータのバイト数等のパケットのサイズに関する情報も含むことができる。パケットの長さは、パケットタイプによって確立されてもよい。ヘッダは、論理識別子等のデータユニットにパケットの関係を確立する情報を含むことができる。１つの例は、データユニット内のデータセグメントの位置を特定するためのデータパケットヘッダ内のオフセットを使用する、論理ブロックアドレスおよびオフセットである場合がある。当業者は、パケタイザー３０２によってデータへ追加されるヘッダに含められてもよい他の情報、およびデータパケットへ追加される他の情報を認識するであろう。
【０１２６】
各パケットは、ヘッダおよび場合によりデータまたはメタデータセグメントからのデータを含む。各パケットのヘッダは、パケットが属するデータユニットにパケットを関連付けるように関連情報を含む。例えば、ヘッダは、データパケットが形成された場所からのデータセグメント、オブジェクト、論理ブロック、または他のデータユニットを示すオブジェクト識別子およびオフセットを含むことができる。ヘッダは、パケットを記憶するための記憶バスコントローラ３４８によって使用される論理識別子も含むことができる。ヘッダは、パケット内に含まれるバイト数等のパケットのサイズに関する情報も含むことができる。ヘッダは、データセグメントまたはデータユニットを再構成する際の、データセグメントがデータユニット内の他のパケットに関して属す場所を特定するシーケンス番号を含むこともできる。ヘッダは、ヘッダタイプフィールドを含むことができる。タイプフィールドは、データ、オブジェクト属性、メタデータ、データセグメントデリミター（マルチパケット）、オブジェクト構造、オブジェクトリンケージ等も含むことができる。当業者は、パケタイザー３０２によってデータまたはメタデータへ追加されるヘッダ内に含められてもよい他の情報、およびパケットへ追加される可能性がある他の情報を認識するだろう。
【０１２７】
書き込みデータパイプライン３０１は、パケタイザー３０２から受け取られる１つ以上のパケットのため１つ以上のエラー訂正コード（「ＥＣＣ」）を生じるＥＣＣ発生器３０４を含む。ＥＣＣ発生器３０４は、データパケットとともに記憶されるＥＣＣを生じさせるためにエラー訂正アルゴリズムを典型的に使用する。パケットともに記憶されるＥＣＣは、トランスミッションおよびストレージを介してデータに伝わるエラーを検出し、訂正するため典型的に使用される。一実施形態において、パケットは、長さＮの非コード化されるブロック（「ＥＣＣブロック」）としてＥＣＣ発生器３０４の中へストリームされる。ＥＣＣブロックは、いくつかのパケットを典型的に有するが、単一パケットであってもよい。パケットは、複数のＥＣＣブロックを補うことができる。ＥＣＣブロックは、論理ページより典型的に小さいが、他の実施形態においては、単一論理ページよりも大きくなる場合がある。ＥＣＣブロック、パケット、論理ページ、論理消去ブロック等は、整列されるまたは整列されない場合がある。
【０１２８】
長さＳのシンドロームは、ＥＣＣブロックに対して計算され、添付され、コード化される長さＮ＋ＳのＥＣＣチャンクとして出力される。好ましい実施形態において、ＥＣＣブロックのためのシンドロームＳは、１つ以上のＥＣＣブロックが論理ページで記憶されるような複数の物理ページを補う。ＮおよびＳの値は、特定の性能、能率、および頑健性メトリクスを得るため選択されるアルゴリズムの特質次第である。この好ましい実施形態において、ＥＣＣブロックとパケットとの間に固定の関係はなく、パケットは１つより大きいＥＣＣブロックを含むことができ、ＥＣＣブロックは１つより大きいパケットを含むことができ、第１のパケットはＥＣＣブロック内のあらゆる場所で終わることができ、第２のパケットは同一のＥＣＣブロック内の第１のパケットの終了後に開始することができる。この好ましい実施形態において、ＥＣＣアルゴリズムは、動的に変更されない。好ましい実施形態において、データパケットとともに記憶されるＥＣＣは、２ビットを超えるエラーを訂正するのに十分強固である。
【０１２９】
有益にも、単一ビット訂正よりも二重ビット訂正さえも許可する強固なＥＣＣアルゴリズムを使用することは、ソリッドステートストレージ２０７の寿命が延ばされることを可能にする。例えば、フラッシュメモリがソリッドステートストレージ２０７内の記憶媒体として使用される場合、フラッシュメモリは、消去サイクルによるエラーなしにおよそ１００，０００回書き込まれる場合がある。この使用限界は、強固なＥＣＣアルゴリズムを使用して延ばされることができる。ソリッドステート記憶デバイス２０６に内蔵のＥＣＣ発生器３０４および対応するＥＣＣ訂正モジュール３２２を有すことにより、ソリッドステート記憶デバイス２０６が、エラーを内部で訂正でき、単一ビット訂正等のあまり強固でないＥＣＣアルゴリズムを使用するよりも長い耐用年数を有す。記憶デバイス１０６内の磨耗を軽減する記憶素子に散在するＥＣＣチャンクを使用する一例は、２００９年５月１８日に申請されたＪｏｎａｔｈａｎ  Ｔｈａｔｃｈｅｒらの「Ａｐｐａｒａｔｕｓ，  Ｓｙｓｔｅｍ，  ａｎｄ  Ｍｅｔｈｏｄ  ｔｏ  Ｉｎｃｒｅａｓｅ  Ｄａｔａ  Ｉｎｔｅｇｒｉｔｙ  ｉｎ  ａ  Ｒｅｄｕｎｄａｎｔ  Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍ」と題される米国特許出願第１２／４６８，０４１号、および２００９年５月１８日に申請されたＪｏｎａｔｈａｎ  Ｔｈａｔｃｈｅｒらの「Ａｐｐａｒａｔｕｓ，  Ｓｙｓｔｅｍ，  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｒｅｃｏｎｆｉｇｕｒｉｎｇ  ａｎ  Ａｒｒａｙ  ｔｏ  Ｏｐｅｒａｔｅ  ｗｉｔｈ  Ｌｅｓｓ  Ｓｔｏｒａｇｅ  Ｅｌｅｍｅｎｔｓ」と題される米国特許出願第１２／４６８，０４０号に詳細が記載される。本出願は、効率的にエラーを検出し、次いで、記憶素子がエラーであることが判明した場合、配列を再設定するために、ＥＣＣ保護とパリティ情報の両方を使用して記載する。
【０１３０】
しかしながら、他の実施形態において、ＥＣＣ発生器３０４は、より少ない強固なアルゴリズム使用することができ、単一ビットまたは二重ビットエラーを訂正することができる。別の実施形態において、ソリッドステート記憶デバイス２０６は、さらに強固なＥＣＣアルゴリズムなしに、十分な信頼性のないストレージの容量を増やすため、マルチレベルセル（「ＭＬＣ」）フラッシュ等の低信頼のストレージを含んでもよい。
【０１３１】
一実施形態において、書き込みデータパイプライン３０１は、ソリッドステートストレージ２０７へ書き込まれるデータセグメントを受け取る入力バッファ３０６を含み、パケタイザー３０２（またはさらに複雑な書き込みデータパイプライン３０１の他の段階）等の書き込みデータパイプライン３０１の次の段階が、次のデータセグメントを処理する準備ができるまで受け取りデータセグメントを記憶する。入力バッファ３０６は、適切な大きさにされるデータバッファを使用し、書き込みデータパイプライン３０１によってデータセグメントが受け取られ処理される速度の間の相違を典型的に考慮に入れる。入力バッファ３０６は、データバス２０５の動作の能率を改善するために、データバス２０５が、書き込みデータパイプライン３０１によって持続することができるより速い速度で書き込みデータパイプライン３０１へデータを転送することも可能にする。書き込みデータパイプライン３０１が典型的に入力バッファ３０６を含まない場合、バッファリング機能は、ソリッドステート記憶デバイス２０６におけるような他の場所であるが、ネットワークインターフェースカード（「ＮＩＣ」）内等のサーバ１０８内の書き込みデータパイプライン３０１の外側、または例えば、リモートダイレクトメモリアクセス（「ＲＤＭＡ」）を使用する際、別のデバイスで行われる。
【０１３２】
データは、１つ以上のクライアント１１０またはファイルサーバ１１４／ファイルシステムから入力バッファ３０６の中へストリームすることができる。データは典型的に、クライアント１１０および／またはファイルサーバ１１４／ファイルシステムからの到着順で入力バッファ３０６の中へ入力される。データは次いで、クライアント１１０またはファイルサーバ１１４／ファイルシステムによって分離されるよりはむしろ連続的に到着順で記憶されてもよい。連続的な記憶デバイスにおいて、インデックスおよびメタデータをデータの情報源を追跡するため使用することができるので、様々な情報源からのデータは、散在させることができる。
【０１３３】
別の実施形態において、書き込みデータパイプライン３０１は、ソリッドステートストレージ２０７へのパケットの書き込みに先立ってＥＣＣ発生器３０４から受け取るパケットをバッファリングする書き込み同期化バッファ３０８も含む。書き込み同期化バッファ３０８は、ローカルクロックドメインとソリッドステート記憶クロックドメインの間の境界に位置し、クロックドメインの差異を説明するためバッファリングを提供する。他の実施形態において、同期ソリッドステートストレージ２０７は使用され、同期化バッファ３０８、３２８は除外される場合がある。
【０１３４】
一実施形態において、書き込みデータパイプライン３０１は、直接的または間接的にパケタイザー３０２から１つ以上のパケット受け取る媒体暗号化モジュール３１８も含み、ＥＣＣ発生器３０４へパケットを送ることに先立って、１つ以上のパケットをソリッドステート記憶デバイス２０６に専用の暗号鍵を使用して暗号化する。パケット全体は典型的にヘッダを含み暗号化される。別の実施形態において、ヘッダは暗号化されない。本明細書において、暗号鍵は、ソリッドステートストレージ２０７を組み込む実施形態から対外的に管理される実施形態が暗号化保護を必要とする機密暗号鍵を意味するよう理解される。
【０１３５】
媒体暗号化モジュール３１８および対応する媒体解読モジュール３３２は、ソリッドステートストレージ２０７で記憶されるデータに対するセキュリティのレベルを提供する。例えば、媒体暗号化モジュール３１８でデータが暗号化される場合、ソリッドステートストレージ２０７が異なるソリッドステート記憶コントローラ２０４、ソリッドステート記憶デバイス２０６、またはサーバ１０８へ接続される際、ソリッドステートストレージ２０７のコンテンツは典型的に、かなりの努力がなければ、ソリッドステートストレージ２０７へのデータの書き込みの間使用される同一の暗号鍵の使用なしには読み込まれることができない。
【０１３６】
典型的な実施形態において、ソリッドステート記憶デバイス２０６は、不揮発性ストレージで暗号鍵を記憶せず、暗号鍵への外部アクセスを許可しない。暗号鍵は、初期化の間ソリッドステート記憶コントローラ２０４へ提供される。ソリッドステート記憶デバイス２０６は、暗号鍵と併せて使用される非機密暗号ノンスを使用し記憶することができる。異なるノンスは、全てのパケットとともに記憶されてもよい。データセグメントは、暗号化アルゴリズムによる保護を改善する目的のため固有ノンスとともに複数のパケット間で分割される場合がある。
【０１３７】
暗号鍵は、ソリッドステート記憶コントローラ２０４によって使用される暗号鍵を管理するクライアント１１０、サーバ１０８、鍵マネージャ、または他のデバイスから受け取ることができる。別の実施形態において、ソリッドステートストレージ２０７は、２つ以上のパーティションを有してもよく、ソリッドステート記憶コントローラ２０４は、それぞれソリッドステートストレージ２０７内の単一パーティション上で作動する、２つ以上のソリッドステート記憶コントローラ２０４のように機能する。この実施形態において、固有の媒体暗号鍵は各パーティションとともに使用することができる。
【０１３８】
別の実施形態において、書き込みデータパイプライン３０１は、パケタイザー３０２へのデータセグメントが送ることに先立って、直接的または間接的に、入力バッファ３０６から受け取られるデータまたはメタデータセグメントを暗号化する暗号化モジュール３１４も含み、データセグメントは、データセグメントと併せて受け取られる暗号鍵を使用して暗号化される。暗号化モジュール３１４は、以下に記載されるソリッドステート記憶デバイス２０６内に記憶される全てのデータに共通しない場合もあるが、データユニット基盤で変化し、受け取るデータセグメントと併せて受け取られるデータを暗号化する暗号化モジュール３１８によって使用される暗号鍵内の媒体暗号化モジュール３１８とは異なる。
【０１３９】
例えば、暗号化モジュール３１８によって暗号化されるデータセグメントの暗号鍵は、データセグメントとともに受け取られる場合があり、またはデータセグメントが属するデータユニットを書き込むためコマンドの一部として受け取られる場合がある。ソリッドステート記憶デバイス２０６は、暗号鍵と併せて使用される各データパケット内の非機密暗号ノンスを使用し記憶することができる。異なるノンスは、全てのパケットとともに記憶されてもよい。データセグメントは、暗号化アルゴリズムによる保護の改善の目的の固有ノンスとともに複数のパケット間で分割される場合がある。一実施形態において、媒体暗号化モジュール３１８によって使用されるノンスは、暗号化モジュール３１４によって使用されたノンスと同一である。
【０１４０】
暗号鍵は、クライアント１１０、サーバ１０８、鍵マネージャ、またはデータセグメントを暗号化するために使用される暗号鍵を保持する他のデバイスから受け取ることができる。一実施形態において、暗号鍵は、ソリッドステート記憶デバイス２０６、サーバ１０８、クライアント１１０、または安全に転送し個人のおよび公共の鍵を保護する業界基準方法を実行する能力を有する他の外部エージェントのうちの１つからソリッドステート記憶コントローラ２０４へ転送される。
【０１４１】
一実施形態において、暗号化モジュール３１８は、第１のパケットをパケットと併せて受け取られる第１の暗号鍵で暗号化し、第２のパケットを第２のパケットと併せて受け取られる第２の暗号鍵で暗号化する。別の実施形態において、暗号化モジュール３１８は、第１のパケットをパケットと併せて受け取られる第１の暗号鍵で暗号化し、暗号化せずに次の段階上へ第２のデータパケットを渡す。有益にも、ソリッドステート記憶デバイス２０６の書き込みデータパイプライン３０１内に含まれる暗号化モジュール３１８は、単一ファイルサーバ１１４／ファイルシステム、または対応するデータユニットあるいはデータセグメントを記憶するため使用される異なる暗号鍵の追跡を保つ他の外部システムなしに、データユニット毎のデータユニットまたはセグメント毎のセグメントデータ暗号化を可能にする。各要求デバイス１５５または関連する鍵マネージャは、要求デバイス１５５によって送られるデータユニットまたはデータセグメントのみを暗号化するため使用される暗号鍵を独立して管理する。
【０１４２】
別の実施形態において、書き込みデータパイプライン３０１は、パケタイザー３０２へデータを送ることに先立って、メタデータセグメントのデータを圧縮する圧縮モジュール３１２を含む。圧縮モジュール３１２は典型的に、セグメントの記憶サイズを縮小するため、当業者に既知の圧縮ルーティンを使用してデータまたはメタデータセグメントを圧縮する。例えば、データセグメントが、一連の５１２ゼロを含む場合、圧縮モジュール３１２は、コードが５１２ゼロに取り込まれた空きよりさらに小型である場合、５１２ゼロをコードまたは５１２ゼロを示すトークンと置き換えることができる。
【０１４３】
一実施形態において、圧縮モジュール３１２は、第１のセグメントを第１の圧縮ルーティンで圧縮し、圧縮なしに第２のセグメントに沿って渡す。別の実施形態において、圧縮モジュール３１２は、第１のセグメントを第１の圧縮ルーティンで圧縮し、第２のセグメントを第２の圧縮ルーティンで圧縮する。ソリッドステート記憶デバイス２０６内でこの柔軟性を有することは、クライアント１１０またはソリッドステート記憶デバイス２０６へデータを書き込む他のデバイスが、圧縮ルーティンをそれぞれ特定するために、あるいは１つが圧縮を特定しない一方で、他が圧縮ルーティンを特定することができるために有益である。圧縮ルーティンの選択は、データユニットタイプ毎またはデータユニットクラス基準のデフォルト設定に従っても選択することができる。例えば、特定のデータユニットの第１のデータユニットは、デフォルト圧縮ルーティン設定を無効にすることができる場合があり、同一のデータユニットクラスおよびデータユニットタイプの第２のデータユニットは、デフォルト圧縮ルーティンを使用する場合があり、同一のデータユニットクラスおよびデータユニットタイプの第３のデータユニットは、圧縮を使用しない場合がある。
【０１４４】
一実施形態において、書き込みデータパイプライン３０１は、ガーベジコレクションシステム内のデータバイパスの一部として、読み込みデータパイプライン３０３からデータセグメントを受け取るガーベジコレクタバイパス３１６を含む。ガーベジコレクションシステムは、典型的にパケットが削除のためにマークされるまたは変更され、変更データは異なる位置に保存されるので、もはや有効ではないパケットを典型的にマークする。ある時点で、ガーベジコレクションシステムは、論理消去ブロック等のストレージの特定のセクションが復旧される場合があることを判定する。この判定は、利用可能記憶容量、閾値に達する無効とマークされるデータの割合、有効データの統合、閾値に達するストレージのセクションのエラー検出率、またはデータ分散に基づく性能を改善すること等の欠如によるものであってもよい。多数の因子は、ストレージのセクションがいつ復旧されるかを判定するためガーベジコレクションアルゴリズムによって考慮されてもよい。
【０１４５】
ストレージのセクションが復旧のためマークされると、セクション内の有効パケットは典型的に移転されなければならない。ガーベジコレクタバイパス３１６は、パケットが読み込みデータパイプライン３０３の中へ読み込まれ、次いで、ソリッドステート記憶コントローラ２０４の外で捜し出されることなく、書き込みデータパイプライン３０１へ直接転送されることを可能にする。好ましい実施形態において、ガーベジコレクタバイパス３１６は、ソリッドステート記憶デバイス２０６内で作動する自律ガーベジコレクタシステムの一部である。これは、ソリッドステート記憶デバイス２０６が、性能、つまりデータの信頼性を改善し、ソリッドステートストレージ２０７の位置または面積のいずれか１つの過度の使用および十分に活用しないことを避け、ソリッドステートストレージ２０７の耐用年数を延ばすため、データが系統的にソリッドステートストレージ２０７を通じて散在できるように、データを管理することを可能にする。
【０１４６】
ガーベジコレクタバイパス３１６は、書き込みデータパイプライン３０１の中へのセグメントの挿入を、１つ以上のクライアント１１０または他のデバイスによって書き込まれる他のセグメントと調整する。描写される実施形態において、ガーベジコレクタバイパス３１６は、書き込みデータパイプライン３０１内のパケタイザー３０２の前にあり、読み込みデータパイプライン３０３内のデパケタイザー３２４の後ろにあるが、読み込みおよび書き込みデータパイプライン３０３、３０１内の他の場所に位置する場合もある。ガーベジコレクタバイパス３１６は、ソリッドステートストレージ２０７内のストレージの能率を改善し、それによりガーベジコレクションの頻度を削減するため、論理ページの残余を埋めるように書き込みデータパイプライン３０１のフラッシュの間使用することができる。
【０１４７】
一実施形態において、書き込みデータパイプライン３０１は、効率的な書き込み動作のためのデータをバッファリングする書き込みバッファ３２０を含む。典型的に、書き込みバッファ３２０は、ソリッドステートストレージ２０７内の少なくとも１つの論理ページを埋めるための十分なパケットの容量を含む。これは、書き込み動作が、データのページ全体をソリッドステートストレージ２０７へ割り込みなしに送ることを可能にする。論理ページは、１つより大きいＥＣＣチャンクを含む場合がある。書き込みデータパイプライン３０１の書き込みバッファ３２０、およびソリッドステートストレージ２０７内の記憶書き込みバッファと同一容量になるまたはそれより大きい読み込みデータパイプライン３０３内のバッファを形成することによって、単一書き込みコマンドが、複数のコマンドの代わりにソリッドステートストレージ２０７へデータの全ての論理ページを送るため高度に作られることができるので、データを書き込むことおよび読み込むことはより効率的である。別の実施形態において、論理ページより少ない書き込みバッファ３０２のコンテンツは、ソリッドステートストレージ２０７へ書き込まれる。
【０１４８】
書き込みバッファ３２０が埋められる間、ソリッドステートストレージ２０７は、他の読み込み動作のために使用することができる。これは、データが記憶書き込みバッファに書き込まれ、記憶書き込みバッファの中へ流れ込むデータが行き詰まる場合に、より小さい書き込みバッファを備えるまたは書き込みバッファがない他のソリッドステートデバイスが、ソリッドステートストレージと協力する場合があるので有利である。読み込み動作は、記憶書き込みバッファ全体が埋められ、プログラミングされるまで妨害されるであろう。書き込みバッファまたは小さい書き込みバッファなしのシステムの別のアプローチは、読み込みを可能にするために満杯でない記憶書き込みバッファをフラッシュすることである。また一方、これは、多重書き込み／プログラムサイクルがページを埋めるために求められるので効率的でない。
【０１４９】
論理ページより大きい書き込みバッファ３２０サイズで描写される実施形態のため、多数のサブコマンドを含む単一の書き込みコマンドは、次いで各ソリッドステート記憶素子２１６、２１８、２２０内の記憶書き込みバッファから各ソリッドステート記憶素子２１６、２１８、２２０内の指定されたページへデータのページを転送するため、単一プログラムコマンドによって続けられることができる。この技術は、データの信頼性および耐久性を低下させることで知られており、バッファが埋める間に、読み込みおよび他のコマンドのための宛先バンクを解放するという、部分的なページプログラミングを除外する利点を有する。
【０１５０】
一実施形態において、書き込みバッファ３２０は、ピンポンバッファであり、片方のピンポンバッファが埋められている間に、もう片方のバッファが埋められ、次いで、適切な時期の転送のために指定される。別の実施形態において、書き込みバッファ３２０は、データセグメントの論理ページより大きい容量を備えるファーストインファーストアウト（「ＦＩＦＯ」）レジスタを含む。当業者は、ソリッドステートストレージ２０７へデータを書き込むことに先立ってデータの論理ページが記憶されることを許可する他の書き込みバッファ３２０設定を認識するだろう。
【０１５１】
別の実施形態において、書き込みバッファ３２０は、論理ページより小さく形成されるので、１ページより少ない情報を、ソリッドステートストレージ２０７内の記憶書き込みバッファへ書き込むことができる。この実施形態において、書き込みデータパイプライン３０１内の機能停止を読み込み動作を持続することから回避するため、ガーベジコレクションプロセスの一部として、ある位置から別の位置へ移動される必要があるガーベジコレクションシステムを使用して、データがキューイングされる。書き込みデータパイプライン３０１内におけるデータの機能停止の場合、データは、データをプログラミングすることに先立って論理ページのページを埋めるため、ガーベジコレクタバイパス３１６を介して書き込みバッファ３２０へ、次いで、ソリッドステートストレージ２０７内の記憶書き込みバッファ上へ送り込まれることができる。そのような方法で、書き込みデータパイプライン３０１内におけるデータの機能停止は、ソリッドステート記憶デバイス１０６からの読み込みを行き詰まらせない。
【０１５２】
別の実施形態において、書き込みデータパイプライン３０１は、書き込みデータパイプライン３０１内の１つ以上のユーザ定義可能な機能を持つ書き込みプログラムモジュール３１０を含む。書き込みプログラムモジュール３１０は、ユーザが書き込みデータパイプライン３０１をカスタマイズすることを可能にする。ユーザは、特定のデータ要求またはアプリケーションに基づいて書き込みデータパイプライン３０１をカスタマイズすることができる。ソリッドステート記憶コントローラ２０４がＦＰＧＡである場合、ユーザは、カスタムコマンドおよび機能を持つ書き込みデータパイプライン３０１を比較的容易にプログラミングすることができる。ユーザは、ＡＳＩＣを持つカスタム機能を含めるため書き込みプログラムモジュール３１０も使用することもできるが、しかしながら、ＡＳＩＣをカスタマイズすることは、ＦＰＧＡの場合よりも難しくなることもある。書き込みプログラムモジュール３１０は、第２のデータセグメントが、書き込みデータパイプライン３０１を介して続くことができる間に、書き込みプログラムモジュール３１０内で第１のデータセグメントが実行することを可能にするため、バッファおよびバイパス機構を含む。別の実施形態において、書き込みプログラムモジュール３１０は、ソフトウェアを介してプログラムミングできるプロセッサコアを含む場合がある。
【０１５３】
書き込みプログラムモジュール３１０は、入力バッファ３０６と圧縮モジュール３１２との間で示されることに留意されたいが、しかしながら、書き込みプログラムモジュール３１０は、書き込みデータパイプライン３０１内のどこにでもあり得、様々な段階３０２〜３２０の間で分散することができる。さらに、それらは、プログラミングされ独立して動作される様々な段階３０２〜３２０の間で分散される複数の書き込みプログラムモジュール３１０である場合がある。さらに、段階３０２〜３２０の順は変えられる場合がある。当業者は、特定のユーザ要求に基づく段階３０２〜３２０の順への実行可能な変更を認識するだろう。
読み込みデータパイプライン
【０１５４】
読み込みデータパイプライン３０３は、要求されるパケットの各ＥＣＣブロックとともに記憶されるＥＣＣを使用して、データエラーが、ソリッドステートストレージ２０７から受け取った要求されるパケットがＥＣＣブロック内で存在するかどうかを判定するＥＣＣ訂正モジュール３２２を含む。次いで、ＥＣＣ訂正モジュール３２２は、いずれかのエラーが存在し、そのエラーがＥＣＣを使用して訂正可能な場合、要求されたパケット内にあるあらゆるエラーを訂正する。例えば、ＥＣＣが、６ビットのエラーを検出することができるが、３ビットエラーしか訂正できない場合、ＥＣＣ訂正モジュール３２２は、要求されたパケットのＥＣＣブロックをエラーの３ビットまで訂正する。要求されたデータパケットが、ソリッドステートストレージ２０７に書き込まれ、ＥＣＣがパケットのため発生させられた時と全く一致するように、ＥＣＣ訂正モジュール３２２は、エラーのビットを訂正１または０状態へ変更することによってエラーのビットを訂正する。
【０１５５】
ＥＣＣ訂正モジュール３２２が、要求されたパケットはＥＣＣが訂正することができる以上のエラーのビットを含むと判定する場合、ＥＣＣ訂正モジュール３２２は、要求されたパケットの破損したＥＣＣブロック内のエラーを訂正することができず、割り込みを送る。一実施形態において、ＥＣＣ訂正モジュール３２２は、要求されたパケットがエラーにあることを示すメッセージとともに割り込みを送る。このメッセージは、ＥＣＣ訂正モジュール３２２がエラーを訂正できない、またはＥＣＣ訂正モジュール３２２が暗示されうるエラーを訂正する能力がないという情報を含む場合がある。別の実施形態において、ＥＣＣ訂正モジュール３２２は、割り込みおよび／またはメッセージとともに要求されたパケットの破損したＥＣＣブロックを送る。
【０１５６】
好ましい実施形態において、ＥＣＣ訂正モジュール３２２によって訂正することができない要求されたパケットの破損したＥＣＣブロックまたは破損したＥＣＣブロックの一部は、マスタコントローラ２２４によって読み込まれ、訂正され、読み込みデータパイプライン３０３によってさらに処理されるＥＣＣ訂正モジュール３２２へ戻される。一実施形態において、要求されたパケットの破損したＥＣＣブロックまたは破損したＥＣＣブロックの一部分は、データを要求するデバイスへ送られる。要求デバイス１５５は、ＥＣＣブロックを訂正する、またはバックアップもしくはミラーコピー等の別のコピーを使用してデータを置き換えることができ、次いで、要求されたデータパケットの置き換えデータを使用する、または読み込みデータパイプライン３０３へそれを戻すことができる。要求デバイス１５５は、破損した要求されたパケットを置き換える、またはパケットが属するデータユニットを置き換えることを要求するデータを特定するために、エラーの要求されたパケット内のヘッダ情報を使用することができる。
【０１５７】
別の好ましい実施形態において、ソリッドステート記憶コントローラ２０４は、ＲＡＩＤのいくつかのタイプを使用してデータを記憶し、破損したデータを回復することができる。別の実施形態において、ＥＣＣ訂正モジュール３２２は、割り込みおよび／またはメッセージを送り、受け取りデバイスは、要求されたデータパケットと関連する読み込み動作を失敗する。当業者は、要求されたパケットの１つ以上のＥＣＣブロックが破損され、動作の再試行の後でさえＥＣＣ訂正モジュール３２２が、エラーを訂正でき得ないと判定するＥＣＣ訂正モジュール３２２の結果として受け取られる他の意見および働きを認識するだろう。
【０１５８】
読み込みデータパイプライン３０３は、直接的または間接的にＥＣＣ訂正モジュール３２２から要求されたパケットのＥＣＣブロックを受け取るデパケタイザー３２４を含み、１つ以上のパケットヘッダをチェックし、リムーブする。デパケタイザー３２４は、ヘッダ内でパケット識別子、データ長、データ位置等をチェックすることによってパケットヘッダを有効にすることができる。一実施形態において、ヘッダは、要求されたパケットである読み込みデータパイプライン３０３へ送達されるパケットを有効にするために使用できるハッシュコードを含む。デパケタイザー３２４は、パケタイザー３０２によって追加される要求されたパケットからヘッダもリムーブする。デパケタイザー３２４は、一定のパケット上で動作しないように指示される場合があるが、変更なしにそれらを前方に渡す。１つの例は、インデックスを再構築するためヘッダ情報が要求される再構築プロセスのコースの間要求される、コンテナラベルである場合がある。さらなる例は、ソリッドステート記憶デバイス２０６内で使用することになっている様々なタイプのパケットの転送を含む。別の実施形態において、デパケタイザー３２４動作は、パケットタイプ従属である場合がある。
【０１５９】
読み込みデータパイプライン３０３は、データをデパケタイザー３２４から受け取り、不要なデータをリムーブするアライメントモジュール３２６を含む。一実施形態において、ソリッドステートストレージ２０７へ送られる読み込みコマンドは、データのパケットを読み出す。データを要求するデバイスは、読み出されるパケット内の全てのデータを要求しない場合があり、アライメントモジュール３２６は不要なデータをリムーブする。読み出されるページ内の全てのデータが要求されるデータである場合、アライメントモジュール３２６は、どのデータもリムーブしない。
【０１６０】
アライメントモジュール３２６は、データセグメントを次の段階へ進めることに先立って、データセグメントを要求するデバイスと互換性がある形状内のデータユニットのデータセグメントとして、データを再フォーマットする。典型的に、データが読み込みデータパイプライン３０３によって処理される際に、データセグメントまたはパケットのサイズは、様々な段階で変化する。アライメントモジュール３２６は、要求デバイス１５５へ送られるのに適しており、応答を形成するために連結するデータセグメント内のデータをフォーマットするために受け取られるデータを使用する。例えば、第１のデータパケットの一部分からのデータは、第２のデータパケットの一部分からのデータと組み合わせることができる。データセグメントが要求デバイスによって要求されるデータよりも大きい場合、アライメントモジュール３２６は、不要なデータを破棄することができる。
【０１６１】
一実施形態において、読み込みデータパイプライン３０３は、読み込みデータパイプライン３０３によって処理することに先立って、ソリッドステートストレージ２０７から読み込まれる１つ以上の要求されるパケットをバッファする読み込み同期化バッファ３２８を含む。読み込み同期化バッファ３２８は、ソリッドステートストレージクロックドメインとローカルバスクロックドメインとの間の境界にあり、クロックドメインの差異に対応するためバッファリングを提供する。
【０１６２】
別の実施形態において、読み込みデータパイプライン３０３は、アライメントモジュール３２６から要求されるパケットを受け取り、要求デバイスへのトランスミッションに先立ってパケットを記憶する出力バッファ３３０を含む。出力バッファ３３０は、データセグメントが読み込みデータパイプライン３０３の段階から受け取られる時と、データセグメントがソリッドステート記憶コントローラ２０４の他の部分へ、または要求デバイス、クライアント１１０、ファイルサーバ１１４等へ転送される時との間の差異に対応する。出力バッファ３３０は、データバス２０５の動作の能率を改善するために、データバス２０５が読み込みデータパイプライン３０３によって持続することができるより速い速度で読み込みデータパイプライン３０３からデータを受け取ることも可能にする。
【０１６３】
一実施形態において、読み込みデータパイプライン３０３は、ＥＣＣ訂正モジュール３２２から１つ以上の暗号化された要求されるパケットを受け取り、１つ以上の要求されるパケットをデパケタイザー３２４へ送ることに先立って、ソリッドステート記憶デバイス２０６に対する固有の暗号鍵を使用して１つ以上の要求されるパケットを解読する媒体解読モジュール３３２を含む。典型的に媒体解読モジュール３３２によってデータを解読するために使用される暗号鍵は、媒体暗号化モジュール３１８によって使用される暗号鍵と全く一致している。別の実施形態において、ソリッドステートストレージ２０７は２つ以上のパーティションを有し、ソリッドステート記憶コントローラ２０４は、それぞれソリッドステートストレージ２０７内の単一パーティション上で作動する２つ以上のソリッドステート記憶コントローラ２０４のように機能する。この実施形態において、固有の媒体暗号鍵は各パーティションとともに使用することができる。
【０１６４】
別の実施形態において、読み込みデータパイプライン３０３は、出力バッファ３３０へデータセグメントを送ることに先立って、デパケタイザー３２４によってフォーマットされるデータセグメントを解読する解読モジュール３３４を含む。読み込み要求と併せて受け取られる暗号鍵を使用して解読されるデータセグメントは、読み込み同期化バッファ３２８によって受け取られた要求されるパケットの読み出しを初期化する。解読モジュール３３４は、第１のパケットに対する読み込み要求と併せて受け取られる暗号鍵で第１のパケットを解読することができ、次いで異なる暗号鍵で第２のパケットを解読する、あるいは解読せずに読み込みデータパイプライン３０３の次の段階上へ第２のデータパケットを渡すことができる。典型的に、解読モジュール３３４は、データセグメントを解読するために、要求されるパケットを解読するために使用する媒体解読モジュール３３２よりも、異なる暗号鍵を使用する。パケットが非機密暗号ノンスとともに記憶された際、ノンスはデータパケットを解読するため暗号鍵と併せて使用される。暗号鍵は、クライアント１１０、サーバ１０８、鍵マネージャ、またはソリッドステート記憶コントローラ２０４によって使用される暗号鍵を管理する他のデバイスから受け取ることができる。
【０１６５】
別の実施形態において、読み込みデータパイプライン３０３は、デパケタイザー３２４によってフォーマットされるデータセグメントを解凍する解凍モジュール３３６を含む。好ましい実施形態において、解凍モジュール３３６は、圧縮モジュール３１２によってデータを圧縮するために使用される補完的なルーティンを選択するために、１つまたは両方のパケットヘッダおよびコンテナラベルで記憶される圧縮情報を使用する。別の実施形態において、解凍モジュール３３６によって使用される解凍ルーティンは、解凍されるデータセグメントを要求するデバイスによって示される。別の実施形態において、解凍モジュール３３６は、データユニットタイプ毎またはデータユニットクラス毎の基準のデフォルト設定に従って解凍ルーティンを選択する。データユニットの第１のパケットは、デフォルト解凍ルーティンを無効にすることができる場合があり、同一のデータユニットクラスおよびデータユニットタイプの第２のデータユニットの第２のパケットは、デフォルト解凍ルーティンを使用する場合があり、同一のデータユニットクラスおよびデータユニットタイプの第３のデータユニットの第３のパケットは、解凍を使用しない場合がある。
【０１６６】
別の実施形態において、読み込みデータパイプライン３０３は、読み込みデータパイプライン３０３内の１つ以上のユーザ定義可能な機能を含む読み込みプログラムモジュール３３８を含む。読み込みプログラムモジュール３３８は、書き込みプログラムモジュール３１０と同様の特質を有し、ユーザがカスタム機能を読み込みデータパイプライン３０３へ提供することを可能にする。読み込みプログラムモジュール３３８は、図３で示されるように位置される場合があり、読み込みデータパイプライン３０３内の別の場所に位置される場合があり、あるいは読み込みデータパイプライン３０３内の複数の位置の複数の部分を含む場合がある。これに加え、それらは独立して動作する読み込みデータパイプライン３０３内の複数の位置内の複数の読み込みプログラムモジュール３３８である場合がある。当業者は、読み込みデータパイプライン３０３内の読み込みプログラムモジュール３３８の他の形状を認識するだろう。書き込みデータパイプライン３０１と同様に、読み込みデータパイプライン３０３の段階は再配置される場合があり、当業者は、読み込みデータパイプライン３０３内の段階の他の順を認識するだろう。
【０１６７】
ソリッドステート記憶コントローラ２０４は、制御および状態レジスタ３４０ならびに対応する制御キュー３４２を含む。制御および状態レジスタ３４０ならびに対応する制御キュー３４２は、書き込みおよび読み込みデータパイプライン３０１、３０３内で処理されるデータと関連付けられる制御およびシークエンシングコマンドならびにサブコマンドを促進する。例えば、パケタイザー３０２内のデータセグメントは、ＥＣＣ発生器３０４と関連付けられる制御キュー３４２内の１つ以上の対応する制御コマンドまたは命令を有する場合がある。データセグメントがパケット化される際、命令またはコマンドのいくつかは、パケタイザー３０２内で実行される場合がある。他のコマンドまたは命令は、データセグメントから作成される新しく形成されたデータパケットが次の段階へ渡されるにつれて、制御および状態レジスタ３４０を介して次の制御キュー３４２へ渡される場合がある。
【０１６８】
コマンドまたは命令は、それぞれのパケットがその段階で実行されるにつれて、適切なコマンドまたは命令を引き出す各パイプライン段階とともに書き込みデータパイプライン３０１へ進められるパケットのため、制御キュー３４２内へ同時にロードされてもよい。同様に、コマンドまたは命令は、それぞれのパケットがその段階で実行されるにつれて、適切なコマンドまたは命令を引き出す各パイプライン段階とともに読み込みデータパイプライン３０３から要求されるパケットのため、制御キュー３４２内へ同時にロードされてもよい。当業者は、制御および状態レジスタ３４０ならびに制御キュー３４２の他の特徴および機能を認識するだろう。
【０１６９】
ソリッドステート記憶コントローラ２０４および／またはソリッドステート記憶デバイス２０６は、バンクインターリーブコントローラ３４４も含むことができる。バンクインターリーブコントローラ３４４は、バンク間での書き込み、読み込み、消去等を調整する。典型的に、論理消去ブロックを消去することは、論理ページを書き込むことより時間がかかり、読み込みは、論理ページを書き込むことより時間がかからない。バンク間のコマンドを調整することによって、バンクインターリーブコントローラ３４４は、ソリッドステート記憶デバイス２０２内の能率を上げる。バンクインターリーブコントローラ３４４のより詳細な説明は、２００７年１２月６日に申請されたＤａｖｉｄ  Ｆｌｙｎｎらの「Ａｐｐａｒａｔｕｓ，  Ｓｙｓｔｅｍ，  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｍａｎａｇｉｎｇ  Ｃｏｍｍａｎｄｓ  ｏｆ  Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｓｔｏｒａｇｅ  Ｕｓｉｎｇ  Ｂａｎｋ  Ｉｎｔｅｒｌｅａｖｅ」と題される米国特許出願第１１／９５２，０９５号に記載される。
【０１７０】
ソリッドステート記憶コントローラ２０４は、ソリッドステートストレージ２０７から送られ受け取られるコマンドおよびステータスメッセージをバッファする同期化バッファ３４６を含む。同期化バッファ３４６は、ソリッドステート記憶クロックドメインとローカルバスクロックドメインとの間の境界に位置され、クロックドメインの差異に対応するためバッファリングを提供する。同期化バッファ３４６、書き込み同期化バッファ３０８、および読み込み同期化バッファ３２８は、独立する場合、またはデータ、コマンド、ステータスメッセージ等をバッファするため共働することができる。好ましい実施形態において、同期化バッファ３４６は、クロックドメインにまたがる信号の最小数の場所に位置される。当業者は、クロックドメイン間の同期化が、設計実現のいくつかの態様を最適化するために、ソリッドステート記憶デバイス２０２内の他の位置へ恣意的に移動される場合があることを認識するだろう。
【０１７１】
ソリッドステート記憶コントローラ２０４は、ソリッドステートストレージ１１０へ送られそこから読み込まれるデータ、およびソリッドステートストレージ２０７のタイプに基づくソリッドステートストレージ２０７から受け取られるステータスメッセージの対し、コマンドを解釈し変換する記憶バスコントローラ３４８を含む。例えば、記憶バスコントローラ３４８は、異なるタイプのストレージ、異なる性能特質のストレージ、異なる製造業者のストレージ等のため、異なるタイミング必要条件を有する場合がある。記憶バスコントローラ３４８は、記憶制御バス２１２へ制御コマンドも送る。
【０１７２】
好ましい実施形態において、ソリッドステート記憶コントローラ２０４は、各マルチプレクサがソリッドステートストレージ配列２０７内の行のために専用に用いるマルチプレクサ３５０ａ〜ｎの配列を備えるＭＵＸ３５０を含む。例えば、マルチプレクサ３５０ａは、ソリッドステート記憶素子２１６ａ、２１８ａ、２２０ａと関連付けられる。ＭＵＸ３５０は、書き込みデータパイプライン３０１からデータ、および記憶バスコントローラ３４８からコマンドを、記憶Ｉ／Ｏバス２１０を経由してソリッドステートストレージ２０７へ送り、ソリッドステートストレージ２０７から記憶Ｉ／Ｏバス２１０を経由して読み込みデータパイプライン３０３へ、ならびに制御および状態レジスタ３４０へ、記憶バスコントローラ３４８、同期化バッファ３４６、およびバンクインターリーブコントローラ３４４を介してデータおよびステータスメッセージを送る。
【０１７３】
好ましい実施形態において、ソリッドステート記憶コントローラ２０４は、ソリッドステート記憶素子（例えば、ＳＳＳ０．１  ２１６ａ、ＳＳＳ０．２  ２１８ａ、ＳＳＳ０．Ｎ  ２２０ａ）の各行のためＭＵＸ３５０を含む。ＭＵＸ３５０は、書き込みデータパイプライン３０１からのデータと、記憶Ｉ／Ｏバス２１０を経由してソリッドステートストレージ２０７へ送られたコマンドを組み合わせ、コマンドから読み込みデータパイプライン３０３によって処理されるデータを分離する。書き込みバッファ３２０に記憶されるパケットは、ソリッドステート記憶素子（ＳＳＳｘ．０はＳＳＳｘ．Ｎ  ２１６、２１８、２２０へ）の各行のＭＵＸ３５０に対するソリッドステート記憶素子（ＳＳＳｘ．０はＳＳＳｘ．Ｎ  ２１６、２１８、２２０へ）の各行の書き込み同期化バッファ３０８を介して書き込みバッファ３２０の外のバス上で指示される。コマンドおよび読み込みデータは、記憶Ｉ／Ｏバス２１０からＭＵＸ３５０によって受け取られる。ＭＵＸ３５０は、記憶バスコントローラ３４８へステータスメッセージの指示もする。
割り当て装置
【０１７４】
図４は、本発明に従ってデータを記憶空間に割り当てるための装置４００の実施形態を図示する略ブロック図である。装置４００は、以下に記載される割り当て要求モジュール４０２、論理容量モジュール４０４、および割り当て応答モジュール４０６を含む。割り当て要求モジュール４０２、論理容量モジュール４０４、および割り当て応答モジュール４０６は、一般的に記憶システム１０２内に描写されるが、割り当て要求モジュール４０２、論理容量モジュール４０４、および割り当て応答モジュール４０６の全てまたは一部は、記憶コントローラ１０４、ドライバ１１８、または記憶システム１０２内の他の位置内にあってもよい。
【０１７５】
装置４００は、論理容量を割り当てるために要求デバイスから割り当て要求を受け取る割り当て要求モジュール４０２を含む。要求デバイスは、ファイルサーバ１１４／ファイルシステム、クライアント１１０、マスタ割り当てマネージャ１２４、または割り当て要求を送る能力があるその他のデバイスもしくは構成要素であってもよい。割り当て要求は、データ記憶デバイスにおいて受け取られる。一実施形態において、データ記憶デバイスは、示されるように記憶デバイス１０６および記憶デバイス１０６を制御する少なくとも記憶コントローラ１０４を含み、記憶コントローラ１０４に結合されるドライバ１１８を含むことができる。割り当て要求と関連付けられる論理容量は、割り当て要求の目標であるデータ記憶デバイス上に、明確にデータを記憶するためのものである。
【０１７６】
割り当て要求は、論理的な割り当て要求を含むこと、またはデータを記憶する要求を含むことができる。論理的な割り当て要求の場合において、この要求は、典型的にクライアント１１０へ割り当てられるＬＩＤに対する要求である。データを記憶する要求の場合、１つ以上のＬＩＤは、クライアント１１０またはファイルサーバ１１４／ファイルシステムへ割り当てられ、ＬＩＤを、データを含む記憶位置と関連付けることを含むことができるよう割り付けられる。一実施形態において、ＬＩＤは、割り当て時にデータへ割り付けられる（例えば、割り当て要求は、データを記憶する要求を含むことができる）。別の実施形態において、割り当て要求がデータを記憶するための要求から分離する場合、データへＬＩＤを割り当てることは、ＬＩＤをデータへ割り付けることから分離するステップであってもよい。特定の実施形態において、要求は、複数のクライアントから生じ、クライアント識別子が要求と関連付けることができる結果として、装置４００は、クライアントへの割り当てに関する、および／またはクライアントへ割り当てることが可能であるＬＩＤに関するアクセス制御を実現するための、クライアント識別子を使用することができる。さらに、クライアント識別子は、どのくらいの物理容量が特定のクライアントまたはクライアントのセットへ割り当てられるかを管理するために使用することができる。
【０１７７】
装置４００は、データ記憶デバイスの論理空間が、割り当て要求を満たすための十分な未割り当て論理空間を含むかどうかを判定する論理容量モジュール４０４を含む。論理容量モジュール４０４は、ＬＩＤ割り付けおよび／または割り当てを維持するインデックス（または他のデータ構造）を使用して、論理空間が十分な未割り付け論理容量および／または未割り当て論理容量を有するかどうかを判定することができる。いくつかの実施形態において、論理容量モジュール４０４は、不揮発性記憶デバイス上に維持される論理対物理マップまたはインデックスを検索することができる。論理対物理マップは、論理空間内の割り付け論理識別子（「ＬＩＤ」）と、関連付けられるＬＩＤに対応するデータを含む記憶位置（例えば、物理位置）との間の関連付けを含む場合がある。しかしながら、論理容量を判定するための他のデータ構造および／または技術は、本開示の教示の下において使用することができる。したがって、本開示は、この観点において限定されて読み取られるべきではない。利用可能な論理容量（例えば、未割り当て論理容量および／または未割り付け論理容量）、および／または利用可能な物理記憶容量を判定する追加的な例は、図１１および図１２と併せて、以下に開示される。
【０１７８】
上述のように、割り付けられていないＬＩＤは、不揮発性記憶デバイス上に記憶されるデータに対応しない（例えば、論理対物理マップ内にない）ＬＩＤを指すことができる。割り付けられていないＬＩＤは、クライアント１１０に割り当てること、または未割り当てることができる。いくつかの実施形態において、論理対物理マップは、マップ内のＬＩＤと、ＬＩＤと関連付けられる物理アドレスとの間に他の論理対論理のマッピングが存在しないように設定される。
【０１７９】
データ記憶デバイスにおいて管理される論理対物理マップ内のＬＩＤは、ＬＢＡ、インデックス、ファイル名、およびｉノード等のいずれかの種類の論理アドレスを含むこと、ならびにオブジェクトを含むことができる。具体的には、論理対物理マップは、オブジェクトまたはいかなる特定の論理アドレス型にも限定されないが、ファイル名、ＬＢＡ等と同様に、オブジェクトを含んでもよい。別の実施形態において、ＬＩＤは、オブジェクト識別子以外の論理識別子を含み、オブジェクトは、データ記憶デバイスによって直接管理されない。装置４００は、データ記憶デバイスの論理対物理マップが装置４００のモジュール４０２〜４０６と同様にオブジェクトに限定されないために有利ではあるが、ＬＩＤは、装置４００の範囲および適応性を拡大するＬＢＡおよび他のデータユニットラベルでもあり得る。
【０１８０】
いくつかの実施形態において、論理容量モジュール４０４は、割り付けられたＬＩＤを特定するために論理対物理マップを検索し、データ記憶デバイスの論理空間を知ることで、論理容量モジュール４０４は、未割り当て論理空間を判定する。例えば、論理空間が００００からＦＦＦＦまでの論理アドレスの範囲を含み、論理対物理マップが、論理アドレス００００からＦ０００までが割り付けられることを示す場合、論理容量モジュール４０４は、未割り当て論理空間がアドレスＦ００１からＦＦＦＦまでを含んでもよいと判定することができる。論理アドレスＦ００１からＦＦＦＦが、別のクライアント１１０に割り当てられていない場合、それらは割り当て要求を満たすように割り当てることが可能であってもよい。
【０１８１】
いくつかの実施形態において、不揮発性記憶デバイスは、異なるそれぞれのクライアントのための個別の論理記憶空間を維持することができる。したがって、各クライアントは、自身の個別の論理記憶空間を動作することができる。不揮発性記憶デバイスは、したがって、各クライアントのための個別のメタデータ（例えば、インデックス、および容量指標等）を維持することができる。クライアントは、アドレス（例えば、ネットワークアドレス）、認証情報、または他の識別子によって区別することができる。識別子は、クライアント要求内において提供されること、および／または不揮発性記憶デバイスにアクセスするためにクライアントによって使用される通信チャネルまたはプロトコルと関連付けることができる。
【０１８２】
いくつかの実施形態において、論理対物理マップ（または他のデータ構造）は、まだ割り付けられていない論理容量割り当てを追跡するように設定される割り当てインデックス、または割り当てエントリを含むことができる。例えば、ＬＩＤ（または論理容量の他の一部分）は、クライアントへ割り当てることができるが、記憶デバイス１０６上に記憶されるデータと関連付けなくてもよい。したがって、論理容量は割り当てられるが、「未割り当て」であってもよく、したがって論理対物理マップ内に含まれなくてもよい。したがって、未割り当て論理空間を判定する際、論理容量モジュール４０４は、他のインデックス付け情報（例えば、論理対物理マップ）に加えて、追加的なデータ構造（例えば、割り当てインデックス、または割り当てエントリ）を閲覧することができる。
【０１８３】
代替として、またはさらに、不揮発性記憶デバイスは、ＬＩＤ（または論理容量の他の一部分）を特定することができる「未割り当てインデックス」を維持することができる。利用可能インデックスの例は、図１２と併せて以下に記載される。
【０１８４】
例えば、割り当て要求が一定数のＬＩＤに対する要求を含む場合、論理容量モジュール４０４は、利用可能な論理空間（例えば、未割り付け論理容量、および／または未割り当て論理容量）が、要求された論理アドレスの量に適合または上回るために十分であるかどうかを判定することができる。別の実施形態において、割り当て要求がＬＩＤのリストまたは範囲を含む場合、論理容量モジュール４０４は、要求ＬＩＤの全てまたは一部分が、未割り当てまたは未割り付けであるかどうかを判定することができる。
【０１８５】
典型的なランダムアクセスデバイスにおいて、典型的にＬＩＤは、事前決定されるマッピングに従って物理ブロックアドレス（「ＰＢＡ」）を一致させる、ＬＢＡおよびＬＢＡである。対照的に、連続的な記憶デバイスにおいて、ログ構造デバイス等、割り付けられたＬＩＤは、割り付けられたＬＩＤへマップされる１つ以上の物理アドレスと異なる（例えば、ＬＩＤから記憶位置へマップすることを事前に設定、または事前に決定してもよい）。そのようなデータ記憶デバイスにおいて、データは、ガーベジコレクションプロセスまたは他の空間復旧プロセスにより移動されることがあり、データは、論理対物理マップ内で追跡される。典型的に、連続的またはログ記憶デバイス内の割り付けられたＬＩＤは、インデックス（例えば、論理対物理のマッピング）のみによってマップされる物理アドレスに関連する。
【０１８６】
連続的な記憶デバイスにはログ構造デバイス等があり、論理対物理のマッピングは、様々な理由のために変化してもよい。一実施形態において、１つ以上のＬＩＤから１つ以上の物理アドレスへのマッピングは、１つ以上の物理アドレスで記憶されるデータが、１つ以上の異なる物理アドレスへ移動される際に変化する。別の実施形態において、１つ以上のＬＩＤの１つ以上の物理アドレスへのマッピングは、重複除外プロセス内において変化する。例えば、１つ以上の物理アドレスにおいて記憶されるデータが第１の物理位置に記憶され、第２の物理位置に記憶されるデータと同一である場合、１つ以上のＬＩＤマッピングは、第２の物理位置に対応するよう変更される。
【０１８７】
別の実施形態において、１つ以上のＬＩＤの１つ以上の物理アドレスへのマッピングは、１つ以上のＬＩＤ（「第１のＬＩＤ」）へマップされる１つ以上の物理位置が１つ以上の異なるＬＩＤ（「第２のＬＩＤ」）へ再マップされる際に変化する。これは、例えば、ファイルまたはオブジェクト名が変化する場合に起こることがある。事前に決定されるおよび／もしくは事前に設定される、ＬＩＤと物理記憶位置との間の関連付けがなく、および／またはデータが移動され、ＬＩＤと物理記憶位置との間の関連付けが変化してもよいストレージにおいて、論理対物理のインデックス付けは、使用することができる。記憶デバイスが、記憶デバイス上の論理アドレスと記憶位置との間の関連付けを事前に維持するため、クライアントアドレス変換は、未然に防がれてもよく、クライアントにとってマッピングの個別かつ冗長なセットを維持する必要性はない。したがって、１つ以上のマッピングおよび／またはクライアントと記憶デバイスとの間のアドレス変換層は、除外されてもよく、クライアントの負荷の進行を減らす。
【０１８８】
装置４００は、論理空間が十分な論理空間を有するかどうかを判定する論理容量モジュール４０４に応答して、応答を要求デバイスに伝える割り当て応答モジュール４０６を含む。応答は、論理空間が割り当て要求を満たすための十分な論理空間を有するかどうかの指示を含む。例えば、論理容量モジュール４０４が、未割り当て論理空間が割り当て要求を満たすには不十分であることを判定する場合、割り当て応答モジュール４０６は、割り当て要求が失敗したことを応答の中に含むことができる。
【０１８９】
例えば、論理容量モジュール４０４が、未割り当て論理空間が割り当て要求を満たすのに十分であると判定する場合、割り当て応答モジュール４０６は、応答中に割り当て要求の性質に依存する肯定的な応答、ＬＩＤのリスト、ＬＩＤの範囲等を含むことができる。例えば、論理容量モジュール４０４が、未割り当て論理空間が割り当て要求を満たすのに十分であると判定し、割り当て要求が特定のＬＩＤを割り当てる要求を含む場合、応答モジュール４０６は、要求ＬＩＤが割り当てられたことの確認を要求デバイスへ伝えることができる。割り当て要求がＬＩＤに対する要求を含む場合、割り当て応答モジュール４０６は、要求ＬＩＤを伝えることができる。割り当て要求が規準に適合するＬＩＤに対する要求を含む場合、割り当て応答モジュール４０６は、規準に適合するＬＩＤを伝える。
【０１９０】
一実施形態において、割り当て要求は、ＬＩＤの特定のグループのための要求であり、割り当て応答モジュール４０６は、要求ＬＩＤで応答することができる。別の実施形態において、割り当て要求は、書き込み要求の一部である。一事例において、書き込み要求は、特定のＬＩＤを含み、割り当て応答モジュール４０６は、要求ＬＩＤで応答することができる。別の事例において、書き込み要求は、データまたはデータ量の指示のみを含み、割り当て応答モジュール４０６は、書き込み要求に十分なＬＩＤを割り当てること、ならびに割り当てられたＬＩＤを戻すことによって応答することができる。代替として、データ量の指示が提供される場合、応答は、未割り当てであるＬＩＤを含むことができる。割り当て応答モジュール４０６は、データが書き込まれる前または後に応答することができる。割り当て応答モジュール４０６が、データが書き込まれる後に応答を送る場合、応答は、データを書き込むことの確認の一部であってもよい。当業者は、割り当て応答モジュール４０６がデータ記憶デバイスの論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を有するかどうかを判定する論理容量モジュール４０４に応答して、応答することができる他の方法を認識するであろう。
【０１９１】
一実施形態において、論理空間（「論理空間容量」）に対応する記憶容量は、データ記憶デバイスの物理記憶容量より実質的に大きい。論理空間容量は、割り当てられている論理空間と組み合わされる未割り当て論理空間を含む。割り当てられている論理空間は、割り当てられている論理空間内に、割り付けられたＬＩＤおよび割り付けられていないＬＩＤを含む。言い換えれば、データ記憶デバイスおよび関連付けられる論理対物理のマッピングは、仮想プロビジョニングをサポートする。論理識別子がＬＢＡである事例において、各ＬＢＡは、定義されるデータサイズを典型的に有する。特定の実施形態において、ＬＢＡは論理ブロックへ割り付けられ、論理ブロックは記憶デバイス１０６上の物理ブロックと大抵同一のサイズである。
【０１９２】
一実施形態において、データ記憶デバイスの論理空間におけるＬＩＤのサブセットは、データ記憶デバイス内の物理ブロックに対する１対１対応を有する。例えば、論理空間の一部分がクライアント１１０に割り当てられ、クライアント１１０が論理ブロックをＬＩＤがＬＢＡであるクライアント１１０に対して記憶する場合、各ＬＢＡは、物理ブロックアドレス（「ＰＢＡ」）と同等である物理アドレスに対応してもよい。データ記憶デバイスに対し利用可能な論理空間は、依然として他のクライアント１１０への割り当てに対応することができ、依然として仮想的に提供されてもよい。
【０１９３】
論理識別子が論理ブロックアドレスであることが一般的である一方で、図４の装置４００において、論理識別子は、より一層そうであり得る。論理識別子は、論理アドレス（「ＬＡ」）、論理ブロックアドレス（「ＬＢＡ」）、ファイル名、ファイルアドレス、オブジェクト識別子、ｉノード、インデックス等であり得る。記憶システム１０２、サーバ１０８等がＬＩＤを表すための６４または１２８ビットアドレスを使用する場合、この論理空間（つまり論理空間）にアドレス指定するために可能な論理識別子は、膨大になる。アドレス内のビットの一定量は、論理空間を専用に用い、このアドレス内の他のビットは、クライアントの識別、エラー訂正情報、優先度等のデータ要求に関連する属性、データ型、整合性要求等のような他の情報をもたらすことができる。アドレス内のビットの一部分のみを使用することは、例えば、３２ビットを使用して非常に大きなアドレス空間を提供することである。一実施形態において、メタデータの手掛かり（例えばファイル型、データクラス等）は、クライアント（例えばＦＳ）から記憶デバイスへ渡される。これらメタデータの手掛かりは、アドレスビットを経由し、メタ情報に従って論理アドレス空間を編成することの副作用とともに、コード化され、渡されてもよい。例えば、全てのシステムファイルは、１つに対するアドレスセット内の最上位ビットを有することができ、したがってその全ては、大半の論理アドレス空間内に配置されることができる。
【０１９４】
論理アドレス空間は、記憶システム１０２内における記憶デバイス１０６の物理記憶容量を上回ることができる。データが識別可能なユニット内に送られるよう、記憶デバイス１０６または記憶システム１０２へ送られるデータが最小サイズを有することは、一般的である。例えば、記憶システム１０２へ送られるデータは、チャンクに分けることができる。末端にあるデータは、最小サイズのチャンクに完全に一致しなくてもよいため、データチャンクの残りとなり、最下位データに加えて、ヌル文字、ゼロ、１の位等となってもよい。
【０１９５】
記憶システム１０２へ送られるデータのいくつかの最小チャンク、およびチャンクにそれぞれ対応する可能な論理識別子の全てがあると仮定すれば、論理識別子の数は大量であり、そのチャンクと関連付けられる論理記憶容量は、記憶システム１０２内の記憶デバイス１０６の物理記憶容量よりもはるかに大きい。データ記憶デバイス内の利用可能な物理記憶容量は、利用可能なＬＩＤと相関しない。さらに、これは、利用可能な論理ブロックアドレスが、記憶デバイス１０６の物理ブロックアドレスとのおおよその１対１対応を有する典型的なランダムアクセスデバイスと対比される。
【０１９６】
特定の実施形態において、記憶デバイスドライバ１１８は、記憶インターフェース１１６を経由してファイルサーバ１１４／ファイルシステムに結合され、記憶インターフェース１１６は、ファイルサーバ１１４／ファイルシステムが記憶インターフェース１１６と情報をやりとりできるようにするインターフェースを含む。インターフェースは、アプリケーションプログラムインターフェース（ＡＰＩ）、ブロック記憶インターフェース、改良ブロック記憶インターフェース、コマンドインターフェース等を含むことができる。一実施形態に従うコマンドインターフェースは、割り当てが書き込みと併せて行われるべきであることを示すための書き込みコマンド（例えばクライアント要求）内のビットを含むことができる。書き込み内の第２のビットは、要求されるＬＢＡパラメータがヌルであるかクライアントのＩＤを含んでおり、装置４００が１つ以上のＬＢＡを割り当てるべきであることを示すことができる。または、クライアント要求は、任意のタイマ等とともに特定の物理割り当て要求（ファイルの長さ）を含む。その結果、インターフェースは、多くの異なる特徴および機能を可能にする。
【０１９７】
インターフェースは、ファイルサーバ１１４／ファイルシステムからデータ記憶デバイスの論理容量を割り当てる割り当て要求を伝えること、ならびにファイルサーバ１１４／ファイルシステムへ割り当て応答を伝えることを動作可能にすることができる。割り当て応答は、割り当て要求に応答し、論理空間が割り当て要求を満たすのに十分な論理空間を有するかどうかの指示を含む。コマンドインターフェースは、新しい入力出力制御（「ＩＯ−ＣＴＬ」）コマンド、またはＩＯ−ＣＴＬコマンドの拡張として実現することができる。コマンドインターフェースは、新しいプロトコルを実現すること、または既存プロトコルを拡張することができる。
【０１９８】
論理容量は、データ記憶デバイス上のデータを記憶するためのものである。記憶デバイスドライバ１１８および／またはデータ記憶デバイスは、論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を含むかどうかを判定し、その判定は論理対物理マップの検索を含む。記憶デバイスドライバ１１８は、データ記憶デバイスの一部であってもよい。しかしながら、十分な未割り当て論理空間の判定は、ファイルサーバ１１４／ファイルシステム内で行われない。その代わりに、ファイルサーバ１１４／ファイルシステムならびに割り当ておよびデータ記憶デバ要求イス／ドライバ１１８は、データ記憶システム１０２の一部である記憶デバイス１０６に対応する論理対物理マップを検索した後、割り当て要求へ送り応答する。
【０１９９】
一実施形態において、記憶デバイスインターフェース１２０は、記憶デバイスドライバ１１８を、データ記憶デバイスを記憶デバイスドライバ１１８と連携させ、論理空間が割り当て要求を満たすのに十分な論理容量を有するかどうかを判定するために十分なデータ記憶デバイスと結合するよう動作可能である。上述の記憶デバイスドライバ１１８は、ＰＣＩエクスプレス（ＰＣＩ  Ｅｘｐｒｅｓｓ）、シリアルＡＴＡバス、パラレルＡＴＡバス、ＳＣＳＩ、ファイアワイヤ（Ｆｉｒｅ  Ｗｉｒｅ）、ファイバーチャネル（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ＵＳＢ、ＰＣＩエクスプレスＡＳ（ＰＣＩｅ−ＡＳ）等であってもよい。
【０２００】
インターフェース１１６は、論理アドレス空間内のＬＩＤをそれぞれの不揮発性記憶デバイス上の記憶位置と関連付けるインデックスを、クライアントへ直接映すことができる。クライアントは、ＬＩＤが割り当てられる、ＬＩＤが割り付けられる等の利用可能な割り当て空間、物理容量、記憶媒体の調子を特定するインターフェースの特定の機能を呼び出すことができる。つまり、インターフェースは、要求通りの情報を次いで使用することができるクライアントへ、装置４００の特徴および機能性の全てまたはサブセットを直接映すことができる。
【０２０１】
図５は、本発明に従ってデータ記憶空間を割り当てる装置５００の別の実施形態を図示する略ブロック図である。装置５００は、図４の装置４００に関するそれら上述のものと実質的に同様である割り当て要求モジュール４０２、論理容量モジュール４０４、および割り当て応答モジュール４０６を含む。さらに、装置５００は、以下に記載される物理容量要求モジュール５０２、物理容量割り当てモジュール５０４、物理容量応答モジュール５０６、割り当てモジュール５０８、割り当て問い合わせ要求モジュール５１０、割り当て問い合わせ判定モジュール５１２、割り当て問い合わせ応答モジュール５１４、論理空間管理モジュール５１６、マッピングモジュール５１８、物理空間予約要求モジュール５２０、物理空間予約モジュール５２２、物理空間予約返答モジュール５２４、物理空間予約取り消しモジュール５２６、ＬＩＤ割り付けモジュール５２８、ＤＭＡモジュール５３０、および削除モジュール５３２を含む。図５の装置５００のモジュール４０２〜４０６および５０２〜５３２は、記憶システム１０２内に描写され、全てまたは一部分は、当業者に知られるドライバ１１８、記憶コントローラ１０４、またはその他の適切な位置内に含まれてもよい。
【０２０２】
装置５００は、一実施形態において、物理容量要求モジュール５０２、物理容量割り当てモジュール５０４、および物理容量応答モジュール５０６を含む。物理容量要求モジュール５０２は、要求デバイスから物理容量要求を受け取る。物理容量要求は、データ記憶デバイスにおいて受け取られ、データ記憶デバイス内の物理記憶容量の利用可能量（および／または要求デバイスに割り当てられる物理記憶容量）の要求を含む。物理容量要求は、例えば、記憶されるデータユニットのサイズを示すことによって、大量の物理容量を含むことができるか、または物理記憶容量を間接的に要求することができる。また、間接的な物理記憶容量要求は、データサイズに相関することができる記憶されるデータの論理アドレスを含むことができる。当業者は、物理容量要求の他の形態を認識するであろう。
【０２０３】
物理容量割り当てモジュール５０４は、データ記憶デバイス上の物理記憶容量の利用可能量を判定する。物理記憶容量の利用可能量は、データ記憶デバイス内の未割り付け記憶位置の物理記憶容量を含む。いくつかの実施形態において、物理記憶容量の利用可能量は、「計上され」てもよく、例えば、記憶デバイスの物理記憶容量の一部分のみが、要求デバイスに利用可能であってもよい。いくつかの実施形態において、物理記憶容量の利用可能量は、各クライアントまたはクライアントのグループに関連付けられる割り当て量に基づいて「計上され」てもよい。装置５００は、これらの割り当てを実行してもよい。利用可能な物理記憶デバイスの割り当ては、設定パラメータ（１つまたは複数）によって決定されてもよく、サービスポリシー等の性能および／または品質に従って動的に調整されてもよい。
【０２０４】
物理容量割り当てモジュール５０４は、上述の論理対物理マップのようなインデックス（または他のデータ構造）を使用して、物理記憶容量の利用可能量を判定することができる。論理対物理マップは、有効データ（例えば、有効データを含む記憶位置）を含む記憶位置を示すことができる。論理対物理マップは、割り付け記憶位置を特定するよう参照されてもよい。利用可能記憶容量は、物理容量から割り付け容量を差し引いた合計（または計上される）であってもよい。代替として、またはさらに、割り当てインデックス（または他のデータ構造）は、利用可能物理記憶容量の指標を維持してもよい。指標は、ガーベジコレクション動作、グルーミング動作、割り当て解除（例えば、調整）、書き込み追加データ、物理記憶容量予約、および物理記憶容量予約取り消し等を含むがそれらに限定されない記憶デバイス上で行われる記憶動作に応答して、更新することができる。したがって、利用可能物理記憶容量の「現在までの合計」は、要求上で利用可能であってもよい。
【０２０５】
物理容量応答モジュール５０６は、データ記憶デバイス上の物理記憶容量の利用可能量を判定する物理容量割り当てモジュール５０４に応答して、応答を要求デバイスへ伝える。
【０２０６】
物理容量割り当てモジュール５０４は、一実施形態において、割り付けられている物理アドレス、未割り付け物理アドレス、予約されている物理アドレス容量、および未予約の物理アドレス容量等を追跡する。物理容量割り当てモジュール５０４は、論理対物理マップ、有効性マップ、空き物理アドレスプール、使用済み物理アドレスプール、物理対論理マップ、または当業者に知られる他の手段を使用して、これらのパラメータを追跡することができる。
【０２０７】
応答は、多くの形態をとることができる。一実施形態において、物理容量要求が利用可能な物理容量に対する要求を含む場合、その応答は、物理記憶容量の利用可能量を含むことができる。別の実施形態において、物理容量要求が特定の物理容量の量を含む場合、その応答は、データ記憶デバイスが要求される利用可能な物理記憶容量を有するという確認を含んでもよい。当業者は、物理容量要求に応答して、応答の他の形態を認識するであろう。
【０２０８】
物理容量要求モジュール５０２、物理容量割り当てモジュール５０４、および物理容量応答モジュール５０６を備える装置５００は、論理対物理のマッピングが１対１のマッピングではない記憶デバイス１０６に有利である。典型的なランダムアクセスデバイスにおいて、読み込みおよび書き込み要求が１つ以上のＬＢＡを含む場合、ファイルサーバ１１４／ファイルシステムは、記憶デバイス１０６の物理記憶容量を、割り付けられたＬＢＡを知ることにより追跡することができる。
【０２０９】
複数物理アドレス（したがって記憶位置）が、論理識別子を追跡する単一の論理識別子（つまり、論理識別子にマップされるデータの複数のバージョン）へマップし得るログ構造ファイルシステムまたは類似システムに対し、任意の物理記憶容量の指示も提供しなくてもよい。記憶位置とＬＩＤとの間のこの多対一関係は、スナップショットおよび／またはバックアップをサポートするために使用することができる。装置５００は、利用可能な物理記憶空間を把握し、物理記憶空間の利用可能量をサーバ１０８または他のデバイスへ伝えることができる。装置５００は、ファイルサーバ１１４／ファイルシステムが物理記憶容量を問い合わせることを可能にするため、有利である。データ記憶デバイスに対する負荷を取り除く割り当て管理および物理容量管理は、データを連続的に記憶することができる記憶デバイス１０６、ログ構造記憶デバイス等に対して効率的である。
【０２１０】
割り付けられた物理アドレスは、対応する割り付けられたＬＩＤにマップされる。データが書き込み要求に応答して記憶される際、データに割り付けられるＬＩＤは、データが記憶される実際の位置にマップされる。データが連続的に記憶されるログ構造ファイルシステムに対し、データが記憶される位置は、たとえ論理識別子がＬＢＡであっても、論理識別子から明らかではない。その代わりに、データは付加ポイントに記憶され、データが記憶されるアドレスは、論理識別子にマップされる。そのデータが以前に記憶されたデータの変更である場合、ＬＩＤは、古い位置へデータが記憶されるのと同様に、現在のデータにマップすることができる。同一のＬＩＤにマップされるデータの複数のバージョンがあってもよい。
【０２１１】
装置５００は、一実施形態において、要求デバイスの割り当て要求を満たすのに十分な未割り当て論理空間を割り当てる割り当てモジュール５０８を含む。割り当てモジュール５０８は、論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を有することを判定する論理容量モジュール４０４に応答して、未割り当て論理空間を割り当てることができる。
【０２１２】
一実施形態において、割り当て要求は、事前割り当ての一部であり、その事前割り当てにおいては、論理空間はデータを記憶する特定の要求と関連付けられない。例えば、クライアント１１０は、割り当て要求を使用して論理空間を要求することができ、次いで、データを割り当てられている論理空間へ順次的に記憶し続けることができる。割り当てモジュール５０８は、割り当て要求に応答して、クライアント１１０および論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を有することを判定する論理容量モジュール４０４へ、ＬＩＤを割り当てることができる。
【０２１３】
様々な実施形態において、割り当てモジュール５０８は、論理空間のサブセットを割り当てることができ、要求される論理空間等の特定の規準を含む割り当て要求に基づいて、論理空間を割り当てることができる。例えば、割り当て要求がユーザに対するＬＩＤを割り当てる要求を含む場合、ＬＩＤは、既にクライアント１１０へ割り当てられている場合があり、クライアント１１０と関連付けられるグループへ割り当てられるＬＩＤのような、ユーザへ割り当てられるサブセットの一部である場合もある。割り当てモジュール５０８は、割り当て要求内において特定されるＬＩＤを、クライアント１１０およびそのグループと関連付けることができる。
【０２１４】
割り当てモジュール５０８はまた、特定の記憶要求と関連付けられる割り当て要求に基づいて、ＬＩＤを割り当てることができる。例えば、記憶要求が特定のＬＩＤを含み、論理容量モジュール４０４がＬＩＤは利用可能であると判定する場合、割り当てモジュール５０８は、記憶要求のデータを記憶することと併せて、ＬＩＤを割り当てることができる。別の実施形態において、記憶要求がＬＩＤを含まず、論理容量モジュール４０４が記憶要求のための十分なＬＩＤがあると判定する場合、割り当てモジュール５０８は、そのデータのためのＬＩＤを選択し、割り当てることができ、割り当て応答モジュール４０６は、割り当てられたＬＩＤを伝えることができる。
【０２１５】
割り当てモジュール５０８は、割り当てのために割り当てられていないＬＩＤを典型的に配置する。割り当てモジュール５０８が１つ以上の割り当てられていないＬＩＤを特定することのできる複数の方法がある。例えば、割り当てモジュール５０８は、割り当てる要求されるＬＩＤのリストをクライアント１１０から受け取ることによって、割り当てられていないＬＩＤを特定することができ、これらのＬＩＤが割り当てのために利用可能であることを検証することができる。別の実施形態において、割り当てモジュール５０８は、要求と併せて受け取られる規準に適合する割り当てられていないＬＩＤを検索することにより、割り当てられていないＬＩＤを特定することができる。その規準は、特定の記憶デバイス１０６と関連付けられるＬＩＤであってもよく、ある割り付けメタデータの特質等を有するＲＡＩＤ内において利用可能であってもよい。
【０２１６】
別の実施形態において、割り当てモジュール５０８は、利用可能なＬＩＤのプール内において特定される要求と併せて受け取られる規準に適合するＬＩＤのサブセットを作成することにより、割り当てられていないＬＩＤを特定することができる。一例において、そのＬＩＤは、クライアント１１０へ既に割り当てられているＬＩＤのサブセットであってもよい。例えば、ＬＩＤのセットまたはグループが、特定のユーザ、グループ、使用者等に割り当てられる場合、ＬＩＤのサブセットは、割り当てられてもよい。特定の例は、ＬＩＤの１セットが編成に割り当てられる場合、次いで、割り当てられたＬＩＤのサブセットは、その編成の中の特定ユーザへさらに割り当てられる。当業者は、割り当てモジュール５０８が１つ以上の割り当てられていないＬＩＤを特定し得る他の方法を認識するであろう。
【０２１７】
割り当てモジュール５０８は、一実施形態において、クライアント１１０へ既に割り当てられたＬＩＤに加えて、ＬＩＤをクライアント１１０に割り当てることにより、クライアント１１０へ割り当てられるＬＩＤを拡張することができる。さらに、クライアント１１０へ割り当てられるＬＩＤは、それらを割り当てられていないＬＩＤのプールへ戻すために、特定のＬＩＤを割り当て解除することによって、減少させることができる。他の実施形態において、割り当てられたＬＩＤのサブセットは、割り当て、割り当て解除、増加、減少させる等ができる。例えば、編成内のユーザへ割り当てられるＬＩＤは、割り当てを解除されてもよく、そうするとユーザへ割り当てるＬＩＤが依然としてその編成へ割り当てられるが、ユーザへは割り当てられないようになる。
【０２１８】
装置５００は、一実施形態において、割り当て問い合わせ要求モジュール５１０、割り当て問い合わせ判定モジュール５１２、割り当て問い合わせ応答モジュール５１４を含む。割り当て問い合わせ要求モジュール５１０は、割り当て問い合わせをデータ記憶デバイスから受け取る。割り当て問い合わせ要求モジュール５１０は、クライアント１１０、ファイルサーバ１１４／ファイルシステム、マスタ割り当てマネージャ１２４等のようなある要求デバイスから、割り当て問い合わせを受け取る。割り当て問い合わせは、論理空間を割り当てること、あるいは割り当てられている論理空間の関連する管理についての情報に対する要求を含むことができる。例えば、割り当て問い合わせは、割り当てられたＬＩＤを特定する要求、割り付けられたＬＩＤを特定する要求、および割り付けられたＬＩＤではなく、かつ未割り当てられたＬＩＤではないか、あるいはＬＩＤの範囲ではない割り当てられたＬＩＤを特定する等の要求であってもよい。
【０２１９】
割り当て問い合わせは、論理的な割り当て、論理容量、物理容量、または割り当て問い合わせ内の規準に適合する他の情報についての情報を含むことができる。その情報は、メタデータ、ステータス、論理的な関連付け、過去に使用された使用法、フラグ、コントロール等を含むことができる。当業者は、他の割り当て問い合わせおよび割り当て問い合わせに応答して戻される情報の種類を認識するであろう。
【０２２０】
割り当て問い合わせは、割り当て問い合わせ判定モジュール５１２に、割り当て要求を対応させることを可能にする一種の規準を含む。割り当て問い合わせ判定モジュール５１２は、一実施形態において、割り当て問い合わせ内において特定される規準に適合する１つ以上のＬＩＤを特定する。特定されるＬＩＤは、割り付けられる割り当てられたＬＩＤ、未割り付けである割り当てられたＬＩＤ、および割り当てられていないＬＩＤ等を含む。
【０２２１】
割り当て問い合わせ応答モジュール５１４は、割り当て問い合わせ内の指示通りに、クライアント１１０へ要求デバイスまたは別のデバイスを対象とする問い合わせの結果を伝える。割り当て問い合わせの結果は、特定されるＬＩＤ、規準に適合するＬＩＤが見つからなかったことの確認、割り当て問い合わせ内の規準に適合するＬＩＤが見つからなかったことの確認、ＬＩＤの割り付け／未割り付けステータス、または論理的な記憶容量等のリストを含むことができる。典型的に、割り当て問い合わせ応答モジュール５１４は、ステータス情報を戻し、戻されるその情報は、当業者に知られるＬＩＤを管理し割り当てることに関連するあらゆる情報を含むことができる。
【０２２２】
装置５００は、別の実施形態において、データ記憶デバイスの論理空間をデータ記憶デバイスの内側から管理する論理空間管理モジュール５１６を含む。例えば、論理空間管理モジュール５１６は、論理空間を、記憶コントローラ１０４またはデータ記憶デバイスの記憶デバイス１０６と関連付けられるドライバ１１８から管理することができる。論理空間管理モジュール５１６は、割り付けられていないＬＩＤおよび割り付けられたＬＩＤを、例えば、論理対物理マップ内、インデックス内、または他のデータ構造において、追跡することができる。割り付けられたＬＩＤは、１つ以上の割り付けられたＬＩＤに対応する１つ以上のデータパケットからのデータが記憶デバイス１０６上に記憶される１つ以上の物理アドレスにマップされるＬＩＤである。
【０２２３】
論理空間管理モジュール５１６は、様々な実施形態において、上述のように割り当て要求および割り当て問い合わせ、ならびに割り当てに関連する他の機能の対応することができる。論理空間管理モジュール５１６は、割り当て解除要求を要求デバイスから受け取ることを含んでもよい。割り当て解除要求は、１つ以上の割り当てられたＬＩＤを未割り当て状態へ戻す要求を典型的に含むことができ、次いで、要求デバイスまたは他の指定されるデバイスに、成功した割り当て解除を伝える。割り当て解除要求は、割り当てられる関連ＬＩＤを保ち、次いで要求デバイスまたは他の指定されるデバイスへ成功した割り当て解除を伝える１つ以上の記憶位置を戻す要求を含むことができる。これは、透過的である場合があるか、あるいは割り当て解除要求が、論理的／物理的割り当て解除が要求と同時に起こるべきであるという指示を含むように拡張されることを要求する場合がある。留意すべきは、割り当て解除要求は、非同期であってもよく、グルーマーに対して試みられてもよいということである。したがって、割り当て解除要求は、完了するまで仮想（時間内においては）であってもよい。割り当ての管理（論理的かつ物理的）は、実際の利用可能な空間から、あらゆる時点において分岐することができる。管理モジュール５１６は、これらの差異を処理するよう設定される。
【０２２４】
論理空間管理モジュール５１６は、ＬＩＤグループコマンド要求を要求デバイスから受け取ることもでき、要求デバイスへＬＩＤグループコマンド要求に対する応答を示す応答を伝えることができる。ＬＩＤグループコマンド要求は、取り入れる動作、例えば、２つ以上のＬＩＤ（「ＬＩＤグループ」）、ＬＩＤグループと関連付けられるメタデータ、ＬＩＤグループと関連付けられるデータ等を含むことができる。例えば、複数ユーザがそれぞれＬＩＤを割り当てられ、そのユーザがグループの一部である場合、ＬＩＤグループコマンドは、複数のユーザのためのＬＩＤの割り当てを解除する、各ユーザへ追加的なＬＩＤを割り当てる、各ユーザのための使用方法情報を戻す等のコマンドであってもよい。ＬＩＤグループコマンドに応答してとられる動作は、メタデータを変更すること、データをバックアップすること、メタデータをバックアップすること、制御パラメータを変更すること、アクセスパラメータを変更すること、データを削除すること、データをコピーすること、データを暗号化すること、データの重複を排除すること、データを圧縮すること、データを解凍すること等を含むこともできる。当業者は、論理空間管理モジュール５１６が行うこともできる他の論理空間管理機能を認識するであろう。
【０２２５】
装置５００は、一実施形態において、論理対物理マップにおいて、割り付けられたＬＩＤを割り付けられた物理アドレスにマップするモジュール５１８をマップすることを含む。論理容量モジュール４０４は、モジュール５１８をマップすることによりマップされる論理対物理マップを使用して、論理空間が十分な未割り当て論理空間を有するかどうかを判定する。論理対物理マップは、割り付けられたＬＩＤ、割り付けられていないＬＩＤ、割り当てられたＬＩＤ、割り当てられていないＬＩＤ、割り当てられたＬＩＤ容量、割り当てられていないＬＩＤ容量等の割り当てを、追跡するために使用することができる。一実施形態において、マッピングモジュール５１８は、複数のマップ内の割り付けられたＬＩＤ、および対応する割り付けられた物理アドレスをマップする。
【０２２６】
例えば、順マップは、与えられたＬＩＤのための割り付けられた物理アドレスを迅速に特定するために使用することができる。順マップは、Ｂツリー、コンテントアドレッサブルメモリ（「ＣＡＭ」）、バイナリツリー、ハッシュ表等、またはまばらに密集した空間もしくは範囲を迅速に検索することを促進する他のデータ構造を含むことができる。まばらに密集した仮想的または論理的な名前空間を迅速に検索する順マップを使用することにより、マッピングモジュール５１８は、論理識別子から１つ以上の物理アドレスを判定する効率的な方法を提供する。
【０２２７】
さらに、逆マップは、物理アドレスに関連する情報に迅速にアクセスし、物理アドレスと関連付けられる論理識別子にリンクするために、使用することができる。逆マップは、物理アドレスからＬＩＤを特定するために使用できる。逆マップは、逆マップの一部分が、記憶空間復旧動作の間、ともに消去されるデータ記憶デバイス１０６の消去領域にわたるように、データ記憶デバイス１０６内のアドレスを消去ブロック等の消去領域内へマップするために使用することができる。消去領域による逆マップの編成は、ストレージ復旧動作の間、有用な情報を追跡することを促進する。例えば、逆マップは、消去領域内の物理アドレスが有効データを有すること、ならびに無効データを有することを含むことができる。有効データが消去領域および消去される消去領域からコピーされる場合、逆マップは、消去領域がデータを含まず、データの連続的な記憶の準備が整っていることを示すように容易に変化し得る。
【０２２８】
順および逆マッピングのより詳細な考察は、２００８年４月８日に出願されたＤａｖｉｄＦｌｙｎｎらに対する「Ａｐｐａｒａｔｕｓ，  Ｓｙｓｔｅｍ，  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｅｆｆｉｃｉｅｎｔ  Ｍａｐｐｉｎｇ  ｏｆ  Ｖｉｒｔｕａｌ  ａｎｄ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓｅｓ，  Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｓｔｏｒａｇｅ」と題される米国特許出願第１２／０９８，４３４号内に含まれ、これを参照することにより本明細書に組み込まれる。ＬＩＤの強力なマッピングおよび記憶システム１０２内の対応する物理アドレスを含むことにより、記憶デバイス１０６内でさえもまた、マッピングは、従来高いレベルで行われてきた仮想プロビジョニング、割り当て機能等のような機能を効率的に強固にする。マッピングモジュール５１８は、従来のシステム内において使用されるマッピングの層を除外する効率的な方法を提供する。
【０２２９】
仮想プロビジョニングされた記憶システムにおいて、１つの潜在的な問題は、ファイルサーバ／ファイルシステムまたはクライアントが、記憶デバイスが利用可能なディスク空間外にあるため、失敗する書き込み要求のみを有するデータを、記憶デバイスへ書き込むことを試みる可能性があることである。ファイルサーバ／ファイルシステムがＰＢＡ対ＬＢＡの１対１のマッピングに依存して利用可能な物理記憶容量を追跡するランダムアクセスデバイスの場合、記憶デバイスが記憶空間を使い果たす見込みは非常に低い。ファイルサーバ／ファイルシステムは、しかしながら、記憶デバイスが実際には仮想プロビジョニングされたシステム、ログ構造ファイルシステム等である場合、記憶デバイスがランダムアクセスであると考える。そのような状況に対し、書き込み要求が失敗しないように、書き込み要求に先立って、または書き込み要求と同時に物理空間を予約することが望ましい。ファイルサーバ／ファイルシステムまたはクライアントが物理記憶空間を予約することを望む可能性がある他の状況も存在する。
【０２３０】
装置５００は、クライアント１１０またはファイルサーバ１１４／ファイルシステムからデータ記憶デバイス（つまり、データ記憶デバイスの一部である記憶デバイス１０６）上の利用可能物理記憶容量を予約する要求を受け取る、記憶システム１０２内に配置される物理空間予約要求モジュール５２０を含む［以下「物理空間予約要求」］。一実施形態において、物理空間予約要求は、クライアント１１０またはファイルサーバ１１４／ファイルシステムによって要求されるある量の物理記憶容量の指示を含む。
【０２３１】
物理記憶容量の要求量の指示は、記憶デバイス１０６の物理容量の単位で表されてもよく、あるいは記憶デバイス１０６の容量他の直接的尺度であってもよい。物理記憶容量を予約する要求はまた、予約された物理記憶容量を、論理的な実体に割り当てる要求を含むことができる。物理記憶容量の量の指示は、同様に間接的に表されてもよい。例えば、ファイルサーバ１１４／ファイルシステムは、多数の論理ブロックを示すことができ、データ記憶デバイスは、各論理ブロックの特定の固定サイズを判定することができ、次いで、論理ブロックの数を物理記憶容量に変換する。当業者は、物理空間予約要求内における物理記憶容量の量の他の指標を認識するであろう。
【０２３２】
物理空間予約要求は、一実施形態において、書き込み要求と関連付けられる。一実施形態において、書き込み要求は、二段階法であり、物理空間予約要求および書き込み要求は、分かれている。別の実施形態において、物理空間予約要求は、書き込み要求の一部であるか、あるいは書き込み要求は暗黙の物理空間予約要求を有しているとして認識される。別の実施形態において、物理空間予約要求は、特定の書き込み要求と関連付けられないが、代わりに計画されたストレージと関連付けられても、記憶空間の単なる割り当てが不十分である重要動作等のための記憶空間を予約することができる。
【０２３３】
特定の実施形態において、データは、アトミックなデータユニットに組織することができる。例えば、アトミックなデータユニットは、パケット、ページ、論理ページ、論理パケット、ブロック、論理ブロック、１つ以上の論理ブロックアドレスと関連付けられるデータのセット（論理ブロックアドレスは、隣接または非隣接であってもよい）、ファイル、ドキュメント、または関連データの他のグループ化であってもよい。
【０２３４】
一実施形態において、アトミックなデータユニットは、複数の非隣接および／または順序が狂った論理ブロックアドレス、または書き込みデータパイプラインが単一のアトミックなデータユニットとして扱う他の識別子と関連付けられる。本明細書に使用される、非隣接および／または順序が狂った論理ブロックを単一書き込み動作において書き込むことは、アトミックな書き込みと呼ばれる。一実施形態において、ハードウェアコントローラは、受け取られた順に動作を進行し、およびクライアントのソフトウェアドライバは、データパイプラインがアトミックな書き込み動作を通常通り進行できるように、単一のアトミックな書き込みのために動作をまとめてハードウェアコントローラへ送る。ハードウェアが順々に動作を進行するため、これは異なる論理ブロックがアドレスまたは既定のアトミックな書き込みのための他の識別子が、ともに書き込みデータパイプライン通って不揮発性メモリへ巡回することを保証する。クライアントは、一実施形態において、取り消し、再処理でき、あるいは電力が復元され復旧すると、失敗したアトミックな書き込みおよび／または他の失敗もしくは終了した動作を処理することができる。
【０２３５】
一実施形態において、装置５００は、アトミックな書き込みのブロックを、特定のブロックがアトミックな書き込みの一部であるかどうかを示すメタデータフラグでマークすることができる。一例のメタデータのマーキングは、メタデータフラグ等とともに、ログ書き込み／付加専用の不揮発性メモリのプロトコルに依存する。データの記憶およびいかなるインターリービングブロック予防のための付加専用のログの使用は、アトミックな書き込みメンバシップメタデータが、単一ビットになることを可能にする。一実施形態において、フラグビットは、０であってもよく、ブロックがアトミックな書き込みのメンバではない限り、次いでビットは１であってもよく、または逆もまた同様である。ブロックがアトミックな書き込みのメンバであり、アトミックな書き込みの最終ブロックである場合、一実施形態において、メタデータフラグは、ブロックがアトミックな書き込みの最終ブロックであることを示すために、０であってもよい。別の実施形態において、異なるハードウェアコマンドは、アトミックな書き込みにおける第１のブロック、アトミックな書き込みの中間メンバブロック、アトミックな書き込みの末尾等のようなアトミックな書き込みの異なるヘッダをマークするために送られてもよい。
【０２３６】
電力損失またはクライアントもしくは記憶デバイスの他の故障から復旧すると、一実施形態において、装置５００は、決定論的方向で不揮発性メモリ上のログをスキャンする（例えば、一実施形態において、ログの開始は末尾であり、ログの最後は先頭であり、データは常に先頭に追加される）。一実施形態において、電力管理装置は、ログの先頭からログの末尾に向かってスキャンする。アトミックな書き込み復旧では、一実施形態において、先頭から末尾までスキャンする際、メタデータフラグビットが０であるなら、ブロックは、単一ブロックのアトミックな書き込みまたは非アトミックな書き込みブロックのどちらか一方である。一実施形態において、メタデータフラグビットが０から１に変化すると、以前のスキャンされたブロックおよび現在のスキャンされたブロックになり得るブロックは、アトミックな書き込みのメンバである。電力管理装置は、一実施形態において、メタデータフラグが０に戻るまでログをスキャンすることを継続し、その時点でログにおいて、以前のスキャンされたブロックがアトミックな書き込みの最終メンバであり、アトミックな書き込みのために記憶される第１のブロックである。
【０２３７】
一実施形態において、不揮発性メモリは、新しい書き込みがログの前面上に来る（つまり、ログの先頭に）、ログベースの付加専用の書き込み構造の書き込みシステムを使用する。さらなる実施形態において、記憶コントローラは、ガーベジコレクションシステム、グルーマー、またはクリーナエージェント等を使用して、ログの削除されたブロック、陳腐化するブロック、および／または無効のブロックを再生する。記憶コントローラは、さらなる実施形態において、付加専用の書き込み構造およびガーベジコレクションの使用を促進するために、論理ブロックアドレスを物理アドレスへマップするために順マップを使用する。
【０２３８】
装置５００は、一実施形態において、データ記憶デバイス（つまり記憶デバイス１０６）が物理記憶空間要求を満たすための物理記憶容量の利用可能量を有するかどうかを判定する物理空間予約モジュール５２２を含む。物理空間予約モジュール５２２が、物理記憶容量の利用可能量が物理空間予約要求を満たすのに適切であると判定する場合、物理空間予約モジュール５２２は、物理記憶空間要求を満たすために、記憶デバイス１０６上の物理記憶容量の利用可能量を予約する。物理記憶空間要求を満たすために予約される物理記憶容量の利用可能量は、予約された物理容量である。
【０２３９】
予約された物理容量の量は、物理空間予約要求内において要求される記憶空間の量と等しい場合があるか、等しくない場合がある。例えば、記憶システム１０２は、記憶デバイス１０６へ書き込まれるデータと併せて、メタデータ、インデックス情報、エラー是正コード等のような追加的な情報を記憶する必要がある場合がある。さらに、記憶システム１０２は、データを暗号化することができ、それは記憶サイズに影響を与えることがある。記憶システム１０２はまた、データを圧縮することができ、物理空間予約要求内において要求された量を満たすことを要求される物理記憶容量の量を減らすことができる。
【０２４０】
一実施形態において、物理空間予約要求は、論理空間の量を含み、物理記憶容量の要求量の指示は、要求された論理空間から得られる。別の実施形態において、物理空間予約要求は、１つ以上のＬＩＤを含み、物理記憶容量の要求量の指示は、ＬＩＤと関連付けられるデータ量から得られる。一実施形態において、ＬＩＤと関連付けられるデータは、書き込み要求内におけるような、ＬＩＤへ割り付けられているデータである。別の実施形態において、ＬＩＤと関連付けられるデータは、ＬＩＤがＬＢＡであって、論理ブロックサイズが要求される物理記憶容量の量を得るために使用することができた場合の事例であるような、各ＬＩＤへ割り当てられるデータ容量である。
【０２４１】
別の実施形態において、物理空間予約要求は、データを記憶する要求である。この実施形態において、物理空間予約要求は、暗示されることがあり、物理記憶容量の要求量の指示は、そのデータと関連付けられるデータおよび／またはメタデータから得ることができる。別の実施形態において、物理空間予約要求は、データを記憶する要求と関連付けられる。この実施形態において、物理記憶容量の要求量の指示は、物理空間予約要求内に示され、データを記憶する要求のデータに相関してもよい。
【０２４２】
物理空間予約モジュール５２２はまた、次いで、物理空間予約要求を満たすために、要求される物理容量の量を判定するための要因メタデータ、圧縮、暗号化等であってもよい。物理空間予約要求を満たすよう要求される物理容量の量は、物理空間予約要求内に示される量と等しい、それより大きい、またはそれより小さくてもよい。
【０２４３】
物理空間予約モジュール５２２が物理空間予約要求を満たすよう要求される量の物理容量を判定すると、物理空間予約モジュール５２２は、記憶システム１０２内の１つ以上の記憶デバイス１０６ａ〜ｎが、単独にまたは組み合わせてのどちらでも、物理空間予約要求を満たすのに十分な利用可能な物理記憶容量を有するかどうかを判定する。要求は、特定の記憶デバイス上（例えば１０６ａ）、記憶デバイス１０６のいくつかがＲＡＩＤ内にある状況になるような場合の記憶デバイス１０６の組み合わせ上の空間、または一般的に記憶システム１０２内にある利用可能な空間に対するものであってもよい。物理空間予約モジュール５２２は、物理空間予約要求の詳細のための利用可能容量の判定を調整することができる。
【０２４４】
物理空間予約要求が１つより多くの記憶デバイス上の空間に対する要求である場合、物理空間予約モジュール５２２は、各記憶デバイス１０６の各論理対物理マップから、または記憶デバイス１０６グループの結合した論理対物理マップから、利用可能な物理記憶容量情報を典型的に読み出すであろう。物理空間予約モジュール５２２は、割り付けられた物理アドレスを典型的に調査する。留意すべきは、物理空間予約モジュール５２２は、ＬＩＤと物理アドレスとの間に１対１の関係が典型的に存在しないため、割り付けられたＬＩＤを検索することによって利用可能な物理容量を判定するために十分な情報を有しない可能性があることである。
【０２４５】
物理空間予約モジュール５２２は、一実施形態において、物理空間予約要求内に、要求される容量の量を満たすのに十分な利用可能な記憶容量を維持することによって物理記憶容量を予約する。典型的には、ログ構造のファイルシステムまたは他の連続的な記憶デバイスにおいて、物理空間予約モジュール５２２は、記憶デバイス１０６内に特定の物理領域または物理アドレス範囲を予約しないであろうが、代わりに物理記憶容量を予約するであろう。
【０２４６】
例えば、記憶デバイス１０６は、５００ギガバイト（「ＧＢ」）の利用可能な物理記憶容量を有することができる。記憶デバイス１０６は、１つ以上の付加ポイントにおいてデータを受け取っていて、データを記憶していてもよく、したがって、記憶容量を減らしている。一方で、ガーベジコレクションまたは記憶空間復旧動作は、復旧される消去ブロックを記憶プールへ戻すであろうバックグラウンドにおいて実行されていてもよく、したがって、記憶空間を増やしている。データが記憶され開放される位置は絶えず変化するので、物理空間予約モジュール５２２は、一実施形態において、固定物理記憶位置の予約なしに記憶容量を監視する。
【０２４７】
物理空間予約モジュール５２２は、多数の方法で記憶空間を予約することができる。例えば、物理空間予約モジュール５２２は、記憶デバイス１０６上の利用可能な物理記憶容量が予約される記憶容量まで減少する場合、新しいデータの記憶を停止することができ、記憶デバイス１０６上の物理記憶容量が予約される物理記憶容量を超過するある程度まで減らされた場合、警告を送ることができ、あるいは予約される物理記憶容量を超過する利用可能な記憶容量を保存するであろう他の何らかの動作もしくは動作の組み合わせを送ることができる。
【０２４８】
別の実施形態において、物理空間予約モジュール５２２は、データ記憶デバイス上の物理領域、物理アドレスの範囲等を予約する。例えば、物理空間予約モジュール５２２がいくらかの消去ブロックを予約した場合、物理空間予約要求と関連付けられるデータは、予約された領域またはアドレス範囲内に記憶することができる。データは、予約された記憶領域または範囲内に連続的に記憶されてもよい。例えば、特定の位置において特定のデータを記憶することが望ましい場合がある。当業者は、物理空間予約要求に応答して、特定の領域、アドレス範囲等を予約するための理由を認識するであろう。
【０２４９】
一実施形態において、装置５００は、物理空間予約モジュール５２２が、データ記憶デバイスが物理空間予約要求を満たす量の利用可能な物理記憶空間を有するかどうかを判定することに応答して、クライアント１１０またはファイルサーバ１１４／ファイルシステムへ、物理記憶容量の要求の量の可用性もしくは非可用性の指示を伝送する物理空間予約返答モジュール５２４を含む。例えば、物理空間予約モジュール５２２が利用可能な記憶空間は物理空間予約要求を満たすために適切であると判定する場合、物理空間予約返答モジュール５２４は、物理空間予約モジュール５２２が要求された記憶容量を予約したという通知、または他の適切な通知を伝送することができる。
【０２５０】
一方で、物理空間予約モジュール５２２が、記憶デバイス１０６または記憶システム１０２が物理空間予約要求を満たすのに十分な利用可能な物理記憶容量を有しないと判定する場合、物理空間予約返答モジュール５２４は、失敗通知または要求される物理記憶空間が予約されなかったという他の指標を伝送することができる。要求される記憶空間の可用性または非可用性の指示は、例えば、書き込み動作の失敗の見込みを減らすためにデータを書き込むことに先立って使用してもよい。
【０２５１】
装置５００は、別の実施形態において、取り消しトリガーイベントに応答して、予約された物理記憶空間の全てまたは一部分を取り消す物理空間予約取り消しモジュール５２６を含む。取り消しトリガーイベントは、多数の異なる形式であってもよい。例えば、取り消しトリガーイベントは、記憶デバイス１０６または記憶システム１０２へ書き込まれ、物理空間予約モジュール５２２によって予約される利用可能な空間と関連付けられたデータが、記憶システム１０２内に既に記憶されていたことを判定することを含むことができる。
【０２５２】
例えば、重複除外プロセスが、データは記憶システム１０２内に既に存在すると判定する場合、データは、既に記憶されたデータが２つ以上のＬＩＤにマップされた可能性があるため、再び記憶される必要がない場合がある。より基本的な例において、予約された物理記憶空間が書き込み要求と関連付けられ、書き込み要求が実行される場合、取り消しトリガーイベントは、書き込み要求のデータを記憶することの完了であってもよい。この例において、物理空間予約取り消しモジュール５２６は、予約された物理記憶容量を減らす、あるいは取り消すことができる。
【０２５３】
書き込まれたデータが予約空間より小さい場合、物理空間予約取り消しモジュール５２６は、予約量を単に減らすだけでもよく、または書き込み要求と関連付けられた予約された物理記憶容量を完全に取り消すこともできる。予約された物理空間に満たないところへの書き込みは、データユニットが要求の基盤となるところへデータユニットの一部分を書き込むことに起因し、そこでは、物理空間予約要求と関連付けられるデータが徐々に書き込まれる等である。一実施形態において、物理記憶空間は要求と一致するように物理記憶空間予約モジュール５２２によって予約され、次いで、圧縮または類似する手続きのため、記憶されたデータの記憶空間は、関連付けられる予約された物理記憶容量より小さい。
【０２５４】
別の実施形態において、取り消しトリガーイベントは、タイムアウトである。例えば、物理空間予約要求が書き込み要求と関連付けられ、物理空間予約モジュール５２２が物理記憶容量を予約する場合、書き込み要求と関連付けられたデータが一定時間の期限切れの前に書き込まれないと、物理空間予約取り消しモジュール５２６は、物理記憶空間の予約を取り消すことができる。当業者は、予約された物理容量全てまたは一部分を取り消すための他の理由を理解するであろう。
【０２５５】
物理空間予約モジュール５２２は、一実施形態において、物理記憶容量の予約された量を増やすか、または変更することができる。例えば、物理空間予約要求モジュール５２０は、別の物理空間予約要求と関連付けられる、あるいは関連付けられなくてもよい別の物理空間予約要求を受け取ることができる。物理空間予約要求が以前に予約された物理記憶容量と関連付けられる場合、物理空間予約モジュール５２２は、予約された物理記憶容量を増やすことができる。物理空間予約要求が以前に予約された物理記憶容量と関連付けられない場合、物理空間予約モジュール５２２は、個別に物理記憶容量を予約し、個別に追加的な記憶容量を追跡することができる。当業者は、利用可能な物理記憶容量を要求および予約し、予約された容量を変更または取り消す他の方法を認識するであろう。標準的管理は、物理記憶容量を管理し、ユーザへ行動をとる必要があるという指標を提供するために、ある種の閾値、トリガー、および警報等を含むべきである。典型的に、これは管理システム内において行われる。しかしながら、管理システムが、管理下においてデバイスをプールしなければならないか、あるいは前述のデバイスが、基準が適合した（好ましい）場合にマネージャを割り込むように設定／プログラムされなければならないかのどちらかである。
【０２５６】
装置５００は、別の実施形態において、クライアント１１０またはファイルサーバ１１４／ファイルシステムから書き込みデータへの要求に応答して、１つ以上の割り付けられていないＬＩＤをデータへ割り付け、その割り付けられたＬＩＤをクライアント１１０またはファイルサーバ１１４／ファイルシステムへ伝送するＬＩＤ割り付けモジュール５２８を含む。ＬＩＤ割り付けモジュール５２８は、一実施形態において、ＬＩＤのオンザフライ割り当ておよび割り付けを可能にする。データを書き込み要求は、別の実施形態において、二段階法であってもよい。ＬＩＤ割り付けモジュール５２８は、書き込まれるデータの第１のステップにおいてＬＩＤを割り当てることができ、次いで第２のステップにおいて、データは、割り当てられたＬＩＤとともに書き込むことができる。
【０２５７】
一実施形態において、ＬＩＤ割り当てモジュール４０２は、ＬＩＤを隣接した範囲内に割り当てる。ＬＩＤ割り付けモジュール５２８はまた、ＬＩＤを連続的な範囲内に割り当てることができる。論理空間が大きい場合、ＬＩＤ割り当てモジュール４０２は割り当てられたＬＩＤを断片化する必要はないが、連続的であるＬＩＤの範囲を選択することができる場合がある。別の実施形態において、ＬＩＤ割り当てモジュール４０２は、隣接していなくてもよく、他の割り当てられた論理空間がちりばめられている論理空間を使用することができるＬＩＤを割り付ける。
【０２５８】
装置５００は、別の実施形態において、ダイレクトメモリアクセス（「ＤＭＡ」）および／またはリモートＤＭＡ（「ＲＤＭＡ」）動作内のクライアント１１０からデータを引き寄せるＤＭＡモジュール５３０を含む。データは、ＬＩＤ割り当てモジュール４０２によって割り付けられるＬＩＤと関連付けられる。データは、書き込み要求等のデータを記憶する要求によってまず特定され、次いで記憶コントローラ１０４は、クライアント１１０から記憶システム１０２内の記憶デバイス１０６へデータを引き寄せるために、ＤＭＡおよび／またはＲＤＭＡを次いで実行する。別の実施形態において、書き込み要求は、ＤＭＡまたはＲＤＭＡを使用しないが、代わりに書き込み要求がそのデータを含む。さらに、データは、ＬＩＤ割り当てモジュール４０２によって割り付けられるＬＩＤと関連付けられる。
【０２５９】
一実施形態において、装置５００は、削除モジュール５３２を含む。データ記憶デバイスからデータを削除する要求に応答して、一実施形態において、削除モジュール５３２は、削除されるデータが記憶されていた記憶空間と、対応するＬＩＤとの間のマッピングを除去する。削除モジュール５３２はまた、削除されたデータの１つ以上の物理アドレスの割り付けを解除することができ、削除されたデータの１つ以上の物理アドレスの割り当てを解除することもできる。
フローチャート
【０２６０】
図６は、本発明に従ってデータ記憶空間を割り当てるための方法６００の一実施形態を図示する概略フローチャート図である。方法６００が開始し、割り当て要求モジュール４０２は、クライアント１１０、ファイルサーバ１１４／ファイルシステム、マスタ割り当てマネージャ１２４等のような要求デバイスから、論理容量を割り当てる割り当て要求を受け取る６０２。割り当て要求は、データ記憶デバイスにおいて受け取られる。論理容量はデータ記憶デバイス上にデータを記憶するためのものである。
【０２６１】
論理容量モジュール４０４は、データ記憶デバイスの論理空間が割り当て要求を満たすのに十分な未割り当て論理空間を含むかどうかを判定する６０４し、その判定は論理対物理マップの検索を含む。論理対物理マップは、割り付けられたＬＩＤに対応するデータがデータ記憶デバイス上に記憶され、割り付けられたＬＩＤが、割り付けられたＬＩＤに対してマップされる１つ以上の物理アドレスとは異なる１つ以上の物理位置へマップされる論理空間の割り付けられたＬＩＤを含む。割り当て応答モジュール４０６が要求デバイスへ応答を伝え６０６、方法６００は終了する。
【０２６２】
図７は、本発明に従ってデータ記憶空間を割り当てるための方法７００の一実施形態を図示する概略フローチャート図である。方法７００が開始し、物理容量要求モジュール５０２は、要求デバイスから物理容量要求を受け取る７０２。物理容量要求は、データ記憶デバイスにおいて受け取られる。物理容量要求は、データ記憶デバイス内の物理記憶容量の利用可能量の要求を含む。物理容量要求は、例えば、物理容量の特定の量であってもよく、データ等を記憶する要求から導き出されることができる。
【０２６３】
物理容量割り当てモジュール５０４は、物理記憶容量の利用可能量がデータ記憶デバイス内の未割り付け記憶位置の物理記憶容量を含む、データ記憶デバイス上の物理記憶容量の利用可能量を判定する７０４。物理容量応答モジュール５０６は、物理容量割り当てモジュール５０４がデータ記憶デバイス上の物理記憶容量の利用可能量を判定することに応答して、要求デバイスへ応答を伝え７０６、方法７００は終了する。
【０２６４】
図８は、本発明に従って物理記憶空間を予約するための方法８００の一実施形態を図示する概略フローチャート図である。方法８００が開始し、物理空間予約要求モジュール５２０は、利用可能な物理記憶空間を予約するための物理空間予約要求を受け取る８０２。物理空間予約要求は、物理記憶容量の要求量の指示を含む。物理記憶容量の量の指示は、多数のバイトもしくは多数の論理ブロック、特定のデータを記憶する要求、または物理記憶量の指示が要求から導き出される他の間接的な指示等の多くの形状をとることができる。
【０２６５】
物理空間予約モジュール５２２は、データ記憶デバイスが物理記憶空間要求を満たすために利用可能な物理記憶容量を有するかどうかを判定する。物理空間予約モジュール５２２が、データ記憶デバイスは物理記憶空間要求を満たすために利用可能な物理記憶容量を有することを判定する８０４場合、物理空間予約モジュール５２２は物理空間予約要求を対応するために適切な物理記憶容量を予約し８０６、物理空間予約返答モジュール５２４は、要求クライアント１１０またはファイルサーバ１１４／ファイルシステムへ要求された物理記憶空間が予約されるという指示を送る８０８。
【０２６６】
物理割り当てモジュール４０４は、予約と関連付けられたデータを記憶することによって予約が使用されるまで、または予約が取り消されるまで、物理記憶容量の予約を維持するために十分に利用可能な物理記憶容量を維持し８１０、方法８００は終了する。物理空間予約モジュール５２２が、データ記憶デバイスが物理記憶空間要求を満たすために利用可能な物理記憶容量を有しないことを判定する場合８０４、物理空間予約返答モジュール５２４は、要求された物理記憶空間が予約されないという指示または不十分な容量の指示を要求クライアント１１０またはファイルサーバ１１４／ファイルシステムへ送り８１２、方法８００は終了する。
【０２６７】
図９は、本発明に従って、割り当てられた論理識別子をデータ記憶デバイス内に割り付けるための方法９００の一実施形態を図示する概略フローチャート図である。方法９００が開始し、ＬＩＤ割り付けモジュール５２８がクライアント１１０から書き込み要求を受け取る９０１。他の実施形態において、要求はファイルサーバ１１４／ファイルシステム内またはシステム１００、１０１、１０３内の他の構成要素で始まる。書き込み要求は、データがいかなる論理識別子にも割り付けられておらず、または論理識別子がデータに割り当てられてない、記憶システム１０２内の１つ以上の記憶デバイス１０６にデータを書き込むための要求である。要求は、記憶システム１０２よって受け取られてもよく、記憶コントローラ１０４または他の構成要素はＬＩＤが書き込み要求内のデータに割り付けられておらず、未割り付けであることを認識することができ、要求はＬＩＤ割り付けモジュール５２８に転送される。
【０２６８】
ＬＩＤ割り付けモジュール５２８は、１つ以上の割り付けられていないＬＩＤをデータに割り付ける９０４。記憶コントローラ１０４は、記憶デバイス１０６上にデータを記憶し、マッピングモジュール５１８は、データが記憶された１つ以上の物理アドレスを割り付けられたＬＩＤにマップする９０８。データが記憶デバイス１０６上に連続的に記憶される場合、データが記憶される物理アドレスは、典型的には書き込み要求より前には知られておらず、データを記憶した後か直前に決定される。ＬＩＤ割り付けモジュール５２８は、割り付けられたＬＩＤをクライアント１１０へ伝え９１０、方法９００は終了する。通信はデータの記憶が成功であったという確認の一部になり得る。
【０２６９】
図１０は、本発明に従って、割り当てられた論理識別子をデータ記憶デバイス１０６内に割り付けるための方法１０００の別の実施形態を図示する概略フローチャート図である。方法１０００は開始し、ＬＩＤ割り付けモジュール５２８は、ＬＩＤが要求を作成するクライアント１１０に割り当てられたデータへＬＩＤを割り付けるための要求を受け取る１００２。別の実施形態において、要求は、ファイルサーバ１１４／ファイルシステムまたはシステム１００、１０１、１０３内の他のデバイスから来る。ＬＩＤ割り付けモジュール５２８は、要求を作成するクライアント１１０に割り当てられるデータへＬＩＤを割り付ける１００４。ＬＩＤ割り付けモジュール５２８は、クライアント１１０に割り付けられたＬＩＤを伝える１００６。
【０２７０】
記憶システム１０２は、データがそのデータと関連付けられる割り付けられたＬＩＤを有する、記憶システム１０２内の記憶デバイス１０６にデータを書き込むための書き込み要求を受け取る１００６。他の実施形態において、書き込み要求は、記憶デバイス１０６がＲＡＩＤされる、またはデータが主要な記憶デバイス１０６およびミラー記憶デバイス１０６へ書き込まれる場合においては、記憶システム１０３内の１つより多くの記憶デバイス１０６上にデータを記憶するためのものである。記憶コントローラ１０４は記憶デバイス１０６上にデータを記憶し１０１０、マッピングモジュール５１８が、データが記憶される１つ以上の物理アドレスを割り付けられたＬＩＤにマップする１０１２。記憶コントローラ１０４または記憶システム１０２内の他の構成要素は、要求クライアント１１０へ書き込み確認を伝え１０１４、方法１０００は終了する。
【０２７１】
図１１は、本発明に従って、データ記憶デバイスにおいて割り当て問い合わせに対応するための方法１１００の実施形態を図示する概略フローチャート図である。割り当て問い合わせ要求モジュール５１０は、データ記憶デバイスにおいて割り当て問い合わせ受け取る１１０２。割り当て問い合わせ判定モジュール５１２は、割り当て問い合わせ内において規定される基準に適合する１つ以上のＬＩＤを特定する１１０４。特定されたＬＩＤは、割り付けられた割り当てられたＬＩＤ、未割り付けの割り当てられているＬＩＤ、および／または割り当てられていないＬＩＤを含む。割り当て問い合わせ応答モジュール５１４は、要求デバイスまたは他の指定されたデバイスに割り当て問い合わせの結果を伝え１１０６、方法１１００は終了する。結果は、特定されたＬＩＤの一覧、基準に適合するＬＩＤが見つけられたという確認、割り当て問い合わせ内の基準に適合するＬＩＤが見つけられなかったという確認等、を含むことができる。
【０２７２】
図１２は、ＬＩＤを不揮発性記憶デバイス（例えば、記憶デバイス１０６）上の記憶位置と関連付けるための例示的なデータ構造の略ブロックである。インデックス１２０４は、複数の記憶エントリ（例えば、エントリ１２０８、１２１４、１２１６等）を備えるツリー（または他のデータ構造）を含むことができる。インデックス１２０４内の各記憶エントリは、ＬＩＤ（またはＬＩＤ範囲もしくはセット）を不揮発性記憶デバイス１０６の１つ以上の記憶位置と関連付けることができる。記憶位置は、ＬＩＤ１２１７（例えば、エントリ１２１４内において描写されるように）、ＬＩＤ範囲、セット等によって特定されるおよび／またはインデックス付けされてもよい。インデックス１２０４内の記憶エントリは、単一記憶エントリ（例えば、エントリ１２１４）が、ＬＩＤのセット、ＬＩＤ範囲等を参照できるように、可変のサイズまたは長さであってもよい。記憶エントリのＬＩＤは、隣接していてもよい（例えば、０７２〜０８３）。１２１８等の他のエントリは、ＬＩＤの非隣接のセットを含むことができる（例えば、ＬＩＤ４５４〜４７７および５３５〜５９８）。したがって、インデックス１２０４は、可変サイズの記憶エントリ（例えば、ＬＩＤの任意のセットまたは範囲のデータを含む不揮発性記憶デバイス１０６の１つ以上の記憶位置に対応する記憶エントリ）を表すために使用することができる。
【０２７３】
図１２において示されるように、記憶エントリは、ＬＩＤによってインデックス付けすることができ（エッジ１２１０等のエッジを使用して）、これは高速かつ効率的な記憶エントリ検索を可能にすることができる。ＬＩＤ「１８２」を含む記憶エントリの例示的な検索は、次のように進行することができる。検索は、図１２の例においては記憶エントリ１２０８である、ルート記憶エントリにおいて開始することができる。単一ＬＩＤ（またはアドレス範囲）が、ルート記憶エントリ１２０８等のような特定の記憶エントリにおいて含まれるところでは、検索されているＬＩＤ（「１８２」）が記憶エントリ１２０８のＬＩＤより低い場合、検索は、有向エッジ１２１０を記憶エントリ１２０８の左側へ続けていくことができる。検索されたＬＩＤ（「１８２」）が、現在の記憶エントリ１２０８に一致する場合（例えば、記憶エントリ１２０８の範囲内に位置する）、検索は現在の記憶エントリ１２０８が特定され終了することが成功する。検索されるＬＩＤ１２０６が現在のエントリ１２０８の範囲より大きい場合、検索は、有向エッジ１２１２を現在の記憶エントリ１２０８の右側へ続けていくことができる。記憶エントリが２つのＬＩＤまたはアドレス範囲（例えば、エントリ１２１８内において示されるような不連続のセット）を含み、検索されるＬＩＤ（「１８２」）が記載される仮想アドレスの間に落ちる場合、検索は、中央の有向エッジ（示されない）を現在のエントリ１２０８の２つのＬＩＤの間に落ちるＬＩＤを有するエントリへ続けていく。検索は、記憶エントリが特定されるまで、または葉記憶エントリが達するまでインデックス１２０４を続けていき、検索は失敗する。図１２の例において、検索は、記憶エントリ１２１６（例えば、記憶エントリ１２１６が検索されるＬＩＤ（「１８２」を含む））に一致するところで終了することが成功する。
【０２７４】
図１２の例において、インデックス１２０４は、ＬＩＤによってインデックス付けされるＢツリーのデータ構造を使用して実現されるが、他の実施形態において、インデックス１２０４は、内容アドレス可能メモリ（「ＣＡＭ」）、バイナリツリー、ハッシュテーブル、または当技術分野において既知の他のデータ構造を使用して実現されてもよく、サイズインデックス付け、記憶位置インデックス付け（例えば、以下に記載される逆マップ１２２２のように）等のような他の型のインデックス付けを含んでもよい。
【０２７５】
インデックス１２０４内の各記憶エントリは、１つ以上のＬＩＤを不揮発性記憶デバイス１０６の各記憶位置（１つまたは複数）と関連付けることができる。例えば、エントリ１２１４は、ＬＩＤ範囲０７２〜０８３を記憶位置９５〜１０６と関連付けることができる。いくつかの実施形態において、記憶位置は、物理アドレスによって特定される場合がある。当業者は、記憶位置の物理アドレスが、インデックス１２０４内に記憶されてもよく、またはソリッドステート記憶媒体の１つ以上の記憶構造中へのオフセットであってもよいことを認識するであろう。上述のように、記憶エントリ１２１４の記憶位置は、基礎的なデータへの変更に起因して（例えば、変更、復旧動作、または同様のものに起因して）変化することができる。
【０２７６】
記憶エントリは、年代、サイズ、ＬＩＤ属性（例えば、クライアント識別子、データ識別子、ファイル名称、グループ識別子）等のようなＬＩＤに関するメタデータを含むことができるメタデータ１２１９をさらに含むおよび／または参照することができる。メタデータ１２１９が、ＬＩＤ（例えば、アドレス１２１５）によってインデックス付けされる記憶エントリと関連付けられるため、メタデータ１２１９は、不揮発性記憶デバイス１０６上の基礎的な記憶位置の配置への変更にも関わらず（例えば、記憶位置１２１７への変更）、記憶エントリ１２１４と関連付けられるままであってよい。
【０２７７】
インデックス１２０４は、不揮発性記憶デバイス１０６が、クライアント要求において参照される記憶エントリを含むかどうかを効率的に判定するために、および／またはデバイス１０６上のデータの記憶位置を特定するために使用することができる。例えば、不揮発性記憶デバイス１０６は、特定のＬＩＤを割り当てるためのクライアント要求１２０２を受け取ることができる。要求１２０２は、特定のＬＩＤ、ＬＩＤおよび長さまたはオフセット（例えば、ＬＩＤ０７４から始まるデータの３ユニットを要求する）、ＬＩＤのセット等を特定することができる。代替として、またはさらに、クライアント要求１２０２は、ＬＩＤのセット、ＬＩＤ範囲（連続または不連続）等を含んでもよい。
【０２７８】
不揮発性記憶デバイス１０６は、要求されたＬＩＤに対応する記憶エントリがインデックス１２０４内にあるかどうかを上述の検索動作を使用して判定することができる。要求されたＬＩＤを含む記憶エントリが、インデックス１２０４内に見つけられる場合、要求１２０２と関連付けられるＬＩＤ（１つまたは複数）は、割り当て済みおよび割り付け済みとして特定することができる。したがって、ＬＩＤ（１つまたは複数）に対応するデータは、不揮発性記憶デバイス１０６上に記憶することができる。ＬＩＤ（１つまたは複数）がインデックス１２０４内に見つけられない場合、ＬＩＤ（１つまたは複数）は、未割り付けとして特定することができる（しかし割り当て済みであってもよい）。記憶エントリが、ＬＩＤのセットおよび／またはＬＩＤ範囲を表すことができるため、クライアント要求は部分的な割り当てをもたらす可能性がある。例えば、０６８〜０７３を割り当てる要求は、ＬＩＤ０６８〜０７１を割り当てることが成功となり得るが、記憶エントリ１２１４内に含まれているので、０７２および０７３を割り当てることに失敗する場合がある。部分的な割り当てのイベントにおいて、全ての割り当て要求が失敗することがあり、利用可能なＬＩＤが割り当てられ、他のＬＩＤが失敗したＬＩＤの代わりになる等の場合もある。
【０２７９】
図１２に描写される例において、記憶要求１２０２に対応する記憶エントリは、インデックス１２０４内にあり（記憶エントリ１２１４）、したがって要求１２０２と関連付けられるＬＩＤが、割り当て済みかつ割り付け済みとして特定さる。したがって、クライアント要求１２０２が特定のＬＩＤにおいてデータを読み込むためのものである場合、データは記憶エントリ１２１４内において特定される記憶位置１２１７から読み込まれ、発信者または要求へ戻されてもよい。クライアント要求１２０２が特定されたＬＩＤを割り当てるためのものである場合、割り当て要求は失敗する可能性がある（および／または代替のＬＩＤが上述のように割り当てられてもよい）。
【０２８０】
新しい記憶エントリがインデックス１２０４に追加される際、マージ動作が起こる可能性がある。マージ動作において、既存の記憶エントリは、１つ以上の他の記憶エントリと「マージされる」ことができる。例えば、ＬＩＤ０８４〜０８８のための新しい記憶エントリは、エントリ１２１４とマージされてもよい。マージは、新しいアドレス（例えば、０７２〜０８８）を含むように、および／またはデータが記憶された記憶位置を含むために記憶位置１２１７を参照するように、記憶エントリのＬＩＤ１２１５を変更することを含んでもよい。
【０２８１】
インデックス１２０４内の記憶エントリが、記憶位置（例えば、アドレス１２１７）への参照を含むように示されるが、本開示はこの点に限定されない。他の実施形態において、記憶エントリは、記憶位置への参照または間接的なリンクを含む。例えば、記憶エントリは、記憶位置識別子（または逆マップ１２２２への参照）を含むことができる。
【０２８２】
図１２は、不揮発性記憶デバイス１０６の記憶位置を論理アドレス空間内のＬＩＤと関連付けることができる逆マップ１２２２を含むインデックスの別の例を描写する。逆マップ１２２２はまた、記憶位置を有効性指標１２３０等のメタデータ、および／または他のメタデータ１２３６（以下に記載される）と関連付けることもできる。いくつかの実施形態において、記憶位置アドレス１２２６および／または長さ１２２８は、逆マップ１２２２内に明確に含まれてもよい。代替として、記憶位置アドレス１２２６および／またはデータ長１２２８は、逆マップ１２２２内のエントリの位置および／または配置から推論することができ、したがって、アドレス１２２６および／またはデータ長１２２８は省略されてもよい。いくつかの実施形態において、逆マップ１２２２は、ＬＩＤ１２３４への参照を含むことができる。
【０２８３】
上述のように、逆マップ１２２２は、データが記憶されたシーケンス（例えば、記憶位置の「年代」等と同様に）を示すためのシーケンス指標ー（例えば、タイムスタンプ）等の、記憶位置上で行われる連続的な記憶動作に関するメタデータを含む場合があるメタデータ１２３６を含むことができる。メタデータ１２３６は、摩耗レベル、信頼性、エラー率、妨害ステータス等のような記憶媒体に関するメタデータをさらに含んでもよい。メタデータ１２３６は、信頼できないおよび／または使用できない記憶位置を特定するために使用されてもよく、不揮発性記憶デバイス１０６の物理記憶容量を減らすことができる。
【０２８４】
逆マップ１２２２は、不揮発性記憶デバイス１０６の記憶区分（例えば、消去ブロック）に従って組織されてもよい。この例において、記憶エントリ１２１８に対応するエントリ１２２０は、消去ブロックｎ１２３８内に位置する。消去ブロックｎ１２３８は、消去ブロックｎ−１  １２４０に先行し、消去ブロックｎ＋１  １２４２が続く（消去ブロックｎ−１およびｎ＋１のコンテンツは示されていない）。消去ブロックは、所定数の記憶位置を含む場合がある。消去ブロックは、ストレージ復旧動作において同時に消去される不揮発性記憶デバイス１０６内の領域を指すことができる。
【０２８５】
有効性メタデータ１２３０は、不揮発性記憶デバイス１０６の利用可能な物理記憶容量（例えば、物理容量（または計上される容量）と有効データを含む記憶位置との間の差異）を判定するために使用することができる。逆マップ１２２２は、物理記憶空間の効率的な走査を可能にするために（例えば、グルーミング動作を行い、物理記憶容量を判定する等のため）、記憶区分（例えば、消去ブロック）または消去領域によって配置されてもよい。したがって、いくつかの実施形態において、利用可能な物理容量は、利用可能な物理記憶容量を特定するために（および／または有効データを記憶するために使用されている）逆マップ１２２２内の記憶位置および／または消去ブロックを走査することによって判定されてもよい。
【０２８６】
代替として、またはさらに、逆マップ１２２２（または他のデータ構造）は、不揮発性記憶デバイス１０６の利用可能な物理容量を追跡するための指標１２３８を含むことができる。利用可能な物理容量の指標１２３８は、記憶デバイス１０６の物理記憶容量（または計上される容量）に初期化することができ、記憶動作が行われるにつれて更新することができる。利用可能な物理記憶容量指標１２３８の更新をもたらす記憶動作は、記憶デバイス１０６上にデータを記憶すること、記憶デバイス１０６上に物理容量を予約すること、物理容量予約を取り消すこと、記憶されたデータのサイズが予約とは異なる場合に予約と関連付けられたデータを記憶すること、信頼できないおよび／または使用できない記憶位置および／または記憶区分（例えば、使用できない記憶位置をとること）を検出することを含むことができるが、それらに限定されない。
【０２８７】
図１３は、不揮発性記憶デバイスの記憶割り当てを管理するためのインデックス１３０４の別の例を描写する。図１３の例において、インデックス１３０４は、１つ以上の割り当てエントリ（例えば、割り当てエントリ１３１４）を含むように変更される場合がある。割り当てエントリは、クライアントに割り当てられたが、まだ割り付けられていない（例えば、不揮発性記憶デバイス１０６上において記憶されるデータと関連付けられない）ＬＩＤを追跡するために使用される可能性がある。したがって、記憶エントリ（例えば、エントリ１３０８、１３１６、および１３１８）とは異なり、割り当てエントリ１３１４は、記憶位置１３１７への参照を含まない場合がある、つまりこれらの参照は「関連付けない」、「ＮＵＬＬ」をセットする可能性があるが、省略されてもよい。同様に、割り当てエントリ１３１４と関連付けけられるメタデータ１３１９は、エントリがデータを割り付けられていないおよび／またはデータと関連付けられることを示す場合がある。
【０２８８】
インデックス１３０４は、論理アドレス空間の利用可能な論理容量を（例えば、インデックス１３０４を走査することによって）判定するために使用されてもよい。利用可能な論理容量は、（１３１４等の割り当てエントリを使用して）割り当てられたが、まだ割り付けられていないＬＩＤと同様に、（記憶エントリを使用して）割り付けられるＬＩＤを考慮することができる。
【０２８９】
図１３において示されるように、いくつかの実施形態において、割り当てエントリ１３１４は、記憶エントリとともにインデックス１３０４内において維持されてもよい。代替として、割り当てエントリは、別個のインデックス（または他のデータ構造）内において維持されてもよい。割り当てエントリが不揮発性記憶デバイス１０６上においてデータと関連付けられる場合（例えば、記憶位置と関連付けられる際）、割り当てエントリが、記憶エントリによって変更されるおよび／または再設置される可能性がある。
【０２９０】
いくつかの実施形態において、インデックス１３０４（またはインデックス１２０４）は、論理アドレス空間の利用可能な論理容量を追跡するための指標１３３０を含む場合がある。利用可能な論理容量は、記憶デバイス１０６によって提示される論理アドレス空間に従って初期化される可能性がある。インデックス１３０４への変更は、利用可能な論理容量指標１３３０を更新させる可能性がある。変更は、新しい割り当てエントリの追加、割り当てエントリの除去、記憶エントリの追加、割り当てエントリの除去、または同様のものを含む可能性があるが、それらに限定されない。
【０２９１】
図１４は、不揮発性記憶デバイス内におけるストレージを割り当てるために使用される場合がある未割り当てインデックス１４４４の例を描写する。インデックス１４４４は、上述のＬＩＤインデックス１２０４および／または１３０４内における「ホール」に対応することができる１４５０全体を含むことができる。したがって、利用可能なインデックス１４４４内におけるエントリ１４５０は、利用可能である（例えば、割り当てられていないまた割り付けられていない）ＬＩＤ（および／またはＬＩＤ範囲、セット、または同様のもの）に対応することができる。インデックス１４４４は、論理記憶空間の論理記憶容量を迅速に判定するために、および／またはクライアント要求に応答して割り当てるためのＬＩＤを識別ために使用される可能性がある。図１４の例において、インデックス１４４４内におけるエントリは、ＬＩＤによってインデックス付けされているとして示される。しかしながら、いくつかの実施形態において、インデックス１４４４は、他の（または追加の）手段においてインデックス付けされてもよい。例えば、未割り当てインデックス１４４４は、ＬＩＤと同様に、ＬＩＤ範囲によって（例えば、ＬＩＤ範囲のサイズによって）インデックス付けされてもよい。このインデックス付けは、クライアント要求（例えば、論理アドレス空間内における「ホール」を効率的に埋める）に従う大きさである割り当てられていないＬＩＤを特定するために使用される可能性がある。
【０２９２】
図１５は、ストレージを割り当てるための方法１５００の一実施形態のフロー図である。上述のように、方法１５００のステップは、特定の機械構成要素に結び付けることができ、および／または持続性機械可読記憶媒体上において記憶される機械可読命令を使用して実現することができる。
【０２９３】
ステップ１５１０における不揮発性記憶デバイスは、使用のため初期化される場合がある。初期化は、通信インターフェースのような（例えば、バス、ネットワーク等）不揮発性記憶デバイス（例えば、ソリッドステート記憶デバイス１０６）のためのリソースを割り当てること、揮発性のメモリを割り当てること、ソリッドステート記憶媒体にアクセスすること等を含む可能性がある。初期化は、論理アドレス空間を提示すること、１つ以上のインデックス（例えば、図１２〜１４に関連して上述されるインデックス）を初期化すること等をさらに含む可能性がある。
【０２９４】
ステップ１５２０において、不揮発性記憶デバイスは、１つ以上のクライアントに論理空間を提示することができる。ステップ１５２０は、１つ以上のクライアントにアクセス可能なインターフェース（例えば、ＡＰＩ）または同様のものを実現することおよび／または供給することを含む場合がある。
【０２９５】
ステップ１５３０において、不揮発性記憶デバイスは、方法１５００によって行われる論理的な割り当て動作に関するメタデータを維持することができる。論理的な割り当て動作は、ステップ１５２０において提示される論理アドレス空間内における動作に関連する可能性があり、論理容量を割り当てること、記憶位置へ論理容量を割り付けること等を含む可能性があるが、それらに限定されない。メタデータは、論理アドレス空間内におけるＬＩＤと不揮発性記憶デバイス上における記憶位置とを関連付けるインデックス、記憶位置とＬＩＤとを関連付けるインデックス（例えば、図１２のインデックス１２０４）、記憶位置との関連付けを全く有さない割り当てられたＬＩＤを示す割り当てエントリ（例えば、図１３のインデックス１３０４）、未割り当てインデックス（例えば、図１４のインデックス１４４４）、未割り当て論理アドレス空間の指標（例えば、図１３の指標１３３０）を維持すること等を含む可能性があるが、それらに限定されない。
【０２９６】
ステップ１５４０において、論理アドレス空間内においてＬＩＤに関連するクライアント要求が受け取られる可能性がある。クライアント要求は、特定のＬＩＤおよび／または論理容量が割り当てられ得るかどうかを判定するための問い合わせ、ＬＩＤおよび／または論理容量を割り当てる要求、不揮発性記憶デバイス上においてデータを記憶する要求、または同様のものを含む可能性がある。
【０２９７】
ステップ１５５０において、ステップ１５３０で維持されるメタデータが、クライアント要求が満たされ得るかどうかを判定するために参照される場合がある。ステップ１５５０は、論理アドレス空間の利用可能な論理容量を判定するため、および／または上述の利用可能なＬＩＤ（またはＬＩＤ範囲）を特定するため、ステップ１５３０で維持されるメタデータ（例えば、インデックスおよび／または指標）を参照することを含んでもよい。
【０２９８】
ステップ１５６０において、方法１５００は、クライアント要求への応答を提供することができ、要求が満たされ得ない場合は、その旨を示す応答を提供することを含む。クライアント要求が満たされ得る場合、応答を提供することは、割り当てが満たされ得る指標、要求を満たすＬＩＤを割り当てること、要求を満たす割り当てられたＬＩＤを提供すること、１つ以上の要求されるＬＩＤおよび／または１つ以上の追加のＬＩＤを提供すること、（例えば、ＬＩＤのセットの要求の一部分が、割り当てられ得る場合）、または同様のもののうちの１つ以上を含む可能性がある。
【０２９９】
ステップ１５６０に続き、流れは、方法１５００がステップ１５６０において行われる割り当て動作（もしあれば）に従って、メタデータ（例えば、インデックス、指標等）を更新する可能性がある、ステップ１５３０へ戻る可能性がある。
【０３００】
図１６は、記憶を割り当てるための方法１６００の実施形態を描写するフロー図である。上述のように、方法１６００のステップは、特定の機械構成要素に結び付けられることができ、および／または持続性機械可読記憶媒体上に記憶される機械可読命令を使用して実現されてもよい。
【０３０１】
ステップ１６１０、１６２０、および１６３０において、方法１６００は、初期化され、１つ以上のクライアントに論理記憶空間を提示し、および／または方法１６００によって行われる論理的な動作に関するメタデータを維持することができる。
【０３０２】
ステップ１６３２において、方法１６０２は、方法１６００によって行われる物理記憶動作に関するメタデータを維持する可能性がある。記憶動作は、物理記憶容量を予約すること、物理記憶容量予約を取り消すこと、不揮発性記憶デバイス上においてデータを記憶すること、物理記憶容量を割り当て解除すること、グルーミング動作（例えば、ガーベジコレクション、エラー処理または同様のもの）、物理記憶空間計上、または同様のものを含む可能性があるが、それらに限定されない。上述のように、ステップ１６３２において維持されるメタデータは、論理アドレス空間内におけるＬＩＤと不揮発性記憶デバイス上における記憶位置とを関連付けるインデックス、記憶位置とＬＩＤとを関連付けるインデックス（例えば、図１２のインデックス１２０４）、記憶位置との関連を全く有さない割り当てられたＬＩＤを示す割り当てエントリ（例えば、図１３のインデックス１３０４）、未割り当てインデックス（例えば、図１４のインデックス１４４４）、未割り当て論理アドレス空間の指標を維持すること（例えば、図１３の指標１３３０）、または同様のものを含む可能性があるが、それらに限定されない。
【０３０３】
ステップ１６４２において、不揮発性記憶デバイスの物理記憶容量に関連するクライアント要求が、受け取られる可能性がある。クライアント要求は、物理記憶容量が利用可能であることを判定するための問い合わせ、物理記憶容量を予約する要求、データを記憶する要求、データの割り当てを解除する要求（例えば、ＴＲＩＭ）、または同様のものを含むことができる。
【０３０４】
ステップ１６５０において、ステップ１６３０および／または１６３２において維持されるメタデータは、クライアント要求が満たされることができるかどうかを判定するために参照される場合がある。ステップ１６５０は、不揮発性記憶デバイスの利用可能な物理記憶容量を判定するため、および／または（例えば、割り当てを解除する要求またはＴＲＩＭ内において）上述の特定のＬＩＤと関連付けられる記憶位置を特定するために、ステップ１６３０および／または１６３２においてメタデータを参照することを含む可能性がある。
【０３０５】
ステップ１６６０において、方法１６００は、クライアント要求への応答を提供することができ、要求が満たされ得ない場合は、その旨を示す応答を提供することを含む。クライアント要求が満たされ得る場合、応答を提供することは、クライアント要求が満たし得るおよび／または満たされたことを示すこと、クライアントのための物理記憶容量を予約すること、ならびに物理記憶容量予約を取り消すこと、不揮発性記憶デバイス上においてデータを記憶すること、物理記憶容量の割り当てを解除すること、または同様のもののうちの１つ以上を含む可能性がある。
【０３０６】
本発明は、その精神または本質的特性から逸脱することなく、他の特定の形態で具現化することができる。説明される実施形態は、全ての点において制限するものではなく説明としてのみ考慮されるべきである。したがって、本発明の範囲は、前述の説明ではなく添付の特許請求の範囲によって示される。特許請求の範囲の均等物の意義および範囲内に納まる全ての変更は、その範囲内に包含されるものである。
【図１Ａ】
0005518197.tif 000002
【図１Ｂ】
0005518197.tif 000003
【図１Ｃ】
0005518197.tif 000004
【図２】
0005518197.tif 000005
【図３】
0005518197.tif 000006
【図４】
0005518197.tif 000007
【図５】
0005518197.tif 000008
【図６】
0005518197.tif 000009
【図７】
0005518197.tif 000010
【図８】
0005518197.tif 000011
【図９】
0005518197.tif 000012
【図１０】
0005518197.tif 000013
【図１１】
0005518197.tif 000014
【図１２】
0005518197.tif 000015
【図１３】
0005518197.tif 000016
【図１４】
0005518197.tif 000017
【図１５】
0005518197.tif 000018
【図１６】
0005518197.tif 000019