Shell,Kernel和API之间有什么区别

时间:2012-08-26 17:20:00

标签: api shell operating-system kernel

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

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

4 个答案:

答案 0 :(得分:27)

  • shell 是一个命令解释器,即处理您在终端仿真器中输入的命令(交互模式)或处理shell脚本(包含命令的文本文件)的程序(批处理)模式)。在早期的Unix时代,它曾经是用户与其机器交互的独特方式。如今,图形环境正在为大多数临时用户取代shell。

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

  • API 是一个通用术语,用于定义开发人员在使用库和编程语言编写代码时必须使用的接口。 内核没有API ,因为它们不是库。他们确实有 ABI ,除了其他方面,它还定义了应用程序如何通过系统调用与它们进行交互。 Unix应用程序开发人员使用标准C库(例如:libcglibc)来构建符合ABI的二进制文件。 printf(3)fopen(3)不是系统调用的包装器,而是(g)libc标准工具。他们最终使用的低级系统调用是write(2)open(2),可能还有其他类似brkmmap。括号中的数字是一个约定,用于说明命令的手册。

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

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

Shell:它就像是操作系统的命令行界面。可以使用ls,ps,kill等命令来请求完成对OS的特定操作。它就像在窗户上的“cmd”。

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

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

这是unix os中的整体情况:

Applications => (shell + library routines)=>系统调用=>内核

看最后的请求处理程序是内核。 THX!

答案 3 :(得分:1)

考虑一个示例,您正在观看电影在 shell 上,实际通过硬件完成的过程是内核 shell 与用户和软件界面的操作系统大致相同,内核与软件和硬件的操作系统一样。