赞
踩
CPU(中央处理器,Central Processing Unit)占用率分为系统 CPU 占用率和任务 CPU 占用率。
系统 CPU 占用率(CPU Percent)是指周期时间内系统的 CPU 占用率,用于表示系统一段时间内的闲忙程度,也表示 CPU 的负载情况。系统 CPU 占用率的有效表示范围为 0~100,其精度(可通过配置调整)为百分比。100 表示系统满负荷运转。
任务 CPU 占用率指单个任务的 CPU 占用率,用于表示单个任务在一段时间内的闲忙程度。任务 CPU 占用率的有效表示范围为 0~100,其精度(可通过配置调整)为百分比。100 表示在一段时间内系统一直在运行该任务。
用户通过系统级的 CPU 占用率,判断当前系统负载是否超出设计规格。通过系统中各个任务的 CPU 占用情况,判断各个任务的 CPU 占用率是否符合设计的预期。
OpenHarmony LiteOS-M 的 CPUP(CPU Percent,系统 CPU 占用率)采用任务级记录的方式,在任务切换时,记录任务启动时间,任务切出或者退出时间,每次当任务退出时,系统会累加整个任务的占用时间。
可以在 target_config.h 的中对该功能进行选配。
OpenHarmony LiteOS-M 提供以下两种 CPU 占用率的信息查询:
CPU 占用率的计算方法:
在硬件资源有限的小设备中,需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素,同时考虑到多平台的通用性,LiteOS-M 选择业界标准的ELF 加载方案,方便拓展算法生态。LiteOS-M 提供类似于 dlopen、dlsym 等接口,APP 通过动态加载模块提供的接口可以加载、卸载相应算法库。如图 1 所示,APP 需要通过三方算法库所需接口获取对应信息输出,三方算法库又依赖内核提供的基本接口,如 malloc 等。APP加载所需接口,并对相关的未定义符号完成重定位后,APP 即可调用该接口完成功能调用。目前动态加载组件只支持 arm 架构。此外,待加载的共享库需要验签或者限制来源,确保系统的安全性。
共享库调用内核接口需要内核主动暴露动态库所需的接口,如图 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 共享库编译链接选项:
约束:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。