免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1578 | 回复: 1
打印 上一主题 下一主题

fork的一段源代码,转来,加深对fork的理解。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-05 17:37 |只看该作者 |倒序浏览
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已经差不多成形了,就象怀胎十月,只等出生了啊。进程控制块已经拷贝结束了。这时系统处于核心态,我们简单的考虑,假设现在从核心态返回用户态,具体返回倒那个进程,由系统自己决定的,有可能时子进程,父进程或者时其他进程时不确定的,由调度代码段来决定的。

论坛徽章:
0
2 [报告]
发表于 2005-10-05 20:44 |只看该作者

fork的一段源代码,转来,加深对fork的理解。

应该是结构到结构的拷贝吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP