Jaka jest różnica między wątkami na poziomie użytkownika a wątkami na poziomie jądra?


33

Po przeczytaniu kilku źródeł wciąż nie rozumiem wątków na poziomie użytkownika i jądra.

W szczególności:

Wątki mogą istnieć zarówno na poziomie użytkownika, jak i jądra

Jaka jest różnica między poziomem użytkownika a poziomem jądra?


1
Czy to naprawdę Comp Sci (teoria) czy tylko programowanie?
Mehrdad

6
@Mehrdad, Systemy operacyjne są częścią informatyki.
Kaveh

Odpowiedzi:


28

Jedną z ról wielozadaniowego jądra systemu operacyjnego jest planowanie : określanie, który wątek wykonania ma zostać wykonany. Więc takie jądro ma pojęcie wątku lub procesu . Wątek to sekwencyjny fragment kodu, który jest wykonywany i ma swój własny stos, a czasem inne dane. W kontekście systemu operacyjnego ludzie zwykle używają procesu jako wątku, który ma własną przestrzeń pamięci, a wątku oznacza wątek, który dzieli przestrzeń pamięci z innymi wątkami. Proces może mieć jeden lub więcej wątków.

Niektóre systemy operacyjne, na przykład starsze systemy uniksowe, zapewniają tylko procesy: każdy wątek zarządzany przez jądro ma swoją własną pamięć. Inne systemy operacyjne, na przykład większość współczesnych systemów uniksowych, pozwalają procesom zawierać wiele wątków wykonania: zapewniają wątki na poziomie jądra.

Proces może także zarządzać własnym wątkiem. W wielowątkowości kooperacyjnej kod każdego wątku zawiera instrukcje przełączania na inny wątek. W zapobiegawczym wielowątkowości proces żąda okresowych asynchronicznych powiadomień z jądra i reaguje na te powiadomienia, przełączając się na inny wątek. W ten sposób wielowątkowość jest implementowana bez współpracy jądra, na poziomie użytkownika, w bibliotece.

System może oferować zarówno wątki na poziomie jądra, jak i na poziomie użytkownika; jest to znane jako gwintowanie hybrydowe .

Wątki na poziomie użytkownika i jądra mają swoje zalety i wady. Przełączanie między wątkami na poziomie użytkownika jest często szybsze, ponieważ nie wymaga resetowania zabezpieczeń pamięci, aby przejść do harmonogramu w jądrze i ponownie, aby powrócić do procesu. Jest to szczególnie ważne w przypadku masowo współbieżnych systemów, które używają dużej liczby bardzo krótkotrwałych wątków, takich jak niektóre języki wysokiego poziomu ( w szczególności Erlang ) i ich zielone wątki . Wątki na poziomie użytkownika wymagają mniejszej obsługi jądra, co może uprościć jądro. Wątki na poziomie jądra pozwalają na uruchomienie wątku, podczas gdy inny wątek w tym samym procesie jest blokowany w wywołaniu systemowym; procesy z wątkami na poziomie użytkownika muszą uważać, aby nie blokować wywołań systemowych, ponieważ blokują one wszystkie wątki procesu. Wątki na poziomie jądra mogą działać jednocześnie na maszynach wieloprocesorowych, czego nie mogą osiągnąć wątki na poziomie użytkownika.


W ostatnim wierszu jest napisane: „Wątki na poziomie jądra mogą działać jednocześnie na maszynach wieloprocesorowych, których nie mogą osiągnąć wątki na poziomie użytkownika”. Ale, biorąc pod uwagę powiązanie mówi ULT może działać jednoczesnej stackoverflow.com/questions/14791801/... . Czy coś jest nie tak?
Garrick,

Czy możesz sprawdzić mój powyższy komentarz?
Garrick,

1
@Garrick Wiele wątków na poziomie użytkownika może działać na różnych rdzeniach jednocześnie, pod warunkiem, że działają one w różnych wątkach na poziomie jądra. Jeśli masz tylko narzędzie ULT, jesteś ograniczony do jednego procesora. Jeśli KLT są dostępne, możesz rozłożyć wątki jądra na wiele procesorów i wysłać ULT wśród dostępnych wątków jądra.
Gilles „SO- przestań być zły”

4

Traktuj wątki na poziomie jądra jako „ procesory wirtualne ”, a wątki na poziomie użytkownika jako po prostu wątki (na razie nazywamy je takimi). Teraz, aby wątek został wykonany, został przypisany do procesora, prawda? Tak więc każdy wątek jest przypisywany do procesora wirtualnego, aby można go było wykonać.

Oto fakty

  • Tworzenie nowego procesora wirtualnego jest nieco kosztowne. (Jądro musi utworzyć wpis w bloku kontroli wątku , przypisać stos itp.)

  • Tworzenie wątku jest dość proste w porównaniu do tworzenia nowego wirtualnego procesora. Deweloper aplikacji może tworzyć wątki za pomocą bibliotek wątków udostępnianych przez języki programowania i zarządzanych w przestrzeni użytkownika . I różne języki zaimplementować wielowątkowości na różne sposoby.

Modele

  • Jeśli wątki są mapowane na pojedynczy procesor wirtualny, należy uważać, aby nie wykonać blokującego wywołania systemowego w żadnym z wątków, ponieważ inne wątki nie mogą już działać jednocześnie.

  • Ograniczenie to można pokonać, jeśli można utworzyć kilka dodatkowych procesorów wirtualnych. Teraz wątki mogą działać jednocześnie (równolegle, jeśli obecnych jest wiele rzeczywistych procesorów). Wątek nie wpłynie na inne wątki odwzorowane na innych procesorach wirtualnych.

  • W tym ostatnim modelu jeden lub wiele wątków można zmapować na procesory wirtualne.

  • Powyższe modele mają odpowiednio nazwy Many to One, One to One i Many to Many.

Referencje: Koncepcje systemu operacyjnego autorstwa Galvina i in. Temat: Wątki -> Modele wielowątkowe

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.