Главная страница Взаимодействие нетривиальных процессов Таблица 1.2 (продолжение)
Здесь также указано, какие формы IPC содержатся в стандарте Posix. 11996 года и какие были включены в стандарт Unix 98. Об обоих этих стандартах более подробно рассказано в разделе 1.7. Для сравнения мы включили в эту таблицу три типа сокетов, которые подробно описаны в [24]. Обратите внимание, что интерфейс сокетов (Application Program Interface - API) стандартизируется рабочей грзшпой Posix.lg и должен в будущем стать частью стандарта 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
1.5. Действие команд fork, exec и exit на объекты IPC
1.5. Действие команд fork, exec и exit на объе1сты 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 Тип IPC fork exec exit Неименованные и именованные каналы Очереди сообщений Posix Очереди сообщений System V Взаимные исключения и условные переменные Posix Блокировки чтения-записи Possix Порожденный процесс получает копии всех дескрипторов родительского процесса Порожденный процесс получает копии всех открытых родительских процессов Не действует Общий доступ, если используется разделяемая память с атрибутом разделения между процессами Общий доступ, если используется память с общим доступом и атрибутом разделения между процессами Все открытые дескрипторы остаются открытыми, если для них не установлен бит FD CLOEXEC Все открытые дескрипторы очередей сообщений закрываются Не действует Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения Все открытые дескрипторы закрываются, данные из программного канала и FIFO удаляются после последнего закрытия Все открытые дескрипторы очередей сообщений закрываются Не действует Исчезает, если не находится в разделяемой памяти, которая остается открытой и имеет атрибут разделения Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения -продолжение Таблица 1.4 (продолжение) Тип IPC fork вхес exit Семафоры Posix, хранящиеся в памяти Именованные семафоры Possix Семафоры System V Блокировка записей fcntl Отображение памяти Разделяемая память Posix Разделяемая память System V Двери (doors) Общий доступ, если используется память с общим доступом и атрибутом разделения между процессами Все открытые в родительском процессе остаются открытыми в порожденном Все значения semadj в порожденном процессе устанавливаются в О Блокировки в родительском процессе не наследуются порожденным процессом Отображения памяти родительского процесса сохраняются в порожденном Отображения памяти родительского процесса сохраняются в порожденном Присоединенные сегменты разделяемой памяти остаются присоединенными в порожденном процессе Порожденный процесс получает копии всех открытых дескрипторов родительского процесса, но только родительский процесс является сервером при активизации дверей через дескрипторы Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения Все открытые закрываются Все значения semadj передаются новой программе Блокировки не изменяются до тех пор, пока не закроется дескриптор Отображения памяти сбрасываются (unmap) Отображения памяти сбрасываются Присоединенные сегменты разделяемой памяти отсоединяются Все дескрипторы дверей должны быть закрыты, потому что они создаются с установленным битом FD CLOEXEC Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения Все открытые закрываются Все значения semadj добавляются к значению соответствующего семафора Все несброшенные блокировки, установленные процессом, снимаются Отображения памяти сбрасываются Отображения памяти сбрасываются Присоединенные сегменты разделяемой памяти отсоединяются Все открытые дескрипторы закрываются 1.6. Обработка ошибок: функции-обертки в любой реальной программе при любом вызове требуется проверка возвращаемого значения на наличие ощибки. Поскольку обычно работа программ при возникновении ощибок завершается, мы можем сократить объем текста, определив функции-обертки (wrapper functions), которые осуществляют собственно вызов функции, проверяют возвращаемое значение и завершают работу при возникновении ошибок. В соответствии с соглашениями имена функций-оберток совпадают с именами самих функций, за исключением первой буквы, которая делается заглавной, например Sem post(ptr):
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |