Какие операции файловой системы должны быть атомарными? - PullRequest
7 голосов
/ 08 марта 2011

Являются ли unlink, fsync и rename единственными, которые по определению являются атомарными?

Редактировать: атомарными означает, что операция либо завершается успешно, и имеет эффектили имеет неудачи и не имеет никакого эффекта;операция не должна завершаться с ошибкой и иметь эффект.

ясно, если ядро ​​паникует, программа не может обработать ошибку сбоя операции, но в этом случае она должна учитывать, что произошла ошибка

Ответы [ 2 ]

6 голосов
/ 13 июня 2014

Вот статья, в которой перечислены некоторые элементарные операции с файлами:

http://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html

mv, link, symlink, mkdir и некоторые способы открытия файлов являются атомарными.

2 голосов
/ 08 марта 2011

Я не уверен, fsync(2) является атомным;если в буферном кеше файла содержится грязные 100 мегабайт, для записи этих данных потребуется несколько секунд, и ядро ​​может дать сбой во время передачи на диск.Возможно, встроенный механизм DMA может обрабатывать только 4-мегабайтные записи.Возможно, поддержка DMA отсутствует, и ЦП должен планировать каждую запись с помощью 512-байтовых блоков.

Что вы подразумеваете под «атомарным»?

mkdir, вероятно, «атомарно», либокаталог существует на диске и связан с родительским каталогом, или структура данных каталога еще не связана с родительским каталогом и поэтому недоступна -> не существует.

То же самое может пойтидля mount(2): было бы трудно найти mount(2) на полпути завершенным, и в случае неудачи происходит полное монтирование: либо монтируется файловая система, либо нет.

umount(2) забавно, это может быть сделано лениво, но как только оно размонтировано, оно не может быть использовано для open(2) или creat(2) вызовов.

Итак, я думаю, все сводится к тому, что вы подразумеваете под«атомное»?:)

...