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

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


当前回答

单片内核意味着整个操作系统以内核模式运行(即由硬件高度特权)。即操作系统的任何部分都不能以用户模式(低权限)运行。只有运行在操作系统之上的应用程序才能以用户模式运行。

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

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

其他回答

单片内核意味着整个操作系统以内核模式运行(即由硬件高度特权)。即操作系统的任何部分都不能以用户模式(低权限)运行。只有运行在操作系统之上的应用程序才能以用户模式运行。

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

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

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

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

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

tl-dr -不,Linux一直是单片的。

Linux模块在某种意义上可能意味着模块化。正如其他人所注意到的那样,monolithic通常表示微内核而不是单片内核。传统的微内核只有这些特性,

调度 内存管理 进程间通信

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


Tanenbaum的预测

微内核是未来的趋势 x86将会消亡,RISC架构将主导市场 (5年后)每个人都将运行一个自由的GNU操作系统

PC和服务器程序员可能会笑,但对于现有的大多数手机来说,2和3确实是正确的。无论如何,如果黑莓QNX取得成功,塔南鲍姆是对的。

此外,许多l1管理程序在底层都有一个微内核。这是因为除了上下文切换之外,hypervisor通常不会做太多事情。

显然,三个因素预示着Linux的成功。;-)


微内核的一个论点是,所有单片子系统都需要在同一时间同步多个值。为了做到这一点,它们必须使用锁,并且在扩展到并行架构时将受到阿姆达尔定律的影响。计数器是微内核导致大量的IPC消息。

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

'Monolithic' in this context does not refer to there being a single large executable, and as you say, there Linux supports the dynamic loading of kernel modules at runtime. When talking about kernels, 'monolithic' means that the entire operating system runs in 'privileged' or 'supervisor' mode, as opposed to other types of operating systems that use a type of kernel such as a 'microkernel', where only a minimal set of functionality runs in privileged mode, and most of the operating system runs in user space.

Proponents of microkernels say that this is better because smaller code means less bugs, and bugs running in supervisor mode can cause much greater problems than in user space code (such as a greater chance of having security vulnerabilities or total system crashes in the form of a 'kernel panic'). Some microkernels are sufficiently minimal that they can be 'formally verified', which means you can mathematically prove that the kernel is 'correct' according to a specification. L4 is a good example of this.

从维基百科:

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

另一方面,Windows的最新版本使用了Hybrid内核。

混合内核是一种基于计算机操作系统中使用的微内核和单片内核架构的结合的内核架构。由于与单片内核的相似性,这个类别是有争议的;这个词被一些人认为是简单的市场营销。传统的内核类别是单片内核和微内核(纳米内核和外核被视为微内核的更极端版本)。