软件工程2021:第2次作业—— 谈谈鸿蒙操作系统
一、概述鸿蒙操作系统
- 开发背景
- 随着5G物联网的发展,计算智能和大数据产业不断兴起,中国须要独立自主的操作系统。底层基础架构是上层应用的基础,没有自己的操作系统,中国就会一直被美国打压,华为肩负重任,终于在2019年正式发布了鸿蒙系统。
- 需求
- 万物互联:与安卓、iOS系统不同,分布式架构使得搭载鸿蒙系统的手机并不像是传统意义上的手机,而是变成了一个中控枢纽,可以无缝连接平板、电脑,实现数据与操作的同步。
- 流畅度极强:确定时延引擎和高性能IPC技术实现系统流畅,就流畅度而言,甚至要比之前的EMUI版还要流畅,基本没有延迟卡顿现象。
- 高兼容性:兼容众多安卓系统的应用,对于开发者而言,降低开发成本,同时可实现一次开发,多端部署。
- 全新桌面:鸿蒙桌面推出了万能卡片功能,带来了更进一步的信息显性化和操作高效化;并将通知栏和控制栏分开,原来只能控制单设备的控制中心扩展为超级终端的控制中心。
- 安全性高:鸿蒙OS系统具备更高的安全特性,基于微内核技术的可信执行环境,通过形式化方法显著提升了内核安全等级,全面提升全场景终端设备的安全能力。
- 开发历史
- 2012年,华为开始规划自有操作系统“鸿蒙”。
- 2017年,鸿蒙内核1.0版本研发完成,开始研发2.0版本。
- 2018年,鸿蒙内核2.0应用于终端TEE。
- 2019年8月9日,华为正式发布鸿蒙系统,同时鸿蒙OS实行开源。
- 2020年9月10日,华为鸿蒙系统升级至2.0版本,即HarmonyOS 2.0,并面向128KB-128MB终端设备开源。同年12月16日,华为宣布正式推出鸿蒙OS的手机开发者Beta版。
- 2021年6月2日,华为正式发布了 HarmonyOS 2 操作系统。
- 应用场景
华为实行“1+8+N”全场景智慧生活战略:
“1”就是手机,是主入口;
“8”是指:PC、平板、智慧大屏、车载屏幕、音箱、眼镜、手表、耳机这8个华为自研领域产品,
“N”是泛IoT硬件构成的华为HiLink生态。
- 发展趋势
鸿蒙系统本身是为物联网而开发的操作系统,美国的打压迫使鸿蒙提前诞生,并借鉴谷歌酝酿中的新操作系统的技术,顺应5G时代万物互联的大势,提出微内核,分布式的理念,可以说顺势而为,时机刚刚好,就目前用户的使用而言,鸿蒙系统基本被人们所认可,所以更大范围的推广只是时间问题。同时在爱国热潮的当下,鸿蒙系统顺应民众的呼声,它在国内的应用前景必然是光明的。
二、关于鸿蒙是否套壳的争议
- 什么是创新
- 创新是利用现有的知识和物质,在特定的环境中,本着理想化需要或为满足社会需求,去改进或创造新的事物、方法、元素、路径、环境,并能获得一定有益效果的行为。鸿蒙系统的问世就是一种创新,相比于安卓系统,鸿蒙操作系统是微内核设计,微内核的开发难度很大,但是系统的稳定性很高;鸿蒙系统对设备兼容性更强,同时支持智能手机、智能穿戴设备、电脑、电视等智能家居设备,形成一个无缝的、统一的操作系统,并且兼容所有的安卓应用,适应当下的5G和物联网时代;微内核可以把每一个单独加锁,不可能一个钥匙攻破所有地方。而外核的相互隔离更加安全也更加高效。所以鸿蒙系统的安全性远高于安卓系统。这些无不是鸿蒙系统做出的创新,它是顺应时代发展的优秀产物。
- 代码复用与创新的关系
的确鸿蒙系统部分代码是基于ASOP,但是华为也是为ASOP做出了贡献的,复用代码是合理合法的。鸿蒙系统作为一个新的系统,它有权利利用现有的完备知识,这是对广大用户的负责。时代需要创新,在安卓基础上的鸿蒙系统,它更加完备,满足广大用户 的更多的需求,在很多方面甚至超过了安卓系统,这是一种质的飞跃,怎么能够浅显的认为这是一种“套壳”?而且鸿蒙系统现在的理念是全场景智慧生活,追求多种设备互通互联,这是空前的创新,必然会是人们的生活更加便利,鸿蒙的全球推广指日可待。
三、代码风格分析
- 好的代码风格1 :
- 代码示例:
static int OsShellCreateTask(ShellCB *shellCB) { struct sched_param param = { 0 }; int ret; ret = sched_getparam(getpid(), ¶m); if (ret != SH_OK) { goto OUT; } param.sched_priority = SHELL_PROCESS_PRIORITY_INIT; ret = sched_setparam(getpid(), ¶m); if (ret != SH_OK) { goto OUT; } ret = ShellTaskInit(shellCB); if (ret != SH_OK) { goto OUT; } ret = ShellEntryInit(shellCB); if (ret != SH_OK) { goto OUT; } (void)pthread_join(shellCB->shellTaskHandle, NULL); (void)pthread_join(shellCB->shellEntryHandle, NULL); OUT: ShellDeinit(shellCB); return ret; }
- 分析:类名首字母大写,变量名称简短,采用缩进的风格书写,每一行的几乎一句代码语句,程序块上下也有空行,看起来清晰明了,便于阅读。
- 代码示例:
2.好的代码风格2 :
代码示例:
int main(int argc, char **argv) { int ret = SH_NOK; ShellCB *shellCB = NULL; if (!strcmp(argv[0], "shell") && argv[1]) { ret = DoShellExec(argv + 1); return ret; } setbuf(stdout, NULL); shellCB = (ShellCB *)malloc(sizeof(ShellCB)); if (shellCB == NULL) { goto ERR_OUT1; } ret = memset_s(shellCB, sizeof(ShellCB), 0, sizeof(ShellCB)); if (ret != SH_OK) { goto ERR_OUT1; } ret = pthread_mutex_init(&shellCB->keyMutex, NULL); if (ret != SH_OK) { goto ERR_OUT1; } ret = pthread_mutex_init(&shellCB->historyMutex, NULL); if (ret != SH_OK) { goto ERR_OUT2; } ret = (int)OsShellKeyInit(shellCB); if (ret != SH_OK) { goto ERR_OUT3; } (void)strncpy_s(shellCB->shellWorkingDirectory, PATH_MAX, "/", 2); /* 2:space for "/" */ sem_init(&shellCB->shellSem, 0, 0); g_shellCB = shellCB; return OsShellCreateTask(shellCB);
分析:一个变量定义占一行,一个语句占一行;判断语句表达式划分的很好,形式上一致,可读性强。
3.好的代码风格3 :
代码示例:
STATIC INLINE TELNET_DEV_S *GetTelnetDevByFile(const struct file *file, BOOL isOpenOp) { struct Vnode *telnetInode = NULL; TELNET_DEV_S *telnetDev = NULL; if (file == NULL) { return NULL; } telnetInode = file->f_vnode; if (telnetInode == NULL) { return NULL; } /* * Check if the f_vnode is valid here for non-open ops (open is supposed to get invalid f_vnode): * when telnet is disconnected, there still may be 'TelentShellTask' tasks trying to write * to the file, but the file has illegal f_vnode because the file is used by others. */ if (!isOpenOp) { if (telnetInode != g_currentVnode) { return NULL; } } telnetDev = (TELNET_DEV_S *)((struct drv_data*)telnetInode->data)->priv; return telnetDev; }
分析:可以清晰地看到相对应的大括号,相关语句还有注释,较好的反映设计思想和代码逻辑,格式规范可读性强。
3.好的代码风格3 :
代码示例:
分析:主函数部分首行没有缩进,判断语句部分太繁琐,全篇没有注释,可读性略差。