プリエンプション
プリエンプション(英:preemption)とは、複数のタスクを同時に実行するマルチタスク(マルチプログラミング)に対応したOSの制御機能のひとつで、実行状態のタスクを一旦停止して、実行可能状態に戻すこと(他のタスクを実行状態にする)ことをいいます。
タスクの状態遷移
タスクとは、コンピュータが処理する作業の最小単位のことです。タスクはコンピュータの頭脳である「CPU」が処理します。
生成されたタスクには次の3つの状態があります。
状態 | 説明 |
実行可能状態(READY) | CPUの使用権が回ってくれば、いつでも実行できる状態。 |
実行状態(RUN) | CPUの使用権が与えられ、実行中の状態。 |
待機状態(WAIT) | 入出力処理が発生したので、その終了を待っている状態。 |
ディスパッチとプリエンプション
タスクは次の図のように遷移します。生成されたタスクは「実行可能状態」となり順番待ち、順番が回ってきたら「実行状態」となりタスクを実行、タスクの実行が終わったらタスクは消滅します。
「実行可能状態」のタスクにCPUの使用権を割り当て「実行状態」にすることをディスパッチといい、逆に「実行状態」のタスクを一旦停止して「実行可能状態」に戻すことをプリエンプションといいます。
プリエンプティブとノンプリエンプティブ
複数のタスクを同時に実行するマルチタスク(マルチプログラミング)では、CPUにどのタスクを処理させるか、タスクの実行順序を定める必要があります。これをタスクスケジューリングといいます。
タスクスケジューリングには、プリエンプションを利用する(実行の途中でCPUの使用権を奪うことができる)「プリエンプティブ」と、プリエンプションを利用しない(実行の途中でCPUの使用権を奪うことができない)「ノンプリエンプティブ」の方式があります。
helpful
この記事は役に立ちましたか?