Re: mmap асинхронная запись
От: watchmaker  
Дата: 31.07.14 18:21
Оценка: 2 (1)
Здравствуйте, valuea, Вы писали:

V>1. Гарантируется ли в этом случае последовательность записи данных на диск, то есть сначала будет записана первая страница, затем вторая? Либо для асинхронных опреаций в общем случае никакой последовательности не соблюдается?

Не гарантируется и не соблюдается.

V>2. Если сразу после второго вызова msync (или во время его выполнения в другом потоке), вторая страница будет перезаписана, то какие данные в конечном итоге попадут в файл? Те, которые были на момент вызова msync, или на момент физической записи на диск?


В конечном итоге попадут в файл те данные, которые были на момент вызова munmap.

msync с флагом MS_ASYNC — это вызов-подсказка. Он не влияет на данные, он лишь сообщает ОС что пора бы уже начать их сбрасывать на диск. Этот вызов никак не влияет на то что будет записано на диск «в конечном итоге», он лишь может влиять на время когда это произойдёт. То есть какие-то отличия в содержимом файла могут проявится разве что только в аварийных ситуациях вроде внезапного отключения электропитания. Впрочем с практической точки зрения это почти бесполезно — гарантированно избечь повреждений в такой ситуации всё равно нельзя.
И ещё раз, этот вызов лишь подсказка, а подсказки ОС может игнорировать. Например, некоторые ядра linux не инициируют запись вообще при наличии флага MS_ASYNC — и это вполне допустимое поведение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.