在内核级别的 Linux 中,我们有线程/任务(属于内核和用户),例如,
swapper:是一个内核线程(进程 0),所有进程的祖先,在 Linux 的初始化阶段由 start_kernel() 函数从头开始创建。还有
init:一个额外的内核线程,进程1(init进程)
HelloWorld:用户程序的线程
我的问题是关于执行以下作业的内核调度程序:
-在固定时间内安排任务(即上下文切换)
-动态计算时间片(短/长与基于优先级)
-动态分配进程优先级(需要时)
-监控其作业的进程 (这还包括什么吗?)
更具体地说,我的问题变成了:内核级别的哪个线程/任务对应于调度程序?它应该是“调度程序”等还是来自内核的任何其他任务是否完成它的工作?
附言:
内核中的“swapper”是一个空闲线程/任务,具有最低优先级(暂停)[1]。这除了“降压”之外还有什么作用吗?
Linux 是否为多核系统中的每个内核创建一个专用的调度程序实例?如果不是,那么它在多核上的表现如何?
最佳答案
Linux调度器没有与之对应的任务或线程。 Linux 调度程序代码,主要是 schedule() 函数,在用于调度的计时器发出中断或在内核代码中明确调用它时(例如,作为系统调用的一部分)运行。
在多核上,调度程序代码在每个核上独立运行。 Core 0 上接收到的定时器中断通常使用 IPI(处理器间中断)广播到其他内核。如果平台有每个 CPU 定时器,那么 Linux 通常会使用它们来发出调度所需的中断,而不是使用 IPI。
关于linux - 哪些任务对应Linux内核调度器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20629964/