Предотвращение взаимоблокировок

Содержание

Слайд 2

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

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

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

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

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

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

Thread 1

Thread 2

Object 1

Object 2

DEADLOCK

Слайд 4

Mutual Exclusion (Взаимное исключение) – по крайней мере один из ресурсов

Mutual Exclusion (Взаимное исключение) – по крайней мере один из ресурсов

является неделимым.
Hold and wait (Удержание ресурсов при ожидании) – существует процесс, владеющий ресурсом и ожидающий освобождения другого ресурса.
No preemption (Неперераспределяемость ресурсов) – ресурсы не могут быть отобраны у процесса без его “желания”.
Circular wait (Циклическое ожидание) – существует такое множество процессов {P1, P2, …, Pn}, в котором P1 ждет освобождения ресурса процессом P2, P2 ждет P3,…, Pn ждет P1.

Условия возникновения взаимоблокировки

Слайд 5

Способы предотвращения тупиков основаны на “атаке” одного из этих условий.

Способы предотвращения тупиков основаны на “атаке” одного из этих условий.

Слайд 6

Устранение условия "Mutual exclusion" Process 1 Process 2 Process 3

Устранение условия "Mutual exclusion"

Process 1

Process 2

Process 3

Слайд 7

Устранение условия "Mutual exclusion" Process 1 Process 2 Process 3

Устранение условия "Mutual exclusion"

Process 1

Process 2

Process 3

Слайд 8

Устранение условия "No preemption" Например: передача управления другому потоку Нельзя напечатать

Устранение условия "No preemption"

Например: передача управления другому потоку

Нельзя напечатать половину страницы

и передать ресурс другому процессу
Слайд 9

Устранение условия Hold&Wait Убрать код, который бесконечно ожидает ресурсы, например, используя

Устранение условия Hold&Wait

Убрать код, который бесконечно ожидает ресурсы, например, используя функцию

TryEnterCriticalSection()
Захватить необходимые ресурсы при старте программы. Но это приведет к неэффективному использованию ресурсов
Слайд 10

Устранение условия Circular wait Object 1 Object 2 Object 3 Object

Устранение условия Circular wait

Object 1

Object 2

Object 3

Object N

Порядок захвата ресурсов

Порядок освобождения

ресурсов

Сложно вносить изменения в код при добавлении новых ресурсов