一 关于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内核学习之六 进程创建过程学习的更多相关文章

  1. 《Linux内核分析》 week6作业-Linux内核fork()系统调用的创建过程

    一.进程控制块PCB-stack_struct 进程在操作系统中都有一个结构,用于表示这个进程.这就是进程控制块(PCB),在Linux中具体实现是task_struct数据结构,它主要记录了以下信息 ...

  2. 《Linux内核分析》第八周学习总结

    <Linux内核分析>第八周学习总结                                      ——进程的切换和系统的一般执行过程 姓名:王玮怡  学号:20135116 ...

  3. 《Linux内核分析》第七周学习总结

    <Linux内核分析>第七周学习总结                         ——可执行程序的装载 姓名:王玮怡  学号:20135116 一.理论部分总结 (一)可执行程序的装载 ...

  4. 《Linux内核分析》第六周学习总结

    <Linux内核分析>第六周学习总结                         ——进程的描述和进程的创建 姓名:王玮怡  学号:20135116 一.理论部分 (一)进程的描述 1 ...

  5. 《Linux内核分析》第八周学习笔记

    <Linux内核分析>第八周学习笔记 进程的切换和系统的一般执行过程 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163 ...

  6. 《Linux内核分析》第七周学习笔记

    <Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...

  7. 《Linux内核分析》第六周学习笔记

    <Linux内核分析>第六周学习笔记 进程的描述和创建 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...

  8. 《Linux内核分析》第三周学习报告

    <Linux内核分析>第三周学习报告                                    ——构造一个简单的Linux系统MenuOS 姓名:王玮怡  学号:201351 ...

  9. 《Linux内核分析》第三周学习笔记

    <Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...

随机推荐

  1. 自定义一个类似UIAlertView的弹出框

    这个是和UIAlertView类似,但是可以自定义view的样式废话不多说,上代码: 首先第一步:创建一个继承自View的类如: #import <UIKit/UIKit.h> @clas ...

  2. application、viewstate、纯HTML提交方式

    Application - 全局公共变量组 存放位置:服务端 所有的访问用户都是访问的同一个变量 声明周期:永久 用法同session类似 viewstate-病例 因为http的无状态性,需要记录上 ...

  3. linux node安装

    安装node0.10.24版本,升级了两个版本/usr/local/src/node/0.10.24/usr/local/n/versions/node/4.4.7/usr/local/n/versi ...

  4. js小程序写法优化

    (function(){ var gcld_but = document.getElementById("gcld_but"), gcld_but_li = gcld_but.ge ...

  5. ROS学习笔记(七)——节点

    NEW 1 #打开新的终端,以后不再注释$ sudo apt-get install ros-<distro>-ros-tutorials #下载一个教学用的仿真器$ roscore #运 ...

  6. Perl--学习记录(实时更新)

    标量变量(varibale)以美元符号($)开头,这个符号也成为魔符(sigil).Perl通过魔符来区分它是什么类型的变量. Perl里面大部分变量名称习惯使用全小写.而使用全大写的(比如$ARGV ...

  7. 强大的打印功能jatoolsPrinter使用总结

    最近功能做项目,需要实现打印条码标签的功能,对于第一次接触打印机的小白来说简直是折磨死我拉,公司采购的打印机是斑马的GK888T,其实,如果单纯的想实现能打印出来标签的话,直接用window.prin ...

  8. 不在折腾---hive-0.13.1-bin

    Hive只在一个节点安装即可 上传tar包 解压 > tar zxvf hive-0.13.1-bin.tar.gz 配置mysql * 检查MySQL是否安装:rpm -qa | grep m ...

  9. 51nod1265 四点共面

    题目链接:51nod 1265 四点共面 四个点构成的三个向量a,b,c共面的充要条件是存在不全为零的实数x,y,z满足x*a+y*b+z*c=0,然后想到线代了.. 其实就是三个向量的混合积为0:( ...

  10. html slelect 标签默认值

    <select name="channelCode" id="channelCode" class="all_input" style ...