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

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

3天内不再提示

OpenHarmony内核标准库与Linux标准库有何区别

鸿蒙系统HarmonyOS 来源:oschina 作者:恰饭君 2020-10-21 14:41 次阅读

本文描述了OpenHarmony内核承载的标准库与Linux标准库之间存在的关键差异。

进程

OpenHarmony 用户态进程优先级只支持静态优先级且用户态可配置的优先级范围为10(最高优先级)-31(最低优先级)。

OpenHarmony 用户态线程优先级只支持静态优先级且用户态可配置的优先级范围为0(最高优先级)-31(最低优先级)。

OpenHarmony 调度策略支持 SCHED_RR 和 SCHED_FIFO。

sched_yield() 为进程主动放弃CPU;thrd_yield() 为线程主动放弃 CPU。

内存

与 Linux mmap 的差异

mmap接口原型为:void *mmap (void *addr, size_t length, int prot, int flags, int fd, off_t offset)。

其中,参数fd的生命周期实现与Linux glibc存在差异。具体体现在,glibc在成功调用mmap进行映射后,可以立即释放fd句柄。在OpenHarmony内核中,不允许用户在映射成功后立即关闭相关fd,只允许在取消映射munmap后再进行fd的close操作。如果用户不进行fd的close操作,操作系统将在进程退出时对该fd进行回收。

代码举例

Linux目前支持的情况如下:

int main(int argc, char *argv[]) { int fd; void *addr = NULL; ... fd = open(argv[1], O_RDONLY); if (fd == -1){ perror("open"); exit(EXIT_FAILURE); } addr = mmap(NULL, length, PROT_READ, MAP_PRIVATE, fd, offset); if (addr == MAP_FAILED) { perror("mmap"); exit(EXIT_FAILURE); } close(fd); /* close immediately, OpenHarmony do not support this way */ ... exit(EXIT_SUCCESS); }

OpenHarmony支持的情况如下:

int main(int argc, char *argv[]) { int fd; void *addr = NULL; ... fd = open(argv[1], O_RDONLY); if (fd == -1){ perror("open"); exit(EXIT_FAILURE); } addr = mmap(NULL, length, PROT_READ, MAP_PRIVATE, fd, offset); if (addr == MAP_FAILED) { perror("mmap"); exit(EXIT_FAILURE); } ... munmap(addr, length); close(fd); /* close after munmap */ exit(EXIT_SUCCESS); }

文件系统

**系统目录:**用户无法对其进行修改,或是设备挂载。包含/dev,/proc,/app,/bin,/data,/etc,/lib,/system,/usr目录。

用户目录:用户可以在该目录下进行文件创建、读写,但不能进行设备挂载。用户目录指/storage目录。

除系统目录与用户目录之外,用户可以自行创建文件夹进行设备的挂载。但是要注意,已挂载的文件夹及其子文件夹不允许重复或者嵌套挂载,非空文件夹不允许挂载。

信号

信号默认行为不支持STOP、CONTINUE、COREDUMP功能。

无法通过信号唤醒正在睡眠状态(举例:进程调用sleep函数进入睡眠)的进程。原因:信号机制无唤醒功能,当且仅当进程被CPU调度运行时才能处理信号内容。

进程退出后会发送SIGCHLD给父进程,发送动作无法取消。

信号仅支持1-30号信号,接收方收到多次同一信号,仅执行一次回调函数。

Time

OpenHarmony当前时间精度以tick计算,系统默认10ms/tick。sleep、timeout系列函数时间误差<=20ms。
编辑:hfy

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

    关注

    68

    文章

    10640

    浏览量

    208684
  • Linux
    +关注

    关注

    87

    文章

    11090

    浏览量

    207605
  • OpenHarmony
    +关注

    关注

    25

    文章

    3517

    浏览量

    15613
收藏 人收藏

    评论

    相关推荐

    stm32用hal标准什么区别

    stm32用hal 标准 什么 区别
    发表于07-20 08:20

    HAL标准的原理区别

    HAL 的学习HAL 标准 的原理 区别串口通信实验包含的文件 区别具体代码
    发表于07-29 08:48

    标准和HAL区别

    ,程序瘫痪了,所以今天咱们来看看 标准 和HAL 区别,各个 他的优点在哪里。
    发表于08-04 08:22

    CMSIS标准层次关系

    1、CMSIS 标准层次关系基于Context系列芯片采用的 内核都是相同的, 区别主要为核外的片上外设的差异,而这些差异却导致软件在同 内核
    发表于08-13 06:37

    STM32标准和HAL哪些不同

    STM32 标准 和HAL 哪些不同? 标准 和HAL
    发表于10-21 07:44

    STM32 HAL标准区别有哪些

    STM32的开发方式 哪几种?怎样去安装HAL 固件 呢?STM32 HAL 标准
    发表于10-25 07:49

    HAL标准哪些区别

    什么是HAL 标准 又是什么?HAL 标准
    发表于10-26 06:54

    请问STM32 HAL标准区别是什么?

    请问STM32 HAL 标准 区别是什么?
    发表于11-25 08:43

    STM32F103C8T6标准的USART2是怎样发送程序的

    STM32F103C8T6 标准 和STM32F4 标准
    发表于12-13 06:12

    OpenHarmony内核学习[1]--单独编译OpenHarmony标准系统内核

    OpenHarmony 标准系统类设备(参考内存≥128MiB), OpenHarmony选择 Linux 内核作为
    发表于02-03 10:46

    请问标准外设和HAL区别是什么?

    标准外设 和HAL 区别是什么?
    发表于10-23 08:01

    STM32标准改为HAL的程序实现

    标准 占绝大多数,自己买的板子跟的资料也一般是 标准 ,HAL 很少,不过要是使用STM32CubeMx配置,那么就是使用的HAL
    发表于11-22 11:23 3.4w次阅读

    STM32 HAL标准区别

      相比较早几年使用 标准 开发来讲,最近几年HAL 的使用是越来越多,那么我们开发应当使用哪一种呢,本文着重介绍常用的几种开发方式及相互之间的 区别,白猫也好、黑猫也好,抓到耗子就是好猫
    的头像 发表于03-22 09:13 1.4w次阅读

    总结移植三方OpenHarmony的经验

    三方 主要是基于 标准 Linux系统的 c/c++ 开源 ,所以三方 的移植工作,首先是在 标准
    的头像 发表于05-07 15:52 5588次阅读

    STM32 HAL的功能和使用方法 STM32 HAL标准区别

    和可维护性,从而节省开发成本和时间。STM32 HAL 是STM32系列芯片的HAL ,由ST公司提供和维护。下面将介绍STM32 HAL 的功能、使用方法以及与 标准
    发表于08-08 18:21 3504次阅读