Linux 内核与微内核架构相比如何?

Linux 内核与微内核架构相比如何?

我曾经读到,微内核架构的一个优点是您可以停止/启动网络和文件系统等基本服务,而无需重新启动整个系统。但是考虑到现在的 Linux 内核(一直都是这样吗?)提供了使用模块来达到相同效果的选项,微内核的(剩余)优势是什么?

答案1

微内核在最内部、最受信任的模式下运行所需的代码比整体内核。这有很多方面,例如:

  • 微内核允许随意加载和卸载非基本功能(例如未连接或未使用的硬件的驱动程序)。这在 Linux 上主要可以通过模块来实现。
  • 微内核更加健壮:如果非内核组件崩溃,它不会影响整个系统。有缺陷的文件系统或设备驱动程序可能会使 Linux 系统崩溃。除了编码实践和测试之外,Linux 没有任何方法可以缓解这些问题。
  • 微内核具有较小的可信计算基础。因此,即使是恶意的设备驱动程序或文件系统也无法控制整个系统(例如,最新 USB 小工具的来源可疑的驱动程序将无法读取您的硬盘)。
  • 前一点的结果是普通用户可以加载他们自己的组件,这些组件将是单片内核中的内核组件。

Unix GUI 是通过 X window 提供的,X window 是用户态代码(除了(部分)视频设备驱动程序)。许多现代的 unice 允许普通用户通过以下方式加载文件系统驱动程序保险丝。一些Linux网络数据包过滤可以在用户态完成。然而,设备驱动程序、调度程序、内存管理器和大多数网络协议仍然仅限于内核。

关于 Linux 和微内核的经典(如果过时)读物是塔南鲍姆-托瓦尔兹辩论。二十年后,可以说Linux正在非常非常缓慢地向微内核结构迈进(可加载模块很早就出现了,FUSE则更晚),但还有很长的路要走。

另一件发生变化的事情是相关性的增加虚拟化在台式机和高端嵌入式计算机上:出于某些目的,相关区别不是内核和用户态之间的区别,而是内核态和用户态之间的区别。管理程序和来宾操作系统。

答案2

微内核将系统处于内核模式(而不是用户空间)的时间限制到尽可能的绝对最小值。

如果崩溃发生在内核模式下,整个内核就会崩溃,这意味着整个系统都会崩溃。如果在用户模式下发生崩溃,则该进程就会停止运行。 Linux 在这方面很强大,但任何内核子系统仍然有可能有意或无意地写入任何其他内核子系统的内存。

微内核概念将许多传统上内核模式的东西(例如网络和设备驱动程序)放在用户空间中。由于微内核并不真正负责很多事情,这也意味着它可以更简单、更可靠。想一想 IP 协议是如何通过简单而愚蠢的方式将复杂性推向边缘并保留核心的精益和平均而真正带来强大的网络。

答案3

答案4

看看x86架构——单片内核只使用戒指0和3。真的是浪费。但由于上下文切换较少,它可以更快。

x86 环

相关内容