"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 Обязателен
Сигналы реального времени (realtime signals) _POSIX_REALTIME_SIGNALS _XOPEN_REALTIME