2016-10-02 3 views
0

Ich bin ein bisschen verwirrt mit all diesen Entsprechungen und wie sie in Linux miteinander verbunden sind. Das Buch "Unix internals" gibt an, dass lightweight process (LWP) kernel-unterstützter Benutzer-Thread ist und dieser Kernel Threads innerhalb von Prozessen nicht sieht. Ist es für Linux noch immer richtig?Linux User Space Threads, Kernel-Threads, leichte Prozesse

Wie ich verstehe, User-Space-Threads im internen Prozess geplant, durch höhere Abstraktion als pthread-Bibliothek, ohne Eingriff des Kernels. Habe ich recht?

Antwort

1

In Pthreads unter Linux wird die Thread-Planung vom Kernel verarbeitet.

In Linux wird ein Thread oder Prozess mit dem Systemaufruf clone() erstellt (fork() ist ein Sonderfall von Klon). In Abhängigkeit von den an den Klon übergebenen Optionen wird der neu erzeugte Prozess ein geringeres Gewicht oder ein höheres Gewicht haben (d. H. Einen separaten Speicherraum und einen separaten Satz von Dateideskriptoren usw.). pthread_create() verwendet clone() mit einem Minimum an Trennung.

Es ist auch möglich, native Threads überhaupt nicht zu verwenden und stattdessen eine vollständige Userspace-Implementierung von Threading zu verwenden, die setjmp() und longjmp() verwendet. Dies könnte zum Beispiel verwendet werden, um eine interpretierte Sprache zu implementieren. Mir ist jedoch kein konkretes Beispiel für ein Programm oder eine Bibliothek bekannt, die tatsächlich einen eigenen Userspace-Scheduler implementiert.

Noch eine Sache: ein "Kernel-Thread" wird im Allgemeinen verwendet, um einen Thread zu bezeichnen, der im Kernelraum läuft, d.h. der Teil des Kernels selbst ist. In ps sind solche Gewinde erkennbar, da sie von eckigen Klammern umgeben sind, wie [kthreadd].

+1

Die LinuxThreads-Implementierung verwendet immer noch 1: 1-Benutzer-Threads zur kernplanbaren Thread-Zuordnung (nur die Prozesse werden zugeordnet und NPTL - glibcs ​​Posix-Threads werden Kernel-planbaren Threads zugeordnet). Es gab nur NGPT (Next Generation POSIX Threads) bis 2003 mit wahrscheinlich nicht 1: 1 Mapping; und https://en.wikipedia.org/wiki/Green_threads werden manchmal in Sprachdolmetschern implementiert. – osgx

+0

@osgx OK, danke für die Erklärung. Ich habe den Verweis auf LinuxThreads entfernt, um Verwirrung zu vermeiden. – Arnout

0

In der Tat, für Threads, die im User-Space implementiert sind, kennt der Kernel Threads nicht. Wenn also ein Thread blockiert, werden die anderen Threads zum selben Prozessblock, da das Betriebssystem Threading nicht kennt.

+1

Die in dieser Antwort gegebenen Informationen sind meistens falsch. Der erste Absatz ist korrekt, weil er von Threads spricht, die im User-Space implementiert sind. Aber dann reden Sie weiter über LightWeightProcesses im Allgemeinen, und dies sind normalerweise normale Prozesse, keine im Benutzerbereich implementierten Threads. Ein Kernel-Thread ist ein Thread, der vollständig im Kernel-Bereich ausgeführt wird und keinen Userspace-Gegenpart hat. – Arnout

Verwandte Themen