background image

Systemy operacyjne

wykład 4.

Wątki

Opracowano na podst.: Operating System Concepts – 8

th

Edition

Silberschatz, Galvin and Gagne ©2009

background image

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

background image

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

background image

Opracowano na podst.: Operating System Concepts – 8

th

Edition

Silberschatz, Galvin and Gagne ©2009

1.4

Procesy jedno- i wielowątkowe

background image

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ść

background image

Opracowano na podst.: Operating System Concepts – 8

th

Edition

Silberschatz, Galvin and Gagne ©2009

1.6

Architektura wielowątkowego serwera

background image

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

background image

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

background image

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)

background image

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

background image

Opracowano na podst.: Operating System Concepts – 8

th

Edition

Silberschatz, Galvin and Gagne ©2009

1.11

Many-to-One Model

background image

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

background image

Opracowano na podst.: Operating System Concepts – 8

th

Edition

Silberschatz, Galvin and Gagne ©2009

1.13

One-to-one Model

background image

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

background image

Opracowano na podst.: Operating System Concepts – 8

th

Edition

Silberschatz, Galvin and Gagne ©2009

1.15

Many-to-Many Model

background image

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

background image

Opracowano na podst.: Operating System Concepts – 8

th

Edition

Silberschatz, Galvin and Gagne ©2009

1.17

Two-level Model

background image

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

background image

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)

background image

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 

background image

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() 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)

background image

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?

background image

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 cancellationkończy 
natychmiast wątek docelowy

Kasowanie odroczone (Deferred cancellationpozwala wątkowi 
docelowemu okresowo sprawdzać czy powinien się zakończyć 

background image

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

background image

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

background image

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

background image

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

background image

Opracowano na podst.: Operating System Concepts – 8

th

Edition

Silberschatz, Galvin and Gagne ©2009

1.28

Windows XP Threads

background image

Opracowano na podst.: Operating System Concepts – 8

th

Edition

Silberschatz, Galvin and Gagne ©2009

1.29

Linux Threads

background image

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)

background image

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