Blocajele și problema întârzierii nesfârșite a acestora sunt factori importanți pe care dezvoltatorii OS ar trebui să le ia în considerare.
Un blocaj este o situație într-un sistem multiprogram atunci când un proces așteaptă un eveniment care nu se va întâmpla niciodată. Un blocaj de sistem, sau "agățat" de un sistem, este o situație în care unul sau mai multe procese se află într-o stare de impas.
Luați în considerare un exemplu simplu al impasului în alocarea resurselor.
În sistemele de blocare a sistemelor de operare apar în majoritatea cazurilor atunci când procesele concurează pentru alocarea de resurse secvențiale de acces, care la un moment dat sunt atribuite unui singur utilizator.
Graficul de alocare a resurselor prezintă un blocaj în care fiecare proces deține o resursă solicitată de un alt proces și nici unul dintre procese nu dorește să elibereze resursa care îi aparține.
Resursa 1 este evidențiată de cererile Process_Y
Resursa Resursă 1 Resursă 1
Solicitările Process_X Resursa 2 este alocată
resursă 2 Resursă 2 process_ Y
Fig. 5 Graficul de alocare a resurselor
O astfel de stare de așteptare circulară este caracteristică sistemelor într-o stare finală.
Sistemele de tip spooling (I / O cu tamponare) sunt adesea supuse terminatiilor (pentru a da exemple de astfel de situatii pe cont propriu).
Aproape problema apariției blocajelor - problema amânării infinit, în cazul în care furnizarea resurselor solicitate, unele proces va fi amânată pentru o perioadă nedeterminată, la momentul respectiv, sistemul va acorda o atenție la alte procese. Reamintim că în dezvoltarea sistemului de operare este necesar să se asigure gestionarea echitabilă și eficientă a proceselor aflate în așteptare. În unele sisteme, amânarea infinită este împiedicată datorită faptului că prioritatea procesului crește pe măsură ce așteaptă alocarea resursei de care are nevoie. Aceasta se numește proces de îmbătrânire.
Condiții necesare pentru apariția blocajelor
Condițiile necesare pentru existența unui blocaj pot fi formulate după cum urmează.
Condiția excluziunii reciproce este când procesele le impun să acorde controlul monopol asupra resurselor alocate acestora.
Condiția de așteptare pentru resurse este atunci când procesele păstrează resursele deja alocate acestora, în timp ce așteaptă alocarea de resurse suplimentare.
Condiția non-redistribuirii este că atunci când resursele nu pot fi selectate din procesele care le dețin până când aceste resurse sunt utilizate pentru a finaliza lucrarea.
Circumstanță de așteptare circulară - când există un lanț inelar de procese în care fiecare proces își păstrează una sau mai multe resurse necesare în următorul proces.
Lupta împotriva apariției blocajelor se poate desfășura în patru direcții principale: prevenirea blocajelor; eludarea termenelor moarte; detectarea blocajelor; recuperarea din impasuri.
Strategii de prevenire a blocajelor
Atunci când se împiedică blocarea, obiectivul este de a asigura condiții care exclud posibilitatea unor situații de blocare. Adesea, o astfel de abordare duce la utilizarea ineficientă a resurselor, dar, totuși, este adesea folosită de dezvoltatorii de sisteme de operare.
Havender 1 1 în lucrarea sa a arătat că impasul este imposibil dacă cel puțin una dintre cele patru condiții necesare este încălcată și a propus următoarea strategie de prevenire a blocajelor.
Fiecare proces trebuie să solicite imediat toate resursele pe care le solicită și nu poate începe executarea până când toate resursele nu îi sunt furnizate. Observăm că un astfel de principiu strategic conduce, într-o serie de cazuri, la o scădere a eficienței sistemului.
Dacă un proces care descurajează anumite resurse este refuzat pentru solicitarea de resurse suplimentare, acest proces trebuie să elibereze resursele inițiale și, dacă este necesar, să le solicite din nou, împreună cu resurse suplimentare. Acest principiu împiedică apariția unei stări non-distributive. Unul dintre deficiențele grave ale acestei strategii este posibilitatea unei întârzieri infinite.
Introducerea ordinii liniare pe tipuri de resurse pentru toate procesele - cu alte cuvinte, dacă un proces este alocat unor resurse de un anumit tip, atunci în viitor poate solicita numai resurse de tipuri mai îndepărtate. Acest principiu al lui Havender exclude o așteptare circulară, totuși afectează în mod negativ abilitatea utilizatorului de a scrie liber și ușor programele de aplicație, adică duce la o încălcare a prieteniei OS.