25

我想了解这如何适用于操作系统以及那些实际上不是操作系统的东西。我无法理解这三者之间的区别及其本质。API是我们可以调用的函数,但是什么是Shell?如果我们有一个 API,那么操作系统的内核到底是什么?我知道操作系统有一个不会改变的核心,这个核心完成了典型操作系统的基本工作,而我们可能有不同的用户界面,如 GUI 或具有相同内核的命令行。所以问题是我很困惑这些东西有什么不同。啊啊啊啊!

C中的printf和fopen等函数可以称为API调用吗?

4

4 回答 4

33
  • 命令行界面 (CLI) shell是一个命令解释器,即处理您在命令行中输入的命令(也称为终端)或处理 shell 脚本(包含命令的文本文件)(批处理模式)的程序。在早期的 Unix 时代,它曾经是用户与他们的机器交互的独特方式。如今,图形用户界面 (GUI) 正在成为大多数用户的首选外壳类型。

  • 内核是与运行应用程序的硬件(CPU、RAM、磁盘、网络……)交互的低级程序。它是在计算机上运行的最低级别的程序,尽管通过虚拟化,您可以在虚拟机之上运行多个内核,这些虚拟机本身在另一个操作系统之上运行。

  • API是一个通用术语,定义了开发人员在使用库和编程语言编写代码时必须使用的接口。内核没有 API,因为它们不是库。他们确实有一个ABI,除了其他东西之外,它还定义了应用程序如何通过系统调用与他们交互。Unix 应用程序开发人员使用标准 C 库(例如:libc、、glibc)来构建符合 ABI 的二进制文件。printf(3)并且fopen(3)不是系统调用的包装器,而是(g)libc标准设施。他们最终使用的低级系统调用是write(2)open(2)并且可能还有其他诸如brk. mmap括号中的数字是一个约定,说明在哪个手册中可以找到该命令。

Unix 手册页的第一卷包含shell命令。

第二个包含系统调用包装器,如writeopen。它们构成了内核的接口。

第三个包含标准库(包括 Unix 标准API)函数(不包括系统调用)fopenprintf. 这些不是特定系统调用的包装器,而只是在需要时使用系统调用的代码。

于 2012-08-26T22:29:06.980 回答
7

Shell 是通过命令行与操作系统和内核进行通信的方式。Shell 通过调用 API 来实现这一点。内核确实是操作系统的核心,它执行内存管理、任务调度、文件系统处理、I/O 处理……内核所做的所有事情,都可以通过操作系统提供的 API 以某种方式调用。

printf 和 fopen 封装了操作系统和内核提供的系统调用 (API)

于 2012-08-26T17:27:21.097 回答
4

Shell:它就像您的操作系统的命令行界面。ls、ps、kill 等命令可用于请求完成对操作系统的特定操作。它就像 Windows 上的“cmd”。

内核:它是任何操作系统的主要代码。您在 shell 上或通过 GUI 发出的任何请求(如内存分配、打开文件等)最终都由内核完成。

是的,您提到的调用被视为 API 调用。对这些调用的请求也由内核处理。请转到以下链接以在 unix 中查找 API 调用。 http://www.mkssoftware.com/docs/api_index.asp

这是 Unix 操作系统的整体情况:

应用程序=>(shell+库例程)=>系统调用=>内核

看看最终的请求处理程序是内核。谢谢!

于 2012-08-26T17:29:21.197 回答
1

考虑一个例子,你正在看电影是在shell上,实际上通过硬件完成的过程是内核对于用户和软件接口, shell大致类似于 os 的工作,而对于软件和硬件,shell 大致类似于 os 的工作。

于 2013-07-10T08:44:13.787 回答