共计 4855 个字符,预计需要花费 13 分钟才能阅读完成。
前言
写完了《工具篇》,咱们再来看看 HarmonyOS 的系统结构,为什么不先说编码而抉择零碎先进行介绍?俗话说,编程语言只是一个工具,工具多种多样,而工具作用的对象才是最须要先理解的,这样能够做到对症下药(先找钉子,再用趁手锤子),在编码学习的时候也能够互相映照,起得事倍功半的成果。所以思路上,是先介绍《零碎篇》,再开展《编码篇》。
HarmonyOS 从刚开始推出的时候,就随同各种不同的声音,能够说是褒贬不一,有说是「Android 套壳,金玉其外; 败絮其中」,也有说是「冲破封闭,国产之光」,而乏味的是,消费者市场上的华为手机也经验了极其类似的各种探讨。咱们从后果上看,往年(2023 年)华为推出的 Mate60 系列突破了各种质疑,造就了家喻户晓的「遥遥领先」。很难说,搭载在「遥遥领先」手机上的 HarmonyOS 也再一次走到了「聚光灯」下,但这次和之前不一样的是,再少了很多质疑声的同时,也引起了各大软件厂商的留神,各家都在紧锣密鼓地开发自家 APP 的鸿蒙版本,甚至招聘鸿蒙开发岗位需要也在互联网寒冬之下显得自成一家。
说了这么多技术不强相干的话,也只是想感叹句,「轻舟已过万重山」。那咱们接下来就具体看一下这个充斥戏剧性色调的「国产」开发零碎到底有什么机密。
历史
2019 年 8 月 9 日,华为在中国东莞召开开发者大会,正式公布了鸿蒙零碎。鸿蒙零碎最后被设计为一个面向物联网(IoT)设施的操作系统,但华为示意鸿蒙零碎也能够用于智能手机、平板电脑和其余类型的设施。
2020 年 9 月,华为公布了鸿蒙零碎 2.0 版本,并发表将在将来的智能手机上应用鸿蒙零碎。
2021 年 6 月,华为推出了首批搭载鸿蒙零碎的智能手机。
2022 年 7 月,HarmonyOS 3 正式公布。
2023 年 8 月,HarmonyOS 4 正式公布,同时公开 HarmonyOS NEXT 开发预览版,并声称在 NEXT 版本上将作为齐全独立于 Android 的操作系统。
架构
在介绍一个零碎之前,首先祭出的必定是零碎架构图,这里也不例外,从面到点去了解整个零碎的设计思维和用意是最疾速精确理解零碎的一个重要办法。
咱们晓得,鸿蒙零碎不仅仅针对的是挪动端手机平台的零碎,而是基于「万物互联」概念,能运行在 PC、平板、车机、IoT 各类设施上的零碎。所以该零碎的设计,首先保障的就是零碎的 兼容性 和模块的灵便 可扩展性。
](/img/bVdbwvT)
如上图所示,HarmonyOS 分为四层,从下向上顺次是:内核层、零碎服务层、框架层和应用层。零碎性能依照「零碎 > 子系统 > 性能 / 模块」逐级开展,在多端部署场景下,反对依据理论需要裁剪某些非必要的子系统或性能 / 模块,合乎高内聚、低耦合的特点。
而鸿蒙零碎是如何实现「万物互联」的“超级终端”零碎呢?
咱们能够看到,软总线实现了软硬协同,优先级调度的性能,数据上通过分布式技术实现了文件、数据库和沙箱的数据共享,作为可原子化的利用,实现了可流转 / 迁徙的特点,一次开发多端部署。
分布式软总线:实现近场设施间对立的分布式通信能力,提供不辨别链路的设施发现和传输接口,具备疾速发现并连贯设施,高效散发工作和传输数据。
内核层
HarmonyOS 的内核子系统采纳多内核设计,反对针对不同资源受限设施,选用适宜的 OS 内核。而驱动子系统(HDF,硬件驱动框架)是 HarmonyOS 硬件生态凋谢的根底,提供对立外设拜访能力和驱动开发治理框架。鸿蒙反对三类零碎:
- 迷你零碎:运行在一些诸如连贯模块、传感器、可穿戴设施,运存介于 128KB 左右的处理器上
- 小型零碎:运行在路由器、网络摄像头等运存介于 1MB 左右的处理器上
- 规范零碎:运行在增强型交互、3D GPU、丰盛动画和多样化组件等 128M 及以上的处理器上
零碎服务层
是 HarmonyOS 的外围能力汇合,包含实用于各类设施的根底能力以及面向特定设施的专有能力,涵盖四个子系统集,依据不同设施状态的部署环境,根底软件 / 加强软件 / 硬件服务子系统集外部能够按子系统粒度裁剪,子系统外部还可按性能粒度裁剪。不同维度的裁剪,保障了鸿蒙架构上的设施灵活性,而分布式的引入,则让整体零碎服务有了互通的可能。这里对一些了解上可能会有生疏的概念做些解释:
DFX 子系统(Design for X)
DFX 是为了晋升软件品质设计的工具集,蕴含 DFR(Design for Reliability,可靠性)、DFT(Design for Testability,可测试性)、可制作性(Design for Manufacturability)、可服务性(Design for Serviceability)、生命周期设计(Design for LifeCycle)等。X 示意产品的某个个性或者产品生命周期的某个阶段,目前实现的性能有:
- HiLog:日志零碎,提供给零碎框架、服务以及利用打印日志,记录用户操作、零碎运行状态的性能
- HiSysEvent:零碎事件记录接口,定义了 HiSysEvent 埋点接口供给用框架、零碎服务应用,用于向 HiView 上报零碎工夫信息
- HiView:由框架和插件平台组成,包含插件配置,插件治理
- FaultLoggered:利用故障订阅和收集,C/C++ 运行时 Crash 长期日志的生成和治理模块
- HiAppEvent:JS 利用事件记录接口,即打点接口,用于帮忙利用记录在运行过程中产生的故障信息、统计信息、平安信息、用户行为信息,以撑持开发者剖析利用的运行状况。
DFX 对于开发者而言,更像是一个简单的事件和日志零碎,该零碎贯通了整个鸿蒙零碎的周期和模块,不论是设施商还是开发者都能够通过 DFX 精确疾速地定位到问题,同时 DFX 还提供了剖析和诊断服务。
对于日志分类,日志能够按类型(Type)、畛域(Domain)、标签(Tag)等进行分类;对于流量管控,有具备流控机制无效地辨认滥打日志的畛域;对于隐衷管控,采集的日志是最小化,仅为提供必须服务时收集设施型号、操作系统、惟一设施标识符、登录 IP 地址、软件版本号、接入网络形式和类型、操作日志等信息。DFX 无效保障了在设施呈现利用解体、利用卡死、分布式故障、死机、主动重启、不开机等问题上能剖析定位到具体起因并解决问题。
MSDP & DV 子系统
MSDP & DV(Mobile Sensing Development Platform,挪动感知平台;Device Virtualization,设施虚拟化),能够简略了解为传感器和虚拟化能力,MSDP 提供分布式交融感知能力,汇总交融来自多个设施的多种感知源,从而准确感知用户的空间、挪动、手势、静止衰弱等多种状态,实现不同设施的能力和资源交融。
框架层
蕴含 UI 框架(包含实用于 Java 的 UI 框架和实用于 JS 的 UI 框架)、Ability 框架、用户程序框架以及各种软硬件服务对外开放的多语言框架 API,为 HarmonyOS 利用开发提供了 Java/C/C++/JS/TS 等多语言的用户程序框架和 Ability 框架。依据零碎的组件化裁剪水平,HarmonyOS 设施反对的 API 也会有所不同。
ArkCompiler 方舟编译器
这里再对外围编码工具 ArkCompiler 做下介绍,ArkCompiler 是华为自研的对立编程平台,蕴含编译器、工具链、运行时等关键部件,反对高级语言在多种芯片平台编译和运行,并撑持利用和服务运行在手机、个人电脑、平板、电视、汽车和智能穿戴等多种设施上的需要。ArkCompiler 利用 ArkTS 的动态类型信息,进行类型推导并生成对象形容和内敛缓存,减速运行时对字节码的解释执行,AOT(Ahead-of-Time)Compiler 利用动态类型信息间接将字节码编译生成优化机器码,让利用启动即可运行高性能代码。
绝对于动静类型语言的传统编译模式,在编译期间只进行打包源码,并且是在装置之后的运行时执行源码解析、编译执行字节码、获取 Profile 信息、编译优化执行机器码,而「号称」首个动静 AOT 类型语言编译模式的方舟编译器,则是将解析源码、编译字节码、获取 Profile 信息、编译优化机器码并且打包成字节码和优化机器码放在了编译阶段,在利用装置后,本地间接执行优化后的机器码和字节码,这样做的益处就是缩小设施上的编译工夫,间接做到「运行即可用」。
LiteActor 轻量化并发,提供了 Worker API 反对并发编程,在运行时实例内存隔离的根底上,ArkCompiler 通过共享运行实例中的不可变或者不易变对象、内建代码块、办法字节码等技术手段,优化了并发运行实例的启动性能和内存开销。
Actor 模型,一个 actor 定义为一个计算单元,每个 actor 蕴含了存储、通信、计算等能力,在分布式系统中,通常蕴含了十分多的服务器集群,每一台服务器又蕴含了大量 actor 实例,他们独特形成了弱小的并行计算能力。Actor 的核心思想是独立保护隔离状态,并基于消息传递实现异步通信。
咱们晓得 JS 是一门单线程语言,在设计之初没有思考多线程运行的反对和优化,所以对于 Actor 模型而言,每一个并发实例都会创立一个残缺的引擎实例来反对运行,这样做的劣势在于让开发者能够不关注共享状态和锁,容易保护和测试,并且非常容易将并发实例迁徙成分布式服务,但也造成了启动慢、内存开销大的问题。而 ArkCompiler 尽管本质上还是 Actor 模型,但通过共享过程内各个并发实例间的不可变对象,将一些基础设施分层和轻量化,并且重用来加重并发启动工夫和内存累赘。
在源码平安方面,区别于 Android Java/Kotlin 代码的混同,方舟编译器会把 ArkTS/TS/JS 编译为方舟字节码,并且应用多种混同技术提供更高强度的混同和爱护,使 HarmonyOS 利用包中装在的是多重混同后的字节码,无效提测利用代码平安的强度。
应用层
反对基于框架层实现业务逻辑的原子化开发,构建以 FA/PA 为根底组成单元的利用(包含零碎和三方利用),FA/PA 能够按需下载、加载和运行,基于 FA/PA 实现的利用生态,能够实现三方服务跨设施智能散发,提供统一、高效的用户体验。在《工具篇》的时候,咱们提到 FA 和 PA 的区别在于有没有 UI 界面,前面 FA 又被 Stage 模型所取代,但在设计构造上不会有太多变动。
从下图咱们能够看到,利用是怎么灵便动静部署到各个不同设施中的。华为在除了传统利用市场之外,还提供给开发者和企业一个散发平台,在该散发平台上,用户能够独立配置开发的利用能够通过二维码、碰一碰(NFC)、搜寻、语音、感知等将一些原子化的服务利用部署到不同设施当中。
以下是对鸿蒙系统对原子化开发的一个例子,简略而言,通过散发平台,开发者能够将一个利用中的残缺性能(PA1、PA2、PA3)「有选择地」散发到不同鸿蒙设施上。这里的有抉择,代表依据设施个性抉择特定的原子能力,比方图中智慧屏只用到了 PA1 的能力,而手机用到了 PA1、PA2、PA3 的残缺能力,甚至能够设想下如果有一个搭载了鸿蒙零碎的摄像头 IoT 设施,只须要用到 PA1 的视频采集能力,而用不到 FA 的界面能力。
总结
从整个鸿蒙零碎的设计而言,曾经不单单是一个手机零碎那么简略,而是一个「生态」,通过分布式技术实现多端部署和数据互联的个性。同时可移植内核能力给鸿蒙笼罩诸如车机、穿戴设施、手机、电视、智能家居等提供了保障,置信鸿蒙前面也会一直去拓宽它的边界,达到所谓的「万物互联」。
作者:ES2049 / 黎明
文章可随便转载,但请保留此 原文链接。
十分欢送有激情的你退出 ES2049 Studio,简历请发送至 caijun.hcj@alibaba-inc.com。