25
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski

Systemy operacyjne

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

Page 1: Systemy operacyjne

Systemy operacyjne

Wykład nr 5:

Wątki

Piotr Bilski

Page 2: Systemy operacyjne

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)

Page 3: Systemy operacyjne

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

Page 4: Systemy operacyjne

Zalety wątków

• Utrudnione blokowanie procesu

• Łatwe dzielenie zasobów

• Tworzenie i likwidacja wątków jest tania

• Wsparcie ze strony architektur wieloprocesorowych

Page 5: Systemy operacyjne

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

Page 6: Systemy operacyjne

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)

Page 7: Systemy operacyjne

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

Page 8: Systemy operacyjne

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

Page 9: Systemy operacyjne

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

Page 10: Systemy operacyjne

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

Page 11: Systemy operacyjne

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

Page 12: Systemy operacyjne

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

Page 13: Systemy operacyjne

Sygnały synchroniczne i asynchroniczne

• Sygnał synchroniczny

proces

jądro

działanie sygnał

proces1

jądro

działaniesygnał

proces2

• Sygnał asynchroniczny

Page 14: Systemy operacyjne

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

Page 15: Systemy operacyjne

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

Page 16: Systemy operacyjne

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

Page 17: Systemy operacyjne

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

Page 18: Systemy operacyjne

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

Page 19: Systemy operacyjne

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

Page 20: Systemy operacyjne

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

Page 21: Systemy operacyjne

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

Page 22: Systemy operacyjne

Struktura procesu w systemie Solaris

wskaźnik Stan procesu

Numer procesu

Mapa pamięci

Priorytet

Wykaz otwartych plików

LWP1 LWP2

Page 23: Systemy operacyjne

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)

Page 24: Systemy operacyjne

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

Page 25: Systemy operacyjne

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)