作业信息
这个作业属于哪个课程 | <2020-2021-1Linux内核原理与分析)> |
---|---|
这个作业要求在哪里 | <2020-2021-1Linux内核原理与分析第七周作业> |
这个作业的目标 | <进程的描述和进程的创建> |
作业正文 | https://i.cnblogs.com/posts/edit;postId=13992908 |
1.进程的描述
操作系统内核实现操作系统的三大管理功能:
1.进程管理
2.内存管理
3.文件系统
2.Linux内核管理的进程状态转换
当使用fork()系统调用来创建一个新锦成时,新进程的状态是就绪态。当调度器选择这个新创建的进程
运行时,新创建的进程就切换到运行态。在Linux内核中,当进程是TASK_RUNNING状态时,它是可运行的,
也就是就绪态,是否在运行取决于它有没有获得CPU的控制权,也就是说这个进程有没有在CPU中实际执行。
如果在CPU中实际执行了,进程状态就是运行态,如果被内核调度出来了,在等待队列就是就绪态。
3.进程之间的父子、兄弟关系
进程描述符通过struct list_head tasks 双向链表来管理所有进程。关系示意图如下:
4.进程的创建过程分析
具体进程的创建大概就是把当前进程的描述符等相关进程资源复制一份,从而产生一个子进程,并根据子进程
的需要对复制的进程描述符做一些修改,然后把创建好的子进程放入运行队列。
fork():用户创建一个子进程的系统调用.
do_fork():完成调用copy_process()复制父进程信息、获得pid、调用wake_up_new_task将子进程加入调度器
队列等待获得分配CPU资源运行、通过clone_flags做一些辅助工作。
copy_process():调用dup_task_struct复制当前进程(父进程)描述符task_struct、信息检查、初始化等。
5.通过实验跟踪分析进程创建的过程
搭建环境:
使用gdb进行跟踪调试,首先在sys_clone、do_fork、dup_task_struct、copy_process、copy_thread、
ret_from_fork等处设置断点。
在gdb中continue执行到第一个断点SyS_clone处
继续执行