单片内核和微内核有啥区别?

Posted

技术标签:

【中文标题】单片内核和微内核有啥区别?【英文标题】:What is difference between monolithic and micro kernel?单片内核和微内核有什么区别? 【发布时间】:2011-05-31 02:04:03 【问题描述】:

谁能举例说明单片内核和微内核之间的区别?内核还有其他分类吗?

【问题讨论】:

serverfault.com/questions/170517/monolithic-vs-micro-kernel 我也会推荐***页面 另一个有用的问题 - ***.com/questions/1806585/… 【参考方案1】:

微内核:

尽可能多地从内核移动到“用户”空间。

使用消息传递在用户模块之间进行通信。

好处:

1-更容易扩展微内核

2-更容易将操作系统移植到新架构

3-更可靠(内核模式下运行的代码更少)

4-更安全

缺点:

1-用户空间到内核空间通信的性能开销

【讨论】:

【参考方案2】:

    单片内核设计比 1980 年代末出现的微内核思想要古老得多。

    Unix 和 Linux 内核是单片的,而 QNX、L4 和 Hurd 是微内核。 Mach 最初是一个微内核(不是 Mac OS X),但后来转换为混合内核。 Minix(第 3 版之前)不是纯微内核,因为设备驱动程序是作为内核的一部分编译的。

    单片内核通常比微内核快。第一个微内核 Mach 比大多数单体内核慢 50%,而后来的 L4 等内核只比单体设计慢 2% 或 4%。

    单片内核体积大,而微内核体积小 - 它们通常适合处理器的 L1 高速缓存(第一代微内核)。

    在单片内核中,设备驱动程序驻留在内核空间中,而在微内核中,设备驱动程序位于用户空间中。

    由于单体内核的设备驱动程序驻留在内核空间中,单体内核不如微内核安全,并且驱动程序中的故障(异常)可能导致崩溃(在 Windows 中显示为 BSOD)。微内核比单片内核更安全,因此更常用于军事设备。

    单片内核使用信号和套接字来实现进程间通信 (IPC),微内核使用消息队列。第一代微内核没有很好地实现 IPC,并且在上下文切换时速度很慢 - 这就是导致它们性能不佳的原因。

    向单体系统添加新功能意味着重新编译整个内核或相应的内核模块(对于模块化单体内核),而使用微内核,您无需重新编译即可添加新功能或补丁。

    李>

【讨论】:

提到MINIX你指的是哪个版本? 第 3 版将设备驱动程序和文件系统与内核分开 @Nik-Lz:不是程序,而是功能。程序通常在用户空间上运行。如果您想在内核空间中执行代码,您有两个选择:将其构建到内核中,或者使用内核模块加载它。 ref【参考方案3】:

单片内核具有所有内核服务以及内核核心部分,因此很重并且对速度和性能有负面影响。另一方面,微内核是轻量级的,从而提高了性能和速度。 我在 wordpress 网站上回答了同样的问题。 表格形式的monolithic、microkernel和exokernel的区别,可以访问here

【讨论】:

【参考方案4】:

在内核设计的范围内,两个极端 点是整体内核和微内核。

(经典)Linux 例如,内核是一个单片内核(每个商业操作系统也是如此 迄今为止也是如此——尽管他们可能另有主张);

因为它的代码是 单个 C 文件产生实现上述所有内容的单个进程 服务。 为了举例说明 Linux 内核的封装,我们注意到 Linux 内核甚至无法访问任何标准 C 库。 事实上,Linux 内核不能使用基本的 C 库函数,例如 打印。相反,它实现了自己的打印功能(称为打印)。 Linux内核的这种隔离和自包含提供Linux内核 其主要优点是:内核驻留在单个地址空间中1 启用 所有功能都可以以最快的方式进行通信,而无需求助于 任何类型的消息传递。 特别是,单片内核实现了所有设备驱动程序 然而,这是单片内核的主要缺点: 引入任何新的不受支持的硬件都需要重写 内核(在相关部分),重新编译它,并重新安装整个 操作系统。更重要的是,如果任何设备驱动程序崩溃,整个内核都会受到影响 因此。 这种硬件添加和硬件崩溃的非模块化方法 是支持另一种极端设计方法的主要论据 对于内核。微内核在某种意义上是一个极简内核,它包含 只有最基本的操作系统服务(如进程管理和文件系统) 管理)。在微内核中,设备驱动程序位于内核之外 允许在操作系统运行时添加和删除设备驱动程序 并且不需要更改内核。

【讨论】:

【参考方案5】:

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

在微内核中,内核被分解为单独的进程,称为服务器。一些服务器在内核空间中运行,一些在用户空间中运行。所有服务器都保持独立并在不同的地址空间中运行。服务器通过 IPC(进程间通信)发送消息来相互调用“服务”。这种分离的好处是,如果一台服务器出现故障,其他服务器仍然可以高效工作。基于微内核的操作系统示例:Mac OS X 和 Windows NT。

【讨论】:

Mac OS X 和 Windows 都是混合内核,更接近于单片内核。微内核的例子是:Mach QNX AmigaOS Minix GNU Hurd 是运行在微内核上的操作系统的一个很好的例子。它仍在积极开发中,一些流行的 Linux 发行版具有 Hurd 端口(Debian/Hurd、Arch Hurd 等)。 你能解释一下“静态二进制文件”是什么意思吗?【参考方案6】:

1.Monolithic Kernel(纯Monolithic):all

来自单个组件的所有内核服务

(-) 不能添加/删除,较少/零灵活

(+) 组件间通信更好

例如:- 传统的 Unix

2.微内核:few

来自核心内核的少数服务(内存管理、CPU 管理、IPC 等),来自不同层/组件的其他服务(文件管理、I/O 管理等)

拆分方法[有些服务处于特权(内核)模式,有些处于普通(用户)模式]

(+)灵活的变化/升级

(-)通信开销

例如:- QNX 等等。

3.Modular kernel(Modular Monolithic) :most

微内核和单体内核的结合

模块集合 -- 模块可以是 --> 静态 + 动态

驱动以模块的形式出现

例如:- Linux 现代操作系统

【讨论】:

【参考方案7】:

单片内核

内核的所有部分,如调度程序、文件系统、内存管理、网络堆栈、设备驱动程序等,都在Monolithic Kernel中的内核内的一个单元中维护

优势

•更快的处理

缺点

•崩溃不安全 •移植不灵活 •内核大小爆炸

示例 •MS-DOS、Unix、Linux

微内核

只有非常重要的部分,如 IPC(进程间通信)、基本调度程序、基本内存处理、基本 I/O 原语等,被放入内核。通信通过消息传递发生。其他的在用户空间中作为服务器进程维护

优势

•防撞、便携、体积更小

缺点

•由于额外的消息传递导致处理速度变慢

示例 •Windows NT

【讨论】:

以上是关于单片内核和微内核有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

操作系统的体系结构:大内核和微内核

模块化内核与微内核/单片内核

《Linux内核设计与实现》读书笔记-内核简介

谁能够详细介绍下MAC系统的内核

Linux 内核和 Windows 内核有啥区别

什么是微内核架构设计?