2017-10-25 2 views

Antwort

3

Linux-Prozesse und Linux-Thread wird offensichtlich "Kernel-Ebene" sein, weil Linux der Kernel ist. Sie sollten sich jedoch bewusst sein, dass die Unterscheidung zwischen Prozess und Thread bei Linux nicht so scharf ist wie bei einigen anderen Betriebssystemen. Linux-Prozesse und -Threads werden vom Systemaufruf clone (http://man7.org/linux/man-pages/man2/clone.2.html) erstellt, und ob Sie das Ergebnis des Klons einen "Prozess" oder einen "Thread" nennen, hängt davon ab, welche Optionen Sie ihm geben.

Wie bei der Sprache X oder der Bibliothek Y hängt die Frage, ob Threads "Benutzer-Threads" (auch "grüne Threads" genannt) oder "Kernel-Threads" (auch "native Threads" genannt) von welcher Sprache/Bibliothek ab Sie sprechen darüber, und es kann davon abhängen, welche spezifische Version und welche spezifische Implementierung der Bibliothek oder Sprache Sie sprechen.

+0

Danke. Wie kann ich feststellen, ob eine Bibliothek einer Sprache "Benutzer-Threads" oder "Kernel-Threads" anbietet? Zum Beispiel in Java oder in einer anderen Sprache, mit der Sie vertraut sind? – Ben

+0

@Ben Die Sprachspezifikation überlässt es der Implementierung normalerweise, zu entscheiden, welche Art von Threads die Implementierung verwendet. –

0

Lassen Sie uns zunächst definieren die Begriffe

Benutzerebenen-Thread: - ein Faden, der durch eine Bibliothek außerhalb des Kernel erstellt und verwaltet werden. Der Kernel ist sich dieser Threads nicht direkt bewusst.

Kernel-Level-Threads: - erstellt und verwaltet von Kernel. Für jede Kernel-Ebene behält der Thread-Kernel eine Datenstruktur bei, um zugehörige Informationen zu speichern.

Obwohl diese Definitionen nicht allgemeingültig sind, stimmen die meisten Autoren in der Literatur überein. (Betriebssystemkonzepte, moderne Betriebssysteme usw.)

Wenn wir über Threads sprechen, die von einer Bibliothek erstellt wurden, handelt es sich immer um Threads auf Benutzerebene. Der zu verstehende Punkt ist das Mapping von Threads auf Benutzerebene zu Threads auf Kernel-Ebene.

Es hängt von der Bibliothek (JVM, .NET) ab, welche Art von Mapping verwendet wird. Es kann ein Eins-zu-eins-Modell verwenden, bei dem jeder Thread auf Benutzerebene seinem eigenen Thread auf Kernel-Ebene zugeordnet wird. Oder es kann viele zu einem Modell verwenden, bei denen mehr als ein Benutzer-Thread demselben Kernel-Thread zugeordnet ist.

Soweit es Linux betrifft, unterscheidet es nicht zwischen Prozess und Thread, aber es bietet Ihnen die Möglichkeit, die Ebene der Ressourcenfreigabe zwischen Eltern und Kind zu steuern. Sie können dies tun, indem Sie den Klon-Systemaufruf verwenden. Wenn Sie einen untergeordneten Prozess mit maximaler Freigabe erstellen, ist dies effektiv ein Thread. Auf der anderen Seite, wenn Sie Flags zum Klonen übergeben, so dass nichts geteilt wird, als es ein Prozess ist.

Zusammenfassende Threads in Programmierbibliotheken sind immer Threads auf Benutzerebene. Weil sie vom Kernel weder erstellt noch (direkt) verwaltet werden.

Verwandte Themen