Uváznutí¶
Obsah stránky
V systému existují následující typy prostředků: T0, ..., T3. Prostředky daného typu jsou rovnocenné, tzn. pokud proces požádá o prostředek typu Ti, kterého existuje v systému několik instancí, pak mu je jedno, která instance mu je přidělena. Prostředky jsou buď volné a nebo přidělené právě jednomu procesu. Prostředky jsou přidělovány jednotlivým procesům jádrem systému. Pouze proces, který má prostředek přidělen, ho může také následně uvolnit a uvolní ho při svém ukončení.
V systému běží následující procesy: P0, ..., P4. U každého procesu předem víme, které prostředky a v jakém počtu bude proces vyžadovat.
Coffmanovy podmínky — uváznutí nastane pouze pokud jsou splněny následující podmínky:
- (a) Vzájemné vyloučení: každý prostředek je buď přidělen právě jednomu vláknu a nebo je volný (prostředek nemůže být sdílen více vlákny)
- (b) Podmínka neodnímatelnosti: prostředek, který byl již přidělen nějakému vláknu, nemůže mu být násilím odebrán (musí být dobrovolně uvolněn daným vláknem)
- (c) Podmínka „drž a čekej": vlákno, které má již přiděleny nějaké prostředky, může žádat o další prostředky (vlákno může žádat o prostředky postupně)
- (d) Podmínka kruhového čekání: musí existovat smyčka dvou nebo více vláken, ve které každé vlákno čeká na prostředek přidelený dalšímu vláknu ve smyčce
První tři podmínky jsou nutné, ale ne dostačující => k uváznutí může dojít. Poslední podmínka představuje samotné uváznutí.
Pokud aspoň jedna z podmínek není splněna, nemůže dojít k uváznutí.
Úloha 1 — Bankéřův algoritmus: nebezpečný stav, deadlock P0, P2, P3¶
Zadání
V systému existují následující typy prostředků: T0, ..., T3. V systému běží procesy P0, ..., P4. V tomto okamžiku je již část prostředků přidělena jednotlivým procesům, viz následující tabulka:
| Proces | Max T0 | Max T1 | Max T2 | Max T3 | Přiděleno T0 | Přiděleno T1 | Přiděleno T2 | Přiděleno T3 |
|---|---|---|---|---|---|---|---|---|
| P0 | 5 | 5 | 4 | 4 | 1 | 0 | 2 | 2 |
| P1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| P2 | 4 | 4 | 6 | 4 | 3 | 3 | 0 | 1 |
| P3 | 3 | 3 | 8 | 4 | 0 | 2 | 2 | 2 |
| P4 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
A část prostředků je ještě volná, viz následující tabulka:
| Typ prostředku | T0 | T1 | T2 | T3 |
|---|---|---|---|---|
| Počet prostředků | 0 | 1 | 5 | 1 |
Otázky:
-
Která z následujících tvrzení jsou platná?
- (a) Systém se nachází v "bezpečném" stavu, protože jednotlivé procesy můžeme uspokojit v následujícím pořadí P0, P4, P2, P1, P3.
- (b) Systém se nachází v "bezpečném" stavu.
- (c) Systém se nachází v "nebezpečném" stavu.
- (d) Systém se nachází v "bezpečném" stavu, protože jednotlivé procesy můžeme uspokojit v následujícím pořadí P3, P2, P0, P1, P4.
- (e) Systém se nachází v "nebezpečném" stavu, protože neexistuje posloupnost alokací prostředků chi = {chi_1, chi_2, ..., chi_j} taková, že v bodě chi_k, 1 <= k <= j budou alokovány všechny potřebné prostředky pro uspokojení procesu P3.
-
Pro toto zadání dále vyberte pravdivá tvrzení:
- (a) Systém se nachází v "nebezpečném" stavu, protože aspoň jedna Coffmanova podmínka není splněna.
- (b) Systém se nachází v "nebezpečném" stavu, ale porušením Coffmanových podmínek by se dalo zabránit deadlocku.
- (c) Systém se nachází v "bezpečném" stavu, přestože všechny Coffmanovy podmínky jsou splněné.
- (d) Systém se nachází v "bezpečném" stavu, protože všechny Coffmanovy podmínky jsou splněné.
- (e) Systém se nachází v "nebezpečném" stavu, protože aspoň jedna Coffmanova podmínka je splněná.
Řešení
Krok 1: Sestav matici Potřebné = Požadované - Přidělené
Požadované Již přidělené Potřebné
T0 T1 T2 T3 T0 T1 T2 T3 T0 T1 T2 T3
P0 [ 5 5 4 4] P0 [ 1 0 2 2] P0 [ 4 5 2 2]
P1 [ 1 1 1 1] P1 [ 1 0 0 1] P1 [ 0 1 1 0]
P2 [ 4 4 6 4] P2 [ 3 3 0 1] P2 [ 1 1 6 3]
P3 [ 3 3 8 4] P3 [ 0 2 2 2] P3 [ 3 1 6 2]
P4 [ 1 0 0 1] P4 [ 1 0 0 1] P4 [ 0 0 0 0]
| Proces | Potřeba T0 | Potřeba T1 | Potřeba T2 | Potřeba T3 |
|---|---|---|---|---|
| P0 | 4 | 5 | 2 | 2 |
| P1 | 0 | 1 | 1 | 0 |
| P2 | 1 | 1 | 6 | 3 |
| P3 | 3 | 1 | 6 | 2 |
| P4 | 0 | 0 | 0 | 0 |
Krok 2: Inicializace
Proces P4 je již uspokojen, protože má přiděleny všechny potřebné prostředky (Potřeba = (0,0,0,0) <= (0,1,5,1)).
Dostaneme zpět jeden prostředek typu T0 a jeden typu T3 a zůstávají nám:
| Typ prostředku | T0 | T1 | T2 | T3 |
|---|---|---|---|---|
| Počet prostředků | 1 | 1 | 5 | 2 |
Krok 3: Uspokojíme P1
V tento moment můžeme uspokojit pouze jeden proces P1, který ještě potřebuje jeden prostředek typu T1 a jeden typu T2. Podmínka Potřeba[P1] = (0,1,1,0) <= (1,1,5,2) je splněna.
Dostaneme zpět jeden prostředek typu T0 a jeden typu T3 a zůstávají nám:
| Typ prostředku | T0 | T1 | T2 | T3 |
|---|---|---|---|---|
| Počet prostředků | 2 | 1 | 5 | 3 |
Krok 4: Výsledek
Na uspokojení procesů P0, P2 a P3 nemáme prostředky. Nastává deadlock.
- P0: Potřeba (4,5,2,2) — T1: 5 > 1, nelze uspokojit
- P2: Potřeba (1,1,6,3) — T2: 6 > 5, nelze uspokojit
- P3: Potřeba (3,1,6,2) — T2: 6 > 5, nelze uspokojit
Bezpečná posloupnost (částečná): P4 -> P1, poté nastane deadlock pro P0, P2, P3.
Odpovědi:
Otázka 1: - (a) NEPRAVDA — pořadí P0, P4, P2, P1, P3 není bezpečné (P0 nelze uspokojit jako první) - (b) NEPRAVDA — systém je v nebezpečném stavu - (c) PRAVDA — systém se nachází v nebezpečném stavu - (d) NEPRAVDA — toto pořadí není bezpečné - (e) PRAVDA — neexistuje bezpečná posloupnost zahrnující P3 (deadlock nastane pro P0, P2, P3)
Tímto nebezpečným stavem je myšlen deadlock popsaný výše, vyjádřený v odpovědi (e).
Otázka 2: - (a) NEPRAVDA — nebezpečný stav nesouvisí s nesplněním Coffmanových podmínek - (b) PRAVDA — systém je v nebezpečném stavu, ale porušením Coffmanových podmínek by se dalo zabránit deadlocku - (c) NEPRAVDA — systém není v bezpečném stavu - (d) NEPRAVDA — systém není v bezpečném stavu - (e) NEPRAVDA — splnění Coffmanových podmínek nezpůsobuje nebezpečný stav
Úloha 2 — Bankéřův algoritmus: nebezpečný stav, deadlock P0, P2, P3¶
Zadání
V systému existují typy prostředků T0, ..., T3 a procesy P0, ..., P4. V tomto okamžiku je již část prostředků přidělena jednotlivým procesům, viz následující tabulka:
| Proces | Max T0 | Max T1 | Max T2 | Max T3 | Přiděleno T0 | Přiděleno T1 | Přiděleno T2 | Přiděleno T3 |
|---|---|---|---|---|---|---|---|---|
| P0 | 1 | 3 | 4 | 8 | 0 | 0 | 0 | 4 |
| P1 | 1 | 4 | 0 | 0 | 1 | 0 | 0 | 0 |
| P2 | 0 | 2 | 2 | 8 | 0 | 2 | 2 | 0 |
| P3 | 1 | 0 | 0 | 6 | 0 | 0 | 0 | 4 |
| P4 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
A část prostředků je ještě volná, viz následující tabulka:
| Typ prostředku | T0 | T1 | T2 | T3 |
|---|---|---|---|---|
| Počet prostředků | 1 | 5 | 3 | 1 |
Otázky:
-
Která z následujících tvrzení jsou platná?
- (a) Systém se nachází v "bezpečném" stavu.
- (b) Systém se nachází v "bezpečném" stavu, protože jednotlivé procesy můžeme uspokojit v následujícím pořadí P4, P1, P3, P2, P0.
- (c) Systém se nachází v "nebezpečném" stavu, protože nemáme dostatečný počet prostředků, abychom uspokojili proces P2.
- (d) Systém se nachází v "bezpečném" stavu, protože jednotlivé procesy můžeme uspokojit v následujícím pořadí P3, P1, P2, P0, P4.
- (e) Systém se nachází v "nebezpečném" stavu.
-
Pro toto zadání dále vyberte pravdivá tvrzení:
- (a) Systém se nachází v "bezpečném" stavu, protože v alokačním grafu závislostí není cyklus.
- (b) Systém se nachází v "nebezpečném" stavu, protože aspoň jedna Coffmanova podmínka je splněna.
- (c) Systém se nachází v "bezpečném" stavu, protože všechny Coffmanovy podmínky jsou splněné.
- (d) Systém se nachází v "nebezpečném" stavu, protože aspoň jedna Coffmanova podmínka není splněna.
- (e) Systém se nachází v "nebezpečném" stavu, ale porušením Coffmanových podmínek by se dalo zabránit deadlocku.
Řešení
Krok 1: Sestav matici Potřebné = Požadované - Přidělené
Požadované Již přidělené Potřebné
T0 T1 T2 T3 T0 T1 T2 T3 T0 T1 T2 T3
P0 [ 1 3 4 8] P0 [ 0 0 0 4] P0 [ 1 3 4 4]
P1 [ 1 4 0 0] P1 [ 1 0 0 0] P1 [ 0 4 0 0]
P2 [ 0 2 2 8] P2 [ 0 2 2 0] P2 [ 0 0 0 8]
P3 [ 1 0 0 6] P3 [ 0 0 0 4] P3 [ 1 0 0 2]
P4 [ 1 0 0 1] P4 [ 0 0 0 0] P4 [ 1 0 0 1]
| Proces | Potřeba T0 | Potřeba T1 | Potřeba T2 | Potřeba T3 |
|---|---|---|---|---|
| P0 | 1 | 3 | 4 | 4 |
| P1 | 0 | 4 | 0 | 0 |
| P2 | 0 | 0 | 0 | 8 |
| P3 | 1 | 0 | 0 | 2 |
| P4 | 1 | 0 | 0 | 1 |
Krok 2: Inicializace
Krok 3: Uspokojíme P4
Potřeba[P4] = (1,0,0,1) <= (1,5,3,1) — ANO.
Zůstávají nám (po vrácení alokace P4 = (0,0,0,0)):
| Typ prostředku | T0 | T1 | T2 | T3 |
|---|---|---|---|---|
| Počet prostředků | 1 | 5 | 3 | 1 |
Krok 4: Uspokojíme P1
Potřeba[P1] = (0,4,0,0) <= (1,5,3,1) — ANO.
Dostaneme zpět jeden prostředek typu T0, zůstávají nám:
| Typ prostředku | T0 | T1 | T2 | T3 |
|---|---|---|---|---|
| Počet prostředků | 2 | 5 | 3 | 1 |
Krok 5: Výsledek
Na uspokojení procesů P0, P2 a P3 nemáme prostředky. Nastává deadlock.
- P0: Potřeba (1,3,4,4) — T3: 4 > 1, nelze uspokojit
- P2: Potřeba (0,0,0,8) — T3: 8 > 1, nelze uspokojit
- P3: Potřeba (1,0,0,2) — T3: 2 > 1, nelze uspokojit
Bezpečná posloupnost (částečná): P4 -> P1, poté nastane deadlock pro P0, P2, P3.
Odpovědi:
Otázka 1: - (a) NEPRAVDA — systém je v nebezpečném stavu - (b) NEPRAVDA — pořadí P4, P1, P3, P2, P0 není bezpečné (po P4 a P1 nelze uspokojit P3) - (c) PRAVDA — systém je v nebezpečném stavu, protože nemáme dostatečný počet prostředků T3 (P2 potřebuje 8, ale máme jen 1) - (d) NEPRAVDA — toto pořadí není bezpečné - (e) PRAVDA — systém se nachází v nebezpečném stavu
Otázka 2: - (a) NEPRAVDA — absence cyklu v alokačním grafu nestačí pro víceinstancové prostředky - (b) NEPRAVDA — splnění Coffmanových podmínek není příčinou nebezpečného stavu - (c) NEPRAVDA — systém není v bezpečném stavu - (d) NEPRAVDA — nesplnění Coffmanových podmínek není příčinou nebezpečného stavu - (e) PRAVDA — systém je v nebezpečném stavu, ale porušením Coffmanových podmínek by se dalo zabránit deadlocku
Úloha 3 — Bankéřův algoritmus: bezpečný stav, pořadí P3, P2, P1, P4, P0¶
Zadání
V systému existují typy prostředků T0, ..., T3 a procesy P0, ..., P4. V tomto okamžiku je již část prostředků přidělena jednotlivým procesům, viz následující tabulka:
| Proces | Max T0 | Max T1 | Max T2 | Max T3 | Přiděleno T0 | Přiděleno T1 | Přiděleno T2 | Přiděleno T3 |
|---|---|---|---|---|---|---|---|---|
| P0 | 1 | 6 | 1 | 5 | 0 | 0 | 0 | 0 |
| P1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| P2 | 0 | 5 | 0 | 2 | 0 | 4 | 0 | 1 |
| P3 | 1 | 2 | 0 | 2 | 0 | 2 | 0 | 1 |
| P4 | 0 | 5 | 1 | 5 | 0 | 0 | 0 | 1 |
A část prostředků je ještě volná, viz následující tabulka:
| Typ prostředku | T0 | T1 | T2 | T3 |
|---|---|---|---|---|
| Počet prostředků | 2 | 2 | 2 | 3 |
Otázky:
-
Která z následujících tvrzení jsou platná?
- (a) Systém se nachází v "bezpečném" stavu.
- (b) Systém se nachází v "nebezpečném" stavu.
- (c) Systém se nachází v "bezpečném" stavu, protože jednotlivé procesy můžeme uspokojit v následujícím pořadí P4, P2, P3, P0, P1.
- (d) Systém se nachází v "bezpečném" stavu, protože jednotlivé procesy můžeme uspokojit v následujícím pořadí P3, P2, P1, P4, P0.
- (e) Systém se nachází v "nebezpečném" stavu, protože neexistuje posloupnost alokací prostředků chi = {chi_1, chi_2, ..., chi_j} taková, že v bodě chi_k, 1 <= k <= j budou alokovány všechny potřebné prostředky pro uspokojení procesu P4.
-
Pro toto zadání dále vyberte pravdivá tvrzení:
- (a) Systém se nachází v "bezpečném" stavu, přestože všechny Coffmanovy podmínky jsou splněné.
- (b) Systém se nachází v "nebezpečném" stavu, ale porušením Coffmanových podmínek by se dalo zabránit deadlocku.
- (c) Systém se nachází v "nebezpečném" stavu, protože aspoň jedna Coffmanova podmínka není splněna.
- (d) Systém se nachází v "bezpečném" stavu, protože všechny Coffmanovy podmínky jsou splněné.
- (e) Systém se nachází v "nebezpečném" stavu, protože aspoň jedna Coffmanova podmínka je splněna.
Řešení
Krok 1: Sestav matici Potřebné = Požadované - Přidělené
Požadované Již přidělené Potřebné
T0 T1 T2 T3 T0 T1 T2 T3 T0 T1 T2 T3
P0 [ 1 6 1 5] P0 [ 0 0 0 0] P0 [ 1 6 1 5]
P1 [ 1 0 0 0] P1 [ 0 0 0 0] P1 [ 1 0 0 0]
P2 [ 0 5 0 2] P2 [ 0 4 0 1] P2 [ 0 1 0 1]
P3 [ 1 2 0 2] P3 [ 0 2 0 1] P3 [ 1 0 0 1]
P4 [ 0 5 1 5] P4 [ 0 0 0 1] P4 [ 0 5 1 4]
| Proces | Potřeba T0 | Potřeba T1 | Potřeba T2 | Potřeba T3 |
|---|---|---|---|---|
| P0 | 1 | 6 | 1 | 5 |
| P1 | 1 | 0 | 0 | 0 |
| P2 | 0 | 1 | 0 | 1 |
| P3 | 1 | 0 | 0 | 1 |
| P4 | 0 | 5 | 1 | 4 |
Krok 2: Inicializace
V tento moment můžeme uspokojit procesy P1, P2 nebo P3.
Krok 3: Uspokojíme P3
Potřeba[P3] = (1,0,0,1) <= (2,2,2,3) — ANO.
Dostaneme zpět dva prostředky typu T1 a jeden prostředek typu T3. Zůstávají nám:
| Typ prostředku | T0 | T1 | T2 | T3 |
|---|---|---|---|---|
| Počet prostředků | 2 | 4 | 2 | 4 |
Krok 4: Uspokojíme P2
Potřeba[P2] = (0,1,0,1) <= (2,4,2,4) — ANO.
Dostaneme zpět čtyři prostředky typu T1 a jeden prostředek typu T3. Zůstávají nám:
| Typ prostředku | T0 | T1 | T2 | T3 |
|---|---|---|---|---|
| Počet prostředků | 2 | 8 | 2 | 5 |
Krok 5: Uspokojíme všechny ostatní procesy
V tento moment můžeme uspokojit všechny ostatní procesy v libovolném pořadí.
Například uspokojíme P1: - Potřeba[P1] = (1,0,0,0) <= (2,8,2,5) — ANO - Volné po P1: (2,8,2,5) + (0,0,0,0) = (2,8,2,5)
Pak P4: - Potřeba[P4] = (0,5,1,4) <= (2,8,2,5) — ANO - Volné po P4: (2,8,2,5) + (0,0,0,1) = (2,8,2,6)
Pak P0: - Potřeba[P0] = (1,6,1,5) <= (2,8,2,6) — ANO
Bezpečné pořadí: P3 -> P2 -> P1 -> P4 -> P0
Systém je v bezpečném stavu.
Odpovědi:
Otázka 1: - (a) PRAVDA — systém se nachází v bezpečném stavu - (b) NEPRAVDA — systém je v bezpečném stavu - (c) NEPRAVDA — pořadí P4, P2, P3, P0, P1 není bezpečné (P4 potřebuje (0,5,1,4), ale máme jen (2,2,2,3), T1: 5 > 2) - (d) PRAVDA — pořadí P3, P2, P1, P4, P0 je bezpečné (viz výše) - (e) NEPRAVDA — P4 lze uspokojit (po P3 a P2)
Otázka 2: - (a) PRAVDA — systém je v bezpečném stavu, přestože všechny Coffmanovy podmínky jsou splněné - (b) NEPRAVDA — systém je v bezpečném stavu - (c) NEPRAVDA — systém je v bezpečném stavu - (d) NEPRAVDA — Coffmanovy podmínky jsou splněné, ale to není důvod bezpečnosti; bezpečnost plyne z existence bezpečné posloupnosti - (e) NEPRAVDA — systém je v bezpečném stavu