ウィキペディアは次のように述べています。
コンピューティングにおけるプリエンプションとは、コンピューター システムによって実行されているタスクを、その協力を必要とせずに、後で再開することを意図して一時的に中断する行為です。
他の情報源は次のように述べています。
[...] プリエンプションとは、プロセッサをあるプロセスから強制的に奪い、別のプロセスに割り当てることを意味します。[オペレーティング システム (Self Edition 1.1)、Sibsankar Haldar ]
プログラムのプリエンプションは、実行中に割り込みが発生し、スケジューラが実行のために他のプログラムを選択したときに発生します。[オペレーティング システム: 概念ベースのアプローチ、2E、DM Dhamdhere ]
したがって、私が理解したのは、プロセスが (ハードウェア割り込み、つまり I/O 割り込みまたはタイマー割り込みによって) 中断され、割り込みを処理した後に呼び出されたスケジューラが実行する別のプロセスを選択した場合、プロセスのプリエンプションがあるということです( CPU スケジューリング アルゴリズム)。スケジューラーが中断されたプロセスを選択した場合、プロセスのプリエンプションはありません (割り込みが必ずしもプリエンプションを引き起こすとは限りません)。
しかし、次の方法でプリエンプションを定義する他の多くの情報源を見つけました。
プリエンプションとは、プログラムから CPU の割り当てを強制的に解除することです。[オペレーティング システム: 概念ベースのアプローチ、2E、DM Dhamdhere ]
同じ本がプリエンプションの 2 つの異なる定義を報告していることがわかります。後者では、CPU を別のプロセスに割り当てる必要があることは言及されていません。この定義によれば、プリエンプションは「中断」の別名にすぎません。ハードウェア割り込みが発生すると、プロセスが中断される (「実行中」状態から「準備完了」状態に切り替わる) か、横取りされます。
だから私の質問は: 2 つの定義のどちらが正しいですか? 私はかなり混乱しています。