Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сетевые перенаправления используют оппортунистические блокировки (oplocks) для оптимизации производительности доступа к файлам и уменьшения сетевого трафика в средах клиента-сервера.
Эта документация предназначена для разработчиков сетевого перенаправления, хотя некоторые сведения относятся к разработчикам клиентских приложений. Дополнительные сведения о документации по oplock, связанной с клиентскими приложениями, см. в статьях о оппортунистических блокировках пакета SDK для Windows.
Обзор oplock
Оплок (оппортунистическая блокировка) — это блокировка, которую клиент помещает в файл, расположенный на сервере. В большинстве случаев клиент запрашивает оплок, чтобы кэшировать данные локально. Сетевые перенаправления на клиентах с удаленными серверами используют оплоки, как и клиентские приложения на локальных серверах. Типы оплоков см. в описании различных текущих и устаревших оплоков.
Oplocks позволяет клиентам файлового сервера (например, клиентам с помощью протоколов SMB и SMB2) динамически изменять стратегию буферизации для заданного файла или потока согласованно. Использование оплоков повышает производительность и уменьшает использование сети. Чтобы повысить производительность сети для удаленных операций с файлами, клиент может буферировать данные файлов локально, что снижает или устраняет необходимость отправки и получения сетевых пакетов. Например:
- Клиенту может не потребоваться записывать данные в файл на удаленном сервере, если клиент знает, что другой процесс не обращается к данным.
- Клиент может буферифровать данные впереди чтения из удаленного файла, если клиент знает, что ни один другой процесс не записывает данные в удаленный файл.
Приложения и драйверы также могут использовать оплоки для прозрачного доступа к файлам без влияния на другие приложения, которые могут потребоваться использовать эти файлы.
Файловые системы, такие как NTFS, поддерживают несколько потоков данных для каждого файла. Система предоставляет оплоки в дескрипторах потоков, что означает, что система предоставляет оплок для заданного открытия потока файлов и операций, применяемых к этому потоку. За исключением нескольких исключений, операции с одним потоком не влияют на блокировки в другом потоке. Дополнительные сведения см. в разделе "Запрос и предоставление оплоков".
Для файловых систем, которые не поддерживают альтернативные потоки данных, например FAT, думайте о "файле", когда обсуждения oplock ссылаются на "поток".
Ядро реализует основные функции oplock пакета oplock, в первую очередь с помощью подпрограмм FsRtlXxx , таких как FsRtlInitializeOplock. Файловые системы вызывают этот пакет для реализации функций oplock в файловой системе. В статьях о блокировке в этом разделе описывается взаимодействие файловой системы NTFS с пакетом oplock ядра. Другие файловые системы работают аналогичным образом, хотя могут быть незначительные различия.
Клавиши oplock
Можно связать дескриптор потока с ключом oplock, который является значением GUID, которое идентифицирует несколько дескрипторов, принадлежащих одному представлению кэша клиента. Более точно сказать, что ключ oplock связан с структурой FILE_OBJECT , к которому относится дескриптор потока. Это различие важно при дублировании дескриптора, например с помощью DuplicateHandle. Каждая из повторяющихся дескрипторов ссылается на одну и ту же базовую FILE_OBJECT структуру.
При создании дескриптора потока можно явно указать ключ oplock (в IoCreateFileEx). Если вы явно не указываете ключ oplock при создании дескриптора, система обрабатывает дескриптор так, как если бы у него был уникальный ассоциированный с ним ключ oplock. Этот уникальный ключ отличается от любого другого ключа в любом другом дескрипторе.
При выполнении всех следующих условий опблокировка прерывается:
- Операция с файлом поступает на дескриптор, отличном от того, на котором была предоставлена блокировка.
- Ключ oplock, связанный с дескриптором oplock, отличается от ключа, связанного с дескриптором операции.
- Операция несовместима с предоставленным в настоящее время оплоком.
Блокировка oplock прерывается, даже если тот же процесс или поток выполняет несовместимую операцию. Например, эксклюзивный оплок немедленно прерывается, когда:
- Процесс открывает поток, для которого предоставляется монопольная блокировка.
- Тот же процесс снова открывает тот же поток, используя другой ключ блокировки или без него.
Дополнительные сведения см. в разделе "Критические блоки".
Помните, что ключи oplock относятся к дескрипторам, и вы добавляете их на дескриптор, когда создаете его. Можно связать дескриптор с ключом oplock, даже если не предоставляются операции.