Если я многократно выполняю несколько операций записи одного и того же значения в сопоставленную память, соответствующую файлу в файловой системе, приводит ли это к нескольким физическим операциям записи (и, как следствие, к износу носителя)?
Справочная информация:
Я переношу сегмент постоянных данных, хранящихся на устройстве в NVRAM, на флэш-память, и поэтому проблемы со средним износом начинают иметь значение - у NVRAM бесконечные циклы записи, у флэш-памяти - нет.Но батареи в старых чипах NVRAM, уже снятые с производства, начали выходить из строя, и это подтолкнуло нас.
Две ключевые строки при доступе к файлу на флэш-памяти:
fd = open(filename, O_RDWR|O_CREAT|O_SYNC);
file = (unsigned char*) mmap(0, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
, в частности, примечание, O_SYNC и MAP_SHARED - файловая система защищена от повреждения, и самые последние данные должны сохраняться неожиданноотключение питания, поэтому я не откладываю запись (например, мы уведомлены, что питание отключилось примерно за 0,3 с до того, как конденсаторы блока питания разрядятся, а устройство выключится без какого-либо осторожного отключения. Этот факт следует отметить в журналах,который будет создан при следующей загрузке на основе фрагмента данных, сохраненных перед отключением питания в этой системе).
Теперь код полон записей разных крошечных фрагментов данных, которые прошивка хотела сохранить при неожиданной перезагрузке, но не беспокоясь о файлах на флэш-памяти.С бесконечными циклами записи и одинаковым чтением со скоростью записи было проще и быстрее просто записать любое значение, которое я хотел, чем чтение, и записывать только в том случае, если его нужно было изменить.Теперь процедура обработки перенесена на запись во флэш-память (через mmap), и мне интересно, стоит ли защищать ее от ненужных записей, читая сначала, а затем записывая, только если отличается, или это просто пустая трата времени и ресурсов и вызовов ОСсправиться с этим внутренне?(на самом деле не могу отказаться от O_SYNC; если у меня есть часть данных для записи, мне нужно, чтобы она была записана СЕЙЧАС, а не в буферах, которые могут исчезнуть через полсекунды вместе с питанием всей системы.)
Linux, Arm9.