Безопасное и небезопасное состояние
При дальнейшем рассмотрении алгоритмов уклонения от взаимоблокировок используется информация, представленная на рис. 6.4. В любой заданный момент времени существует текущее состояние, содержащее Е,А, С и R. Состояние считается безопасным,если существует какой-то порядок планирования, при котором каждый процесс может доработать до конца, даже если все процессы внезапно и срочно запросят максимальное количество ресурсов. Это положение проще всего проиллюстрировать с помощью примера, в котором используется один ресурс. На рис. 6.7, а показано состояние, в котором процесс А удерживает 3 экземпляра ресурса, но в конечном счете может затребовать 9 экземпляров. Процесс В в этот момент удерживает 2 экземпляра, но позже может затребовать в общей сложности еще 4. Процесс С также удерживает 2 экземпляра, но может затребовать еще 5. В системе есть всего 10 экземпляров данного ресурса, 7 из которых уже распределены, а 3 пока свободны.
Состояние на рис. 6.7, а является безопасным, потому что существует такая последовательность предоставления ресурсов, которая позволяет завершиться всем процессам. А именно — планировщик может просто запустить в работу только процесс В на то время, пока он запросит и получит два дополнительных экземпляра ресурса, что приведет к состоянию, изображенному на рис. 6.7, б. Когда процесс В завершит свою работу, мы получим состояние, показанное на рис. 6.7, в. Затем планировщик может запустить процесс С, что со временем приведет нас к ситуации, показанной на рис. 6.7, г. По завершении работы процесса С мы получим ситуацию, показанную на рис. 6.7, д. Теперь процесс А наконец-то может получить необходимые ему шесть экземпляров ресурса и также успешно завершить свою работу. Таким образом, состояние, показанное на рис. 6.7, а, является безопасным, поскольку система может избежать взаимоблокировки с помощью тщательного планирования процессов.
Теперь предположим, что исходное состояние системы показано на рис. 6.8, а, но в данный момент процесс А запрашивает и получает еще один ресурс, и система переходит в состояние, показанное на рис. 6.8, б. Планировщик может дать поработать процессу В до того момента, пока он не запросит все свои ресурсы, как показано на рис. 6.8, в.
В конечном итоге процесс В успешно завершается, и мы получаем ситуацию, показанную на рис. 6.8, г. И в этом месте мы застряли: в системе осталось только четыре свободных экземпляра ресурса, а каждому из активных процессов необходимо по пять экземпляров. И не существует последовательности действий, гарантирующей успешное завершение всех процессов. Следовательно, решение о предоставлении ресурса, которое перевело систему из состояния, показанного на рис. 6.8, а, к состоянию, показанному на рис. 6.8, б, перевело ее из безопасного в небезопасное состояние. Если из состояния, показанного на
рис. 6.8, б, запустить процесс А или процесс С, то ни один из них не заработает. Возвращаясь назад, нужно сказать, что запрос процесса А не должен был удовлетворяться. |
Следует отметить, что небезопасное состояние само по себе не является состоянием взаимоблокировки. Начиная с состояния, показанного на рис. 6.8, б, система может поработать некоторое время. Фактически может даже успешно завершиться работа одного из процессов. Кроме того, процесс А может высвободить один ресурс еще до запроса дополнительного ресурса, позволяя успешно завершить работу процессу С, а системе в целом избежать взаимоблокировки. Таким образом, разница между безопасным и небезопасным состоянием заключается в том, что в безопасном состоянии система может гарантировать, что все процессы закончат свою работу, а в небезопасном состоянии такой гарантии дать нельзя.
Дата добавления: 2017-01-29; просмотров: 1791;