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

                        ——进程的描述和进程的创建

姓名:王玮怡  学号:20135116

一、理论部分

(一)进程的描述

1、进程描述符task_stuck数据结构(一)

操作系统三大功能:进程管理(核心)、内存管理、文件系统

PCB task_struct中包含:进程状态、进程打开的文件、进程优先级信息

进程控制块PCB——进程描述符task_stuck提供了内核所需了解的进程信息

Linux进程状态转换图:

2、进程描述符task_stuck数据结构(二)

  内核把进程的列表存放在任务队列的双向循环链表中

(1)非空双向链表结构

(2)空双向链表结构

(3)进程父子关系

(二)进程创建

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

(1)进程的创建:start_kernel ...cpu_idle -->kernel_init和kthreadd -->0、1、2号进程(其中1号进程是所有用户线程的祖先,2号进程是所有内核线程的祖先)

(2)fork()系统调用:在用户态创建一个子进程

  else if和else都会被执行:fork系统调用在父进程和子进程中各会返回一次,在子进程中pid的返回值为0,在父进程中的返回值为子进程的pid。

2、理解进程创建过程发杂代码的方法

创建新进程是通过复制当前进程来实现的,父、子进程大多数信息相同,但有些不同,如pid、内核堆栈等,并且只复制了一部分(内核堆栈栈底内容,SAVE_ALL部分)。

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

(1)系统调用内核处理函数sys_fork、sys_clone、sysvfork:

fork、vfork和clone三个系统调用都可以创建一个新进程,而且都是通过调用do_fork来实现进程的创建。

(2)do_fork()

(3)copy_procrss()中dup_task_stuck()复制PCB

(4)alloc_thread_info_node()分配内核堆栈空间

(5)copy_thread()中

  • struct pt_regs *childregs = task_pt_regs(p);  //从子进程的pid(stack内核堆栈)找到其栈空间,SAVE_ALL地址
  • *childregs = *current_pt_regs();  //拷贝当前进程(父进程)的内核堆栈的栈底(SAVE_ALL)的内容,内核堆栈已有数据的拷贝

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

  p->thread.ip = (unsigned long) ret_from_fork;  //调度到子进程时的第一条指令

当子进程获得CPU的控制权开始运行, ret_from_fork可以使其出栈从iret返回到子进程用户态。

二、实验部分:使用gdb跟踪创建新进程的过程

1、启动MenuOS,并查看fork功能:

2、gdb调试fork指令

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

(2)在新打开的shell窗口中进程调试:

(3)设置断点

(4)在MenuOS中执行fork,就会发现fork函数停在了父进程中

(5)继续执行之后,停在了do_fork的位置

然后n单步执行,依次进入copy_process、dup_task_struct

按s进入该函数,可以看到dst = src(也就是复制父进程的struct)

(6)在copy_thread中,可以看到把task_pg_regs(p)也就是内核堆栈特定的地址找到并初始化

三、总结

  Linux通过复制父进程来创建一个新进程,通过调用do_ fork来实现,并为新创建的进程动态分配一个task_ struct结构。

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

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  3. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  4. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  5. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  6. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  7. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

  8. 20175209 《Java程序设计》第九周学习总结

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

  9. 20175313 张黎仙《Java程序设计》第九周学习总结

    目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...

  10. 20175317 《Java程序设计》第九周学习总结

    20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...

随机推荐

  1. Python基础知识:函数

    1.定义函数和调用函数 #定义函数def def greet_user(username): '''简单的问候语''' print('Hello,%s!'%username) greet_user(' ...

  2. 如何快速安装visual studio 2017和破解

    https://sm.myapp.com/original/Development/vs_community__1229872941.1512460494-v15.5.0.exe visual stu ...

  3. WPFの获取屏幕分辨率并自适应

    double x = SystemParameters.WorkArea.Width;//得到屏幕工作区域宽度 double y = SystemParameters.WorkArea.Height; ...

  4. esp8266(2) 智能配置

    http://www.arduino.cn/thread-46594-1-1.html http://blog.csdn.net/sadshen/article/details/47049129 ht ...

  5. 很好的一篇eureka的讲解文章

    文章地址 http://nobodyiam.com/2016/06/25/dive-into-eureka/

  6. Vxlan学习笔记——原理(转)

    文章转自http://www.cnblogs.com/hbgzy/p/5279269.html 1. 为什么需要Vxlan 普通的VLAN数量只有4096个,无法满足大规模云计算IDC的需求,而IDC ...

  7. docker执行第一个应用

    概念科普 Docker image:镜像是只读的,镜像中包含有需要运行的文件.镜像用来创建container,一个镜像可以运行多个container:镜像可以通过Dockerfile创建,也可以从Do ...

  8. Objective-C autoreleasepool深入理解

    Objective-C autorelease // main.m int main(int argc, char * argv[]) { @autoreleasepool { } } clang - ...

  9. C# 语法五 单例类、单例模式

    1.优点 只有一个实例 2.缺点 a)这个实例不能随时释放掉,占用资源. b)每次使用,都要判断是否为空,增加消耗 3.适用场景 只能有一个实例的业务场景,例如:数据库连接对象(每次连接都是同一个连接 ...

  10. 分析网络流量Capsa笔记

    Capsa是一款网络分析仪,允许您监控网络流量,解决网络问题并分析数据包.通过提供生动的图表,通过设计良好的GUI提供丰富的统计信息和实时警报,Capsa可让IT管理员实时识别,诊断和解决有线和无线网 ...