1. ホーム
  2. filesystems

ファイルシステムはどのように同時読み取り/書き込みを処理するのですか?

2023-10-16 11:21:50

質問

ユーザAがシステムに対してファイル foo を読み込むように要求し、同時にユーザーBが同じファイルに自分のデータを保存することを望んでいます。この状況は、ファイルシステムレベルでどのように処理されるのでしょうか?

どのように解決するのですか?

ほとんどのファイルシステム (すべてではありません) は、同じファイルへの同時アクセスを保護するためにロックを使用します。ロックは排他的であり、最初にロックを取得したユーザーがアクセスを取得し、それ以降のユーザーは "アクセス拒否" エラーを取得します。この例のシナリオでは、ユーザー A はファイルを読むことができ、ファイル ロックを取得しますが、ユーザー B はユーザー A が読んでいる間、書き込むことができません。

一部のファイル システム (例: NTFS) では、ロック レベルを指定することができ、たとえば、同時読み取りは可能だが書き込みはできないようにすることができます。バイトレンジのロックも可能です。

データベースとは異なり、ファイルシステムは一般的にトランザクションではなく、アトミックでもなく、異なるユーザーからの変更は分離されません (変更が見られるとしても、ロックはこれを禁止しているかもしれません)。

ファイル全体のロックを使用することは、粒度の粗いアプローチですが、一貫性のない更新から保護することができます。すべてのファイルシステムがファイル全体のロックをサポートしているわけではないので、ロック ファイルを使用するのが一般的なプラクティスです。(ファイルの作成は、ほとんどのファイル システムでアトミックな操作です)。