2020-2021-1 20199311《Linux内核原理与分析》第七周作业
2020-2021-1 20199311《Linux内核原理与分析》第七周作业
作业信息
作业正文
一、实验六 分析Linux内核创建一个新进程的过程
1.实验过程
1.初始化MenuO,向MenuOS中增加fork命令:
cd ~/LinuxKernel
rm menu -rf
git clone https://github.com/mengning/menu.git
cd menu
mv test_fork.c test.c
make rootfs
输入fork,查看fork命令:
2.使用gdb进行调试,在相关函数处设置断点
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
file linux-3.18.6/vmlinux
target remote:1234
b sys_clone
b do_fork
b dup_task_struct
b copy_process
b copy_thread
b ret_from_fork
3.开始调试
二、Linux知识学习
1.操作系统内核实现操作系统的三大管理功能:
- 进程管理
- 内存管理
- 文件系统
2.进程的三种基本状态:
- 就绪态
- 运行态
- 阻塞态
在Linux内核中,当进程是TASK_RUNNING状态时,它是可运行的,处于就绪态。当进程获得CPU的控制权,在CPU中实际执行时,它处于运行态。当进程被内核调度出去,在等待队列里就是就绪态。一个正在运行的进程在等待特定的事件或资源时会进入阻塞态。
3.创建一个进程是复制当前进程的信息,即fork一个进程就是创建了一个新进程。父进程和子进程的绝大部分信息是完全一样的,但是pid的值和内核堆栈等信息是不能一样的。在fork一个子进程的过程中,复制父进程的资源时采用Copy On Write技术,不需要修改进程资源,父子进程共享内存存储空间。