Операционные системы. Курс лекций

Предотвращение тупиков.


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

1.    Если в системе нет ресурсов отданных в единоличное пользование одному процессу, то система никогда не попадет в тупик;

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

При этом возникают проблемы:

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

    4.    Условие кругового/циклического ожидания. Его можно устранить несколькими способами:

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

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

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



      Содержание раздела