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

スレッドとは何ですか?

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

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

スレッドは、 lightweight process。スレッドは、並列処理によってアプリケーションのパフォーマンスを向上させる方法を提供します。スレッドは、オーバーヘッドスレッドを削減することにより、オペレーティングシステムのパフォーマンスを向上させるソフトウェアアプローチを表しており、従来のプロセスと同等です。

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

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

SN 処理する
1 プロセスは重いか、リソースを大量に消費します。 スレッドは軽量で、プロセスよりも少ないリソースで済みます。
2 プロセスの切り替えには、オペレーティングシステムとの相互作用が必要です。 スレッドの切り替えは、オペレーティングシステムと対話する必要はありません。
3 複数の処理環境では、各プロセスは同じコードを実行しますが、独自のメモリとファイルリソースを持っています。 すべてのスレッドは、開いているファイルの同じセット、子プロセスを共有できます。
4 1つのプロセスがブロックされている場合、最初のプロセスのブロックが解除されるまで、他のプロセスは実行できません。 1つのスレッドがブロックされて待機している間、同じタスクの2番目のスレッドを実行できます。
5 スレッドを使用しない複数のプロセスは、より多くのリソースを使用します。 複数のスレッド化されたプロセスは、より少ないリソースを使用します。
6 複数のプロセスでは、各プロセスは他のプロセスから独立して動作します。 あるスレッドは、別のスレッドのデータを読み取り、書き込み、または変更できます。

スレッドの利点

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

スレッドの種類

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

  • User Level Threads −ユーザー管理スレッド。

  • Kernel Level Threads −オペレーティングシステムのコアであるカーネルに作用するオペレーティングシステム管理スレッド。

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

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

利点

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

短所

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

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

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

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

利点

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

短所

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

マルチスレッドモデル

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

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

多対多モデル

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

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

多対1モデル

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

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

1対1モデル

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

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

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

SN ユーザーレベルのスレッド カーネルレベルのスレッド
1 ユーザーレベルのスレッドは、作成と管理が高速です。 カーネルレベルのスレッドは、作成と管理に時間がかかります。
2 実装は、ユーザーレベルのスレッドライブラリによって行われます。 オペレーティングシステムは、カーネルスレッドの作成をサポートしています。
3 ユーザーレベルのスレッドは汎用であり、任意のオペレーティングシステムで実行できます。 カーネルレベルのスレッドは、オペレーティングシステムに固有です。
4 マルチスレッドアプリケーションは、マルチプロセッシングを利用できません。 カーネルルーチン自体はマルチスレッド化できます。