Wspbieno w informatyce i nie tylko Marcin Engel
Współbieżność w informatyce i nie tylko Marcin Engel Instytut Informatyki Uniwersytet Warszawski informatyka + 1
Co to jest programowanie współbieżne? Zamiast wstępu obrazek z pewnej gry. . . informatyka + 2
Lodowisko - model komputera A n i a C z a r e k B e a t a informatyka + D a m i a n 3
Język programowania • Instrukcje są postaci: imię, ruch • Ruch może być jednym z następujących poleceń: – Krok naprzód – Obrót w lewo – Obrót w prawo • Przykład: Ania, krok naprzód informatyka + 4
Wykonanie instrukcji A n i a Ania, krok naprzód C z a r e k B e a t a informatyka + D a m i a n 5
Przykładowy program. . . Ania, krok naprzód Czarek, obrót w lewo Czarek, krok naprzód Damian, krok naprzód informatyka + 6
. . . i jego wykonanie A n i a C z a r e k B e a t a D a m i a n Ania, krok Czarek, Damian, obrót krok naprzód w lewo informatyka + 7
Niebezpieczne ruchy • Łyżwiarz nie powinien wpaść na bandę • Łyżwiarze nie powinni zderzyć się ze sobą informatyka + 8
Niebezpieczne ruchy !!! A n i a D a m i a n !!! C z a r e k Ania, krok naprzód Damian, krok naprzód informatyka + B e a t a 9
Instrukcja złożona Wprowadźmy do języka jeszcze jedną instrukcję: jeśli pole przed Tobą jest wolne, to krok naprzód, w przeciwnym razie obróć się w lewo informatyka + 10
Sekwencyjny program dla łyżwiarzy. . . • Powtarzaj – Ania, jeśli pole przed Tobą jest wolne, to krok naprzód, w przeciwnym razie obróć się w lewo – Beata, jeśli pole przed Tobą jest wolne, to krok naprzód, w przeciwnym razie obróć się w lewo – Czarek, jeśli pole przed Tobą jest wolne, to krok naprzód, w przeciwnym razie obróć się w lewo – Damian, jeśli pole przed Tobą jest wolne, to krok naprzód, w przeciwnym razie obróć się w lewo informatyka + 11
. . . i jego wykonanie A n i a C z a r e k B e a t a informatyka + D a m i a n 12
Wady programu sekwencyjnego • Programista musi myśleć jednocześnie o wszystkich poruszających się łyżwiarzach • Wszyscy łyżwiarze poruszają się w ten sam sposób i w takim samym tempie • Trudno jest zindywidualizować zachowanie łyżwiarzy • Efekt końcowy jest nierealistyczny informatyka + 13
Inne podejście • Trener przygotowuje program dla jednego łyżwiarza, na przykład powtarzaj: jeśli pole przed Tobą jest wolne, to krok naprzód, w przeciwnym razie obróć się w lewo • Program jest wykonywany przez konkretnego łyżwiarza, więc nie trzeba poprzedzać instrukcji imieniem • Wszyscy łyżwiarze otrzymują swój program i go wykonują informatyka + 14
. . . i jego wykonanie A n i a C z a r e k B e a t a informatyka + D a m i a n 15
Właśnie napisaliśmy program współbieżny! informatyka + 16
Porównanie programu sekwencyjnego z programem współbieżnym • W programie sekwencyjnym w danej chwili ruch wykonuje tylko jeden łyżwiarz • W programie współbieżnym jednocześnie porusza się wielu łyżwiarzy informatyka + 17
Wykonanie współbieżne to realizacja kilku czynności w taki sposób, że kolejna rozpoczyna się przed zakończeniem poprzedniej informatyka + 18
Zalety programu współbieżnego • Większa elastyczność: – łatwo zmienić zachowanie łyżwiarza wręczając mu inny program • Lepsza struktura programu informatyka + 19
Procesy i programy • Programy to obiekty statyczne (w naszym przykładzie kartki wręczane łyżwiarzom) • Procesy to obiekty dynamiczne (w naszym przykładzie: łyżwiarze) wykonujące programy • Różne procesy mogą wykonywać różne programy • Dwa różne procesy mogą też wykonywać ten sam program • Ten sam program może być wykonywany przez różne procesy informatyka + 20
Wykonanie programu współbieżnego • Równoległe: – asynchroniczne: każdy łyżwiarz jeździ własnym tempem (jak na poprzednich slajdach) – synchroniczne: wszyscy wykonują jeden ruch na sygnał • W przeplocie: – łyżwiarze wykonują ruchy naprzemiennie ciągle w tej samej kolejności lub losowo na polecenie kierownika lodowiska informatyka + 21
Wykonanie synchroniczne A n i a C z a r e k RUCH! B e a t a informatyka + D a m i a n 22
Wykonanie w przeplocie A n i a C z a r e k Damian! Czarek! Beata! Ania! B e a t a informatyka + D a m i a n 23
Wykonanie w przeplocie • Wykonanie w przeplocie przypomina: – wykonanie sekwencyjne, bo w dowolnej chwili wykonuje się tylko jeden proces – wykonanie równoległe, zwłaszcza jeśli będziemy szybko przeplatać ruchy poszczególnych procesów informatyka + 24
Inne przykłady systemów współbieżnych • Wykonanie równoległe: – osoby na tej sali – samochody przejeżdżające przez skrzyżowanie • Wykonanie w przeplocie: – uczeń uczący się różnych przedmiotów – kucharz przygotowujący obiad informatyka + 25
Dlaczego współbieżność ma obecnie duże znaczenie? • Rozwój sprzętu: – typowa konfiguracja 15 lat temu: procesor 16 MHz, pamięć 1 MB, dysk 60 MB – typowa konfiguracja dzisiaj: procesor 2, 4 GHz, pamięć 4 GB, dysk 300 GB • Upowszechnienie wielozadaniowych systemów operacyjnych na komputerach osobistych • Rozwój sieci i Internetu informatyka + 26
Jak komputery wykonują programy współbieżne? • Wykonanie równoległe jest możliwe na komputerze wyposażonym w: – wiele procesorów albo – procesor wielordzeniowy • Systemy operacyjne z podziałem czasu dają możliwość wykonywania procesów w przeplocie informatyka + 27
Budowa systemu z podziałem czasu • Kierownik lodowiska = moduł szeregujący systemu operacyjnego • Procesy uruchomione w systemie znajdują się w kolejce procesów gotowych • Pierwszy proces z tej kolejki otrzymuje procesor na określony kwant czasu • Po upływie kwantu czasu następuje przełączenie kontekstu: proces wykonywany powraca na koniec kolejki procesów gotowych, a procesor otrzymuje kolejny proces z kolejki informatyka + 28
Budowa systemu z podziałem czasu arkusz kalkulacyjny przeglądarka Kolejka procesów gotowych edytor tekstu proces wykonywany kalkulator informatyka + 29
Przełączenie kontekstu edytor tekstu przeglądarka koniec kwantu kalkulator Kolejka procesów gotowych przeglądarka Kolejka procesów gotowych arkusz kalkulacyjny edytor tekstu informatyka + 30
edytor tekstu procesor wirtualny arkusz kalkulacyjny procesor wirtualny przeglądarka procesor wirtualny kalkulator procesor wirtualny informatyka + procesor fizyczny Wirtualne procesory 31
Problemy z programami współbieżnymi • Właściwa synchronizacja procesów • Poprawna i efektywna komunikacja między procesami W dalszym ciągu naszkicujemy jedynie problemy związane z synchronizacją procesów informatyka + 32
Błędna synchronizacja łyżwiarzy pole przede mną jest wolne D a m i a n pole przede mną jest wolne !!! A n i a RUCH! informatyka + 33
Przygotowanie programu do uruchomienia • Program pisze się w języku wysokiego poziomu • Jest on następnie tłumaczony (kompilowany) na rozkazy maszynowe zrozumiałe dla komputera • Jedna instrukcja języka wysokiego poziomu może odpowiadać wielu rozkazom maszynowym informatyka + 34
Znów analogia do lodowiska • Krok naprzód łyżwiarza składa się z wielu elementarnych ruchów: – przeniesienie ciężaru ciała na jedną nogę – odbicie się – ślizg –… informatyka + 35
Niepodzielność instrukcji i rozkazów • Przełączenie kontekstu może nastąpić między dowolnymi rozkazami • Nie można więc zakładać, że instrukcje programu są niepodzielne • Wykonanie w przeplocie programu łyżwiarza może również prowadzić do błędu informatyka + 36
Błędna synchronizacja łyżwiarzy pole przede mną jest wolne D a m i a n pole przede mną jest wolne !!! A n i a Damian! Ania! informatyka + 37
Współbieżny dostęp do konta saldo = 5000 saldo : = saldo – 1000 saldo : = saldo + 1000 załaduj saldo do AX odejmij 1000 od AX prześlij AX do saldo załaduj saldo do BX dodaj 1000 do BX prześlij BX do saldo informatyka + 38
Możliwe wykonanie saldo = 5000 załaduj saldo do AX załaduj saldo do BX odejmij 1000 od AX prześlij AX do saldo dodaj 1000 do BX prześlij BX do saldo = 6000 informatyka + 39
Inny przeplot saldo = 5000 załaduj saldo do AX załaduj saldo do BX odejmij 1000 od AX prześlij AX do saldo dodaj 1000 do BX prześlij BX do saldo = 4000 informatyka + 40
I jeszcze jedna możliwość saldo = 5000 załaduj saldo do AX załaduj saldo do BX odejmij 1000 od AX prześlij AX do saldo dodaj 1000 do BX prześlij BX do saldo = 5000 informatyka + 41
Jeszcze jeden przykład x=0 powtórz 5 razy: x : = x + 1 powtórz 5 razy x : = x + 1 Czy na koniec zawsze x = 10? Nie! Czy zawsze x <= 10? Tak! Czy zawsze x >= 5? Nie! informatyka + 42
Klasyczne problemy współbieżności • • Wzajemne wykluczanie Pięciu filozofów Producenci i konsumenci Czytelnicy i pisarze Przedstawimy dzisiaj dwa pierwsze z nich informatyka + 43
Wzajemne wykluczanie powtarzaj: własne sprawy … sekcja krytyczna. . . Jak zapewnić, że sekcję krytyczną wykonuje w dowolnym momencie co najwyżej jeden proces? informatyka + 44
Dodatkowe założenia • Każdy proces znajdujący się w sekcji krytycznej opuści ją w skończonym czasie • Nie zakłada się nic o własnych sprawach • Procesy nie mogą być ze sobą ściśle związane (np. awaria jednego nie może powodować awarii drugiego) informatyka + 45
Próba rozwiązania • Stawiamy przed sekcją krytyczną sygnalizator świetlny (zmienna logiczna) • Początkowo wyświetla on światło zielone • Proces przed wejściem do sekcji sprawdza światło: – jeśli jest zielone – wchodzi do sekcji i zmienia światło na czerwone – jeśli jest czerwone – czeka • Po opuszczeniu sekcji krytycznej proces zmienia światło na zielone informatyka + 46
Działanie tego rozwiązania sek ja a c k se tyczn kry ne s a wł awy spr informatyka + 47
I znów błąd synchronizacyjny! Sprawdzenie światła i zmiana jego koloru nie muszą być niepodzielne! informatyka + 48
Może się więc zdarzyć tak: sek ja a c k se tyczn kry ne s a wł awy spr informatyka + 49
Własność bezpieczeństwa • Własność bezpieczeństwa programu współbieżnego to spełnienie przez niego wymagań synchronizacyjnych wynikających ze specyfikacji problemu • Program musi być bezpieczny dla wszystkich możliwych przeplotów • Bezpieczeństwo wzajemnego wykluczania: w sekcji krytycznej jest co najwyżej jeden proces informatyka + 50
Druga próba rozwiązania • Stawiamy przed sekcją krytyczną sygnalizator świetlny (zmienna logiczna) • Początkowo wyświetla on światło czerwone • Proces przed wejściem do sekcji sprawdza światło: – jeśli jest zielone – wchodzi do sekcji i zmienia światło na czerwone – jeśli jest czerwone – czeka • Po opuszczeniu sekcji krytycznej proces zmienia światło na zielone informatyka + 51
Działanie tego rozwiązania sek ja a c k se tyczn kry e asn y ł W aw spr informatyka + 52
Własność żywotności • Własność żywotności oznacza, że każdy proces, który dotarł do fragmentu programu objętego synchronizacją, w końcu ten fragment wykona • Żywotność wzajemnego wykluczania: każdy proces, który chce wejść do s. kryt. , w końcu do niej wejdzie • Program poprawny musi spełniać zarówno własność bezpieczeństwa jak i żywotności informatyka + 53
Przejawy braku żywotności • Zakleszczenie – w systemie nic się nie dzieje, a procesy oczekują na zdarzenie, które nigdy nie zajdzie • Zagłodzenie – lokalny brak żywotności; pechowy proces nie może wykonywać się dalej informatyka + 54
Zakleszczenie – przykład skaner ma chce proces 2 proces 1 ma chce drukarka informatyka + 55
Zakleszczenie na skrzyżowaniu równorzędnym informatyka + 56
Zagłodzenie na skrzyżowaniu informatyka + 57
Problem pięciu filozofów głodny myśli je informatyka + 58
Pięciu filozofów – próba pierwsza • Głodny filozof czeka, aż będzie wolny lewy widelec, po czym go podnosi • Następnie czeka, aż będzie wolny prawy widelec, po czym go podnosi i rozpoczyna jedzenie • Oddawanie widelców odbywa się w tej samej kolejności informatyka + 59
Podnoszenie widelców – próba pierwsza głodny myśli je dśnliy łojye gm informatyka + 60
Podnoszenie widelców – zakleszczenie gm łoydśnl iy głodny myśli iy łoydśnl gm gmło y d ś n liy ydśn gmło informatyka + 61
Pięciu filozofów – próba druga • Głodny filozof czeka, aż będą dostępne oba widelce • Następnie podnosi je jednocześnie, a po skończeniu jedzenia – jednocześnie je oddaje • Jeśli tylko jeden widelec jest wolny, to pozostaje on na stole informatyka + 62
Podnoszenie widelców – próba druga głodny myśli je dśnliy łojye gm informatyka + 63
Podnoszenie widelców – zagłodzenie myś li głodny myśli je iy łoydśnl gm y ś li m nyli odjyeś głm informatyka + 64
Pięciu filozofów – rozwiązanie poprawne Pierwsza próba + dodatkowy proces „lokaj”, który dopuszcza do stołu co najwyżej 4 filozofów jednocześnie. informatyka + 65
Podsumowanie • Programowanie współbieżne: – to ważna technika programowania zwłaszcza we współczesnej informatyce – umożliwia lepsze wykorzystanie mocy obliczeniowej współczesnych procesorów – prowadzi do tworzenia bardziej elastycznych programów o lepszej strukturze informatyka + 66
Podsumowanie • Programy współbieżne mogą być wykonywane: – synchronicznie – asynchronicznie – w przeplocie • Wielozadaniowe systemy operacyjne wspierają współbieżność • Systemy z podziałem czasu umożliwiają uruchamianie programów współbieżnych na jednym procesorze informatyka + 67
Podsumowanie • Problemy z programami współbieżnymi: – procesy wymagają synchronizacji – programy są trudne do analizy – ich wykonanie bywa nieintuicyjne – trudno wykazać ich poprawność informatyka + 68
Podsumowanie • Poprawność programu współbieżnego oznacza: – bezpieczeństwo – żywotność (brak zakleszczeń i zagłodzeń) • Własności te muszą być zachowane dla każdego przeplotu informatyka + 69
Podsumowanie • Dobre mechanizmy synchronizacyjne ułatwiają tworzenie poprawnych programów • Ale to już temat na inną opowieść. . . informatyka + 70
- Slides: 70