(57)【要約】ファイルのコピーおよび移動などのアタッチされたディスクドライブ動作、ならびに検索、ウイルススキャニング、およびボリュームマージなどのより複雑なプロセスについて、新規性のあるインテリジェントストレージエンジンのコンセプトが開示される。一実施形態において、ストレージエンジン（４０）は、ローカルプロセッサインテリジェンスを利用して、適切なドライバ（６０）およびＡＰＩ（Ａｐｐ．Ｂ）を介してアクセスされて、適切な場合において結果データを戻すことを除いて、ホストＣＰＵ（２２）に負荷をかけることなしに、かつローカルＣＰＵバス（３４）にデータトラフィックを課することなしに、ディスクアクセス動作を実行する。
2008527496.tif 000002
【特許請求の範囲】
【請求項１】
アタッチされたストレージ動作に関連してホストバストラフィックを低減するインテリジェントストレージエンジン装置であって、該ストレージエンジン装置は、
ホストアプリケーションから所定の命令または機能呼び出しを受信するホストインタフェースと、
該エンジンを、データ転送のために少なくとも一つのアタッチされたディスクドライブに結合するドライブインタフェースと、
該受信された命令に応答して、該アタッチされたストレージデバイスを用いてデータ転送を実行する、該ストレージエンジンにオンボードのプロセッサと
を備え、該ストレージエンジンは、ユーザデータを該ホストバスまたはホストシリアルリンクに置くことなしに、該アタッチされたストレージデバイスを用いて、該データ転送を実行するように構成されている、ストレージエンジン装置。
【請求項２】
前記ドライブインタフェースは、多数のディスクドライブへの接続を構成可能なドライブスイッチを備える、請求項１に記載のストレージエンジン装置。
【請求項３】
前記アタッチされたホストを用いたＤＭＡ転送のためのＤＭＡコンポーネントを含む、請求項１に記載のストレージエンジン装置。
【請求項４】
所定のアプリケーションプログラミングインタフェース（ＡＰＩ）を介して、ホストＣＰＵからデータ移動または処理の命令を受信するように構成されている、請求項１に記載のストレージエンジン装置。
【請求項５】
ユーザデータを一時的に格納するためのローカルキャッシュメモリを含む、請求項１に記載のストレージエンジン装置。
【請求項６】
選択されたファイルストリームのデータをオンザフライでスキャンし、そのスキャニングデータを所定の参照シーケンスにマッチングさせる手段を含む、請求項１に記載のストレージエンジン装置。
【請求項７】
低減されたローカルバストラフィックでディスクドライブ動作を実行する方法であって、該方法は、
少なくとも一つのディスクドライブへのアクセスを要求する少なくとも一つのホストアプリケーション機能を定義し、対応する機能呼び出しを有することと、
ストレージエンジン装置において該機能呼び出しをインプリメントすることと、
ホストローカルバスおよび少なくとも一つのアタッチされたディスクドライブに対して、該ストレージエンジン装置をインタフェースすることと、
該機能呼び出しが表明されたときに該機能呼び出しを検出するように、該ローカルバスを監視することと、
該検出された機能呼び出しに応答して、ユーザデータを該ローカルバスに置くことなしに、該ストレージエンジン装置の対応する機能を実行することと、
完了後に、該実行された機能の結果を該ローカルバスを介して戻すことと
を包含する、方法。
【請求項８】
前記ストレージエンジンにインプリメントされている前記ホストアプリケーション機能は、ファイルコピーおよびファイル移動の動作を含む、請求項７に記載のディスクドライブ動作を実行する方法。
【請求項９】
ソフトウェアレイヤおよびハードウェアインタフェース機能呼び出しをキャッシュする標準的な組込みのオペレーティングカーネルシステムファイルを回避し、代わりに、少なくとも一つの対応するコマンドを前記ストレージエンジンに直接的に送信することによって、ＯＳ呼び出し動作を完了するようにホストソフトウェア内の動作を実行することを含む、請求項７に記載のディスクドライブ動作を実行する方法。
【請求項１０】
前記ホストローカルバスまたはシリアル接続に負荷をかけることなしに、２つのディスクドライブの間でデータを移動させることを含む、請求項７に記載の方法。
【請求項１１】
コマンドを監視するファイルシステムフィルタモジュールを、オペレーティングシステムファイルシステムに提供することと、
該ファイルシステムフィルタモジュールにおいて、所与のコマンドが前記ストレージエンジンに現在アタッチされているディスクドライブに向けられているかどうかをチェックすることと、
コマンドがアタッチされたディスクドライブに向けられており、かつ該コマンドが該フィルタモジュールによってそれが処理し得るコマンドの所定のセットの一つとして認識される場合に、該ストレージエンジンにおいて処理するために該コマンドをインタセプトすることと
を含む、請求項７に記載のディスクドライブ動作を実行する方法。
【請求項１２】
前記動作の状態の前記ホストに定期的な情報を提供することと、リクエストされた動作の状態をキューイングすることと、該動作が完了したときに全体的な結果を提供することとを含む、請求項１１に記載の方法。
【請求項１３】
前記最終結果は、前記リクエストされた動作が完了しなかったこと、または該動作が首尾良く完了したことを示す前記ホストへの指示を含む、請求項１１に記載の方法。
【請求項１４】
前記最終結果は、リクエストされた結果データの引き渡しを含む、請求項１１に記載の方法。
【請求項１５】
前記動作は、第１のディスクドライブから第２のディスクドライブへのファイル移動、ファイルコピー動作、ディスクボリュームマージ、ウイルススキャン、ＲＡＩＤドライブアレイ再構築のうちの一つを含む、請求項１１に記載の方法。
【請求項１６】
前記動作は、格納されたユーザデータの検索を含む、請求項１１に記載の方法。
【請求項１７】
低減されたローカルバストラフィックでディスクドライブ動作を実行する方法であって、該方法は、
少なくとも一つのディスクドライブへのアクセスを要求する、少なくとも一つのアプリケーション機能を定義することと、
ローカルプロセッサとローカルメモリとを有するストレージエンジン装置に該機能をインプリメントすることと、
ホストローカルバスおよび少なくとも一つのアタッチされたディスクドライブに対して、該ストレージエンジン装置をインタフェースすることと、
所定のＡＰＩを介してアプリケーションプログラムから機能呼び出しを受信することと、
該受信された機能呼び出しに応答して、ユーザデータを該ローカルバスに置くことなしに、該ストレージエンジン装置の対応する機能を実行することであって、該実行は該少なくとも一つのアタッチされたディスクドライブにアクセスすることを含むことと、
完了後に、該実行された機能の結果を該アプリケーションプログラムに戻すことと
を包含する、方法。
【請求項１８】
前記アプリケーションプログラムは、アンチウイルスアプリケーションである、請求項１７に記載の方法。
【請求項１９】
前記ＡＰＩは、ディスクブロック動作を含む、請求項１７に記載の方法。
【請求項２０】
前記ＡＰＩは、検索動作を含む、請求項１７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願）
本出願は、２００４年１２月２９日に出願された米国仮特許出願第６０／６４０，６３４号に対して優先権を主張し、その全体がこの参照によって本明細書中に援用されている。
【０００２】
（技術分野）
本発明は、デジタルコンピューティングシステムに関連し、特に、選択されたディスクドライブ動作に関するローカルバストラフィックを低減する方法および装置に関する。
【背景技術】
【０００３】
（本発明の背景）
たとえばデスクトップまたはラップトップパーソナルコンピュータを含む多くの最新のコンピューティングマシンは、オペレーティングシステム、アプリケーションプログラム、およびデータファイルを格納するために、一つ以上のハードディスクドライブを使用する。一部の場合は、オペレーティングシステムを専用オーディオビデオディスクファイルとしてデータファイルから分離する手段として複数のディスクドライブが単一のＰＣに接続され得、または性能および信頼性を向上させるためにＲＡＩＤ構成においてともに結合され得る。ディスクドライブは、マシンの内部に、外部に、または取り外し可能デバイスとしてなど、多様な構成で装備され得る。このアプリケーションの目的のために、すべてのそのような構成は、「アタッチされた」ドライブであると考えられる。換言すると、我々は、本明細書において「アタッチされた」という用語を使用する場合に、データがネットワークを通過することなく、データがローカルバスとアタッチされたドライブとの間で転送され得るということを意味する。取り外し可能ドライブは、本目的のために、やはり「アタッチされた」と考えられる。さらに、このアプリケーションにおいて、ＩＥＥＥ１３９４、ＵＳＢ、ＳＡＴＡ、または他の種類の接続によってホストに結合されるディスクドライブなどのストレージデバイスは、ネットワークアタッチされたものとは区別されるとして、やはり直接的に「アタッチされた」と考えられる。
【０００４】
アタッチされたディスクドライブストレージシステムの数、種類、および配置には関わりなく、データ（またはコピー）を、一つのディスクドライブ上の一つの場所から、同一のディスクドライブ上の別の場所に、別の論理パーティションに、または物理的に分離したディスクドライブに移動させることを伴う、多くのホストアプリケーションまたは動作がある。他の一般的な動作は、ハードドライブ上に格納されたファイル内の特定のデータを検索すること、またはバックアップアプリケーションにおいてファイルを同期化することを含む。そのような動作またはアプリケーションの例は、ファイルのコピー、移動、ディスクドライブのデフラグメンテーション、アンチウイルススキャン、データのスキャン（検索）、およびデータのマイグレーション／変換を含む。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述のアプリケーションの公知のインプリメンテーションは、ホストＣＰＵの関与を必要とし、一つまたは複数のディスクドライブがアタッチされたホストバスに著しく負荷をかけ得る。（我々は、このアプリケーションにおいて「ホストバス」および「ローカルバス」という用語を互換的に使用する。多くのそのようなバスがあり、なかでもＰＣＩバスは周知の例である）。ＣＰＵに負荷をかけ、かつローカルバスに重いトラフィックを強いるディスク動作は、結果的に、ファイル移動動作に関連しない他のアプリケーションの速度を遅くする。なぜなら、これらのバックグラウンド動作を実行するために使用される同一のホストデータバスは、他のアプリケーションによっても使用されるからである。たとえば、現在存在するものとしてのバックアップおよびアンチウイルスアプリケーションに関する最も一般的な苦情の一つは、それらのアプリケーションがしばしばおしつけがましいとうことである。すなわち、それらのアプリケーションは、システムバスを横切って前後に送信される必要のあるデータの量のために、使用中のアプリケーションに割り込み、しばしば高速コンピュータの性能を低下させる。さらに最悪なことに、スキャンまたはバックアップのプロセスが実行し始めるときにシステムメモリが満杯に近い場合に、これらの基本的な動作は過剰なディスクスワッピング（ｄｉｓｋ  ｓｗａｐｐｉｎｇ）を生じさせ得る。
【０００６】
説明するために、図１は、簡略化された概念図１０でコンピュータおよびアタッチされたディスクドライブを示す。この図は、ディスクドライブ１６との間の、一対のデータストリーム１４によって明示される、進行中のファイルコピー動作１２を示す。さらに、アプリケーション２０が実行中であり、そのことは、ドライブ２６および２８上にさまざまに格納された他のデータの読み出し、書き込み、および処理をＣＰＵ２２に実行させる。これらのドライブに関与する読み出しおよび書き込みの動作は、３０および３２として図示される追加のデータストリームを生じさせる。この図におけるすべての４つのデータストリームは、ローカルバス３４上のトラフィックに寄与する。
【０００７】
利用可能なリソースをより良く利用するために、ハードウェアおよびソフトウェアのインテリジェント（ｉｎｔｅｌｌｉｇｅｎｔ）アプリケーションによってコンピュータシステム性能を向上させるニーズがある。一定の共通のアプリケーションおよび動作、特にアタッチされたストレージデバイスとの間のデータ転送を伴うものによってＣＰＵおよびそのローカルバスに課せられる負荷が緩和されるならば、全体的なシステム性能は著しく向上させられる。
【０００８】
追加の局面および利点は、以下の好ましい実施形態の詳細な説明から明らかであり、説明は添付の図面を参照して進められる。
【課題を解決するための手段】
【０００９】
（好ましい実施形態の詳細な説明）
従来技術の欠点および限界は、新規性のあるインテリジェントストレージエンジンのコンセプトの種々の実施形態によって対処され得る。ローカルプロセッサインテリジェンスを利用し、適切なＡＰＩを介してアクセスされる、ストレージエンジンは、適切な場合における結果データを除いて、ＣＰＵに負荷をかけることなく、かつローカルＣＰＵバスにデータトラフィックを課することなく、ディスクアクセス動作を実行する。
【００１０】
本発明は、ＰＣベースのストレージなどに適用され、そこでは、ハードドライブが、ホストＣＰＵの内部ローカルバス、または「直接アタッチされたストレージ（ｄｉｒｅｃｔ  ａｔｔａｃｈｅｄ  ｓｔｏｒａｇｅ）」すなわちＤＡＳと呼ばれる外部の直接接続ストレージをサポートする外部拡張ポートに、密接に結合または直接的に接続される。そのようなＣＰＵ内部バスは、たとえばバス仕様のＰＣＩファミリーの一つであり得る。外部ポートは、たとえばＵＳＢ２、１３９４、または外部シリアルＡＴＡポートであり得る。
【００１１】
概念的には、本発明は図２によって図示され得る。同図は、図１と同一のホストを示し、上述したのと同一のファイルコピー動作およびアプリケーションが実行中である。基本的な相違は、ＩＳＥ（インテリジェントストレージエンジン）（Ｉｎｔｅｌｌｉｇｅｎｔ  Ｓｔｏｒａｇｅ  Ｅｎｇｉｎｅ）４０に関し、この例においてはローカルバス３４とディスクドライブ１６、２６、２８との間に論理的に展開されるハードウェアとソフトウェアとの組み合わせである。図１のファイルコピープロセス１２は、ローカルバス３４を通して前後にデータを流してＣＰＵによってもはや実行されない。ここでは、新しいＩＳＥプロセス４２が代わりにファイルコピー動作を実行し、データストリームはもはやローカルバス３４を通過せず、したがってローカルバスおよびＣＰＵの負荷が低減される。コピーはＩＳＥによって実行され、ローカルバス上にはごく少数のハイレベルコマンド４４があるだけである。ＩＳＥからの単純な応答は、動作の完了に信号を送り得る。この例において、ユーザデータは、コピー動作１２を実行するのにローカルバスを通過しない。
【００１２】
このように、一つの局面において、本発明は、一定のディスク関連の機能をホストＣＰＵからオフロード（ｏｆｆｌｏａｄ）し得る専用の独立したプロセッサまたは「ストレージエンジン」を使用してインプリメントされ得、それによって、ドライブが通常に接続されるＣＰＵおよびホストバスへのオーバーヘッドおよび負荷を低減する。
【００１３】
本発明の別の局面において、ストレージエンジンは、アプリケーションにとって透明であるようにサポートされる。本発明のさらなる局面において、ＰＣの全体的性能を向上させるために、ストレージエンジンは、アプリケーションプログラミングインタフェースを介して拡張機能を実行し得る。ホストアプリケーション、ライブラリ機能、デバイスドライバなどは、好ましくは適切なＡＰＩを介して、ＩＳＥを利用し得る。
【００１４】
たとえば、単一のコマンド「ＤＳ＿ＤｉｓｋｄａｔａＢｌｏｃｋＣｏｐｙ」は、ＣＰＵがＩＳＥにデータのブロックをソースからドライブ１６（または別のドライブ）上の宛先の場所にコピーするように命令するために使用され得る。（例示的なＡＰＩ機能および可能な構文については以下を参照）。
【００１５】
本発明に一致したＩＳＥは、一般的に、ホストＣＰＵバスまたは「ローカルバス」への接続のためのホストインタフェースと、一つ以上のディスクドライブへの接続のためのドライブインタフェースと、ＩＳＥに対してローカルなプロセッサとを備える。図３を参照されたい。換言すると、ＩＳＥプロセッサは、ホストＣＰＵまたはホストプロセッサとまったく異なる。ＩＳＥは、一部の実施形態においてローカルキャッシュメモリをも含み得る。さらにＩＳＥは、例としてＦＬＡＳＨメモリなどの、ソフトウェアを格納する他のメモリを含み得る。
【００１６】
一実施形態において、ホストインタフェースは、ストレージデバイスのための周知のインタフェースであるＡＴＡ、ｆａｓｔＡＴＡ、ＡＴＡＰＩなどの標準的インタフェースをインプリメントする。一つの代替の実施形態によると、ホストインタフェースはシリアルリンクインタフェース（たとえばＳＡＴＡインタフェース）をインプリメントする。
【００１７】
一般的に、以下にさらに詳細に説明されるように、ＩＳＥは、直接ストレージアタッチされたアプリケーションについて、一定のタスクをホストからオフロードする。このことは、ホストＣＰＵへの負荷を軽減し、ホストローカルバス（たとえばＰＣＩバス）上のトラフィックを低減することによって、システム性能を向上させる。
【００１８】
一つの現在好ましい実施形態において、ホストアプリケーションまたはホストオペレーティングシステムは、ＩＳＥに対して直接的な呼び出しを行い得る。種々のカスタムアプリケーションおよびプロセスが、やはりホストへの負荷がほとんどまたはまったくなしに、展開され得る。例は、ウイルススキャニング、バックアップ同期化サポート、マイグレーション、索引付け、デフラグメンテーションなどを含む。ＣＰＵとアタッチされたディスクドライブストレージとの間のＣＰＵローカルバスに重いトラフィックを課す実質的にいかなる動作も、全体的または部分的にＩＳＥにオフロードされ得ることによって、全体的なシステム性能を向上させる。
【００１９】
ドライブ側においては、いつでも使えるディスクコントローラの能力に依存して、一つ以上のディスクドライブのほとんどいかなる構成も展開され得る。
【００２０】
ＲＡＩＤ機能は、同じくＩＳＥ機能をインプリメントするコントローラデバイス（集積回路、ＡＳＩＣ、ＳＯＣ、ＰＣＢなど）において有利にインプリメントされ得る。
【００２１】
本発明の利点は以下を含む：
−大きなギガバイトのビデオファイルのコピーまたはバックアップは、もはやホストバスまたはＣＰＵを支配しない。
−低減されたホストＣＰＵ介入を伴うストリーミングデータサポート
−アンチウイルスプログラムは、アプリケーションに割り込むことなしにバックグラウンドで実行され得る。
−データがインタフェースからドライブへ通過するときのデータのアクティブスキャニング（アンチウイルス）。
−バックグラウンドのデフラグメンテーションがより頻繁に生じ得る。
【００２２】
図３は、ＩＳＥ７６の一実施形態を図示する簡略化されたハードウェアのブロック図である。現在好ましい実施形態において、ＩＳＥは、たとえば６６ＭＨｚまたは１００ＭＨｚのＩＰコアプロセッサを備え得るＩＳＥプロセッサコア８０を含む。エンジンは、パーソナルコンピュータおよび他のマイクロプロセッサベースのシステムにおいて一般的に使用されるＰＣＩバスなどのホストローカルバス８４に対してインタフェースするホストインタフェース７８を有する。ホストＤＭＡブロック８２は、ローカルバス（または本明細書中で同義的に使用される「ＣＰＵバス」）を用いてＤＭＡ動作をインプリメントする。ローカルキャッシュメモリ８６は、データバッファリングのためのストレージエンジンにアクセス可能であり得るか、またはその中に備えられ得ることによって、全体的なシステム性能を最適化する。ＳＤＲＡＭなどは、ホストインタフェースとドライブインタフェースとの間のデータ経路におけるデータバッファリングのために使用され得る。現在のテクノロジーにとって、およそ５１２ＭＢ程度のキャッシュは十分であるが、ストレージおよび関連インタフェースが進化するにつれて、これは変化することが予想され得る。さらに、ローカルソフトウェアストア（ｓｔｏｒｅ）（たとえばＦＬＡＳＨメモリ８８を使用して）は、好ましくは、ＩＳＥプロセッサ８０によって実行可能なソフトウェアを格納およびアップデートするようにインプリメントされる。種々の形態のＲＯＭも使用され得る。
【００２３】
タイトルが「ＲＡＩＤ  Ｃｏｎｔｒｏｌｌｅｒ  Ｓｙｓｔｅｍ  ａｎｄ  Ｍｅｔｈｏｄ  ｗｉｔｈ  ＡＴＡ  Ｅｍｕｌａｔｉｏｎ  Ｈｏｓｔ  Ｉｎｔｅｒｆａｃｅ」で、この参照によって本明細書中で援用されている、同一人に譲渡される米国特許第６，７７２，１０８Ｂ１号に記述されているように、望まれる場合には、ホストインタフェース７８はＡＴＡエミュレーションをインプリメントし得る。
【００２４】
一実施形態において、データ経路帯域幅は、８００ＭＢ／ｓキャッシュ、５３３ＭＢ／ｓホスト、および４００ＭＢ／ｓドライブであり得る。「ＲＡＩＤ  ＸＯＲ」と名付けられたブロック９０は、好ましくはデータ経路において「オンザフライ（ｏｎ  ｔｈｅ  ｆｌｙ）」でＲＡＩＤ動作をインプリメントするための手段を指す。ディスクドライブストレージシステムのためのオンザフライＸＯＲ冗長動作は、その参照によって本明細書中に援用されている米国特許第６，０１８，７７８号に記載されている。
【００２５】
ディスクドライブインタフェース９２は、種々の形態を取り得る。単純な例において、それは最大４つのＩＤＥディスクドライブへの接続のための標準的なＡＴＡインタフェースを備える。それは、一つ以上のＵＤＭＡインタフェース、または一つ以上のＳＡＴＡインタフェース、または他のテクノロジーを備え得る。本発明のＩＳＥコンセプトは、ＤＡＳシステムにおいて有用な任意の所望のディスクドライブ／ドライブインタフェーステクノロジーに適用され得る。
【００２６】
ドライブスイッチ９４と名付けられたブロックは、基本的に、出願人のＰＣＴ国際公開第２００４／０９５２５５  Ａ２号パンフレット、およびそれに対応する米国特許出願公開第２００４−０２６４３０９  Ａ１号（両方とも参照によって本明細書中で援用されている）に記載されているような、データ経路スイッチングおよびマッピング機能を備える。現在好ましい商業的な実施形態において、ＲＡＩＤ  ＸＯＲエンジンは、このドライブスイッチ９４に含まれるが、図３においては分離したブロックとして示されている。
【００２７】
図４は、ストレージエンジンの別の実施形態の簡略化されたブロック図である。図３または４の実施形態に類似した実施形態は、ディスクコントローラユニットの一部として（たとえばマザーボードまたはドーターボード上で）好都合にインプリメントされ得る。この場合には、１００ＭＨｚ専用ストレージプロセッサが提供されるが、これらは、サポートされるべき所望の機能および性能要件に依存して、実質的により高いかまたはより低い周波数であり得る。キャッシュは、アプリケーション要件に依存して、１Ｇバイト以上までを含み得る。
【００２８】
図４の例において、データ経路帯域幅は、２ＧＢ／ｓキャッシュ、２５０ＭＢ／ｓ（１ｘ）または１ＧＢ／ｓ（４ｘ）ＰＣＩエクスプレスホストインタフェース、および１．２ＧＢ／ｓドライブであり得る。別の実施形態は、ウイルス署名スキャニングなどのアプリケーションのために、たとえば５１２  ６４ビットワードまでのデータのアクティブスキャニングおよびマッチングをインプリメントする。ＲＡＩＤレベル０、１、ＸＬ、５が含まれ得る。データストリームおよびデータストリームキューの管理もまた、ホストバスとの間でデータを転送する前に可能である。
【００２９】
（動作）
動作においては、２つの一般的な種類の動作がある。第１のモードによると、ファイルコピーおよびファイル移動などの標準的なファイル動作は、ファイルシステムフィルタによってインタセプトされ、ＩＳＥに直接的に送信されることによって、ドライブ間でデータブロックを移動させる。第２のモードにおいて、ＡＰＩは、アンチウイルスソフトウェア、バックアップソフトウェア、ディスクイメージング、ディスクデフラグメンテーションユーティリティなどのようなサードパーティアプリケーションのために定義される。これらの各々が次に説明される。
【００３０】
ここで図５を参照すると、この簡略化されたコマンドおよびデータフロー図は、ＤｉｒｅｃｔＳｔｏｒ  ＡＰＩコマンドを使用し得るかまたは使用しないことがあり得るアプリケーションプログラム５０を示す。ファイルシステムフィルタモジュール５４は、ＯＳファイルシステム５６に対するコマンドを監視する。それは、所与のコマンドが、ストレージエンジン６６に関連するコントローラに現在接続されているディスクドライブに向けられているかどうかをチェックする。コマンドがそのようなドライブ（たとえば図５におけるドライブＢ（７２））に向けられており、かつコマンドがフィルタ５４によってそれが処理し得るコマンドの所定のセットの一つとして認識される場合には、フィルタ５４はコマンドをインタセプトし、その結果、コマンドは、カーネル内にインプリメントされた標準的なＯＳファイルシステム５６および標準的なディスクドライバコード５８に到達しない。代わりに、フィルタ５４は、ＤｉｒｅｃｔＳｔｏｒ  ＡＰＩを使用して、一つ以上のコマンドを、そのＡＰＩをインプリメントするために備えられた特殊なドライバ６０に直接的に送信する。ドライバ６０は、ＤｉｒｅｃｔＳｔｏｒ  ＡＰＩコマンドを認識し、かつそれらを実行のためにストレージエンジン６６に直接的に転送するように構成される。
【００３１】
別の実施形態において、サードパーティアプリケーション５０そのものが、そのコードにおいてＤＳ  ＡＰＩ５２を利用する。したがって、アプリケーションはコマンドをドライバ６０に直接的に送信し、ドライバ６０は次にそれらをストレージエンジン６６に転送する。ストレージエンジンは、ＤＳ  ＡＰＩに応答してコードを実行することによって、移動およびコピーなどのディスクドライブ動作をローカルに実行し、これはＰＣＩバス６２にいかなるデータも置かないことを意味する。エンジンに対する各呼び出しは、以下にさらに説明されるように、識別のためのタグを割当てられる。
【００３２】
エンジン６６は、動作が完了するまで、ＰＣＩローカルバスを通過することなく、かつホストＣＰＵサイクルを使用することなく、アタッチされたドライブＡ（７０）および／またはＢ（７２）との間のデータ転送をバッファリングするための、キャッシュメモリ６８をオプションとして含み得る。上述のように、ＤＲＡＭまたはＳＤＲＡＭなどのキャッシュをインプリメントするために、任意の適切なランダムアクセスメモリが使用され得る。一実施形態において、ディスクコントローラＰＣＢは、ホストインタフェースおよびドライブインタフェースとともに、オンボードのストレージエンジンおよびキャッシュを含む。
【００３３】
これらのＡＰＩは、アンチウイルス、ゲーム、ストリーミングデジタルメディア集約的アプリケーション、非公式で安全で隠されたストレージスペースを必要とし得るアプリケーション、バックアップおよびデフラグメンテーションソフトウェアなどの、ＩＳＶについて定義される。これらのＡＰＩを呼び出すことによって、アプリケーションはコマンドをＮｅｔＣｅｌｌ  ＩＳＥに直接的に送信し得る。
【００３４】
ＡＰＩは、制限なしに以下を含む種々の形態のうちのいずれかにおいてインプリメント／解除され得る：
−ダイナミックリンクライブラリ（ＤＬＬ）。
−Ｗｉｎｄｏｗｓ（登録商標）サービス。
−ＣＯＭオブジェクト。
【００３５】
以下は、本発明の一実施形態に従った、ＩＳＥ使用可能にされたホストアプリケーション／ライブラリ／デバイスドライバとＩＳＥとの間の、ＩＳＥ  ＡＴＡコマンドインタフェースの説明的な例である。この実施形態は、インテリジェントストレージエンジンのための簡潔な言い方として登録商標「ＤｉｒｅｃｔＳｔｏｒ」と呼ばれる。
【００３６】
（ＤｉｒｅｃｔＳｔｏｒの例示的なコマンド特徴のセット）
（ブロックコピー／移動コマンド）
１．説明
これらのコマンド／サブコマンドは、２つのアレイの間でデータのブロックをコピーまたは移動するか、または同一のアレイ内でデータを移動するように定義される。第２のアレイは、第１のアレイと同じカードにアタッチされた内部アレイ、またはｅＳＡＴＡポートにアタッチされた外部アレイのいずれかであり得る。
【００３７】
２．コマンドコード：８３ｈ
３．サブコマンド
前述のフィーチャレジスタ（Ｆｅａｔｕｒｅ  Ｒｅｇｉｓｔｅｒ）のコンテンツは、サブコマンドを指定する。
−ＭＯＶＥ＿ＳＥＴ＿ＳＲＣ＿ＬＢＡ
−ＭＯＶＥ＿ＳＥＴ＿ＬＡＳＴ＿ＬＢＡ
−ＭＯＶＥ＿ＳＥＴ＿ＤＥＳＴ＿ＬＢＡ
−ＭＯＶＥ＿ＰＲＯＣＥＥＤ
−ＭＯＶＥ＿ＳＵＳＰＥＮＤ
−ＭＯＶＥ＿ＡＢＯＲＴ
−ＭＯＶＥ＿ＳＴＡＴＵＳ
（ＭＯＶＥ＿ＳＥＴ＿ＳＲＣ＿ＬＢＡ）
ソースアレイの開始ＬＢＡを設定するサブコマンド。
インプット
【００３８】
【表１】
2008527496.tif 000003
アウトプット
【００３９】
【表２−１】
2008527496.tif 000004
【００４０】
【表２−２】
2008527496.tif 000005
（ＭＯＶＥ＿ＳＥＴ＿ＬＡＳＴ＿ＬＢＡ）
ソースアレイの終了ＬＢＡを設定するサブコマンド。
インプット
【００４１】
【表３】
2008527496.tif 000006
アウトプット
【００４２】
【表４−１】
2008527496.tif 000007
【００４３】
【表４−２】
2008527496.tif 000008
（ＭＯＶＥ＿ＳＥＴ＿ＤＥＳＴ＿ＬＢＡ）
宛先アレイの開始ＬＢＡを設定するサブコマンド。
インプット
【００４４】
【表５−１】
2008527496.tif 000009
【００４５】
【表５−２】
2008527496.tif 000010
アウトプット
【００４６】
【表６】
2008527496.tif 000011
（ＭＯＶＥ＿ＰＲＯＣＥＥＤ）
発行されたブロックコピー／移動コマンドの実行を進めるサブコマンド。
インプット
【００４７】
【表７−１】
2008527496.tif 000012
【００４８】
【表７−２】
2008527496.tif 000013
アウトプット
【００４９】
【表８】
2008527496.tif 000014
（ＭＯＶＥ＿ＳＵＳＰＥＮＤ）
発行されたブロックコピー／移動コマンドの実行を中断するサブコマンド。
インプット
【００５０】
【表９−１】
2008527496.tif 000015
【００５１】
【表９−２】
2008527496.tif 000016
アウトプット
【００５２】
【表１０】
2008527496.tif 000017
（ＭＯＶＥ＿ＡＢＯＲＴ）
発行されているブロックコピー／移動コマンドを打ち切るサブコマンド。
インプット
【００５３】
【表１１−１】
2008527496.tif 000018
【００５４】
【表１１−２】
2008527496.tif 000019
アウトプット
【００５５】
【表１２】
2008527496.tif 000020
（ＭＯＶＥ＿ＳＴＡＴＵＳ）
発行されているブロックコピー／移動コマンドの進行状態を得るサブコマンド。
インプット
【００５６】
【表１３−１】
2008527496.tif 000021
【００５７】
【表１３−２】
2008527496.tif 000022
アウトプット
【００５８】
【表１４】
2008527496.tif 000023
以下は、本発明に一致するハイレベルＡＰＩの一部の例である。これらは単に例示的なものであり、網羅的なものではない。本発明の一部の実施形態は、ＡＰＩの使用を要求せず；一部のインプリメンテーションは、アプリケーションプログラムにとって透明である。
【００５９】
（早いブロック移動ＡＰＩ）
（ＤＳ＿ＤｉｓｋｄａｔａＢｌｏｃｋＣｏｐｙ）
この機能は、データのブロックを、一つの場所から、同一のディスクボリューム上の別の場所へ、またはＩＳＥにアタッチされた別のディスクボリュームに、コピーする。
【００６０】
【化１】
2008527496.tif 000024
パラメータ
Ｄｓｒ
［ｉｎ］ＤｉｒｅｃｔＳｔｏｒはパラメータをリクエストする。各リクエストはタグ値に関連づけられる。発呼者（ｃａｌｌｅｒ）は、このタグ値を有するコールバック機能を通して通知される。ＡＰＩの発呼者は、同じタグを用いてＡｂｏｒｔ  ＡＰＩを呼び出すことによって動作を打ち切り得る。
ＤｅｓｔＢｌｏｃｋＬｏｃａｔｉｏｎ
［ｉｎ］宛先ボリュームブロックの場所情報を含む。
ＳｒｃＢｌｏｃｋＬｏｃａｔｉｏｎ
［ｉｎ］ソースボリュームブロックの場所情報を含む。
ＰｒｏｇｒｅｓｓＣａｌｌｂａｃｋ
［ｉｎ］特定の間隔で呼び出されることによって、発行されたコマンドの進捗を発呼者に通知するコールバック機能に対する、ポインタ。
戻り値
成功した場合にゼロを返し、エラーがある場合に非ゼロを返す。エラーコードの説明についてはセクション５．５を参照されたい。
【００６１】
（ＤＳ＿ＤｉｓｋｄａｔａＢｌｏｃｋＭｏｖｅ）
この機能は、データのブロックを、一つの場所から、同一のディスクボリューム上の別の場所へ、またはＩＳＥにアタッチされた別のディスクボリュームに、移動する。
【００６２】
【化２】
2008527496.tif 000025
パラメータ
Ｄｓｒ
［ｉｎ］ＤｉｒｅｃｔＳｔｏｒはパラメータをリクエストする。各リクエストはタグ値に関連づけられる。発呼者は、このタグ値を有するコールバック機能を通して通知される。ＡＰＩの発呼者は、同じタグを用いてＡｂｏｒｔ  ＡＰＩを呼び出すことによって動作を打ち切り得る。
ＤｅｓｔＢｌｏｃｋＬｏｃａｔｉｏｎ
［ｉｎ］宛先ボリュームブロックの場所情報を含む。
ＳｒｃＢｌｏｃｋＬｏｃａｔｉｏｎ
［ｉｎ］ソースボリュームブロックの場所情報を含む。
ＰｒｏｇｒｅｓｓＣａｌｌｂａｃｋ
［ｉｎ］特定の間隔で呼び出されることによって、発行されたコマンドの進捗を発呼者に通知するコールバック機能に対する、ポインタ。
戻り値
成功した場合にゼロを返し、エラーがある場合に非ゼロを返す。エラーコードの説明についてはセクション５．５を参照されたい。
【００６３】
（ＤＳ＿ＤｉｓｋｄａｔａＢｌｏｃｋＥｒａｓｅ）
この機能は、ディスクボリュームからデータのブロックを消去する。
【００６４】
【化３】
2008527496.tif 000026
パラメータ
Ｄｓｒ
［ｉｎ］ＤｉｒｅｃｔＳｔｏｒはパラメータをリクエストする。各リクエストはタグ値に関連づけられる。発呼者は、このタグ値を有するコールバック機能を通して通知される。ＡＰＩの発呼者は、同じタグを用いてＡｂｏｒｔ  ＡＰＩを呼び出すことによって動作を打ち切り得る。
ＢｌｏｃｋＬｏｃａｔｉｏｎ
［ｉｎ］ボリュームブロックの場所情報を含む。
ＰｒｏｇｒｅｓｓＣａｌｌｂａｃｋ
［ｉｎ］特定の間隔で呼び出されることによって、発行されたコマンドの進捗を発呼者に通知するコールバック機能に対する、ポインタ。
戻り値
成功した場合にゼロを返し、エラーがある場合に非ゼロを返す。エラーコードの説明についてはセクション５．５を参照されたい。
【００６５】
（ＤＳ  ＤｉｓｋｄａｔａＢｌｏｃｋＦｉｌｌ）
この機能は、ディスクボリュームのブロックを所与のデータパターンで満たす。
【００６６】
【化４】
2008527496.tif 000027
パラメータ
Ｄｓｒ
［ｉｎ］ＤｉｒｅｃｔＳｔｏｒはパラメータをリクエストする。各リクエストはタグ値に関連づけられる。発呼者は、このタグ値を有するコールバック機能を通して通知される。ＡＰＩの発呼者は、同じタグを用いてＡｂｏｒｔ  ＡＰＩを呼び出すことによって動作を打ち切り得る。
ＢｌｏｃｋＬｏｃａｔｉｏｎ
［ｉｎ］ボリュームブロックの場所情報を含む。
Ｐａｔｔｅｒｎ
［ｉｎ］データパターンを含む。
ＰｒｏｇｒｅｓｓＣａｌｌｂａｃｋ
［ｉｎ］特定の間隔で呼び出されることによって、発行されたコマンドの進捗を発呼者に通知するコールバック機能に対する、ポインタ。
戻り値
成功した場合にゼロを返し、エラーがある場合に非ゼロを返す。エラーコードの説明についてはセクション５．５を参照されたい。
【００６７】
（ＤＳ＿ＣｒｅａｔｅＤｉｓｋｌｍａｇｅ）
この機能は、ボリュームの完全なディスクイメージをターゲットボリューム上に作成する。
【００６８】
【化５】
2008527496.tif 000028
パラメータ
Ｖｏｌｕｍｅ
［ｉｎ］ＯＳによって割当てられる宛先ボリュームの文字。
Ｖｏｌｕｍｅ
［ｉｎ］ＯＳによって割当てられるソースボリュームの文字。
ＣｏｍｍａｎｄＴａｇ
［ｉｎ］各ＤｉｒｅｃｔＳｔｏｒ  ＡＰＩは、コマンドタグによってタグ付けされる。このタグは、コールバック機能を提供される発呼者に渡される。このことは、発呼者がＡＰＩのすべてまたはグループについて単一のコールバック機能を有することを援助する。また、ＡＰＩの発呼者は、同じタグを打ち切りコマンドＡＰＩに渡すことによって動作を打ち切り得る。
ＰｒｏｇｒｅｓｓＣａｌｌｂａｃｋ
［ｉｎ］特定の間隔で呼び出されることによって、発行されたコマンドの進捗を発呼者に通知するコールバック機能に対する、ポインタ。
戻り値
成功した場合にゼロを返し、エラーがある場合に非ゼロを返す。エラーコードの説明についてはセクション５．５を参照されたい。
【００６９】
（ＤＳ＿ＤｉｓｋｄａｔａＢｌｏｃｋＲｅａｄ）
アプリケーションは、この機能を呼び出すことによって、ディスクボリュームからデータのブロックを読み出す。
【００７０】
【化６】
2008527496.tif 000029
パラメータ
Ｄｓｒ
［ｉｎ］ＤｉｒｅｃｔＳｔｏｒはパラメータをリクエストする。各リクエストはタグ値に関連づけられる。発呼者は、このタグ値を有するコールバック機能を通して通知される。ＡＰＩの発呼者は、同じタグを用いてＡｂｏｒｔ  ＡＰＩを呼び出すことによって動作を打ち切り得る。
ＢｌｏｃｋＬｏｃａｔｉｏｎ
［ｉｎ］ボリュームブロックの場所情報を含む。
ＤａｔａＢｕｆｆｅｒ
［ｉｎ］インプットデータバッファに対するポインタ。
戻り値
成功した場合にゼロを返し、エラーがある場合に非ゼロを返す。エラーコードの説明についてはセクション５．５を参照されたい。
【００７１】
（ＤＳ＿ＤｉｓｋｄａｔａＢｌｏｃｋＷｒｉｔｅ）
アプリケーションは、この機能を呼び出すことによって、データのブロックをディスクボリュームに書き込む。
【００７２】
【化７】
2008527496.tif 000030
パラメータ
Ｄｓｒ
［ｉｎ］ＤｉｒｅｃｔＳｔｏｒはパラメータをリクエストする。各リクエストはタグ値に関連づけられる。発呼者は、このタグ値を有するコールバック機能を通して通知される。ＡＰＩの発呼者は、同じタグを用いてＡｂｏｒｔ  ＡＰＩを呼び出すことによって動作を打ち切り得る。
ＢｌｏｃｋＬｏｃａｔｉｏｎ
［ｉｎ］ボリュームブロックの場所情報を含む。
ＤａｔａＢｕｆｆｅｒ
［ｉｎ］アウトプットデータバッファに対するポインタ。
戻り値
成功した場合にゼロを返し、エラーがある場合に非ゼロを返す。エラーコードの説明についてはセクション５．５を参照されたい。
【００７３】
（ＤＳ＿Ａｂｏｒｔ）
この機能を使用することによって、ＩＳＥに対して発行されたコマンドを打ち切る。
【００７４】
【化８】
2008527496.tif 000031
パラメータ
Ｄｓｒ
［ｉｎ］ＤｉｒｅｃｔＳｔｏｒはパラメータをリクエストする。各リクエストはタグ値に関連づけられる。発呼者は、このタグ値を有するコールバック機能を通して通知される。ＡＰＩの発呼者は、同じタグを用いてＡｂｏｒｔ  ＡＰＩを呼び出すことによって動作を打ち切り得る。
戻り値
成功した場合にゼロを返し、エラーがある場合に非ゼロを返す。
【００７５】
（例示的なアンチウイルスＡＰＩ）
（ＤＳ＿ＳｃａｎＶｏｌｕｍｅｆｏｒＳｉｇｎａｔｕｒｅ）
この機能は、指定された署名についてボリュームをスキャンする。アプリケーションは、実際のウイルス署名、または安全なディスク領域上に格納された署名を指し示すタグを渡し得る。渡されたコールバック機能は、指定された間隔において呼び出されることによって、進捗を通知する。
【００７６】
【化９】
2008527496.tif 000032
パラメータ
Ｖｏｌｕｍｅ
［ｉｎ］ＯＳによって割当てられるターゲットボリュームの文字。
ＣｏｍｍａｎｄＴａｇ
［ｉｎ］各ＤｉｒｅｃｔＳｔｏｒ  ＡＰＩは、コマンドタグによってタグ付けされる。このタグは、コールバック機能を提供される発呼者に渡される。このことは、発呼者がＡＰＩのすべてまたはグループについて単一のコールバック機能を有することを援助する。また、ＡＰＩの発呼者は、同じタグを打ち切りコマンドＡＰＩに渡すことによって動作を打ち切り得る。
ｐＳｉｇｎａｔｕｒｅ
［ｉｎ］ウイルス署名。これは実際のウイルス署名であり得るか、または安全な領域上に格納された署名を指し示すタグであり得る。さらなる情報については、データ構造のセクションを参照されたい。
戻り値
成功した場合にゼロを返し、エラーがある場合に非ゼロを返す。エラーコードの説明についてはセクション５．５を参照されたい。
【００７７】
他の例示的な機能は、以下を含み得る。
ＤＳ＿ＡｂｏｒｔＳｃａｎ
ＤＳ＿ＳｃａｎＶｏｌｕｍｅＢｌｏｃｋ
ＤＳ＿ＳｔｏｒｅＳｉｇｎａｔｕｒｅ
ＤＳ＿ＷｒｉｔｅＴｏＳｅｃｕｒｅＤｉｓｋＺｏｎｅ
ＤＳ＿ＲｅａｄＦｒｏｍＳｅｃｕｒｅＤｉｓｋＺｏｎｅ
ＤＳ＿ＳａｖｅＰａｓｓｗｏｒｄ
ＤＳ＿ＶｅｒｉｆｙＰａｓｓｗｏｒｄ
（データ構造）
（ＤＳ＿ＲＥＱＵＥＳＴ）
一実施形態において、ＩＳＥに対する各リクエストは、タグ値に関連づけられる。このタグは、発呼者のコールバック機能において、発呼者に渡し戻される。これは、発呼者がＡＰＩのすべてまたはグループについて単一のコールバック機能を有することを援助する。ＡＰＩの発呼者は、同じタグを用いてＡｂｏｒｔ  ＡＰＩを呼び出すことによって、動作を打ち切り得る。
【００７８】
【化１０】
2008527496.tif 000033
上述の説明に従って、本発明の主な特徴および局面の一部は、少なくとも一つのハードディスクドライブへの直接接続のために構成されたストレージエンジン装置を含むものとして説明され得、直接アタッチされたストレージデバイスとして高速ローカルバスまたはホストシリアルリンクを介してストレージ処理デバイスにアタッチされたホストＣＰＵによって通常に実行される機能を実行するように構成され得る。一般的に、ストレージエンジンは、コマンドを受信し、受信されたコマンドに応答して、一つまたは複数のハードディスクドライブ上に格納されたデータに、もしくはホストまたは一つまたは複数のディスクドライブに向けられたローカルＲＡＭストア内にキャッシュされたデータに、データ移動または処理命令を実行し、上記アタッチされたホストプロセッサに結果を戻す。上記に示されたように、そのようなコマンドは、一つのドライブ内または複数のドライブにわたって、データの移動またはコピーをするものであり得、またはウイルススキャンなどの動作を実行し得る。重要なことに、これらの動作は、ストレージエンジンによってそれがローカルバスまたはホストシリアルリンク上でユーザデータを移動させるようにして実行される。
【００７９】
ストレージエンジンを使用するコマンドは、ホストプロセッサからオペレーティングシステムへのコマンドをインタセプトすることによって、または所定のアプリケーションプログラミングインタフェース（ＡＰＩ）を介して、生じ得る。このことは、ホストＣＰＵおよび／またはローカルバスに負荷をかけることなしに、特殊なデータ動作を、アンチウイルスプログラムなどのアプリケーションプログラムにとって利用可能にする。そのような命令は、論理アドレスブロック（ＬＢＡ）ソースおよび宛先情報に基づいて、ターゲットデータを特定し得る。
【００８０】
本明細書中に開示される種類のストレージエンジンは、種々の態様でインプリメントおよび使用され、たとえば実質的に単一の集積回路内に；実質的に単一の回路基板内に；ＰＣ内に組み込まれ；デジタルビデオレコーダシステムにインプリメントされ；デジタルビデオシステムにインプリメントされ；または当業者が前述を鑑みて理解するような多数の他の方法においてインプリメントされることができる。
【００８１】
本発明の基礎をなす原理から逸脱することなく、上述の実施形態の詳細に多くの変更がなされ得ることが当業者にとって自明である。したがって、本発明の範囲は、添付の特許請求の範囲のみによって決定されるべきである。
【図面の簡単な説明】
【００８２】
【図１】図１は、ホストシステムおよびアタッチされたＤＡＳディスクドライブの簡略化された概念図である（従来技術）。
【図２】図２は、本発明の実施形態に従った「インテリジェント格納エンジン」（以降「ＩＳＥ」）を使用する、ホストシステムおよびアタッチされたＤＡＳディスクドライブの簡略化された概念図である。
【図３】図３は、本発明に一致したＩＳＥの一実施形態を図示する簡略化されたハードウェアのブロック図である。
【図４】図４は、本発明に一致したＩＳＥの代替の実施形態を図示する簡略化されたハードウェアのブロック図である。
【図５】図５は、本発明に一致したＩＳＥの一実施形態を図示する簡略化されたソフトウェアのブロック図である。
【図１】
2008527496.tif 000034
【図２】
2008527496.tif 000035
【図３】
2008527496.tif 000036
【図４】
2008527496.tif 000037
【図５】
2008527496.tif 000038
【国際調査報告】
2008527496.tif 000039
2008527496.tif 000040