スレッド・モデルと仮想プロセッサー

ユーザー・スレッドは、 スレッド・ライブラリーによってカーネル・スレッドにマップされます。 このマッピングを行う方法を、スレッド・モデル と呼びます。

3 つのスレッド・モデルがあり、 それぞれがユーザー・スレッドをカーネル・スレッドにマップする 3 つの異なる方法に対応しています。

  • M:1 モデル
  • 1:1 モデル
  • M:N モデル

ユーザー・スレッドのカーネル・スレッドへのマッピングは、 仮想プロセッサー を使用して行われます。 仮想プロセッサー (VP) は、通常は暗黙的なライブラリー・エンティティーです。 ユーザー・スレッドにとって、VP は CPU として働きます。 ライブラリーにおいて、VP は、カーネル・スレッド、またはカーネル・スレッドにバインドされた構造体です。

M:1 モデルでは、すべてのユーザー・スレッドが 1 つのカーネル・スレッドにマップされ、 すべてのユーザー・スレッドが 1 つの VP 上で実行されます。 マッピングは、ライブラリー・スケジューラーによって処理されます。 すべてのユーザー・スレッドのプログラミング機能は、ライブラリーによって完全に処理されます。 このモデルは任意のシステムで、特に、従来の単一スレッドのシステムで使用することができます。

1:1 モデルでは、各ユーザー・スレッドが 1 つのカーネル・スレッドにマップされ、 それぞれのユーザー・スレッドが 1 つの VP 上で実行されます。 ユーザー・スレッドのプログラミング機能の大部分は、 カーネル・スレッドによって直接処理されます。 このモデルはデフォルト・モデルです。

M:N モデルでは、すべてのユーザー・スレッドがカーネル・スレッドのプールにマップされ、 すべてのユーザー・スレッドが仮想プロセッサーのプール上で実行されます。 ユーザー・スレッドが 1:1 モデルの場合のように特定の VP にバインドされる場合もあります。 すべてのアンバインド・ユーザー・スレッドは、残りの VP を共有します。 これは、最も有効かつ最も複雑なスレッド・モデルです。 ユーザー・スレッドのプログラミング機能は、 スレッド・ライブラリーとカーネル・スレッドとの間で共有されます。 このモデルの設定は、AIXTHREAD_SCOPE 環境変数を P に設定することにより行えます。