Operating-system-os-multi-threading

提供:Dev Guides
移動先:案内検索

オペレーティングシステム-マルチスレッド

スレッドとは?

スレッドは、次に実行する命令を追跡する独自のプログラムカウンター、現在の作業変数を保持するシステムレジスタ、および実行履歴を含むスタックを備えた、プロセスコードを介した実行のフローです。

スレッドは、ピアスレッドとコードセグメント、データセグメント、開いているファイルなどの情報を共有します。 1つのスレッドがコードセグメントメモリ項目を変更すると、他のすべてのスレッドがそれを認識します。

スレッドは「軽量プロセス」とも呼ばれます。 スレッドは、並列処理によりアプリケーションのパフォーマンスを改善する方法を提供します。 スレッドは、オーバーヘッドスレッドを減らすことでオペレーティングシステムのパフォーマンスを向上させるソフトウェアアプローチを表し、従来のプロセスと同等です。

各スレッドは1つのプロセスにのみ属し、プロセスの外側にスレッドは存在できません。 各スレッドは、個別の制御フローを表します。 スレッドは、ネットワークサーバーとWebサーバーの実装に正常に使用されています。 また、共有メモリマルチプロセッサでアプリケーションを並列実行するための適切な基盤も提供します。 次の図は、シングルスレッドプロセスとマルチスレッドプロセスの動作を示しています。

シングルプロセスとマルチスレッドプロセス

プロセスとスレッドの違い

S.N. Process Thread
1 Process is heavy weight or resource intensive. Thread is light weight, taking lesser resources than a process.
2 Process switching needs interaction with operating system. Thread switching does not need to interact with operating system.
3 In multiple processing environments, each process executes the same code but has its own memory and file resources. All threads can share same set of open files, child processes.
4 If one process is blocked, then no other process can execute until the first process is unblocked. While one thread is blocked and waiting, a second thread in the same task can run.
5 Multiple processes without using threads use more resources. Multiple threaded processes use fewer resources.
6 In multiple processes each process operates independently of the others. One thread can read, write or change another thread’s data.

スレッドの利点

  • スレッドは、コンテキストの切り替え時間を最小化します。
  • スレッドを使用すると、プロセス内で並行性が提供されます。
  • 効率的なコミュニケーション。
  • スレッドを作成してコンテキストを切り替える方が経済的です。
  • スレッドを使用すると、マルチプロセッサアーキテクチャをより高い規模と効率で利用できます。

スレッドの種類

スレッドは、次の2つの方法で実装されます-

  • ユーザーレベルのスレッド-ユーザー管理のスレッド。
  • カーネルレベルのスレッド-オペレーティングシステムのコアであるカーネルで動作するオペレーティングシステム管理スレッド。

ユーザーレベルのスレッド

この場合、スレッド管理カーネルはスレッドの存在を認識しません。 スレッドライブラリには、スレッドの作成と破棄、スレッド間のメッセージとデータの受け渡し、スレッド実行のスケジューリング、およびスレッドコンテキストの保存と復元のためのコードが含まれています。 アプリケーションは単一のスレッドで開始します。

ユーザーレベルのスレッド

利点

  • スレッドの切り替えには、カーネルモード権限は必要ありません。
  • ユーザーレベルのスレッドは、任意のオペレーティングシステムで実行できます。
  • スケジューリングは、ユーザーレベルのスレッドでアプリケーション固有にすることができます。
  • ユーザーレベルのスレッドは、作成と管理が高速です。

デメリット

  • 一般的なオペレーティングシステムでは、ほとんどのシステムコールがブロックされています。
  • マルチスレッドアプリケーションは、マルチプロセッシングを利用できません。

カーネルレベルのスレッド

この場合、スレッド管理はカーネルによって行われます。 アプリケーション領域にスレッド管理コードはありません。 カーネルスレッドは、オペレーティングシステムによって直接サポートされています。 任意のアプリケーションをマルチスレッドにプログラムできます。 アプリケーション内のすべてのスレッドは、単一のプロセス内でサポートされます。

カーネルは、プロセス全体およびプロセス内の個々のスレッドのコンテキスト情報を保持します。 カーネルによるスケジューリングは、スレッドごとに行われます。 カーネルは、カーネル空間でスレッドの作成、スケジューリング、管理を実行します。 カーネルスレッドは、通常、ユーザースレッドよりも作成と管理が遅くなります。

利点

  • カーネルは、複数のプロセス上の同じプロセスから複数のスレッドを同時にスケジュールできます。
  • プロセス内の1つのスレッドがブロックされている場合、カーネルは同じプロセスの別のスレッドをスケジュールできます。
  • カーネルルーチン自体はマルチスレッド化できます。

デメリット

  • カーネルスレッドは、通常、ユーザースレッドよりも作成と管理が遅くなります。
  • 同じプロセス内で1つのスレッドから別のスレッドに制御を転送するには、カーネルへのモード切り替えが必要です。

マルチスレッドモデル

一部のオペレーティングシステムは、ユーザーレベルのスレッドとカーネルレベルのスレッド機能を組み合わせて提供します。 Solarisは、この組み合わせアプローチの好例です。 複合システムでは、同じアプリケーション内の複数のスレッドが複数のプロセッサで並行して実行でき、ブロックシステムコールはプロセス全体をブロックする必要はありません。 マルチスレッドモデルは3つのタイプです

  • 多対多の関係。
  • 多対1の関係。
  • 1対1の関係。

多対多モデル

多対多モデルは、任意の数のユーザースレッドを同じ数または少ない数のカーネルスレッドに多重化します。

次の図は、6つのユーザーレベルのスレッドが6つのカーネルレベルのスレッドと多重化されている多対多のスレッドモデルを示しています。 このモデルでは、開発者は必要な数のユーザースレッドを作成し、対応するカーネルスレッドをマルチプロセッサマシン上で並行して実行できます。 このモデルは、同時実行で最高の精度を提供し、スレッドがブロッキングシステムコールを実行すると、カーネルは別のスレッドの実行をスケジュールできます。

多対多スレッドモデル

多対1モデル

多対1モデルは、多くのユーザーレベルのスレッドを1つのカーネルレベルのスレッドにマップします。 スレッド管理は、スレッドライブラリによってユーザー空間で行われます。 スレッドがブロッキングシステムコールを行うと、プロセス全体がブロックされます。 一度に1つのスレッドのみがカーネルにアクセスできるため、マルチプロセッサ上で複数のスレッドを並行して実行することはできません。

ユーザーレベルのスレッドライブラリが、システムがそれらをサポートしないような方法でオペレーティングシステムに実装されている場合、カーネルスレッドは多対1の関係モードを使用します。

多対1スレッドモデル

1対1モデル

ユーザーレベルのスレッドとカーネルレベルのスレッドは1対1の関係にあります。 このモデルは、多対1モデルよりも多くの同時実行性を提供します。 また、スレッドがブロッキングシステムコールを行ったときに別のスレッドを実行できます。 マイクロプロセッサ上で並列実行する複数のスレッドをサポートします。

このモデルの欠点は、ユーザースレッドを作成するには、対応するカーネルスレッドが必要になることです。 OS/2、Windows NT、およびWindows 2000は、1対1の関係モデルを使用します。

1対1のスレッドモデル

ユーザーレベルのスレッドとカーネルレベルのスレッドの違い

S.N. User-Level Threads Kernel-Level Thread
1 User-level threads are faster to create and manage. Kernel-level threads are slower to create and manage.
2 Implementation is by a thread library at the user level. Operating system supports creation of Kernel threads.
3 User-level thread is generic and can run on any operating system. Kernel-level thread is specific to the operating system.
4 Multi-threaded applications cannot take advantage of multiprocessing. Kernel routines themselves can be multithreaded.