【问题标题】:Preemptive & Nonpreemptive Kernel VS Premptive & Nonpreemptive Scheduling抢占式和非抢占式内核 VS 抢占式和非抢占式调度
【发布时间】:2018-09-16 18:21:47
【问题描述】:

我很难理解抢占式和非抢占式内核以及抢占式和非抢占式调度之间的区别。

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

抢占式内核是内核允许在内核模式下运行的进程被删除和替换的地方。

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

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

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

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

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

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

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

谢谢!

【问题讨论】:

  • Basically, a clear clarification on these 4 terms is what I'm looking for. - Stack Overflow 上有很多关于这些术语的问题。他们到底有什么不清楚的地方? 非抢占式调度非抢占式内核的区别在于,非抢占式内核允许进程在用户模式,但非抢占式调度不允许这样做。
  • 买一本更好的书。您在上面引用的“抢占式调度”的内容是一堆误导性的流行语标记在一起:(
  • @MartinJames:不,它们不是流行语。它们是关键字,实际上是有意义的。不幸的是,您对其余部分完全正确。
  • @Olaf 没有有效线程状态及其含义的列表(即操作系统)。他们的嗡嗡声多于关键:)
  • @MartinJames:嗯,谁需要明确的定义/规范。我们有人工智能,让他们处理思考,我们在脸书上,在推特上发火来燃烧理性。

标签: operating-system kernel scheduling preemptive


【解决方案1】:

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

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

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

it 定义的这一部分是有道理的:

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

定义的抢占式部分没有意义。

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

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

所以你问:

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

你有四种理论上的组合:

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

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

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

此组合不存在。

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

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

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

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

【讨论】:

  • 谢谢!你说的4个理论组合是有道理的。对于第二个组合 - 非抢占式调度抢占式内核,这种组合不存在,因为要拥有一个抢占式内核,您需要有一个抢占式调度对吗?否则就没有意义了。
猜你喜欢
  • 1970-01-01
  • 2014-11-18
  • 2011-11-23
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2017-03-05
  • 2013-02-22
  • 1970-01-01
相关资源
最近更新 更多