Pthread

Pthread

Die Native POSIX Thread Library (NPTL) ist eine moderne Implementierung einer Threading-Bibliothek für Linux. Sie wird in Verbindung mit der GNU C Library (glibc) verwendet und erlaubt Linux-Programmen die Verwendung von POSIX-Threads.

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-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 so gut es ging im Userspace zu simulieren. Die Bibliothek wurde zwar kontinuierlich verbessert, war aber schon lange nicht mehr zeitgemäß und konzeptionell bedingt auch nicht reparierbar. Mittel der Wahl war daher eine Neuimplementierung der Threading-Bibliothek.

Folgende Probleme mit der existierenden LinuxThreads-Implementation wurden identifiziert:

  • Sie benötigt einen Manager-Thread im Prozess, der weitere Threads erzeugt, wieder aufräumt und die Signalbehandlung kanalisiert.
  • Sie ist nicht POSIX-konform, da es zum Beispiel nicht möglich ist, ein Signal an den ganzen Prozess zu senden, bzw. der Kernel dafür sorgen muss, dass Signale wie SIGSTOP und SIGCONT an alle Threads im Prozess durchgereicht werden.
  • Unter Last wird die Performance schlecht, da das Signalsystem zum Zwecke der Synchronisierung missbraucht wird. Dies ist auch schlecht für die Stabilität.
  • Jeder Thread führt fälschlicherweise eine eigene Prozess ID.
  • Auf der wichtigen IA-32-Architektur waren nur maximal 8192 Threads möglich.

Um die bestehenden Probleme zu lösen, wurde 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. Als 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:

  • POSIX-Konformität, um Userspace-Quelltext wieder besser portierbar zu machen
  • effektive Verwendung von SMP und gute Skalierbarkeit, um auf Mehrprozessorsystemen die Performance zu steigern
    • darauf aufbauend: NUMA-Unterstützung
  • niedrige Erzeugungskosten pro Thread
  • Kompatibilität mit LinuxThreads, das heißt, alte Programme sollten ohne Neukompilierung mit der NPTL laufen.

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 bemerkenswerten Last blieb das System während dieser Tests annähernd mit normaler Geschwindigkeit benutzbar.

Red Hat Linux 9 war die erste Linux-Distribution, in der die NPTL in einem gepatchten 2.4er Kernel verwendet wurde (und deren Benutzer dadurch bisweilen zu unfreiwilligen Betatestern wurden). Inzwischen benutzen praktisch alle modernen Distributionen die NPTL, wenn sie einen Kernel der Version 2.6 oder höher verwenden.

Konzept

NPTL funktioniert ähnlich wie LinuxThreads. Der Kernel verwaltet immer noch Prozesse und keine Threads, und neue Threads werden mit einem von der NPTL aufgerufenen clone() erzeugt. Die NPTL benötigt allerdings spezielle Kernelunterstützung und implementiert damit Synchronisationsmechanismen, bei denen Threads schlafen gelegt und wieder aufgeweckt werden. Dazu werden Futexes verwendet.

Die NPTL ist eine sogenannte 1:1-Threading-Bibliothek. Die vom Benutzer mit der pthread_create()-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-Implementation. 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


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Pthread — Parallel Thread …   Acronyms

  • Pthread — Parallel Thread …   Acronyms von A bis Z

  • POSIX Threads — is a POSIX standard for threads. The standard defines an API for creating and manipulating threads.Libraries implementing the POSIX Threads standard are often named Pthreads. Pthreads are most commonly used on Unix like POSIX systems such as… …   Wikipedia

  • POSIX Threads — POSIX Threads  стандарт POSIX реализации потоков (нитей) выполнения, определяющий API для создания и управления ими. Библиотеки, реализующие этот стандарт (и функции этого стандарта), обычно называются Pthreads (функции имеют приставку… …   Википедия

  • Espera activa — Saltar a navegación, búsqueda En Informática, se denomina espera activa a una técnica donde un proceso repetidamente verifica una condición, tal como esperar una entrada de teclado o si el ingreso a una sección crítica está habilitado. Puede ser… …   Wikipedia Español

  • Critical section — In concurrent programming a critical section is a piece of code that accesses a shared resource (data structure or device) that must not be concurrently accessed by more than one thread of execution. A critical section will usually terminate in… …   Wikipedia

  • Busy waiting — In software engineering, busy waiting or spinning is a technique in which a process repeatedly checks to see if a condition is true, such as waiting for keyboard input or waiting for a lock to become available. It can also be used to delay… …   Wikipedia

  • Поток POSIX — POSIX Threads стандарт потоков (нитей) выполнения, определяющий API для создания и управления ими. Библиотеки, реализующие этот стандарт (и функции этого стандарта), обычно называются Pthreads (функции имеют приставку «pthread »). Хотя наиболее… …   Википедия

  • Lock (computer science) — In computer science, a lock is a synchronization mechanism for enforcing limits on access to a resource in an environment where there are many threads of execution. Locks are one way of enforcing concurrency control policies. Contents 1 Types 2… …   Wikipedia

  • Native POSIX Thread Library — The Native POSIX Thread Library (NPTL) is a software feature that enables the Linux kernel to run programs written to use POSIX Threads efficiently. Contents 1 History 2 Design 3 See also 4 References …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”