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

qua*_*231 21 api shell operating-system kernel

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

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

jll*_*gre 29

  • 一个外壳是一个命令解释器,即无论是处理你在你的终端模拟器(交互模式)或过程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命令.

第二个包含像和的系统调用包装器.它们构成了内核的接口.writeopen

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


ham*_*mon 7

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

printf和fopen是OS和内核提供的系统调用(API)的包装


rah*_*hul 5

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

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

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

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

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

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