Lekki proces
W komputerowych systemach operacyjnych proces lekki ( LWP ) jest sposobem na osiągnięcie wielozadaniowości . W tradycyjnym znaczeniu tego terminu, używanym w systemach Unix System V i Solaris , LWP działa w przestrzeni użytkownika na pojedynczym wątku jądra i współdzieli swoją przestrzeń adresową i zasoby systemowe z innymi LWP w ramach tego samego procesu . Wiele wątków na poziomie użytkownika , zarządzany przez bibliotekę wątków, może być umieszczony na jednym lub wielu LWP - umożliwiając wykonywanie wielozadaniowości na poziomie użytkownika, co może przynieść pewne korzyści w zakresie wydajności.
W niektórych systemach operacyjnych nie ma oddzielnej warstwy LWP między wątkami jądra i wątkami użytkownika. Oznacza to, że wątki użytkownika są implementowane bezpośrednio na wątkach jądra. W tych kontekstach termin „lekki proces” zazwyczaj odnosi się do wątków jądra, a termin „wątki” może odnosić się do wątków użytkownika. W systemie Linux wątki użytkownika są implementowane poprzez umożliwienie niektórym procesom współdzielenia zasobów, co czasami prowadzi do tego, że procesy te nazywane są „lekkimi procesami”. Podobnie w SunOS w wersji 4 i nowszych (przed Solaris ) „lekki proces” odnosił się do wątków użytkownika.
Wątki jądra
Wątki jądra są obsługiwane w całości przez jądro . Nie muszą być powiązane z procesem; jądro może je tworzyć zawsze, gdy musi wykonać określone zadanie. Wątki jądra nie mogą być wykonywane w trybie użytkownika. LWP (w systemach, w których stanowią oddzielną warstwę) wiążą się z wątkami jądra i zapewniają kontekst na poziomie użytkownika. Obejmuje to łącze do współdzielonych zasobów procesu, do którego należy LWP. Gdy LWP jest zawieszony, musi przechowywać swoje rejestry na poziomie użytkownika, dopóki nie zostanie wznowiony, a bazowy wątek jądra musi również przechowywać własne rejestry na poziomie jądra.
Wydajność
Tworzenie LWP jest wolniejsze i droższe niż wątki użytkownika. Za każdym razem, gdy tworzony jest LWP, należy najpierw wykonać wywołanie systemowe, aby utworzyć odpowiedni wątek jądra, powodując przełączenie do trybu jądra. Te przełączniki trybów zwykle obejmują kopiowanie parametrów między jądrem a przestrzenią użytkownika, a jądro może wymagać dodatkowych kroków w celu weryfikacji parametrów w celu sprawdzenia nieprawidłowego zachowania. Przełączanie kontekstu między LWP oznacza, że LWP, który jest wywłaszczany, musi zapisać swoje rejestry, a następnie przejść do trybu jądra, aby wątek jądra zapisał swoje rejestry, a zaplanowany LWP musi oddzielnie przywrócić rejestry jądra i użytkownika Również.
Z tego powodu niektóre biblioteki wątków na poziomie użytkownika umożliwiają implementację wielu wątków użytkownika na LWP. Wątki użytkownika mogą być tworzone, niszczone, synchronizowane i przełączane całkowicie w przestrzeni użytkownika bez wywołań systemowych i przełączania w tryb jądra. Zapewnia to znaczną poprawę wydajności w zakresie czasu tworzenia wątków i przełączania kontekstu. Istnieją jednak trudności we wdrażaniu harmonogramu wątków na poziomie użytkownika, który dobrze współpracuje z jądrem.
Aktywacja harmonogramu
Podczas gdy biblioteka wątków użytkownika zaplanuje wątki użytkownika, jądro zaplanuje bazowe LWP. Bez koordynacji między jądrem a biblioteką wątków jądro może podejmować nieoptymalne decyzje dotyczące planowania. Ponadto możliwe jest wystąpienie przypadków zakleszczenia, gdy wątki użytkownika rozproszone w kilku LWP próbują uzyskać te same zasoby, które są używane przez inny wątek użytkownika, który nie jest aktualnie uruchomiony.
Jednym z rozwiązań tego problemu jest aktywacja harmonogramu. Jest to metoda współpracy jądra i biblioteki wątków. Jądro powiadamia program planujący biblioteki wątków o pewnych zdarzeniach (na przykład, kiedy wątek ma zostać zablokowany), a biblioteka wątków może podjąć decyzję, jakie działania należy podjąć. Wywołanie powiadomienia z jądra nazywa się „wywołaniem”.
Biblioteka na poziomie użytkownika nie ma kontroli nad podstawowym mechanizmem, otrzymuje tylko powiadomienia z jądra i planuje wątki użytkownika na dostępne LWP, a nie na procesory. Program planujący jądra decyduje następnie, jak zaplanować LWP dla procesorów. Oznacza to, że LWP mogą być postrzegane przez bibliotekę wątków jako „procesory wirtualne”.
Obsługa systemów operacyjnych
Solaris od wersji 2.2 zaimplementował oddzielną warstwę LWP. Przed wersją 9 Solaris pozwalał na mapowanie wiele do wielu między LWP a wątkami użytkownika. Zostało to jednak wycofane ze względu na złożoność, jaką wprowadziło i ulepszenia wydajności harmonogramu jądra.
UNIX System V i jego nowoczesne pochodne IRIX , SCO OpenServer , HP-UX i IBM AIX umożliwiają mapowanie wiele do wielu między wątkami użytkownika a LWP.
NetBSD 5.0 wprowadził nowy, skalowalny model wątków 1:1. Każdy wątek użytkownika (pthread) ma wątek jądra zwany procesem lekkim (LWP). Wewnątrz jądra zarówno procesy, jak i wątki są zaimplementowane jako LWP i są obsługiwane tak samo przez program planujący.
Implementacje
- Rozszerzenia równoległe (Microsoft)
- Przenośne wątki GNU
- Zielone wątki (Java)
- Lekkie wątki jądra
Zobacz też
- Światłowód (informatyka)
- Zadanie (przetwarzanie)
- Równoległość zadań
- Przyszłość i obietnice
- Wątki POSIX
klon
(wywołanie systemowe Linuksa)
Linki zewnętrzne
- „Lekka pula procesów” autorstwa Jima Mauro
- „Procesy Solarisa” Scotta Cromara
- Modele wątków (z HP-UX Process Management: White Paper)