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. Прекъсване (завършване, kill) на всички процеси, участващи
в МХ.
2. Връщане на всички МХ-процеси в предишно състояние и
стартирането им отново.
3. Последователно прекъсване на МХ-процесите, докато алгоритъмът
даде липса на МХ.
4. Последователно преразпределение на ресурси, докато
алгоритъмът даде липса на МХ.