以下に示す比較表を使用して、プリエンプティブスケジューリングと非プリエンプティブスケジューリングの違いを簡単に説明しましょう。
比較表
比較基準 | プリエンプティブスケジューリング | 非プリエンプティブスケジューリング |
---|---|---|
基本 | リソースは限られた時間の間プロセスに割り当てられます。 | リソースがプロセスに割り当てられると、プロセスはバースト時間が完了するまで待機するか、待機状態に切り替わります。 |
割り込み | 途中で処理が中断されることがあります。 | プロセスは、終了するか待機状態に切り替わるまで中断できません。 |
飢餓 | 優先順位の高いプロセスが実行可能キューに頻繁に到着すると、優先順位の低いプロセスが不足する可能性があります。 | バースト時間が長いプロセスがCPUを実行している場合、CPUバースト時間が短い別のプロセスが枯渇する可能性があります。 |
オーバーヘッド | プリエンプティブスケジューリングはプロセスのスケジューリングにオーバーヘッドがあります。 | 非プリエンプティブスケジューリングにはオーバーヘッドがありません。 |
柔軟性 | プリエンプティブスケジューリングは柔軟です。 | 非プリエンプティブスケジューリングは厳格です。 |
コスト | プリエンプティブスケジューリングはコストに関連しています。 | 非プリエンプティブスケジューリングはコストアソシアティブではありません。 |
プリエンプティブスケジューリングの定義
プリエンプティブスケジューリングは、プロセスが実行状態から準備完了状態に、または待機 状態から準備完了状態に切り替わるときに実行 できるものです 。 ここでは、リソース(CPUサイクル)が限られた時間の間プロセスに割り当てられてから取り除かれ、まだCPUバースト時間が残っている場合、プロセスは再び作動可能キューに戻されます。 プロセスは、次に実行する機会が得られるまで、準備完了キューに留まります。
優先順位の高いプロセスがレディキューに到着した場合、現在のプロセスがバースト時間を完了するのを待つ必要はありません。 代わりに、現在のプロセスは実行の途中で中断され、優先順位の高いプロセスがCPUサイクルを利用するまでレディキューに置かれます。 このように、レディキュー内の各プロセスは、CPUを実行するための時間がかかります。 プリエンプティブスケジューリングは柔軟になりますが、プロセスを実行状態から準備完了状態に変更して万が一になった場合のオーバーヘッドが増加します。
プリエンプティブスケジューリングに取り組むアルゴリズムはラウンドロビンです。 最短ジョブ優先(SJF)および優先順位スケジューリングは、プリエンプティブスケジューリングの対象になる場合とされない場合があります。
下の図を見て、プリエンプティブスケジューリングの例を見てみましょう。 P0、P1、P2、P3という4つのプロセスがあります。 そのうち、P2は時間0に到着します。そのため、キューに他のプロセスがないため、CPUはプロセスP2に割り当てられます。 その間、P2は実行中であり、P3は時間1に到達し、今やプロセスP2の残り時間(5ミリ秒)であり、これはP3によって必要とされる時間(4ミリ秒)より大きい。 そのため、CPUはプロセッサP3に割り当てられます。
非プリエンプティブスケジューリングの定義
非プリエンプティブスケジューリングは、プロセスが終了したとき、またはプロセスが実行中から待機状態に切り替わったときに適用できるものです。 非プリエンプティブスケジューリングでは、リソース(CPU)がプロセスに割り当てられると、プロセスは終了するか待機状態になるまでCPUを保持します。
プリエンプティブスケジューリングとは異なり、非プリエンプティブスケジューリングは実行の途中でCPUを実行しているプロセスを中断しません。 代わりに、プロセスがCPUバースト時間を完了するのを待ってから、CPUを別のプロセスに割り当てます。
ノンプリエンプティブスケジューリングでは、長いCPUバースト時間を持つプロセスが実行中の場合、他のプロセスは長時間待機する必要があるため、レディキュー内のプロセスの平均待機時間が長くなります。 ただし、非プリエンプティブスケジューリングでは、プロセスをレディキューからCPUに切り替えるオーバーヘッドはありませんが、実行中のプロセスが優先順位の高いプロセスでも横取りされないため、スケジューリングが困難になります。
プリエンプティブスケジューリングと非プリエンプティブスケジューリングの主な違い
- プリエンプティブスケジューリングと非プリエンプティブスケジューリングの基本的な違いは、プリエンプティブスケジューリングではCPUが限られた時間の間プロセスに割り当てられることです。 ノンプリエンプティブスケジューリングでは、CPUはプロセスが終了するか待機状態に切り替わるまでプロセスに割り当てられます。
- プリエンプティブスケジューリングの実行プロセスは実行の途中で中断されますが、非プリエンプティブスケジューリングの実行プロセスは実行の途中で中断されません 。
- プリエンプティブスケジューリングには、プロセスを実行可能状態から実行状態に切り替えること、万が一に備えて、実行可能キューを維持することのオーバーヘッドがあります。 一方、非プリエンプティブスケジューリングでは、プロセスを実行状態から準備完了状態に切り替えるオーバーヘッドはありません 。
- プリエンプティブスケジューリングでは、優先順位の高いプロセスが実行可能キューに頻繁に到着すると、優先順位の低いプロセスは長い間待たなければならず、飢餓状態になる可能性があります。 一方、非プリエンプティブスケジューリングでは、CPUがより大きなバースト時間を持つプロセスに割り当てられている場合、小さなバースト時間を持つプロセスが不足する可能性があります。
- 重要なプロセスは、実行中のプロセスに関係なく、レディキューに到着したときにCPUにアクセスできるため、プリエンプティブスケジューリングは非常に柔軟です。 クリティカルなプロセスがレディキューに入っても、CPUを実行しているプロセスが妨害されないため、非プリエンプティブスケジューリングは厳密です。
- プリエンプティブスケジューリングは、非プリエンプティブスケジューリングの場合とは異なり、共有データの整合性を維持する必要があるため、コスト結合です。
結論:
プリエンプティブスケジューリングが非プリエンプティブスケジューリングや万力逆転より優れているというわけではありません。 すべてスケジューリングがプロセスの平均待機時間を最小化し、CPU使用率を最大化する方法に依存します。