Взаимоблокировки процессов (тупики). Условия возникновения, методы и алгоритмы обнаружения тупиков

В условиях не осторожного использования средств синхронизации, могут возникнуть непредвиденные затруднения.

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

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

Системная тупиковая ситуация или зависание системы является следствием того, что один или более процессов находятся в состоянии тупика.

- ресурс

- процесс

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

Условия возникновения тупиковых ситуаций

5. Взаимное исключение. Каждый ресурс в данный момент или отдан ровно одному процессу, или недоступен.

6. Условие удержания и ожидания. Процессы, в данный момент удерживающие полученные ранее ресурсы, могут запрашивать новые ресурсы.

7. Отсутствие принудительной выгрузки ресурсов. У процесса нельзя забрать принудительно ранее полученные ресурсы.

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

Стратегии борьбы с взаимоблокировками:

5. Пренебрежение проблемой в целом.

6. Обнаружение и устранение (восстановление).

7. Избегать тупиковых ситуаций с помощью аккуратного распределения ресурсов.

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

Методы и алгоритмы обнаружения тупиков:

1.Принудительная выгрузка ресурсов. Изъятие ресурса у процесса, передача его другому процессу, а затем возврат ресурса таким образом, что исходный процесс этого “ не замечает” (сложно и чаще всего невозможно).

2.Восстановление через “откат”. Прцессы периодически создают контрольные точки, позволяющие запустить процесс с предыстории. При возникновении тупика процесс, занимающий необходимый ресурс “откатывается” к контрольной точке, после которой он получил ресурс. Если возобновленный процесс вновь попытается получить данный ресурс, он переводится в режим ожидания освобождения этого ресурса.

Недопущение тупиков путем безопасного распределения ресурсов. Подобные алгоритмы базируются на концепции безопасных состояний. Например, Дейкстрой был разработан алгоритм планирования, позволяющий избегать взаимоблокировок (алгоритм банкира)

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

Допустим, в системе один ресурс каждого типа. Тогда необходимо построить граф распределения ресурсов между процессами. Если в графе обнаружится цикл – наличествует тупиковая ситуация.

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

В системе N процессов, М – типов ресурсов. Создается матрица N*M текущего распределения ресурсов между процессами. Также создается матрица дополнительно запрашиваемых ресурсов. Находим вектор ресурсов: из общего количества ресурсов необходимо вычесть уже распределенные ресурсы. Далее происходит поочередное сравнение: если количество свободных ресурсов больше количества ресурсов дополнительно необходимых процессу для выполнения – процесс выполняется, вектор свободных ресурсов увеличивается. Начинается проверка следующего процесса.

В системе несколько ресурсов каждого типа

P = {P1, P2,..., Pn} – множество процессов, n – число процессов;

E = {E1, E 2,..., Em } – множество ресурсов, m – число типов ресурсов;

A = {A1, A2,..., Am} – вектор свободных ресурсов; AJ <= EJ, j = 1, m;

C = {cI J | i = 1, n; j = 1, m } – матрица текущего распределения ресурсов;

R = {ri j | i = 1, n; j = 1, m } – матрица запрашиваемых ресурсов.

Существующие ресурсы Доступные ресурсы

E = {E1, E 2,..., Em } A = {A1, A2,..., Am}

Алгоритм обнаружения тупиков

Основан на сравнении векторов ресурсов. В исходном состоянии все процессы не маркированы (не отмечены). По мере реализации алгоритма на процессы будет ставиться отметка, обозначающая, что они могут закончить свою работу, т. е. не находятся в тупике. После завершения алгоритма любой немаркированный процесс находится в тупиковой ситуации.

1.Ищется процесс Pi, для которого i – я строка матрицы R меньше вектора

A, т. е. Ri <= Aj или ri j <= Aj, j = 1, m.

2.Если такой процесс найден, он маркируется, и далее прибавляется

строка Ri к вектору A, т.е. Aj:= Aj + ri j, j = 1, m.

Возврат к шагу 1.

3. Если таких процессов не существует, работа алгоритма заканчивается


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: