进程创建、可执行文件的加载和进程执行进程切换以及分析fork、execve和进程切换

本文详细介绍了Linux进程的创建、可执行文件的加载和进程执行进程切换,重点关注fork、execve系统调用及进程切换的分析。通过阅读Linux内核代码、使用gdb跟踪do_fork函数,以及探讨ELF可执行文件格式,旨在理解编译链接过程。此外,还展示了如何使用execve加载可执行文件。
摘要由CSDN通过智能技术生成

实验介绍

学号尾数:186
原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/
引例:http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235
参考:https://www.cnblogs.com/fuchen1994/p/5400967.html

实验背景

代码运行在Ubuntu14.04上
虚拟机在Mac的Parallel Desktop上运行。

目标

理解进程创建、可执行文件的加载和进程执行进程切换,重点理解分析fork、execve和进程切换
分析fork函数对应的内核处理过程do_fork,理解创建一个新进程如何创建和修改task_struct数据结构;
使用gdb跟踪分析一个fork系统调用内核处理函数do_fork
理解编译链接的过程和ELF可执行文件格式等

实验步骤

1.阅读进程调度相关代码

代码来源:http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235;

task_struct的结构体

Linux系统是采用链式方式来组织PCB的,对于不同的状态建立起一个进程队列。在Linux内核中,使用一个名为task_struct的结构体来描述PCB.此处仅列出部分结构体的定义代码。

1235	struct task_struct {
1236	volatile long state;	/* -1 unrunnable, 0 runnable, >0 stopped */
1237	void *stack;
1238	atomic_t usage;
1239	unsigned int flags;	/* per process flags, defined below */
1240	unsigned int ptrace;

do_fork函数

Linux中创建进程有三个函

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值