Восстановление после взаимоблокировки

Слайд 2

Взаимоблокировка? Когда несколько процессов/потоков ожидают ресурсы, занятые друг другом, и ни

Взаимоблокировка?

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

из них не может продолжать свое выполнение.
Слайд 3

Взаимоблокировка? Thread 1 Thread 2 Object 1 Object 2 DEADLOCK

Взаимоблокировка?

Thread 1

Thread 2

Object 1

Object 2

DEADLOCK

Слайд 4

Чтобы восстановиться после взаимоблокировки, нужно её обнаружить. Для этого необходимо: Отслеживать

Чтобы восстановиться после взаимоблокировки, нужно её обнаружить.
Для этого необходимо:
Отслеживать выделение

ресурсов (какой процесс каким ресурсом владеет)
Отслеживать поступающие запросы (какой процесс какой ресурс ожидает)
На основе этих данных строится граф “Процесс-ресурс”. Если в нем обнаруживаются циклы, то это свидетельствует о взаимоблокировке.
Слайд 5

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

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

каждом запросе потребует слишком большого количества ресурсов. Поэтому алгоритм обнаружения запускают при каждом N-ом запросе или через некоторый временной интервал.
Слайд 6

Пример взят из книги: “Э. Таненбаум, Современные операционные системы, 4-е издание”

Пример взят из книги: “Э. Таненбаум, Современные операционные системы, 4-е издание”

Слайд 7

Уничтожение одного /всех процессов, участвующих в тупике Можно продолжать уничтожать процессы,

Уничтожение одного /всех процессов, участвующих в тупике
Можно продолжать уничтожать процессы, пока

тупик не распадется
Все вычисления уничтоженных процессов придется повторить
Грубо, но эффективно
Перераспределение ресурсов между процессами вплоть до разрушения тупика
Ресурсы отбираются у владельцев и отдаются другим процессам
Откат выбранного процесса к некоторой контрольной контрольной точке или к началу (partial or total partial or total rollback)

Способы восстановления после взаимоблокировки