double arrow

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

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

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

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

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

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

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

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

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

3. Нарушение условия отсутствие перераспределение.

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

Минусы: Следствием данной схемы может быть дискриминация отдельных процессов, у которых постоянно отбирают ресурсы.

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

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

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

3. Обнаружение тупиков.

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

Пример:

Просмотрим модельную ситуацию:

1. Процесс П1 ожидает ресурс Р1;

2. Процесс П2 удерживает ресурс Р2 и ожидает ресурс Р1;

3. Процесс П3 удерживает ресурс Р1 и ожидает ресурс Р3;

4. Процесс П4 ожидает ресурс Р2;

5. Процесс П5 удерживает ресурс Р3 и ожидает ресурс Р2.

Визуально легко обнаружить наличие тупика.


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



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