unlink
、fsync
、およびrename
は、定義上アトミックであるものだけですか?
編集:アトミックとは、操作が成功して効果があるか、失敗して効果がないことを意味します。操作が失敗して効果があってはなりません。
明らかにカーネルがパニックに陥った場合、プログラムは操作の失敗のエラーを処理できませんが、この場合は失敗したことを考慮する必要があります
unlink
、fsync
、およびrename
は、定義上アトミックであるものだけですか?
編集:アトミックとは、操作が成功して効果があるか、失敗して効果がないことを意味します。操作が失敗して効果があってはなりません。
明らかにカーネルがパニックに陥った場合、プログラムは操作の失敗のエラーを処理できませんが、この場合は失敗したことを考慮する必要があります
fsync(2)
アトミックかどうかはわかりません。ファイルのバッファ キャッシュに 100 メガバイトのダーティがある場合、そのデータを書き出すのに数秒かかり、ディスクへの転送中にカーネルがクラッシュする可能性があります。おそらく、搭載されている DMA エンジンは 4 メガバイトの書き込みしか処理できません。おそらく DMA サポートがなく、CPU は 512 バイト ブロックを介してすべての書き込みをスケジュールする必要があります。
「アトミック」とはどういう意味ですか?
mkdir
ディレクトリがディスク上に存在し、親ディレクトリにリンクされているか、ディレクトリのデータ構造がまだ親ディレクトリにリンクされていないため、アクセスできません --> 存在しません。
同じことがにも当てはまります: 途中で完了しmount(2)
たものを見つけるのは難しく、それが失敗した場合、マウント全体が失敗します: ファイルシステムがマウントされているか、マウントされていないかのいずれかです。mount(2)
umount(2)
面白いです、それは怠惰に行うことができますが、一度アンマウントすると、open(2)
orcreat(2)
呼び出しには使用できません。
では、「アトミック」とはどういう意味ですか? :)