cd ~/LinuxKernel rm menu -rf git clone https://github.com/mengning/menu.git2.向MenuOS中增加fork命令,使用help查看现有命令
cd menu mv test_fork.c test.c make rootfs MenuOS>>help MenuOS>>fork
shell1:
cd LinuxKernel //返回LinuxKernel目录 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S //启动内核
shell2:
(gdb)file linux-3.18.6/vmlinux (gdb)target remote:1234
设置断点
(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
1、操作系统内核三大功能是进程管理,内存管理,文件系统,最核心的是进程管理。
2、fork系统调用会创建一个当前进程的子进程。C语言库函数中的fork()在父进程中的返回值为子进程的pid,在子进程中的返回值为0。我们可以根据返回值的不同令父进程和子进程分别执行各自的任务。
3、fork系统调用与其它系统调用相似,都要利用int 0x80指令产生中断,然后由操作系统进行关闭中断和保护现场的工作,通过查询系统调用表找到fork系统调用的入口地址。这个入口一直一般为sys_clone, sys_fork, sys_vfork中的一个,这三个入口最终都会调用do_fork()函数。C库函数中的fork()函数会调用sys_clone。
git clone https://github.com/mengning/menu.git
报错【Failed to connect to github.com port 443: Operation timed out】
解决方法:直接下载下来再传到实验楼上。


