Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции (ОС).doc
Скачиваний:
6
Добавлен:
11.09.2019
Размер:
716.29 Кб
Скачать

Средства синхронизации и взаимодействия процессов

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

Пример: программа печати файлов.

Процессы-клиенты читают переменную NEXT, записывают имя своего файла и наращивают значение NEXT на единицу. Предположим, что в некоторый момент процесс R решил распечатать свой файл, для этого он прочитал значение переменной NEXT, но поместить имя файла не успел, так как его выполнение было прервано (вследствие исчерпания кванта). Очередной процесс S, желающий распечатать файл, прочитал то же самое значение переменной NEXT, поместил имя своего файла. Когда в очередной раз управление будет передано процессу R, то он, запишет имя файла поверх имени файла процесса S. Таким образом, процесс S никогда не увидит свой файл распечатанным.

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

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

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

Способы реализации взаимного исключения

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

Недостаток: это аналогично не вытесняющему режиму.

2) Использование блокирующих переменных. С каждым разделяемым ресурсом связывается двоичная переменная, которая принимает значение “1” – если ресурс свободен, и “0” – если ресурс занят. Перед входом в критическую секцию процесс проверяет значение переменной. Если оно равно “0”, то проверка циклически повторяется, если ресурс свободен, то значение переменной устанавливается в “0” и процесс входит в критическую секцию.

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

3) Аппарат событий. Используются системные функции:

WAIT(x), где x – идентификатор некоторого события

POST(x)

Если ресурс занят, то процесс не выполняет циклический опрос, а вызывает системную функцию WAIT(x) – это ожидание освобождения ресурса x. Эта функция переводит активный процесс в состояние ожидания и делает пометку в его дескрипторе о том, что процесс ожидает события x.

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

Тупики

Пример:

Процесс 1 Процесс 2

………………………….

получить доступ к диску С:

получить доступ к принтеру

………………………….

………………………….

получить доступ к принтеру

получить доступ к диску С:

………………………….


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

Способы борьбы с тупиками:

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

2) Динамическое устранение тупиков. Создается таблица общих ресурсов с указанием процессов их использующих.

3) Контрольные точки. Состояние операционной системы сохраняется в контрольных точках и при возникновении тупика действия повторяются заново.