为什么$ 1在linux上下文切换期间保存在task_struct中?

时间:2013-03-21 13:17:27

标签: linux-kernel

Linux 2.6.11上下文切换的核心可以简化如下:

mov prev,%eax // eax指向上一个 mov next,%edx // edx指向下一个
pushfl //满足编译器 pushl%ebp //满足编译器
movl%esp,484(%eax)//在上一页保存esp movl 484(%edx),%esp //从下一个加载esp
movl $ 1f,480(%eax)//在上一级保存1f
pushl 480(%edx)//按1f
jmp __switch_to
1: popl%ebp
popfl

现在,让我们看一下__switch_to中的相关代码。它从eax和edx寄存器获取prev_p和next_p参数。做了很多工作,并以

结束

movl%edi,%eax  转发

我的问题是:为什么要通过指令movl $ 1f保存$ 1f,480(%eax)是必要的???据我所知,地址$ 1f是一个由编译器修复的常量,在执行期间不会改变。因此,保存它是没有意义的。此外,最重要的是,afaik switch_to宏只是在源代码中的一个地方使用。

第二个问题是:为什么在通过pushl 480(%edx)推送$ 1之后跳转到__switch_to是必要的?如果我们只是通过调用指令定期调用它,__switch_to将返回$ 1。

0 个答案:

没有答案