ノンプリエンプティブマルチタスクとは

ノンプリエンプティブマルチタスク(non preemptive multitask)とは、CPUの管理をOSが行わず、各アプリケーションが自ら切換えする方式のこと。

ノンプリエンプティブマルチタスクは、古いOSで採用されていたマルチタスクの一種である。同時に二つ以上の処理を進行させるための仕組みである。シングルコアでCPUを一つしか持たないコンピュータは同時に複数処理を完全に遂行することはできない。しかしタスクを小刻みに分けて順番に処理させることで、同時に処理できているような現象が起こる。

ノンプリエンプティブマルチタスクでは、CPUへの空き時間が発生した場合、各アプリケーションが自らリソース(ここではCPUのこと)を開放し、他のアプリケーションへその使用を譲るというふうにプログラムされている。そのため、並行作業が可能となる。

しかし、ノンプリエンプティブマルチタスクだと、リソースの制御が完全にアプリケーションへ委ねられる。委ねられると何が問題なのかというと、リソースをなかなか開放しないアプリが出てくるからだ。解放してくれないと、他のアプリに権限が移行しないため、作業が滞ることになる。古いMacやWindows3x系から98の16ビット及びそのアプリなどはこのノンプリエンプティブマルチタスクを採用していた。

そこで、ノンプリエンプティブマルチタスクと対比されるプリエンプティブマルチタスクが登場した。こちらはリソースの管理をOSが行う。優先度の高いタスクが出現すると、強制的にソフトウェアからタスク実行の権限を奪い、優先度順に作業させていくというものである。割り込みハンドラともいえる。Windows95の32ビット及びそのソフトウェア以降は、ノンプリエンプティブマルチタスクではなく、こちらを採用している。また、これによって一つのソフトウェアがリソースを独占するといった不具合も解消された。

CPU状態の保存や復元による切り替えを行うコンテキストスイッチも関わっており、これはLinuxカーネルでサポートしているようだ。

ノンプリエンプティブマルチタスクの意味を簡潔に説明すると

OSがタスク管理を行わず、各アプリケーションがCPUの切り替えを行う方式のこと。