在linux内核中调度系统调用的位置是什么?

时间:2013-10-10 04:10:26

标签: kernel system-calls

首先,我应该提到我正在使用2.6.32 Linux内核。我正在寻找源代码中的代码,该代码根据系统调用ID(在/linux/arch/x86/kernel/syscall_table_32.S中定义)执行正确的系统调用。根据我的理解,系统调用是通过中断完成的,系统调用ID在eax寄存器中。因此内核必须服务中断,并根据eax寄存器中的ID执行适当的系统调用。

我在哪里可以找到源代码?即使只是对我应该寻找的代码的一些指导也会非常感激。

1 个答案:

答案 0 :(得分:2)

如果我正确理解你的问题,我相信你在/arch/x86/kernel/traps.c中寻找system_call() - 这个函数可以保存系统调用号和所有CPU寄存器,但是在您的情况下(x86),它在/arch/x86/kernel/entry_32.S中作为程序集链接发生。如果您有兴趣了解这种联系的发生方式,请参阅O'Reilly的“理解Linux内核”一书中的第6章和第10章。