单片和微内核有什么区别?
任何人都可以请示例单片和微内核之间的差异解释? 还有其他的内核分类?
单片内核是完全在单个地址空间中运行的单个大进程。 这是一个单一的静态二进制文件。 所有内核服务都存在并在内核地址空间中执行。 内核可以直接调用函数。 基于单片内核的操作系统的例子:Unix,Linux。
在微内核中,内核被分解成单独的进程,称为服务器。 一些服务器在内核空间运行,一些在用户空间运行。 所有服务器都保持独立,并在不同的地址空间中运行。 服务器通过IPC(进程间通信)发送消息来相互调用“服务”。 这种分离的优点是,如果一台服务器发生故障,其他服务器仍然可以高效地工作。 基于微内核的操作系统的例子:Mac OS X和Windows NT。
1 )单核内核比微内核要老很多,这个想法是在二十世纪八十年代末期构思的。
2 )在Unix和Linux中使用单片内核。 微内核用于QNX,L4和HURD。 它最初用于Mach(不是Mac OS X),后来被转换成混合内核。 甚至Minix也不是纯粹的内核,因为设备驱动程序被编译为内核的一部分。
3 )单片内核比微内核快。 第一个微内核马赫比单片内核慢了50%,而后来的L4比单片内核慢了2%或4%。
4 )整体的内核一般都很笨重。 一个纯微内核的尺寸必须很小,以适应处理器的L1caching(第一代微内核)。
5 )在Monolithic内核中,设备驱动程序驻留在内核空间中,而在Microkernel中,设备驱动程序驻留在用户空间中。
6 )由于设备驱动程序驻留在内核空间中,因此使单片内核的安全性不如微内核,驱动程序中的故障可能导致崩溃。 微内核比单片内核更安全,因此在一些军事设备中使用。
7 )单片内核使用信号和套接字来确保IPC,微内核方法使用消息队列。 第一代微内核在IPC上执行得不好,所以上下文切换很慢。
8 )向单片系统添加新function意味着重新编译整个内核,而使用微内核则可以添加新function或补丁,而无需重新编译。
单片内核
内核中的所有部分(如调度程序,文件系统,内存pipe理,networking堆栈,设备驱动程序等)都被维护在单核内核中的一个单元中
优点
•更快的处理
缺点
•崩溃不安全•移植不灵活•内核大小爆炸
示例 •MS-DOS,Unix,Linux
微内核
只有IPC(Inter进程通信),基本调度程序,基本内存处理,基本I / O原语等非常重要的部分被放入内核。 沟通通过消息传递发生。 其他人则作为用户空间中的服务器进程维护
优点
•防碰撞,便携,尺寸更小
缺点
由于附加的消息传递,处理速度较慢
示例 ?Windows NT
1.单片内核(Pure Monolithic): all
-
所有内核服务从单个组件
( – )添加/删除是不可能的,更less/零灵活
(+)组件间通信更好
例如: – 传统的Unix
2.微内核: few
-
来自核心内核的很less的服务(内存pipe理,CPUpipe理,IPC等),来自不同层/组件的其他服务(文件pipe理,I / Opipe理等)
-
拆分方法[有些服务处于特权(内核)模式,有些处于正常(用户)模式]
(+)灵活更改/升级
( – )通信开销
例如: – QNX等
3.模块化内核(Modular Monolithic): most
-
Micro和Monolithic内核的组合
-
模块集合 – 模块可以是 – >静态+dynamic
-
驱动程序以模块的forms出现
例如: – Linux现代操作系统
在内核devise的范围内,两个极端点是单核内核和微内核。
例如(经典的)Linux内核就是一个单一的内核(所有的商业操作系统也是如此 – 尽pipe他们可能会声称)。
因为它的代码是一个单一的C文件,引起了一个实现上述所有服务的过程。
为了举例说明Linux内核的封装,我们说Linux内核甚至不能访问任何标准的C库。 事实上,Linux内核不能使用基本的C库函数,如printf。 而是实现自己的打印function(称为打印)。
Linux内核的隔离和自我遏制为Linux内核提供了主要优势:内核驻留在单个地址空间中,使得所有特性能够以最快的方式进行通信,而不需要任何types的消息传递。 特别是,单片内核实现了系统的所有设备驱动程序。
然而这是单片内核的主要缺点:引入任何新的不支持的硬件需要重写内核(在相关部分),重新编译内核,重新安装整个操作系统。
更重要的是,如果任何设备驱动程序崩溃,整个内核受到影响。 这种硬件添加和硬件崩溃的非模块化方法是支持内核的其他极端devise方法的主要论据。 微内核在某种意义上是一种简单的内核,它只包含最基本的操作系统服务(如进程pipe理和文件系统pipe理)。 在微内核中,设备驱动程序位于内核之外,允许在操作系统运行时添加和删除设备驱动程序,不需要对内核进行更改。