写在前面的话

虽然在很久之前,我就写过一篇终章了,但是因为比赛延期,所以我才有时间多写了几篇划划水,眼下又到了最后的提交时间,不出意外的话,这次是真正的终章了。
最后这一篇,我想对我这几个月的努力进行一个总结,也对我所做的工作进行一个收尾和归纳。
那么在正文开始之前呢,我想给大家介绍一下我们的战队名字——OneCoin的由来(凑字数):
战队的名字顾名思义,就是一枚硬币的意思,取名的灵感来源于去年上映的一部由鹿晗和吴磊主演的网剧——《穿越火线》,主角在比赛前总会用抛硬币的方式来预测自己今天的游戏胜败,虽然有些玄学,但是这种信仰在比赛中给予了他们很强大的力量。
而我对我们战队的名字的理解,也正如那一枚硬币,一枚硬币有两个面,对应着任何事物都有好坏两个面,我们在做一件事情的时候,同样会进行不同的抉择:

  • 比如早上八点半要上课,现在是八点整,是选择立刻起床洗漱出发上课,还是选择偷懒赌一把老师不会点名。
  • 比如比赛快要截止了,是选择随便混混划个水,亦或是好好努力,尽己所能去做到最好。
  • 比如大学四年,是每天课上玩手机,课下打游戏,还是抓紧每一分每一秒好好学习、丰富阅历、锻炼身体,过上充实的大学生活。

硬币的两面对应着不同的图案,事物的两面也对应着不同的结局,我不知道自己的选择是对是错,过去的不计较,未来的不知道,至少当下,就让我像花火一样盛开。

正片开始

OpenHarmony整体预览

鸿蒙系统是基于微内核的全场景分布式OS,可按需扩展,实现更广泛的系统安全,主要用于物联网,特点是低时延,甚至可到毫秒级乃至亚毫秒级。
简单来说,鸿蒙系统是一款面向未来的全方位开放分布式的操作系统,OpenHarmony从整体遵从分层设计,从上到下依次为:内核层、系统服务层、框架层和应用层。
在这个开源项目中学习了几个月了,最基础的知识,就是鸿蒙系统分为三个基础模块:

  1. 分布式软总线(communication_softbus_lite)
  2. 系统框架(distributedschedule_samgr_lite)
  3. 安全模块(security_huks)

三个模块的构建成就了一个强大的鸿蒙系统,每个模块内又实现了许多各种各样的功能。
总的来说,OpenHarmony提供用户程序框架、Ability框架以及UI框架,能够保证开发的应用在多终端运行时保证一致性。一次开发、多端部署。
多终端软件平台API具备一致性,确保用户程序的运行兼容性。

三个模块的具体分析介绍,在前面的博客中有详细谈到,欢迎查阅:
初识OpenHarmony三大模块
OpenHarmony相关知识学习
最终篇——终末的博客

接下来我将从模块二——框架模块入手,对整体的系统框架进行一个分析总结

系统框架模块的基本内容

系统服务框架基于面向服务的架构,提供了服务开发、服务的子功能开发、对外接口的开发、以及多服务共进程、进程间服务调用等开发能力。
而鸿蒙的系统框架主要分为两种:M核和A核
两者的区别如下:
M核:包含服务开发、服务的子功能开发、对外接口的开发以及多服务共进程的开发框架
A核:在M核能力基础之上,包含了进程间服务调用、进程间服务调用权限控制、进程间服务接口开发等更高级的开发能力
具体介绍在前面的博客中也提到,系统框架中的线程和进程之间的关系也有过相关介绍,欢迎查阅:
OpenHarmony模块二初分析

系统框架中的主角

鸿蒙系统的服务架构由三个角色组成:

  1. Provider(生产者):架构中各种服务的提供者,为系统提供对外的接口,同时接收消费者的请求并执行。能够将自己的服务和接口发布到服务管理中心,以便服务的消费者可以发现和访问该服务。
  2. Consumer(消费者):构中各种服务的使用者,通常为了实现某种结果而调用生产者提供的各种功能。它可以是一个应用程序、一个软件模块或者另一个服务,它发起对服务管理中心的服务查询、绑定服务, 然后执行服务提供的能力。
  3. Samgr(服务中介处):服务管理中心是一个中介者,它管理着Provider提供的能力,同时帮助Consumer发现Provider的能力。

在之前的博客中有相关具体介绍,欢迎查阅:
OpenHarmony模块二初分析(2)

所谓的生产者其实就是系统的服务端接口(Server),消费者则是系统的客户端接口(Client),接下来逐个进行总结介绍。

客户端(Client)的秘密

该端口主要在samgr_client文件下进行实现,主要是serviceApi的注册相关函数以及g_remoteRegister初始化函数。
其功能实现流程主要是依靠客户端代理通过g_remoteRegister进行管理和操作,服务端代理通过g_server管理,实际上都是在其中的endpoint中,proxy作为接口API为服务直接提供了通信的接口,并通过router、policy和endpoint的协作进行IPC通信

文件下的代码函数的构造和功能流程的剖析在之前的博客中同样有过介绍,这里推荐两篇文章,欢迎查阅:
客户端的那些事儿
客户端的那些事儿(2)

服务端(Server)的秘密

对于服务端,我们将三大主角中的两位——Provider和Samgr放在一起进行统一讲解:

  • 其实对于Server来说,该端口包括了服务端endpoint的创建和初始化,通过g_server对endpoint进行统一管理和消息的处理,并通过结构体sa_Store管理服务和feature的信息,通过三个Proc函数来具体处理request并返回reply和应答resp
  • 而对于Samgr而言,一个服务的启动三步走:服务注册,服务初始化,服务Api的注册和初始化;整个Samgr系统的启动三步走:系统服务注册、用户APP服务注册、所有服务的初始化。

关于服务端的函数构成和功能搭建也曾做过具体介绍,这里同样推荐两篇相关博客,欢迎查阅:
服务端的那些事儿
服务端的那些事儿(2)

在鸿蒙的框架系统中,还有一个十分重要的模块——IPC通信和消息处理的任务机制模块
学到现在,我们认识了系统构架的构成,也了解了客户端和服务端之间的功能实现,接下来我们将两者联系起来,细谈客户端与服务端之间的IPC通信往来和它们之间的消息处理。

客户端与服务端的联动机制与消息处理

在之前的博客中我有做过介绍,该模块的IPC通信机制主要是从listen出发到invoke调用处理函数,从QUEUE进入Thread完成处理后将reply再通过Dispatch沿着router按照policy返回通信endpoint的整个过程;消息处理主要是通过taskPool中的队列和线程进行处理调度,并由三个Proc函数进行功能实现

在这里我们需要注意g_server这个函数封装,所有的一切都是从其中的Invoke函数引出的。
简单总结一下,服务端与客户端之间的联动机制,也就是IPC通信往来流程主要分为如下三个步骤:

  1. Dispatch()接收消息,然后转发消息
  2. HandleIpc()对消息进行处理
  3. 最后由消息接收者EP通过调用token指定的router->proxy->invoke()来处理

消息处理则是由之前提到过的服务端中的三个Proc函数进行处理

  • 对EP注册类消息,调用ProcEndpoint()来处理
  • 对Feature类消息,调用ProcFeature()来处理,又分为注册和查询两种,通过参数分别调用ProcPutFeatur()和ProcGetFeature()来处理。
  • 对于SysCap类的IPC消息,调用ProcSysCap()来处理,分为三类:添加一项SysCap、获取一项SysCap、获取所有SysCap。分别对应的三个函数为ProcAddSysCap()、ProcGetSysCap()、ProcGetAllSysCap()。

其中的主要流程在之前的博客中同样做过具体介绍,这里同样推荐两篇文章,欢迎查阅:
细谈客户端与服务端的联动机制
揭露Client和Server之间联动机制的本质和消息处理的幕后黑手

以上就是我对鸿蒙系统几个月内的学习总结。

写在后面的话

2021.7.21,我和我的同学组建了OneCoin战队
2021.7.28,在经过了几天的对OpenHarmony的分布式模块的学习后,我战战兢兢的写下了第一篇博客
十月中旬,初赛截止,而我们的初赛成绩,在鸿蒙赛道获得了第一名(被队友带飞)
2021.10.30,这是原本的比赛截止日期,那天晚上我写下了最后一篇博客——《最终篇——终末的博客》,结果比赛延长到了11.20
2021.11.20,也就是今天,我写下了这最后一篇博客,是对我这四个月来对OpenHarmony学习的总结,也是对我四个月的努力的一种认可,画上一个句号。

古人有云:古之成大事者,不惟有超世之才,亦必有坚忍不拔之志。
四个月的努力,上千条的代码评注,在这个过程中,我常常因为长时间注视屏幕而感到头晕目眩,也常常因为代码中的名字缩写而弄得头昏脑胀,在经历了一次又一次的折磨——痛苦——放弃——坚持的反复过程之后,我在写博客方面找到了一些技巧,在代码评注和学习方面也找到了乐趣与方法,慢慢地如鱼得水,渐渐地学有所成。

感谢华为和平台为我们提供了优秀的开源项目供我们进行学习,在这个过程中,我们不仅学习到了编程和计算机的相关知识,更是培养了一种刨根问底的主动学习能力,我想这就是国内优秀项目进行开源的意义。希望能有越来越多的优秀项目进行开源,走进校园和课堂,丰富我们的校园生活,为国家培养优秀人才出力,也希望华为一直秉承着“中华有为”的初心,变得越来越好。

借用尼采的一句话,作出最后的总结:“谁终将声震人间,必长久深自缄默;谁终将点燃闪电,必长久如云漂泊。”

OneCoin战队——个人总结(真·终章)相关推荐

  1. 战至终章--22华科计算机专硕上岸经验贴

    战至终章--22华科计算机专硕上岸经验贴 说在前面 数学 英语 政治 专业课 写在最后 说在前面 破釜沉舟,百万秦关终属楚.卧薪尝胆,三千越甲可吞吴.矫情的话就不多说了,本贴旨在记录笔者成长的痕迹,并 ...

  2. 【高校宿舍管理系统】终章 完成主页以及项目总结

    终章 完成主页以及项目总结 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 终章 完成主页以及项目总结 前言 一.完成主页 1. ...

  3. 终章 - 软件工程实践总结作业

    终章 - 软件工程实践总结作业 一.请回望暑假时的第一次作业,你对于软件工程课程的想象 当时正值酷暑,快开学了,在家里也是无所事事,就花费了一些心思写下了那份第一次作业.现在看来,当时的想象还是蛮符合 ...

  4. 纪中暑假培训 :Date:7 终章-剑之魂

    [NOIP2015模拟10.28B组]终章-剑之魂 (File IO): input:sword.in output:sword.out Time Limits: 1000 ms Memory Lim ...

  5. Linux 小程序开发日记(终章)(pyqt+yolov5)

    Linux 小程序开发日记(终章) 哈喽大家好,我是爱喝欢乐水的柳橙汁,这一篇,是最后一篇啦.我会将所有个过程都梳理一遍. 关于代码的详细注释,大家就参考一下之前的笔记吧.这一篇博客我就放上我精简的代 ...

  6. UFS详细介绍---终章

    UFS详细介绍-终章 UNIVERSAL FLASH STORAGE (UFS),通用闪存存储器.目前最新的标准是UFS4.0:UFS的出现是因为替代eMMC产品的,但是因为价格等,目前没办法做到完全 ...

  7. 从零开始自制实现WebServer(十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章

    文章目录 全流程实现博客链接 前引 (十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章 1.正确处理Vmware-Station 处理器设置(初步调试过程) 2.正确 ...

  8. fgo1月23号服务器维护,FGO国服1月23日维护公告 终章最终决战开启

    FGO国服即将开启终章的主线,也是第一部的最后一章,之后就是1.5部,维护将会在1月23日进行,之后新的主线就会开启,今天小编就为大家带来了本次维护更新的内容介绍,感兴趣的玩家来了解一下吧! 1月23 ...

  9. 《银河护卫队》系列终章IMAX中国首周末劲收3840万票房,全球斩获约2500万美元...

    美通社消息,IMAX China宣布由漫威/迪士尼影业出品的<银河护卫队3>在中国上映首周末劲收票房3840万,IMAX票房占比则高达20%.作为该超级英雄系列的终章,<银河护卫队3 ...

最新文章

  1. 对“单子模式”的补充
  2. nodejs模块加载分析(1).md
  3. POJ 3635 Full Tank?
  4. [CF791D]Bear and Tree Jumps
  5. ByteBuffer 类
  6. SAP CRM WebUI上Opportunity reason字段的后台配置
  7. linux container 原理,容器概念与Linux Container原理
  8. 洛谷P2759 奇怪的函数
  9. windows绕开强制更新
  10. 硬件基础知识--(10)三极管的工作原理
  11. 计算机系统的主要功能要求,计算机系统的主要功能是什么
  12. mysql linux 中文乱码怎么解决_如何解决mysql linux 中文乱码的问题
  13. 使用C# Detach和Attach 数据库
  14. ViewFlipper使用详解
  15. Smart3D中空三的设置
  16. 骁龙888打开“新象限” ,专业相机和游戏机直呼不讲武德
  17. 智能配电台区监控系统方案
  18. 信号处理:频域转时域
  19. 自动化测试的流程是什么
  20. 关于ios13升级到ios14企业APP出现无法安装解决方案

热门文章

  1. 立创开源 tsop48-dip48通用
  2. java徽章_荣誉勋章_JAVA游戏免费版下载_7723手机游戏[www.7723.cn]
  3. AdaBoost -> GBDT -> XGBOOST 的区别
  4. 处理中文乱码和中文部分乱码 .
  5. 脑电溯源分析/源定位 EEG source analysis / Localization
  6. glade-2:安装经验
  7. 固态硬盘对游戏运行的帮助有多少
  8. VS2010 与 glut freeglut GLtools glew等 配置教程
  9. Pandas——ix vs loc vs iloc区别
  10. DIY相册的思路和welcome界面