Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 5. Операционные системы, среды и оболочк...docx
Скачиваний:
52
Добавлен:
23.09.2019
Размер:
416.36 Кб
Скачать

11. Программно-аппаратные решения проблем взаимодействующих процессов (posix, монитор Хоара, алгоритм Деккара, примитивы Дейкстра, семафоры, мьютексы и др.).

Проблема разбивается на три пункта:

  • обмен информацией между процессами,

  • недопущение конфликтных ситуаций,

  • согласование действий процессов.

Последние две проблемы можно объединить в одну и назвать ее «Синхронизация

Критические ситуации взаимодействия процессов, их синхронизация.

Требования к алгоритмам для организации взаимодействия процессов:

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

2. Не должно существовать никаких предположений об относительных скоростях выполняющихся процессов или числе процессоров, на которых они выполняются.

3. Если какой-то процесс исполняется в своем критическом участке(занят востребованный ресурс), то не существует никаких других процессов, которые исполняются в своих соответствующих критических участков.

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

5. Не должно возникать бесконечного ожидания для входа процесса в свой критический участок.

Алгоритмы для решения организации взаимодействующих процессов

1)Запрет прерывания. Процесс, входящий в критический участок, запрещает прерывание, выполняется и, выходя, разрешает.

2)Переменная "замок". Аналогична прерыванию. Родительский процесс для дочерних организует общую переменную, которая сигнализирует о том, находится ли сейчас какой-либо процесс в своей критической области. Управление переменной отдается процессу в критической области.

3) Строгое чередование. Для процессов устанавливается общая переменная, которая циклически меняет свой номер (значение), не предназначен для всех видов ресурсов.

4) Флаги "готовность". Каждый ресурс имеет свой флаг "свободен/занят" , и доступ к флагу процесса дается только, когда "свободен". Положение флага сменяет ОС, она же отслеживает занятость ресурса и его реальное использование процессом.

5)Алгоритм Деккара. Он позволяет двум потокам выполнения совместно использовать неразделяемый ресурс без возникновения конфликтов, используя только общую память для коммуникации. Если два процесса пытаются перейти в критическую секцию одновременно, алгоритма позволит это только одному из них, основываясь на том, чья очередь. Если один процесс уже вошел в критическую секцию, другой будет ждать пока первый покинет ее. Это реализуется при помощи использования двух флагов и переменной turn (показывающей, очередь какого из процессов наступила). Одним из преимуществ алгоритма является то, что менимость к случаю только с двумя процессами и использование он не требует специальных инструкций, и вследствие этого он легко переносим на разные языки программирования и архитектуры компьютеров. Недостатки: применим только к случаю с двумя процессами.

Аппаратный уровень.

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

1. Test - and - set - проверить и присвоить. Осуществляет проверку логической переменной для установки флагов, для переменной "замок". Не удовлетворяет условию ограниченного ожидания для алгоритмов.

2. Swap - поменять значение. Меняет два значения в памяти местами.

POSIX

Механизмы межпроцессного взаимодействия

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

Семафоры

Одним из первых механизмов, предложенных для синхронизации поведения процессов, стали семафоры, концепцию которых описал Дейкстра (Dijkstra) в 1965 году.

Дейкстра предложил две операции, down и up. Операция down сравнивает значение семафора с нулем. Если значение семафора больше нуля, операция down уменьшает его и просто возвращает управление. Если значение семафора равно нулю, процедура down не возвращает управление процессу, а процесс переводится в состояние ожидания. Все операции проверки значения семафора, его изменения и перевода процесса в состояние ожидания выполняются как единое и неделимое элементарное действие. Тем самым гарантируется, что после начала операции ни один процесс не получит доступа к семафору до окончания или блокирования операции. Атомарность операции чрезвычайно важна для разрешения проблемы синхронизации и предотвращения состояния состязания.

Операция up увеличивает значение семафора. Если с этим семафором связаны один или несколько ожидающих процессов, которые не могут завершить более раннюю операцию down, один из них выбирается системой (например, случайным образом) и ему разрешается завершить свою операцию down. Таким образом, после операции up, примененной к семафору, связанному с несколькими ожидающими процессами, значение семафора так и останется равным 0, но число ожидающих процессов уменьшится на единицу. Операция увеличения значения семафора и активизации процесса тоже неделима. Ни один процесс не может быть блокирован во время выполнения операции up, как ни один процесс не мог быть блокирован во время выполнения операции wakeup в предыдущей модели.

POSIX — sem_init(), sem_wait(), sem_post(), sem_destroy().

Мьютексы

Мьютекс — упрощенная версия семафора, которая может находиться в одном из двух состояний — блокированном или неблокированном.

POSIX — mutex_init(), mutex_lock(), mutex_unlock(), mutex_destroy().

Мониторы

Монитор — механизм организации параллелизма, который содержит как данные, так и процедуры, необходимые для обеспечения доступа к неразделяемым ресурсам.

В простейшем случае монитор состоит из мьютекса и набора процедур, взаимодействующих с общим ресурсом.

Передача сообщений

Для решения проблемы согласованности процессов при передаче информации, существуют специальные механизмы обмена данными, основанные на мьютексах. Это системные вызовы send() и recieve(). Первый посылает сообщение заданному адресату, второй получает сообщение от указанного источника. Если сообщения нет, второй запрос блокируется до поступления сообщения либо немедленно возвращает код ошибки.

Барьеры

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