System operacyjny - wielowątkowość

Co to jest wątek?

Wątek to przepływ wykonywania przez kod procesu, z własnym licznikiem programu, który śledzi, która instrukcja ma zostać wykonana w następnej kolejności, rejestrami systemowymi, które przechowują bieżące zmienne robocze, oraz stosem, który zawiera historię wykonania.

Wątek udostępnia swoim równorzędnym wątkom kilka informacji, takich jak segment kodu, segment danych i otwarte pliki. Gdy jeden wątek zmienia element pamięci segmentu kodu, wszystkie inne wątki to widzą.

Wątek jest również nazywany lightweight process. Wątki zapewniają sposób na poprawę wydajności aplikacji dzięki równoległości. Wątki reprezentują podejście programowe do poprawy wydajności systemu operacyjnego poprzez zmniejszenie narzutu wątku, co jest równoważne klasycznemu procesowi.

Każdy wątek należy do dokładnie jednego procesu i żaden wątek nie może istnieć poza procesem. Każdy wątek reprezentuje oddzielny przepływ kontroli. Wątki są z powodzeniem wykorzystywane we wdrażaniu serwerów sieciowych i serwera WWW. Zapewniają również odpowiednią podstawę do równoległego wykonywania aplikacji na wieloprocesorach z pamięcią współdzieloną. Poniższy rysunek przedstawia działanie procesu jednowątkowego i wielowątkowego.

Różnica między procesem a wątkiem

SN Proces Wątek
1 Proces jest ciężki lub wymaga dużej ilości zasobów. Wątek jest lekki i zajmuje mniej zasobów niż proces.
2 Przełączanie procesów wymaga interakcji z systemem operacyjnym. Przełączanie wątków nie wymaga interakcji z systemem operacyjnym.
3 W wielu środowiskach przetwarzania każdy proces wykonuje ten sam kod, ale ma własną pamięć i zasoby plików. Wszystkie wątki mogą współdzielić ten sam zestaw otwartych plików, procesów potomnych.
4 Jeśli jeden proces jest zablokowany, żaden inny proces nie może zostać wykonany, dopóki pierwszy proces nie zostanie odblokowany. Podczas gdy jeden wątek jest zablokowany i czeka, można uruchomić drugi wątek w tym samym zadaniu.
5 Wiele procesów bez użycia wątków zużywa więcej zasobów. Wiele procesów wielowątkowych zużywa mniej zasobów.
6 W wielu procesach każdy proces działa niezależnie od innych. Jeden wątek może czytać, zapisywać lub zmieniać dane innego wątku.

Zalety Thread

  • Wątki minimalizują czas przełączania kontekstu.
  • Użycie wątków zapewnia współbieżność w procesie.
  • Skuteczna komunikacja.
  • Tworzenie wątków i przełączanie kontekstu jest bardziej ekonomiczne.
  • Wątki pozwalają na wykorzystanie architektur wieloprocesorowych na większą skalę i wydajność.

Rodzaje wątków

Wątki są realizowane na dwa sposoby -

  • User Level Threads - Wątki zarządzane przez użytkowników.

  • Kernel Level Threads - Wątki zarządzane przez system operacyjny działające na jądro, rdzeń systemu operacyjnego.

Wątki na poziomie użytkownika

W tym przypadku jądro zarządzania wątkami nie jest świadome istnienia wątków. Biblioteka wątków zawiera kod do tworzenia i niszczenia wątków, do przekazywania wiadomości i danych między wątkami, do planowania wykonywania wątków oraz do zapisywania i przywracania kontekstów wątków. Aplikacja rozpoczyna się od pojedynczego wątku.

Zalety

  • Przełączanie wątków nie wymaga uprawnień trybu jądra.
  • Wątek na poziomie użytkownika może działać w dowolnym systemie operacyjnym.
  • Planowanie może być specyficzne dla aplikacji w wątku na poziomie użytkownika.
  • Wątki na poziomie użytkownika są szybkie w tworzeniu i zarządzaniu.

Niedogodności

  • W typowym systemie operacyjnym większość wywołań systemowych jest blokowana.
  • Aplikacja wielowątkowa nie może korzystać z wieloprocesowości.

Wątki na poziomie jądra

W tym przypadku zarządzanie wątkami jest wykonywane przez jądro. W obszarze aplikacji nie ma kodu zarządzania wątkami. Wątki jądra są obsługiwane bezpośrednio przez system operacyjny. Każda aplikacja może zostać zaprogramowana jako wielowątkowa. Wszystkie wątki w aplikacji są obsługiwane w ramach jednego procesu.

Jądro przechowuje informacje kontekstowe dla całego procesu i dla poszczególnych wątków w procesie. Planowanie przez jądro odbywa się na zasadzie wątku. Kernel wykonuje tworzenie wątków, planowanie i zarządzanie w przestrzeni jądra. Wątki jądra są generalnie wolniejsze w tworzeniu i zarządzaniu niż wątki użytkownika.

Zalety

  • Kernel może jednocześnie zaplanować wiele wątków z tego samego procesu w wielu procesach.
  • Jeśli jeden wątek procesu jest zablokowany, jądro może zaplanować inny wątek tego samego procesu.
  • Same procedury jądra mogą być wielowątkowe.

Niedogodności

  • Wątki jądra są generalnie wolniejsze w tworzeniu i zarządzaniu niż wątki użytkownika.
  • Przeniesienie kontroli z jednego wątku do drugiego w ramach tego samego procesu wymaga przełączenia trybu na jądro.

Modele wielowątkowe

Niektóre systemy operacyjne zapewniają połączenie funkcji wątku na poziomie użytkownika i wątku na poziomie jądra. Solaris jest dobrym przykładem tego połączonego podejścia. W połączonym systemie wiele wątków w tej samej aplikacji może działać równolegle na wielu procesorach, a blokujące wywołanie systemowe nie musi blokować całego procesu. Modele wielowątkowe dzielą się na trzy typy

  • Relacja wiele do wielu.
  • Relacja wiele do jednego.
  • Relacja jeden do jednego.

Wiele do wielu modeli

Model wiele-do-wielu multipleksuje dowolną liczbę wątków użytkownika na równą lub mniejszą liczbę wątków jądra.

Poniższy diagram przedstawia model wątków wiele-do-wielu, w którym 6 wątków na poziomie użytkownika multipleksuje z 6 wątkami na poziomie jądra. W tym modelu programiści mogą tworzyć dowolną liczbę wątków użytkownika, a odpowiadające im wątki jądra mogą działać równolegle na maszynie wieloprocesorowej. Ten model zapewnia najlepszą dokładność współbieżności, a gdy wątek wykonuje blokujące wywołanie systemowe, jądro może zaplanować wykonanie innego wątku.

Model wiele do jednego

Model wiele do jednego mapuje wiele wątków na poziomie użytkownika do jednego wątku na poziomie jądra. Zarządzanie wątkami odbywa się w przestrzeni użytkownika przez bibliotekę wątków. Gdy wątek wykona blokujące wywołanie systemowe, cały proces zostanie zablokowany. Tylko jeden wątek może uzyskać dostęp do jądra na raz, więc wiele wątków nie może działać równolegle na wielu procesorach.

Jeśli biblioteki wątków na poziomie użytkownika są zaimplementowane w systemie operacyjnym w taki sposób, że system ich nie obsługuje, wówczas wątki jądra używają trybów relacji wiele do jednego.

Model jeden do jednego

Istnieje relacja jeden do jednego między wątkiem na poziomie użytkownika a wątkiem na poziomie jądra. Ten model zapewnia większą współbieżność niż model wiele do jednego. Pozwala również na uruchomienie innego wątku, gdy wątek wykonuje blokujące wywołanie systemowe. Obsługuje wiele wątków do równoległego wykonywania na mikroprocesorach.

Wadą tego modelu jest to, że tworzenie wątku użytkownika wymaga odpowiedniego wątku jądra. OS / 2, Windows NT i Windows 2000 używają modelu relacji jeden do jednego.

Różnica między wątkiem na poziomie użytkownika i wątku na poziomie jądra

SN Wątki na poziomie użytkownika Wątek na poziomie jądra
1 Tworzenie wątków na poziomie użytkownika i zarządzanie nimi są szybsze. Wątki na poziomie jądra są wolniejsze do tworzenia i zarządzania.
2 Implementacja odbywa się za pomocą biblioteki wątków na poziomie użytkownika. System operacyjny obsługuje tworzenie wątków jądra.
3 Wątek na poziomie użytkownika jest ogólny i może działać w dowolnym systemie operacyjnym. Wątek na poziomie jądra jest specyficzny dla systemu operacyjnego.
4 Aplikacje wielowątkowe nie mogą korzystać z wieloprocesowości. Same procedury jądra mogą być wielowątkowe.