Системное программное обеспечение - Учебное пособие (Терехин А.Н.)

4         часть iii. реализация взаимодействия процессов.

В этой части будет рассмотрен весь спектр средств межпроцессного взаимодействия, которые предоставляет программисту ОС UNIX. Отметим, что многие из этих средств (такие как сигналы, средства IPC, сокеты, MPI) или их аналоги имеются и в других операционных системах. Таким образом, данное рассмотрение будет полезно в целом для формирования представления о многообразии механизмов взаимодействия процессов, теоретические основы которых были рассмотрены ранее.

Средства межпроцессного взаимодействия ОС UNIX позволяют строить прикладные системы различной топологии, функционирующие как  в пределах одной локальной ЭВМ, так и в пределах сетей ЭВМ.

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

Первая проблема представляет собой необходимость выбора пространства имен процессов-отправителей и получателей или имен некоторых объектов, через которые осуществляется взаимодействие. Эта проблема решается по-разному в зависимости от конкретного механизма взаимодействия. В системах, обеспечивающих взаимодействие процессов, функционирующих на различных компьютерах в сети используется адресация, принятая в конкретной сети ЭВМ (примером могут служить аппарат сокетов и MPI). В средствах взаимодействия процессов, локализованных в пределах одной ЭВМ, способ именования зависит от конкретного механизма взаимодействия. В частности, для ОС UNIX механизмы взаимодействия процессов можно разделить на те средства, которые доступны исключительно родственным процессам, и средства, доступные произвольным процессам[7] (см. также Рис. 14).

При взаимодействии родственных процессов проблема именования решается за счет наследования потомками некоторых свойств своих прародителей. Например, в случае неименованных каналов процесс-родитель для организации взаимодействия создает канал. Дескрипторы, ассоциированные с этим каналом, наследуется сыновними процессами, тем самым создается возможность организации симметричного (ибо все процессы изначально равноправны) взаимодействия родственных процессов. Другой пример – взаимодействие процессов по схеме главный-подчиненный (трассировка процесса). Данный тип взаимодействия асимметричный: один из взаимодействующих процессов получает статус и права «главного», второй - «подчиненного». Главный – это родительский процесс, подчиненный – сыновний. В данном случае проблема именования снимается, так как  идентификаторы процесса-сына и процесса-отца всегда доступны им обоим и однозначно определены.

При взаимодействии произвольных процессов не происходит наследования некоторых свойств процессов, которые могут использоваться для именования. Поэтому в данном случае обычно используются две схемы: первая – использование для именования идентификаторов взаимодействующих процессов (к примеру, аппарат передачи сигналов); вторая – использование некоторого системного ресурса, обладающего уникальным именем. Примером последнего могут являться именованные каналы, использующие для организации взаимодействия процессов файлы специального типа (FIFO-файлы).

Рис. 14 Классификация средств взаимодействия процессов ОС UNIX

Другая проблема организации взаимодействия – это проблема синхронизации взаимодействующих процессов. Любое взаимодействие процессов представимо в виде оказания одним процессом воздействия на другой процесс либо использования некоторых разделяемых ресурсов, через которые возможна организация обмена данными. Первое требование к средствам взаимодействия процессов – это атомарность (неразделяемость) базовых операций. Синхронизация должна обеспечить атомарность операций взаимодействий или обмена данными с разделяемыми ресурсами. К примеру, система должна блокировать начало чтения данных из некоторого разделяемого ресурса до того, пока начавшаяся  к этому моменту операция записи по этому ресурсу не завершится.

Второе требование – это обеспечение определенного порядка в операциях взаимодействия, или семантическая синхронизация. Например, некорректной является попытка чтения данных, которых еще нет (и операция записи которых еще не начиналась). В зависимости от конкретного механизма взаимодействия, уровней семантической синхронизации может быть достаточно много.

Комплексное решение проблемы синхронизации зависит от свойств используемых средств взаимодействия процессов. В некоторых случаях операционная система обеспечивает некоторые уровни синхронизации (например, при  передаче сигналов, использовании каналов). В других случаях участие операционной системы в решении проблемы синхронизации минимально (например, при использовании разделяемой памяти IPC). В любом случае, конкретная прикладная система должна учитывать, и при необходимости обеспечивать семантическую синхронизацию процессов. 

Ниже будут рассмотрены конкретные средства взаимодействия процессов, предоставляемые  ОС  UNIX.

 

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