实验六-分析Linux内核创建一个新进程的过程
一.实验要求
1.更新内核并增添fork命令
2.跟踪分析进程创建的过程
进程创建分析:fork代码分析
dup_task_struct分析
copy_thread分析
copy_process分析
二.实验步骤
1.更新内核并增添fork命令:
首先要删除原有的menu,在github上下载新版本menu
cd ~/LinuxKernel
rm menu -rf
git clone https://github.com/mengning/menu.git
向MenuOS中增加fork命令
cd menu
mv test_fork.c test.c
make rootfs
使用help查看现有命令,执行MenuOS>>fork
2.启动gdb调试,并对主要的函数设置断点
(gdb)b sys_clone
(gdb)b do_fork
(gdb)b dup_task_struct
(gdb)b copy_process
(gdb)b copy_thread
(gdb)b ret_from_fork
三、实验总结
在 Linux 内核中,供用户创建进程的系统调用fork()函数的响应函数是 sys_fork()、sys_clone()、sys_vfork(),这三个函数都是通过调用内核函数 do_fork() 来实现的。根据调用时所使用的 clone_flags 参数不同,do_fork() 函数完成的工作也各异。copy_process()主要完成进程数据结构,各种资源的初始化,调用了sched_fork,将其置为TASK_RUNNING。copy_thread函数主要用于获取子进程寄存器信息的存放位置,并对子进程的thread.sp赋值,将来子进程运行,这就是子进程的esp寄存器的值。