整体内核和微内核有什么区别?


Answers:


113

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

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


35
Mac OS X和Windows都是混合内核,因为它们与单片内核紧密相关。微内核的示例包括:Mach QNX AmigaOS Minix
zeitue 2012年

7
GNU Hurd是在微内核上运行的OS的一个很好的例子。它仍在积极开发中,一些流行的Linux发行版具有Hurd端口(Debian / Hurd,Arch Hurd等)。
Beatgammit

76
  1. 整体内核的设计要比微内核的思想要古老得多,微内核的思想是在1980年代末出现的。

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

  3. 整体内核通常比微内核快。第一个微内核Mach比大多数整体内核慢50%,而后来的L4(如L4)仅比整体设计慢2%或4%。

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

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

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

  7. 整体内核使用信号和套接字来实现进程间通信(IPC),微内核使用消息队列。第一代微内核无法很好地实现IPC,并且在上下文切换方面运行缓慢-这就是导致它们性能不佳的原因。

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


1
提到MINIX是什么版本?第三版将设备驱动程序和文件系统与内核分开
orustammanapov

大约8。这是否意味着在Linux上安装程序时,整个内核二进制文件会重新编译?另外,该内核二进制文件在哪里?谢谢。
Nikos

@ Nik-Lz:不是程序,而是功能。程序通常在用户空间上运行。如果要在内核空间中执行代码,则有两个选择:将其构建到内核中,或将其加载到内核模块中。ref
bayuah

25

单片内核

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

优点

•更快的处理

缺点

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

示例 •MS-DOS,Unix,Linux

微内核

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

优点

•防撞,便携式,更小尺寸

缺点

•由于附加的消息传递,处理速度较慢

示例 •Windows NT


14

1,单核(Pure Monolithic):all

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

    (-)无法添加/删除,更少/零柔性

    (+)组件间通信更好

例如:- 传统Unix

2.Micro Kernel:few

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

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

    (+)灵活地进行更改/升级

    (-)通讯开销

例如:-QNX

3,模块化内核(Modular Monolithic)most

  • 微内核与整体内核的结合

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

  • 驱动程序以模块的形式出现

例如:-Linux Modern OS


1

在内核设计范围内,两个极端是单片内核和微内核。

例如,(经典的)Linux内核是单片内核(迄今为止,每个商用OS也是这样-尽管他们可能会另行声明);

因为它的代码是单个C文件,所以产生了实现上述所有服务的单个进程。
为了举例说明Linux内核的封装,我们指出Linux内核甚至无法访问任何标准C库。实际上,Linux内核不能使用基本的C库函数,例如printf。相反,它实现了自己的打印功能(称为打印)。

Linux内核的这种隔离和自我包含为Linux内核提供了其主要优势:内核驻留在单个地址空间中1,使所有功能都可以以最快的方式进行通信,而无需诉诸任何类型的消息传递。特别是,单片内核实现了系统的所有设备驱动程序。

但是,这是单片内核的主要缺点:引入任何不受支持的新硬件都需要重写内核(在相关部分中),重新编译内核并重新安装整个操作系统。
更重要的是,如果任何设备驱动程序崩溃,整个内核将因此遭受损失。这种支持硬件增加和硬件崩溃的非模块化方法是支持内核的另一种极端设计方法的主要论据。从某种意义上说,微内核是一种简约内核,仅包含最基本的OS服务(如进程管理和文件系统管理)。在微内核中,设备驱动程序位于内核外部,从而允许在操作系统运行时添加和删除设备驱动程序,并且无需更改内核。


-1

整体内核具有所有内核服务以及内核核心部分,因此很重并对速度和性能产生负面影响。另一方面,微内核重量轻,导致性能和速度提高。
我在wordpress网站上回答了同样的问题。有关表格形式的整体式,微内核和外核之间的区别,可以在这里访问

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.