8

ウィキペディアは次のように述べています。

コンピューティングにおけるプリエンプションとは、コンピューター システムによって実行されているタスクを、その協力を必要とせずに、後で再開することを意図して一時的に中断する行為です。

他の情報源は次のように述べています。

[...] プリエンプションとは、プロセッサをあるプロセスから強制的に奪い、別のプロセスに割り当てることを意味します。[オペレーティング システム (Self Edition 1.1)、Sibsankar Haldar ]

プログラムのプリエンプションは、実行中に割り込みが発生し、スケジューラが実行のために他のプログラムを選択したときに発生します。[オペレーティング システム: 概念ベースのアプローチ、2E、DM Dhamdhere ]

したがって、私が理解したのは、プロセスが (ハードウェア割り込み、つまり I/O 割り込みまたはタイマー割り込みによって) 中断され、割り込みを処理した後に呼び出されたスケジューラが実行する別のプロセスを選択した場合、プロセスのプリエンプションがあるということです( CPU スケジューリング アルゴリズム)。スケジューラーが中断されたプロセスを選択した場合、プロセスのプリエンプションはありません (割り込みが必ずしもプリエンプションを引き起こすとは限りません)。

しかし、次の方法でプリエンプションを定義する他の多くの情報源を見つけました。

プリエンプションとは、プログラムから CPU の割り当てを強制的に解除することです。[オペレーティング システム: 概念ベースのアプローチ、2E、DM Dhamdhere ]

同じ本がプリエンプションの 2 つの異なる定義を報告していることがわかります。後者では、CPU を別のプロセスに割り当てる必要があることは言及されていません。この定義によれば、プリエンプションは「中断」の別名にすぎません。ハードウェア割り込みが発生すると、プロセスが中断される (「実行中」状態から「準備完了」状態に切り替わる) か、横取りされます。

だから私の質問は: 2 つの定義のどちらが正しいですか? 私はかなり混乱しています。

4

1 に答える 1

9

ウィキペディアの定義はかなり悪いです。他の定義はあまり良くありません。しかし、彼らは本質的に同じ考えを言っています。

プリエンプションは、オペレーティング システムが CPU で実行中のプロセスを変更する手段の 1 つにすぎません。

このような変更は、実行中のプロセスが自発的に CPU を譲ることによって、またはオペレーティング システムが実行中のプロセスを横取りすることによって発生する可能性があります。

プロセスの切り替え (コンテキスト切り替え) のメカニズムは、どちらの方法でも同じです。唯一の違いは、コンテキスト スイッチがトリガーされる方法です。

プロセスは、実行できなくなったときに自発的に CPU を解放できます。たとえば、ディスクへの I/O を実行した後 (完了するまでに時間がかかります)。一部のシステムは自発的譲歩 (協調的マルチタスキング) のみをサポートします。

プロセスがコンピューティング バウンドの場合、CPU を独占し、他のプロセスの実行を許可しません。ほとんどのオペレーティング システムでは、タイマー割り込みが使用されます。割り込みハンドラが、現在のプロセスが少なくとも指定された期間実行されていることを検出し、実行可能な他のプロセスがある場合、OS はプロセスを切り替えます。

プリエンプションは、プロセス (またはスレッド) 自体ではなく、オペレーティング システムによってトリガーされる CPU 上のプロセス (またはスレッド) [コンテキスト] スイッチです。

于 2016-04-30T21:21:37.113 に答える