Chinaunix
标题:
关于函数switch_to
[打印本页]
作者:
stuman
时间:
2013-06-01 22:05
标题:
关于函数switch_to
本帖最后由 stuman 于 2013-06-01 22:21 编辑
pushfl
pushl %%ebp
movl %%esp, %[prev_sp]
movl %[next_sp], %%esp
movl $1f, %[prev_ip]
pushl %[next_ip]
jmp __switch_to
1:
popl %%ebp
popfl
/* output parameters */
: [prev_sp] "=m" (prev->thread.sp),
[prev_ip] "=m" (prev->thread.ip),
"=a" (last)
/* input parameters: */
: [next_sp] "m" (next->thread.sp),
[next_ip] "m" (next->thread.ip),
[prev] "a" (prev),
[next] "d" (next)
以上是宏switch_to代码,请问在哪里进入了next进程,又是何时执行标号1处的指令,这里指令的意义又是什么?
作者:
frank529
时间:
2013-06-03 10:52
本帖最后由 frank529 于 2013-06-03 11:01 编辑
pushl %[next_ip]
jmp __switch_to
在 __switch_to 执行ret的时候,CPU会将压栈的%[next_ip]弹到IP寄存器开始执行,这样就进入了next进程。
movl $1f, %[prev_ip]
可以看出标号1是在切换回prev的时候执行的,目的是恢复在prev切走时的上下文。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2