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

分析 system_call 中断处理过程

首先在/LinuxKernel/menu/test.c中添加Getpid代码以及在main中添加对应调用语句:

之后在shell输入:

make rootfs

在Linux中使用 QEMU 启动构建根文件系统 (rootfs)。使用help可以看到List中有了我们定义的getpid:

调用getpid得到我们的PID号为1

新开一个终端,使用cd ..退至/LinuxKernel,开始调试。

单步执行,进入了调度函数schedule()直到 Cannot find bounds of current function 无法跟踪

getpid的调度时机:在getpid系统调用进入内核态之前,辗转了不止一个文件。pid.c, pid.h, sys.c, current.c等,所有这些调用过程中,都有可能被打断,进入调度schedule。

总结

在本次实验中,我运用了 GDB 调试工具,对 Linux 内核中的两个系统调用函数,即 getpid 进行了深入分析。这一过程使我更深刻地理解了系统调用的执行过程,包括用户空间和内核空间之间的切换、参数传递、系统调用号的解析等重要步骤。通过仔细的调试和对寄存器状态的观察,我成功地捕获了系统调用的执行步骤。随后,我将这些步骤绘制成了流程图,以更清晰、直观的方式呈现了系统调用的执行过程。这个实验让我更深入地理解了操作系统内核的基本运行原理。它为我提供了宝贵的见解,有助于我更好地理解和解决操作系统和内核级编程方面的挑战。这种深入的理解对于系统编程和操作系统研究来说是非常宝贵的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值