Jakie są relacje między procesami, wątkami jądra, lekkimi procesami i wątkami użytkownika w Uniksie? [Zamknięte]

12

Unix Internal firmy Vahalia ma liczby pokazujące relacje między procesami, wątkami jądra, lekkimi procesami i wątkami użytkownika. Ta książka poświęca najwięcej uwagi SVR4.2, a także szczegółowo omawia 4.4BSD, Solaris 2.x, Mach i Digital UNIX. Zauważ, że nie pytam o Linuksa.

  1. Czy dla każdego procesu zawsze leży jeden lub więcej lekkich procesów? Rycina 3.4 wydaje się mówić „tak”.

    Dlaczego rysunek 3.5 (a) pokazuje procesy bezpośrednio na procesorach, bez lekkich procesów pomiędzy nimi?

  2. Czy dla każdego lekkiego procesu zawsze jest dokładnie jeden wątek jądra leżący u podstaw lekkiego procesu? Rycina 3.4 wydaje się potwierdzać.

    Dlaczego rysunek 3.5 (b) pokazuje lekkie procesy bezpośrednio nad procesami, bez żadnego wątku jądra pomiędzy nimi?

  3. Czy wątki jądra są jedynymi jednostkami, które można zaplanować?

  4. Czy lekkie procesy są planowane tylko pośrednio poprzez planowanie podstawowych wątków jądra?

  5. Czy procesy są planowane tylko pośrednio poprzez planowanie podstawowych lekkich procesów?

Rycina 3-4.  Lekkie procesy

Rycina 3-5.  Implementacje wątków użytkownika


Aktualizacja:

Zadałem podobne pytanie dla systemu Linux. Czy lekki proces jest dołączony do wątku jądra w systemie Linux? Przypuszczam, że może tak być, ponieważ książka System operacyjny pojęć wprowadza pojęcia domyślnie przy użyciu Uniksa, a Unix i Linux mogą się różnić, więc przeczytałem o jądrze Unixa.

Doceniam obecną odpowiedź, ale mam nadzieję, że ponownie otworzę wiadomość, aby móc zaakceptować inne odpowiedzi.

Tim
źródło
Dlaczego takie pytanie byłoby oznaczone jako zbyt tablica. To właściwie dobre pytanie o koncepcję Linuksa. Dokumenty zwykle nie są wystarczająco szczegółowe, wyjaśnienie będzie świetną odpowiedzią
炸鱼 薯条 德里克
Ponowny moderator: Nie jest to czysta liczba pytań, ale charakter pytań ma znaczenie. Pytam o relacje między kilkoma blisko powiązanymi i mylącymi koncepcjami. Ludzie, którzy nie rozumieją, może myśleć, że liczba pytań jest ważna.
Tim

Odpowiedzi:

12

Zobacz: Zrozumienie jądra Linux , wydanie trzecie, Daniel P. Bovet, Marco Cesati

  • Wydawca: O'Reilly
  • Data publikacji: listopad 2005 r
  • ISBN: 0-596-00565-2
  • Strony: 942

We wstępie Daniel P. Bovet i Marco Cesati powiedzieli:

Technicznie rzecz biorąc, Linux jest prawdziwym uniksowym jądrem, chociaż nie jest pełnym systemem operacyjnym Unix, ponieważ nie obejmuje wszystkich aplikacji, takich jak narzędzia systemu plików, systemy okienkowe i pulpity graficzne, polecenia administratora systemu, edytory tekstu, kompilatory itd. na. Zatem to, co czytasz w tej książce i widzisz w jądrze Linuksa, może pomóc ci zrozumieć również inne warianty Uniksa.

W następnych akapitach postaram się odnieść do waszych punktów widzenia w oparciu o moje zrozumienie faktów przedstawionych w „Understanding the Linux Kernel”, które w bardzo dużym stopniu są podobne do tych w Uniksie.

Co oznacza proces? :

Procesy są jak ludzie, są generowane, mają mniej lub bardziej znaczące życie, opcjonalnie generują jeden lub więcej procesów potomnych i ostatecznie umierają. Proces składa się z pięciu podstawowych części: kodu („tekstu”), danych (VM), stosu, plików we / wy i tabel sygnałów

Celem procesu w jądrze jest działanie jako jednostka, do której przydzielane są zasoby systemowe (czas procesora, pamięć itp.). Kiedy proces jest tworzony, jest prawie identyczny jak jego rodzic. Odbiera (logiczną) kopię przestrzeni adresowej rodzica i wykonuje ten sam kod co rodzic, zaczynając od następnej instrukcji po wywołaniu systemowym tworzenia procesu. Chociaż rodzic i dziecko mogą udostępniać strony zawierające kod programu (tekst), mają osobne kopie danych (stos i stos), dzięki czemu zmiany podrzędne w lokalizacji pamięci są niewidoczne dla rodzica (i odwrotnie) .

Jak działają procesy?

Program wykonawczy potrzebuje czegoś więcej niż tylko kodu binarnego, który mówi komputerowi, co ma robić. Program potrzebuje pamięci i różnych zasobów systemu operacyjnego do uruchomienia. „Proces” to tak zwany program, który został załadowany do pamięci wraz ze wszystkimi zasobami potrzebnymi do działania. Wątek jest jednostką wykonania w procesie. Proces może mieć miejsce od jednego wątku do wielu wątków. Po rozpoczęciu procesu zostaje mu przypisana pamięć i zasoby. Każdy wątek w procesie współużytkuje tę pamięć i zasoby. W procesach jednowątkowych proces zawiera jeden wątek. Proces i wątek są takie same i dzieje się tylko jedna rzecz. W procesach wielowątkowych proces zawiera więcej niż jeden wątek, a proces realizuje wiele rzeczy jednocześnie.

Mechanika systemu wieloprzetwarzania obejmuje procesy lekkie i ciężkie:

W procesie o dużej masie wiele procesów działa równolegle. Każdy równoległy proces wagi ciężkiej ma swoją własną przestrzeń adresową pamięci. Komunikacja między procesami jest powolna, ponieważ procesy mają różne adresy pamięci. Przełączanie kontekstu między procesami jest droższe. Procesy nie współużytkują pamięci z innymi procesami. Komunikacja między tymi procesami wymagałaby dodatkowych mechanizmów komunikacji, takich jak gniazda lub rury.

W lekkim procesie, zwanym także wątkami. Wątki służą do dzielenia i podziału obciążenia. Wątki używają pamięci procesu, do którego należą. Komunikacja między wątkami może być szybsza niż komunikacja między procesami, ponieważ wątki tego samego procesu współużytkują pamięć z procesem, do którego należą. w rezultacie komunikacja między wątkami jest bardzo prosta i wydajna. Przełączanie kontekstu między wątkami tego samego procesu jest tańsze. Wątki dzielą pamięć z innymi wątkami tego samego procesu

Istnieją dwa typy wątków: wątki na poziomie użytkownika i wątki na poziomie jądra. Wątki na poziomie użytkownika unikają jądra i samodzielnie zarządzają pracą. Wątki na poziomie użytkownika mają problem polegający na tym, że pojedynczy wątek może zmonopolizować odcinek czasu, co powoduje głodzenie innych wątków w zadaniu. Wątki na poziomie użytkownika są zwykle obsługiwane powyżej jądra w przestrzeni użytkownika i są zarządzane bez obsługi jądra. Jądro nie wie nic o wątkach na poziomie użytkownika i zarządza nimi tak, jakby były procesami jednowątkowymi. W związku z tym wątki na poziomie użytkownika są bardzo szybkie, działają 100 razy szybciej niż wątki jądra.

Wątki na poziomie jądra często są implementowane w jądrze przy użyciu kilku zadań. W takim przypadku jądro planuje każdy wątek w przedziale czasowym każdego procesu. Tutaj, ponieważ tyknięcie zegara określi czasy przełączania, zadanie ma mniejsze szanse na zatrzymanie przedziału czasu z innych wątków w ramach zadania. Wątki na poziomie jądra są obsługiwane i zarządzane bezpośrednio przez system operacyjny. Związek między wątkami na poziomie użytkownika i wątkami na poziomie jądra nie jest całkowicie niezależny, w rzeczywistości zachodzi interakcja między tymi dwoma poziomami. Zasadniczo wątki na poziomie użytkownika można wdrożyć za pomocą jednego z czterech modeli: modeli wiele do jednego, jeden do jednego, wielu do wielu i dwupoziomowych. Wszystkie te modele odwzorowują wątki na poziomie użytkownika na wątki na poziomie jądra i powodują interakcję w różnym stopniu między obydwoma poziomami.

wprowadź opis zdjęcia tutaj

Wątki a procesy

  1. Program zaczyna się jako plik tekstowy kodu programowania,
  2. Program jest kompilowany lub interpretowany do postaci binarnej,
  3. Program jest ładowany do pamięci,
  4. Program staje się jednym lub więcej uruchomionymi procesami.
  5. Procesy są zazwyczaj niezależne od siebie,
  6. Podczas gdy wątki istnieją jako podzbiór procesu.
  7. Wątki mogą komunikować się ze sobą łatwiej niż procesy,
  8. Ale wątki są bardziej podatne na problemy spowodowane przez inne wątki w tym samym procesie

Bibliografia:

Zrozumienie jądra Linux, wydanie trzecie

Więcej 1 2 3 4 5

...............................................

Teraz uprośćmy wszystkie te terminy ( ten akapit jest z mojej perspektywy ). Jądro to interfejs między oprogramowaniem a sprzętem. Innymi słowy, jądro działa jak mózg. Manipuluje zależnością między materiałem genetycznym (tj. Kodami i jego oprogramowaniem pochodnym) a układami ciała (tj. Sprzętem lub mięśniami).

Ten mózg (tj. Jądro) wysyła sygnały do ​​procesów, które działają odpowiednio. Niektóre z tych procesów są jak mięśnie (tj. Nici), każdy mięsień ma swoją funkcję i zadanie, ale wszystkie one pracują razem, aby zakończyć obciążenie. Komunikacja między tymi wątkami (tj. Mięśniami) jest bardzo wydajna i prosta, dzięki czemu osiągają swoją pracę płynnie, szybko i skutecznie. Niektóre wątki (np. Mięśnie) znajdują się pod kontrolą użytkownika (np. Mięśnie dłoni i nóg). Inni są pod kontrolą mózgu (jak mięśnie w naszym żołądku, oku, sercu, których nie kontrolujemy).

Wątki w przestrzeni użytkownika omijają jądro i same zarządzają zadaniami. Często nazywa się to „współpracującym wielozadaniowością” i rzeczywiście przypomina nasze kończyny górne i dolne, jest pod naszą własną kontrolą i działa razem, aby osiągnąć pracę (tj. Ćwiczenia lub ...) i nie wymaga bezpośrednich poleceń od mózg. Z drugiej strony wątki jądra są całkowicie kontrolowane przez jądro i jego harmonogram.

...............................................

W odpowiedzi na twoje pytania:

  1. Czy proces jest zawsze wdrażany w oparciu o jeden lub więcej procesów lekkich? Rycina 3.4 wydaje się potwierdzać. Dlaczego rysunek 3.5 (a) pokazuje procesy bezpośrednio na procesorach?

    Tak, istnieją lekkie procesy zwane wątkami i ciężkie procesy.

    Ciężki proces (można go nazwać procesem wątku sygnałowego) wymaga od samego procesora więcej pracy, aby zlecić jego wykonanie, dlatego rysunek 3.5 (a) pokazuje procesy bezpośrednio na procesorach.

  2. Czy zawsze jest wdrażany lekki proces oparty na wątku jądra? Rycina 3.4 wydaje się potwierdzać. Dlaczego rysunek 3.5 (b) pokazuje lekkie procesy bezpośrednio nad procesami?

    Nie, lekkie procesy są podzielone na dwie kategorie: procesy na poziomie użytkownika i na poziomie jądra, jak wspomniano powyżej. Proces na poziomie użytkownika wykorzystuje własną bibliotekę do przetwarzania swoich zadań. Samo jądro planuje proces na poziomie jądra. Wątki na poziomie użytkownika można wdrożyć za pomocą jednego z czterech modelowanych: wiele do jednego, jeden do jednego, wiele do wielu i dwa poziomy. Wszystkie te modele mapują wątki na poziomie użytkownika na wątki na poziomie jądra.

  3. Czy wątki jądra są jedynymi jednostkami, które można zaplanować?

    Nie, wątki na poziomie jądra są tworzone przez samo jądro. Różnią się one od wątków na poziomie użytkownika tym, że wątki na poziomie jądra nie mają ograniczonej przestrzeni adresowej. Żyją wyłącznie w przestrzeni jądra, nigdy nie przechodząc do krainy użytkowników. Są to jednak jednostki w pełni planowalne i możliwe do zniesienia, podobnie jak normalne procesy (uwaga: możliwe jest wyłączenie prawie wszystkich przerwań dla ważnych akcji jądra). Celem własnych wątków jądra jest głównie wykonywanie zadań konserwacyjnych w systemie. Tylko jądro może uruchomić lub zatrzymać wątek jądra. Z drugiej strony proces na poziomie użytkownika może sam zaplanować na podstawie własnej biblioteki, a jednocześnie może zostać zaplanowany przez jądro w oparciu o modele dwupoziomowe i wiele do wielu (wspomniane powyżej),

  4. Czy lekkie procesy są planowane tylko pośrednio poprzez planowanie podstawowych wątków jądra?

    Wątki jądra są kontrolowane przez sam program planujący jądra. Obsługa wątków na poziomie użytkownika oznacza, że ​​istnieje biblioteka na poziomie użytkownika, która jest połączona z aplikacją, a ta biblioteka (nie CPU) zapewnia całe zarządzanie wsparciem dla wątków w środowisku wykonawczym. Będzie obsługiwał struktury danych potrzebne do implementacji abstrakcji wątków i zapewni wszystkie synchronizacje planowania oraz inne mechanizmy potrzebne do podjęcia decyzji zarządzania zasobami dla tych wątków. Teraz niektóre procesy wątków na poziomie użytkownika mogą być mapowane do podstawowych wątków poziomu jądra, a to obejmuje mapowanie jeden do jednego, jeden do wielu i wiele do wielu.

  5. Czy procesy są planowane tylko pośrednio poprzez planowanie podstawowych lekkich procesów?

    Zależy to od tego, czy jest to proces ciężki, czy lekki. Ciężkie są procesy zaplanowane przez samo jądro. lekki proces może być zarządzany na poziomie jądra i na poziomie użytkownika.

Jeff Schaller
źródło
Dzięki. (1) unix.stackexchange.com/questions/472354/... (2) Pytałem konkretnie o Unix zamiast LInux, choć doceniam twoją odpowiedź, szczególnie przydatną w Linuksie i mam nadzieję, że możesz zostawić ją taką, jaka jest.
Tim
1
„Celem własnych wątków jądra jest głównie wykonywanie zadań konserwacyjnych w systemie” - czy możesz opracować lub podać odniesienie, Goro
iruvar 30.09.18
@iruva Wierzę, że „obowiązki konserwacyjne” nie są dokładnym terminem, na przykład zarządzanie energią jest kontrolowane przez wątki jądra i nie ma nic wspólnego z obowiązkami konserwacyjnymi. W rzeczywistości referencje dostarczone wraz z tym postem zawierają bogate informacje o wątkach jądra. Jeśli chcesz, żebym to rozwinął, opublikuj nowe pytanie dotyczące wątków jądra i ich funkcji / typów / jak są tworzone ... itd. Z przyjemnością wyjaśniam. Ta odpowiedź jest wystarczająco długa i nie może zaakceptować dodatkowych informacji!
@Tim: O którą wersję Uniksa pytałeś? W szczególności starożytne systemy, o których wspomniałeś, jak omówiono w książce? Czy uwzględniono nowoczesne BSD? Czy w zestawie jest Solaris 11? Czy dołączono system MacOS X Leopard (z certyfikatem UNIX)?
user1686
@grawity Zapytałem o książkę, więc cokolwiek książka używa. Jeśli znasz inne wersje, to też warto wiedzieć.
Tim