软件工程2021:第2次作业—— 谈谈鸿蒙操作系统
一、概述鸿蒙操作系统
•开发背景:
信息全球化的今天,网络安全威胁呈现多元化、复杂化趋势,需要一个足够安全的系统进行保障,而独立自主研发的操作系统正是国内市场的迫切需求。同时,数字化和5G 物联网新时代的到来对操作系统提出了新的要求,而人工智能的兴起和TB、PB 级的大数据云计算需要一个能够提供多机互联的操作系统。华为认为需要进一步提升操作系统的跨平台能力,包括支持全场景、跨多设备和平台的能力以及应对低时延、高安全性挑战的能力,因此逐渐形成了鸿蒙OS的雏形。
•需求:
(1)完善软件生态。华为手机用户在更新到鸿蒙系统后发现应用商店中并没有鸿蒙系统的应用,大部分应用软件的运行环境仍然是安卓,即鸿蒙系统暂时还依靠着安卓生态。
(2)更多的市场份额。因为万物互联场景中手机的重要性,华为始终以全球手机市场第一作为目标,不断拓展用户使用群体的同时,寻求更多APP厂商的合作,共同开发跨终端设备的应用。
•开发历史:
2012年9月,在华为“2012诺亚方舟实验室”专家座谈会上,任正非提出要做终端操作系统,以防范于未然,要在“断了我们粮食的时候,备份系统要能用得上”,而这就是“鸿蒙”操作系统的起点。
2017年,鸿蒙内核1.0完成技术验证.
2018年,鸿蒙内核2.0已被应用于终端TEE。
2019年,鸿蒙OS 1.0版本正式亮相。
2019年5月24日,国家知识产权局商标局网站显示,华为已申请“华为鸿蒙”商标,申请日期是2018年8月24日,注册公告日期是2019年5月14日,专用权限期是从2019年5月14日到2029年5月13日。
2019年5月17日,由任教授领导的华为操作系统团队开发了自主产权操作系统——鸿蒙。
2019年8月9日,华为正式发布鸿蒙系统。同时余承东也表示,鸿蒙OS实行开源。
2020年9月10日,华为鸿蒙系统升级至华为鸿蒙系统2.0版本,即HarmonyOS 2.0。余承东表示,2020年12月份将面向开发者提供鸿蒙2.0的beta版本。
•应用场景和发展趋势:
鸿蒙OS是基于微内核的全场景分布式OS,这是分布式架构首次用于终端OS,可以实现跨终端无缝协同体验。鸿蒙系统的生态可以概括为 1+8+N,其核心是1,即智能手机,而8是指PC、平板、智慧屏、音箱、眼镜、手表、车机、耳机,N是指摄像头、扫地机、智能秤等外围智能硬件,涵盖移动办公、智能家居、运动健康、影音娱乐、智慧出行五大场景模式。鸿蒙OS希望能够实现万物的智能互联功能,它通过将任意个孤立设备连接成“超级终端”,提供了流畅、安全的无缝衔接跨平台能力,实现了“超级终端”内硬件设备之间的信息共享与服务共享。因此,未来鸿蒙OS将会在通讯能力、硬件适配、系统内核和软件生态这些方面做出进一步的完善与提升;不断地完整全场景生态战略,打通1+8+N全场景智慧生态;同时,“超级终端”的分布式技术和原子化服务有望优化用户体验感,推动智能家居加速渗透;微内核设计提升系统适配性,模块化思路顺应万物互联时代需求。
二、关于鸿蒙是否套壳的争议
当鸿蒙OS系统套壳安卓的争议再次出现,人民日报郑重发声为鸿蒙OS“正名”。鸿蒙OS系统之所以兼容安卓软件,是因为鸿蒙系统的很多代码是基于ASOP的,即安卓开源项目,任何组织和个人都能够从这一社区中使用安卓系统的基础源代码,并基于开源项目做二次开发。ASOP代码并不全是谷歌写的,华为也是ASOP的重要贡献者,且鸿蒙OS中还有着自己的Openharmony。除此之外,安卓系统的全球开发者超过2000万,苹果iOS的开发者超过2400万,而鸿蒙OS的开发者目前才几百万,生态规模还不够大,使用ASOP的代码是基于现状的理智选择,现阶段跟安卓和iOS“正面刚”是不现实的。在我看来,华为现阶段通过复用ASOP代码构建鸿蒙OS的历程就是创新,那么,什么是创新呢?创新是指以现有的思维模式提出有别于常规或常人思路的见解为导向,利用现有的知识和物质,在特定的环境中,本着理想化需要或为满足社会需求,而改进或创造新的事物、方法、元素、路径、环境,并能获得一定有益效果的行为。既然ASOP的基础源代码可供任何人使用,那么它不就是现有的知识和物质了吗?华为当然可以使用ASOP的代码,so why not?况且华为也拥有自己的开源鸿蒙,有别于常规的安卓和iOS,基于开源项目做二次开发的同时也在不断地为开源社区贡献代码,这些行为都为万物互联时代创造出了有益的效果。 因此,华为的创新是毋庸置疑的。
三、代码风格分析
1. 好的代码风格1:
ο代码示例:
ο分析:(1)每个步骤中间加了空格,提升段落感;
(2)成功后的处理提取成一个独立的函数,降低函数长度;
(3)判断所需的map 提取成局部变量,让判断更加简洁;
(4)防御性判断写在代码执行之前,逻辑更清晰。
2. 好的代码风格2:
ο代码示例:
"...
LITE_OS_SEC_TEXT VOID osSwTmrTask(VOID)
{
SWTMR_HANDLER_ITEM_P pstSwtmrHandle = (SWTMR_HANDLER_ITEM_P)NULL;
SWTMR_HANDLER_ITEM_S stSwtmrHandle;
UINT32 uwRet;
for ( ; ; )
{
uwRet = LOS_QueueRead(m_uwSwTmrHandlerQueue, &pstSwtmrHandle, sizeof(SWTMR_HANDLER_ITEM_P), LOS_WAIT_FOREVER);
if (uwRet == LOS_OK)
{
if (pstSwtmrHandle != NULL)
{
stSwtmrHandle.pfnHandler = pstSwtmrHandle->pfnHandler;
stSwtmrHandle.uwArg = pstSwtmrHandle->uwArg;
(VOID)LOS_MemboxFree(m_aucSwTmrHandlerPool, pstSwtmrHandle);
if (stSwtmrHandle.pfnHandler != NULL)
{
stSwtmrHandle.pfnHandler(stSwtmrHandle.uwArg);
}
}
}
}//end of for
}
..."
ο分析:(1)节约关键资源:由于每个操作系统的timer都需要一个线程进行回调处理,这对于Tdengine这种数据库动辙几万个timer的应用来说是不可接受的,所以为了节省线程资源,Td要用自己实现的timer之所以要实现自己的定时器是为了节省线程资源。而鸿蒙实现timer则是为了节约硬件定时器资源。
(2)最简化设计:两个timer都没有优先级的设定。其中鸿蒙OS做为移动操作系统直接将timer的精度值也舍弃了。
(3)使用双链表提高效率:两个timer都使用双链表来存储同一时刻到期的定时器,这样能节省遍历和移动的时间,大大提高效率。
3. 不好的代码风格1:
ο代码示例:
ο 分析:(1)构造参数、调用二方服务、结构判断并执行大段逻辑之前没有空行,看着不够清晰;
(2)if判断部分写的逻辑有些复杂,不易懂。