Нарушение условия ожидания дополнительных ресурсов

Нарушение условия взаимоисключения

Предотвращение тупиков за счет нарушения условий возникновения тупиков

Недостатки алгоритма банкира

У алгоритма банкира имеются серьезные недостатки, из-за которых разработчик может выбрать другой подход для решения проблемы тупиков:

1) Алгоритм банкира исходит из фиксированного количества ресурсов.

2) Он требует, чтобы число работающих пользователей оставалось постоянным

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

4) Алгоритм требует, чтобы клиенты гарантированно возвращали ресурсы. В реальных системах требуются, гораздо более конкретные гарантии.

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

Далее рассмотрим другие способы предотвращения тупиков.

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

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

Хавендер в 1968 г. предложил следующую стратегию:

1) Каждый процесс должен запрашивать все требуемые ему ресурсы сразу, причем не может начать выполняться до тех пор, пока все они не будут ему предоставлены.

2) Если же процесс, удерживает определенные ресурсы и получает отказ в выделении ему дополнительных ресурсов, то он должен освободить свои первоначальные ресурсы и, при необходимости, запросить их снова вместе с дополнительными.

Таким образом, один из способов - заставить все процессы затребовать все свои ресурсы перед выполнением (все или ничего). Если система в состоянии выделить процессу все необходимое, он может работать до завершения. Если хотя бы один из ресурсов занят, процесс будет ждать. Подобный подход приводит к снижению эффективности работы компьютера. Редко бывает, что все запрашиваемые устройства необходимы программе одновременно. Можно, разделить программу на несколько шагов и выделять ресурсы отдельно для каждого шага программы, но основная проблема как раз в том, что многие процессы не знают, сколько ресурсов им понадобится до начала вычислений. Если такая информация есть, то можно воспользоваться алгоритмом банкира. Тем не менее, некоторые пакетные мэйнфреймы требуют от пользователей перечислить все необходимые его программе ресурсы.


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



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