Condividi tramite


Gestione ID multiplex

RDBSS definisce un ID multiplex (MID), un valore a 16 bit, che può essere usato sia dal client di rete (mini-redirector) che dal server per distinguere tra le richieste simultanee attive in qualsiasi connessione. Un reindirizzamento di rete può associare un mid a qualsiasi contesto arbitrario o struttura dati interna usata. È completamente all'opzione del reindirizzamento di rete se gli ID vengono allocati e usati.

Mid, come definito da RDBSS, fa parte di una struttura di dati MID_ATLAS progettata per soddisfare diversi criteri. Associato a una struttura di dati MID_ATLAS sono una serie di strutture di dati MID_MAP usate per eseguire il mapping degli ID ai contesti associati.

La struttura dei dati MID_ATLAS, la struttura MID_MAP e gli ID devono essere ridimensionati correttamente per gestire le diverse funzionalità di vari server remoti. Ad esempio, il tipico server di Gestione LAN in Windows consente 50 richieste in sospeso su qualsiasi connessione. Alcuni tipi di server possono supportare un numero minimo di richieste in sospeso, mentre i server gateway potrebbero volere che questo numero sia molto elevato (nell'ordine di migliaia di connessioni in sospeso).

Le due operazioni primarie che devono essere gestite correttamente sono:

  • Mapping di un mid al contesto associato. Questa routine verrà richiamata per elaborare ogni pacchetto ricevuto lungo qualsiasi connessione sia al client che al server (presupponendo che i server usino MID).

  • Generazione di un nuovo mid per l'invio di richieste al server. Questa routine verrà usata nel client per l'applicazione dei limiti massimi di connessione e per l'assegnazione di tag a ogni richiesta simultanea con un ID univoco.

Mid deve essere in grado di gestire in modo efficiente il tag univoco e l'identificazione di un numero di MID (in genere 50) da una combinazione possibile di 65.536 valori. In alcuni casi, potrebbe essere opportuno creare una piccola struttura MID_ATLAS per salvare la memoria del kernel utilizzata dalla struttura MID_MAP e espandere le dimensioni della struttura MID_ATLAS se necessario per gestire in modo efficiente un utilizzo maggiore. Per garantire un compromesso dello spazio temporale appropriato, la ricerca è organizzata come gerarchia a tre livelli. I 16 bit usati per rappresentare un mid vengono suddivisi in campi a tre bit. La lunghezza del campo più a destra (meno significativa ) è decisa dal numero massimo di ID consentiti nell'atlas iniziale. Questo valore massimo è un parametro passato alla routine RxCreateMidAtlas quando viene creata la struttura di dati MID_ATLAS. Questo valore massimo determina le dimensioni iniziali della struttura di dati MID_ATLAS creata e il numero di strutture di dati MID_MAP che possono essere ospitate. La lunghezza rimanente è suddivisa equamente tra i due campi successivi, che determinano la dimensione massima delle possibili strutture di MID_ATLAS subordinate che possono essere definite per espandere ed estendere un MID_ATLAS esistente in una gerarchia a tre livelli di strutture di dati MID_MAP. Pertanto, ogni struttura di dati MID_ATLAS può contenere il numero massimo di strutture MID_MAP o un puntatore a un MID_ATLAS subordinato e alle strutture MID_MAP.

Ad esempio, se viene allocato un massimo di 50 MID sulla creazione, la lunghezza del primo campo è 6 (64 ( 2 ** 6 ) è maggiore di 50 ). La lunghezza rimanente è suddivisa in due campi di 5 bit ciascuno per il secondo e il terzo livello gerarchico in modo che una struttura di dati MID_ATLAS esistente possa essere espansa per ospitare più MID_MAP voci.

RDBSS fornisce le routine seguenti per creare e modificare una struttura di dati MID_ATLAS, le strutture di dati associate MID_MAP e gli ID Multiplex.

Routine Descrizione

RxAssociateContextWithMid

Questa routine associa il contesto opaco fornito a una struttura mid disponibile da una struttura MID_ATLAS.

RxCreateMidAtlas

Questa routine alloca una nuova istanza della struttura di dati MID_ATLAS e la inizializza.

RxDestroyMidAtlas

Questa routine elimina un'istanza esistente di una struttura di dati MID_ATLAS e libera la memoria allocata. Come effetto collaterale richiama il distruttore passato nel contesto in ogni contesto valido nella struttura MID_ATLAS.

RxMapMidToContext

Questa routine esegue il mapping di un mid al contesto associato in una struttura MID_ATLAS.

RxMapAndDissociateMidFromContext

Questa routine esegue il mapping di un mid al contesto associato in una struttura MID_ATLAS e quindi annulla l'accesso a MID dal contesto.

RxReassociateMid

Questa routine riassessocia un mid con un contesto alternativo.