CPU スケジューリングの基本単位はスレッドです。スレッドは、オペレーティング システムが操作のスケジューリングを実行できる最小単位です。
#スレッドとは、プロセス内の単一の順次制御フローを指します。プロセス内では複数のスレッドを同時に実行でき、各スレッドは異なるタスクを並行して実行します。 Unix System V や SunOS では軽量プロセスとも呼ばれますが、軽量プロセスはカーネル スレッドを指し、ユーザー スレッドはスレッドと呼ばれます。 (推奨学習: Web フロントエンド ビデオ チュートリアル )
CPU スケジューラ
CPU がアイドル状態のときは常に、操作を実行するプロセスを準備完了キューに入れます。プロセスの選択は短期スケジューラまたは CPU スケジューラによって実行されます。スケジューラはカーネルから実行可能なプロセスを選択し、それに CPU を割り当てます。
レディキューは先入れ先出し (FIFO) キューである必要はありません。レディ キューは、FIFO キュー、優先キュー、ツリー、または単純な順序なしリンク リストとして実装できます。ただし、概念的には、レディ キュー内のすべてのプロセスはキューに入れられ、CPU での実行を待機します。キュー内のレコードは通常、プロセス制御ブロック (PCB) です。
プリエンプティブ スケジューリング
CPU スケジューリングの決定は、次の 4 つの環境で発生する可能性があります。
プロセスが実行中から変更されたときstate 待機状態に切り替えます (たとえば、I/O 要求、または wait を呼び出して子プロセスの終了を待機します)。
プロセスが実行状態から準備完了状態に切り替わったとき (たとえば、割り込みが発生したとき)
プロセスが待機状態から準備完了状態に切り替わったとき (たとえば、I /O is completed)
プロセスが終了した場合
ケース 1 と 4 については、スケジュールするしかありません。新しいプロセス (プロセスがすでに準備完了キューに存在する場合) を実行のために選択する必要があります。ただし、ケース 2 と 3 の場合は選択の余地があります。
スケジューリングが 1 番目と 4 番目の状況でのみ発生する場合、そのスケジューリング プランは非プリエンプティブまたは協調的と呼ばれます。それ以外の場合、スケジューリング プランはプリエンプティブと呼ばれます。)。非プリエンプティブ スケジューリングでは、CPU がプロセスに割り当てられると、プロセスが終了するか待機状態に切り替わるまで、プロセスは常に CPU を使用します。
割り込みはいつでも発生する可能性があり、カーネルが常に無視できるわけではないため、割り込みの影響を受けるコード セグメントは同時アクセスから保護する必要があります。これらのコード セグメントが複数のプロセスによって同時にアクセスされるのを防ぐために、開始時に割り込みを無効にし、終了時に割り込みを再度有効にする必要があります。
以上がプロセッサのスケジューリングの最小単位の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。