课本第五章读书笔记
课本第五章笔记 系统调用
系统调用和API的异同
-
系统调用在用户空间进程和硬件设备之间添加了一个中间层。
-
而应用程序通过在用户空间实现的应用编程接口来编程。这种接口并不需要和系统调用对应。
-
程序员只和API打交道,内核只跟系统调用打交道。
系统调用的定义
1,编译指令asmlinkage通知编译器仅从栈中提取该函数的参数。
2,函数返回long
系统调用的触发过程
应用程序通过软中断告知系统,通知内核自己需要一个系统调用。
软中断号128,通过int $0x80触发中断
系统调用的参数传递
在x86上,系统调用号通过eax寄存器传递给内核。
在x86-32系统上,ebx,ecx,edx,esi,edi按照顺序存放前五个参数
给用户空间的返回值在x86系统上存放在eax寄存器中。
总结:
系统调用和API并非一一对应,API也可能对应多个系统调用的综合实现,程序员只需要关心API,而内核关心系统调用。通过以EAX为主的几个寄存器,可以实现包括系统调用号和返回值在内的诸多参数传递。