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



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

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

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

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

Monitory. Jarosław Kuchta

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

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

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

Programowanie Współbieżne. Monitory

synchronizacji procesów

synchronizacji procesów

SOP2 - semafory. grudzień

Monitory. Wady semafora

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

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

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

Wprowadzenie do programowania współbieżnego

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

Programowanie współbieżne Zadanie numer 3 Monitory

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

Systemy operacyjne. Zajęcia 11. Monitory

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

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

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

Programowanie wspóªbie»ne

Synchronizacja procesów

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

Synchronizacja procesów i wątków

Programowanie wspóªbie»ne

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

Synchronizacja procesów

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

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

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

4. Procesy pojęcia podstawowe

Zagadnienia zaawansowane. Lech Kruś,

Systemowe mechanizmy synchronizacji procesów

Systemy operacyjne III

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Programowanie współbieżne Zadanie nr 4 Spotkania

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

Systemy Operacyjne synchronizacja i komunikacja procesów

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

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

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Programowanie Równoległe i Rozproszone

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

4. Procesy pojęcia podstawowe

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Klasyczne problemy synchronizacji

3URJUDPRZDQLHZVSyáELH*QHZVWS

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

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

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

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Komunikacja asynchroniczna w modelu rozproszonym

Wstęp do programowania 2

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

Wielozadaniowość w systemie Microsoft Windows

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

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

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego

Podstawy Informatyki Systemy operacyjne

Programowanie w Turbo Pascal

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

Programowanie współbieżne i równoległe. dr inż. Marcin Wilczewski 2013

Prezentacja systemu RTLinux

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Język programowania PASCAL

Synchronizacja procesów

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

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

3.2.4 Pięciu filozofów Zadania Implementacja semafora ogólnego za pomocą binarnego Implementacja semafora dwustronnie

Modelowanie i Programowanie Obiektowe

Podstawy Programowania 2

Problemy współbieżności

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

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Synchronizacja procesów

Programowanie Współbieżne. Wstęp

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

Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu. Blok kontrolny procesu

Zaawansowany kurs języka Python

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

Instrukcje cykliczne (pętle) WHILE...END WHILE

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

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

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

4. Procesy pojęcia podstawowe

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

Pojedyncze wartości zadeklarowanego typu Ustawiane przed rozpoczęciem symulacji bez moŝliwości

Podstawy współbieżności

KOLEJKA (QUEUE) (lista fifo first in, first out)

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.

Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów współbieżnych.

Transkrypt:

Wady mechanizmów niskopoziomowych Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg. Dekkera zależny od liczby synchronizowanych procesów)

Mechanizmy wysokopoziomowe użyteczne w programowaniu współbieżnym Mechanizmy synchronizacji semafory rejony krytyczne monitory Mechanizmy synchronizacji i komunikacji spotkania symetryczne i asymetryczne przestrzenie krotek potoki, komunikaty i kanały

Pojęcie semafora Dijkstra (1965r.) Definicja abstrakcyjnego typu danych wraz z operacjami umożliwiającymi wstrzymywanie i wznawianie procesów: określenie stanu początkowego podniesienie semafora (signal(s), V(s)) opuszczenie semafora (wait(s), P(s)) Operacje niepodzielne w danej chwili może być wykonywana tylko jedna z nich.

Typy semaforów Propozycje Dijkstry: semafor ogólny semafor binarny Późniejsze rozszerzenia: semafor uogólniony semafor dwustronnie ograniczony

Definicja semafora Zmienna całkowita z wyróżnionymi operacjami: podniesienia semafora (signal(s)): s:=s+1 opuszczenia semafora (wait(s)): czekaj na (s>0); s:=s-1 Definicja nie gwarantuje, że wszystkie procesy zostaną kiedyś wznowione.

Praktyczna definicja operacji na semaforze Opuszczenie semafora (wait(s)) jeżeli s>0, to s:=s-1 jeśli s=0, to wstrzymaj proces wywołujący operację; Podniesienie semafora (signal(s)) jeżeli istnieją procesy wstrzymane przez opuszczony semafor s, to wznów jeden z nich jeśli nie, to s:=s+1;

Założenia dodatkowe wait i signal to jedyne dozwolone operacje na semaforze w szczególności zabronione jest testowanie wartości s i jej zmiana (z wyj. ustawienia początkowego) operacje te są pierwotne wykluczają się nawzajem; jeśli wywołane są równocześnie, zostaną wykonane jedna po drugiej (nie wiadomo w jakiej kolejności) algorytm wyboru procesów wznawianych nie powinien powodować zagłodzenia żadnego z oczekujących procesów (cecha uczciwości)

Praktyczna definicja semafora binarnego Opuszczenie semafora (wait(s)) jeżeli s=1, to s:=0 jeśli s=0, to wstrzymaj proces wywołujący operację; Podniesienie semafora (signal(s)) jeżeli istnieją procesy wstrzymane przez opuszczony semafor s, to wznów jeden z nich jeśli nie, to s:=1;

Wzajemne wykluczanie Program wykl_sem; var s (*binarny*): semaphore procedure p1; repeat wait(s); kryt1; signal(s); lok1; forever... p2 analogicznie (program główny) s:=1; co p1;p2; coend end.

Analiza modelu igloo Podobne do rozwiązania ze zmienną-kluczem Testowanie i zerowanie semafora w funkcji pierwotnej wait(s) brak problemów z blokowaniem się nawzajem.

Problem producentakonsumenta(1) Konieczność zapewnienia producentowi miejsca na zapamiętanie danych do chwili ich skonsumowania przez konsumenta. repeat produkuj rekord v; b[in]:=v; in:=in+1; forever repeat wait until in>out; w:=b[out]; out:=out+1; konsumuj rekord w; forever Wariant z buforem nieograniczonym - semafor s jako licznik zliczający różnicę między ilością porcji włożonych do bufora, a pobranych z niego (s=in-out).

Kod Program pr-kon-sem; var n: semaphore; procedure producent; repeat produkuj; włóż; * signal(n); forever procedure konsument; repeat wait(n); pobierz; * konsumuj; forever * włóż i pobierz pewne abstrakcyjne operacje na buforze (* program główny *) n:=0; co producent; konsument; coend end. Modelowanie procesów współbieżnych 12

Modyfikacja rozwiązania Założenie: instrukcje włóż i pobierz stanowią strefy krytyczne. Konieczność użycia dwóch semaforów: - ogólnego n (zlicza ilość elementów bufora) - binarnego s dla uzyskania wzajemnego wykluczania operacji na buforze. Ważna kolejność operacji wait i signal dla poszczególnych semaforów (wartości zmiennych można testować tylko w instrukcjach wait, co może powodować zawieszenie niektórych procesów)

Kod Program pr-kon-sem; var n: semaphore; s: (*binary) semaphore; procedure producent; repeat produkuj; wait(s); włóż; signal(s); signal(n); forever procedure konsument; repeat wait(n); wait(s); pobierz; signal(s); konsumuj; forever (* program główny *) n:=0; co producent; konsument; coend end. Modelowanie procesów współbieżnych 14

Problem producentakonsumenta(2) Wariant z buforem ograniczonym: - bufory cykliczne indeksy tablicy obliczane modulo jej długość - bufory zwielokrotnione dwa podobne bufory, z których jeden jest aktualnie zapewniany przez programistę, a drugi opróżniany przez konsumenta Rozwiązanie semaforowe: - semafor ogólny n zlicza włożone do bufora elementy - semafor ogólny e zlicza puste miejsca w buforze - semafor binarny s zapewnia wzajemne wykluczanie

Kod Program pr-kon-ogr; const rozmiarbufora=...; var n: semaphore; e: semaphore; s: (*binary) semaphore; procedure producent; repeat produkuj; wait(e); wait(s); włóż; (*kryt*) signal(s); signal(n); forever procedure konsument; repeat wait(n); wait(s); pobierz; signal(s); signal(e); konsumuj; forever (*kryt*) (* program główny *) n:=0; co producent; konsument; coend end. Modelowanie procesów współbieżnych 16

Rozszerzenia definicji(1) Semafor dwustronnie ograniczony - nie może przyjmować wartości ujemnych oraz nie może przekroczyć pewnej dodatniej wartości. Symetria operacji podnoszenia i opuszczania: jeżeli S=0 (S=N) to wstrzymaj działanie procesu wykonującego tę operację; jeśli nie, to jeśli są procesy wstrzymane w wyniku podnoszenia (opuszczania) semafora, to wznów jeden z nich, jeśli nie, to s:=s-1 (s:=s+1) Klasyczny semafor w dowolnej interpretacji też jest ograniczony od góry

Rozszerzenia definicji(2) Semafor uogólniony -wartość semafora może być zmieniana o dowolną wartość naturalną. Operacja opuszczania (wait(s,n)): jeżeli s>=n, to s:=s-n; w przeciwnym razie to wstrzymaj działanie procesu wykonującego tę operację; Operacja podnoszenia (wait(s,n)): jeśli są procesy wstrzymane w wyniku opuszczania semafora wait(s,m), to wznów jeden z nich i s:=sm+n; jeśli nie, to s:=s+n

Zasadnicze cechy semaforów Eleganckie narzędzie synchronizacji Słaba czytelność programów Podatność na błędy zmiana kolejności wykonywanych instrukcji może prowadzić do zawieszenia procesów, a także systemu operacyjnego.

Regiony krytyczne Przemodelowanie operacji semaforowych w kierunku strukturalizacji. Konieczność stworzenia instrukcji obejmującej sekcję krytyczną. Dla sekcji należy zapewnić wzajemne wykluczanie. Służy ona do wykonania operacji na pewnym zasobie (zmiennej); niedopuszczalne jest operowanie na zmiennej poza sekcją krytyczną.

Struktura regionu krytycznego Zmienna dzielona obiekt typu T, na którym są wykonywane operacje wewnątrz sekcji krytycznej var v: shared T; Instrukcja regionu krytycznego instrukcja strukturalna tworząca sekcję krytyczną dla instrukcji I 1,...,I N wiążąca ją ze zmienną v region v do I 1,...,I N end Założenia: wewnątrz związanych ze sobą regionów krytycznych może pracować tylko jeden proces skończony czas przebywania procesu w regionie wejście do regionu musi być udostępnione dowolnemu procesowi w skończonym czasie

Przykład synchronizacja dostępu do zasobów var R: shared resource; procedure pp; repeat lok1; region R do request R; hold(t); release R; lok2; forever procedure process(1..n) pp; (* program główny *) co process(1);... process(n); coend end.

Warunkowe rejony krytyczne Uzupełnienie r.k. o prostą komunikację między procesami Wśród instrukcji wewnątrz regionu dowolną ilość razy może wystąpić instrukcja synchronizacji await Jeśli warunek W i jest spełniony, proces przechodzi do wykonania następnej instrukcji; jeśli nie, zostaje zawieszony do czasu spełnienia warunku z jednoczesnym zwolnieniem dostępu do sekcji krytycznej var R: shared resource;... region R do I 1 ; I 2 ;...;await W 1... I i ; Ii+1 ;...;await W j... I N-1 ;I N uproszczenie implementacji mniejsze prawdopodobieństwo wystąpienia blokady i zagłodzenia

Monitory Rozwinięcie (uogólnienie) mechanizmu regionów krytycznych Zebrane w jednej konstrukcji programowej wyróżnione zmienne oraz procedury i funkcje na nich operujące; część procedur jest udostępniana na zewnątrz monitora jest to jedyny sposób dostępu do zmiennych monitora dla procesów Wykonanie procedury monitora jest sekcją krytyczną wykonującego go procesu Możliwość wstrzymywania i wznawiania procesów wewnątrz procedury monitorowej zmienne typu condition, operacje wait(c) wstrzymanie procesu wykonującego operację i wstawienie go na koniec kolejki związanej ze zmienną c (z jednoczesnym zwolnieniem monitora) signal(c) wznowienie pierwszego procesu wstrzymanego w kolejce związanej z c; jeżeli nie jest to ostatnia operacja procedury monitorowej, proces wywołujący czeka na zwolnienie monitora przez proces wznowiony (struktura stosu)

Przejście przez monitor Process A Monitor M M.P(y) 1 Procedure P(x:real);... wait(c);... signal(c);... 3 2 1 procesy oczekujące na wejście 2 oczekujące na c 3 wstrzymane przez signal(c) (stos)

Ograniczenia monitorów Jeśli każdy z wstrzymanych procesów czekałby na inną wartość zmiennej c, dla każdej z tych wartości powinno się zaimplementować oddzielną kolejkę. Rozwiązania: - dynamiczna struktura pamiętająca potrzeby każdego z procesów - dwie podkolejki w pierwszej tylko jeden proces, wykorzystanie zmiennej pomocniczej przechowującej warunek żądany - przerzucenie sprawdzania wartości monitora na procesy czekające ginie kolejność wstrzymywanych procesów

Problem producenta i konsumenta Program prodkons; const rozmiarbufora=...; monitor bufor; b:array[0..rozmiarbufora] of integer; in,out,n:integer; procedure włóż(var v:integer) if n=rozmiarbufora+1(*bufor pełny*) then czekaj aż nie będzie pełny ; b[in]:=v; in:=in+1; if in=rozmiarbufora+1 then in:=0; n:=n+1; zasygnalizuj, że bufor nie jest pusty

Kod monitora cd. procedure pobierz(var v:integer) if n=0 (*bufor pusty*) then czekaj, aż nie będzie pusty ; v:=b[out]; out:=out+1; if out=rozmiarbufora+1 then out:=0; n:=n-1; zasygnalizuj, że bufor nie jest pełny ; (*treść monitora*) in:=0; out:=0; n:=0;

Kod producenta i konsumenta procedure producent; var v:integer; repeat produkuj(v); włóż(v); forever procedure konsument; var v:integer; repeat pobierz(v); konsumuj(v); forever (*program główny*) co producent; konsument; coend end.