Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Когда в системе существует несколько экземпляров некоторых из ресурсов, для обнаружения взаимоблокировок необходим другой метод. Сейчас мы расскажем об основанном на матрицах алгоритме, обнаруживающем тупики среди п процессов, от Р, до Р„. Пусть тп — это число классов ресурсов, причем в системе Е1 ресурсов класса 1, Е2 ресурсов класса 2 и, в общем, Ei, ресурсов класса i (где 1 < i < m). E — это вектор существующих ресурсов. Он передает общее количество имеющихся в наличии экземпляров каждого ресурса. Например, если класс 1 представляет со- бой накопители на магнитных лентах, то Ех = 2 означает, что в системе есть два магнитофона. В любой момент времени некоторые из ресурсов могут оказаться занятыми и, соответственно, недоступны. Пусть А будет вектором доступных ресурсов, где А-, равно количеству экземпляров ресурса г, доступных в текущий момент (то есть не использующихся). Если оба накопителя на магнитной ленте заняты, Ai будет равно 0. Теперь нам нужны два массива: С — матрица текущего распределения и R — матрица запросов, i-я строка в матрице С говорит о том, сколько представителей каждого класса ресурсов в данный момент использует процесс Р,. Таким образом, Сц — это количество экземпляров ресурса^', которое занимает процесс i. Аналогично, Щ — это количество экземпляров ресурса j, которые хочет получить процесс Р,. Эти четыре структуры показаны на рис. 3.4.
Для этих четырех структур данных существует важный инвариант. В принципе каждый ресурс или занят, или свободен. Это наблюдение означает, что
Другими словами, если сложить все экземпляры ресурсаj, предоставленные процессам и доступные в данный момент, то в результате мы получим существующее в системе количество экземпляров этого класса ресурсов. Алгоритм обнаружения взаимоблокировок основан на сравнении векторов. Определим, что для двух векторов А и В отношение А < В означает, что каждый элемент вектора А меньше или равен соответствующему элементу вектора В. Математически это запишется так: А < В тогда и только тогда, когда А-, < В, для 1 < i < т. Пусть в исходном положении все процессы не маркированы. По мере продвижения алгоритма на процессы будет ставиться отметка, служащая признаком того, что они могут закончить свою работу и, следовательно, не находятся в тупике. После завершения алгоритма известно, что любой немаркированный процесс находится в тупиковой ситуации. Алгоритм обнаружения тупиков состоит из следующих шагов: 1. Ищем немаркированный процесс Р„ для которого г-я строка матрицы R меньше вектора А или равна ему. 2. Если такой процесс найден, прибавляем f-ю строку матрицы С к вектору А, маркируем процесс и возвращаемся к шагу 1. 3. Если таких процессов не существует, работа алгоритма заканчивается. Завершение алгоритма означает, что все немаркированные процессы, если такие есть, попали в тупик. На первом шаге алгоритм ищет процесс, который может доработать до конца. Такой процесс характеризуется тем, что все требуемые для него ресурсы должны находиться среди доступных в данный момент ресурсов. Тогда выбранный процесс проработает до своего завершения и после этого вернет ресурсы, которые он занимал, в общий фонд доступных ресурсов. Затем процесс маркируется как законченный. Если окажется, что все процессы могут работать, тогда ни один из них в данный момент не заблокирован. Если некоторые из них никогда не смогут запуститься, значит, они попали в тупик. Несмотря на то что алгоритм не является детерминированным (поскольку он может просматривать процессы в любом допустимом порядке), результат всегда одинаков. Для иллюстрации работы алгоритма обнаружения тупиков рассмотрим рис. 3.5. Здесь у нас есть три процесса и четыре класса ресурсов, которые мы произвольно назвали так: накопители на магнитной ленте, плоттеры, сканеры и устройство для чтения компакт-дисков. Процесс 1 использует один сканер. Процесс 2 занял два накопителя на магнитной ленте и устройство для чтения компакт-дисков. Процесс 3 занимает плоттер и два сканера. Каждый процесс нуждается в дополнительном устройстве, как показывает матрица R. Работая с алгоритмом обнаружения взаимоблокировок, мы ищем процесс, чей запрос ресурсов может быть удовлетворен в данной системе. Требования первого процесса нельзя выполнить, потому что в системе нет доступного устройства для чтения компакт-дисков. Второй запрос также нельзя удовлетворить, так как нет свободных сканеров. К счастью, третий процесс может получить все желаемое, следовательно, он работает, завершается и
возвращает все свои ресурсы, давая:
С этого момента может выполняться процесс 2, по окончании возвращая свои ресурсы в систему. Мы получим:
Теперь может работать оставшийся процесс. В этой системе не возникает взаимоблокировки.
Теперь обсудим немного измененный вариант ситуации на рис. 3.5. Предположим, что процесс 3, кроме двух накопителей на магнитной ленте и плоттера, нуждается также и в устройстве для чтения компакт-дисков. Тогда ни один из запросов не может быть удовлетворен, значит, вся система находится в тупике.
Мы уже знаем, как обнаружить взаимоблокировки, и появляется вопрос: когда нужно искать их возникновение. Можно проверять систему каждый раз, когда запрашивается очередной ресурс. Это, конечно, позволит обнаружить тупик максимально рано (насколько это возможно), но такая операция может оказаться дорогой в смысле времени загрузки процессора. Альтернативный подход: проверять систему каждые k минут, или, может быть, только когда степень занятости процессора меньше некоторого граничного значения. Учет загрузки процессора имеет смысл, потому что при достаточно большом количестве заблокированных процессов работоспособных процессов в системе останется немного, и процессор часто будет незанятым.
62. Выход из взаимоблокировки.
Предположим, что наш алгоритм обнаружения взаимоблокировок закончился
успешно и нашел тупик. Что дальше? Необходимы методы для восстановления
и получения в итоге снова работающей системы. В этом разделе мы обсудим различные способы ликвидации взаимоблокировок. Однако ни один из них не является особо заманчивым.
Дата публикования: 2015-01-26; Прочитано: 988 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!