什么是系统调用接口?

Sad*_*hah 5 operating-system system-calls

我是操作系统主题的新手。我在理解系统调用接口方面遇到了困难。如果您能提供帮助,我将不胜感激。谢谢

小智 14

我试图简单地解释一下进行系统调用的整个过程。

\n

内核提供了一组接口,用户空间中运行的进程可以通过这些接口与系统进行交互。\xc2\xa0这些接口为应用程序提供了对硬件的受控访问,这是一种创建新进程以及\xc2\xa0与现有进程通信的机制,以及请求其他操作系统资源的能力。\xc2\xa0

\n

这些 API(应用程序编程接口)充当应用程序和内核之间的信使,应用程序发出各种请求,内核满足这些请求(或返回错误)。\n系统调用在硬件和用户空间进程之间提供了一个层。

\n

但系统调用和 API 并不是一回事。\nAPI 基本上是指定“如何获取特定服务”的函数定义。\n您通常不直接进行系统调用,而是使用 API。

\n

每个系统调用都有一个相应的包装例程,它指定应用程序调用该系统调用必须使用的 API。\n(包装例程是函数定义,其唯一目的是发出系统调用).\nHowever, an API does not have to correspond to a system call, an API can offer its services directly in User mode, without making any system calls, or a single API function can make several different system calls, more so different API functions can invoke the same system call.

\n

API 定义了应用程序使用的一组编程接口。这些接口可以作为系统调用来实现,也可以通过多个系统调用来实现,或者根本不使用系统调用来实现。\xc2\xa0相同的 API 可以存在于多个系统上,并为应用程序提供相同的接口,同时实现\xc2\xa0API 本身在不同系统之间可能存在很大差异。\xc2\xa0

\n

从程序员的角度来看,API 和系统调用之间的区别是无关紧要的,对他们来说,这只是另一个函数调用,他/她需要考虑的只是函数名称、参数类型和返回值。从内核设计者的角度来看,这种区别显然是非常重要的。

\n

此外,当用户模式进程调用系统调用时,CPU 切换到内核模式并开始执行称为系统调用处理程序的内核函数(恰好是汇编语言函数)。该系统调用处理程序具有与其他“异常处理程序”类似的结构。

\n

该系统调用处理程序首先将寄存器的内容保存在内核模式堆栈中。\n然后根据系统调用号每个系统调用都有一个与之关联的编号,并且用户模式进程必须将此编号作为参数传递,以便可以识别请求的调用)系统调用处理程序调用相关的系统调用服务例程,在 Linux 中,该例程恰好是一个 C 函数,实际上继续实现用户进程请求的功能。\n完成后,寄存器加载回之前的值,CPU 切换回用户模式。

\n

正在进行系统调用\n相同的过程也可以用不同的方式表示。

\n

该过程的另一种表示

\n


小智 2

系统调用接口是一组函数,用于向执行它们的操作系统上的内核请求服务。它提供了进程和操作系统之间的基本接口。

例如:

open();
Run Code Online (Sandbox Code Playgroud)

是一个系统调用,用于提供对文件系统中的文件等的访问。