是否保证在每次切换进程时调用kernel/sched.c/context_switch()?

Rei*_*iik 9 c linux process scheduler context-switch

我想改变Linux内核,以便每当当前PID改变时 - 即,切换新进程 - 执行一些诊断代码(下面的详细解释,如果好奇的话).我做了一些挖掘工作,似乎每次调度程序选择一个新进程时,context_switch()都会调用该函数,这是有道理的(这只是粗略的分析sched.c/schedule()).

问题是,Linux调度程序现在对我来说基本上是黑魔法,所以我想知道这个假设是否正确.是否保证每次选择新进程以在CPU上获得一些时间时,都会调用context_switch()函数?或者内核源中是否有其他位置可以在其他情况下处理调度?(或者我完全误解了这一切?)

为了给出一些背景信息,我正在使用MARSS x86模拟器来尝试对某些程序进行一些检测和测量.问题是我的仪器需要知道某些代码事件对应于哪个执行过程,以避免误解数据.我们的想法是在MARSS中使用一些内置的消息传递系统在每个上下文切换时传递新进程的PID,因此它总是知道当前正在执行什么PID.如果有人能想到一种更简单的方法来实现这一点,那也将非常感激.

Mil*_*lan 5

是的,你是对的。

schedule()将调用context_switch()负责当新工艺已被选择切换从一个任务到另一个schedule()

context_switch()基本上有两件事。它调用switch_mm()switch_to()

switch_mm() -切换到新进程的虚拟内存映射

switch_to() -将处理器状态从以前的进程切换到新进程(保存/恢复寄存器,堆栈信息和其他体系结构特定的东西)

至于您的方法,我想很好。在使用内核时,保持环境整洁是很重要的,并尝试使其相对容易直到您获得更多知识为止。