系统调用、API之间的关系(图)

1 篇文章 0 订阅
1 篇文章 0 订阅

1.为什么用户程序不能直接访问系统内核模式提供的服务?

     在linux中,将程序的运行空间分为内核空间与用户空间(内核态和用户态),在逻辑上它们之间是相互隔离的,因此用户程序不能访问内核数据,也无法使用内核函数。当用户进程必须访问内核或使用某个内核函数时,就得使用系统调用(System Call)。在Linux中,系统调用是用户空间访问内核空间的唯一途径。

 

2.什么是系统调用?

答:系统调用就是一种特殊的接口。通过这个接口,用户可以访问内核空间。系统调用规定了用户进程进入内核的具体位置。

       系统调用是用户进程进入内核的接口层,它本身并非内核函数,但它是由内核函数实现,进入内核后,不同的系统调用会找到各自对应的内核函数,这些内核函数被称为系统调用的“服务例程”。比如系统调用getpid实际调用了服务例程为sys_getpid(),或者说系统调用getpid是服务例程sys_getpid()的“封装例程”。API和系统调用的区别

       具体步骤:用户进程-->系统调用-->内核-->返回用户空间。

系统调用就是为了解决上述问题而引入的,是提供给用户的“特殊接口”。

    系统调用规定用户进程进入内核空间的具体位置。

   1.程序运行空间从用户空间进入内核空间。

   2.处理完后再返回用户空间。

 

3.什么是API

答:应用程序接口API(Application Programming Interface) ,是程序员在用户空间下可以直接使用的函数接口。是一些预定义的函数,比如常用的read()、malloc()、free()、abs()函数等,这些函数都具有一定功能,说明了如何获得一个给定的服务,跟内核没有必然的联系。提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

 

4.两者的区别。

答:区别:api是函数的定义,规定了这个函数的功能,跟内核无直接关系。而系统调用是通过中断向内核发请求,实现内核提供的某些服务。

      联系:程序员调用的是API(API函数),然后通过与系统调用共同完成函数的功能。   因此,API是一个提供给应用程序的接口,一组函数,是与程序员进行直接交互的。系统调用则不与程序员进行交互的,它是根据API函数,通过一个软中断机制向内核提交请求,以获取内核服务的接口。

          有时候,某些API所提供的功能会涉及到与内核空间进行交互。那么,这类API内部会封装系统调用。而不涉及与内核进行交互的API则不会封装系统调用。也就是说,API和系统调用并没有严格的一一对应关系,一个API可能恰好只对应一个系统调用,比如read()系统调用和read();一个API也可能由多个系统调用实现;有时候,一个API的功能可能并不需要内核提供的服务,那么此时这个API也就不需要任何的系统调用,比如abs()。另外,一个系统调用可能还被多个API内部调用。

       对于编程者来说系统调用和API都是一组函数,并无什么两样,二者关注的都是函数名、参数类型及返回值的含义但是事实上系统调用的实现是内核完成的,API则是在函数库中实现的

    例如:      在内核中实现了write系统调用。

                  在库函数中通过宏定义的方式实现write   API。可以在unistd.h中看到write到系统调用的转换。

       API是用户程序直接可以使用的函数接口,但如果每个操作系统都拥有只属于自己的API,那么应用程序的移植性将会很差。基于POSIX(Portable Operating System Interface)标准的API拥有很好的可移植性,它定义了一套POSIX兼容标准,这使得按这个标准实现的API可以在各种版本的UNIX中使用。现如今,它也可以在除UNIX之外的操作系统中使用,比如Linux,Windows NT等。

5、系统命令

       每一个系统命令其实就是一个可执行的程序,这些可执行程序的实现调用了某些系统调用。并且,这些可执行程序又分为普通用户可使用的命令和管理员可使用的命令。根据上述分类,普通用户可用的命令和管理可用的命令分别被存放于/bin和/sbin目录下。

6.内核函数

       内核函数和用户空间中函数并无两样,只不过内核函数是在内核中实现。虽然系统调用是用户进程进入内核的唯一途径,但是系统调用函数内部并不真正实现其功能,而是通过对内核函数的封装。也就是说,用户程序通过某个系统调用进入内核后,会接着去执行这个系统调用对应的内核函数。这个内核函数也称为系统调用的服务例程

       由于内核函数是在内核中实现的,因此它必须符合内核编程的规则,比如函数名以sys_开始,函数定义时候需加asmlinkage标识符等。

  • 12
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WebGIS(Web Geographic Information System)是一种基于互联网的地理信息系统,它允许用户通过浏览器访问和操作地理信息数据。WebGIS通常使用地服务提供商提供的地数据和API,以实现地展示、空间查询、分析等功能。 百度API(Application Programming Interface)是百度提供的一组用于开发应用程序的接口,它提供了许多功能,包括搜索、地、推荐、语音识别等。百度API可以帮助开发者快速构建各种应用程序,而无需从头开始编写代码。 WebGIS和百度API之间关系主要体现在以下几个方面: 1. 地数据:百度提供了大量的地数据,包括卫星、地形、交通等,这些数据可以通过百度API进行访问和操作。WebGIS可以利用这些数据来展示地,提供空间查询和分析功能。 2. 地功能:百度API提供了许多地相关的功能,如地点搜索、路线规划、POI(Point of Interest)信息查询等。这些功能可以被WebGIS调用,以实现更丰富的应用场景。 3. 集成开发:WebGIS可以使用百度API提供的API,将百度地服务集成到自己的应用程序中,从而提供更丰富的地理信息功能。通过使用百度API,WebGIS开发者可以更方便地实现地展示、空间查询、分析等功能,提高应用程序的用户体验和功能丰富度。 总之,WebGIS和百度API之间关系是相互依存、相互促进的。WebGIS需要使用百度API提供的地数据和功能来构建自己的应用,而百度API则需要通过与WebGIS的集成,提供更多应用场景和功能,满足用户需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值