ОС_11.pptx
- Количество слайдов: 20
лекция
Взаимоблокировка (тупиковая ситуация, тупик, deadlock)ситуация, при которой оба (или более) ее участника блокируют друга. Взаимоблокировка в группе процессов возникает в том случае, если каждый процесс из этой группы ожидает события, наступление которого зависит исключительно от другого процесса из этой же группы. Участники: Процессы; Машины; Устройства; Пользователи. Обстоятельства: Доступ к приложениям; Доступ к устройствам ввода-вывода; Доступ к записям базы данных и др. Взаимоблокировки могут появляться при работе как с аппаратными, так и с программными ресурсами.
разновидности взаимоблокировок; условия их возникновения; возможности уклонения от возникновения взаимоблокировок; пути предотвращения взаимоблокировок.
Под ресурсом понимается все, что должно предоставляться, использоваться и через некоторое время высвобождаться, поскольку в один и тот же момент времени может использоваться только одним процессом. Ресурсами могут быть аппаратные устройства (например, привод накопителя на магнитной ленте) или какая-то часть информации (например, заблокированная запись базы данных). Обычно у компьютера может быть множество ресурсов, которые могут быть предоставлены.
Выгружаемые - ресурсы, которые могут быть безболезненно отобраны у процесса, который ими обладает. Пример-память. Невыгружаемые – ресурсы, которые нельзя отобрать у его текущего владельца, не вызвав сбоя в вычислениях. Пример – пишущий привод. Как правило, во взаимоблокировках фигурируют невыгружаемые ресурсы. Обычно потенциальные взаимоблокировки с участием выгружаемых ресурсов могут быть устранены путем перераспределения ресурсов от одного процесса к другому.
Ресурсная (каждый процесс из группы, попавшей в ситуацию взаимоблокировки, ожидает ресурса, которым обладает другой процесс из этой же группы); Коммуникационная (в системах обмена данными (например, в сетях), в которых один и более процессов связываются путем обмена сообщениями). Существует еще некий функциональный эквивалент взаимоблокировки (не является взаимоблокировкой, поскольку ни один из процессов не заблокирован) – активная взаимоблокировка (livelock).
1. 2. 3. 4. Условие взаимного исключения. Каждый ресурс либо выделен в данный момент только одному процессу, либо доступен. Условие удержания и ожидания. Процессы, удерживающие в данный момент ранее выделенные им ресурсы, могут запрашивать новые ресурсы. Условие невыгружаемости. Ранее выделенные ресурсы не могут быть принудительно отобраны у процесса. Они должны быть явным образом высвобождены тем процессом, который их удерживает. Условие циклического ожидания. Должна существовать кольцевая последовательность из двух и более процессов, каждый из которых ожидает высвобождения ресурса, удерживаемого следующим членом последовательности.
1. 2. 3. 4. Игнорирование проблемы. Может быть, если вы проигнорируете ее, она проигнорирует вас (Страусиный алгоритм). Обнаружение и восстановление. Дайте взаимоблокировкам проявить себя, обнаружьте их и предпримите необходимые действия. Динамическое уклонение от них за счет тщательного распределения ресурсов. Предотвращение за счет структурного подавления одного из четырех необходимых условий для их возникновения.
Самым простым подходом к решению проблемы является «страусиный алгоритм» : спрячьте голову в песок и сделайте вид, что проблема отсутствует. Второй по счету следует технология обнаружения и восстановления. При ее использовании система не пытается предотвращать взаимоблокировки. Она позволяет им произойти, пытается обнаружить момент их возникновения, а затем предпринимает некоторые действия по восстановлению работоспособности.
Строится ресурсный граф (при использовании одного ресурса каждого типа), а затем специальными алгоритмами граф проверяется на наличие в нем циклов. Записываются четыре структуры(вектора существующих ресурсов и доступных ресурсов, матрицы текущего распределения и запроса) (при использовании нескольких ресурсов каждого типа) и специальными алгоритмами сравниваются вектор доступных ресурсов и строки матрицы запросов на наличие строк меньше или равных вектору.
Восстановление за счет приоритетного овладения ресурсом (временно отобрать ресурс у его текущего владельца и передать его другому процессу). Восстановление путем отката (организовано периодическое создание процессами контрольных точек). Восстановление путем уничтожения процессов (уничтожить процесс, находящийся в цикле взаимоблокировки или вне его, если он удерживает нужные ресурсы).
Способы предупреждения взаимоблокировок за счет тщательного распределения ресурсов: Алгоритм банкира для одного ресурса. Алгоритм банкира для нескольких типов ресурсов. Хотя алгоритм замечателен в теории, на практике он, по существу, бесполезен, поскольку нечасто можно определить заранее, каковы будут максимальные потребности процессов в ресурсах; количество процессов не фиксированно, оно динамически изменяется по мере входа пользователей в систему и выхода их из нее; ресурсы, считавшиеся доступными, могут внезапно пропасть (сломаться). Таким образом, на практике лишь немногие системы, если таковые вообще имеются, используют алгоритм банкира для уклонения от взаимоблокировок.
1. 2. 3. 4. Атака условия взаимного исключения(организация очереди на диске). Атака условия удержания и ожидания(изначальный запрос всех ресурсов). Атака условия невыгружаемости(отобрать ресурсы). Атака условия циклического ожидания(провести порядковую нумерацию ресурсов).
Для некоторых приложений известны алгоритмов специального назначения. К примеру, во многих системах управления базами данных часто встречающимися операциями являются запросы на блокирование нескольких записей с последующим обновлением всех заблокированных записей. Когда одновременно запущено несколько процессов, существует реальная опасность возникновения взаимоблокировок. Используемый при этом подход называется двухфазным блокированием. В первой фазе процесс пытается заблокировать по одной все необходимые ему записи. Если все проходит успешно, он приступает ко второй фазе, осуществляя свои обновления и снимая блокировку. Эта стратегия в общем виде неприменима. К примеру, в системах реального времени и системах управления процессами.
Эта разновидность взаимоблокировок может проявиться в системах обмена данными (например, в сетях), в которых один и более процессов связываются путем обмена сообщениями. Общая договоренность предполагает, что процесс А отправляет сообщение-запрос процессу В, а затем блокируется до тех пор, пока В не пошлет назад ответное сообщение. Коммуникационная взаимоблокировка является взаимоблокировкой (хотя и не ресурсной) по формальному определению, поскольку есть группа из двух процессов, каждый из которых заблокирован, ожидая события, причиной которого может быть только другой процесс.
Не может осуществляться: за счет упорядочения ресурсов (за неимением таковых); обойдены за счет тщательного планирования (поскольку здесь нет моментов, когда запрос может быть отложен). Осуществляется при помощи истечения времени ожидания(таймер, правила обмена данными-протоколы).
Иногда для входа в критическую область или получения доступа к ресурсу используется полинг (активное ожидание). Эта стратегия часто применяется тогда, когда взаимное исключение будет использовано на очень короткий период времени, а издержки приостановки являются слишком большими по сравнению с выполняемой работой. Каждому из процессов нужны два ресурса, и они используют область входа в примитив активного ожидания, чтобы попытаться получить необходимые блокировки. Получив по одному ресурсу они не смогут получить второй, при этом не будут заблокированы, но и не смогут двигаться вперед.
Проблемой, тесно связанной как с обычной, так и с активной взаимоблокировкой, является зависание. В динамической системе запрос ресурсов происходит постоянно. Для того чтобы принять решение, кто и когда какой ресурс получит, нужна определенная политика. Зависания можно избежать за счет использования политики распределения ресурсов «первым пришел — первым и обслужен» . При таком подходе процесс, ожидающий дольше всех, обслуживается следующим. В конечном итоге, любой заданный процесс со временем станет самым старшим в очереди и получит необходимый ему ресурс.
Взаимные блокировки являются потенциальной проблемой любой операционной системы. Ресурсных взаимоблокировок можно избежать, отслеживая безопасные и небезопасные состояния. Безопасное состояние характеризуется наличием последовательности событий, гарантирующей успешное завершение работы всех процессов. Небезопасное состояние таких гарантий не дает. Алгоритм банкира позволяет уклониться от взаимоблокировки, не удовлетворяя запроса, если тот вовлечет систему в небезопасное состояние. Ресурсные взаимоблокировки могут быть структурно предупреждены за счет построения такой системы, в которой они конструктивно невозможны. К примеру, если позволить процессу удерживать в любой момент времени только один ресурс, можно разрушить условия циклического ожидания, необходимые для возникновения взаимоблокировки. Ресурсная взаимоблокировка может быть также предотвращена за счет нумерации всех ресурсов и принуждении процессов запрашивать эти ресурсы в строго возрастающем порядке.
ОС_11.pptx