Использование буферизованного пользователем ввода-вывода для операций с файлами
Я новичок в системном программировании, пожалуйста, обратите внимание, если мои сомнения очень расплывчаты.
Я читал, что встроенные буферы пространства пользователя используются для того, чтобы мы могли получить доступ к данным размера блока через системный вызов через ядро, которое требует огромных ресурсов, но в пространстве пользователя мы можем сделать крошечный доступ к данным небольшого размера. Я понял, как этот метод эффективен, но я не понял, так как эти пользовательские буферы относятся к каждому отдельному процессу, открывающему файл.
Как процесс распознает мелкие изменения, которые вносятся в файл, когда оба одновременно получают доступ к файлу.
Не создает ли это проблемы, поскольку процессы получат доступ к старым данным, но не к данным, которые были изменены каким-либо другим процессом, который все еще находится в буфере пространства пользователя.
Пожалуйста, помните меня, если какие-либо ошибки.
1 ответ
Да, так бывает Межпроцессные условия гонки присутствуют и могут создавать странное поведение при буферизации ввода-вывода. Однако, как правило, ввод не буферизуется слишком часто (обычно только строка за раз), так что это не так уж плохо. Есть способы обойти это, хотя через функцию под названием mmap
,
В некоторых случаях вы хотите, чтобы несколько процессов взаимодействовали, поэтому мы используем каналы / сокеты или какую-либо другую форму IPC (межпроцессное взаимодействие).
Хотя, чтобы ответить на то, что кажется вашей главной проблемой: нет, это не создает большой проблемы. Почему два процесса работают с одним файлом, если они не должны знать друг о друге, пока они это делают? Это не так часто, и когда это происходит, происходит что-то странное, и пользователь инстинктивно запускает одну программу за раз, и это исправляется.