首页 文章

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

提问于
浏览
1

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

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

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

HelloWorld:用户程序的一个线程

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

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

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

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

  • 监控流程到其工作(这包括更进一步吗?)

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

P.S:

内核中的“swapper”是具有最低优先级(暂停)的空闲线程/任务[1] . 除了“降压”之外,这会做什么吗?

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

[1] Why do we need a swapper task in linux?

2 回答

  • 2

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

    在多核上,调度程序代码在每个核心上独立运行 . Core 0上收到的定时器中断通常通过使用IPI(处理器间中断)到其他内核进行广播 . 如果平台具有每个CPU计时器,则Linux通常使用这些来发出调度所需的中断而不是使用IPI .

  • -1

    我不认为有一个单独的线程运行调度程序 . schedule()是执行调度的函数 . 可以从以下位置调用schedule()函数的某些位置:

    1) A process(A user space or kernel space) which is executing the kernel code wants to wait for some event (calls any of the wait functions)
      2) A process which calls schedule() function to yield the processor for itself for sometime.
      3) Every time when a timer interrupt is generated.
    

    像这样,可能有许多地方可以调用schedule()函数 .

相关问题