为什么通过寄存器将参数传递给`__switch_to`函数?

时间:2017-02-20 12:33:26

标签: linux scheduling scheduler

为什么函数__switch_to被声明为通过寄存器获取参数(而不是按照惯例通过堆栈)?

extern void FASTCALL(__switch_to(struct task_struct *prev, struct task_struct *next));

当我们从ret_from_fork返回而不是标记为1时,可能与此相关?如何?

源代码: https://www.kernel.org/pub/linux/kernel/people/marcelo/linux-2.4/include/asm-i386/system.h

(是的,我知道它已经老了,我想知道是什么原因)

1 个答案:

答案 0 :(得分:1)

简而言之,当你谈论'堆栈'时,你实际上是在谈论'当前进程的堆栈',并且在所有正常情况下你都不需要指定它。但是对于__switch_to(),没有“当前进程”这样的东西,因为这个函数的目的是从一个进程切换到另一个进程。 在进入时有一个当前进程而在退出时有另一个进程但是(或者至少看起来是这样)但在两者之间只有操作执行指令来保存旧进程的CPU上下文(在其堆栈上)并恢复CPU新流程的上下文(来自其堆栈)。

使用堆栈只会带来并发症。

现在,我认为不可能这样做,它只是没用。