`最近行业内最热门的,可能就是这个华为鸿蒙OS的第一次正式亮相了。
作为知乎上Fuchsia OS的答主,自然也收到了大量的关于比较两个操作系统,或是评价鸿蒙OS的邀请。
在此之前,我一直没有回应这类邀请。主要原因还是在于现阶段华为公布出来的信息量实在太少,虽然官方声称将会全面开源,但终究还没有开源,甚至连大家能买到的设备或是下载的系统镜像都还没有。(就算这样,GitHub上还是出现了好几个非官方的骗Star repo,也是心累)
不过好在发布会上,华为的PPT里面放了一张当前的1.0版本和接下来的2.0版本的架构图,虽然非常粗略,但是还是可以管中窥豹,聊上一聊。当然,最主要的原因是,我做好了被打脸的准备 ^.^
由于本人并不在发布会现场,且暂时还没有取得对应的照片的版权,所以麻烦读者参照《32张图看懂华为鸿蒙系统》一文的照片来理解本文的内容。
应用场景
在这个专栏的第一篇文章:
为什么Google需要Fuchsia操作系统
中,我就道明了Google做Fuchsia操作系统的野心是非常大的。Google通过完全模块化的设计,希望让Fuchsia成为第一个AI原生(内建深度学习、语音语义、人脸识别、图像分类等人工智能算法),云原生(与各种云服务无缝集成),适用于手机、平板、笔记本电脑,以及路由器、智能音箱、机器人,甚至是Google的无人驾驶汽车的超级操作系统。
这段话里,其实从三个维度讲解了Google的野心:
- 功能特性上:具备AI原生能力,内建了边缘和云端无缝化的人工智能能力;
- 生态上:具备云原生能力,与Google以及第三方提供的各种云服务无缝集成;
- 应用场景上:适用于个人移动设备、IoT设备甚至是无人驾驶汽车等不同运算能力和需求的场景。
而实现上述野心的手段是,将整个操作系统完全模块化,变得可伸缩,可定制。
我们再回看华为在发布会上的PPT:
灵活适配全场景丰富终端形态
这是文章中的第四张PPT,从配图中,我们可以看到它的适配范围包括了
- GB级内存的:桌面PC、笔记本电脑、手机
- MB级内存的:智能手表、车机
- KB级内存的:只能摄像头、智能灯泡、智能门锁
这个覆盖的跨度与Fuchsia OS是非常相似的。在Fuchsia的内核Zircon(之前被称为Magenta)刚刚出来的时候,福布斯的报道就包括了这些内容[1]。
分布式软总线
华为在发布会上,花了非常大的篇幅介绍这个功能。从PPT中的内容,大体推断它包括了2个部分:
- 底层的“极简协议”。华为本身就是搞通讯出身的,搞个新的协议自然不在话下。而这个协议是直接构建在网络层之上的3层协议。虽然ppt上这个协议直接代替了原本协议栈中的4层。然而,实际上,大量现代的应用层协议(如HTTP协议)都是直接基于4层的TCP协议的,并不存在表示层和会话层协议。这个所谓的极简协议其实也就是替代了TCP/IP或者UDP/IP这2层协议而已。设计上应当是尽量压缩了协议包头的尺寸,并设计成了无状态非连接的形式。其根本目的在于降低通信的延迟,提高带宽的利用率。面向的场景应该是包长非常小,但对实时性要求高的场合。
- 上层的应用框架。顾名思义,就是提供了一套SDK给到开发者,方便使用上述的极简协议实现局域网内的自发现、消息的单播、多播、广播。
上文中,我特地强调了“局域网”是有原因的。因为现在大家使用的路由器的路由功能是基于3层的(IP层)。所以如果华为做的这个协议是一个非IP兼容的协议的话,那么它就无法被你的路由器正确路由,自然也就无法扩展到广域网了。
所以,我猜测华为设计这个的目的,主要还是在于类似iOS Handoff或者AirDrop的功能。但提供了更好的实时性、可靠性和带宽。
至于这一点,在Fuchsia中,恰恰选择了一条完全不同的路径。在Fuchsia中,全面拥抱了开放和标准的协议,拥抱了一些网络方面的新技术。比如在做Fuchsia开发的时候,利用了IPv6的自组网特性,mDNS的自发现特性和HTTP/2.0作为通讯协议,实现远程对客户机的操控和管理。(题外话,在这一点上,Apple做了非常好的表率,在每一个OS大版本发布的时候,都会非常有意识、有节奏的将最新的技术整合进来,并且发挥出最大的功用)
调度引擎
再接下来,华为又花了很大的笔墨来讲内核的调度引擎。
关键内容是在吐槽Android中用的Linux内核采用的完全公平调度器[2](CFS)。坦白的说,我非常认同华为的吐槽,因为这个调度器是更加偏向于系统吞吐量,而非实时响应能力。所以,当系统负载较高,或是面临突发负载时,非常容易导致UI卡顿。
而鸿蒙的内核很可能是一个实时内核,可以针对某些任务设定调度的deadline,保证在deadline前一定得到调度。这个做法通常应用在嵌入式领域比较多(比如ECU在控制你的发动机的时候,某些点火计算的任务是一定要在点火时间到来之前完成的)。
IPC性能
由于鸿蒙和Fuchsia都是微内核的操作系统,所以IPC(Inter-process Call)性能是内核最最关键的指标之一。它直接决定了整个操作系统的性能水平,甚至可以直接将一个微内核操作系统排除在实用性之外。在华为的PPT中,华为声称鸿蒙内核的IPC性能是Fuchsia的
5倍。这是相当夸张的一个性能优势。至于华为是如何做到的,我是非常非常好奇的,期待华为开源鸿蒙OS(星星眼)。
架构图
最后,说一下华为放出来的架构图。其实除了内核层之外的部分我一点都不关心。我们重点关注内核层,会有很惊喜的发现:
架构图中,内核层一共有3个内核,分别是Linux内核、鸿蒙微内核、LiteOS内核。我们知道,如果没有虚拟化技术,这3个内核是无法共存的,那么华为到底是怎么做到的呢?秘密藏在SoC的Block Diagram中:
让我们一起看一下官宣的麒麟970的PPT(980的PPT为了放别的组件,把Sensor Processor隐藏了,但硬件上肯定是有的):
注意图中的3个地方:
- 左上角的8-Core CPU
- 左下角的i7 Sensor Processor
- 右下角的Security Engine (inSE & TEE)
我们再看华为发布会中第14张图片,标题是“微内核技术用于可信执行环境(TEE)”。再注意右侧的那个框图,可以看到鸿蒙的微内核现在是跑在TEE内的,而普通执行环境跑的是Linux内核。
提到的第三个内核LiteOS是华为针对IoT领域推出的嵌入式操作系统[3]。
所以我认为,这次在鸿蒙1.0上,主CPU里面跑的还是Linux,鸿蒙微内核只是运行在Security Engine的TEE环境中,而LiteOS则是跑在Sensor Processor(实际上就是一颗内置的MCU核心)上,负责处理传感器数据的嵌入式内核。
结论
本文的结论仅限我根据华为当前公布出来的PPT猜测的个人观点,很可能存在错误,等华为开源后,我会另外行文修正。
- 鸿蒙1.0中,鸿蒙微内核仅运行在TEE中,并非整个操作系统的主要内核;
- 操作系统的主要内核仍然是Linux(应该就是Android魔改过的Linux内核,但加上了华为的魔改,比如EROFS、“极简协议”);
- LiteOS内核本身就是几乎所有华为手机上的Sensor Processor(客官可曾记得苹果在A系列处理器中增加的M系列核心?)的嵌入式OS;
- 鸿蒙OS 1.0主体就是AOSP加上了华为自己的修改(比如EMUI的壳、方舟编译器的运行时,GPU Turbo等);
- 你可以认为EMUI 10.0就是鸿蒙OS 1.0;
- 鸿蒙OS 2.0开始的发展方向应当是完全按照Fuchsia的轨迹来设计和执行的,目测节奏上也会紧跟Fuchsia的步伐。
本文已获作者
黄珏珅 授权
文章出处:
https://zhuanlan.zhihu.com/p/78346706
`