Современные реализации UNIX поддерживают большинство IPC-механизмов, представленных на рис. 43.1. Однако механизмы, относящиеся к стандарту POSIX (очереди сообщений, семафоры и разделяемая память) распространены не так широко, как их аналоги из мира System V; особенно это касается старых систем (реализация очередей POSIX-сообщений и поддержка POSIX-семафоров появились в Linux только в ветке ядра 2.6.
Во втором столбце табл. 43.2 указано важное свойство IPC-объектов каждой разновидности, — система прав доступа, определяющая, какие процессы могут работать с объектом. Ниже перечислены ряд подробностей, касающихся различных систем.
• В некоторых IPC-механизмах (например, в очередях FIFO и сокетах) имена объектов хранятся в файловой системе, а доступ к ним определяется соответствующей маской прав доступа к файлу, описывающей привилегии для владельца, группы и всех остальных (см. раздел 15.4). В System V объекты не хранятся в файловой системе, но у каждого из них есть маска, семантика которой похожа на используемую для файлов.
• Несколько IPC-механизмов (каналы, анонимное отображение в память) доступны только связанным процессам (как отмечено ниже). Эта
• Доступность безымянного POSIX-семафора определяется доступностью разделяемого участка памяти, в котором он находится.
• Чтобы установить блокировку на файл, процесс должен иметь дескриптор, ссылающийся на данный файл (на практике это значит, что он должен иметь права для его открытие).
• Доступ к сокету интернет-домена (то есть соединение с ним и передача ему датаграммы) не ограничен. При необходимости управление доступом следует реализовывать на уровне приложения.
Таблица 43.2. Доступность и сохраняемость различных типов IPC-объектов
Механизм — Доступность — Сохранямость
Канал — Только для родственного процесса — Процесс
Очередь FIFO — Через маску прав доступа — Процесс
Сокет домена UNIX — Через маску прав доступа — Процесс
Сокет интернет-домена — Для любого процесса — Процесс
Очередь сообщений в System V — Через маску прав доступа — Ядро
Семафор в System V — Через маску прав доступа — Ядро
Разделяемая память в System V — Через маску прав доступа — Ядро
Очередь POSIX-сообщений — Через маску прав доступа — Ядро
Именованный POSIX-семафор — Через маску прав доступа — Ядро
Безымянный POSIX-семафор — Через права доступа к памяти — По-разному
Разделяемая память в POSIX — Через маску прав доступа — Ядро
Анонимное отображение — Только для родственного процесса — Процесс
Файл, отображенный в память — Через маску прав доступа — Файловая система
Блокировка flock() — Через открытие файла — Процесс
Блокировка fcntl() — Через открытие файла — Процесс
Термин
•
Сохраняемость данных очереди FIFO отличается от сохраняемости ее имени. Имя хранится в файловой системе и продолжает существовать даже после закрытия всех файловых дескрипторов, ссылавшихся на очередь.