实验内容
- 分析 fork 函数对应的内核处理过程 sys_clone,理解创建一个新进程如何创建和修改 task_struct 数据结构;
- 使用 gdb 跟踪分析一个 fork 系统调用内核处理函数 sys_clone ,验证您对 Linux 系统创建一个新进程的理解,推荐在实验楼 Linux 虚拟机环境下完成实验。 特别关注新进程是从哪里开始执行的?为什么从那里能顺利执行下去?即执行起点与内核堆栈如何保证一致。
步骤
1、进入内核,将fork()
写入test.c
cd LinuxKernel
cd menu
vi test.c
代码如下:
//fork函数代码如下
#include <unistd.h>
int Fork(int argc, char *argv[]) {
int pid;
/* fork another process */
pid = fork();
if (pid<0) {
/* error occurred */
fprintf(stderr,"Fork Failed!");
exit(-1);
} else if (pid==0) {
/* child process */
printf("This is Child Process!\n");
} else {
/* parent process */
printf("This is Parent Process!\n");
/* parent will wait for the child to complete*/
wait(NULL);
printf("Child Complete!\n");
}
}
//在main函数中写入如下代码
MenuConfig("fork","Fork a new process",Fork);
2、启动
make rootfs
3、进入调试