ret_from_fork
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相关推荐
- Linux内核学习总结
作业一计算机是如何工作的进行http://www.cnblogs.com/zhengwei0712/p/5207299.html 作业二操作系统是如何工作的进行http://www.cnblogs.c ...
- linux 内核 fork,《Linux内核分析》之分析fork函数对应的系统调用处理过程
实验过程 [toggle hide="yes" title="实验过程" color="#f50000"] 1.在实验楼中shell终端依次 ...
- Linux内核源代码情景分析-fork()
父进程fork子进程: child = fork() fork经过系统调用.来到了sys_fork.具体过程请參考Linux内核源码情景分析-系统调用. asmlinkage int sys_fork ...
- Linux 内核的一个问题
2019独角兽企业重金招聘Python工程师标准>>> 是virtio 驱动,但是没有启动 virtio-mmio virtio-mmio.0: Failed to enable 6 ...
- LINUX内核分析第八周总结:进程的切换和系统的一般执行过程
一.进程调度与进程切换 1.不同的进程有不同的调度需求 第一种分类: I/O密集型(I/O-bound) 频繁的进行I/O 通常会花费很多时间等待I/O操作的完成 CPU密集型(CPU-bound) ...
- linux进程管理之进程创建
所谓进程就是程序执行时的一个实例. 它是现代操作系统中一个很重要的抽象,我们从进程的生命周期:创建,执行,消亡来分析一下Linux上的进程管理实现. 一:前言 进程管理结构; 在内核中,每一个进程对应 ...
- 关于kthreadd
因为所涉及的话题在代码的实现上是体系架构相关的,所以本贴基于ARM架构. 这里所谓的内核线程,实际上是由kernel_thread函数创建的一个进程,有自己独立的task_struct结构并可被调度器 ...
- Java 离 Linux 内核有多远?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「开源中国」 在往期的文章中,给大家分 ...
- linux内核分析 网络九,“Linux内核分析”实验报告(九)
一 Linux内核分析博客简介及其索引 本次实验简单的分析了计算机如何进行工作,并通过简单的汇编实例进行解释分析 在本次实验中 通过听老师的视频分析,和自己的学习,初步了解了进程切换的原理.操作系统通 ...
最新文章
- Bert系列(三)——源码解读之Pre-train
- Microbiome:山大杜宗军团队揭示捕食性细菌新类群-慢生单胞菌目细菌独特的生境适应性...
- 原码、反码、补码的运算 【2分钟掌握】
- Kudu1.1.0 、 Kudu1.2.0 Kudu1.3.0的版本信息异同比较
- hbuilder设置html浏览器打开,HBuilder X如何配置浏览器操作配置方法
- PHP数据layui表格,基于layui和thinkphp数据表格的数据接口,layui表格局部刷新
- Python 获取 网卡 MAC 地址
- JavaScript数据类型之比较运算符(8)
- SQL系统教程一(表之间的连接关系)
- MATLAB软件基础
- 2021-09-1031. 下一个排列 数组
- 高中计算机教师学期论文,高中信息技术论文范文
- Python values()函数用法
- 1.5.33 计算分数加减表达式的值
- 中华传统文化节日网页设计制作 简单静态HTML网页作品 二十四节气网页作业成品
- 亚洲上海linux_亚洲企鹅中学Linux俱乐部启发社区
- 读论文,衣物检索:Clothing Retrieval with Visual Attention Model(2017.10.31)
- 手撕python_手撕LeetCode #1171——Python
- HPE SPP镜像下载
- JAVA实训项目之学生管理系统(JDBC+GUI)
热门文章
- GooglePlay内购In-app Billing 总结~
- 别等待-想到什么就去做
- 如何将视频做成gif动图?教你在线视频转gif的方法
- Java基于微信小程序的新冠疫苗预约小程序 springboot+vue+elementUI
- python分割字符串保留分隔符_在Python中,如何分割一个string并保留分隔符?
- 《聊聊热点》第二篇:码农界的春联真扎心
- jpg格式怎么转换成plt格式的_CAD图纸如何转换成清晰的JPG格式图片?
- libvirt开启Linux虚拟机启动菜单 boot menu timeout
- php多条件筛选查询mysql
- 兼容ie8的rem.js在ie下没有用