コンピュータ

プリエンプションとは

プリエンプション

プリエンプション(英:preemption)とは、複数のタスクを同時に実行するマルチタスク(マルチプログラミング)に対応したOSの制御機能のひとつで、実行状態のタスクを一旦停止して、実行可能状態に戻すこと(他のタスクを実行状態にする)ことをいいます。

タスクの状態遷移

タスクとは、コンピュータが処理する作業の最小単位のことです。タスクはコンピュータの頭脳である「CPU」が処理します。

生成されたタスクには次の3つの状態があります。

状態 説明
実行可能状態(READY) CPUの使用権が回ってくれば、いつでも実行できる状態。
実行状態(RUN) CPUの使用権が与えられ、実行中の状態。
待機状態(WAIT) 入力処理が発生したので、その終了を待っている状態。

ディスパッチとプリエンプション

タスクは次の図のように遷移します。生成されたタスクは「実行可能状態」となり順番待ち、順番が回ってきたら「実行状態」となりタスクを実行、タスクの実行が終わったらタスクは消滅します。

タスクの状態遷移図

「実行可能状態」のタスクにCPUの使用権を割り当て「実行状態」にすることをディスパッチといい、逆に「実行状態」のタスクを一旦停止して「実行可能状態」に戻すことをプリエンプションといいます。

プリエンプティブとノンプリエンプティブ

複数のタスクを同時に実行するマルチタスク(マルチプログラミング)では、CPUにどのタスクを処理させるか、タスクの実行順序を定める必要があります。これをタスクスケジューリングといいます。

タスクスケジューリングには、プリエンプションを利用する(実行の途中でCPUの使用権を奪うことができる)「プリエンプティブ」と、プリエンプションを利用しない(実行の途中でCPUの使用権を奪うことができない)「ノンプリエンプティブ」の方式があります。