Condividi tramite


Gestione delle strutture di connessione e file

Esistono sei strutture di dati fondamentali usate da RDBSS per la gestione di connessioni e strutture di file. Queste strutture di dati vengono usate internamente da RDBSS e dai vari mini-reindirizzamento di rete. Esistono due versioni di queste strutture di dati. La versione mini-redirector di rete contiene campi che possono essere modificati da un driver mini-reindirizzamento di rete. La versione mini-redirector di rete di queste strutture di dati inizia con il prefisso MRX_. La versione RDBSS contiene campi aggiuntivi che possono essere modificati solo da RDBSS.

Queste sei strutture di dati fondamentali sono le seguenti:

  • contesto di chiamata SRV_CALL-server. Questa struttura fornisce l'astrazione per un server remoto.

  • radice NET_ROOT-net. Questa struttura astrae una connessione a una condivisione.

  • V_NET_ROOT-view delle radici net (denominate anche netroot virtuali).

  • Blocco di controllo FCB-file. Questa struttura rappresenta un file aperto in una condivisione.

  • SRV_OPEN--server-side open context. Questa struttura incapsula un handle aperto nel server.

  • Estensione dell'oggetto FOBX--file. Questa struttura è un'estensione RDBSS alla struttura FILE_OBJECT .

Queste strutture di dati sono organizzate nella gerarchia seguente:

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

In risposta alle chiamate del file system kernel, RDBSS normalmente crea e finalizza per un driver di mini-reindirizzamento di rete tutte le strutture indicate in precedenza, ad eccezione della struttura FOBX. Quindi, un driver mini-reindirizzamento di rete chiama normalmente solo alcune routine RDBSS usate per la gestione della connessione e della struttura di file. La maggior parte di queste routine viene chiamata internamente da RDBSS.

Tutte queste strutture dati vengono conteggiate. Il conteggio dei riferimenti su una struttura di dati è il seguente:

Struttura dei dati Descrizione del conteggio dei riferimenti

SRV_CALL

Numero di voci NET_ROOT che puntano a SRV_CALL, oltre a un valore dinamico.

NET_ROOT

Numero di voci FCB e voci V_NET_ROOT che puntano a NET_ROOT, oltre a un valore dinamico.

V_NET_ROOT

Numero di voci SRV_OPEN che puntano a V_NET_ROOT, oltre a un valore dinamico.

FCB

Numero di voci SRV_OPEN che puntano a FCB, oltre a un valore dinamico.

SRV_OPEN

Numero di voci FOBX che puntano a SRV_OPEN, oltre a un valore dinamico.

FOBX

Valore dinamico.

In ogni caso, il valore dinamico fa riferimento al numero di chiamanti che hanno fatto riferimento alla struttura senza rinviarlo. La parte statica del conteggio dei riferimenti viene mantenuta dalle routine stesse. Ad esempio, RxCreateNetRoot incrementa il conteggio dei riferimenti per la struttura di SRV_CALL associata.

Le chiamate di riferimento e le ricerche riuscite incrementano i conteggi dei riferimenti; dereference chiama decrementa il conteggio. Creare chiamate di routine allocare una struttura e impostare il conteggio dei riferimenti su 1.

Il conteggio dei riferimenti associato a qualsiasi struttura di dati è almeno 1 più il numero di istanze della struttura dei dati al livello inferiore successivo associato. Ad esempio, il conteggio dei riferimenti associato a un SRV_CALL, che ha due NET_ROOTs associati, è almeno 3. Oltre ai riferimenti mantenuti dalle strutture di NameTable interne RDBSS e dalla struttura di dati a livello inferiore successivo, sono disponibili riferimenti aggiuntivi che potrebbero essere stati acquisiti.

Queste restrizioni garantiscono che una struttura di dati a qualsiasi livello non possa essere finalizzata (rilasciata e liberata dal blocco di memoria associato) fino a quando tutte le strutture di dati al livello successivo sono state finalizzate o hanno rilasciato i loro riferimenti. Ad esempio, se viene mantenuto un riferimento a un FCB, è possibile accedere alle V_NET_ROOT, NET_ROOT e SRV_CALL strutture associate.

Le due astrazione importanti usate nell'interfaccia tra i mini-reindirizzamenti di rete e RDBSS sono SRV_CALL e NET_ROOT strutture. Una struttura SRV_CALL corrisponde al contesto associato a un server con cui è stata stabilita una connessione e la struttura di NET_ROOT corrisponde a una condivisione in un server (può essere visualizzata anche come parte dello spazio dei nomi, che è stata richiesta da un mini-reindirizzamento di rete).

La creazione di strutture SRV_CALL e NET_ROOT comporta in genere almeno un round trip di rete. Per fornire operazioni asincrone da continuare, queste operazioni vengono modellate come attività in due fasi. Ogni chiamata a un mini-reindirizzamento di rete per la creazione di un SRV_CALL e una struttura di NET_ROOT è accompagnata da una chiamata dal mini-reindirizzamento di rete a RDBSS per notificare lo stato di completamento della richiesta. Attualmente questi sono sincroni.

La creazione di una struttura SRV_CALL è ulteriormente complicata dal fatto che RDBSS deve scegliere tra diversi mini-reindirizzamenti di rete per stabilire una connessione con un server. Per offrire alla rdBSS la massima flessibilità nella scelta del mini-reindirizzamento di rete che desidera distribuire, la creazione di una struttura di SRV_CALL prevede una terza fase in cui rdBSS notifica il mini-reindirizzamento di rete di un vincitore. Tutti i mini-reindirizzamenti di rete persi eliminano il contesto associato.

Questa sezione contiene i seguenti argomenti:

Struttura SRV_CALL

Struttura NET_ROOT

Struttura V_NET_ROOT

Struttura FCB

Struttura SRV_OPEN

Struttura FOBX

Blocchi delle connessioni e della struttura di file

Routine di gestione blocchi di connessione e controllo file