Systemy operacyjne
wykład 4.
Wątki
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.2
Wykład 4: Wątki
•
Przegląd
•
Modele wielowątkowości
•
Biblioteki obsługi wątków
•
Zagadnienia dotyczące wątków
•
Przykłady wątków w S.O.
•
Wątki w Windows XP
•
Wątki w Linux
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.3
Cele
•
Wprowadzenie pojęcia wątku – podstawowej jednostki wykorzystania CPU
stanowiącej podstawę wielowątkowych systemów komputerowych
•
Przedyskutowanie APIs dla bibliotek: Pthreads, Win32 oraz Java
•
Przedyskutowanie zagadnień związanych z programowaniem
wielowątkowym
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.4
Procesy jedno- i wielowątkowe
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.5
Korzyści
•
Zdolność do reagowania
•
Współdzielenie zasobów
•
Ekonomika
•
Skalowalność
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.6
Architektura wielowątkowego serwera
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.7
Wątki użytkownika (User Threads)
•
Zarządzanie wątkami przez bibliotekę wątków na poziomie użytkownika
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.8
Wątki jądra (Kernel Threads)
•
Udostępniane przez jądro
•
Przykłady
– Windows XP/2000
– Solaris
– Linux
– Tru64 UNIX
– Mac OS X
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.9
Modele wielowątkowości (Multithreading
Models)
•
Wiele-na-Jeden (Many-to-One)
•
Jeden-na-Jeden (One-to-One)
•
Wiele-na-Wiele (Many-to-Many)
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.10
Wiele-do-Jednego (Many-to-One)
•
Wiele wątków poziomu użytkownika zmapowanych na jeden wątek jądra
•
Przykłady:
– Solaris Green Threads
– GNU Portable Threads
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.11
Many-to-One Model
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.12
Jeden-na-Jeden (One-to-One)
•
Każdy wątek poziomu użytkownika jest mapowany na wątek jądra
•
Przykłady
– Windows NT/XP/2000
– Linux
– Solaris 9 i późniejsze
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.13
One-to-one Model
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.14
Model Wiele-na-Wiele (Many-to-Many)
•
Pozwala odwzorowywać wiele wątków poziomu użytkownika na wiele
wątków jądra
•
Pozwala s.o. tworzyć wystarczającą liczbę wątków jądra
•
Solaris (wersje wcześniejsze niż 9.)
•
Windows NT/2000 z pakietem ThreadFiber
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.15
Many-to-Many Model
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.16
Model dwupoziomowy
•
Podobny do M:M, ale pozwala skojarzyć wybrany wątek użytkownika z
wątkiem jądra
•
Przykłady
– IRIX
– HP-UX
– Tru64 UNIX
– Solaris 8 i wcześniejsze
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.17
Two-level Model
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.18
Thread Libraries
•
Biblioteka wątków
zapewnia programiście API do tworzenia i zarządzania
wątkami
•
Dwa główne sposoby implementacji:
– Biblioteka całkowicie w przestrzeni użytkownika
– Biblioteka na poziomie jądra wspierana przez s.o.
•
Trzy główne biblioteki wątków:
–
POSIX
Pthreads
–
wątki Win32
–
wątki Java
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.19
P-wątki (Pthreads)
•
Mogą być dostarczane zarówno jako wątki użytkownika jak i wątki jądra
•
Standard POSIX (IEEE 1003.1c) API do tworzenia wątków i ich
synchronizowania
•
API określa działanie biblioteki wątków, implementacja jest kwestią
związaną z tworzeniem biblioteki
•
Powszechne w systemach UNIX-owych (Solaris, Linux, Mac OS X)
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.20
Wątki Javy
•
Wątki Javy są realizowane i zarządzane przez JVM
•
Zwykle implementowane z wykorzystaniem modelu wątków udostępnianego
przez s.o. w którym działa JVM
•
Wątki Javy mogą być tworzone poprzez:
– Rozszerzenie klasy Thread
– Implementację interfejsu Runnable
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.21
Zagadnienia związane z wątkami
•
Semantyka wywołań systemowych
fork() i exec()
•
Kasowanie (Thread cancellation) wątku docelowego (target thread)
– Asynchroniczne lub odroczone
•
Obsługa sygnałów (Signal handling)
•
Pule wątków (Thread pools)
•
Dane charakterystyczne wątku (Thread-specific data)
•
Aktywacje planisty (Scheduler activations)
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.22
Semantyka fork() i exec()
•
Czy
fork() powiela tylko wywołujący tę funkcję wątek czy wszystkie wątki?
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.23
Kasowanie wątku
•
Zakończenie wątku przed końcem jego pracy
•
Dwa główne podejścia:
–
Kasowanie asynchroniczne (Asynchronous cancellation) kończy
natychmiast wątek docelowy
–
Kasowanie odroczone (Deferred cancellation) pozwala wątkowi
docelowemu okresowo sprawdzać czy powinien się zakończyć
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.24
Obsługa sygnałów
•
Sygnały są używane w systemach uniksowych do informowania procesu o
wystąpieniu określonego zdarzenia
•
Procedura obsługi sygnału (
signal handler)
ijest wykorzystywana do
przetworzenia sygnału
1. Sygnał zostaje wygenerowany przez dane zdarzenie
2. Sygnał zostaje dostarczony do procesu
3. Sygnał zostaje obsłużony
•
Opcje:
– Dostarczyć sygnał do wątku, do którego się odnosi dany sygnał
– Dostarczyć sygnał do każdego wątku w procesie
– Dostarczyć sygnał do pewnych wątków w procesie
– Przypisać wybrany wątek do obsługi wszystkich sygnałów w procesie
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.25
Pule wątków
•
Utworzyć pewną liczbę wątków tworzących pulę, gdzie będą czekać na
prace do wykonania
•
Zalety:
– Zwykle nieco szybsza obsługa żądań w przypadku istniejącego wątku niż
dla wątku, który trzeba dopiero utworzyć
– Pozwala na ograniczenie liczby wątków aplikacji do wielkości puli
wątków
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.26
Dane charakterystyczne wątku (Thread
Specific Data)
•
Pozwalają każdemu wątkowi na posiadanie własnej kopii pewnych danych
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.27
Aktywacje planisty
•
Oba modele M:M i Two-level wymagają komunikacji pomiędzy biblioteka
poziomu użytkownika
•
Aktywacje planisty – schemat komunikacji
•
upcalls
– sposób informowania aplikacji przez jądro o zdarzeniach
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.28
Windows XP Threads
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.29
Linux Threads
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.30
Windows XP Threads
•
Implementuje mapowanie jeden-na-jeden, poziom jądra
•
Każdy wątek zawiera
– Identyfikator wątku
– Zbiór rejestrów
– Oddzielne: sotos użytkownika i jądra
– Obszar danych prywatnych
•
Zbiór rejestrów, stosy i obszar na dane prywatne są zwane kontekstem
wątku
•
Podstawowe struktury danych wątku zawierają:
– ETHREAD (executive thread block)
– KTHREAD (kernel thread block)
– TEB (thread environment block)
Opracowano na podst.: Operating System Concepts – 8
th
Edition
,
Silberschatz, Galvin and Gagne ©2009
1.31
Linux Threads
•
Linux odnosi się do nich raczej jako do zadań (tasks) niż wątków (threads)
•
Tworzenie wątków za pomocą f. systemowej
clone()
•
clone() pozwala zadaniu potomnemu współdzielić przestrzeń adresową z
zadaniem (procesem) rodzicielskim