机会锁

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

注释

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

概述

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

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

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

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

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

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

机会锁机制对应用程序的作用有限。 本地文件系统上的应用程序使用机会锁的一种用途是提供透明的文件访问。 应用程序(如内容索引器或其他扫描程序)可以使用机会锁来通知另一个应用程序正在尝试访问索引器应用程序正在处理的文件。 这使索引器能够关闭其句柄,不妨碍其他应用程序,从而避免引起共享违规或其他问题。 应用程序中机会锁的另一个实际用途是测试网络重定向程序或服务器机会锁处理程序。

通常,文件系统实现对机会锁的支持。 大多数应用程序将机会性锁管理留给文件系统驱动程序。 任何实现文件系统的人都应使用 可安装文件系统 (IFS) 工具包。 任何开发可安装文件系统以外的设备驱动程序的人都应使用 Windows 驱动程序工具包(WDK)。

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

以下主题标识机会锁。

本部分内容

主题 DESCRIPTION
本地缓存 本地缓存 数据是一种技术,用于加快对数据文件的网络访问速度。 它涉及到尽可能在客户端而不是服务器上缓存数据。
数据一致性 如果数据是一致的,则服务器上的数据以及所有客户端都会同步。 提供数据一致性的软件系统是修订控制系统(RCS)。
如何请求机会锁 要请求机会锁,首先需要以适合于应用程序的权限和标志打开文件。 请求机会锁的所有文件都必须以重叠(异步)模式打开。
针对锁定文件打开请求的服务器响应 你可以通过授予尽可能多的共享、请求所需的最低访问级别,以及使用适合应用程序的最低侵入性机会锁来最大程度地降低应用程序对应用程序的影响,从而最大程度地降低应用程序对应用程序的影响。
机会锁的类型 介绍具有机会性锁的 Read-Write-Handle、Read-Write、Read-Handle 和 Read。 此外,还介绍了旧级别 1、级别 2、批处理和筛选机会锁。
破解机会锁 使机会锁失效是一个将一个客户端在文件上具有的锁降级的过程,以便另一个客户端可以打开文件,无论是否使用机会锁。
伺机锁示例 级别 1 机会锁、批处理机会锁和筛选器机会锁的网络流量视图关系图。
机会锁操作 如果应用程序请求机会锁,则必须使用具有FILE_FLAG_OVERLAPPED标志的 CreateFile 函数,为重叠(异步)输入和输出打开其请求锁的所有文件。

有关机会性锁的其他信息,请参阅 CIFS Internet 草稿文档。 本主题与当前 CIFS Internet 草稿之间的任何差异都应得到解决,以支持 CIFS Internet 草稿。

另请参阅

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

Oplocks (WDK)