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