红联Linux门户
Linux帮助

读Linux源代码进程切换部分下一步需要补充的知识

发布时间:2007-06-22 00:43:12来源:红联作者:seais
#define switch_to(n) {\
struct {long a,b;} __tmp; \
__asm__("cmpl %%ecx,_current\n\t" \
"je 1f\n\t" \
"xchgl %%ecx,_current\n\t" \
"movw %%dx,%1\n\t" \
"ljmp %0\n\t" \
"cmpl %%ecx,%2\n\t" \
"jne 1f\n\t" \
"clts\n" \
"1:" \
::"m" (*&__tmp.a),"m" (*&__tmp.b), \
"m" (last_task_used_math),"d" _TSS(n),"c" ((long) task[n])); \
}

这部分代码有些疑问,虽然不至于完全不懂,但是有部分问题需要认真解决。

__tmp的作用大概已经知道,但是需要证实,last_task_used_math的真正功能需要去读更多的源代码。为什么后面使用clts来清CR0的TS位,需要认真看Intel的技术手册的TSS和task switch相关部分。
文章评论

共有 0 条评论