background image

Stan Bezpieczny

Stan systemu jest bezpieczny, jeśli istnieje porządek, w 

którym system może przydzielić zasoby każdemu 
procesowi (nawet w stopniu maksymalnym), stale 
unikając zakleszczenia.

System jest w stanie bezpiecznym tylko wtedy, gdy istnieje 

ciąg bezpieczny.

Ciąg procesów <P1, P2, …, Pn> jest bezpieczny w danym 

stanie przydziałów, jeśli dla każdego procesu  Pi jego 
potencjalne zapotrzebowanie na zasoby może być 
zaspokojone przez bieżąco dostępne zasoby oraz 
zasoby użytkowane przez wszystkie procesy Pj. Po ich 
zakończeniu proces Pi może otrzymać wszystkie 
potrzebne mu zasoby, dokończyć przewidzianą pracę, 
oddać przydzielone zasoby i zakończyć działanie. Kiedy 
proces Pi będzie zakończony, wtedy niezbędne zasoby 
może otrzymać proces Pi+1 itd. Jeśli żaden taki ciąg 
nie istnieje, to system określa się jako będący w stanie 
zagrożenia.

background image

Stan Bezpieczny

Stan bezpieczny nie jest stanem zakleszczenia.

Zakleszczenie  jest stanem zagrożenia.

Stan zagrożenia może prowadzić do zakleszczenia.

Dopóki stan jest bezpieczny, dopóty system 

operacyjny może unikać stanów zagrożenia ( i 
zakleszczeń).

Zakleszczen

ie

Stan 
zagrożenia

Stan 
bezpieczny

background image

Unikanie zakleszczeń

1. W najprostszym i najbardziej użytecznym modelu 

wymaga się, aby każdy proces deklarował 
maksymalną liczbę zasobów każdego typu, 
których będzie potrzebował:

1.

Algorytm unikania zakleszczeń (deadlock avoidance) 
sprawdza dynamicznie stan przydziału zasobów, aby 
zapewnić, że nigdy nie dojdzie do czekania cyklicznego.

2.

Stan przydziału zasobów jest określony prze liczbę 
dostępnych i przydzielonych zasobów oraz maksymalne 
zapotrzebowanie procesów.

2. Kiedy proces żąda dostępnego zasobu, system 

musi sprawdzić czy natychmiastowe 
przydzielenie tego zasobu zachowa system w 
stanie bezpiecznym.

3.

 

Unikanie zakleszczeń – gwarancja, że nigdy nie 

pojawi się stan zagrożenia.

background image

Likwidowanie zakleszczenia

1. Zakończenie procesu:

1.

Zaniechanie wszystkich zakleszczonych procesów.

2.

Usuwanie procesów pojedynczo, aż do wyeliminowania 
cyklu zakleszczenia.

2. Wywłaszczanie zasobów:

1. Wybór ofiary – minimalizacja kosztów.
2.  Wycofanie – powrót do jakiegoś bezpiecznego stanu z 
którego można będzie go wznowić.
3. Głodzenie – proces mógł być wydelegowany do roli ofiary 
tylko skończoną liczbę razy. 

3.

 

Mieszane metody

background image

Algorytm Grafu Przydziału Zasobów

Metoda wykorzystywana dla zasobów, których 

każdy typ ma pojedynczy egzemplarz.

Dodatkowy typ krawędzi – krawędź deklaracji (Pi -> 

Zj). Oznacza, że proces Pi może zamówić kiedyś 
zasób Zj.

Krawędź deklaracji (linia przerywana)przechodzi w 

krawędź zamówienia, gdy proces zamawia zasób.

Po zwolnieniu zasobu krawędź zamówienia 

przechodzi z powrotem w krawędź deklaracji.

Zamówienie może być spełnione tylko wtedy, gdy 

nie doprowadzi do powstania cyklu w grafie.

background image

Graf przydziału zasobów, graf oczekiwania

background image

Algorytm Bankiera

Sytuacja analogiczna do banku, który nie 

zainwestuje gotówki tak, aby uniemożliwić 
zaspokojenie wymagań wszystkich jego 
klientów).  Algorytm służy do sprawdzenia, czy 
stan jest bezpieczny.

1. 

Proces przy wejściu do systemu deklaruje 

maksymalną liczbę egzemplarzy każdego zasobu, które 
będzie potrzebował.

2. Przy zamawianiu zasobów przez użytkownika, 
system określa, czy ich przydzielenie pozostawi system 
w stanie bezpiecznym:

- przy odpowiedzi pozytywnej – zasoby są 

przydzielane,

- w przypadku odpowiedzi negatywnej – proces musi 

czekać.

background image

Algorytm Bankiera

Do zaimplementowania algorytmu potrzebne są 

następujące struktury:

dostępne:

wektor określający liczbę dostępnych zasobów Z(i): 

D[i])

,

 

maksymalne:

macierz określająca maksymalne żądania każdego 

procesu P(j):  

Max[j,i]

,

przydzielone:

macierz  określająca  liczbę  zasobów  każdego  typu 

Z(i), 

przydzielonych  do  każdego  z  procesów  P(j): 

Pd[j,i]

,

potrzebne:

macierz  określająca  pozostałe  do  spełnienia 

zamówienia 

każdego z procesów: 

Pt[j,i]

.

Pt[j,i] 

Max[j,i]

  - 

Pd[j,i]

 

koniec:

wektor K[j] o wartościach true, gdy proces P(j) może 

być 

zakończony  w  dotychczasowej  konfiguracji 

przydziałów, 

robocze:

wektor R(i) o wartościach odpowiadających liczbie

zasobów 

Z(i) 

dostępnych 

po 

zakończeniu 

wszystkich

procesów, dla których K[i] = true.

background image

Algorytm Bankiera

1. Wypełnij tablicę K wartościami false, a tablicę R zawartością 

tablicy D.

2. Znajdź takie j, że:

-  K[j] = false
-  Pt[j]  R      j – nr kolejnego procesu dodawanego na 
końcu już 

skonstruowanego ciągu 

bezpiecznego.

3. Jeżeli nie ma takiego j, to idź do kroku 6.

4. Jeżeli jest takie j, to:

- R = R + Pd[j]
- K[j] = true

po dodaniu procesu P(j) do 

konstruowanego ciągu 

bezpiecznego zakłada się, że ten 

proces kończy się i zwalnia wszystkie swoje zasoby.

5. Wróć do kroku 2.

6. Jeżeli dla każdego j = 1, 2, ...n  K[j]=true, to stan jest 

bezpieczny; 

     w przeciwnym przypadku stan nie jest bezpieczny.

background image

Algorytm Bankiera

Obsługa żądania procesu przez a

lgorytm bankiera 

Zd[j,i] 

– tablica żądań

 

zasobów Z(i) przez proces P(j); 

1. Jeśli Zd > Pt[j], tzn. proces żąda więcej zasobów niż 
zadeklarowane na początku maximum M[j]  >>> zlecenie 
odrzucone.  

2. Jeśli Zd > D, tzn. proces żąda więcej zasobów niż jest ich 
dostępnych  >>> zlecenie odrzucone. 

3. Jeśli żaden z ww. warunków nie jest spełniony, 
konstruujemy stan, jaki powstałby po spełnieniu tego żądania 
i sprawdzamy, czy jest on 

bezpieczny. 

Nowy stan otrzymuje się następująco:
D = D – Zd;

Pd[j] = Pd[j] + Zd;

Pt[j] = Pt[j] – Zd;

4. Jeśli taki stan jest bezpieczny, żądanie jest spełniane.

Jeśli stan nie jest bezpieczny, proces P(j) musi czekać 

(mimo, że zasoby są wolne – jest to koszt unikania 
zakleszczeń). 


Document Outline