Operating system 谁在系统中实际执行调度

Operating system 谁在系统中实际执行调度,operating-system,scheduling,Operating System,Scheduling,我发现就绪队列中准备执行的进程由调度程序控制CPU。调度器根据其调度算法选择一个进程,然后将CPU的控制权交给所选进程,如果该进程采用抢占式的方式,则随后进行抢占。我想知道,如果处理器正在使用CPU的处理单元,那么在处理单元不可用的情况下,究竟是谁抢占和调度进程 现在,我想和大家分享我对操作系统的看法, 很抱歉,我的英语不是很流利 你觉得操作系统怎么样?你认为它是“活跃的”吗? 不,在我看来,操作系统只是内存中的一堆死代码 这个死代码是由中断句柄函数构成的(我们刚才称这个死代码为“内核源代码”)

我发现就绪队列中准备执行的进程由调度程序控制CPU。调度器根据其调度算法选择一个进程,然后将CPU的控制权交给所选进程,如果该进程采用抢占式的方式,则随后进行抢占。我想知道,如果处理器正在使用CPU的处理单元,那么在处理单元不可用的情况下,究竟是谁抢占和调度进程

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

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

所有事情都发生在进程上下文中(Linux调用这些轻量级进程,但它是相同的)

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

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


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

在计划的时间,CPU中断当前进程并将控制权交给内核。从那里调度器开始它的任务每次新进程进入就绪队列时都会发生这种情况吗?因此,在抢占式风格中,内核在每次进程进入就绪队列时都会使用CPU,即使新进程不符合所遵循的算法的CPU要求?取决于算法。一个新线程在创建时可能会获得“一次性”优先级提升,但如果仍然有更多或更多的高优先级就绪/正在运行的线程,则可能无法直接获得内核。TBH,您的问题并不十分清楚:(调度程序在系统调用或硬件中断/驱动程序更改准备/运行线程集时运行,因此允许输入内核并允许运行内核代码。如果没有系统调用和中断,则根本不执行内核代码,包括其调度程序/调度程序-不需要它。是的,yo你的英语不是很流利,但我能听懂,这并没有阻止我提高自己;)“中断由当前进程处理”否。中断没有进程上下文。事实并非如此。每个主要的商用处理器总是在进程上下文中执行。Linux指的是一个轻量级进程,但对于所有密集用途而言,它是在中断前执行的进程上下文(这是大多数操作系统的标准).不。中断处理程序没有进程上下文。它们是由硬件触发的中断。处理程序不知道发生时哪些进程线程可能正在运行,也可能不在运行。可能我们在这里有不同的目的..它们的地址空间来自何处?取决于操作系统,来自中断的堆栈,还可能是内核中断stack、 来自任何驱动程序的代码,来自内核非交换空间的静态数据。