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

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

    关注

    68

    文章

    10335

    浏览量

    206226
  • Linux
    +关注

    关注

    87

    文章

    10942

    浏览量

    206543
  • OpenHarmony
    +关注

    关注

    23

    文章

    3104

    浏览量

    15121
收藏 人收藏

    评论

    相关推荐

    请问stm32使用微和使用标准具体什么差别?

    请问stm32使用微和使用标准具体什么差别?改写fputc函数是怎么回事?
    发表于 09-12 00:16

    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

    stm32标准工程的组织结构和各个文件功能简析

    stm32标准工程的组织结构是怎样构成的?stm32标准的各个文件功能呢?
    发表于 11-26 07:23

    探讨一下CMSIS标准层次关系

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

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

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

    STM32 HAL标准区别在哪

    最近笔者开始学习STM32的HAL,由于以前一直用标准进行开发,于是发现了HAL几点好玩的地方,在此分享。1.句柄在STM32的标准
    发表于 02-15 07:03

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

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

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

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