W>Ну то есть обычный shadow paging?
Да, похоже. Буду знать как по научному называется.
W>Погоди-ка. Так ты всё-таки хочешь чтобы программа переживала внезапные сбои вроде пропадания электроэнергии, kernel panic, выхода из строя разного оборудования, вот это вот всё?
W>То есть управление порядком записи на диск нужно лишь для повышения вероятности, что после сбоя ОС (вроде внезапной перезагрузки) там окажется консинстентная структура. Если с этим нужно бороться, то да, синхронная синхронизация будет нужна.
Именно, но при этом не хотелось-бы вынуждать вызвающую сторону дожидаться окончания записи данных на диск, тем более при каждом новом вызове запись произоводится поочередно в различные участки файла, которые между собой не пересекаются. При этом не очень хочется создавать отдельный поток (дабы не держать поток вызывающей стороны), который занимался бы такой последовательной синхронизацией, а как раз таки переложить эту задачу "на плечи" ОС, что то типа асинхронную записи, но с выполнением условия последовательности. Если без отдельного потока не получитя, насколько я понимаю нужно будет копать в сторону kqueue (да, таки исключительно под FreeBSD).
W>а комбинация FreeBSD+ftruncate+MAP_NOSYNC вообще способна подвесить систему на несколько часов при неудачном стечении обстоятельств.
Да, как раз мой случай, только сейчас обратил внимание на предупреждение man-а.