Upload
autumn-summers
View
44
Download
1
Embed Size (px)
DESCRIPTION
Systemy operacyjne. Wykład nr 5: Wątki. Piotr Bilski. Pojęcie wątku (procesu lekkiego). Jest to fragment procesu wykonywany w jego przestrzeni adresowej Może istnieć wiele wątków wykonywanych równolegle w ramach jednego procesu Wątki muszą być związane z niezależnymi fragmentami kodu - PowerPoint PPT Presentation
Citation preview
Systemy operacyjne
Wykład nr 5:
Wątki
Piotr Bilski
Pojęcie wątku (procesu lekkiego)
• Jest to fragment procesu wykonywany w jego przestrzeni adresowej
• Może istnieć wiele wątków wykonywanych równolegle w ramach jednego procesu
• Wątki muszą być związane z niezależnymi fragmentami kodu
• Wieloprocesory i procesory wielordzeniowe zwiększają wydajność procesów wielowątkowych
• Udostępniane są przez biblioteki wątków (Pthreads, Wind32)
Jedno- i wielowątkowość
Kod Dane Pliki
Rejestry Stos
wątek
Kod Dane Pliki
Rejestry Rejestry Rejestry
Stos Stos Stos
wątek wątek wątek
Proces jednowątkowy Proces wielowątkowy
Zalety wątków
• Utrudnione blokowanie procesu
• Łatwe dzielenie zasobów
• Tworzenie i likwidacja wątków jest tania
• Wsparcie ze strony architektur wieloprocesorowych
Wątki użytkownika i jądra
Biblioteka wątków
wątek
jądro
wątek
poziom użytkownika
poziom jądra
Wątki użytkownika
jądro
wątek wątek
aplikacja aplikacja
poziom użytkownika
poziom jądra
Wątki jądra
Modele wielowątkowości
• Model „wiele na jeden” (green threads – Solaris 2)
• Model „jeden na jeden” (Windows NT, Windows 2000, OS/2)
• Model „wiele na wiele” (Solaris 2, HP-UX)
Model „wiele na jeden”
jądro
Wątek jądra
wątek użytkownika
poziom użytkownika
poziom jądra
wątek użytkownika wątek
użytkownika
Model „jeden na jeden”
jądro
Wątek jądra
wątek użytkownika
poziom użytkownika
poziom jądra
wątek użytkownika wątek
użytkownika
Wątek jądra Wątek jądra
Model „wiele na wiele”
jądro
Wątek jądra
wątek użytkownika
poziom użytkownika
poziom jądra
wątek użytkownika wątek
użytkownika
Wątek jądra Wątek jądra
Wątki a wywołania systemowe
• Tworzenie wątku – fork i exec
• Kasowanie wątku
• Obsługa sygnałów
• Pule wątków
• Dane charakterystyczne wątku
Kasowanie wątku
• Operacja likwidacji wątku przed czasem• Likwidowany wątek to „wątek docelowy”
(target thread)• Dwa rodzaje likwidacji wątku:
– asynchroniczna (wątek docelowy likwidowany natychmiast)
– odroczona (opóźniona, uporządkowana likwidacja) – tylko w punktach anulowania
• Problem zwalniania zasobów przez likwidowane wątki
Obsługa sygnałów i APC
• Sygnał (UNIX) lub APC (Windows) służy do poinformowaniu o wystąpieniu zdarzenia (np. dzielenie przez zero)
• Po wygenerowaniu dostarczany jest do procesu
• Musi być obsłużony!
• Istnieją domyślne procedury obsługi sygnałów oraz procedury użytkownika
Sygnały synchroniczne i asynchroniczne
• Sygnał synchroniczny
proces
jądro
działanie sygnał
proces1
jądro
działaniesygnał
proces2
• Sygnał asynchroniczny
Procedury obsługi sygnałów
• Procedura domyślna – wykonywana, gdy nic innego nie zostało zdefiniowane
• Procedura użytkownika – zdefiniowana, gdy proces ma wykonać niestandardową operację w odpowiedzi na sygnał
• Który wątek procesu ma odebrać sygnał:– Wątek powodujący wygenerowanie sygnału– Wszystkie wątki– Wybrane wątki– Wątek dedykowany do tego celu
Szczegóły obsługi sygnałów
• Sygnał synchroniczny musi być dostarczony do wątku, który go spowodował
• Pewne sygnały asynchroniczne muszą być odebrane przez wszystkie wątki (np. zakończenie procesu)
• Możliwe jest blokowanie odebrania sygnału przez wątek
• Sygnał jest obsługiwany tylko raz - na ogół przez pierwszy wątek
Pule wątków
• Z góry określona grupa wątków możliwych do wykorzystania przez system
• Wątki te są tworzone przy starcie systemu i mogą być wielokrotnie użyte przez różne procesy
• Problem ustalenia potrzebnej liczby wątków (kryteria – liczba procesorów, dostępna pamięć, spodziewana liczba wątków klienckich)
• Rozwiązanie: dynamiczne pule wątków
P-wątki
• Jest to standard POSIX definiujący API do tworzenia i obsługi wątków
• Sposób implementacji wątków nie jest narzucony
• Plik nagłówkowy – pthread.h
• Standard umożliwia tworzenie, usuwanie oraz operacje na atrybutach wątków
Wątki w systemie Solaris
• Udostępniane na poziomie jądra i użytkownika
• Implementują standard P-wątków
• Istnieją wątki (LWP) na poziomie pośrednim pomiędzy wątkami użytkownika i jądra. Każdy LWP ma wątek jądra
Realizacja wątków w systemie Solaris
CPU CPU CPU CPU CPU
W2 W3 W3W1 W1 W2
zadanie1 zadanie2 zadanie3
jądro
K1 K2 K3 K4 K5 K6
W1
wątek związany
Szczegóły implementacji wątków w systemie Solaris
• Wątki jądra są planowane przez planistę
• Blokada wątku jądra umożliwia procesorowi przejście do innego wątku
• Biblioteka wątków utrzymuje procesy lekkie dynamicznie
• Gdy LWP są bezczynne przez określony czas, usuwa się je
Informacje o wątkach w systemie Solaris
• Wątek użytkownika: ID, rejestry ( w tym PC, SP), priorytet
• Proces lekki: zbiór rejestrów, pamięć, statystyki – działa w przestrzeni jądra!
• Watek jądra: rejestry, wskaźnik do procesu lekkiego, priorytet, stos
Struktura procesu w systemie Solaris
wskaźnik Stan procesu
Numer procesu
Mapa pamięci
Priorytet
Wykaz otwartych plików
LWP1 LWP2
Wątki w systemie Windows
• Udostępniane przez interfejs Win32 API
• Implementacja odwzorowania „jeden-na-jeden” oraz „wiele na wiele” przy pomocy biblioteki włókien
• Składowe wątku: ID, zbiór rejestrów, stos użytkownika, stos jądrowy, obszar pamięci prywatnej (kontekst wątku)
Wątki w systemie Windows (c.d.)
• Struktury danych:– ETHREAD – blok wykonawczy wątku
(wskaźnik do procesu macierzystego, adres procedury, którą wątek rozpoczyna działanie)
– KTHREAD – blok jądrowy wątku (stos jądra i wskaźnik do bloku środowiska wątku)
– TEB – blok środowiska wątku (stos trybu użytkownika, lokalna pamięć wątku) – dostępny w trybie użytkownika
• ETHREAD i KTHREAD – jądro, TEB – przestrzeń użytkownika
Wątki Javy
• Ze względu na obecność JVM, wątki mają postać hybrydową
• Wspierane przez klasę Thread
• Dwie podstawowe metody: start oraz run
• Brak informacji o odwzorowaniu wątków Javy na wątki systemu operacyjnego (zależne od systemu)