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

一、进程的创建

1. 相关知识
(1)操作系统内核实现系统操作的三大管理功能是进程管理,内存管理,文件系统,最核心的是进程管理。

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

2.用户态创建进程的方法

 执行结果:

 二、代码分析

1.fork、vfork、clone这3个系统调用和kernel_thread内核函数都可以创建一个新进程,而且都是通过do_fork函数来创建进程的。

2.do_fork代码:

do_fork()主要完成了调用copy_process()复制父进程信息、获得pid、调用wake_up_new_task将子进程加入调度器队列等待获得分配CPU资源运行、通过clone_flags标志做一些辅助工作。

3、如下的copy_process()函数代码:

copy_process函数主要完成了调用dup_task_struct复制当前进程(父进程)描述符task_struct、信息检查、初始化、把进程状态设置为TASK_PUNNING(此时子进程设置为就绪态)、采用写时复制技术逐一复制所有其他进程资源、调用copy_thread初始化子进程内内核栈、设置子进程pid等。

 

4.dup_task_struct复制当前进程(父进程)描述task_struct和copy_thread初始化子进程内核栈。

三、通过实验跟踪分析进程创建的过程

1.在已经完成了的MenuOS里面增加一个命令fork。

 

    MenuOS的运行效果:                                  

 

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

发现只输出了一个命令描述,后面没有执行,而是停在了sys_clone这里。如果继续执行,会停在do_fork的位置,从do_fork继续执行,停在copy_process,继续执行。停在dup_task_struct函数。

copy_process()是创建一个进程内容的主要代码

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值