一 系统调用(System Call)接口
系统调用(System Call)接口是操作系统(OS)内核与上层应用进程(APP)进行交互通信的唯一接口如图
通过这个接口,用户可以访问OS内核空间,具体步骤:用户地址空间APP->系统调用->OS->OS内核->返回用户空间。用户APP通过直接或者间接(库函数)调用中断int0X80,并在eax寄存器中指定系统调用功能号,即可使用内核资源包括硬件资源。例如很多情况下,APP都是使用具有标准接口定义下的C函数库中的函数间接地使用内核的系统调用如:
二 应用编程接口(Application Programming Interface,API)
应用编程接口API是一些预定义的函数,跟内核没有必然联系,提供APP与开发人员基于软件或者硬件以便访问一组程序的能力,这种情况无需链接内部实现细节。
两者区别:
API是函数定义,与内核无关,而系统调用时通过中断向内核发出请求完成内核有的服务。一般而言,一个API可能需要一个或者多个系统调用来完成特定功能,这种需要跟内核通信的API就需要系统调用,反正不需要。程序员调用的是API,API再调用系统调用。总之,
API是一个提供给应用程序的接口,一组函数,是与程序员进行直接交互的。 系统调用则不与程序员进行交互的,它根据API函数,通过一个软中断机制向内核提交请求,以获取内核服务的接口。 并不是所有的API函数都一一对应一个系统调用,有时,一个API函数会需要几个系统调用来共同完成函数的功能,甚至还有一些API函数不需要调用相应的系统调用(因此它所完成的不是内核提供的服务)