进程的描述和进程的创建

一.进程的描述

  1. 进程描述符task_struct数据结构:

(1)操作系统的三大功能:

进程管理、内存管理、文件系统

(2)进程的作用:

将信号、进程间通信、内存管理和文件系统联系起来

(3)进程控制块PCB——task_struct数据结构

提供了内核需要了解的信息

(4)task_struct结构庞大,有400多行代码。包含了进程状态、内核堆栈等相关信息的定义。

(5)Linux的进程和操作系统原理中描述的进程状态有所不同,实际内核中,就绪和运行状态都用TASK_RUNNING表示。

(6)进程标志符pid/tpid——用于标识进程

二.进程的创建

1.进程的创建概览及fork一个进程的用户态代码:

(1)进程创建的步骤:复制进程描述符;修改子进程的PCB信息

(2)shell命令如何创建子进程:

使用fork函数在用户态创建子进程;fork系统调用在父进程和子进程各返回一次;在子进程中,返回0,在父进程中,返回子进程ID。

2.理解进程创建过程复杂代码的方法:

先根据对功能的理解,自己预想可以怎样实现;再从源代码中,找到和预想相似的证据。

Fork代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char * argv[])
{
int pid;
/* fork another process */
pid = fork();
if (pid < )
{
/* error occurred */
fprintf(stderr,"Fork Failed!");
exit(-);
}
else if (pid == ) //pid == 0和下面的else都会被执行到(一个是在父进程中即pid ==0的情况,一个是在子进程中,即pid不等于0)
{
/* child process */
printf("This is Child Process!\n");
}
.else
.{
./* parent process */
.printf("This is Parent Process!\n");
./* parent will wait for the child to complete*/
.wait(NULL);
.printf("Child Complete!\n");
.}
.}

3.浏览进程创建过程相关的关键代码

4.创建的新进程是从哪里开始执行的?

代码为:

*childregs = *current_pt_regs(); //复制内核堆栈
childregs->ax = ; //子进程的fork返回0 p->thread.sp = (unsigned long) childregs; //调度到子进程时的内核栈顶
p->thread.ip = (unsigned long) ret_from_fork; //调度到子进程时的第一条指令地址

三、实验部分

更新menu内核,然后删除test_fork.c以及test.c

gdb调试fork命令:

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

设置断电:

在Menu系统中输入fork指令,可以看到只输出了fork功能的描述,在断点处sys_clone处停止了。继续运行,观察每个断点出的结果。

四、总结:

创建一个新进程的执行过程:

1.通过调用do_fork来实现进程的创建;
2.复制父进程PCB--task_struct来创建一个新进程,要给新进程分配一个新的内核堆栈;
3.修改复制过来的进程数据,比如pid、进程链表等等执行copy_process和copy_thread
4、创建成功

郝智宇  无转载  《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

《Linux内核分析》第六周学习小结的更多相关文章

  1. LINUX内核分析第六周学习总结——进程的描述与创建

    LINUX内核分析第六周学习总结--进程的描述与创建 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc ...

  2. linux内核分析第六周学习笔记

    LINUX内核分析第六周学习总结 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.c ...

  3. LINUX内核分析第六周学习总结——进程的描述和进程的创建

    LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

  4. Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程

    Linux内核分析第六周学习笔记--分析Linux内核创建一个新进程的过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  5. 《Linux内核分析》第一周学习小结 计算机是如何工作的?

    <Linux内核分析>第一周.计算机是如何工作的? 20135204 郝智宇  一.存储程序计算机工作模型 1.      冯诺依曼体系结构: 数字计算机的数制采用二进制:计算机应该按照程 ...

  6. Linux内核分析第六周学习总结:进程的描述和进程的创建

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程的描述 ...

  7. 《Linux内核分析》第二周学习小结 操作系统是如何工作的?

    郝智宇   无转载   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈: 1.计算机是 ...

  8. Linux内核分析——第六周学习笔记20135308

    第六周 进程的描述和进程的创建 一.进程描述符task_struct数据结构 1.操作系统三大功能 进程管理 内存管理 文件系统 2.进程控制块PCB——task_struct 也叫进程描述符,为了管 ...

  9. Linux内核分析——第六周学习笔记

    进程的描述和进程的创建 前言:以下笔记除了一些讲解视频中的概念记录,图示.图示中的补充文字.总结.分析.小结部分均是个人理解.如有错误观点,请多指教! PS.实验操作会在提交到MOOC网站的博客中写.

  10. LINUX内核分析第七周学习总结——可执行程序的装载

    LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

随机推荐

  1. safari 与 chrome 的小区别大BUG

    safari 与 chrome 的小区别大BUG 时间:2016-11-01 17:33:19 作者:zhongxia 原文地址:https://github.com/zhongxia245/blog ...

  2. web页面中快速找到html对应元素两种方法

    一.第一种方法(通过先进入开发模式然后再去选择网页元素) 1.打开IE.Chrome.FireFox等,按 F12 键进入开发模式 2.在打开的控制窗口左上角有个  箭头 按钮,点击它之后,此时将鼠标 ...

  3. Java中关于AbstractQueuedSynchronizer的入门(二)

    AQS是一个同步器的基础类,里面的关键字段: //如下关键字段都是volatile类型 /** * Head of the wait queue, lazily initialized. Except ...

  4. Linux 之 rsyslog 系统日志转发

    一.rsyslog 介绍 ryslog 是一个快速处理收集系统日志的程序,提供了高性能.安全功能和模块化设计.rsyslog 是syslog 的升级版,它将多种来源输入输出转换结果到目的地,据官网介绍 ...

  5. Echo团队Alpha冲刺随笔 - 第一天

    项目冲刺情况 进展 每个人开始搭建自己要用的各种框架.库,基本实现了登录功能 问题 除了框架使用问题外,暂未遇到其他疑难杂症 心得 今天有一个还可以的开头,相信后续会挺顺利的 今日会议内容 黄少勇 今 ...

  6. coredns CrashLoopBackOff 报错

    1.kubectl logs -f coredns-99b9bb8bd-47mvf -n kube-system .:53 2018/09/22 07:39:37 [INFO] CoreDNS-1.2 ...

  7. 一、java三大特性--封装

    封装字面意思即包装.专业点来说就是数据隐藏,是指利用抽象数据将数据和基于数据的操作封装起来,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏细节,只保留一些对外的接口和外部 ...

  8. BZOJ3926 ZJOI2015 诸神眷顾的幻想乡 Trie、广义SAM

    传送门 树上的任意一条路径一定会在以某一个叶子节点为根的树上成为一条直上直下的链,而总共只有\(20\)个叶子节点. 于是每一次选所有叶子节点中的一个作为根,形成一个\(Trie\),把\(20\)个 ...

  9. Luogu4137 Rmq problem/mex 主席树

    传送门 用主席树水莫队题…… 我们对于前缀和建立主席树,对于主席树中的每一个叶子节点表示它对应的数字最后出现的位置的编号,非叶子节点求左右节点的最小值,那么对于每一次询问$l,r$就是在第$r$棵主席 ...

  10. 【php增删改查实例】第二十节 - 把用户管理页面集成到main.php中

    把这个代码: <a href="javascript:openTab('用户管理','user/userManage.html ','icon-roleManage')" c ...