linux源码解析-dup_task_struct函数
来源:互联网 发布:怎么看待淘宝体 编辑:程序博客网 时间:2024/06/16 17:10
1.dup_task_struct函数调用位置及其作用
调用位置: do_fork -> copy_process -> dup_task_struct
作用:复制一份task_struct结构体
2.函数主体流程
static struct task_struct *dup_task_struct(struct task_struct *orig){struct task_struct *tsk;struct thread_info *ti;unsigned long *stackend;int err;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;} err = arch_dup_task_struct(tsk, orig); //把orig中的内容完全复制给tsk,相当于*tsk = *origif (err)goto out;tsk->stack = ti;err = prop_local_init_single(&tsk->dirties);if (err)goto out;setup_thread_stack(tsk, orig); /*为整个thread_info结构复制,并设置指针指向 thread_info里面有一个指向task_struct的指针 ,子进程指向子进程的,父进程指向父进程的,而现在, 这两个thread_info中的某个指针,都指向了父进程的task_struct,所以还要使得子进程thread_info的指针指向tsk的task_struct, 而不是 父进程的task_struct:task_thread_info(p)->task = p;*/ clear_user_return_notifier(tsk);stackend = end_of_stack(tsk);*stackend = STACK_END_MAGIC;/* for overflow detection */#ifdef CONFIG_CC_STACKPROTECTORtsk->stack_canary = get_random_int();#endif/* One for us, one for whoever does the "release_task()" (usually parent) */atomic_set(&tsk->usage,2);atomic_set(&tsk->fs_excl, 0);#ifdef CONFIG_BLK_DEV_IO_TRACEtsk->btrace_seq = 0;#endiftsk->splice_pipe = NULL;account_kernel_stack(ti, 1);return tsk;out:free_thread_info(ti);free_task_struct(tsk);return NULL;}
在专业高速缓冲内存上分配task_struct,并完成初始化
在普通内存中分配thread_info及连续的两个页面,完成初始化
将task_struct和thread_info联系起来
阅读全文
1 0
- linux源码解析-dup_task_struct函数
- linux源码解析-copy_process函数
- 源码解析: Imread函数
- 源码解析: Imread函数
- sort()函数源码解析
- cvCanny函数源码解析
- bind函数源码解析
- Linux webbench 源码解析
- linux源码解析-fork
- Linux wait函数解析
- linux icotl函数解析
- Linux signal函数解析
- linux wait函数解析
- linux icotl函数解析
- linux icotl函数解析
- linux icotl函数解析
- Linux多线程函数解析
- Linux多线程函数解析
- ubuntu16.04 vps搭建vpn
- Linux系列—iptables/netfilter命令参数详解中文手册
- FFMPEG学习【libswscale】
- Spring任务调度之quartz
- 使用TextInputLayout
- linux源码解析-dup_task_struct函数
- 26资源队列工作负载管理
- POJ3692——Kindergarten(最大二分匹配)
- Linux 开发中常用命令
- hpuoj 【1037】一个简单的数学题【同余定理】
- dojo与requireJS的分析
- Linux 终端下颜色的输出
- Hadoop学习之路-----不同进程通信的代理对象
- 170729 通信-流水灯实验