我想了解这是如何应用于操作系统以及那些非操作系统的东西。我无法理解三者之间的区别及其本质。 API是我们可以调用的函数但Shell是什么?如果我们有一个API而不是操作系统的内核究竟是什么?我理解操作系统有一个不会改变的Core,而这个核心是典型操作系统的基本工作,而我们可能有不同的用户界面,如GUI或具有相同内核的命令行。所以问题是我很困惑这些事情是如何不同的。 Aaaaaaarhg!
C中的printf和fopen等函数可以称为API调用吗?
答案 0 :(得分:27)
shell 是一个命令解释器,即处理您在终端仿真器中输入的命令(交互模式)或处理shell脚本(包含命令的文本文件)的程序(批处理)模式)。在早期的Unix时代,它曾经是用户与其机器交互的独特方式。如今,图形环境正在为大多数临时用户取代shell。
内核是一个低级程序,与运行应用程序的硬件(CPU,RAM,磁盘,网络......)连接。它是在计算机上运行的最低级别程序,尽管通过虚拟化,您可以在虚拟机之上运行多个内核,这些虚拟机本身运行在另一个操作系统之上。
API 是一个通用术语,用于定义开发人员在使用库和编程语言编写代码时必须使用的接口。 内核没有API ,因为它们不是库。他们确实有 ABI ,除了其他方面,它还定义了应用程序如何通过系统调用与它们进行交互。 Unix应用程序开发人员使用标准C库(例如:libc
,glibc
)来构建符合ABI的二进制文件。 printf(3)
和fopen(3)
不是系统调用的包装器,而是(g)libc
标准工具。他们最终使用的低级系统调用是write(2)
和open(2)
,可能还有其他类似brk
,mmap
。括号中的数字是一个约定,用于说明命令的手册。
Unix手册页的第一卷包含 shell 命令。
第二个包含系统调用包装,如write
和open
。它们构成了内核的接口。
第三个包含标准库(包括Unix标准 API )函数(不包括系统调用),如fopen
和printf
。这些是特定系统调用的不包装,但只是在需要时使用系统调用的代码。
答案 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 与用户和软件界面的操作系统大致相同,内核与软件和硬件的操作系统一样。