Я знаю, что ядро гарантирует, что, если не использовать его, определенный размер (он называется PIPE_BUF, 4096 байт) данных был записан атомарно, что означает другой процесс, который пытается читать блоки.
Пока яМне было интересно, что если я запишу блок данных morea (скажем, «abc ... [x bytes] ... xyz») на устройство хранения, то в то время, когда ядро выполняет действие, ядро сначала запишет abcи xyz последний?
Если нет, то может произойти какой-то другой процесс, читающий «* ... [x bytes] ... xyz» до завершения действия записи.Я думаю, что для многих приложений это катастрофа.
Кто-нибудь знает реализацию или, где я могу найти ответ в исходном коде ядра?
С нетерпением ждем ваших ответов!Спасибо!
[обновление 2011.11.12]
Я изучил исходный код, но не могу понять его полностью.Я обнаружил вызывающую цепочку "write -> vfs_write -> do_sync_write [loops] -> generic_file_aio_write [inode_mutex] -> __generic_file_aio_write -> .. -> generic_perform_write -> .. -> __copy_from_user (>) для пользователя ()
__ copy_from_user - это макрос / функция, реализованная с помощью архитектурно-зависимых асм-кодов, и я не могу сейчас их понять. Но я думаю, что кодер сделает это, поскольку большинство из нас думает, как это должно быть ...
Надежды на осветление Фуртура ~