【问题标题】:Difference between system API and system call API系统API和系统调用API的区别
【发布时间】:2013-11-24 07:14:49
【问题描述】:

我已阅读“系统调用 API 用于用户空间访问和 系统 API 用于系统空间访问”。我是 Linux 操作系统概念的新手,我对系统 API 没有任何了解。谁能解释这两者之间的区别?

【问题讨论】:

  • 你在哪里读到那句话?你能提供一个网址吗?
  • 我从我的培训师提供的 pdf 文件中阅读了此内容。我认为他是从查尔斯·克劳利的书中得到的。

标签: linux api system-calls terminology


【解决方案1】:

系统调用是通过软件中断向内核发出的显式请求。它是与操作系统对话的最低级别的东西。系统调用是你调用内核的时候。系统调用实际上旨在成为非常低级的接口,您可以说是您的程序无法自行完成的非常特定的功能。

而系统 API 用于调用系统调用

【讨论】:

  • 当然。我有另一个问题。哪些应用程序在用户空间和系统空间上执行,您能否提供示例并帮助我提供一个网站链接,我可以在其中阅读有关内存管理的更多信息。(一个很好的)。
  • 好的。没问题。不知道规则,因为我是新成员。
【解决方案2】:

首先阅读 system calllinux kernel 维基页面。

作为Rahul Triparhi answered,系统调用是基本操作,从user-mode 应用软件可以看出。使用strace(1) 找出某个程序完成了哪些系统调用。

系统调用在man 页面的第2 部分中有详细记录(在Linux 系统的终端中首先键入man man)。所以请阅读intro(2),然后阅读syscalls(2)

严格来说,系统调用有一个接口,特别是在ABI 规范中指定,如x86-64 ABI,定义在尽可能低的机器级别 - 就机器指令和寄存器等而言...... 2 是它们上面的小型 C 包装器。另见Linux Assembly HowTo

另请阅读Advanced Linux Programming,其中很多都很好地解释了。

顺便说一句,我不确定“系统 API”是否具有明确定义的含义,即使我猜测它可能是什么。另请参阅this question 的几个答案。

可能“系统 API”指的是由 POSIX 标准化的许多功能,在 POSIX C library 中实现,例如 GNU libc(但您可以在 Linux 上使用其他一些 libc,例如 MUSL libc,如果您真的很想)。我正在考虑像dlopen(动态加载插件)或getaddrinfo(3)(获取有关某些网络事物的信息)等功能...... Linux 实现(例如dlopen(3))提供了它的超集.

更一般地说,手册页的第 3 部分,参见 intro(3),提供了很多库函数(其中大部分构建在系统调用之上,所以 dlopen 实际上调用了 mmap(2) 系统调用,而 getaddrinfo 可能使用系统调用连接到某个服务器 - 请参阅nsswitch.conf(5) 等...)。但是一些库函数可能没有进行任何系统调用,例如 snprintf(3)sqrt(3)longjmp(3) ....(它们只是在进行内部计算,不需要任何额外的内核服务)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2010-12-11
    • 2023-04-01
    • 1970-01-01
    • 2011-02-14
    • 2011-08-04
    • 2016-02-12
    相关资源
    最近更新 更多