主题 : 系统调用与API的区别 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 117095
精华: 0
发帖: 67
金钱: 350 两
威望: 70 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2015-07-14
最后登录: 2018-09-05
楼主  发表于: 2015-09-22 15:13

 系统调用与API的区别

1.为什么用户程序不能直接访问系统内核模式提供的服务?
     在linux中,将程序的运行空间分为内核与用户空间(内核态和用户态),在逻辑上它们之间是相互隔离的,因此用户程序不能访问内核数据,也无法使用内核函数。

2.什么是系统调用?
答:系统调用就是一种特殊的接口。通过这个接口,用户可以访问内核空间。系统调用规定了用户进程进入内核的具体位置。
       具体步骤:用户进程-->系统调用-->内核-->返回用户空间。
系统调用就是为了解决上述问题而引入的,是提供给用户的“特殊接口”。
    系统调用规定用户进程进入内核空间的具体位置。
   1.程序运行空间从用户空间进入内核空间。
   2.处理完后再返回用户空间。

3.什么是API
答:api 就是应用程序接口,是一些预定义的函数。跟内核没有必然的联系。API(Application Programming Interface)应用程序接口,是一些预先定义的函数,提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。更多学习交流可以加Q群 310341439

4.两者的区别。
答:区别:api是函数的定义,规定了这个函数的功能,跟内核无直接关系。而系统调用是通过中断向内核发请求,实现内核提供的某些服务。
      联系:一个api可能会需要一个或多个系统调用来完成特定功能。通俗点说就是如果这个api需要跟内核打交道就需要系统调用,否则不需要。
程序员调用的是API(API函数),然后通过与系统调用共同完成函数的功能。
因此,API是一个提供给应用程序的接口,一组函数,是与程序员进行直接交互的。
系统调用则不与程序员进行交互的,它根据API函数,通过一个软中断机制向内核提交请求,以获取内核服务的接口。
   并不是所有的API函数都一一对应一个系统调用,有时,一个API函数会需要几个系统调用来共同完成函数的功能,甚至还有一些API函数不需要调用相应的系统调用(因此它所完成的不是内核提供的服务)