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

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

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

synchronizacji procesów

synchronizacji procesów

Wprowadzenie do programowania współbieżnego

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

SOP2 - semafory. grudzień

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

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

Synchronizacja procesów

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

Systemowe mechanizmy synchronizacji procesów

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

Klasyczne problemy synchronizacji

Monitory. Jarosław Kuchta

Programowanie wspóªbie»ne

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

Monitory. Wady semafora

Systemy operacyjne. Zajęcia 11. Monitory

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

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

Programowanie Współbieżne. Monitory

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

Systemy operacyjne Wzajemne wykluczanie i synchronizacja

Przykład wystąpienia wyścigu. Systemy operacyjne / Wzajemne wykluczanie i synchronizacja str.4/33. Wyścigi w systemie operacyjnym.

Zagadnienia zaawansowane. Lech Kruś,

Programowanie wspóªbie»ne

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Komunikacja asynchroniczna w modelu rozproszonym

Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 2. Temat zajęć: pakiety, zadania, synchronizacja czasowa, mechanizm spotkań

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Synchronizacja procesów

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

dr inż. Grażyna KRUPIŃSKA D-10 pokój 227 WYKŁAD 12 WSTĘP DO INFORMATYKI

Synchronizacja procesów

Synchronizacja procesów i wątków

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

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

Modelowanie procesów współbieżnych

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

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

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

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

Systemy Operacyjne synchronizacja i komunikacja procesów

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

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

Semafor ustaw_semafor(key_t nazwa, int start); Semafor usun_semafor(semafor sem); void signal(semafor sem); void wait(semafor sem);

Detekcja zakleszczenia (1)

Informatyka 1. Przetwarzanie tekstów

Problem detekcji zakończenia

Problemy współbieżności

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

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

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Laboratorium 10 Temat: Zaawansowane jednostki testowe. Operacje na plikach. Funkcje.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

ezykach wysokiego poziomu (Dijkstra, 1965). semaphore semaphore S; Operacje na semaforze:

Stany procesu. nowy aktywny oczekujący gotowy zakończony. zakończ. nowy. przerwanie gotowy aktywny. we/wy czek. we/wy czekający

Systemy operacyjne III

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Wzajemne wykluczanie i zakleszczenie

Modelowanie złożonych układów cyfrowych (1)

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

Algorytmy i struktury danych

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

Hyper-resolution. Śmieciarki w Manncheim

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

Przykładowerozwiązania.

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

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



Wstęp do programowania

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Wstęp do programowania. Różne różności

Algorytmy i struktury danych

WOJSKOWA AKADEMIA TECHNICZNA im. Jarosława Dąbrowskiego LABORATORIUM UKŁADÓW PROGRAMOWALNYCH I SPECJALIZOWANYCH

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Podstawy symulacji komputerowej


FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Synchronizacja procesów

Zasady Programowania Strukturalnego

Wykład 2. Poprawność algorytmów

Język programowania PASCAL

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

PL/SQL. Zaawansowane tematy PL/SQL

Tworzenie i zarządzanie wątkami

Programowanie Równoległe i Rozproszone

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Informatyka I. Wyk lad I. Wprowadzenie. Robert Muszyński Instytut Cybernetyki Technicznej Politechnika Wroc lawska

AHDL - Język opisu projektu. Podstawowe struktury języka. Komentarz rozpoczyna znak i kończy znak %. SUBDESIGN

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

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych

Transkrypt:

Semafory 5R]ZL]DQLHSUREOHPXZ]DMHPQHJRZ\NOXF]DQLD %H]GRGDWNRZHJRZVSDUFLDVSU]WRZHJRLSURJUDPRZHJR =DNáDGDP\MHG\QLH*H]DSLVGRLRGF]\W]SDPLFLZVSyOQHMV RSHUDFMDPLDWRPRZ\PLF]\OLLVWQLHMHDUELWHUZVSyOQHMSDPLFL :UD]LHMHGQRF]HVQHJR]DSLVXLRGF]\WXUH]XOWDWHPEG]LH SU]HSOHFHQLHW\FKGZyFKLQVWUXNFMLZGRZROQHMNROHMQRFL Algorytm Dekkera üzlf]hqld Wada: ]ár*rqrü - aktywne oczekiwanie =GRGDWNRZ\PZVSDUFLHPVSU]WRZ\P 6SHFMDOQDLQVWUXNFMDPDV]\QRZDUHDOL]XMFDDWRPRZ\]DSLVL odczyt, np. var G: integer := 0; process P (i:integer); var Li: integer; sekcja_lokalna(i); Test_and_Set (Li) Li := G; G := 1; end // G - globalna dla wszystkich procesów // Li - lokalna dla procesu i // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end sekcja_krytyczna(i); G := 0; end Wsparcie programowe: semafory, monitory itp.

Definicja (klasyczna) semafora 6HPDIRUMHVW]PLHQQFDáNRZLWROLF]ERZSU]\MPXMFZDUWRFL QLHXMHPQHGODNWyUHMVRNUHORQHW\ONRQDVWSXMFHRSHUDFMH inicjacja, wait (lub P), signal (lub V),QLFMDFMDF]\OLQDGDQLHZDUWRFLSRF]WNRZHMMHVWZ\NRQ\ZDQH tylko raz dla danego semafora i poza procesami 2SHUDFMH3L9VQLHSRG]LHOQHLZ]DMHPQLHZ\NOXF]DMFHVL (dla danego semafora) P(S): gdy S > 0, to S := S -1, wpp proces jest zawieszany w oczekiwaniu na ten warunek V(S): S := S + 1 Oczekiwanie jest sprawiedliwe Definicja (praktyczna) semafora 36MHOL6!WR6 6ZSSZVWU]\PDMG]LDáDQLH SURFHVXZ\NRQXMFHJRWRSHUDFM 96MHOLVSURFHV\ZVWU]\PDQHZZ\QLNX36WRZ]QyZ jeden z nich, wpp S := S + 1 Semafor binarny Jest szczególnym przypadkiem semafora ogólnego - przyjmuje MHG\QLHZDUWRFLLOXEWUXHLIDOVH 3%L9%VUyZQLH*QLHSRG]LHOQHLZ]DMHPQLHZ\NOXF]DMFHVL W definicji semafora ogólnego S := S + 1 przechodzi na S := 1; S := S - 1 przechodzi na S := 0 (Uwaga: w niektórych implementacjach wykonanie VB(S) dla 6 NRF]\VLEáGHP 5R]ZL]DQLHSUREOHPXVHNFMLNU\W\F]QHMLQLFMDOQLH6 PB(S); sekcja_krytyczna(i); VB(S)

5y*QHXZDJL P - Passeren, Proberen; V - Vrijmaken, Verhohen (Dijkstra jest Holendrem) 1LHZROQRWHVWRZDüZDUWRFLVHPDIRUD39LLQLFMDFMDWR JEDYNE dopuszczalne operacje!) 2SHUDFMHVHPDIRURZHZ\NOXF]DMVLZ]DMHPQLHWDNMDN]DSLVL RGF]\W]WHMVDPHMNRPyUNLSDPLFL-HGQRF]HVQH*GDQLD Z\NRQDQLDRSHUDFMLQDW\PVDP\PVHPDIRU]HEGZ\NRQDQH VHNZHQF\MQLHZQLH]QDQHMNROHMQRFL:GHILQLFMLVHPDIRUDQLH PyZLVLNWyU\]]DZLHV]RQ\FKSURFHVyZ]RVWDQLHZ]QRZLRQ\ LPSOHPHQWDFMDPR*HDOHQLHPXVLZ]QDZLDüSURFHV\]JRGQLH] ]DVDGNROHMNLSURVWHM*\ZRWQRü VSUDZLHGOLZRü,PSOHPHQWDFMDVHPDIRUD]Z\NOHQDSR]LRPLHMGUDV\VWHPX operacyjnego, bez aktywnego oczekiwania Symulacja semaforów ogólnych binarnymi ZJNVL*NL6KDZD:17VWU Ä.D*G\VHPDIRURJyOQ\6PR*HE\ü]DVWSLRQ\SU]H]]PLHQQ FDáNRZLWN s i dwa semafory binarne mutex s i delay s 'ODND*GHM RSHUDFML36VWRVXMHVLZyZF]DV P(mutex s ); N s := N s - 1; if N s -1 then V(mutex s ); P(delay s ) end else V(mutex s ).D*GD]DRSHUDFMD96MHVW]DVWSRZDQDSU]H] P(mutex s ); N s := N s + 1; if N s 0 then V(delay s ); V(mutex s ) 3RF]WNRZRmutex s = 1, delay s = 0, a zmienna N s przyjmuje SRF]WNRZZDUWRü]PLHQQHMVHPDIRURZHM6 Czy ta symulacja jest zawsze poprawna?

=DNáDGDP\NODV\F]QGHILQLFMVHPDIRUD P1 P2 P3 P4 Poprawka Shawa P(m s ); 1 5 9 13 P(m s ); N s := N s - 1; 2 6 10 14 N s := N s - 1; if N s -1 then 3 7 11 15 if N s -1 then V(m s ); 12 16 V(m s ); P(d s ) P(d s ) end end; else V(m s ); 4 8 V(m s ); Sekcja krytyczna; P(m s ); 17 21 P(m s ); N s := N s + 1; 18 22 N s := N s + 1; if N s 0 then V(d s ); 19 23 if N s 0 then V(d s ) V(m s ) 20 else V(m s ) N s = 2 2:1 6:0 10:-1 14:-2 18:-1 22: 0 RSHUDFMDZDUWRü m s = 1 1:0 4:1 5:0 8:1 9:0 12:1 13:0 16:1 17:0 20:1 21:0 d s = 0 19:1 23:1!!! 3U]\NáDG3URGXFHQWLNRQVXPHQW]RJUDQLF]RQ\PEXIRUHP S: semaphore := 1; SHáQHSXVWHVHPDSKRUH 1^OLF]QLNLPLHMVFZEXIRU]H` process producent; produkuj; 3SXVWH^VSUDZG(F]\EXIRUPDPLHMVFD` P(S); wstaw; V(S); 9SHáQH^]ZLNV]HQLHOLF]QLNDSHáQ\FKPLHMVF` end

process konsument; 3SHáQH^VSUDZG(F]\EXIRUQLHMHVWSXVW\` P(S); pobierz; V(S); 9SXVWH^]ZLNV]HQLHOLF]QLNDSXVW\FKPLHMVF` konsumuj; end Inne rodzaje semaforów Semafor dwustronnie ograniczony (Lipton 74) P k (S): if S > 0 then S := S - 1 else czekaj V k (S): if S < k then S := S + 1 else czekaj Semafor OR (Lipton 74) P OR (S 1,..., S n ): if S 1 > 0... S n > 0 then S k :=S k - 1 else czekaj gdzie k = min{i: S i > 0} V OR (S k ): S k := S k + 1 Semafor AND (Patril 71) P AND (S 1,..., S n ): if S 1 > 0... S n > 0 then k S k := S k - 1 else czekaj V AND (S k ): S k := S k + 1 Semafor uogólniony (Lipton 74) P(S 1, t 1,..., S n, t n ): if S 1 t 1... S n t n then k S k := S k - t k else czekaj V (S 1, t 1,..., S n, t n ): k S k := S k + t k Semafor sparametryzowany (Presser 75) P(S 1, t 1, d 1,..., S n, t n, d n ): if S 1 t 1... S n t n then k S k := S k - d k else czekaj V (S 1, d 1,..., S n, d n ): k S k := S k + d k

Formalizm Habermanna 0R*OLZRüNRQW\QXDFMLSUDF\SU]H]GRZROQ\SURFHVSU]\ Z\NRQDQLXRSHUDFML3]DOH*\RGOLF]E\Z\NRQDQ\FKZ SU]HV]áRFLQDW\PVHPDIRU]HRSHUDFML3L9RUD]RGZDUWRFL SRF]WNRZHMVHPDIRUD Oznaczenia: &6ZDUWRüSRF]WNRZDVHPDIRUD6&6 0 Q96OLF]EDZ\NRQDRSHUDFML9QD6 Q3 6OLF]EDZ\ZRáDRSHUDFML3QD6F]\OLLOHUD]\SURFHV\ UR]SRF]á\RSHUDFM3 Q36OLF]EDSU]HMüSU]H]RSHUDFM3QD6F]\OLLOHUD]\ SURFHV\PRJá\NRQW\QXRZDüSUDFSRZ\NRQDQLX operacji P) Wówczas P(S): np (S) := np (S) + 1 if np (S) C(S) + nv(s) then np(s) := np(s) + 1 V(S): if np (S) > C(S) + nv(s) then np(s) := np(s) + 1 nv(s) := nv(s) + 1 Twierdzenie np(s) = min (np (S), C(S) + nv(s)) MHVWQLH]PLHQQLNLHPZ\NRQDRSHUDFML3L9GRZyG indukcyjny) Semafory Agerwali (T. Agerwala, Some extended semaphore primitives, Acta Informatica, 1977, 8, 3) Idea: wprowadzenie jednoczesnych operacji semaforowych, w NWyU\FKZ\NRQDQLHRSHUDFMLW\SX3MHVWX]DOH*QLRQHRGVWDQX podniesienia lub opuszczenia wskazanych semaforów

PE(S 1,..., S n ; S n+1,..., S n+m ) powoduje zawieszenie procesu do chwili, gdy dla wszystkich S k N QEG]LHVSHáQLRQH6 k > 0 oraz dla wszystkich S i L QQPEG]LHVSHáQLRQH6 i = 0; for i := 1 to n do S i := S i - 1 VE(S 1,..., S r ): for i := 1 to r do S i := S i + 1 S k (k = 1,...,n); S i (i=n+1,...,n+m); S t W UVVHPDIRUDPL 6HPDIRU\$JHUZDOLSR]ZDODMQDLQG\ZLGXDOQHWUDNWRZDQLH ZVSyáSUDFXMF\FK]HVRESURFHVyZDZLFQD]ZL]DQLH]QLPL SULRU\WHWyZSRG]LDáQDUR]áF]QHNODV\]HZ]JOGXQDSULRULWS 3ULRU\WHWRZ\GRVWSGR]DVREyZQDOH*\]V\QFKURQL]RZDü GRVWS1SURFHVyZGR]DVREX5'RVWSPDE\üUHDOL]RZDQ\ ZHGáXJSULRU\WHWyZSURFHVyZQL*V]DZDUWRüZ\*V]\ priorytet) var S: array[1..n] of semaphore := (0,...,0); T: semaphore := 1; R: resource; process P (prio: 1..N) var k: 0..N; k := prio - 1; praca bez zasobu; VE(S[prio]); if k = 0 then PE(T) else PE(T; S[1],..., S[k]); PE(S[prio]); VHNFMDNU\W\F]QD]X*\FLHP5 VE(T) end end; co P(1);... ; P(N) coend.

3UREOHPSLFLXILOR]RIyZUR]ZL]DQLH]VHPDIRUDPL 5R]ZL]DQLH w: array[0..4] of semaphore := (1,1,1,1,1) {widelce} process F (i:0..4) P\OL P(w[i]); P(w[(i+1) mod 5]); je; V(w[i]); V(w[(i+1) mod 5]); end end; 0R*OLZRü]DVWRMX 5R]ZL]DQLH w: array[0..4] of semaphore := (1,1,1,1,1) {widelce} j: semaphore := 4; {jadalnia} process F (i:0..4) P\OL P(j); P(w[i]); P(w[(i+1) mod 5]); je; V(w[i]); V(w[(i+1) mod 5]); V(j) end end; &]\NROHMQRüRSHUDFML3MHVWGRZROQD" &]\NROHMQRüRSHUDFML9MHVWGRZROQD" - Super rejon krytyczny

5R]ZL]DQLH LW\ILOR]RIP\OL V>L@ LW\ILOR]RIMHVWJáRGQ\ 2 i-ty filozof je s: array[0..4] of 0..2 := (0,0,0,0,0) {stan} m: semaphore := 1; {mutex} ps: array[0..4] of semaphore := (0,0,0,0,0) {prywatny sem} procedure test (k: 0..4); if s[k] = 1 and s[(k-1) mod 5] 2 and s[(k+1) mod 5] 2 then s[k] := 2; V(ps[k]) end end; {test} process F (i:0..4) P\OL P(m); s[i] := 1; test(i); V(m); P(ps[i]); je; P(m); s[i] := 0; test((i-1) mod 5]); test((i+1) mod 5]); V(m) end end; 0R*OLZRü]DJáRG]HQLD

Semafory w systemie Unix Operacje na pojedynczym semaforze 36QRSXV]F]HQLH6RZDUWRüQ 96QSRGQLHVLHQLH6RZDUWRüQ =6F]HNDMD*6 Q36QQLHEORNXMFHRSXV]F]HQLH6RZDUWRüQ Q96QQLHEORNXMFHSRGQLHVLHQLH6RZDUWRüQ Operacje jednoczesne >9636=6@F]HNDMD*6 3 oraz S3 = 0 i wtedy 6]ZLNV]RD6]PQLHMV]R >Q36=696@MHOL6 1 i S2 = 0, to zmniejsz S1 RL]ZLNV]6RZSSQLFQLHUyEQLHEORNXMFD 2SHUDFMHQLHEORNXMFHGDMZZ\QLNXZDUWRüORJLF]Qtrue, JG\RSHUDFMDVLSRZLRGáDLfalse wpp Funkcje na semaforach ZDUW6ZDUWRüVHPDIRUD6 F]HN36OLF]EDSURFHVyZF]HNDMF\FKQD36 F]HN=6OLF]EDSURFHVyZF]HNDMF\FKQD=6 8ZDJDZM]\NX&]DSLVXMHVLWRLQDF]HM