次の方法で共有


バッファー処理状態の制御

RDBSS は、さまざまなネットワーク ミニ リダイレクターと組み合わせて分散キャッシュの一貫性を提供するためのメカニズムであるバッファリング マネージャーを備えています。 このサービスは、バッファリング状態の変更要求を処理する RDBSS のバッファリング マネージャーにカプセル化されています。 RDBSS のバッファリング マネージャーは、さまざまなネットワーク ミニ リダイレクターと RDBSS によって生成される、すべてのバッファリング状態変更要求を追跡して、それに対するアクションを開始します。

一般的なネットワーク ミニ リダイレクターでのキャッシュの一貫性の実装には、いくつかの共通コンポーネントがあります。

  • ファイルを作成したり開いたりするルーチンに対する変更。

    このパスでは、バッファリング要求の種類が特定され、適切な要求がサーバーに対して行われます。 ネットワーク ミニ リダイレクターから返され、場合によってはサーバーからも返される、FCB に関連付けられたバッファリング状態は、作成またはオープンの呼び出しの結果に基づいて更新されます。

  • サーバーからのバッファリング状態変更通知を処理するための指示コードの受信に対する変更。

    このような要求が検出された場合、バッファリング状態を調整するローカル メカニズムをトリガーする必要があります。

  • RDBSS の一部として実装されるバッファリング状態を変更するためのメカニズム。 バッファリング状態変更要求では、要求を適用する SRV_OPEN 構造体が示されている必要があります。

SRV_OPEN 構造体の識別に必要な計算作業の量は、プロトコルとネットワーク ミニ リダイレクターの詳細によって異なります。 SMB プロトコルでは、便宜的ロック (oplock) によって、キャッシュの一貫性に必要なインフラストラクチャが提供されます。 Windows の SMB プロトコルの実装では、RDBSS によって提供される多重 ID API が使われます。 サーバーは、サーバーで開かれたファイルを識別するために使われる多重 ID を選択します。 多重化 ID は、それが開かれている NET_ROOT (共有) を基準にしたものです。 したがって、すべてのバッファリング状態変更要求は、NetRootKey と SrvOpenKey の 2 つのキーによって識別され、これらはそれぞれ適切な NET_ROOT と SRV_OPEN 構造体に変換される必要があります。 リソースの取得/解放メカニズムとの統合を強化し、さまざまなネットワーク ミニ リダイレクターでこの作業が重複しないようにするため、RDBSS でこのサービスが提供されます。

RDBSS には、バッファリング状態の変化を SRV_OPEN 構造体に対して示すルーチンが 2 つあります。

キーの関連付けは元に戻せず、関連付けられている SRV_OPEN 構造体の有効期限まで続くので注意してください。

多重 ID から SRV_OPEN 構造体へのマッピングを確立するための補助メカニズムを必要とするネットワーク ミニ リダイレクターでは RxIndicateChangeOfBufferingState を使用でき、この補助を必要としないネットワーク ミニ リダイレクターでは RxIndicateChangeOfBufferingStateForSrvOpen を使用できます。

RDBSS のバッファリング マネージャーは、さまざまなステージでこれらの要求を処理します。 基になるさまざまなネットワーク ミニ リダイレクターから受信した要求は、複数あるリストの 1 つで保持されます。

  • Dispatcher リストには、SRV_OPEN 構造体への適切なマッピングが確立されていないすべての要求が含まれます。

  • Handler リストには、適切なマッピングは確立されていますが、まだ処理されていないすべての要求が含まれます。

  • LastChanceHandlerList には、初期処理が失敗したすべての要求が含まれます。 これは通常、バッファリング状態変更要求の受信時に FCB が共有モードで取得された場合に発生します。 このような場合、便宜的ロック解除要求は遅延ワーカー スレッドによってのみ処理できます。

ネットワーク ミニ リダイレクター ドライバーでのバッファリング状態変更要求の処理は、FCB の取得と解放プロトコルと結び付けられています。 これは、ターンアラウンド時間を短縮するのに役立ちます。

ネットワーク ミニ リダイレクター ドライバーでは、RDBSS で提供されている次のルーチンを使って、バッファリング状態を管理できます。

ルーチンによって返される値 説明

RxChangeBufferingState

このルーチンは、バッファリング状態変更要求を処理するために呼び出されます。

RxIndicateChangeOfBufferingState

このルーチンは、後で処理するために、バッファリング状態変更要求 (たとえば、便宜的ロックの解除指示) を登録するために呼び出されます。

RxIndicateChangeOfBufferingStateForSrvOpen

このルーチンは、後で処理するために、バッファリング状態変更要求 (たとえば、便宜的ロックの解除指示) を登録するために呼び出されます。