接続とファイル構造の管理

接続とファイル構造を管理するために RDBSS によって使用される 6 つの基本的なデータ構造があります。 これらのデータ構造は、RDBSS およびさまざまなネットワーク ミニ リダイレクターによって内部的に使用されます。 これらのデータ構造には 2 つのバージョンがあります。 ネットワーク ミニ リダイレクター バージョンには、ネットワーク ミニ リダイレクター ドライバーによって操作できるフィールドが含まれています。 これらのデータ構造のネットワーク ミニ リダイレクター バージョンは、MRX_ プレフィックスで始まります。 RDBSS バージョンには、RDBSS によってのみ操作できる追加のフィールドが含まれています。

これらの 6 つの基本的なデータ構造は次のとおりです。

  • SRV_CALL- サーバー呼び出しコンテキスト。 この構造体は、リモート サーバーの抽象化を提供します。

  • NET_ROOT--net ルート。 この構造体は、共有への接続を抽象化します。

  • V_NET_ROOT:ネットルートのビュー(仮想ネットルートとも呼ばれます)。

  • FCB--file 制御ブロック。 この構造体は、共有上の開いているファイルを表します。

  • SRV_OPEN- サーバー側のオープン コンテキスト。 この構造体は、サーバー上の開いているハンドルをカプセル化します。

  • FOBX--file オブジェクト拡張子。 この構造体は、 FILE_OBJECT 構造体に対する RDBSS 拡張機能です。

これらのデータ構造は、次の階層に編成されています。

                SRV_CALL 
     FCB   <------> NET_ROOT
        SRV_OPEN  <---> V_NET_ROOT
            FOBX
                FILE_OBJECT

カーネル ファイル システムの呼び出しに応答して、RDBSSは通常、FOBX 構造体を除く前述の構造体をネットワーク ミニリダイレクター ドライバーのために作成して完成させます。 そのため、ネットワーク ミニ リダイレクター ドライバーは、通常、接続とファイル構造の管理に使用される RDBSS ルーチンの一部のみを呼び出します。 これらのルーチンのほとんどは、RDBSS によって内部的に呼び出されます。

これらのデータ構造はすべて参照カウントされます。 データ構造の参照カウントは次のとおりです。

データ構造 参照カウントの説明

SRV_CALL

SRV_CALLを指すNET_ROOTエントリの数と動的な値。

NET_ROOT

NET_ROOTを指す FCB エントリとV_NET_ROOT エントリの数に動的な値を加えた値。

V_NET_ROOT

V_NET_ROOTを指すSRV_OPENエントリの数と動的な値。

FCB

FCB を指すSRV_OPENエントリの数と動的な値。

SRV_OPEN

SRV_OPENを指す FOBX エントリの数と動的な値。

FOBX

動的な値。

いずれの場合も、動的な値は、構造体を逆参照せずに参照している呼び出し元の数を参照します。 参照カウントの静的部分は、ルーチン自体によって維持されます。 たとえば、 RxCreateNetRoot は、関連付けられているSRV_CALL構造体の参照カウントをインクリメントします。

リファレンスの呼び出しと成功した検索は、参照カウントをインクリメントします。逆参照呼び出しはカウントをデクリメントします。 ルーチン呼び出しを作成して構造体を割り当て、参照カウントを 1 に設定します。

任意のデータ構造に関連付けられている参照カウントは、少なくとも 1 に、それに関連付けられている次の下位レベルのデータ構造のインスタンス数を加算したものです。 たとえば、2つのNET_ROOTが関連付けられているSRV_CALLに対して、関連付けられている参照カウントは少なくとも3になっています。 RDBSS 内部 NameTable 構造体と次の下位レベルのデータ構造によって保持される参照に加えて、取得された可能性のある追加の参照があります。

これらの制限により、次のレベルのすべてのデータ構造が最終決定されるか、参照が解放されるまで、特定のレベルのデータ構造を最終処理 (解放および関連するメモリ ブロックの解放) できなくなります。 たとえば、FCB への参照が保持されている場合は、それに関連付けられているV_NET_ROOT、NET_ROOT、およびSRV_CALL構造体に安全にアクセスできます。

ネットワーク ミニ リダイレクターと RDBSS の間のインターフェイスで使用される 2 つの重要な抽象化は、SRV_CALL構造とNET_ROOT構造です。 SRV_CALL構造体は、接続が確立されたサーバーに関連付けられているコンテキストに対応し、NET_ROOT構造体はサーバー上の共有に対応します (これは、ネットワーク ミニ リダイレクターによって要求された名前空間の一部と見なすこともできます)。

通常、SRV_CALL構造とNET_ROOT構造の作成には、少なくとも 1 つのネットワーク ラウンド トリップが含まれます。 非同期操作を続行するために、これらの操作は 2 フェーズ アクティビティとしてモデル化されます。 SRV_CALLとNET_ROOT構造体を作成するためのネットワーク ミニ リダイレクターへの各呼び出しには、要求の完了状態を通知するために、ネットワーク ミニ リダイレクターから RDBSS への呼び出しが伴います。 現在、これらは同期的です。

SRV_CALL構造の作成は、RDBSS がサーバーとの接続を確立するために多数のネットワーク ミニ リダイレクターから選択する必要があるという事実によってさらに複雑になります。 展開するネットワーク ミニ リダイレクターを選択する際に RDBSS に最大限の柔軟性を提供するために、SRV_CALL構造の作成には、RDBSS がネットワーク ミニ リダイレクターに勝者を通知する 3 番目のフェーズが含まれます。 敗者のネットワーク ミニ リダイレクターはすべて、関連するコンテキストを破棄します。

このセクションには、次のトピックが含まれています。

SRV_CALL構造体 する

NET_ROOT構造体 する

V_NET_ROOT構造体 する

FCB 構造体 する

SRV_OPEN構造体 する

FOBX 構造体 する

接続とファイル構造のロック

接続およびファイル制御ブロック管理ルーチン