Shell、内核和API之间有什么区别

Shell、内核和API之间有什么区别,api,shell,operating-system,kernel,Api,Shell,Operating System,Kernel,我想了解这是如何应用于操作系统的,以及那些不是真正的操作系统的东西。我无法理解这三者之间的区别及其本质。API是我们可以调用的函数,但什么是Shell?如果我们有一个API,那么操作系统的内核到底是什么?我知道操作系统有一个不会改变的核心,这个核心完成了典型操作系统的基本工作,而我们可能有不同的用户界面,比如GUI或命令行,使用相同的内核。所以问题是我不知道这些东西有什么不同。aaaaarhg C中的printf和fopen这样的函数可以调用API调用吗?Shell是通过命令行与操作系统和内核通

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


C中的printf和fopen这样的函数可以调用API调用吗?

Shell是通过命令行与操作系统和内核通信的方式。Shell也通过调用API来实现这一点。 内核实际上是操作系统的核心,负责内存管理、任务调度、文件系统处理、I/O处理等,。。。 内核所做的一切都可以通过操作系统提供的API以某种方式参与进来


printf和fopen围绕着操作系统和内核Shell提供的系统调用(API):它就像操作系统的命令行界面。ls、ps、kill等命令可用于请求完成操作系统的特定操作。这就像windows上的“cmd”

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

是的,您提到的调用被视为API调用。对这些调用的请求也由内核处理。请转到下面的链接以查找unix中的API调用。

这是unix操作系统中的总体情况:

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

看,最后一个请求处理程序是内核。 谢谢

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

第二个包含系统调用wrappers
write
open
。它们构成了内核的接口


第三个包含标准库(包括Unix标准API)函数(不包括系统调用),如
fopen
printf
。它们不是特定系统调用的包装,而只是在需要时使用系统调用进行编码。

举个例子,您正在观看的电影是在shell上进行的,而实际通过硬件完成的处理是内核shell在用户界面和软件界面上的工作方式与操作系统的工作方式大致相同,内核的工作方式与操作系统在软件和硬件上的工作方式大致相同。

AHAHAH,所以shell仅仅是一个命令行。所以windows中的cmd是windows或DOS的Shell?两者都不是,因为windows(和其他操作系统)不需要Shell。也许应该将shell重命名为操作系统服务的默认界面?因此,我们所有图标的windows GUI环境不是shell,是吗?是Dos提示符还是Dos shell?此外,为了拥有Linux Shell,我们必须在Windows操作系统上运行Shell,对吗?因此,我们使用API与内核通信,当我们直接请求操作系统时,这些API调用可以通过Shell进行,例如打开文件,更改目录e.t.c。因此,目录应该是DOS中对其内核的API调用?我不想知道更多的事情。有Windows外壳这样的东西吗?如果我们使用GUI而不是命令行提示符,情况会怎样?这是我唯一还不明白的最后一件事。shell最初是一个术语,现在主要只在Unix上下文中使用。无论如何,有一个GUI的事实并没有什么不同。无论您使用windows、Gnome还是KDE,都可以在命令行窗口(终端仿真器)中运行shell或等效程序。IMHO,“系统调用”是用于实现特定编程语言的跨平台标准库的操作系统API。实际上,fopen和printf确实是系统调用的“包装器”。一些参考资料:@bosslaw
fopen
printf
有很多特定的代码,并与ea共享表、缓冲区和上下文