【问题标题】:Who actually carries out the scheduling in a system谁在系统中实际执行调度
【发布时间】:2017-08-17 17:02:32
【问题描述】:

我发现在就绪队列中准备好执行的进程由调度程序控制 CPU。调度程序根据其调度算法选择一个进程,然后将 CPU 控制权交给选定的进程,如果它遵循抢占式风格,则稍后抢占。我想知道,如果处理器正在使用 CPU 的处理单元,那么如果处理单元不可用,那么谁来抢占和调度进程。

【问题讨论】:

  • 在预定的时间,CPU 中断当前进程并将控制权交给内核。从那里调度程序完成它的工作
  • 每次新进程进入就绪队列时都会发生这种情况吗?因此在抢占式风格中,每次进程进入就绪队列时内核都会使用 CPU,即使新进程没有根据所遵循的算法有资格获得 CPU 吗?
  • ..取决于算法。一个新线程可能会在创建时获得“一次性”优先级提升,但如果还有更多或同样多的更高优先级的就绪/运行线程比核心数量多,那么它可能不会直接成为核心。
  • TBH,您的问题还不是很清楚:(当系统调用或硬件中断/驱动程序更改就绪/正在运行的线程集时,调度程序运行,因此允许进入内核并允许内核代码运行。如果没有系统调用和中断,则内核代码,包括它的调度程序/调度程序,根本不会执行 - 不需要它。

标签: operating-system scheduling


【解决方案1】:

现在,我想与您分享我对操作系统的看法, 很抱歉我的英语不是很流利

您对操作系统有何看法?你认为它是“活跃的”吗? 不,在我看来,操作系统只是内存中的一堆死代码 而这个死代码是由中断句柄函数构成的(我们只是把这个死代码称为“内核源代码”) 好的,现在,CPU正在执行进程A,突然发生“中断”,这个“中断”可能是因为时钟或读取系统调用而发生的,无论如何,发生了中断。然后CPU会跳转构成中断处理函数(CPU跳转是因为CPU的构成是设计的)。如前所述,这个中断句柄函数是操作系统内核源代码的一部分。 CPU 将执行此代码。这段代码会做什么? 这段代码会调度,CPU会执行这段代码。

【讨论】:

  • 是的,你英语不是很流利,但我能听懂,这并没有阻止我点赞;)
【解决方案2】:

一切都发生在进程的上下文中(Linux 称这些轻量级进程,但它们是相同的)。

进程调度通常作为系统服务调用的一部分或作为中断的一部分发生。

在系统服务调用的情况下,进程可能确定它无法执行,因此它调用调度程序将上下文更改为新进程。

操作系统将在它可以进行调度的地方安排定时器中断。调度也可以发生在其他类型的中断中。中断由当前进程处理。

【讨论】:

  • '中断由当前进程处理'没有。中断没有进程上下文。
  • 这不是真的。每个主要的商业处理器总是在进程的上下文中执行。 Linux 指的是轻量级进程,但出于所有密集目的,它是在中断之前执行的进程的上下文(这是大多数操作系统的规范)。
  • 没有。中断处理程序没有进程上下文。它们是由硬件触发的中断。处理程序不知道当它们发生时哪些进程线程可能正在运行,也可能不运行。也许我们在这里有不同的目的..
  • 而他们的地址空间从何而来?
  • 取决于操作系统,来自任何中断的堆栈,可能还有内核中断堆栈,来自任何驱动程序的代码,来自内核非交换空间的静态数据。
猜你喜欢
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
相关资源
最近更新 更多