„Native POSIX Thread Library“ – Versionsunterschied

[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
 
(8 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1:
Die '''Native POSIX Thread Library''' ('''NPTL''') ist eine moderne Implementierung einer [[Thread (Informatik)|Threading]]-[[Programmbibliothek|Bibliothek]] für das Betriebssystem [[Linux]]. Sie wird in Verbindung mit der [[Glibc|GNU C Library]] (glibc) verwendet und erlaubt Linux-Programmen die Verwendung von [[Portable Operating System Interface|POSIX]]-Threads (pthreads).
 
== Geschichte ==
Seit der Kernel-Version 2.0 existierte für Linux die Threading-Bibliothek ''[[LinuxThreads]]'', deren grundlegende Design-Prinzipien unter Einfluss der 1996 vorhandenen Beschränkungen des [[Linux (Kernel)|Linux-Kernels]] und der libc5 zustande gekommen waren. Linux hatte keine echte Unterstützung für Threads im Kernel, kannte aber den ''clone()''-Systemaufruf, der eine Kopie des aufrufenden Prozesses mit identischem Adressraum erzeugte. LinuxThreads benutzte diesen [[Systemaufruf]], um Thread-Unterstützung im [[Ring (CPU)|Userspace]] zu simulieren. Die Bibliothek wurde zwar kontinuierlich verbessert, war aber konzeptionell veraltet und eingeschränkt.
 
Folgende Probleme mit der existierenden ''LinuxThreads''-Implementation wurden identifiziert:
Zeile 11:
* Auf der wichtigen [[IA-32]]-Architektur waren nur maximal 8192 Threads möglich.
 
Um die bestehenden Probleme zu lösen, wurden zusätzliche Infrastruktur im Kernel und eine neu geschriebene Threading-Bibliothek benötigt. Es wurden zwei konkurrierende Projekte gestartet: [[Next Generation POSIX Threads]] (NGPT) unter Leitung von [[IBM]] und NPTL unter Federführung der bei [[Red Hat]] angestellten Kernel- und glibc-Programmierer [[Ingo Molnár]] und [[Ulrich Drepper]]. Weil sich abzeichnete, dass sich in der Praxis die NPTL durchsetzen würde, wurde das NGPT-Projekt Mitte 2003 eingestellt.
 
Das NPTL-Team setzte sich folgende Ziele für seine neue Bibliothek:
Zeile 23:
Unter diesen Voraussetzungen begann Mitte 2002 die Arbeit an der neuen Native POSIX Thread Library. Im August/September 2002 wurde der Linux-Kernel 2.5 für die NPTL vorbereitet. Dazu war es notwendig, einige neue Systemaufrufe einzuführen und vorhandene zu optimieren. In ersten Benchmarks konnten nun auf einem IA-32-System innerhalb von 2 Sekunden 100.000 parallele Threads erzeugt werden; ohne NPTL dauerte allein die Erzeugung der Threads fast 15 Minuten. Trotz dieser Last blieb das Testsystem mit annähernd gleicher Geschwindigkeit benutzbar.
 
[[Red Hat Linux]] 9 war die erste Linux-Distribution, in der die NPTL in einem [[Patch_Patch (Software)|gepatchten]] 2.4er-Kernel verwendet wurde (und deren Benutzer dadurch bisweilen zu unfreiwilligen [[Entwicklungsstadium (Software)#BetatesterBeta-Version|Betatestern]] wurden). Inzwischen benutzen praktisch alle modernen Distributionen die NPTL, wenn sie einen Kernel der Version 2.6 oder höher verwenden.
 
== Konzept ==
<!-- Ich bin kein Informatiker. Die Chancen stehen gut, dass ich hier Blödsinn erzähle. -->
NPTL funktioniert ähnlich wie ''LinuxThreads''. Der Kernel verwaltet immer noch Prozesse und keine Threads, und neue Threads werden mit einem von der NPTL aufgerufenen ''<code>clone()''</code> erzeugt. Die NPTL benötigt allerdings spezielle Kernelunterstützung und implementiert damit Synchronisationsmechanismen, bei denen Threads schlafen gelegt und wieder aufgeweckt werden. Dazu werden [[Futex]]es verwendet.
 
Die NPTL ist eine sogenannte 1:1-Threading-Bibliothek. Die vom Benutzer mit der ''<code>pthread_create()''</code>-Funktion erzeugten Threads stehen dabei in einer 1-zu-1-Beziehung mit Prozessen in den Scheduler-Queues des Kernels. Dies ist die einfachste denkbare Threading-Implementierung. Die Alternative wäre m:n. Dabei existieren typischerweise mehr Threads im Userspace, als es Prozesse im Kernel gibt. Die Threading-Bibliothek wäre dann dafür verantwortlich, die Prozessorzeit auf die einzelnen Threads im Prozess zu verteilen. Mit diesem Konzept wären sehr schnelle [[Kontextwechsel]] möglich, da die Anzahl der notwendigen Systemaufrufe minimiert wird, andererseits würde aber die Komplexität erhöht, und es könnte leichter zu [[Prioritätsinversion]] kommen.
 
== Literatur ==
* [httphttps://wwwstatic.redhat.com/legacy/whitepapers/developer/POSIX_Linux_Threading.pdf The Native POSIX Thread Library for Linux] (PDF; 535&nbsp;kB)]
 
[[Kategorie:Linux-Software]]