TL;DR

OS 上で動くタスクの切り替えをプログラム自身に任せるマルチタスクの方式。プログラムが CPU を自発的に解放したときに、他のタスクに切り替える。プリエンプティブと対になる。協調的マルチタスクとも呼ばれる。

仕組み

Wikipedia によると、各タスクは、イベントの待ち行列を参照するときなどに、自分から OS に制御を返す。NetWare のように、システムコールのたびに制御を返す実装もある。OS は CPU を強制的に取り上げる必要がないので、OS の処理は少なくて済む。

例

かつての Mac OS や Windows 3.x がこの方式を採用していた。Windows 9x 系でも、16 ビットの Windows プログラムはこの方式で動いていた。

注意点

CPU を長い時間使い続けるタスクがあると、実質的にシングルタスクと同じになる。無限ループなどでタスクが制御を返せなくなると、他のタスクも巻き込んでシステム全体が止まる。Wikipedia によると、現在の主流は、OS が一定時間ごとに強制的に制御を取り戻すプリエンプティブ方式である。

関連

出典