プリエンプティブと協調型マルチタスクの主な違いは、プリエンプティブマルチタスクでは、オペレーティングシステムが実行中のプロセスから別のプロセスへのコンテキストスイッチを開始できるのに対し、協調型マルチタスクでは、オペレーティングシステムが実行中のプロセスから別のプロセスへのコンテンツスイッチを開始しない点です。
マルチタスクとは、複数のタスクまたはプロセスを一定期間にわたって同時に実行する方法論です。
最近のほとんどのOSは、CPUを最大限に活用するためにマルチタスクに対応しています。
マルチタスクには、プリエンプティブマルチタスクと協調型マルチタスクの2種類があります。
プリエンプティブ・マルチタスキングとは?
プリエンプティブマルチタスクでは、オペレーティングシステムは実行中のプロセスから他のプロセスへのコンテキストスイッチを開始することができます。
言い換えれば、OSは現在実行中のプロセスの実行を停止して、CPUを他のプロセスに割り当てることができます。
OSは、あるプロセスがどれくらいの時間実行してから、他のプロセスがOSを使用できるようにするか、何らかの基準で決定する。
あるプロセスからOSの制御を奪い、別のプロセスに与える仕組みをプリエンプト(先取り)またはプリエンプション(先取り)という。
オペレーティングシステムの中には、プロセスに優先順位を与えるものがあります。
そのような状況では、優先順位の高いプロセスが優先順位の低いプロセスより先に実行される。
優先順位の高いプロセスは、開始されるとすぐに制御を得ることができます。
さらに、これらのプロセスは、実行するための長い時間スライスを得るかもしれません。
協調型マルチタスクとは?
協調型マルチタスクとは、プリエンプティブマルチタスクの別称です。
このマルチタスクでは、オペレーティングシステムは実行中のプロセスから他のプロセスへのコンテキストスイッチを決して行いません。
複数のアプリケーションを同時に実行できるように、プロセスが定期的に自発的に制御を譲るか、アイドル時や論理的にブロックされた場合にのみ、コンテキストスイッチが発生します。
また、このマルチタスクでは、スケジューリング方式が機能するように、すべてのプロセスが協調して動作します。
協調型マルチタスクでは、OSのプロセススケジューラを協調型スケジューラと呼びます。
アプリケーションの実装をよりシンプルにすることができる。
通常、大規模で複雑なシステムで協調型マルチタスクが使われることはほとんどない。
しかし、PythonやJavaScriptなどのプログラミング言語では、実行時にシングルスレッドでイベントループを組んで使用されている。
プリエンプティブマルチタスクとコーペラティブマルチタスクの違い
定義
プリエンプティブマルチタスクとは、OSがあるタスクをどれだけの時間実行してから他のタスクに使わせるかを決めるタスクのことである。
一方、協調型マルチタスクとは、OSが実行中のプロセスから他のプロセスへのコンテキストスイッチを決して起こさないコンピュータのマルチタスクの一種である。
したがって、これがプリエンプティブマルチタスクと協調型マルチタスクの主な違いです。
制御
また、プリエンプティブマルチタスクでは、アプリケーションに割り込んで、アプリケーションの制御外の他のプロセスに制御を委ねるが、協調型マルチタスクでは、プロセススケジューラが不意にプロセスに割り込むことがない。
これがプリエンプティブマルチタスクと協調型マルチタスクの重要な違いです。
例
UNIX、Windows 95、Windows NTはプリエンプティブマルチタスク、Macintosh OSバージョン8.0-9.2.2、Windows 3.xは協調型マルチタスクのOSの例です。
結論
簡単に説明すると、マルチタスクにはプリエンプティブマルチタスクと協調型マルチタスクの2種類があります。
プリエンプティブと協調型マルチタスクの主な違いは、プリエンプティブマルチタスクではOSが実行中のプロセスから他のプロセスへのコンテキストスイッチを開始できるのに対し、協調型マルチタスクではOSが実行中のプロセスから他のプロセスへのコンテキストスイッチを開始しない点です。