软件工程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;

···”

  • 分析:定义结构体层次分明,一个结构体一行,并且加中文注释。
posted @ 2021-09-16 23:39  大数据192胡国伟  阅读(57)  评论(0编辑  收藏  举报