除了内核之外,操作系统中还有什么

Ank*_*rVj 44 operating-systems kernel

据我所知,内核完成与硬件的所有交互,并管理内存、I/O 设备等。因此内核在做所有事情,但它只是操作系统的一部分。那么操作系统中还有什么?只是附带的应用程序?例如,Ubuntu 除了内核还有什么?Gnome 桌面和其他一些应用程序?

Jde*_*eBP 57

当然是外壳。

最初为我们提供“内核”这个词的原始比喻经常被遗忘。比喻是操作系统是种子或坚果。种子的“内核”是操作系统的核心,为应用程序提供操作系统服务,它被种子的“外壳”包围着,即用户从外面看到的东西。

有些人希望将“内核”(实际上,还有“外壳”)联系起来更具体。但实际上,操作系统之间存在很多差异。至少这些变化构成了“shell”(范围从 Solarissh到 Netware 的控制台命令解释器,再到 OS/2 的 Workplace Shell 和 Windows NT 的资源管理器),但是在一个操作系统和另一个操作系统之间也存在很多差异。什么是和不是“内核”的一部分(例如,它可能包括也可能不包括磁盘 I/O)。最好记住这些术语是隐喻

还有其他术语。在 IBM 大型机术语中,种子/坚果比喻中的“内核”称为控制程序。其他名称包括主管监视器核心执行人员。核心是另一个相当明显的生物隐喻。有趣的是,另一个名字也是如此。Harvey M. Deitel 在他的操作系统中将控制程序称为,并说

核通常代表通常被认为是整个操作系统的一小部分代码 [...]

“nucleus”一词来自拉丁语,意思是坚果的内核(参见拉丁语nux,意思是“坚果”)。因此,即使将控制程序称为“核心”,实际上也是将操作系统比喻为坚果。这是一个类比,不仅仅用于操作系统。例如,如果您熟悉化学,就会知道原子核壳中的电子包围。

以下匿名者new123456所写的内容举例说明了由于忘记这些隐喻的起源而导致的错误,以至于人们将部分误认为是整体,将内核误认为是整个操作系统。作为一个“用户空间”程序,shell 并没有减少操作系统的外部,也没有减少包含内核的部分。此外,这个想法远非 DOS 独有的想法,不适用于版本 7 之后的 Unix,它在 Unix 世界中既广泛又流行。

(具有讽刺意味的是,将其new123456误认为是 DOS 主义。内核/外壳的比喻在早期对 DOS 来说相当陌生,它有利于命令处理器和类似的东西,来自 CP/M。就像之前的 CP/M 一样,MS-DOS 被划分为进入基本磁盘操作系统(BDOS)、基本输入输出系统(BIOS——不是系统固件,注意)、命令处理器内务实用程序。代码实际上是这样打包成文件的。这是另一个例如,事实上,内核/外壳的比喻并没有真正涵盖或完全匹配许多操作系统中的实际划分。)

new123456忘记了 Deitel 所写的关于内核是整个操作系统的一部分的内容。操作系统既是内核又是外壳。 这毕竟是比喻。 Deitel 也不孤单。从 1980 年代开始,有大量 Unix 书籍解释了 Unix-as-a-nut 比喻。我推荐 Urban 和 Tiemann 的Teach Yourself FreeBSD in 24 hours(SAMS,ISBN 9780672324246),原因很简单,第 54 页上有一个图表说明了操作系统作为种子的比喻,而且——令人惊讶的是——是其中之一很少有书可以这样做。

“nucleus”这个名字可能是旧的名字;肯定早于 Unix,它支持内核/shell 术语,今天——可能在很大程度上要归功于 Unix——是更普遍的。以下是 Alan C. Shaw 1974 年出版的《操作系统的逻辑设计》(Prentice-Hall,ISBN 9780135401125)一书中的内容,例如:

系统中永久驻留在主存储器中的那部分在历史上被称为核心。核心通常由一组最小的原语和进程组成,用于管理进程、资源和输入-输出。
Shaw 也有一个图表。☺

  • 我认为这是一个绝妙的答案,因为它让我想起了隐喻“shell”和“kernel”之间的关系。我都知道,我从来没有把它们联系起来。我知道这个问题的答案,但仍然设法从这个答案中学到了一些东西。因此,赞成票。谢谢! (8认同)

Mok*_*bai 45

操作系统的其他部分包括与内核交互的驱动程序,还有几层帮助程序处理用户界面、网络和位于内核和实际应用程序之间的操作系统的其他核心部分。

举个例子,我已经展示了OS X结构,正如你在内核(浅蓝色)之上看到的,在你之前有几层“核心”功能、系统工具、服务和 API(应用程序编程接口)甚至可以访问 GUI,这是您通常在实际应用程序本身中使用的内容。

在此处输入图片说明

大多数操作系统具有相似的结构,但在实际内核的多少方面存在很大差异。请参阅维基百科关于微内核的文章进行比较。

编辑 - 回答你的评论(我的评论有点长)

可以只启动一个 linux 内核,但您将无法真正实现很多目标,所有这些帮助应用程序提供了您看到和使用的所有界面。

一旦内核启动(并初始化硬件),它将尝试移交给 GNU/Linux 操作系统的其他部分,这些部分提供启动服务的功能(例如UDEV,它填充/dev原始设备接口,供程序使用,例如硬盘驱动器和串行端口等)和用于设置网络的程序 ( dhcpcd ) 和 API,例如X.org,以便应用程序能够通过窗口管理器(例如GNOMEKDE)显示窗口和图标。

但是,是的,您可以简单地启动内核本身,它只会坐在那里并显示“我已经启动,现在怎么办?” 迅速的。

  • 我认为你不能只启动 Linux 内核。内核到达调用 init 的点,此时系统从内核模式切换到用户模式。如果 init 不可用(或假的 init,如 bash),内核会崩溃并崩溃。所以必须有一些 init 进程在运行以避免恐慌,此时它真的不仅仅是内核在运行。 (4认同)