日和見ロック
便宜的ロック (oplock とも呼ばれます) は、サーバー上に存在するファイルにクライアントによって配置されるロックです。 ほとんどの場合、クライアントは、データをローカルにキャッシュして、その結果ネットワーク トラフィックを減らし、見かけの応答時間を向上できるように、便宜的ロックを要求します。 便宜的ロックは、リモート サーバーを使ったクライアント上のネットワーク リダイレクターと、ローカル サーバー上のクライアント アプリケーションによって使用されます。
注意
このセクションで見つかった日和見ロックに関する記事は、主にクライアント アプリケーションに関連していますが、一部の情報はネットワーク リダイレクターに提供されています。 ネットワーク リダイレクターの詳細については、Windows WDK の Oplocks に関する記事を参照してください。
概要
便宜的ロックは、クライアントとサーバー間および複数のクライアント間のデータ キャッシュと一貫性を調整します。 一貫性のあるデータとは、ネットワーク全体で同じであるデータです。 つまり、データに一貫性がある場合は、サーバーとすべてのクライアント上のデータが同期されています。
便宜的ロックは、クライアントによるサーバーへのコマンドではありません。 これらは、クライアントからサーバーへの要求です。 クライアントの観点から見ると、これらは便宜的です。 つまり、サーバーでは他の要因によりロックが可能になる場合はいつでも、このようなロックを許可します。
ローカル アプリケーションからリモート ファイルへのアクセスが要求されると、便宜的ロックの実装はアプリケーションに対して透過的になります。 ネットワーク リダイレクターと関係するサーバーにより、便宜的ロックが自動的に開閉されます。 ただし、ローカル ファイルへのアクセスがローカル アプリケーションから要求され、ファイルの破損を防ぐために他のアプリケーションおよびプロセスのアクセスを委任する必要がある場合にも、便宜的ロックを使用できます。 この場合、ローカル アプリケーションではローカル ファイルシステムから直接便宜的ロックを要求し、ファイルをローカルでキャッシュします。 この方法で使用される場合、便宜的ロックは事実上、ローカル サーバーにより管理されるセマフォであり、主に、ファイルとファイル アクセス通知でのデータ一貫性の目的で使用されます。
アプリケーションで便宜的ロックを使用する前に、「ファイルの作成とオープン」で説明されているファイル アクセスと共有モードについて理解しておく必要があります。
作成できる同時便宜的ロックの最大数は、使用可能なメモリの量によってのみ制限されます。
ローカル アプリケーションでは、リモート サーバーから便宜的ロックを要求しないでください。 これを行おうとすると、DeviceIoControl によってエラーが返されます。
便宜的ロックは、アプリケーションでの使用が非常に限られています。 唯一の実用的な用途は、ネットワーク リダイレクターまたはサーバーの便宜的ロック ハンドラーをテストすることです。 通常、ファイル システムにより便宜的ロックのサポートが実装されます。 アプリケーションでは一般に、便宜的ロック管理をファイル システム ドライバーに任せています。 ファイル システムを実装するすべてのユーザーは、インストール可能ファイル システム (IFS) キットを使用する必要があります。 インストール可能なファイル システム以外のデバイス ドライバーを開発するすべてのユーザーは、Windows Driver Kit (WDK) を使用する必要があります。
便宜的ロックと関連する操作は、Common Internet File System (CIFS) プロトコル (インターネット ドラフト) の便宜的ロック部分のスーパーセットです。 CIFS プロトコルは、サーバー メッセージ ブロック (SMB) プロトコルの拡張バージョンです。 詳しくは、「Microsoft SMB プロトコルと CIFS プロトコルの概要」をご覧ください。 CIFS インターネット ドラフトでは、便宜的ロックの許可を拒否することで、CIFS 実装で便宜的ロックを実装できることを明示的に示しています。
次のトピックでは便宜的ロックについて説明します。
このセクションの内容
トピック | 説明 |
---|---|
ローカル キャッシュ | データのローカル キャッシュは、データ ファイルへのネットワーク アクセスを高速化するために使用される手法です。 可能な場合は、サーバーではなくクライアントにデータをキャッシュします。 |
データの一貫性 | データに一貫性がある場合は、サーバーとすべてのクライアント上のデータが同期されています。 データの一貫性をもたらすソフトウェア システムの 1 つの種類が、リビジョン制御システム (RCS) です。 |
便宜的ロックを要求する方法 | 便宜的ロックは、最初にアクセス許可を持つファイルを開き、ファイルを開くアプリケーションに適したフラグを設定することで要求されます。 便宜的ロックが要求されるすべてのファイルは、重複 (非同期) 操作に対して開く必要があります。 |
ロックされたファイルでのオープン要求に対するサーバー応答 | アプリケーションが他のクライアントに与える影響と、そのクライアントがアプリケーションに与える影響を最小限に抑えるには、可能な限り多くの共有を許可し、必要な最小限のアクセス レベルを要求し、アプリケーションに適した最も影響が少ない便宜的ロックを使用します。 |
便宜的ロックの種類 | レベル 1、レベル 2、バッチ、フィルターの便宜的ロックについて説明します。 |
便宜的ロックの解除 | 便宜的ロックの解除とは、あるクライアントがファイルに対して持っているロックを低下させ、便宜的ロックの有無にかかわらず別のクライアントがファイルを開くことができるようにするプロセスです。 |
便宜的ロックの例 | レベル 1 の便宜的ロック、バッチ便宜的ロック、フィルター便宜的ロックのネットワーク トラフィック ビューの図。 |
便宜的ロックの操作 | アプリケーションで便宜的ロックが必要になる場合は、FILE_FLAG_OVERLAPPED フラグと共に CreateFile 関数を使用して、ロックを必要とするすべてのファイルを重複 (非同期) 入出力用に開く必要があります。 |
便宜的ロックの詳細については、CIFS インターネット ドラフトに関するドキュメントを参照してください。 このトピックと現在の CIFS インターネット ドラフトとの不一致は、CIFS インターネットドラフトを優先して解決してください。