据我所知,内核负责与硬件的所有交互,并管理内存、I/O 设备等。因此,内核负责所有事情,但它只是操作系统的一部分。那么操作系统中还有什么呢?只是捆绑在一起的应用程序?例如,Ubuntu 除了内核之外还有什么?Gnome 桌面和一些其他应用程序?
答案1
当然是外壳。
最初让我们想到“内核”一词的隐喻经常被遗忘。这个隐喻是,操作系统是一颗种子或一颗坚果。种子的“内核”是操作系统的核心,为应用程序提供操作系统服务,而种子的“外壳”则是用户从外部看到的。
有些人想将“内核”(实际上是“shell”)限定得更具体一些。但事实上,操作系统之间存在很多差异。这些差异不仅构成了“shell”(范围从 Solaris 到sh
Netware 的控制台命令解释器,再到 OS/2 的 Workplace Shell 和 Windows NT 的 Explorer),而且不同操作系统之间在什么是“内核”的一部分,什么不是“内核”的一部分方面也存在很大差异(例如,它可能包括也可能不包括磁盘 I/O)。最好记住这些术语是隐喻。
还有其他术语。在 IBM 大型机术语中,种子/坚果比喻中的“内核”称为控制程序. 其他名称包括导师, 这监视器, 这核,以及管理人员。核心是另一个相当明显的生物学隐喻。有趣的是,另一个名字也是如此。Harvey M. Deitel 在他的操作系统,调用控制程序核, 并说
核心通常代表人们普遍认为的整个操作系统代码的一小部分[...]
“核”这个词来自拉丁语核,意思是坚果的仁(参见拉丁语马努斯,意思是“坚果”)。因此,即使将控制程序称为“原子核”,实际上也是在将操作系统比作坚果。这种类比不仅仅用于操作系统。例如,如果你熟悉化学,你就会知道原子核被电子包围贝壳。
下面这位匿名人士new123456
所写的内容体现了忘记这些隐喻的起源而导致的错误,以至于人们将部分误认为整体,将内核误认为整个操作系统。作为“用户空间”程序,shell 不会失去操作系统的外部,也不会失去对内核的封装。此外,这个想法远非仅适用于 DOS 且不适用于版本 7 以上的 Unix,而是在 Unix 世界中广泛流行。
(讽刺的是new123456
误以为这是 DOSism。内核/shell 隐喻在早期对 DOS 来说相当陌生,这有利于命令处理器和 CP/M 类似。与之前的 CP/M 一样,MS-DOS 被分为基本磁盘操作系统(BDOS),基本输入输出系统(请注意,BIOS 不是系统固件),命令处理器,以及家政服务。代码实际上是以这种方式被分成文件的。事实上,这是内核/shell 的另一个例子隐喻并没有真正覆盖或完全匹配实际的许多操作系统都存在这样的划分。
new123456
忘记了 Deitel 写的关于原子核的内容一部分整个操作系统。操作系统是两个都内核和外壳。 这毕竟是一个比喻。 Deitel 并不是唯一一个。自 20 世纪 80 年代以来,有大量的 Unix 书籍解释了 Unix 作为一个坚果的隐喻。我推荐 Urban 和 Tiemann 的24 小时内自学 FreeBSD(SAMS,ISBN 9780672324246),原因很简单,第 54 页有一张图表说明了操作系统作为种子的比喻,而且 — 令人惊讶的是 — 它是少数这样做的书之一。
“nucleus” 这个名字可能是更古老的名字;肯定早于 Unix,它更倾向于使用如今更为流行的 kernel/shell 术语——这可能在很大程度上要归功于 Unix。以下是艾伦·C·肖 1974 年出版的书操作系统的逻辑设计(Prentice-Hall,ISBN 9780135401125)例如第 96 页:
系统中永久驻留在主存储器中的部分在历史上被称为核. 核心通常由一组最小的原语和进程组成,用于管理进程、资源和输入输出。Shaw 也有一个图表,见图 4-4(b)。☺
答案2
操作系统的其他部分包括与内核交互的驱动程序,还有几层辅助程序,用于处理用户界面、网络和位于内核和实际应用程序之间的操作系统的其他核心部分。
举个例子,我展示了OS X 的结构,正如您所看到的,在内核(浅蓝色)之上,有几层“核心”功能、系统工具、服务和 API(应用程序编程接口),然后您才能使用 GUI,而 GUI 通常是在实际应用程序中使用的。
大多数操作系统都有类似的结构,但就内核的实际部分而言,存在很大差异。请参阅 Wikipedia 文章微内核以作比较。
编辑-回答你的评论(我的评论有点长)
你可以仅启动一个 Linux 内核,但您实际上无法实现很多功能,所有那些辅助应用程序都提供了您所看到和使用的所有界面。
一旦内核启动(并初始化硬件),它将尝试移交给 GNU/Linux 操作系统的其他部分,这些部分提供启动服务的功能(例如独立发展委员会它包含/dev
原始设备接口,用于程序使用硬盘驱动器和串行端口等)以及设置网络的程序(DHCP服务器) 以及 API,例如组织使应用程序能够通过窗口管理器显示窗口和图标,例如GNOME或者桌面环境。
但是是的,您可以简单地启动内核本身,它只会停留在那里并出现“我已启动,现在做什么?”提示。