2023-2024-1 20232824《Linux内核原理与分析》第七周作业

一、分析 Linux 内核创建一个新进程的过程

1、阅读理解 task_struct 数据结构
2、分析 fork 函数对应的内核处理过程 sys_clone,理解创建一个新进程如何创建和修改 task_struct 数据结构
3、使用 gdb 跟踪分析一个 fork 系统调用内核处理函数 sys_clone ,验证自己对 Linux 系统创建一个新进程的理解, 特别关注新进程是从哪里开始执行的?为什么从那里能顺利执行下去?即执行起点与内核堆栈如何保证一致。
4、根据本周所学知识分析 fork 函数对应的系统调用处理过程

二、实验

1、首先重新编译LinuxKernel中的menu,再将test_fork.c覆盖在运行程序test.c上

cd ~/LinuxKernel
rm menu -rf
git clone https://github.com/mengning/menu.git
cd menu 
mv test_fork.c test.c//在MenuOS中增加fork命令,并覆盖掉test.c文件
make rootfs  
MenuOS>>help  

可以发现help中已经有fork指令。

2、激活连接

首先建立连接

fork成功调用。

3、使用gdb对fork()进行添加断点分析

4、

"fork" 函数在 Linux 内核中被用于创建新进程。实际上,它是一个系统调用,主要任务是复制当前父进程的状态,以创建一个新的子进程。这个子进程在创建后,会与父进程拥有相同的代码和数据,但它们运行在不同的进程空间中。

"fork" 函数的系统调用过程包括多个内核函数,其中最重要的是 "do_fork" 函数。它负责完成子进程的创建和初始化,并调用 "copy_process" 函数来复制父进程的关键数据结构。这些数据结构包括文件描述符表、内存映射、信号处理程序等。这个复制过程确保了子进程继承了父进程的核心状态。

此外,还有一个重要的函数叫做 "copy_thread"。它的主要任务是复制内核堆栈的内容,以确保新进程拥有独立的内核堆栈。这是非常重要的,因为它确保了父进程和子进程在执行期间不会相互干扰。

总之,"fork" 函数是 Linux 内核中的一个关键系统调用,用于创建新进程并继承父进程的状态,从而为多进程编程提供了基础。

三、总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值