Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС 2 модуль все части ПЕЧАТАТЬ.docx
Скачиваний:
72
Добавлен:
18.12.2018
Размер:
328.96 Кб
Скачать
  1. Ч4_Поясните суть использования блокирующих переменных.

Блокирующие переменные. Для синхронизации потоков одного процесса прикладной программист может использовать глобальные блокирующие переменные, доступные всем его потокам. Каждому набору критических данных D ставится в соответствие двоичная переменная F, которой поток присваивает значение F(D)=0 при вхождении в критическую секцию или F(D)=1 – при выходе из нее. Пока F(D)=0, другой поток, циклически проверяя это, не может войти в критическую секцию. Блокирующие переменные могут использоваться при доступе к разделяемым ресурсам любого вида. При этом механизм прерываний ОС работает и в критических секциях, но с одним ограничением. Нельзя прерывать поток между выполнением операций проверки и установки значения блокирующей переменной (это обеспечивается аппаратными или системными средствами).

  1. Ч4_Поясните суть использования семафоров.

Семафоры. Обобщением (двоичных) блокирующих переменных являются семафоры Д. Дийкстры – переменные, принимающие целые неотрицательные значения. Для работы с семафорами (S) вводятся два примитива, традиционно обозначаемых P и V, и операции

    • V(S): S:=S+1 (здесь ‘:=‘ – знак «присвоить»);

    • P(S): если S>0, то S:=S–1

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

  1. Ч4_Опишите пример использования семафоров при работе с буферным пулом записи/чтения.

Буферный пул здесь является критическим ресурсом. Использование блокирующей переменной вместо семафора не позволяет организовать доступ к критическому ресурсу более чем одному потоку. А это актуально, если требуется сделать запись и чтение данных критическими секциями и обеспечить взаимное исключение. Семафор же решает задачу более гибко, допуская к разделяемому пулу ресурсов заданное число потоков. В нашем примере с пулом могут работать до N потоков, часть из которых – «писатели», остальные – «читатели».

  1. Ч4_Поясните суть взаимных блокировок (тупиков).

Существует и другая проблема синхронизации – взаимные блокировки или так называемые дедлоки (deadlocks), клинчи (clinches) или тупики, когда два и более потоков из-за занятости, запретов или ограничений доступа к ресурсам (памяти, УВВ) могут взаимно и неразрешимо мешать развитию друг друга [2-5]. Необходимым условием возникновения тупика является потребность потока сразу в нескольких ресурсах.

  1. Ч4_Чем тупики отличаются от очередей?

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