软件工程2021:第2次作业—— 谈谈鸿蒙操作系统
一、概述鸿蒙操作系统
- 开发背景
万物互联新时代的到来需要新的操作系统,且国产操作系统面临“卡脖子”的挑战。
- 需求
华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。
- 开发历史:
2012年,华为开始规划自有操作系统“鸿蒙”。
2019年5月17日,由任正非领导的华为操作系统团队开发自主产权操作系统——鸿蒙。
2019年8月9日,华为正式发布鸿蒙系统。同时余承东也表示,鸿蒙OS实行开源。
2020年8月,在中国信息化百人会2020年峰会上,华为消费者业务CEO余承东表示,鸿蒙截至2020年8月已经应用到华为智慧屏、华为手表上,未来有信心应用到1+8+N全场景终端设备上。
2020年9月10日,华为鸿蒙系统升级至华为鸿蒙系统2.0版本,即HarmonyOS 2.0,并面向128KB-128MB终端设备开源。
2020年12月16日,华为正式发布HarmonyOS 2.0手机开发者Beta版本。
2021年2月22日晚,华为正式宣布HarmonyOS将于4月上线,华为Mate X2将首批升级。
2021年4月22日,华为 HarmonyOS 应用开发在线体验网站现已上线。
2021年5月18日,华为宣布华为HiLink将与Harmony OS统一为Harmony OS Connect。
2021年5月25日,华为技术有限公司对外公布,计划在6月2日正式举办鸿蒙产品发布会, 预计此前只用于智慧屏、可穿戴设备等产品的鸿蒙操作系统将在更多产品品类上使用。5月28日,魅族科技在微博上发出一张全新海报,其圆形灯饰图案下方配有“你好,鸿蒙”字样。在华为公布鸿蒙系统之后,魅族成为首家宣布接入鸿蒙系统的手机厂商。
2021年6月2日晚,华为正式发布HarmonyOS 2及多款搭载HarmonyOS 2的新产品。这也意味着“搭载HarmonyOS(鸿蒙)的手机”已经变成面向市场的正式产品 。6月9日,“HarmonyOS Sans”公开上线,可以免费商用 。
2021年6月3日,我爱我家宣布,在业内率先实现基于鸿蒙系统的APP应用支持。
2021年7月29日晚,华为举办新品发布会表示,从6月2日开启升级后,到目前为止,鸿蒙系统升级用户已突破一个亿。
- 应该场景与发展趋势:
鸿蒙OS是一款“面向未来”的操作系统,一款基于微内核的面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)分布式操作系统,可按需扩展,实现更广泛的系统安全,主要用于物联网,特点是低时延,甚至可到毫秒级乃至亚毫秒级。华为鸿蒙操作系统将打通手机、电脑、平板、电视、工业自动化控制、无人驾驶 、车机设备、智能穿戴统一成一个操作系统,并且该系统是面向下一代技术而设计的,能兼容全部安卓应用的所有Web应用,着力构建一个跨终端的融合共享生态,重塑安全可靠的运行环境,为消费者打造全场景智慧生活新体验。
二、关于鸿蒙是否套壳的争议
- 什么是创新:(联系鸿蒙系统分析)
自从鸿蒙OS2.0正式发布以后主要的争议有两点,一是鸿蒙OS到底是自主研发创新还是“套壳”Android。百度百科对创新的解释为:一指创立或创造新的,二指首先。鸿蒙操作系统是分布式操作系统,不是安卓系统的分支或修改而来的,与安卓、iOS是不一样的操作系统。安卓与鸿蒙手机操作系统基本都是基于Linux开发的,但两者的构架是不同的,安卓系统是基于linux的宏内核设计,而鸿蒙操作系统是微内核设计。鸿蒙系统是用C、C++语言编写即直接使用机器语言编写app,取消安卓系统的ART虚拟机,直接编译为二进制机器码,这样做的好处就是不需要中转,执行速度快。
- 代码复用与创新的关系:
鸿蒙系统的部分代码是基于安卓开源项目ASOP,并不是所有Android代码都是 Google开发的,绝大部分代码来自开源社区。鸿蒙也会吸收社区的优秀技术和代码,用了AOSP的开源代码。鸿蒙复用ASOP开源项目的部分代码,使其可以兼容安卓应用,这是因为用户已经习惯了安卓系统,鸿蒙系统不能一上来就全部推翻安卓系统,先模仿,再要慢慢地改进,最后使其成为一个领先于安卓的操作系统。
三、代码风格分析
1.好的代码风格1
- 代码:
“···
#define OS_PRIORITY_QUEUE_NUM 32
//内部队列初始化
UINT32 OsPriQueueInit(VOID)
{
UINT32 priority;
/* system resident resource *///常驻内存
g_priQueueList = (LOS_DL_LIST *)LOS_MemAlloc(m_aucSysMem0, (OS_PRIORITY_QUEUE_NUM * sizeof(LOS_DL_LIST)));//分配32个队列头节点
if (g_priQueueList == NULL) {
return LOS_NOK;
}
for (priority = 0; priority < OS_PRIORITY_QUEUE_NUM; ++priority) {
LOS_ListInit(&g_priQueueList[priority]);//队列初始化,前后指针指向自己
}
return LOS_OK;
}
···”
- 分析:驼峰命名法,增加代码可读性;有中文注释,方便阅读理解代码。
2.好的代码2:
- 代码:
“···
static inline int pipe_allocate(void)
{
int pipeno;
int ret = -ENFILE;
for (pipeno = 0; pipeno < MAX_PIPES; pipeno++)
{
if ((g_pipeset & (1 << pipeno)) == 0)
{
g_pipeset |= (1 << pipeno);
ret = pipeno;
break;
}
}
return ret;
}
···”
- 分析:定义变量名易读易区分;循环嵌套层次分明。
3.好的代码3
- 代码:
“···
typedef struct {
UINT8 *queue; /**< 队列内存空间的指针 */
UINT16 queueState; /**< 队列的使用状态 */
UINT16 queueLen; /**< 队列长度,即消息数量 */
UINT16 queueSize; /**< 消息节点大小 */
UINT16 queueID; /**< 队列编号 */
UINT16 queueHead; /**< 消息头节点位置 */
UINT16 queueTail; /**< 消息尾节点位置 */
UINT16 readWriteableCnt[OS_READWRITE_LEN]; /**< 2维数组,可读、可写的消息数量, 0:可读, 1:可写 */
LOS_DL_LIST readWriteList[OS_READWRITE_LEN]; /**< 2维双向链表数组,阻塞读、写任务的双向链表, 0:读链表, 1:写链表 */
LOS_DL_LIST memList; /**< 内存节点双向链表 */
} LosQueueCB;
···”
- 分析:定义结构体层次分明,一个结构体一行,并且加中文注释。