2020-2021-1 20209320 《Linux内核原理与分析》第七周作业

作业信息

这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)>
这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第七周作业>
这个作业的目标 <分析Linux内核创建一个新进程的过程>
作业正文 https://www.cnblogs.com/dyyblog/p/14001867.html

一.进程描述

基本概念

程序:
为了完成特定任务的一系列指令的有序集合。存储在磁盘上,程序 : 代码 + 数据。
进程:
程序的一次动态执行过程,存储在内存中,每个程序都有自己的状态,每个进程都有自己的虚拟地址空间,进程 : 代码 + 数据 + 堆栈 + PCB。
PCB (进程控制块)
pid 进程标识符,pwd 进程标识符,ppid 父进程进程号

进程状态转换

fork注意点:

  • 1 、 fork 父子进程交替进行

  • 2 、父进程死亡,子进程将变成孤儿进程,由 1号 进程领养

  • 3 、 子进程死亡,成为僵尸进程

二.跟踪分析进程创建过程

删除menu,在github上克隆一份新的,

git clone https://github.com/mengning/menu.git  

把test.c覆盖,在menu下执行make rootfs

启动内核,连接gdb

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s

在sys_clone,do_fork,dup_task_struct,copy_process,copy_thread和ret_from_fork处设置断点

总结

设定完断点后执行fork,发现只输出了一个命令描述,后面没有执行,而是停在了sys_clone这里。如果继续执行,会停在do_fork的位置,从do_fork继续执行,停在copy_process,继续执行,停在dup_task_struct函数。进入dup_task_struct函数内部,将当前进程内核堆栈压的那一部分寄存器复制到子进程中,以及赋值子进程的起点,最后运行到ret_from_fork。

posted @ 2020-11-21 23:08  20209320dyy  阅读(110)  评论(0编辑  收藏  举报