Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Native POSIX Thread Library (NPTL) — это реализация спецификации POSIX Threads для операционной системы Linux.
The Native POSIX Thread Library (NPTL) is an implementation of the POSIX Threads specification for the Linux operating system.
История
До версии 2.6 ядра Linux процессы были планируемыми сущностями, и специальных средств для работы с потоками не существовало. Однако в нём был системный вызов, который создавал копию вызывающего процесса, разделяющую с ним адресное пространство. Проект LinuxThreads использовал этот системный вызов для обеспечения потоков на уровне ядра (большинство предыдущих реализаций потоков в Linux работали целиком в пользовательском пространстве). К сожалению, он лишь частично соответствовал стандарту POSIX, особенно в части обработки сигналов, планирования и примитивов межпроцессной синхронизации. Для улучшения LinuxThreads стало очевидно, что необходима поддержка ядра и новая библиотека потоков. Для решения этой задачи были запущены два конкурирующих проекта: NGPT (Next Generation POSIX Threads), разрабатываемый командой, включавшей разработчиков из IBM, и NPTL командой Red Hat. Команда NGPT тесно сотрудничала с командой NPTL и объединила лучшие возможности обеих реализаций в NPTL. Проект NGPT был впоследствии прекращён в середине 2003 года после переноса его лучших функций в NPTL. NPTL впервые был выпущен в Red Hat Linux 9. Старая система Linux POSIX известна проблемами с потоками, которые периодически отказываются уступать процессорное время системе, поскольку она не использует возможность их принудительной остановки, что в то время Windows делала лучше. Red Hat заявила, что NPTL устранила эту проблему в статье на веб-сайте Java, посвящённой Java в Red Hat Linux 9. NPTL входит в состав Red Hat Enterprise Linux с версии 3 и в ядро Linux с версии 2.6. Теперь это полностью интегрированная часть библиотеки GNU C. Существует инструмент трассировки NPTL, называемый POSIX Thread Trace Tool (PTT). Также был разработан Open POSIX Test Suite (OPTS) для тестирования библиотеки NPTL на соответствие стандарту POSIX.
Before the 2.6 version of the Linux kernel, processes were the schedulable entities, and there were no special facilities for threads. However, it did have a system call — — which creates a copy of the calling process where the copy shares the address space of the caller. The LinuxThreads project used this system call to provide kernel level threads (most of the previous thread implementations in Linux worked entirely in userland). Unfortunately, it only partially complied with POSIX, particularly in the areas of signal handling, scheduling, and inter process synchronization primitives. To improve upon LinuxThreads, it was clear that some kernel support and a new threading library would be required. Two competing projects were started to address the requirement: NGPT (Next Generation POSIX Threads) worked on by a team which included developers from IBM, and NPTL by developers at Red Hat. The NGPT team collaborated closely with the NPTL team and combined the best features of both implementations into NPTL. The NGPT project was subsequently abandoned in mid 2003 after merging its best features into NPTL. NPTL was first released in Red Hat Linux 9. Old style Linux POSIX threading is known for having trouble with threads that refuse to yield to the system occasionally, because it does not take the opportunity to preempt them when it arises, something that Windows was known to do better at the time. Red Hat claimed that NPTL fixed this problem in an article on the Java website about Java on Red Hat Linux 9. NPTL has been part of Red Hat Enterprise Linux since version 3, and in the Linux kernel since version 2.6. It is now a fully integrated part of the GNU C Library. There exists a tracing tool for NPTL, called POSIX Thread Trace Tool (PTT). And an Open POSIX Test Suite (OPTS) was written for testing the NPTL library against the POSIX standard.
Дизайн
Как и LinuxThreads, NPTL является библиотекой потоков 1:1. Потоки, создаваемые библиотекой (через pthread_create), соответствуют один к одному планируемым сущностям в ядре (процессам, в случае Linux). Это самая простая из трех моделей потоков (1:1, N:1 и M:N). Новые потоки создаются с помощью системного вызова clone, вызываемого через библиотеку NPTL. NPTL использует поддержку ядра для futexes для более эффективной реализации блокировок в пользовательском пространстве.
Like LinuxThreads, NPTL is a 1:1 threads library. Threads created by the library (via pthread create) correspond one to one with schedulable entities in the kernel (processes, in the Linux case). This is the simplest of the three threading models (1:1, N:1, and M:N). New threads are created with the clone system call called through the NPTL library. NPTL relies on kernel support for futexes to more efficiently implement user space locks.