最专业的对 “鸿蒙” 的评论

语言: CN / TW / HK

希望我可以带大家认识一个不同的鸿蒙OS。鸿蒙的发布会什么软总线、什么分布式云里雾里。想理解这些名词,只需要理解微内核即可。

关于微内核,这个东西一直是学界的宠儿,并不是业界的宠儿。以应用为代表的Linux之父从技术的角度狂喷微内核。

www.lupaworld.com

微内核经过好几代发展,发展到seL4,这个L4厉害了。它是人类历史上第一个用形式化证明的操作系统[1]。

简单点说,用数学方法从逻辑的角度证明这个操作系统是 Bug Free的,是没有 Bug的。为什么Linux不可以呢?哈哈,很简单,内核太复杂了。没有办法证明,超出人类人力所及范围。正所谓成也萧何,败也萧何。微内核的简单,成就了它的高安全。但是……

核心只保留基本的资源管理:处理器的时间、内存、通讯、中断等。所有其他功能统统都扔给应用层管理,以服务的形式去提供功能。服务之间采用IPC通讯,即进程间通讯。对比一下seL4的架构图和Linux的架构图,不难发现,Linux这种宏内核是啥都有,seL4的东西好像都被排在用户空间里。也正因为这个原因,seL4的核心非常小,不到9000行C代码。两种内核各有好处。

seL4系统的架构。

Linux的宏内核架构

对于微内核,由于用MMU(内存管理单元)对进程空间(内存区域)做了隔离保护,没有授权的进程是无法访问其他进程的空间。这就阻止了恶意程序对其他进程数据的窃取。进程是一个操作系统的抽象概念,简单的说:每个进程运行一段用户编写的代码,从这个代码看过去,它好像拥有自己的CPU和所有的一切资源(内存、设备等)。当然我们都知道,这是操作系统给它造成的假象。当进程需要额外的资源时,得向操作系统申请。和别的进程通讯,也得和操作系统申请。哈哈,看起来有点啰嗦,实际上比看起来还啰嗦。但好处是不言而喻的,没权限,你啥都别想干。想干坏事,好!把你的资源全部收回。大家脑补一下,想想用Windows Ctrl+Alt+del,杀掉没有响应的程序。Linux下的Kill -9 了解一下。

微内核连驱动都可能是进程的,也就说,只是内核可以不重启,其他的组件统统可以重启。看得激动人心,但是实际上它可能是最后防线,实践中用不到。系统不可能带着有重启Bug的驱动跑,这不会造成系统奔溃,但用户可不买账。对于写驱动的程序员是个好消息,至少不太容易把内核搞死: -),可反复调试找问题。安全啊!

在微内核的管理下,用户进程要存储个东西,必须请求内核,内核把数据丢给文件系统的进程处理。因为这个MMU封锁太严格了,早期的办法,只得把数据从用户进程搬到文件系统进程。这个过程非常耗时,不幸的是,还没什么好办法突破MMU的保护。这是导致了微内核性能低下的主要原因。

反观Linux这种内核,如果驱动不好,搞死内核的事情是常有的事。但因为文件系统都在内核里,内核是可以直接访问用户空间的数据的,相对来讲。Linux采用的是系统调用,非IPC的方法,速度较之IPC要快。那Linux下也有IPC,嘿嘿,不幸的是,IPC在Linux下,性能也不咋地。但Linux并不依赖IPC通讯,但微内核依赖。所以,这事给微内核就没处去说理去了。

因为IPC这个脚后跟没有泡过冥河的水,被Linux这种宏内核吊打。怎么办呢?学界一直没有闲着,想了很多办法。L4提出了一个Fast IPC的办法,只要你IPC通讯没数据,可以借用CPU核心寄存器的办法传递消息,速度大大加快。有一个牛人2017年想了dIPC, direct IPC[2]。用标签内存的办法进行隔离,传递数据,无需通过内核空间。大大加快了通讯速度。但标签内存这个玩意,不符合现在计算机体系的架构,实践中,采用的可能性较小。

下面牛人登场,上交的陈海波教授团队,19年想了两个办法进行IPC的加速。一个是XPC[3],一个是Skybridge[4]。传闻他是华为鸿蒙的核心人物。这两个方法XPC是硬件的,增加了一点点CPU硬件修改,使得IPC通讯无需内核的参与,也无需数据拷贝;Skybridge,采用双内核的办法,一个RootKernel,类似type-1的虚化,专门负责IPC数据通讯,上层的Kernel为微内核。这样IPC绕过了MMU 机制,也不会对微内核之上的MMU保护机制产生破坏。在IPC通讯的时候,无内核参与,无需拷贝。这可不是共享内存的老技术,共享内存访问没有权限约束,会引入Time-Of-Check-To-Time-Of-Use, TOCTTOU 的问题。

我们来看看Android的架构,Android因为采用了非常多的服务,非常依赖于IPC通讯,这不同于普通的应用。为了提高速度,开发了IPC Binder Drivers 来加速 Linux下的IPC通讯。结果呢?效果还是不太满意。我们来看看XPC对Binder IPC的加速。也就是50多倍吧,哈哈。

17年的dIPC也是吊打Linux的 IPC。

SkyBridge应该和dIPC处于同一性能级别,略差。XPC要更高。从论文上看,SkyBridge更实用一些,未来XPC还依赖于硬件的革新。

目前市场上还是宏内核的天下,如Linux、Unix、Windows等,微内核商业上较为有名气的可算是QNX。好在巨头们都看到了微内核的进步,Google搞了Fuchsia OS (内核Zircon),华为搞了鸿蒙,苹果MAC和IOS也号称微内核,微软搞混合内核。一时间好不热闹。我个人坚信微内核是未来的方向,尤其是华为手握CPU的设计和操作系统的设计,想做个带硬件优化的高性能系统并非难事。此举会引领学界和产业界对微内核的一个小高潮。

微内核因为比较小,不到1万行C代码。只要处理器支持MMU,应该就可以跑出微内核的全特性。服务是可扩展的,依据不同的应用上不同的服务就好,有点像USB热拔插,现在电脑没有光驱、硬盘、打印机等,用USB扩呗。这也决定着,微内核可以在各种场景下见到它的身影。手机,上面弄个Android Binder,堆上相关的库就可以跑Android;服务器,上面弄个Type-2的虚化或者容器,就可以跑各种各样的服务。嵌入式,嗯,当然,体积不是问题,应用更不是问题。

华为这次的发力,真正的用一种操作系统内核统一了大多数应用场景。配上他们自家的开发工具,相信应该是很好用的。对于华为的开源,还有鸿蒙的未来发展。我持乐观态度,毕竟中国市场问题不大。活下来,发展起来只是时间问题。同时,推动微内核的发展,这是一个开启新纪元的大事。

文无第一,武无第二。操作系统领域也是。产业用什么往往并不代表那就是方向,要结合行业支撑发展和行业应用的发展看。紧跟时代潮流,我们错过两次工业革命,难道再错过第三次吗?

操作系统这个领域,是国人研究的弱项,为什么?

首先是这个领域是基础领域,已经被研究得太多了,没办法,研究的点很难找。想发一篇像样的论文毕业,太难太难,这也使得很多人不愿意选择这个领域;

其次,操作系统是一个工程性非常强的领域,你说那么多废话有啥用,来写个系统跑跑看?MMU的各种切换,内存的各种管理,各种调度算法,各种虚化……虽然可以用流程图画完,估计没几个能坚持下来,更不用说兑换成相应的代码了。算法不仅要正确,一堆工程细节,实现起来痛不欲生。调试异常困难。需要非常好的抽象和分析能力。

最后,企业们都知道,拿来主意好。早年用uC/OS-II,商业偷着用。后来改用FreeRTOS。做应用的企业都明白,操作系统不是最终产品,花那么多精力在底层上,是吃饱了撑得吗?所以,很少企业投入这块。加之国内的知识付费,软件付费的氛围,导致这块没有利润,就活不下来。

企业没需求,学生毕业没工作;学界需要论文,要成果。大家都不愿意搞这个领域,其结果就是我们在这个领域的落后。

现在,鹅厂搞了一个物联网的OS,与FreeRTOS这种核心类似,主要目的也不是发展操作系统,而是推自家的云平台。阿里也是。不过,至少,这些大企业意识到,这种基础软件的支撑意义。

大家都知道Linux。这个系统大都跑在有MMU的处理器上,(早年有uCLinux,现在Linux也可裁剪跑在无MMU的系统上。不过不是主流。),物联网就覆盖不到。怎么办?Linux基金会又搞了个 Zephyr,和 Linux 高低搭配,准备统治世界。

但是物联网的应用比手机到服务器的变化还要大,怎么去适配呢?各个公司都拿出自己的本事,如:RT-Thread,SylixOS。想把世界一口吃下,奈何市场并不买账。这里面有很多原因。但都做出了自己的尝试,取得了一些效果。

微内核是多少年人们对操作系统领域的总结,提炼。大家认识到,浓缩的一定要是精华。把操作系统内核最核心的功能提炼出来以后固定下来,上面的服务,那就一花一世界,一叶一菩提啦。这个好处就是,大家的根是一样的,通用。

Android是跑在Android Binder上的,下面是Linux还是Unix,什么x都不重要,重要的是提供的API的行为是一致的。所以微内核是可以统一大部分软件系统的底层的。理论实践都没啥大问题。

微内核的确有一些性能上的瓶颈,但学界已经在努力,工业界已经开始在破冰。这都是好的迹象。且,像华为这样的企业,自己拥有CPU的设计能力,设计一个微内核的加速硬件模块,并不是难事,可以直接把微内核送上天。反正手机底层是封闭的。其他的领域,比如说车载、军事、服务器,有些地方都是超高可靠性的领域。非微内核不能。

可以看出来,华为真的是用心做事情,有一些大厂搭着仿制内核推自己的云就不说了。

首先选择不选择一个生态,开发者主要还是看当下和未来,自己的投资和产出比是否值得。华为手机市场占有率摆在那里,Android上的应用都能被复用到鸿蒙上,用不用在手机上只是一个核心而已。当然Linux的应用也可以跑在鸿蒙上。参考Linux下的 WINE,可以把windows下的应用程序跑在Linux下。幸亏Windows没开源,开源的话,Linux + WINE 真的扫平家用电脑了。鸿蒙是可以复用其他生态发展自己的。国内缺大旗。当下、未来都没啥大障碍。

其次,好用的工具链,让生态发展起来增色不少。发展生态这个,要学毛主席的抗日统一民族战线,团结可以团结的一切力量。好用的工具链让稍微受过专业训练的人都可以来开发,支持更高级别的语言,不要陷入无谓的工程细节。

最后,华为的管理者们也有意识地去推广鸿蒙,很大的格局去做这个事,撒了很多钱给开发者开发上面的应用。扫除当前的投入产出比障碍,未来投入产出比可期,吸引开发者。

多管齐下,发展不会不好,相信华为领导深谙此道,别问我怎么知道的。人力牛叉的公司,发展一定不差!

[1]Gerwin Klein, Kevin Elphinstone, GernotHeiser, June Andronick, David Cock, Philip Derrin, Dhammika Elkaduwe, KaiEngelhardt, Rafal Kolanski, Michael Norrish, Thomas Sewell, Harvey Tuch, andSimon Winwood. 2009. seL4: formal verification of an OS kernel. In Proceedings of theACM SIGOPS 22nd symposium on Operating systems principles (SOSP'09). ACM, New York, NY, USA, 207-220. DOI: https://doi.org/10.1145/1629575.1629596

[2] Lluís Vilanova, Marc Jordà, Nacho Navarro, Yoav Etsion, and MateoValero. 2017. Direct Inter-Process Communication (dIPC): Repurposing the CODOMsArchitecture to Accelerate IPC. In Proceedings of the Twelfth European Conference on ComputerSystems (EuroSys '17). ACM, New York, NY, USA, 16-31. DOI:https://doi.org/10.1145/3064176.3064197

[3]Dong Du, Zhichao Hua, Yubin Xia, BinyuZang, and Haibo Chen. 2019. XPC: architectural support for secure andefficient cross process call. In Proceedings of the 46th InternationalSymposium on Computer Architecture (ISCA '19). ACM, New York, NY, USA,671-684. DOI: https://doi.org/10.1145/3307650.3322218

[4]Zeyu Mi, Dingji Li,Zihan Yang, Xinran Wang, and Haibo Chen. 2019. SkyBridge: Fast and SecureInter-Process Communication for Microkernels. In Proceedings of theFourteenth EuroSys Conference 2019 (EuroSys '19). ACM, New York, NY, USA,Article 9, 15 pages. DOI: https://doi.org/10.1145/3302424.3303946

作者是硬十的嵌入式专家,想与大神一起讨论问题么?

加微信hw100k,申请加入嵌入式软件群

分享到: