Курынин Р.В., Машечкин И.В., Терехин А.Н. - Конспект лекций по ОС (1114685), страница 32
Текст из файла (страница 32)
Иначе он увеличивает счетчикожидающих процессов и поднимает семафор customers. Если же этот посетитель являетсяединственным в данный момент клиентом брадобрея, то он этим действием разбудит брадобрея.После этого он выходит из критической секции и «захватывает» брадобрея (опуская семафорbarbers). Если же этот семафор опущен, то клиент будет дожидаться, когда брадобрей егоподнимет, известив тем самым, что готов к работе.
В конце клиент обслуживается (GetHaircut).11833.1Реализация межпроцессноговзаимодействия в ОС UnixБазовые средства реализации взаимодействия процессов вОС UnixСразу необходимо отметить, что во всех иллюстрациях организаций взаимодействияпроцессов будем рассматривать полновесные процессы, т.е.
те «классические» процессы, которыепредставляются в виде обрабатываемой в системе программы, обладающей эксклюзивнымиправами на оперативную память, а также правами на некоторые дополнительные ресурсы.Если посмотреть на проблемы взаимодействия процессов, то можно выделить две группывзаимодействия. Первая группа — это взаимодействие процессов, функционирующих подуправлением одной ОС на одной локальной ЭВМ. Вторая группа взаимодействия — этовзаимодействие в пределах сети.
В зависимости от того, к какой группе относится тот или иноймеханизм, он будет обладать соответствующими свойствами и особенностями.Рассмотрим взаимодействие в рамках локальной ЭВМ (одной ОС). Первым деломвстает общая для обеих упомянутых групп проблема именования взаимодействующихпроцессов, которая заключается в ответе на вопрос, как, т.е. посредством каких механизмов,взаимодействующие процессы смогут «найти друг друга». В рамках взаимодействия внутри однойОС можно выделить две основных группы решений данной задачи (3.1).Взаимодействие процессовВзаимодействие в рамкахлокальной ЭВМ (одной ОС)родственныепроцессынеименованныеканалыВзаимодействие в рамкахсетипроизвольныепроцессысокетыименованныеканалыMPIсигналытрассировкаIPCсокетыРис. 87.Способы организации взаимодействия процессов.Первая группа способов основана на взаимодействии родственных процессов.
Привзаимодействии родственных процессов, т.е. процессов, связанных некоторой иерархией родства,ОС обычно предоставляет возможность наследования некоторых характеристик родительскихпроцессов дочерними процессами. И именно за счет наследования различных характеристиквозможно реализовать то самое именование. К примеру, в ОС Unix можно передавать понаследству от отца сыну дескрипторы открытых файлов. В данном случае именование будетнеявным, поскольку не указываются непосредственно имена процессов.119Другим решением в рамках данной группы взаимодействующих родственных процессовявляется взаимодействие по цепочке предок–потомок, причем известно, кто из процессов являетсяпредком, а кто — потомком.
В этом случае существует возможность процессу-предку обращатьсяк своему потомку посредством явного именования. В качестве имени, например, может выступатьидентификатор процесса (PID). А потомок, зная имя предка, может также к нему обратиться.Так или иначе, но данная группа реализаций взаимодействия родственных процессовоснована на том факте, что некоторая необходимая для взаимодействия информация может бытьпередана по наследству.Следующая группа — это взаимодействие произвольных процессов в рамках однойлокальной машины.
Очевидно, что в этом случае отсутствует факт наследования, и поэтому длярешения проблемы именования логично использовать следующие механизмы. Во-первых, прямоеименование, когда процессы для указания своих партнеров по взаимодействию используютуникальные имена партнеров (например, используя идентификаторы процессов или же по-иному:PID привязывается к некоторому новому уникальному имени, и обращение при взаимодействиипроисходит с использованием системы этих новых имен).
Во-вторых, это может бытьвзаимодействие посредством общего ресурса. Но в этом случае встает проблема именования этихобщих ресурсов.Итак, мы рассмотрели модели взаимодействия процессов в рамках локальной машины. ОСUnix предоставляет целый спектр механизмов взаимодействия по каждой из указанных групп.
Вчастности, для взаимодействияродственных процессов могут быть использованы такиемеханизмы, как неименованные каналы и трассировка.Неименованный канал — это некоторый ресурс, наследуемый сыновьями процессами,причем этот механизм может быть использован для организации взаимодействия произвольныхродственников (т.е., условно говоря, можно организовать неименованный канал между «сыном» иего «племянником», и т.п.).Неименованные каналы — это пример симметричного взаимодействия, т.е., несмотря на то,что ресурс неименованного канала передается по наследству, взаимодействующие процессы вобщем случае, абстрагируясь от семантики программы, имеют идентичные права.Другой моделью взаимодействия является несимметричная модель, которую иногданазывают модель «главный–подчиненный». В этом случае среди взаимодействующих процессовможно выделить процессы, имеющие больше полномочий, чем у остальных.
Соответственно, углавного процесса (или процессов) есть целый спектр механизмов управления подчиненнымипроцессами.Для организации взаимодействия произвольных процессов система предоставляет целыйспектр средств взаимодействия, среди которых преобладают средства симметричноговзаимодействия (т.е. процессам при взаимодействии предоставляются равные права).Именованные каналы — это ресурс, принадлежащий взаимодействующим процессам,посредством которого осуществляется взаимодействие. При этом не обязательно знать именапроцессов-партнеров по взаимодействию.Передача сигналов — это средство оказания воздействия одним процессом на другойпроцесс в общем случае (в частности, одним из процессов в этом виде взаимодействия можетвыступать процесс операционной системы). При этом используются непосредственные именапроцессов.Система IPC (Inter-Process Communication), предоставляющая взаимодействующимпроцессам общие разделяемые ресурсы, среди которых ниже будут рассмотрены общая память,массив семафоров и очередь сообщений, посредством которых осуществляется взаимодействиепроцессов.
Отметим, что система IPC является некоторым альтернативным решениемименованным каналам.Аппарат сокетов — унифицированное средство организации взаимодействия. Насегодняшний момент сокеты — это не столько средства ОС Unix, сколько стандартизированныесредства межмашинного взаимодействия. В аппарате сокетов именование осуществляется120посредством связывания конкретного процесса (его идентификатора PID) с конкретным сокетом,через который и происходит взаимодействие.Итак, мы перечислили некоторые средства взаимодействия процессов в рамках однойлокальной машины (точнее сказать, в рамках ОС Unix), но это лишь малая часть существующих внастоящий момент средств организации взаимодействия.Второй блок организации взаимодействия — это взаимодействие в пределах сети.
Вданном случае ставится задача организовать взаимодействие процессов, находящихся на разныхмашинах под управлением различных операционных систем. Та же проблема именованияпроцессов в рамках сети решается достаточно просто.Пускай у нас есть две машины, имеющие сетевые имена A и B, на которых работаютсоответственно процессы P1 и P2. Тогда, чтобы именовать процесс в сети, достаточно использоватьсвязку «сетевой имя машины + имя процесса внутри этой машины».
В нашем примере это будутпары (A–P1) и (B–P2).Но тут встает следующая проблема. В рамках сети могут взаимодействовать машины,находящиеся под управлением операционных систем различного типа (т.е. в сети могут оказатьсяWindows-машины, FreeBSD-машины, Macintosh-машины и пр.). И система именования должнабыть построена так, чтобы обеспечить возможность взаимодействия произвольных машин, т.е. этодолжно быть стандартизованным (унифицированным) средством.
На сегодняшний день наиболеераспространенными являются аппарат сокетов и система MPI.Аппарат сокетов можно рассматривать как базовое средство организациивзаимодействия. Этот механизм лежит на уровне протоколов взаимодействия. Он предполагаетдля обеспечения взаимодействия использование т.н.
сокетов, и взаимодействие осуществляетсямежду сокетами. Конкретная топология взаимодействующих процессов зависит от задачи (можноорганизовать общение одного сокета со многими, можно установить связь один–к–одному и т.д.).В конечном счете, именование сокетов также зависит от топологии: в одном случае необходимознать точные имена взаимодействующих сокетов, в другом случае имена некоторых сокетов могутбыть произвольными (например, в случае клиент–серверной архитектуры обычно именаклиентских сокетов могут быть любыми).Система MPI (интерфейс передачи сообщений) также является достаточнораспространенным средством организации взаимодействия в рамках сети. Эта системаиллюстрирует механизм передачи сообщений, речь о котором шла выше (см. раздел 2.4.2).Система MPI может работать на локальной машине, в многопроцессорных системах сраспределенной памятью (т.е.
может работать в кластерных системах), в сети в целом (вчастности, в т.н. GRID-системах).Далее речь пойдет о конкретных средствах взаимодействия процессов (как в ОС Unix, так ив некоторых других).3.1.1СигналыВ ОС Unix присутствует т.н. аппарат сигналов, позволяющий одним процессам оказыватьвоздействия на другие процессы. Сигналы могут рассматриваться как средство уведомленияпроцесса о некотором наступившем в системе событии. В некотором смысле аппарат сигналовимеет аналогию с аппаратом прерываний, поскольку последний есть также уведомление системыо том, что в ней произошло некоторое событие.
Прерывание вызывает определеннуюдетерминированную последовательность действий системы, точно так же приход сигнала впроцесс вызывает в нем определенную последовательность действий.Инициатором отправки сигнала процессу может быть как процесс или ОС. Дляиллюстрации приведем следующий пример. Пускай в ходе выполнения некоторого процессапроизошло деление на ноль, вследствие чего в системе происходит прерывание, управлениепередается операционной системе. ОС «видит», что это прерывание «деление на ноль», иотправляет сигнал процессу, в теле которого произошла данная ошибка.