J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Podobne dokumenty
J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Gdy kilka procesów czyta a przynajmniej jeden dokonuje zapisu wynik odczytu zależeć może od sposobu realizacji przeplotu.

Porządek dostępu do zasobu: procesory obszary pamięci cykle procesora pliki urządzenia we/wy

Systemy operacyjne. wykład 11- Zakleszczenia. dr Marcin Ziółkowski. Instytut Matematyki i Informatyki Akademia im. Jana Długosza w Częstochowie

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne

Synchronizacja procesów i wątków

Problemy czytelników i pisarzy oraz 5 ucztujących filozofów

Synchronizacja procesów

10. Synchronizacja użycia zasobów, Semafory

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

Programowanie współbieżne Wykład 5. Rafał Skinderowicz

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

SOP2 - semafory. grudzień

Problem zakleszczenia

Problemy współbieżności

10. Synchronizacja użycia zasobów, Semafory

Programowanie Równoległe i Rozproszone

Klasyczne problemy współbieżności. Problem producenta i konsumenta Problem czytelników i pisarzy Problem pięciu filozofów

Zakleszczenie. Problem i przeciwdziałanie. Systemy operacyjne Wykład 8 1

WYKŁAD 4 SEMAPHORES (CIĄG DALSZY) Przykład 6 Problem czytelników i pisarzy. Wykład 4 strona 1/24

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Systemy operacyjne III

Wzajemne wykluczanie i zakleszczenie

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Problem zakleszczenia. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Monitory. Jarosław Kuchta

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

POTRZEBY A B C D E P P P P P

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Sortowanie topologiczne skierowanych grafów acyklicznych

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix)

Algorytmy zarządzania współbieżnym wykonywaniem transakcji część I

9. Problem wzajemnego wykluczania i sekcji krytycznej

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

Przeciwdziałanie zakleszczeniu. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Programowanie wspóªbie»ne

Semafory. // G - globalna dla wszystkich. // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end loop sekcja_krytyczna(i); G := 0;

Mechanizmy pracy równoległej. Jarosław Kuchta

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Współbieżność w środowisku Java

UNIKANIE IMPASÓW W SYSTEMACH PROCESÓW WSPÓŁBIEŻNYCH

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Wzmianka o zakleszczeniu (ang. deadlock, inne tłumaczenia: blokada, impas, zastój) pojawiła się przy okazji synchronizacji procesów.

Programowanie wielowątkowe. Tomasz Borzyszkowski

Detekcja zakleszczenia (1)

Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego Łódź. Java podstawy języka, wykład 4 1

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Elekcja, wzajemne wykluczanie i zakleszczenie

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Wprowadzenie do programowania współbieżnego

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Temat zajęć: Tworzenie i obsługa wątków.

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Materiały pomocnicze 1

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Programowanie współbieżne Wykład 7. Iwona Kochaoska

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

synchronizacji procesów

Systemy operacyjne. Zajęcia 11. Monitory

synchronizacji procesów

10. Synchronizacja użycia zasobów, Semafory Problem producenta i konsumenta

Programowanie współbieżne Wykład 4. Rafał Skinderowicz

4. Procesy pojęcia podstawowe

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Programowanie Proceduralne

Wskaźniki w C. Anna Gogolińska

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Program jest więc strukturą statyczną zapisaną na jakimś nośniku. Natomiast proces jest wykonującym się programem.

Przykładowe rozwiązania

Problemy czytelników i pisarzy oraz 5 ucztujących filozofów

Nazwa Wydziału Nazwa jednostki prowadzącej moduł Nazwa modułu kształcenia Kod modułu Język kształcenia Efekty kształcenia dla modułu kształcenia

Część 4 życie programu

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

Wstęp do Programowania, laboratorium 02

Programowanie współbieżne Wykład 9 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

4. Procesy pojęcia podstawowe

Semafory. - aktywne oczekiwanie =GRGDWNRZ\PZVSDUFLHPVSU]WRZ\P 6SHFMDOQDLQVWUXNFMDPDV]\QRZDUHDOL]XMFDDWRPRZ\]DSLVL odczyt, np.

WOJSKOWA AKADEMIA TECHNICZNA WYDZIAŁ CYBERNETYKI

Stałe, tablice dynamiczne i wielowymiarowe

* Wymień typowe standardy sygnałów procesowych: - analogowy - dwustanowe

Systemy Operacyjne synchronizacja i komunikacja procesów

Systemy Czasu Rzeczywistego (SCR)

1. Działania na procesach

Zaawansowane programowanie w C++ (PCP)

7. Szeregowanie procesów w systemie QNX6 Neutrino

Plan wykładu. Obliczenia równoległe w zagadnieniach inżynierskich. Wykład 1 p. Wzajemne wykluczanie. Procesy współbieżne

Program współbieżny jest zbiorem sekwencyjnych PROGRAMOWANIE C++

. Podstawy Programowania 2. Algorytmy z nawrotami. Arkadiusz Chrobot. 9 czerwca 2019

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

3. Instrukcje warunkowe

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Wstęp do wskaźników w języku ANSI C

1 Podstawowe definicje i pojęcia współbieżności

DYNAMICZNE PRZYDZIELANIE PAMIECI

Algorytmy i Struktury Danych.

Transkrypt:

J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 1.1 Prosty przykład zakleszczenia (ang. Mexican standoff) W systemach w których wykonywane jest wiele współbieżnych procesów które operują na wspólnych zasobach może dojść do niezamierzonego wstrzymania pracy pewnych procesów. Mówi się że procesy mogą ulec zakleszczeniu. Procesy i aby wykonać swoje zadania potrzebują zasobów i. Proces najpierw próbuje zająć zasób a następnie zasób. Proces najpierw próbuje zająć zasób a następnie zasób. Zasoby te zabezpieczone są semaforami S1 i S2. sem_type S1, S1; Proces1(void){ do {... sem_wait(s1); // Zamówienie zasobu sem_wait(s2); // Zamówienie zasobu uzycie(s1,s2); // Użycie zasobów i sem_post(s2); // Zwolnienie zasobu sem_post(s1); // Zwolnienie zasobu while(1); Proces2(void) { do {... sem_wait(s2); sem_wait(s1); uzycie(s1,s2); sem_post(s1); sem_post(s2); while(1); // Zamówienie zasobu // Zamówienie zasobu // Użycie zasobów i // Zwolnienie zasobu // Zwolnienie zasobu main(void) { // Inicjacja semaforów na 1 sem_init(s1,1) sem_init(s2,1) // Utworzenie wątków i

J. Ułasiewicz Programowanie aplikacji współbieżnych 2 Przykład 1-1 Zastój meksykański przykład systemu w którym może dojść do zakleszczenia Proces Proces WAIT(S1) Gotowy WAIT(S2) WAIT(S1) WAIT(S2) zablokowany zablokowany Rys. 1-1 Przykład zakleszczenia procesów i Rys. 1-2 Sieć Petriego ilustrująca zakleszczenie - zastój meksykański Model systemu System składa się z : 1. Skończonej liczby zasobów Z = {Z 1, Z 2,...Z n, każdy z zasobów może wystąpić w pewnej liczbie egzemplarzy 2. Pewnej liczby procesów P = {P 1, P 2,...,P m które do wykonania swych zadań potrzebują zasobów Z.

J. Ułasiewicz Programowanie aplikacji współbieżnych 3 P3 P4 Procesy Z3 Z4 Z5 Zasoby Rys. 1-3 Model zasobów i procesów Proces korzysta z zasobów w następujący sposób: 1. Zamawia dany zasób. Gdy zasób nie jest dostępny proces może być zmuszony do oczekiwania na zasób. 2. Używa danego zasobu. W tym czasie zasób nie jest dostępny dla innych procesów. 3. Zwalnia zasób. Zamówienie i zwolnienie zasobu odbywa się to poprzez wykonanie pewnej funkcji systemowej (np. semaforowej). Definicja zakleszczenia Zbiór procesów jest w stanie zakleszczenia jeżeli każdy proces z tego zbioru czeka na zdarzenie które może być spowodowane tylko przez inny proces z tego samego zbioru. Do analizy systemów mogących wejść w stan zakleszczenia stosuje się grafy przydziału zasobów. W grafie tym występują dwa rodzaje wierzchołków. 1. Pierwszy rodzaj odpowiada procesom P reprezentowanym jako kółka. 2. Drugi rodzaj wierzchołków odpowiada zasobom Z reprezentowanym jako kwadraty. Łuki grafu reprezentują zależności pomiędzy procesami i zasobami. 1. Łuk biegnący od procesu P do zasobu Z oznacza że proces P jest zablokowany w oczekiwaniu na zasób Z. 2. Łuk biegnący od zasobu Z do procesu P oznacza że zasób Z jest zajęty przez proces P.

J. Ułasiewicz Programowanie aplikacji współbieżnych 4 Proces Zasób P Z Proces P czeka na zasób Z Z P Zasób Z zajęty przez proces P Rys. 1-4 Węzły i łuki w grafie przydziału zasobów. Gdy proces oczekiwał na zasób i zasób ten został przydzielony to kierunek łuku (od procesu do zasobu) się zmienia na przeciwny (od zasobu do procesu).

J. Ułasiewicz Programowanie aplikacji współbieżnych 5 Analiza zastoju meksykańskiego przy wykorzystaniu grafu przydziału zasobów. Krok 1 Proces zajmuje zasób. Sterowanie przekazane zostaje do procesu. Krok 2 Proces zajmuje zasób. Krok 3 Proces żąda zasobu. Zasób jest zajęty więc proces blokuje się w oczekiwaniu na zasób. Krok 4 Proces żąda zasobu. Zasób jest zajęty więc proces blokuje się w oczekiwaniu na zasób. Procesy i wchodzą w stan zakleszczenia. Tab. 1 Kroki działania procesów i prowadzące do zakleszczenia. Krok 1 Krok 2 Krok 3 Krok 4 Rys. 1-5 Ilustracja etapów zakleszczenia przy pomocy grafu przydziału zasobów

J. Ułasiewicz Programowanie aplikacji współbieżnych 6 Problem pięciu ucztujących filozofów Przy okrągłym stole siedzi pięciu filozofów. Zajmują się oni naprzemiennie tylko dwoma czynnościami - myśleniem i jedzeniem. Do jedzenia filozof potrzebuje dwu widelców. Gdy filozof otrzyma dwa widelce je, a następnie odkłada obydwa widelce. Problem polega na takim zorganizowaniu pracy filozofów aby spełnione były warunki: Filozof je wtedy gdy zdobędzie dwa widelce. Dwu filozofów nie może trzymać tego samego widelca. Każdy z filozofów musi się w końcu najeść (nie zostanie zagłodzony). Dodatkowym wymaganiem jest efektywność rozwiązania. Znaczy to że nie należy blokować aktywności filozofa gdy nie jest to konieczne dla spełnienia poprzednich warunków. F1 F2 F5 F4 F3 Rys. 1-6 Ilustracja problemu pięciu ucztujących filozofów A. Rozwiązanie z możliwością blokady: 1. Filozof czeka aż będzie wolny lewy widelec i podnosi go. 2. Filozof czeka aż będzie wolny prawy widelec i podnosi go. 3. Filozof je. 4. Filozof odkłada obydwa widelce. 5. Filozof myśli.

J. Ułasiewicz Programowanie aplikacji współbieżnych 7 Jeżeli w pewnej chwili każdy z filozofów podniesie lewy widelec i będzie czekał na prawy nigdy go nie otrzyma gdyż algorytm przewiduje zwolnienie widelców po zakończeniu jedzenia. Nastąpi zakleszczenie. Rys. 1-7 Sieć Petriego dla problemu pięciu filozofów filozof może podnieść prawy lub lewy widelec Wynik 1-1 Wynik analizy sieci Petriego filozof może podnieść prawy lub lewy widelec B. Rozwiązanie z możliwością zagłodzenia: 1. Filozof czeka aż będą wolne oba widelce i podnosi je (musi to być operacja niepodzielna). 2. Filozof je. 3. Filozof odkłada obydwa widelce. 4. Filozof myśli. Może się tak zdarzyć że filozof będzie miał bardzo żarłocznych sąsiadów z których w każdej chwili jeden z nich je. W takim przypadku filozof zostanie zagłodzony.

J. Ułasiewicz Programowanie aplikacji współbieżnych 8 Rys. 1-8 Sieć Petriego dla problemu pięciu filozofów filozof może podnieść tylko obydwa widelce naraz Wynik 1-2 Wynik analizy sieci Petriego filozof może podnieść tylko obydwa widelce naraz

J. Ułasiewicz Programowanie aplikacji współbieżnych 9 C. Rozwiązanie poprawne 1. Potrzebny jest arbiter zewnętrzny (nazywany lokajem) który dba o to aby jednej chwili najwyżej czterech filozofów konkurowało o widelce. 2. Dalej postępujemy jak w przypadku A. #include <stdio.h> #include <pthread.h> #include <semaphore.h> #define N 10 /* Liczba prob */ #define P 5 /* Liczba filozofow*/ typedef enum { False=0, True=1 bool ; sem_t lokaj; sem_t widelec[p]; bool Wybor ; void *filozof(void *ptr) { int i, k = *((int *) ptr); for(i = 1; i <= N; i++) { printf("%*cmysli %d %d\n", k*4, ' ', k, i); if(wybor) { sem_wait(&lokaj) ; sem_wait(&widelec[k]) ; sem_wait(&widelec[(k+1) % P]) ; printf("%*ceat %d %d\n", k*4, ' ', k, i); sem_post(&widelec[k]) ; sem_post(&widelec[(k+1) % P]) ; if(wybor) { sem_post(&lokaj) ; pthread_exit(0);

J. Ułasiewicz Programowanie aplikacji współbieżnych 10 int main(int argc, char * argv[]) { int i, targ[p]; pthread_t thread[p]; sem_init(&lokaj, 0, P-1); Wybor = 1; /* Lub 0 gdy nie ma lokaja */ printf("wybor=%s\n",(wybor?"true":"false")); for(i=0;i<p;i++) { sem_init(&widelec[i], 0, 1); for(i=0;i<p;i++) { targ[i] = i; pthread_create(&thread[i], NULL, &filozof, (void *) &targ[i]); for(i=0;i<p;i++) { pthread_join(thread[i], NULL); for(i=0;i<p;i++) { sem_destroy(&widelec[i]); sem_destroy(&lokaj); return 0; Przykład 1-2 Rozwiązanie problemu pięciu filozofów za pomocą semaforów

J. Ułasiewicz Programowanie aplikacji współbieżnych 11 D. Rozwiązanie z monitorem (Ben Ari) MONITOR zastawa { int widelec[5]; // Liczba widelców dostępna dla fil. i CONDITION warunek[5]; // Zmienna warunkowa void wez(int i) { if (widelec[i]!= 2) Wait(warunek[i]); widelec[(i+1) %5]--; widelec[(i-1) %5]--; void zwroc(int i) { widelec[(i+1) %5]++; widelec[(i-1) %5]++; if(widelec[(i+1)%5] == 2) Signal(warunek[(i+1%5]); if(widelec[(i-1)%5] == 2) Signal(warunek[(i-1%5]); // monitor void filozof(int i) { while(1) { // Myslenie wez(i); // Jedzenie zwroc(i); main { for(i=0;i<5;i++) widelec[i] = 2;... Przykład 1-3 Rozwiązanie problemu pięciu filozofów za pomocą monitora

J. Ułasiewicz Programowanie aplikacji współbieżnych 12 Warunki Cofmanna Warunki konieczne zakleszczenia podane zostały przez Coffmana. Do zakleszczenia może dochodzić gdy spełnione są jednocześnie cztery warunki: 1. Wzajemne wykluczanie (ang. Mutual exclusion condition ) Każdy z zasobów jest albo wolny albo zajęty przez dokładnie jeden proces. 2. Przetrzymywanie i oczekiwanie (ang. Wait and hold condition) Proces posiadający jakiś zasób może żądać innego zasobu. 3. Brak wywłaszczeń (ang. No prememption condition) Zasoby nie podlegają wywłaszczeniu, czyli zasób zajęty przez jakiś proces może być zwolniony tylko przez ten proces. 4. Czekanie cykliczne (ang. Circular wait condition) Musi istnieć zamknięty łańcuch procesów P = {P 1, P 2,...,P m w którym Pi czeka na zasób zajęty przez Pi+1 dla i=1,m-1 oraz Pm czeka na na zasób zajęty przez. Z4 P4 Z3 P3 Rys. 1-9 Graf przydziału zasobów dla przypadku czekania cyklicznego

J. Ułasiewicz Programowanie aplikacji współbieżnych 13 Metody postępowania z zakleszczeniami 1. Zignorowanie problemu - nie zajmować się problemami zakleszczeń na poziomie systemu operacyjnego 2. Zapobieganie zakleszczeniom (ang. deadlock prevention) - stosować taki protokół zamawiania zasobów aby któryś z warunków Coffmana nie był spełniony i tym samym nie doszło do zakleszczenia. 3. Unikanie zakleszczeń (ang. deadlock avoidance) - stosować taki protokół zamawiania zasobów aby liczba liczba wolnych zasobów zawsze umożliwiała zakończenie rozpoczętych zadań. 4. Dopuszczać do możliwości zakleszczenia ale wykrywać je a następnie usuwać. Zapobieganie zakleszceniom Zapobieganie zakleszceniom (ang. deadlock prevention) opiera się na niedopuszczeniu do spełnienia jednego z warunków Coffmana. Negacja warunku wzajemnego wykluczania Nie jest możliwe uniknięcie tego warunku gdyż pewne zasoby są z natury niepodzielne. Negacja warunku przetrzymywania i oczekiwania Podejście polega na unikaniu sytuacji gdy proces posiadający już zasoby zamawia inne zasoby. 1. Proces może zająć zasoby tylko wtedy gdy wszystkie z nich może otrzymać. 2. Proces może zamówić jakieś zasoby tylko wtedy gdy nie posiada zajętych innych zasobów. Strategia nazywa się wszystko albo nic (ang. One-shot allocation). Zastosowanie strategii wszystko albo nic do problemu 5-ciu filozofów: Filozof może otrzymać albo dwa widelce albo żadnego. Filozof 1 i 3 otrzymują widelce reszta czeka. Rozwiązanie nie powoduje zakleszczenia ale może prowadzić do zagłodzenia.

J. Ułasiewicz Programowanie aplikacji współbieżnych 14 Wady: 1. Małe wykorzystanie zasobów gdyż być może nie wszystkie naraz są potrzebne do wykonania zadania. 2. Możliwość zagłodzenia pewnych procesów poprzez ciągłe zajęcie często używanych zasobów. T0 Z3 Z4 T1 Zasoby zajęte T Rys. 1-10 Zasoby,, Z3, Z4 zajęte w czasie [T0, T1]. Zasoby,, Z3, Z4 są zajęte w całym czasie [T0, T1] co nie jest koniecznie potrzebne. Negacja warunku braku wywłaszczeń. Możliwe jest zastosowanie następujących algorytmów: 1) Gdy proces żąda zasobu który nie jest dostępny sprawdza się czy proces przytrzymujący te zasoby czeka na inne zasoby. Gdy tak jest odbiera się mu te zasoby. Implementacja takiej metody wymaga aby program był napisany w języku obsługującym wyjątki. 2) Gdy proces posiadający jakieś zasoby żąda innych zasobów które nie mogą być przydzielone traci przydzielone zasoby. Negacja warunku czekania cyklicznego Aby zapobiec czekaniu cyklicznemu należy ponumerować zasoby i żądać aby każdy proces zamawiał zasoby we wzrastającym porządku numeracji. Gdy tak będzie nie wystąpi warunek czekania cyklicznego.

J. Ułasiewicz Programowanie aplikacji współbieżnych 15 Negacja warunku czekania cyklicznego w problemie pięciu filozofów. Rozwiązanie symetryczne: Z0 P0 P4 Z4 P3 Z3 Rys. 1-11 Graf przydziału zasobów dla problemu pięciu filozofów rozwiązanie symetryczne Filozof Pierwsze żądanie Drugie żądanie 0 0 1 1 1 2 2 2 3 3 3 4 4 4 0 Przykład 1-4 Kolejność żądań zasobów w rozwiązaniu symetrycznym W powyższym przypadku istnieje zamknięty cykl procesów.

J. Ułasiewicz Programowanie aplikacji współbieżnych 16 Rozwiązanie asymetryczne: Z0 P0 P4 Z4 P3 Z3 Rys. 1-12 Graf przydziału zasobów dla problemu pięciu filozofów rozwiązanie asymetryczne Filozof Pierwsze żądanie Drugie żądanie 0 0 1 1 1 2 2 2 3 3 3 4 4 0 4 Przykład 1-5 Kolejność żądań zasobów w rozwiązaniu niesymetrycznym W kroku 1 zasób Z0 żądany przez P0 i P4. Obojętnie komu zostanie przydzielony w kroku 2 jeden z procesów otrzyma wszystkie konieczne zasoby.

J. Ułasiewicz Programowanie aplikacji współbieżnych 17 Wykrywanie zakleszczeń Założenie: zasoby reprezentowane jednokrotnie mogą być wykryte na podstawie analizy grafu oczekiwania (ang. wait-for graph). Graf oczekiwania można uzyskać z grafu przydziału zasobów przez usunięcie wierzchołków odpowiadających zasobom. Graf oczekiwania: 1. Wierzchołki procesy {,,...Pn 2. Luki - od Pi do Pj wtedy proces Pi czeka na zasoby zajęte przez proces Pj. Pi Pj Pi czeka na zasoby zajęte przez Pj Rys. 1-13 Łuk grafu oczekiwania = Z4 P4 Z3 P3 P3 P4 Rys. 1-14 Otrzymywanie grafu oczekiwania z grafu przydziału zasobów

J. Ułasiewicz Programowanie aplikacji współbieżnych 18 Twierdzenie Gdy w grafie oczekiwania wystąpi cykl to system jest w stanie zakleszczenia. Aby na bieżąco wykrywać zakleszczenia system musi: 1. Utrzymywać aktualny graf oczekiwania 2. Dla grafu oczekiwania wykonywać algorytm wykrywania cyklu Gdy n liczba wierzchołków to złożoność algorytmu n 2. Likwidowanie zakleszczenia Gdy zakleszczenie wystąpi i zostanie wykryte należy je zlikwidować. Możliwe podejścia: Zakończenie procesów Wszystkich Niektórych aby zakleszczenie ustąpiło Występuje problem które procesy zakończyć. Należy minimalizować koszty zakończenia przedwczesnego procesów. Decyzja zależy od: bezpieczeństwo priorytet procesu czas wykonywania procesu łatwość wywłaszczenie z zasobu Wywłaszczenia z zasobów Przy wywłaszczaniu zasobów należy rozważyć następujące kwestie Który z zasobów ma być wywłaszczony Jak przeprowadzić wycofanie Jak zapewnić aby nie doszło do zagłodzenia procesu