参数在linux中进行系统调用

时间:2012-07-20 13:18:27

标签: linux-kernel system-calls kernel

来自Robert Love的书,(在系统调用实现中)

  

不知何故,用户空间必须在陷阱期间将参数传递给内核。最简单的方法是通过相同的方式传递系统调用号:   参数存储在寄存器中。在x86-32上,寄存器为ebx,ecx,edx,esi和   edi包含了前五个论点。在不太可能的情况下,六个或更多论证 -   单个寄存器用于保存指向用户空间所有参数的指针   存储。

但是asymlinkage为每个系统调用添加了前缀,这些调用期望参数位于系统堆栈中。并且当模式切换发生时如何将参数复制到内核堆栈中?

1 个答案:

答案 0 :(得分:3)

通过系统调用胶合逻辑将参数放入堆栈。所有系统调用都是通过一个中断陷阱进行的(我相信x86上的int 0x80)。此中断处理程序的内核代码执行必要的工作,将参数放入系统调用处理程序的堆栈中。

查看此常见问题解答以回答以下问题:http://kernelnewbies.org/FAQ/asmlinkage