Взаимодействие процессов. Сигналы, именованные и неименованные каналы, IPC, сокеты.

Резидентная в RAM часть OS UNIX называется ядром. Программа ядра оформлена как выполняемый файл, который хранится в корневом каталоге корневой файловой системы OS UNIX и имеет имя, однозначно выделяющее его среди других файлов. Все работы вне ядра оформлены в виде процессов выполнения системных и прикладных программ. Под процессом понимается единица вычислительной работы, потребляющая ресурсы, предоставляемые ядром, для обработки системных и прикладных программ, которые оформлены как командные или выполняемые файлы на внешнем устройстве. Процессы могут взаимодействовать между собой посредством программных каналов или сигналов и обращаться к подпрограммам ядра через системные вызовы.

Программный канал есть средство коммуникации процессов, которое можно рассматривать как программно реализованную линию связи для передачи данных между двумя или более процессами. Каналы реализованы в виде снабженных специальным механизмом управления буферов ввода-вывода, которые трактуются как псевдо-файлы.

Каналы принято использовать следующим образом. Один процесс направляет (записывает) данные в канал. Другой процесс получает (читает) данные из канала.

Сигналыгенерируется, когда происходят определенные события, которые вызывают посылку сигнала. Сигнальные события могут быть вызваны программными и аппаратными причинами, прерыванием от терминала, результатом измерения времени и выполнением других процессов. Если инициатор сигнала ядро, другой процесс или интерактивные действия пользователя, то сигнал считается асинхронным по отношению к процессу-приемнику сигнала. Когда сигнал инициируется выполнением инструкций процесса-приемника, сигнал считается синхронным.

Каждый сигнал имеет уникальный номер, однозначно определяющий событие, которым он вызван.

Aсинхронные терминальные сигналы. SIGHUP - разрыв связи с терминалом; SIGINT - прерывание от терминала, генерируется при нажатии Ctrl-C; SIGQUIT - сигнал выхода, генерируется при нажатии Ctrl-\.

Синхронные сигналы ловушки SIGILL - попытка выполнить нелегальную машинную инструкцию; SIGFPE - десятичное переполнение или деление на 0; SIGBUS - ошибка шины при неверной косвенной адресации; SIGSEGV - нарушение границ сегментов адресного пространства; SIGSYS - неверный параметр при обращении к системному вызову; SIGPIPE - разрыв программного канала.

Сигнал от таймера реального времени SIGALRM - генерируется ядром при истечении интервала, заданного системным вызовом alarm.

Сигналы от событий в других процессах или системе SIGKILL - безусловное завершение процесса; SIGTERM - условное завершение процесса; SIGUSR1 - сигнал, определенный пользователем; SIGUSR2 - сигнал, определенный пользователем; SIGCONT - возобновление выполнения приостановленного процесса.

Пакет IPC (interprocess communication) включает в себя три механизма. Механизм сообщений дает процессам возможность посылать другим процессам потоки сформатированных данных, механизм разделения памяти позволяет процессам совместно использовать отдельные части виртуального адресного пространства, а семафоры - синхронизировать свое выполнение с выполнением параллельных процессов. Несмотря на то, что они реализуются в виде отдельных блоков, им присущи общие свойства.

  • С каждым механизмом связана таблица, в записях которой описываются все его детали.
  • В каждой записи содержится числовой ключ (key), который представляет собой идентификатор записи, выбранный пользователем.
  • В каждом механизме имеется системная функция типа "get", используемая для создания новой или поиска существующей записи; параметрами функции являются идентификатор записи и различные флаги (flag). Ядро ведет поиск записи по ее идентификатору в соответствующей таблице.
  • В каждом механизме ядро использует следующую формулу для поиска по дескриптору указателя на запись в таблице структур данных: указатель = значение дескриптора по модулю от числа записей в таблице
  • Каждая запись имеет некую структуру данных, описывающую права доступа к ней.
  • В каждой записи имеется другая информация, описывающая состояние записи.
  • В каждом механизме имеется системная функция типа "control", запрашивающая информацию о состоянии записи, изменяющая эту информацию или удаляющая запись из системы.

Сообщения

С сообщениями работают четыре системных функции: msgget, которая возвращает (и в некоторых случаях создает) дескриптор сообщения, определяющий очередь сообщений и используемый другими системными функциями, msgctl, которая устанавливает и возвращает связанные с дескриптором сообщений параметры или удаляет дескрипторы, msgsnd, которая посылает сообщение, и msgrcv, которая получает сообщение.

Синтаксис вызова системной функции msgget:

msgqid = msgget(key,flag);

где msgqid - возвращаемый функцией дескриптор, а key и flag имеют ту же семантику, что и в системной функции типа "get".

Для посылки сообщения процесс использует системную функцию msgsnd:

msgsnd(msgqid,msg,count,flag);

где msgqid - дескриптор очереди сообщений, обычно возвращаемый функцией msgget, msg - указатель на структуру, состоящую из типа в виде назначаемого пользователем целого числа и массива символов, count - размер информационного массива, flag - действие, предпринимаемое ядром в случае переполнения внутреннего буферного пространства.

Сокеты – универсальные методы взаимодействия процессов на основе использования многоуровневых сетевых протоколов. Сокеты предназначены для работы по сети: блокируют драйверы, для удобства выполнения локальных подпрограмм.

Сокеты можно разбить на 2 типа:

1. Виртуальный канал - обеспечивает надежную доставку данных с сохранением исходной последовательности.

2. Дейтаграммы - не гарантируют надежную доставку с сохранением уникальности и последовательности, но они более экономны в смысле использования ресурсов, поскольку для них не требуются сложные установочные операции; таким образом, дейтаграммы полезны в отдельных случаях взаимодействия.


Наши рекомендации