コントテキスト切り替えとは、実行状態のタスクを切り替えることです。切り替えの方式には、プリエンプティブ、ノンプリエンプティブ方式があります。
1:プリエンプティブ方式
「待ち時間(タイムスライス)切れ」や「優先度の高いタスク」が実行可能状態になった」というきっかけで、OSが強制的に介入し、実行状態のタスクを別のタスクに切り替える方式です。このようなきっかけをプリエンプションと言います。
OSが強制的に介入してタスクを切り替えるため、タスクが異常な動作(暴走)をしたとしても、他のタスクに切り替わります。この結果、他のタスクは何事もなく実行状態に移り、処理が進みます。つまり、あるタスクがプログラムの不備(バグ)により暴走したとしても、他のタスクには何も影響を与えず、システム全体が停止してしまうような事態にはなりません。
現在、私たちが利用しているOS(Windows、MacOS、Linuxなd)は、プリエンプティブ方式を採用しています。
2:ノンプリエンプティブ方法式
タスクが自らCPUを手放して、タスクを切り替える方式です。OSが強制的に介入する仕組みを実装しなくて良い分、OS本体を簡略化できます。
一方、タスクが異常な動作(暴走)をすると、みずからCPUを手放すことは無くなりますから、他のタスクは実行状態に移れなくなります。この結果、あるタスクがプログラムの不備(バグ)により暴走すると、システム全体が停止てしまう状態となります。