我想通过多个进程并行对文件执行更新。这些进程都打开该文件以并行写入。
使用的缩写:
f
: 文件,p[i]
: 过程i
,b[i]
i
:进程打开的FD 缓冲区i
。
问题:
- 当打开文件并建立流时,
fpath
内部是否会转换为索引节点号?我读到 inode 仅在分区中是唯一的。 - 当并行打开同一个文件时,linux如何管理写入?
- 如果
b[1]
满了,就会冲水。这是否意味着所有人p[i]
都将开始看到文件中的更改?这不会发生。那么缓冲区的内容被刷新到哪里了呢?如果发生 COW,这是否意味着 linux 在磁盘上创建脏页的副本?或者有类似MVCC的东西吗? (我假设不是复制所有页面,而是只重写脏页面,因为否则修改大文件会很麻烦) - 作为实验,我使用
vi
编辑器打开了一个文件。我使用终端和编辑器删除了文件,向文件添加了一些文本并保存。文件已重新创建。在另一种情况下,当文件未编辑时,当我在编辑器中关闭它时,它不再存在。看来COW正在工作。但由于文件在第二种情况下被删除,COW是否使用文件的内存页面来重新创建文件?如果文件大小为 10GB 并且无法立即装入内存怎么办?