进程创建函数分析

上传人:206****923 文档编号:37530932 上传时间:2018-04-18 格式:DOC 页数:3 大小:21KB
返回 下载 相关 举报
进程创建函数分析_第1页
第1页 / 共3页
进程创建函数分析_第2页
第2页 / 共3页
进程创建函数分析_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《进程创建函数分析》由会员分享,可在线阅读,更多相关《进程创建函数分析(3页珍藏版)》请在金锄头文库上搜索。

1、1.进程状态:1)可运行状态(TASK_RUNNING)2)可中断的等待状态(TASK_INTERRUPTIBLE)3)不可中断的等待状态(TASK_UNINTERRUPTIBLE)4)暂停状态(TASK_STOPPED)5)僵死状态(TASK_ZOMBIE)2.进程的创建:1)fork:使用该系统调用时,子进程复制父进程的全部资源。由于要复制父进程进程描述符给子进程(进程描述的结构很大!),这一过程开销是很大的。linux 采用了”写时复制技术”(copy on write,COW),使子进程先共享父进程的物理页,只有子进程进行写操作时,再复制对应的物理页,避免了无用的复制开销,提高了系统的

2、性能。实现代码(x86):arch/x86/kernel/process.cint sys_fork(struct pt_regs *regs) Return do_fork(SIGCHLD, regs-sp, regs,0, NULL, NULL); 2)vfork:该系统调用创建的子进程,完全运行在父进程地址空间之上。子进程对地址空间任何数据的修改同样为父进程所见。vfork 执行后父进程堵塞,知道子进程运行结束。实现代码(x86):arch/x86/kernel/process.cint sys_vfork(struct pt_regs *regs) Return do_fork(CLO

3、NE_VFORK | CLONE_VM |SIGCHLD, regs-sp, regs, 0,NULL, NULL); 3)clone:该调用是 linux 系统所特有的,其 NPTL 的实现依赖此函数。与fork,vfork 相比 clone 对进程创建有更好的控制能力,能控制子进程和父进程共享何种资源。实现代码(x86):arch/x86/kernel/process.clong sys_clone(unsignedlong clone_flags, unsigned long newsp, void_user *parent_tid, void_user *child_tid, stru

4、ctpt_regs *regs) if(!newsp) newsp = regs-sp; Return o_fork(clone_flags, newsp, regs, 0,parent_tid, child_tid); 上面进程的创建最终依赖于:do_fork() ,只是向其传递了不同的参数clone_flags,其原型为:long do_fork(unsigned long clone_flags, unsigned long stack_start, struct pt_regs *regs, unsigned long stack_size, int _user *parent_tid

5、ptr,int _user *child_tidptr)参数分析:clone_flags:低字节指定子进程结束时发送到父进程的信号代码,通常选择SIGCHLD 信号。剩余3个字节给一 clone 标志组用于编码stack_start:子进程用户态堆栈的地址regs:指向内核态堆栈通用寄存器值的指针,通用寄存器的值是在从用户态切换到内核态时被保存到内核态堆栈中的。stack_size:未使用,总被设置为0。parent_tidptr:表示父进程的用户态变量地址,该父进程具有与新轻量级进程相同的 PID。child_tidptr:表示新轻量级进程的用户态变量地址,该进程具有这一类进程的PID。只有在 CLONE_CHILD_SETTID 被设置时才有意义。而 do_fork() 函数生成一个新的进程,大致分为三个步骤。1、建立进程控制结构并赋初值,使其成为进程映像。2、必须为新进程的执行设置跟踪进程执行情况的相关内核数据结构。包括任务数组、自由时间列表 tarray_freelist 以及 pidhash 数组。3、启动调度程序,使子进程获得运行的机会。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号