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

第六周
阅读学习教材「庖丁解牛Linux 分析 」第6章,有问题优先使用chatgpt等AI工具。或者到蓝墨云班课中提问,24小时内回复,鼓励解答别人问题,提问前请阅读「如何提问」。

教材深入学习关注豆列「Linux内核及安全」。

学习蓝墨云班课中第六周视频「扒开系统调用的三层皮?(下)」,并完成实验楼上配套实验五。,注意从下往上看。基于树莓派或其他平台完成ARM相关内容。

在本周日晚12:00前发学习博客(标题 学号《Linux内核原理与分析》第六周作业),重点是遇到的问题和解决方案内容涵盖教材学习和视频,格式用Markdown。不按时交作业会扣分。


























































































fork()系统调用在Linux中用于创建新的进程。在内核中,这实际上是通过sys_clone函数来完成的。sys_clone是更底层、更通用的进程和线程创建工具,而fork()只是其特定的使用情况。

创建和修改task_struct数据结构:
当调用fork()时,会创建一个新的进程。Linux系统中,每个进程都对应一个task_struct数据结构。这个数据结构存储了进程的所有信息,如进程状态、进程ID、父进程ID、堆栈、调度信息等。

sys_clone会做以下几件事情:

分配新的task_struct结构体。
根据调用sys_clone时传入的标志来复制或分享资源,如文件描述符、内存空间等。
为新进程设置堆栈。
设置新进程的状态为可运行。
将新进程插入到调度队列。

使用gdb跟踪sys_clone:

使用一个Linux虚拟机环境,如实验楼所提供的。
安装相应的内核调试信息包和gdb。
使用gdb启动一个新的进程,并断点设置在sys_clone。
当断点触发,你可以查看和跟踪函数的执行,了解task_struct如何创建和修改。

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

首先打开实验楼,进入LinuxKernel目录下,进入menu目录

在这里插入图片描述

1.编辑test.c如下

在这里插入图片描述

然后使用make rootfs

在这里插入图片描述

2.test.c中添加如下内容
MenuConfig("fork","Fork a new process",Fork);

在这里插入图片描述
在这里插入图片描述

3.利用gdb跟踪调试,在sys_clone、do_fork、dup_task_struct、copy_process、copy_thread、ret_from_fork设置断点

在这里插入图片描述
在这里插入图片描述

设置完断点后continue,执行fork,会发现进程会在sys_clone停下,继续执行才会到do_fork的位置,依次到后面位置。

在这里插入图片描述

三、实验总结

在本次实验中,深入探索了Linux的fork()系统调用及其在内核中的实现sys_clone。我们了解了如何通过sys_clone创建和修改task_struct数据结构,这是每个进程的核心描述信息。通过使用gdb,能够跟踪sys_clone的执行,从而更加深入地了解进程的创建过程。最后,学习了新进程从何处开始执行,以及为什么它可以从这个地方顺利执行下去。这个实验为我们提供了深入了解Linux进程管理的宝贵机会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值