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)