Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все ответы.doc
Скачиваний:
18
Добавлен:
09.09.2019
Размер:
3.79 Mб
Скачать

66. Предотвращение взаимоблокировок

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

Атака условия взаимного исключения

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

Вывод: Атака условия взаимного исключения предполагает организацию подкачки данных.

Атака условия удержания и ожидания

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

В данном случае возникают проблемы:

— отсутствия информации о количестве ресурсов необходимых для работы процессов до начала их работы;

— оптимального использования ресурсов.

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

Вывод: Атака условия удержания и ожидания состоит в запросе всех ресурсов на начальной стадии.

Атака условия отсутствия принудительной выгрузки ресурсов

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

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

Атака условия циклического ожидания

Устранить четвертое условие можно несколькими способами:

— процессу дано право только на один ресурс в конкретный момент времени;

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

— поддержка общей нумерации всех процессов.

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

Вывод: Атака условия циклического ожидания предполагает, что нужно пронумеровать ресурсы и их упорядочить.

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