在NT之前的Windoze就是一个例子。
首先,重要的是要理解抢占是一种频谱。您可以想象频谱的一端是某种形式的硬核预留调度,而另一端是某种形式的硬核非预测调度。在两个极端之间,有一系列选择,其中一些作为研究提案存在,而另一些则已经进入生产级操作系统。
Preemtive调度使系统在执行可能不受信任或错误的代码时可以高度可靠地运行,并提高系统的整体响应能力。这就是为什么所有现代大型操作系统基本上都使用预先调度(具有许多变化)的原因。
然而,对于内存受限和/或实时平台,已经并且仍在进行大量关于预留调度(PMT)和非预调度调度(也称为调度调度)的优缺点的研究。 合作调度 或CMT)。抢占通常会降低任务执行时间的可预测性。也就是说,每个任务的执行时间可能会降低或改善。这主要是由于两个原因。首先,不同的任务可能在不同的数据上运行。因此,当任务计划下次运行时,它将访问的数据将从CPU中逐出,缓存先前计划的任务使用的部分或全部数据,这些数据可能仍需要安排运行。其次,现代CPU采用许多动态预测/推测技术(分支预测,预取等)。根据任务的相似程度,不同任务的行为可能会降低或提高这些技术的有效性,并在每个上下文切换时产生性能损失。
非预先调度可以减少内存消耗。如果一个任务由几个阶段组成,它可以分配内存只是为了完成一个阶段,然后释放它在以后阶段不需要的任何内存,并产生控制以允许其他任务运行。这通常不能通过预留调度来实现。
非预留调度自然支持互斥,而无需任何额外的复杂性或性能开销。这可以通过让任务在互斥的代码段中执行时不产生执行来实现。需要锁定机制来支持与排除调度的互斥。
由于这些原因,非预先调度技术被广泛用于存储器受限和/或实时系统中。维基百科有一个 名单 实时操作系统,其中许多支持非预先安排。