当前位置: 首页 > news >正文

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 库及其他共享库,只能依赖内核提供的对外接口(由导出的符号表提供)。
  • 依赖交叉编译器及文件系统。

坚持就有收获

在这里插入图片描述

相关文章:

  • Linux第57步_“linux系统镜像”和“根文件系统”重新打包小结
  • Llama-Factory的baichuan2微调
  • 2000-2021年县域指标统计数据库
  • Python编程-二万字浅谈装饰器原理与装饰器设计模式和函数式编程案例讲解
  • linux的make和makefile
  • 第三节 zookeeper基础应用与实战2
  • 单片机的省电模式及策略
  • FileZilla Server 1.8.1内网搭建
  • MySQL 基础知识(一)之数据库和 SQL 概述
  • BUUCTF misc 专题(47)[SWPU2019]神奇的二维码
  • 【初始C++】引用的概念及使用场景、引用与指针的区别、内联函数、类型推导关键字auto、范围for循环、指针空值nullptr
  • Excel+VBA处理高斯光束
  • 毕业设计vue+php幼儿园网站系统yl567
  • 【Java EE初阶十二】网络编程TCP/IP协议(二)
  • Duilib List 控件学习
  • 【5+】跨webview多页面 触发事件(二)
  • co模块的前端实现
  • ES6核心特性
  • extjs4学习之配置
  • Git同步原始仓库到Fork仓库中
  • httpie使用详解
  • JavaScript-Array类型
  • MaxCompute访问TableStore(OTS) 数据
  • mysql常用命令汇总
  • npx命令介绍
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 反思总结然后整装待发
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 开发基于以太坊智能合约的DApp
  • 数据科学 第 3 章 11 字符串处理
  • 无服务器化是企业 IT 架构的未来吗?
  • 想使用 MongoDB ,你应该了解这8个方面!
  • ​linux启动进程的方式
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #传输# #传输数据判断#
  • (3)(3.5) 遥测无线电区域条例
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (简单) HDU 2612 Find a way,BFS。
  • (十六)Flask之蓝图
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • ******之网络***——物理***
  • .libPaths()设置包加载目录
  • .NET Core引入性能分析引导优化
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net操作Excel出错解决
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET中两种OCR方式对比
  • .net专家(张羿专栏)
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [BT]BUUCTF刷题第8天(3.26)
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [C#]C# OpenVINO部署yolov8图像分类模型