Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / 5_взаимодействие и синхронизация процессов.doc
Скачиваний:
120
Добавлен:
20.06.2014
Размер:
1.47 Mб
Скачать

5.4.3. Обнаружение взаимоблокировок

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

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

В обобщенном алгоритме обнаружения используются матрица распределения и вектор доступности. Кроме того, определена матрица запросов Q, такая, чтоqij – количество ресурсов типаj, затребованных процессомi. Алгоритм работает, помечая незаблокированные процессы. Изначально все процессы не помечены. После этого выполняются шаги:

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

2. Временной вектор W инициализируем значениями вектора доступности.

3. Находим индекс i, такой, что процессi в настоящий момент не помечен, иi-я строка матрицыQне превышаетW, т.е. для всехk = 1, 2, …, mвыполняетсяQik  Wk. Если такой строки нет, алгоритм прекращает работу.

4. Если такая строка имеется, помечаем процесс i и добавляем соответствующую строку матрицы распределения кW: Wk = Wk + Aik для всехk = 1, 2, …, m. Возвращаемся к шагу 3.

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

5.4.3.2. Действия, выполняемые после обнаружения взаимоблокировки

  1. Прекращение выполнения всех заблокированных процессов (наиболее распространенный подход).

  2. Возврат каждого из заблокированных процессов в некоторую ранее определенную точку и перезапуск всех процессов.

  3. Последовательное прекращение выполнения заблокированных процессов по одному до тех пор, пока взаимоблокировка не прекратится.

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

Для случаев 3-4 существуют критерии отбора процесса:

  1. потребляющий минимальное время процессора;

  2. с минимальным выводом информации;

  3. с наибольшим временем ожидания;

  4. с минимальным количеством захваченных ресурсов;

  5. с минимальным приоритетом.