Please enable JavaScript.
Coggle requires JavaScript to display documents.
6_Межпроцессное взаимодействие - Coggle Diagram
6_Межпроцессное взаимодействие
Разделяемая память
Это специальный механизм, с помощью которого средствами операционной системы два процесса могут обращаться к общему участку физической памяти — каждый через свое адресное пространство.
Для операционной системы этот способ является наиболее простым — ведь все страницы виртуальной памяти процессов в любом случае проецируются на какую-то область физической памяти.
Однако для пользователя такой способ межпроцессного взаимодействия является труднодоступным.
Во-первых, программы, взаимодействующие таким образом, должны изначально содержать соответствующий код — с помощью специальных системных вызовов обе программы должны обозначить участки своих адресных пространств, предназначенные для обмена информацией.
Другая сложность состоит в том, что разделяемая память сама по себе не содержит средств синхронизации, программы должны согласованно изменять общий участок памяти, чтобы не испортить данные; обычно для этих целей применяются семафоры и аналогичные механизмы синхронизации.
Переменные окружения
Каждый запускаемый процесс система снабжает информационным пространством, которое этот процесс может изменять. Правила пользования этим пространством просты: в нем можно задавать именованные хранилища данных (переменные окружения), в которые записывать любую текстовую информацию (присваивать значение переменной окружения), а впоследствии эту информацию считывать (подставлять значение переменной).
В UNIX дочерний процесс создаётся как точная копия родительского, поэтому его окружение — также точная копия родительского.
Одна и та же программа при одинаковом использовании, но в измененном окружении — может выдавать различные результаты.
переменные окружения — очень ограниченное средство межпроцессного взаимодействия.
Во-первых, действие их односторонне, так как дочерний процесс не может изменить окружение родительского процесса. Более того, родительский процесс никак не может воспользоваться информацией из окружения дочернего.
В-третьих, через переменные окружения можно передавать только текстовые данные, обычно небольшого объёма.
Во-вторых, окружение уже запущенного процесса изменить извне нельзя.
Сигналы
одно из традиционных средств межпроцессного взаимодействия в UNIX. Сигнал может быть отправлен процессу операционной системой или другим процессом.
При получении сигнала исполнение процесса приостанавливается и запускается специальная подпрограмма — обработчик сигнала.
У сигнала есть только одна характеристика, несущая информацию — его номер (целое число).
К основным сигналам относятся:
SIGALRM (14)
Процесс может с помощью специального системного вызова abort задать время, через которое ему необходимо отправить сигнал. Через указанный промежуток времени операционная система доставит процессу сигнал SIGALARM.
SIGCHLD
Сигнал отправляется родительскому процессу в случае завершения его дочернего процесса. По умолчанию сигнал игнорируется.
SIGCONT
Сигнал продолжения исполнения программы после остановки. Обработчика по умолчанию нет.
SIGFPE (8)
Сигнал ошибки в вычислениях с плавающей точкой, отправляется операционной системой при некорректном исполнении программы. Обработчик по умолчанию завершает процесс.
SIGHUP (1)
Сигнал закрытия терминала, к которому привязан данный процесс. Обычно отправляется операционной системой всем процессам, запущенным из командной строки при завершении сеанса пользователя. Обработчик по умолчанию завершает процесс.
SIGILL (4)
Сигнал некорректной инструкции. Отправляется операционной системой процессу в случае, если в исполнении программы встретилась некорректная инструкция процессора. Обработчик по умолчанию завершает процесс.
SIGKILL (9)
Сигнал аварийного завершения процесса. По этому сигналу процесс завершается немедленно — без освобождения ресурсов. Этот сигнал не может быть перехвачен, заблокирован или переопределён самим процессом, всегда используется стандартный обработчик операционной системы.
SIGPIPE (13)
Сигнал отправляется процессу, который пытается отправить данные в канал, закрытый с противоположной стороны. Такая ситуация может возникнуть в случае, если один из взаимодействующих процессов был аварийно завершён. Обработчик по умолчанию завершает процесс.
SIGSEGV (11)
Сигнал отправляется процессу операционной системой, если была произведена неверная операция с памятью. Обработчик по умолчанию завершает процесс.
SIGSTOP
Сигнал приостановки работы процесса. Этот сигнал не может быть перехвачен, заблокирован или переопределён.
SIGTERM (15)
Сигнал завершения процесса, как правило используется для корректного завершения его работы.
Каналы
Канал — поток данных между двумя или несколькими процессами, имеющий интерфейс, аналогичный чтению или записи в файл. Каналы бывают одно- и двунаправленными.
По умолчанию в UNIX каждому процессу при запуске ставится в соответствие три открытых файла:
стандартного ввода
стандартного вывода
стандартного вывода для ошибок
С помощью средств командной строки такие потоки для разных процессов могут быть объединены
Сокеты
Сокеты предоставляют альтернативный интерфейс обмена данными как в рамках одной системы, так и между процессами, запущенными на разных машинах в сети.
Клиентский процесс устанавливает соединение, и с этого момента по образовавшемуся каналу можно передавать поток данных в обе стороны.
Такие сокеты называются потоковыми.
Клиентский процесс устанавливает соединение, и с этого момента по образовавшемуся каналу можно передавать поток данных в обе стороны.
Такие сокеты называются потоковыми.
Другой тип сокетов, датаграммный, позволяет отправлять сообщения между процессами, привязанными к данному сокету.
Интерфейс сокетов впервые появился в операционной системе BSD и использовался для связи компьютеров через сеть Internet по протоколам TCP и UDP
Резюме
Управление процессами — второй важный аспект работы операционной системы UNIX. В операционной системе реализован сложный механизм управления памятью, позволяющий организовать собственное виртуальное адресное пространство для каждого процесса в системе.
Каждый процесс в системе имеет уникальный идентификатор, состояние и контекст исполнения.
В UNIX реализован механизм псевдопараллельного исполнения множества процессов.
Для межпроцессного взаимодействия используются специальные средства, основными среди которых являются разделяемая память, каналы, сигналы и сокеты.
6.
неименованные каналы - С помощью средств командной строки такие потоки для разных процессов могут быть
объединены так, что, к примеру, вывод одного процесса будет подаваться на ввод другого
именованные каналы — представляют собой особый тип
файлов. Эти файлы располагаются в файловой системе и могут быть открыты любым процессом