一、系统调用实验:
1.编辑 menu 中的 text.c 文件,给MenuOS增加 rename 和 rename_asm 命令:

make rootf 打开 menu 镜像,可以看到MenuOS菜单中新增了两条命令:

2.gdb 跟踪 sys_rename:
同第二个实验相同,先使得 CPU 静止,在 sys_rename 处设置断点,在MenuOS中执行rename命令,发现停在SyS_rename(定义在fs/namei.c中)处,用宏来实现。然后继续单步执行:


大家知道执行int 0x80,CPU就会自动跳转到 sys_call 来执行。所以为了跟踪 sys_call,在 sys_call 处设置断点,在MenuOS中执行 rename_asm 命令,依旧停在 SyS_rename 处,并没有停在所期待的 sys_call 处,这是因为 system_call 不是正常的函数,是一段特殊的汇编代码,gdb还不能进行跟踪。
3.分析系统调用的处理过程:
系统调用机制的初始化是在 start_kernel 中的 trap_init()(定义在

本文详细记录了一次Linux内核原理课程的实验过程,涉及系统调用实验,包括在MenuOS中增加rename命令、使用gdb跟踪sys_rename,并深入分析了系统调用的处理过程,解释了sys_call_table的工作原理和中断向量0x80与system_call的关系。同时,总结了第五章关于系统调用的知识点,强调了系统调用号在调用过程中的关键作用。
最低0.47元/天 解锁文章
2335

被折叠的 条评论
为什么被折叠?



