有没有使用非抢占式调度的操作系统?如果是这样,他们执行什么类型的任务?
Are there any Operating Systems that use non preemptive scheduling ? If so what type of tasks do they perform?
您能否在非抢占式调度的实际应用中提供帮助,因为似乎没有操作系统使用这种调度,这只是理论上的,还是有任何使用这种调度的工作操作系统?如果有任何特定于任务的任务,这些操作系统将处理什么类型的任务。
首先,了解抢占是一个频谱很重要。您可以想象,频谱的一端是某种形式的硬核抢占式调度,而另一端是某种形式的硬核 non-preemtive 调度。在这两个极端之间,有一系列的选择,其中一些作为研究提案存在,而另一些已经进入 production-grade 操作系统。
抢先调度使系统在执行可能不受信任或有错误的代码时能够高度可靠地运行,并提高系统的整体响应能力。这就是为什么所有现代大型操作系统本质上都使用抢占式调度(有很多变化)。
然而,对于 memory-constrained and/or real-time 平台,已经并且仍在进行大量关于抢先调度 (PMT) 和 non-preemtive 调度(也称为 cooperative scheduling 或 CMT)。抢占通常会降低任务执行时间的可预测性。也就是说,每个任务的执行时间可能会降低或提高。这主要是由于两个原因。首先,不同的任务可能对不同的数据进行操作。因此,当一个任务被调度到下一个 运行 时,它将访问的数据将从 CPU 缓存中逐出先前调度任务使用的部分或全部数据,这可能仍然需要预定 运行。其次,现代 CPUs 采用了许多动态 prediction/speculation 技术(分支预测、预取等)。不同任务的行为可能会降低或提高这些技术的有效性,具体取决于任务的相似程度,并且会导致每个 context-switch 的性能下降。
Non-preemtive调度可以减少内存消耗。如果一个任务由多个阶段组成,它可以分配内存来完成一个阶段,然后释放它在后面的阶段不需要的任何内存,并让出控制权以允许其他任务运行。抢占式调度通常不可能做到这一点。
Non-preemtive调度自然支持互斥,没有任何额外的复杂性或性能开销。这可以通过让任务在相互排斥的代码段中执行时不让出执行来实现。需要锁定机制来支持具有抢占式调度的互斥。
由于这些原因,non-preemtive 调度技术在 memory-constrained and/or real-time 系统中被广泛使用。维基百科有 list 个 real-time 操作系统,其中许多支持 non-preemtive 调度。
NT 之前的 Windoze 就是一个例子。
您能否在非抢占式调度的实际应用中提供帮助,因为似乎没有操作系统使用这种调度,这只是理论上的,还是有任何使用这种调度的工作操作系统?如果有任何特定于任务的任务,这些操作系统将处理什么类型的任务。
首先,了解抢占是一个频谱很重要。您可以想象,频谱的一端是某种形式的硬核抢占式调度,而另一端是某种形式的硬核 non-preemtive 调度。在这两个极端之间,有一系列的选择,其中一些作为研究提案存在,而另一些已经进入 production-grade 操作系统。
抢先调度使系统在执行可能不受信任或有错误的代码时能够高度可靠地运行,并提高系统的整体响应能力。这就是为什么所有现代大型操作系统本质上都使用抢占式调度(有很多变化)。
然而,对于 memory-constrained and/or real-time 平台,已经并且仍在进行大量关于抢先调度 (PMT) 和 non-preemtive 调度(也称为 cooperative scheduling 或 CMT)。抢占通常会降低任务执行时间的可预测性。也就是说,每个任务的执行时间可能会降低或提高。这主要是由于两个原因。首先,不同的任务可能对不同的数据进行操作。因此,当一个任务被调度到下一个 运行 时,它将访问的数据将从 CPU 缓存中逐出先前调度任务使用的部分或全部数据,这可能仍然需要预定 运行。其次,现代 CPUs 采用了许多动态 prediction/speculation 技术(分支预测、预取等)。不同任务的行为可能会降低或提高这些技术的有效性,具体取决于任务的相似程度,并且会导致每个 context-switch 的性能下降。
Non-preemtive调度可以减少内存消耗。如果一个任务由多个阶段组成,它可以分配内存来完成一个阶段,然后释放它在后面的阶段不需要的任何内存,并让出控制权以允许其他任务运行。抢占式调度通常不可能做到这一点。
Non-preemtive调度自然支持互斥,没有任何额外的复杂性或性能开销。这可以通过让任务在相互排斥的代码段中执行时不让出执行来实现。需要锁定机制来支持具有抢占式调度的互斥。
由于这些原因,non-preemtive 调度技术在 memory-constrained and/or real-time 系统中被广泛使用。维基百科有 list 个 real-time 操作系统,其中许多支持 non-preemtive 调度。
NT 之前的 Windoze 就是一个例子。