Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 oplock (bloqueo oportunista) es un bloqueo que un cliente coloca 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 redireccionadores de red en clientes con servidores remotos usan interbloqueos, al igual que 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 de operación en identificadores de flujo, lo que significa que el sistema concede el interbloqueo para una apertura determinada de una secuencia de archivos y las operaciones 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".
El núcleo implementa la funcionalidad principal del paquete de oplock, principalmente a través de rutinas como 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
Puede asociar el identificador de flujo a una clave de interbloqueo, que es un valor 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 se duplica el identificador, como con DuplicateHandle. Cada uno de los identificadores duplicados hace referencia a la misma estructura FILE_OBJECT subyacente.
Puede proporcionar explícitamente la clave de oplock (en IoCreateFileEx) cuando se crea el identificador de secuencia. Si no especifica explícitamente una clave de interbloqueo en la creación del identificador, el sistema trata el identificador como tener una clave de interbloqueo única asociada. Esta clave única difiere de cualquier otra clave en cualquier otro identificador.
Un oplock se interrumpe cuando se cumplen todas las condiciones siguientes:
- Se recibe una operación de archivo en un identificador diferente al en el que se concedió el oplock.
- La clave de interbloqueo asociada al identificador del interbloqueo difiere de la clave asociada al identificador de la operación.
- La operación no es compatible con el bloqueo oportunista concedido actualmente.
El interbloqueo se interrumpe incluso si el mismo proceso o subproceso realiza la operación incompatible. Por ejemplo, un oplock exclusivo se rompe inmediatamente cuando:
- Un proceso abre una secuencia para la que se concede un bloqueo oportunista exclusivo.
- Ese mismo proceso vuelve a abrir la misma secuencia mediante una clave de interbloqueo diferente (o no).
Para obtener más información, consulte Interrupción de bloqueos oportunistas.
Recuerde que las claves de interbloqueo existen en los identificadores y se "colocan" el identificador al crearlo. Puede asociar un identificador a una clave de bloqueo oportunista incluso si no se conceden bloqueos oportunistas.