1.4. Пространства имен
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), которая будет определена (обычно в заголовочном файле <unistd.h>), если эта функция поддерживается. Обратите внимание, что 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Данный текст является ознакомительным фрагментом.