gpt4 book ai didi

Linux 进程调度器——它们自己会消耗 CPU 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:41 24 4
gpt4 key购买 nike

我一直在研究 unix/linux 系统基础知识,尤其是在现代计算机系统中如何处理一系列任务或进程。

我找到了很多资源,这些资源似乎是对 context switching 的标准解释。内核所做的以及如何处理信号 (SIGXXX):

  • 一个进程运行一段设定的时间或直到一个中断收到
  • 内核从运行内存中卸载进程(缓存),将有关其上下文的数据存储在其他地方的内存中以加载下一个需要 CPU 时间的进程。
  • 如果信号 (SIGXXX) 正在等待过程中,内核尝试调用适当的处理程序过程。如果不存在,则不会再次加载进程(被杀)。
  • 新进程加载到内存并运行;周期继续

(如果理解有误请指出)

我一直在努力解决的问题是,如果这一切都发生在单核、单线程 CPU 上,什么在物理上运行调度程序?我我错过了一些非常简单的东西,但我陷入了这种先有鸡还是先有蛋的思维。

此外,在具有多个内核、线程和大量可用 CPU 资源的现代系统中,调度程序是否会消耗一个内核来运行?

我读过很多关于不同进程调度器的文章,原始的 O(n),2.6 及更高版本中引入的较新的 O(1),以及(我认为?)大多数情况下使用的 CFS 调度器现在的Linux。他们都在谈论如何对进程进行优先级排序和排队,但都没有详细说明调度程序实际运行的方式和时间以完成其所有任务。

调度程序是否共享 CPU 时间?以某种方式将 自身 移入和移出 CPU?如果是这样,CPU 如何知道何时停止进程并让调度程序运行以执行其任务?

最佳答案

if this is all occurring on a single-core, single-thread CPU, what's physically running the scheduler?

你的想法是正确的,它需要是内核之外的东西,因为当前线程正忙于做事和发出系统调用。核心思想是内核在CPU内核中注册了一个时钟中断,具体实现因设备而异,但CPU内核本身会调用注册的interrupt handler (aka ISR)。每次定时器间隔结束或出现内核信号时。 ISR 实际上是指向您提供给内核的中断函数的内存指针。在中断函数返回到用户空间(即当前工作线程)之前,调度程序被调用(更多 details here )

调度的频率取决于 clock speed of the cpu .

does the scheduler consume a core by itself to run?

不,调度程序自己在每个内核上运行,也有可能在另一个内核上调度线程。

进一步阅读:

关于Linux 进程调度器——它们自己会消耗 CPU 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com