oplock 的类型

本文介绍 oplock 的类型。

  • 四种 oplock 类型是最新的。
  • 四种 oplock 类型被视为旧版。

旧版 oplock

以下四个 oplock 在 Windows NT 3.1 (级别 1、级别 2、Batch) 和 Windows 2000 (Filter) 中实现,被视为“旧版 oplock”:

  • 1 级 (独占) oplock 允许客户端打开流进行独占访问并执行任意缓冲。 此 oplock 支持客户端读取缓存和写入缓存。

  • 2 级 (共享) oplock 表示流有多个读取器,没有编写器。 此 oplock 支持客户端读取缓存。

  • Batch oplock (独占) 允许客户端在服务器上保持流打开状态,即使客户端计算机上的本地访问器已关闭流也是如此。 此 oplock 支持客户端需要重复打开和关闭同一文件的方案,例如在批处理脚本执行期间。 它支持客户端读取缓存、写入缓存和处理缓存。

  • 筛选器 oplock (排他) 允许打开和读取流数据的应用程序和文件系统筛选器驱动程序在其他应用程序、客户端或两者尝试访问同一流时“退出”。 此 oplock 支持客户端读取缓存和写入缓存。

当前“Windows 7”oplock

以下 oplock 是在 Windows 7 中添加的,因此统称为“Windows 7 oplocks”:

  • 读取 (R) oplock (共享) 指示流有多个读取器,没有写入器。 此 oplock 支持客户端读取缓存。

  • 读取句柄 (RH) oplock (共享) 指示流有多个读取器,没有编写器,并且即使客户端计算机上的本地访问器已关闭流,客户端也可以使流在服务器上保持打开状态。 此 oplock 支持客户端读取缓存和处理缓存。

  • 读写 (RW) oplock (独占) 允许客户端打开流进行独占访问,并允许客户端执行任意缓冲。 此 oplock 支持客户端读取缓存和写入缓存。

  • ) oplock (独占) 的 读写处理 (RWH 允许客户端在服务器上保持流打开状态,即使客户端计算机上的本地访问器已关闭流也是如此。 此 oplock 支持客户端读取缓存、写入缓存和处理缓存。

某些旧版 oplock 可能看起来类似于 Windows 7 oplock。 具体而言,R 似乎类似于级别 2,RW 似乎类似于级别 1,RWH 似乎类似于 Batch。 但他们确实不同。 Windows 7 oplock 已添加到:

  • 为调用方提供更大的灵活性来表达缓存意图。
  • 允许 oplock 中断和升级;也就是说,为了允许将 oplock 状态从一个级别修改为更高级别的缓存 (例如,将 Read oplock 升级到 Read-Write oplock) 。

使用旧版 oplock 无法实现这种灵活性。