Problém uvíznutí procesů, graf alokace zdrojů

Z FAV wiki
Přejít na: navigace, hledání

V množině procesů nastalo uvíznutí, jestliže každý proces množiny čeká na událost, kterou může způsobit pouze jiný proces množiny. Protože všechny čekají, žádný z nich událost nevygeneruje, nevzbudí jiný proces.


[editovat] Podmínky vzniku uvíznutí

(musejí být splněny všechny 4, 1-3 jsou předpoklad pro 4):

  1. Vzájemné vyloučení: každý zdroj je buď dostupný, nebo je výhradně přiřazen právě jednomu procesu
  2. „hold and wait“: proces držící výhradně přiřazené zdroje může požadovat další zdroje
  3. Nemožnost odejmutí: jednomu přiřazené zdroje nemohou být procesu násilně odejmuty
  4. Cyklické čekání: musí být cyklický řetězec dvou nebo více procesů, kde každý z nich čeká na zdroj držený dalším členem

Tyto 4 podmínky mohou být modelovány pomocí orientovaných grafů = graf alokace zdrojů.

Graf má 2 typy uzlů:

Význam hran:

Cyklus v grafu je nutnou a postačující podmínkou pro vznik uvíznutí

Alokace-zdroju.jpg


[editovat] Řešení zablokování

  1. Pštrosí algoritmus - Zablokování se ani nedetekuje, ani se mu nezabraňuje, ani se neodstraňuje, Uživatel sám rozhodne o řešení (kill). Nespotřebovává prostředky OS - nemá režii ani neomezuje podmínky provozu. (Nejčastější řešení - Unix, Windows)
  2. Detekce a zotavení - Hledá kružnici v orientovaném grafu (hrany vedou od procesu, který čeká, k procesu, který prostředek vlastní), pokud tam je kružnice, nastalo zablokování a je třeba ho řešit:
    • Odebrání prostředku - dohled operátora, pouze na přechodnou dobu
    • Zabíjení procesů z cyklu (resp. mimo cyklus vlastnící identický prostředek)
    • Rollback (OS ukládá stav procesů, při zablokování se některé procesy vrátí do předchozího stavu => ztracena práce... obdoba u DB)
  3. Vyhýbání se - Bezpečný stav (procesy/prostředky nejsou zablokovány, existuje cesta, jak uspokojit všechny požadavky na prostředky spouštěním procesů v jistém pořadí); Viz bankéřův algoritmus. Nutné je předem znát všechny prostředky, které budou programy potřebovat; OS pak dává prostředky tomu, který je nejblíž svému maximu potřeby a navíc pro který je prostředků dost na dokončení. Dnes se moc nepoužívá.
  4. Předcházení (prevence) - napadení jedné z Coffmanových podmínek
  5. Vzájemné vyloučení - spooling (prostriedky spravuje jeden systemový proces, ktory dohliada na to, aby jeho stav bol konzistentny (tiskarna) - pozor na místo na disku)
  6. Drž a čekej - žádat o všechny prostředky před startem procesu. Nejprve všechno uvolnit a pak znovu žádat o všechny najednou
  7. Neodnímatelnost - vede k chaosu
  8. Čekání do kruhu - nejvýše jeden prostředek - všechny prostředky jednoznačně očíslovány, procesy mohou žádat o prostředky jen ve vzestupném pořadí
  9. Dvojfázové zamykání - nejprve postupně všechno zamykám (první fáze). Potom se může pracovat se zamčenými prostředky - a na závěr se už jen odemyká (druhá fáze) - viď transakční spracování u databází ((striktní/konzervativní) dvoufázové zpracování)

Bankéřův algoritmus: Bankéř má klienty a těm slíbil jistou výšku úvěru. Bankéř ví, že ne všichni klienti potřebují plnou výši úvěru najednou. Klienti občas navštíví banku a žádají postupně o prostředky do maximální výšky úvěru. Až klient skončí s obchodem, vrátí bance vypůjčené peníze. Bankéř peníze půjčí pouze tehdy, zůstane-li banka v bezpečném stavu.


Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje