Answers:
整体内核是其中所有服务(文件系统,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微内核。我无意贬低他人的最新作品。
单片内核意味着整个操作系统都以内核模式运行(即,硬件享有很高的特权)。也就是说,操作系统的任何部分都不会以用户模式运行(较低的特权)。只有操作系统顶部的应用程序才能在用户模式下运行。
在非单片内核操作系统(例如Windows)中,大部分操作系统本身以用户模式运行。
无论哪种情况,操作系统都可以是高度模块化的。
; tl-dr-不,Linux总是单片的。
Linux 模块在某种意义上可能意味着模块化。正如其他人指出的那样,单片通常代表微内核与单片内核。传统的微内核仅具有这些功能,
主内核中没有硬件驱动程序,协议栈,文件系统,挂起/恢复,时钟管理等。这些东西与任何用户任务都是相同的(尽管它们可能通过MMU /调度程序具有不同的特权)。
PC和服务器程序员可能会笑,但是对于现有的大多数手机来说,确实有两个和三个确实是对的。如果BlackBerry QNX成功了,Tanenbaum将适用于所有客户。
同样,许多L1管理程序在下面都有一个微内核。这是因为虚拟机监控程序通常在上下文切换之外不做很多事情。
显然有三点可以预测Linux的成功。;-)
微内核的一个论点是,所有的整体子系统都需要一次同步多个值。为此,它们必须使用锁,并且在扩展到并行体系结构时会受到阿姆达尔定律的影响。相反,微内核会导致大量IPC消息。
一个主要的发展是使用无锁编程来避免在单片内核中发生争用。这避免了锁定在单片内核中,同时还减少了IPC开销。最近,所有CPU都在扩展其ISA,以包括用于无锁算法的更好的原语。因此,Linux在一段时间内可能仍将是单片内核。
从维基百科:
整体内核是一种内核体系结构,其中,整个操作系统都在内核空间中运行,并且仅作为主管模式运行。与其他体系结构不同,单块内核单独定义了计算机硬件上的高级虚拟接口,并带有一组原语或系统调用来实现所有操作系统服务,例如进程管理,并发性和内存管理本身以及一个或多个设备驱动程序作为模块。
另一方面,Windows的最新版本使用混合内核。
混合内核是基于计算机操作系统中使用的微内核和整体内核体系结构相结合的内核体系结构。由于与整体内核的相似性,该类别存在争议。这个词已被一些简单的营销人员忽略。传统的内核类别是整体内核和微内核(纳米内核和exokernels被视为微内核的更极端版本)。
在这种情况下,“ Monolithic”并不表示存在单个大型可执行文件,正如您所说的那样,Linux支持在运行时动态加载内核模块。在谈论内核时,“单片式”是指整个操作系统以“特权”或“主管”模式运行,这与使用诸如“微内核”之类的内核的其他类型的操作系统相反,在该操作系统中,最小该功能集在特权模式下运行,并且大多数操作系统在用户空间中运行。
支持微内核的人说,这样做更好,因为较小的代码意味着更少的错误,并且在超级用户模式下运行的错误比在用户空间代码中引起的问题大得多(例如,更有可能出现安全漏洞或以“内核恐慌”)。一些微内核足够小,可以被“正式验证”,这意味着您可以根据规格从数学上证明内核是“正确的”。L4是一个很好的例子。
整体内核是一个完全在单个地址空间中运行的单个大型进程。它是一个静态二进制文件。所有内核服务都存在并在内核地址空间中执行。内核可以直接调用函数。基于整体内核的OS的示例是Linux,Unix。
我认为这篇文章将帮助您更多地了解概念。
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html