原作者:不详
翻译整理:土豆丝624
原文链接:
techdifferences.com/difference-…
预警:水平有限,欢迎大佬捉虫指正。码字不易,转载说明出处,谢谢。
1 概述
内核作为操作系统的一部分,承担管理系统资源的责任。内核在应用程序和硬件之间架起了一座桥梁。内核主要分为两类:微内核和宏内核。
微内核的用户服务和内核服务分别运行在不同的地址空间。但是,在宏内核中,用户服务和内核服务是在同一个地址空间的。
Figure 1宏内核和微内核架构对比
2. 宏内核和微内核对比表格
让我们通过下面的对比表格来帮助我们了解宏内核和微内核的不同。
|
对比项 |
微内核 |
宏内核 |
|
基础 |
用户服务和 内核服务在不同的地址空间 |
用户服务和内核服务在同一个地址空间 |
|
体积大小 |
微内核很小 |
宏内核比微内核大,因为所有的服务都在一个二进制文件中 |
|
性能 |
低。因为服务是独立运行在不同的地址空间,调用服务通过消息传递来实现。IPC机制需要内核许可,从而增加访问时间,影响性能 |
高。所有的服务都在同一个地址空间,所有的服务可以直接调用 |
|
可扩展性 |
微内核更容易扩展。除了内核最基础的服务外,其他的服务都像普通进程运行在用户空间。 |
宏内核很难扩展。所有的服务都在一个二进制文件,任何更改都要重新编译整个系统 |
|
安全 |
更安全。某一个服务崩溃,不会影响微内核运行 |
某一个服务崩溃,会导致整个系统崩溃 |
|
编码 |
开发难度高,功能实现需要更多的代码,会引入更多的bug。尤其是消息传递的bug很难修复。进程管理也更复杂。 |
开发难度低。功能实现需要比较少的代码,引入较少的bug |
|
操作系统例子 |
QNX, Symbian, L4Linux, Singularity, K42, Mac OS X, Integrity, PikeOS, HURD, Minix, and Coyotos. |
Linux, BSDs (FreeBSD, OpenBSD, NetBSD), Microsoft Windows (95,98,Me), Solaris, OS-9, AIX, HP-UX, DOS, OpenVMS, XTS-400 etc. |
3.微内核定义
宏内核的初衷是降低内核的大小,所以只有基本的服务,比如进程通信和IO控制运行在内核,其他系统服务像普通进程一样独立存在,运行在不同的地址空间。和宏内核操作系统直接调用相反,微内核的通信是通过消息传递来实现IPC. Mac OS和WinNT是微内核操作系统的例子。
4 宏内核定义
可以把宏内核看成是一个运行在一个大的地址空间的单一二进制文件。 操作系统的服务比如进程管理,内存管理,中断处理,IO通信,文件系统,设备驱动和网络等等,所有的都运行在内核空间。所有的服务在系统启动的时候都会加载到内存。Linux是宏内核的一个好例子。
5 微内核和宏内核的关键区别总结
· 宏内核和微内核最基本的区别是微内核的用户服务和内核服务在不同的地址空间而宏内核的用户服务和内核服务的实现在同一块地址空间。
· 微内核比较小因为只要内核服务存在于内核地址空间。相比较而言,宏内核会比微内核大一点因为用户服务和内核服务存在于同一块地址空间。
· 宏内核的执行效率比微内核的执行效率高因为应用程序和硬件的通信是通过系统调用实现的。另一方面,微内核的执行比较慢因为应用程序和系统之间通过消息传递建立通信。
· 微内核容易扩展。新的服务增加到用户空间。由于用户空间和内存空间隔离,所以不需要改动内核空间。相反,对于宏内核来说,新的服务增加到宏内核中,整个系统都要改动。
· 微内核比宏内核更安全因为如果微内核一个服务失败不会影响到其他服务。而对于宏内核来说,某一个服务的失败会导致整个系统崩溃。
· 宏内核的设计需要编写的代码比较少,因此会引起的bug数量也会更少。而对于微内核来说,完成需求需要更多的代码,从而导致更多的bug。
6 结论
对于操作系统选择宏内核和微内核,主要基于使用场景。宏内核系统适用于海量数据处理的场合,操作系统的架构决定了宏内核操作系统能够满足这种场景下对大数据处理的性能要求。对于微内核系统,适用于对可靠性要求比较高,但数据量不大的场合。