哪些任务对应于Linux内核调度程序?
在内核级别的Linux中,我们有线程/任务(属于内核和用户),例如,
swapper:是一个内核线程(进程0),它是所有进程的祖先,由start_kernel()函数在Linux的初始化阶段从头开始创建。 也
init:额外的内核线程,进程1(init进程)
HelloWorld:用户程序的一个线程
我的问题是关于内核调度程序,它执行以下任务:
- 在固定的时间内(例如,上下文切换)
- 动态计算时间片(基于优先级的短/长)
- 动态分配流程优先级(需要时)
- 监控过程到其工作(这是否包括进一步?)
更具体地说,我的问题变成:内核级别的哪个线程/任务与调度程序相对应? 它应该是“调度程序”等还是来自内核的任何其他任务执行其工作?
PS:
内核中的“swapper”是具有最低优先级(halt)的空闲线程/任务[1]。 除了“降压”之外,这是否做了其他的事情?
Linux是否为多核系统中的每个内核创建了一个调度程序的专用实例? 如果不是,那么它对多核的作用如何?
[1]为什么我们需要在Linux的交换任务?
Linux调度程序没有相应的任务或线程。 Linux调度程序代码主要是schedule()函数,当用于调度的计时器发出中断或在内核代码中显式调用时(例如作为系统调用的一部分)时,会运行该代码。
在多核上,调度程序代码在每个核心上独立运行。 在核心0上接收到的定时器中断通常通过使用IPI(处理器间中断)向其他核心广播。 如果平台具有每个CPU定时器,则Linux通常使用这些定时器来发出调度所需的中断,而不是使用IPI。
我不认为有一个单独的线程运行调度器。 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()函数。
链接地址: http://www.djcxy.com/p/84851.html