Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700363.doc
Скачиваний:
16
Добавлен:
01.05.2022
Размер:
3.69 Mб
Скачать

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

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

  • если все требуемые ресурсы доступны, то необходимо выделить все ресурсы одновременно, за одну неделимую операцию;

  • если хотя бы один ресурс недоступен, то ни один из запрашиваемых ресурсов не должен выделяться.

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

В интерфейсах системных вызовов операционных систем всегда предусматривается функция для одновременного захвата сразу нескольких объектов синхронизации, например в Windows – функция WaitForMultipleObject(), поэтому принцип нарушения ожидания дополнительных ресурсов при желании может быть реализован в программах.

Недостаток подхода, основанного на одновременном захвате ресурсов, состоит в повышении вероятности длительного откладывания процесса, т.к. для продолжения его работы необходимо, чтобы все требуемые ресурсы были бы свободны одновременно. Операционная система никогда не выполняет накопление ресурсов в интересах какого-либо отдельного процесса, в то время как, захватывая ресурсы по одному, процесс сам накапливает их для себя.

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

Нарушение неперераспределимости ресурсов

Второй принцип Хавендера направлен на нарушение условия неперераспределимости ресурсов.

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

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

Как и первый принцип Хавендера, второй принцип также увеличивает вероятность длительного откладывания процесса по тем же причинам – процесс не может выполнить накопление ресурсов, и вынужден ждать, пока все требуемые ресурсы одновременно станут свободными.

Нарушение условия кругового ожидания

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

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