gpt4 book ai didi

c - Linux 内核 : schedule() function

转载 作者:IT王子 更新时间:2023-10-29 00:55:26 27 4
gpt4 key购买 nike

我在论坛上看到其他几个讨论这个 schedule() 函数的问题,但我的问题有点不同。我看过一些关于它的理论、算法和实现方面的讨论和文献。

不清楚和被问到的是执行方面。当然,深入查看内核源代码并进行所有必需的调试,跟踪 bla bla ... 可能会回答这个问题,但重新发明轮子似乎并不明智。

问题/困惑如下:

内核级的多线程用户程序遍历的路径是什么?

谁来调度线程?哪个中断上下文?任何名字? (如果我们在内核级别的跟踪中看到,没有什么叫做“sched”,但是有交换器、inits、ksoft* bla bla)Deos 它是这样的:

一个进程(用户程序)它的子线程首先都被内核占用,然后内核使它们成为可执行线程(通过将它们与 schedule() 和/或其他函数合并,即这个新的可执行线程有一些来自内核的指令可能来自 schedule()/others,与用户任务指令一起嵌入。这使得它在情况发生时自动调度)

schedule() 总是在某个协处理器上执行以观察并在必要时从该协处理器采取行动?这就是为什么有时当我们看到任何两个线程在 cpu 上切换时,只有交换器在其间以及之前和之后执行,也就是说,在那个级别没有所谓的调度程序,对吧?

感谢阅读,很抱歉写下我的困惑与大家分享。

最佳答案

X 或 Y - 都不是。

这些抢占式、多线程操作系统内核总体上大同小异。

看看它,(非常简单),像这样:

操作系统内核调度器/调度器是一个庞大、复杂的中断处理程序。中断,在操作系统方面有两种形式:

来自磁盘、网络、键盘、鼠标等外围设备的硬件中断。这些中断导致驱动程序运行,并且驱动程序在退出时可能会向内核请求调度运行。

来自线程的软件中断 - 可以更改线程状态的系统调用,例如。一个线程可能会请求不是立即可用的输入,因此该线程在输入可用之前不会继续运行。

当中断确实发生时,内核使用其内部状态数据以及来自中断的请求数据来运行其调度算法并决定哪些线程应在可用内核上运行。如果它决定正在运行的线程集需要更改,它可以通过使用内核间驱动程序导致运行线程的内核发生硬件中断来停止在任何内核上运行的任何线程。

如果没有中断,内核什么都不做。它不能做任何事情,因为它不是从任何地方输入的。它不需要在任何协处理器上执行。它不需要将任何调用“注入(inject)”到用户代码中。

它是一个状态机,以中断作为输入,一组正在运行的线程作为输出。

关于c - Linux 内核 : schedule() function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20679228/

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