Operační systémy Přednášky pro výuku předmětu Operační systémy Ing. Antonín Vaněk, CSc. DFJP, Univerzita Pardubice září 2003
Kapitola 6 Konkurence procesů: zablokování a vyhladovění
Zablokování (deadlock) možný překlad: vzájemné zablokování, smrtící objetí termín pochází ze sportu (zápas) trvalé zablokování skupiny procesů které buď soupeří o systémové prostředky nebo mezi sebou komunikují vzniká konfliktem požadavků na prostředky od dvou nebo více procesů
Příklad na deadlock
Opakovaně použitelné prostředky Reusable Resources v daném okamžiku je může používat pouze jeden proces a nejsou tímto použitím vyčerpány proces může získat takový prostředek a pak jej opět uvolnit pro použití jiným procesem čas procesoru, I/O kanály, operační a sekundární paměť, soubory, databáze, semafory... deadlock nastává, jestliže proces již nějaký nějaký prostředek drží a žádá o přidělení dalšího
Příklad zablokování procesů dva procesy soupeří o paměť celkem je možné přidělit 200KB paměťového prostoru nastane následující posloupnost událostí deadlock nastává, když oba procesy dospějí k druhému požadavku P1... Request 80K bytes; Request 60K bytes; P2... Request 70K bytes; Request 80K bytes;
Spotřebitelné prostředky prostředky vytvářené a ručené procesy přerušení, signály, zprávy, informace v I/O bufferech... deadlock může nastat, když je příjem zprávy blokující kombinace vedoucí k vzájemnému zablokování může být velmi vzácná
Příklad zablokování procesů deadlock nastává, pokud je receive blokující P1... Receive(P2); Send(P2); P2... Receive(P1); Send(P1);
Podmínky vzniku stavu deadlock vzájemné vylučování v daném čase může prostředek používat pouze jeden proces Hold-and-wait proces může držet prostředek v době, kdy žádá o přidělení dalšího systém bez preempce již přidělený prostředek nemůže být procesu násilně odebrán
Podmínky vzniku stavu deadlock kruhové čekání (Circular Wait) existuje uzavřený řetězec procesů takový, že každý proces drží nejméně jeden prostředek, který potřebuje následující proces v řetězci je to důsledek předešlých tří podmínek mohou být potřebné i další podmínky, ale jejich splnění není dostatečné pro vznik vzájemného blokování
Circular Wait Resource B Resource A Process P1 Process P2 Requests Held by Requests Held By
Prevence stavu deadlock Vzájemné vylučování nelze se mu vyhnout !!! Hold-and-Wait lze zajistit, aby procesy požadovaly všechny prostředky najednou pak lze proces blokovat, dokud nemohou být všechny jeho požadavky zajištěny současně proces může čekat na takovou situaci velmi dlouho prostředky alokované procesu mohou zůstat dlouhou dobu nevyužity. Tyto prostředky mohou být použity jinými procesy
Bezpečný stav existuje postup, jak dokončit všechny procesy, aniž by nastal deadlock tzv. bezpečná sekvence (safe sequence) Nebezpečný stav stav, kdy může (ale nemusí) nastat deadlock OS musí udržovat bezpečný stav, aby se vyhnul případnému vzájemnému zablokování procesů (deadlock) Algoritmus bankéře
výchozí předpoklady pevný počet prostředků pevný počet procesů všechny procesy musí deklarovat předem své maximální požadavky požadavky procesu jsou akceptovány pouze pokud jeho maximální požadavky nepřekročí celkový počet prostředků procesy mohou získat v daném okamžiku pouze jeden prostředek Algoritmus bankéře
prostředek je alokován pouze pokud výsledkem alokace je opět bezpečný stav algoritmus předchází vzniku cyklického čekání (circular wait) algoritmus má některé slabiny nelze vždy garantovat pevný počet prostředků v multiprogramovém prostředí nelze vždy zajistit pevný počet procesů procesy nemohou vždy předem znát maximální požadavky na prostředky Algoritmus bankéře
Prevence stavu deadlock preempce když je procesu odmítnuto přidělení dalšího prostředku, musí proces uvolnit již získané prostředky systém musí umožňovat, aby se proces mohl vrátit do předešlého stavu praktické použitelné pouze tam, kde stav může být snadno uložen a pak obnoven zpět např. stav procesoru
Prevence stavu deadlock kruhové čekání pro prostředky definovat lineární uspořádání jakmile je nějaký prostředek přidělen, mohou být jako další přiděleny již jen prostředky s vyšším pořadovým číslem může bezdůvodně odmítnout přidělení prostředků
Detekce stavu deadlock OS může testovat, zda nenastal deadlock test se provádí při příjmu požadavku na prostředky včasná detekce stavu deadlock časté testování spotřebovává čas procesoru periodické testování
Vyloučení stavu deadlock nestartovat procesy, jejichž požadavky by mohly způsobit deadlock nepovolit inkrementální požadavky na prostředky procesům, pokud by takové požadavky mohly způsobit deadlock není nutná preempce a rollback procesů
Vyloučení stavu deadlock na začátku musí program specifikovat maximální požadavky na prostředky uvažované procesy musí být nezávislé – bez požadavků na synchronizaci počet alokovatelných prostředků musí být omezený žádný proces nesmí skončit, dokud neuvolní obsazené prostředky
Strategie odstraňování stavu deadlock násilně ukončit všechny vzájemně zablokované procesy obnovit vzájemně zablokované procesy ze zálohy v bodě, kde dosud neexistoval deadlock, a procesy restartovat tím ovšem může opět vzniknout původní deadlock postupně násilně ukončovat jednotlivé vzájemně zablokované procesy, dokud deadlock nezmizí postupně násilně odebírat procesům prostředky, dokud deadlock nezmizí
Výběrová kriteria při ukončování procesů nejmenší dosud spotřebovaný čas procesoru nejmenší objem dosud vygenerovaných výstupních dat Nejdelší odhadnutý čas zbývající do dokončení nejmenší počet dosud přidělených prostředků nejnižší priorita
Vyhladovění (Starvation) při čekání na přidělení prostředků proces nemůže získat přístup k požadovanému prostředku v důsledku obsazení prostředku jinými procesy ... a nikdy se ho nedočká při komunikaci procesů dva procesy si stále vyměňují zprávy, zatímco jiný proces čeká na zprávu ... a nikdy se jí nedočká typický důsledek nízké priority