Linux系统fork执行过程

2015年04月08日 18:18:48

阅读数:2207

郑德伦 原创作品转载请注明出处 《Linux内核分析》MOOC课程 
http://mooc.study.163.com/course/USTC-1000029000 
一、配置环境: 
首先我们把环境配置完成 
在实验楼中输入

rm menu –rf
git clone https://github.com/mengning/menu.git
cd menu
mv test_fork.c test.c
make rootfs
  • 1
  • 2
  • 3
  • 4
  • 5

启动MenuOS后发现fork已经被加入到了MenuOS中了

 
二、跟踪调试fork 
输入qemu –kernel ../linux-3.18.6/arch/x86/boot/bzImage –initrd ../rootfs.img –s –S 
然后在另一个终端输入

gdb
(gdb)file linux-3.18.6/vmlinux
(gdb)target remote:1234
(gdb)b sys_clone
(gdb)b do_fork
(gdb)b dup_task_struct
(gdb)b copy_process
(gdb)b copy_thread
(gdb)b ret_from_fork
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

设置好断点之后 我们进行跟踪fork的过程 
首先会触发sys_clone的系统调用 
 
然后进入do_fork函数 
 
在do_fork函数中会调用copy_process 
 
在copy_process中调用dup_task_struct和copy_thread 
 
 
最后调用ret_from_fork()完成进程的fork 
 
整个过程我们用流程图表示一下: 
 
三、总结 
Linux创建一个新进程时,可能会使用到sys_vfork sys_clone sys_fork系统调用,但是这三个系统调用都会调用do_fork函数,do_fork会调用copy_process来复制父进程的资源给子进程。在copy_process中有各种copy_xxx 函数来进行复制初始化工作。完成各项工作之后会执行ret_from_fork,这是子进程的起点。

ret_from_fork相关推荐

  1. Linux内核学习总结

    作业一计算机是如何工作的进行http://www.cnblogs.com/zhengwei0712/p/5207299.html 作业二操作系统是如何工作的进行http://www.cnblogs.c ...

  2. linux 内核 fork,《Linux内核分析》之分析fork函数对应的系统调用处理过程

    实验过程 [toggle hide="yes" title="实验过程" color="#f50000"] 1.在实验楼中shell终端依次 ...

  3. Linux内核源代码情景分析-fork()

    父进程fork子进程: child = fork() fork经过系统调用.来到了sys_fork.具体过程请參考Linux内核源码情景分析-系统调用. asmlinkage int sys_fork ...

  4. Linux 内核的一个问题

    2019独角兽企业重金招聘Python工程师标准>>> 是virtio 驱动,但是没有启动 virtio-mmio virtio-mmio.0: Failed to enable 6 ...

  5. LINUX内核分析第八周总结:进程的切换和系统的一般执行过程

    一.进程调度与进程切换 1.不同的进程有不同的调度需求 第一种分类: I/O密集型(I/O-bound) 频繁的进行I/O 通常会花费很多时间等待I/O操作的完成 CPU密集型(CPU-bound) ...

  6. linux进程管理之进程创建

    所谓进程就是程序执行时的一个实例. 它是现代操作系统中一个很重要的抽象,我们从进程的生命周期:创建,执行,消亡来分析一下Linux上的进程管理实现. 一:前言 进程管理结构; 在内核中,每一个进程对应 ...

  7. 关于kthreadd

    因为所涉及的话题在代码的实现上是体系架构相关的,所以本贴基于ARM架构. 这里所谓的内核线程,实际上是由kernel_thread函数创建的一个进程,有自己独立的task_struct结构并可被调度器 ...

  8. Java 离 Linux 内核有多远?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料!  来源 | 公众号「开源中国」 在往期的文章中,给大家分 ...

  9. linux内核分析 网络九,“Linux内核分析”实验报告(九)

    一 Linux内核分析博客简介及其索引 本次实验简单的分析了计算机如何进行工作,并通过简单的汇编实例进行解释分析 在本次实验中 通过听老师的视频分析,和自己的学习,初步了解了进程切换的原理.操作系统通 ...

最新文章

  1. Bert系列(三)——源码解读之Pre-train
  2. Microbiome:山大杜宗军团队揭示捕食性细菌新类群-慢生单胞菌目细菌独特的生境适应性...
  3. 原码、反码、补码的运算 【2分钟掌握】
  4. Kudu1.1.0 、 Kudu1.2.0 Kudu1.3.0的版本信息异同比较
  5. hbuilder设置html浏览器打开,HBuilder X如何配置浏览器操作配置方法
  6. PHP数据layui表格,基于layui和thinkphp数据表格的数据接口,layui表格局部刷新
  7. Python 获取 网卡 MAC 地址
  8. JavaScript数据类型之比较运算符(8)
  9. SQL系统教程一(表之间的连接关系)
  10. MATLAB软件基础
  11. 2021-09-1031. 下一个排列 数组
  12. 高中计算机教师学期论文,高中信息技术论文范文
  13. Python values()函数用法
  14. 1.5.33 计算分数加减表达式的值
  15. 中华传统文化节日网页设计制作 简单静态HTML网页作品 二十四节气网页作业成品
  16. 亚洲上海linux_亚洲企鹅中学Linux俱乐部启发社区
  17. 读论文,衣物检索:Clothing Retrieval with Visual Attention Model(2017.10.31)
  18. 手撕python_手撕LeetCode #1171——Python
  19. HPE SPP镜像下载
  20. JAVA实训项目之学生管理系统(JDBC+GUI)

热门文章

  1. GooglePlay内购In-app Billing 总结~
  2. 别等待-想到什么就去做
  3. 如何将视频做成gif动图?教你在线视频转gif的方法
  4. Java基于微信小程序的新冠疫苗预约小程序 springboot+vue+elementUI
  5. python分割字符串保留分隔符_在Python中,如何分割一个string并保留分隔符?
  6. 《聊聊热点》第二篇:码农界的春联真扎心
  7. jpg格式怎么转换成plt格式的_CAD图纸如何转换成清晰的JPG格式图片?
  8. libvirt开启Linux虚拟机启动菜单 boot menu timeout
  9. php多条件筛选查询mysql
  10. 兼容ie8的rem.js在ie下没有用