Frage

Nachdem ich mehrere Quellen gelesen habe, bin ich immer noch verwirrt über Threads auf Benutzer- und Kernelebene.

Im Speziellen:

Themen können sowohl auf der Benutzerebene als auch auf der Kernelebene existieren

Was ist der Unterschied zwischen Benutzerebene und Kernelebene?

War es hilfreich?

Lösung

Eine der Rollen eines Multitasking -Betriebssystemkernels ist Planung: Bestimmen Sie, welcher Ausführungsthread ausgeführt werden soll, wann. Ein solcher Kernel hat also eine Vorstellung von Faden oder Prozess. Ein Thread ist ein sequentielles Stück Code, das ausführt und seine eigene hat Stapel und manchmal andere Daten. In einem Betriebssystemkontext verwenden die Menschen normalerweise in der Regel Prozess einen Thread zu bedeuten, der seinen eigenen Speicherplatz hat, und Faden um einen Thread zu bedeuten, der seinen Speicherplatz mit anderen Threads teilt. Ein Prozess kann einen oder mehrere Fäden haben.

Einige Betriebssysteme, beispielsweise ältere UNIX -Systeme, bieten nur Prozesse: Jeder Thread, den der Kernel verwaltet, verfügt über einen eigenen Speicherplatz. Andere Betriebssysteme, beispielsweise die meisten modernen Unix-Systeme, ermöglichen es Prozessen, mehrere Ausführungsfäden zu enthalten: Sie liefern einen Begriff von Threads auf Kernelebene.

Es ist auch möglich, dass ein Prozess sein eigenes Threading verwaltet. Im Kooperative Multithreading enthält der Code jedes Threads Anweisungen zum Wechsel zu einem anderen Thread. Im Präventiv Multithreading fordert der Prozess regelmäßig an asynchron Benachrichtigungen aus dem Kernel und reagieren auf diese Benachrichtigungen, indem Sie zu einem anderen Faden wechseln. Auf diese Weise wird Multithreading ohne Kernelzusammenarbeit auf Benutzerebene in einer Bibliothek implementiert.

Ein System kann sowohl Threads auf Kernelebene als auch Benutzerebene anbieten. Dies ist bekannt als als Hybridfaden.

Nutzer- und Kernelebene haben jeweils ihre Vorteile und Nachteile. Das Umschalten zwischen Threads auf Benutzerebene ist oft schneller, da es nicht erforderlich ist, Speicherschutzschutz für den In-Kernel-Scheduler zu wechseln und erneut zum Prozess zurückzukehren. Dies ist meistens für massiv gleichzeitige Systeme von Bedeutung, die eine große Anzahl sehr kurzlebiger Themen verwenden, wie z. B. einige hochrangige Sprachen (Erlang insbesondere) und ihre grüne Fäden. Threads auf Benutzerebene erfordern weniger Kernelunterstützung, was den Kernel vereinfachen kann. Mit Kernel-Ebenen können ein Thread ausgeführt werden, während ein weiterer Thread im selben Vorgang in a blockiert ist Systemanruf; Prozesse mit Threads auf Benutzerebene müssen darauf achten, dass Blockierungssysteme nicht aufgerufen werden, da diese alle Threads des Prozesses blockieren. Threads auf Kernelebene können gleichzeitig auf Multiprozessor-Maschinen ausgeführt werden, die nur Threads auf Benutzerebene erreichen können.

Andere Tipps

Stellen Sie sich Kernelebene als "vor" vor "Virtuelle Prozessoren"und Benutzerebene als einfach Themen (Nennen wir sie vorerst als solches). Damit ein Thread ausgeführt wird, wird er einem Prozessor zugewiesen, oder? Jeder Thread wird einem virtuellen Prozessor zugewiesen, damit er ausgeführt werden kann.

Hier sind Fakten

  • Das Erstellen eines neuen virtuellen Prozessors ist etwas kostspielig. (Der Kernel muss einen Eintrag in erstellen Fadensteuerblock, Stapel usw. zuweisen)

  • Das Erstellen eines Threads ist im Vergleich zum Erstellen eines neuen virtuellen Prozessors ziemlich einfach. Ein Anwendungsentwickler kann Threads mithilfe von Threadbibliotheken erstellen, die von den Programmiersprachen bereitgestellt werden, und werden in verwaltet in Benutzerraum. Und verschiedene Sprachen implementieren Multithreading auf veschiedenen Wegen.

Modelle

  • Wenn Themen auf einen einzelnen virtuellen Prozessor abgebildet werden, muss man darauf achten, dass kein Blockierungssystem in einem der Threads aufgerufen wird, da andere Threads nicht mehr gleichzeitig ausgeführt werden können.

  • Diese Einschränkung kann überwunden werden, wenn einige weitere virtuelle Prozessoren erstellt werden können. Jetzt können Threads gleichzeitig ausgeführt werden (parallel, wenn mehrere reale Prozessoren vorhanden sind). Ein Thread wirkt sich nicht auf andere Threads aus, die auf andere virtuelle Prozessoren zugeordnet sind.

  • Im letzteren Modell können entweder ein oder viele Fäden auf einen virtuellen Prozessoren abgebildet werden.

  • Die oben genannten Modelle werden viele zu eins, eins zu eins zu vielen genannt.

Referenes: Betriebssystemkonzepte von Galvin et al. Thema: Threads -> Multithreading -Modelle

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top