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

作业信息

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

一、实验:分析Linux内核创建一个新进程的过程

1、在MenuOs中增加命令fork,初始化MenuOs,把menu删除,克隆一份新的,把test_fork.c覆盖掉,编译内核,可以看到fork命令;

输入help即可看到增加的fork命令

2、按照上次实验的流程,输入如下命令,启动并加载内核,在连接target remote 1234;

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
file linux-3.18.6/vmlinux
target remote:1234

3、在gdb中设置断点sys_clone,设置断点do_fork,设置断点dup_task_struck,设置断点copy_process,设置断点copy_thread,设置断点ret_from_fork,
设置断点之后在MenuOS中执行fork,就会发现fork函数停在了父进程中

4、按c继续执行之后,如下图所示,停在了do_fork的位置

5、按n继续追踪

6、在copy_thread中,可以看到把task_pg_regs(p)也就是内核堆栈特定的地址找到并初始化

二、学习收获

1、进程描述符task_struck数据结构

(1)操作系统的三大功能:进程管理、内存管理、文件系统。

(2)进程控制块PCB——task_struck
tty_struck控制台
fs_struck文件系统的描述
files_struck打开的文件描述符
mm_struck内存的描述
signal_struck信号的描述

(3)操作系统原理中的状态:就绪态、运行态、阻塞态
进程状态转换图:

(4)内核管理中的进程状态:
TASK_TUNNING (可运行)获得cpu控制权正在运行,被调度出去就是就绪态
TASK_ZOMBIE (进程被终止)
TASK_INTERRUOTIBIE (阻塞态)
TASK_UNINTERRUOTIBIE (阻塞态)
(5)进程的标示符:pid(用来标识进程)

posted @ 2020-11-21 14:58  侯蕴哲  阅读(112)  评论(0编辑  收藏  举报