在Linux的内核级别,我们有线程/任务(属于内核和用户),例如,
swapper:是一个内核线程(进程0),它是所有进程的祖先,在Linux的初始化阶段由start_kernel()函数从头开始创建。也是
init:一个额外的内核线程,进程1 (init进程)
HelloWorld:用户程序的线程
我的问题是关于内核调度器,它执行以下任务:
固定时间内的-Schedule任务(即上下文切换)
动态-Calculate时间片(基于短/长vs优先级)
-Assigns动态处理优先级(在需要时)
将进程-Monitoring到它的作业中(这还包括其他的吗?)
更具体地说,我的问题变成:内核级别的哪些线程/任务对应于调度器?它应该是“调度器”之类的,还是内核中的任何其他任务都能完成它的工作?
附言:
内核中的"swapper“是一个具有最低优先级的空闲线程/任务(halt) 1。除了"step-down”,这还能做什么吗?
Linux是否为多核系统中的每个核创建了一个专用的调度器实例?如果不是,那么它在多核上的表现如何?
发布于 2014-06-11 22:11:14
Linux计划程序没有与之对应的任务或线程。Linux调度程序代码,主要是schedule()函数,在用于调度的定时器发出中断或在内核代码中显式调用它时运行(例如,作为系统调用的一部分)。
在多核上,调度程序代码在每个核上独立运行。在内核0上接收到的定时器中断通常通过使用IPI(处理器间中断)广播到其他内核。如果平台有每个CPU的计时器,那么Linux通常使用这些计时器来发出调度所需的中断,而不是使用IPIs。
发布于 2013-12-17 18:04:55
我不认为有一个单独的线程来运行调度程序。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()函数。
https://stackoverflow.com/questions/20629964
复制相似问题