2017-02-20 92 views
1

为什么函数__switch_to声明为通过寄存器传递参数(而不是按照约定通过堆栈)?为什么要通过寄存器将参数传递给`__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

总之,当你在谈论“堆”你其实说话关于'当前进程的堆栈',并且在所有正常情况下,您不需要指定它。但对于__switch_to(),由于此函数的目的是从一个进程切换到另一个进程,因此不存在“当前进程”这样的事情。 当前有一个进程进程,另一个进程退出但是(或者至少似乎是这样),但是在两者之间它只是执行正在执行的指令来保存旧进程的CPU上下文(在它的堆栈上)并且还原新进程的CPU上下文(来自堆栈)。

使用堆栈只会带来复杂性。

现在,我认为这是不可能的,这只是无用的。

相关问题