为什么函数__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
(是的,我知道它已经老了,我想知道是什么原因)
答案 0 :(得分:1)
简而言之,当你谈论'堆栈'时,你实际上是在谈论'当前进程的堆栈',并且在所有正常情况下你都不需要指定它。但是对于__switch_to(),没有“当前进程”这样的东西,因为这个函数的目的是从一个进程切换到另一个进程。 在进入时有一个当前进程而在退出时有另一个进程但是(或者至少看起来是这样)但在两者之间只有操作执行指令来保存旧进程的CPU上下文(在其堆栈上)并恢复CPU新流程的上下文(来自其堆栈)。
使用堆栈只会带来并发症。
现在,我认为不可能这样做,它只是没用。