婴儿发出的第一声助产士很清楚,但进程/线程的你清楚吗?
以进程身份执行的第一条指令应该是ret_from_fork的第一条指令
fork=>copy_thread有如下代码:
p->thread.sp = (unsigned long) childregs;
p->thread.sp0 = (unsigned long) (childregs+1);
p->thread.ip = (unsigned long) ret_from_fork;
创建后的进程被调度
switch_to(prev, next, last) 有如下
: [prev_sp] "=m" (prev->thread.sp), \
[prev_ip] "=m" (prev->thread.ip),
线
程稍微复杂一点,如果1:1(其他模型的一些线程也有可能),clone执行到核心和fork归一,也是ret_from_fork.
如果是其他线程模型,很有可能线程的初始context就以start_routine(pthread_create中的那个参数)为模型捏造,然后
jump到那个地方,也就是从用户态开始执行。
阅读(937) | 评论(0) | 转发(0) |