鸿蒙 和 Fuchsia OS,你更期待谁?
大家好,我是小Bob,一个关注软件领域而又执着于计算机底层的开发者~
在月初,华为的鸿蒙系统HarmonyOS 2.0已发布,给我最直接的感受便是真正的
先说说小编对于操作系统的看法,对于计算机,我们都知道是由硬件和软件共同组成的,两者缺一不可。那么操作系统在硬件和软件中起着连接作用,操作系统通过对硬件系统的调用来提供资源给软件系统。
那么在相同的硬件和软件系统下,对于用户的感受来说,电脑和手机最直接的体验便是操作系统的不同了,在我所认识的朋友中,也有相当一部分人在买手机时是非常关注手机自带系统的,毕竟它反映了对于用户的真实感受。比如在当我和朋友的手机在硬件差不多时,就会互相体验各自不同的系统,比如各自的消息推送和隐私以及权限管理,我们会相互比较并提出各自的建议。
那么对于华为的鸿蒙HarmonyOS2.0以及在它之前一周左右Google推出的Fuchsia OS到底有什么新的
两者都有抛弃了安卓而自立门户,且都带有

华为之鸿蒙
首先,对于华为的鸿蒙HarmonyOS2.0,按照百度的说法:华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。
通过华为最新的视频我们也可以看到鸿蒙将手机、电脑、平板、智能家居进行实时同步,不得不说,还是挺震撼的。据华为说鸿蒙是基于微内核开发,面向5G、面向全场景的分布式系统。那么问题来了,什么是微内核呢?它和安卓的底层有什么不同吗?
什么是微内核呢?
在计算机业界的说法来看,微内核是一种内核的设计架构,由尽可能精简的程序所组成,以实现一个操作系统所需要的最基本功能,包括了底层的
微核心的设计理念:
是将系统服务的实现,与系统的基本操作规则区分开来。它实现的方式,是
微内核的基本原理:
只有最基本的操作系统功能才放入内核中。非基本的服务和应用程序在内核之上构建,并在用户模式下运行。关于什么功能应该放入微内核,不同的设计有不同的方式,但是共同特点是许多传统上属于操作系统一部分的功能现在都是外部子系统,包括
摘录一张经典的对比操作系统

比如我们经常使用的Windows,便是采用的混合内核。
微内核结构使用一个水平分层代替传统的纵向分层,所有微内核之外的操作系统构件都被当作服务进程来实现,它们可以通过微内核传递消息来实现相互之间的交互。因此,微内核还可以验证消息并授权访问硬件,而且微内核还执行保护功能,阻止非法的信息等。
例如,应用程序如果要打开一个文件,则它发送消息给文件系统服务,如果他想创建一个进程或线程,则它发送消息给进程服务进程。每个服务进程之间可以相互通信,并可以调用微内核中的功能。

微内核的性能:
微内核设计:
当一个应用程序发生引用了不在主存中的一页的时候,,内核发生缺页错误并执行陷阱,内核给页面管理器所在进程发送一条消息。页面管理器决定装载页面并分配一个页帧,页面管理器和内核进行交互,以把页面管理器的逻辑操作映射到物理存储器。一旦该页可用,页面管理器就给应用程序发送一条中断恢复的消息。

这种技术可以不用调用内核操作,就将文件和数据库映射到用户地址空间。微内核一共提供了三个内核操作用于支持核外的分页和虚存管理:
可以认为进程间通信是基于与进程相关联的端口(某个进程的消息序列),端口可以表明那些进程可以与这个进程通信。端口的标识和功能由内核维护,进程可以给内核发送一条指明新端口功能的消息,进程可以允许对自身授权新的访问。
地址空间不重叠的进程间的消息传递涉及到存储器到存储器的复制,因此受限于存储器的速度,复制的速度会远远低于处理器的速度。
落实到鸿蒙操作系统,它的存在让华为在智能手机操作系统上避免了“无米之炊”的困境,但其在推出面世之后,究竟会如何发展,又是否能够承担起当前我们的厚望,华为还需要回答很多问题,做很多工作,等待华为的依旧是万里长征。
Google之Fuchsia OS
谷歌近日正式面向公众推出了 Fuchsia OS,获得Fuchsia 1.0 推送的设备是第一代 Nest Hub。
Fuchsia OS与安卓不同的是它使用了全新的、自研的 Zircon 微内核,其采用 C++ 编写。内核的组件则使用到了 Go、Rust、Python,以及 C/C++ 等编程语言进行编写,如 USB 驱动程序使用 C++ 编写,而网络堆栈则使用了 Rust。

什么是Zircon呢?
Fuchsia OS如何工作?
Google在开发Fuchsia OS方面开辟了新天地。可以说,该公司从过去的错误中吸取了教训,尤其是在更新和修改Android和Chrome OS的局限性和问题方面。与已建立的Google操作系统的主要区别:Fuchsia OS从头到尾都是模块化的。这不仅反映在模块化系统体系结构中,而且反映在对应用程序是什么的全新理解中。
模块化应用设计
Fuchsia 组件最接近我们今天所说的应用程序。每个组件执行特定任务,并且可以与其他组件组合以编程一个更复杂的应用程序。组件由清单文件以及相关的代码组成。组件始终在自己的沙箱中运行,通过名称空间访问对象,并通过导出目录发布它们。
agents组件在后台工作,并为其他组件提供服务。agents由另一个组件或系统调用-例如,响应某些触发(例如推送通知或其他屏幕处理)。
modules是具有用户界面的组件,这些组件在前台执行,对用户可见。操作系统中的每个模块都是为特定任务而设计的,并进行了相应的标记,以便可以在需要时自动对其进行访问。这是使用模块的功能完成的,可以使用所谓的动词和名词来描述。
每个模块都包括一个verbs 列表,表示模块可以执行的工作,以及一个nouns 列表,表示正在使用的实体。根据谷歌术语,实体包括作为结构化数据对象存在的任何唯一可识别的人、地点、事物、事件或概念,这些数据对象可以被引用和检索、呈现、操作或共享。
因此,使用实时操作系统Fuchsia的方式如下:用户执行操作后,Fuchsia OS会自动为该任务确定适当的模块。所需的动作被翻译成动词和名词的组合。然后,系统检索所有支持所需动词的模块的列表,并在下一步中根据还可以处理所需名词的模块进行过滤。
相关的模块可以分组到所谓的stories中。stories根据当前的需求组合不同的动作和任务,使用户能够根据自己的想法和需求组装复杂的应用程序。
借助Fuchsia OS的模块化应用程序概念,Google将重点从应用程序转移到动作和内容。Fuchsia 的任务由所谓的stories中的一组组件来处理,而不是当前使用的应用程序的经典操作系统,该组件通过模块访问当前所需的资源。
下图说明了Fuchsia OS应用程序开发背后的模块化概念。

Fuchsia OS的应用程序开发基于模块化结构。
模块化系统架构
Zircon
Zircon包含Fuchsia OS的内核,设备管理器,最核心的第一层设备驱动程序以及底层系统库(如libc和launchpad)。此外,Zircon还提供FIDL(Fuchsia 接口定义语言),这是一种用于进程间通信的协议。FIDL是独立于编程语言的,但是与流行的编程语言(例如C,C ++,Dart,Go和Rust)具有联系。
作为Fuchsia OS的基础,Zircon提供了对后续级别的硬件访问,在共享硬件资源上创建了软件抽象,并充当了低级软件开发的平台。Zircon是Project Little Kernel(LK)的结果,该项目充当Android的引导程序。
Garnet
Peridot
Ledger :Ledger是基于云的存储系统(分布式存储系统),它为每个Fuchsia组件(模块或代理)提供单独的数据存储。这在不同设备之间同步。这使用户可以在当前Fuchsia 的设备上继续停留在其他Fuchsia 的设备上的位置。Maxwell :通过Maxwell,Google在Fuchsia OS中集成了一个组件,该组件将给用户提供了人工智能。就像Fuchsia 一样,Maxwell具有模块化设计。AI系统由一系列代理组成,这些代理分析用户的行为及其所使用的内容,在后台确定合适的信息,并将建议转发给操作系统-例如,应加载哪些模块或故事以适合用户在特定时间的行为。注意:到目前为止,Kronk是Fuchsia OS唯一未作为开源项目开发的组件。
Topaz

最后,做为万物互联的两款新生代表,笔者还是很希望两者都能将自己的优点发挥至最大,毕竟好用即代表大部分的市场份额。
参考资料: