Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Os_Otvety.docx
Скачиваний:
138
Добавлен:
01.04.2022
Размер:
32.58 Mб
Скачать

24. Способы реализации взаимных исключений: блокирующие переменные, критические секции, мьютексы

Блокирующие переменные и Мьютекс = РАЗНЫЕ ВЕЩИ

Семафоры не нужны? НЕТ

Спасибо, придется исправлять :(((

да придется

!

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

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

Рисунок 5. Реализация критической секции с использованием блокирующих переменных

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

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

Системные вызовы

Реализация взаимного исключения способом выше имеет недостаток: в течение времени, когда один поток находится в критической секции, другой поток, которому требуется тот же ресурс, получив доступ к процессору, будет непрерывно опрашивать блокирующую переменную, бесполезно тратя выделяемое время, использовано для выполнения какого-нибудь другого потока.ему процессорное время, которое могло бы быть Для устранения этого недостатка во многих ОС предусматриваются специальные системные вызовы для работы с критическими секциями.

25. Взаимные блокировки. Условия, необходимые для возникновения тупика.

Тупиковые ситуации надо отличать от простых очередей: хотя те и другие возникают при совместном использовании ресурсов и внешне выглядят похоже: поток приостанавливается и ждет освобождения ресурса. Однако очередь — это нормальное явление, неотъемлемый признак высокого коэффициента использования ресурсов при случайном поступлении запросов. Очередь появляется тогда, когда ресурс недоступен в данный момент, но освободится через некоторое время, позволив потоку продолжить выполнение. Тупик же, что видно из его названия, является неразрешимой ситуацией. Необходимым условием возникновения тупика является потребность потока сразу в нескольких ресурсах.

Условие взаимного исключения

• Каждый ресурс в данный момент или отдан одному процессу или свободен.

Условие удержания и ожидания

• Процесс, удерживающий в данный момент ресурс, может запрашивать новые ресурсы.

Условие отсутствия принудительной выгрузки ресурса

• У процесса нельзя забрать ранее полученные ресурсы.

Условие циклического ожидания

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

26. Предотвращение взаимоблокировки. Алгоритм банкира для одного вида ресурсов.

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

Алгоритм банкира для 1 вида ресурсов (основан на избегании опасных состояний): Алгоритм рассматривает запросы на предоставления ресурсов по мере их поступления. Каждый раз проверяет, приведет ли удовлетворение запроса к безопасному состоянию. Если да - запрос удовлетворяется, если нет - откладывается на более позднее время.