【手続補正書】
【提出日】平成22年12月6日(2010.12.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ管理装置において、
空データトークン指令を生成するトークン指令生成モジュールであって、クライアントの要求用のストレージ要求に応じてストレージデバイスにデータセグメントトークンを記憶する要求を具え、前記データセグメントトークンが空データセグメントを含むデータセグメントに置換されるトークン指令生成モジュールと、
前記空データトークン指令を前記ストレージデバイスに転送するトークン指令転送モジュールと、
を具えることを特徴とする装置。
【請求項２】
前記トークン指令生成モジュールが、前記ストレージデバイスの既存データを上書きする要求に応じて、空データトークン指令および安全消去コマンドの両方を生成し、前記既存データは、前記ストレージデバイスにおいて、前記空データトークン指令中のデータセグメント識別子と同一のデータセグメント識別子で識別され、前記安全消去コマンドは、前記ストレージデバイスが前記既存データを修正するように指令して、前記既存データはリカバリ不能となり、
前記トークン指令モジュールは、前記安全消去コマンドをさらに転送することを特徴とする請求項１に記載の装置。
【請求項３】
前記既存データがリカバリ不能となるように、前記ストレージデバイスの前記既存データが上書きされたことの確認信号を受信する消去確認モジュールを更に具えることを特徴とする請求項２に記載の装置。
【請求項４】
前記トークン指令生成モジュールが、前記ストレージデバイスの既存データを上書きする要求に応答して、空データトークン指令および暗号化キー消去コマンドの両方を生成し、前記既存データは、前記ストレージデバイスにおいて、前記空データトークン指令中の前記データセグメント識別子と同一のデータセグメント識別子で識別され、前記既存データは、前記ストレージデバイスに前記既存データを記憶するのと関連して受信した暗号化キーを用いて暗号化され、
前記暗号化キー消去コマンドは、前記既存データを記憶するために使用された前記暗号化キーを消去して、前記暗号化キーをリカバリ不能にすることを特徴とする請求項１に記載の装置。
【請求項５】
前記空データトークン指令が、前記データセグメントトークンを具えることを特徴とする請求項１に記載の装置。
【請求項６】
前記空データトークン指令は前記データセグメントトークンを含まず、前記データセグメントトークンを生成するための、前記ストレージデバイスに対するコマンドを具えることを特徴とする請求項１に記載の装置。
【請求項７】
前記空データトークン指令は、一連の反復データからの反復データの少なくとも１つのインスタンスをさらに具えることを特徴とする請求項１に記載の装置。
【請求項８】
前記空データトークン指令が、データセグメント識別子、データセグメント長、及びデータセグメントロケーションのうちの１以上を具えることを特徴とする請求項１に記載の装置。
【請求項９】
前記ストレージデバイスから前記データセグメントを読み取るストレージ要求に応じて、前記ストレージデバイスで記憶される前記データセグメントトークンに対応する前記ストレージデバイスからメッセージを受信する読み取りトークン指令レシーバモジュールであって、前記メッセージが前記データセグメントを表す読み取りトークン指令レシーバモジュールと、
前記ストレージデバイスから受信した前記メッセージから構築された要求クライアントに応答信号を転送する、要求クライアント応答モジュールと、
を更に具えることを特徴とする請求項１に記載の装置。
【請求項１０】
前記メッセージに含まれる情報を使用して、前記データセグメントのデータを再構成するデータセグメント再生成モジュールを更に具え、前記要求クライアントに送られる前記応答信号が前記データセグメントを具えることを特徴とする請求項９に記載の装置。
【請求項１１】
前記要求クライアントに送られる前記応答信号は、前記ストレージデバイスから受信した前記メッセージに含まれる情報を具えることを特徴とする請求項９に記載の方法。
【請求項１２】
前記メッセージが、前記データセグメントトークンを具えることを特徴とする請求項９に記載の装置。
【請求項１３】
前記空データトークン指令を有する前記ストレージ要求が、前記ストレージデバイスのストレージスペースをリザーブする要求を更に具え、要求されたリザーブしたストレージスペースは、前記空データトークン指令によって特定される長さと実質的に同等のストレージスペース量を具えることを特徴とする請求項１に記載の装置。
【請求項１４】
サーバで実行する前記要求クライアントを更に具え、前記要求クライアントは、アプリケーション、ファイルサーバおよびクライアントの少なくとも１つを具えることを特徴とする請求項１に記載の装置。
【請求項１５】
データを管理するオペレーションを行うために実行可能なコンピュータ使用可能プログラムコードを有するコンピュータ読み取り媒体を具えたコンピュータプログラム製品において、前記コンピュータプログラム製品のオペレーションが、
空データトークン指令を有するストレージ要求を生成するステップであって、一連の反復データを含むデータセグメントに応じてデータセグメントトークンをストレージデバイスに記憶する要求を具え、前記データセグメントトークンが、前記データセグメントのデータが実質的にない前記データセグメント、前記データセグメントトークン、及び前記空データトークン指令に置換されるステップと、
前記ストレージデバイスに前記空データトークン指令を転送するステップと、
を具えることを特徴とするコンピュータプログラム製品。
【請求項１６】
ストレージ制御部によって管理される不揮発性ストレージメディアに記憶されるデータを管理するための方法であって、当該方法が、
不揮発性ストレージメディアを管理するように構成されるストレージ制御部に指令を送信するステップであって、前記不揮発性ストレージメディアにおける１又はそれ以上の以前に有効なブロックが、無効なブロックであることを前記指令が示し、前記以前に有効なブロックが既存データを記憶するステップと、
前記１又はそれ以上の以前に有効なブロックを、前記指令に応じた無効なブロックとして記憶するステップと、
を具えることを特徴とする方法。
【請求項１７】
請求項１６に記載の方法において、前記ストレージ制御部が追記のみの書き込みプロセスを用いて前記不揮発性ストレージメディアにデータを記憶するよう構成され、かつ無効なブロックを記憶する不揮発性ストレージメディアを再利用するストレージスペースリカバリプロセスを用いて、前記不揮発性ストレージメディアにストレージスペースを回復させるように構成されることを特徴とする方法。
【請求項１８】
請求項１６に記載の方法において、前記指令が１又はそれ以上の以前に有効なブロックに対するヒントを含み、前記ストレージ制御部が選択的に、前記ヒントに応じてストレージスペースリカバリープロセスを拡張することを特徴とする方法。
【請求項１９】
請求項１６に記載の方法が、前記指示への適合を承認する受取り文字を受信するステップを更に具えること特徴とする方法。
【請求項２０】
請求項１６に記載の方法において、前記不揮発性ストレージメディアが利用可能なストレージ容量を維持するのにストレージスペースリカバリを要求し、前記ストレージ制御部が無効なブロックとして記録したブロックを再利用することによってストレージスペースを回復させることを特徴とする方法。
【請求項２１】
請求項１６に記載の方法において、前記無効なブロックをが削除した既存データのブロック、及び消去した既存データのブロックのうちの１つを含むことを特徴とする方法。
【請求項２２】
ストレージ制御部によって管理される不揮発性ストレージメディアに記憶されるデータを管理するための方法であって、当該方法が、
不揮発性ストレージメディアを管理するように構成されるストレージ制御部に指令を送信するステップであって、前記不揮発性ストレージメディアの１又はそれ以上の以前に有効なデータパケットが、無効なデータパケットであることを前記指令が示し、前記以前に有効なデータパケットが既存データを記憶するステップと、
前記１又はそれ以上の以前に有効なデータパケットが、前記指令に応じた無効なデータパケットとして標識されるステップと、
を具えることを特徴とする方法。
【請求項２３】
請求項２２に記載の方法において、前記ストレージ制御部が追記のみの書き込みプロセスを用いて前記不揮発性ストレージメディアにデータを記憶するよう構成され、かつ前記無効なデータパケットを記憶する不揮発性ストレージメディアを再利用するストレージスペースリカバリプロセスを用いて、前記不揮発性ストレージメディアにストレージスペースを回復させるように構成されることを特徴とする方法。
【請求項２４】
請求項２２に記載の方法において、前記指令が１又はそれ以上の以前に有効なデータパケットに対するヒントを含み、前記ストレージ制御部が選択的に、前記ヒントに応じてストレージスペースリカバリープロセスを拡張することを特徴とする方法。
【請求項２５】
請求項２２に記載の方法が、前記指示への適合を承認する受取り文字を受信するステップを更に具えること特徴とする方法。
【請求項２６】
請求項２２に記載の方法において、前記不揮発性ストレージメディアが利用可能なストレージ容量を維持するのにストレージスペースリカバリを要求し、前記ストレージ制御部が無効なデータパケットとして標識されたデータパケットを再利用することによってストレージスペースを回復させることを特徴とする方法。
【請求項２７】
データを管理するための装置であって、当該装置が、
空データトークン指令を生成するトークン指令生成モジュールであって、クライアントの要求による関連データセグメントの削除に応じて、ストレージデバイスに空データセグメントを記憶する要求を具えるトークン指令生成モジュールと、
前記空データトークン指令を前記ストレージデバイスに転送するトークン指令転送モジュールと、
を具えることを特徴とする装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【発明の名称】空データトークン指令を有する要求デバイスからのデータを管理する装置、システムおよび方法
【技術分野】
【０００１】
関連出願についての相互参照
この出願は、Ｄａｖｉｄ  Ｆｌｙｎｎらによって２００６年１２月６日に出願された米国仮出願番号第６０／８７３，１１１号、発明の名称「エレメンタルブレードシステム」と、Ｄａｖｉｄ  Ｆｌｙｎｎらによって２００７年９月２２日に出願された米国仮出願番号６０／９７４，４７０号、発明の名称「オブジェクト指向型ソリッドステージストレージ用の装置、システムおよび方法」と、の優先権を主張し、上記仮出願は、参照することで本明細書に組み込まれるものとする。
【背景技術】
【０００２】
発明の分野
本発明は、データストレージデバイス中のデータ管理に関し、より詳しくは、空データセグメント指令を使用したストレージデバイス中のデータ管理に関する。
【０００３】
関連技術の説明
通常、データがもはや有用でない場合、そのデータは消去してもよい。多くのファイルシステムにおいて、消去コマンドは、ファイルシステム中のディレクトリ項目を削除するが、データを含有しているストレージデバイス中にはデータは残される。通常、データストレージデバイスは、この種の消去オペレーションには関連していない。データを消去する別の方法は、ゼロ、１、または、その他のヌルデータ文字を、データストレージデバイスに書き込み、実際に消去されたファイルを置換する。しかしながら、このことが非効率的であるのは、上書きされるデータを転送するとき、有効なバンド幅が使用されてしまうからである。
【０００４】
いくつかのストレージデバイスにおいては、本明細書で記載されているソリッドステートストレージデバイス１０２のように、追記型及びガーベージコレクション型のストレージデバイスではないので、以前に記憶されていたデータをアップデートすることで、既存のデータは上書きされない。このようなデバイスに１のストリングまたはゼロのストリングで上書きする試みは、既存のデータを上書きする意図を満たすことなく、有用なスペースを占有するだけである。これらの追記型及びガーベージコレクション型のデバイスについては、ソリッドステートストレージデバイス１０２など、クライアント１１４は、通常、データを消去するためにデータを上書きする能力を有していない。
【０００５】
反復文字のストリングまたは文字ストリングを受信したとき、受信データは、高度に圧縮可能であるが、通常、圧縮は、ストレージデバイスに転送する前にファイルシステムによってなされる。一般的なストレージデバイスは、圧縮データと未圧縮データとを区別することができない。さらに、このようなストレージデバイスは、消去されるファイルを読み取るコマンドを受信してから、ストレージデバイスは、要求デバイスにゼロ、１またはヌル文字のストリームを転送することができる。繰り返しとなるが、消去ファイルを表すデータを転送するためのバンド幅が必要となる。
【発明の概要】
【０００６】
上述した説明から、ストレージデバイスが、空データセグメント、または、反復文字若しくは文字ストリングを有するデータ、を表すデータセグメントトークンを記憶することができるように、データを消去する指令を受信するストレージデバイスに関する装置、システムおよび方法が必要なことが明らかである。この装置、システムおよび方法は、既存のデータも消去することができ、最終的に使用されているストレージスペースは、小さなデータセグメントトークンを具える。開示される装置、システムおよび方法は、先行技術の欠陥のいくつか又は全てを解決する。
【０００７】
本発明は、当分野の現状に合わせて開発され、具体的には、現在入手できるデータ管理システムによって完全に解決されていない当分野の問題および要求に対応している。従って、本発明は、上述した当分野の問題点の多くまたは全てを克服するデータ管理装置、システムおよび方法を提供するために開発された。
【０００８】
データを管理する装置は、トークン指令生成モジュールおよびトークン指令転送モジュールを含む複数のモジュールを具える。トークン指令生成モジュールは、トークン指令を有するストレージ要求を生成する。このトークン指令は、ストレージデバイスにデータセグメントトークンを記憶する要求を具える。トークン指令は、データセグメントとして記憶される一連の反復同一文字または一連の反復同一文字ストリングを置換する。トークン指令は、少なくともデータセグメント識別子およびデータセグメント長を具える。データセグメントトークンおよびトークン指令は、データセグメントのデータが実質的にない。トークン指令転送モジュールは、トークン指令をストレージデバイスに転送する。
【０００９】
一実施例においては、トークン指令生成モジュールは、ストレージデバイスの既存データを上書きする要求に応答するトークン指令および安全消去コマンドの両方を生成する。既存データは、ストレージデバイスにおいて、トークン指令中のデータセグメント識別子と同一のデータセグメント識別子として識別される。安全消去コマンドは、ストレージデバイスが既存データを修正するように指令し、既存データはリカバリ不可能である。一実施例においては、トークン指令モジュールは、安全消去コマンドを転送する。さらなる実施例においては、本発明の装置は、消去確認モジュールを具え、この消去確認モジュールは、既存データがリカバリ不能なように、ストレージデバイスの既存データが文字で上書きされたという確認信号（ｃｏｆｉｒｍａｔｉｏｎ）を受信する。
【００１０】
一実施例においては、トークン指令生成モジュールは、トークン指令と、ストレージデバイスの既存のデータを上書きする要求に応答する暗号化キー消去コマンドと、の両方を生成する。既存データは、ストレージデバイスでは、トークン指令中のデータセグメント識別子と同一のデータセグメント識別子として識別され、既存データは、ストレージデバイスの既存データの記憶と合わせて受信される暗号化キーを用いて暗号化される。一実施例においては、暗号化キー消去コマンドは、既存データを記憶するのに使用された暗号化キーを消去し、暗号化キーはリカバリ不能となる。
【００１１】
一実施例においては、トークン指令は、データセグメントトークンを具える。別の実施例においては、トークン指令は、データセグメントトークンがなく、データセグメント指令を生成するストレージデバイス用コマンドを具える。別の実施例においては、トークン指令は、反復同一文字のインスタンスおよび／または反復同一文字ストリングのインスタンスの少なくとも一方を具える。
【００１２】
一実施例においては、本発明の装置は、読み取りレシーバモジュール、読み取り要求モジュール、読み取りトークン指令レシーバモジュールおよび要求クライアント応答モジュールを具える。読み取りレシーバモジュールは、ストレージデバイスからデータセグメントを読み取るストレージ要求を受信する。ストレージ要求は、要求クライアントから受信される。読み取り要求転送モジュールは、ストレージデバイスにストレージ要求を転送する。読み取りトークン指令レシーバモジュールは、ストレージデバイスから要求されたデータセグメントトークンに対応するメッセージを受信し、このメッセージは、少なくともデータセグメント識別子およびデータセグメント長を具える。このメッセージは、データセグメントのデータが実質的にない。要求クライアント応答モジュールは、ストレージデバイスから受信されたメッセージから構築（ｆｏｒｍｕｌａｔｅ）された要求クライアントに応答信号を転送する。
【００１３】
さらなる実施例においては、本発明の装置は、メッセージに含まれる情報を使用してデータセグメントのデータを再構成するデータセグメント再生成モジュールを具え、要求クライアントに送られる上記応答信号は、データセグメント具える。関連した実施例においては、要求クライアントに送られる応答信号は、ストレージデバイスから受信されたメッセージに含まれる情報を具える。別の実施例においては、このメッセージは、データセグメントトークンを具える。
【００１４】
一実施例においては、一連の反復同一文字または文字ストリングは、データセグメントが空（ｅｍｐｔｙ）であることを示す。別の実施例においては、トークン指令を有するストレージ要求は、ストレージデバイスのストレージスペースをリザーブする要求を具える。要求されてリザーブされたストレージスペースは、データセグメント長と実質的に同様のストレージスペース量を具える。
【００１５】
別の装置は、上述したものと実質的に同様な、読み取りレシーバモジュール、読み取り要求転送モジュール、読み取りトークンレシーバモジュールおよび要求クライアント応答モジュールを具える。一実施例においては、本発明の装置は、メッセージ中に含まれる情報を使用して、データセグメントのデータを再構成するデータセグメント再生成モジュールを具え、要求クライアントに送られる応答信号は、データセグメントを具える。別の実施例においては、要求クライアントに送られる応答信号は、ストレージデバイスから受信されたメッセージに含まれる情報を具える。
【００１６】
本発明のシステムは、さらに、データを管理するために提供される。このシステムは、ストレージデバイスおよびクライアントと通信するサーバを具える。このサーバは、トークン指令生成モジュールおよびトークン指令転送モジュールを具える。このトークン指令生成モジュールは、トークン指令を有するストレージ要求を生成する。トークン指令は、データセグメントトークンをストレージデバイスに記憶する要求を具える。トークン指令は、データセグメントを置換する。トークン指令は、少なくともデータセグメント識別子およびデータセグメント長を具え、データセグメントトークンは、データセグメントのデータが実質的にない。トークン指令転送モジュールは、トークン指令をストレージ要求に転送する。
【００１７】
一実施例においては、本発明のシステムは、読み取りレシーバモジュール、読み取り要求転送モジュール、読み取りトークン指令レシーバモジュールおよび要求クライアント応答モジュールを具える。ストレージ要求はクライアントから受信される。読み取り要求転送モジュールはストレージ要求をストレージデバイスに転送する。読み取りトークン指令レシーバモジュールは、ストレージデバイスから、要求されたデータセグメントトークンに対応するメッセージを受信する。このメッセージは、少なくともデータセグメント識別子およびデータセグメント長を具える。このメッセージは実質的にデータセグメントデータがない。要求クライアント応答モジュールは、ストレージデバイスから受信したメッセージから構築されたクライアントに応答信号を転送する。一実施例においては、要求クライアントは、サーバ上で実行し、要求クライアントは、アプリケーション、ファイルサーバおよびクライアントの少なくとも１つを具える。
【００１８】
本発明の方法は、データを管理するために提供される。開示された実施例の方法は、記載された装置及びシステムのオペレーションに関して上述した機能を実行するのに必要なステップを具える。一実施例においては、この方法は、トークン指令を有するストレージ要求を生成するステップを具える。このトークン指令は、データセグメントトークンをストレージデバイスに記憶する要求を具える。トークン指令は、データセグメントを置換し、トークン指令は、少なくともデータセグメント識別子およびデータセグメント長を具える。データセグメントトークンは、データセグメントのデータが実質的にない。この方法は、トークン指令をストレージデバイスに転送するステップを具える。
【００１９】
データを管理する代替方法は、ストレージデバイスからデータセグメントを読み取るストレージ要求を受信するステップを具え、ストレージ要求は、要求クライアントから受信される。この方法は、ストレージデバイスにストレージ要求を転送するステップを具える。この方法は、ストレージデバイスから、要求されたデータセグメントトークンに対応するメッセージを受信するステップを具える。このメッセージは、少なくともデータセグメント識別子およびデータセグメント長を具える。このメッセージは、データセグメントのデータが実質的にない。この方法は、ストレージデバイスから受信されたメッセージから構築された要求クライアントに応答信号を転送するステップを具える。
【００２０】
本明細書全体に亘って、特徴、利点または同様の単語は、本発明によって実現される特徴および利点の全てが、本発明のいずれかの１つの実施例に存在する可能性がある、または、存在することを意味するものではない。むしろ、特徴及び利点に関する用語は、一実施例に関連して記載される特定の特徴、利点または特性が、本発明の少なくとも１つの実施例に含まれることを意味すると理解されたい。従って、特徴、利点および同様の用語については、本明細書全体に亘って、必須ではないが、同一の実施例を意味する。
【００２１】
さらに、記載された本発明の特徴、利点および特性は、1又はそれ以上の実施例においてあらゆる適宜な方法で組み合わせることができる。当分野の当業者であれば、特定の実施例の１又はそれ以上の特定の特徴または利点なしで、本発明を実施可能であることを理解されたい。その他の例においては、更なる特徴および利点は、本発明の全ての実施例において示されていない所定の実施例を理解されたい。
【００２２】
本発明の特徴および利点は、以下の説明および添付の請求の範囲からより明らかになり、また、以下に記載する本発明の実施形態によって理解されるであろう。
【図面の簡単な説明】
【００２３】
本発明の利点が容易に理解されるように、簡単に上述した本発明のより具体的な説明は、添付の図面に例示した特定の実施例を参照することによってなされるであろう。これらの図面は、本発明の通常の実施例のみを示し、従って、本発明の範囲を限定するものではないと理解されたい。本発明は、添付の図面を利用して、具体的かつ詳細に記載および説明される。
【図１Ａ】図１Ａは、本発明によるソリッドステートストレージデバイス中のデータ管理システムの一実施例を示した概略ブロック図である。
【図１Ｂ】図１Ｂは、本発明によるストレージデバイス中のオブジェクト管理システムの一実施例を示した概略ブロック図である。
【図２Ａ】図２Ａは、本発明によるストレージデバイスのオブジェクト管理装置の一実施例を示した概略ブロック図である。
【図２Ｂ】図２Ｂは、本発明によるソリッドステートストレージデバイス中のソリッドステートストレージデバイス制御部の一実施例を示した概略ブロック図である。、
【図３】図３は、本発明によるソリッドステートストレージデバイスのライトデータパイプラインおよびリードデータパイプラインを有するソリッドステートストレージ制御部を示す概略ブロック図である。
【図４Ａ】図４Ａは、本発明によるソリッドステートストレージ制御部のバンクインターリーブ制御部の一実施例を示した概略ブロック図である。
【図４Ｂ】図４Ｂは、本発明によるソリッドステートストレージ制御部のバンクインターリーブ制御部の代替実施例を示した概略ブロック図である。
【図５】図５は、本発明によるデータパイプラインを使用したソリッドステートストレージデバイスのデータ管理方法に関する一実施例を例示した概略フローチャートである。
【図６】図６は、本発明によるデータパイプラインを使用して、ソリッドステートストレージデバイスのデータ管理方法に関する別の実施例を示した概略フローチャート図である。
【図７】図７は、本発明によるバンクインターリーブを使用したソリッドステートストレージデバイスのデータ管理方法に関する一実施例を示した概略フローチャート図である。
【図８】図８は、本発明によるソリッドステートストレージデバイスの不要データコレクション装置に関する一実施例を示した概略ブロック図である。
【図９】図９は、本発明によるソリッドステートストレージデバイスの不要データコレクション装置の一実施例を示した概略フローチャート図である。
【図１０】図１０は、本発明によるトークン指令を生成する装置を有するシステムに関した一実施例を示した概略ブロック図である。
【図１１】図１１は、本発明によるトークン指令を生成および転送する方法の一実施例を示した概略フローチャート図である。
【図１２】図１２は、本発明によるデータセグメントトークンを読み取る方法に関する一実施例を示した概略ブロック図である。
【図１３】図１３は、本発明によるデータセグメントトークンを管理する装置を有するシステムの一実施例を示した概略ブロック図である。
【図１４】図１４は、本発明によるデータセグメントトークンを記憶する方法に関する一実施例を示した概略フローチャート図である。
【図１５】図１５は、本発明によるデータセグメントトークンを読み取る方法に関する一実施例を示した概略フローチャート図である。
【発明を実施するための形態】
【００２４】
本明細書に記載された多数の機能ユニットは、そのインプリメンテーション独立性をより具体的に強調するために、モジュールとしてラベルした。例えば、モジュールは、カスタムＶＬＳＩ回路またはゲートアレイ、論理チップなど標準規格の半導体、トランジスタまたは他のディスクリートコンポーネントを具えるハードウェア回路として実装可能である。さらに、モジュールは、フィールドプログラム可能ゲートアレイ、プログラム可能アレイロジック、プログラム可能ロジックデバイスなどプログラム可能ハードウェアデバイスに実装可能である。
【００２５】
さらに、モジュールは、各種プロセッサによって実行されるソフトウェアに実装可能である。例えば、実行可能コードからなる特定モジュールは、オブジェクト、プロシージャまたはファンクションとして組織される物理的又は論理的ブロックの１又はそれ以上のコンピュータ指令を具える。にもかかわらず、実行可能な特定モジュールは、物理的に一カ所に配置される必要はないが、異なるロケーションに記憶される異なる指令を具え、論理的に同時に接続される場合、モジュールを具え、モジュール用の宣言された目的を達成する。
【００２６】
実際に、実行可能コードからなるモジュールは、１つの指令または多数の指令であり、複数の異なるコードセグメントに亘って、異なるプログラム中で、および、複数のメモリデバイスに亘って、分配され得る。同様に、オペレーションデータは、モジュール内で特定され、例示されており、適宜な形態で組み込まれ、あらゆる適宜な種類のデータ構造内で組織される。オペレーションデータは、１つのデータセットとして集められ、異なるストレージデバイスを含む異なるロケーションに亘って配置され、少なくとも部分的に、システムまたはネットワックの単なる電気信号として存在し得る。モジュールまたはモジュールの一部がソフトウェアに実装される場合、ソフトウェア部は、１又はそれ以上のコンピュータ可読メディアに記憶される。
【００２７】
実施例に関連して記載される特定の特徴部、構造または特性を意味する、本明細書全体における「一実施例」、「実施例」または同様の用語については、本発明の少なくとも１つの実施例を含む。従って、本明細書全体における「一実施例においては」、「実施例においては」および同様の用語のフレーズの様相は、必須ではないが、同一実施例を意味する。
【００２８】
信号担持媒体（ｓｉｇｎａｌ  ｂｅａｒｉｎｇ  ｍｅｄｉｕｍ）については、信号を生成可能なあらゆる形態、信号が生成可能なあらゆる形態、または、デジタル処理装置の機械可読指令からなるプログラムを実行可能なあらゆる形態をとることができる。信号担持媒体は、伝送線路、コンパクトディスク、デジタルビデオディスク、磁気テープ、ベルヌーイドライブ、磁気ディスク、パンチカード、フラッシュメモリ、集積回路または他のデジタル処理装置のメモリデバイスに組み込まれてもよい。
【００２９】
さらに、本発明の記載された特徴部、構造または特性は、１又はそれ以上の実施例の適宜な方法で組み合わせることができる。以下の説明において、多数の具体的詳細事項は、例えば、プログラミング、ソフトウェアモジュール、ユーザセレクション、ネットワーク処理、データベースクエリ、データベース構造、ハードウェアモジュール、ハードウェア回路、ハードウェアチップなどに設けられることで、本発明の実施例を完全に理解されたい。しかしながら、当分野の当業者であれば、本発明が１又はそれ以上の具体的詳細事項なしで実施でき、あるいは、他の方法、コンポーネント、材料などを用いて実施できることを理解されたい。別の例においては、本発明の側面をあいまいになるのを避けるために、周知な構造、材料またはオペレーションを示していないか、または、詳細に記載していない。
【００３０】
本明細書に含まれる概略的フローチャートは、論理フローチャート図として一般的に記載されている。このように、記載された順番およびラベルされたステップは、示される方法の一実施例を示す。他のステップ及び方法は、例示された方法の関数、論理または１又はそれ以上のステップに対する効果、またはその部分において同等であると考えられる。さらに、使用したフォーマットおよび記号は、方法の論理ステップを説明するために設けたものであり、この方法の範囲を限定するものではないと理解されたい。各種矢印および線がフローチャート図で使用されているが、対応する方法の範囲を限定するものではないことを理解されたい。実際に、いくつかの矢印または他のコネクタは、この方法の論理フローのみを示すために使用されている。例えば、矢印は、記載された方法の列挙されたステップ間における待機または不特定時間のモニタを示す。さらに、特定の方法が生じる順番は、示された対応するステップの順番に厳密に固執してもしなくてもよい。
【００３１】
ソリッドステートストレージシステム
図１Ａは、本発明によるソリッドステートストレージデバイスのデータ管理用のシステム１００の一実施例を示した概略ブロック図である。システム１００は、以下に示すように、ソリッドステートストレージデバイス１０２、ソリッドステートストレージ制御部１０４、ライトデータパイプライン１０６、リードデータパイプライン１０８、ソリッドステートストレージ１１０、コンピュータ１１２、クライアント１１４およびコンピュータネットワーク１１６を具える。
【００３２】
システム１００は、少なくとも１のソリッドステートストレージデバイス１０２を具える。別の実施例においては、システム１００は、２又はそれ以上のソリッドステートストレージ１０２を具える。各ソリッドステートストレージデバイス１０２は、フラッシュメモリ、ナノランダムアクセスメモリ（「ナノＲＡＭまたはＮＲＡＭ」）、磁気抵抗ＲＡＭ（「ＭＲＡＭ」）、ダイナミックＲＡＭ（「ＤＲＡＭ」）、フェーズチェンジＲＡＭ（「ＰＲＡＭ」）など、不揮発性ソリッドステートストレージ１１０を具える。このソリッドステートストレージデバイス１０２は、図２および図３で更に詳細に示す。ソリッドステートストレージデバイス１０２は、コンピュータネットワーク１１６を介して、クライアント１１４に接続したコンピュータ１１２内に示されている。一実施例においては、ソリッドステートストレージデバイス１０２は、コンピュータ１１２の内部にあり、周辺コンポーネントインターコネクトエクスプレス（「ＰＣＩ−ｅ」）バス、シリアルアドバンステクノロージアタッチメント（「シリアルＡＴＡ」）バスなど、システムバスを用いて接続されている。別の実施例においては、ソリッドステートストレージデバイス１０２は、コンピュータ１１２の外部にあり、ユニバーサルシリアルバス（「ＵＳＢ」）コネクション、米国電気電子技術者協会（「ＩＥＥＥ」）１３９４バス（「ＦｉｒｅＷｉｒｅ」）などを用いて接続される。その他の実施例においては、ソリッドステートストレージデバイス１０２は、ＩｎｆｉｎｉｂａｎｄまたはＰＣＩエクスプレスアドバンススイッチング（「ＰＣＩｅ−ＡＳ」）など、外部の電気または光学バスエクステンション、または、バスネットワーキングソリューション、を使用し、周辺コンポーネントインターコネクタ（「ＰＣＩ」）エクスプレスバスを用いたコンピュータ１１２に接続される。
【００３３】
各種実施例において、ソリッドステートストレージ１０２は、デュアルインラインメモリモジュール（「ＤＩＭＭ」）、ドーターカードまたはマイクロモジュールの形態でもよい。別の実施例においては、ソリッドステートストレージデバイス１０２は、ラック取付ブレード内のエレメントである。別の実施例においては、ソリッドステートストレージデバイス１０２は、より高いレベルのアッセンブリ（例えば、マザーボード、ラップトップ、画像処理装置）に直接統合したパッケージ内に含まれる。別の実施例においては、ソリッドステートストレージデバイス１０２を具える個々のコンポーネントは、中間パッケージングなしで、より高いレベルのアッセンブリに直接統合される。
【００３４】
ソリッドステートストレージデバイス１０２は、１又はそれ以上のソリッドステートストレージ制御部１０４を具え、各々は、ライトデータパイプライン１０６およびリードデータパイプラインを具え、各々は、ソリッドステートストレージ１１０を具え、これらは、図２および図３で以下に詳細に示す。
【００３５】
システム１００は、ソリッドステートストレージデバイス１０２に接続した１又はそれ以上のコンピュータ１１２を具える。コンピュータ１１２は、ホスト、サーバ、ストレージエリアネットワーク（「ＳＡＮ」）のストレージ制御部、ワークステーション、パーソナルコンピュータ、ラップトップコンピュータ、手持ち型コンピュータ、スーパーコンピュータ、コンピュータクラスタ、ネットワークスイッチ、ルータまたはアプライアンス、データベースまたはストレージアプライアンス、データ取得システムまたはデータ獲得システム、診断システム、試験システム、ロボット、携帯型電子機器、ワイヤレスデバイスなどでもよい。別の実施例においては、コンピュータ１１２は、クライアントでもよく、ソリッドステートストレージデバイス１０２は、コンピュータ１１２から送られるデータ要求に自動で応答するように機能する。この実施例においては、コンピュータ１１２およびソリッドステートストレージデバイス１０２は、コンピュータネットワーク、システムバス、または、コンピュータ１１２と自立性ソリッドステートストレージデバイス１０２との間の接続に適切なその他の通信手段を用いて、接続可能である。
【００３６】
一実施例においては、システム１００は、１又はそれ以上のコンピュータネットワーク１１６を介して、１又はそれ以上のコンピュータ１１２に接続された１又はそれ以上のクライアント１１４を具える。クライアント１１４は、ホスト、サーバ、ＳＡＮのストレージ制御部、ワークステーション、パーソナルコンピュータ、ラップトップコンピュータ、手持ち型コンピュータ、スーパーコンピュータ、コンピュータクラスタ、ネットワークスイッチ、ルータまたはアプライアンス、データベースまたはストレージアプライアンス、データ取得システムまたはデータ獲得システム、診断システム、試験システム、ロボット、携帯電子機器、ワイヤレスデバイスなどでもよい。コンピュータネットワーク１１６は、インターネット、ワイドエリアネットワーク（「ＷＡＮ」）、メトロポリタンエリアネットワーク（「ＭＡＮ」）、ローカルエリアネットワーク（「ＬＡＮ」）、トークンリング、ワイヤレスネットワーク、ファイバチャネルネットワーク、ＳＡＮ、ネットワーク接続ストレージ（「ＮＡＳ」）、ＥＳＣＯＮ、または、ネットワークの組み合わせを具える。さらに、コンピュータネットワーク１１６は、Ｅｔｈｅｒｎｅｔ（登録商標）、トークンリング、ＷｉＦｉ、ＷｉＭａｘなど、ネットワーク技術のＩＥＥＥ８０２ファミリのネットワークを含む。
【００３７】
コンピュータネットワーク１１６は、サーバ、スイッチ、ルータ、ケーブル、ラジオ、および、コンピュータ１１２とクライアント１１４とのネットワーク構築を容易にするのに使用するその他の設備を具える。一実施例においては、システム１００は、コンピュータネットワーク１１６を介して、同等に（ａｓ  ｐｅｅｒｓ）通信する複数のコンピュータ１１２を具える。別の実施例においては、システム１００は、コンピュータ１１６を介して同等に通信する複数のソリッドステートストレージデバイス１０２を具える。当分野の当業者であれば、１又はそれ以上のコンピュータネットワーク１１６を具える他のコンピュータネットワーク１１６と、１またはそれ以上のクライアント１１４間の単一または冗長接続を有する関連設備、または、１又はそれ以上のソリッドステートストレージデバイス１０２を有する他のコンピュータ、または、１又はそれ以上のコンピュータ１１２に接続された１又はそれ以上のソリッドステートストレージデバイス１０２と、を理解されたい。一実施例においては、システム１００は、コンピュータ１１２なしで、コンピュータネットワーク１１６を介して、クライアント１１４に接続した２又はそれ以上のソリッドステートストレージデバイス１０２を具える。
【００３８】
ストレージ制御部管理オブジェクト
図１Ｂは、本発明によるストレージデバイスのオブジェクト管理用システム１０１の一実施例を示す概略ブロック図である。このシステム１０１は、ストレージ制御部１５２および１又はそれ以上のデータストレージデバイス１５４を含む１又はそれ以上のストレージデバイス１５０と、１又はそれ以上の要求（ｒｅｑｕｅｓｔｉｎｇ）デバイス１５５と、を有する。これらのストレージデバイス１５０は、互いにネットワークで接続され、１又はそれ以上の要求デバイス１５５に結合される。要求デバイス１５５は、ストレージデバイス１５０ａにオブジェクト要求を送る。オブジェクト要求は、オブジェクトを構築する要求、オブジェクトにデータを書き込む要求、オブジェクトからデータを読み取る要求、オブジェクトを削除する要求、オブジェクトをチェック（ｃｈｅｃｋｐｏｉｎｔ）する要求、オブジェクトをコピーする要求などである。当分野の当業者であれば、その他のオブジェクト要求も理解されたい。
【００３９】
一実施例においては、ストレージ制御部１５２およびデータストレージデバイス１５４は別のデバイスである。別の実施例においては、ストレージ制御部１５２およびデータストレージデバイス１５４は、１つのストレージデバイス１５０に統合される。別の実施例においては、データストレージデバイス１５４は、ソリッドステートストレージ１１０であり、ストレージ制御部１５２は、ソリッドステートストレージデバイス制御部２０２である。他の実施例においては、データストレージデバイス１５４は、ハードディスクドライブ、光学ドライブ、テープストレージなどでもよい。別の実施例においては、ストレージデバイス１５０は、異なる種類の２又はそれ以上のデータストレージデバイス１５４を具える。
【００４０】
一実施例においては、データストレージデバイス１５４は、ソリッドステートストレージ１１０であり、ソリッドステートストレージエレメント２１６、２１８、２２０のアレイとして構成させる。別の実施例においては、ソリッドステートストレージ１１０は２又はそれ以上のバンク２１４ａ−ｎにおいて構成される。ソリッドステートストレージ１１０は、以下の図２Ｂでより詳細に示す。
【００４１】
これらのストレージデバイス１５０ａ−ｎは、互いにネットワークで接続され、分散したストレージデバイスとして機能する。要求デバイス１５５に接続されたストレージデバイス１５０ａは、分散したストレージデバイスへのオブジェクト要求を制御する。一実施例においては、ストレージデバイス１５０および関連したストレージ制御部１５２は、オブジェクトを管理し、分散したオブジェクトファイルシステムとして要求デバイス１５５に存在する。この文脈において、並行オブジェクトファイルシステムは、分散したオブジェクトファイルシステム型の例である。別の実施例においては、ストレージデバイス１５０および関連するストレージ制御部１５２は、オブジェクトを管理し、分散したオブジェクトファイルサーバとして１又はそれ以上の要求デバイス１５５に存在する。この文脈において、並行オブジェクトファイルサーバは、分散したオブジェクトファイルサーバ型の例である。これらの実施例およびその他の実施例において、要求デバイス１５５は、オブジェクトを排他的に管理するか、または、ストレージデバイス１５０と組み合わせたオブジェクトの管理に加わる；これは、通常、ストレージデバイス１５０の能力を制限せず、他のクライアント１１４のためのオブジェクトを完全に管理する。場合によっては、分散したストレージデバイスの各々、分散したオブジェクトファイルシステムおよび分散したオブジェクトファイルサーバは、１つのデバイスとして独立して機能することができる。ネットワーク接続されたストレージデバイス１５０ａ−ｎは、分散したストレージデバイス、分散したオブジェクトファイルシステム、分散したオブジェクトファイルサーバ、および、これらの組み合わせであって、１又はそれ以上の要求デバイス１５５に対して設定された１又はそれ以上の上記能力のイメージを有する組み合わせとして、機能できる。例えば、ストレージデバイス１５０は、第１の要求デバイス１５５ａに対して分散したストレージデバイスとして機能するように設定でき、一方、要求デバイス１５５ｂに対して分散したストレージデバイスおよび分散したオブジェクトファイルシステムとして機能する。システム１０１が、１つのストレージデバイス１５０ａを具える場合、ストレージデバイス１５０ａのストレージ制御部１５２ａは、オブジェクトを管理し、オブジェクトファイルシステムまたはオブジェクトファイルサーバとして要求だバイス１５５に存在してもよい。
【００４２】
ストレージデバイス１５０が、分散したストレージデバイスとして互いにネットワークで接続される一実施例において、ストレージデバイス１５０は、１又はそれ以上の分散したストレージ制御部１５２によって管理された独立ドライブ冗長アレイ（「ＲＡＩＤ」）として機能する。例えば、オブジェクトのデータセグメントを書き込む要求は、ＲＡＩＤレベルに応じて、パリティストライプを用いてデータストレージデバイス１５４ａ−ｎに亘ってストライプ化されたデータセグメントとなる。このような構成の利点の１つは、オブジェクト管理システムが、ストレージ制御部１５２、データストレージデバイスまたはストレージデバイス１５０のその他のコンポーネントのいずれかのうち、１つのストレージデバイス１５０にエラーが生じたときに、利用可能なように継続できることである。
【００４３】
冗長ネットワークを使用してストレージデバイス１５０と要求デバイス１５５を相互接続するとき、オブジェクト管理システムは、ネットワークの１つが機能している限り、ネットワークエラーの存在下で利用可能となるように続けることができる。１つのストレージデバイス１５０ａを有するシステム１０１は、さらに、複数のデータストレージデバイス１５４ａを具えることができ、ストレージデバイス１５０ａのストレージ制御部１５２ａは、ＲＡＩＤ制御部として機能し、ストレージデバイス１５０ａのデータストレージデバイス１５４ａに亘ってデータセグメントをストライプ化し、ＲＡＩＤレベルに応じて、パリティストライプを具えることができる。
【００４４】
一実施例においては、１又はそれ以上のストレージデバイス１５０ａ−ｎは、ソリッドステートストレージデバイス制御部２０２およびソリッドステートストレージ１１０を有するソリッドステートストレージデバイス１０２であり、ソリッドステートストレージデバイス１０２は、ＤＩＭＭ設定、ドーターカード、マイクロモジュールなどで構成され、コンピュータ１１２内にあってもよい。コンピュータ１１２は、サーバでもよく、または、互いにネットワーク接続されたソリッドステートストレージデバイス１０２を有し、分散したＲＡＩＤ制御部として機能する同様のデバイスでもよい。有利には、ストレージデバイス１０２は、ＰＣＩ−ｅ、ＰＣＩｅ−ＡＳ、Ｉｎｆｉｎｉｂａｎｄまたはその他の高性能バス、スイッチ付きバス、ネットワーク接続バスまたはネットワークを用いて接続されてもよく、ソリッドステートストレージ１１０ａ−ｎに亘ってデータセグメントを自律的にストライプ化する１つ又は分散したソリッドステートストレージ制御部２０２を有する極めて小型で、高性能ＲＡＩＤストレージシステムを提供することができる。
【００４５】
一実施例においては、ストレージデバイス１５０と通信するために要求デバイス１５５によって使用される同一ネットワークは、同等のストレージデバイス１５０ｂ−ｎと通信しＲＡＩＤ機能を得るために、同等のストレージデバイス１５０ａによって使用される。別の実施例においては、別のネットワークは、ＲＡＩＤするために、ストレージデバイス１５０巻で使用される。別の実施例においては、要求デバイス１５５は、ストレージデバイス１５０に冗長要求を送ることによってＲＡＩＤプロセスに加わることができる。例えば、要求デバイス１５５は、第１のオブジェクトライト要求を第１のストレージデバイス１５０ａに送り、同一データを有する第２のオブジェクトライト要求を第２のストレージデバイス１５０ｂに送り、単純なミラーリングを行う。
【００４６】
ストレージデバイス１０２内でオブジェクト処理するための能力に関して、ストレージ制御部１５２は、１つのＲＡＩＤレベルを用いて、１つのデータセグメントまたはオブジェクトを記憶する能力を個別に具え、一方、別のデータセグメントまたはオブジェクトは、異なるＲＡＩＤレベルを用いて、または、ＲＡＩＤストライプ化せずに、記憶される。これらの複数のＲＡＩＤグループ分けは、ストレージデバイス１５０内の複数のパーティションに関連していてもよい。ＲＡＩＤ０、ＲＡＩＤ１、ＲＡＩＤ５、ＲＡＩＤ６およびコンポジットＲＡＩＤタイプ１０、５０、６０は、データストレージデバイス１５４ａ−ｎを具える各種ＲＡＩＤグループに亘って同時にサポート可能である。当分野の当業者であれば、同時にサポート可能なその他のＲＡＩＤタイプおよび設定も理解されたい。
【００４７】
さらに、ストレージ制御部１５２は、ＲＡＩＤ制御部として自律的に機能するので、ＲＡＩＤ制御部は、累進的ＲＡＩＤを行うことができ、要求デバイス１５５に影響を与えず、ＲＡＩＤレベルに変化を加えず、または、検出さえせずに、１つのＲＡＩＤレベルから別のＲＡＩＤレベルへと、データストレージデバイス１５４に亘ってストライプ化したオブジェクトまたはオブジェクトの一部をトランスフォーム可能である。好適な実施例においては、１つのレベルから別のレベルへとＲＡＩＤ設定を前進（ｐｒｏｇｒｅｓｓ）させることは、オブジェクトまたはパケットベースでも自律的に行われ、ストレージデバイス１５０の１つまたはストレージ制御部１５２において機能する分散したＲＡＩＤ制御モジュールによって起動される。通常、ＲＡＩＤの前進は、ＲＡＩＤ１などのより高性能でより低効率なストレージ設定から、ＲＡＩＤ５などのより低性能でより高いストレージ効率へと前進であり、トランスフォームは、アクセス頻度に基づいて動的に開始される。なお、ＲＡＩＤ５からＲＡＩＤ１へ設定を前進させることも可能であることを理解されたい。ＲＡＩＤ前進を開始するその他のプロセスは、ストレージシステム管理サーバ要求など、クライアントまたは外部エージェントから設定または要求できる。当分野の当業者であれば、自律的にオブジェクトを管理するストレージ制御部１５２を用いたストレージデバイス１０２の特徴および利点を理解されたい。
【００４８】
ストレージ制御部管理オブジェクト用装置
図２Ａは、本発明によるストレージデバイス内のオブジェクト管理装置２００の実施例を例示する概略的ブロック図である。この装置２００は、オブジェクト要求レシーバモジュール２６０、パージング（ｐａｒｓｉｎｇ）モジュール２６２、コマンド実行モジュール２６４、オブジェクトインデックスモジュール２６６、オブジェクト要求キューイングモジュール２６８、メッセージモジュール２７０を有するパケッタイザ（ｐａｃｋｅｔｉｚｅｒ）３０２、および、オブジェクトインデックス再構築モジュール２７２を含むストレージ制御部１５２を具え、これらを以下に示す。
【００４９】
ストレージ制御部１５２は、図１Ｂのシステム１０１に関連して記載されたストレージ制御部１５２と実質的に同様で、図２と関連して記載されたソリッドステートストレージデバイス制御部２０２であってもよい。この装置２００は、１又はそれ以上の要求デバイス１５５からオブジェクト要求を受信するオブジェクト要求レシーバモジュール２６０を具える。例えば、記憶オブジェクトデータ要求に関して、ストレージ制御部１５２は、ストレージ制御部１５２に接続したデータストレージデバイス１５４内のデータパケットとしてデータセグメントを記憶する。オブジェクト要求は、一般的に、１又はそれ以上のオブジェクトデータパケットに記憶された、または、記憶されるべきデータセグメントで、ストレージ制御部１５２によって管理されたオブジェクトに指令される。ストレージ制御部１５２が、ローカルまたはリモートダイレクトメモリアクセス（「ＤＭＡ」、「ＲＤＭＡ」）転送を使用できる後期オブジェクト要求を介したデータで、後で充填されるオブジェクトを形成することを、オブジェクト要求は要求してもよい。
【００５０】
一実施例においては、オブジェクト要求は、既に形成されたオブジェクトにオブジェクトの全てまたは一部を書き込む、書き込み要求である。一例においては、書き込み要求は、オブジェクトのデータセグメント用である。オブジェクトのその他のデータセグメントは、ストレージデバイス１５０またはその他のストレージデバイスに書き込まれてもよい。別の例においては、書き込み要求は、完全なオブジェクト用である。別の例においては、オブジェクト要求は、ストレージ制御部１５２によって管理されたデータセグメントからのデータを読み取ることである。さらなる別の実施例においては、オブジェクト要求は、データセグメントを削除する削除要求である。
【００５１】
有利には、ストレージ制御部１５２は、新規オブジェクトを書き込むか、または、データを既存のオブジェクトに加える以上の書き込み要求をアクセプト可能である。例えば、オブジェクト要求レシーバモジュール２６０が受信する書き込み要求は、ストレージ制御部１５２によって記録されるデータの先のデータを加える要求、記憶したデータにデータを挿入する要求またはデータのセグメントを置換する要求を具えることができる。ストレージ制御部１５２によって維持されるオブジェクトインデックスは、その他のストレージ制御部で利用可能ではないが、サーバや他のコンピュータのフィルシステムのストレージ制御部の外側でのみ現在利用可能である、上記のような複雑な書き込みオペレーションに必要なフレキシビリティを提供する。
【００５２】
装置２００は、オブジェクト要求を１又はそれ以上のコマンドにパージングするパージングモジュール２６２を具える。一般的に、パージングモジュール２６２は、オブジェクト要求を１又はそれ以上のバッファにパージングする。例えば、オブジェクト要求の１又はそれ以上のコマンドは、コマンドバッファにパージングできる。通常、パージングモジュール２６２は、オブジェクト要求を調整し、オブジェクト要求の情報は、ストレージ制御部１５２によって理解され実行される。当分野の当業者であれば、１又はそれ以上のコマンドにオブジェクト要求をパージングするパージングモジュール２６２のその他の機能も理解されたい。
【００５３】
装置２００は、オブジェクト要求からパージングされたコマンドを実行するコマンド実行モジュール２６４を具える。一実施例においては、コマンド実行モジュール２６４は、１つのコマンドを実行する。別の実施例においては、コマンド実行モジュール２６４は、複数のコマンドを実行する。通常、コマンド実行モジュール２６４は、書き込みコマンドなど、オブジェクト要求からパージングされたコマンドを解釈し、次いで、サブコマンドを形成して、キューイングして（ｑｕｅｕｅ）、実行する。例えば、オブジェクトからパージングされた書き込みコマンドは、ストレージ制御部１５２に指令し、複数のデータセグメントを記憶する。さらに、オブジェクト要求は、暗号化、圧縮など必要な特性を具えていてもよい。コマンド実行モジュール２６４は、ストレージ制御部１５２に指令して、データセグメントを圧縮し、データセグメントを暗号化し、１又はそれ以上のデータパケットおよび各データパケットの関連するヘッダを作成し、メディア暗号化キーを有するデータパケットを暗号化し、エラー修正コードを加え、そして、特定のロケーションにデータパケットを記憶することができる。特定のロケーションおよびその他のサブコマンドのデータパケットを記憶することは、その他のより低レベルのサブコマンドにブレークダウンされる。当分野の当業者であれば、コマンド実行モジュール２６４が、オブジェクト要求からパージングされる１又はそれ以上のコマンドを実行可能であるその他の方法を理解されたい。
【００５４】
装置２００は、オブジェクトインデックスモジュール２６６を具え、このモジュール２６６は、オブジェクトを作成するか、または、オブジェクトのデータセグメントを記憶するストレージ制御部１５２に対応して、オブジェクトインデックスのオブジェクト項目を作成する。一般的に、ストレージ制御部１５２は、データセグメントと、記憶されたデータパケットが、データセグメントが記憶されるときに、割り当てられたロケーションと、からデータパケットを作成する。データセグメント内で受信したオブジェクトメタデータまたはオブジェクト要求の一部としてのオブジェクトメタデータは、同様に記憶できる。
【００５５】
オブジェクトインデックスモジュール２６６は、データパケットが記憶され、データパケットの物理的アドレスが割り当てられるときに、オブジェクトインデックスにオブジェクト項目を作成する。オブジェクト項目は、オブジェクトのロジック識別子と、ストレージ制御部１５２が１又はそれ以上のデータパケットおよびあらゆるオブジェクトメタデータパケットを記憶したところに関連する１又はそれ以上の物理的アドレスと、の間におけるマッピングを具える。別の実施例においては、オブジェクトインデックスの項目は、オブジェクトのデータパケットが記憶される前に作成される。例えば、データパケットが早期に記憶される物理的アドレスをストレージ制御部１５２が決定する場合、オブジェクトインデックスモジュール２６６は、オブジェクトインデックスの項目を早期に作成できる。
【００５６】
一般的には、オブジェクト要求またはオブジェクト要求群が、読み取り−修正−書き込みおプレーション中、修正されたオブジェクトまたはデータセグメントになるとき、オブジェクトインデックスモジュール２６６は、修正したオブジェクトに関連するオブジェクトインデックス内の項目をアップデートする。一実施例においては、オブジェクトインデックスは、修正したオブジェクト用のオブジェクトインデックス中に、新規オブジェクトおよび新規項目を作成する。一般的に、オブジェクトの一部のみが修正され場合、オブジェクトは、修正されたデータパケットおよび未変化のいくつかのデータパケットを具える。この場合、新規項目は、もともと書き込まれていた未変化のデータパケットと、新規ロケーションに書き込まれた修正されたオブジェクトと、に対するマッピングを具える。
【００５７】
別の実施例においては、オブジェクト要求レシーバモジュール２６０は、データブロックまたはその他のオブジェクトエレメントを消去するコマンドを具えたオブジェクト要求を受信し、ストレージ制御部１５２は、オブジェクトに対する基準、オブジェクトの関連性、および、消去したデータブロックのサイズなどの情報を含む消去パケットなど、少なくとも１つのパケットを記憶することができる。さらに、それは、さらに、消去したオブジェクトエレメントがゼロで充填されていることを示してもよい。従って、消去オブジェクト要求は、実際のメモリまたは消去されるストレージをエミュレートするのに使用可能であり、メモリまたはストレージは、実際に、メモリ／ストレージのセル中でゼロを用いて実際に記憶された適宜なメモリ／ストレージの一部を有している。
【００５８】
有利には、データセグメントとオブジェクトのメタデータとの間のマッピングを示す項目を含んだオブジェクトインデックスを作成することで、ストレージ制御部１５２が、オブジェクトを自律的に処理して管理することが可能になる。この能力によって、ストレージデバイス１５０内にデータを記憶する大きなフレキシビリティをもたせることができる。オブジェクトのインデックス項目が作成されると、続いて、オブジェクトに関するオブジェクト要求を、ストレージ制御部１５２が効率的に応答可能である。
【００５９】
一実施例においては、ストレージ制御部１５２は、パージングモジュール２６２によってパージングする前に、オブジェクト要求レシーバモジュール２６０によって受信される１又はそれ以上のオブジェクト要求をキューイングするオブジェクト要求キューイングモジュール２６８を具える。オブジェクト要求キューイングモジュール２６８によって、オブジェクト要求が受信されるときと、オブジェクト要求が実行されるときとの間においてフレキシビリティをもたせることができる。
【００６０】
別の実施例においては、ストレージ制御部１５２は、１又はそれ以上のデータセグメントから１又はそれ以上のデータパケットを形成するパケッタイザ（ｐａｃｋｅｔｉｚｅｒ）３０２を具え、ここで、データパケットがデータストレージデバイス１５４のストレージに合うようにサイズ調整される。パケッタイザ３０２は、以下の図３でより詳細に示す。パケッタイザ３０２は、一実施例においては、各パケットのヘッダを作成するメッセージモジュール２７０を具える。このヘッダは、パケット識別子とパケット長を具える。パケット識別子は、パケットが形成されるためのオブジェクトにパケットを関連させる。
【００６１】
一実施例においては、各パケットは、自納式のパケット識別子を具え、ここで、パケット識別子は、オブジェクトと、パケット内に含まれるオブジェクトエレメントのオブジェクト内の関係性を識別するのに十分な情報を含んでいる。しかしながら、より効率的な好適な実施例は、コンテナにパケットを記憶することができる。
【００６２】
コンテナは、データを具え、このデータは、より効率的なパケットストレージを容易にし、オブジェクトとデータパケット、メタデータパケット、コンテナ内に記憶されるオブジェクトに関連したその他のパケットと、の関連性を構築するのを補助する。ストレージ制御部１５２は、通常、同様の方法で、オブジェクトおよびデータセグメントの一部として受信されるオブジェクトメタデータを処理することに留意されたい。一般的に、「パケット」は、データ、メタデータを具えるメタデータパケット、または、別のパケットタイプのパケットを意味する。オブジェクトは、１又はそれ以上のコンテナに記憶可能で、コンテナは、一般的に、１の固有オブジェクトのみに対するパケットを具える。オブジェクトは、複数のコンテナ間に配置可能である。一般的に、コンテナは、１の論理消去ブロック（ストレージディビジョン）内に記憶され、論理消去ブロック間でスプリットされることはない。
【００６３】
一例においては、コンテナは、２又はそれ以上の論理／バーチャルページ間でスプリットされてもよい。コンテナは、オブジェクト内のコンテナに関連するコンテナラベルによって識別される。コンテナは、多くのパケットに対してゼロを含み、一般的に、コンテナ内のパケットは、１つのオブジェクトからなる。パケットは、オブジェクト属性エレメント、オブジェクトデータエレメント、オブジェクトインデックスエレメントなど、多数のオブジェクトエレメントタイプでもよい。２以上のオブジェクトエレメントタイプを含むハイブリッドパケットを作成できる。各パケットは、同一エレメントタイプの多数のエレメントに対してゼロを含む。コンテナ内の各パケットは、一般的に、オブジェクトとの関連性を識別する固有の識別子を含む。
【００６４】
各パケットは、１のコンテナに関連している。好適な実施例においては、コンテナは、消去ブロックに限定されず、各消去ブロックの開始点またはその付近で、コンテナパケットを見つけることができる。このことは、破損したパケットヘッダを有する消去ブロックに対するデータ損失を制限することを支援する。この実施例においては、オブジェクトインデックスが使用不能であり、消去ブロック内のパケットヘッダが破損している場合、パケットヘッダから消去ブロックエンドまでの内容は、連続するパケットのロケーションを決定する信頼性のある機構がない可能性が高いので、損失してしまう。別の実施例においては、より信頼性のある方法は、ページバウンダリに限定されるコンテナを有することである。この実施例は、より多くのヘッダオーバヘッドを必要とする。別の実施例においては、コンテナは、ページを横切りフローして、ブロックバウンダリを消去することができる。これは、必要とするヘッダオーバヘッドは少なくなるが、パケットヘッダが破損している場合、データのより大きな部分が損失される。これらのいくつかの実施例に関して、いくつかのタイプのＲＡＩＤが、さらなるデータの完全性を保証するために使用されることが予測される。
【００６５】
一実施例においては、装置２００は、データストレージデバイス１５４に記憶されるパケットヘッダからの情報を使用して、オブジェクトインデックスの項目を再構築するオブジェクトインデックス再構築モジュール２７２を具える。一実施例においては、オブジェクトインデックス再構築モジュール２７２は、各パケットが属するオブジェクトを判定するヘッダと、オブジェクトにおけるデータまたはメタデータがどこに属するかを判定するシークエンス情報とを読み込むことによって、オブジェクトインデックスの項目を再構築する。オブジェクトインデックス再構築モジュール２７２は、各パケットおよびタイムスタンプの物理アドレス情報、または、パケットの物理ロケーションとオブジェクト識別子とデータセグメントシークエンスとの間のマッピングを作成するシークエンス情報を使用する。タイムスタンプまたはシークエンス情報をオブジェクトインデックス再構築モジュール２７２が使用して、インデックスに対して行われる変化シークエンスをリプレイし、これによって、通常、最新状態を再構築（ｒｅｅｓｔａｂｌｉｓｈ）する。
【００６６】
別の実施例においては、オブジェクトインデックス再構築モジュール２７２は、パケットの物理ロケーションと、オブジェクト識別子と、オブジェクトインデックス内に項目を再構築する各パケットのシークエンスナンバと、を識別する、コンテナパケット情報とともにパケットヘッダ情報を使用して、パケットを配置する。一実施例においては、消去ブロックは、タイムスタンプされるか、または、パケットが書き込まれときにシークエンスナンバが付与され、タイムスタンプまたは消去ブロックのシークエンス情報は、コンテナヘッダおよびパケットヘッダから集められた情報とともに使用され、オブジェクトインデックスを再構築する。別の実施例においては、消去ブロックがリカバリされるときに、タイムスタンプまたはシークエンス情報が書き込まれる。
【００６７】
オブジェクトインデックスが揮発性メモリに記憶されるとき、エラー、電力損失、または、ストレージ制御部１５２がオブジェクトインデックスを保存せずにシャットダウンする問題が、オブジェクトインデックスが再構築できない場合に、問題になるであろう。オブジェクトインデックス再構築モジュール２７２によって、オブジェクトインデックスが揮発性メモリに記憶され、これにより迅速なアクセスなど揮発性メモリの利点を得る。オブジェクトインデックス再構築モジュール２７２によって、ストレージデバイス１５０の外部にあるデバイスに依存せず自律的に、オブジェクトインデックスの迅速な再構築が可能となる。
【００６８】
一実施例においては、揮発性メモリのオブジェクトインデックスは、データストレージデバイス１５４に一時的に記憶される。特定の実施例においては、オブジェクトインデックスまたは「インデックスメタデータ」は、ソリッドステートストレージ１１０に一時的に記憶される。別の実施例においては、インデックスメタデータが、パケットを記憶するソリッドステートストレージ１１０ａ−１１０ｎ−１から分離したソリッドステートストレージ１１０ｎに記憶される。インデックスメタデータは、データおよび要求デバイス１５５から伝達されるオブジェクトメタデータから独立的に管理され、ストレージ制御部１５２／ソリッドステートストレージデバイス制御部２０２によって管理される。オブジェクトからの他のデータおよびメタデータから分離したインデックスを管理して記憶することによって、オブジェクトメタデータを処理する必要なく、ストレージ制御部１５２／ソリッドステートストレージデバイス制御部２０２なしで、効率的データフローが可能となる。
【００６９】
一実施例においては、オブジェクト要求レシーバモジュール２６０によって受信されるオブジェクト要求が書き込み要求を具える場合、ストレージ制御部１５２は、ローカルまたはリモートダイレクトメモリアクセス（「ＤＭＡ」、「ＲＤＭＡ」）オペレーションとして、要求デバイス１５５のメモリからオブジェクトの１又はそれ以上のデータセグメントを受信される。好適な例において、ストレージ制御部１５２は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて要求デバイス１５５のメモリからデータを引き出す（ｐｕｌｌ）。別の例においては、要求デバイス１５５は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、データセグメントをストレージ制御部１５２へプッシュする。別の実施例においては、オブジェクト要求は読み取り要求を具え、ストレージ制御部１５２は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、オブジェクトの１又はそれ以上のデータセグメントを要求デバイス１５５のメモリに伝達する。好適な例においては、ストレージ制御部１５２は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、データを要求デバイス１５５のメモリにプッシュする別の実施例においては、要求デバイス１５５は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、ストレージ制御部１５２からデータを引き出す。別の例においては、ストレージ制御部１５２は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、要求デバイス１５５のメモリからオブジェクトコマンド要求セットを引き出す。別の実施例においては、要求デバイス１５５は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、ストレージ制御部１５２にオブジェクトコマンド要求セットをプッシュする。
【００７０】
一実施例においては、ストレージ制御部１５２は、ブロックストレージをエミュレートし、要求デバイス１５５とストレージ制御部１５２との間で通信されるオブジェクトは、１又はそれ以上のデータブロックを具える。一実施例においては、要求デバイス１５５は、ドライバを具え、ストレージデバイス１５０はブロックストレージデバイスとして存在する。例えば、要求デバイス１５５は、要求デバイス１５５が記憶されるデータブロックを必要とする物理的アドレスとともに所定サイズのデータブロックを送ることができる。ストレージ制御部１５２は、データブロックを受信し、データブロックを伝達される物理的ブロックアドレスを使用するか、または、オブジェクト識別子としての物理的ブロックアドレスの変更（ｔｒａｎｓｆｏｒｍａｔｉｏｎ）を使用する。次いで、ストレージ制御部１５２は、データブロックをパケット化してデータブロックを自在に記憶することで、オブジェクトまたはオブジェクトのデータセグメントとしてデータブロックを記憶する。次いで、オブジェクトインデックスモジュール２６６は、物理的なブロックベースのオブジェクト識別子と、ストレージ制御部１５２がデータブロックのデータを具えるデータパケットを記憶した実際の物理ロケーションとを使用して、オブジェクト内に項目を作成する。
【００７１】
別の実施例においては、ストレージ制御部１５２は、ブロックオブジェクトをアクセプトすることでブロックストレージをエミュレートする。ブロックオブジェクトは、ブロック構造中に１又はそれ以上のデータブロックを具えることができる。一実施例においては、ストレージ制御部１５２は、その他のオブジェクトとしてブロックオブジェクトを処理する。別の実施例においては、オブジェクトは、完全なブロックデバイス、ブロックデバイスのパーティション、又は、トラック、セクタ、チャネルなどを含むブロックデバイスの他のロジック若しくは物理的サブエレメントを表す。特筆すべきことは、ブロックデバイスＲＡＩＤ群を、プログレッシブＲＡＩＤなどの異なるＲＡＩＤ構造をサポートするオブジェクトに再マッピング（ｒｅｍａｐ）する能力である。当分野の当業者であれば、従来または未来のブロックデバイスをオブジェクトへマッピングするその他のマッピングも理解されたい。  
【００７２】
ソリッドステートストレージデバイス
図２Ｂは、本発明によるソリッドステートデバイス１０２内に書き込みデータパイプライン１０６および読み取りデータパイプライン１０８を具えるソリッドステートデバイス制御部２０２の一実施例２０１を示す概略的ブロック図である。ソリッドステートストレージデバイス制御部２０２は、各々がソリッドステートストレージ１１０を制御する多数のソリッドステートストレージ制御部０−Ｎ１０４ａ−ｎを具えることができる。描いた実施例においては、２つのソリッドステート制御部を示す：ソリッドステート制御部０  １０４ａおよびソリッドステートストレージ制御部Ｎ  １０４ｎは、それぞれ、ソリッドステートストレージ１１０ａ−ｎを制御する。描いた実施例においては、ソリッドステートストレージ制御部０  １０４ａは、データチャネルを制御し、接続したソリッドステートストレージ１１０ａはデータを記憶する。ソリッドステートストレージ制御部Ｎ  １０４ｎは、記憶したデータと関連するインデックスメタデータチャネルを制御し、関連するソリッドステートストレージ１１０ｎはインデックスメタデータを記憶する。代替の実施例においては、ソリッドステートストレージデバイス制御部２０２は、１つのソリッドステートストレージ１１０ａを有する１つのソリッドステート制御部１０４ａを具える。別の実施例においては、複数のソリッドステートストレージ制御部１０４ａ−ｎおよび関連するソリッドステートストレージ１１０ａ−ｎがある。一実施例においては、１又はそれ以上のソリッドステート制御部１０４ａ−１０４ｎ−１に関連するソリッドステートストレージ１１０ａ−１１０ｎ−１に接続した制御部１０４ａ−１０４ｎ−１は、データを制御し、ソリッドステートストレージ制御部１０４ｎに関連するソリッドステートストレージ１１０ｎに接続した少なくとも１つの制御部１０４ｎは、インデックスメタデータを制御する。
【００７３】
一実施例においては、少なくとも１つのソリッドステート制御部１０４は、フィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）であり、制御部機能は、ＦＰＧＡにプログラムされる。特定の実施例においては、ＦＰＧＡはＸｉｌｉｎｘ（登録商標）ＦＰＧＡである。別の実施例においては、ソリッドステートストレージ制御部１０４は、アプリケーション特異的集積回路（「ＡＳＩＣ」）またはカスタムロジックソリューションとして特別に設計されたコンポーネントを具える。各ソリッドステートストレージ制御部１０４は、通常、書き込みデータパイプライン１０６および読み取りデータパイプライン１０８を具えており、これらは、図３でさらに説明する。別の実施例においては、少なくとも１つのソリッドステートストレージ制御部１０４は、ＦＰＧＡ、ＡＳＩＣおよびカスタムロジックコンポーネントの組み合わせから構成される。
【００７４】
ソリッドステートストレージ
ソリッドステートストレージ１１０は、バンク２１４内で構成され、２方向性ストレージ入力／出力（「Ｉ／Ｏ」）バス２１０を介して並行してアクセスできる、非揮発性ソリッドステートストレージエレメント２１６、２１８、２２０のアレイである。一実施例においては、ストレージＩ／Ｏバス２１０は、一回につき、一方向性通信が可能である。例えば、データがソリッドステートストレージ１１０に書き込まれるとき、データは、ソリッドステートストレージ１１０から読み取ることはできない。別の実施例においては、データは、両方で同時にフローすることができる。なお、データバスに関して本明細書で使用されるように、２方向性が意味するのは、データパスウェイは、一回につき一方向のみしかデータフローできないが、２方向性データバス上で一方向のデータフローが停止したときは、データは、２方向性データバス上の反対方向にデータをフローすることができることである。
【００７５】
ソリッドステートストレージエレメント（例えば、ＳＳＳ  ０．０  ２１６ａ）は、通常、回路基板上のチップ（１又はそれ以上のチップのパッケージ）またはダイとして構成される。示されているように、例え、以下の複数のエレメントが、チップパッケージ、チップパッケージスタックまたはいくつかのその他のパッケージエレメントに一緒にパッケージされている場合であっても、ソリッドステートストレージエレメント（例えば、２１６ａ）は、他のソリッドストレージエレメント（例えば、２１８ａ）から独立または半独立的に機能する。示されているように、ソリッドステートストレージ２１６、２１８、２２０のカラムは、バンク２１４として指定される。示されているように、ソリッドステートストレージ１１０内のｎ×ｍのソリッドステートストレージエレメント２１６、２１８、２２０のアレイにおいて、バンク当たり「ｎ」バンク２１４ａ−ｎおよび「ｍ」ソリッドステートストレージエレメント２１６ａ−ｍ、２１８ａ−ｍ、２２０ａ−ｍが存在していてもよい。一実施例においては、ソリッドステートストレージ１１０ａは、８つのバンク２１４を有するバンク２１４あたり２０のソリッドステートストレージエレメント２１６、２１８、２２０を具え、ソリッドステートストレージ１１０ｎは、１つのバンク２１４を有するバンク２１４当たり、２つのソリッドステートストレージエレメント２１６、２１８を具える。一実施例においては、各ソリッドステートストレージエレメント２１６、２１８、２２０は、１つのレベルのセル（「ＳＬＣ」）デバイスからなっている。別の実施例においては、各ソリッドステートストレージエレメント２１６、２１８、２２０は、複数レベルのセル（「ＭＬＣ」）デバイスからなっている。
【００７６】
一実施例においては、共通ストレージＩ／Ｏバス２１０ａ列（例えば、２１６ｂ、２１８ｂ、２２０ｂ）を共有する複数のバンクのソリッドステートストレージエレメントは、一緒にパッケージされる。一実施例においては、ソリッドステートストレージエレメント２１６、２１８、２２０は、チップ当たり１又はそれ以上のダイを有することができ、１又はそれ以上のチップは、垂直方向にスタックされ、各ダイは独立してアクセス可能である。別の実施例においては、ソリッドステートストレージエレメント（例えば、ＳＳＳ  ０．０  ２１６ａ）は、ダイあたり１又はそれ以上のバーチャルダイと、チップ当たり１又はそれ以上のダイと、垂直方向にスタックされた１又はそれ以上のチップと、を有し、各バーチャルダイは独立してアクセス可能である。別の実施例においては、ソリッドステートストレージエレメントＳＳＳ  ０．０  ２１６ａは、ダイ当たり１又はそれ以上のバーチャルダイと、１又はそれ以上のいくつかまたは全部が垂直方向にスタックされたチップあたり１又はそれ以上のダイと、を有し、各バーチャルダイは、独立してアクセス可能である。
【００７７】
一実施例においては、２つのダイが、グループ当たり４つのスタックとともに垂直方向にスタックされ、８つのストレージエレメント（例えば、ＳＳＳ  ０．０−ＳＳＳ  ０．８）２１６ａ−２２０ａを形成し、各々は、別のバンク２１４ａ−ｎにある。別の実施例においては、２０のストレージエレメント（例えば、ＳＳＳ０．０−ＳＳＳ  ２０．０）２１６は、バーチャルバンク２１４ａを形成し、８のバーチャルバンクの各々は、２０のストレージエレメント（例えば、ＳＳＳ０．０−ＳＳＳ  ２０．８）２１６、２１８、２２０を有する。データは、特定のグループのストレージエレメント（ＳＳＳ  ０．０−ＳＳＳ  ０．８）２１６ａ、２１８ａ、２２０ａの全てのストレージエレメントに対して、ストレージＩ／Ｏバス２１０を介して、ソリッドステートストレージ１１０に送られる。ストレージ制御バス２１２ａは、特定のバンク（例えば、バンク−０  ２１４ａ）を選択するために使用され、全てのバンク２１４に接続されたストレージＩ／Ｏバス２１０を介して受信するデータは、選択されたバンク２１４ａに書き込まれる。
【００７８】
好適な実施例においては、ストレージＩ／Ｏバス２１０は、１又はそれ以上の独立Ｉ／Ｏバスからなり（２１０ａ．ａ−ｍ、２１０ｎ．ａ−ｍを具える「ＩＩＯＢａ−ｍ」）、各列内のソリッドステートストレージエレメントは、各ソリッドステートストレージエレメント２１６、２１８、２２０に並行してアクセスする独立Ｉ／Ｏバスの１つを共有するので、全てのバンク２１４は、同時にアクセスされる。例えば、ストレージＩ／Ｏバス２１０の１つのチャネルは、各バンク２１４ａ−ｎの第１のソリッドステートストレージエレメント２１６ａ、２１８ａ、２２０ａに同時にアクセスすることができる。ストレージＩ／Ｏバス２１０の第２のチャネルは、各バンク２１４ａ−ｎの第２のソリッドステートストレージエレメント２１６ｂ、２１８ｂ、２２０ｂに同時にアクセスできる。ソリッドステートストレージ２１６、２１８、２２０の各列は、同時にアクセスされる。一実施例においては、ソリッドステートストレージエレメント２１６、２１８、２２０が複数レベル（物理的にスタックされている）ある場合、ソリッドステートストレージエレメント２１６、２１８、２２０の全ての物理的レベルは、同時にアクセスされる。本明細書で使用されるように、「同時」は、ほぼ同時のアクセスを含み、デバイスは、スイッチングノイズを回避するために、わずかに異なる間隔でアクセスされる。「同時」は、このような文脈で使用され、シーケンシャルまたは連続（ｓｅｒｉａｌ）アクセスとは分け、コマンドおよび／またはデータは、交互に独立して送られる。
【００７９】
一般的に、バンク２１４ａ−ｎは、ストレージ制御バス２１２を用いて独立して選択される。一実施例においては、バンク２１４は、使用可能チップまたは選択チップを用いて選択される。選択チップおよび使用可能チップの両方が使用可能な場合、ストレージ制御バス２１２は、複数レベルのソリッドステートストレージエレメント２１６、２１８、２２０の１つのレベルを選択することができる。その他の実施例においては、ストレージ制御バス２１２によって他のコマンドを使用して、複数レベルのソリッドステートストレージエレメント２１６、２１８、２２０の１つのレベルを独立して選択する。ソリッドステートストレージエレメント２１６、２１８、２２０は、ストレージＩ／Ｏバス２１０およびストレージ制御バス２１２上で伝達される制御情報とアドレス情報との組み合わせを介して選択されてもよい。
【００８０】
一実施例においては、各ソリッドステートストレージエレメント２１６、２１８、２２０は、消去ブロックにパーティション化され、各消去ブロックは、ページにパーティション化される。一般的なページは、２０００バイト（「２ｋＢ」）である。一例においては、ソリッドステートストレージエレメント（例えば、ＳＳＳ０．０）は、２つのレジスタを具え、２つのページをプログラムすることができ、２つのレジスタソリッドステートストレージエレメント２１６、２１８、２２０は、４ｋＢの容量を有する。さらに、２０のソリッドステートストレージエレメント２１６、２１８、２２０のバンク２１４は、ストレージＩ／Ｏバス２１０のチャネルを通る同一アドレスでアクセスされる８０ｋＢ容量のページを有することが可能である。
【００８１】
８０ｋＢのソリッドステートストレージエレメント２１６、２１８、２２０のバンク２１４における上記グループのページは、バーチャルページと呼ばれる。同様にバンク２１４ａの各ストレージエレメント２１６ａ−ｍの消去ブロックは、バーチャル消去ブロックを形成するようにグループ化されてもよい。好適な実施例においては、ソリッドステートストレージエレメント２１６、２１８、２２０内の消去ブロックページは、消去コマンドをソリッドステートストレージエレメント２１６、２１８、２２０内で受信したときに消去される。消去ブロック、ページ、プレーンまたはソリッドステートストレージエレメント２１６、２１８、２２０内のその他のロジックおよび物理的ディビジョンのサイズおよび数が、技術の進歩に伴い、所定時間に亘って変化することが予想されるが、新規構成に一致する多数の実施例が、可能であり、本明細書の一般的説明と一致すると理解されたい。
【００８２】
一般的に、パケットは、ソリッドステートストレージエレメント２１６、２１８、２２０内の特定ロケーションに書き込まれるとき、このパケットは、特定バンクの特定エレメントの特定消去ブロックに特異的である特定ページ内のロケーションに書き込まれるように意図されており、物理的アドレスは、ストレージＩ／Ｏバス２１０上で送られ、パケットがそれに続く。物理的アドレスは、パケットをページ内の指定ロケーションへと指令するための、ソリッドステートストレージエレメント２１６、２１８、２２０の情報を十分に保有している。ストレージエレメント（例えば、ＳＳＳ  ０．０−ＳＳＳ  ０．Ｎ  ２１６ａ、２１８ａ、２２０ａ）の列における全てのストレージエレメントは、ストレージＩ／Ｏバス２１０ａ．ａ内の適宜なバスによって同時にアクセスされ、適宜なページに到達し、ストレージエレメント（ＳＳＳ  ０．０−ＳＳＳ  ０．Ｎ  ２１６ａ、２１８ａ、２２０ａ）の列において同様にアドレス化されたページに、データパケットを書き込むことを回避するので、データパケットが書き込まれるべき正規のページとともにソリッドステートストレージエレメントＳＳＳ  ０．０  ２１６ａを具えるバンク２１４ａは、ストレージ制御バス２１２によって同時に選択される。
【００８３】
同様に、ストレージＩ／Ｏバス２１０上を伝達される読み取りコマンドは、１つのバンク２１４ａと、このバンク２１４ａ内の適宜なページとを選択するために、ストレージ制御バス２１２上の同時コマンドを必要とする。好適な実施例においては、読み取りコマンドは、ページ全体を読み取り、さらに、バンク２１４において、並行して複数のソリッドステートストレージエレメント２１６、２１８、２２０があるので、バーチャルページ全体は、読み取りコマンドを用いて読み取られる。なお、読み取りコマンドは、バンクインターリーブに関して以下で説明するように、サブコマンドにブレーク可能である。さらに、バーチャルページは、書き込みオペレーションでアクセス可能である。
【００８４】
消去ブロック消去コマンドは、特定の消去ブロックを消去する特定の消去ブロックアドレスを用いて、ストレージＩ／Ｏバス２１０を介して、消去ブロックを消去するように送信される。一般的に、消去ブロック消去コマンドは、バーチャル消去ブロックを消去するために、ストレージＩ／Ｏバス２１０の並行パスを介して送信可能であり、特定の消去ブロックアドレスを有する各々が、特定の消去ブロックを消去する。同時に、特定バンク（例えば、バンク−０  ２１４ａ）がストレージ制御バス２１２を介して選択され、全てのバンク（バンク１−Ｎ２１４ｂ−ｎ）における同様にアドレス化されたブロックが消去されるのを防止する。さらに、その他のコマンドは、ストレージＩ／Ｏバス２１０とストレージ制御バス２１２との組み合わせを利用して特定ロケーションに送信可能である。当分野の当業者であれば、２方向性ストレージＩ／Ｏバス２１０およびストレージ制御バス２１２を用いて、特定のストレージロケーションを選択できるその他の方法を理解されたい。
【００８５】
一実施例においては、パケットは、ソリッドステートストレージ１１０にシーケンシャルに書き込まれる。例えば、パケットは、ストレージエレメント２１６のバンク２１４ａのストレージ書き込みバッファへとストリームされ、バッファがフルの場合、パケットは、指定のバーチャルページにプログラムされる。次いで、パケットは、ストレージ書き込みバッファを補充（ｒｅｆｉｌｌ）し、フルの場合、パケットは、次のバーチャルページに書き込まれる。次のバーチャルページは、同一バンク２１４ａまたは他のバンク（例えば、２１４ｂ）内にあってもよい。このプロセスは、一般的に、バーチャル消去ブロックが満たされるまで、バーチャルページごとに繰り返される。別の実施例においては、ストリーミングは、バーチャル消去ブロックバウンダリに亘って繰り返され、このプロセスは、バーチャル消去ブロックごとに繰り返される。
【００８６】
読み取り、修正、書き込みオペレーションにおいて、オブジェクト関連データパケットは、配置され、読み取りオペレーションで読み取られる。修正されたオブジェクトのデータセグメントは、データセグメントが読み取られるロケーションに書き込まれない。その代わり、修正されたデータセグメントは、データパケットに再度変換され、次いで、そのとき書き込まれているバーチャルページの次の利用可能ロケーションに書き込まれる。それぞれのデータパケットのオブジェクトインデックス項目は、修正されたデータセグメントを含むパケットのポイントに修正される。修正されていない同一オブジェクトに関連したデータパケットのオブジェクトインデックスの１又はそれ以上の項目は、未修正データパケットのもともとのロケーションに対するポインタを具える。従って、例えば、オブジェクトの前バージョンを維持するために、もともとのオブジェクトを維持している場合、もともとのオブジェクトは、もともと書き込まれていた全てのデータパケットに対するオブジェクトインデックスのポインタを有する。この新規オブジェクトは、もともとのデータパケットに対するオブジェクトインデックスのポインタと、その時に書き込まれているバーチャルページにおける修正データパケットに対するポインタとを有する。
【００８７】
コピーオペレーションにおいて、オブジェクトインデックスは、ソリッドステートストレージ１１０に記憶された多数のパケットにマップされたもともとのオブジェクトの項目を具える。コピーが行われるとき、新規オブジェクトが作成され、新規項目が、もともとのパケットに新規オブジェクトをマッピングするオブジェクトインデックスに作成される。新規オブジェクトは、ソリッドステートストレージ１１０に書き込まれ、そのロケーションは、オブジェクトインデックスの新規項目にマッピングされる。新規オブジェクトパケットは、コピーに伝達されていないもともとのオブジェクトで変更が生じた場合またはオブジェクトインデックスが損失または破損した場合に、参照されるもともとのオブジェクト内のパケットを識別するために使用できる。
【００８８】
有益なことに、パケットをシーケンシャルに書き込むことは、ソリッドステートストレージ１１０のより均等な利用を容易にし、ソリッドストレージデバイス制御部２０２がソリッドステートストレージ１１０内のストレージホットスポットおよび各種バーチャルページの利用レベルをモニタすることを可能にする。さらに、パケットをシーケンシャルに書き込むことは、下記で詳細に示すように、強力で有効な不要データ（ｇａｒｂａｇｅ）コレクションシステムを容易にする。当分野の当業者であれば、データパケットのシーケンシャルストレージのその他の利点を理解されたい。
【００８９】
ソリッドステートストレージデバイス制御部
各種実施例においては、ソリッドステートストレージデバイス制御部２０２は、データバス２０４、ローカルバス２０６、バッファ制御部２０８、バッファ０−Ｎ  ２２２ａ−ｎ、マスタ制御部２２４、ダイレクトメモリアクセス（「ＤＭＡ」）制御部２２６、メモリ制御部２２８、ダイナミックメモリアレイ２３０、静的ランダムメモリアレイ２３２、管理制御部２３４、管理バス２３６、システムバス２４０へのブリッジ２３８、および、種々雑多なロジック２４２も具え、以下にこれを示す。他の実施例においては、システムバス２４０は、１又はそれ以上のネットワークインターフェースカード（「ＮＩＣｓ」）２４４に結合し、そのうちのいくつかは、リモートＤＭＡ（「ＲＤＭＡ」）制御部２４６、１又はそれ以上の中央処理装置（ＣＰＵ）２４８、１又はそれ以上の外部メモリ制御部２５０および関連する外部メモリアレイ２５２、１又はそれ以上のストレージ制御部２５４、ピア（ｐｅｅｒ）制御部２５６およびアプリケーション特異的処理装置２５８を具え、これらは以下で説明する。システムバス２４０に接続されたコンポーネント２４４−２５８は、コンピュータ１１２に配置されてもよく、その他のデバイスであってもよい。
【００９０】
一般的に、ソリッドステートストレージ制御部１０４は、ストレージＩ／Ｏバス２１０を介してソリッドステートストレージ１１０とデータを通信する。ソリッドステートストレージが、バンク２１４内に配列され、各々のバンク２１４が、同時にアクセスされる複数のストレージエレメント２１６、２１８、２２０を具える一般的な実施例においては、ストレージＩ／Ｏバス２１０は、バスのアレイであり、ストレージエレメント２１６、２１８、２２０の各列の１つは、バンク２１４に亘って存在している。本明細書で使用されるように、用語「ストレージＩ／Ｏバス」は、１つのストレージＩ／Ｏバス２１０、または、バス２０４に独立したデータアレイを意味する。好適な実施例においては、ストレージエレメントの列（例えば、２１６ａ、２１８ａ、２２０ａ）にアクセスする各ストレージＩ／Ｏバス２１０は、ストレージエレメントの列２１６ａ、２１８ａ、２２０ａにアクセスされるストレージディビジョン（例えば、消去ブロック）のロジック−物理マッピングを具えることができる。このマッピングによって、ストレージディビジョンの物理アドレスにマッピングされる論理アドレスが、第１のストレージディビジョンが機能していない場合、部分的に機能していない場合、アクセス不能な場合、または、その他何らかの問題がある場合に、異なるストレージディビジョンに再マップ可能である。再マップは、図４Ａおよび４Ｂの再マップモジュール４３０に関連してさらに説明する。
【００９１】
データは、システムバス２４０、ブリッジ２３８、ローカルバス２０６、バッファ２２２を介して、また、最終的にデータバス２０４を介して、要求デバイス１５５からソリッドステートストレージ制御部１０４と通信可能である。データバス２０４は、一般的に、バッファ制御部２０８を用いて制御される１又はそれ以上のバッファ２２２ａ−ｎに接続される。バッファ制御部２０８は、通常、ローカルバス２０６からバッファ２２２へ、データバス２０４からパイプラインインプットバッファ３０６およびアウトプットバッファ３３０を介して、データの転送を制御する。一般的に、バッファ制御部２０８は、どのように、要求デバイス１５５からきたデータがバッファ２２２に一時的に記憶可能で、次いで、データバス２０４上を転送されるかを制御でき、あるいは、その逆も同様に制御でき、異なるクロックドメインを考慮し、データ不一致（ｃｏｌｌｉｓｉｏｎ）を防ぐことができる。バッファ制御部２０８は、通常、マスタ制御部２２４とともに作動し、データフローに調和させる。データがくるときは、データは、システムバス２４０の上に到達し、ブリッジ２３８を介してローカルバス２０６に転送される。
【００９２】
一般的に、データは、マスタ制御部２２４およびバッファ制御部２０８によって指令されるように、ローカルバス２０６から１又はそれ以上のデータバッファ２２２へと転送される。次いで、データは、バッファ２２２からデータバス２０４へと、ソリッドステート制御部１０４を介して、ＮＡＮＤフラッシュまたはその他のストレージメディアなどソリッドステートストレージ１１０へとフローする。好適な実施例においては、データと、このデータとともにくる関連したアウトオブバンドメタデータ（「オブジェクトメタデータ」）は、１又はそれ以上のソリッドステートストレージ制御部１０４ａ−１０４ｎ−１および関連するソリッドステートストレージ１１０ａ−１１０ｎ−１を具える１又はそれ以上のデータチャンネルを用いて通信され、一方、少なくとも１つのチャネル（ソリッドステートストレージ制御部１０４ｎ、ソリッドステートストレージ１１０ｎ）は、インデックス情報や、ソリッドステートストレージデバイス１０２に内部生成されるその他のメタデータなど、インバンドメタデータ専用である。
【００９３】
通常、ローカルバス２０６は、２方向性バスであるか、または、ソリッドステートストレージデバイス制御部２０２の内部のデバイス間、および、ソリッドステートストレージデバイス１０２の内部デバイスと、システムバス２４０に接続したデバイス２４４−２５８との間において、データおよびコマンドの通信を可能にするバスのセットである。ブリッジ２３８は、ローカルバス２０６とシステムバス２４０との間の通信を容易にする。当分野の当業者であれば、リング構造またはスイッチ式スター設定、ならびに、バス２４０、２０６、２０４、２１０およびブリッジ２３８の機能など、その他の実施例を理解されたい。
【００９４】
通常、システムバス２４０は、コンピュータ１１２のバスであり、または、ソリッドステートストレージデバイス１０２がインストールまたは接続されているその他のデバイスである。一実施例においては、システムバス２４０は、ＰＣＩ−ｅバス、シリアルアドバンステクノロジーアタッチメント（「シリアルＡＴＡ」）バス、パラレルＡＴＡなどでもよい。別の実施例においては、システムバス２４０は、スモールコンピュータシステムインターフェース（「ＳＣＳＩ」）、ＦｉｒｅＷｉｒｅ、ファイバーチャネル、ＵＳＢ、ＰＣＩｅ−ＡＳなど、外部バスである。ソリッドステートストレージデバイス１０２は、デバイスの内側に適用するように、または、外側に接続されたデバイスとして、パッケージされてもよい。
【００９５】
ソリッドステートストレージデバイス制御部２０２は、ソリッドステートストレージ１０２内のより高レベルの機能を制御するマスタ制御部２２４を具える。マスタ制御部２２４は、各種実施例において、オブジェクト要求およびその他の要求を解釈することによってデータフローを制御し、インデックスの作成を指令し、データに関連したオブジェクト識別子を、関連するデータの物理ロケーションにマップして、ＤＭＡ要求と調和する本明細書に記載される機能の多くは、マスタ制御部２２４によって完全に、部分的に制御される。
【００９６】
一実施例においては、マスタ制御部２２４は、内蔵型制御部を使用する。別の実施例においては、マスタ制御部２２４は、動的メモリアレイ２３０（動的ランダムアクセスメモリ「ＤＲＡＭ」）、静的メモリアレイ２３２（静的ランダムアクセスメモリ「ＳＲＡＭ」）など、ローカルメモリを使用する。一実施例においては、ローカルメモリは、マスタ制御部２２４を用いて制御される。別の実施例においては、マスタ制御部２２４は、メモリ制御部２２８を介してローカルメモリにアクセスする。別の実施例においては、マスタ制御部２２４は、Ｌｉｎｕｘサーバを運用し、ＷｏｒｌｄＷｉｄｅＷｅｂ、ハイパーテキストマークアップ言語（「ＨＴＭＬ」）など、各種共通サーバインターフェースをサポートすることができる。別の実施例においては、マスタ制御部２２４は、ナノプロセッサを使用する。マスタ制御部２２４は、プログラマブル若しくは標準ロジック、または、上記に挙げた制御部タイプの組み合わせ、を使用して構成されていてもよい。当分野の当業者であれば、マスタ制御部２２４の多数の実施例を理解されたい。
【００９７】
一実施例においては、ストレージ制御部１５２／ソリッドステートストレージデバイス制御部２０２は、複数のデータストレージデバイス／ソリッドステートストレージ１１０ａ−ｎを管理し、マスタ制御部２２４は、ソリッドステートストレージ制御部１０４ａ−ｎなど、内部制御部中のワークロードを分割する。例えば、マスタ制御部２２４は、データストレージデバイス（例えば、ソリッドステートストレージ１１０ａ−ｎ）に書き込まれるオブジェクトを分割することができ、オブジェクトの一部は、接続したデータストレージデバイスの各々に記憶される。この特徴は、オブジェクトのより迅速なストレージおよびアクセスを可能にする性能向上である。一実施例においては、マスタ制御部２２４は、ＦＰＧＡを使用して実装される。別の実施例においては、マスタ制御部２２４内のファームウェアは、管理バス２３６、ＮＩＣ２４４に接続したネットワークを介したシステムバス２４０、または、システムバス２４０に接続したその他のデバイスを介してアップデート可能である。
【００９８】
一実施例においては、オブジェクトを管理するマスタ制御部２２４は、ブロックストレージをエミュレートし、コンピュータ１１２、または、ストレージデバイス／ソリッドステートストレージ１０２に接続したその他のデバイスは、ブロックストレージデバイスとしてストレージデバイス／ソリッドステートストレージデバイス１０２を観察（ｖｉｅｗ）し、ストレージデバイス／ソリッドステートストレージデバイス１０２内の特定の物理アドレスにデータを送る。次いで、マスタ制御部２２４は、ブロックを分割し、それをオブジェクトとしてデータブロックに記憶する。さらに、マスタ制御部２２４は、ブロックと、このブロックとともに送られる物理アドレスを、マスタ制御部２２４によって決定される実際のロケーションにマップする。このマッピングは、オブジェクトインデックスに記憶される。通常、ブロックエミュレーションに関し、ブロックデバイスアプリケーションプログラムインターフェース（「ＡＰＩ」）は、コンピュータ１１２、クライアント１１４、または、ブロックストレージデバイスとしてストレージデバイス／ソリッドステートストレージデバイス１０２を利用することを望むその他のデバイス内のドライバに設けられる。
【００９９】
別の実施例においては、マスタ制御部２２４は、ＮＩＣ制御部２４４および内蔵型ＲＤＭＡ制御部２４６を調整し、データおよびコマンドセットをジャストインタイムＲＤＭＡ転送する。ＮＩＣ制御部２４４は、非透明ポートの背後に隠れ、カスタムドライバを使用することができる。さらに、クライアント１１４のドライバは、標準スタックＡＰＩを使用し、Ｉ／Ｏメモリドライバを介してコンピュータネットワーク１１６にアクセスでき、ＮＩＣ２４４とともに機能する。
【０１００】
一実施例においては、マスタ制御部２２４も、独立ドライブ冗長アレイ（「ＲＡＩＤ」）制御部である。データストレージデバイス／ソリッドステートストレージデバイス１０２が、１又はそれ以上の他のデータストレージデバイス／ソリッドステートストレージデバイス１０２とネットワーク接続される場合、マスタ制御部２２４は、１段（ｔｉｅｒ）ＲＡＩＤ、複数段ＲＡＩＤ、プログレッシブＲＡＩＤ用のＲＡＩＤ制御部でもよい。さらに、マスタ制御部２２４によって、いくつかのオブジェクトはＲＡＩＤアレイに記憶でき、他のオブジェクトはＲＡＩＤ以外に記憶できる。別の実施例においては、マスタ制御部２２４は、分散型ＲＡＩＤ制御部エレメントでもよい。別の実施例においては、マスタ制御部２２４は、多数のＲＡＩＤ、分散型ＲＡＩＤ、本明細書に記載されるその他の機能を具えることができる。
【０１０１】
一実施例においては、マスタ制御部２２４は、単一または冗長ネットワークマネージャ（例えば、スイッチ）を調整して、ルーティングを構築し、バンド幅使用（ｂａｎｄｗｉｄｔｈ  ｕｔｉｌｉｚａｔｉｏｎ）、フェイルオーバ（ｆａｉｌｏｖｅｒ）のバランスをとる。別の実施例においては、マスタ制御部２２４は、統合型アプリケーション特異的ロジック（ローカルバス２０６を介して）と、関連するドライバソフトウェアを調整する。別の実施例においては、マスタ制御部２２４は、接続されたアプリケーション特異的ロジック２５８またはロジック（外部システムバス２４０）および関連するドライバソフトウェアを調整する。別の実施例においては、マスタ制御部２２４は、リモートアプリケーション特異的ロジック（コンピュータネットワーク１１６を介して）および関連するドライバソフトウェアを調整する。別の実施例においては、マスタ制御部２２４は、ローカルバス２０６または外部バス接続ハードディスクドライブ（「ＨＤＤ」）ストレージ制御部を調整する。
【０１０２】
一実施例においては、マスタ制御部２２４は、１又はそれ以上のストレージ制御部２５４と通信し、ストレージデバイス／ソリッドステートストレージデバイス１０２は、ＳＣＳＩバス、インターネットＳＣＳＩバス、インターネットＳＣＳＩ（「ｉＳＣＳＩ」）、ファイバチャネルを介して接続されたストレージデバイスとして存在してもよい。その間、ストレージデバイス／ソリッドステートストレージデバイス１０２は、オブジェクトを自律的に管理することができ、オブジェクトファイルシステムまたは分散型オブジェクトファイルシステムとして存在してもよい。マスタ制御部２２４は、ピア制御部２５６および／またはアプリケーション特異的プロセッサ２５８によってアクセスすることができる。
【０１０３】
別の実施例においては、マスタ制御部２２４は、自律的に統合された管理制御部を調整し、ＦＰＧＡコードおよび／または制御部ソフトウェアを定期的に確認し、実行中（リセット）ＦＰＧＡコードを確認し、および／または、電源が入っている間（リセット）制御部ソフトウェアを確認し、外部リセット要求をサポートし、ウォッチドッグタイムアウトによるリセット要求をサポートし、電圧、電流、電力、温度ならびにその他の環境測定値および中断閾値設定をサポートする。別の実施例においては、マスタ制御部２２４は、不要データコレクションを管理し、再利用のための消去ブロックをフリーにする。別の実施例においては、マスタ制御部２２４は、摩耗レベルを管理する。別の実施例においては、マスタ制御部２２４によって、データストレージデバイス／ソリッドステートストレージデバイス１０２が、複数のバーチャルデバイスにパーティション化され、パーティションベースメディアの暗号化が可能となる。さらなる別の実施例においては、マスタ制御部２２４は、有利な複数ビットＥＣＣ修正部を有するソリッドステートストレージ制御部１０４をサポートする。当分野の当業者であれば、ストレージ制御部１５２において、または、より具体的には、ソリッドステートストレージデバイス１０２において、マスタ制御部２２４のその他の特性および機能を理解されたい。
【０１０４】
一実施例においては、ソリッドステートストレージデバイス制御部２０２は、動的ランダムメモリアレイ２３０および／または静的ランダムメモリアレイ２３２を制御するメモリ制御部２２８を具える。上述したように、メモリ制御部２２８は、独立しているか、または、マスタ制御部２２４と統合されている。通常、メモリ制御部２２８は、ＤＲＡＭ（動的ランダムメモリアレイ２３０）およびＳＲＡＭ（静的ランダムメモリアレイ２３２）など、いくつかのタイプの揮発メモリを制御する。他の例においては、メモリ制御部２２８は、電気的商況可能プログラム可能読み取り専用メモリ（「ＥＥＰＲＯＭ」）などのその他のメモリタイプを制御できる。他の実施例においては、メモリ制御部２２８は、２又はそれ以上のタイプを制御し、メモリ制御部２２８は、１以上の制御部を具えてもよい。一般的に、メモリ制御部２２８は、できるだけ多くのＳＲＡＭ２３２が実行可能であるように、ＤＲＡＭ２３０によって制御し、ＳＲＡＭ２３２を補助する。
【０１０５】
一実施例においては、オブジェクトインデックスは、メモリ２３０、２３２に記憶され、次いで、ソリッドステートストレージ１１０ｎのチャネルまたはその他の非揮発性メモリに定期的にオフロードされる。当分野の当業者であれば、動的メモリアレイ２３０、メモリ制御部２２８および静的メモリアレイ２３２のその他の使用および設定を理解されたい。
【０１０６】
一実施例においては、ソリッドステートストレージデバイス制御部２０２はＤＭＡ制御部２２６を具え、このＤＭＡ制御部２２６は、ストレージデバイス／ソリッドステートストレージデバイス１０２および１又はそれ以上の外部メモリ制御部２５０、関連する外部メモリアレイ２５２およびＣＰＵ２４８間のＤＭＡオペレーションを制御する。なお、外部メモリ制御部２５０および関連する外部メモリアレイ２５２は、ストレージデバイス／ソリッドステートストレージデバイス１０２の外部にあるので、外部と呼ぶ。さらに、ＤＭＡ制御部２２６も、ＮＩＣ２４４を介した要求デバイスおよび関連するＲＤＭＡ制御部２４６を用いてＲＤＭＡオペレーションを制御することができる。ＤＭＡおよびＲＤＭＡは、以下でより詳細に説明する。
【０１０７】
一実施例においては、ソリッドステートストレージデバイス制御部２０２は、管理バス２３６に接続された管理制御部２３４を具える。通常、管理制御部２３４は、環境メトリクスおよびストレージデバイス／ソリッドステートストレージデバイス１０２のステータスを管理する。管理制御部２３４は、管理バス２３６を介してデバイス温度、ファンスピード、電力供給設定などをモニタすることができる。管理制御部２３４は、ＦＰＧＡコードおよび制御部ソフトウェアのストレージに関して、消去可能プログラム可能読み取り専用メモリ（「ＥＥＰＲＯＭ」）の読み取りおよびプログラムをサポートすることができる。通常、管理バス２３６は、ストレージデバイス／ソリッドステートストレージデバイス１０２内に各種コンポーネントを接続させる。管理制御部２３４は、ローカルバス２０６を介して、アラート、中断などと通信でき、システムバス２４０または他のバスに対して別のコネクションを具えることができる。一実施例においては、管理バス２３６は、インターインテグレイテッド回路（Ｉｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：「Ｉ２Ｃ」）である。当分野の当業者であれば、管理バス２３６によってストレージデバイス／ソリッドステートストレージデバイス１０２のコンポーネントに接続された、管理制御部２３４のその他の関連する機能および利用を理解される。
【０１０８】
一実施例においては、ソリッドステートストレージデバイス制御部２０２は、特定のアプリケーションにカスタマイズ可能な種々雑多なロジック２４２を具える。通常、ソリッドステートデバイス制御部２０２またはマスタ制御部２２４が、ＦＰＧＡまたはその他の設定可能制御部を用いて設定される場合、特定のアプリケーション、カスタマ要求、ストレージ要求に基づいて、カスタムロジックが含まれる。
【０１０９】
データパイプライン
図３は、本発明によるソリッドステートストレージデバイス１０２における書き込みデータパイプライン１０６および読み取りデータパイプライン１０８を有する、ソリッドステートストレージ制御部１０４の一実施例３００を示した概略ブロック図である。実施例３００は、データバス２０４、ローカルバス２０６およびバッファ制御２０８を具え、これらは、図２のソリッドステートストレージデバイス制御部２０２に関連して記載されたものと実質的に同等である。書き込みデータパイプライン１０６は、パケッタイザ３０２およびエラー修正コード（「ＥＣＣ」）ジェネレータ３０４を具える。他の実施例においては、書き込みデータパイプライン１０６は、インプットバッファ３０６、書き込み同期バッファ３０８、書き込みプログラムモジュール３１０、圧縮モジュール３１２、暗号化モジュール３１４、不要データコレクタバイパス３１６（読み取りデータパイプライン１０８内の一部を有する）、メディア暗号化モジュール３１８、および、書き込みバッファ３２０を具える。読み取りデータパイプライン１０８は、読み取り同期バッファ３２８、ＥＣＣ修正モジュール３２２、デパケッタイザ（ｄｅｐａｃｋｅｔｉｚｅｒ）３２４、アライメントモジュール３２６およびアウトプットバッファ３３０を具える。他の実施例においては、読み取りデータパイプライン１０８は、メディア解読モジュール３３２、不要データコレクタバイパス３１６の一部、解読モジュール３３４、展開（ｄｅｃｏｍｐｒｅｓｓｉｏｎ）モジュール３３６および読み取りプログラムモジュール３３８を具えることができる。ソリッドステートストレージ制御部１０４は、さらに、制御およびステータスレジスタ３４０、制御キュー３４２、バンクインターリーブ制御部３４４、同期バッファ３４６、ストレージバス制御部３４８および多重チャネル（「ＭＵＸ」）３５０を具えることができる。ソリッドステート制御部１０４のコンポーネントおよび関連する書き込みデータパイプライン１０６および読み取りデータパイプライン１０８は、以下で説明する。他の実施例においては、同期ソリッドステートストレージ１１０を使用することができ、同期バッファ３０８、３２８を省くことができる。
【０１１０】
書き込みデータパイプライン
書き込みデータパイプライン１０６は、直接または間接的に別の書き込みデータパイプライン１０６を介して、ソリッドステートストレージに書き込まれるデータ又はメタデータセグメントを受信する、パケッタイザ３０２を具え、ソリッドステートストレージ１１０用のサイズの１又はそれ以上のパケットを作成する。データまたはメタデータセグメントは、通常、オブジェクトの一部であるが、オブジェクト全体を具えることもできる。別の実施例においては、データセグメントは、データブロックの一部であるが、データブロック全体を具えることもできる。一般的に、オブジェクトは、コンピュータ１１２、クライアント１１４またはその他のコンピュータ若しくはデバイスから受信し、ソリッドステートストレージデバイス１０２またはコンピュータ１１２にストリーミングされるデータセグメントでソリッドステートストレージデバイス１０２に転送される。さらに、データセグメントは、データパーセルなど、別の名称として周知であるが、本明細書で規定されるように、オブジェクトまたはデータブロックの全てまたは一部を具える。
【０１１１】
各オブジェクトは、１又はそれ以上のパケットとして記憶される。各オブジェクトは、１又はそれ以上のコンテナパケットを有することができる。各パケットはヘッダを含む。ヘッダは、ヘッダタイプフィールドを具えることができる。タイプフィールドは、データ、オブジェクト属性、メタデータ、データセグメントデリミタ（マルチパケット）、オブジェクトストラクチャ、オブジェクトリンケージなどを具えることができる。ヘッダは、パケットに含まれるデータのバイト数など、パケットサイズに関する情報を具えることができる。パケットの長さは、パケットタイプによって構築可能である。ヘッダは、オブジェクトパケットの関係性を構築する情報を具えることができる。一例では、オブジェクト内のデータセグメントの位置を識別するために、データパケットのオフセットを使用することができる。当分野の当業者であれば、パケッタイザ３０２によってデータに加えられるヘッダに含まれるその他の情報、および、データパケットに加えられるその他の情報を理解されたい。
【０１１２】
各パケットは、データまたはデータセグメントからのヘッダおよび可能であればデータを具えることができる。各パケットのヘッダは、パケットが属するオブジェクトにパケットに関連させる、関連情報を具える。例えば、ヘッダは、データパケットを形成していたデータセグメント、オブジェクトまたはデータブロックを示すオブジェクト識別子およびオフセットを具えることができる。さらに、ヘッダは、パケットを記憶するための、ストレージバス制御部によって使用される論理アドレスを具えることができる。また、ヘッダは、パケットに含まれるバイト数など、パケット寸法に関する情報を具えることができる。さらに、ヘッダは、データセグメントまたはオブジェクトを再構築するとき、データセグメントがオブジェクト内のその他のパケットに対して属しているところを識別するシークエンス番号を具えることができる。ヘッダは、ヘッダタイプフィールドを具えることができる。タイプフィールドは、データ、オブジェクト属性、メータデータ、データセグメントデリミタ（マルチパケット）、オブジェクトストラクチャ、オブジェクトリンケージなどを具えることができる。当分野当業者であれば、パケッタイザ３０２によってデータ又はメタデータに加えられるヘッダに含まれてもよいその他の情報、および、パケットに加えることができる情報を理解されたい。
【０１１３】
書き込みデータパイプライン１０６は、パケッタイザ３０２から受信する１又はそれ以上のパケットに関する１又はそれ以上のエラー修正コード（「ＥＣＣ」）を生成するＥＣＣジェネレータ３０４を具える。ＥＣＣジェネレータ３０４は、通常、エラー修正アルゴリズムを使用し、パケットとともに記憶されるＥＣＣを生成する。パケットとともに記憶されたＥＣＣは、通常、トランスミッションおよびストレージを介してデータに入ったエラーを検出し修正するために使用される。一実施例においては、パケットは、長さＮの未コード化ブロックとしてＥＣＣジェネレータ３０４内にストリーミングされる。長さＳのシンドロームが計算され、追加され、長さＮ＋Ｓの符号化ブロックとして出力される。Ｎ値およびＳ値は、特別な性能、効率および強力（ｒｏｂｕｓｔｎｅｓｓ）メトリクスを得るために選択されるアルゴリズムの特性に基づいている。好適な実施例においては、ＥＣＣブロックとパケットとの間において、固定された関係性はなく、パケットは、１以上のＥＣＣブロックを具えることができ、ＥＣＣブロックは、１以上のパケットを具えることができ、第１のパケットは、ＥＣＣブロック内のいずれかで終了（ｅｎｄ）してもよく、第２のパケットは、同一のＥＣＣブロック内において第１のパケットのエンドの後から開始することができる。好適な実施例においては、ＥＣＣアルゴリズムは、動的に修正されない。好適な実施例においては、データパケットとともに記憶されたＥＣＣは、３以上のビットにおけるエラーを修正するのに十分に強力である。
【０１１４】
有利には、シングルビット以上の修正またはダブルビット修正でさえ可能な強力なＥＣＣアルゴリズムを用いることで、ソリッドステートストレージ１１０の寿命を延長させることができる。例えば、ソリッドステートストレージ１１０内のストレージ媒体としてフラッシュメモリが使用される場合、フラッシュメモリは、消去サイクルにつきエラーなしで、約１００，０００回書き込み可能である。この利用制限は、強力なＥＣＣアルゴリズムを使用して拡張することができる。ＥＣＣジェネレータ３０４を有し、ソリッドステートストレージデバイス１０２に搭載されたＥＣＣ修正モジュール３２２を対応させることで、ソリッドステートストレージデバイス１０２は、エラーを内部で修正することができ、シングルビット修正など、弱いＥＣＣアルゴリズムを使用した場合よりも長い寿命を持つことができる。なお、その他の実施例においては、ＥＣＣジェネレータ３０４は、より弱いアルゴリズムを使用することができ、シングルビットまたはダブルビットエラーを修正できる。別の実施例においては、ソリッドステートストレージデバイス１１０は、容量を増大するためにマルチレベルセル（「ＭＬＣ」）フラッシュなど信頼性が低いストレージを具えてもよく、ストレージは、より強力なＥＣＣアルゴリズムなしで、十分な信頼性がなくてもよい。
【０１１５】
一実施例においては、書き込みパイプライン１０６は、入力バッファ３０６を具え、この入力バッファ３０６は、ソリッドステートストレージ１１０に書き込まれるデータセグメントを受信し、パケッタイザ３０２（またはより複雑な書き込みデータパイプライン１０６用のその他のステージ）など、書き込みデータパイプライン１０６の次のステージが準備され、次のデータセグメントを処理されるまでに、入ってくるデータセグメントを記憶する。通常、入力バッファ３０６によって、受信したレートデータセグメントと、適宜なサイズのデータバッファを用いて書き込みデータパイプライン１０６によって処理されるデータセグメントとの間の不一致を許容することができる。さらに、入力バッファ３０６によって、データバス２０４のオペレーション効率を改善するために、データバス２０４は、書き込みデータパイプライン１０６によって維持できるよりも大きなレートで、データを書き込みデータパイプライン１０６に転送するができる。通常、書き込みデータパイプライン１０６は、入力バッファ３０６を具えていないときは、バッファリング機能は、書き込みパイプライン１０６の外側ではあるがソリッドステートストレージ１０２内、ネットワークインターフェースカード（「ＮＩＣ」）内などコンピュータ１１２内、または、例えば、リモートダイレクトメモリアクセス（「ＲＤＡＭ」）を使用するときの別のデバイスなど、あらゆる場所で実行される。
【０１１６】
別の実施例においては、書き込みデータパイプライン１０６は、ソリッドステートストレージ１１０にパケットを書き込む前に、ＥＣＣジェネレータ３０４から受信したパケットをバッファリングする書き込み同期バッファ３０８を具えることができる。書き込み同期バッファ３０８は、ローカルクロックドメインとソリッドステートストレージクロックドメインとの間のバウンダリに配置され、クロックドメイン差を考慮するためにバッファリングする。他の実施例においては、同期型ソリッドステートストレージ１１０を使用することができ、同期用バッファ３０８、３２８を省くことができる。
【０１１７】
一実施例においては、書き込みデータパイプライン１０６は、さらに、メディア暗号化モジュール３１８を具えることができ、このモジュール３１８は、パケッタイザ３０２から直接または間接的に、１又はそれ以上のパケットを受信して、パケットをＥＣＣジェネレータ３０４にパケットを送る前に、ソリッドステートストレージデバイス１０２に固有の暗号化キーを用いて、１又はそれ以上のパケットを暗号化する。通常、ヘッダを含む完全なパケットは暗号化される。別の実施例においては、ヘッダは、暗号化されない。本明細書においては、暗号化キーは、ソリッドステートストレージ１１０を統合する、暗号化保護を必要とする具体例の外部で管理されるシークレット暗号化キーを意味することを理解されたい。メディア暗号化モジュール３１８および関連するメディア暗号化モジュール３３２は、ソリッドステートストレージ１１０に記憶されるデータの安全レベルを提供する。例えば、データが、メディア暗号化モジュール３１８で暗合されるとき、ソリッドステートストレージ１１０が、異なるソリッドステートストレージ制御部１０４、ソリッドステートストレージデバイス１０２またはコンピュータ１１２に接続される場合、ソリッドステートストレージ１１０の内容は、通常、大きな労力を要さずに、ソリッドステートストレージ１１０にデータを書き込む間に使用される同一の暗号化キーを使用せずに読み取ることができない。
【０１１８】
通常の実施例においては、ソリッドステートストレージデバイス１０２は、非揮発性ストレージの暗号化キーを記憶できず、暗号化キーへのいかなる外部からのアクセスもできない。暗号化キーは、初期渦中、ソリッドステートストレージ制御部１０４に設けられる。ソリッドステートストレージデバイス１０２は、暗号化キーとともに使用される、非シークレット暗号化ナンス（ｎｏｎｃｅ）を使用および記憶することができない。異なるナンスは、パケット毎に記憶できる。データセグメントは、暗号化アルゴリズムによる保護を改善するために、独自のナンスを有する複数のパケット間にスプリットできる。暗号化キーは、クライアント１１４、コンピュータ１１２、キーマネージャ、または、ソリッドステートストレージ制御部１０４によって使用される暗号化キーを管理するその他のデバイスから受信することができる。別の実施例においては、ソリッドステートストレージ１１０、は、２又はそれ以上のパーティションを有し、ソリッドステートストレージ制御部１０４は、まるで２又はそれ以上のソリッドステートストレージ制御部１０４かのように動作し、各々は、ソリッドステートストレージ１１０内の１のパーティションで機能する。この実施例においては、独自のメディア暗号化キーは、各パーティションで使用できる。
【０１１９】
別の実施例においては、書き込みデータパイプライン１０６は、さらに、パケッタイザ３０２にデータセグメントを送る前に、直接または間接的に、入力バッファ３０６から受信するデータまたはデータセグメントを暗号化する暗号化モジュール３１４を具えることができ、データセグメントは、データセグメントともに受信した暗号化キーを用いて暗号化される。暗号化モジュール３１４は、メディア暗号化モジュール３１８とは異なり、このメディア暗号化モジュールにおいては、データを暗号化する暗号化モジュール３１４が使用する暗号化キーは、ソリッドステートストレージデバイス１０２内に記憶される全てのデータに共通でなくてもよいが、以下で記載するように、受信するデータセグメントとともに受信されるオブジェクトベースに基づいて変化してもよい。例えば、暗号化モジュール３１４によって暗号化されるべきデータセグメント用の暗号化キーは、データセグメントとともに受信され、データセグメントが属するオブジェクトを書き込むコマンドの一部として受信される。ソリッドステートストレージデバイス１０２は、暗号化キーとともに使用される各オブジェクトパケットにおいて、非シークレット暗号法（ｃｒｙｐｔｏｇｒａｐｈｉｃ）ナンスを使用して記憶することができる。異なるナンスは、パケット毎に記憶できる。データセグメントは、暗号化アルゴリズムによる保護を改善する目的のために、独自のナンスを有する複数のパケット間にスプリットできる。一実施例においては、メディア暗号化モジュール３１８によって使用されるナンスは、暗号化モジュール３１４によって使用されるものと同一である。
【０１２０】
暗号化キーは、クライアント１１４、コンピュータ１１２、キーマネージャ、または、データセグメントを暗号化するのに使用される暗号化キーを保持したその他デバイスから受信することができる。一実施例においては、ソリッドステートストレージデバイス１０２、コンピュータ１１２、クライアント１１４、または、プライベートキーおよびパブリックキーを安全に転送して保護する産業上の標準的な方法を実行する能力を有するその他の外部エージェント、のうちの１つから、暗号化キーは、ソリッドステートストレージ制御部１０４に転送される。
【０１２１】
一実施例においては、暗号化モジュール３１４は、第１のパケットを暗号化し、第１の暗号化キーはこのパケットとともに受信され、また、第２のパケットを暗号化し、第２の暗号化キーは第２のパケットとともに受信される。別の実施例においては、暗号化モジュール３１４は、第１のパケットを暗号化し、第１の暗号化キーは、このパケットとともに受信され、第２のデータパケットを暗号化せず次のステージにパスする。有利には、ソリッドステートストレージデバイス１０２の書き込みデータパイプライン１０６に含まれる暗号化モジュール３１４によって、オブジェクト毎またはセグメント毎のデータ暗号化が、１のファイルシステムまたはその他のファイルシステムなしで、対応するオブジェクトまたはデータセグメントを記憶するのに使用される暗号化キーのトラックを、保持することが可能となる。各要求デバイス１５５または対応するキーマネージャは、要求デバイス１５５によって送られるオブジェクトまたはデータセグメントのみを暗号化するのに使用される暗号化キーを独立して管理することができる。
【０１２２】
別の実施例においては、書き込みデータパイプライン１０６は、パケッタイザ３０２にデータセグメントを送る前に、メタデータセグメントに関するデータを圧縮する圧縮モジュール３１２を具える。圧縮モジュール３１２は、通常、セグメントのストレージサイズを低減するのに当分野で周知な圧縮ルーチンを用いて、データまたはメタデータセグメントを圧縮する。例えば、データセグメントは、５１２のゼロからなるストリングを具える場合、圧縮モジュール３１２は、５１２のゼロを、５１２のゼロを示すコード又はトークンで置換でき、コードは、５１２のゼロがとるスペースよりも大幅に小型である。
【０１２３】
一実施例においては、圧縮モジュール３１２は、第１の圧縮ルーチンを用いて第１のセグメントを圧縮し、圧縮せずに第２のセグメントをパスする。別の実施例においては、圧縮モジュール３１２は、第１の圧縮ルーチンを用いて第１のセグメントを圧縮し、第２の圧縮ルーチンを用いて第２のセグメントを圧縮する。ソリッドステートストレージデバイス１０２内にフレキシビリティを有することに利点があり、クライアント１１４、または、ソリッドステートストレージデバイス１０２にデータを書き込むその他のデバイスは圧縮ルーチンを各々特定でき、あるいは、一方が圧縮ルーチンを特定することができ、他方がいずれの圧縮ルーチンを特定しなくてもよい。圧縮ルーチンの選択は、オブジェクトごと（ｐｅｒ  ｏｂｊｅｃｔ）のタイプまたはオブジェクトクラスベースに基づいたデフォルトの設定に従って選択されてもよい。例えば、特定のオブジェクトの第１のオブジェクトは、デフォルトの圧縮ルーチン設定を作動しないようにでき、同一オブジェクトクラスおよびオブジェクトタイプの第２のオブジェクトは、デフォルトの圧縮ルーチンを使用することができ、同一オブジェクトクラスおよびオブジェクトタイプの第３のオブジェクトは、圧縮を利用しなくてもよい。
【０１２４】
一実施例においては、書き込みデータパイプライン１０６は、不要データコレクションシステムのデータバイパスの一部として、読み取りデータパイプライン１０８からデータセグメントを受信する不要データコレクションバイパス３１６を具える。不要コレクションシステムは、通常、パケットがデリーション用に標識されるか、修正されるので、もはや有効でないパケットを標識し、修正されたデータが、異なるロケーションに記憶される。いくつかのポイントでは、不要データコレクションシステムは、ストレージの特定のセクションがリカバリ可能かを判定する。この判定は、入手可能ストレージ容量の不足、閾値に達した無効データの割合、有効なデータの統合、閾値に達したストレージセクションのエラー検出率、または、データ分散に基づいた性能の向上によってもよい。いくつかの因子は、不要データコレクションアルゴリズムによって考慮され、ストレージセクションをリカバリするときを判定する。
【０１２５】
ストレージセクションがリカバリのために標識されると、通常、そのセクション中の有効なパケットは再配置されなければならない。不要データコレクタバイパス３１６によって、パケットは、読み取りデータパイプライン１０８に読み取られ、次いで、ソリッドステートストレージ制御部１０４からルートアウトされずに、書き込みデータパイプライン１０６に直接転送される。好ましい実施例においては、不要データコレクタバイパス３１６は、ソリッドステートストレージデバイス１０２内で機能する自律的不要データコレクタシステムの一部である。これによって、ソリッドステートストレージデバイス１０２は、データを管理することが可能となり、データは、ソリッドステートストレージ１１０に亘って系統的に分散され、性能、データ信頼性が改善し、ソリッドステートストレージ１１０のいずれか１のロケーションまたはエリアの過剰使用または使用不足を回避し、ソリッドステートストレージ１１０の寿命を延長させる。
【０１２６】
不要データコレクタバイパス３１６は、セグメントを書き込みデータパイプライン１０６に挿入し、その他のセグメントは、クライアント１１４またはその他のデバイスによって書き込まれるように調整する。描かれた実施例においては、不要データコレクタバイパス３１６は、読み取りデータパイプライン１０８において、書き込みデータパイプライン１０６内のパケッタイザ３０２（ｐａｃｋｅｔａｉｚｅｒ）の前およびデパケッタイザ３２４（ｄｅｐａｃｋｅｔｉｚｅｒ）の後にあるが、読み取りおよび書き込みデータパイプライン１０６、１０８内のどこかに配置されていてもよい。不要データコレクタバイパス３１６は、ソリッドステートストレージ１１０内のストレージ効率を改善するために、バーチャルページの残りの部分を埋めるように、書き込みパイプライン１０６のフラッシュ中に使用されてもよく、これにより、不要データコレクションの頻度を低減することができる。
【０１２７】
一実施例においては、書き込みデータパイプライン１０６は、有効な書き込みオペレーション用のデータをバッファする書き込みバッファ３２０を具える。通常、書き込みバッファ３２０は、ソリッドステートストレージ１１０の少なくとも１つのバーチャルページを埋めるのに十分なパケット容量を具える。これによって、書き込みオペレーションは、中断せずに、ソリッドステートストレージ１１０にページデータの全体を送ることができる。書き込みデータパイプライン１０６の書き込みバッファ３２０と、読み取りデータパイプライン１０８内のバッファを、同一容量、または、ソリッドステートストレージ１１０内のストレージ書き込みバッファよりも大きい容量にサイジングすることで、書き込みおよび読み取りデータは、複数コマンドの代わりに、１つの書き込みコマンドが、ソリッドステートストレージ１１０にバーチャルページデータの全体を送るようにクラフト化されるので、より効率的になる。
【０１２８】
書き込みバッファ３２０が埋められる一方、ソリッドステートストレージ１１０は、その他の読み取りオペレーションに使用されてもよい。このことが有利であるのは、書き込みバッファがより小さいか、または、書き込みバッファのないその他のデバイスが、データがストレージ書き込みバッファに書き込まれ、ストレージ書き込みバッファ内にフローするデータがストールするとき、ソリッドステートストレージをタイアップできるからである。読み取りオペレーションは、ストレージ書き込みバッファ全体がうまり、プログラム化されるまで、ブロックされる。書き込みバッファのないシステムまたは書き込みバッファが小さいシステムに対する別のアプローチは、読み取り可能にするために、フルではないストレージ書き込みバッファをフラッシュすることである。ページを埋めるのに複数の書き込み／プログラムサイクルも必要となるので、これは非効率的である。
【０１２９】
バーチャルべージよりも大きなサイズの書き込みバッファ３２０を有する描かれた実施例に関して、多数のサブコマンドを具える１つの書き込みコマンドは、次いで、１のプログラムコマンドが続き、各ソリッドステートストレージエレメント２１６、２１８、２２０におけるストレージ書き込みバッファから、各ソリッドステートストレージエレメント２１６、２１８、２２０内の指定されたページに、ページデータを転送する。この技術は、バッファが埋まっているとき、データ信頼性および耐久性を低下させ、読み取りコマンドおよびその他のコマンドのための指定バンクを解放させることで周知である部分的なページプログラミングを省くことができる利点がある。
【０１３０】
一実施例においては、書き込みバッファ３２０は、ピンポンバッファであり、このバッファの片面が埋まり、次いで、適宜な時間での転送が指定され、ピンポンバッファのもう一方の面が埋まる。別の実施例においては、書き込みバッファ３２０は、バーチャルページデータセグメントよりも大きい容量を有する先入れ先出し（「ＦＩＦＯ」）レジスタを具える。当分野の当業者であれば、バーチャルページデータがデータをソリッドステートストレージ１１０に書き込む前に記憶させることができるその他の書き込みバッファ３２０設定を理解されたい。
【０１３１】
別の実施例においては、書き込みバッファ３２０は、バーチャルページよりも小さなサイズであり、ページ情報よりも少ない情報が、ソリッドステートストレージ１１０内のストレージ書き込みバッファに書き込まれる。実施例においては、書き込みデータパイプライン１０６内のストールが読み取りオペレーションを妨害するのを防ぐために、データは、１つのロケーションから不要データコレクションプロセスの一部としての別のロケーションへと移動される必要がある、不要データコレクションシステム用いてデータをキューイングする。書き込みデータパイプライン１０６においてデータストールが生じた場合、データは、不要データコレクタバイパス３１６を介して、書き込みバッファ３２０へと供給可能であり、次いで、ソリッドステートストレージ１１０内のストレージ書き込みバッファに供給され、データをプログラミングする前に、バーチャルページのページを埋める。この方法では、書き込みデータパイプライン１０６内のデータストールは、ソリッドステートストレージデバイス１０２から読み取りをストールしない。
【０１３２】
別の実施例においては、書き込みデータパイプライン１０６は、書き込みデータパイプライン１０６内の１又はそれ以上のユーザ定義可能機能を有する書き込みプログラムモジュール３１０を具える。書き込みプログラムモジュール３１０によって、ユーザは書き込みデータパイプライン１０６をカスタマイズすることができる。ユーザは、特定のデータ要求またはアプリケーションに基づいて書き込みデータパイプライン１０６をカスタマイズすることができる。ソリッドステーストレージ制御部１０４はＦＰＧＡである場合、ユーザは、カスタムコマンドおよび機能を有する書き込みデータパイプライン１０６を比較的容易にプログラムすることができる。さらに、ユーザは、書き込みプログラムモジュール３１０を使用し、ＡＳＩＣを用いたカスタム機能を具えるが、しかしながら、ＡＳＩＣをカスタマイズすることは、ＦＰＧＡを用いるよりも難しい。書き込みプログラムモジュール３１０は、バッファおよびバイパス機構を具えることができ、これらによって、第１のデータセグメントが書き込みプログラムモジュール３１０で実行され、第２のデータセグメントは、書き込みデータパイプライン１０６を介して繰り返すことができる。別の実施例においては、書き込みプログラムモジュール３１０は、ソフトウェアを介してプログラム可能なプロセッサコアを具えることができる。
【０１３３】
書き込みプログラムモジュール３１０は、入力バッファ３０６と圧縮モジュール３１２との間に示されているが、書き込みプログラムモジュール３１０は、書き込みデータパイプライン１０６内のあらゆる位置に存在でき、各種ステージ３０２−３２０中に分散可能である。さらに、独立してプログラムおよびオペレーション可能な各種ステート３０２−３２０中に分散される、複数の書き込みプログラムモジュール３１０があってもよい。さらに、ステージ３０２−３２０の順番は変更可能である。当分野の当業者であれば、特定のユーザ要求に基づいてステージ３０２−３２０の順番を作動可能に変更したものを理解されたい。
【０１３４】
読み取りデータパイプライン
読み取りデータパイプライン１０８は、データエラーがＥＣＣブロックにある場合に、要求されたパケットが、要求されたパケットの各ＥＣＣブロックで記憶されるＥＣＣを用いることによって、ソリッドステートストレージ１１０から受信されることを判定するＥＣＣ修正モジュール３２２を具える。次いで、ＥＣＣコレクションモジュール３２２は、エラーが存在している場合、要求されたパケットにおけるエラーを修正し、これらのエラーは、ＥＣＣを用いて修正可能である。例えば、ＥＣＣが、６ビットのエラーを検出できるが、３ビットのエラーしか修正できない場合、ＥＣＣ修正モジュール３２２は、エラー中の３ビットまで、要求されたパケットのＥＣＣブロックを修正する。ＥＣＣ修正モジュール３２２は、エラー中のビットを、正しい１またはゼロのステートに変更することで、エラー中のビットを修正し、要求されたデータパケットは、ソリッドステートストレージ１１０に書き込まれたときのものと同一であり、ＥＣＣは、パケット用に生成された。
【０１３５】
ＥＣＣが修正できるよりも多く、要求されたパケットがエラー中のビットを含んでいると、ＥＣＣ修正モジュール３２２が判定した場合、ＥＣＣ修正モジュール３２２は、要求されたパケットの破損したＥＣＣブロック中のエラーを修正できず、中断信号を送る。一実施例においては、ＥＣＣ修正モジュール３２２は、要求されたパケットがエラー状態にあることを示すメッセージを有する中断信号を送る。メッセージは、ＥＣＣ修正モジュール３２２がエラーを修正できず、エラーを修正するためのＥＣＣ修正モジュール３２２の能力がないことが示される。別の実施例においては、ＥＣＣ修正モジュール３２２は、要求されたパケットの破損ＥＣＣブロックを、中断信号および／またはメッセージとともに送る。
【０１３６】
好適な実施例においては、ＥＣＣ修正モジュール３２２によって修正不可能な要求されたパケットの、破損したＥＣＣブロックまたは破損したＥＣＣブロックの一部は、マスタ制御部２２４によって読み取られ、修正され、ＥＣＣ修正モジュール３２２に返され、読み取りデータパイプライン１０８によってさらに処理される。一実施例においては、要求されたパケットの破損したＥＣＣブロックの一部ブロックまたはその一部は、データを要求しているデバイスに送られる。要求デバイス１５５は、ＥＣＣブロックを修正することができ、バックアップまたはミラーコピーなど、別のコピーを使用してデータを置換することができ、次いで、要求されたデータパケットの置換データを使用するか、それを読み取りデータパイプライン１０８に返すことができる。要求デバイス１５５は、エラー中の要求されたパケットのヘッダ情報を使用し、破損した要求パケットを置換するか、または、パケットが属するオブジェクトを置換するかを必要とするデータを識別する。別の好適な実施例においては、ソリッドステートストレージ制御部１０４は、いくつかのタイプのＲＡＩＤを使用してデータを記憶し、破損したデータをリカバリすることができる。別の実施例においては、ＥＣＣコレクションモジュール３２２は、中断信号および／またはメッセージを送り、受信するデバイスは、要求されたデータパケットに関連した読み取りオペレーションができない。当分野の当業者であれば、要求されたパケットの１又はそれ以上のＥＣＣブロックが破損していて、ＥＣＣ修正モジュール３２２がエラーを修正できないことを判定したＥＣＣ修正モジュール３２２の結果として、とるべきその他の選択肢やアクションを理解されたい。
【０１３７】
読み取りデータパイプライン１０８は、デパケッタイザ３２４を具え、このデパケッタイザ３２４は、直接または間接的に、ＥＣＣ修正モジュール３２２から要求パケットのＥＣＣブロックを受信し、チェックして、１又はそれ以上のパケットヘッダを除去する。一実施例においては、ヘッダは、読み取りデータパイプライン１０８に送られたパケットが、要求されたパケットであることを確証するために使用可能なハッシュコードを具える。さらに、デパケッタイザ３２４は、パケッタイザ３０２によって加えられた要求パケットからヘッダを除去することができる。デパケッタイザ３２４は、所定のパケット上で機能しないように指令できるが、修正されずに先に送られる。例としては、再構築プロセスの途中で要求されるコンテナラベルであってもよく、ヘッダ情報は、オブジェクトインデックス再構築モジュール２７２によって要求される。さらなる例としては、ソリッドステートストレージデバイス１０２内で使用されるように設計された各種タイプのパケットを転送することを含む。別の実施例においては、デパケッタイザ３２４オペレーションは、パケットタイプに応じたものであってもよい。
【０１３８】
読み取りデータパイプライン１０８は、デパケッタイザ３２４からデータを受信し、不要なデータを除去するアライメントモジュール３２６を具える。一実施例においては、ソリッドステートストレージ１１０に送られる読み取りコマンドは、パケットデータをリカバリさせる。データを要求しているデバイスは、リカバリしたパケットの全てのデータを必要としなくてもよく、アライメントモジュール３２６は、不要なデータを除去する。リカバリしたページ内の全てのデータが要求されているデータである場合、アライメントモジュール３２６は、いずれのデータも除去しない。
【０１３９】
アライメントモジュール３２６は、次のステージにデータセグメントを送る前に、データセグメントを要求しているデバイスと互換性のある形態で、オブジェクトのデータセグメントとしてのデータをリフォーマットする。通常、データは、読み取りデータパイプライン１０８によって処理されるとき、データセグメントまたはパケットのサイズは、各種ステージで変更される。アライメントモジュール３２６は、受信したデータを使用して、データを、要求デバイス１５５に送り、応答を形成するのに加えられるのに適したデータセグメントにフォーマットする。例えば、第１のデータパケットの一部は、第２のデータパケットの一部のデータと組み合わせることができる。データセグメントが、要求デバイス１５５によって要求されるデータよりも長い場合、アライメントモジュール３２６は、不要データを捨てることができる。
【０１４０】
一実施例においては、読み取りデータパイプライン１０８は、読み取りデータパイプライン１０８によって処理される前に、ソリッドステートストレージ１１０から読み取られる１又はそれ以上の要求パケットをバッファリングする読み取り同期バッファ３２８を具える。読み取り同期バッファ３２８は、ソリッドステートストレージクロックドメインと、ローカルバスクロックドメインとの間のバウンダリにあり、クロックドメインの差を考慮するバッファリングを行う。
【０１４１】
別の実施例においては、読み取りデータパイプライン１０８は、出力バッファ３３０を具え、この出力バッファ３３０は、アライメントモジュール３２６からの要求パケットを受信し、要求デバイス１５５に転送される前にパケットを記憶する。出力バッファ３３０は、データセグメントが、読み取りデータパイプライン１０８のステージから受信されるときと、データセグメントが、ソリッドステートストレージ制御部１０４のその他部分または要求デバイス１５５に転送されるときと、の間の差を考慮している。さらに、出力バッファ３３０によって、データバス２０４は、データバス２０４のオペレーション効率を改善するために、読み取りデータパイプライン１０８によって維持可能なレートよりも高いレートで、読み取りデータパイプライン１０８からのデータを受信できる。
【０１４２】
一実施例においては、読み取りデータパイプライン１０８は、メディア解読モジュール３３２を具え、このメディア解読モジュール３３２は、ＥＣＣ修正モジュール３２２からの１又はそれ以上の暗号化された要求パケットを受信し、１又はそれ以上の要求されたパケットをデパケッタイザ３２４に送る前に、ソリッドステートストレージデバイス１０２に固有の暗号化キーを用いて１又はそれ以上の要求されたパケットを解読する。通常、メディア解読モジュール３３２によってデータを解読するのに使用される暗号化キーは、メディア解読モジュール３１８によって使用される暗号化キーと同一である。別の実施例においては、ソリッドステートストレージ１１０は、２又はそれ以上のパーティションを具えていてもよく、ソリッドステートストレージ制御部１０４は、２又はそれ以上のソリッドステートストレージ制御部１０４であるかのように動作し、各々は、ソリッドステートストレージ１１０内の１つのパーティションで機能する。この実施例においては、固有のメディア暗号化キーは、各パーティションで使用されてもよい。
【０１４３】
別の実施例においては、読み取りデータパイプライン１０８は、解読モジュール３３４を具え、この解読モジュールは、データセグメントを出力バッファ３３０に送る前に、でパケッタイザ３２４によってフォーマットされるデータセグメントを解読する。データセグメントは、読み取り要求と共に受信された暗号化キーを用いて解読され、読み取り要求は、読み取り同期バッファ３２８が受信する要求パケットのリカバリを開始させる。解読モジュール３３４は、第１のパケットの読み取り要求とともに受信される暗号化キーを有する第１のパケットを解読でき、次いで、異なる暗号化キーを有する第２のパケットを解読することができ、または、解読せずに読み取りデータパイプライン１０８の次のステージに第２のパケットを送ることができる。通常、解読モジュール３３４は、メディア解読モジュール３３２が要求されたパケットを解読するのに使用するものとは異なる暗号化キーを使用してデータセグメントを解読する。パケットが非シークレット暗号化法ナンスで記憶されているときは、ナンスを、暗号化キーとともに使用して、データパケットを解読する。暗号化キーは、クライアント１１４、コンピュータ１１２、キーマネージャ、または、ソリッドステートストレージ制御部１０４によって使用される暗号化キーを管理するその他のデバイスから、受信できる。
【０１４４】
別の実施例においては、読み取りデータパイプライン１０８は、デパケッタイザ３２４によってフォーマットされたデータセグメントを展開する展開モジュール３３６を具える。好適な実施例においては、展開モジュール３３６は、１又はそれ以上のパケットヘッダおよびコンテナラベルに記憶された圧縮情報を使用し、圧縮モジュール３１２によってデータを圧縮するのに使用されたルーチンと相補的なルーチンを選択する。別の実施例においては、展開モジュール３３６によって使用される展開ルーチンは、展開しようとするデータセグメントを要求しているデバイスによって、指令される。別の実施例においては、展開モジュール３３６は、オブジェクト毎（ｐｅｒ  ｏｂｊｅｃｔ）のタイプまたはオブジェクトクラスベースのデフォルトの設定によって、展開ルーチンを選択する。第１のオブジェクトの第１のパケットは、デフォルトの展開ルーチンを無効にすることができ、同一オブジェクトクラスおよびオブジェクトタイプの第２のオブジェクトの第２のパケットは、デフォルトの展開ルーチンを使用することができ、同一オブジェクトクラスおよびオブジェクトタイプの第３のオブジェクトの第３のパケットは、展開を利用しなくてもよい。
【０１４５】
別の実施例においては、読み取りデータパイプライン１０８は、読み取りデータパイプライン１０８内の１又はそれ以上のユーザ定義可能機能を含む読み取りプログラムモジュール３３８を具える。読み取りプログラムモジュール３３８は、書き込みプログラムモジュール３１０と同様の特性を有し、ユーザは、読み取りデータパイプライン１０８にカスタム機能を加えることができる。読み取りプログラムモジュール３３８は、図３に示されるように配置可能であり、または、読み取りデータパイプライン１０８内で別のポジションに配置可能であり、あるいは、読み取りデータパイプライン１０８内の複数のロケーションの複数の部分を具えてもよい。さらに、独立して機能する読み取りデータパイプライン１０８内の複数のロケーション内に、複数の読み取りプログラムモジュール３３８があってもよい。当分野の当業者であれば、読み取りデータパイプライン１０８内に、読み取りプログラムモジュール３３８のその他の形態を理解されたい。書き込みデータパイプライン１０６に関して、読み取りデータパイプライン１０８のステージは、再配置可能であり、当分野の当業者であれば、読み取りデータパイプライン１０８内のその他の順番を理解されたい。
【０１４６】
ソリッドステートストレージ制御部１０４は、制御およびステータスレジスタ３４０と、関連する制御キュー３４２を具える。制御およびステータスレジスタ３４０および制御キュー３４２は、書き込みデータパイプライン１０６および読み取りデータパイプライン１０８内で処理されるデータに関連した、制御およびシークエンスコマンドならびにサブコマンドを用意にする。例えば、パケッタイザ３０２のデータセグメントは、ＥＣＣジェネレータ３０４に関連した制御キュー３４２において、１又はそれ以上の関連する制御コマンドまたは指令を具えることができる。データセグメントが、パケット化されるとき、指令またはコマンドのいくるかは、パケッタイザ３０２内で実行されてもよい。その他のコマンドまたは指令は、データセグメントから作成された新規に形成されたデータパケットが、次のステージに送られるとき、制御およびステータスレジスタ３４０を介して次の制御キュー３４２に送られる。
【０１４７】
コマンドまたは指令は、制御キュー３４２に同時にロードされてもよく、パケットは、書き込みデータパイプライン１０６に送られ、各パイプラインステージは、各々のパケットがそのステージで実行されるとき、適宜なコマンドまたは指令を引き出す。同様に、コマンドまたは指令は、制御キュー３４２に同時にロード可能であり、パケットは、読み取りデータパイプライン１０８から要求されており、各パイプラインステージは、各々のパケットがそのステージで実行されるときに、適宜なコマンドまたは指令を引き出す。当分野の当業者であれば、制御およびステータスレジスタ３４０、ならびに、制御キュー３４２のその他の特性および機能を理解されたい。
【０１４８】
ソリッドステートストレージ制御部１０４またはソリッドステートストレージデバイス１０２も、バンクインターリーブ制御部３４４、同期バッファ３４６、ストレージバス制御部３４８およびマルチプレクサ（「ＭＵＸ」）３５０を具えることができ、これらは、図４Ａおよび図４Ｂに関連して記載される。
【０１４９】
バンクインターリーブ
図４Ａは、本発明によるソリッドステートストレージ制御部１０４内のバンクインターリーブ制御部３４４の一実施例４００を示した概略ブロック図である。バンクインターリーブ制御部３４４は、制御およびステータスレジスタ３４０に接続され、ＭＵＸ３５０を介してストレージＩ／Ｏバス２１０およびストレージ制御バス２１２に接続され、ストレージ制御部３４８および同期バッファ３４６に接続され、これらは以下で説明する。バンクインターリーブ制御部３４４は、ソリッドステートストレージ１１０内のバンク２１４に関して、読み取りエージェント４０２、書き込みエージェント４０４、消去エージェント４０６、管理エージェント４０８、読み取りキュー４１０ａ−ｎ、書き込みキュー４１２ａ−ｎ、消去キュー４１４ａ−ｎ、管理キュー４１６ａ−ｎを具え、バンク制御部４１８ａ−ｎ、バスアービター４２０、ステータスＭＵＸ４２２を具え、これらは以下で説明する。ストレージバス制御部３４８は、リマッピングモジュール４３０を有するマッピングモジュール４２４、ステータス取得モジュール４２６、および、ＮＡＮＤバス制御部４２８を具え、これらは以下で説明する。
【０１５０】
バンクインターリーブ制御部３４４は、バンクインターリーブ制御部３４４において、１又はそれ以上のコマンドを２又はそれ以上のキューに指令し、ソリッドステートストレージ１１０のバンク２１４中で、上記キューに記憶されたコマンドを調整し、その結果、第１のタイプのコマンドは１つのバンク２１４ａで実行され、第２のタイプのコマンドは第２のバンク２１４ｂで実行される。１又はそれ以上のコマンドは、コマンドタイプによってキューに分けられる。ソリッドステートストレージ１１０の各バンク２１４は、バンクインターリーブ制御部３４４内の関連するキューセットを有し、各々のキューセットは、各コマンドタイプ用のキューを具える。
【０１５１】
バンクインターリーブ制御部３４４は、ソリッドステートストレージ１１０のバンク２１４中で、キューに記憶されたコマンドの実行を調整する。例えば、第１のタイプのコマンドは、１つのバンク２１４ａで実行され、第２位のタイプのコマンドは、第２のバンク２１４ｂで実行される。通常、コマンドタイプおよびキュータイプは、読み取りコマンドおよび書き込みコマンド、ならびに、キュー４１０、４１２を具えるが、さらに、ストレージメディア特異的なその他のコマンドおよびキューを具えることができる。例えば、図４Ａに描かれる実施例において、消去キューおよび管理キュー４１４、４１６が含まれ、フラッシュメモリ、ＮＲＡＭ、ＭＲＡＭ、ＤＲＡＭ、ＰＲＡＭなどに適している。
【０１５２】
その他のタイプのソリッドステートストレージ１１０に関し、その他のタイプのコマンドおよび対応するキューも、本発明の範囲から逸脱することなく含むことができる。ＦＰＧＡソリッドステートストレージ制御部１０４のフレキシブルな性質は、ストレージメディアにおけるフレキシビリティを付与する。フラッシュメモリが、別のソリッドステートストレージタイプに変更された場合、バンクインターリーブ制御部３４４、ストレージバス制御部３４８、および、ＭＵＸ３５０は、データパイプライン１０６、１０８、および、その他のソリッドステートストレージ制御部１０４機能に重大な影響を与えずに、メディアタイプを収容できるように変更可能である。
【０１５３】
図４Ａに描かれた実施例においては、バンクインターリーブ制御部３４４は、各バンク２１４に関して、ソリッドステートストレージ１１０からのデータを読み取るための読み取りキュー４１０、ソリッドステートストレージ１１０に対する書き込みコマンド用の書き込みキュー４１２、ソリッドステートストレージ中の消去ブロックを消去するための消去キュー４１４、管理コマンド用の管理キュー４１６を具える。さらに、バンクインターリーブ制御部３４４は、関連する読み取り、書き込み、消去および管理エージェント４０２、４０４、４０６、４０８を具える。別の実施例においては、制御およびステータスレジスタ３４０ならびに制御キュー３４２、または、同様のコンポーネントは、バンクインターリーブ制御部３４４なしで、ソリッドステートストレージ１１０のバンク２１４に送られるデータ用コマンドをキューイングする。
【０１５４】
エージェント４０２、４０４、４０６、４０８は、一実施例においては、特定のバンク２１４ａ用に設計された適宜なタイプのコマンドを、バンク２１４ａの正しいキューに指令する。例えば、読み取りエージェント４０２は、バンク−１  ２１４ｂ用の読み取りコマンドを受信し、読み取りコマンドをバンク−１読み取りキュー４１０ｂに指令できる。書き込みエージェント４０４は、ソリッドステートストレージ１１０のバンク−０  ２１４ａにおけるロケーションにデータを書き込むための書き込みコマンドを受信し、次いで、下記コマンドをバンク−０書き込みキュー４１２ａに送ることができる。同様に、消去エージェント４０６は、バンク−１  ２１４ｂの消去ブロックを消去する消去コマンドを受信し、次いで、消去コマンドをバンク−１消去キュー４１４ｂに送ることができる。管理エージェント４０８は、通常、バンク−０  ２１４ａなど、バンク２１４の設定レジスタを読み取るためのリセットコマンドまたは要求など、管理コマンド、ステータス要求など、を受信する。管理エージェント４０８は、管理コマンドをバンク−０管理キュー４１６ａに送る。
【０１５５】
さらに、エージェント４０２、４０４、４０６、４０８は、通常、キュー４１０、４１２、４１４、４１６のステータスをモニタし、ステータス、または、キュー４１０、４１２、４１４、４１６がフル、ほぼフル、機能しないときの中断信号またはメッセージを送る。一実施例においては、エージェント４０２、４０４、４０６、４０８は、コマンドを受信し、関連するサブコマンドを作成する。一実施例においては、エージェント４０２、４０４、４０６、４０８は、制御及びステータスレジスタ３４０を介したコマンドを受信し、キュー４１０、４１２、４１４、４１６に送られる関連サブコマンドを作成する。当分野の当業者であれば、エージェント４０２、４０４、４０６、４０８のその他の機能も理解されたい。
【０１５６】
キュー４１０、４１２、４１４、４１６は、通常、コマンドを受信し、ソリッドステートストレージバンク２１４に送られる必要があるまでコマンドを記憶する。通常の実施例においては、キュー４１０、４１２、４１４、４１６は、先入れ先出し（「ＦＩＦＯ」）レジスタまたはＦＩＦＯとして機能する同様のコンポーネントである。別の実施例においては、キュー４１０、４１２、４１４、４１６は、データにマッチする順番、重要度の順番またはその他の基準でコマンドを記憶する。
【０１５７】
バンク制御部４１８は、通常、キュー４１０、４１２、４１４、４１６からのコマンドを受信し、適宜なサブコマンドを作成する。例えば、バンク−０書き込みキュー４１２ａは、ページデータパケットをバンク−０  ２１４ａに書き込むコマンドを受信することができる。バンク−０制御部４１８ａは、適宜な時間で書き込みコマンドを受信し、１又はそれ以上の書き込みコマンドを作成することができ、書き込みバッファ３２０に記憶される各データパケットは、バンク−０  ２１４ａに書き込まれる。例えば、バンク−０制御部４１８ａは、バンク０  ２１４ａおよびソリッドステートストレージアレイ２１６を確認するコマンドを作成し、１又はそれ以上のデータパケットを書き込む適宜なロケーションを選択肢、ソリッドステートストレージメモリアレイ２１６内の入力バッファをクリアし、１又はそれ以上のデータパケットを入力バッファに転送し、入力バッファを選択したロケーションにプログラムし、データが正しくプログラムされたことを検証し、プログラムに破損がある場合、１又はそれ以上のマスタ制御部２２４の中断を行い、同一の物理ロケーションへの書き込みを再度行い、異なる物理ロケーションへの書き込みを行う。さらに、例示の書き込みコマンドとともに、ストレージバス制御部３４８は、１又はそれ以上のコマンドを、ストレージＩ／Ｏバス２１０ａ用の第１の物理アドレスにマップされたコマンドの論理アドレス、および、ストレージＩ／Ｏバス２１０ｂ用の第２の物理アドレスにマップされたコマンドの論理アドレスで、ストレージＩ／Ｏバス２１０ａ−ｎの各々に複製した。
【０１５８】
通常、バスアービター４２０は、バンク制御部４１８中から選択され、バンク制御部４１８内の出力キューからサブコマンドを引き出し、バンク２１４の性能を最適化するように、これらをシークエンス状態でストレージバス制御部３４８に送る。別の実施例においては、バスアービター４２０は、高レベル中断信号に応答し、通常の選択基準を修正することができる。別の実施例においては、マスタ制御部２２４は、制御およびステータスレジスタ３４０を介してバスアービター４２０を制御することができる。当分野の当業者であれば、バスアービター４２０が、バンク制御部４１８からソリッドステートストレージ１１０へのコマンドシークエンスを制御しインターリーブすることができるその他の手段を理解されたい。
【０１５９】
バスアービター４２０は、通常、適宜なコマンドと、コマンドタイプが必要とされるときは、バンク制御部４１８の関連データと、の選択を調整し、コマンド及びデータをストレージバウ制御部３４８に送る。一般的に、バスアービター４２０は、さらに、適宜なバンク２１４を選択するのに、ストレージ制御バス２１２にコマンドを送る。フラッシュメモリ、または、非同期式２方向性シリアルストレージＩ／Ｏバス２１０を有するその他のソリッドステートストレージ１１０の場合、１つのコマンド（制御情報）またはデータセットのみが、同時に転送可能である。例えば、書き込みコマンドまたはデータが、ストレージＩ／Ｏバス２１０のソリッドステートストレージ１１０に転送され、読み取りコマンド、データが読み取られるときは、消去コマンド、管理コマンドまたはその他のステータスコマンドは、ストレージＩ／Ｏバス２１０に転送できない。
【０１６０】
例えば、バンク−０の書き込みオペレーション中、バスアービター４２０は、バンク−０制御部４１８ａを選択し、この制御部４１８ａは、ストレージバス制御部３４８に次のシークエンスを実行させるキューのトップに書き込みコマンドまたは一連の書き込みサブコマンドを有することができる。バスアービター４２０は、書き込みコマンドをストレージバス制御部３４８に送り、ストレージ制御バス２１２を介してバンク−０  ２１４ａを選択することによって、書き込みコマンドをセットアップし、バンク−０  ２１４ａに関連したソリッドステートストレージエレメント１１０の入力バッファをクリアするコマンドを送り、バンク−０  ２１４ａに関連したソリッドステートストレージエレメント２１６、２１８、２２０のステータスを確認するコマンドを送る。次いで、ストレージバス制御部３４８は、ストレージＩ／Ｏバス２１０に書き込みサブコマンドを転送し、論理消去ブロックアドレスからマッピングされるときに、個々の物理的消去ソリッドステートストレージエレメント２１６ａ−ｍ用の論理消去ブロックのアドレスを含む、物理アドレスを具える。次いで、ストレージバス制御部３４８は、ＭＵＸ３５０を介して、書き込み同期バッファ３０８をストレージＩ／Ｏバス２１０へと書き込みバッファ３２０をマルチプレックス（ＭＵＸ）し、書き込みデータを適宜なページにストリーミングする。ページがフルのとき、次いで、ストレージバス制御部３４８は、バンク−０  ２１４ａに関連するソリッドステートストレージエレメント２１６ａ−ｍに、入力バッファを、ソリッドステートストレージエレメント２１６ａ−ｍ内のメモリセルにプログラムさせる。最終的に、ストレージバス制御部３４８は、ステータスを確認して、ページが正しくプログラムされていることを確かめる。
【０１６１】
読み取りオペレーションは、上述の書き込み例と同様である。読み取りデータパイプライン１０８中、通常、バスアービター４２０またはバンクインターリーブ制御部３４４のその他のコンポーネントは、データと、関連するステータス情報を受信し、データを読み取りデータパイプライン１０８に送り、ステータス情報を制御およびステータスレジスタ３４０に送る。通常、バスアービタ−４２０からストレージバス制御部３４８に送られる読み取りデータコマンドは、ＭＵＸ３５０に、ストレージＩ／Ｏバス２１０の読み取りデータを読み取りデータパイプライン１０８にゲート制御し、ステータスＭＵＸ４２２を介してステータス情報を適宜な制御及びステータスレジスタ３４０に送る。
【０１６２】
バスアービタ−４２０は、各種コマンドタイプとデータアクセスモードを調整し、適宜なコマンドタイプまたは関連するデータのみが、所定時間に、バスに存在する。バスアービタ−４２０が、書き込みコマンドを選択しており、書き込みサブコマンドと関連するデータとが、ソリッドステートストレージ１１０に書き込まれているとき、バスアービタ−４２０は、ストレージＩ／Ｏバス２１０のその他コマンドタイプを許可しない。有利には、バスアービター４２０は、バンク２１４ステータスに関して受信したステータス情報とともに、予測したコマンド実行時間など、タイミング情報を使用し、バスのアイドル時間を最小化または省く目的として、バスの各種コマンドの実行を調整する。
【０１６３】
バスアービター４２０を介してマスタ制御部２２４は、通常、ステータス情報とともに、キュー４１０、４１２、４１４、４１６に記憶されたコマンドの予測完了時間を使用し、コマンドに関連したサブコマンドが１つのバンク２１４ａで実行されているとき、他のコマンドの他のサブコマンドが、他のバンク２１４ｂ−ｎで実行される。１つのコマンドが、２１４ａで完全に実行されるとき、バスアービター４２０は、別のコマンドをバンク２１４ａに指令する。バスアービタ−４２０は、キュー４１０、４１２、４１４、４１６に記憶されたコマンドと、キュー４１０、４１２、４１４、４１６に記憶されていない他のコマンドを調整することができる。
【０１６４】
例えば、消去コマンドは、ソリッドステートストレージ１１０内の消去ブロック群を消去するように送信可能である。消去コマンドは、書き込みまたは読み取りコマンドよりも１０乃至１０００倍以上実行され、プログラムコマンドよりも１０乃至１００倍以上実行される。Ｎバンク２１４に関して、バンクインターリーブ制御部３４４は、消去コマンドをＮコマンドにスプリットすることができ、各々は、バンク２１４ａのバーチャル消去ブロックを消去する。バンク−０  ２１４ａが消去コマンドを実行している間、バスアービタ−４２０は、その他のバンク２１４ｂ−ｎで実行されるその他のコマンドを選択することができる。さらに、バスアービタ−４２０は、ストレージバス制御部３４８、マスタ制御部２２４など、他のコンポーネントとともに機能することができ、バス間のコマンド実行を調整する。バスアービター４２０、バンク制御部４１８、キュー４１０、４１２、４１４、４１６およびバンクインターリーブ制御部３４４のエージェント４０２、４０４、４０６、４０８を使用してコマンド実行を調整することで、バンクインターリーブ機能なしで、その他のソリッドステートストレージシステムを介して、大幅に性能を向上させることができる。
【０１６５】
一実施例においては、ソリッドステートストレージ制御部１０４は、ソリッドステートストレージ１１０のストレージエレメント２１６、２１８、２２０の全てをサーブする１つのバンクインターリーブ制御部３４４を具える。別の実施例においては、ソリッドステート制御部１０４は、ストレージエレメント２１６ａ−ｍ、２１８ａ−ｍ、２２０ａ−ｍの各列に対するバンクインターリーブ制御部３４４を具える。例えば、１つのバンクインターリーブ制御部３４４は、ストレージエレメントＳＳＳ０．０−ＳＳＳ０．Ｎ２１６ａ、２１８ａ、２２０ａの一列をサーブし、第２のバンクインターリーブ制御部３４４は、ストレージエレメントＳＳＳ１．０−ＳＳＳ１．Ｎ２１６ｂ、２１８ｂ、２２０ｂなどの第２の列をサーブする。
【０１６６】
図４Ｂは、本発明によるソリッドステートストレージ制御部１０４のバンクインターリーブ制御部３４４の代替実施例４０１を示した概略ブロック図である。図４Ｂに示された実施例に描かれたコンポーネント２１０、２１２、３４０、３４６、３４８、３５０、４０２−４３０は、図４Ａに関連して描かれたバンクインターリーブ装置４００と実質的に同じであるが、ただし、各バンク２１４が、１つのキュー４３２ａ−ｎを具えて、バンク（例えば、バンク０  ２１４ａ）用の読み取りコマンド、書き込みコマンド、消去コマンド、管理コマンドが、バンク２１４ａの１つのキュー４３２ａに対して指令される点を除く。一実施例においては、キュー４３２は、ＦＩＦＯである。別の実施例においては、キュー４３２は、キュー４３２が記憶されている順番とは別の順番で、キュー４３２から引き出されたコマンドを有することができる。別の代替実施例においては（図示せず）、読み取りエージェント４０２、書き込みエージェント４０４、消去エージェント４０６および管理エージェント４０８は、適宜なキュー４３２ａ−ｎに対して、１つのエージェント割当コマンドに組み込むことができる。
【０１６７】
別の代替実施例においては（図示せず）、コマンドは、１つのキューに記憶され、これらのコマンドは、記憶された方法以外の順番でキューから引き出し可能であり、バンクインターリーブ制御部３４４は、１つのバンク２１４ａでコマンドを実行でき、他のコマンドは、残りのバンク２１４ｂ−ｎで実行される。当分野の当業者であれば、他のコマンドが他のバンク２１４ｂ−ｎで実行されている間に、１つのバンク２１４ａでコマンドを実行できる、他のキュー設定およびタイプを容易に理解されたい。
【０１６８】
ストレージ特異的コンポーネント
ソリッドストレージ制御部１０４は、同期バッファ３４６を具え、この同期バッファ３４６は、ソリッドステートストレージ１１０から送られて受信したコマンドおよびステータスメッセージをバッファリングする。同期バッファ３４６は、ソリッドステートストレージクロックドメインとローカルバスクロックドメインとの間のバウンダリに配置され、クロックドメインの差を考慮するバッファリングを提供する。同期バッファ３４６、書き込み同期バッファ３０８および読み取り同期バッファ３２８は、独立しており、同時に機能して、データ、コマンド、ステータスメッセージなどをバッファリングすることができる。好適な実施例においては、同期バッファ３４６は、クロックドメインをクロスする信号が最小のところに配置される。当分野の当業者であれば、クロックドメイン間の同期は、設計事項のいくつかを最適にするために、ソリッドステートストレージデバイス１０２内の他のロケーションに自由に移動可能であることを理解されたい。
【０１６９】
ソリッドステートストレージ制御部１０４は、ストレージバス制御部３４８を具え、このストレージバス制御部３４８は、ソリッドステートストレージ１１０に送られ、読み取られるデータに関するコマンドと、ソリッドステートストレージ１１０のタイプに基づいてソリッドステートストレージ１１０から受信したステータスメッセージとを解釈し翻訳する。例えば、ストレージバス制御部３４８は、性能特性の異なるストレージ、製造者の異なるストレージなど、異なるタイプのストレージに対する異なるタイミング要求を具えることができる。さらに、ストレージバス制御部３４８は、ストレージ制御バス２１２に制御コマンドを送る。
【０１７０】
好適な実施例においては、ソリッドステートストレージ制御部１０４は、ＭＵＸ３５０を具え、ＭＵＸ３５０は、マルチプレクサ３５０ａ−ｎのアレイを具え、各マルチプレクサは、ソリッドステートストレージアレイ１１０の列の専用となる。例えば、マルチプレクサ３５０ａは、ソリッドステートストレージエレメント２１６ａ、２１８ａ、２２０ａに関連している。ＭＵＸ３５０は、書き込みデータパイプライン１０６からのデータと、ストレージＩ／Ｏバス２１０を介してストレージバス制御部３４８からソリッドステートストレージ１１０へのコマンドをルーティングし、ストレージＩ／Ｏバス２１０を介してソリッドステートストレージ１１０から読み取りデータパイプライン１０８へのデータおよびステータスメッセージをルーティングし、ストレージバス制御部３４８、同期バッファ３４６およびバンクインターリーブ制御部３４４を介して制御およびステータスレジスタ３４０にルーティングする。
【０１７１】
好適な実施例においては、ソリッドステートストレージ制御部１０４は、ソリッドステートストレージエレメントの各列（例えば、ＳＳＳ０．１  ２１６ａ、ＳＳＳ０．２  ２１８ａ、ＳＳＳ０．Ｎ  ２２０ａ）用のＭＵＸ３５０を具える。ＭＵＸ３５０は、書き込みデータパイプライン１０６からのデータと、ストレージＩ／Ｏバス２１０を介してソリッドステートストレージ１１０へ送られるコマンドをコンバインし、コマンドから読み取りデータパイプライン１０８によって処理されるようにデータを分割する。書き込みバッファ３２０に記憶されたパケットは、ソリッドステートストレージエレメントの各列（ＳＳＳｘ．０からＳＳＳｘ．Ｎ２１６、２１８、２２０）用の書き込み同期バッファ３０８から、ソリッドステートストレージエレメントの各列（ＳＳＳｘ．０からＳＳＳｘ．Ｎ２１６、２１８、２２０）用のＭＵＸ３５０へと、書き込みバッファ３２０からのバスに指令される。コマンドおよび読み取りデータは、ストレージＩ／Ｏバス２１０からＭＵＸ３５０によって受信される。さらに、ＭＵＸ３５０は、ステータスメッセージをストレージバス制御部３４８に指令する。
【０１７２】
ストレージバス制御部３４８は、マッピングモジュール４２４を具える。マッピングモジュール４２４は、消去ブロックの１又はそれ以上の物理アドレスに消去ブロックの論理アドレスをマッピングする。例えば、ブロック２１４ａあたり２０のストレージエレメント（例えば、ＳＳＳ０．０からＳＳＳ  Ｍ．０  ２１６）のアレイを有するソリッドステートストレージ１１０は、ストレージエレメントあたり１の物理アドレスで、消去ブロックの２０の物理アドレスにマッピングされる特定の消去ブロック用論理アドレスを具えることができる。ストレージエレメントが同時にアクセスされるので、ストレージエレメント２１６ａ、２１８ａ、２２０ａの列の各ストレージエレメントにおける同一ポジションの消去ブロックは、物理アドレスを共有するであろう。列中の全ての消去ブロックではなく（例えば、ストレージエレメントＳＳＳ  ０．０，０．１，．．．０．Ｎ  ２１６ａ、２１８ａ、２２０ａにおいて）、１の消去ブロックを選択するために、１つのバンク（この場合、バンク−０  ２１４ａ）が選択される。
【０１７３】
このような消去ブロックに関する論理−物理マッピングは、１つの消去ブロックが損傷またはアクセス不能になった場合、マッピングが別の消去ブロックにマッピングされるように変更可能であるので、有益である。これによって、１つのエレメントの消去ブロックが失敗したとき、バーチャル消去ブロック全体を損失するロスを緩和することができる。再マッピングモジュール４３０は、消去ブロックの論理アドレスのマッピングを、バーチャル消去ブロックの１又はそれ以上の物理アドレス（ストレージエレメントのアレイに亘って分散させる）に変更する。例えば、バーチャル消去ブロック１は、ストレージエレメントＳＳＳ  ０．０  ２１６ａの消去ブロック１、ストレージエレメントＳＳＳ１．０  ２１６ｂの消去ブロック１，．．．、ストレージエレメントＭ．０  ２１６ｍの消去ブロック１にマッピング可能であり、バーチャル消去ブロック２は、ストレージエレメントＳＳＳ０．１  ２１８ａの消去ブロック２、ストレージエレメントＳＳＳ１．１  ２１８ｂの消去ブロック２，．．．、ストレージエレメントＭ．１  ２１８ｍの消去ブロック２などにマッピング可能である。
【０１７４】
ストレージエレメントＳＳＳ０．０  ２１６ａの消去ブロック１が損傷し、摩耗などによるエラーが生じるか、何らかの理由で利用できない場合、再マッピングモジュール４３０は、バーチャル消去ブロック１の消去ブロックをポインティングした論理アドレス用に、論理−物理マッピングを変更することができる。ストレージエレメントＳＳＳ０．０  ２１６ａのスペア消去ブロック（消去ブロック２２１と呼ぶ）が利用可能であり、その時点でマッピングされていない場合、再マッピングモジュール４３０は、ストレージエレメントＳＳＳ０．０  ２１６ａの消去ブロック２２１をポインティングするために、バーチャル消去ブロック１の消去ブロックのマッピングを変更でき、ストレージエレメントＳＳＳ１．０  ２１６ｂの消去ブロック１、ストレージエレメントＳＳＳ２．０（図示せず）の消去ブロック１，．．．、ストレージエレメントＭ．０  ２１６ｍの消去ブロック１のポインティングを継続する。マッピングモジュール４２４または再マッピングモジュール４３０は、上述した順番（ストレージエレメントの消去ブロック１に対してバーチャル消去ブロック１、ストレージエレメントの消去ブロック２に対してバーチャル消去ブロック２）で消去ブロックをマッピングでき、あるいは、その他の基準に基づいた別の順番でストレージエレメント２１６、２１８、２２０の消去ブロックをマッピングできる。
【０１７５】
一実施例においては、消去ブロックは、アクセス時間によってグループ分け可能である。データを特定消去ブロックのページにプログラム（書き込み）するなど、コマンドを実行する時間を意味する、アクセス時間によるグループ分けは、コマンド完了を平均化（ｌｅｖｅｌ）することができ、バーチャル消去ブロックの消去ブロックに亘って実行されるコマンドは、最低の消去ブロックによって制限されることはない。他の実施例においては、消去ブロックは、摩耗レベル、健全（ｈｅａｌｔｈ）などによってグループ分け可能である。当分野の当業者であれば、消去ブロックをマッピングまたは再マッピングするときに考慮すべきその他のファクタを理解されたい。
【０１７６】
一実施例においては、ストレージバス制御部３４８は、ステータス獲得モジュール４２６を具え、このステータス獲得モジュール４２６は、ソリッドステートストレージ１１０からのステータスメッセージを受信し、ステータスメッセージをステータスＭＵＸ４２２に送る。別の実施例においては、ソリッドステートストレージ１１０は、フラッシュメモリであり、ストレージバス制御部３４８は、ＮＡＮＤバス制御部４２８を具える。ＮＡＮＤバス制御部４２８は、読み取りデータパイプライン１０６および書き込みデータパイプライン１０８からソリッドステートストレージ１１０内の正しいロケーションにコマンドを送り、フラッシュメモリの特性に基づいてコマンド実行のタイミングを調整する。ソリッドステートストレージ１１０が別のタイプのソリッドステートストレージである場合、ＮＡＮＤバス制御部４２８は、ストレージタイプ特異的なバス制御部によって置換できる。当分野の当業者であれば、ＮＡＮＤバス制御部４２８のその他の機能も理解されたい。
【０１７７】
フローチャート
図５は、本発明によるデータパイプラインを用いてソリッドステートストレージデバイス１０２におけるデータ管理方法５００の一実施例を示した概略フローチャート図である。この方法５００は、スタートして（５０２）、入力バッファ３０６が、ソリッドステートストレージ１１０に書き込まれる１又はそれ以上のデータセグメントを受信する（５０４）。１又はそれ以上のデータセグメントは、通常、オブジェクトの少なくとも一部を具えるが、オブジェクト全体であってもよい。パケッタイザ３０２は、オブジェクトと関連した１又はそれ以上のオブジェクト特異的パケットを作成できる。パケッタイザ３０２は、各パケットにヘッダを加え、通常、各パケットは、パケット長およびオブジェクト内のパケットシークエンス番号を具える。パケッタイザ３０２は、入力バッファ３０６内に記憶される１又はそれ以上のデータまたはメタデータセグメントを受信し（５０４）、ソリッドステートストレージ１１０用にサイズを調整された１又はそれ以上のパケットを作成することによって１又はそれ以上のデータまたはメタデータセグメントをパケット化し（５０６）、各パケットは、１又はそれ以上のセグメントから１つのヘッダおよびデータを具えている。
【０１７８】
通常、第１のパケットは、パケットが作成されるオブジェクトを識別するオブジェクト識別子を具える。第２のパケットは、ソリッドステートストレージデバイス１０２によって使用される情報を有するヘッダを具え、第２のパケットは、第１のパケット中で識別されたオブジェクトに関連することができ、オフセット情報は、オブジェクト内の第２のパケットおよびデータを配置する。このソリッドステートストレージデバイス制御部２０２は、バンク２１４と、パケットがストリーミングされる物理領域を管理する。
【０１７９】
ＥＣＣジェネレータ３０４は、パケッタイザ３０２からのパケットを受信し、データパケット用のＥＣＣを生成する（５０８）。通常、パケットとＥＣＣブロックとの間には固定した関連性はない。ＥＣＣブロックは、１又はそれ以上のパケットを具えることができる。パケットは、１又はそれ以上のＥＣＣブロックを具えることができる。パケットは、ＥＣＣブロック内のいずれの場所でもスタートおよび終了することができる。パケットは、第１のＥＣＣブロック内のいずれの場所からスタートすることができ、連続するＥＣＣブロックのいずれの場所で終了することができる。
【０１８０】
書き込み同期バッファ３０８は、ＥＣＣブロックをソリッドステートストレージ１１０に書き込む前に、対応するＥＣＣブロックに分散するように、パケットをバッファリングし（５１０）、次いで、ソリッドステートストレージ制御部１０４は、クロックドメイン差を考慮した適宜の時間でデータを書き込むことができ（５１２）、方法５００は終了する（５１４）。書き込み同期バッファ３０８は、ローカルクロックドメインとソリッドステートストレージ１１０クロックドメインとの間のバウンダリに配置される。なお、この方法５００は、便宜上、１又はそれ以上のデータセグメントを受信するステップと、１又はデータパケットを書き込むステップと、を表しているが、通常、データセグメントのストリームおよびグループが受信される。通常、ソリッドステートストレージ１１０の完全バーチャルページを具える多数のＥＣＣブロックが、ソリッドステートストレージ１１０に書き込まれる。通常、パケッタイザ３０２は、１サイズのデータセグメントを受信し、別のサイズのパケットを生成する。これは、データ若しくはメタデータセグメント、または、データ若しくはメタデータセグメントの一部が、セグメントのデータ全てがパケットにキャプチャーされるように、データパケットを形成するためにコンバインされる必要がある。
【０１８１】
図６は、本発明によるデータパイプラインを使用してソリッドステートストレージデバイス１０２のデータを管理する方法６００の別の実施例を示した概略フローチャート図である。この方法６００はスタートし（６０２）、入力バッファ３０６が、ソリッドステートストレージ１１０に書き込まれる１又はそれ以上のデータまたはメタデータセグメントを受信する（６０４）。パケッタイザ３０２は、ヘッダを各パケットに加え、各パケットは、オブジェクト内のパケット長を具える。パケッタイザ３０２は、入力バッファ３０６に記憶された１又はそれ以上のセグメントを受信し（６０４）、ソリッドステートストレージ１１０用にサイズを調整された１又はそれ以上のパケットを作成することによって、１又はそれ以上のセグメントをパケット化し（６０６）、各パケットは、ヘッダと、１又はそれ以上のセグメントからのデータとを具える。
【０１８２】
ＥＣＣジェネレータ３０４は、パケッタイザ３０２からのパケットを受信し、パケット用の１又はそれ以上のＥＣＣブロックを生成する（６０８）。書き込み同期バッファ３０８は、ＥＣＣブロックをソリッドステートストレージ１１０に書き込む前に、対応するＥＣＣブロック内に分散されるようにパケットをバッファリングし（６１０）、次いで、ソリッドステートストレージ制御部１０４は、クロックドメイン差を考慮して適宜な時間でデータを書き込む（６１２）。データが、ソリッドステートストレージ１１０から要求されるとき、１又はそれ以上のデータパケットを具えるＥＣＣは、読み取り同期バッファ３２８に読み取られ、バッファリングされる（６１４）。パケットのＥＣＣブロックは、ストレージＩ／Ｏバス２１０を介して受信される。ストレージＩ／Ｏバス２１０は２方向性であるので、データが読み取られるとき、書き込みオペレーション、コマンドオペレーションが中止される。
【０１８３】
ＥＣＣコレクションモジュール３２２は、読み取り同期バッファ３２８で保持される要求されたパケットのＥＣＣブロックを受信し、必要に応じて各ＥＣＣブロック内のエラーを修正する（６１６）。ＥＣＣ修正モジュール３２２は、ＥＣＣブロックに１又はそれ以上のエラーが存在し、そのエラーがＥＣＣシンドロームを使用して修正可能であるか判定し、ＥＣＣ修正モジュール３２２が、ＥＣＣブロックのエラーを修正する（６１６）。ＥＣＣ修正モジュール３２２が、検出されたエラーがＥＣＣを用いて修正できないと判定した場合は、ＥＣＣ修正モジュール３２２は、中断信号を送る。
【０１８４】
デパケッタイザ３２４は、ＥＣＣコレクションモジュール３２２がエラーを修正した後、要求されたパケットを受信し（６１８）、各パケットのパケットヘッダをチェックおよび除去することによってパケットを脱パケット化する（６１８）。アライメントモジュール３２６は、脱パケット化後、パケットを受信し、不要なデータを除去し、セグメントまたはオブジェクトを要求するデバイスと適合するフォームにおいてオブジェクトのデータまたはメタデータセグメントとしてデータパケットをリフォーマットする（６２０）。出力バッファ３３０は、脱パケット化後要求されるパケットを受信し、要求デバイス１５５に転送する前にパケットをバッファリングし（６２２）、この方法６００は終了する（６２４）。
【０１８５】
図７は、本発明によるバンクインターリーブを使用して、ソリッドステートストレージデバイス１０２のデータを管理する方法７００に関する一実施例を示した概略フローチャート図である。この方法７００は、スタートし（７０２）、バンクインターリーブ制御部３４４は、１又はそれ以上のコマンドを２又はそれ以上のキュー４１０、４１２、４１４、４１６に指令する（７０４）。通常、エージェント４０２、４０４、４０６、４０８は、コマンドタイプによってコマンドをキュー４１０、４１２、４１４、４１６に指令する（６０４）。キュー４１０、４１２、４１４、４１６の各セットは、各コマンドタイプのキューを具える。バンクインターリーブ制御部３４４は、バンク２１４中で、キュー４１０、４１２、４１４、４１６に記憶されたコマンドの実行を調整し（７０６）、第１のタイプのコマンドは、１つのバンク２１４ａで実行され、第２のタイプのコマンドは、第２のバンク２１４ｂで実行され、この方法７００は終了する（７０８）。
【０１８６】
ストレージスペースリカバリ
図８は、本発明によるソリッドステートストレージデバイス１０２の不要データコレクション装置８００に関する一実施例を示した概略ブロック図である。この装置８００は、シークエンス式ストレージモジュール８０２、ストレージディビジョン選択モジュール８０４、データリカバリモジュール８０６、および、ストレージディビジョンリカバリモジュール８０８を具え、これらは以下で説明される。他の実施例においては、この装置８００は、不要データマーキングモジュール８１２および消去モジュール８１０を具える。
【０１８７】
装置８００は、ストレージディビジョン内におけるページにデータパケットをシークエンシャルに書き込むシークエンス式ストレージモジュール８０２を具える。パケットは、パケットが新規パケットまたは修正されたパケットであるかにかかわらずシークエンシャルに記憶される。一実施例においては、シークエンス式ストレージモジュール８０２は、ストレージディビジョンのページ内の第１のロケーションにパケットを書き込み、次いで、ページの次のロケーションにパケットを書き込み、それから、次、次と、ページが埋まるまで続けられる。次いで、シークエンス式ストレージモジュール８０２は、ストレージディビジョン内の次のページを埋めるようにスタートする。これは、ストレージディビジョンが埋まるまで繰り返される。
【０１８８】
好適な実施例においては、シークエンス式ストレージモジュール８０２は、バンク（バンク−０  ２１４ａ）のストレージエレメント（例えば、ＳＳＳ０．０からＳＳＳＭ．０  ２１６）のストレージ書き込みバッファにパケットを書き込むことを開始する。ストレージ書き込みバッファがフルの場合、ソリッドステートストレージ制御部１０４は、ストレージ書き込みバッファのデータを、バンク２１４ａのストレージエレメント２１６内の指定されたページにプログラムすることができる。次いで、別のバンク（例えば、バンク−１  ２１４ｂ）が選択され、シークエンス式ストレージモジュール８０２は、バンク２１４ｂのストレージエレメント２１８のストレージ書き込みバッファにパケットを書き込むことを開始し、第１のバンク−０  ２１４ａは、指定されたページをプログラミングする。このバンク２１４ｂのストレージ書き込みバッファがフルの場合、ストレージ書き込みバッファの内容は、各ストレージエレメント２１８の別の指定ページにプログラムされる。１つのバンク２１４ａをページにプログラムする間に、別のバンク２１４ｂのストレージ書き込みバッファが埋められる可能性があるので、このプロセスは有効である。
【０１８９】
ストレージディビジョンは、ソリッドステートストレージデバイス１０２のソリッドステートストレージ１１０の一部を具える。通常、ストレージディビジョンは消去ブロックである。フラッシュメモリに関して、消去ブロックの消去オペレーションは、各セルをチャージングすることによって、１を消去ブロックの全ビットに書き込む。これは、ロケーションが全て１として開始するプログラムオペレーションと比較して、冗長的なプロセスであり、データが書き込まれるとき、いくつかのビットは、ゼロとして書き込まれたセルをディスチャージすることによってゼロに変更される。なお、ソリッドステートストレージ１１０がフラッシュメモリでないか、あるいは、消去サイクルが、読み取りまたはプログラミングなど、その他のオペレーションとして同様の時間を費やすフラッシュメモリを有する場合は、ストレージディビジョンは、消去されるのに必要ではない。
【０１９０】
本明細書で使用されるように、ストレージディビジョンは、消去ブロックに対する領域と同等であるが、消去されても消去されなくてもよい。本明細書で消去ブロックが使用される場合、消去ブロックは、ストレージエレメント（例えば、ＳＳＳ０．０  ２１６ａ）内の指定されたサイズの特定エリアを指し、通常、所定量のページを具える。「消去ブロック」は、フラッシュメモリと関連して使用されるとき、通常、書き込まれる前に消去されるストレージディビジョンである。「消去ブロック」は、「ソリッドステートストレージ」とともに使用される場合、消去されても消去されなくてもよい。本明細書で使用されるように、消去ブロックは、１つの消去ブロック、または、ストレージエレメント（例えば、ＳＳＳ０．０からＳＳＳＭ．０  ２１６ａ−ｎ）の各列の消去ブロックを有する消去ブロック群、を具えることができ、消去ブロックは、バーチャル消去ブロックも意味する。バーチャル消去ブロックと関連した論理コンストラクトを指す場合、消去ブロックは、論理消去ブロック（「ＬＥＢ」）も意味する。
【０１９１】
通常、パケットは、処理の順番によって、シークエンシャルに記憶される。一実施例においては、書き込みデータパイプライン１０６が使用される場合、シークエンス式ストレージモジュール８０２は、パケットが書き込みデータパイプライン１０６からくる順番でパケットを記憶する。有効データは、下記で説明するように、リカバリオペレーション中ストレージディビジョンからリカバリされるので、上記順番は、別のストレージディビジョンから読み取られる有効データのパケットと混合した、要求デバイス１５５からきたデータセグメントの結果でもよい。リカバリされた有効データパケットを書き込みデータパイプライン１０６に再ルーティングすることは、図３のソリッドステートストレージ制御部１０４に関連して上述したように、不要データコレクタバイパス３１６を具えてもよい。
【０１９２】
装置８００は、リカバリ用ストレージディビジョンを選択するストレージディビジョン選択モジュール８０４を具える。リカバリ用ストレージディビジョンを選択することで、データを書き込むシークエンス式ストレージモジュール８０２によってストレージディビジョンを再利用することができ、従って、リカバリされたストレージディビジョンをストレージプールに加えるか、または、ストレージディビジョンが使用不能、信頼性がない、リフレッシュすべき、あるいは、ストレージプールから一時的または永続的にストレージディビジョンをとると判定した後、ストレージディビジョンから有効データをリカバリする。別の実施例においては、ストレージディビジョン選択モジュール８０４は、不要データの多いストレージディビジョンまたは消去ブロックを識別することによって、リカバリ用ストレージディビジョンを選択する。
【０１９３】
別の実施例においては、ストレージディビジョン選択モジュール８０４は、摩耗の少ないストレージディビジョンまたは消去ブロックを識別することによってリカバリ用ストレージディビジョンを選択する。例えば、摩耗の少ないストレージディビジョンまたは消去ブロックを識別することは、不要データの少ない、消去サイクルの数が少ない、ビットエラー率の低い、または、プログラムカウントの低い（回数の低い、バッファ中のページデータは、ストレージディビジョンのページに書き込まれ；プログラムカウントは、デバイスが製造されたときから、ストレージディビジョンが最後に消去されたときから、その他の任意のイベントから、および、これらの組み合わせから、測定されてもよい）ストレージディビジョンを識別することを含む。このストレージディビジョン選択モジュール８０４は、摩耗量の少ないストレージディビジョンを判定するために、上記パラメータまたは他のパラメータの組み合わせを使用することができる。摩耗量の低いストレージディビジョンを判定することによって、リカバリ用ストレージディビジョンの選択は、使用されているストレージディビジョンを見つけるのに望ましく、摩耗レベルなどに合わせてリカバリ可能である。
【０１９４】
別の実施例においては、ストレージディビジョン選択モジュール８０４は、摩耗量の多いストレージディビジョンまたは消去ブロックを識別することによってリカバリ用ストレージディビジョンを選択する。例えば、摩耗量の多いストレージディビジョンまたは消去ブロックを識別することは、消去サイクル数の多いストレージディビジョン、ビットエラー率の高いストレージディビジョン、リカバリ不可能ＥＣＣブロックを有するストレージディビジョン、または、プログラムカウントの高いストレージディビジョンを識別することを含む。さらに、ストレージディビジョン選択モジュール８０４は、摩耗量の高いストレージディビジョンを判定する上記パラメータまたは他のパラメータの組み合わせを利用することができる。摩耗量の多いストレージディビジョンを判定することによってリカバリ用ストレージディビジョンを選択することは、過剰使用されているストレージディビジョンを見つけるのに望ましく、消去サイクルなどを使用してストレージディビジョンをリフレッシュすることによってリカバリ可能であり、または、利用不能としてサービスからストレージディビジョンを引き下げる（ｒｅｔｉｒｅ）ことができる。
【０１９５】
装置８００は、データリカバリモジュール８０６を具え、このデータリカバリモジュール８０６は、リカバリ用に選択されたストレージディビジョンから有効データパケットを読み取り、他のデータパケットを有する有効データパケットをキューイングし、シークエンス式ストレージモジュール８０２によってシークエンシャルに書き込み、シークエンス式ストレージモジュール８０２によって書き込まれた有効データの新規物理アドレスを有するインデックスをアップデートする。通常、このインデックスは、データオブジェクトから由来するパケットがソリッドステートストレージ１１０に記憶される物理アドレスに、オブジェクトのデータオブジェクト識別子をマッピングするオブジェクトインデックスである。
【０１９６】
一実施例においては、装置８００は、ストレージディビジョンリカバリモジュール８０８を具え、このストレージディビジョンリカバリモジュール８０８は、使用または再使用のためのストレージディビジョンを準備し、データリカバリモジュール８０６がストレージディビジョンから有効データをコピーするのが完了した後、データパケットをシークエンシャルに書き込むために、利用可能なストレージディビジョンをシークエンス式ストレージモジュール８０２に標識する。別の実施例においては、装置８００は、データを記憶するために利用不可能なとき、リカバリ用に選択されたストレージディビジョンを標識するストレージディビジョンリカバリモジュール８０８を具える。通常、これは、ストレージディビジョンまたは消去ブロックが、信頼性のあるデータストレージ用に使用される状況ではないと、摩耗量の多いストレージディビジョンまたは消去ブロックを識別するストレージディビジョン選択モジュール８０４によるものである。
【０１９７】
一実施例においては、装置８００は、ソリッドストレージデバイス１０２のソリッドストレージデバイス制御部２０２中にある。別の実施例においては、装置８００は、ソリッドステートストレージデバイス制御部２０２を制御する。別の実施例においては、装置８００の一部が、ソリッドステートストレージデバイス制御部２０２中にある。別の実施例においては、データリカバリモジュール８０６によってアップデートされたオブジェクトインデックスは、ソリッドステートストレージデバイス制御部２０２中に配置される。
【０１９８】
一実施例においては、ストレージディビジョンは、消去ブロックであり、装置８００は、データリカバリモジュール８０６が、選択された消去ブロックから有効データパケットをコピーした後で、ストレージディビジョンリカバリモジュール８０８が、利用可能として消去ブロックを標識する前に、リカバリ用に選択された消去ブロックを消去する消去モジュール８１０を具える。読み取りオペレーションまたは書き込みオペレーションよりも大幅に長い時間を要する消去オペレーションを有するフラッシュメモリおよびその他のソリッドストレートストレージに関して、新規データを書き込むことを可能にする前にデータブロックを消去することは、効率的なオペレーションとして望ましい。ソリッドステートストレージ１１０がバンク２１４中に配置される場合、消去モジュール８１０による消去オペレーションは、１つのバンクで実行され、その他のバンクは、読み取りオペレーション、書き込みオペレーションまたはその他のオペレーションを実行する。
【０１９９】
一実施例においては、装置８００は、不要データ標識モジュール８１２を具え、このモジュール８１２は、データパケットがもはや有効ではないことを示すオペレーションに応じて、ストレージディビジョン中のデータパケットが無効であることを識別する。例えば、データパケットが削除される場合、不要データ標識モジュール８１２は、データパケットが無効であることを識別できる。読み取り−修正−書き込みオペレーションは、無効であるとして識別されるデータパケットに関する別の方法である。一実施例においては、不要データ標識モジュール８１２は、インデックスをアップデートすることによって、無効であるデータパケットを識別することができる。別の実施例においては、不要データ標識モジュール８１２は、無効なデータパケットが削除されたことを示す別のデータパケットを記憶することによって、データパケットが無効であることを識別できる。このことが有利であるのは、ソリッドステートストレージ１１０中に、データパケットが削除されたという情報を記憶することによって、オブジェクトインデックス再構築モジュール２７２または同様のモジュールが、無効データパケットが削除されたことを示す項目を有するオブジェクトインデックスを再構築することができることである。
【０２００】
一実施例においては、装置８００は、性能全体を改善するために、フラッシュコマンドに続いて、バーチャルページデータの残りの部分を埋めるのに使用でき、フラッシュコマンドは、書き込みパイプライン１０６が空になり、全てのパケットが、非揮発性ソリッドステートストレージ１１０内に書き込まれるまで、書き込みパイプライン１０６にデータが流れるのを中止する。これは、必要とされる不要データコレクションの量、ストレージディビジョンを消去するのにかかる時間、バーチャルページをプログラムするのに必要な時間を低減することができる利点を有する。例えば、ソリッドステートストレージ１１０のバーチャルページ内に書き込むために１つの小さなパケットのみが準備されるときに、フラッシュコマンドが受信される場合がある。このようにほぼ空のバーチャルページをプログラムすることで、無駄なスペースをすぐにリカバリする必要が生じ、ストレージディビジョン内の有効データを、収集された不必要な不要データにして、消去される、リカバリされる、および、シークエンス式ストレージモジュール８０２によって書き込む利用可能スペースのプールにリターンされる、ストレージディビジョンにする。
【０２０１】
不要データパケットを実際に消去するよりも、データパケットを無効として標識する方が有効であるのは、上述したように、フラッシュメモリおよび他の同様のストレージに関して、消去オペレーションが大幅に時間をとるからである。装置８００に記載されるように、不要データコレクションシステムが、ソリッドステートストレージ１１０内で自律的に機能できることで、読み取りオペレーション、書き込みオペレーションおよびその他のより短時間のオペレーションから消去オペレーションを分ける方法を提供することができ、ソリッドステートストレージデバイス１０２は、他の多くのソリッドステートストレージシステムまたはストレージデバイスよりも迅速に機能することができる。
【０２０２】
図９は、本発明によるストレージリカバリのための方法９００に関する一実施例を示す概略フローチャート図である。方法９００はスタートし（９０２）、シークエンス式ストレージモジュール８０２は、ストレージディビジョン中にデータパケットをシークエンシャルに書き込む（９０４）。ストレージディビジョンは、ソリッドステートストレージデバイス１０２中のソリッドステートストレージ１１０の一部である。通常、ストレージディビジョンは消去ブロックである。データパケットは、オブジェクト由来であり、データパケットは、処理の順番によってシークエンシャルに記憶される。
【０２０３】
ストレージディビジョン選択モジュール８０４は、リカバリ用ストレージディビジョンを選択し（９０６）、データリカバリモジュール８０６は、リカバリ用に選択されたストレージディビジョンから有効データパケットを読み取る（９０８）。通常、有効データパケットは、消去または削除が標識されていないデータパケットであるか、標識されている他の不要データであり、有効または「優良」データとみなされる。データリカバリモジュール８０６は、シークエンス式ストレージモジュール８０２によってシークエンシャルに書き込まれるようにスケジューリングされた他のデータパケットを有する有効データパケットをキューイングする（９１０）。データリカバリモジュール８０６は、シークエンス式ストレージモジュール８０２によって書き込まれる有効データの新規物理アドレスを有するインデックスをアップデートする（９１２）。このインデックスは、オブジェクト識別子に対するデータパケットの物理アドレスのマッピングを具える。データパケットは、ソリッドステートストレージ１１０中に記憶される際に記憶されるものであり、オブジェクト識別子は、データパケットに対応する。
【０２０４】
データリカバリモジュール８０６は、ストレージディビジョンから有効データをコピーし終えてから、ストレージディビジョンリカバリモジュール８０８は、データパケットをシークエンシャルに書き込むシークエンス式ストレージモジュール８０２が利用可能であるとして、リカバリ用に選択されたストレージディビジョンを標識し（９１４）、方法９００は終了する（９１６）。
【０２０５】
空データセグメント指令
通常、データがもはや有用できないとき、そのデータは消去可能である。多くのファイルシステムでは、消去コマンドは、ファイルシステム中のディレクトリ項目を削除し、データを含むストレージデバイスの所定位置にあるデータをそのままに残しておく。通常、データストレージデバイスは、この種の消去オペレーションに含まれない。データを消去する別の方法は、ゼロ、１またはその他のヌルデータ文字をデータストレージデバイスに書き込み、実際に消去されたファイルに置換することである。しかしながら、これが非効率なのは、上書きするデータを転送している間、有効なバンド幅が使用されるからである。さらに、ストレージデバイス中のスペースは、不要データを上書きするのに使用されるデータによって占有される。
【０２０６】
ここで記載されるソリッドステートストレージデバイス１０２のようないくつかのストレージデバイスにおいては、追記型及びガーベージコレクション型のストレージデバイスではないので、既に記憶されたデータをアップデートすることで既存のデータを上書きすることはない。上記デバイス上で、１のストリングまたはゼロのストリングを有するデータを上書きする試みは、既存データを上書きする所望の意図を完了せずに、有用なスペースを埋める。ソリッドステートストレージデバイス１０２など、追記型及びガーベージコレクション型のデバイスについては、クライアント１１４は、通常、データを消去するためにデータを上書きする能力を有しない。
【０２０７】
反復文字のストリングまたは文字ストリングを受信するときに、受信したデータは、高度に圧縮可能であるが、通常、圧縮は、ストレージデバイスに転送する前に、ファイルシステムによってなされる。通常のストレージデバイスは、圧縮データと未圧縮データとの区別をつけることはできない。さらに、ストレージデバイスは、消去されたファイルを読み取るコマンドを受信することができ、ストレージデバイスは、ゼロ、１またはヌル文字のストリームを要求デバイスに転送することができる。再度となるが、バンド幅は、消去されたファイルを示すデータを転送するのに必要である。
【０２０８】
上述した説明から、ストレージデバイスが、空データセグメントまたは反復文字若しくは文字ストリングを有するデータを表すデータセグメントトークンを記憶することができるように、データを消去すべきという指令を受信するストレージデバイスのための装置、システムおよび方法に関する必要性が存在することは明らかである。装置、システムおよび方法は、さらに、既存データを消去することができ、得られる使用されたストレージスペースは、スモールデータセグメントトークンを具える。当分野の欠点のいくつかまたは全部を克服する装置、システムおよび方法が示される。
【０２０９】
図１０は、本発明によるトークン指令を生成する装置を有するシステム１０００の一実施例を示した概略ブロック図である。この装置は、トークン指令生成モジュール１００２、トークン指令転送モジュール１００４、読み取りレシーバモジュール１００６、読み取り要求転送モジュール１００８、読み取りトークン指令レシーバモジュール１０１０、要求クライアント応答モジュール１０１２およびセグメント再生成モジュール１０１４を具え、これらは以下で説明する。一実施例においては、この装置は、ストレージ制御部１５２およびデータストレージデバイス１５４を具えるストレージデバイス１５０に接続したサーバ１１２内にあり、これらは、上述したものと実質的に同等である。
【０２１０】
一実施例においては、この装置は、トークン指令を有するストレージ要求を生成するトークン指令生成モジュール１００２を具える。トークン指令は、ストレージデバイス１５０上のデータセグメントトークンを記憶する要求を具える。トークン指令は、ストレージデバイス１５０に送られて、データセグメントトークンが所定位置に送られていなかった場合にデータセグメントとして記憶される、一連の反復同一文字、または、一連の反復同一文字ストリングに置換されるように意図される。一実施例においては、一連の反復同一文字は、データセグメントが空であることを示唆する。例えば、一連の反復同一文字は、ゼロまたは１であってもよく、ゼロまたは一で埋められたデータはセグメントは、空として解釈される。
【０２１１】
トークン指令は、少なくともデータセグメント識別子およびデータセグメント長を具える。データセグメント識別子は、通常、オブジェクトＩＤ、ファイル名であり、あるいは、ストレージデバイスに反復同一文字または文字ストリングを記憶するためにシークするときの、ファイルシステム、アプリケーション、サーバ１１２などに対するその他の周知な他の識別子である。データセグメント長は、一連の反復同一文字または文字ストリングによって求められるストレージスペースである。データセグメントトークンおよびトークン指令は、通常、一連の反復同一文字など、データセグメントのデータを具えていない。
【０２１２】
しかしながら、トークン指令は、反復同一文字または文字ストリングの少なくとも１つのインスタンスなど、データセグメントトークンを形成する他の関連情報を具える。さらに、トークン指令は、データセグメントロケーション、ファイルシステムからのアドレス、データセグメントに対応するデータストレージデバイスのロケーションなど、メタデータを具えることができる。当分野の当業者であれば、トークン指令とともに含むことができるその他の情報を認識されたい。一実施例においては、トークン指令生成モジュール１００２は、トークン指令とともにデータセグメントトークンを生成する。
【０２１３】
一実施例においては、トークン指令生成モジュール１００２は、ストレージデバイス１５０にある既存データを上書きする要求に応答して、トークン指令および安全消去コマンドの双方を生成する。既存データは、トークン指令におけるデータセグメント識別子と同一のデータセグメント識別子を有するストレージデバイス１５０で識別されたデータを具える。通常、データを上書きする要求は、無効または不要データとしてデータを単に標識するか、データまたは他の典型的な削除オペレーションに対するポインタを削除するのに十分ではないが、データは、リカバリ不可能なように上書きされるように要求されるところに送られる。例えば、データを上書きする要求は、データが機密情報と考えられ、安全上の理由から破壊されなければならないところで要求される。
【０２１４】
安全消去コマンドは、ストレージデバイス１５０が既存データを上書きするように指令し、既存データはリカバリ不可能となる。次いで、ストレージデバイス１５０は、既存データを上書き、リカバリ、消去するとともに、データセグメントトークンを作成する。結果として、既存データは、リカバリ不可能であり、データセグメントトークンは、ストレージデバイス１５０に記憶され、ストレージスペースは、通常、既存データよりも大幅に少ない。
【０２１５】
さらなる実施例においては、装置は、消去確認モジュール１０１６を具え、この消去確認モジュール１０１６は、ストレージデバイス１５０の既存データが、文字とともに上書きされたことの確認信号を受信する。この確認信号は、要求デバイスまたはクライアント１１４に送られ、既存データがリカバリ不能である条件におかれたことを確認するために使用可能である。他の実施例においては、安全消去コマンドは、ストレージデバイス１５０が、特定の文字または文字ストリングを有する既存データを上書きするように指令でき、実行コマンドは、複数回実行することができる。当分野の当業者であれば、既存データがリカバリ不能であることを確証するために、１又はそれ以上の安全消去コマンドを設定する他の方法を理解されたい。
【０２１６】
データは、暗号化可能であり、次いで、ストレージデバイス１５０に記憶され、データを記憶することと関連してストレージデバイス１５０が受信する暗号化キーを使用して暗号化がなされる。既存データが、記憶される前に受信された符号化キーを用いて暗号化される場合、別の実施例においては、トークン指令生成モジュール１００２は、既存データを上書きするために要求を受信するのに応じて、トークン指令を生成することともに暗号化消去コマンドを生成する。暗号化消去コマンドは、既存データを記憶するのに使用される暗号化キーを消去し、暗号化キーはリカバリ不能になる。
【０２１７】
一実施例においては、暗号化キーを消去することは、要求デバイスから暗号化キーを消去することを具える。別の実施例においては、暗号化キーの消去は、サーバ、キー保管場所（ｖａｕｌｔ）、キーが記憶されるその他のロケーションを具える。暗号化キーを消去することは、暗号化キーは、いずれの方法でもリカバリすることができないように、他のデータまたは一連の文字を用いて暗号化キーを置換することを含むことができる。通常、暗号化ルーチンが、既存データを解読する試みを邪魔するのに十分強固である既存データを暗号化するのに使用された場合、暗号化キーを消去することは、ストレージデバイス１５０の既存データをリカバリ不能にする。既存データを上書きする要求は、データを安全上の理由から上書きする安全消去指令、データを消去するためのデータを上書きする要求、または、反復同一文字または文字ストリングで既存データを置換するようにシークする要求などでもよい。一実施例においては、安全消去指令は、デバイスに、暗号化キーを安全に消去させ、既存データを安全に消去させることを両方行う。一実施例においては、暗号化キーの消去によって、不要データコレクションプロセスがストレージスペースリカバリプロセスの一部としてデータを消去するまで、ストレージデバイス１５０のデータの安全消去を延期することが可能となる。当分野の当業者であれば、暗号化キーを消去するその他の方法、および、既存データを上書きする要求を受信するその他の方法を理解されたい。
【０２１８】
一実施例においては、トークン指令は、データセグメントトークンを具え、トークン指令転送モジュール１００４は、トークン指令とともにデータセグメントトークンを転送する。一実施例においては、トークン指令は、データセグメントトークンを具えずに、データセグメントを生成するためのストレージデバイス１５０用のコマンドを具える。この実施例においては、トークン指令転送モジュール１００４は、データセグメントトークンを生成するコマンドを有するトークン指令を転送し、データセグメントトークンを転送しない。
【０２１９】
この装置は、ストレージデバイス１５０にトークン指令を転送するトークン指令転送モジュール１００４を具える。通常、トークン指令転送モジュール１００４は、ストレージ要求の一部としてトークン指令を転送する。ストレージ要求は、オブジェクト要求フォーム、データ要求フォームまたは当分野の当業者に周知の他のフォームであってもよい。トークン指令生成モジュール１００２は、安全消去指令を生成し、トークン指令転送モジュール１００４は、安全消去指令をストレージデバイス１５０に転送する。トークン指令生成モジュール１００２は、消去暗号化キーコマンドを生成し、必要がある場合には、コマンドを実行する別のデバイスに消去暗号化キーコマンドが転送される。
【０２２０】
一実施例においては、トークン指令転送モジュール１００４は、データセグメントトークンなしでトークン指令を転送する。この実施例においては、トークン指令は、データセグメントトークを作成するための、ストレージデバイス１５０に関する指令及び情報を具える。別の実施例においては、トークン指令転送モジュール１００４は、データセグメントトークンを具えるトークン指令を転送する。この実施例においては、ストレージデバイス１５０は、トークン指令を受信したデータセグメントが、データセグメントを表し、適宜なアクションをとり、データセグメントトークを記憶し、データセグメントトークンは、通常のデータとしてデータセグメントトークンを単に記憶するのではなく、データセグメントを表す。
【０２２１】
特定の実施例においては、装置は、ストレージデバイス１５０と、ストレージデバイス１５０にストレージ要求を転送する読み取り要求転送モジュール１００８と、ストレージデバイス１５０からセグメントトークンを読み取るストレージ要求を受信する読み取りレシーバモジュール１００６を具える。通常、ストレージ要求は、外部クライアント１１４、サーバ１１２で運転しているアプリケーションまたはファイルサーバなど、サーバ１１２内部のクライアント１１４などの要求クライアント１１４から受信される。当分野の当業者であれば、読み取りレシーバモジュール１００６がストレージ要求を受信できる要求クライアント１１４として機能するその他のデバイスおよびソフトウェアを理解されたい。
【０２２２】
ストレージ要求は、トークン指令転送モジュール１００４によってストレージデバイス１５０に転送されるトークン指令に記憶されるように要求されたデータセグメントトークンに対応する、データセグメントを読み取るための要求（ｒｅｑｕｅｓｔ）を具える。一実施例においては、要求クライアント１１４は、データセグメントがデータセグメントトークンの形態で記憶されたことを認識しない。別の実施例においては、要求デバイスは、データセグメントが、データセグメントトークンとして記憶されたことを認識するが、データセグメントトークンに記憶された情報を認識しない。
【０２２３】
特定の実施例においては、装置は、ストレージデバイス１５０から要求されたデータセグメントトークンに対応するメッセージを受信する読み取りトークン指令レシーバモジュール１０１０を具え、このメッセージは、少なくともデータセグメント識別子およびデータセグメント長を具える。このメッセージは、通常、データセグメントのデータを具えない。さらに、このメッセージは、データセグメントロケーションまたは反復同一文字若しくは文字ストリングなど、データセグメントトークンに記憶されたその他の情報を具えることができる。特定の実施例においては、この装置は、ストレージデバイス１５０から受信したメッセージから構築（ｆｏｒｍｕｌａｔｅ）された要求クライアント１１３に、応答信号を転送する要求クライアント応答モジュール１０１２を具える。
【０２２４】
一実施例においては、読み取りトークン指令レシーバモジュール１０１０も、メッセージにおいて、既存データが文字で上書きされたことの確認信号を受信し、既存データはリカバリ不能となり、既存データは、ストレージデバイス１５０に以前に記憶されており、メッセージにおいて、受信されたデータセグメントトークンから同一データセグメント識別子として参照される。この確認信号は、データセグメントを読み取るためにストレージ要求から独立してストレージデバイス１５０から受信されてもよい。
【０２２５】
別の実施例においては、要求クライアント１１４は、データセグメントを要求する場合、この装置は、メッセージ中に含まれる情報を使用し、データセグメントのデータを再構築するデータセグメント再生成モジュール１０１４を具える。この場合、要求クライアントに送られる応答信号は、再構成されたデータセグメントを含む。別の実施例においては、要求クライアントに送られる応答信号は、ストレージデバイス１５０から受信したメッセ維持に含まれる情報を具える。要求クライアント１１４は、次いで、データセグメントを再構築し、いくつか他の方法において、この情報を使用することができる。別の実施例においては、メッセージは、データセグメントトークンを具える。データセグメントトークンは、要求クライアント１１４に送る前にデータセグメントを再構築するために、データセグメント再生成モジュール１０１４によって使用可能であり、あるいは、要求クライアント応答モジュール１０１２が、データセグメントトークンを単純に送る（ｆｏｒｗａｒｄ）することができる。
【０２２６】
一実施例においては、トークン指令を有するストレージ要求は、さらに、ストレージデバイス１５０にストレージスペースをリザーブする要求を具え、要求されたリザーブしたストレージスペースは、データセグメント長とほぼ同一のストレージスペース量である。別の実施例においては、ストレージスペースをリザーブする要求は、データセグメント長とは異なるストレージスペース量である。例えば、ストレージデバイス１５０がソリッドステートストレージデバイス１０２である場合、ソリッドステートストレージデバイス１０２は、ハードドライブまたはその他の低価格長期ストレージに接続でき、ソリッドステートストレージ１１０は、長期ストレージ用キャッシュとして設定される。ストレージをリザーブする要求は、ソリッドステートストレージデバイス１０２に、ソリッドステートストレージデバイス１０２にデータを書き込む準備をする際、長期ストレージに対するキャッシュの一部としてフラッシュさせる。当分野の当業者であれば、所望されるストレージスペースをリザーブする要求であるその他の条件を理解されたい。
【０２２７】
一実施例においては、装置は、読み取りレシーバモジュール１００６、読み取り要求転送モジュール１００８、読み取りトークン指令レシーバモジュール１０１０および要求クライアント応答モジュール１０１２を具えてもよく、これらは、上述したものと実質的に同等なものである。一実施例においては、モジュール１００６−１０１２は、トークン指令生成モジュール１００２またはトークン指令転送モジュール１００４を具える装置から独立していてもよい。一実施例においては、この装置は、データセグメント再生成モジュール１０１４を具え、これは、上述したデータセグメント再生成モジュール１０１４と実質的に同じである。
【０２２８】
図１１は、本発明によるトークン指令を生成し転送する方法１１００に関する一実施例を示した概略フローチャート図である。この方法１１００は、スタートし（１１０２）、トークン指令生成モジュール１００２は、トークン指令を有するストレージ要求を生成し（１１０４）、トークン指令は、ストレージデバイス１５０にデータセグメントトークンを記憶する要求を具える。トークン指令転送モジュール１００４は、ストレージデバイス１５０にトークン指令を転送し（１１０６）、方法１１００は終了する（１１０８）。一実施例においては、ストレージ要求は、データセグメントトークンを記憶するトークン指令を具え、ストレージ要求は、データセグメントのデータが実質的にない。別の実施例においては、ストレージ要求は、データセグメントからデータを具える。好適な実施例においては、ソフトウェアアプリケーションは、トークン指令を使用してストレージ要求を作成し、データセグメントの作成を回避する。別の実施例においては、ソフトウェアアプリケーションは、トークン指令の作成を要求する。
【０２２９】
図１２は、本発明によるデータセグメントトークンを読み取る方法１２００に関する一実施例を示した概略フローチャート図である。この方法１２００は、スタートし（１２０２）、読み取りレシーバモジュール１００６は、要求クライアント１１４から、ストレージデバイス１５０からのデータセグメントを読み取るストレージ要求を受信する（１２０４）。読み取り要求転送モジュール１００８は、ストレージデバイス１５０にストレージ要求を転送する（１２０６）。
【０２３０】
読み取りトークン指令レシーバモジュール１０１０は、ストレージデバイス１５０から、要求されたデータセグメントトークンに対するメッセージを受信し（１２０８）、このメッセージは、少なくともデータセグメント識別子およびデータセグメント長を具える。このメッセージは、データセグメントのデータが実質的にない。要求クライアント応答モジュール１０１２は、ストレージデバイス１５０から受信したメッセージから構築された要求クライアントに応答信号を転送し（１２１０）、この方法１２００は、終了する（１２１２）。
【０２３１】
図１３は、本発明によるデータセグメントトークンを管理する装置を有するシステム１３００に関する一実施例を示した概略ブロック図である。このシステム１３００は、書き込み要求レシーバモジュール１３０２およびデータセグメントトークンストレージモジュール１３０４を有する装置を具え、各種実施例においては、トークン生成モジュール１３０６、読み取り要求レシーバモジュール１３０８、読み取りデータセグメントトークンモジュール１３１０、転送データセグメントトークンモジュール１３１４および転送データセグメントモジュール１３１６を有する読み取り要求応答モジュール１３１２、再構築データセグメントモジュール１３１８、安全確認モジュール１３２２を有する安全消去モジュール１３２０、ストレージスペースリザーブモジュール１３２４、を具え、これらは、以下で説明する。システム１３００は、ストレージ制御部１５２およびデータストレージデバイス１５４を有するストレージデバイス１０を具え、これらは、上述したものと実質的に同じである。システム１３００は、要求デバイス１３２６を具え、これは以下に記載されているように、ストレージデバイス１５０と接続している。
【０２３２】
描かれた実施例においては、モジュール１３０２−１３２４は、ストレージデバイス１５０またはストレージ制御部１５２に含まれる。別の実施例においては、１又はそれ以上のモジュール１３０２−１３２４の少なくとも一部分は、ストレージデバイス１５０の外側に配置される。更なる実施例においては、要求デバイス１３２６は、ドライバ、ソフトウェアまたは１又はそれ以上のモジュール１３０２−１３２４のその他の機能の形態において、モジュール１３０２−１３２４の一部を具える。例えば、トークン生成モジュール１３０６および再構成データセグメントモジュール１３１８は、要求デバイス１３２６中に示されている。当分野の当業者であれば、モジュール１３０２−１３２４の機能を分配し、実装するその他の方法を理解されたい。
【０２３３】
この装置は、要求デバイス１３２６からのストレージ要求を受信する書き込み要求レシーバモジュール１３０２を具え、ストレージ要求は、ストレージデバイス１５０内にデータセグメントを記憶する要求を具える。データセグメントは、一連の反復同一文字または文字ストリングを具える。通常、一連の反復同一文字は、データセグメントが空であることを意味する。これは、一連の反復同一文字が１又はゼロである場合に正しい。この装置は、ストレージデバイス１５０通にデータセグメントトークンを記憶するデータセグメントトークンストレージモジュール１３０４を具える。データセグメントトークンは、少なくともデータセグメント識別子およびデータセグメント長を具える。データセグメントトークンは、データセグメントからの実際のデータが実質的にない。
【０２３４】
データセグメントトークンは、多数のフォームで記憶可能である。一実施例においては、インデックス中の項目を具えており、このインデックスは、ストレージデバイス１５０に記憶された情報およびデータに対応する。例えば、このインデックスは、図２に描かれた装置２００に関連して上述したように、オブジェクトインデックスであってもよい。さらに、このインデックスは、ファイルシステムインデックス、ブロックストレージインデックス、または、当分野の当業者に周知なその他のインデックスであってもよい。別の実施例においては、データセグメントトークンは、ストレージデバイス１５０に記憶されるメタデータを具え、あるいは、ストレージデバイス１５０に記憶されるメタデータのフォームである。別の実施例においては、セグメントトークンが、ストレージデバイス１５０上のメタデータとして記憶され、インデックス中の項目を具える。当分野の当業者であれば、データセグメントトークンをストレージする他の方法を理解されたい。
【０２３５】
一実施例においては、ストレージ要求は、データセグメントトークンを記憶するトークン指令を具え、このストレージ要求は、データセグメントのデータが実質的にない。トークン指令は、データセグメントトークンを生成するデータセグメントトークンまたはコマンドを具えることができる。トークン指令は、データセグメントトークンを具えていない場合、データトークンストレージモジュール１３０４は、トークン中の情報からデータセグメントトークンを生成する。トークン指令がデータセグメントトークンを具える場合は、データセグメントトークンストレージモジュール１３０４が、トークン指令中のデータセグメント識別子によって識別されるデータセグメントを表すデータ構造としてデータセグメントを認識し、適宜にデータセグメントトークンを記憶する。
【０２３６】
通常、データセグメントトークンストレージモジュール１３０４が、データセグメントトークンを認識する場合、データセグメントトークンは、ストレージデバイス１５０に記憶される他のデータとは何らかの方法で区別される。例えば、要求デバイス１３２６は、データを圧縮し、圧縮オブジェクト、ファイルまたはセグメントを送るが、ストレージデバイス１５０は、他のストレージ要求の方法によって受信された他のデータから圧縮データセグメントを区別できない。
【０２３７】
データセグメントトークンストレージモジュール１３０４は、受信されたデータセグメントがデータセグメントトークンであることを認識する場合、データセグメントトークンストレージモジュール１３０４は、読み取るとき、データセグメントトークンが、データセグメントトークンではなくデータセグメントとして存在するような方法で、データセグメントトークンを記憶することができる。当分野の当業者であれば、受信したデータセグメントトークンが、データセグメントではなくデータセグメントトークンであると認識した後に、データセグメントトークンストレージモジュール１３０４がデータセグメントトークンを記憶することができるような他の方法を理解されたい。
【０２３８】
別の実施例においては、ストレージ要求は、データセグメントからデータを具える。この実施例においては、この装置は、データセグメントからデータセグメントトークンを生成するトークン生成モジュール１３０６を具え、データセグメントトークンは、データセグメントを記憶するストレージ要求に応答して作成される。更なる実施例においては、トークン生成モジュール１３０６は、可能なドライバフォームにおいて、要求デバイス１３２６中にある。
【０２３９】
一実施例においては、この装置は、既存データがリカバリ不能であるように、文字を用いて既存データを上書きする安全消去モジュール１３２０を具え、既存データは、ストレージ要求で識別されたデータセグメントと同一のデータセグメント識別子として識別された、ストレージデバイス１５０中に既に記憶されたデータセグメントのデータを具える。この実施例においては、データセグメントトークンは、データセグメント識別子およびデータセグメント長とともに記憶され、データセグメントトークンに記憶された同一のデータセグメント識別子によって識別される既存データは、既存データを上書きすることで消去される。通常、既存文字は、ゼロ、１、または、その他の文字ストリングによって上書きされ、データは破壊され、リカバリ不能となる。
【０２４０】
さらなる実施例においては、安全消去モジュール１３２０は、既存データが上書きされることを示すメッセージを転送する消去確認モジュール１３２２を具える。通常、メッセージは、要求デバイス１３２６に送られる。消去確認メッセージは、安全消去モジュール１３２０が既存データを上書きした後に転送される。このメッセージは、ストレージ要求として同一トランザクションにおいて、あるいは、異なるトランザクションにおいて、転送されてもよい。
【０２４１】
別の実施例においては、安全消去モジュール１３２０は、ストレージスペースリカバリオペレーション中に、既存データを上書きする。例えば、ストレージデバイス１５０がソリッドステートストレージデバイス１０２である場合、上述したように、ストレージスペースリカバリオペレーションは、図８に描かされた装置８００に関して記載された不要データコレクションに関連してもよい。なお、既存データを上書きする要求を含むストレージスペースリカバリオペレーションは、通常、迅速化されることが可能であり、既存データが記憶されるストレージロケーションが、確認メッセージが消去確認モジュール１３２２によって送られる前に、必ずリカバリされる。一実施例においては、既存データは、安全消去が要求されていることを示すように、標識され、あるいは、識別される。通常、確認メッセージは、消去を標識した既存データが上書きされてリカバリ不能になるまで、送られない。別の実施例においては、安全消去モジュール１３２０は、後期ストレージスペースリカバリが無効であることを既存データに標識するのみである。別の実施例においては、安全消去は、既存データが無効であることを示すインデックスをアップデートし、後期ストレージスペースリカバリ中にデータが上書きされるまで、このデータへのアクセスを阻止する。
【０２４２】
一実施例においては、安全消去モジュール１３２０は、データセグメントが記憶される毎に、既存データを上書きする。別の実施例においては、既存データを上書きする要求を具え、安全消去モジュール１３２０は、既存データを上書きする要求に応答して、既存データを上書きする。別の実施例においては、安全消去モジュール１３２０は、既存データが消去されたという確認信号に関するメタ情報を記憶し、次の読み取りが消去を指示することができる。
【０２４３】
安全消去が受信された場合の他の実施例において、既存データが削除される。一実施例においては、データを削除することは、インデックス項目、アドレスなどを削除することを具える。好適な実施例においては、データセグメントトークンが記憶されるとき、対応する既存データは、無効あるいはストレージリカバリの準備ができていることを標識される。このデータは、ストレージリカバリオペレーションまたは不要データコレクションオペレーションなどにおいて後でリカバリ可能である。
【０２４４】
特定の実施例においては、この装置は、データセグメントを読み取るためのストレージ要求を受信する読み取り要求レシーバモジュール１３０８、ストレージ要求によって要求されるデータセグメントに対応するデータセグメントトークンを読み取る読み取りデータセグメントトークンモジュール１３１０、および、要求デバイス１３２６に応答信号を転送する読み取り要求応答モジュール１３１２を具える。この応答信号は、要求されたデータセグメントに対応するデータセグメントトークンを使用して生成される。
【０２４５】
一実施例において、データセグメントを読み取るストレージ要求は、ストレージ要求に関連しており、ストレージ要求が成功したことを確認するのに役立つ。別の実施例においては、データセグメントを読み取る要求は、ストレージ要求から独立しており、ストレージ要求を作成した要求デバイス１３２６または別の要求デバイス１３２６によって開始されてもよい。
【０２４６】
一実施例においては、要求デバイス１３２６が、実際のデータの位置にあるデータセグメントトークンからの情報を受信する場合、読み取り要求応答モジュール１３１２は、要求デバイス１３２６へのメッセージに応答して転送する転送データセグメントトークンモジュール１３１４を具える。このメッセージは、少なくともデータセグメント識別子およびデータセグメント長を具えるが、さらに、データセグメントロケーション、反復同一文字又は文字ストリングの少なくとも１つのインスタンス、あるいは、その他の関連情報を具えてもよい。通常、メッセージは、データセグメントトークンに含まれるもの以外で、データセグメントの実際のデータを具えていない。
【０２４７】
別の実施例においては、要求デバイス１３２６は、データセグメントを受信するとされる場合、この装置は、データセグメントトークンを使用して、データセグメントのデータを再構成する再構成データセグメントモジュール１３１８を具える。読み取り要求応答モジュール１３１２は、さらに、要求デバイス１３２６に再構成要求データセグメントを転送する転送データセグメントモジュール１３１６を具える。別の実施例において、再構成データセグメントモジュール１３１８は、可能であれば、ドライバのフォームにおいて、要求デバイス１３２６に存在し、転送データセグメントトークモジュール１３１４は、データセグメントトークン情報を有するメッセージを要求デバイス１３２６に送る。再構成データセグメントモジュール１３１８は、要求デバイス１３２６で、メッセージから要求されたデータセグメントを再構成する。
【０２４８】
一実施例においては、システム１３００は、読み取り要求レシーバモジュール１３０８、読み取りデータセグメントトークンモジュール１３１０、読み取り要求応答モジュール１３１２を含む別の装置を具え、これらは、上述したものと実質的に同一である。この装置は、書き込み要求レシーバモジュール１３０２およびデータセグメントトークンストレージモジュール１３０４を具える装置から独立していてもよい。一実施例においては、読み取り要求応答モジュール１３１２は、転送データセグメントトークンモジュール１３１４および／または転送データセグメントモジュール１３１６を具え、この装置は、再構成データセグメントモジュール１３１８を具えてもよく、モジュール１３１４、１３１６、１３１８が上述したものと実質的に同じである。
【０２４９】
図１４は、本発明によるデータセグメントトークンを記憶する方法１４００に関する一実施例を示す概略フローチャート図である。この方法１４００は、スタートし（１４０２）、書き込み要求レシーバモジュール１３０２が、要求デバイス１３２６からのストレージ要求を受信し（１４０４）、上記ストレージ要求は、ストレージデバイス１５０にデータセグメントを記憶する要求を具える。データセグメントは、一連の反復同一文字または文字ストリングを具える。データセグメントトークンストレージモジュール１３０４は、ストレージデバイス１５０にデータセグメントトークンを記憶し（１４０６）、方法１４００は終了する（１４０８）。データセグメントトークンは、少なくともデータセグメント識別子およびデータセグメント長を具え、データセグメントトークンは、ほとんどの部分に関してデータセグメントからのデータを具えていない。
【０２５０】
図１５は、本発明によるデータセグメントトークンを読み取る方法１５００に関する一実施例を示した概略フローチャート図である。この方法１５００は、スタートし（１５０２）、読み取り要求レシーバモジュール１３０８が、ストレージデバイス１５０からデータセグメントを読み取るストレージ要求を受信する（１５０４）。データセグメントは、データセグメントトークンによってストレージデバイス１５０に表現され、このデータセグメントは、一連の反復同一文字又は文字ストリングを具える。このデータセグメントトークンは、少なくともデータセグメント識別子およびデータセグメント長を具え、データセグメントトークンは、データセグメントからデータを具えていない。読み取りデータセグメントトークンモジュール１３１０は、ストレージ要求において要求されたデータセグメントに対応するデータセグメントを読み取り（１５０６）、読み取り要求応答モジュール１３１２は、要求ストレージデバイス１５０に応答信号を転送し（１５０８）、この方法１５００は終了する（１５１０）。この応答信号は、要求されたデータセグメントに応答してデータセグメントトークンを使用して生成される。
【０２５１】
本発明は、本発明の意図または本質的特徴から逸脱することなく、その他の特定の形態で実施され得る。開示された実施例は、例示のみを目的とするものであって、限定を意図するものではない。本発明の範囲は、従って、上述した説明ではなく、添付の請求の範囲によって規定される。請求の範囲内にあり、これと同等の変更は、本発明の範囲に包含されることとなる。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2010512584.tif 000001
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図１５
【補正方法】変更
【補正の内容】
【図１５】
2010512584.tif 000002