Средства коммуникации процессов
При разработке многозадачных систем ставится важнейшая цель - разные процессы, одновременно работающие в системе, должны быть как можно лучше изолированы друг от друга.
Это означает, что процессы в идеале не должны ничего знать даже о существовании друг друга. Для каждого процесса ОС предоставляет виртуальную машину, т.е. полный набор ресурсов, имитирующий выполнение процесса на отдельном компьютере.
Изоляция процессов необходима чтобы:
1) Обеспечивалась надежность и безопасность многозадачной системы. Один процесс не должен иметь возможности вмешаться в работу другого или получить доступ к его данным, ни по случайной ошибке, ни намеренно.
2) Проектирование и отладка программ чрезвычайно усложнились бы, если бы программист должен был учитывать непредсказуемое влияние других процессов.
В то же время, есть ситуации, когда взаимодействие необходимо. Например, некоторые процессы должны совместно обрабатывать общие данные, обмениваться сообщениями, ждать ответа и т.д. Поэтому система должна предоставлять в распоряжение процессов средства взаимодействия. Чтобы взаимодействие не привело к полному хаосу, оно должно выполняться только с помощью хорошо продуманных средств, которые предоставляет ОС.
За пределами этих средств действует изоляция процессов.
Понятие взаимодействия процессов включает в себя несколько видов взаимодействия, основными из которых являются:
1) синхронизация процессов (ожидание одним процессом каких-либо событий, связанных с работой других процессов);
2) обмен данными между процессами.
Серьезная проблема возникает тогда, когда два или более процесса одновременно пытаются работать с общими для них данными. Причем какой-либо из процессов пытается изменять значение этих данных.
Для "разруливания" этой ситуации голландский ученый Дейкстр предложил использовать новый вид программных объектов - семафоры. Они могут быть:
1) простые (двоичные);
2) Множественные.
Двоичным семафором называется системная переменная PS, которая может принимать значения 0 и 1. Для нее определены только две операции:
1) PS=0 - семафор закрыт и операция ждет его открытия.
2) PS=1 - семафор открыт и операция выполняется.
Семафоры с множественным ожиданием.
Рассмотрим обычную ситуацию - покупатель в супермаркете из нескольких касс выбирает ту, в которой очередь движется быстрее. Но как угадать, которая из них пройдет быстрее? Логика подсказывает, что необходимо занять очередь в нескольких кассах.
Вот по этому принципу и действует множественное ожидание. Процесс не стоит у одного семафора, а следит за тем, какой из семафоров быстрее откроется.
Понятие "Сигнал".
Сигнал - это то, что может быть послано выполняемому процессу операционной системой или другим процессом. С сигналом не связано никакой информации, кроме номера кода, указывающего, какой именно тип сигнала посылается.
При получении сигнала процесс прерывает свою текущую работу и переходит на выполнение функции, определенной как обработчик сигналов данного типа. Таким образом, сигналы сильно похожи на прерывания, но они управляются не аппаратурой (аппаратные прерывания), а операционной системой. Механизм сигналов позволяет решить, например, проблему критической ситуации иным способом, чем семафоры.
Понятие "Сообщение".
Сообщения также посылаются процессу системой или другим процессом, однако отличаются от сигналов слtдующим:
1) сообщения не прерывают работу процесса-получателя. Вместо этого они становятся в очередь сообщений. Процесс должен сам вызвать функцию приема сообщения. Если очередь пуста, эта функция блокирует процесс до получения какого-нибудь сообщения.
2) с сообщением, в отличие от сигнала, может быть связана информация, передаваемая получателю. Таким образом, сообщения - это средство не только синхронизации, но и обмена данными между процессами.
Обмен данными между процессами. реализуется двумя способами:
1) доступ к общей памяти;
2) трубопровод.
Доступ к общей памяти.
Самый простой и естественный способ такого обмена - это доступ двух или более процессов к общей области памяти. Однако ОС всегда стремится надежно разделить память разных процессов. Поэтому для выделения обшей памяти нужны специальные системные средства.
Общая память служит только средством обмена данными, но никак не решает проблем синхронизации. Участки программы, где происходит работа с общей памятью, необходимо рассматривать как критические секции и защищаются семафорами.
Трубопровод.
Другой вариант обмена данными - это так называемый трубопровод. В этом случае для выполнения обмена используются не команды чтения записи в память, а функции чтения записи в файл. Программный канал "притворяется" файлом и для работы с ним используются те же операции, что для доступа к файлу: открытие, чтение, запись, закрытие. Однако источником читаемых данных служит не файл на диске, а процесс, выполняющий запись в другой конец трубы.
Дата добавления: 2020-02-05; просмотров: 684;