Documente Academic
Documente Profesional
Documente Cultură
A.1 Algoritm pt. detectarea deadlock-ului când există câte o singură resursă de fiecare tip
A.2 Algoritm pt. detectarea deadlock-ului când există mai multe resurse de fiecare tip
Următorul algoritm inspectează un graf şi se termină când găseşte un ciclu sau când demonstrează că nu
există nici unul. Algoritmul utilizează o listă a nodurilor (L) şi marchează arcele ce au fost inspectate.
Fie 7 procese (A G) şi 6 resurse (R W). Modul în care resursele sunt deţinute / solicitate este
următorul:
Exemplu de aplicare a algoritmului anterior (nodurilor sunt alese de la stânga la dreapta şi de sus în
jos, adică în ordinea R, A, B, C, S, D, T, E, F,…):
Algoritm:
Iniţial, toate procesele sunt nemarcate. Pe măsură ce algoritmul avansează, se marchează procese, indicând faptul că
se pot termina şi deci, nu sunt în deadlock. La terminarea algoritmului, procesele nemarcate sunt în deadlock.
Pas 1: Caută un proces nemarcat Pi astfel încât linia i din R, notată Ri ,: , satisface Ri ,: A .
Pas 2: Dacă există un astfel de i, se adună linia i a matricei C la A, A A Ci ,: , se marchează procesul Pi şi se reia pasul 1.
Pas 3: Dacă nu există i de la pasul 1, se termină algoritmul.
Exemplu:
E [4 2 3 1]; A [2 1 0 0];
0 0 1 0 2 0 0 1
.
C 2 0 0 1 ; R 1 0 1 0
0 1 2 0 2 1 0 0
Singurul proces care satisface cerinţa de la pasul 1 este P3, R3,: A . După ce P3 se execută se ajunge la:
0 0 1 0
C 2 0 0 1 , A [2 2 2 0], şi P3 este marcat.
0 0 0 0
Următorul proces ce se poate executa este P2, deoarece R2,: A . După execuţia lui P2, se obţine:
0 0 1 0
C 0 0 0 0 , A [4 2 2 1], şi P2 este marcat.
0 0 0 0
În acest moment se poate executa şi P1, deoarece R1,: A . După execuţia lui P1, se obţine:
0 0 0 0
C 0 0 0 0 , A [4 3 2 1], şi P1 este marcat.
0 0 0 0
Stare sigură: O stare a unui sistem este sigură dacă nu corespunde unui deadlock şi există o ordine de
planificare în care fiecare proces îşi poate termina execuţia chiar dacă toate procesele solicită simultan toate
resursele necesare.
Traiectoriile resurselor:
B1. Algoritmul bancherilor pt. un singur tip de resurse
Procesele anunţă de la început nr. maxim de resurse necesare pt. a-şi termina execuţia.
La fiecare cerere de resursă, se verifică dacă alocarea resursei conduce într-o stare sigură.
- dacă da, resursa se alocă
- dacă nu, cererea este amânată
Date cunoscute:
M M 1 M 2 ... M n , M i reprezintă numărul maxim de resurse necesare pentru terminarea procesului Pi , M i N , 1 i n
T
Se calculează:
R = M – C , vectorul solicitărilor, Ri reprezintă numărul resurselor solicitate de Pi , 1 i n
n
A N Ci – numărul de resurse disponibile
i 1
Algoritm:
Se iniţializează Fi 0 , 1 i n .
Pas 1: Cât timp în vectorul F mai există elemente nule, caută i astfel încât Fi 0 şi Ri A .
Dacă nu există i, STOP starea NU este sigură.
Dacă există i, se trece la pasul 2.
Pas 2: (i) se evaluează: Ci M i , A A Ri , Ri 0 .
(ii) se calculează: A A Ci , Ci 0 , M i 0 .
(iii) Fi 1. Se reia pasul 1.
Pas 3: Dacă Fi 1 , 1 i n , atunci starea este sigură.
Problemă:
Fie 3 procese P1, P2 şi P3 şi N 10 resurse de acelaşi tip. Nr. maxim de resurse ce pot fi cerute de
procese: M 9, 4, 7T
Care din următoarele două stări este sigură? Dacă starea este sigură, ce secvenţă de alocare rezultă în urma aplicării
algoritmului anterior?
Idee rezolvare:
Pt. Starea 1, la începutul rulării algoritmului:
C M R F
P1 3 9 6 0
P2 2 4 2 0
P3 2 7 5 0
A=3
Ce proces este selectat întâi, şi cum se modifică tabelul de mai sus? Continuaţi până algoritmul se termină.
B2. Algoritmul bancherilor pt. mai multe tipuri de resurse
Algoritmul este foarte asemănător cu cel pt. detectarea deadlock-ului pt. mai multe resurse de fiecare tip (secţiunea A2).
Fie n procese, notate P1,…Pn şi m tipuri de resurse. Există E1 resurse de tip 1, E2 resurse de tip 2, ş.a.m.d.
Se dau:
E – vectorul resurselor existente, E E1 E2 Em ;
M M ij – matricea maximelor, M ij reprezintă numărul maxim de resurse de tip j solicitate de Pi , 1 i n , 1 j m .
C Cij – matricea de alocare a resurselor, Cij , reprezintă numărul resurselor de tip j deţinute de Pi , 1 i n , 1 j m
Se calculează:
A – vectorul resurselor disponibile, A A1 A2 Am , unde A j reprezintă numărul resurselor de tipul j disponibile,
n
1 j m : A j E j Cij ;
i 1
Notaţii:
Dacă X este o matrice, X i ,: denotă linia i a matricei
Între doi vectori X şi Y de aceeaşi dimensiune m, se defineşte relaţia de ordine astfel: X Y X i Yi , 1 i m .
Algoritm:
Se iniţializează Fi 0 , 1 i n .
Pas 1: Cât timp în vectorul F mai există elemente nule,
- caută i astfel încât Fi 0 şi Ri,: A .
Dacă nu există i, STOP starea NU este sigură.
Dacă există i, se trece la pasul 2.
Pas 2. Marchează procesul i ca terminat, Fi 1 , şi A A Ci,: , Ri,: 0 , Ci,: 0 .
Treci la pasul 1.
Pas 3. Dacă toate procesele sunt marcate ca terminate, Fi 1 , i 1, n stare sigură
Exemplu:
4 1 1 1 3 0 1 1
0 2 1 2 0 1 0 0
Starea curentă (iniţială): E 6 3 4 2 , M 4 2 1 0 , C 1 1 1 0
1 1 1 1 1 1 0 1
2 1 1 0 0 0 0 0
1 1 0 0
0 1 1 2
se calculează: A 1 0 2 0 ,
R 3 1 0 0
0 0 1 0
2 1 1 0
Rularea algoritmului:
F 0 0 0 0 0 , poate fi ales doar procesul 4:
3 0 1 1 1 1 0 0
0 1 0 0 0 1 1 2
i 4 : C 1 1 1 0 , R 3 1 0 0 , A 2 1 2 1
-> următorul proces ce poate fi ales este 1 sau 5; alegem procesul 5
0 0 0 0 0 0 0 0
0 0 0 0 2 1 1 0
F 0 0 0 1 0
3 0 1 1 1 1 0 0
0 1 0 0 0 1 1 2
i 5 : C 1 1 1 0 , R 3 1 0 0 , A 2 1 2 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
F 0 0 0 1 1
0 0 0 0 0 0 0 0
0 1 0 0 0 1 1 2
i 1: C 1 1 1 0 , R 3 1 0 0 , A 5 1 3 2
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
F 1 0 0 1 1
0 0 0 0 0 0 0 0
0 1 0 0 0 1 1 2
i 3 : C 0 0 0 0 , R 0 0 0 0 , A 6 2 4 2
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
F 1 0 1 1 1
i 2 : A 6 3 4 2 , F 1 1 1 1 1
Starea este sigură. Dacă se alocă resursele în ordinea P4, P5, P1, P3, P2 toate procesele îşi încheie execuţia.
C. Prevenirea deadlock-ului
Există 4 condiţii prezentate care duc la producerea fenomenului de deadlock. Dacă se invalidează cel puţin
una dintre cele 4 condiţii, se previne apariţia deadlock-ului.
Un proces care deţine resurse nu trebuie să solicite alte resurse. Se poate realiza prin 2 modalităţi:
a) Se cere fiecărui proces să solicite toate resursele de care are nevoie la lansarea în execuţie. Dacă toate resursele
necesare sunt disponibile, ele vor fi alocate procesului şi procesul se poate executa. Dacă cel puţin o resursă nu este
disponibilă, nici o resursă nu va fi alocată procesului şi procesul va trebui să aştepte.
Dezavantaje:
- pentru multe procese, resursele necesare sunt cunoscute abia în momentul în care se execută;
- resursele nu sunt utilizate optimal.
b) Se cere unui proces să elibereze toate resursele deţinute înainte de a solicita alte resurse.
3. Invalidarea condiţiei de nepreempţiune
Dacă un proces P solicită resurse, se verifică dacă resursele sunt disponibile. În caz afirmativ, procesul primeşte resursele.
Dacă resursele nu sunt disponibile, ci sunt alocate unui alt proces Q care aşteaptă să primească alte resurse, atunci resursele
solicitate de P vor fi luate de la procesul Q şi acordate lui P.
Strategia poate fi aplicată pe resurse ce pot fi salvate şi restaurate cu uşurinţă (exemplu procesor, memorie), dar nu poate fi
aplicată pe resurse nepreemptibile (exemplu imprimantă, unităţi de bandă magnetică).
Condiţia de aşteptare circulară poate fi invalidată dacă se ordonează tipurile de resurse şi fiecare proces solicită resurse în
ordinea crescătoare enumerării.
Fie R R1 , R2 , , Rm mulţimea tipurilor de resurse.
Se asignează fiecărui tip de resursă un număr întreg unic ce va fi utilizat pentru a decide dacă o resursă precede o altă
resursă. Formal, se defineşte funcţia bijectivă F : R N , care asociază fiecărui tip de resursă un număr natural.
Un proces care deţine una sau mai multe instanţe ale resursei de tip Ri poate solicita instanţe ale resursei Rj doar dacă
F(Rj) > F(Ri).
Dacă un proces are nevoie de mai multe resurse de acest tip, el trebuie să le solicite cu un singur apel sistem. Se mai
poate impune restricţia ca un proces care solicită resurse de tip Rj să fi eliberat înainte resursele de tip Ri cu F(Ri) > F(Rj).
Dacă sunt respectate aceste restricţii, graful resurselor nu poate avea cicluri.
Exemplu de invalidare a condiţiei 4:
A B
Dacă F(R1) < F(R2), procesul B nu poate solicita resursa de tip R1.
Dacă F(R1) > F(R2), procesul A nu poate solicita resursa de tip R2.
În concluzie, nu se poate ajunge la deadlock.
R1 R2