Compartir a través de


Bloqueos oportunistas y redirectores de red

Los redirectores de red usan bloqueos oportunistas para optimizar el rendimiento del acceso a archivos y reducir el tráfico de red en entornos de servidor cliente.

Esta documentación está pensada para desarrolladores de redirectores de red, aunque se aplica cierta información a los desarrolladores de aplicaciones cliente. Para obtener más documentación sobre los bloqueos oportunistas relacionados con las aplicaciones cliente, consulte los artículos Bloqueos oportunistas del SDK de Windows.

Introducción a Oplock

Un bloqueo oportunista es un bloqueo colocado por un cliente en un archivo que reside en un servidor. En la mayoría de los casos, un cliente solicita un interbloqueo para que pueda almacenar en caché los datos localmente. Los redirectores de red usan los bloqueos oportunistas en los clientes con servidores remotos y las aplicaciones cliente en servidores locales. Consulte Tipos de bloqueos oportunistas para obtener una descripción de los distintos bloqueos oportunistas actuales y heredados.

Los bloqueos oportunistas permiten a los clientes de servidor de archivos (como los clientes que usan los protocolos SMB y SMB2) modificar dinámicamente la estrategia de almacenamiento en búfer para un determinado archivo o secuencia de forma coherente. El uso de bloqueos oportunistas aumenta el rendimiento y reduce el uso de red. Para aumentar el rendimiento de red para las operaciones de archivos remotos, un cliente puede almacenar en búfer los datos de archivos localmente, lo que reduce o elimina la necesidad de enviar y recibir paquetes de red. Por ejemplo:

  • Es posible que un cliente no tenga que escribir información en un archivo en un servidor remoto si el cliente sabe que ningún otro proceso tiene acceso a los datos.
  • Un cliente puede almacenar en búfer los datos de lectura anticipada del archivo remoto si el cliente sabe que ningún otro proceso está escribiendo datos en el archivo remoto.

Las aplicaciones y los controladores también pueden usar bloqueos oportunistas para acceder de forma transparente a los archivos sin afectar a otras aplicaciones que podrían necesitar usar estos archivos.

Los sistemas de archivos como NTFS admiten varias secuencias de datos por archivo. El sistema concede bloqueos oportunistas en los identificadores de flujo, lo que significa que se concede el bloqueo oportunista para una apertura determinada de una secuencia de archivos y las operaciones que se aplican a esa secuencia. Con pocas excepciones, las operaciones de una secuencia no afectan a los bloqueos oportunistas en una secuencia diferente. Para obtener más información, consulte Solicitud y concesión de bloqueos oportunistas.

En el caso de los sistemas de archivos que no admiten flujos de datos alternativos, como FAT, piense en "archivo" cuando las discusiones sobre bloqueo oportunista se refieran a "secuencia".

La funcionalidad de bloqueo oportunista principal del paquete de bloqueos oportunistas se implementa en el kernel, principalmente a través de rutinas FsRtlXxx, como FsRtlInitializeOplock. Los sistemas de archivos llaman a este paquete para implementar la funcionalidad de bloqueo oportunista en su sistema de archivos. En los artículos sobre bloqueo oportunista de esta sección se describe cómo interopera el sistema de archivos NTFS con el paquete de bloqueo oportunista de kernel. Otros sistemas de archivos funcionan de forma similar, aunque puede haber pequeñas diferencias.

Claves de bloqueo oportunista

El identificador de secuencia se puede asociar a una clave de bloqueo oportunista, que es un valor de GUID que identifica varios identificadores que pertenecen a la misma vista de caché de cliente. Es más preciso decir que la clave de bloqueo oportunista está asociada a la estructura FILE_OBJECT a la que hace referencia el identificador de secuencia. Esta distinción es importante cuando el identificador está duplicado, como con DuplicateHandle. Cada uno de los identificadores duplicados hace referencia a la misma estructura FILE_OBJECT subyacente.

La clave de bloqueo oportunista se puede proporcionar explícitamente (a IoCreateFileEx) cuando se crea el identificador de secuencia. Si no se especifica explícitamente una clave de bloqueo oportunista al crear el identificador, el sistema trata el identificador como tener una clave de bloqueo oportunista única asociada. Esta clave única difiere de cualquier otra clave en cualquier otro identificador.

Una bloqueo oportunista se interrumpe cuando:

  • Se recibe una operación de archivo en un identificador distinto de aquel en el que se concedió el bloqueo oportunista, Y
  • La clave de bloqueo oportunista asociada al identificador del bloqueo oportunista difiere de la clave asociada al identificador de la operación, Y
  • La operación no es compatible con el bloqueo oportunista concedido actualmente.

El bloqueo oportunista se interrumpe incluso si es el mismo proceso o subproceso que realiza la operación incompatible. Por ejemplo, un bloqueo oportunista exclusivo se interrumpe inmediatamente cuando:

  1. Un proceso abre una secuencia para la que se concede un bloqueo oportunista exclusivo.
  2. A continuación, ese mismo proceso abre la misma secuencia de nuevo con una clave de bloqueo oportunista diferente (o no).

Para obtener más información, consulte Interrupción de bloqueos oportunistas.

Recuerde que existen claves de bloqueo oportunista en los identificadores a las que se "coloca" el identificador cuando se crea el identificador. Puede asociar un identificador a una clave de bloqueo oportunista incluso si no se conceden bloqueos oportunistas.