Скачиваний:
90
Добавлен:
12.05.2015
Размер:
913.92 Кб
Скачать

12.4. Пространства имен

Если два неродственных процесса используют какой-либо вид IPC для обмена информацией, объект IPC должен иметь имя или идентификатор, чтобы один из процессов (называемый обычно сервером – server) мог создать этот объект, а другой процесс (обычно один или несколько клиентов – client) мог обратиться к этому конкретному объекту.

Программные каналы (pipes) именами не обладают (и поэтому не могут использоваться для взаимодействия между неродственными процессами), но каналам FIFO сопоставляются имена в файловой системе, являющиеся их идентификаторами (поэтому каналы FIFO могут использоваться для взаимодействия неродственных процессов). Для других типов IPC, рассматриваемых в последующих главах, используются дополнительные соглашения об именовании (naming conventions). Множество возможных имен для определенного типа IPC называется его пространством имен (name space). Пространство имен – важный термин, поскольку для всех видов IPC, за исключением простых каналов, именем определяется способ связи клиента и сервера для обмена сообщениями.

В табл. 12.2сведены соглашения об именовании для различных видов IPC.

Таблица 12.2

Пространства имен для объектов IPC различных типов

Тип IPC

Пространство имен для создания или открытия

Идентификатор после открытия

Программный канал (pipe)

(Без имени)

Дескриптор

Именованный канал (FIFO)

Имя файла

Дескриптор

Взаимное исключение

(Без имени)

Переменная типа pthread_mutex_t

Условная переменная

(Без имени)

Переменная типа pthread_cond_t

Блокировка чтения-записи

(Без имени)

Переменная типа pthread_rwlock_t

Блокировка записей fcntl

Имя файла

Дескриптор

Очередь сообщений System V

Ключ key_t

Идентификатор IPC System V

Семафор System V

Ключ key_t

Идентификатор IPC System V

Память с общим доступом System V

Ключ key_t

Идентификатор IPC System V

Гнездо TCP (TCP socket)

IP-адрес

и порт TCP

Дескриптор

Гнездо UDP (UDP socket)

IP-адрес

и порт UDP

Дескриптор

Гнездо домена Unix (Unix domain socket)

Имя файла

Дескриптор

12.5. Действие команд fork, exec и exit на объекты ipc

Нам нужно достичь понимания действия функций fork,execи_exitна различные формы IPC, которые мы обсуждаем (последняя из перечисленных функций вызывается функциейexit). Информация по этому вопросу сведена в табл.12.3.

Таблица 12.3

Действие функций fork,execи_exitна объекты IPC

Тип IPC

fork

exec

_exit

Неименован-ные и именованные каналы

Порожденный процесс получает копии всех дескрипторов родительского процесса

Все открытые дескрипторы остаются открытыми, если для них не установлен бит FD_CLOEXEC

Все открытые дескрипторы закрываются, данные из программного канала и FIFO удаляются после последнего закрытия

Взаимные исключения, условные переменные и блокировки чтения-записи

Общий доступ, если используется разделяемая память с атрибутом разделения между процессами

Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения

Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения

Блокировка записей fcntl

Блокировки в родительском процессе не наследуются порожденным процессом

Блокировки не изменяются до тех пор, пока не закроется дескриптор

Все несброшенные блокировки, установленные процессом, снимаются

Очереди сообщений System V

Не действует

Не действует

Не действует

Семафоры System V

Все значения semadjв порожденном процессе устанавливаются в 0

Все значения semadjпередаются новой программе

Все значения semadjдобавляются к значению соответствующего семафора

Разделяемая память System V

Присоединенные сегменты разделяемой памяти остаются присоединенными в порожденном процессе

Присоединенные сегменты разделяемой памяти отсоединяются

Присоединенные сегменты разделяемой памяти отсоединяются

Отображение памяти

Отображения памяти родительского процесса сохраняются в порожденном

Отображения памяти сбрасываются

Отображения памяти сбрасываются

Соседние файлы в папке Chapter.4