浅识鸿蒙的 Java 技术栈
大家好,我是小 Bob,一个关注软件领域而又执着于计算机底层的开发者~
说到鸿蒙,大家都不陌生,作为华为的一张底牌,在之前放出消息时便受到了极大的关注。当然,作为 IT 界的我们更是对这个系统拥有更多的好奇,这不,在学完华为云 Java 的部分课程后,小编来了解鸿蒙的 Java 技术栈。
一.什么是鸿蒙?
鸿蒙 OS,可以简单称之为是可兼容 Android 应用程序的跨平台分布式操作系统。系统架构支持多内核,比如 Linux 内核、LiteOS 和鸿蒙的微内核,在使用时可按照不同的智能设备选择所需内核,例如在低功耗设备上使用 LiteOS 内核。
上面说到鸿蒙 OS 是一款分布式的操作系统,加上物联网的时代,自然也要承担也要承担新一代的智能终端操作系统;鸿蒙 HarmonyOS 开发者、应用开发、设备开发、鸿蒙生态、分布式系统为不同设备的智能化、互联与协同提供了统一的语言。
在今年的鸿蒙 2.0 发布之后,也是有越来越多的设备选择了鸿蒙 OS。其实作为一款操作系统,对于用户而言只要好用就类似于得到了用户的认可,为今后的万物互联打下基础。
可能会有很多人说鸿蒙是安卓的套壳,可能小编起初想法也是的,毕竟你看 UI 都差不多的,但是在华为云直播时听到李欣老师说过我们用 Java 来编写安卓程序或者鸿蒙程序,其实在编程思想上是一样的,就好比 Java 和 C++都是面向对象的编程语言,那你能说 java 是 C++的套壳吗?
那么鸿蒙和安卓真的没有不同吗?这里我们来以鸿蒙的微内核做个简单介绍。
二.什么是微内核?
在计算机业界的说法来看,微内核是一种内核的设计架构,由尽可能精简的程序所组成,以实现一个操作系统所需要的最基本功能,包括了底层的寻址空间管理、线程管理、与进程间通信。
微核心的设计理念:
是将系统服务的实现,与系统的基本操作规则区分开来。它实现的方式,是将核心功能模块化,划分成几个独立的进程,各自运行,这些进程被称为服务。所有的服务进程,都运行在不同的地址空间。只有需要绝对特权的进程,才能在具特权的运行模式下运行,其余的进程则在用户空间运行。
微内核的基本原理:
只有最基本的操作系统功能才放入内核中。非基本的服务和应用程序在内核之上构建,并在用户模式下运行。关于什么功能应该放入微内核,不同的设计有不同的方式,但是共同特点是许多传统上属于操作系统一部分的功能现在都是外部子系统,包括设备驱动程序,文件系统,虚存管理程序,窗口系统和安全服务,它们可以和内核交互,也可以相互交互。
摘录一张经典的对比操作系统微内核和宏内核的图示:
比如我们经常使用的 Windows,便是采用的混合内核。
微内核结构使用一个水平分层代替传统的纵向分层,所有微内核之外的操作系统构件都被当作服务进程来实现,它们可以通过微内核传递消息来实现相互之间的交互。因此,微内核还可以验证消息并授权访问硬件,而且微内核还执行保护功能,阻止非法的信息等。
例如,应用程序如果要打开一个文件,则它发送消息给文件系统服务,如果他想创建一个进程或线程,则它发送消息给进程服务进程。每个服务进程之间可以相互通信,并可以调用微内核中的功能。
微内核的性能:
通过微内核构造和发送消息,比直接进行一次系统调用发花费更多时间。一种解决方式是将一些关键服务和驱动程序重新放回内核中,可以减少用户-内核模式以及进程间的切换次数,但是这是以牺牲微内核的设计强度为代价;另一种解决方式是通过正确的设计,构造一个非常小的内核,可以消除消除性能损失并提高灵活性。
微内核设计:
低级存储器管理:微内核必须控制硬件上的地址空间,使得操作系统可以在进程级进行保护。微内核只负责把每个虚页映射到一个物理页帧,而存储管理部分则在内核外实现,包括保护一个进程的地址空间不被其他进程干涉,页面替换算法以及分页逻辑。例如,内核外的虚拟存储器负责何时把一个页面调入存储器或者何时换出一个页面,而内核就负责将这些页面索引映射到物理地址。
当一个应用程序发生引用了不在主存中的一页的时候,,内核发生缺页错误并执行陷阱,内核给页面管理器所在进程发送一条消息。页面管理器决定装载页面并分配一个页帧,页面管理器和内核进行交互,以把页面管理器的逻辑操作映射到物理存储器。一旦该页可用,页面管理器就给应用程序发送一条中断恢复的消息。
这种技术可以不用调用内核操作,就将文件和数据库映射到用户地址空间。微内核一共提供了三个内核操作用于支持核外的分页和虚存管理:
授权:一个地址空间的所有者可以授权其他进程使用它的某些页。内核把这些页从授权者的地址空间移出,并把它们分配给指定的进程;
映射:一个进程可以把它的任何页映射到另一个进程的地址空间,使得两个进程都可以访问这些页,就形成了共享内存。内核把这些页面分配给最初的所有者,为其他进程 提供一个映射以便访问它们;
刷新:进程可以回收授权给其他进程或者映射到另外进程的任何页面;
进程间的通信:微内核操作系统中,进程之间或者线程之间进行通信的基本方式是消息。消息包括消息头和消息体:消息头描述了发送和接受消息的进程;消息体包含数据或者指向数据的指针。
可以认为进程间通信是基于与进程相关联的端口(某个进程的消息序列),端口可以表明那些进程可以与这个进程通信。端口的标识和功能由内核维护,进程可以给内核发送一条指明新端口功能的消息,进程可以允许对自身授权新的访问。
地址空间不重叠的进程间的消息传递涉及到存储器到存储器的复制,因此受限于存储器的速度,复制的速度会远远低于处理器的速度。
I/O 和中断管理:在微内核结构中,硬件中断可能被当作消息处理。微内核可以识别中断但是不处理中断,它会产生一条消息给与该中断相关联的用户级线程。因此,当允许一个中断时,一个特定的用户级进程被指派给这个中断,并由内核维护这个映射。把中断转换为消息的工作必须由微内核完成,但是微内核并不涉及设备专用的中断处理。
落实到鸿蒙系统,它的存在让华为在智能手机操作系统上避免了“无米之炊”的困境,但其在推出面世之后,究竟会如何发展,又是否能够承担起当前我们的厚望,华为还需要回答很多问题,做很多工作,等待华为的依旧是万里长征。
三.鸿蒙 IDE 下载安装
回到主题,我们作为一名开发者,我们的开发体验也是华为需要交的答卷,当然,它也给出了,在鸿蒙(https://www.harmonyos.com/)的官网,我们可以也可以看到它在上面的导航栏列出了开发这个选项,想必也是为我们拥有更好的开发体验操碎了心。那么我们来看看这个体验到底怎样呢?
点击导航栏上的开发选项,在下面我们找到华为的在线开发体验以及 HUAWEI DevEco Studio 的下载和开发设备工具的下载。这里主要来讲讲 HUAWEI DevEco Studio 的下载以及安装。
首先找到 DevEco Studio 的下载网址:https://developer.harmonyos.com/cn/develop/deveco-studio#download
根据不同的设备我们可以选择不同的安装包,这里我们以 Windows 为例。
下载完成后,我们会得到一个压缩包,里面有 DevEco Studio 的安装包,在安装时需要注意自己设置好安装路径。
接下来点击 install 安装即可。
在安装完成后我们便可以配置相关环境以及创建项目来开始相关鸿蒙的开发。
四.Java 开发
说完鸿蒙,那么我们的 Java 如何开始学习呢?
小编最近在暑假也是跟着华为云的课堂有在学习 Java,并且效果还不错,比如有详细的代码讲解,以及小型的项目代码实现。
相关学习在华为云的活动中可以查看,学习时的笔记也是必不可少的哦~
学习 Java 除了做笔记之外,敲代码也是必不可少的一部分,我们也可以试着将自己学习的笔记加源代码通过 git 上传到我们的 GitHub 上,也作为自己学习的一次经历。
五.简述鸿蒙的 Java 技术栈
这里小编主要介绍的是鸿蒙的 Java 技术栈,那么就不可避免的介绍鸿蒙的 FA 调用 PA 机制。简单来说我们用 FA 端来调用 PA 端,也可以称之为是 JS 端调用 Java 端,可见鸿蒙也尝试将前后端进行融合,JS 和 Java 都能调用的数据格式:json(各个语言都能接收的标准格式)。
JS UI 框架下 FA 与 PA 交互的使用:
JS UI 框架提供的声明式编程,使应用开发更加简单,但当前鸿蒙 OS 对于 JS 的 API 还不够丰富, 还无法处理数据等更复杂的业务。为了达到处理复杂业务,同时保证业务数据和 UI 的解耦,一般会将复杂逻辑放到 PA 中即 Java 端实现;而界面交互则放到 FA 中的 UI 部分即 JS 端实现。
可能会有人说上述的部分功能使用 Java 或 JS 都能单独实现,就好比我们做一个一个事情可能两个人都能单独做好,但同时一起来做肯定效率会比单独一个人做的更好。
最后,鸿蒙生态的完善还需我们每一个开发者共同去努力~
版权声明: 本文为 InfoQ 作者【Bob】的原创文章。
原文链接:【http://xie.infoq.cn/article/1daf0c0723106f46d9e843e49】。文章转载请联系作者。
评论