The design of the UNIX Operating System 37 страница



 

• Число пользователей и число ресурсов фиксировано.

 

• Число работающих пользователей должно оставаться постоянным.

• Алгоритм требует, чтобы клиенты гарантированно возвращали ресурсы.

• Должны быть заранее указаны максимальные требования процессов к ресурсам. Чаще всего дан-ная информация отсутствует.

 

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

 

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

 

В отсутствие информации о будущих запросах единственный способ избежать взаимоблокировки – до-биться невыполнения хотя бы одного из условий раздела "Условия возникновения тупиков".


Основы операционных систем 68

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

 

В общем случае избежать взаимоисключений невозможно. Доступ к некоторым ресурсам должен быть исключительным. Тем не менее некоторые устройства удается обобществить. В качестве примера рас-смотрим принтер. Известно, что пытаться осуществлять вывод на принтер могут несколько процессов.

 

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

 

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

 

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

 

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

 

• В первой фазе процесс должен запрашивать все необходимые ему ресурсы сразу. До тех пор пока они не предоставлены, процесс не может продолжать выполнение.

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

 

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

 

Таким образом, один из способов – заставить все процессы затребовать нужные им ресурсы перед вы-полнением ("все или ничего"). Если система в состоянии выделить процессу все необходимое, он может работать до завершения. Если хотя бы один из ресурсов занят, процесс будет ждать.

 

Данное решение применяется в пакетных мэйнфреймах (mainframe), которые требуют от пользователей перечислить все необходимые его программе ресурсы. Другим примером может служить механизм двухфазной локализации записей в СУБД. Однако в целом подобный подход не слишком привлекателен и приводит к неэффективному использованию компьютера. Как уже отмечалось , перечень будущих за-просов к ресурсам редко удается спрогнозировать. Если такая информация есть, то можно воспользо-ваться алгоритмом банкира. Заметим также, что описываемый подход противоречит парадигме модуль-ности в программировании, поскольку приложение должно знать о предполагаемых запросах к ресурсам во всех модулях.


Дата добавления: 2021-01-21; просмотров: 89; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!