Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСИ.docx
Скачиваний:
14
Добавлен:
29.10.2018
Размер:
434.23 Кб
Скачать

8. Параллельные процессы, синхронизация процессов, пример необходимости синхронизации, критическая секция.

Параллельные процессы – это последовательные выч. процессы, которые одновременно находятся в каком-нибудь активном состоянии.

Два параллельных процесса могу быть:

  • Независимыми – процессоры множества переменных (файлы, области ОП) не пересекаются.

  • Взаимодействующими – используют общие переменные, и действия одного процесса могут отразиться на работе другого.

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

Синхронизация процессов:

- приведение двух и более процессов к такому их протеканию, при котором определенные стандартных процессов совершаются в определенном порядке, либо одновременно.

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

Для синхронизации потоков прикладных программ, программист может использовать:

  • Собственные средства и приемы синхронизации.

  • Средства ОС.

Пример необходимости синхронизации.

Допустим, для печати файла нам надо поместить имя файла в список печати, первый процесс S считает значение переменной Next (которая хранит номер свободной позиции в листе), затем выполнение процесса S закончилось в результате какого-нибудь причины. Процесс R считал значение Next, поместил на соотв. позицию имя своего файла и изменил счетчик Next, завершился. Процесс S продолжил выполнение, и записал на ранее считанную позицию имя своего файла, затерев тем самым имя файла процесса R. -> Файл процесса R напечатан не будет. -> имеет место быть гонка процессов за ресурсы.

Критическая секция – часть программы, результат выполнения которой может непредсказуемо меняться, если переменные, относящиеся к этой части программы изменяются другими потоками в то время, когда выполнение этой части еще не завершено. (в приведенном примере, критической секцией является файл «заказов»)

9. Механизмы синхронизации: блокирующие переменные, семафоры, мониторы.

1) Блокирующие переменные

Вводится двоичная переменна, которая принимает 1 если процесс свободен и 0, если он занят. НО есть вероятность, что когда процесс А считал 1, его прервали до того, как он установил 0. Процесс Б так же считал 1 и был прерван, начался процесс А. Что бы такого не произошло, необходимо определить неделимую (атомарную) операцию, которая определяется специальными командами, запрещающими прерывание.

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

2) Семафоры

Семафор – объект, позволяющий войти в заданный участок кода не более чем n потокам. Осуществляется через специальную вн. переменную S > 0. Семафор может принимать целые неотрицательные значения.

Операции:

  • P(S) – Занимает семафора (S уменьшаем на 1), если S=0, то поток блокируется.

  • V(S) – Освобождает семафор (S увеличиваем на 1), после выполнения этой операции, происходит пробуждение одного из ожидающих потоков.

Алгоритм работы:

  1. Запрашиваем к ресурсу.

  2. Проверяем ресурс свободен? (!весь пункт 2 – атомарная операция!)

  1. Да – Занимаем ресурс(D). ( F(D) )

  2. Нет – вызываем WAIT (блокируем процесс до освобождения ресурса)

  1. Работа с ресурсом в критической секции.

  2. Освобождение с ресурсом(D). (POST(D) )

+” – Пассивное ожидание (постановка в очередь и автоматич. выдача ресурсов)

Возможность управления группой однородных ресурсов.

-“ – Некорректное использование может привести к нарушению работоспособности программы.

3) Мьютекс – по сути это семафор с n=1

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

Важная особенность: только один процесс может быть активен (находиться в состоянии готовность или исполнение) внутри данного монитора.

В мониторах было введено понятие условных переменных, над которыми можно совершать две операции: wait и signal.

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

Следует отметить, что условные переменные мониторов не запоминают предысторию, поэтому операцию signal всегда должна выполняться после операции wait(иначе выполнение операции wait всегда будет приводить к блокированию процесса).