複数のプロセスで同時にファイルを更新したいと思います。これらのプロセスはすべて並列書き込み用にファイルを開きます。
使用される略語:
f
:文書、p[i]
:プロセスi
、b[i]
i
:プロセスによって開かれたFDバッファですi
。
質問:
- ファイルが開き、ストリームが設定されると、
fpath
内部でinode番号に変換されますか? inodeはパーティション内でのみ一意であることを読みました。 - 同じファイルが並列に開くと、Linuxはどのように書き込みを管理しますか?
- いっぱいになると
b[1]
フラッシュされます。これは誰もがp[i]
ファイルの変更を見始めるということですか?これは起こらないでしょう。それでは、バッファの内容が更新される場所はどこですか? COWが発生した場合、Linuxはディスク上にダーティページのコピーを作成することを意味しますか?それともMVCCに似たものはありますか? (すべてのページをコピーするのではなくダーティページのみを書き換えるとします。そうしないと、大容量ファイルを変更するのは面倒です。) - 実験的に
vi
エディタを使ってファイルを開いてみました。端末とエディタを使用してファイルを削除し、ファイルにテキストを追加して保存しました。ファイルが再生成されました。別のケースでは、ファイルを編集せずにエディタで閉じると、ファイルはもう存在しません。 COWが動作しているようです。しかし、2番目のケースではファイルが削除されたため、COWはファイルのメモリページを使用してファイルを再生成しますか?ファイルサイズは10GBですが、すぐにメモリに入らないとどうなりますか?