OpenHarmony轻量系统中内核资源主要管理方式

535 篇文章 10 订阅
425 篇文章 3 订阅

一、背景

OpenAtom OpenHarmony(以下简称“OpenHarmony”)轻量系统面向MCU类处理器例如ARM Cortex-M、RISC-V 32位的设备,硬件资源极其有限,支持的设备最小内存为128KiB,可以提供多种轻量级网络协议,轻量级的图形框架,以及丰富的IOT总线读写部件等。可支撑的产品如智能家居领域的连接类模组、传感器设备、穿戴类设备等。

在轻量系统内核中,由于可用内存资源少,一般的数据资源都是小批量的,所以其资源管理方式都比较简单且相似,本文重点讲解在轻量系统内核中,典型的资源的存储和访问方式。这些典型的资源包括互斥锁,信号量、消息队列、事件、定时器等。

本文以互斥锁为例来探究其内核资源的主要管理方式。

二、模块使能和容量

互斥锁软件模块是编译可裁剪模块,可以通过编译配置宏来打开或者关闭具体的编译配置宏定义在https://gitee.com/openharmony/kernel_liteos_m/blob/master/kernel/include/los_config.h文件中

通过这个文件可知,liteos_m内核默认是使能互斥锁功能的,但我们根据具体产品可以对其进行设置,如某产品对应的配置文件https://gitee.com/openharmony/device_qemu/blob/master/arm_mps2_an386/liteos_m/board/target_config.h

这里明确看到此产品使用了互斥锁功能,如果需要将其关闭,直接修改成0值即可。

互斥锁支持的最大数目不同产品可以不同,当前这个产品为24,如果产品没有定义容量限制,那么使用默认容量限制(见los_config.h中)。

1.数据保存方式

由于容量较小,采用数组这种简单和原始的数据保存方式,在系统初始化的时候申请数组内存。如下(los_mux.c中)

三、数据访问方式

由于轻量系统的计算资源相对受限,因此需要在算法上斤斤计较。目前提供了ID方式(数组下标访问)和链表访问2种方式,如下进行详细说明。

1. 通过ID访问

在los_mux.h中,定义了通过id访问互斥锁的方法,其实质就是数组下标访问,获取具体互斥锁资源的地址

2.通过空闲链表访问

随着互斥锁的申请和释放,系统中当前正在使用的互斥锁数目是动态变化的。由于采用了数组存储以及内存预留的策略,所以数组中的互斥锁有些是空闲的,有些是正在使用的,并且其状态随着系统的运行过程而无规律地变化。

若仅依赖于数组方式访问互斥锁,则查询空闲互斥锁是一个稍耗时的算法,因为要遍历数组。

为了加快空闲互斥锁的查询,本系统采用了将所有空闲互斥锁组织成链表的方法。这样每次取出链表第一个节点即可,可以极大提升性能。

在los_mux.h中,通过增加muxList字段将所有空闲的互斥锁组织成链表

在los_mux.c中,系统初始化时,所有互斥锁都为空闲状态,放入空闲链表

在los_mux.c中,创建互斥锁时,从空闲链表取下空闲状态的互斥锁

在los_mux.c中,释放互斥锁时,将互斥锁放入空闲链表

四、健壮性考虑

1.空闲状态双保险

除了通过判断是否在空闲链表上来判断描述符是否空闲以外,在结构体中也保存了是否空闲的状态,这样可以增加空闲状态判断的健壮性;另外,通过直接判断状态也比判断是否在链表中性能更高。如下(los_mux.c中):

2.中断上下文保护

由于在中断上下文中不允许有睡眠操作,而互斥锁获取逻辑就是典型的具有睡眠操作的逻辑,所以,互斥锁的获取和释放不能在中断上下文中,如下(los_mux.c中)。

3.任务切换保护

IPC操作有时会需要任务切换,如果当前任务切换功能被临时关闭,则不允许进行IPC操作,互斥锁获取操作也是IPC操作的一种。

代码如下(los_mux.c):

4.关键任务不允许切换

一些系统关键任务运行后,不允许执行IPC逻辑,比如软件定时器任务:其监控多个定时器的超时。假定其执行IPC逻辑导致任务等待某资源比较长的时间,会导致后续部分定时器定时功能失效(不准确)。代码如下(los_mux.c):

五、总结

轻量系统中内核资源多采用数组与空闲链表相结合的方式。除了OpenHarmony轻量系统,其他嵌入式系统中这类的数据存储方式也比较常见。这种方式有如下几个突出的优点

● 简单易懂

● 读写效率高

● 代码紧凑

如果想更深入的学习 OpenHarmony (鸿蒙南向)全栈开发的内容,可以参考以下学习文档:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……

系统架构分析:https://qr18.cn/CgxrRy

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:https://gitee.com/MNxiaona/733GH

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>