(57)【要約】【課題】リモートオブジェクトをローカルにキャッシュするための方法およびシステムを提供する。【解決手段】オブジェクトにアクセスするための要求が受信される。このオブジェクトがキャッシュされているかどうかについての判定が行われる。このオブジェクトがキャッシュされており、この要求が新しいオブジェクトを作成するか、既存のオブジェクトを修正するか、またはディレクトリをオープンするものでない場合、この要求は、ローカルファイルシステムにダイレクトされる。そうでない場合には、この要求は、リモートファイルシステムにダイレクトされる。どのオブジェクトが要求されているかについての情報を使用して、キャッシングポリシーによって指定されるように、リモートに格納されたオブジェクトをローカルサーバにコピーすることができる。【選択図】図６
2006155606.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実行可能命令を有するコンピュータ読取り可能媒体であって、
リモートサーバ上に格納されたオブジェクトにアクセスする要求を受け取ることと、
前記リモートサーバに対する要求をモニタする機会を有するフィルタによって前記要求を検査して、前記要求を前記リモートサーバに転送するか、または前記要求をローカルファイルシステムにリダイレクトするかを判定することと、
前記オブジェクトがキャッシュされている場合に、前記要求を前記ローカルファイルシステムにリダイレクトすることと
を備えたことを特徴とするコンピュータ読取り可能媒体。
【請求項２】
前記オブジェクトにアクセスする前記要求が前記オブジェクトを作成する要求を備える場合に、前記要求を前記リモートサーバに転送することをさらに備えたことを特徴とする請求項１に記載のコンピュータ読取り可能媒体。
【請求項３】
前記オブジェクトにアクセスする前記要求が前記オブジェクトを修正する要求を備える場合に、前記要求を前記リモートサーバに転送することをさらに備えたことを特徴とする請求項１に記載のコンピュータ読取り可能媒体。
【請求項４】
前記オブジェクトがディレクトリを備える場合に、前記要求を前記リモートサーバに転送することをさらに備えたことを特徴とする請求項１に記載のコンピュータ読取り可能媒体。
【請求項５】
前記オブジェクトが要求されており、前記ローカルファイルシステム上に含まれていなかったことをキャッシングサービスに通知することをさらに備えたことを特徴とする請求項１に記載のコンピュータ読取り可能媒体。
【請求項６】
前記リモートサーバから前記オブジェクトを取得し、前記ローカルファイルシステム上に格納することをさらに備えたことを特徴とする請求項５に記載のコンピュータ読取り可能媒体。
【請求項７】
前記オブジェクトが要求されており、前記ローカルファイルシステム上に含まれていたことをキャッシングサービスに通知することをさらに備えたことを特徴とする請求項１に記載のコンピュータ読取り可能媒体。
【請求項８】
前記オブジェクトが要求される頻度に基づいて前記オブジェクトを前記ローカルファイルシステム中に保持することをさらに備えたことを特徴とする請求項７に記載のコンピュータ読取り可能媒体。
【請求項９】
前記フィルタは、カーネルモードで実行されることを特徴とする請求項１に記載のコンピュータ読取り可能媒体。
【請求項１０】
前記オブジェクトをオープンしクローズすることと、前記オブジェクトのオープンとクローズとの間に前記オブジェクトに影響する入出力オペレーションを、前記フィルタによる前記入出力オペレーションの検査なしでダイレクトすることとをさらに備えたことを特徴とする請求項１に記載のコンピュータ読取り可能媒体。
【請求項１１】
前記オブジェクトが変化したという通知を受け取ることと、前記ローカルファイルシステム上の前記オブジェクトのキャッシュされたコピーを削除することとをさらに備えたことを特徴とする請求項１に記載のコンピュータ読取り可能媒体。
【請求項１２】
前記フィルタは、前記通知を受け取り、前記オブジェクトの前記キャッシュされたコピーを削除することを特徴とする請求項１１に記載のコンピュータ読取り可能媒体。
【請求項１３】
コンピューティング環境において、
ローカルディレクトリおよびリモートディレクトリの名前を含むリパースポイントに関連付けられているオブジェクトにアクセスする要求を受け取ることと、
前記オブジェクトが前記ローカルディレクトリにキャッシュされているかどうかを判定することと、
前記オブジェクトが前記ローカルディレクトリにキャッシュされている場合に、前記ローカルディレクトリを介して前記オブジェクトへのアクセスを提供することと
を備えることを特徴とする方法。
【請求項１４】
前記ローカルディレクトリは、ローカルファイルシステムに格納され、前記リモートディレクトリは、リモートファイルシステムに格納されることを特徴とする請求項１３に記載の方法。
【請求項１５】
前記リパースポイントは、前記ローカルファイルシステム上に永続化されることを特徴とする請求項１４に記載の方法。
【請求項１６】
前記ローカルファイルシステムは、前記オブジェクトにアクセスする試みが前記ローカルファイルシステムによって受け取られるときに、前記リパースポイントをリターンすることを特徴とする請求項１４に記載の方法。
【請求項１７】
前記オブジェクトが前記ローカルディレクトリにキャッシュされているかどうかを判定することは、前記ローカルファイルシステムがリターンする前記リパースポイントをフィルタによって検査することを備えることを特徴とする請求項１６に記載の方法。
【請求項１８】
前記オブジェクトが前記ローカルディレクトリにキャッシュされているかどうかを判定することは、前記リパースポイントから前記ローカルディレクトリを取得し、前記ローカルディレクトリ中の前記オブジェクトをオープンしようと試みることをさらに備えることを特徴とする請求項１７に記載の方法。
【請求項１９】
前記ローカルディレクトリ中の前記オブジェクトをオープンしようと試みることが成功する場合に、前記要求を前記ローカルディレクトリにリダイレクトすることをさらに備えることを特徴とする請求項１８に記載の方法。
【請求項２０】
前記ローカルディレクトリ中の前記オブジェクトをオープンしようと試みることが失敗する場合に、前記要求を前記リモートファイルシステムにリダイレクトすることをさらに備えることを特徴とする請求項１８に記載の方法。
【請求項２１】
前記フィルタは、前記ローカルファイルシステム上のオブジェクトにアクセスするためにユーザモードプロセスからの任意の要求を検査する機会を有することを特徴とする請求項１７に記載の方法。
【請求項２２】
前記オブジェクトが前記ローカルディレクトリ中にキャッシュされていない場合に、前記リモートディレクトリから前記オブジェクトを取得し、前記ローカルディレクトリにキャッシュすることをさらに備えることを特徴とする請求項１３に記載の方法。
【請求項２３】
オブジェクトにアクセスする前記要求が前記オブジェクトを作成する要求である場合に、前記要求を前記リモートディレクトリにリダイレクトすることをさらに備えることを特徴とする請求項１３に記載の方法。
【請求項２４】
オブジェクトにアクセスする前記要求が前記オブジェクトを変更する要求である場合に、前記要求を前記リモートディレクトリにリダイレクトすることをさらに備えることを特徴とする請求項１３に記載の方法。
【請求項２５】
前記オブジェクトがディレクトリである場合に、前記要求を前記リモートディレクトリにリダイレクトすることをさらに備えることを特徴とする請求項１３に記載の方法。
【請求項２６】
前記オブジェクトは、ファイルシステムに対して前記オブジェクトを識別する名前を有し、前記リパースポイントは、前記ファイルシステムに対して前記ディレクトリを識別する名前を有するディレクトリに関連付けられており、前記オブジェクトは、前記オブジェクトの名前のプレフィックスが前記ディレクトリの名前を含む場合に、リパースポイントに関連付けられることを特徴とする請求項１３に記載の方法。
【請求項２７】
キャッシュするための装置であって、
オブジェクトを格納するように構成されたローカルファイルシステムと、
どのオブジェクトを前記ローカルファイルシステム上に格納するかを決定するように構成されたコンポーネントと、
入力および出力をモニタし、アクセスが求められているオブジェクトの名前を前記コンポーネントに報告するように構成されたフィルタと
を備えたことを特徴とする装置。
【請求項２８】
前記オブジェクトは、ディレクトリおよびファイルを備えたことを特徴とする請求項２７に記載の装置。
【請求項２９】
前記フィルタは、前記ローカルファイルシステムとの任意の通信を検査する機会を有することを特徴とする請求項２７に記載の装置。
【請求項３０】
前記フィルタは、リモートファイルシステムとの任意の通信を検査する機会を有することを特徴とする請求項２７に記載の装置。
【請求項３１】
前記フィルタは、作成オペレーションを伴う前記リモートファイルシステムとの任意の通信について通知を受けるべく登録するように構成されたことを特徴とする請求項３０に記載の装置。
【請求項３２】
前記作成オペレーションは、既存のオブジェクトをオープンするオペレーションを備えたことを特徴とする請求項３１に記載の装置。
【請求項３３】
前記作成オペレーションは、新しいオブジェクトを作成するオペレーションを備えたことを特徴とする請求項３１に記載の装置。
【請求項３４】
前記フィルタは、
リモートサーバ上に格納されているオブジェクトにアクセスする要求を受け取ることと、
前記要求を前記リモートサーバに転送するか、または前記要求を前記ローカルファイルシステムにリダイレクトするかを判定することと
を備えたアクションを行うように構成されたことを特徴とする請求項２７に記載の装置。
【請求項３５】
前記フィルタは、前記要求が新しいオブジェクトを作成するか、既存のオブジェクトを変更するか、ディレクトリをオープンする要求を供える場合に、前記要求を前記リモートサーバに転送するようにさらに構成されていることを特徴とする請求項３４に記載の装置。
【請求項３６】
前記フィルタは、前記オブジェクトが前記ローカルファイルシステムにキャッシュされている場合に、前記要求を前記ローカルファイルシステムに転送するようにさらに構成されていることを特徴とする請求項３４に記載の装置。
【請求項３７】
前記コンポーネントは、前記フィルタによって報告された前記オブジェクトにポリシーを適用して、どのオブジェクトを前記ローカルファイルシステムに格納するかを決定することを特徴とする請求項２７に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータに関し、より詳細にはファイルシステムに関する。
【背景技術】
【０００２】
データセンタにおけるコンテンツサーバのセット、例えばサーバファーム（ｓｅｒｖｅｒ  ｆａｒｍ）は、様々な場所の多数のクライアントに対してコンテンツをサービスすることができる。以前は、ある所与のサーバファームによってホストされるコンテンツの全体のセットは、比較的小規模であり、過度のコストなしにファーム中のコンテンツサーバのそれぞれに伝送し、格納することができた。しかし今では、サーバファームから利用可能なコンテンツの量は、数百ギガバイトを超えることも多い。サーバ用に大容量のハードドライブを購入し、これらにデータセンタのすべてのコンテンツを提供し、これらのコンテンツを最新のものに保ち、要求されたどのコンテンツでもサービスできるようにすることは、ストレージコストにおいても伝送コストにおいても費用がかかる。複数のデータセンタを使用してコンテンツをサービスするときには、このことが特に当てはまる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
コンテンツサーバのハードディスク上にコンテンツのサブセットをキャッシュしつつ、コンテンツのセットの全体を個別の専用ストレージに格納できるように、リモートデータをローカルに効果的にキャッシュする方法およびシステムが必要とされている。かかる方法およびシステムが、データを要求する任意のアプリケーションにとってほとんどまたは完全にトランスペアレントであるようになることが理想的である。
【課題を解決するための手段】
【０００４】
簡潔に言えば、本発明はリモートオブジェクトをローカルにキャッシュするための方法およびシステムを提供する。オブジェクトにアクセスする要求が受け取られる。このオブジェクトがキャッシュされているかどうかについての判定が行われる。このオブジェクトがキャッシュされており、この要求が新しいオブジェクトを作成するか、既存のオブジェクトを修正するか、またはディレクトリをオープンするものではない場合には、この要求は、ローカルファイルシステムにダイレクト（ｄｉｒｅｃｔ）される。そうでない場合には、この要求は、リモートファイルシステムにダイレクトされる。
【０００５】
本発明の一態様において、フィルタは、ローカルおよびリモートのファイルシステム上でアクセスされるオブジェクトのキャッシングサービス名に対する要求および報告をモニタする。このキャッシングサービスは、この情報に対してあるポリシーを適用して、どのリモートオブジェクトをローカルにキャッシュするか、またどのローカルにキャッシュされたオブジェクトをパージ（ｐｕｒｇｅ）するかを決定することができる。
【０００６】
本発明の別の態様においては、フィルタは、ローカルおよびリモートのファイルシステムに対する要求をモニタし、フィルタは、それ自体あるポリシーを適用して、どのリモートオブジェクトをローカルにキャッシュするか、またどのローカルにキャッシュされたオブジェクトをパージするかを決定することができる。
【０００７】
本発明の別の態様においては、フィルタは、オブジェクトがリモートに変化したことを示す通知を受け取り、このオブジェクトのローカルのキャッシュされたコピーを削除する。
【０００８】
他の態様については、添付の図面と共に以下の詳細な説明から明らかになるであろう。
【発明を実施するための最良の形態】
【０００９】
（例示の動作環境）
図１は、本発明を実施することができる適切なコンピューティングシステム環境１００の一例を示している。このコンピューティングシステム環境１００は、適切なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲についてのどのような限定を示唆することも意図してはいない。またコンピューティング環境１００は、例示の動作環境１００に示されたコンポーネントのどの１つまたは組合せに関連するどのような依存性または要件を有するものとも解釈すべきではない。
【００１０】
本発明は、数多くの他の汎用コンピューティングシステムまたは専用コンピューティングシステムの環境またはコンフィギュレーションで動作可能である。本発明と共に使用するのに適する可能性のある周知のコンピューティングシステム、環境、および／またはコンフィギュレーションの例には、これらに限定されないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロコントローラベースのシステム、セットトップボックス、プログラム可能な民生用電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【００１１】
本発明は、コンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストで説明することができる。一般に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明はまた、タスクが通信ネットワークを介してリンクされるリモート処理デバイスによって実行される分散コンピューティング環境中でも実施することができる。分散コンピューティング環境においては、プログラムモジュールは、メモリストレージデバイスを含むローカルまたはリモートのコンピュータ記憶媒体に配置することができる。
【００１２】
図１を参照すると、本発明を実施するための例示のシステムがコンピュータ１１０の形態の汎用コンピューティングデバイスを含んでいる。コンピュータ１１０のコンポーネントは、これらに限定されないが、処理ユニット１２０、システムメモリ１３０、およびこのシステムメモリを含む様々なシステムコンポーネントを処理ユニット１２０に結合するシステムバス１２１を含むことができる。システムバス１２１は、メモリバスまたはメモリコントローラ、ペリフェラルバス、および様々なバスアーキテクチャのいずれかを使用したローカルバスを含む、いくつかのタイプのバス構造のいずれにすることもできる。例として、限定するものではないが、このようなアーキテクチャは、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびメザニン（Ｍｅｚｚａｎｉｎｅ）バスとしても知られているＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００１３】
コンピュータ１１０は、通常、様々なコンピュータ読取り可能媒体を含む。コンピュータ読取り可能媒体は、コンピュータ１１０によってアクセスすることができる任意の利用可能な媒体とすることができ、揮発性媒体および不揮発性媒体、リムーバブルおよび非リムーバブル媒体を含む。例として、限定するものではないが、コンピュータ読取り可能媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、他のデータなどの情報の格納のために任意の方法または技術で実装された揮発性媒体および不揮発性媒体、リムーバブルおよび非リムーバブル媒体を含む。コンピュータ記憶媒体は、これらには限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）もしくは他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または所望の情報を格納するために使用することができ、コンピュータ１１０によってアクセスすることができる他の任意の媒体を含む。通信媒体は、通常、搬送波や他のトランスポートメカニズムなどの変調データ信号にコンピュータ読取り可能命令、データ構造、プログラムモジュールまたは他のデータを具現し、任意の情報配送媒体を含む。用語「変調データ信号」は、信号中に情報を符号化するようにその特性の１つまたは複数を設定または変更した信号を意味する。例として、限定するものではないが、通信媒体は、有線ネットワークや直接配線接続などのワイヤ媒体と、音響、ＲＦ、赤外線、他の無線媒体などのワイヤレス媒体を含む。上記の任意の組合せもまた、コンピュータ読取り可能媒体の範囲内に含められるべきである。
【００１４】
システムメモリ１３０は、ＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）１３１やＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）１３２などの揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を含んでいる。起動中などにコンピュータ１１０内の構成要素間で情報を転送する助けとなる基本ルーチンが入ったＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）１３３は、通常ＲＯＭ１３１に格納されている。ＲＡＭ１３２は通常、処理ユニット１２０にとって直接にアクセス可能であり、そして／または処理ユニット１２０によって現在操作されているデータおよび／またはプログラムモジュールを収容している。例として、限定するものではないが、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示している。
【００１５】
コンピュータ１１０は、他のリムーバブル／非リムーバブルな、揮発性／不揮発性のコンピュータ記憶媒体を含むこともできる。例にすぎないが、図１は、非リムーバブルな不揮発性磁気媒体との間で情報を読み取るか、または書き込むハードディスクドライブ１４１、リムーバブルな不揮発性磁気ディスク１５２との間で情報を読み取るか、または書き込む磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭや他の光媒体などリムーバブルな不揮発性光ディスク１５６との間で情報を読み取るか、または書き込む光ディスクドライブ１５５を示している。この例示の動作環境中で使用することができる他のリムーバブル／非リムーバブルな、揮発性／不揮発性のコンピュータ記憶媒体には、これらに限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが含まれる。ハードディスクドライブ１４１は、通常、インターフェース１４０などの非リムーバブルメモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、通常、インターフェース１５０などのリムーバブルなメモリインターフェースによってシステムバス１２１に接続される。
【００１６】
前述し、図１に示したこれらのドライブおよびこれらに関連するコンピュータ記憶媒体は、コンピュータ１１０のためのコンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータのストレージを提供する。図１において、例えばハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するものとして示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じであっても異なるものであってもよい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７には、少なくともこれらが異なるコピーであることを示すためにここでは異なる番号が付与されている。ユーザは、キーボード１６２や一般にマウス、トラックボールまたはタッチパッドと呼ばれているポインティングデバイス１６１などの入力デバイスを介してコンピュータ１１０にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ、ハンドヘルドＰＣまたは他の書込みタブレットのタッチセンシティブスクリーンなどを含んでもよい。これらおよび他の入力デバイスは、システムバスに結合されているユーザ入力インターフェース１６０を介して処理ユニット１２０に接続されることが多いが、パラレルポート、ゲームポート、ＵＳＢ（ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ）など他のインターフェースおよびバス構造によって接続することもできる。モニタ１９１または他のタイプのディスプレイデバイスもまた、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。このモニタに追加して、コンピュータはまた、スピーカ１９７やプリンタ１９６など他のペリフェラル出力デバイスを含むこともでき、これらは、出力ペリフェラルインターフェース１９５を介して接続することができる。
【００１７】
コンピュータ１１０は、リモートコンピュータ１８０など１つまたは複数のリモートコンピュータに対する論理接続を使用してネットワーク化された環境中で動作することもできる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードとすることができ、通常コンピュータ１１０に関連して上述した構成要素の多くまたはすべてを含むが、図１にはメモリストレージデバイス１８１だけが示してある。図１に示す論理接続は、ＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）１７１およびＷＡＮ（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）１７３を含んでいるが、他のネットワークを含んでいてもよい。このようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネットおよびインターネットにおいて、一般的なものである。
【００１８】
ＬＡＮネットワーキング環境中で使用されるときには、コンピュータ１１０は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境中で使用されるときには、コンピュータ１１０は、通常、インターネットなど、ＷＡＮ１７３上で通信を確立するためのモデム１７２または他の手段を含んでいる。モデム１７２は、内蔵または外付けとすることができ、ユーザ入力インターフェース１６０または他の適切なメカニズムを介してシステムバス１２１に接続することができる。ネットワーク化環境においては、コンピュータ１１０に関して示したプログラムモジュール、またはその一部分は、リモートメモリストレージデバイスに格納することもできる。例として、限定するものではないが、図１は、リモートアプリケーションプログラム１８５をメモリデバイス１８１上に存在するものとして示している。図に示したこれらのネットワーク接続は、例示的なものであり、コンピュータ間で通信リンクを確立する他の手段を使用することもできることが理解されよう。
【００１９】
（例示のフィルタおよびその構成）
Ｗｉｎｄｏｗｓ（登録商標）ＮＴＦＳ（Ｗｉｎｄｏｗｓ（登録商標）ＮＴファイルシステム）、ＦＡＴ、ＣＤＦＳ、ＳＭＢリダイレクタファイルシステム、またはＷｅｂＤａｖファイルシステムなどの基礎となるファイルシステムを有するマイクロソフト社のＷｉｎｄｏｗｓ（登録商標）ＸＰオペレーティングシステムなど、現代のオペレーティングシステムでは、１つまたは複数のファイルシステムフィルタドライバを、ユーザＩ／Ｏ要求を受け取るＩ／Ｏマネージャと、ファイルシステムドライバの間に挿入することができる。一般に、フィルタドライバ（本明細書中では単に「フィルタ」と呼ぶこともある）は、アンチウィルスソフトウェア、ファイルシステムクォータ（ｑｕｏｔａ）プロバイダ、ファイルレプリケータ、および暗号化／圧縮製品を介してファイルシステムＩ／Ｏ（要求およびデータ）を渡すなどのタスクを含め、ユーザが望む様々なファイル関連のコンピューティングタスクを実行することによって基礎となっているファイルシステムを拡張するプロセスまたはコンポーネントである。
【００２０】
例えば、アンチウィルス製品は、ウィルスシグネチャを探す特定のファイルタイプ（．ｅｘｅ、．ｄｏｃなど）とのＩ／Ｏを監視するフィルタを提供し、ファイルレプリケーション製品は、ファイルシステムレベルのミラーリングを行う。他のタイプのファイルシステムフィルタドライバは、（変更が行われようとしているときに、ユーザが元の状態に戻ることができるようにするためにシステムファイルをバックアップする）システム復元、ディスククォータ施行、オープンファイルのバックアップ、削除されたファイルの削除の取り消し、ファイルの暗号化などを対象としている。したがって、ファイルシステムフィルタドライバをインストールすることにより、コンピュータユーザは、実際のオペレーティングシステムまたはファイルシステムドライバコードを変更することなく、コンポーネントのアップグレード、置換、挿入、および除去を可能とするような形でユーザが望み必要とするファイルシステム機能を選択することができる。
【００２１】
図２は、本発明が、本発明の様々な態様に従って動作することができるシステムの例示のコンポーネントの構成を表すブロック図である。これらのコンポーネントは、１つまたは複数のアプリケーション２０５、ＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）２１０、Ｉ／Ｏ（ｉｎｐｕｔ／ｏｕｔｐｕｔ）マネージャ２１５、フィルタマネージャ２２０、ファイルシステム２２５、および１つまたは複数のフィルタ２３０〜２３２を含んでいる。
【００２２】
アプリケーション２０５は、ＡＰＩ２１０を介してＩ／Ｏマネージャ２１５に対して（例えば、ファンクションコール／メソッドコールを介して）ファイルシステム要求を行うことができる。Ｉ／Ｏマネージャ２１５は、各要求を遂行し、各Ｉ／Ｏ要求をフィルタマネージャ２２０に送るためにどのＩ／Ｏ要求（１つまたは複数）を発行すべきかを決定することができる。これらのファイルシステム要求に関連付けられたオペレーションが、進行し、完了し、またはアボートするときに、Ｉ／Ｏマネージャ２１５は、データをアプリケーション２０５に戻すこともできる。
【００２３】
一実施形態においては、フィルタは、フィルタマネージャ２２０中の登録メカニズムで登録をインスタンス化したときに（例えば、初期化プロシージャ中に）オブジェクトや同類のものを備える。効率のために、各フィルタは、通常、処理の対象となりうるファイルシステム要求についてのみ登録することになる。このために、登録の一部として、各フィルタは、フィルタマネージャ２２０にその対象となるＩ／Ｏ要求のタイプ（例えば、作成、読取り、書込み、クローズ、名前の変更など）について通知する。例えば、暗号化フィルタは、読取りおよび書込みＩ／Ｏについては登録し、データを暗号化または復号する必要のない他のものについては登録しないこともできる。同様に、クォータフィルタは、オブジェクト作成およびオブジェクト書込みのみを対象とすることもできる。
【００２４】
対象とするＩ／Ｏ要求のタイプを指定することに加えて、フィルタはさらに、このフィルタがＩ／Ｏのタイプのそれぞれについてプレ−コールバック（ｐｒｅ−ｃａｌｌｂａｃｋ）およびポスト−コールバック（ｐｏｓｔ−ｃａｌｌｂａｃｋ）についての通知を受けるべきかどうかを指定することができる。プレ−コールバックは、Ｉ／Ｏマネージャ２１５からファイルシステム２２５に向かって伝搬するＩ／Ｏ要求に関連付けられたデータとして呼び出されるが、ポスト−コールバックは、ファイルシステム２２５からＩ／Ｏマネージャ２１５に向かって伝搬するＩ／Ｏ要求に関連付けられたデータとしてＩ／Ｏ要求の完了時に呼び出される。
【００２５】
各Ｉ／Ｏ要求から、フィルタマネージャ２２０は、これらのフィルタ２３０〜２３２による使用のために適した一様なフォーマットでデータ構造を作成することができる。以降では、このデータ構造は、コールバックデータと呼ぶこともある。フィルタマネージャ２２０は次いで、このコールバックデータを呼び出し、フィルタマネージャ２２０によって受け取られたＩ／Ｏのタイプについてのコールバックを受け取るように登録した各フィルタに渡すことができる。フィルタマネージャ２２０によって受け取られたＩ／Ｏのタイプについてコールバックを受け取るように登録された任意のフィルタは、登録フィルタと呼ぶこともある。
【００２６】
通常、フィルタマネージャ２２０は、Ｉ／Ｏ要求の特定のタイプに関連付けられたコールバックデータを、登録フィルタが順序づけられた順に順番に各登録フィルタに渡す。例えば、フィルタ２３０および２３２がすべての読取りＩ／Ｏ要求についてのコールバックを受け取るように登録され、当該要求を処理する際にフィルタ２３０がフィルタ２３２の前になるように順序づけられている場合には、読取りＩ／Ｏを受信した後に、フィルタマネージャ２２０は、まずこのコールバックデータを呼び出し、フィルタ２３０に渡し、フィルタ２３０がこのコールバックデータを処理した後に、フィルタマネージャ２２０は次いで、このコールバックデータ（修正されていれば修正されたもの）を呼び出し、フィルタ２３２に渡すことができる。
【００２７】
フィルタを１つまたは複数のボリュームにアタッチすることができる。つまり、フィルタは呼び出され、ただ１つまたは複数のボリュームに関連したＩ／Ｏについてのコールバックデータを受け取るように登録することができる。
【００２８】
フィルタは、それ自体のＩ／Ｏ要求を生成することができ、このＩ／Ｏ要求は次いで、他のフィルタに渡すことができる。例えば、アンチウィルスフィルタは、ファイルをオープンされる前に読み取りたいと望むかもしれない。フィルタは、Ｉ／Ｏ要求がさらに伝搬するのを停止し、フィルタマネージャにＩ／Ｏ要求についてのステータスコード（例えば、成功または失敗）を報告するように命令することができる。フィルタは、メモリにデータを格納し、このデータをディスク上に永続化（ｐｅｒｓｉｓｔ）する（例えば、格納する）ことができる。一般に、カーネルモードまたはユーザモードプロセスによって実行することができ、事後対応（例えば、動作する前にＩ／Ｏ要求を受け取るまで待つ）および／または事前対応（例えば、それ自体のＩ／Ｏ要求を開始し、またはＩ／Ｏマネージャ２１５によって処理されたＩ／Ｏ要求と非同期的に他のアクションを実行する）とすることができる任意の１組のアクションを実行するようにフィルタを作成することができる。
【００２９】
一実施形態においては、フィルタは、図３に示すスタック式に構成することができ、この図３は、本発明が、本発明の様々な態様に従って動作することができるシステムの別の例示のコンポーネントの構成を表すブロック図である。この実施形態においては、これらのフィルタ３０５〜３０７のそれぞれは、Ｉ／Ｏ要求を処理し、（修正されるか、または修正されていない）要求をスタック中の別のフィルタまたは他のコンポーネントに渡すことができる。例えば、アプリケーション２０５のうちの１つから受け取られた読取り要求に応答して、Ｉ／Ｏマネージャ２１５は、Ｉ／Ｏ要求を発行し、この要求をフィルタ３０５に送ることができる。フィルタ３０５は、このＩ／Ｏ要求を検査し、フィルタ３０５がこのＩ／Ｏ要求を対象としていないことを判定し、次いでこの変更されていないＩ／Ｏ要求をフィルタ３０６へ渡すことができる。フィルタ３０６は、このフィルタ３０６がこのＩ／Ｏ要求に基づいて何らかのアクションを行うことになることを決定することができ、次いでこの（変更されたか、または変更されていない）Ｉ／Ｏ要求をフィルタ３０７に渡すことができる。フィルタ３０７は、このフィルタ３０７がこのＩ／Ｏ要求を対象としていないことを判定し、このＩ／Ｏ要求をファイルシステム２３５に渡すことができる。
【００３０】
ファイルシステム２３５がＩ／Ｏ要求をサービスした後に、これらの結果をフィルタ３０７に渡す。通常、これらの結果は、このＩ／Ｏ要求が進行した順序と逆の順序で（例えば、最初にフィルタ３０７へ、次いでフィルタ３０６へ、そしてフィルタ３０５へと）通過する。フィルタ３０５〜３０７のそれぞれは、これらの結果を検査し、そのフィルタがこれらの結果を対象としているかどうかを判定し、それに基づいて（変更されたか、または変更されていない）これらの結果を別のフィルタまたはコンポーネントに渡す前に、アクションを行うことができる。
【００３１】
本発明の別の実施形態においては、フィルタは、図４に示すようにスタック／管理された形で構成することができ、この図４は、本発明が、本発明の様々な態様に従って動作することができるシステムの別の例示のコンポーネントの構成を表すブロック図である。このコンフィギュレーションにおいては、フィルタのいくつかは、フィルタマネージャに関連付けられているが、他のフィルタは関連付けられていない。フィルタマネージャ２２０は、他のフィルタ（例えば、フィルタ３０５および３０７）とのスタック中に配置されている。
【００３２】
フィルタは、本発明の趣旨または範囲から逸脱することなく、他の多くのコンフィギュレーションで実施することができることが簡単に理解されよう。一部の実施形態においては、フィルタは、アプリケーションとファイルシステムの間のＩ／Ｏを検査し、このＩ／Ｏを変更したり、完了したり、もしくはアボートしたり、またはそれに基づいて他のアクションを実行したりすることができる任意のオブジェクトを備えている。このようなフィルタは、ユーザモードまたはカーネルモードで実行することができ、他のコンポーネントの一部分とすることもできる。
【００３３】
図２に戻ると、ファイルシステム２３５は、これらのアプリケーション２０５が実行する１つまたは複数のマシンにローカルまたはリモートに配置することができる１つまたは複数のボリュームを含むことができる。
【００３４】
（リモートコンテンツをローカルにキャッシュ）
図５は、本発明の様々な態様に従って本発明を実施することができる例示の環境を表すブロック図である。この環境は、ファイルサーバ５０５、コンテンツサーバ５１１〜５１３およびクライアント５２０〜５２３を含み、他のコンポーネント（図示せず）を含むこともできる。これらの様々なエンティティは、イントラネットワークおよびインターネット５１５を含む様々なネットワークを介して互いに通信することができる。
【００３５】
ファイルサーバ５０５は、データセンタからのクライアントにとって利用可能とすることができる１組のすべてのオブジェクト（例えば、ディレクトリ、ファイル、他のコンテンツなど）を含むことができる。コンテンツサーバ５１１〜５１３は、コンテンツをクライアントに提供するときにこれらのオブジェクトにアクセスすることができる。コンテンツサーバは、例えば、インターネット５１５を含むネットワークを介してコンテンツをクライアントにサービスするウェブサーバアプリケーションをホストすることができる。ファイルサーバ５０５からのオブジェクトにアクセスした後に、コンテンツサーバは次いで、このオブジェクトをクライアントに提供することができる。コンテンツサーバは、ファイルサーバ５０５から取得されたオブジェクトをキャッシュしてもよいし、しなくてもよい。例えば、頻繁にアクセスされていない非常に大きなオブジェクトはキャッシュしないが、頻繁にアクセスされる比較的小さなオブジェクトはキャッシュしてもよい。コンテンツサーバは、メインメモリ（例えば、ＲＡＭ）および／またはディスクなどの不揮発性メモリにオブジェクトをキャッシュすることができる。どのオブジェクトをコンテンツサーバ上にキャッシュすべきかの決定は、このコンテンツサーバ上に含まれるキャッシングコンポーネント（すなわち、キャッシングコンポーネント５２５〜５２７のうちの１つ）によって行うことができる。
【００３６】
一実施形態においては、コンテンツサーバは、ファイルサーバ５０５からキャッシュしたどのキャッシュオブジェクトも修正しない。その代わりに、アプリケーションが、リモートオブジェクトを修正するか、または新しいオブジェクトを作成することを要求するときには、このコンテンツサーバがこの要求をファイルサーバ５０５に送信する。これにより、ファイルサーバ５０５上でこのコンテンツの最新のコピーを保持する助けになる。
【００３７】
キャッシングコンポーネント５２５〜５２７のそれぞれは、以下でより詳細に説明するように、フィルタおよびキャッシングサービスを含む様々なサブコンポーネントを含むことができる。
【００３８】
図６は、本発明の様々な態様に従って本発明を実施することができるシステムの例示のコンポーネントの構成を表すブロック図である。このシステムは、コンテンツサーバアプリケーション６０５、フィルタ６１０、リモートファイルシステム６１５、キャッシングサービス６２０、およびローカルファイルシステム６２５を含み、他のコンポーネント（図示せず）を含むこともできる。
【００３９】
コンテンツサーバアプリケーション６０５は、リモートファイルシステム６１５およびローカルファイルシステム６２５からのオブジェクトに独立してアクセスすることができる様々なコンポーネント（図示せず）を備えることができる。一部の実施形態においては、コンテンツサーバアプリケーション６０５のどの単一のコンポーネントも、すべてのこれらコンポーネントがどのオブジェクトを要求しているか、またはこれらのオブジェクトがどこに（例えば、ローカルまたはリモートに）あるかについて知らない。どのリモートオブジェクトが要求されているかをモニタするために、フィルタ６１０は、リモートファイルシステム６１５とのＩ／Ｏをモニタすることができる。定期的に、フィルタ６１０は、リモートファイルシステム６１５からアクセスされたオブジェクトの名前を含むキャッシングサービス６２０にリストを送信することができる。
【００４０】
キャッシングサービス６２０は次いで、フィルタ６１０によって送信されたこのリストを使用して、このリモートファイルシステムからのどのオブジェクトをローカルファイルシステム６２５上にキャッシュするかを決定することができる。この決定は、アドミニストレータなどによって設定されたポリシーに基づいて行うことができ、これにはこのオブジェクトへのアクセス頻度、このオブジェクトのサイズ、または他の任意のキャッシング規則が含まれ得る。
【００４１】
一実施形態において、キャッシングサービス６２０は、ユーザモードで実行される。別の実施形態においては、キャッシングサービス６２０は、カーネルモードで実行される。さらに別の実施形態においては、キャッシングサービス６２０の機能は、フィルタ６１０によって行われる。この実施形態においては、フィルタ６１０とは別のキャッシングサービス６２０は不要である。
【００４２】
システムアドミニストレータなどは、レジストリキーまたは他のコンフィギュレーションデータを設定して、どこにオブジェクトをキャッシュすべきかをキャッシングサービス６２０に知らせることができる。例えば、システムアドミニストレータは、ネットワークシェア￥￥ＳＥＲＶＥＲ￥ＳＨＡＲＥからキャッシュされるオブジェクトが、ディレクトリＣ：￥ＣＡＣＨＥに配置されることを示すことができる。￥￥ＳＥＲＶＥＲ￥ＳＨＡＲＥのサブディレクトリ中のオブジェクトがキャッシュされるときに、このオブジェクトの任意の上位のディレクトリをＣ：￥ＣＡＣＨＥ中に作成して同様のディレクトリ構造を保持することができる。例えば、キャッシングサービス６２０が、￥￥ＳＥＲＶＥＲ￥ＳＨＡＲＥ￥ＤＯＣＵＭＥＮＴＳ￥ＣＯＭＰＡＮＹ．ＨＴＭＬはキャッシュされるべきであると判定した場合、ＤＯＣＵＭＥＮＴＳと呼ばれるディレクトリを、Ｃ：￥ＣＡＣＨＥ中に作成することができ、オブジェクトＣＯＭＰＡＮＹ．ＨＴＭＬをこのディレクトリ中に配置することができる。
【００４３】
どのリモートオブジェクトがアクセスされるかをモニタすることに加えて、以下でより詳細に説明するように、フィルタ６１０を使用して、リモートオブジェクトに対する要求をローカルにキャッシュしたオブジェクトにリダイレクトすることもできる。
【００４４】
図７は、本発明の様々な態様に従って本発明を実施することができるシステムの例示のコンポーネントの構成を表すブロック図である。このシステムは、コンテンツサーバアプリケーション６０５、Ｉ／Ｏマネージャ２１５、フィルタ６１０、リダイレクタ７１０、リモートファイルシステム６１５、およびローカルファイルシステム６２５を含んでおり、また他のコンポーネント（図示せず）を含むこともできる。
【００４５】
コンテンツサーバアプリケーション６０５の任意のコンポーネントが、リモートファイルシステム６１５上にあるオブジェクトへのアクセスを要求するときに、このコンポーネントは、オブジェクトの名前（例えば、ＵＮＣ名）をＩ／Ｏマネージャ２１５に提供する。Ｉ／Ｏマネージャ２１５は、１つまたは複数のリダイレクタ（例えば、リダイレクタ７１０）と対話して、これらのリダイレクタのうちのどれかが、この名前に対応するオブジェクトがどこに存在するかを知っているかについて判定する。あるいは、Ｉ／Ｏマネージャ２１５は、単一のコンポーネントと対話し、次いでこのコンポーネントが利用可能な各リダイレクタと対話して、リダイレクタが、この名前に対応するオブジェクトがどこに存在するかを知っているかについて判定することもできる。リダイレクタが応答すると、このリダイレクタを使用して、このオブジェクトが存在するリモートサーバとのセッションを確立する。コンテンツサーバアプリケーション６０５にとっては、リモートオブジェクトにアクセスするためのプロシージャは、ローカルオブジェクトにアクセスするためのプロシージャと同一にすることができる。一部の実施形態において、コンテンツサーバアプリケーション６０５は、オブジェクトがリモートに配置されているか、またはローカルに配置されているかを知ることができない。
【００４６】
図６のキャッシングサービス６２０が実行し始めるときに、キャッシングサービス６２０は、リモートファイルシステム名（例えば、ネットワークシェア）のローカルキャッシュディレクトリ名に対するマッピングを提供することができる。例えば、このマッピングは、￥￥ＳＥＲＶＥＲ￥ＳＨＡＲＥがＣ：￥ＣＡＣＨＥにマップすること、および他のリモートファイルシステム名が他のローカルキャッシュディレクトリにマップすることを示すことができる。フィルタ６１０は、この情報を格納してローカルキャッシュディレクトリに対してリモートに配置されたオブジェクトについての要求をいつリダイレクトすべきかを決定する。このフィルタは、例えばマッピングテーブル中にこの情報を格納することができる。
【００４７】
フィルタ６１０がリモートオブジェクトをオープンする要求を受け取るとき、フィルタ６１０は、この要求をローカルファイルシステム６２５にマップすべきかどうかを判定することができる。これを行うために、フィルタ６１０はこのオブジェクトがローカルファイルシステム６２５上にキャッシュされているかどうかを判定することができる。例えば、フィルタ６１０が￥￥ＳＥＲＶＥＲ￥ＳＨＡＲＥ￥Ａ．ＴＸＴと名付けられたオブジェクトをオープンする要求を受け取る場合、フィルタ６１０は、このマッピングテーブルを調べて、このオブジェクトのプレフィックスについてのマッピングが存在するかどうかを知ることができる。このケースでは、フィルタ６１０は、￥￥ＳＥＲＶＥＲ￥ＳＨＡＲＥがＣ：￥ＣＡＣＨＥにマップすることを決定することができる。フィルタ６１０は次いで、オブジェクトＡ．ＴＸＴがＣ：￥ＣＡＣＨＥ中に存在するかどうかを判定することができる。存在する場合には、フィルタ６１０は、以下でより詳細に説明するように、Ｉ／Ｏマネージャ２１５に命令して、ローカルファイルシステム６２５にこの要求をリダイレクトすることができる。
【００４８】
図８は、本発明の様々な態様に従ってＩ／Ｏオペレーションをローカルキャッシュにリダイレクトすべきかどうかを判定するときに生じ得るアクションを一般的に表す流れ図である。ブロック８０５でこのプロセスが始まる。
【００４９】
ブロック８１０において、作成オペレーションがこのフィルタによって受け取られる。作成オペレーションは、オブジェクトを作成するか、または既存のオブジェクトをオープンすることができる。他のオペレーションは、このフィルタによって無視され、このリダイレクタへと渡すことができる。
【００５０】
一部の実施形態においては、アプリケーションは、ディレクトリ中のオブジェクトが変化したときに通知を受けることを要求することができる。このような実施形態においては、このリモートサーバが、変更が生じたという通知を送信するときに、このフィルタは、図１０に関連してさらに詳細に説明するように他のアクションを取ることもできる。
【００５１】
ブロック８１５において、この作成オペレーションが書込みアクセスのためにリモートオブジェクトをオープンしようと試みているかどうかについての判定が行われる。そうである場合、処理は、ブロック８３０へと分岐する。そうでない場合には、処理は、ブロック８２０へと分岐する。この作成オペレーションが、リモートオブジェクトを修正しようと試みている場合（このｙｅｓ分岐）には、このフィルタは、このオペレーションをこのリダイレクタに渡し、その結果、このリモートコンテンツがアップデートされることになる。これにより、ローカルにキャッシュされているコンテンツではなくて、元のコンテンツをアップデートすることができるようになる。
【００５２】
ブロック８２０において、このオペレーションがディレクトリのオープンであるかどうかについての判定が行われる。そうである場合、処理は、ブロック８３０へと分岐する。そうでない場合には、処理は、ブロック８２５へと分岐する。コンテンツサーバアプリケーションがディレクトリ情報を要求しているとき、通常ローカルにキャッシュされているこれらのオブジェクトだけでなく、ディレクトリ中のすべてのオブジェクトの名前を閲覧することができる必要がある。ディレクトリのオープンが通常のようにリモートサーバに進むことができるようにすることにより、フィルタは、要求側がリモートディレクトリ中のすべてのオブジェクトを含むディレクトリリストを取得できるようにする。ディレクトリのオープン中またはオープン後に、コンテンツサーバアプリケーションは、他の方法で（例えば、ディレクトリを削除するか、または変更通知について登録することにより）このディレクトリ上で動作することができる。これらの他のオペレーションはまた、このリモートサーバへと送信されるが、このフィルタが作成のみをリダイレクトする一部の実施形態におけるように、このフィルタによるインターラクションなしで送信することもできる。
【００５３】
ブロック８２５において、この作成オペレーションは、新しいオブジェクトが作成されることを要求しているかどうかについての判定が行われる。そうである場合、処理はブロック８３０へと分岐する。そうでない場合には、処理は、ブロック８３５へと分岐する。この作成オペレーションが、リモートオブジェクトを作成しようと試みている場合（このｙｅｓ分岐）、フィルタは、このオペレーションをリダイレクタへと渡し、その結果、リモートコンテンツがアップデートされる。これにより、ローカルキャッシュ中でオブジェクトを作成するのでなく、オブジェクトがリモートファイルシステム上で作成されるようになる。ブロック８１５〜８２５に関連付けられた判定は、本発明の趣旨または範囲を逸脱することなく任意の順序で行うことができることが認識されよう。一実施形態においては、８２５に関連付けられた判定が最初に実行され、ブロック８１５に関連付けられた判定が続き、そしてブロック８２０に関連付けられた判定が続く。
【００５４】
ブロック８３５において、図９に関連してさらに詳細に説明しているように、このオペレーションは、ローカルに、またはリモートサーバへマップされる。
【００５５】
図９は、本発明の様々な態様に従ってＩ／Ｏオペレーションをローカルキャッシュにリダイレクトすべきかどうかを判定するときに生じ得る図８のブロック８３５に対応するアクションを一般的に表す流れ図である。ブロック９０５でこのプロセスが始まる。
【００５６】
ブロック９１０において、オブジェクトが、フィルタによって保持されるマッピングテーブルによってマップされるかどうかについての判定が行われる。そうである場合、処理はブロック９１５へと分岐する。そうでない場合には、処理は、ブロック９３５へと分岐する。このオブジェクトが、マッピングテーブル中に含まれるネットワークシェアの任意のディレクトリの下位である場合、オブジェクトは、このマッピングテーブルによってマップされる。
【００５７】
ブロック９１５において、このオブジェクトがキャッシュされているかどうかについての判定が行われる。そうである場合、処理はブロック９２０へと分岐する。そうでない場合には、処理は、ブロック９３５へと分岐する。一実施形態において、フィルタは、マッピングテーブルからキャッシュディレクトリを取得し、オブジェクトをオープンしようと試みることにより、このオブジェクトがキャッシュされていることを判定することができる。別の実施形態においては、どのオブジェクトがキャッシュされているかは、メモリに保持されており、あるオブジェクトがキャッシュされているかどうかについての判定は、このオブジェクトをオープンしようと試みることなしに行うこともできる。本発明の趣旨または範囲を逸脱することなく、オブジェクトがキャッシュされていることを判定し、使用することができる他の多数の方法が存在することが認識されよう。
【００５８】
ブロック９２０において、Ｉ／Ｏが新しい名前にリパース（ｒｅｐａｒｓｅ）される。本質的には、このＩ／Ｏは、ローカルファイルシステムのキャッシュオブジェクトにリダイレクトされる。一部の実施形態においては、これは、ＳＴＡＴＵＳ＿ＲＥＰＡＲＳＥをＩ／Ｏマネージャへと返し、Ｉ／Ｏマネージャにローカルにキャッシュされたオブジェクトの名前を提供することによって、達成することができる。
【００５９】
ブロック９２５において、Ｉ／Ｏは、ローカルファイルシステムに送信される。Ｉ／Ｏマネージャは、このＩ／Ｏがどのオブジェクトにダイレクトされていたかを識別する情報を格納することができ、その結果、後で、このフィルタによってリパースし、または処理する必要なく、このＩ／Ｏに関連した他の任意のオペレーションを直接ローカルファイルシステムに送信することができるようになる。
【００６０】
リパースメカニズムがない実施形態においては、フィルタは、最近マップされたＩ／Ｏに関連した後続のＩ／Ｏについてモニタすることができ、これらのＩ／Ｏをローカルファイルシステムにダイレクトすることができる。
【００６１】
ブロック９３０において、キャッシングサービスは、アクセスされたオブジェクトについて通知を受ける。以前に指摘したように、アクセスされたオブジェクトのリストは、オブジェクトがアクセスされるたびに通知を送る代わりに、定期的にキャッシングサービスに送ることができる。ローカルのキャッシュオブジェクトに対するアクセスについての通知をキャッシングサービスに送ることは、例えばこのキャッシングサービスが、ローカルファイルシステムからのキャッシュオブジェクトをいつ取り除くべきかを決定することができるようにするために行うことができる。
【００６２】
ブロック９３５において、Ｉ／Ｏはリモートファイルシステムに送信される。これは、前述のようにリダイレクタコンポーネントを介して行うことができる。
【００６３】
ブロック９４０において、キャッシングサービスは、オブジェクトがリモートにアクセスされたことについて通知を受ける。この場合も、以前に指摘したように、オブジェクトがアクセスされるたびに通知を送る代わりに、アクセスされたオブジェクトのリストをキャッシングサービスに定期的に送ることができる。リモートオブジェクトへのアクセスの通知をキャッシングサービスに送ることは、例えばこのキャッシングサービスが、リモートオブジェクトをいつ取得すべきかを決定し、ローカルファイルシステム上でこれらのリモートオブジェクトをキャッシュすることができるようにするために行うことができる。
【００６４】
ブロック９４５でこのプロセスはリターンする。
【００６５】
図１０は、本発明の様々な態様に従ってリモートオブジェクトが変化するときに生じ得るアクションを一般的に表す流れ図である。ブロック１００５でこのプロセスが始まる。
【００６６】
ブロック１０１０において、リモートサーバ上に収容されたオブジェクトが変化したという通知がフィルタによって受信される。ブロック１０１５において、このオブジェクトが存在する場合には、ローカルで削除される。これにより、古いコンテンツがこのローカルキャッシュからパージされるようにするのを助ける。さらに、このリモートオブジェクトは、再び要求されるときにキャッシュ中に見出されなくなり、それ故、フィルタにより、この要求をリモートファイルシステムに送信することができるようになる。
【００６７】
ブロック１０２０において、通知はコンテンツサーバに転送され、このコンテンツサーバは次いで、リモートサーバからこのオブジェクトの最新のコピーを取得して、それをキャッシュしようと試みることができる。
【００６８】
ブロック１０２５でこのプロセスはリターンする。
【００６９】
図１１は、本発明の様々な態様に従って本発明を実施することができるシステムの別の例示のコンポーネントの構成を表すブロック図である。このシステムは、コンテンツサーバアプリケーション６０５、Ｉ／Ｏマネージャ２１５、フィルタ１１０５、リダイレクタ７１０、リモートファイルシステム６１５、およびローカルファイルシステム６２５を含んでおり、また他のコンポーネント（図示せず）を含むこともできる。
【００７０】
一部のオペレーティングシステムにおいては、オペレーティングシステムが、ファイルシステムのディレクトリについてのリパースポイント（ｒｅｐａｒｓｅ  ｐｏｉｎｔ）を提供することができる。リパースポイントは、ファイルシステムのディレクトリに関連付けられたデータの集まりである。リパースポイントのデータは、ディレクトリに関連付けられたキャッシュオブジェクトが存在するディレクトリと、このオブジェクトを取得することができるリモートディレクトリとを示すことができる。オペレーションを受け取って、リパースポイントに関連付けられたディレクトリ、またはその下位のうちのどれかにアクセスするときに、ＳＴＡＴＵＳ＿ＲＥＰＡＲＳＥが、リパースポイントに関連付けられたデータと共にＩ／Ｏマネージャ２１５に戻される。リパースポイントは、ファイルシステムのディスマウントおよび再マウントの後でも存在するようにするためにファイルシステムによって永続化することができる。
【００７１】
ローカルファイルシステム７１０が、ＳＴＡＴＵＳ＿ＲＥＰＡＲＳＥに応答するときに、フィルタ１１０５は、リパースポイントに関連付けられたデータを使用してオブジェクトがローカルにキャッシュされるかどうかを判定することができる。オブジェクトがローカルにキャッシュされる場合、フィルタは、Ｉ／Ｏマネージャ２１５に命令して、Ｉ／Ｏオペレーションをローカルにキャッシュされたオブジェクトにリダイレクトする。オブジェクトがローカルにキャッシュされていない場合には、フィルタは、Ｉ／Ｏマネージャ２１５に命令して、リダイレクタ６１５を介してこのオブジェクトをリモートに取得することができる。
【００７２】
図８に関連して説明したような、（例えば、オブジェクトを修正し、ディレクトリをオープンし、オブジェクトを作成する）特定のＩ／Ｏオペレーションをリモートファイルシステムに自動的に渡すための条件は、図１１のフィルタ１１０５にも依然として当てはまる。さらに、図９のブロック９３０および９４０に関連付けられた報告アクションは、図１１のフィルタ１１０５によって行うこともできる。
【００７３】
リパースポイントを使用することに関連して、１つまたは複数のシャドウディレクトリをローカルファイルシステム上に作成することができる。リパースポイントを各ディレクトリに関連付けて、オブジェクトを見つけることができるローカルキャッシュディレクトリおよびリモートディレクトリを示すことができる。さらに、コンテンツサーバアプリケーション６０５に命令して、（ボリューム名の代わりに）ネットワーク名を使用して１つまたは複数のシャドウディレクトリを介してオブジェクトを取得することもできる。これは、オブジェクトがローカルに配置されているとコンテンツサーバアプリケーション６０５が判定する場合にもたらされる可能性のある間違った振舞いを回避するために、行うことができる。セキュリティ委任（ｓｅｃｕｒｉｔｙ  ｄｅｌｅｇａｔｉｏｎ）を有効にして、クリデンシャルをリモートマシンに渡すことができるようにすることもできる。
【００７４】
前述の詳細な説明から分かるように、リモートデータをローカルにキャッシュするための方法およびシステムが提供されている。本発明は、様々な変更および代替構成が可能であるが、これらの特定の例示の実施形態について図面に示し、上記で詳細に説明した。しかし、本発明をこの開示された特定の形態に限定する意図はなく、その逆に、本発明の趣旨および範囲内に入るすべての変更形態、代替構成、および均等物を包含することを意図していることを理解されたい。
【図面の簡単な説明】
【００７５】
【図１】本発明を組み込むことができるコンピュータシステムを表すブロック図である。
【図２】本発明が、本発明の様々な態様に従って動作することができるシステムの例示のコンポーネントの構成を表すブロック図である。
【図３】本発明が、本発明の様々な態様に従って動作することができるシステムの他の例示のコンポーネント構成を表すブロック図である。
【図４】本発明が、本発明の様々な態様に従って動作することができるシステムの他の例示のコンポーネント構成を表すブロック図である。
【図５】本発明の様々な態様に従って本発明を実施することができる例示の環境を表すブロック図である。
【図６】本発明の様々な態様に従って本発明を実施することができるシステムの例示のコンポーネント構成を表すブロック図である。
【図７】本発明の様々な態様に従って本発明を実施することができるシステムの例示のコンポーネント構成を表すブロック図である。
【図８】本発明の様々な態様に従ってＩ／Ｏオペレーションをローカルキャッシュにリダイレクトするかどうかを判定するときに生じ得るアクションを一般的に表す流れ図である。
【図９】本発明の様々な態様に従ってＩ／Ｏオペレーションをローカルキャッシュにリダイレクトするかどうかを判定するときに生じ得る図８のブロック８３５に対応するアクションを一般的に表す流れ図である。
【図１０】本発明の様々な態様に従ってリモートオブジェクトが変化するときに生じ得るアクションを一般的に表す流れ図である。
【図１１】本発明の様々な態様に従って本発明を実施することができるシステムの他の例示のコンポーネントの構成を表すブロック図である。
【符号の説明】
【００７６】
１００  コンピューティングシステム環境
１１０  コンピュータ
１２０  処理ユニット
１２１  システムバス
１３０  システムメモリ
１３１  ＲＯＭ
１３２  ＲＡＭ
１３３  ＢＩＯＳ
１３４  オペレーティングシステム
１３５  アプリケーションプログラム
１３６  他のプログラムモジュール
１３７  プログラムデータ
１４０  リムーバブル不揮発性メモリインターフェース
１４１  ハードディスクドライブ
１４４  オペレーティングシステム
１４５  アプリケーションプログラム
１４６  他のプログラムモジュール
１４７  プログラムデータ
１５０  非リムーバブル不揮発性メモリインターフェース
１５１  磁気ディスクドライブ
１５２  磁気ディスク
１５５  光ディスクドライブ
１５６  光ディスク
１６０  ユーザ入力インターフェース
１６１  マウス
１６２  キーボード
１７０  ネットワークインターフェース
１７１  ローカルエリアネットワーク
１７２  モデム
１７３  ワイドエリアネットワーク
１８０  リモートコンピュータ
１８１  メモリストレージデバイス
１８５  リモートアプリケーションプログラム
１９０  ビデオインターフェース
１９１  モニタ
１９５  出力ペリフェラルインターフェース
１９６  プリンタ
１９７  スピーカ
２０５  アプリケーション
２１０  ＡＰＩ
２１５  Ｉ／Ｏマネージャ
２２０  フィルタマネージャ
２２５  ファイルシステム
２３０  フィルタＡ
２３１  フィルタＢ
２３２  フィルタＣ
２３５  ファイルシステム
３０５  フィルタＤ
３０６  フィルタＥ
３０７  フィルタＦ
５０５  ファイルサーバ
５１１〜５１３  コンテンツサーバ
５１５  インターネット
５２５〜５２７  キャッシングコンポーネント
５２０〜５２３  クライアント
６０５  コンテンツサーバアプリケーション
６１０  フィルタ
６１５  リモートファイルシステム
６２０  キャッシングサービス
６２５  ローカルファイルシステム
７１０  リダイレクタ
１１０５  フィルタ
【図１】
2006155606.tif 000003
【図２】
2006155606.tif 000004
【図３】
2006155606.tif 000005
【図４】
2006155606.tif 000006
【図５】
2006155606.tif 000007
【図６】
2006155606.tif 000008
【図７】
2006155606.tif 000009
【図８】
2006155606.tif 000010
【図９】
2006155606.tif 000011
【図１０】
2006155606.tif 000012
【図１１】
2006155606.tif 000013