Синхронизированный ввод-вывод

Jul 19, 2012 09:09


Хотя синхронизация ввода-вывода - это очень важная тема, не следует бояться
вопросов, связанных с отложенной записью. Буферизация записи обеспечивает


огромный выигрыш в производительности, и, следовательно, в любой операционной
системе, находящейся хотя бы на полпути к получению звания ?современная
?, реализуется отложенная запись с использованием буферов. Тем не
менее иногда в приложениях возникает необходимость контролировать момент,
когда данные оказываются на диске. Для этого ядро Linux предоставляет
несколько параметров, позволяющих обменивать производительность на синхронность
операций.
fsync() и fdatasync()
Самый простой способ гарантировать, что данные достигнут диска, - использовать
системный вызов fsync(), определенный в POSIX.lb следующим образом:
finclude
int fsync (int fd);
Вызов fsyncO гарантирует, что все грязные данные, соответствующие файлу,
который указан при помощи дескриптора файла fd, записываются обратно
на диск. Файловый дескриптор fd должен быть открыт для записи. Этот вызов
обеспечивает запись на диск и данных, и метаданных, например временных меток
создания и других атрибутов, содержащихся в inode. Он не возвращает значение
до тех пор, пока жесткий диск не сообщает, что данные и метаданные
были успешно записаны на диск.
Если запись кэшируется на диске, то fsyncO не может знать, попадают ли
данные на диск физически. Жесткий диск может сообщить, что данные были
записаны, пока они в действительности еще остаются в кэше записи диска.

Previous post Next post
Up