什么叫做微内核?与安卓系统有什么区别?
Linux有两种内核形式,一种是安卓系统用的宏内核,另一个就是华为的鸿蒙系统使用的是微内核,微内核的设计理念是尽可能的简化,在微内核操作系统中,内核是指精心设计的、能实现现代OS最基本的核心功能的部分。微内核并非是一个完整的OS,而只是操作系统中最基本的部分,它通常用于:
1、 实现与硬件紧密相关的处理;
2 、实现一些较基本的功能;
3、负责客户和服务器之间的通信;
4、它们只是为构建通用OS提供一个重要基础,这样就可以确保把操作系统内核做得很小。
所以简单地说,微内核就是把核心功能拆解得尽可能小,根据不同设备的需求自由组合,跟搭积木似的,同时还可以增强系统的安全性、可移植性、也能使分布式结构更加合理的运作,植入更多的插件程序,这是华为号称能跨不同平台部署的关键所在。
而安卓系统用的宏内核就比较庞大而复杂了,仅仅是代码就有几千万行,但是这种内核方式可以将手机系统所用到的所有驱动软件、底层代码、各种管理以及网络协议等都直接保存在了内核当中,运行效率非常高,响应速度也非常快,这是相比微内核的优势所在。
但是安卓的宏内核缺点也很明显,那就是安卓手机卡死、卡顿的情况,因为用这种内核方式保存的进程或者相关的内存数据只要有其中一个发生崩溃,那么面临着的就是整个系统的崩溃,所以稳定性方面,是“宏内核”的弱势。但是随着谷歌这几年的不断优化,还有手机硬件的爆发式提升,现在的安卓设备死机崩溃的现象已经少多了。
内核就是机器配置的最底层的程序,是操作系统(作业系统)最为基本、核心的部分。
对于操作系统而言实现内核时钟管理、中断管理、设备驱动、CPU切换,以及对于进程、存储器、设备等管理功能的那些程序就是内核程序,不同的操作系统对于“内核”的定义不同,所以才有了宏内核、微内核的争议。
在1980年代以前所有的操作系统都采用宏内核(Monolithic Kernel,又称为整块性核心、集成式核心、单体式核心)来实现,这就导致了直到现在主要的操作系统都是***用宏内核,比如Windows、MacOS、Linux、OpenVMS、FreeBSD、Solaris、Unix、Android等。宏内核通常是以单一静态二进制档案的形式存在磁盘或快速存储器上,开机之后马上载入记忆体的核心空间开始运行。
宏内核核心提供的所有服务都是以特权模式在大型的核心位地址空间(Kernel Space)里运行,几乎是***服务,用户运行的应用程序所产生的需求直接向内核提,由内核进行统一管理。宏内核的优点就是设计简单,核心内的通讯成本非常小,核心可以直接调用核心空间内的函数,就跟应用程序调用函数一样。
除了宏内核之外,还有微内核、混合内核,以及极限核心(Exokernel)、超微内核(Nanokernel)等。微内核的特点就是精简,只实现一个操作系统最为基本的功能,微内核更像是一个代理人,其他所有的驱动、文件系统等都运行在和用户应用程序平级的用户模式下。
极限核心的设计极为简化,目标在于同时简化传统微内核的信息传递机制和宏内核的软件抽象层。在极限核心中运行在核心空间的唯一进程只有内核,它的唯一使命就是负责分配系统***,并防止用户进程存取到其他进程的***。
从事嵌入式开发多年,要讲清楚这个事情真需要一定开发经验特别是关于linux上面的,首先微内核是相对于强内核而言,linux属于典型的强内核架构,从第一版本开始就是这个样子,首先linux设计者对于设计成强内核有自己的理由,更多是一些个性化的理由,当然也提出自己的一些意见,必须是祖师爷大家还是要尊重老人家的意见,概括起来大致有几个方面。
1.强内核机构看起来更加清晰明了,结构层次清晰简洁。
2.很重要的原因,因为linux代码是开源的,更加具备理想情怀,因为是开源的架构大家有的是时间把这个事情做的更加完美细致,如果这个事情放在一个商业化企业去做,可能架构就要跟着调整了,毕竟任何企业都要有时间点概念,这就是开源社区和商业化组织的最大区别。
3.linux
4.祖师爷认为单纯为了增加维护性而去牺牲效率是不值得,所说的效率就是指的是进程之间的通讯开销。
从以上四点就可以得出结论,Linux在设计上还是展示出很多的与众不同之处,但从安卓系统性能上讲这种单纯的强内核架构已经显示出来弊端了,如同余大嘴说到的现在安卓的代码差不多 有一亿行,但真正在运行只有8%的概率,所以在效率上有大打折扣,可以讲随着硬件以及软件发展趋势,微内核未来成为一种大的趋势,现在微内核做的比较好的属于美国黑莓公司的QNX系统,由于是收费系统在市面上推广的力度不是很大,主要用在进口车的里面的***系统上面。
在功能简单单一的场景下强内核有着自己独特的优势。因为功能简单模块就比较少,代码量也相对少了许多,在这种情况下***用强内核容易维护,而且代码实现也比较简单。微内核主要针对运行场景非常复杂,功能模块极其复杂的场景而设计的。
要了解微内核首先要明白用户空间和内核空间的差异,在强内核中几乎涉及到设备驱动的代码都要运行在内核空间,用户在编写代码的时候就要创建一个进程,用户空间的代码通过内存映射的方式在访问内核空间的设备,在设备功能比较少的时候非常具有优势,但在多种设备融合在一起的时候这种设计弊端就出来了。微内核架构上是系统级功能非常简单就是提供进程之间的通讯基础,其余复杂的功能散落在各个服务里面,如果要调用别的功能模块通过进程之间的通讯来完成,能够支持多个服务在一个规则里面运行,所以讲在微内核架构里面融入安卓系统还是一件非常容易的事情,因为就是开设一个独立的服务在里面,所以华为公司敢拍着脑袋说鸿蒙系统兼容安卓不是多大的问题,只不过需要成熟的生态系统来支撑。