- 论坛徽章:
- 0
|
static struct task_struct *dup_task_struct(struct task_struct *orig)
{
struct task_struct *tsk;
struct thread_info *ti;
prepare_to_copy(orig);
tsk = alloc_task_struct();
if (!tsk)
return NULL;
ti = alloc_thread_info(tsk);
if (!ti) {
free_task_struct(tsk);
return NULL;
}
*ti = *orig->;thread_info;/*这里指针倒指针的拷贝,表示结构体的拷贝,标准C语言是不支持的,下同*/
*tsk = *orig;
tsk->;thread_info = ti;
ti->;task = tsk;
/* One for us, one for whoever does the "release_task()" (usually parent) */
atomic_set(&tsk->;usage,2);
return tsk;
}
LINUX执行了这个函数,基本上fork已经差不多成形了,就象怀胎十月,只等出生了啊。进程控制块已经拷贝结束了。这时系统处于核心态,我们简单的考虑,假设现在从核心态返回用户态,具体返回倒那个进程,由系统自己决定的,有可能时子进程,父进程或者时其他进程时不确定的,由调度代码段来决定的。 |
|