オペレーティング システムにおけるコンテキスト スイッチングとは
オペレーティング システムでは、実行状態にあるプロセスをレディ状態や待機/ブロック状態など別の状態に戻す必要がある場合があります。 実行中のプロセスが何らかの I/O 操作を行いたい場合、そのプロセスを実行状態から取り除き、そのプロセスを I/O キューに入れなければなりません。 また、ラウンドロビンスケジューリングで、一定時間ごとにプロセスを実行状態からレディ状態に戻すこともあります。 このようなプロセスの切り替えは、コンテキストスイッチの助けを借りて行われます。 このブログでは、オペレーティングシステムにおけるコンテキストスイッチの概念について学び、またコンテキストスイッチの利点と欠点についても学びます。 それでは、始めましょう。
Context Switching とは何ですか?
コンテキスト スイッチングとは、CPU をあるプロセスまたはタスクから別のプロセスに切り替える処理のことです。 この現象では、実行状態にあるプロセスの実行がカーネルによって中断され、準備状態にある別のプロセスがCPUによって実行される。
マルチタスクOSの必須機能の1つである。 プロセスは非常に高速に切り替えられるので、ユーザーにはすべてのプロセスが同時に実行されているように錯覚します。
しかし、コンテキスト切り替えプロセスには、従わなければならない多くのステップがありました。 プロセスを実行状態から準備完了状態に直接切り替えることはできません。 そのプロセスのコンテキストを保存する必要があります。 もしプロセスPのコンテキストを保存していなければ、しばらくしてプロセスPが再び実行のためにCPUに入ってきたとき、そのプロセスは最初から実行し始めることになる。 しかし、実際には、前回の実行でCPUから離れたところから継続するはずです。 そこで、他のプロセスを実行状態にする前に、プロセスのコンテキストを保存しておく必要がある。
コンテキストとは、任意の時点におけるCPUのレジスタとプログラムカウンタの内容である。 コンテキストの切り替えは、次のような理由で起こることがあります。
- 優先度の高いプロセスがレディ状態になったとき。
- 割り込みが発生した場合、実行中のプロセスを停止させ、CPUは割り込みを処理してから他の処理を行う必要があります。
- ユーザーモードとカーネルモード間の移行が必要な場合は、コンテキストスイッチを実行する必要があります。
コンテキストスイッチに関わるステップ
コンテキストスイッチのプロセスには、いくつかのステップがあります。 次の図は、2 つのプロセス P1 と P2 の間のコンテキスト スイッチングのプロセスを示しています。
上の図では、最初に、プロセス P1 が実行状態、プロセス P2 が準備状態であることがわかります。 今、いくつかの中断が発生したときに、コンテキストを保存した後、プロセスP1を実行からレディ状態に、プロセスP2をレディ状態から実行状態に切り替える必要があります。 以下の手順が実行されます:
- Firstly, the context of the process P1 i.e. present in the running state will be saved in the Process Control Block of process P1 i.e. PCB1.
- Now, you have to move the PCB1 to the relevant queue i.e., then you have to the process P1 to the existing in the running state, now.
- Ready 状態から、実行する新しいプロセス、つまりプロセス P2 を選択します。
- Running にプロセス状態を設定し、プロセス P2 すなわち PCB2 のプロセスコントロールブロックを更新します。 プロセスP2が以前にCPUによって実行された場合、最後に実行された命令の位置を取得し、P2の実行を再開できます。
- 同様に、プロセスP1を再び実行したい場合、上記(ステップ1~4)と同じ手順を踏む必要があります。
コンテキストスイッチを行うには、一般に少なくとも2つのプロセスが必要であり、ラウンドロビンアルゴリズムの場合は、1つのプロセスだけでコンテキストスイッチを行うことができる。
コンテキストスイッチの利点
コンテキストスイッチは、マルチタスク、すなわち時間共有を伴うマルチプログラミングを実現するために使用される(マルチタスクについて詳しくはこちら)。 マルチタスクは、あたかも複数のプロセスが同時に実行されているかのようにユーザーに錯覚させる。 しかし、実際には、1つのプロセッサがある瞬間に実行しているタスクは1つだけです。 ここでは、コンテキストの切り替えが非常に速いため、ユーザーは CPU が同時に複数のタスクを実行していると感じます。
The disadvantage of Context Switching
The disadvantage of context switching is it requires some time for context switching i.e. context switching time. 実行状態にあるプロセスのコンテキストを保存し、次に実行状態になろうとしている別のプロセスのコンテキストを取得するために時間が必要である。 この間、ユーザーから見て、CPUが行う有益な作業はない。 そのため、この条件下では、コンテキスト切り替えは純粋なオーバーヘッドとなります。
以上が今回のブログの内容です。 このブログを楽しんでいただければ幸いです。