IPC через запись в файлы? - PullRequest
3 голосов
/ 05 июня 2011

У меня вопрос по поводу межпроцессного взаимодействия в операционных системах.

Могут ли два процесса обмениваться данными друг с другом, когда оба процесса открывают один и тот же файл (скажем, был создан до того, как оба процесса, поэтому оба процесса имеют обработчик файла), а затем обмениваются данными посредством записи в этот файл?

Если да, к чему этот метод? Я слышал, что 2 основных способа IPC - это совместная память и передача сообщений. Какой из них подпадает под этот метод? Причина, по которой я не уверен, относится ли она к разделяемой памяти, заключается в том, что этот файл не сопоставлен с адресным пространством любого из этих процессов. И, насколько я понимаю, в разделяемой памяти область разделяемой памяти является частью адресного пространства обоих процессов.

Предположим, что процессы записывают в файл в каком-то заранее согласованном протоколе / формате, поэтому у обоих нет проблем с пониманием, где другой процесс записывает, когда и т. Д. Это предположение просто для понимания. В реальном мире, однако, это может быть слишком строгим, чтобы быть правдой и т. Д.

Если нет, что не так с этим сценарием? Неужели если два разных процесса открывают один и тот же файл, то изменения, сделанные первым процессом, не сохраняются в постоянном хранилище для просмотра другими, пока процесс не завершится? или что-то еще?

Любой реальный пример из Windows и Linux также должен быть полезен.

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

Системный вызов posix mmap выполняет сопоставление файлов с виртуальной памятью.Если отображение совместно используется двумя процессами, запись в эту область в одном процессе повлияет на другие процессы.Теперь возникает вопрос: да, процесс, считывающий или записывающий в базовый файл, не всегда будет видеть те же данные, что и процесс, который его отобразил, поскольку сегмент файла копируется в ОЗУ и периодически записывается на диск.Хотя я считаю, что вы можете принудительно синхронизироваться с системным вызовом msync.Читайте на mmap ().Он имеет множество других опций совместного использования памяти.

2 голосов
/ 05 июня 2011

Использование файла является разновидностью общей памяти.Вместо выделения общего буфера памяти в ОЗУ используется общий файл.

Для успешного управления связью необходим некоторый механизм блокировки для различных диапазонов в файле.Это может быть либо блокировка диапазонов, предоставляемых файловой системой (доступной по крайней мере в Windows), либо глобальные мьютексы операционной системы.

Один реальный сценарий, в котором дисковое хранилище используется для взаимодействия между процессами, - это кворумдиск используется в кластерах.Это общий дисковый ресурс, доступный через SAN всеми узлами кластера, в котором хранится конфигурация кластера.

...