SMP スレッドのスケジューリング

SMP 環境では、スレッド・サポートの採用により、SMP を活用するアプリケーションをより容易にかつ費用をかけずにインプリメントすることができます。

スレッド・サポートは、プログラム実行の制御を以下の 2 つのエレメントに分けます。

  • メモリーやファイルへのアクセスなど、プログラムの実行に必要な物理リソースの集合であるプロセス
  • 命令アドレス・レジスターや汎用レジスターの現在の内容など、プログラムのインスタンスの実行状態を示すスレッド。 各スレッドは所定のプロセスのコンテキスト内で実行され、そのプロセスのリソースを使用します。 単一プロセス内で複数のスレッドが実行でき、スレッドはプロセスのリソースを共有します。

複数の制御のフローを作成するためにマルチプロセスを fork するのは、煩わしく、 費用がかかります。これは、各プロセスがメモリー・リソースの独自のセットを持っていて、 セットアップのために多量のシステムの処理を必要とするからです。 単一プロセス内にマルチスレッドを作成する場合は、必要な処理の量も使用するメモリーも少なくてすみます。

スレッド・サポートは、次の 2 つのレベルで存在します。

  • アプリケーション・プログラム環境における libpthreads.a サポート
  • カーネル・スレッド・サポート

通常、スレッドはマルチプロセッシングを活用するための便利で効率的なメカニズムですが、 スレッドにはスケーラビリティーに関する制限があります。 スレッドは処理リソースおよび状態を 共有するため、それらのリソースのロックとシリアライゼーションがスケーラビリティーの制限と なることがあります。