一、实验过程
打开shell终端,删掉原menu目录,从git克隆一个menu目录,启动MenuOS
运行
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
命令打开调试模式
另启一个终端进入LinuxKernel目录进入gdb模式进行调试,并在
b sys_clone
b do_fork
b dup_task_struct
b copy_process
b copy_thread
b ret_from_fork
处设置断点
按c继续运行,并一直输入n单步执行
二、学习内容
(1)理解 task_struct 数据结构
task_struct是Linux内核中用于表示进程和线程的数据结构。它定义在`<linux/sched.h>头文件中。
task_struct数据结构包含了进程/线程的各种属性和状态信息,此外,task_struct还包含了用于调度的字段,如调度策略、优先级等。
task_struct是一个非常庞大的数据结构,它保存了进程和线程的所有必要信息,通过对该数据结构的操作,内核可以对进程和线程进行管理和调度。
(2)分析 fork 函数对应的内核处理过程 sys_clone,理解创建一个新进程如何创建和修改 task_struct 数据结构
三、实验总结
本次实验,了解了进程的创建过程,进程的创建过程涉及资源的复制、内核堆栈的初始化和执行起点的切换。这些步骤保证了子进程能够独立运行,并拥有与父进程相似的环境和状态。