机会锁

机会锁(也称为 oplock)是客户端对驻留在服务器上的文件放置的锁。 在大多数情况下,客户端会请求机会锁,以便可以在本地缓存数据,从而减少网络流量并大幅缩短响应时间。 机会锁由具有远程服务器的客户端上的网络重定向程序以及本地服务器上的客户端应用程序使用。

注意

尽管为网络重定向程序提供了一些信息,但本部分中有关机会锁的文章主要涉及客户端应用程序。 可以在 Windows WDK 的 Oplocks 文章中找到有关网络重定向程序的 更多 oplock 信息。

概述

机会锁在客户端和服务器之间以及多个客户端之间协调数据缓存和一致性。 数据一致是指整个网络中的数据相同。 换句话说,如果数据是一致的,则服务器和所有客户端上的数据都是同步的。

机会锁不是客户端向服务器发出的命令。 它们是客户端向服务器发出的请求。 从客户端的角度来看,这些锁是机会性的。 换句话说,每当其他因素使锁成为可能时,服务器会授予此类锁。

当本地应用程序请求访问远程文件时,机会锁的实现对应用程序是透明的。 网络重定向程序和相关的服务器会自动打开和关闭机会锁。 但是,当本地应用程序请求访问本地文件时,也可以使用机会锁,并且必须委托其他应用程序和进程进行访问以防止文件损坏。 在这种情况下,本地应用程序直接从本地文件系统请求机会锁,并在本地缓存文件。 以这种方式使用机会锁时,机会锁实际上是由本地服务器管理的信号灯,主要用于确保文件和文件访问通知的数据一致性。

在应用程序中使用机会锁之前,你应熟悉创建和打开文件中所述的文件访问和共享模式。

可以创建的并发机会锁的最大数目仅受可用内存量的限制。

本地应用程序不应尝试从远程服务器请求机会锁。 如果尝试执行此操作,DeviceIoControl 将返回错误。

机会锁对应用程序的用途非常有限。 唯一的实际用途是测试网络重定向程序或服务器机会锁处理程序。 通常,文件系统实现对机会锁的支持。 应用程序通常将机会锁管理留给文件系统驱动程序。 实现文件系统的任何人都应使用可安装文件系统 (IFS) 工具包。 开发可安装文件系统以外的设备驱动程序的任何人都应使用 Windows 驱动程序工具包 (WDK)

机会锁和相关操作是通用 Internet 文件系统 (CIFS) 协议 Internet 草案的机会锁部分的超集。 CIFS 协议是服务器消息块 (SMB) 协议的增强版本。 有关详细信息,请参阅 Microsoft SMB 协议和 CIFS 协议概述。 CIFS Internet 草案明确指出 CIFS 实现可以通过拒绝授予机会锁来实现机会锁。

以下主题介绍了机会锁。

在本节中

主题 说明
本地缓存 数据的本地缓存是一种用于加速数据文件网络访问的技术。 它涉及到尽可能在客户端而不是服务器上缓存数据。
数据一致性 如果数据是一致的,则服务器和所有客户端上的数据都是同步的。 提供数据一致性的一种软件系统是修订控制系统 (RCS)。
如何请求机会锁 请求机会锁的方法的第一步是打开具有适用于打开文件的应用程序的权限和标志的文件。 必须打开将为其请求机会锁的所有文件,才能执行重叠(异步)操作。
服务器对已锁定文件的打开请求的响应 可以通过授予尽可能多的共享、请求必要的最低访问级别以及使用适合应用程序的侵入性最小的机会锁,最大限度地减少应用程序对其他客户端以及其他客户端对应用程序的影响。
机会锁的类型 介绍级别 1、级别 2、批处理和筛选器的机会锁。
中断机会锁 中断机会锁是指如下过程:降级一个客户端对文件拥有的锁,以便另一个客户端可以使用机会锁或无需使用使用机会锁来打开该文件。
机会锁示例 级别 1 机会锁、批处理机会锁和筛选器机会锁的网络流量视图关系图。
机会锁操作 如果应用程序请求机会锁,则必须将 CreateFile 函数与 FILE_FLAG_OVERLAPPED 标志一起使用,以打开它为其请求锁的所有文件进行重叠(异步)输入和输出。

有关机会锁的其他信息,请参阅 CIFS Internet 草案文档。 如果本主题与当前 CIFS Internet 草案之间有任何差异,应以 CIFS Internet 草案优先的原则予以解决。

请参阅

NetApp 文件访问和协议管理指南

Oplocks (WDK)