Compartir a través de


Administración de la conexión y la estructura de archivos

Hay seis estructuras de datos fundamentales usadas por RDBSS para administrar conexiones y estructuras de archivos. Estas estructuras de datos las usa internamente RDBSS y los distintos miniireccionadores de red. Hay dos versiones de estas estructuras de datos. La versión del minidirector de red contiene campos que un controlador minidirector de red puede manipular. La versión del minidirector de red de estas estructuras de datos comienza con el prefijo MRX_. La versión de RDBSS contiene campos adicionales que RDBSS solo pueden manipular.

Estas seis estructuras de datos fundamentales son las siguientes:

  • SRV_CALL--server: contexto de llamada. Esta estructura proporciona la abstracción de un servidor remoto.

  • NET_ROOT--net root. Esta estructura abstrae una conexión a un recurso compartido.

  • V_NET_ROOT vista de raíces netas (también denominadas raíz de red virtual).

  • Bloque de control FCB--file. Esta estructura representa un archivo abierto en un recurso compartido.

  • SRV_OPEN--server-open context. Esta estructura encapsula un identificador abierto en el servidor.

  • Extensión de objeto FOBX--file. Esta estructura es una extensión RDBSS para la estructura FILE_OBJECT .

Estas estructuras de datos se organizan en la jerarquía siguiente:

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

En respuesta a las llamadas del sistema de archivos kernel, RDBSS normalmente crea y finaliza para un controlador minidirector de red todas las estructuras mencionadas anteriormente, excepto la estructura FOBX. Por lo tanto, un controlador minidirector de red normalmente solo llamará a algunas de las rutinas RDBSS usadas para la administración de la conexión y la estructura de archivos. La mayoría de estas rutinas las llama internamente RDBSS.

Se cuentan todas estas estructuras de datos. Los recuentos de referencias de una estructura de datos son los siguientes:

Estructura de datos Descripción del recuento de referencias

SRV_CALL

Número de entradas de NET_ROOT que apuntan a SRV_CALL, además de algún valor dinámico.

NET_ROOT

Número de entradas FCB y entradas V_NET_ROOT que apuntan a NET_ROOT, además de algún valor dinámico.

V_NET_ROOT

Número de entradas de SRV_OPEN que apuntan a V_NET_ROOT, además de algún valor dinámico.

FCB

Número de SRV_OPEN entradas que apuntan a FCB, además de algún valor dinámico.

SRV_OPEN

Número de entradas FOBX que apuntan a SRV_OPEN, además de algún valor dinámico.

FOBX

Valor dinámico.

En cada caso, el valor dinámico hace referencia al número de llamadores a los que se ha hecho referencia a la estructura sin desreferenciarlo. La parte estática del recuento de referencias se mantiene mediante las propias rutinas. Por ejemplo, RxCreateNetRoot incrementa el recuento de referencias de la estructura de SRV_CALL asociada.

Las llamadas de referencia y las búsquedas correctas incrementan los recuentos de referencia; la desreferencia llama a decrementos del recuento. Crear llamadas rutinarias asigna una estructura y establece el recuento de referencias en 1.

El recuento de referencias asociado a cualquier estructura de datos es al menos 1 más el número de instancias de la estructura de datos en el siguiente nivel inferior asociado. Por ejemplo, el recuento de referencias asociado a un SRV_CALL, que tiene dos NET_ROOTs asociados, es al menos 3. Además de las referencias mantenidas por las estructuras NameTable internas de RDBSS y la estructura de datos en el siguiente nivel inferior, hay referencias adicionales que se pueden haber adquirido.

Estas restricciones garantizan que una estructura de datos en cualquier nivel determinado no se pueda finalizar (liberar y liberar el bloque de memoria asociado) hasta que se hayan finalizado todas las estructuras de datos en el siguiente nivel inferior o se hayan liberado sus referencias. Por ejemplo, si se mantiene una referencia a un FCB, es seguro acceder a las estructuras de V_NET_ROOT, NET_ROOT y SRV_CALL asociadas.

Las dos abstracciones importantes que se usan en la interfaz entre los miniireccionadores de red y RDBSS son SRV_CALL y NET_ROOT estructuras. Una estructura de SRV_CALL corresponde al contexto asociado a un servidor con el que se ha establecido una conexión y la estructura de NET_ROOT corresponde a un recurso compartido en un servidor (esto también podría verse como una parte del espacio de nombres, que ha sido reclamado por un minidirector de red).

La creación de estructuras de SRV_CALL y NET_ROOT normalmente implica al menos un recorrido de ida y vuelta de red. Para proporcionar operaciones asincrónicas para continuar, estas operaciones se modelan como una actividad en dos fases. Cada llamada a un minidirector de red para crear una SRV_CALL y una estructura de NET_ROOT va acompañada de una llamada desde el minidirector de red al RDBSS para notificar el estado de finalización de la solicitud. Actualmente, son sincrónicas.

La creación de una estructura de SRV_CALL es aún más complicada por el hecho de que RDBSS debe elegir entre varios miniireccionadores de red para establecer una conexión con un servidor. Para proporcionar a RDBSS la máxima flexibilidad en la elección del minidirector de red que desea implementar, la creación de una estructura de SRV_CALL implica una tercera fase en la que RDBSS notifica al minidirector de red de un ganador. Todos los miniireccionadores de red que pierden destruyen el contexto asociado.

Esta sección contiene los siguientes temas:

Estructura de SRV_CALL

Estructura de NET_ROOT

Estructura de V_NET_ROOT

Estructura FCB

Estructura de SRV_OPEN

Estructura FOBX

Conexiones y bloqueo de estructura de archivos

Rutinas de administración de bloques de control de archivos y conexión