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 也有一个图表。☺
Mok*_*bai 45
操作系统的其他部分包括与内核交互的驱动程序,还有几层帮助程序处理用户界面、网络和位于内核和实际应用程序之间的操作系统的其他核心部分。
举个例子,我已经展示了OS X的结构,正如你在内核(浅蓝色)之上看到的,在你之前有几层“核心”功能、系统工具、服务和 API(应用程序编程接口)甚至可以访问 GUI,这是您通常在实际应用程序本身中使用的内容。
大多数操作系统具有相似的结构,但在实际内核的多少方面存在很大差异。请参阅维基百科关于微内核的文章进行比较。
编辑 - 回答你的评论(我的评论有点长)
您可以只启动一个 linux 内核,但您将无法真正实现很多目标,所有这些帮助应用程序提供了您看到和使用的所有界面。
一旦内核启动(并初始化硬件),它将尝试移交给 GNU/Linux 操作系统的其他部分,这些部分提供启动服务的功能(例如UDEV,它填充/dev
原始设备接口,供程序使用,例如硬盘驱动器和串行端口等)和用于设置网络的程序 ( dhcpcd ) 和 API,例如X.org,以便应用程序能够通过窗口管理器(例如GNOME或KDE)显示窗口和图标。
但是,是的,您可以简单地启动内核本身,它只会坐在那里并显示“我已经启动,现在怎么办?” 迅速的。