18. Конкуренция: "мъртва хватка" и "гладна смърт"
Откриване на МХ. Интегрирана стратегия.

6.4 Откриване (detection) на МХ
    Дадено е:
    Q - матрица на исканията на всеки процес за всеки ресурс в даден момент;
    R  - вектор на всички налични ресурси;
    A - матрица на дадени на всеки процес ресурси (състояние на системата);
    V - вектор на свободните ресурси.

** Алгоритъм за откриване на МХ.
   1. Маркираме процесите, които в A имат само 0;
   2. Създаваме но вектор W = V;
   3. Намираме немаркиран процес, за който елементите на реда на Q са по-малки или равни на елементите на вектора W. Ако няма такъв, стоп.
   4. Към елементите на W добавяме реда от матрицата A на намерения в т. 3 процес. Изпълнява се т. 3.
Ако при завършване на алгоритъма има немаркирани процеси, значи имаме открита МХ.

Пример:

Матрица Q
   R1  R2  R3  R4  R5 
P1  0   1   0   0   1
P2  0   0   1   0   1 
P3  0   0   0   0   1
P4  1   0   1   0   1
Матрица A
   R1  R2  R3  R4  R5 
P1  1   0   1   1   0
P2  1   1   0   0   0 
P3  0   0   0   1   0
P4  0   0   0   0   0
Вектор R
   R1  R2  R3  R4  R5
    2   1   1   2   1 
Вектор V
   R1  R2  R3  R4  R5
    0   0   0   0   1 
  1. Маркираме P4.
  2. W = (0 0 0 0 1)
  3. P3: (0 0 0 0 1) = W, маркираме P3.
  4. W = (0 0 0 1 1)
  3. P1 и P2 не отговарят на условията (P1 иска ресурс R2, а P2 - ресурс R3, от които няма свободни). Стоп.
Има немаркирани процеси - МХ.

** Възстановяване.
След като е открита МХ, необходимо е възстановяване на работата на системата.
   1. Прекъсване (завършване, kill) на всички процеси, участващи в МХ.
   2. Връщане на всички МХ-процеси в предишно състояние и стартирането им отново.
   3. Последователно прекъсване на МХ-процесите, докато алгоритъмът даде липса на МХ.
   4. Последователно преразпределение на ресурси, докато алгоритъмът даде липса на МХ.



6.5 Интегрирана стратегия
-- Групиране на ресурсите в класове от различни ресурси.
-- Използване на наредба на ресурсите във всеки клас.
-- Използване на подходящи алгоритми за всеки клас.
Например:
-- Swapping space: предпазване от МХ с вземане на всички необходими ресурси.
-- Processor resources: избягване на МХ с обявяване на необходимите ресурси.
-- Main memory: преразпределение на ресурси.