Detectarea blocării
Atunci când utilizați această metodă, sistemul nu încearcă să împiedice intrarea în situații de blocare. În schimb, permite blocarea. încearcă să determine când sa întâmplat acest lucru și apoi face anumite acțiuni pentru a readuce sistemul la starea care a avut loc înainte ca sistemul să atingă un punct mort.
Detectarea blocajului în prezența unei singure resurse a fiecărui tip
Algoritmul pentru detectarea blocajelor în sistemele în care există o singură resursă pentru fiecare tip. Compunem un grafic în care resursele sunt noduri. Ciclul dintr-un astfel de grafic va fi un impas.
Acest algoritm la rândul său, ia fiecare nod ca rădăcină a ceea ce el speră că va fi un copac, și efectuează în arborele de adancime prima căutare. Dacă în algoritmul traversal revine la site-ul au întâlnit deja, el a găsit CEC l. Dacă algoritmul traversează toate marginile de la un nod dat, acesta revine la nodul anterior. Dacă se întoarce la rădăcină și nu poate merge mai departe, subgraful nodului curent nu conține nici un ciclu. Dacă această proprietate este stocată pentru toate nodurile, atunci graficul complet nu conține nici un ciclu, iar sistemul nu este blocat.
Detectarea blocajelor în prezența mai multor resurse de fiecare tip
Un algoritm similar pentru detectarea blocajelor, dar cu mai multe resurse de fiecare tip. Lăsați în poziția inițială toate procesele să nu fie marcate. Pe măsură ce înaintăm procese algoritm va pune un semn care servește drept un semn că ei pot termina munca lor și, prin urmare, nu sunt într-un impas. După terminarea algoritmului, se știe că orice proces nemarcat se află într-o situație de blocaj.
În prima etapă, algoritmul caută un proces care poate fi finalizat până la sfârșit. Un astfel de proces se caracterizează prin faptul că toate resursele necesare pentru aceasta trebuie să fie printre resursele disponibile în momentul de față. Apoi, procesul selectat va funcționa până la finalizarea acestuia și după aceea va returna resursele pe care le ocupă în fondul general al resurselor disponibile. Apoi procesul este marcat ca terminat. Dacă se dovedește că toate procesele pot funcționa, atunci niciuna dintre ele nu este blocată în prezent. Dacă unii dintre ei nu pot rămâne niciodată blocați, atunci ei se află într-un gol. În ciuda faptului că algoritmul nu este determinist (deoarece poate vedea procesele în orice ordine admisibilă), rezultatul este întotdeauna același.
Ieșiți din impas
Să presupunem că algoritmul nostru pentru detectarea blocajelor sa încheiat cu succes și a găsit un gol. Ce urmează? Sunt necesare metode de restabilire și, în cele din urmă, reluarea funcționării sistemului.
Refaceți prin descărcarea forțată a resursei
Uneori puteți să preluați temporar o resursă de la proprietarul actual și să o dați altui proces. În multe cazuri, este necesară intervenția manuală, în special în sistemele de operare de procesare pe loturi care rulează pe mainframe.
Capacitatea de a lua resursa de proces, da-l la un alt proces și apoi să se întoarcă înapoi, astfel încât procesul inițial nu se observă în funcție de proprietățile resursei-o mare măsură. Este adesea dificil sau imposibil să ieșiți din impas în acest fel. Alegerea unui proces suspendat depinde în principal de procesul care deține resursele care pot fi luate cu ușurință din acesta.
Recuperare prin returnare
Uneori puteți organiza lucrarea astfel încât procesele să creeze periodic puncte de control. Crearea unui punct de control prin proces înseamnă că statutul procesului este scris într-un fișier, rezultând un proces care poate fi apoi reluat din acest fișier. Punctele de control conțin nu numai o imagine de memorie, ci și o stare a resurselor, adică informații despre resursele care sunt în prezent furnizate procesului. Pentru o eficiență mai mare, noul punct de control nu trebuie să fie scris pe lângă cel vechi, ci într-un fișier nou, astfel încât să se formeze o întreagă secvență de puncte de control în timpul procesului.
Când se detectează blocajul, este ușor de înțeles care sunt procesele de resurse necesare. Pentru a ieși din impas, procesul care ocupă resursele necesare este reluat până în momentul în care a primit această resursă. pentru care este lansat unul dintre punctele sale de control. Toate lucrările efectuate după această copie de control sunt pierdute. Ca urmare, procesul este repornit de la un timp mai devreme, când nu a ocupat resursele care sunt acum furnizate unui proces care a căzut într-un sfârșit. Dacă procesul reluat din nou încearcă să obțină această resursă, va trebui să aștepte până când resursa va fi din nou disponibilă.
Recuperare prin distrugerea proceselor
Cea mai brută, dar în același timp cea mai simplă cale de ieșire din situația blocajului este de a distruge unul sau mai multe procese. Puteți distruge procesul care se află în ciclul de blocare. Cu puțin noroc, alte procese pot continua să funcționeze. Dacă prima ștergere nu ajută, procedura poate fi repetată până când ciclul este în cele din urmă rupt.
Evitarea blocajelor
Având în vedere detectarea blocajelor, am presupus implicit că atunci când procesul solicită resurse, le impune toate simultan. Cu toate acestea, în majoritatea sistemelor, resursele sunt solicitate la rândul lor, una câte una. Sistemul ar trebui să poată decide dacă furnizarea resursei este sigură sau nu. și să-l acordăm procesului numai în primul caz. Astfel, apare o nouă întrebare: există un algoritm care poate evita întotdeauna o situație de blocaj în timp ce face alegerea potrivită tot timpul? Răspunsul este un "da" condiționat - putem evita blocările, dar numai dacă anumite informații sunt disponibile în avans.