Уступающая блокировка (opportunistic lock) (также называемая oplock) является блокировкой, помещенной клиентом в файл, находящийся на сервере. В большинстве случаев, клиент запрашивает уступающую блокировку; таким образом он может кэшировать данные локально, что сокращает сетевой трафик и улучшает очевидное время ответа. Уступающие блокировки используются сетевыми редиректорами для клиентов с удаленными серверами, а так же приложениями - клиентами на локальных серверах.
Уступающие блокировки координируют кэширование данных и последовательность работы между клиентами и серверами и среди нескольких клиентов. Данные, которые являются последовательными (coherent ), являются данными, которые являются теми же самыми, что и через сеть. Другими словами, если данные являются последовательными, данные относительно сервера и всех клиентов синхронизированы.
Уступающие блокировки - это не команды клиента на сервер. Они - запросы от клиента на сервер. С точки зрения клиента они являются уступающими. Другими словами, сервер предоставляет такие блокировки всякий раз, когда другие факторы делают блокировки возможными.
Когда локальные запросы прикладной программы обращаются к удаленному файлу, реализация уступающих блокировок прозрачна для приложения. Сетевой редиректор и вызванный сервер открывают и закрывают уступающие блокировки автоматически. Однако, уступающие блокировки могут использоваться также тогда, когда локальные запросы прикладной программы обращаются к локальному файлу, а доступ других приложений и процессов должен быть делегирован, чтобы предотвратить порчу файла. В этом случае, локальное приложение непосредственно запрашивает уступающую блокировку из локальной файловой системы и кэширует файл локально. Когда используется таким образом уступающая блокировка - фактически семафор, управляемый локальным сервером и главным образом используется для назначений последовательности данных в файле и для уведомления о доступе к файлу.
Перед тем, как использовать уступающие блокировки в своем приложении, Вы должны овладеть методами доступа к файлу и его совместным использованием, описанными в статье Создание и открытие файлов.
Максимальное число параллельных уступающих блокировок, которые Вы можете создать, ограничивается только объемом доступной памяти. Максимальное число, создаваемых в тестовых условиях в Windows 2000 и NTFS, является 359 000 блокировок.
Локальные приложения не должны попытаться запрашивать уступающие блокировки из удаленных серверов. Если делается попытка, чтобы сделать это, то функция DeviceIoControl возвратит ошибку.
Уступающие блокировки в приложениях имеют очень ограниченное применение. Единственное практическое использование - это проверка сетевого редиректора или обработчика уступающей блокировки сервера. Как правило, файловые системы обеспечивают поддержку уступающих блокировок. Приложения, как правило, оставляют управление уступающей блокировкой драйверам файловой системы. Любая реализация файловой системы должна использовать Набор инструментов монтируемой файловой системы для Windows 2000. Любой разрабатываемый драйвер устройства, другой, а не монтируемой файловой системы, должен использовать Набор инструментов разработки драйверов Windows 2000 (DDK).
Уступающие блокировки и ассоциированные операции - это супернабор уступающей блокировки части протокола Общей межсетевой файловой системы (CIFS), Проект Internet. Протокол CIFS - улучшенная версия протокола Блока серверных сообщений (SMB). Дополнительную информацию о протоколе CIFS, см. Обзор протокола Microsoft SMB и протокола CIFS.
Обратите внимание! на то, что то, что Проект Internet протокола CIFS явно предусматривает, что реализация протокола CIFS может осуществить уступающие блокировки, отказываясь от передачи прав им. |
Нижеследующие темы рассматривают уступающие блокировки:
Дополнительную информацию об уступающих блокировках, см. в теме, обсуждающей Проект Internet протокола CIFS. Любые несоответствия между этим обсуждением и текущим Проектом Internet протокола CIFS должны быть решены в пользу Проекта Internet.