2023-2024-1 20232829《Linux内核原理与分析》第四周作业

跟踪分析 Linux 内核的启动过程

本章介绍Linux内核源代码的目录结构,并基于Linux内核源代码构造一个简单的操作系统MenuOS,同时在MenuOS启动过程中跟踪分析Linux内核的启动过程。

1.使用实验楼的虚拟机打开 shell

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

2.跟踪调试Linux内核的启动过程


$ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
# 关于-s和-S选项的说明:
# 1. -S
#   -S freeze CPU at startup (use ’c’ to start execution)
# 2. -s
#   -s shorthand for -gdb tcp::1234
# 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在start_kernel处设置断点,刚才是stop状态,如果按“c”继续执行,那么系统开始执行,启动到start_kernel函数的位置停在断点处,如上图所示的断点查看代码。

输入list查看
在这里插入图片描述
start_kernel中最后一句为rest_init,内核启动完成后,有一个call_cpu_idle,当系统没有进程需要执行时就调用idle进程。rest_init是0号进程,他创建了1号进程init和其他的一些服务进程。
设置rest_init断点
在这里插入图片描述

3.总结

总结: init task() (PID为0)在创建了init 进程后,调用cpu idle() 演变成了idle 进程,执行一 次调度后,init进程运行。1号内核线程负责执行内核的部分初始化工作及进行系统配置,最后调用do_ execve加载init程序,演变成init进程(用户态1号进程),init进程是内核启动的第一个用户态进程。kthreadd (PID为2)进程由0号进程创建,始终运行在内核空间,负责所有内核线程的调度和管理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值