linux内核学习之六 进程创建过程学习
一 关于linux进程概念的补充
关于进程的基本概念这里不多说,把自己的学习所得作一些补充:
1. 在linux内核中,系统最多可以有64个进程同时存在。
2.linux进程包含的关键要素:一段可执行的程序;专用的系统堆栈空间;内核中它的控制块(进程控制块);独立的存储空间。
3. 系统的第一个进程由系统初始化生成。
4. 内核通过一个唯一的进程标识号PID来标识每个进程。
5. 用数据结构task_struct表示一个进程,包括进程的属性和状态。task_struct 结构中的指向前后进程的指针形成了task数组。
6. 当新进程生成时,linux为新进程分配一个task_struct结构,然后将指针保存在task数组中。
二 调试
在前次实验的基础上,添加代码如下:

在menuos中运行结果,可以看到添加了fork命令:

设置断点:

程序停在第一个断点处:

模拟器显示:

继续运行,程序停在第二个断点处:

模拟器显示:

接着运行,停在第三个断点处:

第四个断点:

最后结果如上面的第二张图,不重复了。在menuos中命令行的方式输入fork,没有立即显示结果,在gdb中多次输入”c“后,打印pid信息。
三 分析总结
先附上一张自己理解的流程图:

自己的理解:
首先用户空间应用程序执行创建进程的系统调用fork(),vfork(),clone(),然后切换到内核空间(具体过程可见以前的博客),对于创建进程,内核都是执行的do_fork(),在do_fork()函数中调用函数copy_process(),该函数创建进程描述符以及子进程执行所需要的其他数据结构,初步复制父进程的信息如堆栈。但是子进程是从哪里开始执行的?从分析代码可知(p->thread.ip = (unsigned long) ret_from_fork;),子进程是从ret_from_fork标志处开始执行,在ret_from_fork 的末端执行了syscall_exit,结合上次的学习可知,该标志标识了从内核空间返回到内核空间过程。至此完成了fork()创建进程的过程。(细节还有待了解。。。)
by:方龙伟
原创作品 转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
linux内核学习之六 进程创建过程学习的更多相关文章
- 《Linux内核分析》 week6作业-Linux内核fork()系统调用的创建过程
一.进程控制块PCB-stack_struct 进程在操作系统中都有一个结构,用于表示这个进程.这就是进程控制块(PCB),在Linux中具体实现是task_struct数据结构,它主要记录了以下信息 ...
- 《Linux内核分析》第八周学习总结
<Linux内核分析>第八周学习总结 ——进程的切换和系统的一般执行过程 姓名:王玮怡 学号:20135116 ...
- 《Linux内核分析》第七周学习总结
<Linux内核分析>第七周学习总结 ——可执行程序的装载 姓名:王玮怡 学号:20135116 一.理论部分总结 (一)可执行程序的装载 ...
- 《Linux内核分析》第六周学习总结
<Linux内核分析>第六周学习总结 ——进程的描述和进程的创建 姓名:王玮怡 学号:20135116 一.理论部分 (一)进程的描述 1 ...
- 《Linux内核分析》第八周学习笔记
<Linux内核分析>第八周学习笔记 进程的切换和系统的一般执行过程 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163 ...
- 《Linux内核分析》第七周学习笔记
<Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- 《Linux内核分析》第六周学习笔记
<Linux内核分析>第六周学习笔记 进程的描述和创建 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- 《Linux内核分析》第三周学习报告
<Linux内核分析>第三周学习报告 ——构造一个简单的Linux系统MenuOS 姓名:王玮怡 学号:201351 ...
- 《Linux内核分析》第三周学习笔记
<Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...
随机推荐
- spring4+websocket+nginx详细配置
实现的版本jdk1.7.0_25, tomcat7.0.47.0, Tengine/2.1.1 (nginx/1.6.2), servlet3.0, spring4.2.2 使用maven导入版本3. ...
- Java多线程同步 synchronized 关键字的使用
代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A, ...
- CDN加速原理
原文链接:http://www.72e.net/cdnspeed/cdnyuanli.aspx 首先,让我们来看一下传统的Internet网络的基本结构和数据传输情况,如下图所示. Internet ...
- js邮箱自动补全
邮箱自动补全js和jQuery html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...
- 规则“Windows Server 2003 FILESTREAM 修补程序检查” 失败。
近期在客户环境搭建SQL故障转移群集,操作系统为SQL Server 2012R2,数据库版本为SQL Server2008 R2,在安装过程中遇到问题:没有安装Windows Server 2003 ...
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视 ...
- DashPathEffect
DashPathEffect 可以实现以动画的形式画线的效果. 通过setPathEffect()方法为画笔Paint对象设置绘制路径的特效. PathEffect pathEffect=new Da ...
- 了解Android的编译器
了解一下Android的编译器并记录下来: Android在4.4以前是使用Dalvik VM的,通过Just In Time(JIT即时编译)来完成编译工作,在Android4.4提供了一种测试版本 ...
- Maplace.js – 小巧实用的 jQuery 谷歌地图插件
Maplace.js是一个小的显示谷歌地图的 jQuery 插件,帮助你把谷歌地图嵌入到你的网站,快速在地图位置上创建标记和控制菜单.它需要 jQuery 和谷歌地图 API v3 支持,所以这两个都 ...
- linux哲学思想
linux哲学思想 1.一切皆为文件 linux将所有的对象几乎都抽象为文件,无论是硬件设备.还是通讯接口都当做文件处理,这样可以设计统一的访问控制操作(read();write();delete() ...