私のオペレーティングシステムの教科書には、次のように記載されています。
割り込みにより、オペレーティングシステムはCPUコアを現在のジョブからカーネルルーチンの実行に変更します。 CPUコアを別のプロセスに切り替えるには、現在のプロセスの状態保存と他のプロセスの状態復元を実行する必要があります。これをコンテキスト遷移と呼びます。
この観点からは、中断によりコンテキスト遷移が生じることを容易に理解することができる。割り込みがコンテキスト切り替えの唯一の方法ですか?それとも中断することなく状況を切り替えることができますか?コンテキスト切り替えはスレッドとプロセスのコンテキストでのみ機能しますか?
ベストアンサー1
カーネルコードが特権プロセッサモードで実行されている場合、オペレーティングシステムは到達方法に関係なくコンテキスト切り替えを実行できます。
書籍の書き込み中に割り込みがCPUコアに到達すると、これが発生する可能性があります。これにより、カーネルは特権モードに変更され、カーネルがインストールした適切な割り込みハンドラを実行します。その後、カーネルは他のプロセス/スレッドのコンテキストに切り替えるか、中断された操作で制御を返すことを決定できます。妨害だけが唯一の方法です。無意識に実行中のジョブを交換します。
コンテキスト切り替えが発生する別の方法は、操作がシステムコールを実行するときです(例:sched_yield
recv
など)は、sched_yield
CPUを他のジョブに譲渡するようにカーネルに直接要求しますが、recv
たとえば、システムがまだデータの受信を待たなければならない場合、コンテキスト切り替えが発生する可能性があります。
コンテキスト切り替えはスレッドとプロセスのコンテキストでのみ機能しますか?
コンテキストスイッチは、あるタスクの状態を保存し、他のタスクの状態を復元し、タスクはしばしば「スレッド」と呼ばれ、一部の共通状態を持つスレッドグループはしばしば「プロセス」と呼ばれるため、コンテキストスイッチと言うのが妥当です。オペレーティングシステムレベルで常にスレッドとプロセス間で行われます。ただし、この用語は時々繰り返し使用されます。グリーンラインユーザー空間で。