Rezumat: Prelegerea se ocupă de problemele blocajelor, blocajelor și blocajelor sistemului
În prelegerile anterioare am considerat modalități de sincronizare a proceselor care permit proceselor să coopereze cu succes. Cu toate acestea, în unele cazuri pot apărea dificultăți neprevăzute. Să presupunem că mai multe procese concurează pentru a avea un număr finit de resurse. Dacă resursa solicitată nu este disponibilă, OS pune procesul într-o stare de așteptare. Dacă resursa necesară este păstrată de un alt proces de așteptare, primul proces nu își poate schimba starea. Această situație se numește impas. Se spune că în sistemul de programare multiprogramare procesul este într-o stare de impas. Dacă așteaptă un eveniment care nu se va întâmpla niciodată. Situația de blocare a sistemului. sau "atârnarea sistemului", este o consecință a faptului că unul sau mai multe procese se află într-o stare de impas. Uneori, astfel de situații se numesc impasuri. În general, problema golurilor nu are o soluție eficientă.
Să luăm în considerare un exemplu. Să presupunem că două procese realizează ieșirea de pe bandă în imprimantă. Unul dintre ei a reușit să monopolizeze banda și susține imprimanta, iar cealaltă este invers. După aceea, ambele procese sunt blocate în anticiparea celei de-a doua resurse (a se vedea figura 7.1).
Fig. 7.1. Un exemplu de blocaj
Definiția. O mulțime de procese se află într-o situație de blocaj. dacă fiecare proces din set așteaptă un eveniment pe care numai un alt proces al setului dat îl poate apela. Din moment ce toate procesele ceva de așteptat, nici unul dintre ei nu va fi capabil să inițieze un eveniment care ar trezi celălalt membru al setului și, prin urmare, toate procesele dorm împreună.
Mai sus este un exemplu de impas. Apare atunci când lucrați cu așa-numitele dispozitive dedicate. Dead ends. totuși, poate apărea în alte situații. Haprimer în înregistrările de baze de date pot fi localizate sisteme de control de proces pentru a evita starea de curse (a se vedea. Curs 5 „Algoritmi de sincronizare“). În acest caz, se poate întâmpla ca unul dintre procese să blocheze înregistrările necesare unui alt proces și viceversa. Astfel, blocările pot avea loc atât pe resursele hardware, cât și pe cele software.
Blocajele pot fi de asemenea cauzate de erori de programare. De exemplu, un proces poate aștepta în zadar pentru deschiderea unui semafor, deoarece într-o aplicație scrisă incorectă această operațiune a fost uitată să fie furnizată. Un alt motiv pentru așteptările nesfârșite poate fi o politică discriminatorie față de anumite procese. Cu toate acestea, cel mai adesea evenimentul, care așteaptă procesul într-o situație de blocaj. - eliberarea resurselor. Prin urmare, în viitor, vor fi luate în considerare metodele de abordare a blocajelor de tip resursă.
Resursele pot fi fie dispozitive, fie date. Unele resurse permit partajarea între procese, adică sunt resurse partajate. De exemplu, memorie. procesor. discurile sunt utilizate în mod colectiv de procese. Altele nu permit separarea, adică sunt alocate. cum ar fi o unitate de bandă. Utilizarea resurselor alocate și a celor partajate poate duce la blocaj. De exemplu, citirea de pe un disc partajat poate fi efectuată simultan de mai multe procese, în timp ce scrierea necesită acces exclusiv la datele de pe disc. Putem presupune că partea discului în care are loc înregistrarea. este alocată unui proces specific. Prin urmare, în viitor, vom porni de la ipoteza că legăturile moarte sunt asociate cu resursele alocate. adică, capetele mortale apar atunci când procesului i se acordă acces exclusiv la dispozitive, fișiere și alte resurse.
Secvența tradițională de evenimente când lucrați cu o resursă constă în solicitarea, utilizarea și eliberarea unei resurse. Tipul cererii depinde de natura resursei și de sistemul de operare. Cererea poate fi explicită, de exemplu un apel de cerere special sau implicit - deschis pentru a deschide un fișier. De obicei, dacă resursa este ocupată și cererea este respinsă, procesul solicitant intră într-o stare de așteptare.
Mai mult, în această prelegere vor fi luate în considerare aspectele de detectare, prevenire, eludare a blocajelor și recuperare după blocări. De regulă, lupta împotriva secetei este foarte costisitoare. Cu toate acestea, pentru un număr de sisteme, de exemplu, pentru sistemele în timp real, nu există altă cale de ieșire.
Condiții pentru apariția blocajelor
Condițiile de apariție a blocajelor au fost formulate de Koffman, Alfik și Shoshani în 1970.
- Condiție de excludere mutuală. Numai un singur proces poate folosi o resursă la un moment dat.
- O condiție pentru așteptarea resurselor (țineți și așteptați). Procesele dețin resurse. deja alocate acestora și pot solicita alte resurse.
- Starea de non-redistribuire (fără preemțiune). Resource. alocate anterior, nu pot fi îndepărtate forțat din proces. Ele pot fi eliberate numai prin procesul care le păstrează.
- Condiție de așteptare circulară. Există un lanț de procese inelar în care fiecare proces așteaptă accesul la resursă. deținute de un alt proces al lanțului.
Pentru formarea unui impas, este necesar și suficient ca toate cele patru condiții să fie îndeplinite.
În mod tipic, un blocaj este modelat de un ciclu într-un grafic alcătuit din noduri de două tipuri: dreptunghiuri - procese și elipse - resurse. ca cea descrisă în Fig. 7.1. Săgețile care indică din resurse la proces indică faptul că resursa este alocată acestui proces. Săgeți indicând de la proces la resurse. înseamnă că procesul solicită această resursă.
Principalele direcții ale luptei împotriva secetelor
Problema temelor mortale a inițiat numeroase studii interesante în domeniul informaticii. Evident, condiția ciclică de așteptare diferă de restul. Primele trei condiții formează regulile existente în sistem, în timp ce a patra condiție descrie o situație care poate apărea cu o anumită secvență nefavorabilă de evenimente. Prin urmare, metodele de prevenire a blocajelor se concentrează în principal asupra încălcării primelor trei condiții prin introducerea unui număr de restricții privind comportamentul proceselor și modul de alocare a resurselor. Metodele de detectare și eliminare sunt mai puțin conservatoare și se reduc la descoperirea și ruperea ciclului de așteptare a resurselor.
Deci, principalele direcții ale luptei împotriva secetelor:
- Ignorarea problemei în ansamblu
- Prevenirea blocajelor
- Detectarea blocajelor
- Recuperare după blocări
Ignorarea problemei blocajului
Cea mai simplă abordare nu este aceea de a observa problema sfârșitului mort. Pentru a face o astfel de decizie, este necesar să se evalueze probabilitatea de impas și se compară cu probabilitatea de deteriorare din alte eșecuri de hardware și software. Designerii de obicei nu doresc să sacrifice performanța sistemului sau confortul utilizatorilor pentru introducerea unor mijloace complexe și costisitoare de combatere a blocajelor.
Orice sistem de operare care are un număr de rețele de dimensiuni fixe în kernel ar putea suferi de blocări. chiar dacă nu sunt detectate. Deschideți tabela de fișiere, tabelul de proces. de fapt, fiecare tabel este o resursă limitată. Completarea tuturor intrărilor de tabelă de proces poate duce la respingerea cererii de creare a următorului proces. Într-o confluență nefavorabilă a circumstanțelor, mai multe procese pot emite o astfel de cerere simultan și se află într-un impas. Ar trebui să abandonez apelul CreateProcess pentru a rezolva această problemă?
Abordarea este cele mai populare sisteme de operare (Unix, Windows și altele.) Este de a ignora problema pe presupunerea că este puțin probabil ca un impas aleatoriu, mai degrabă decât reguli ridicole care forțează utilizatorii să limiteze numărul de procese, fișiere deschise, și așa mai departe. N. Confruntate cu alegerea nedorita între strictețe și confort, este dificil să găsim o soluție care să se potrivească tuturor.