华为鸿蒙系统是基于微内核还是基于Linux?
近来关于鸿蒙操作系统(Harmony OS)是基于微内核还是基于Linux系同一直争论不休,以致有人说我不懂什么叫微内核,什么是宏内核,这篇文章我来复述一下相干的东西。
鸿蒙系统是基于微内核的全场景分布式系统(详见2019年鸿蒙系统发布会),可以按需扩展,低延时,实现更广泛的系统安全。
按照华为发布会的PPT来看,鸿蒙OS有三层架构,第一层是微内核,第二层是底子服务,第三层是步伐框架。所谓的第二层底子服务应该就是那些从内核态空间移到用户态空间的底子服务步伐。当然,也大概部门还是运行的内核态,更像是混淆内核。
当下的鸿蒙OS依然是基于开源框架,只是关键模块自我研发,也就是说,和各大手机厂商使用Android开源系统实现各自的定制系统大概是一个意思。鸿蒙OS的愿景是2020年实现内核和应用框架自研,2021年实现软硬件协同优化。这里的软硬件协同优化,应该是要解决进程间通信(Inter-process communication, IPC)的性能问题。
关于鸿蒙OS好不好用我不外多评价,时间是检验真理的唯一尺度。接下来主要聊一聊微内核的概念。
微内核(Microkernel or μ-kernel),这个概念其实是相对于宏内核(Monolithic kernel)而言的。
内核与微内核对比图示
我们常说的Linux/UNIX就是基于宏内核的,内核提供了相当多的功能,包括驱动,调度器,地点空间管理,进程间通信,文件系统,虚拟文件系统,系统调用等,以Linux为例,其宏内核的代码量高达2700万行。而鸿蒙系统自己是基于微内核开发而来,在现阶段采用多核混用也是一定,以是许多人一直在传鸿蒙是基于Linux开发的理论,但是他们忘记了鸿蒙系统的开发之初,微内核的核心架构是不变的。这也是为什么华为在发布鸿蒙系统时夸大基于微内核开发的缘故原由。
相比于宏内核超多的代码数目,微内核仅提供调度器,地点空间管理以及进程间通信等最底子的功能,MINIX 3的微内核仅1.2万行代码。
宏内核与微内核代码量为什么会有这么大的区别呢?德国计算机科学家Jochen Liedtke提出的微内核最小化原则,简单的讲就是,宏内核所提供的全部功能,可以扔到用户态实现的,就一律扔到用户态,内核仅保留绝对须要的功能。这有点像奥卡姆剃刀原理,如非必须,勿增实体。也就是说,宏内核提供了大量的冗余功能,兼容了太多的硬件,代码量自然就大。而微内核以致把硬件的驱动步伐从内核剥离出去,使其运行在用户态。
早期的宏内核,其实很像我们本日所说的微内核。早期设备自己的内存空间有限,外设也极少,内核须要支持的特性也很有限。但是随着硬件的飞速发展,内核须要支持更多的特性和更多的外设,宏内核架构的复杂性和代码规模也就飞速增加起来了,内核步伐间的耦合度也越来越大。当然,CPU速度的提升以及内存空间的增加,让我们基本上可以无视内核对性能的消耗。但是5G时代,一个万物互联(Internet of Things, IoT)的时代,将有更多的小型智能设备接入互联网,低功耗、低内存、安全性成为了新的要求,在这些设备上跑宏内核的系统绝对不是好的选择,由此,微内核的热度又起来了。
早在上个世纪八九十年代,微内核一度被炒的热火朝天。但是一直由于性能问题而没有得到广泛应用。直到本日,微内核在学界的热度也远超工业界。每一次发展微内核,都大抵经历如许的过程:把内核的某些功能剥离出内核,然后发作性能问题,然后再把一部门功能移回到内核。如许就出现了许多介于宏内核和微内核之间的内核形态,一般统称为混淆内核。我们常见的Mac OS、Windows NT等用的就是这种混淆内核的架构。
混淆内核示意图
那么,微内核到底有什么优点呢?
分布式支持:微内核各模块采用IPC通报信息,对于IPC而言,无论是在本机,还是局域网大概广域网,只要赋予进程和设备唯一的标识符,微内核的设计几乎是自然支持分布式系统的。
模块化、低耦合:由于大部门服务步伐被转移到用户态空间,系统就可以按需启动这些服务,按需接入外设。用户态的进程各自独立,系统耦合度大大降低。
组件故障不会导致系统重启,内核只须要重启故障组件就可以恢复正常,系统稳定性可以大大进步。熟悉Linux内核编程的人都知道,内核代码出问题,往往会导致整个系统瓦解。而用户态步伐不仅不会导致系统瓦解,而且易于调试。
微内核系统功能升级也更轻易,由于宏内核的许多功能都是运行在内核,跟随系同一起启动。虽然可以使用补丁实现故障修复和功能升级,但是依然有许多问题无法通过补丁解决,还是要依赖版本更换和重启整个系统。而微内核只须要替换相干组件,然后重启组件即可。
内核代码零缺陷:由于微内核代码量极少,可以从数学角度进行形式化验证,从而包管内核代码完全没有缺陷,也就是所谓的Bug free。但是这并不是说整个系统没有缺陷,系统自己还包括用户态的服务步伐,说白了,只是把缺陷转移到相对安全的用户态罢了。
那为什么微内核直到本日也没广泛应用呢?
缘故原由前面已经说了,微内核的低效率是硬伤。微内核依赖IPC实现通信,宏内核的IPC效率就很不尽人意,微内核则把IPC的低效率进一步放大了。相对而言,宏内核的文件系统,驱动等以线程的方式工作在内核空间,它们之间的通信可以都在内核完成,不须要上下文切换,可以直接访问共享资源,以致可以直接相互调用接口到达通信的目的。而微内核则须要通过IPC通信,触发系统调用,内存拷贝(异步通信须要拷贝两次),运行上下文切换,壅闭进程,这些操作开销都很大。
Jochen Liedtke创造的L4 microkernel把IPC的系统开销降低了一个数目级。如何实现呢?
首先,直接弃用异步IPC,全部通信均使用同步的方式。
然后把通信数据尽大概直接使用寄存器通报(这个涉及CPU指令集,有机遇再细说),如许可以减少数据拷贝、内存寻址、调度器切换运行上下文的开销。
末了为了解决同步通信造成进程壅闭的问题,引入了进程直接切换的概念,即当有数据发送时,当发送端发完数据时,直接将上下文切换到接收进程,敏捷完成数据通报和接收。
除此之外,微内核效率差的另一个缘故原由则是每指令的存储器周期比宏内核要长许多,这个就须要减少微内核的缓存工作集来解决问题了。
微内核效率差的缘故原由除了IPC、指令存储周期长外,还有一个观念上的问题。华为鸿蒙OS的愿景是支持多终端,同一开发流程,也就是让一个微内核支持全部的应用场景。而进步微内核效率的一个解决方案却是,设计单一目的(Single-purpose)、专用的微内核。
读到这里我相信你也是很有耐心的看完了我的文章,鸿蒙系统早期基于微内核开发而来,但是由于微内核的自然毛病,在加上新系统须要更加广泛的生态环境,以是推进到现阶段鸿蒙系统变成了多核心并存的局面,虽然是多核心,但是并不意味着鸿蒙就是基于Linux系统开发而来,这是非常荒谬的言论,你可以说鸿蒙是多核心,你可以说鸿蒙是混淆系统,但是它的开发伊始就是微内核,微内核的分布式能力是宏内核不具备的,也是Linux系统同样不具备的能力,正如我之前夸大的那样,华为鸿蒙系统早前开发阶段是基于微内核,而本日是多核心系统,未来会变成鸿蒙独有的微内核架构体系,这是一个发展的一定历程。
别的我夸大的是,系统端兼容某些开源系统的App格式,并不能阐明鸿蒙就属于哪种系统换皮,这是非常不负责任的言论。兼容并蓄,取长补短,去其糟柏,取其英华,这十六个字才是鸿蒙存在的真正意义。也是未来物联网系统的常态化之一。
结尾,关于鸿蒙系统是基于微内核还是基于Linux你看明白了吗?
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |