为什么函数__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
(是的,我知道它很旧,我想知道是什么原因)

最佳答案

简言之,当你谈论“堆栈”时,你实际上是在谈论“当前进程的堆栈”,在所有正常情况下,你不需要指定这个。但是对于switch_to(),不存在“当前进程”,因为此函数的目的是从一个进程切换到另一个进程。
在入口上有一个当前进程,另一个在退出(但至少看起来是这样),但在这两个之间,只有操作执行指令才能保存旧进程的CPU上下文(在其堆栈上),并恢复新进程的CPU上下文(从堆栈中恢复)。
使用堆栈只会带来复杂性。
现在,我不认为这样做是不可能的,只是没用。

09-04 04:27
查看更多