系统调用接口

1、系统调用

操作系统作为系统软件,它的任务是为用户的应用程序提供良好的运行环境。因此,由操作系统内核提供一系列内核函数,通过一组称为系统调用的接口提供给用户使用。系统调用的作用是把应用程序的请求传递给系统内核,然后调用相应的内核函数完成所需的处理,最终将处理结果返回给应用程序。因此,系统调用是应用程序和系统内核之间的接口。Linux系统调用,包含了大部分常用的系统调用和由系统调用派生出的函数。

系统调用接口是由一系列系统调用函数构成的特殊的接口。程序员或应用程序通过该特殊的接口取得操作系统内核所提供的服务,它是专为程序员编程时使用,是应用程序和系统内核通信的桥梁。也就是说,在应用程序中使用的系统调用是以函数的形式展现在用户面前,提供给用户使用。例如,用户可以通过和文件系统相关的系统调用,请求系统打开文件、关闭文件或读、写文件等。

操作系统提供的各种服务之所以需要通过系统调用来提供给用户程序的根本原因是对系统进行保护。Linux运行空间分为内核空间与用户空间,它们各自运行在不同的级别上,逻辑上相互隔离。用户进程通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间函数。但很多情况下,用户程序在执行过程中需要调用系统程序来获得相应的系统服务,这时就必须利用系统提供给用户的系统调用了。系统调用规定了用户进程进入内核的具体位置,即用户访问内核的路径是事先规定好的,只能从规定位置进入内核,而不准许肆意跳入内核,这样才能保证用户程序的执行不会威胁到内核的安全。

2、Linux中的系统调用

Linux系统利用系统调用进行内核与用户空间的通信,而且linux系统的系统调用相比其他的操作系统更加简洁和高效。总的来讲,系统调用在系统中主要用途如下:

(1)控制硬件。例如,把用户程序的运行结果写入到文件中,可以利用write系统调用来实现,由于文件所在的介质必然是磁盘等硬件设备,所以该系统调用就是对硬件实施控制。

(2)设置系统状态或读取内核数据。例如,用户程序可以通过time系统调用来读取属于内核数据的系统时钟。

(3)进程管理。例如,用户程序可以利用fork系统调用来创建子进程,可以利用wait等系统调用来实现进程通信。

3、API与系统调用的关系

API(Application Programming Interface)又称为应用程序接口。通过该接口用户程序员可以间接的访问到系统硬件和操作系统资源。操作系统的主要作用之一就是把系统硬件和操作系统资源进行封装并对上层用户进行屏蔽,防止用户有意无意的对系统造成破坏。操作系统就像一个保护壳一样保护系统资源不被外界破坏。因此,当用户需要对系统资源进行访问的时候,就必须通过操作系统向用户提供的接口才能实现用户对系统资源的访问,取得内核的服务。

API一般以函数定义的形式出现,如read()、malloc()、abs()等。但API并不需要和系统调用一一对应,它们之间的关系可以是一对一、一对多、多对一或者无关系。例如read()接口就和read系统调用对应,而abs()作用是求绝对值,不需要任何系统调用。而且一般API主要是通过C函数库来实现。
--------------------- 
作者:nail1991 
来源:CSDN 
原文:https://blog.csdn.net/nail1991/article/details/53151965 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

总结:


C标准库,系统调用,系统接口API,内核函数

一、用户空间:

1)C标准库:是适用于所有c语言编写的程序,没有平台差异性。

                  在用户空间程序员可以直接调用的。

                  用C语言和汇编语言实现的。

                  有的库函数封装了系统调用函数(调用库函数就可以间接调用系统调用)。

2)系统API(以库的形式提供): 具有平台差异性,比如windows API 就不能在Linux平台上使用

                   它是操作系统提供给用户的接口,可以让用户直接使用操作系统的某个服务。

                  一个API可能调用了一个系统调用,也可能对应好几个系统调用。

二、内核空间:

 1)系统调用:由内核提供给用户的接口,使用户可以对内核做操作。

                  但是需要进入内核态,才能调用。

系统调用是用户进程进入内核的接口层,它本身并非内核函数,但他是由内核函数实现的,进入系统内核后,不同的系统调用会找到各自对应的内核函数,这写内核函数被称为系统调用的“服务例程”。也可以说系统调用是服务例程的封装例程。

2)内核函数:实现内核功能的函数

系统调用接口_第1张图片

你可能感兴趣的:(linux)