作业六:分析Linux内核创建一个新进程的过程
分析Linux内核创建一个新进程的过程
进程描述符PCB----task_struct数据结构
操作系统:1.进程管理 2.内存管理 3 文件系统
一、新进程如何创建和修改task_struct数据结构
1.复制当前进程(创建新进程通过复制当前进程来实现)
2.给新进程分配新的内核堆栈
3.修改复制过来的进程数据(如pid,状态链表,内核堆栈,ip,sp)
1.进程创建

1.fork系统调用在父子进程各返回一次,子进程的返回值=0,父进程的返回值=子进程的PID
2.fork、vfork、clone三个系统调用可创建一个新进程,最后通过do_fork实现进程创建。
2.新进程的开始执行地点

1.ret_from_fork开始执行。
2.int指令和SAVE_ALL压倒内核栈的内容
3.ENTRY(ret_from_fork){
...jmp syscall_exit...} //跳转到system_call中的syscall_exit
4.由system_call中前面save_all判断,实际syacall_call之前的堆栈状态是一样,继续往下执行,返回用户态。不是父进程,而是子进程。

3.进程:处于执行期的程序以及相关的资源的总称。
1.fork()创建新进程,父进程用fork创建子进程。fork系统调用从内核返回两次:一次回到父进程,一次回到子进程。
2.在Linux内核中,fork()实际有clone()系统调用实现的。
3.程序通过exit()系统调用退出执行。最终中介进程并将其占用的资源释放掉。
4.进程描述符及任务结构
内核把进程的列表存放在任务队列的双向循环列表中
链表中每一项都是类型为task_struck,称为进程描述符的结构,该结构定义在<linux/sched.h>文件中
5.进程状态
(1)TASK_RUNNING(运行)——进程是可执行。进程在用户空间中执行的唯一可能的状态,也可以应用到内核空间中正在执行的
(2)TSK_INTERRUPTIBLE
(3) TASK_UNINTERRUPTIBLE
(4)_TASK_TRACED
(5)_TASK_STOOPED
6.进程上下文
一般程序在用户空间执行。当一个程序调执行了系统调用或者触发了某个异常,它就陷入了内核空间。成内核“代表进程执行”,并处于进程上下文中。
7.进程家族数
所有的进程都是PID为1的init进程的后代,内核在系统启动的最后阶段启动init进程。
二、使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone和分析fork函数对应的系统调用处理过程







三、总结部分
Linux系统创建一个新进程的理解
1.fork实际开销是复制父进程的页表以及给子进程创建唯一的进程描述符**
2.Linux通过clone()系统调用实现fork()**
3.fork(),vfork(),和clone()库函数都是根据各自需要的参数标志去调用clone(),然后由clone()调用do_fork**
do_fork函数调用了copy_process()函数,然后让进程执行
Linux通过复制父进程创建新进程,fork、vfork、clone都是通过do_exit实现进程的创建。
-A.复制一个PCB
-B.给新进程分配一个新的内核堆栈(复制了thread_info,不是复制了内核堆栈)
-C.修改复制的数据,即子进程初始化。
从用户态代码看父进程和子进程各返回一次,而子进程从ret_from_fork函数开始执行,从函数中跳转到syscall_exit,即system_call中的语句。
注明:郑伟 + 参考资料:《Linux内核设计与实现》 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
作业六:分析Linux内核创建一个新进程的过程的更多相关文章
- 实验 六:分析linux内核创建一个新进程的过程
实验六:分析Linux内核创建一个新进程的过程 作者:王朝宪 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...
- Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程
Linux内核分析第六周学习笔记--分析Linux内核创建一个新进程的过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- linux内核分析作业6:分析Linux内核创建一个新进程的过程
task_struct结构: struct task_struct { volatile long state;进程状态 void *stack; 堆栈 pid_t pid; 进程标识符 u ...
- 第六周分析Linux内核创建一个新进程的过程
潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: ...
- 20135202闫佳歆--week6 分析Linux内核创建一个新进程的过程——实验及总结
week 6 实验:分析Linux内核创建一个新进程的过程 1.使用gdb跟踪创建新进程的过程 准备工作: rm menu -rf git clone https://github.com/mengn ...
- 《Linux内核--分析Linux内核创建一个新进程的过程 》 20135311傅冬菁
20135311傅冬菁 分析Linux内核创建一个新进程的过程 一.学习内容 进程控制块——PCB task_struct数据结构 PCB task_struct中包含: 进程状态.进程打开的文件. ...
- Linux内核分析-分析Linux内核创建一个新进程的过程
作者:江军 ID:fuchen1994 实验题目:分析Linux内核创建一个新进程的过程 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/li ...
- 第六周——分析Linux内核创建一个新进程的过程
"万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 &q ...
- 实验六:分析Linux内核创建一个新进程的过程
原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 题目自拟,内容围绕对Linu ...
随机推荐
- 展示博客(Alpha版本)
小队名称:PHILOSOPHER 小组成员 [组长]金盛昌(201421122043).刘文钊(20142112255).陈笑林(201421122042) 张俊逸(201421122044).陈志建 ...
- 028、HTML 标签1列表、图片、表格
内容简单看一下理解就行了. HTML 是用来描述网页的一种语言.就是用来编写网页的语言 内容:换行.分割,标签属性,编码方式设置,字体标签,特殊符号,列表.图片.表格标签############### ...
- shp转oracle spatial
2010年12月1日 终于搞定了shp到oracle spatial,说下步骤和感受吧! 1 XP系统:转换工具的下载(shp2sdo.exe ):下载后把此文件复制到PATH变量包含的目录下(E: ...
- docker-machine create -d generic 运行的波折过程及遇见的问题
这是一个愚蠢的学习过程,但是因为觉得过程还是值得记录的,还是写了下来 2>driver = generic 1)在这个过程中使用的都是本地的mac系统,然后尝试在mac本地create -d g ...
- ipv6导致的域名解析慢,nslookup,lvs,hosts.conf
最近总是反应网站慢,先是查内网环境,又查机房网络环境,再查lvs配置,更查到xen开启导致的网络性能下降 更进一步的查到域名解析慢,最终发现ipv6的默认开启会导致域名解析慢: 而应用服务程序内部大多 ...
- 浅拷贝与深拷贝的实现方式、区别;deepcopy如果你来设计,如何实现(一)
浅拷贝与深拷贝的实现方式.区别:deepcopy如果你来设计,如何实现: copy浅拷贝:没有拷贝子对象,所以原始数据改变,子对象改变 deepcopy深拷贝:包含对象里面的子对象的拷贝,所以原始对象 ...
- mybatis的mapper代理,SqlMapConfig.xml中配置,输入和输出映射使用案例
public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private ...
- tarjan - 强连通
如果两个点可以互相到达,则称为强连通.如果有向图G每个点都可以互相到达,则称为强连通图.其中G中的极大强连通子图,则称为强连通分量.现求强连通分量是多少,且哪些点属于同一个强连通分量 tarjan由d ...
- HDU 2159 FATE(有选择物品总个数限制的完全背包,经典!!)
FATE Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 从源代码解释Android事件分发机制
在ViewRootImpl的setView方法中.用户的触摸按键消息是体如今窗体上的.而windowManagerService则是管理这些窗体,它一旦接收到用户对窗体的一些触摸按键消息,会进行对应的 ...