(57)【要約】  記憶媒体上のアドレスをキャッシュデバイス上の対応するアドレスにマップするキャッシュメタデータを管理するための技術が提供される。キャッシュメタデータは、階層データ構造で格納されることが可能である。その階層のレベルのサブセットだけが、メモリーにロードされて、これにより、キャッシュメタデータのメモリー「フットプリント」が低減され、起動中のキャッシュメタデータの復元が速められることが可能である。キャッシュメタデータを使用してストレージからデータを読み取る要求が処理されて、キャッシュの中にそのデータが格納されているアドレスが識別されると、その識別されたアドレスが、メモリーの中に格納されることが可能である。シャットダウンされる際、階層レベルのサブセットおよび／または識別されたアドレスだけが転送されてシャットダウンが速められることが可能である。【選択図】図３
2012508932.tif 000002
【特許請求の範囲】
【請求項１】
メモリーを備え、記憶媒体（７０６）およびキャッシュデバイス（１１０）が結合されており、前記記憶媒体（７０６）は、複数のデータ項目をそれぞれ、それぞれのアドレスに格納し、前記複数のデータ項目のそれぞれは、前記キャッシュデバイス（１１０）上の対応するアドレスにも格納され、コンピューター（７００）によってアクセス可能なキャッシュメタデータが、前記記憶媒体上の前記アドレスと各データ項目が格納される前記キャッシュデバイス上の前記対応するアドレスの間のマッピングを提供する、前記コンピューターを動作させるための方法であって、
（Ａ）複数の階層レベルを備える階層データ構造で前記キャッシュメタデータを格納する動作と、
（Ｂ）前記複数の階層レベルのサブセットだけを前記メモリーにロードする動作と、
を備える方法。
【請求項２】
前記動作（Ｂ）は、前記キャッシュデバイス上に前記複数の階層レベルの残りのレベルの少なくとも一部分を格納する動作をさらに備える請求項１に記載の方法。
【請求項３】
前記コンピューターの再起動を開始する動作、および／または前記キャッシュデバイスをオフラインにする動作を備える、前記動作（Ａ）の後に実行される動作をさらに備え、さらに前記動作（Ｂ）は、前記コンピューターの前記再起動が開始され、かつ／または前記キャッシュデバイスがオフラインにされると、実行される請求項１に記載の方法。
【請求項４】
前記階層データ構造は、少なくとも１００である分岐数を有する請求項１に記載の方法。
【請求項５】
前記動作（Ａ）は、前記キャッシュデバイスをオフラインにするコマンドに応答して、前記キャッシュデバイス上にキャッシュメタデータを格納する動作をさらに備える請求項１に記載の方法。
【請求項６】
（Ｄ）前記記憶媒体上のアドレスに格納されたデータ項目を読み取る要求を受け取る動作と、
（Ｅ）前記キャッシュメタデータの第１の部分にアクセスして、前記キャッシュデバイス上で前記データ項目が格納された対応するアドレスを識別する動作と、
（Ｆ）前記キャッシュメタデータの前記第１の部分の少なくともいくらかを前記メモリーの中に格納する動作と、
をさらに備える請求項１に記載の方法。
【請求項７】
前記動作（Ｄ）は、オペレーティングシステムを起動し、かつ／または前記キャッシュデバイスをオフラインにするように実行される動作の一環として、データ項目を読み取る要求を受け取る動作をさらに備える請求項６に記載の方法。
【請求項８】
前記動作（Ｄ）は、前記記憶媒体上のそれぞれのアドレスにそれぞれが格納された複数のデータ項目を読み取る要求を受け取る動作をさらに備え、
前記動作（Ｅ）は、（Ｄ）において受け取られた各要求に関して、前記キャッシュメタデータにアクセスして、前記キャッシュデバイス上でデータ項目が格納された対応するアドレスを識別する動作をさらに備え、
前記動作（Ｆ）は、（Ｅ）における各動作に関して、前記対応するアドレスの指示を前記メモリーの中に格納する動作をさらに備える方法であって、
（Ｇ）前記コンピューターをシャットダウンするコマンドを受け取ると、（Ｃ）において前記メモリーにロードされた前記複数の階層レベルの前記サブセット、および／または（Ｆ）において格納された前記指示を前記キャッシュデバイスに格納する動作
をさらに備える請求項６に記載の方法。
【請求項９】
前記動作（Ｆ）は、
（Ｆ１）キャッシュメタデータの目標量が前記メモリーの中に既に格納されているかどうかを判定する動作と、
（Ｆ２）キャッシュメタデータの前記目標量が前記メモリーの中に既に格納されていることが判定された場合、
前記メモリーから消去されるべきキャッシュメタデータの第２の部分を識別する動作、
キャッシュメタデータの前記第２の部分を消去する動作、および
キャッシュメタデータの前記第１の部分を前記メモリーの中に格納する動作と、
（Ｆ３）キャッシュメタデータの前記目標量が前記メモリーの中に既に格納されてはいないことが判定された場合、キャッシュメタデータの前記第１の部分を前記メモリーの中に格納する動作と、
をさらに備える請求項６に記載の方法。
【請求項１０】
前記メモリーは、或る記憶容量を有し、さらに前記動作（Ｆ１）における前記判定する動作は、前記メモリーの前記記憶容量を参照して実行される請求項９に記載の方法。
【請求項１１】
前記動作（Ｅ）は、前記動作（Ａ）の完了後に前記キャッシュメタデータが変更されていないことを検証する動作をさらに備える請求項６に記載の方法。
【請求項１２】
前記動作（Ａ）は、前記キャッシュメタデータの少なくとも一部分の表現を生成し、前記表現を前記キャッシュデバイスに書き込む動作をさらに備え、さらに（Ｅ）における前記検証する動作は、
（Ｅ１）前記キャッシュデバイスに書き込まれた前記表現を取り出す動作と、
（Ｅ２）前記表現を再生成する動作と、
（Ｅ３）（Ｅ１）において取り出された前記表現を（Ｅ２）において再生成された前記表現と比較して、前記キャッシュデバイス上で前記データ項目が格納された前記対応するアドレスを識別するのに、前記キャッシュメタデータが信頼できるように使用され得るかどうかを判定する動作と、
を備える請求項１１に記載の方法。
【請求項１３】
（Ｅ４）前記対応するアドレスを識別するのに、前記キャッシュメタデータが信頼できるように使用され得ると判定された場合、前記キャッシュデバイス上の前記対応するアドレスにおける前記データ項目を読み取る動作と、
（Ｅ５）前記対応するアドレスを識別するのに、前記キャッシュメタデータが信頼できるように使用され得ないと判定された場合、前記キャッシュメタデータを強制排除し、前記記憶媒体上の前記アドレスから前記データ項目を読み取る動作と、
をさらに備える請求項１２に記載の方法。
【請求項１４】
メモリーを備え、ディスクストレージ（７０６）およびキャッシュデバイス（１１０）が結合されており、前記ディスクストレージは、複数のデータ項目をそれぞれ、それぞれのアドレスに格納し、前記複数のデータ項目のそれぞれは、前記キャッシュデバイス上の対応するアドレスにも格納され、コンピューター（７００）によってアクセス可能なキャッシュメタデータが、前記ディスクストレージ上の前記アドレスと各データ項目が格納された前記キャッシュデバイス上の前記対応するアドレスの間のマッピングを提供する、前記コンピューターによって実行されると、
（Ａ）複数の階層レベルを備える階層データ構造で前記キャッシュメタデータを前記キャッシュデバイスの中に格納する動作と、
（Ｂ）前記コンピューターの再起動を開始する動作と、
（Ｃ）前記コンピューターの前記再起動が開始されると、前記複数の階層レベルのサブセットだけを前記メモリーにロードする動作と、
（Ｄ）前記記憶媒体上のアドレスに格納されたデータ項目を読み取る要求を受け取る動作と、
（Ｅ）前記キャッシュメタデータの第１の部分にアクセスして、前記キャッシュデバイス上で前記データ項目が格納された対応するアドレスを識別する動作と、
（Ｆ）前記キャッシュメタデータの前記第１の部分を前記メモリーの中に格納する動作と、
を備える方法を実行する符号化された命令を有する少なくとも１つのコンピューター可読記憶媒体。
【請求項１５】
メモリー（７０４）と、
それぞれのアドレスに複数のデータ項目を格納する記憶媒体（７０６）と、
対応するアドレスに前記複数のデータ項目をやはり格納し、前記記憶媒体上の前記アドレスと各データ項目が格納された前記キャッシュデバイス上の前記対応するアドレスの間のマッピングを提供するキャッシュメタデータを格納し、前記キャッシュメタデータは、複数の階層レベルを備える階層データ構造で格納される、キャッシュデバイス（１１０）と、
プログラミングされた少なくとも１つのプロセッサー（７０３）と、
を備えるコンピューターシステム（７００）であって、前記プロセッサーは、
前記コンピューターの再起動が開始されると、前記複数の階層レベルのサブセットだけを前記メモリーにロードし、
前記キャッシュメタデータを使用して、前記キャッシュデバイスの中で前記データ項目が格納された対応するアドレスを識別すること、および識別された対応するアドレスを前記メモリーの中に格納することによって、前記記憶媒体上のそれぞれのアドレスに格納されたデータ項目を読み取る要求を処理し、
前記複数の階層レベルの前記サブセット、および前記識別された対応するアドレスを前記メモリーから前記キャッシュデバイスに転送することによって、前記コンピューターをシャットダウンするコマンドを処理する、
ようにプログラミングされたプロセッサー（７０３）である、
コンピューターシステム（７００）。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リムーバブルなＮＶＲＡＭ（不揮発性ランダムアクセスメモリー）およびリムーバブルでないＮＶＲＡＭなどの不揮発性メモリーデバイスを使用するための技術に関する。
【背景技術】
【０００２】
一部の従来のオペレーティングシステムは、オペレーティングシステムおよび／またはアプリケーションのパフォーマンスを向上させるように、より低速のストレージデバイス（ディスク記憶媒体、またはネットワークを介してアクセス可能な１つまたは複数のストレージデバイスなどの）に関して、不揮発性メモリーデバイス（すなわち、フラッシュメモリーＵＳＢドライブなどの、コンピューターに補助ストレージおよび／またはメモリーを提供するように機能可能な周辺デバイス）をブロックレベルまたはファイルレベルのキャッシュとして使用する能力を提供する。これに関して、不揮発性メモリーデバイス（以降、簡明のため「キャッシュデバイス」と呼ぶ）からのまたは不揮発性メモリーデバイスへの読み取りおよび書き込み動作は、より低速のストレージデバイスからのまたはより低速のストレージデバイスへの読み取りおよび書き込み動作と比べて、大幅により高速に実行され得るため、キャッシュデバイスを使用して、そのようなより低速のデバイス上に格納されたデータをキャッシュすることは、オペレーティングシステムおよび／またはアプリケーションのＩ／Ｏ（入出力）動作の速度を大幅に向上させる機会を提供する。この目的で、ワシントン州、レッドモンドのマイクロソフトコーポレーションによって製造されるＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  Ｖｉｓｔａオペレーティングシステムは、ユーザーが、キャッシュデバイスを使用して、より低速のストレージデバイス（以降、便宜上、「ディスクストレージ」または「ディスク」と呼ばれるが、これらの用語は、ネットワークを介してアクセス可能なストレージデバイスを含め、キャッシュデバイスと比べて、Ｉ／Ｏが通常、より低速に実行される任意のストレージ機構（複数可）および／またはストレージデバイス（複数可）を一般的に指すことを理解されたい。）の中にも存在するデータをキャッシュすることを許す、レディブースト（ＲｅａｄｙＢｏｏｓｔ）として知られるフィーチャーを含む。
【０００３】
キャッシュデバイスを使用して、ディスク上に格納されたデータをキャッシュすることは、一部の実施形態においてオペレーティングシステムのＩ／Ｏスタックにおいて実施されるドライバーである、キャッシュマネージャー構成要素を使用して達せられることが可能である。図１Ａ〜図１Ｂは、キャッシュマネージャー構成要素１００がキャッシュデバイス１１０にデータをキャッシュすることを管理する、例示的な高レベルプロセス１０Ａ〜１０Ｂを示す。キャッシュデバイス１１０は、有線および／または無線の通信インフラストラクチャーおよび通信プロトコル（複数可）を使用して、キャッシュマネージャー１００が存在するコンピューター（図示せず）に結合されることが可能である。例えば、キャッシュデバイス１１０は、コンピューターから取り外し可能である（例えば、フラッシュメモリーＵＳＢドライブを備える）、取り外し可能でないこと、および／または１つもしくは複数の有線および／または無線ネットワークを介してコンピューターによってアクセス可能であることが可能である。
【０００４】
プロセス１０Ａ（図１Ａ）の開始時に、データがディスクストレージ（すなわち、キャッシュされるボリューム１２０）上のアドレスＸに書き込まれるべきことを指定する書き込み要求が、キャッシュマネージャー１００によって受け取られる。キャッシュマネージャー１００は、動作１０１でキャッシュされるボリューム１２０上のアドレスＸにデータが書き込まれるようにし、さらに動作１０２でキャッシュデバイス１１０上のアドレスＹにもデータが書き込まれるようにすることによって、この要求を処理する。プロセス１０Ｂ（図１Ｂ）は、その後、キャッシュされるボリューム１２０上のアドレスＸに格納されたデータが読み取られるべきことを指定する読み取り要求が受け取られた際に実行される動作を含む。キャッシュマネージャー１００は、データがアドレスＹでキャッシュデバイス１１０上にキャッシュされていることを特定し、動作１０３でアドレスＹにおけるデータが読み取られるようにする。次に動作１０４で、このデータが、読み取り要求を満足させるようにキャッシュデバイスから供給される。
【０００５】
キャッシュマネージャーは、キャッシュアドレス（例えば、アドレスＹ）に対応するディスクアドレス（例えば、アドレスＸ）のマッピングをメタデータの中に保持し、この「キャッシュメタデータ」は、通常、キャッシュデバイスから読み取りを行う際、またはキャッシュデバイスに書き込みを行う際に使用される。通常、キャッシュメタデータは、メモリーの中に保持され、Ｉ／Ｏ要求が受け取られると、キャッシュマネージャーによってアクセスされる。このため、ディスクオフセットＸに向けられた読み取り要求がキャッシュマネージャーによって受け取られると、キャッシュマネージャーは、このキャッシュメタデータを使用して、データがキャッシュオフセットＹにも格納されていることを特定し、データが、ディスクオフセットＸからではなく、キャッシュオフセットＹから読み取られるようにすることによって、その要求を満足させる。ディスクオフセットＸに向けられた書き込み要求がキャッシュマネージャーによって受け取られると、キャッシュマネージャーは、このキャッシュメタデータを使用して、そのディスクアドレスにおけるデータがキャッシュの中にも格納されているかどうかを判定する。格納されている場合（例えば、そのデータがキャッシュアドレスＹに格納されている場合）、キャッシュマネージャーは、そのデータがキャッシュにおける適切なアドレスに書き込まれるようにする、またはそのアドレスにおけるキャッシュ内容を強制排除することができる。格納されていない場合、キャッシュマネージャーは、そのデータがキャッシュに書き込まれるようにすることができ、さらにディスクオフセットＸに対する将来の読み取りが、代わりにキャッシュ上に格納されたデータから行われることが可能であるように、キャッシュメタデータを更新することができる。
【０００６】
従来のオペレーティングシステムは、相対的に限られた記憶容量を有するキャッシュデバイスをサポートすることができる。例えば、Ｗｉｎｄｏｗｓ  Ｖｉｓｔａオペレーティングシステムのレディブーストのフィーチャーは、４ギガバイト記憶容量までを有するキャッシュデバイスをサポートする。（Ｗｉｎｄｏｗｓ  Ｖｉｓｔａがリリースされた時点では、キャッシュデバイスの最大記憶容量は、約２ギガバイトであった。）キャッシュデバイスの記憶容量は、近年、急速に増大しており、一部のキャッシュデバイスは、圧縮された場合、３２ギガバイト相当のデータを格納することが可能な、１６ギガバイトまでの記憶容量を提供する。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
相対的により大きい記憶容量を有するキャッシュデバイスは、オペレーティングシステムおよびアプリケーションによって実行されるＩ／Ｏ動作の速度を向上させる大きな機会を提供することを本出願人らは認識している。また、従来のオペレーティングシステムが、比較的限られた記憶容量しか有さないキャッシュデバイスをサポートする１つの理由は、いくつかのタイプの電力遷移（例えば、スタンバイ、ハイバネーション（もしくは非Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓオペレーティングシステムによって使用される均等のモード）、または再起動）が行われる際、キャッシュ内容が再ポピュレートされなければならないことであることも、本出願人らは認識している。比較的より大きい記憶容量を有するキャッシュデバイスでは、キャッシュ内容を再ポピュレートすることは、相当な時間がかかり、相当な処理リソースを消費する可能性がある。例として、１６ギガバイトまでの圧縮されたデータを保持することが可能な８ギガバイトフラッシュメモリーデバイスは、毎秒約１０メガバイトでバックグラウンドＩ／Ｏを使用してディスクから再ポピュレートするのに３０分までかかる可能性がある。このことは、キャッシュデバイスを用いることによって得られている可能性があるパフォーマンス上のいかなる利益も事実上、打ち消すだけでなく、実際、システム動作を大幅に遅くする可能性がある。
【０００８】
キャッシュ内容が、或る電力遷移をまたいで再ポピュレートされなければならない１つの理由は、キャッシュデバイスおよび／またはディスクの内容が電力遷移中に変更されている可能性があるため、コンピューターが再起動された際にキャッシュ内容がディスクストレージの内容を正確に表していることを信頼できるように確実にする方法が、全く存在しないことである。例えば、第１のコンピューターがシャットダウンされると、ハッカーがリムーバブルキャッシュデバイスを取り外し、このキャッシュデバイスを別のコンピューターに接続し、キャッシュ内容を変更して、このデバイスがその後、第１のコンピューターに再接続された場合、誤ったデータ（以降、「真正でない」データと呼ぶ）が、Ｉ／Ｏ要求を満足させるようにキャッシュデバイスから供給され得るようにすることも可能である。ハッカーの悪意ある行為に加えて、キャッシュ内容は、コンピューターまたはキャッシュデバイスのハードウェア障害に起因して、電力遷移中に壊れることもあり得る。
【０００９】
キャッシュ内容は、ディスク上のデータが遷移中に更新されたために、電力遷移中に「陳腐」となり、それによってコンピューターが再起動された際、キャッシュ内容がディスク内容をもはや正確に表していない可能性があるようになることもあり得る。例えば、シャットダウンの後、ユーザーが、キャッシュデバイスを認識しない別のオペレーティングシステムにディスクをブートして、キャッシュデバイス上にキャッシュされたディスク上に格納されたデータを変更し、それによってコンピューターが再起動された際、キャッシュ内容がディスク上に格納された内容をもはや反映していないようになることも可能である。別の例において、シャットダウン中のコンピューター上のいくつかの動作が、キャッシュデバイスがオペレーティングシステムによってアクセス可能でないようにされた後に（例えば、キャッシュデバイスがオフにされた後に）行われて、それによって、この時点の後にオペレーティングシステムによって実行されたディスクへの任意の書き込みが、キャッシュ内容によって正確に反映されない可能性があるようになることも可能である。いくつもの任意のイベントが、電力遷移をまたいでキャッシュ内容が陳腐となることを生じさせる可能性がある。
【課題を解決するための手段】
【００１０】
本発明の実施形態は、以上、およびその他の懸念に対処して、キャッシュ内容が、電力遷移をまたいでディスク上に格納されたデータを正確に反映するものとして信頼され得るようにするための技術を提供する。例えば、本発明の一部の実施形態は、電力遷移をまたいでキャッシュ内容が真正のままであることを検証するための技術を提供する。さらに、一部の実施形態は、キャッシュ内容が電力遷移をまたいで陳腐とならないことを信頼できるように確実にするための技術を提供する。さらに、一部の実施形態は、電力遷移が生じる際にキャッシュメタデータが効率的にアクセスされ得るとともに、信頼できるように保存され、復元され得ることを確実にする、電力遷移をまたいでキャッシュメタデータを管理するとともに、通常の（「定常状態」）動作中もキャッシュメタデータを管理するための技術を提供する。
【００１１】
キャッシュ内容が、電力遷移をまたいでディスク上に格納されたデータを正確に反映しているものとして信頼され得ることを確実にする技術を提供することにより、本発明の一部の実施形態は、相当な記憶容量を有するキャッシュデバイスが、オペレーティングシステムおよび／またはアプリケーションによって実行されるＩ／Ｏ動作を大幅にスピードアップするように使用されることを可能にすることができる。Ｉ／Ｏ動作の増加した速度は、コンピューターの通常の「定常状態」動作を速めることが可能であるだけでなく、ブート中に実行される動作も大幅にスピードアップして、それによってコンピューターがはるかに迅速に使用される準備ができるようにすることも可能である。
【００１２】
本発明の一部の実施形態において、メモリーを備え、記憶媒体およびキャッシュデバイスが結合されており、その記憶媒体は、複数のデータ項目をそれぞれ、それぞれのアドレスに格納し、複数のデータ項目のそれぞれは、キャッシュデバイス上の対応するアドレスにも格納され、コンピューターによってアクセス可能なキャッシュメタデータが、その記憶媒体上のアドレスと各データ項目が格納されるキャッシュデバイス上の対応するアドレスの間のマッピングを提供する、コンピューターを動作させるための方法が提供される。この方法は、（Ａ）複数の階層レベルを備える階層データ構造でキャッシュメタデータを格納する動作と、（Ｂ）この複数の階層レベルのサブセットだけをメモリーにロードする動作とを備える。
【００１３】
他の実施形態は、メモリーを備え、ディスクストレージおよびキャッシュデバイスが結合されており、そのディスクストレージは、複数のデータ項目をそれぞれ、それぞれのアドレスに格納し、複数のデータ項目のそれぞれは、キャッシュデバイス上の対応するアドレスにも格納され、コンピューターによってアクセス可能なキャッシュメタデータが、そのディスクストレージ上のアドレスと各データ項目が格納されたキャッシュデバイス上の対応するアドレスの間のマッピングを提供する、コンピューターによって実行されると、（Ａ）キャッシュデバイスの中に、複数の階層レベルを備える階層データ構造でキャッシュメタデータを格納する動作と、（Ｂ）コンピューターの再起動を開始する動作と、（Ｃ）コンピューターの再起動が開始されると、複数の階層レベルのサブセットだけをメモリーにロードする動作と、（Ｄ）記憶媒体上のアドレスに格納されたデータ項目を読み取る要求を受け取る動作と、（Ｅ）キャッシュメタデータの第１の部分にアクセスして、キャッシュデバイス上でデータ項目が格納された対応するアドレスを識別する動作と、（Ｆ）キャッシュメタデータの第１の部分をメモリーの中に格納する動作とを備える方法を実行する、符号化された命令を有する少なくとも１つのコンピューター可読記憶媒体を提供する。
【００１４】
他の実施形態は、メモリーと、それぞれのアドレスに複数のデータ項目を格納する記憶媒体と、対応するアドレスにこの複数のデータ項目をやはり格納し、記憶媒体上のアドレスと各データ項目が格納されたキャッシュデバイス上の対応するアドレスの間のマッピングを提供する、複数の階層レベルを備える階層データ構造で格納されるキャッシュメタデータを格納するキャッシュデバイスと、コンピューターの再起動が開始されると、複数の階層レベルのサブセットだけをメモリーにロードし、キャッシュメタデータを使用して、キャッシュデバイスの中でデータ項目が格納された対応するアドレスを識別すること、および識別された対応するアドレスをメモリーの中に格納することによって、記憶媒体上のそれぞれのアドレスに格納されたデータ項目を読み取る要求を処理し、複数の階層レベルのサブセット、および識別された対応するアドレスをメモリーからキャッシュデバイスに転送することによって、コンピューターをシャットダウンするコマンドを処理するようにプログラミングされた少なくとも１つのプロセッサーとを備えるコンピューターシステムを提供する。
【図面の簡単な説明】
【００１５】
【図１】図１Ａは、従来技術によるキャッシュデバイスに書き込むための技術を示すブロック図である。図１Ｂは、従来技術によるキャッシュデバイスから読み取るための技術を示すブロック図である。
【図２Ａ】本発明の一部の実施形態によるキャッシュデバイスに書き込むための例示的な技術を示す図である。
【図２Ｂ】本発明の一部の実施形態によるキャッシュデバイスから読み取るための例示的な技術を示す図である。
【図３】本発明の一部の実施形態による、キャッシュデータが、電力遷移の後にディスク上に格納されたデータを正確に反映することを確実にするための例示的な技術を示すブロック図である。
【図４】本発明の一部の実施形態によるキャッシュメタデータを格納するための例示的な技術を示すブロック図である。
【図５】本発明の一部の実施形態によるキャッシュメタデータに関する例示的な格納動作を示すブロック図である。
【図６】本発明の一部の実施形態によるキャッシュデバイスを使用して読み取り要求に応えるための例示的な技術を示す流れ図である。
【図７】本発明の態様を実施するのに使用され得る例示的なコンピューターを示すブロック図である。
【図８】本発明の態様を実施する命令が記録され得る例示的なコンピューターメモリーを示すブロック図である。
【発明を実施するための形態】
【００１６】
本発明の一部の実施形態は、キャッシュ内容が、電力遷移をまたいでディスクストレージの内容を正確に反映することを確実にするための技術を提供する。例えば、一部の実施形態は、キャッシュ内容が、電力遷移をまたいで真正のままであり、かつ／または陳腐になっていないことを確実にする能力を提供する。さらに、一部の実施形態は、キャッシュメタデータを管理して、メタデータが電力遷移中に改ざんされていないことを確実にするための技術を提供する。さらに、一部の実施形態は、電力遷移と通常の動作の両方が実行されることが可能な効率を向上させることができるキャッシュメタデータを格納するための能力を提供する。以下のセクションは、これらの実施形態を詳細に説明する。
Ｉ．キャッシュデータ真正性を検証すること
コンピューターが電力遷移を経験する（例えば、スタンバイモードまたはハイバネーションモードに入れられる、または再起動される）際、キャッシュデバイスがコンピューターから切断されることが可能であり、デバイスの内容が変更される（例えば、悪意のあるハッカーによって）可能性がある。例えば、コンピューターがスタンバイモードまたはハイバネーションモードに入れられる際、フラッシュメモリードライブなどのリムーバブルキャッシュデバイスがコンピューターから取り外される可能性があり、デバイスの内容が変更される可能性がある。内部ＮＶＲＡＭデバイスなどのリムーバブルでないデバイスさえ、オペレーティングシステムが再起動される（すなわち、リロードされ、それにより、コンピューターを再起動させる）際、切断される可能性があり、デバイスの内容が変更される可能性がある。その結果、キャッシュデバイスは、コンピューターに再接続されたときに、ユーザーが考えるのとは異なる情報を格納する可能性がある（すなわち、キャッシュの中に格納されたデータは、「真正」でない可能性がある）。Ｉ／Ｏ（入出力）要求を満足させるのに真正でないデータがキャッシュから供給された場合、コンピューターの動作は、悪影響を受ける可能性がある。
【００１７】
本発明の一部の実施形態は、電力遷移中にキャッシュ内容に行われた変更を検出して、Ｉ／Ｏ要求がキャッシュからの真正でないデータを使用して満足させられないことを確実にするための技術を提供する。一部の実施形態において、キャッシュ内容を真正でなくする電力遷移中にキャッシュ内容に行われた任意の「オフライン変更」を検出する能力が提供される。
【００１８】
一部の実施形態は、データの少なくとも一部分の表現を使用して、この能力を提供する。例えば、データの少なくとも一部分および／または他の情報から或る表現が、所定の仕方で計算される、または導き出されることが可能である。この表現は、データがキャッシュに初めて書き込まれる際に生成され、１つまたは複数のロケーションに格納されることが可能である。例えば、この表現は、データと一緒にキャッシュに、または他の何らかのロケーション（複数可）に書き込まれることが可能である。キャッシュに格納される場合、この表現は、この表現をデータに関連付ける仕方で格納されることが可能である（例えば、この表現は、データが書き込まれるキャッシュアドレスに隣接するキャッシュアドレスに書き込まれる、データに関連付けられたキャッシュメタデータに書き込まれる、かつ／または他の何らかの仕方で関連付けられることが可能である）。データが、後にキャッシュから読み取られる際、この表現も取り出されることが可能である。この表現は、所定の仕方で再生成されることが可能であり、再生成された表現が、取り出された表現と比較されることが可能である。これらの表現が合致した場合、キャッシュから取り出されたデータは、真正であると判定され、読み取り要求を満足させるように供給される。合致しなかった場合、読み取り要求を満足させるのにディスクストレージから代わりにデータを読み取る要求が発行され、キャッシュ上に格納された真正でないデータが強制排除される（例えば、消去される）ことが可能である。
【００１９】
図２Ａ〜図２Ｂは、このプロセスをより詳細に示す。詳細には、図２Ａに示されるプロセス２０Ａは、データがキャッシュに書き込まれる際に実行される動作を含み、図２Ｂに示されるプロセス２０Ｂは、データがキャッシュから読み取られる際に、後に実行される動作を含む。プロセス２０Ａ〜２０Ｂはそれぞれ、キャッシュされるボリューム１２０（各図の左側）、キャッシュマネージャー１００（中央）、およびキャッシュデバイス１１０（右側）によって実行される動作を含む。
【００２０】
プロセス２０Ａ（図２Ａ）の開始時に、動作２０５で、ディスクストレージ上のアドレスＸに向けられた書き込み要求がキャッシュマネージャー１００によって受け取られる。動作２１０で、キャッシュマネージャー１００が、キャッシュメタデータ（図示せず）を使用して、データがやはり書き込まれなければならないキャッシュデバイス１１０上のアドレスＹを特定する。また、キャッシュマネージャーは、データの少なくとも一部分の表現を生成することも行う。
【００２１】
本発明の実施形態は、任意の適切な技術を使用して、この表現を生成することができる。一部の実施形態において、１つまたは複数の暗号認証技術が、この表現を生成するのに使用されることが可能である。例えば、一部の実施形態において、この表現は、データと、秘密鍵のセットと、データ項目ごとのシーケンス番号とから生成されたＭＡＣ（メッセージ認証コード）を備えることが可能である。しかし、本発明は、この表現を生成するための任意の適切な技術が使用されることが可能であるので、そのような実施形態に限定されない。例えば、暗号認証技術は、使用されなくてもよい。例として、強いハッシュコードおよび／またはＣＲＣ（巡回冗長性コード）が、代替として、データを表現するのに使用されることも可能であり、キャッシュに格納された個々のデータ項目から、またはデータ項目の１つまたは複数のグループに関して生成されることが可能である。これに関して、データ真正性を検証するという目標が、ハードウェア破損のインスタンスを単に検出することであった（すなわち、データのハッキングは関心事ではなかった）とすると、ＣＲＣを使用することで十分である可能性があり、各データ項目に関してＭＡＣを生成することと比べて、より少ない処理リソースしか消費しない可能性があることが、本出願人らによって認識されている。しかし、目標が、ハッカーまたは悪意のある主体がキャッシュ内容を変更するのを防止することであるとすると、暗号ソリューションが好ましい可能性があり、したがって、ＭＡＣなどの表現が使用されることが可能である。本発明は、任意の適切な技術が使用されることが可能であるので、いずれの特定の実施形態にも限定されない。
【００２２】
動作２１５で、キャッシュマネージャー１００が、データをキャッシュアドレスＹに書き込む要求をキャッシュデバイス１１０に発行する。また、キャッシュマネージャーは、表現を書き込む要求もキャッシュデバイス１１０に発行する。例えば、キャッシュマネージャー１００は、表現が、キャッシュアドレスＹに隣接する１つまたは複数のロケーションに書き込まれるべきこと、またはデータに関するキャッシュメタデータの中に、かつ／もしくは他の任意の技術を使用して格納されるべきことを指定することができる。前述したとおり、本発明は、いずれの特定のロケーションに表現を書き込むことにも限定されない（例えば、表現は、キャッシュデバイス１１０に書き込まれなくてもよい）。キャッシュに書き込まれる場合、表現は、所望される任意の仕方でデータに関連付けられることが可能である。
【００２３】
動作２２０で、キャッシュデバイス１１０が、その要求を受け取り、動作２２５で、データおよび表現を書き込むことによって、その要求を処理する。
動作２３０で、キャッシュマネージャー１００は、データをディスクアドレスＸに書き込む対応する要求を、キャッシュされるボリューム１２０に発行する。キャッシュされるボリューム１２０は、動作２３５で、この要求を受け取り、動作２４０で、データをアドレスＸに書き込むことによって、この要求を処理する。図２Ａには、動作２１５〜２２５のキャッシュへの書き込みの後に実行されるものとして示されるものの、本発明は、いずれの特定の実施形態にも限定されないので、動作２３０〜２４０は、動作２１５〜２２５と並行に、あるいは他の任意の適切な時点（複数可）で実行されてもよい。その後、プロセス２０Ａは完了する。
【００２４】
プロセス２０Ｂ（図２Ｂ）は、キャッシュに格納されたデータを読み取るように実行される動作を含む。動作２４５で、キャッシュマネージャー１００が、キャッシュされるボリューム１２０上のアドレスＸに格納されたデータを読み取る要求を受け取る。動作２５０で、キャッシュメタデータ（図示せず）を使用して、キャッシュマネージャー１００は、そのデータがキャッシュデバイス１１０上のアドレスＹに格納されていることを特定する。動作２５５で、キャッシュマネージャー１００は、アドレスＹに格納されたデータと、関連する表現をともに取り出す読み取り要求をキャッシュデバイス１１０に発行する。動作２６０で、この要求がキャッシュデバイス１１０によって受け取られ、また動作２６５で処理され、すると、キャッシュデバイス１１０は、結果をキャッシュマネージャー１００に戻す。
【００２５】
動作２７０で、キャッシュマネージャー１００が、キャッシュから取り出されたデータが検証され得るかどうかを判定する。一部の実施形態において、このことは、データの表現を再生成すること、および再生成された表現を、動作２１５で最初に生成された表現と比較することによって行われる。例えば、動作２７０が、データに関するＭＡＣまたはＣＲＣを再生成すること、およびそのＭＡＣまたはＣＲＣを、動作２６５でキャッシュから取り出された表現と比較することを含むことが可能である。
【００２６】
動作２７０で、表現が検証され得ると判定された場合、プロセスは、動作２７５に進み、キャッシュデバイス１１０から取り出されたデータが、読み取り要求を満足させるように供給され、その後、プロセス２０Ｂは、完了する。動作２７０で、表現が検証され得ないと判定された場合、プロセスは、動作２８０に進み、キャッシュマネージャー１００が、アドレスＹに格納されたデータを強制排除する（例えば、消去する、またはそれ以外でアクセスできなくする）要求をキャッシュデバイス１１０に発行する。次に動作２８５で、キャッシュマネージャー１００は、ディスク上のアドレスＸからデータを読み取る要求をキャッシュされるボリューム１２０に発行する。この要求は、動作２９０で受け取られ、動作２９５で処理され、処理されると、データがキャッシュマネージャー１００に戻される。次に動作２９９で、アドレスＸから読み取られたデータが、読み取り要求を満足させるように供給される。その後、プロセス２０Ｂは、完了する。
【００２７】
データ真正性を検証するための暗号ソリューションが使用される場合、表現を生成するのに使用される鍵（複数可）は、電力遷移が続いている間にキャッシュデバイス以外のロケーションに書き込まれて、ハッカーがそれらの鍵へのアクセスを得て、変更されたデータ項目に関する表現を再生成するのを防止することが可能である。例えば、一部の実施形態において、鍵は、許可のないアクセスを防止するようにディスクストレージの中に格納されることが可能である（例えば、コンピューターがシャットダウンされる際）。しかし、鍵は格納されなくてもよく、さらに、格納される場合、任意の適切なロケーションに存在することが可能であるので、本発明は、そのような実施形態に限定されない。例えば、格納された鍵は、システムブート中に利用可能であるオペレーティングシステムによって提供される任意の構成ストア（例えば、Ｗｉｎｄｏｗｓ（登録商標）におけるシステムレジストリー）の中に入れられてもよく、あるいは鍵格納が全く必要ないように、何らかのユーザー入力（例えば、パスワード）に基づいて再生成されてもよい。
【００２８】
キャッシュデバイス上に格納されたデータ項目の真正性を検証するための前述した実施形態は、単に例に過ぎず、真正性は、任意の適切な技術を使用して検証されることが可能であることを認識されたい。例えば、データ項目真正性は、データ項目が読み取られる際に後に再生成される、データ項目が書き込まれる際のデータ項目の少なくとも一部分の表現を生成することによって検証されなくてもよい。キャッシュから読み取られたデータ項目が真正であり、キャッシュに前に書き込まれたデータ項目と合致することを信頼できるように確実にする任意の適切な技術が、使用されることが可能である。本発明は、いずれの特定の実施形態にも限定されない。
ＩＩ．キャッシュデータ陳腐性を防止すること
前述したとおり、従来のオペレーティングシステムは、電力遷移中にディスク上に格納されたデータ項目に対して書き込み動作が実行されて、このことがキャッシュ内容を陳腐にする際、そのことを検出することができない。本発明の一部の実施形態は、これらの「オフライン書き込み」が行われた場合、そのことを検出して、キャッシュ内容が、電力遷移が生じた後にディスク上の格納されているデータを正確に反映することを確実にするための機構を提供する。
【００２９】
一部のオペレーティングシステム（例えば、マイクロソフトコーポレーションによって提供されるＷｉｎｄｏｗｓファミリーのオペレーティングシステム）では、いくつかの電力遷移（例えば、スタンバイモードおよびハイバネーションモード）のセマンティクスは、リムーバブルでないストレージデバイス（例えば、ディスクストレージ）上のデータが、電力遷移中に変更され得ないようになっている。このため、そのようなリムーバブルでない媒体上のデータに対応するキャッシュ内容は、一般に、陳腐にならない。しかし、コンピューターがシャットダウンされると、ディスク上のデータが変更されることを可能にするいくつものことが起こり得る。例えば、ユーザーが、そのディスクをそのコンピューター上の別のオペレーティングシステムにブートする、またはそのディスクを別のコンピューターに接続し、ディスク上に格納されたデータを変更することが可能である。さらに、前述したとおり、多くの従来のオペレーティングシステムのシャットダウンの機構は、シャットダウン中の何らかの時点で、キャッシュデバイスがオフにされ、オペレーティングシステムによってもはやアクセス可能でないが、オペレーティングシステムは、ディスクにアクセスし続けることが可能であるようになっている。このため、オペレーティングシステムは、キャッシュデバイス上にキャッシュされたディスク上のデータ項目を更新する可能性がある。キャッシュデバイスは、オフにされているため、オペレーティングシステムは、これらのキャッシュ内容も更新する方法を全く有さず、したがって、これらのキャッシュ内容は陳腐になる。
【００３０】
これら、およびその他の出来事に対処するのに、本発明の一部の実施形態は、シャットダウンが開始された後のディスク上に格納されたデータに対する変更を検出して、そのような変更によって陳腐になるキャッシュ内容が更新される、キャッシュから強制排除される、またはそれ以外の取り扱いをされることが可能であるようにするための技術を提供する。
【００３１】
キャッシュデバイスの電源が遮断された後に行われるシャットダウン動作中にディスクストレージに対して実行される書き込みを検出するのに、本発明の一部の実施形態は、書き込みレコーダー構成要素を使用する。書き込みレコーダー構成要素は、例えば、オペレーティングシステムのＩ／Ｏパスにおけるドライバーとして実施されることが可能であるが、本発明は、そのような実施形態に限定されない。例えば、書き込みレコーダー構成要素は、ハードウェアベースであってもよい。例として、ディスクストレージハードウェアが、或る期間中に行われた変更のセットを識別する、または或る期間中に変更が行われたかどうかを識別する能力をもたらす１つまたは複数のインタフェースを提供することも可能である。例えば、ディスクストレージハードウェアは、少なくともいくつかの記憶されたデータ項目が更新されていることを推測するのに使用され得るスピンアップ／パワーアップ／ブートカウンタを提供することが可能であり、少なくともいくつかのデータ項目が更新されている場合、ディスク上に記憶されたそのデータに対応するキャッシュ内容が強制排除されることが可能である（このことは、キャッシュデバイスを使用することが依然として相当な利益をもたらすように、頻繁に生じるべきではない）。本発明は、いずれの特定の実施形態にも限定されない。
【００３２】
一部の実施形態において、書き込みレコーダー構成要素は、シャットダウンが開始されると、活性になり、シャットダウンが完了するまで、ディスクストレージに対して実行されるすべての書き込みの記録をとるように構成される。その結果、コンピューターが後に再起動されると、これらの書き込みがキャッシュ内容に適用されることが可能である。例えば、コンピューターが再起動され、ディスクボリュームがオンラインになると、次に、キャッシュマネージャーが起動されることが可能であり、ディスクへの書き込みの記録をとることを始めることが可能である。キャッシュマネージャーは、書き込みレコーダー構成要素に照会して、キャッシュデバイスの電源が遮断された後に行われたオフライン書き込みを特定し、これらの書き込みを、起動中にキャッシュマネージャーが記録をとった書き込みとマージし、マージされた書き込みセットをキャッシュ内容に適用することができる。キャッシュ内容に書き込みを適用することは、例えば、書き込みが命令されたディスク上のデータに対応するキャッシュ内容を更新すること（例えば、これらのキャッシュ内容に同一の書き込み動作を実行すること）、これらのキャッシュ内容を強制排除すること、以上２つの組合せ（例えば、いくつかのキャッシュ内容に書き込み動作を適用するとともに、他のキャッシュ内容を強制排除すること）、または他の何らかの動作（複数可）を実行することを含むことが可能である。オフライン書き込みがキャッシュ内容に適用された後、書き込みレコーダー構成要素は、シャットダウンされることが可能であり、キャッシュデバイスがＩ／Ｏ要求に応えることを始めることが可能である。
【００３３】
図３は、オフライン書き込みの記録をとり、これらの書き込みをキャッシュ内容に適用するための例示的なプロセス３０を示す。詳細には、プロセス３００は、コンピューターのシャットダウン中、および後の再起動中にキャッシュマネージャー１００、書き込みレコーダー３００、キャッシュデバイス１１０、およびキャッシュされるボリューム１２０によって実行される動作を含む。
【００３４】
コンピューターシャットダウン中に行われる動作３０５で、キャッシュマネージャー１００が、書き込みレコーダー３００を活性化し、書き込みレコーダーによって記録にとられるべき書き込み動作のセット（すなわち、生成）を識別する「存続性識別子」を書き込みレコーダー３００に供給する。（存続性識別子の用法の例は、後段で詳細に説明される。）動作３１０で、キャッシュマネージャー１００が、存続性識別子、ならびにメモリーの中に格納されたキャッシュメタデータをキャッシュデバイス１１０に書き込む。シャットダウンプロセスのこの時点で、キャッシュデバイス１１０がオフにされ、キャッシュマネージャー１００によってアクセスできなくなる。
【００３５】
動作３１５で、書き込みレコーダー３００が、動作３０５で書き込みレコーダー３００に送られた存続性識別子をキャッシュされるボリューム１２０に書き込み、シャットダウン中にキャッシュされるボリューム１２０に対して実行される任意の書き込み動作の記録をとることを始める。例えば、書き込みレコーダー３００は、書き込み動作が実行されるディスク上のアドレス、および／またはそれらのアドレスに書き込まれたデータを示すログファイル、または他の１つまたは複数のデータ構造を、キャッシュされるボリューム１２０上、または他の何らかのロケーション（複数可）に作成することが可能である。動作３１５の完了時に、コンピューターのシャットダウン動作が終了している。
【００３６】
その後、コンピューターが再起動される。ブートプロセスの一環として、キャッシュされるボリューム１２０がオンラインにされ、書き込みレコーダー３００およびキャッシュマネージャー１００が再起動される。次に、キャッシュマネージャー１００が、キャッシュされるボリューム１２０に対して実行される書き込み動作の記録をとることを始めることが可能である。例えば、キャッシュマネージャー１００が、ログファイルを作成し、このログファイルをキャッシュデバイス１１０上、キャッシュされるボリューム１２０上、および／またはコンピューターのメモリー（図３に示さず）上に格納することが可能である。動作３２０で、書き込みレコーダー３００が、動作３１５でログ記録されたボリューム変更、ならびに動作３１５でキャッシュされるボリューム１２０に書き込まれた存続性識別子を読み取る。次に動作３２５で、これらのボリューム変更および存続性識別子が、キャッシュマネージャー１００に送られる。
【００３７】
書き込みレコーダー３００は、キャッシュデバイス１１０がオフにされた後、ディスクに対するすべての書き込みの記録をとることはできない可能性があることを認識されたい。例えば、ハードウェアデータ破損、タイミングの悪い停電、および／またはログファイルに書き込む際の問題により、書き込みレコーダー３００が、ディスクボリュームに対して実行されるすべてのオフライン書き込みの記録をとることはできなくなる可能性がある。そのような事例において、書き込みレコーダー３００は、動作３２５で、ログが、実行されたすべてのオフライン書き込みの完全で、正確なレコードであると書き込みレコーダー３００が確実に判定することができないことを、キャッシュマネージャー１００に示すことが可能である。このことが生じた場合、キャッシュマネージャー１００は、キャッシュ内容全体、またはキャッシュ内容の一部分（例えば、書き込みレコーダーがすべての書き込み動作の記録はとることができなかった特定のディスクボリュームに対応する）を、信頼できない可能性があるものとして強制排除することが可能である。図３の図示の残りの部分は、書き込みレコーダー３００がすべてのオフライン書き込みの記録をとることができるものと想定する。
【００３８】
動作３３０で、キャッシュマネージャー１００が、キャッシュデバイス１１０からメモリーの中にキャッシュメタデータおよび存続性識別子を読み込む。キャッシュマネージャー１００は、存続性識別子が検証され得るかどうかを判定する（このことは、後段でさらに説明される）。検証され得ない場合、キャッシュマネージャー１００は、キャッシュデバイス１１０の内容全体、または内容の一部分（例えば、存続性識別子が検証され得なかった特定のディスクボリュームに対応する）を強制排除することが可能である。存続性識別子が検証され得る場合、キャッシュマネージャー１００は、コンピューターが再起動されて以来、ディスクストレージに対して実行された任意の書き込み動作を、書き込みレコーダー３００によって記録にとられた任意の書き込み動作とマージする。例えば、１つまたは複数のログが、ディスク上の各アドレスに書き込まれたデータを示す場合、キャッシュマネージャー１００は、各アドレスに対して実行された最新の更新を選択し、その更新をメモリーに書き込むことができる。
【００３９】
一部の実施形態において、書き込みレコーダー３００は、コンピューターが再起動された後、書き込みを記録することを継続するように構成されることが可能であり、したがって、キャッシュマネージャー１００は、その時点から後に実行された書き込みを記録して、それらの書き込みを、書き込みレコーダー３００によって記録にとられた書き込みとマージしなくてもよい。代わりに、書き込みレコーダー３００が、単に、すべての書き込みのレコードをキャッシュマネージャー１００に供給することが可能である。
【００４０】
動作３３０で読み取られたキャッシュメタデータを使用して、次に動作３３５で、キャッシュマネージャー１００は、キャッシュデバイス１１０の内容に書き込みのセットを適用する。前述したとおり、書き込みを適用することは、キャッシュ内容を強制排除すること、キャッシュ内容を更新すること、以上の両方を行うこと、または他の何らかの動作を実行すること（複数可）を含むことが可能である。例えば、動作３１５で書き込みレコーダー３００によって記録にとられたオフライン書き込みが、対応するキャッシュ内容を強制排除することによって適用されることが可能である一方で、コンピューターが再起動して以来、キャッシュマネージャー１００によって記録にとられた書き込みが、それらの書き込みを反映するように対応するキャッシュ内容を更新することによって適用されることが可能である。本発明は、いずれの特定の実施形態にも限定されないので、キャッシュ内容に書き込み動作を適用することは、任意の適切な仕方で実行されることが可能である。
【００４１】
動作３３５の完了時に、図３のプロセスは完了する。
シャットダウン中に行われない書き込み動作が同じく、あるいは代替として記録にとられることが可能であるので、本発明は、シャットダウンが開始された際に活性になるように構成された書き込みレコーダー構成要素を使用することに限定されないことを認識されたい。例えば、一部の実施形態において、キャッシュデバイスは、或る期間にわたってアクセスできなくなる可能性があり得る。例えば、キャッシュデバイスが１つまたは複数のネットワークを介してアクセスされる場合、接続性が失われる可能性があり、あるいはキャッシュデバイスがコンピューターから取り外し可能である場合、突然の（例えば、意図しない）取り外しが生じる可能性がある。その結果、一部の実施形態は、シャットダウン中に行われる書き込みだけでなく、ディスクに対して実行されるすべての書き込み（またはその一部分）の記録をとる書き込みレコーダーと、依然としてオンライン状態である間、キャッシュ「スナップショット」を定期的にキャプチャーするように構成されたキャッシュデバイスとを使用することが可能である。このため、キャッシュが、或る期間にわたってアクセスできなくなり、後に再接続された場合、最新のキャッシュスナップショットは、完全に再構築されなければならないのではなく、書き込みレコーダーによって記録にとられた書き込み動作を使用して更新されることが可能である。
【００４２】
図３の例示的なプロセス３０は、シャットダウン中にオペレーティングシステムによって実行されるオフライン書き込みを検出することが可能であるが、シャットダウンが完了した後にディスクに対して実行されるオフライン書き込みを検出するのに他の方策が必要とされる可能性があることも認識されたい。そのような書き込みは、例えば、ユーザーが、シャットダウン後に別のオペレーティングシステムにディスクをブートした場合に、またはシャットダウン後にコンピューターからディスクを取り外して、ディスクを別のコンピューターに接続し、ディスク上に格納されたデータを変更した場合に行われる可能性がある。
【００４３】
シャットダウン後に行われる（例えば、別のオペレーティングシステムによって）オフライン書き込みの記録をとろうと試みることに関連する困難を認識して、本発明の一部の実施形態は、代わりに、そのような書き込みが行われることを防止しようと試みる。例えば、一部の実施形態は、シャットダウン後に書き込みレコーダー構成要素を提供しないオペレーティングシステムによっては、或る特定のディスクボリュームにアクセスできないようにしようと試みる。このことは、多数の仕方のいずれにおいて達せられることも可能である。
【００４４】
一部の実施形態において、書き込みレコーダー３００は、ディスクボリュームが、オフライン書き込みの記録をとる書き込みレコーダー構成要素を提供しないオペレーティングシステムによってはマウントできなくなるように、ディスクボリュームに印を付けることが可能である。例えば、書き込みレコーダー３００は、ボリューム上で使用されるファイルシステムのタイプを示すボリューム識別子を変更することが可能である。これに関して、ボリューム識別子は、オペレーティングシステムが、ボリューム上にデータを格納するのに使用されたファイルシステムのタイプを識別することができるようにして、その結果、オペレーティングシステムが、ボリューム上に格納されたデータの構造、ファイルがどこで見出されるかなどを理解することを可能にすることが、当業者には認識されよう。例えば、ボリューム上にデータを格納するのにＮＴＦＳ（ＮＴファイルシステム）ファイルシステムが使用されたことをボリューム識別子が示す場合、このボリュームをマウントしようと試みる別のオペレーティングシステムは、このボリューム上のデータを解析し、そのデータにアクセスするのにＮＴＦＳファイルシステムが必要とされることを理解する。ボリューム識別子が、ボリューム上にデータを格納するのに使用されたファイルシステムのタイプの指示を全く与えなかったとすると、ほとんどのオペレーティングシステムは、このボリューム上に格納されたデータの構造を理解する信頼できる方法が全く存在しないので、このボリュームをマウントすることができない。このため、本発明の一部の実施形態は、ディスクボリュームをアクセスできなくするようにディスクボリュームのボリューム識別子を変更して、その結果、ユーザーが、このディスクボリュームを別のオペレーティングシステムにブートして、ボリューム上に格納されたデータにオフライン変更を行うことを防止する。
【００４５】
ボリューム識別子が変更されている場合でも、一部のオペレーティングシステムは、ボリューム上にデータを格納するのに使用されたファイルシステムのタイプを識別することができる可能性があることを認識して、本発明の一部の実施形態は、オペレーティングシステムがボリュームをマウントした際、そのことを検出するための機構を提供する。これに関して、ディスクボリュームをマウントするのに、いずれのオペレーティングシステムも、このボリューム上のデータがアクセスされることを許すようにボリューム識別子を更新する（例えば、このボリューム上にデータを格納するのにＮＴＦＳファイルシステムが使用されたことを示すように）必要がある。再起動の後、いずれのそのような更新も容易に検出可能である。そのような更新が検出された場合、本発明の一部の実施形態は、前回のシャットダウン以来、このボリュームの内容が変更されているものと想定し、このボリューム上に格納されたデータに対応するキャッシュ内容を強制排除することが可能である。
【００４６】
本発明の一部の実施形態は、書き込みレコーダー構成要素をやはり使用する別のオペレーティングシステムにディスクボリュームがブートされることが可能である能力を提供する。例えば、書き込みレコーダー構成要素を提供する或るオペレーティングシステムを実行している１つのコンピューターからディスクが取り外され、書き込みレコーダー構成要素を提供する別のオペレーティングシステムに、このディスクをブートする場合、その別のオペレーティングシステムは、このボリュームがキャッシュされている可能性があることを示す変更されたボリューム識別子を認識するように構成されることが可能である。その結果、その別のオペレーティングシステムは、第１のオペレーティングシステムによって作成された（例えば、ボリューム上に格納された）オフライン書き込みのログに追加を行うことができる。
【００４７】
或るオペレーティングシステムによってはディスクボリュームがマウントできなくなるようにするように設計された前述の実施形態は、いくつかの機能を実行するのにボリューム識別子に依拠するいくつかのアプリケーション（例えば、バックアップアプリケーション）に問題をもたらす可能性がある。これらのアプリケーションでは、ボリューム識別子が変更された場合、ボリュームは、認識できなくなり、そのため、バックアップされない可能性がある。したがって、本発明の一部の実施形態は、シャットダウン後にファイルシステムがマウントされたかどうかを判定するための機構を提供する。マウントされている場合、ファイルシステムの中のデータに変更が行われているものと想定され、ファイルシステムの中のデータに対応するすべてのキャッシュ内容は、強制排除されることが可能である。
【００４８】
一部の実施形態は、シャットダウン時にファイルシステムログを、ファイルシステムをマウントしようと試みる任意のオペレーティングシステムに、何らかの仕方で、このログを変更する（例えば、このログのロケーションを変更する、新たなエントリを追加するなど）ことを要求する状態にすることによって、シャットダウン後のファイルシステムのマウントを検出することが可能である。例えば、書き込みレコーダー３００が、オフライン書き込みをログ記録するタスクの一環として、ファイルシステムがマウント解除される際にファイルシステムログのロケーションおよび／または内容を記録しておく（例えば、このログ自体の中に）ことが可能である。ファイルシステムをマウントしようと試みるいずれのオペレーティングシステムも、このログを変更しなければならないため（例えば、ファイルシステムがＮＴＦＳファイルシステムであった場合、このファイルシステムをマウントしようと試みるオペレーティングシステムは、ログにエントリを追加する）、再起動後にログが変更されていない場合、このファイルシステムは、電力遷移中に別のオペレーティングシステムによってマウントされておらず、したがって、このファイルシステムの中に格納されたデータに対応するキャッシュ内容は、陳腐になっていないものと想定される。逆に、このログが何らかの仕方で変更されている（例えば、ログのロケーションが変化している、エントリが追加されているなど）場合、このファイルシステムは、別のオペレーティングシステムによってマウントされており、このファイルシステムの中に格納されたデータは変更されており、このファイルシステムの中に格納されたデータに対応するキャッシュ内容は陳腐になっているものと想定される。このため、これらのキャッシュ内容は強制排除されることが可能である。
【００４９】
オフライン書き込みを防止する機構を提供することに加えて、本発明の一部の実施形態は、キャッシュ内容の一貫性のない生成に対処する能力を提供する。キャッシュ内容の一貫性のない生成は、多数の理由のいずれで生じることも可能である。一例は、第１のキャッシュデバイス、および第２のキャッシュデバイスが接続されている第１のコンピューター、および第２のコンピューターが、本明細書で説明される技術を使用して、電力遷移をまたいでキャッシュ内容を存続させる場合に生じる可能性がある。第２のキャッシュデバイスが第１のコンピューターに接続されており（または第１のキャッシュデバイスが第２のコンピューターに接続されており）、第１のコンピューターが再起動された場合、Ｉ／Ｏ要求を満足させるのに第２のキャッシュデバイスから誤ったデータが供給される可能性がある。このことは、第１のコンピューターのオペレーティングシステムが、第２のキャッシュデバイスの内容を、陳腐（オフライン書き込みがキャッシュ内容に適用されている可能性があるので）ではなく、真正である（キャッシュから戻されたデータの再生成された表現が、最初に生成された表現と合致する可能性があるので）と見なす可能性があるためである。第１のキャッシュデバイスが或るコンピューターに接続されており、このコンピューターがシャットダウンされ（その結果、キャッシュ内容を存続させる）、このコンピューターが再起動され、第２のキャッシュデバイスが接続され、さらにこのコンピューターが再びシャットダウンされた（その結果、キャッシュ内容を再び存続させる）場合、別の例が生じる可能性がある。このコンピューターが再び再起動され、第１のキャッシュデバイスが接続された場合、第１のキャッシュデバイスがキャッシュ内容の最新の生成を格納していないと判定する信頼できる方法が全く存在しないので、Ｉ／Ｏ要求を満足させるのに誤ったデータが供給される可能性がある。
【００５０】
一部の実施形態は、キャッシュ内容の一貫性のない生成を識別して、前回のシャットダウンに先立って存続させられたキャッシュ内容が、Ｉ／Ｏ要求を満足させるのに誤って使用されないようにする能力を提供する。一部の実施形態において、この能力は、多数の仕方のいずれかにおいて、シャットダウンが開始されると生成されることが可能な（例として）、一意存続性識別子を介して提供される。例えば、ＧＵＩＤおよび／または暗号乱数発生器が、この目的で使用されることが可能である。図３を参照して前述したとおり、存続性識別子は、キャッシュデバイス上に（例えば、キャッシュメタデータの中に、もしくはキャッシュメタデータと一緒に）格納されるとともに、コンピューター上（例えば、ディスク上および／またはメモリー上）にも格納されて、コンピューターが起動された際に検証される（例えば、この２つのバージョンを比較することによって）ことが可能である。検証が不成功であった場合、キャッシュ内容は、前に存続させられたキャッシュ生成を表すものとして強制排除されることが可能である。
【００５１】
前述した認証鍵の場合と同様に、存続性識別子を生成するのに使用されるいずれの鍵も、電力遷移の続く間、キャッシュデバイス以外のロケーションに書き込まれることが可能である。例えば、一部の実施形態において、書き込みレコーダー構成要素は、これらの鍵、ならびに存続性識別子をディスクストレージに書き込むことが可能である（例えば、シャットダウン時に）。しかし、当業者は、鍵が保存され得る多数の代替のロケーションを構想することができるので、本発明は、そのような実施形態には限定されない。鍵は、例えば、システムブート中に利用可能なオペレーティングシステムによって提供される任意の構成ストア（例えば、Ｗｉｎｄｏｗｓ（登録商標）におけるレジストリー）の中に保持されてもよい。
ＩＩＩ．キャッシュメタデータ
前述したとおり、キャッシュメタデータは、データ項目が格納されたディスクアドレスと、それらのデータ項目がキャッシュされたキャッシュデバイス上の対応するアドレスの間のマッピングを提供することが可能である。本発明の一部の実施形態は、システムランタイム動作中にキャッシュメタデータを格納するのに要求されるメモリーの量を大幅に低減する、キャッシュメタデータを格納するための能力を提供する。
【００５２】
さらに、一部の実施形態は、電力遷移、またはキャッシュデバイスをオフラインにする他の任意のイベント（例えば、コンピューターからのキャッシュデバイスの取り外し、ネットワークキャッシュデバイスをアクセスできなくするネットワーク障害など）をまたいでキャッシュメタデータが信頼されることを可能にして、コンピューターが再起動された際、および／またはキャッシュデバイスがオンラインにされた際にキャッシュ内容が確実にアクセスされ得るようにする技術を提供する。これに関して、いくつかのタイプの電力遷移（例えば、スタンバイモードおよびハイバネーションモード）では、メモリーの内容がスタンバイ遷移中、およびハイバネーション遷移中に存続させられるので、単にメモリー（すなわち、ＲＡＭ）の中にキャッシュメタデータを格納することが容認できることを認識されたい。しかし、再起動中、システムメモリーの内容は存続させられない。このため、本発明の一部の実施形態は、シャットダウン中に何らかの不揮発性媒体／複数の不揮発性媒体の上にキャッシュメタデータを格納し、その後、再起動後に復元されることを規定する。例えば、キャッシュメタデータは、キャッシュデバイス上、および／または別個の１つまたは複数の不揮発性媒体上に格納されることが可能である。さらに、一部の実施形態は、キャッシュメタデータのいくつかの部分を他のキャッシュメタデータから導き出すことができることが可能であり、したがって、すべてのキャッシュメタデータを格納することは要求されない。
【００５３】
一部の実施形態は、キャッシュメタデータの真正性を検証するために上記のセクションＩで説明される技術を使用して、キャッシュデバイスがオフラインになった際（例えば、コンピューターシャットダウン中、コンピューターからのキャッシュデバイスの取り外し、ネットワークキャッシュデバイスをアクセスできなくするネットワーク障害など）、そのことを検出して、メタデータへの不注意による変更、または悪意のある変更を防止するようにすることが可能である。例えば、キャッシュデバイスがオンラインになると、キャッシュマネージャーが、図２Ａ〜図２Ｂを参照して前述した技術を使用して、メタデータがメモリーにロードされた際にメタデータの真正性を検証することが可能である。キャッシュメタデータの真正性が検証され得ない場合、対応するキャッシュ内容は、前述したとおり、ディスク上に格納されたデータに基づいて更新される、強制排除される、またはそれ以外の処理をされることが可能である。
【００５４】
一部の実施形態において、キャッシュメタデータは、シャットダウン中、および再起動時のロード中に保存されるべきメタデータの量を低減するように圧縮されることが可能である。メタデータの圧縮は、メタデータについての情報を含む別個の１つの情報（例えば、キャッシュの中のヘッダ）を保存することを要求する可能性があるため、前述した技術を使用して、再起動時にも、この情報の真正性が検証されることが可能である。
【００５５】
本発明の一部の実施形態は、いずれの一時点でもメモリーの中に格納されるキャッシュメタデータの量を大幅に低減するようにキャッシュメタデータを格納するための技術を提供して、その結果、メモリーにキャッシュメタデータをロードするのに要求される時間、およびメモリーからキャッシュメタデータをオフロードするのに要求される時間（例えば、ランタイム中、および起動／シャットダウン動作中の）を短縮するとともに、キャッシュメタデータのメモリー「フットプリント」を大幅に小さくする。これに関して、比較的大きい記憶容量を有するキャッシュデバイスでは、キャッシュ内容を管理するのに相当な量のメタデータが要求される可能性があることを認識されたい。例えば、１６ギガバイトの記憶容量を有するキャッシュデバイスは、３２ギガバイトまでの圧縮されたデータを格納することができる可能性がある。一部の実施形態において、ディスクアドレスは、４キロバイトのディスクストレージを表す「データユニット」でキャッシュメタデータの中で反映されることが可能である。このため、３２ギガバイトのデータのロケーションの記録をとるのに、８００万の異なるデータユニットが必要とされる。この８００万のデータユニットのそれぞれが、１６バイトマッピング（すなわち、ディスクアドレスからキャッシュアドレスへの）を使用するキャッシュメタデータの中で表される場合、これらのマッピングは、１２８メガバイトのストレージを要求する。メモリーの中に１２８メガバイトのキャッシュメタデータを格納することは、多くのコンピューターにおいてメモリーの不必要に大きい部分を占有することを本出願人らは認識している。さらに、シャットダウン中にメモリーから不揮発性媒体に１２８メガバイトのキャッシュメタデータを書き込むのに要求される時間、および再起動時に不揮発性媒体からメモリーに１２８メガバイトのキャッシュメタデータを復元するのに要求される時間は、法外に時間がかかり、過度の量のプロセッサーリソースを消費する。
【００５６】
キャッシュメタデータの量が容易に低減され得ないことを認識して、本発明の一部の実施形態は、キャッシュメタデータを格納するのに必要とされるストレージリソース、ならびにシャットダウン時にキャッシュメタデータを保存し、起動時にキャッシュメタデータを復元するのに要求される時間および処理リソースを低減するように設計された技術を提供する。
【００５７】
一部の実施形態において、このことは、１つまたは複数の階層データ構造（例えば、ツリー、マルチレベルアレイなど）の中にキャッシュメタデータを格納することによって達せられる。階層データ構造を使用することにより、階層のより高いレベルだけがメモリーの中に格納されながら、階層のより低いレベルが不揮発性媒体（例えば、キャッシュデバイス）上に格納されることを許すことを可能にすることができる。例えば、一部の実施形態では、階層のより高いレベルだけがメモリーの中に格納され、したがって、全体として、相当な記憶容量を有するキャッシュデバイスをサポートするのに必要とされる量のキャッシュメタデータが格納されながらも、メモリーの中でキャッシュメタデータによって占有される「フットプリント」が大幅に低減されることが可能である。もちろん、階層のより高いレベルだけをキャッシュメタデータの中に格納することは、一部の実施形態として、階層のより低いレベルに保持される一部の情報もメモリーの中に格納することを規定して、この情報への繰り返しのアクセスに関連するＩ／Ｏオーバーヘッドを低減するようにすることも可能である。本発明は、いずれの特定の仕方で実施されることにも限定されない。
【００５８】
システム動作中、読み取り要求が処理される際、読み取り動作を実行するように不揮発性媒体から（すなわち、階層のより低いレベルから）読み取られるキャッシュメタデータは、同一のディスク／キャッシュアドレスに対する後の読み取り要求に関して、そのキャッシュメタデータがより迅速にアクセスされ得るように、メモリーの中に「ページイン」される（すなわち、記憶媒体から読み込まれる）ことが可能である。コンピューターが後にシャットダウンされる際、および／またはキャッシュデバイスがオフラインにされる際、階層のより高いレベルに格納されたキャッシュメタデータ、ならびにメモリーの中にページインされた階層のより低いレベルに格納されるべきキャッシュメタデータだけが、不揮発性媒体に保存されればよいことが可能である。このため、シャットダウン時にメモリーから不揮発性ストレージにキャッシュメタデータを移すのに要求される時間、および再起動時に不揮発性ストレージからメモリーにキャッシュメタデータを復元するのに要求される時間が、大幅に短縮されることが可能である。
【００５９】
本発明の一部の実施形態は、キャッシュメタデータの少なくとも一部分を格納するのにＢ＋ツリーを使用する。当業者には認識されるとおり、Ｂ＋ツリーは、大きい分岐数を使用することが可能であり、したがって、使用される階層におけるレベルの数を減らすことが可能である。前段で与えられる例を使用して、キャッシュメタデータの中で８００万のデータユニットが表されるべきであり、２００という分岐数を有するＢ＋ツリーが使用される（したがって、階層における各ノードは、２００の「子」ノードを有する）場合、このメタデータを格納するのに３つのレベルしか有さないデータ構造、すなわち、最高レベルにおける単一の「ルート」ノード、第２のレベルにおける２００のノード、および第３のレベルにおける４万のノードを有し、この４万のノードのそれぞれが、２００のデータユニットに対するポインタを含む（つまり、合計で８００万のデータユニット）データ構造で十分である。
【００６０】
図４は、ルートノード４００と、レベル２ノード４１０１−２００と、レベル３ノード４２０１−２００と含む、この例示的なＢ＋ツリーを示す。各ノードは、階層における、より低いレベルのノードに対するポインタによってそれぞれ分離される２００の要素を含む。例えば、ルートノード４００における要素４０２は、ポインタ４０１および４０３によって境界を定められる。所与の鍵（例えば、ディスクアドレス）に関連付けられた値（例えば、キャッシュアドレス）は、ノードにおける要素の左側または右側のポインタをたどることによって特定されることが可能であり、要素の左側のポインタは、その鍵が、その要素より小さい場合にたどられ、要素の右側のポインタは、その鍵が、その要素より大きい場合にたどられる。例えば、要素４０２未満である鍵の値を特定するために、ポインタ４０１がレベル２ノード４１０１までたどられ、要素４０２より大きいが、要素４０４より小さい鍵の値を特定するために、ポインタ４０３がレベル２ノード４１０２（図示せず）までたどられ、以下同様である。同様に、レベル２ノードで、要素の左側または右側のポインタ（鍵がノードにおける要素より小さいか、大きいかに依存する）がレベル３ノードまでたどられる。レベル３で、最終ポインタがその値までたどられ（やはり、その鍵が、そのノードにおける要素より小さいか、大きいかに基づいて）、レベル３における各ポインタは、キャッシュメタデータにおける８００万のデータユニットの１つを参照する。
【００６１】
大きい分岐数を有するＢ＋ツリーは、ほとんどすべてのノードが階層の最下レベルに位置する、比較的「平坦な」階層をもたらすことを認識されたい。つまり、ツリーにおける合計４０，２０１のノードのうち、４０，０００が最低レベルに存在する。本発明の一部の実施形態は、起動時に階層の最上の２つのレベルだけをメモリーに復元することによって、このことを活用する一方で、階層の最低レベルにおけるキャッシュメタデータは、必要とされるまで、キャッシュデバイス上に格納される（例えば、そのようなキャッシュメタデータは、読み取り要求が処理される際、レイジーロードされる際などに、オンデマンドでメモリーにロードされることが可能である）。階層データ構造の一部分だけがメモリーの中に格納されるため、キャッシュメタデータは、キャッシュメタデータの全体、または大部分がメモリーの中に保持されたとした場合に要求されるのと比べて、メモリーのはるかに小さい部分しか占有しないことが可能である。さらに、コンピューターがシャットダウンされる際、最上の２つのレベルにおけるデータ、および動作中にメモリーにロードされたデータだけが、キャッシュデバイス上に格納されればよい。その結果、起動動作もシャットダウン動作も迅速に、効率的に実行されることが可能である。
【００６２】
このため、本発明の一部の実施形態は、キャッシュデバイス上に格納された階層の別のレベル（前述の例では、レベル３）のノードを参照する、メモリーの中に格納された階層の１つのレベル（前述の例では、階層のレベル２）のノードにおけるポインタを提供する。例えば、キャッシュされたデータ項目に関する読み取り要求が受け取られると、本発明の実施形態は、メモリーの中に格納された階層の１つまたは複数のレベルを通って、その後、キャッシュの中に格納された階層のより低いレベルにおけるメタデータまでポインタをたどり、キャッシュの中にデータ項目が格納されているアドレスを特定する。一部の実施形態において、データ項目に関するキャッシュアドレスが特定されると、このアドレスは、その項目を読み取る後の要求が、キャッシュデバイスからキャッシュメタデータを読み取る必要なしに実行され得るように、メモリーの中に格納されることが可能である。
【００６３】
図５は、本発明の一部の実施形態によるキャッシュメタデータを管理するための例示的なシステム５０を示す。図５は、ともにコンピューター（図示せず）によってアクセス可能であるメモリー５００とキャッシュデバイス１１０を示す。コンピューターが起動されると、Ｂ＋ツリーなどの階層データ構造の１つまたは複数のレベルを備えるキャッシュメタデータが、動作５０５でメモリー５００にロードされる。説明のために前述の例を使用すると、キャッシュメタデータを格納するのに３レベル階層データ構造が使用され得るように、キャッシュメタデータの中で表された８００万のデータユニットが存在する場合、階層の最上の２つのレベルがメモリー５００にロードされることが可能である。もちろん、８００万より多い、または少ないデータユニットがメタデータの中で表され、３つより多い、または少ないレベルを有する階層データ構造が使用されるべき場合、階層の異なる数のレベルがメモリー５００にロードされることが可能である。
【００６４】
その後、キャッシュの中に保持されるデータ項目に読み取り要求が向けられると、データ項目が格納されたキャッシュアドレスが、キャッシュデバイス１１０の中に格納された階層のレベル（複数可）に格納されたキャッシュメタデータにアクセスすることによって特定される。次に、このキャッシュメタデータがメモリー５１０の中に格納されて、そのデータ項目に対する後の読み取り、または書き込みが、そのデータ項目が格納されたキャッシュアドレスを特定するのにキャッシュデバイス上に格納されたキャッシュメタデータを読み取る必要なしに、実行され得るようになる。代わりに、キャッシュアドレスは、メモリーから読み取られることが可能であり、このことは、キャッシュに対する読み取りと比べて、より迅速に実行されることが可能である。
【００６５】
後に、コンピューターがシャットダウンされる際、メモリーの中に格納されたキャッシュメタデータ（すなわち、動作５０５でメモリーにロードされた階層のレベルに格納されたメタデータ、および動作５１０でメモリーに書き込まれた、読み取り要求を満足させるのに使用された任意のメタデータ）が、動作５１５でキャッシュデバイス５００にロードされる。メモリーの中に格納されるキャッシュメタデータが比較的少量である結果、シャットダウンは、多くの処理リソースを要求することなしに、迅速に実行されることが可能である。
【００６６】
Ｂ＋ツリーは、キャッシュメタデータを格納するのに使用され得る多数のタイプのデータ構造のうちの１つに過ぎず、他のタイプのデータ構造（例えば、ＡＶＬツリー、レッドブラックツリー、バイナリーサーチツリー、Ｂツリー、ならびに／または他の階層データ構造および非階層データ構造）が使用されてもよいことを認識されたい。本発明は、キャッシュメタデータを格納するのにいずれか１つのデータ構造またはデータ構造の組合せを使用することに限定されない。
【００６７】
一部の実施形態は、任意の一時点でメモリーの中に保持されるべきキャッシュメタデータの「目標量」を規定することが可能である。この目標量は、任意の適切な仕方で決定されることが可能である。例えば、目標量は、コンピューターに利用可能な物理的メモリーの量のパーセンテージであることが可能である。例えば、コンピューターが１ギガバイトのメモリーを有する場合、２メガバイトのキャッシュメタデータ（例として）が、任意の一時点でメモリーの中に格納されることが可能である。このため、コンピューターがシャットダウンされる際、２メガバイトのキャッシュメタデータがキャッシュデバイスにロードされるだけでよい。
【００６８】
一部の実施形態において、キャッシュメタデータは、循環するようにメモリーに出し入れされることが可能である。例えば、キャッシュメタデータの目標量がメモリーの中に既に格納されており、キャッシュデバイスからキャッシュメタデータが読み取られることを要求する読み取りが実行される場合、そのメタデータが、メモリーに「ページイン」されることが可能であり、他のキャッシュメタデータ（例えば、最も古くアクセスされた）が消去されることが可能である。例えば、キャッシュメタデータは、キャッシュデバイスに書き込まれた後に消去されることが可能である。代替として、システムは、キャッシュメタデータが、前回に書き出されて以来、変更されているかどうかを判定することが可能であり、変更されていない場合、キャッシュメタデータは、単に消去されて、さもなければキャッシュメタデータを書き込むのに要求される時間および処理リソースが解消されることが可能である。前述した技術を使用して、メモリーの中のキャッシュメタデータによって占有される小さい「フットプリント」が保持されることが可能である。
【００６９】
図６は、或る例を示す。具体的には、図６に示されるプロセス６０は、前述した技術を使用してキャッシュメタデータを読み取るのにキャッシュマネージャー１００によって実行され得る動作を含む。
【００７０】
プロセス６００の開始時に、ディスクアドレスＸに格納されたデータを読み取る要求が、動作６０５で受け取られる。動作６１０で、データが格納されたキャッシュアドレスが、メモリーの中に格納されたキャッシュメタデータから識別され得るかどうかの判定が行われる。識別され得る場合、プロセスは、動作６１５に進み、識別されたキャッシュアドレスが特定され、その後、動作６２０でキャッシュデバイス１１０に読み取り要求を発行するのに使用される。その後、プロセス６０は完了する。メモリーの中に格納されたキャッシュメタデータを使用してキャッシュアドレスが識別され得ない場合、プロセスは、動作６２５に進み、キャッシュデバイス１１０からキャッシュメタデータが読み取られて、データが格納されたキャッシュアドレスが特定される。動作６２５で識別されたキャッシュオフセットを使用して、動作６２０で、識別されたキャッシュオフセットに読み取り要求が発行され、その後、プロセス６０は完了する。
【００７１】
キャッシュデバイス上にキャッシュメタデータを格納することは、起動中、およびシャットダウン中にキャッシュメタデータをロードし、復元するプロセスをスピードアップすることが可能であるだけでなく、起動中、およびシャットダウン中に実行されるシステム動作をスピードアップすることもできることを認識されたい。これに関して、シャットダウンおよび起動は、しばしば、いくつかのデータ項目への複数回のアクセスを含み、キャッシュデバイスに対する２回の読み取り動作を実行することは、通常、ディスクストレージに対して１回の読み取り動作を実行することより速い。その結果、シャットダウン中、および／または起動中にアクセスされるデータ項目と、このデータ項目のロケーションを指定するメタデータがともに、キャッシュの中に格納されていた場合、キャッシュに対する２回の読み取り（すなわち、キャッシュメタデータにアクセスして、項目のロケーションを特定する読み取り、および項目自体にアクセスする第２の読み取り）は、通常、ディスクに対する単一回の読み取りと比べて、より迅速に実行され得るので、そのデータ項目は、そのデータ項目がディスク上に格納されていた場合と比べて、より迅速にアクセスされることが可能である。このため、シャットダウン中、および起動中に実行される個々の動作が速められることが可能である。さらに、キャッシュからのキャッシュメタデータの第１の読み取り中、項目が格納されているアドレスがメモリーにページインされると、メモリーに対する読み取りは、通常、キャッシュに対する読み取りと比べて、より迅速に実行され得るので、次に、そのデータ項目の後の読み取りが、さらにより迅速に実行されることも可能である。
【００７２】
本発明の特徴を実施するためのシステムおよび方法の様々な態様は、図７に示される例示的なコンピューターシステム７００のような、１つまたは複数のコンピューターシステム上で実施されることが可能である。コンピューターシステム７００は、入力デバイス（複数可）７０２、出力デバイス（複数可）７０１、プロセッサー７０３、メモリーシステム７０４、およびストレージ７０６を含み、以上のすべては、１つまたは複数のバス、スイッチ、ネットワーク、および／または他の任意の適切な相互接続を備えることが可能な相互接続機構７０５を介して直接に、または間接的に結合される。入力デバイス（複数可）７０２は、ユーザーまたはマシン（例えば、人間の操作者）から入力を受け取り、出力デバイス（複数可）７０１は、ユーザーまたはマシン（例えば、液晶ディスプレイ）に情報を表示する、または伝送する。プロセッサー７０３は、通常、他のコンピュータープログラムの実行を制御する、オペレーティングシステムと呼ばれるコンピュータープログラム（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓファミリーのオペレーティングシステム、または他の任意の適切なオペレーティングシステム）を実行し、さらにスケジューリング、入出力デバイス制御および他のデバイス制御、アカウンティング、コンパイル、ストレージ割り当て、データ管理、メモリー管理、通信制御およびデータフロー制御を提供する。一緒になって、プロセッサーとオペレーティングシステムは、アプリケーションプログラムおよび他のコンピュータープログラム言語が書かれるコンピュータープラットフォームを定義する。
【００７３】
また、プロセッサー７０３は、１つまたは複数のコンピュータープログラムを実行して、様々な機能を実施することもできる。これらのコンピュータープログラムは、手続き型プログラミング言語、オブジェクト指向プログラミング言語、マクロ言語、または以上の組合せを含む任意のタイプのコンピュータープログラム言語で書かれることが可能である。これらのコンピュータープログラムは、ストレージシステム７０６の中に格納されることが可能である。ストレージシステム７０６は、揮発性媒体または不揮発性媒体の上に情報を保持することができ、固定型であっても、リムーバブルであってもよい。ストレージシステム７０６は、図８により詳細に示される。
【００７４】
ストレージシステム７０６は、コンピュータープログラムを規定する、またはそのプログラムによって使用されるべき情報を規定する信号が格納されるコンピューター可読の、書き込み可能な不揮発性記録媒体８０１を通常、含む。媒体は、例えば、ディスクまたはフラッシュメモリーであることが可能である。通常、動作中において、プロセッサー７０３は、媒体８０１と比べて、プロセッサー７０３による情報への、より迅速なアクセスを可能にする不揮発性メモリー８０２（例えば、ランダムアクセスメモリー、すなわちＲＡＭ）に不揮発性記録媒体８０１からデータが読み込まれるようにする。メモリー８０２は、図８に示されるとおり、ストレージシステム７０６内に配置されても、図７に示されるとおり、メモリーシステム７０４内に配置されてもよい。プロセッサー７０３は、一般に、集積回路メモリー７０４、８０２内のデータを操作し、次に、処理が完了した後、媒体８０１にそのデータをコピーする。媒体８０１と集積回路メモリー素子７０４、８０２の間のデータ移動を管理するための様々な機構が知られており、本発明は、それらに限定されない。また、本発明は、或る特定のメモリーシステム７０４またはストレージシステム７０６に限定されることもない。
【００７５】
さらに、本発明の実施形態は、オペレーティングシステムのＩ／Ｏスタックにおけるドライバーとして実施されるキャッシュマネージャー構成要素を使用することに限定されることもない。オペレーティングシステム、または１つもしくは複数のスタンドアロン構成要素によってそれぞれが実施されることが可能な任意の適切な構成要素または構成要素の組合せが、代替として、またはさらに使用されてもよい。本発明は、いずれの特定の実施形態にも限定されない。
【００７６】
本発明の前述の実施形態は、多数の仕方のいずれで実施されることも可能である。例えば、前述の機能は、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組合せを使用して実施されることが可能である。ソフトウェアで実施される場合、ソフトウェアコードは、単一のコンピューターにおいて提供されるか、複数のコンピューター間で分散されるかにかかわらず、任意の適切なプロセッサーまたはプロセッサーの集合の上で実行されることが可能である。これに関して、本明細書で説明される機能を実行するいずれの構成要素または構成要素の集合も、前述した機能を制御する１つまたは複数のコントローラと一般的に考えられ得ることを認識されたい。１つまたは複数のコントローラは、専用ハードウェアで、または前述した機能を実行するようにマイクロコードまたはソフトウェアを使用してプログラミングされた１つまたは複数のプロセッサーを使用することによってなど、多数の仕方で実施されることが可能である。コントローラがシステム動作のためのデータを格納する、または供給する場合、そのようなデータは、中央リポジトリーの中に、複数のリポジトリーの中に、または中央リポジトリーと複数のリポジトリーの中に格納されることが可能である。
【００７７】
さらに、（クライアントまたはサーバ）コンピューターは、ラックマウント型のコンピューター、デスクトップコンピューター、ラップトップコンピューター、タブレットコンピューター、または他のタイプのコンピューターなどの、いくつかの形態のいずれにおいて実施されることも可能であることを認識されたい。さらに、（クライアントまたはサーバ）コンピューターは、ＰＤＡ（携帯情報端末）、スマートフォン、または他の任意の適切なポータブル電子デバイスもしくは固定電子デバイスを含め、コンピューターと一般には見なされないが、適切な処理能力を有するデバイスに組み込まれることも可能である。
【００７８】
また、（クライアントまたはサーバ）コンピューターは、１つまたは複数の入力デバイスおよび出力デバイスを有することも可能である。これらのデバイスは、とりわけ、ユーザーインタフェースを提示するのに使用され得る。ユーザーインタフェースを提供するのに使用され得る出力デバイスの例には、出力を視覚的に提示するためのプリンターまたはディスプレイスクリーン、および出力を聴覚的に提示するためのスピーカーまたは他のサウンド生成デバイスが含まれる。ユーザーインタフェースとして使用され得る入力デバイスの例には、キーボード、ならびにマウス、タッチパッド、およびデジタル化テーブルなどのポインティングデバイスが含まれる。別の例として、コンピューターは、音声認識を介して、または他の可聴フォーマットで入力情報を受け取ってもよい。
【００７９】
そのようなコンピューターは、企業ネットワークまたはインターネットなどの、ローカルエリアネットワークまたはワイドエリアネットワークとしての形態を含め、任意の適切な形態の１つまたは複数のネットワークによって互いに接続されることが可能である。そのようなネットワークは、任意の適切な技術に基づくことが可能であり、任意の適切なプロトコルに従って動作することが可能であり、さらに無線ネットワーク、有線ネットワーク、または光ファイバネットワークを含むことが可能である。また、本明細書で概説される様々な方法またはプロセスは、様々なオペレーティングシステムまたはプラットフォームのいずれか１つを使用する１つまたは複数のプロセッサー上で実行可能なソフトウェアとして符号化されることが可能である。
【００８０】
さらに、ソフトウェアは、いくつかの適切なプログラミング言語および／または従来のプログラミングツールもしくはスクリプトツールのいずれを使用して書かれることも可能であり、さらにフレームワークまたは仮想マシンの上で実行される実行可能な機械語コードもしくは中間コードとしてコンパイルされることも可能である。
【００８１】
これに関して、本発明は、１つまたは複数のコンピューターまたは他のプロセッサーによって実行されると、前述した本発明の様々な実施形態を実施する方法を実行する１つまたは複数のプログラムが符号化された記憶媒体（または複数の記憶媒体）（例えば、コンピューターメモリー、１つまたは複数のフロッピーディスク、コンパクトディスク、光ディスク、磁気テープ、フラッシュメモリー、フィールドプログラマブルゲートアレイもしくは他の半導体デバイスにおける回路構成、または他のコンピューター記憶媒体）として実施されることが可能である。この１つまたは複数の記憶媒体は、記憶媒体上に格納された１つまたは複数のプログラムが、前述した本発明の様々な態様を実施するように、異なる１つまたは複数のコンピューターまたは他のプロセッサー上にロードされ得るように、トランスポート可能であり得る。
【００８２】
「プログラム」または「ソフトウェア」という用語は、本明細書では、前述した本発明の様々な態様を実施するようにコンピューターまたは他のプロセッサーをプログラミングするのに使用され得る任意のタイプのコンピューターコードまたはコンピューター実行可能命令セットを指すように一般的な意味で使用される。さらに、この実施形態の一態様によれば、実行されると、本発明の方法を実行する１つまたは複数のコンピュータープログラムは、単一のコンピューターもしくはプロセッサーの上に存在していなくてもよく、本発明の様々な態様を実施する異なるいくつかのコンピューターまたはプロセッサーの間にモジュール様態で分散されてもよいことを認識されたい。
【００８３】
コンピューター実行可能命令は、１つまたは複数のコンピューターもしくは他のデバイスによって実行されるプログラムモジュールなどの多くの形態で提供されることが可能である。一般に、プログラムモジュールには、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などが含まれる。通常、プログラムモジュールの機能は、様々な実施形態において所望に応じて組み合わされる、または分散されることが可能である。
【００８４】
本発明の様々な態様は、単独で、組合せで、または前述した実施形態において具体的に説明されない様々な構成で使用されることが可能であり、したがって、以上の説明で示される、または図面で例示される構成要素の詳細および構成への適用に限定されない。例えば、一実施形態において説明される態様は、他の実施形態において説明される態様と任意の仕方で組み合わされることが可能である。
【００８５】
請求項要素を修飾する請求項における「第１の」、「第２の」、「第３の」などの順序を表す語の使用は、或る請求項要素の別の請求項要素に対する優先、先行、もしくは順序、または方法の動作が実行される時間的順序をそれ自体で表すわけではなく、或る名前を有する１つの請求項要素を、（順序を表す語の使用以外は）同一の名前を有する別の要素から区別して、それらの請求項要素を区別するようにするラベルとして使用されるに過ぎない。
【００８６】
また、本明細書で使用される語および句は、説明を目的としており、限定するものと見なされるべきではない。本明細書における「含める」、「備える」、または「有する」、「包含する」、「関与させる」、ならびに以上の変種の使用は、続いてリストアップされる項目、およびそれらの項目の均等物、ならびにさらなる項目を包含することを意図している。
【００８７】
以上、本発明の少なくとも１つの実施形態のいくつかの態様が説明されて、様々な代替形態、変形形態、および改良形態が当業者には容易に思い浮かべられることを認識されたい。そのような代替形態、変形形態、および改良形態は、本開示の一部であることが意図され、本発明の趣旨および範囲に含まれることが意図される。したがって、以上の説明および図は、単に例に過ぎない。
【図１】
2012508932.tif 000003
【図２Ａ】
2012508932.tif 000004
【図２Ｂ】
2012508932.tif 000005
【図３】
2012508932.tif 000006
【図４】
2012508932.tif 000007
【図５】
2012508932.tif 000008
【図６】
2012508932.tif 000009
【図７】
2012508932.tif 000010
【図８】
2012508932.tif 000011
【国際調査報告】
2012508932.tif 000012
2012508932.tif 000013