gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:24 25 4
gpt4 key购买 nike

为什么函数 __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新进程的上下文(来自其堆栈)。

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

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

关于linux - 为什么要通过寄存器给 `__switch_to`函数传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42344744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com