次の方法で共有


多重 ID 管理

RDBSS では、ネットワーク クライアント (ミニ リダイレクター) とサーバーの両方で使用できる多重 ID (MID) (16 ビット値) を定義し、接続で同時にアクティブな要求を区別できます。 ネットワーク リダイレクターは、MID を使用する任意のコンテキストまたは内部データ構造に関連付けることができます。 これは、MID が割り当てられ、使用されるかどうかは、ネットワーク リダイレクターのオプションで完全に行われます。

RDBSS によって定義される MID は、複数の条件を満たすように設計された MID_ATLAS データ構造の一部です。 MID_ATLAS データ構造に関連付けられるのは、関連付けられたコンテキストに MID をマップするために使用される 1 つ以上の MID_MAP データ構造のシリーズです。

MID_ATLAS データ構造、MID_MAP 構造、および MID は、さまざまなリモート サーバーのさまざまな機能を処理するために適切にスケーリングする必要があります。 たとえば、Windows 上の一般的な LAN Manager サーバーでは、任意の接続で 50 の未処理の要求が許可されます。 一部の種類のサーバーでは、未処理の要求が 1 つしかサポートされていない場合があります。ゲートウェイ サーバーでは、この数が非常に多い (数千の未処理の接続の順序で) 必要になる場合があります。

適切に処理する必要がある 2 つの主な操作は次のとおりです。

  • MID をそれに関連付けられているコンテキストにマッピングします。 このルーチンは、クライアントとサーバーの両方で接続に沿って受信されたすべてのパケットを処理するために呼び出されます (サーバーで MID が使用されていると仮定)。

  • サーバーに要求を送信するための新しい MID を生成します。 このルーチンは、最大接続制限の適用と、各同時要求に一意の ID でタグ付けするために、クライアントで使用されます。

MID は、65,536 個の値の可能な組み合わせから、多数の MID (通常は 50) の一意のタグ付けと識別を効率的に管理できる必要があります。 場合によっては、小さな MID_ATLAS 構造を作成して、MID_MAP 構造体で使用されるカーネル メモリを節約し、必要に応じて MID_ATLAS 構造体のサイズを拡張して、より大きな使用量を効率的に処理することが理にかなっている場合があります。 適切な時間空間のトレードオフを確保するために、ルックアップは 3 レベルの階層として編成されます。 MID を表すために使用される 16 ビットは、3 ビットフィールドに分割されます。 右端のフィールド (最下位) の長さは、最初のアトラスで許可される MID の最大数によって決まります。 この最大値は、MID_ATLAS データ構造が最初に 作成されるときに RxCreateMidAtlas ルーチンに渡されるパラメーターです。 この最大値は、作成される MID_ATLAS データ構造の初期サイズと、対応できる MID_MAP データ構造の数を決定します。 残りの長さは、次の 2 つのフィールドの間で均等に分割され、既存の MID_ATLAS を MID_MAP データ構造の 3 レベル階層に拡張するために定義できる従属 MID_ATLAS 構造の最大サイズを決定します。 そのため、各 MID_ATLAS データ構造には、MID_MAP 構造体の最大数、または 1 つの下位 MID_ATLAS と MID_MAP 構造体へのポインターを含めることができます。

たとえば、作成時に最大 50 個の MID が割り当てられている場合、最初のフィールドの長さは 6 (64 ( 2 ** 6 ) が 50 より大きくなります)。 再メイン長さは、2 番目と 3 番目の階層レベルごとに 5 ビットの 2 つのフィールドに分割されるため、既存の MID_ATLAS データ構造を拡張して、より多くの MID_MAP エントリに対応できます。

RDBSS には、MID_ATLAS データ構造、関連付けられた MID_MAP データ構造、多重 ID を作成および操作するための次のルーチンが用意されています。

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

RxAssociateContextWithMid

このルーチンは、指定された不透明なコンテキストを、MID_ATLAS 構造体から使用可能な MID に関連付けます。

RxCreateMidAtlas

このルーチンは、MID_ATLAS データ構造の新しいインスタンスを割り当てて初期化します。

RxDestroyMidAtlas

このルーチンは、MID_ATLAS データ構造の既存のインスタンスを破棄し、割り当てられたメモリを解放します。 副作用として、MID_ATLAS 構造体内のすべての有効なコンテキストで、渡されたコンテキストデストラクターを呼び出します。

RxMapMidToContext

このルーチンは、MID を MID_ATLAS 構造体内の関連するコンテキストにマップします。

RxMapAndDissociateMidFromContext

このルーチンは、MID を MID_ATLAS 構造体内の関連付けられたコンテキストにマップし、コンテキストから MID の関連付けを解除します。

RxReassociateMid

このルーチンは、代替コンテキストで MID を再関連付けします。