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

一.进程的创建

相关知识

  • 操作系统内核实现系统操作的三大管理功能是进程管理,内存管理,文件系统,最核心的是进程管理。
  • 操作系统原理中的进程有就绪态、运行态、阻塞态。
  • Linux进程的状态和操作系统原理的描述进程状态有所不同,比如就绪状态和运行状态都是TASK_RUNNING。(这个表示它是可运行的,但是实际上有没有在运行取决于它是否占有CPU)。
  • fork被调用一次,能够返回两次。在父进程中返回新创建子进程的pid;在子进程中返回0.
  • 调用fork之后,数据、堆、栈有两份,代码仍然为一份(这个代码段成为两个进程的共享代码段)。当父子进程有一个想要修改数据或者堆栈时,两个进程真正分裂。

二.实验过程

打开实验楼shell,输入图中命令,删除原来的menu,并clone新的menu,用test_fork.c覆盖test.c,重新执行make rootfs:

2.下面设置几个断点:sys_clone、do_fork、dup_task_struct、copy_process、copy_thread、ret_from_fork等处设置断点。

三.分析

1.分析 fork 函数对应的内核处理过程 sys_clone

fork 函数在操作系统中用于创建一个新的进程,这个新进程是调用进程的一个拷贝,通常称为子进程。在 Linux 内核中,fork 函数的实现是通过 sys_clone 系统调用来完成的。sys_clone 是Linux内核中的系统调用,用于创建新进程。它复制父进程状态,分配资源,并返回子进程ID。父子进程共享内存,但拥有独立执行环境。

2.理解创建一个新进程如何创建和修改 task_struct 数据结构

进程描述符(task_struct)用来描述进程的数据结构,可以理解为进程的属性。比如进程的状态、进程的标识(PID)等,都被封装在了进程描述符这个数据结构中;创建新进程时,内核分配新的task_struct数据结构,复制父进程信息,修改子进程特定字段如进程ID和状态,保留资源共享。

3.分析 fork 函数对应的系统调用处理过程:

(1)调用copy_process,将当期进程复制一份出来为子进程,并且为子进程设置相应地上下文信息。
(2)初始化vfork的完成处理信息(如果是vfork调用)
(3)调用wake_up_new_task,将子进程放入调度器的队列中,此时的子进程就可以被调度进程选中,得以运行。
(4)如果是vfork调用,需要阻塞父进程,知道子进程执行exec。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值