Cтраница 4
В главе 3 говорится о взаимоблокировке. В этой главе мы дали некоторое представление о том, что такое взаимоблокировка, но этой теме следует посвятить отдельную главу. Кроме того, обсуждаются способы, позволяющие предупредить или избежать взаимоблокировки. [46]
Такой порядок не приводит к взаимоблокировке ( потому что при нем не возникает соперничества за использование ресурсов), но при нем также вообще нет параллельной работы. Кроме запросов и возвратов ресурсов, процессы выполняют вычисления и ввод-вывод данных. Когда процессы работают последовательно, невозможна ситуация, при которой один процесс использует процессор, в то время как другой ждет завершения операции ввода-вывода. Таким образом, строго последовательная работа процессов не может быть оптимальной. С другой стороны, если вообще ни один процесс не выполняет операций ввода-вывода, алгоритм кратчайшая задача - первая работает лучше, чем циклический, поэтому в некоторой обстановке последовательный запуск всех процессов может быть наилучшим. [47]
![]() |
Пример использования алгоритма обнаружения тупиков. [48] |
Мы уже знаем, как обнаружить взаимоблокировки, и появляется вопрос: когда нужно искать их возникновение. Можно проверять систему каждый раз, когда запрашивается очередной ресурс. Это, конечно, позволит обнаружить тупик максимально рано ( насколько это возможно), но такая операция может оказаться дорогой в смысле времени загрузки процессора. Альтернативный подход: проверять систему каждые k минут, или, может быть, только когда степень занятости процессора меньше некоторого граничного значения. Учет загрузки процессора имеет смысл, потому что при достаточно большом количестве заблокированных процессов работоспособных процессов в системе останется немного, и процессор часто будет незанятым. [49]
Студент, получивший работу в области взаимоблокировок, придумал следующий замечательный метод устранения тупиков. Когда процесс запрашивает ресурс, он указывает временной предел. Если процесс блокируется из-за недоступности ресурса, запускается таймер. Если временной предел превышен, процесс разблокируется, и ему позволяется работать снова. [50]
Предположим, что наш алгоритм обнаружения взаимоблокировок закончился успешно и нашел тупик. Необходимы методы для восстановления и получения в итоге снова работающей системы. [51]
Как мы видели, уклонение от взаимоблокировок, в сущности, невозможно, потому что оно требует наличия никому не известной информации о будущих процессах. Тогда возникает справедливый вопрос: как же реальные системы избегают попадания в тупики. Для того чтобы ответить на этот вопрос, вернемся назад к четырем условиям, сформулированным в [70] ( см. раздел Условия взаимоблокировки данной главы), и посмотрим, смогут ли они дать нам ключ к разрешению проблемы. [52]
Студент, получивший работу в области взаимоблокировок, придумал следующий замечательный метод устранения тупиков. Когда процесс запрашивает ресурс, он указывает временной предел. Если процесс блокируется из-за недоступности ресурса, запускается таймер. Если временной предел превышен, процесс разблокируется, и ему позволяется работать снова. [53]