0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

OpenAtom OpenHarmony 来源:未知 2022-10-20 23:10 次阅读

点击蓝字 ╳ 关注我们

开源项目 OpenHarmony是每个人的 OpenHarmony e847a8aa-5088-11ed-a3b6-dac502259ad0.jpg

冷钦街

软通动力

高级威廉希尔官方网站 专家、产品推荐

以下内容来自嘉宾分享,不代表开放原子开源基金会观点

一、背景

OpenAtom OpenHarmony(以下简称“OpenHarmony”)轻量系统面向MCU处理器例如ARM Cortex-M、RISC-V 32位的设备,硬件资源极其有限,支持的设备最小内存为128KiB,可以提供多种轻量级网络协议,轻量级的图形框架,以及丰富的IOT总线读写部件等。可支撑的产品如智能家居领域的连接类模组、传感器设备、穿戴类设备等。 在轻量系统内核中,由于可用内存资源少,一般的数据资源都是小批量的,所以其资源管理方式都比较简单且相似,本文重点讲解在轻量系统内核中,典型的资源的存储和访问方式。这些典型的资源包括互斥锁,信号量、消息队列、事件、定时器等。 本文以互斥锁为例来探究其内核资源的主要管理方式。 互斥锁软件模块相关的代码在如下位置 https://gitee.com/openharmony/kernel_liteos_m/blob/master/kernel/src/los_mux.c https://gitee.com/openharmony/kernel_liteos_m/blob/master/kernel/include/los_mux.h

二、模块使能和容量

互斥锁软件模块是编译可裁剪模块,可以通过编译配置宏来打开或者关闭具体的编译配置宏定义在https://gitee.com/openharmony/kernel_liteos_m/blob/master/kernel/include/los_config.h文件中 e8807ab8-5088-11ed-a3b6-dac502259ad0.png   通过这个文件可知,liteos_m内核默认是使能互斥锁功能的,但我们根据具体产品可以对其进行设置,如某产品对应的配置文件https://gitee.com/openharmony/device_qemu/blob/master/arm_mps2_an386/liteos_m/board/target_config.h  e895240e-5088-11ed-a3b6-dac502259ad0.png   这里明确看到此产品使用了互斥锁功能,如果需要将其关闭,直接修改成0值即可。 互斥锁支持的最大数目不同产品可以不同,当前这个产品为24,如果产品没有定义容量限制,那么使用默认容量限制(见los_config.h中)。  e8af5c16-5088-11ed-a3b6-dac502259ad0.png  1.数据保存方式 由于容量较小,采用数组这种简单和原始的数据保存方式,在系统初始化的时候申请数组内存。如下(los_mux.c中) e8d362e6-5088-11ed-a3b6-dac502259ad0.png  

三、数据访问方式

由于轻量系统的计算资源相对受限,因此需要在算法上斤斤计较。目前提供了ID方式(数组下标访问)和链表访问2种方式,如下进行详细说明。1.通过ID访问 在los_mux.h中,定义了通过id访问互斥锁的方法,其实质就是数组下标访问,获取具体互斥锁资源的地址 e8eb7bba-5088-11ed-a3b6-dac502259ad0.png  2.通过空闲链表访问 随着互斥锁的申请和释放,系统中当前正在使用的互斥锁数目是动态变化的。由于采用了数组存储以及内存预留的策略,所以数组中的互斥锁有些是空闲的,有些是正在使用的,并且其状态随着系统的运行过程而无规律地变化。 若仅依赖于数组方式访问互斥锁,则查询空闲互斥锁是一个稍耗时的算法,因为要遍历数组。 为了加快空闲互斥锁的查询,本系统采用了将所有空闲互斥锁组织成链表的方法。这样每次取出链表第一个节点即可,可以极大提升性能。 在los_mux.h中,通过增加muxList字段将所有空闲的互斥锁组织成链表 e8fd808a-5088-11ed-a3b6-dac502259ad0.png   在los_mux.c中,系统初始化时,所有互斥锁都为空闲状态,放入空闲链表  e91384ac-5088-11ed-a3b6-dac502259ad0.png   在los_mux.c中,创建互斥锁时,从空闲链表取下空闲状态的互斥锁  e92d164c-5088-11ed-a3b6-dac502259ad0.png   在los_mux.c中,释放互斥锁时,将互斥锁放入空闲链表  e9473a68-5088-11ed-a3b6-dac502259ad0.png  

四、健壮性考虑

1.空闲状态双保险 除了通过判断是否在空闲链表上来判断描述符是否空闲以外,在结构体中也保存了是否空闲的状态,这样可以增加空闲状态判断的健壮性;另外,通过直接判断状态也比判断是否在链表中性能更高。如下(los_mux.c中): e95c7464-5088-11ed-a3b6-dac502259ad0.png  2.中断上下文保护 由于在中断上下文中不允许有睡眠操作,而互斥锁获取逻辑就是典型的具有睡眠操作的逻辑,所以,互斥锁的获取和释放不能在中断上下文中,如下(los_mux.c中)。 e974be20-5088-11ed-a3b6-dac502259ad0.png  3.任务切换保护 IPC操作有时会需要任务切换,如果当前任务切换功能被临时关闭,则不允许进行IPC操作,互斥锁获取操作也是IPC操作的一种。 代码如下(los_mux.c): e98eb23a-5088-11ed-a3b6-dac502259ad0.png  4.关键任务不允许切换 一些系统关键任务运行后,不允许执行IPC逻辑,比如软件定时器任务:其监控多个定时器的超时。假定其执行IPC逻辑导致任务等待某资源比较长的时间,会导致后续部分定时器定时功能失效(不准确)。代码如下(los_mux.c): e9a3b892-5088-11ed-a3b6-dac502259ad0.png  

五、总结

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

读写效率高

代码紧凑


原文标题:OpenHarmony轻量系统中内核资源主要管理方式

文章出处:【微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OpenHarmony
    +关注

    关注

    25

    文章

    3716

    浏览量

    16260

原文标题:OpenHarmony轻量系统中内核资源主要管理方式

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【汇总】OpenHarmony系统开发目录和个人感悟

    前言还记得2020年9月OpenHarmony大会后,我开始在社区写了一些OpenHarmony系统开发的文章,基于Hi3861。转眼已
    发表于 01-20 09:04

    从零移植OpenHarmony系统【1】移植思路

    移植类型OpenHarmony系统的移植比较简单,代码解耦做得非常好。从代码的设计理念上来看,移植
    发表于 01-26 17:18

    移植OpenHarmony系统【7】烧录与验证

    摘要:本文简单介绍OpenHarmony系统移植,内核初始化和启动适合群体:想自己动手移植OpenH
    发表于 02-09 18:09

    从零开始移植OpenHarmony系统

    内核移植到ARM单片机上,现在代码开源、移植文章也完成7篇,后续会考虑增加视频讲解,直播。以便大家也可以自己移植。移植文章:移植OpenHarmony
    发表于 02-09 18:58

    OpenHarmony支持的系统类型及内核

    本文介绍OpenHarmony所不同的系统类型以及支持的内核系统类型OpenHarmony支持以下几种
    发表于 04-19 11:29

    OpenHarmony与小型系统入门概述

    参考和小型系统快速入门(安装包方式)。 开发环境 开发者通常习惯采用Windows+Ubuntu环境进行OpenHarmony开发: W
    发表于 05-06 15:48

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

    资源少,一般的数据资源都是小批量的,所以其资源管理方式都比较简单且相似,本文重点讲解在系统
    发表于 10-21 11:34

    OpenHarmony Dev-Board-SIG专场:ARM架构和MIPS架构移植OpenHarmony系统

    OpenHarmony Dev-Board-SIG专场:ARM架构和MIPS架构移植OpenHarmony系统
    的头像 发表于 12-28 16:00 1885次阅读
    <b class='flag-5'>OpenHarmony</b> Dev-Board-SIG专场:ARM架构和MIPS架构移植<b class='flag-5'>OpenHarmony</b><b class='flag-5'>轻</b><b class='flag-5'>量</b><b class='flag-5'>系统</b>

    OpenHarmony Dev-Board-SIG专场:MIPS架构移植OpenHarmony系统展示

    OpenHarmony Dev-Board-SIG专场:MIPS构架移植OpenHarmony系统展示
    的头像 发表于 12-28 16:07 1504次阅读
    <b class='flag-5'>OpenHarmony</b> Dev-Board-SIG专场:MIPS架构移植<b class='flag-5'>OpenHarmony</b><b class='flag-5'>轻</b><b class='flag-5'>量</b><b class='flag-5'>系统</b>展示

    OpenHarmony系统、小型系统、标准系统的差异

    本文简单介绍OpenHarmony系统、小型系统、标准系统的差异,以及相关的官方资料和文档
    的头像 发表于 01-24 14:47 6320次阅读
    <b class='flag-5'>OpenHarmony</b>、<b class='flag-5'>轻</b><b class='flag-5'>量</b><b class='flag-5'>系统</b>、小型<b class='flag-5'>系统</b>、标准<b class='flag-5'>系统</b>的差异

    关于OpenHarmony系统开发

    还记得2020年9月OpenHarmony大会后,我开始在社区写了一些OpenHarmony系统开发的文章,基于Hi3861。
    的头像 发表于 01-24 14:54 1873次阅读

    如何移植OpenHarmony系统

    摘要:本文简单介绍OpenHarmony系统移植,会分多篇
    的头像 发表于 02-25 12:14 3034次阅读
    如何移植<b class='flag-5'>OpenHarmony</b><b class='flag-5'>轻</b><b class='flag-5'>量</b><b class='flag-5'>系统</b>

    OpenHarmony系统开发【1】初始OH

    本文简单介绍OpenHarmony系统、小型系统、标准系统的差异,以及相关的官方资料和文档
    发表于 02-25 17:49 981次阅读

    OpenHarmony系统书籍推荐《OpenHarmony设备开发理论与实战》

    最近大家问的智能家居套件方面有没有可以参考的资料,这里给大家统一回复一下 推荐大家可以看这本书 《OpenHarmony设备开发理论与实战》 本书系统地讲授
    的头像 发表于 07-20 12:43 1229次阅读

    【开源鸿蒙】使用QEMU运行OpenHarmony系统

    本文将会介绍如何从源码安装QEMU 6.2.0,以及如何使用QEMU运行OpenHarmony系统。通过本文,你将会对QEMU和OpenHarm
    的头像 发表于 09-14 08:51 543次阅读
    【开源鸿蒙】使用QEMU运行<b class='flag-5'>OpenHarmony</b><b class='flag-5'>轻</b><b class='flag-5'>量</b><b class='flag-5'>系统</b>