Was ist der Unterschied zwischen Kernel-Threads und User-Threads?

8

Was ist der Unterschied zwischen Kernel-Threads und User-Threads? Wird der Kernel-Thread im Kernel-Modus geplant und ausgeführt? Was sind Techniken zum Erstellen von Kernel-Threads?

Ist der Benutzer-Thread geplant, wird er im Benutzermodus ausgeführt? Ist der Kernel nicht an der Ausführung / Planung von Benutzer-Threads beteiligt? Wenn Interrupts bei der Ausführung von Benutzer-Thread auftreten, wer handhabt es dann?

Jedes Mal, wenn ein Thread erstellt wird, wird für jeden ein TCB erstellt. jetzt im Fall von Threads auf Benutzerebene Ist diese TCB im Adressraum des Benutzers erstellt?

Im Fall des Umschaltens zwischen zwei Threads auf Benutzerebene, die den Kontextwechsel handhaben?

Es gibt ein Konzept von Multithreading-Modellen:

  1. Viele zu eins
  2. Eins zu eins
  3. Viele zu viele.

Was sind diese Modelle? Wie werden diese Modelle praktisch verwendet?

Habe einige Artikel zu diesem Thema gelesen, aber immer noch verwirrt
Will das Konzept löschen ..

Vielen Dank im Voraus, Tazim

    
tazim 13.02.2011, 16:00
quelle

4 Antworten

5
  

Was ist der Unterschied zwischen Kernel-Threads und User-Threads?

Kernel-Threads sind privilegiert und können auf Benutzer zugreifen, die für Benutzermodus-Threads nicht zugänglich sind. Werfen Sie einen Blick auf " Ring (Computersicherheit) " auf Wikipedia. Unter Windows entspricht der Benutzermodus Ring 3, während der Kernelmodus Ring 0 entspricht.

  

Was sind Techniken zum Erstellen von Kernel-Threads?

Dies hängt stark vom Betriebssystem ab.

  

jetzt im Falle von Threads auf Benutzerebene Ist das TCB im Adressraum des Benutzers erstellt?

Der TCB zeichnet Informationen über einen Thread auf, den der Kernel beim Ausführen dieses Threads verwendet, richtig? Wenn es also im Benutzerbereich zugewiesen wurde, könnte der Benutzermodus-Thread es ändern oder korrumpieren, was nicht sehr sinnvoll erscheint. Also, glauben Sie nicht, dass es im Kernelraum erstellt wurde?

  

Was sind diese Modelle? Wie werden diese Modelle praktisch verwendet?

Wikipedia scheint wirklich klar zu sein.

    
Jeff 14.02.2011, 07:41
quelle
6

Wikipedia hat Antworten auf die meisten, wenn nicht alle diese Fragen.

Ссылка

Ссылка

    
EmeryBerger 13.02.2011 16:42
quelle
1

Kernel-Thread bedeutet ein Thread, für den der Kernel verantwortlich ist. Dies bedeutet unter anderem, dass der Kernel jeden Thread auf verschiedenen CPUs / Kernen gleichzeitig planen kann.

Wie man sie benutzt, variiert stark mit Programmiersprachen und Threading-APIs, aber als einfache Illustration,

%Vor%

In jeder Implementierung, die ich kenne, kann der Kernel sie jederzeit pausieren. ("Präventiv")

Benutzer-Threads oder "Benutzer geplante Threads" machen das Programm selbst verantwortlich für den Wechsel zwischen ihnen. Es gibt viele Möglichkeiten, dies zu tun, und entsprechend gibt es eine Vielzahl von Namen für sie.

An einem Ende hast du "grüne Fäden"; im Grunde versuchen, das gleiche wie Kernel-Threads zu tun. So behalten Sie alle Komplikationen der Programmierung mit echten Threads.

Auf der gegenüberliegenden Seite haben Sie "Fibers", die vor jeder anderen Faser ausgegeben werden müssen. Das bedeutet

  • Die Fasern werden nacheinander ausgeführt. Es gibt keine parallelen Leistungsgewinne.
  • Die Wechselwirkungen zwischen Fasern sind sehr gut definiert. Anderer Code wird nur an genau den Punkten ausgeführt, die Sie erzielen. Anderer Code ändert Variablen nicht, während Sie daran arbeiten.
  • Die meisten Low-Level-Komplexitäten, mit denen Programmierer beim Multithreading zu kämpfen haben, wie Cache-Kohärenz (wenn man MT-Fragen auf dieser Site betrachtet, die meisten Leute nicht verstehen), sind kein Faktor.

Als das einfachste Beispiel von Fasern kann ich denken:

%Vor%

wo jeder etwas Arbeit macht und dann zurückkehrt, wenn dieser Teil fertig ist. Beachten Sie, dass diese sequenziell im selben "Hardware-Thread" ausgeführt werden, was bedeutet, dass Sie keine Leistungssteigerung durch Parallelität erhalten. Auf der anderen Seite sind die Interaktionen zwischen ihnen sehr gut definiert, so dass Sie keine Rassenbedingungen haben. Die tatsächliche Funktionsweise jeder Funktion kann variieren. Sie könnten auch "Benutzer-Thread-Objekte" aus einem Vektor / Array sein.

    
MaHuJa 09.08.2011 14:56
quelle
0

Im Wesentlichen laufen Benutzer-Threads im Kontext eines Benutzers mit den entsprechenden Berechtigungsstufen, z. Benutzer-Threads haben sicher keinen Zugriff auf Kernel-Level-Speicher / Datenstrukturen / -routinen usw. Während Kernel-Threads im Kontext des Betriebssystemkernels laufen und ihnen damit die Berechtigung geben, Code auszuführen, der auf Kernel-Routinen / Speicher / Datenstrukturen.

    
LordDoskias 14.02.2011 04:03
quelle