首页 > 其他分享 >OpenHarmony轻量系统中内核资源主要管理方式

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

时间:2024-09-02 11:26:01浏览次数:11  
标签:OpenHarmony 互斥 mux 链表 los 内核 轻量 空闲


一、背景

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文件中

OpenHarmony轻量系统中内核资源主要管理方式_移动开发

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

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

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

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

OpenHarmony轻量系统中内核资源主要管理方式_移动开发_03

1.数据保存方式

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

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

三、数据访问方式

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

1. 通过ID访问

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

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

2.通过空闲链表访问

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

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

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

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

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

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

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

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

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

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

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

四、健壮性考虑

1.空闲状态双保险

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

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

2.中断上下文保护

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

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

3.任务切换保护

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

代码如下(los_mux.c):

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

4.关键任务不允许切换

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

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

五、总结

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

● 简单易懂

● 读写效率高

● 代码紧凑

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

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

《鸿蒙 (Harmony OS)开发学习手册》(共计892页)

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

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

开发基础知识:

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

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

基于ArkTS 开发

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

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

鸿蒙开发面试真题(含参考答案)

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

OpenHarmony 开发环境搭建

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

《OpenHarmony源码解析》

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

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

OpenHarmony 设备开发学习手册

OpenHarmony轻量系统中内核资源主要管理方式_移动开发_21



标签:OpenHarmony,互斥,mux,链表,los,内核,轻量,空闲
From: https://blog.51cto.com/u_15375308/11896118

相关文章

  • OpenHarmony Liteos_A内核之iperf3移植心得
    一、iperf3工作原理iperf3主要的功能是测试基于特定路径的带宽,在客户端和服务器端建立连接(三次握手)后,客户端发送一定大小的数据报并记下发送的时间,或者客户端在一定的时间内发送数据并记下发送的总数据。带宽的大小等于发送的总数据除以发送的总时间。对服务器端来说,在连接建立时间......
  • Salt Function Flow:深度研发经验的沉淀,打造轻量级高效流程编排框架
    在开发者的世界里,业务流程编排是一个既复杂又关键的环节。如何高效地管理和编排这些流程,直接影响着系统的性能和可维护性。本次介绍一款基于大量研发实践经验而打造的流程编排框架——SaltFunctionFlow。它不仅轻量、强大,更是将多年实践中的最佳经验沉淀于其中,为开发者提......
  • 一个.NET开源、现代、轻量级的文本编辑器
    前言今天大姚给大家分享一个.NET开源、免费(MITLicense)、现代、轻量级、具有极简主义设计的文本编辑器:Notepads。项目特点设计:采用Fluent设计语言,内置选项卡系统。性能:启动迅速,占用资源少。兼容性:支持从命令行或PowerShell启动。功能丰富:支持多行手写、Markdown实时预览、差异查看......
  • 基于live555开发的多线程RTSPServer轻量级流媒体服务器EasyRTSPServer开源代码及其调
    EasyRTSPServer参考live555testProg中的testOnDemandRTSPServer示例程序,将一个live555testOnDemandRTSPServer封装在一个类中,例如,我们称为ClassEasyRTSPServer,在EasyRTSPServer_Create接口调用时,我们新建一个EasyRTSPServer对象,再通过调用EasyRTSPServer_Startup接口,将EasyRTSP......
  • 一个操作系统的设计与实现——第20章 加载64位内核,64位显卡驱动与内存管理系统
    20.164位ELF格式在64位模式下,由于内存地址变宽,ELF格式中的内存地址也要跟着变宽。这并不是一个麻烦的问题,因为ELF格式的整体结构没有发生变化,仍然由一个文件头,加上若干程序头表组成。对于64位ELF格式的文件头,我们需要关注的信息如下表所示:偏移量字节数含义0x188程......
  • PY32F002A单片机开发板 PY32F002AF15P6开发板 32位MCU,M0+内核
    PY32F002A开发板上搭载的是PY32F002AF15P6单片机,TSSOP20封装,开发板使用TypeC接口供电,可以用来对PY32F002A芯片进行开发调试。PY32F002A开发板推荐使用我们的PY32link来下载仿真,绝大部分的STlink,Jlink,DAPlink也可以下载仿真,需自行测试。开发资料齐全,提供了LL库和HAL库,支持IAR......
  • 在Android开发中,如何使用SharedPreferences(简称SP)一个轻量级的数据存储方式
    目录全局SharedPreferences工具类代码说明:如何使用这个工具类?在Android开发中,SharedPreferences(简称SP)是一个轻量级的数据存储方式,常用于保存应用的配置信息或少量的数据。为了便于在全局使用,可以将其封装到一个工具类中。以下是一个带有详细中文注释的全局SharedPrefere......
  • OpenHarmony开发:应用分层架构设计
    HarmonyOS应用的分层架构设计以一套代码工程为基础,旨在为华为的手机、2in1等1+8全场景设备提供支持,实现了“一次开发,多端部署”的开发理念。HarmonyOS应用的分层架构主要包括三个层次:产品定制层、基础特性层和公共能力层,为开发者构建了一个清晰、高效、可扩展的设计架构。本......
  • 英飞凌HSM内核开发-软硬件架构
    veHsm硬件和软件架构概述1.软件硬件架构veHsm是一个嵌入式硬件安全模块,它通过硬件提供的安全区域来增强安全性,这个区域包括:专用核心:负责执行安全操作。安全内存:用于存储敏感数据,如密钥和资产,这部分内存仅对专用核心可访问。密码硬件加速器:硬件组件,用于加速密码算法的执......
  • Linux内核中断
    头文件在vscode中,进行tasklet和work中断实验的时候,对于包含的头文件如下两个一直爆红:#include<linux/irq.h>#include<linux/of_irq.h>一路追查下来,发现是缺少头文件:#include<linux/irq.h> ->#include<asm/irq.h> ->#include<mach/irqs.h>(该头文件无法找到)......