UNIX: взаимодействие процессов | страница 9
Ядро | |
Семафор Posix в памяти (memory-based semaphore) | Процесс |
Разделяемая память Posix (shared memory) | Ядро |
Очередь сообщений System V | Ядро |
Семафор System V | Ядро |
Память с общим доступом System V | Ядро |
Сокет TCP (TCP socket) | Процесс |
Сокет UDP (UDP socket) | Процесс |
Доменный сокет Unix (Unix domain socket) | Процесс |
Обратите внимание, что ни один тип IPC в этой таблице не обладает живучестью, определяемой файловой системой. Мы уже упомянули о том, что три типа объектов IPC в стандарте Posix могут иметь этот тип живучести в зависимости от реализации. Очевидно, что запись данных в файл обеспечивает живучесть, определяемую файловой системой, но обычно IPC таким образом не реализуются. Большая часть объектов IPC не предназначена для того, чтобы существовать и после перезагрузки, потому что ее не переживают процессы. Требование живучести, определяемой файловой системой, скорее всего, снизит производительность данного типа IPC, а обычно одной из задач разработчика является именно обеспечение высокой производительности.
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 |