内核以外的操作系统中有什么


43

据我了解,内核完成与硬件的所有交互,并管理内存,I / O设备等。因此,内核可以完成所有工作,但它只是操作系统的一部分。那么,操作系统还有什么呢?只是捆绑在一起的应用程序?例如,Ubuntu除了内核还有什么?Gnome桌面和其他一些应用程序?

Answers:


54

外壳,当然。

首先,我们常常忘记了最初为我们提供“内核”一词的隐喻。隐喻是操作系统是种子或坚果。种子的“内核”是操作系统的核心,为应用程序提供操作系统服务,而应用程序则被用户从外部看到的种子的“外壳”所包围。

有些人想把“内核”(甚至是“壳”)束缚得比这更具体。但是实际上,整个操作系统之间存在很多差异。最重要的是,这些变体构成了一个“外壳”(范围从Solaris sh到Netware的控制台命令解释器,再到OS / 2的Workplace Shell和Windows NT的Explorer),但是从一个操作系统到另一个操作系统,也有很多差异。什么是和不是“内核”的一部分(例如,可能包括或可能不包括磁盘I / O)。最好记住这些术语是隐喻

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

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

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

假名人new123456在下面写的内容举例说明了由于忘记这些隐喻的起源而导致的错误,以至于人们将整个部分误认为一部分,而将内核误认为整个操作系统。成为“用户区”程序不会使外壳更像是操作系统的外部,也不会使外壳更不像包围内核的那样。而且,它不是一个仅适用于DOS的思想,不适用于版本7以后的Unix,但这个思想在Unix世界中已经广泛流行和流行。

(具有讽刺意味的是,new123456它误认为是DOS主义。内核/外壳隐喻对于DOS来说早在DOS时就很陌生了,它偏爱于CP / M中的命令处理器和类似命令。就像之前的CP / M一样,MS-DOS被划分了进入基本的磁盘操作系统(BDOS),基本的输入输出系统(BIOS-不是系统固件,请注意),命令处理器内务处理实用程序,实际上是通过这种方式将代码打包成文件。例如,实际上,内核/外壳隐喻如何无法真正覆盖或完全匹配许多操作系统中的实际划分。)

new123456忘记了Deitel写的关于核是整个操作系统一部分的东西。操作系统既是内核又是外壳程序。 毕竟就是隐喻。 Deitel也不是一个人。从1980年代开始,有大量的Unix书籍解释了Unix-as-a-a-nut的隐喻。我推荐Urban和Tiemann的“ 24小时自学FreeBSD”(SAMS,ISBN 9780672324246),原因很简单,在第54页上,它有一个图表说明了种子的操作系统隐喻,并且-令人惊讶地-是其中之一。很少有书籍这样做。

名称“核”可能是较旧的名称;肯定早于Unix,而后者更倾向于内核/外壳术语,而今天(可能在很大程度上要归功于Unix)在Unix / Linux中更为流行。以下是艾伦·肖(Alan C. Shaw)1974年出版的《操作系统的逻辑设计》(Prentice-Hall,ISBN 9780135401125)中的内容:

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


7
我认为这是一个绝妙的答案,仅仅因为它使我想到了隐喻“壳”和“内核”之间的关系。我知道两者,但从未连接。我知道问题的答案,但仍然设法从该答案中学到一些东西。因此,赞成。谢谢!
Andrew J. Brehm

我会这么说,因为UNIX shell是从版本7开始从内核本身抽象出来的,并且从各个方面讲都有一个userland程序。但是,您所说的确实适用于DOS(这是一个特别糟糕的设计选择)。
new123456

先生,打得好。但是,@在提及我的用户名时,请在某处,以便将其发布到我的响应队列中。
12:40 new123456

被认为是具有许多有趣历史的如此全面的答案(我不知道核是一个计算机术语,也不是它的拉丁词源)。但是,我认为如果不明确引用其他用户的答案(现在已删除),它将作为独立答案更好看。
安东尼G-莫妮卡的大法官

45

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

举个例子,我已经展示了OS X结构,如您所见,在内核(浅蓝色)之上,您需要先放置几层“核心”功能,系统工具,服务和API(应用程序编程接口)甚至进入GUI,这是您在实际应用程序中通常使用的GUI。

在此处输入图片说明

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

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

可以仅引导linux内核,但是您将无法真正实现很大的成就,因为所有这些帮助程序都提供了您看到和使用的所有界面。

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

但是,是的,您可以简单地引导内核本身,它会坐在那里并显示“我已经引导,现在呢?”。提示。


那么我可以引导内核,而不能引导操作系统通常具有的其他任何东西吗?
AnkurVj 2011年

从理论上讲,我想,但是如果没有其他程序,它将无法执行任何操作。人们为了娱乐而创建了一些微小的操作系统,它们不过是内核,外壳,甚至是编译器或汇编器(我认为Linux实际上是从这种方式开始的)。
2011年

@AnkurVj我已添加到答案中。
Mokubai

3
我认为您不能仅引导Linux内核。内核到达调用init的地步,此时系统从内核模式切换到用户模式。如果没有可用的init(或伪造的init,例如bash),则内核会崩溃并崩溃。因此,必须运行一些初始化进程来避免出现恐慌,这时实际上并不仅仅是内核在运行。
Joe Internet,

1
您可以引导裸机内核,但是如果没有操作系统的其余部分,则用户将无法与之交互。
凯尔塔里(Keltari)2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.