Jarosław Kuchta Semafory.

Slides:



Advertisements
Podobne prezentacje
Systemy czasu rzeczywistego
Advertisements

PRAM.
STRUKTURY DANYCH.
Wstęp do strumieni danych
Algorytmy sortowania i przeszukiwania
Wprowadzenie do informatyki Wykład 6
Mechanizmy pracy równoległej
Jarosław Kuchta Monitory.
Klasyczne problemy współbieżności i ich rozwiązania
Wskaźniki repetytorium Wskaźniki int Y = 1, X = 2; X = 5; int *p = &X; Y X p 4 4 p = &Y; *p = 4; 5.
Dynamiczne struktury danych Listy, Kolejki, Stosy
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
Algorytmy – zapis struktur programowania
Programowanie I Rekurencja.
Static, const, volatile.
Języki programowania C++
Semafory Autorzy : Michał Winciorek Łukasz Jackowicz.
SYSTEMY OPERACYJNE SYNCHRONIZACJA PROCESÓW
Nguyen Hung Son Uniwersytet Warszawski
Podstawy języka Java Nguyen Hung Son Uniwersytet Warszawski.
pseudokody algorytmów
Systemy czasu rzeczywistego Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Systemy operacyjne Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Procesy współbieżne Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Programowanie imperatywne i język C
Procesy współbieżne Copyright, 2005 © Jerzy R. Nawrocki Wstęp do informatyki.
Programowanie imperatywne i język C Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
SEMAFORY Dominik Niewiadomy Łukasz Dąbrowski.
Wykład nr 7: Synchronizacja procesów
Analiza kosztu zamortyzowanego
Semantyki programów współbieżnych " Determinizm programów sekwencyjnych, " Nie-determinizm programów współbieżnych, " prawdziwa równoległość vs.przeploty.
6. SZEREGOWANIE PROCESÓW
Semafory według normy POSIX
4. TEORETYCZNE MODELE PROCESÓW WSPÓŁBIEŻNYCH Teoretyczne modele uwzględniają wybrane cechy rzeczywistych procesów, stanowiąc kompromis pomiędzy łatwością
RODZAJE KOMUNIKACJI MIĘDZY PROCESAMI
Semafory.
Podstawy programowania
Podstawy programowania
struct nazwa { lista składników }; Dostęp do składowych struktury Nazwa_Zmniennej_Strukturalnej. Nazwa_Składnika.
Instrukcje sterujące część 2
Informatyka I Wykład 10 WSKAŹNIKI I ADRESY Jerzy F. Kotowski.
Pierwsze programy.
PHP: warunki, pętle, switch, break, continue
Jerzy F. Kotowski1 Informatyka I Wykład 8 STRUKTURA PROGRAMU n Funkcje n Klasy zmiennych n Projekt.
Złożone typy danych Listy Tworzenie elastycznych baz danych
Programowanie strukturalne i obiektowe
C# Platforma .NET CZ.3 Kuba Ostrowski.
Instrukcja warunkowa i wyboru
zadania z synchronizacji
INSTRUKCJE Umożliwiają zapis algorytmu, służą do sterowania przebiegiem programu. warunkowe (podejmowanie decyzji) 1. if-else „jeżeli”, 2. switch-case.
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
PWSZ Gniezno // codefly 2009 Łukasz Tomczak
Składnia instrukcji warunkowej if…
Procesy współbieżne Copyright, 2005 © Jerzy R. Nawrocki Wstęp do informatyki.
Iteracje w C# Informatyka Cele lekcji: Wiadomości: Uczeń potrafi:
1 Zagadnienia na egzamin. 2 Język C podsumowanie Struktura programu w języku C Zmienne, Stałe Operacje arytmetyczne Operatory logiczne Priorytety operatorów.
Systemy Operacyjne Synchronizacja
Procesy współbieżne Copyright, 2006 © Jerzy R. Nawrocki Wstęp do informatyki Wykład.
Algorytmy i Struktury Danych Struktury Danych
Pętle Zajęcia 6.
Procesy współbieżne Copyright, 2007 © Jerzy R. Nawrocki Wstęp do informatyki Wykład.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Wstęp do programowania Wykład 7
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Programowanie I Rekurencja.
ALGORYTMY I STRUKTURY DANYCH
Dane, zmienne, instrukcje
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

Jarosław Kuchta Semafory

Operacje podniesienie semafora opuszczenie semafora Operacje są niepodzielne (atomowe), tzn. że żadna z tych operacji nie może zostać przerwana.

Rodzaje semaforów ogólny binarny ograniczony uogólniony

Semafor ogólny (definicja klasyczna Dijkstry) Zmienna całkowita S: podniesienie – V(S): S = S + 1; opuszczenie – P(S): while (S<=0); S = S – 1; Nie spełnia warunku niepodzielności

Semafor ogólny (definicja praktyczna BenAriego) Zmienna całkowita S: podniesienie – V(S): if (są procesy wstrzymane podczas opuszczania S) wznów jeden z nich; else S = S +1; opuszczenie – P(S): if (S>0) S = S – 1; wstrzymaj; Spełnia warunek niepodzielności

Konstrukcja semafora Opuszczenie Podniesienie Proces A Proces B P(S): V(S): S = 0 ktoś czeka S = S - 1 S = S + 1

Semafor binarny (definicja klasyczna) Zmienna logiczna S: podniesienie – VB(S): S = 1; opuszczenie – PB(S): while (S==1); S = 0;

Semafor binarny (definicja praktyczna) Zmienna logiczna S: podniesienie – VB(S): if (są procesy wstrzymane podczas opuszczania S) wznów jeden z nich; else S = 1; opuszczenie – PB(S): if (S==1) S = 0; wstrzymaj;

Semafor binarny a ogólny Semafor binarny NIE jest szczególnym przypadkiem semafora ogólnego. Semafor binarny nie pamięta liczby operacji podniesienia. Semafor binarny może zastąpić ogólny, gdy realizuje wzajemne wykluczanie. Podniesienie już podniesionego semafora binarnego jest błędem.

Semafor dwustronnie ograniczony Zmienna całkowita S z zakresu (0..N): podniesienie – V(S): if (S==N) wstrzymaj; else if (są procesy wstrzymane podczas opuszczania S) wznów jeden z nich; else S = S + 1; opuszczenie – P(S): if (S==0) S = S – 1;

Semafor uogólniony Operacje podniesienia i opuszczenia mają dodatkowy operand n podniesienie – V(S, n): if (są procesy wstrzymane podczas opuszczania S o m) { wznów jeden z nich; S = S – m + n; } else S = S + n; opuszczenie – P(S, n): if (S >= n) S = S – n; wstrzymaj;

Jednoczesne operacje semaforowe Koniunktywna PAND (S1, S2): if (S1 > 0 && S2 > 0) { S1 = S1 – 1; S2 = S2 – 1; } else wstrzymaj; Alternatywna POR (S1, S2): if (S1 > 0 || S2 > 0) { S1 = S1 – 1; S2 = S2 – 1; } else wstrzymaj;

Przykłady Producenci i konsumenci Czytelnicy i pisarze Pięciu filozofów

1 producent i 1 konsument Semaphore Wolne = N; Semaphore Pełne = 0; Dane[] bufor = new Dane[N]; void Producent () { Dane dane; int i = 0; while (true) Produkuj (out dane); P(Wolne); bufor [i] = dane; i = (i + 1) % N; V(Pełne); } void Konsument () { Dane dane; int j = 0; while (true) P(Pełne); dane = bufor [j]; j = (j + 1) % N; V(Wolne); Konsumuj (dane); }

Wielu producentów i konsumentów Semaphore Wolne = N; Semaphore Pełne = 0; Dane[] bufor = new Dane[N]; int j = 0; int k = 0 BinarySemaphore i_S = 1; BinarySemaphore j_S = 1; void Producent () { Dane dane; while (true) Produkuj (out dane); P(Wolne); PB(i_S); bufor [i] = dane; i = (i+1) % N; VB(i_S); V(Pełne); } void Konsument () { Dane dane; while (true) P(Pełne); PB(j_S); dane = bufor [j]; j = (j+1) % N; VB(j_S); V(Wolne); Konsumuj (dane); }

Czytelnicy i pisarze int M; // liczba czytelników int P; // liczba pisarzy Semaphore Wolne = N; // liczba miejsc w czytelni BinarySemaphore W = 1; // wzajemne wykluczanie się pisarzy void Czytelnik () { while (true) Własne_Sprawy(); P(Wolne); Czytanie(); V(Wolne); } void Pisarz () { while (true) Własne_Sprawy(); PB(W); // Pisarz stopniowo zajmuje miejsca // w czytelni for (int j=0; j<M; j++) P(Wolne); Pisanie(); VB(W); }

Pięciu filozofów (z możliwością zagłodzenia) BinarySemaphore[] Pałeczki = new BinarySemaphore[] {1, 1, 1, 1, 1}; void Filozof(int i) { while (true) Myślenie(); PB(Pałeczki, i); PB(Pałeczki, (i+1) % 5); Jedzenie(); VB(Pałeczki, i); VB(Pałeczki, (i+1) % 5); }

Pięciu filozofów (z lokajem) BinarySemaphore[] Pałeczki = new BinarySemaphore[] {1, 1, 1, 1, 1}; Semaphore Lokaj = 4; void Filozof(int i) { while (true) Myślenie(); P(Lokaj); PB(Pałeczki, i); PB(Pałeczki, (i+1) % 5); Jedzenie(); VB(Pałeczki, i); VB(Pałeczki, (i+1) % 5); V(Lokaj); }