"UNIX: взаимодействие процессов" - читать интересную книгу автора (Стивенс Уильям Ричард)
1.4. Пространства имен
Если два неродственных процесса используют какой-либо вид IPC для обмена информацией, объект IPC должен иметь имя или идентификатор, чтобы один из процессов (называемый обычно сервером — server) мог создать этот объект, а другой процесс (обычно один или несколько клиентов — client) мог обратиться к этому конкретному объекту.
Программные каналы (pipes) именами не обладают (и поэтому не могут использоваться для взаимодействия между неродственными процессами), но каналам FIFO сопоставляются имена в файловой системе, являющиеся их идентификаторами (поэтому каналы FIFO могут использоваться для взаимодействия неродственных процессов). Для других типов IPC, рассматриваемых в последующих главах, используются дополнительные соглашения об именовании (naming conventions). Множество возможных имен для определенного типа IPC называется его пространством имен (name space). Пространство имен — важный термин, поскольку для всех видов IPC, за исключением простых каналов, именем определяется способ связи клиента и сервера для обмена сообщениями.
В табл. 1.2 сведены соглашения об именовании для различных видов IPC.
Таблица 1.2. Пространства имен для различных типов IPC
Тип IPC
Пространство имен для создания или открытия
Идентификатор после открытия
Posix.1 1996
Unix 98
Канал
(Без имени)
Дескриптор
•
•
FIFO
Имя файла (pathname)
Дескриптор
•
•
Взаимное исключение Posix
(Без имени)
Указатель типа pthread_mutex_t
•
•
Условная переменная Posix
(Без имени)
Указатель типа pthread_cond_t
•
•
Блокировка чтения-записи Posix
(Без имени)
Указатель типа pthread_rwlock_t
•
Блокировка записей fcntl
Имя файла
Дескриптор
•
•
Разделяемая память Posix
Posix-имя IPC
Дескриптор
•
•
Очередь сообщений System V
Ключ key_t
Идентификатор IPC System V
•
Семафор System V
Ключ key_t
Идентификатор IPC System V
•
Разделяемая память System V
Ключ key_t
Идентификатор IPC System V
•
Двери (doors)
Имя файла
Дескриптор
Удаленный вызов процедур (RPC) Sun
Программа/версия
Дескриптор (handle) RPC
Сокет TCP
IP-адрес и порт TCP
Дескриптор
.1g
•
Сокет UDP
IP-адрес и порт TCP
Дескриптор
.1g
•
Доменный сокет Unix (domain socket)
Полное имя файла
Дескриптор
.1g
•
Здесь также указано, какие формы IPC содержатся в стандарте Posix.1 1996 года и какие были включены в стандарт Unix 98. Об обоих этих стандартах более подробно рассказано в разделе 1.7. Для сравнения мы включили в эту таблицу три типа сокетов, которые подробно описаны в [24]. Обратите внимание, что интерфейс сокетов (Application Program Interface — API) стандартизируется рабочей группой Posix.1g и должен в будущем стать частью стандарта Posix.1.
Хотя стандарт Posix. 1 и дает возможность использования семафоров, их поддержка не является обязательной для производителей. В табл. 1.3 сведены функции, описанные в стандартах Posix.1 и Unix 98. Каждая функция может быть обязательной (mandatory), неопределенной (not defined) или необязательной (дополнительной — optional). Для необязательных функций мы указываем имя константы (например, _POSIX_THREADS), которая будет определена (обычно в заголовочном файле lt;unistd.hgt;), если эта функция поддерживается. Обратите внимание, что Unix 98 содержит в себе Posix.1 в качестве подмножества.
Таблица 1.3. Доступность различных форм IPC
Тип IPC
Posix.1 1996
Unix 98
Программный канал
Обязателен
Обязателен
FIFO
Обязателен
Обязателен
Взаимное исключение Posix
_POSIX_THREADS
Обязателен
Условная переменная Posix
_POSIX_THREADS
Обязателен
Взаимные исключения и условные переменные между процессами
_POSIX_THREADS_PROCESS_SHARED
Обязателен
Блокировка чтения-записи Posix
(He определен)
Обязателен
Блокировка записей fcntl
Обязателен
Обязателен
Очередь сообщений Posix
_POSIX_MESSAGE_PASSING
_XOPEN_REALTIME
Семафоры Posix
_POSIX_SEMAPHORES_
_XOPEN_REALTIME
Память с общим доступом Posix
_POSIX_SHARED_MEMORY_OBJECTS
_XOPEN_REALTIME
Очередь сообщений System V
(He определен)
Обязателен
Семафор System V
(He определен)
Обязателен
Память с общим доступом System V
(He определен)
Обязателен
Двери (doors)
(He определен)
(Не определен)
Удаленный вызов процедур Sun
(He определен)
(Не определен)
Отображение памяти mmap
_POSIX_MAPPED_FILES или POSIX_SHARED_MEMORY_OBJECTS