小编der*_*erf的帖子

来自linux内核的schedule()+ switch_to()函数如何实际工作?

我试图了解linux内核中的调度过程是如何工作的.我的问题不是调度算法.它关于功能schedule()switch_to()工作方式.

我会试着解释一下.我看到了:

当进程耗尽时间片时,标志need_resched由设置scheduler_tick().内核检查标志,看到它已设置,并调用schedule()(与问题1相关)切换到新进程.此标志是应该尽快调用计划的消息,因为另一个进程应该运行.返回用户空间或从中断返回后,将need_resched检查该标志.如果已设置,则内核会在继续之前调用调度程序.

查看内核源代码(linux-2.6.10 - "Linux内核开发,第二版"所依据的版本),我还看到一些代码可以自动调用该schedule()函数,让另一个进程有权运行.我看到该函数switch_to()是实际进行上下文切换的函数.我查看了一些与架构相关的代码,试图了解switch_to()实际上在做什么.

这种行为提出了一些我无法找到答案的问题:

  1. switch_to()完成,什么是当前正在运行的进程?这个过程叫schedule()什么?或者下一个过程,那个被选中运行的过程?

  2. schedule()被中断调用时,所选的进程在中断处理完成后开始运行(在某种RTE之后)?还是在那之前呢?

  3. 如果schedule()无法从中断调用该函数,那么何时是标志need_resched设置?

  4. 当定时器中断处理程序工作时,正在使用什么堆栈?

我不知道我是否能说清楚自己.如果我不能,我希望我可以在一些答案(或问题)之后做到这一点.我已经看过几个试图了解这个过程的消息来源.我有一本书"Linux Kernel Development,sec ed",我也在使用它.我对MIP和H8300架构有所了解,如果有帮助可以解释一下.

context-switch linux-kernel

28
推荐指数
1
解决办法
1万
查看次数

标签 统计

context-switch ×1

linux-kernel ×1