Transcript Wykład 8

Systemy operacyjne
Wykład nr 8:
Zakleszczenia
Piotr Bilski
Pojęcia podstawowe
• Zakleszczenie to nieskończone
oczekiwanie procesów na zasoby, których
nie mogą otrzymać
• Przewidywanie zakleszczeń – graf
przydziału zasobów
• Unikanie i zapobieganie zakleszczeniom
• Wykrywanie i likwidowanie zakleszczeń
Założenia
• System posiada skończoną ilość zasobów
• Poszczególne zasoby mogą być zwielokrotnione
• Działania na zasobach odbywają się poprzez
funkcje systemowe
• Proces korzysta z zasobu poprzez:
–Zamówienie
–Użycie
–Zwolnienie
Warunki wystąpienia zakleszczenia
• Wzajemne wykluczanie – istnieje zasób
niepodzielny
• Przetrzymywanie i oczekiwanie – istnieje proces
posiadający zasób i czekający na inny
• Brak wywłaszczeń – procesu nie można
pozbawić zasobu
• Czekanie cykliczne – istnieje cykl procesów
czekających na zasoby przetrzymywane przez
inne procesy w cyklu
Graf przydziału zasobów
• Służy do opisu zależności zasobów
między procesami
• Zawiera zbiory wierzchołków i krawędzi
• Wierzchołki to procesy (P) i zasoby (Z)
• Krawędź od procesu do zasobu to
krawędź zamówienia
• Krawędź od zasobu do procesu to
krawędź przydziału
Graf przydziału - przykład
Z4
Z2
P1
P2
Z1
P3
Z3
Przykład zakleszczenia
Z4
Z2
P1→Z2→P2→Z4→P3→Z1→P1
P2→Z4→P3→Z1→P2
P1
P2
Z1
P3
Z3
Przykład cyklu bez zakleszczenia
P1→Z1→P2→Z3→P1
P4
Z3
P1
P2
Z1
P3
Obsługa zakleszczeń
• Protokół gwarantujący brak zakleszczeń
(zapobieganie lub unikanie zakleszczeń)
• Po wystąpieniu zakleszczenia wykrycie i
usunięcie go
• Ignorowanie zakleszczeń
Zapobieganie zakleszczeniom
• Zaprzeczenie warunku wzajemnego
wykluczania – trudne (niektóre zasoby
niepodzielne)!
• Aby zamówić zasób, proces nie może
posiadać innych zasobów (protokoły)
• Zapobieganie oczekiwaniu na zasób
• Numerowanie zasobów i wymaganie
zamawiania ich w porządku rosnącym
• Wada – słabe wykorzystanie zasobów
Unikanie zakleszczeń
• Konieczna informacja o kolejności i typach
zamawianych zasobów
• Każdy proces deklaruje, jaką maksymalną
liczbę zasobów określonego typu będzie
potrzebować
• Decyzję o przyznaniu zasobów podejmuje
system
• Algorytm unikania zakleszczenia
zapobiega powstawaniu cykli
Stan bezpieczny
• Jest to sytuacja, w której jest możliwy
przydział zasobów poszczególnym
procesom bez powstawania zakleszczenia
• Warunek konieczny: istnienie ciągu
bezpiecznego procesów
• W przeciwnym wypadku występuje stan
zagrożenia
Stan bezpieczny - przykład
Procesy Max zapotrzebowanie Aktualne zapotrzebowanie
P0
P1
P2
10
4
9
5
2
2
• System dysponuje 12 jednostkami zasobów
• Potrzeby procesu Pi muszą być zaspokojone od razu, lub
po zwolnieniu zasobów przez procesy Pj, gdzie i>j
• Ciąg <P1, P0, P2> jest bezpieczny
t0: P0 = 5 (10), P1 = 4 (4), P2=2 (9)
t1: P0 = 5 (10),P1 = 4 (4), P2 = 3 (9) – danger!!!
Algorytm grafu przydziału zasobów
• Stosowany, gdy każdy zasób ma tylko
jeden egzemplarz
• Oparty na grafie przydziału zasobów
• Krawędź deklaracji informuje o możliwości
zamówienia zasobu przez proces
• Podczas rzeczywistego zamówienia
krawędź deklaracji zamieniana jest na
krawędź zamówienia, przy zwolnieniu odwrotnie
Graf przydziału zasobów - przykład
Z2
Z2
P1
P2
Z1
P1
P2
Z1
Stan zagrożenia (cykl!)
Algorytm bankiera
• Stosowany, gdy zasoby mają wiele
egzemplarzy
• Każdy proces deklaruje maksymalną
liczbę egzemplarzy zasobu do użycia
• System decyduje, czy przydział zasobu
nie powoduje ryzyka zakleszczenia
Algorytm bankiera – struktury danych
• Dostępne
1
6
1
2
3
3
0
2
…
1
2
1
m
• Maksymalne
…
n
Maksymalne[i,j]=k
Proces Pi może zamówić k
egzemplarzy zasobu Zj
m
Algorytm bankiera – struktury danych
(c.d.)
• Przydzielone
…
n
m
Przydzielone[i,j]=k
Proces Pi ma
przydzielone k
egzemplarzy
zasobu Zj
• Potrzebne
…
n
m
Potrzebne[i,j]=k
Proces Pi potrzebuje
jeszcze k egzemplarzy
zasobu Zj
Algorytm bezpieczeństwa
• Roboczy i Skończone to wektory o
długości m i n. Najpierw:
Roboczy=Dostępne, Skończone[i] = F
• Znajdujemy i, dla którego
– Skończone[i] == F
– Potrzebnei <= Roboczy
• Roboczy = Roboczy + Przydzielone
• Jeśli Skończone[i] == T, dla każdego i, to
system jest w stanie bezpiecznym
Algorytm zamawiania zasobów
• Zamówienia to wektor zamówień
poszczególnych zasobów przez proces
• Podczas zamówienia wykonywane są
operacje:
– Jeśli Zamówienia > Potrzebne – zgłoś błąd
– Jeśli Zamówienia > Dostępne – czekaj
– Przydziel zasoby:
Dostępne = Dostępne – Zamówienia
Przydzielone = Przydzielone + Zamówienia
Potrzebne = Potrzebne - Zamówienia
Realizacja
Przydzielone
A B C
0 1 0
P0
P1
P2
P3
P4
Maksymalne
Potrzebne
A
B
C
A
B
C
P0 7
5
3
P0 7
4
3
2
3
2
0
0
1
0
2
1
P1 3
2
2
P1 1
2
2
P2 9
0
2
P2 6
0
0
P3 2
2
2
P3 0
1
1
0
0
2
P4 4
3
3
P4 4
3
1
Dostępne
A
3
B
3
C
2
<P1, P3, P4, P2, P0> - cykl spełniający
kryterium bezpieczeństwa
Realizacja (c.d.)
Dostępne
Zamówienia1 = (1,0,2)
A
3
Zamówienia1 <= Dostępne?
Przydzielone
P0
P1
P2
P3
P4
A B C
0 1 0
B
3
C
2
Potrzebne
A
B
C
P0 7
4
3
3
3
2
0
0
1
2
2
1
P1 0
2
0
P2 6
0
0
P3 0
1
1
0
0
2
P4 4
3
1
Dostępne
A
2
B
3
C
0
<P1, P3, P4, P0, P2> - cykl
spełniający kryterium
bezpieczeństwa
Wykrywanie zakleszczeń
• Jeśli zakleszczenie może wystąpić, to
potrzebne są algorytmy:
– Sprawdzający stan systemu na obecność
zakleszczenia
– Likwidujący zakleszczenie
• Istnieją wersje algorytmów dla
pojedynczych i wielokrotnych typów
zasobów
Wykrywanie zakleszczeń dla
zasobów pojedynczych
• Wykorzystuje graf oczekiwania
• Zawiera wyłącznie wierzchołki procesów
powiązane zależnościami zasobów:
– Pi→Pj  Pi → Zq, Zq → Pj
• Zakleszczenie może zaistnieć, gdy w
grafie istnieje cykl
Wykrywanie zakleszczeń dla
zasobów pojedynczych - przykład
P5
P5
Z1
Z3
P1
P2
Z4
P3
P2
P3
P4
P4
Z2
P1
Z5
graf oczekiwania
Wykrywanie zakleszczeń dla
zasobów wielokrotnych
• Struktury wykorzystywane:
– Wektor Dostępne, macierze Przydzielone i
Zamówienia
• Algorytm odbiera zasoby procesowi, jeśli
posiada on wszystko, czego potrzebuje
Wykrywanie zakleszczeń dla
zasobów wielokrotnych - przykład
Przydzielone
P0
P1
P2
A B C
0 1 0
2 0 0
3 0 3
P3 2
P4 0
1
0
1
2
Zamówienia
Dostępne
A
B
C
P0 0
0
0
P1 2
0
2
P2 0
0
0
P3 1
0
0
P4 0
0
2
A
0
B
0
<P0, P2, P3, P1, P4> - cykl nie będący w
stanie zakleszczenia
C
0
Zakleszczenie - przykład
Przydzielone
P0
P1
P2
A B C
0 1 0
2 0 0
3 0 3
P3 2
P4 0
1
0
1
2
Zamówienia
Dostępne
A
B
C
P0 0
0
0
P1 2
0
2
P2 0
0
1
P3 1
0
0
P4 0
0
2
A
0
B
0
<P0, P2, P3, P1, P4> - cykl nie będący w
stanie zakleszczenia
C
0
Likwidowanie zakleszczeń
• Metody są stosowane w przypadku
wykrycia zakleszczenia
• Dwa podejścia:
– Zaniechanie wszystkich zakleszczonych
procesów
– Usuwanie pojedynczych procesów do
momentu wyeliminowania zakleszczenia
• Problemem są zasoby użytkowane przez
proces w momencie zaniechania
Likwidowanie zakleszczeń – c.d.
• Kryteria wyboru procesu do zaniechania:
– Priorytet
– Wiek i pozostały czas życia
– Ilość wykorzystywanych zasobów
– Ilość zasobów potrzebnych
– Charakter procesu (pierwszo- czy
drugoplanowy)