Compartir a través de


Control de estado de almacenamiento en búfer

RDBSS proporciona un administrador de almacenamiento en búfer, un mecanismo para proporcionar la coherencia de caché distribuida junto con los distintos mini-redireccionadores de red. Este servicio se encapsula en el administrador de almacenamiento en búfer en RDBSS que procesa las solicitudes para cambiar el estado de almacenamiento en búfer. El administrador de almacenamiento en búfer en RDBSS realiza un seguimiento e inicia acciones en todas las solicitudes de estado de almacenamiento en búfer de cambios generadas por los distintos mini redireccionadores de red, así como por RDBSS.

Hay varios componentes comunes en la implementación de la coherencia de caché en un minidirector de red típico:

  • Modificaciones para crear y abrir rutinas de archivo.

    En esta ruta de acceso, se determina el tipo de solicitud de almacenamiento en búfer y se realiza la solicitud adecuada al servidor. Al volver desde el minidirector de red y, posiblemente, el servidor, el estado de almacenamiento en búfer asociado al FCB se actualiza en función del resultado de la llamada de creación o apertura.

  • Modificaciones para recibir un código de indicación para controlar las notificaciones de estado de almacenamiento en búfer de cambios del servidor.

    Si se detecta dicha solicitud, se debe desencadenar el mecanismo local para coordinar los estados de almacenamiento en búfer.

  • Mecanismo para cambiar el estado de almacenamiento en búfer que se implementa como parte de RDBSS. Cualquier solicitud de estado de almacenamiento en búfer de cambios debe identificar la estructura SRV_OPEN a la que se aplica la solicitud.

La cantidad de esfuerzo computacional implicado en la identificación de la estructura de SRV_OPEN depende del protocolo y los detalles del minidirector de red. En el protocolo SMB, los bloqueos oportunistas (oplocks) proporcionan la infraestructura necesaria para la coherencia de caché. En la implementación del protocolo SMB en Windows, se usan las API de identificador de multiplex proporcionadas por RDBSS. El servidor obtiene la selección del identificador de multiplex usado para identificar un archivo abierto en el servidor. Los identificadores multiplex son relativos al NET_ROOT (recurso compartido) en el que se abren. Por lo tanto, cada solicitud de estado de almacenamiento en búfer de cambios se identifica mediante dos claves: NetRootKey y SrvOpenKey, que deben traducirse a la estructura de NET_ROOT y SRV_OPEN adecuadas, respectivamente. Para proporcionar una mejor integración con el mecanismo de adquisición y liberación de recursos y evitar la duplicación de este esfuerzo en los distintos mini redireccionadores de red, RDBSS proporciona este servicio.

Hay dos rutinas proporcionadas en RDBSS para indicar los cambios de estado de almacenamiento en búfer en SRV_OPEN estructuras:

Tenga en cuenta que las asociaciones clave son irreversibles y durarán la duración de la estructura de SRV_OPEN asociada.

Los mini-redireccionadores de red que necesitan un mecanismo auxiliar para establecer la asignación de identificadores multiplex a la estructura de SRV_OPEN pueden usar RxIndicateChangeOfBufferingState, mientras que los mini-redireccionadores de red que no requieren esta ayuda pueden usar RxIndicateChangeOfBufferingStateForSrvOpen.

El administrador de almacenamiento en búfer de RDBSS procesa estas solicitudes en distintas fases. Mantiene las solicitudes recibidas de los distintos mini-redireccionadores de red subyacentes en una de varias listas.

  • La lista Distribuidor contiene todas las solicitudes para las que no se ha establecido la asignación adecuada a una estructura de SRV_OPEN.

  • La lista Controlador contiene todas las solicitudes para las que se ha establecido la asignación adecuada, pero aún no se ha procesado.

  • LastChanceHandlerList contiene todas las solicitudes para las que el procesamiento inicial no se realizó correctamente. Esto suele ocurrir cuando se adquirió el FCB en un modo compartido en el momento en que se recibió la solicitud de estado de almacenamiento en búfer de cambios. En tales casos, la solicitud de interrupción de interbloqueo solo se puede procesar mediante un subproceso de trabajo retrasado.

El procesamiento de solicitudes de estado de almacenamiento en búfer de cambio en un controlador minidirector de red se entrelaza con el protocolo de adquisición y liberación de FCB. Esto ayuda a garantizar tiempos de respuesta más cortos.

RDBSS proporciona las siguientes rutinas para administrar el estado de almacenamiento en búfer que los controladores de minidirector de red pueden usar:

Rutina Descripción

RxChangeBufferingState

Se llama a esta rutina para procesar una solicitud de cambio de estado de almacenamiento en búfer.

RxIndicateChangeOfBufferingState

Se llama a esta rutina para registrar una solicitud de cambio de estado de almacenamiento en búfer (una indicación de interrupción de interbloqueo, por ejemplo) para su posterior procesamiento.

RxIndicateChangeOfBufferingStateForSrvOpen

Se llama a esta rutina para registrar una solicitud de cambio de estado de almacenamiento en búfer (una indicación de interrupción de interbloqueo, por ejemplo) para su posterior procesamiento.