(2023-2024-1)20232830《Linux内核原理分析与设计》第四周作业

(2023-2024-1)20232830《Linux内核原理分析与设计》第四周作业

1. 《庖丁解牛Linux分析》第4章

系统调用中的进程调度时机

进度调度时机
进程调度时机
进程调度时机
进程调度时机
进程调度时机
进程调度时机
进程调度时机
进程调度时机
进程调度时机
进程调度时机
进程调度时机

2. 实验三:跟踪分析 Linux 内核的启动过程

2.1 启动Linux内核

切换路径,并启动内核;

cd ~/LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

启动内核

2.2 使用gdb跟踪调试内核

在原有命令的基础上增加“-S -s”;冻结CPU;
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
冻结CPU
打开另一个shell窗口,开始跟踪调试;
在gdb界面中targe remote之前加载符号表:file LinuxKernel/linux-3.18.6/vmlinux
建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行:target remote:1234
断点的设置可以在target remote之前,也可以在之后:break start_kernel
跟踪调试
以上已与端口1234建立连接,并在start_kernel处打上断点;
按c 让qemu上的Linux继续运行,启动到start_kernel位置;
跟踪断点
跟踪完成,使用“list”可查看start_kernel的上下文代码。

3. 总结

start_kernel 是 Linux 内核启动的入口函数,它负责进行一系列的初始化工作,包括硬件初始化、内存管理的建立、中断系统的初始化、系统调用的初始化等。其中,rest_init 函数的作用是创建系统的第一个用户态进程,也就是 PID 为 1 的 kernel_init 进程。

具体流程可以总结如下:
start_kernel 函数: 是 Linux 内核启动的入口函数,负责进行整个内核的初始化工作;
rest_init 函数: 在 start_kernel 中被调用,创建了 PID 为 1 的 kernel_init 进程。这是第一个用户态进程;
kernel_init 进程: 是用户态的第一个进程,它负责进行更多的系统初始化工作,例如创建系统中其他的进程;
cpu_idle_loop 函数: rest_init 调用之后,系统进入 idle 循环,等待处理中断。当系统没有进程需要处理时,就会转入 idle 进程,保持系统的运行;

总体而言,start_kernel 函数标志着 Linux 内核的启动过程,而这个过程确保了系统的核心部分的初始化和启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值