Linux 2.6的switch_to函数的分析

 好久没有更新博客了,这几天再追一个MM(性格很好,兵兵很喜欢,吼吼。),今天看了一下linux中的进程调度,下面把今天看的记录下一下。

其实最需要记录的是switch_to这个函数,这个函数主要是汇编组成。里面有一个最大的卖点就是如下:

    "movl $1f,%[prev_ip]\n\t" /* save    EIP   */ \

    "pushl %[next_ip]\n\t" /* restore EIP   */ \

    "jmp __switch_to\n" /* regparm call  */ \

    "1:\t" \

    "popl %%ebp\n\t" /* restore EBP   */ \

    "popfl\n" /* restore flags */ \

这会把1f压入到prev->eip寄存器里面,等调用完__switch_to的时候就会调用ret指令,就会找当前内核栈ip也就是next->eip。也就是在返回的时候,返回的是之前next进程被切换的时候存入的到他的eip里面的1f,这个时候,就完完全全的到了next进程之前保存的空间里来了。这样就完成了进程切换。以后在调用prev进程(也就是现在prev是第二个参数),走完__switch_to之后,就会取出现在这里存在prev->eip中的1f了。这就是这个代码的玄机,其他的。。。好像看看大概都还好理解。

你可能感兴趣的:(linux,分析,记录,休闲,最大的)