17. Конкуренция: "мъртва хватка" и "гладна смърт"
Предпазване от МХ. Избягване на МХ.

6.2 Предпазване (prevention) от МХ
** Взаимно изключване.
     Не може да бъде избягнато.
** Владея и чакам.
    Процесът чака за всички необходими ресурси - неефективно
** Няма отстъпки (no preemtion).
** Циклично чакане.

6.3 Избягване (avoidance) на МХ
    Два подхода при избягване на МХ:
  -- да не се стартира процес, който води до МХ;
  -- да не се дава ресурс на процес, ако това води до МХ.
    Изисква се предварителна информация за необходимите расурси на всеки процес.
** Отказ за стартиране на процес.
    Дадени са:
    C - матрица на исканията на всеки процес за всеки ресурс;
    R  - вектор на всички налични ресурси;
    A - матрица на дадени на всеки процес ресурси (състояние на системата);
    V - вектор на свободните ресурси.
    Стартираме процес, само ако всичките му необходими ресурси са "излишни", т.е. те са свободни в момента и при удовлетворяване на всички искания на всички активни процеси пак ще останат свободни.
Пример.

Матрица C
   R1  R2  R3
P1  1   1   2 активен
P2  6   1   3 активен
P3  2   1   0
P4  4   0   2 
Матрица A
   R1  R2  R3
P1  1   0   0
P2  6   1   2
P3  0   0   0
P4  0   0   0 
Вектор R
   R1  R2  R3
    9   3   6 
Вектор V
   R1  R2  R3
    2   2   4 
    Можем ли да стартираме процес P3? - Да.
    Можем ли да стартираме процес P4? - Не.
    Тази стратегия е твърде песимистична - предполага се, че всички процеси ще искат всички необходими им ресурси едновременно.

** Отказ за даване на ресурс - алгоритъм на банкера.
    Безопасно (сигурно) състояние на системата - съществува такава последователност от изпълнение на процесите, при която всички процеси завършват успешно (няма МХ). Опасно (несигурно) състояние - всяко друго.

    Пример 1. Безопасно състояние и изпълнение на процесите:
Начално състояние

Матрица C
   R1  R2  R3
P1  3   2   2
P2  6   1   3
P3  3   1   4
P4  4   2   2 
Матрица A
   R1  R2  R3
P1  1   0   0
P2  6   1   2
P3  2   1   1
P4  0   0   2 
Вектор R
   R1  R2  R3
    9   3   6 
Вектор V
   R1  R2  R3
    0   1   1 
P2 се изпълнява и завършва
Матрица C
   R1  R2  R3
P1  3   2   2
P2  0   0   0
P3  3   1   4
P4  4   2   2 
Матрица A
   R1  R2  R3
P1  1   0   0
P2  0   0   0
P3  2   1   1
P4  0   0   2 
Вектор R
   R1  R2  R3
    9   3   6 
Вектор V
   R1  R2  R3
    6   2   3 
P1 се изпълнява и завършва
Матрица C
   R1  R2  R3
P1  0   0   0
P2  0   0   0
P3  3   1   4
P4  4   2   2 
Матрица A
   R1  R2  R3
P1  0   0   0
P2  0   0   0
P3  2   1   1
P4  0   0   2 
Вектор R
   R1  R2  R3
    9   3   6 
Вектор V
   R1  R2  R3
    7   2   3 
P3 се изпълнява и завършва
Матрица C
   R1  R2  R3
P1  0   0   0
P2  0   0   0
P3  0   0   0
P4  4   2   2 
Матрица A
   R1  R2  R3
P1  0   0   0
P2  0   0   0
P3  0   0   0
P4  0   0   2 
Вектор R
   R1  R2  R3
    9   3   6 
Вектор V
   R1  R2  R3
    9   3   4 
P4 се изпълнява и завършва

Пример 2. Опасно състояние и изпълнение на процесите:
Начално състояние

Матрица C
   R1  R2  R3
P1  3   2   2
P2  6   1   3
P3  3   1   4
P4  4   2   2 
Матрица A
   R1  R2  R3
P1  1   0   0
P2  5   1   1
P3  2   1   1
P4  0   0   2 
Вектор R
   R1  R2  R3
    9   3   6 
Вектор V
   R1  R2  R3
    1   1   2 
На P1 се дават R1 и R3
Матрица C
   R1  R2  R3
P1  3   2   2
P2  6   1   3
P3  3   1   4
P4  4   2   2 
Матрица A
   R1  R2  R3
P1  2   0   1
P2  5   1   1
P3  2   1   1
P4  0   0   2 
Вектор R
   R1  R2  R3
    9   3   6 
Вектор V
   R1  R2  R3
    0   1   1 
    На всеки процес му трябва R1 за да завърши, а такъв няма. Това не е МХ, но може да се появи МХ. Ако някой процес освободи R1, МХ се избягва.