Linux进程调度器-它们自己是否消耗CPU?
我一直在学习unix/linux系统基础知识,特别是在现代计算机系统中如何处理一系列任务或进程 我找到了很多资料,这些资料对内核的功能以及信号(SIGXXX)的处理方式给出了标准的解释:Linux进程调度器-它们自己是否消耗CPU?,linux,process,multiprocessing,context-switch,Linux,Process,Multiprocessing,Context Switch,我一直在学习unix/linux系统基础知识,特别是在现代计算机系统中如何处理一系列任务或进程 我找到了很多资料,这些资料对内核的功能以及信号(SIGXXX)的处理方式给出了标准的解释: 一个进程运行一段时间或直到中断被终止 收到 内核从运行的内存中卸载进程 (缓存),将有关其上下文的数据存放在其他内存中以加载 下一个需要CPU时间的进程 如果信号(SIGXXX)正在等待 在这个过程中,内核尝试调用 这个过程。如果不存在,则不会再次加载该进程 (被杀) 新进程加载到内存并运行;循环 继续 (
- 一个进程运行一段时间或直到中断被终止 收到
- 内核从运行的内存中卸载进程 (缓存),将有关其上下文的数据存放在其他内存中以加载 下一个需要CPU时间的进程李>
- 如果信号(SIGXXX)正在等待 在这个过程中,内核尝试调用 这个过程。如果不存在,则不会再次加载该进程 (被杀)李>
- 新进程加载到内存并运行;循环 继续
调度程序是否共享CPU时间?以某种方式在CPU中来回移动?如果是这样,CPU如何知道何时停止进程并让调度程序运行以完成任务?调度程序是内核的一部分,当然,它会消耗CPU。在最简单的情况下,您可以将计时器连接到CPU,例如每10毫秒一次。在每一次滴答声中,CPU都会被“中断”,也就是说,它会跳转到某个预定义的地址,即调度程序所在的位置。然后,调度器将一些与进程相关的数据保存到某个内部结构中,选择另一个进程,加载其数据并跳转到该进程正在执行的地址
这些O(n)和O(1)正是调度器的时间复杂性,也就是说,调度器需要多少时间来决定下一步调度哪个任务。调度器是内核的一部分,当然,它会消耗CPU。在最简单的情况下,您可以将计时器连接到CPU,例如每10毫秒一次。在每一次滴答声中,CPU都会被“中断”,也就是说,它会跳转到某个预定义的地址,即调度程序所在的位置。然后,调度器将一些与进程相关的数据保存到某个内部结构中,选择另一个进程,加载其数据并跳转到该进程正在执行的地址 这些O(n)和O(1)正是调度器的时间复杂性,这意味着调度器需要多少时间来决定下一个要调度的任务 如果这一切都发生在单核、单线程CPU上,那么调度程序的物理运行是什么 您的想法是正确的,它需要是内核之外的东西,因为当前线程正忙于做事情和发出系统调用。关键思想是,内核在CPU内核中注册了一个时钟中断,具体实现因设备而异,但每次定时器间隔结束或出现内核信号时,CPU内核本身都会调用注册的时钟中断。ISR实际上是一个内存指针,指向您提供给内核的中断函数。在中断函数返回用户空间(即当前工作线程)之前,调用调度程序(更多) 调度的频率取决于时间 调度程序是否自行使用一个内核来运行 不,调度程序自己在每个内核上运行,也可以在另一个内核上调度线程 进一步阅读: