なぜスレッドを導入するのか?
従来のプロセスは一連のプログラムをシリアルに実行することしかできず、スレッドによって同時実行性が向上します。同じプロセスが複数のスレッドに分割されます。
スレッドは、スケジューリングの基本単位であり、プログラム実行フローの最小単位であり、CPU の基本実行単位です。
プロセスはリソース割り当ての基本単位です。
スレッドの実装方法
ユーザーレベルのスレッド
コード内でスレッド ライブラリを使用して実装されたスレッドの場合、オペレーティング システムは依然としてプロセスのみを認識します。
利点: ユーザーレベルのスレッドを管理するオーバーヘッドは小さく、ユーザー モードとカーネル モードを切り替える必要はありません。
欠点: 1 つのスレッドがブロックされると、プロセス全体がブロックされ、並列処理が低下します。
カーネルレベルのスレッド
オペレーティング システム カーネルは、コア状態で完了する必要があるカーネル レベルのスレッドを管理します。スレッドは、オペレーティング システム カーネルの観点から見ることができます。
前者とはメリットとデメリットが逆になります。
カーネルレベルのスレッドはプロセッサの割り当て単位です。
マルチスレッドモデル
ユーザーレベルのスレッドは「コードロジック」のキャリアです
カーネルレベルのスレッドは「実行機会」を伝達します。
スレッドの状態と遷移はプロセスと同じです
TCB (スレッド制御ブロック)
スレッド識別子TID、プログラムカウンタPC、その他レジスタ、スタックポインタ、スレッド実行ステータス、優先度。
スレッドテーブル:複数のTCBを格納するテーブル