选择空闲任务(也称为交换器任务),以便在任务调度点处的运行队列中不再有可运行的任务时运行.但这项特殊任务的用途是什么?另一个问题是为什么我无法在用户区的"ps aux"输出(PID = 0)中找到此线程/进程?
当您调用系统调用(例如fork在进程X中)时,内核被称为在进程上下文中执行.那么,fork可以说是在进程X中运行,对吧?
但是如果schedule()在同一个进程中被调用(并且它不是一个sys调用),你会说它是作为X的一部分运行的吗?或者它是否在交换器进程中运行?或者考虑到内核的整体性质,这听起来有些荒谬吗?
我在论坛上看到了几个关于这个schedule()函数的问题,但我的问题有点不同.我已经看过几个关于它的理论,算法和实现方面的讨论和文献.
不清楚的问题和被问到的问题是执行方面.当然,深入查看内核的源代码并进行所有必需的调试,跟踪bla bla ...可能会回答这个问题,但重新发明轮子似乎并不明智.
问题/困惑如下:
内核级别的多线程用户程序遍历的路径是什么?
谁安排线程?哪个中断上下文?任何名字?(如果我们看到内核级别的跟踪,没有任何称为" sched ",但有交换器,inits,ksoft*bla bla)Deos它是这样的:
其子线程的进程(用户程序)首先由内核占用,然后内核将它们作为可执行线程(通过将它们与schedule()和/或其他函数合并,即,这个新的可执行线程有一些来自内核可能来自schedule()/其他,嵌入了用户任务指令.如果情况发生,它会自动安排)
要么
schedule()总是在某个协处理器上执行,以便在必要时从该协处理器进行观察和操作?这就是为什么,有时当我们看到任何两个线程切换到cpu时,只有交换器在中间和之前和之后执行,即,在该级别没有任何调用调度程序,对吧?
感谢阅读并抱歉写下我的困惑与大家分享.