The design of the UNIX Operating System 37 страница
• Число пользователей и число ресурсов фиксировано.
• Число работающих пользователей должно оставаться постоянным.
• Алгоритм требует, чтобы клиенты гарантированно возвращали ресурсы.
• Должны быть заранее указаны максимальные требования процессов к ресурсам. Чаще всего дан-ная информация отсутствует.
Наличие таких жестких и зачастую неприемлемых требований может склонить разработчиков к выбору других решений проблемы взаимоблокировки.
|
|
Предотвращение тупиков за счет нарушения условий возникновения тупиков
В отсутствие информации о будущих запросах единственный способ избежать взаимоблокировки – до-биться невыполнения хотя бы одного из условий раздела "Условия возникновения тупиков".
Основы операционных систем | 68 |
Нарушение условия взаимоисключения
|
|
В общем случае избежать взаимоисключений невозможно. Доступ к некоторым ресурсам должен быть исключительным. Тем не менее некоторые устройства удается обобществить. В качестве примера рас-смотрим принтер. Известно, что пытаться осуществлять вывод на принтер могут несколько процессов.
Во избежание хаоса организуют промежуточное формирование всех выходных данных процесса на дис-ке, то есть разделяемом устройстве. Лишь один системный процесс, называемый сервисом или демоном принтера, отвечающий за вывод документов на печать по мере освобождения принтера, реально с ним взаимодействует. Эта схема называется спулингом (spooling). Таким образом, принтер становится разде-ляемым устройством, и тупик для него устранен.
|
|
|
|
К сожалению, не для всех устройств и не для всех данных можно организовать спулинг . Неприятным по-бочным следствием такой модели может быть потенциальная тупиковая ситуация из-за конкуренции за дисковое пространство для буфера спулинга. Тем не менее в той или иной форме эта идея применяется часто.
Нарушение условия ожидания дополнительных ресурсов
Условия ожидания ресурсов можно избежать, потребовав выполнения стратегии двухфазного захвата.
• В первой фазе процесс должен запрашивать все необходимые ему ресурсы сразу. До тех пор пока они не предоставлены, процесс не может продолжать выполнение.
• Если в первой фазе некоторые ресурсы, которые были нужны данному процессу, уже заняты дру-гими процессами, он освобождает все ресурсы, которые были ему выделены, и пытается повто-рить первую фазу.
В известном смысле этот подход напоминает требование захвата всех ресурсов заранее. Естественно, что только специально организованные программы могут быть приостановлены в течение первой фазы и рестартованы впоследствии.
Таким образом, один из способов – заставить все процессы затребовать нужные им ресурсы перед вы-полнением ("все или ничего"). Если система в состоянии выделить процессу все необходимое, он может работать до завершения. Если хотя бы один из ресурсов занят, процесс будет ждать.
Данное решение применяется в пакетных мэйнфреймах (mainframe), которые требуют от пользователей перечислить все необходимые его программе ресурсы. Другим примером может служить механизм двухфазной локализации записей в СУБД. Однако в целом подобный подход не слишком привлекателен и приводит к неэффективному использованию компьютера. Как уже отмечалось , перечень будущих за-просов к ресурсам редко удается спрогнозировать. Если такая информация есть, то можно воспользо-ваться алгоритмом банкира. Заметим также, что описываемый подход противоречит парадигме модуль-ности в программировании, поскольку приложение должно знать о предполагаемых запросах к ресурсам во всех модулях.
Дата добавления: 2021-01-21; просмотров: 89; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!