Тип 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 |
1.5. Действие команд fork, exec и exit на объекты IPC
Нам нужно достичь понимания действия функций fork, exec и _exit на различные формы IPC, которые мы обсуждаем (последняя из перечисленных функций вызывается функцией exit). Информация по этому вопросу сведена в табл. 1.4.
Большинство функций описаны далее в тексте книги, но здесь нужно сделать несколько замечаний. Во-первых, вызов fork из многопоточного процесса (multithreaded process) приводит к беспорядку в безымянных переменных синхронизации (взаимных исключениях, условных переменных, блокировках и семафорах, хранящихся в памяти). Раздел 6.1 книги [3] содержит необходимые детали. Мы просто отметим в добавление к таблице, что если эти переменные хранятся в памяти с общим доступом и создаются с атрибутом общего доступа для процессов, они будут доступны любому процессу, который может обращаться к этой области памяти. Во-вторых, три формы IPC System V не могут быть открыты или закрыты. Из листинга 6.6 и упражнений 11.1 и 14.1 видно, что все, что нужно знать, чтобы получить доступ к этим трем формам IPC, — это идентификатор. Поэтому они доступны всем процессам, которым известен этот идентификатор, хотя для семафоров и памяти с общим доступом требуется некая особая обработка.
Таблица 1.4. Действие fork, exec и _exit на IPC