01.Podstawowe pojecia

Download Report

Transcript 01.Podstawowe pojecia

Jarosław Kuchta
Podstawowe pojęcia
programowania
współbieżnego
Współbieżność w życiu
codziennym

Jednocześnie:




chodzimy
oddychamy
prowadzimy rozmowę
jemy?
Korzystamy ze współdzielonego zasobu
- gardła
Współbieżność w systemach
operacyjnych

Jednoczesna:



edycja tekstu
sprawdzanie pisowni
zapisywanie dokumentu
Współbieżność a równoległość



Wykonanie współbieżne – w tym samym czasie z
punktu widzenia niezależnego obserwatora
Wykonanie równoległe – w tym samym czasie na
przynajmniej dwóch procesorach
Wniosek – wykonanie współbieżne wymaga mniej
procesorów niż wątków sterowania – w szczególności
możliwe jest na jednym procesorze.
Wykonanie współbieżne z
podziałem czasu

wątek 1
wątek 2




Kwanty czasu procesora
przydzielane są na przemian dla
wielu wątków
Przełączenie wątków wymaga
zapamiętywania i odtwarzania
stanów poszczególnych wątków
Kwanty czasu nie muszą być tej
samej długości
Wątki mogą być aktywowane z
różną częstością
Jeśli kwanty czasu są
odpowiednio krótkie, to wątki
wydają się być wykonane
równolegle, choć naprawdę są
tylko wykonane współbieżnie
Wątek a proces




Wątek – sekwencja operacji wykonywanych jedna po
drugiej.
Proces – wątek, który ma osobno przydzieloną pamięć.
Procesy w systemach operacyjnych = programy
Wątki – jeden proces może mieć wiele wątków, które
współdzielą pamięć
Kluczowe problemy
współbieżności



Współdzielenie zasobów
Problem zakleszczenia (blokady)
Problem zagłodzenia
Współdzielone zasoby


Między programami – pamięć dyskowa (pliki),
drukarka, mysz, klawiatura, usługi systemowe
Między wątkami – pamięć operacyjna
Sekcja krytyczna

Fragment programu,
który tylko jeden z
wątków może
wykonywać w
jednym czasie
wątek 1
Działam na
własnych danych
wątek 2
Działam na
własnych danych
Czy mogę wejść?
Blokuję wejście
Czy mogę wejść?
Wykonuję sekcję
krytyczną
Czy mogę wejść?
Odblokowuję wejście
Czy mogę wejść?
Działam na
własnych danych
Blokuję wejście
Wykonuję sekcję
krytyczną
Odblokowuję wejście
Algorytm pojedynczego wątku
Działam na
własnych danych
Czy mogę wejść?
protokół wstępny
Czekam chwilę
T
Blokuję wejście
Wykonuję sekcję
krytyczną
protokół końcowy
F
Odblokowuję wejście
Działam na
własnych danych
protokół wstępny i końcowy
muszą być zgodne dla
wszystkich wątków
Wymagania czasowe



Żaden wątek nie może przebywać w sekcji krytycznej w
nieskończoność (również z powodu sytuacji wyjątkowej
czy błędu).
Zachowanie wątków poza sekcją krytyczną jest
dowolne.
Wątki mogą się wykonywać z różnymi szybkościami
Zakleszczenie (blokada)
wątek 1
wątek 2
Czekam na dane
z wątku 2
N
Czy dostałem dane?
Wysyłam dane do
wątku 2
Czekam na dane
z wątku 1
N
Czy dostałem dane?
Wysyłam dane do
wątku 1
wątek 1
Zagłodzenie
wątek 2
wątek 3
Działam na
własnych danych
Działam na
własnych danych
Blokuję wejście
Czy mogę wejść?
Czy mogę wejść?
Wykonuję sekcję
krytyczną
Czy mogę wejść?
Czy mogę wejść?
Odblokowuję wejście
Czy mogę wejść?
Czy mogę wejść?
Działam na
własnych danych
Blokuję wejście
Czy mogę wejść?
Wykonuję sekcję
krytyczną
Działam na
własnych danych
Czy mogę wejść?
Czy mogę wejść?
Blokuję wejście
Wykonuję sekcję
krytyczną
Czy mogę wejść?
Czy mogę wejść?
Odblokowuję wejście
Czy mogę wejść?
Czy mogę wejść?
Czy mogę wejść?
wątek 3 zostaje zagłodzony – nie uzyskuje dostępu do współdzielonego zasobu
Bezpieczeństwo i żywotność

Poprawność programu sekwencyjnego



Bezpieczeństwo programów współbieżnych – uogólnienie
własności częściowej poprawności


częściowa poprawność – jeśli program się zatrzyma, to zwróci poprawne
wyniki
własność stopu – program zawsze kiedyś się zatrzyma (nie zapętli się)
dwa programy nigdy nie znajdą się jednocześnie w swoich sekcjach
krytycznych
Żywotność programów współbieżnych – uogólnienie własności
stopu

jeśli program czeka na wejście do sekcji krytycznej, to w końcu do niej
wejdzie
Sprawiedliwość

Gdy programy są identyczne:



równy podział czasu
naprzemienne wejścia do sekcji krytycznej
Gdy programy są różne?


priorytety
zapobieganie zagłodzeniu