为什么Linux被称为整体内核?


208

我读到Linux是单片内核。整体内核是否意味着将完整的内核代码编译并链接到可执行文件中?

如果Linux能够支持模块,为什么不将所有子系统分解为模块并在必要时加载它们呢?在这种情况下,内核不必一开始就加载所有模块,而是可以维护模块中功能的索引,并在必要时加载它们。

Answers:


290

整体内核是其中所有服务(文件系统,VFS,设备驱动程序等)以及核心功能(调度,内存分配等)都是紧密共享同一空间的紧密组合的内核。这直接与微内核相对。

微内核更喜欢将核心功能与系统服务和设备驱动程序(基本上只是系统服务)隔离的方法。例如,VFS(虚拟文件系统)和块设备文件系统(即minixfs)是在内核空间之外运行的独立进程,使用IPC与内核,其他服务和用户进程进行通信。简而言之,如果它是Linux中的模块,那么它是微内核中的服务,表示一个孤立的进程。

不要混淆模块化内核一词。某些单片内核可以编译为模块化(例如Linux),重要的是该模块插入处理核心功能的同一空间(内核空间)并从中运行。

微内核的优势在于,任何失败的服务都可以轻松重启,例如,如果根文件系统抛出异常,则不会导致内核停止运行。但是,这也可以看作是一个缺点,因为它可以隐藏非常严重的错误(或使它们看起来不太重要,因为问题似乎可以不断修复)。在某些情况下,部署后您根本无法方便地修复它,这是一个很大的优势。

微内核的缺点是异步IPC消息传递可能变得非常难以调试,尤其是在实现原纤维的情况下。此外,仅跟踪FS /写入问题就意味着检查用户空间进程,块设备服务,VFS服务,文件系统服务以及(可能是)PCI服务。如果您对此一无所获,那就该看看IPC服务了。在单片内核中,这通常更容易。GNU Hurd遭受了这些调试问题(参考)。在处理复杂的消息队列时,我什至不打算进入检查点。微内核不适合胆小的人。

完整,稳定的内核的最短路径是整体方法。两种方法都可以提供POSIX接口,对于只想编写可在任何给定设计上运行的代码的人来说,内核的设计就变得不那么有趣了。

我在生产中使用Linux(单片)。但是,我对内核开发的大部分学习,学习或修补工作都进入了微内核,尤其是HelenOS

编辑

如果您通过我的冗长的回答获得了如此远的成就,那么阅读“ 关于内核设计Great Torvalds-Tanenbaum辩论 ”可能会很有趣。发生了20多年后,2013年的阅读甚至更有趣。最有趣的部分是Linus在最后一条消息中的签名:

Linus "my first, and hopefully last flamefest" Torvalds

显然,这与Tanenbaum的x86很快将过时的预测并没有实现。

注意:

当我说“ Minix”时,并不表示Minix3。另外,当我提到HURD时,我指的是(主要是)Mach微内核。我无意贬低他人的最新作品。


5
有趣的是,Linus Torvalds在创建Linux时受到了Andew Tanenbaum的MINIX的极大影响。但是,MINIX基于微内核设计,而Linux使用单片内核。
Martin Liversage,2009年

2
@Martin Liversage:比受挫影响更大的沮丧:)我编辑了答案以反映这一点。
蒂姆·波斯特

25
@DigitalRoss:回答完此后,您应该会看到我的收件箱,与Minix和Mach爱好者相比,Linus较为驯服。
蒂姆·波斯特


3
@p_l我认为这已经非常接近我们需要讨论微型,整体式和混合式之间的区别的时候了。那可能是一个很好的问题:)
蒂姆·波斯特

15

单片内核意味着整个操作系统都以内核模式运行(即,硬件享有很高的特权)。也就是说,操作系统的任何部分都不会以用户模式运行(较低的特权)。只有操作系统顶部的应用程序才能在用户模式下运行。

在非单片内核操作系统(例如Windows)中,大部分操作系统本身以用户模式运行。

无论哪种情况,操作系统都可以是高度模块化的。


9
Windows绝对是单片内核。
亚当·罗森菲尔德

7
@亚当:我不同意。老式的16位Windows 和Windows 95等都是单片内核。但是Windows的基于NT的版本(包括所有Se​​rver版本以及Vista和7)显然是微内核,或者可能是混合内核,具体取决于您对“微内核”的定义。
CesarGon

8
仅仅因为打印机驱动程序不在ring0中运行并不能使它成为微内核:)
caf

7
@caf:我建议您看一下en.wikipedia.org/wiki/Windows_NT_kernelen.wikipedia.org/wiki/Comparison_of_operating_system_kernels。您会看到Windows NT及其后续产品,包括Vista,7和Servers,被描述为“混合内核”。操作系统的两个大型子系统完全在用户模式下运行,而不仅仅是打印机驱动程序。:-)
CesarGon

7
我的评论有点开玩笑-“混合”名称似乎无信息,以至无用。
caf

10

; tl-dr-不,Linux总是单片的。

Linux 模块在某种意义上可能意味着模块化。正如其他人指出的那样,单片通常代表微内核单片内核。传统的微内核仅具有这些功能,

  1. 排程
  2. 内存管理
  3. 进程间通讯

主内核中没有硬件驱动程序协议栈文件系统挂起/恢复时钟管理等。这些东西任何用户任务都是相同的(尽管它们可能通过MMU /调度程序具有不同的特权)。


Tanenbaum的预测

  1. 微内核是未来
  2. x86将会消失,RISC架构将主导市场
  3. (从那时起的5年内)每个人都将运行一个免费的GNU OS

PC和服务器程序员可能会笑,但是对于现有的大多数手机来说,确实有两个和三个确实是对的。如果BlackBerry QNX成功了,Tanenbaum将适用于所有客户。

同样,许多L1管理程序在下面都有一个微内核。这是因为虚拟机监控程序通常在上下文切换之外不做很多事情。

显然有三点可以预测Linux的成功。;-)


微内核的一个论点是,所有的整体子系统都需要一次同步多个值。为此,它们必须使用锁,并且在扩展到并行体系结构时会受到阿姆达尔定律的影响。相反,微内核会导致大量IPC消息。

一个主要的发展是使用无编程来避免在单片内核中发生争用。这避免了锁定在单片内核中,同时还减少了IPC开销。最近,所有CPU都在扩展其ISA,以包括用于无算法的更好的原语。因此,Linux在一段时间内可能仍将是单片内核。


1
是的,我知道Tanenbaum的意思是赫德。但是GNU切换到Linux,所以措辞很有趣。
artless噪音

为什么在移动设备上缺少使用x86?是什么使其他架构具有优势?
阿卜杜勒


是的,这些很重要。制作x86 SOC(片上系统)很困难。没有标准的HDL代码可以制作SOC供应商(Broadcom,Freescale等)可以购买的x86。
artless噪音

9

维基百科

整体内核是一种内核体系结构,其中,整个操作系统都在内核空间中运行,并且仅作为主管模式运行。与其他体系结构不同,单块内核单独定义了计算机硬件上的高级虚拟接口,并带有一组原语或系统调用来实现所有操作系统服务,例如进程管理,并发性和内存管理本身以及一个或多个设备驱动程序作为模块。

另一方面,Windows的最新版本使用混合内核

混合内核是基于计算机操作系统中使用的微内核和整体内核体系结构相结合的内核体系结构。由于与整体内核的相似性,该类别存在争议。这个词已被一些简单的营销人员忽略。传统的内核类别是整体内核和微内核(纳米内核和exokernels被视为微内核的更极端版本)。


7
如果我曾经在内核空间中执行任何操作,则必须记住在某处使用“ hybric kerkel”。SCNR ;-)
于尔根A.艾哈德

1
Windows NT 始终是一个混合系统。内核可能不是完全混合的,但是您会质疑要算作内核的一部分(例如,winapi是作为用户空间服务实现的)
p_l 2013年

5

在这种情况下,“ Monolithic”并不表示存在单个大型可执行文件,正如您所说的那样,Linux支持在运行时动态加载内核模块。在谈论内核时,“单片式”是指整个操作系统以“特权”或“主管”模式运行,这与使用诸如“微内核”之类的内核的其他类型的操作系统相反,在该操作系统中,最小该功能集在特权模式下运行,并且大多数操作系统在用户空间中运行。

支持微内核的人说,这样做更好,因为较小的代码意味着更少的错误,并且在超级用户模式下运行的错误比在用户空间代码中引起的问题大得多(例如,更有可能出现安全漏洞或以“内核恐慌”)。一些微内核足够小,可以被“正式验证”,这意味着您可以根据规格从数学上证明内核是“正确的”。L4是一个很好的例子。


检查您的来源。维基页面未引用。www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/...
monksy

2

整体内核是一个完全在单个地址空间中运行的单个大型进程。它是一个静态二进制文件。所有内核服务都存在并在内核地址空间中执行。内核可以直接调用函数。基于整体内核的OS的示例是Linux,Unix。

我认为这篇文章将帮助您更多地了解概念。

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会无效。
斯科特(Scott)
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.