Главная » 2016 » Март » 28 » Флаги 0_DSYNC и 0_RSYNC
12:09
Флаги 0_DSYNC и 0_RSYNC
В стандарте POSIX определяются еще два флага системного орепО, связанныес синхронизированным вводом-выводом: 0 DSYNC и 0 RSYNC. В Linux эти флагисчитаются синонимами 0 SYNC и предоставляют в точности ту же функциональность.Флаг 0 DSYNC указывает, что после каждой операции записи должны синхронизироватьсятолько обычные данные, но не метаданные. Это можно представлятьсебе как неявное выполнение после каждого запроса на запись вызоваfdatasyncO. Так как 0 SYNC обеспечивает более надежные гарантии, отсутствиеявной поддержки 0 DSYNC не приводит ни к каким потерям; единственное, чтовозможно небольшое падение производительности из-за более серьезных требований,предъявляемых 0 SYNC.Флаг 0 RSYNC включает синхронизацию не только запросов на запись, нои запросов на чтение. Его необходимо использовать вместе с одним из другихфлагов — 0 SYNC или 0 DSYNC. Как я уже сказал выше, операции считывания всегдасинхронизируются, — в конце концов, они не могут возвращать значение дотех пор, пока у них не будет чего-то, что можно предъявить пользователю. Флаг0 RSYNC предусматривает, что любые побочные эффекты операции считываниятакже были синхронизированы. Это означает, что метаданные, обновляемыепосле операций считывания, должны записываться на диск до того, как вызоввозвращает значение. В практических терминах это требование, вероятнее всего,означает, что, перед тем как read() вернет значение, должно обновиться времяпоследнего доступа к файлу в копии inode на диске. Linux определяет, чтофлаг 0 RSYNC должен работать так же, как 0 SYNC, хотя в действительности в этомнет смысла (эти два флага не связаны между собой так, как 0 SYNC и 0 DSYNC).Пока что в Linux не существует способа добиться функциональности, которуюдолжен обеспечивать флаг 0 RSYNC; максимум, что может делать разработчик, —это вызывать fdatasyncO после каждого вызова readO. Но в таком поведениинеобходимость возникает крайне редко.
Просмотров: 392 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar