プリエンプティブおよび非プリエンプティブのスケジューリング
プリエンプティブ スケジューリングと非プリエンプティブ スケジューリングの主な違い
- プリエンプティブ スケジューリングでは、CPU は特定の期間プロセスに割り当てられ、非プリエンプティブ スケジューリング CPU はプロセスが終了するまでプロセスに割り当てられます。
- プリエンプティブ スケジューリングでは、優先度に基づいてタスクが切り替えられますが、ノンプリエンプティブ スケジューリングでは切り替えは行われません。
- プリエンプティブ アルゴリズムにはプロセスを準備完了状態から実行状態に切り替えるオーバーヘッドがありますが、ノンプリエンプティブ スケジューリングにはそのような切り替えオーバーヘッドがありません。
- プリエンプティブ スケジューリングは柔軟ですが、ノンプリエンプティブ スケジューリングは厳格です。

プリエンプティブ スケジューリングとは
プリエンプティブ スケジューリングは、ほとんどのタスクに優先順位が割り当てられるスケジューリング方法です。 場合によっては、たとえ優先度の低いタスクがまだ実行中であっても、優先度の高いタスクを別の優先度の低いタスクの前に実行することが重要である場合があります。
このとき、優先度の低いタスクはしばらく保持され、優先度の高いタスクの実行が終了すると再開されます。
非プリエンプティブ スケジューリングとは
このタイプのスケジューリング方法では、CPU が特定のプロセスに割り当てられます。 CPU をビジー状態に保つプロセスは、コンテキストを切り替えるか終了することによって CPU を解放します。
これは、さまざまなハードウェア プラットフォームで使用できる唯一の方法です。 これは、プリエンプティブ スケジューリングのような特殊なハードウェア (タイマーなど) が必要ないためです。
非プリエンプティブ スケジューリングは、プロセスが自発的に待機状態になるか終了するときに発生します。
プリエンプティブ スケジューリングと非プリエンプティブ スケジューリング: 比較表
ここでは、プリエンプティブ スケジューリングと非プリエンプティブ スケジューリングの直接比較を示します。 OS のプリエンプティブ スケジューリングと非プリエンプティブ スケジューリングの主な違いは次のとおりです。
プリエンプティブ スケジューリング | 非プリエンプティブ スケジューリング |
---|---|
プロセッサは、現在のプロセス実行の途中で別のプロセスを実行するためにプリエンプトできます。 | プロセッサが実行を開始したら、他のプロセッサを実行する前にそれを終了する必要があります。 途中で一時停止することはできません。 |
CPU 使用率は、ノンプリエンプティブ スケジューリングと比較して効率的です。 | CPU 使用率は、プリエンプティブ スケジューリングに比べて効率が低くなります。 |
プリエンプティブ スケジューリングの待ち時間と応答時間が短くなります。 | 非プリエンプティブ スケジューリング方法の待機時間と応答時間は長くなります。 |
プリエンプティブ スケジューリングが優先されます。 最も優先度の高いプロセスは、現在使用されているプロセスです。 | いずれかのプロセスが実行状態になると、ジョブが終了するまでそのプロセスの状態はスケジューラから削除されません。 |
プリエンプティブ スケジューリングは柔軟です。 | 非プリエンプティブなスケジューリングは厳格です。 |
例: – 残り時間の短い順、ラウンドロビンなど。 | 例: 先着順、最短ジョブ優先、優先スケジュールなど。 |
プリエンプティブ スケジューリング アルゴリズムはプリエンプトすることができ、プロセスをスケジュールすることができます。 | 非プリエンプティブスケジューリングではプロセスをスケジュールできません |
このプロセスでは、CPU が一定期間プロセスに割り当てられます。 | このプロセスでは、プロセスが終了するか待ち状態に移行するまで CPU が割り当てられます。 |
プリエンプティブ アルゴリズムには、プロセスを準備完了状態から実行状態に、またはその逆に切り替えるオーバーヘッドがあります。 | ノンプリエンプティブ スケジューリングには、プロセスを実行状態から準備完了状態に切り替えるオーバーヘッドがありません。 |
プリエンプティブ スケジューリングの利点
プリエンプティブ スケジューリング方式の長所/利点は次のとおりです。
- プリエンプティブ スケジューリング方法はより堅牢であり、XNUMX つのプロセスが CPU を独占することができません。
- 実行タスクの選択は、中断されるたびに再検討されます。
- 各イベントにより実行中のタスクが中断されます
- OS は、実行中のすべてのプロセスで CPU 使用率が同じになるようにします。
- この場合、CPU の使用量は同じです。つまり、実行中のすべてのプロセスが均等に CPU を使用します。
- このスケジューリング方法では、平均応答時間も即興で計算されます。
- プリエンプティブ スケジューリングは、マルチプログラミング環境で使用すると有益です。
ノンプリエンプティブスケジューリングの利点
ノンプリエンプティブ スケジューリング方法の長所/利点は次のとおりです。
- スケジューリングのオーバーヘッドが低い
- 高スループットを実現する傾向がある
- 概念的には非常に単純な方法です
- Less スケジューリングに必要な計算リソース
プリエンプティブ スケジューリングの欠点
プリエンプティブ スケジューリングの欠点は次のとおりです。
- スケジューリングに必要な計算リソースは限られています
- スケジューラが実行中のタスクを一時停止し、コンテキストを切り替え、新しい受信タスクをディスパッチするのに時間がかかります。
- 優先度の高いプロセスが連続して到着すると、優先度の低いプロセスの待ち時間が長くなります。
非プリエンプティブ スケジューリングの欠点
ノンプリエンプティブ スケジューリング方法の短所/欠点は次のとおりです。
- 特にリアルタイムのタスクでは飢餓につながる可能性があります
- バグによりマシンがフリーズする可能性がある
- それはリアルタイムで行うことができ、 優先スケジューリング 難しい
- プロセスの応答時間が遅い
ノンプリエンプティブスケジューリングの例
非プリエンプティブ SJF スケジューリングでは、CPU サイクルがプロセスに割り当てられると、プロセスは待機状態に達するか終了するまでそのサイクルを保持します。
それぞれ独自のバースト時間と到着時間を持つ次の 5 つのプロセスについて考えます。
プロセスキュー | バースト時間 | 到着時刻 |
---|---|---|
P1 | 6 | 2 |
P2 | 2 | 5 |
P3 | 8 | 1 |
P4 | 3 | 0 |
P5 | 4 | 4 |
ステップ0) time=0 で、P4 が到着し、実行を開始します。
ステップ1) 時刻 = 1 に、プロセス P3 が到着します。 ただし、P4 を完了するにはまだ 2 つの実行ユニットが必要です。 実行を継続します。
ステップ2) 時間 =2 にプロセス P1 が到着し、待機キューに追加されます。 P4 は実行を継続します。
ステップ3) 時間 = 3 で、プロセス P4 は実行を終了します。 P3とP1のバースト時間を比較します。 プロセス P1 は、P3 に比べてバースト時間が短いため実行されます。
ステップ4) 時刻 = 4 で、プロセス P5 が到着し、待機キューに追加されます。 P1 は実行を継続します。
ステップ5) 時刻 = 5 で、プロセス P2 が到着し、待機キューに追加されます。 P1 は実行を継続します。
ステップ6) 時刻 = 9 で、プロセス P1 は実行を終了します。 P3、P5、P2のバースト時間を比較します。 プロセス P2 はバースト時間が最も短いため実行されます。
ステップ7) time=10 では、P2 が実行中で、P3 と P5 は待機キューに入っています。
ステップ8) 時刻 = 11 で、プロセス P2 は実行を終了します。 P3とP5のバースト時間を比較します。 プロセス P5 はバースト時間が短いため実行されます。
ステップ9) 時刻 = 15 で、プロセス P5 は実行を終了します。
ステップ10) 時刻 = 23 で、プロセス P3 は実行を終了します。
ステップ11) 上の例の平均待ち時間を計算してみましょう。
Wait time P4= 0-0=0 P1= 3-2=1 P2= 9-5=4 P5= 11-4=7 P3= 15-1=14 Average Waiting Time= 0+1+4+7+14/5 = 26/5 = 5.2
プリエンプティブなスケジューリングの例
次の3つのプロセスを検討してください ラウンドロビン
プロセスキュー | バースト時間 |
---|---|
P1 | 4 |
P2 | 3 |
P3 | 5 |
ステップ1) 実行は、バースト時間 1 のプロセス P4 から始まります。ここでは、すべてのプロセスが 2 秒間実行されます。 P2 と P3 はまだ待機キューにあります。
ステップ 2) 時間 =2 で、P1 がキューの最後に追加され、P2 が実行を開始します。
ステップ3) time=4 で、P2 がプリエンプトされ、キューの最後に追加されます。 P3 が実行を開始します。
ステップ4) time=6 で、P3 がプリエンプトされ、キューの最後に追加されます。 P1 が実行を開始します。
ステップ5) time=8 では、P1 のバースト時間は 4 です。実行が完了しています。 P2 が実行を開始します
ステップ6) P2 のバースト時間は 3 です。すでに 2 インターバルにわたって実行されています。 time=9 で、P2 は実行を完了します。 次に、P3 は完了するまで実行を開始します。
ステップ7) 上の例の平均待ち時間を計算してみましょう。
Wait time P1= 0+ 4= 4 P2= 2+4= 6 P3= 4+3= 7