Linux内核创建一个新进程的过程
2016-04-02 13:09
218 查看
Linux内核创建一个新进程的过程
20135224陈实 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000简介:
pcb定义:进程所需的各种执行与数据信息头
task_struct:一种数据结构,大致为:
State,Scheduling Information,Identifiers,IPC:Inter_Process Communication,SMP AND SO ON.
第一部分
分析内核处理过程:fork(),调用进程的通用函数。
long do_fork(unsigned long clone_flags关键部分: { p = copy_process(clone_flags, stack_start, stack_size, child_tidptr, NULL, trace);}
copy_process(),各种资源的初始化。
p = dup_task_struct(current):调用dup_task_struct()为新进程创建一个内核栈
if (retval)语句群,复制共享进程的的各个部分
dup_task_struct():
tsk = alloc_task_struct_node(node)为task_struct开辟内存
ti = alloc_thread_info_node(tsk, node)ti指向thread_info的首地址,同时也是系统为新进程分配的两个连续页面的首地址
err = arch_dup_task_struct(tsk, orig)复制父进程的task_struct信息到新的task_struct里
tsk->stack = ti;
setup_thread_stack(tsk, orig)初始化thread info结构
set_task_stack_end_magic(tsk)栈结束的地址设置数据为栈结束标示(for overflow detection)
第二部分
gdb跟踪sys_clone:利用GDB打开
利用b设置断点
断点分别设clone,fork,process,ret_from_fork等关键子函数
thread中p值
总结
操作系统通过复制父进程来创建一个新进程,通过调用do_fork来实现----每个新创建的进程动态地分配一个task_struct结构
为了把内核中的所有进程组织起来,Linux提供了几种组织方式,其中哈希表和双向循环链表方式是针对系统中的所有进程(包括内核线程),而运行队列和等待队列是把处于同一状态的进程组织起来
相关文章推荐
- linux修改文件属主以及文件权限
- centos7-初始化配置
- Linux _UDP 浅解
- Linux _ socket 文件系统套接字
- Linux _ pthread 线程 信号
- [Linux命令]Unix/Linux信号量的使用
- Linux 忘记 用户名密码
- Linux简单设备驱动(1):使用IO内存操作GPIO--LED
- 介绍linux设备驱动编程
- CentOS7 Minimal 安装后出现的若干问题解决办法
- 对Linux下常用头文件总结
- linux 内核源代码目录结构
- linux查看硬件配置命令
- linux读书笔记第三章
- Linux安装Anaconda
- centos6.6 常用巡检命令
- linux中的热插拔和mdev机制
- centos 开启VNC
- Centos 32位兼容库安装
- Linux系统编程——进程间通信:命名管道(FIFO)