为什么Linux被称为单片内核?
我读过Linux是一个单一的内核。 整体内核是指将完整的内核代码编译和链接到可执行文件中吗?
如果Linux能够支持模块,为什么不把所有的子系统分解成模块并在必要时加载? 在这种情况下,内核不必首先加载所有模块,并且可以维护模块中的function索引并在必要时加载它们。
单片内核是所有服务(文件系统,VFS,设备驱动程序等)以及核心function(调度,内存分配等)共享相同空间的紧密组合的内核。 这直接反对微内核 。
微内核更喜欢将核心function与系统服务和设备驱动程序(基本上只是系统服务)隔离的方法。 例如,VFS(虚拟文件系统)和块设备文件系统(即minixfs)是独立的进程,运行在内核空间之外,使用IPC与内核,其他服务和用户进程进行通信。 简而言之,如果它是Linux中的一个模块 ,它是微内核中的一项服务 ,表示一个孤立的进程。
不要把模块化内核这个词混淆成单块。 一些单片内核可以被编译为模块化的(例如Linux),重要的是该模块被插入到处理核心function(内核空间)的相同空间并从其运行。
微内核的优点是任何失败的服务都可以轻松地重启,例如,如果根文件系统抛出中断,则不会有内核停止。 但是,这也可以被看作是一个缺点,因为它可以隐藏相当严重的错误(或者使它们看起来不那么重要,因为问题似乎不断地自行修复)。 在部署完成后无法方便地修复的情况下,它被视为一个很大的优势。
微内核的缺点是asynchronousIPC消息传递可能变得非常难以debugging,特别是如果实现了原纤化的话。 此外,只是跟踪FS /写入问题意味着检查用户空间进程,块设备服务,VFS服务,文件系统服务和(可能)PCI服务。 如果你对此留有空白,那么可以看看IPC的服务。 在单片内核中这通常更容易。 GNU赫德患有这些debugging问题( 参考 )。 处理复杂的消息队列时,我甚至不会去检查点。 微内核并不适合心脏病。
一个稳定的内核的最短path是单片的方法。 任何一种方法都可以提供一个POSIX接口,在这个接口中,内核的devise变得对某人只是想编写代码来运行任何给定的devise感兴趣。
我在生产中使用Linux(单片)。 然而,我的大部分学习,黑客攻击或修改内核的方式都是进入微内核,特别是HelenOS 。
编辑
如果你对我的这个啰嗦的回答有了这样的了解,那么你可能会读一下“ 关于内核devise的大Torvalds-Tanenbaum辩论 ”。 阅读2013年更有趣,超过20年后。 最有趣的部分是Linus在最后一则消息中的签名:
Linus "my first, and hopefully last flamefest" Torvalds
很明显,Tanenbaum预测x86很快就会被淘汰,这并没有成为现实。
注意:
当我说“Minix”时,我并不意味着Minix 3.此外,当我提到HURD时,我指的是(大部分)Mach微内核。 我不打算贬低他人近期的工作。
单片内核意味着整个操作系统运行在内核模式(即硬件特权)。 也就是说,操作系统的任何部分都不以用户模式运行(低权限)。 只有OS上的应用程序以用户模式运行。
在非单一内核操作系统(如Windows)中,大部分操作系统本身以用户模式运行。
无论哪种情况,操作系统都可以是高度模块化的。
这是我的简短答案…find下面的图像。 你会清楚的知道这两种types的内核
从维基百科
单片内核是一个内核体系结构,整个操作系统在内核空间中工作,单独作为pipe理员模式工作。 与其他体系结构不同的是,单一内核单独定义了一个高级虚拟接口,通过计算机硬件实现一系列原语或系统调用来实现所有操作系统服务,如进程pipe理,并发和内存pipe理本身,更多的设备驱动程序模块。
另一方面,Windows的最新版本使用Hybric内核 。
混合内核是基于微内核和计算机操作系统中使用的单片内核架构相结合的内核架构。 由于与单片内核的相似性,该类别是有争议的; 这个词被一些人简单地推销了。 传统的内核类别是单核内核和微内核(纳米内核和外核被视为微内核的更极端版本)。
; tl-dr – 不,Linux始终是单一的。
Linux 模块可能意味着模块化 。 正如其他人指出,单片机通常代表一个微内核与单片内核。 传统的微内核只有这些function,
- 调度
- 内存pipe理
- 进程间通信
主内核中没有硬件驱动程序 , 协议栈 , 文件系统 , 挂起/恢复 , 时钟pipe理等。 这些东西与任何用户任务都是一样的 (尽pipe它们可能通过MMU /调度器具有不同的权限)。
Tanenbaum的预言
- 微内核是未来
- x86将会消失,RISC架构将主宰市场
- (从那时起5年),每个人都将运行一个免费的GNU操作系统
个人电脑和服务器程序员可能会笑,但现在的大多数手机当然是两三个。 如果黑莓QNX成功的话,Tanenbaum会是对的。
而且,许多L1pipe理程序在下面都有一个微内核 。 这是因为一个超级遮阳板通常在上下文切换旁边没有太多的工作。
显然有三个预测Linux的成功。 😉
微内核的一个论点是,所有的单片子系统需要一次同步多个值。 为了做到这一点,他们必须使用锁,并将延伸到并行架构时受到阿姆达尔定律的影响 。 计数器是微内核导致大量的IPC消息。
一个主要的发展是使用无锁编程来避免单核内核的争用。 这样可以避免单核内核的locking,同时也减less了IPC的开销。 最近,所有的CPU都在扩展他们的ISA,以包含更好的无锁algorithm原语。 所以Linux可能会在一段时间内仍然是一个单一的内核。
在这种情况下,“单片”并不是指单个大型可执行文件,正如你所说,Linux支持在运行时dynamic加载内核模块。 在讨论内核时,“单片”意味着整个操作系统运行在“特权”或“主pipe”模式下,而不是其他types的使用内核types的操作系统,例如“微内核”function集以特权模式运行,大部分操作系统运行在用户空间中。
微内核的支持者认为这样做更好,因为较小的代码意味着更less的错误,并且在pipe理程序模式下运行的错误可能比用户空间代码造成更多的问题(例如,以安全漏洞或总体系统崩溃forms“内核恐慌”)。 一些微内核足够小,可以“正式validation”,这意味着你可以根据规范在math上certificate内核是“正确的”。 L4是一个很好的例子。
单片内核是完全在单个地址空间中运行的单个大型进程。 这是一个单一的静态二进制文件。 所有内核服务都存在并在内核地址空间中执行。 内核可以直接调用函数。 基于单片内核的操作系统的例子是Linux,Unix。
我觉得这篇文章会帮助你更多地理解这个概念。
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html