HCIA-HarmonyOS设备开发认证V2.0-内核扩展组件

在这里插入图片描述

目录

  • 一、CPU 占用率
    • 1.1、CPU 占用率基本概念
    • 1.2、CPU 占用率运行机制
    • 1.3、CPU 占用率开发流程
  • 二、动态加载
    • 2.1、 动态加载基本概念
    • 2.2、动态加载运行机制
  • 坚持就有收获

一、CPU 占用率

1.1、CPU 占用率基本概念

CPU(中央处理器,Central Processing Unit)占用率分为系统 CPU 占用率和任务 CPU 占用率。

系统 CPU 占用率(CPU Percent)是指周期时间内系统的 CPU 占用率,用于表示系统一段时间内的闲忙程度,也表示 CPU 的负载情况。系统 CPU 占用率的有效表示范围为 0~100,其精度(可通过配置调整)为百分比。100 表示系统满负荷运转。

任务 CPU 占用率指单个任务的 CPU 占用率,用于表示单个任务在一段时间内的闲忙程度。任务 CPU 占用率的有效表示范围为 0~100,其精度(可通过配置调整)为百分比。100 表示在一段时间内系统一直在运行该任务。

用户通过系统级的 CPU 占用率,判断当前系统负载是否超出设计规格。通过系统中各个任务的 CPU 占用情况,判断各个任务的 CPU 占用率是否符合设计的预期。

1.2、CPU 占用率运行机制

OpenHarmony LiteOS-M 的 CPUP(CPU Percent,系统 CPU 占用率)采用任务级记录的方式,在任务切换时,记录任务启动时间,任务切出或者退出时间,每次当任务退出时,系统会累加整个任务的占用时间。

可以在 target_config.h 的中对该功能进行选配。

OpenHarmony LiteOS-M 提供以下两种 CPU 占用率的信息查询:

  • 系统 CPU 占用率。
  • 任务 CPU 占用率。

CPU 占用率的计算方法:

  • 系统 CPU 占用率=系统中除 idle 任务外其他任务运行总时间/系统运行总时间
  • 任务 CPU 占用率=任务运行总时间/系统运行总时间

1.3、CPU 占用率开发流程

  • 调用获取系统 CPU 使用率函数 LOS_SysCpuUsage。
  • 调用获取系统历史 CPU 使用率函数 LOS_HistorySysCpuUsage。
  • 调用获取指定任务 CPU 使用率函数 LOS_TaskCpuUsage。
    • 若任务已创建,则关中断,正常获取,恢复中断;
    • 若任务未创建,则返回错误码;
  • 调用获取指定任务历史 CPU 使用率函数 LOS_HistoryTaskCpuUsage。
    • 若任务已创建,则关中断,根据不同模式正常获取,恢复中断;
    • 若任务未创建,则返回错误码;
  • 调用获取所有任务 CPU 使用率函数 LOS_AllCpuUsage。
    • 若 CPUP 已初始化,则关中断,根据不同模式正常获取,恢复中断;
    • 若 CPUP 未初始化或有非法入参,则返回错误码;

二、动态加载

2.1、 动态加载基本概念

在硬件资源有限的小设备中,需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素,同时考虑到多平台的通用性,LiteOS-M 选择业界标准的ELF 加载方案,方便拓展算法生态。LiteOS-M 提供类似于 dlopen、dlsym 等接口,APP 通过动态加载模块提供的接口可以加载、卸载相应算法库。如图 1 所示,APP 需要通过三方算法库所需接口获取对应信息输出,三方算法库又依赖内核提供的基本接口,如 malloc 等。APP加载所需接口,并对相关的未定义符号完成重定位后,APP 即可调用该接口完成功能调用。目前动态加载组件只支持 arm 架构。此外,待加载的共享库需要验签或者限制来源,确保系统的安全性。

请添加图片描述

2.2、动态加载运行机制

共享库调用内核接口需要内核主动暴露动态库所需的接口,如图 2 所示,该机制将符号信息编译到指定段中,调用 SYM_EXPORT 宏即可完成对指定符号的信息导出。符号信息通过结构体 SymInfo 描述,成员包括符号名和符号地址信息,宏 SYM_EXPORT 通过__attribute__编译属性将符号信息导入.sym.*段中。

请添加图片描述

加载过程中,根据 ELF 文件的句柄以及程序头表的段偏移可以得到需要加载到内存的 LOAD段,一般有两个段,只读段及读写段,如下所示,可以用 readelf -l 查看 ELF 文件的 LOAD 段信息。根据相应的对齐属性申请物理内存,通过每个段的加载基址及偏移将代码段或数据段写入内存中。

请添加图片描述

通过 ELF 文件的.dynamic 段获取重定位表,遍历表中每一个需要重定位的条目,再根据需要重定位的符号名在共享库和内核提供的导出符号表中查找相应符号并更新相应的重定位信息。
请添加图片描述

ELF 支持类型:
编译共享库时,添加-fPIC 可以编译出位置无关代码(-fPIC 为编译选项),此时共享库文件类型为 ET_DYN,其可以加载至任意有效的地址区间。
例:arm-none-eabi-gcc -fPIC –shared –o lib.so lib.c。

ELF 共享库编译链接选项:

  • “-nostdlib”编译链接选项:不依赖编译器中 lib 库。
  • “-nostartfiles”编译链接选项:不依赖编译器中启动相关的文件。
  • “-fPIC”编译选项:可编译位置无关的共享库。
  • “-z max-page-size=4”链接选项:二进制文件中可加载段的对齐字节数为 4,可节约内存,可用于动态库。
  • “-mcpu=”需要指定对应的 cpu 架构。

约束:

  • 不支持应用程序加载,只支持共享库加载。
  • 待加载的共享库不能依赖编译器中的 libc 库及其他共享库,只能依赖内核提供的对外接口(由导出的符号表提供)。
  • 依赖交叉编译器及文件系统。

坚持就有收获

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/471255.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fluke ADPT 连接器新增对福禄克万用 Fluke 101 的支持

所需设备: 1、Fluke ADPT连接器; 2、Fluke 101; Fluke 101 拆机图: 显示界面如下图: 并且可以将波形导出到EXCEL: 福禄克万用表需要自己动手改造!!!

day29 回溯part5

491. 非递减子序列 中等 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特…

【Python】通过conda安装Python的IDE

背景 系统:win11 软件:anaconda Navigator 问题现象:①使用Navigator安装jupyter notebook以及Spyder IDE 一直转圈。②然后进入anaconda prompt执行conda install jupyter notebook一直卡在Solving environment/-\。 类似问题: …

大学建筑专业的搜题软件?大学搜题工具中的高级搜索功能有哪些? #学习方法#微信#经验分享

学习和考试是大学生生活中不可避免的一部分,而在这个信息爆炸的时代,如何快速有效地获取学习资源和解答问题成为了大学生们共同面临的难题。为了解决这个问题,搜题和学习软件应运而生。今天,我将为大家介绍几款备受大学生青睐的搜…

线程池(图解,本质,模拟实现代码)

目录 线程池 介绍 图解 过程 本质 模拟实现 思路 注意点 解决方法 代码 pthread_pool.hpp task.hpp main.cpp 示例 线程池 介绍 线程池是一种并发编程的设计模式,用于管理和重复使用线程,以提高多线程应用程序的性能和效率 线程池主要用于…

【C++】C++11上

C11上 1.C11简介2.统一的列表初始化2.1 {} 初始化2.2 initializer_list 3.变量类型推导3.1auto3.2decltype3.3nullptr 4.范围for循环5.final与override6.智能指针7. STL中一些变化8.右值引用和移动语义8.1左值引用和右值引用8.2左值引用与右值引用比较8.3右值引用使用场景和意义…

【网站项目】023实验室耗材管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

Spring中的事务实现、失效场景即AOP的相关概念理解

spring实现事务(声明式事务)的本质就是aop完成的,它会对方法的前后进行拦截,在执行方法之前开启事务,在执行完目标方法之后根据执行情况提交或回滚事务。aop就是面向切面编程,在spring中将那些与业务无关,但却对多个对象产生影响的…

STM32,嵌入式系统中的I2C协议

I2C协议——读写EEPROM 关注我,共同交流,一起成长 前言一、协议简介二、I2C特性及架构三、通信过程 前言 这是一种主要用于集成电路和集成电路(IC)通信,计算机中复杂的问题大多数就是用分层来进行解决,这个…

关于内存相关的梳理

1 关键字 总结 (lowmemory,anr in) 2 知识储备 虚拟机原理 垃圾回收算法 又包含标记 和清除两种算法 标记:程序计数器-已过时,可达性分析 具体可见 http://help.eclipse.org/luna/index.jsp?topic%2Forg.ec…

什么是 Docker 容器?以及操作 Docker 容器相关的命令汇总

镜像仓库常用指令:Docker 镜像仓库是什么?有哪些镜像仓库命令? 镜像常用指令:操作 Docker 镜像的常用命令 1. 什么是容器? 容器是镜像的运行实体。容器是基于镜像创建的可运行实例,并且单独存在&#xff0…