当前位置: 技术问答>linux和unix
关于函数switch_to
来源: 互联网 发布时间:2017-04-13
本文导语: 本帖最后由 stuman 于 2013-06-01 22:20:21 编辑 pushfl pushl %%ebp movl %%esp, %[prev_sp] movl %[next_sp], %%esp movl $1f, %[prev_ip] pushl %[next_ip] jmp __switch_to 1: ...
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处的指令,这里指令的意义又是什么?
|
pushl %[next_ip]
jmp _switch_to
这里调用了下一个进程,其中以下代码
均是向swich_to切换进程传递传数
以下是输出寄存器
从中可以看出,在进程切换以前,保存了上一个进程的信息
movl $1f, %[prev_ip]
上面这条语句,将进程的堆栈指针指向了标号1
因此下一进进程切换时,若切换至该进程,将接着运行标号1处一代码
jmp _switch_to
这里调用了下一个进程,其中以下代码
[next_sp] "m" (next->thread.sp),
[next_ip] "m" (next->thread.ip),
[prev] "a" (prev),
[next] "d" (next)
均是向swich_to切换进程传递传数
以下是输出寄存器
: [prev_sp] "=m" (prev->thread.sp),
[prev_ip] "=m" (prev->thread.ip),
"=a" (last)
从中可以看出,在进程切换以前,保存了上一个进程的信息
movl $1f, %[prev_ip]
上面这条语句,将进程的堆栈指针指向了标号1
因此下一进进程切换时,若切换至该进程,将接着运行标号1处一代码
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。