Native POSIX Thread Library ( NPTL ) は、Linuxオペレーティングシステム向けにPOSIX スレッド仕様を実装したものです。
Linuxカーネルのバージョン2.6より前は、プロセスがスケジューリング可能なエンティティであり、スレッドのための特別な機能はありませんでした。[ 1 ]ただし、呼び出し元のプロセスのアドレス空間を共有するコピーを作成するシステムコール「clone 」 はありました。LinuxThreadsプロジェクトはこのシステムコールを使用してカーネルレベルのスレッドを提供しました(Linuxの以前のスレッド実装のほとんどは完全にユーザーランドで動作していました)。残念ながら、特にシグナル処理、スケジューリング、プロセス間同期プリミティブの分野では、POSIXに部分的にしか準拠していませんでした。
LinuxThreadsを改良するには、カーネルのサポートと新しいスレッドライブラリが必要になることは明らかでした。この要件を満たすために、2つの競合プロジェクトが開始されました。1つはIBMの開発者を含むチームが開発したNGPT (Next Generation POSIX Threads)、もう1つはRed Hatの開発者によるNPTLです。NGPTチームはNPTLチームと緊密に連携し、両方の実装の優れた機能をNPTLに統合しました。NGPTプロジェクトは、優れた機能をNPTLに統合した後、2003年半ばに中止されました。
NPTL は Red Hat Linux 9 で初めてリリースされました。旧式の Linux POSIX スレッド処理は、システムに譲歩しないスレッドが発生すると問題が生じることで知られています。これは、発生してもプリエンプトする機会を逃してしまうためです。当時、Windows はプリエンプト処理をよりうまく行っていたことで知られていました。Red Hat は、Red Hat Linux 9 上の Java に関するJava Web サイトの記事で、NPTL がこの問題を解決したと主張しました。 [ 2 ]
NPTLはバージョン3以降Red Hat Enterprise Linuxの一部であり、バージョン2.6以降Linuxカーネルに組み込まれています。現在はGNU Cライブラリに完全に統合されています。[ 3 ]
NPTLには、 POSIXスレッドトレースツール(PTT)と呼ばれるトレースツールが存在します。また、NPTLライブラリをPOSIX標準に準拠しているかどうかをテストするために、 Open POSIX Test Suite(OPTS)が作成されました。
LinuxThreadsと同様に、NPTLは1対1のスレッドライブラリです。ライブラリによって作成されたスレッド(pthread_create経由)は、カーネル内のスケジューリング可能なエンティティ(Linuxの場合はプロセス)と1対1で対応します。 [ 4 ] : 226これは、3つのスレッドモデル(1対1、N対1、M対N)の中で最も単純なものです。[ 4 ] : 215-216新しいスレッドは、NPTLライブラリを介して呼び出されるclone()システムコールによって作成されます。NPTLは、ユーザー空間ロックをより効率的に実装するために、 futexに対するカーネルのサポートに依存しています。[ 4 ] : 182