次の方法で共有


日和見ロック

日和見ロック (oplock とも呼ばれます) は、クライアントがサーバー上に存在するファイルに配置するロックです。 ほとんどの場合、クライアントは、データをローカルにキャッシュできるようにするために日和見ロックを要求します。これにより、ネットワークトラフィックが減少し、見かけ上の応答速度が改善されます。 オポチュニスティックロックは、リモートサーバーを介してアクセスするクライアントのネットワークリダイレクターや、ローカルサーバー上で動作するクライアントアプリケーションによって使用されます。

このセクションに掲載されているオポチュニスティック ロックに関する記事は、主にクライアント アプリケーションに関連していますが、ネットワーク リダイレクターに関する情報も提供されています。 ネットワークリダイレクターに関するオプロック情報の詳細は、Windows WDK の Oplocks 記事を参照してください。

概要

オポチュニスティックロックは、クライアントとサーバー間および複数のクライアント間のデータ キャッシュと整合性を調整します。 コヒーレントなデータは、ネットワーク全体で同じデータです。 つまり、データが一貫性がある場合、サーバー上のデータとすべてのクライアントが同期されます。

Opportunistic ロックは、クライアントによるサーバーへのコマンドではありません。 クライアントからサーバーへの要求です。 クライアントの観点から見ると、これらは日和見的です。 言い換えると、他の要因によってロックが可能になるたびに、サーバーはこのようなロックを許可します。

ローカルアプリケーションがリモートファイルへのアクセスを要求する際、オポチュニスティックロック(日和見ロック)の実装はアプリケーションに対して透過的に行われます。 ネットワーク リダイレクターと関係するサーバーは、オポチュニスティックロックを自動的に開いたり閉じたりします。 ただし、ローカル アプリケーションがローカル ファイルへのアクセスを要求し、他のアプリケーションやプロセスによるアクセスを委任してファイルの破損を防ぐ必要がある場合には、オポチュニスティックロックを使用することもできます。 この場合、ローカル アプリケーションはローカル ファイル システムに対して日和見ロックを要求し、ファイルをローカルでキャッシュします。 この方法で使用する場合、オポチュニスティック ロックは実質的にローカルサーバーによって管理されるセマフォとして機能し、主にデータの一貫性を保ち、ファイルおよびファイルアクセスの通知の目的で使用されます。

アプリケーションで日和見ロックを使用する前に、「ファイルの 作成と開く」で説明されているファイル アクセスモードと共有モードを理解しておく必要があります。

作成できる同時機会的ロックの最大数は、利用可能なメモリ量によってのみ制限されます。

ローカルアプリケーションは、リモートサーバーにオポチュニスティックロックを要求しないでください。 これを行おうとすると、 DeviceIoControl によってエラーが返されます。

オポチュニスティックロックは、アプリケーションにとって限定的な使用価値があります。 ローカル ファイル システム上のアプリケーションによる日和見ロックの 1 つの用途は、透過的なファイル アクセスを提供することです。 コンテンツ インデクサーやその他のスキャナーなどのアプリケーションは、日和見ロックを使用して、別のアプリケーションがインデクサー アプリケーションが処理しているファイルにアクセスしようとしていることを通知できます。 これにより、インデクサーはそのハンドルを閉じ、他のアプリケーションの邪魔をしなくなり、他のアプリケーションの共有違反やその他の問題を引き起こすことを回避できます。 アプリケーションでの日和見ロックのもう 1 つの実用的な用途は、ネットワーク リダイレクターまたはサーバーの日和見ロック ハンドラーをテストすることです。

通常、ファイルシステムはオポチュニスティックロックのサポートを実装します。 ほとんどのアプリケーションは、日和見ロック管理をファイルシステムドライバーに任せています。 ファイル システムを実装するすべてのユーザーは、 インストール可能なファイル システム (IFS) キットを使用する必要があります。 インストール可能なファイル システム以外のデバイス ドライバーを開発する場合は、 Windows Driver Kit (WDK) を使用する必要があります。

日和見ロックとそれに関連する操作は、インターネットドラフトであるCommon Internet File System (CIFS) プロトコルでの日和見ロック部分のスーパーセットです。 CIFS プロトコルは、サーバー メッセージ ブロック (SMB) プロトコルの拡張バージョンです。 詳細については、「 Microsoft SMB プロトコルと CIFS プロトコルの概要」を参照してください。 CIFS Internet Draft は、CIFS の実装が、許可を拒むことによって日和見ロックを実装する可能性があることを明示しています。

次のトピックでは、日和見ロックを識別します。

このセクションでは...

トピック 説明
ローカル キャッシュ データのローカル キャッシュは、データ ファイルへのネットワーク アクセスを高速化するために使用される手法です。 可能な場合は、サーバーではなくクライアントでデータをキャッシュする必要があります。
データコヒーレンシー データがコヒーレントである場合、サーバー上のデータとすべてのクライアントが同期されます。 データの一貫性を提供するソフトウェア システムの 1 つの種類は、リビジョン制御システム (RCS) です。
オポチュニスティックロックを要求する方法 Opportunistic ロックは、アプリケーションに適したアクセス許可とフラグを持つファイルを最初に開くことで要求されます。 オポチュニスティックロックが要求されるすべてのファイルは、オーバーラップ (非同期) 操作のために開く必要があります。
ロックされたファイルの開いている要求に対するサーバー応答 アプリケーションが他のクライアントに与える影響と、アプリケーションに与える影響を最小限に抑えるには、可能な限り多くの共有を許可し、必要な最小限のアクセス レベルを要求し、アプリケーションに適した最小限の割り込み日和見ロックを使用します。
日和見ロックの種類 オポチュニスティック ロックの読み取り/書き込みハンドル、読み取り/書き込み、読み取りハンドル、および読み取りについて説明します。 また、レガシーレベル1、レベル2、バッチ、およびフィルターのオポチュニスティックロックについても説明します。
Opportunistic ロックの解除 日和見ロックを解除することは、あるクライアントがファイルに対して持つロックを低下させ、日和見ロックの有無にかかわらず別のクライアントがファイルを開くことができるプロセスです。
日和見ロックの例 レベル 1 の日和見ロック、バッチ日和見ロック、フィルター日和見ロックのネットワーク トラフィック ビューの図。
オポチュニスティックロック操作 アプリケーションが日和見ロックを要求する場合は、FILE_FLAG_OVERLAPPED フラグを指定して CreateFile 関数を使用して、ロックを要求するすべてのファイルを、重複する (非同期の) 入出力用に開く必要があります。

オポチュニスティックロックの詳細については、CIFS インターネットドラフト文書を参照してください。 このトピックと現在の CIFS インターネット ドラフトとの間の不一致は、CIFS インターネット ドラフトを優先して解決する必要があります。

こちらも参照ください

NetApp ファイル アクセスとプロトコル管理ガイド

Oplocks (WDK)