2021-2022-1 20212819《Linux内核原理与分析》第七周作业

实验六-分析Linux内核创建一个新进程的过程

实验过程

1.删除原menu,下载新menu

cd ~/LinuxKernel
rm menu -rf
git clone https://github.com/mengning/menu.git

2.向MenuOS中增加fork命令,使用help查看现有命令

cd menu 
mv test_fork.c test.c
make rootfs  
MenuOS>>help 
MenuOS>>fork 

在这里插入图片描述
在这里插入图片描述

3.gdb调试

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】

解决方法:直接下载下来再传到实验楼上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值