抢占式和非抢占式内核 VS 抢占式和非抢占式调度

Phy*_*111 3 operating-system kernel scheduling preemptive

我正在努力理解抢占式和非抢占式内核以及抢占式和非抢占式调度之间的区别。

来自操作系统概念(第九版),Silberschatz、Galvin 和 Gagne:

抢占式内核是其中内核允许被删除的方法和它在内核模式下运行的同时替换。

一个非抢占内核不允许在内核模式下运行的进程被抢占; 内核模式进程将一直运行,直到它退出内核模式、阻塞或自愿放弃对 CPU 的控制。

非抢占式调度下,一旦将 CPU 分配给进程,该进程就会保留 CPU,直到它通过终止或切换到等待状态来释放 CPU。- 在我看来,这与非抢先内核的描述完全相同。

抢占式调度发生在这两种情况下(来自同一本书):

  1. *当一个进程从运行状态切换到就绪状态时(例如发生中断时)

  2. 当进程从等待状态切换到就绪状态时(例如,在 I/O 完成时)*

这本书只是说在这种情况下有一个选择,我不确定这个选择是什么。是选择是否可以继续运行就绪队列中的同一进程,还是可以选择运行就绪队列中的不同进程?

基本上,我正在寻找对这 4 个术语的明确说明。

谢谢!

use*_*003 5

您面临的问题是这些术语没有标准含义。我怀疑你的书是从某个特定操作系统的角度使用它们的(哪个操作系统?-Je ne sais quois)。如果您在互联网上搜索过,您肯定会发现相互矛盾的解释。

例如,抢占式调度可能意味着:

  1. 将中断不产生 CPU 的正在运行的进程的调度。
  2. 将在其量程到期之前中断正在运行的进程的调度。
  3. 你的书显然还有另一个定义。我无法从摘录中说出含义。这本书完全有可能只是在这一点上令人困惑(因为它显然在很多点上)。一点是进程状态是系统相关的。使用过程状态来定义这个术语是相当令人困惑的。

这部分定义是有道理的:

在非抢占式调度下,一旦将 CPU 分配给进程,该进程就会保留 CPU,直到它通过终止或切换到等待状态释放 CPU。

定义的先发制人部分没有意义。

在术语preemptive kernel的情况下,这是非常标准的,您给出的描述有点正常。也就是说,这本书的陈述应该更加精炼,因为每个进程都必须在内核模式下被删除。通常,人们会说“在非抢占式内核中,当进程通过异常进入内核模式时,无法删除它”。

抢占式内核对于实时处理至关重要。

所以你问:

  • 在我看来,这与非抢先内核的描述完全相同。

您有四种理论组合:

  1. 抢占式调度抢占内核

操作系统几乎可以随时强制切换进程。

  1. 非抢占式调度抢占式内核

这种组合不存在。

  1. 非抢占式调度非抢占式内核

该进程必须显式让出以允许操作系统切换到另一个进程。

  1. 抢占式调度非抢占式内核

操作系统可以强制切换进程,除非进程在内核态执行处理异常(也可能存在处理中断时进程无法切换的情况)。