哪些任务对应Linux内核调度程序?

tod*_*tod 3 linux multithreading scheduler linux-kernel

在内核级别的 Linux 中,我们有线程/任务(属于内核和用户),例如,

swapper:是一个内核线程(进程0),所有进程的祖先,在Linux的初始化阶段由start_kernel()函数从头开始创建。还

init:一个额外的内核线程,进程1(init进程)

HelloWorld:用户程序的线程

我的问题是关于内核调度程序,它执行以下工作:

- 在固定时间内安排任务(即上下文切换)

-动态计算时间片(短/长与基于优先级)

-动态分配流程优先级(需要时)

-监控其工作流程(这还包括其他内容吗?)

更具体地说,我的问题变成:内核级别的哪个线程/任务对应于调度程序?它应该是“调度程序”等还是内核中的任何其他任务都可以完成其工作?

附:

内核中的“交换器”是具有最低优先级(停止)的空闲线程/任务[1]。这除了“降级”之外还有什么作用吗?

Linux 是否为多核系统中的每个核心创建一个专用的调度程序实例?如果不是,那么它在多核上的表现如何?

[1]为什么我们在Linux中需要一个交换器任务?

Nik*_*pol 5

Linux调度程序没有与之对应的任务或线程。Linux 调度程序代码(主要是schedule() 函数)在用于调度的计时器发出中断或在内核代码中显式调用(例如,作为系统调用的一部分)时运行。

在多核上,调度程序代码在每个核上独立运行。内核 0 接收到的定时器中断通常通过使用 IPI(处理器间中断)广播到其他内核。如果平台有每个 CPU 定时器,那么 Linux 通常使用它们来发出调度所需的中断,而不是使用 IPI。