Linux 调度程序的工作

Linux 调度程序的工作,linux,linux-kernel,operating-system,scheduler,Linux,Linux Kernel,Operating System,Scheduler,调度器是一个程序,它在操作系统中调度不同的进程。 我想到的问题是: 因为调度器也是一个进程,它通过上下文切换来调度其他进程。 所以,总有一天,调度器会自动切换到其他进程。 如果发生这种情况,那么接下来的日程安排将如何进行 或者,如果它不是那样,那么它是否工作,就像在多任务系统中一样,为了同时运行不同的进程,这些进程必须进行上下文切换,如果调度程序一直在运行,那么它将如何为其他进程一起运行提供空间。调度程序是一个程序,是的,但这很少是一个过程。相反,调度是内核的一部分,或者是从硬件(包括处理器使用

调度器是一个程序,它在操作系统中调度不同的进程。 我想到的问题是:

因为调度器也是一个进程,它通过上下文切换来调度其他进程。 所以,总有一天,调度器会自动切换到其他进程。 如果发生这种情况,那么接下来的日程安排将如何进行


或者,如果它不是那样,那么它是否工作,就像在多任务系统中一样,为了同时运行不同的进程,这些进程必须进行上下文切换,如果调度程序一直在运行,那么它将如何为其他进程一起运行提供空间。

调度程序是一个程序,是的,但这很少是一个过程。相反,调度是内核的一部分,或者是从硬件(包括处理器使用情况)抽象进程的程序

在抢占式调度器中,由于调度器是内核的一部分,它实际上存在于每个进程的地址空间中。当一个进程的分配时间结束时,调度器控制程序的执行,然后执行必要的工作以转移到下一个进程。但是,当计划执行此操作时,它不会将自己从新进程的地址空间中移除,以便在新进程的时间结束时,它可以安全地执行继续进行所需的工作

虽然有些内核的功能经常被卸载到其他进程(CMU Mach)中,但内核中总会有一部分保留用于更改进程的功能,而这永远不会只在其自己的进程中

有关调度工作原理的更多信息,我发现以下文章很有帮助:

由于问题被标记为Linux,调度程序是先发制人的。有一些设置代码,然后是一个原子开关。切换到的
是交换寄存器和堆栈的特定于体系结构的代码。在此之前,MMU已更新;此时,中断被禁用。也许OP对这件事感兴趣。