为什么Linux被称为单片内核?

时间:2009-11-27 03:16:22

标签: architecture operating-system linux-kernel

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

如果Linux能够支持模块,为什么不将所有子系统分解为模块并在必要时加载它们?在这种情况下,内核最初不必加载所有模块,并且可以维护模块中函数的索引并在必要时加载它们。

7 个答案:

答案 0 :(得分:263)

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

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

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

微内核的优点是可以轻松地重新启动任何失败的服务,例如,如果根文件系统抛出中止,则没有内核停止。这也可以被视为一个缺点,因为它可以隐藏相当严重的错误(或使它们看起来不那么关键,因为问题似乎不断自我修复)。它被视为一个巨大的优势,在您部署完成后无法方便地修复的情况。

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

工作稳定内核的最短路径是单片方法。这两种方法都可以提供POSIX接口,其中内核的设计对于想要编写代码以在任何给定设计上运行的人来说都不太感兴趣。

我在生产中使用Linux(单片)。但是,我的大部分学习,黑客攻击或修补内核开发都会进入微内核,特别是HelenOS

修改

如果你通过我啰嗦的答案得到了这么远,那么阅读“Great Torvalds-Tanenbaum debate on kernel design”可能会有一些乐趣。 2013年,在它发布20多年后阅读更加有趣。最有趣的部分是Linus在最后一条消息中的签名:

Linus "my first, and hopefully last flamefest" Torvalds

显然,除了Tanenbaum预测x86很快就会过时之后,这种情况不会成真。

<强> NB:

当我说“Minix”时,我并不暗示Minix 3.此外,当我提到HURD时,我正在引用(主要是)Mach微内核。我并不打算贬低别人最近的工作。

答案 1 :(得分:21)

这是我的简短回答...找到下图。您将清楚地了解两种类型的内核

enter image description here

答案 2 :(得分:13)

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

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

在任何一种情况下,操作系统都可以高度模块化。

答案 3 :(得分:8)

来自Wikipedia

  

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

另一方面,Windows的最新版本使用Hybrid kernel

  

混合内核是一种内核架构,它基于微内核和计算机操作系统中使用的单片内核架构的各个方面。由于与单片内核的相似性,该类别存在争议;这个术语被一些简单的营销所驳回。传统的内核类别是单片内核和微内核(纳米内核和外核被视为微内核的更极端版本)。

答案 4 :(得分:7)

  

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

在某种意义上,

Linux 模块可能意味着模块化。正如其他人所说,单片通常代表微内核单片内核。传统的微内核只有这些功能,

  1. 调度
  2. 内存管理
  3. 进程间通信
  4. 没有硬件驱动程序协议堆栈文件系统暂停/恢复时钟主内核中的管理等。这些东西与任何用户任务相同(尽管他们可能通过MMU /调度程序拥有不同的权限)。


    Tanenbaum's predictions

    1. Microkernels是未来
    2. x86将消亡,RISC架构将主导市场
    3. (从那时起5年)每个人都将运行免费的GNU OS
    4. PC和服务器程序员可能会大笑,但对于现有的大多数手机来说,两个和三个肯定是正确的。如果黑莓QNX取得成功,Tanenbaum将适用于所有帐户。

      此外,许多L1-hypervisors下面都有micro-kernel。这是因为超级遮阳板通常在 context 开关旁边没有那么多。

      显然有三个人预测Linux的成功。 ; - )


      微内核的一个参数是所有单片子系统需要同时同步多个值。为了做到这一点,他们必须使用锁,并且在扩展到并行体系结构时会受到Amdahl's law的影响。计数器是微内核导致大量的IPC消息。

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

答案 5 :(得分:5)

'Monolithic'在这个上下文中并不是指有一个大的可执行文件,正如你所说,Linux支持在运行时动态加载内核模块。在讨论内核时,“单片”意味着整个操作系统以“特权”或“超级用户”模式运行,而不是使用某种内核的其他类型的操作系统,例如“微内核”,其中只有最小的功能集在特权模式下运行,大多数操作系统在用户空间中运行。

微内核的支持者说这更好,因为更小的代码意味着更少的错误,并且在管理员模式下运行的错误可能导致比用户空间代码更大的问题(例如更大的机会遇到安全漏洞或整个系统崩溃“核心恐慌”的形式。一些微内核足够小,可以“正式验证”,这意味着您可以根据规范在数学上证明内核是“正确的”。 L4就是一个很好的例子。

答案 6 :(得分:2)

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

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

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