鸿蒙内核标准库与 Linux 标准库的差异

原创
09/10 22:52
阅读数 2.8W

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

进程

  1. OpenHarmony 用户态进程优先级只支持静态优先级且用户态可配置的优先级范围为10(最高优先级)-31(最低优先级)。
  2. OpenHarmony 用户态线程优先级只支持静态优先级且用户态可配置的优先级范围为0(最高优先级)-31(最低优先级)。
  3. OpenHarmony 调度策略支持 SCHED_RR 和 SCHED_FIFO。
  4. 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。

 

更多详情请查看:点击查看

展开阅读全文
打赏
10
3 收藏
分享
加载中
我看你吹的倒是很不错啊,让你说点有用的,讲半天也没看到什么干货,上百万用户啧啧,你又不说是什么产品,吹的倒是很厉害,告诉你我公司眼瞎不瞎我不知道,但我知道的是你的眼睛可能确实是瞎了,对飙代码你想飙什么,你说的,来你来开个头,我倒要看看你能飙出什么东西
09/15 06:20
回复
举报
文章写得不好,你讲讲为啥是这样嘛,有什么好处,牺牲了什么之类的
09/11 16:10
回复
举报
这世界不管做不做都有人喷,就是这样
09/11 15:55
回复
举报
说实在的有些东西不能吹的太过,还是实干出真知,你看谷歌的fuchsia什么时候像华为这样大肆宣传的,何况华为的还是半成品
09/11 15:24
回复
举报
这玩意,好用就用,不好用就拉倒,反正我写不出来,也没怎么期待崇拜(no care),再怎么吹,贬都没有意义 等市场来说明。
09/11 11:19
回复
举报
我是为广大技术人员被这帮画饼的忽悠团团转 愤不平 希望大家能擦亮双眼 yunos是另一个当年吹自主研发的系统 阿里搞得 现在也没了下文
09/11 10:52
回复
举报
很正常,看好的人就去搞,反正源码、IDE、文档啥都有;不看好的人就继续吃瓜看戏,该干嘛干嘛。见仁见智。
09/11 12:25
回复
举报
yunos,人家阿里有在用,只不过你不知他是yunos
09/11 15:55
回复
举报
有啥用,到时候客服还不是引导你们刷机,引导你们怎么装盗版windows
09/11 09:02
回复
举报
这玩意就是一个修改版的unix系统,目录结构都一样的,别洗了
09/10 23:53
回复
举报
难道Android和iOS跟LINUX系统不一样? 无知
09/11 00:17
回复
举报
呵呵 就是山寨货 为要说完全自主原创 恶心
09/11 04:59
回复
举报
美国佬也会借鉴中国的东西,何必妄自菲薄呢?
09/11 08:03
回复
举报
喷子可不管你那些,别人造了四个轮子的汽车,你造四个轮就是山寨
09/11 08:20
回复
举报
专利分三种,外观专利,实用新型和发明创造。你看看哪个适合四个轮子
09/11 09:15
回复
举报
回复 @一个大土豆 : 不杠,谢谢
09/11 10:09
回复
举报
回复 @一个大土豆 : 你是瞧不起轮子?轮子是人类历史上第一个重要发明,第二是马蹬,懂不懂人类历史?
09/11 12:29
回复
举报
说话不带脑子的,unix是微内核的?意思就是中国造汽车不能有方向盘和四个轮子了?
09/11 09:40
回复
举报
unix的mach内核 l4都是微内核,这就是我没有说linux的原因 linux是宏内核 我不是故意要喷 而是太让人失望了 吹的神乎其神 结果就这? 他画饼一直可以的 这样搞和阿里的yunos有什么区别 ?太高估华为的实力了
09/11 10:32
回复
举报
你前面说鸿蒙和LINUX目录结构都一样,所以鸿蒙是个LINUX修改版,请你告诉我LINUX的目录结构与UNIX是不是一样的?
09/11 12:33
回复
举报
正是因为一样所以才没有意义,只是又多了一个发行版,就这还号称国产救星?中国操作系统?完全自主原创?重复造轮子,中国现在需要的是重新发明轮子,走别人老路我为什么不用别人的更好的呢?
09/11 20:23
回复
举报
按你这逻辑Android和iOS就不该存在呀
09/11 21:40
回复
举报
回复 @AndersMichael : 立场不同啊,你自己看看鸿蒙多少媒体怎么吹怎么吹,官方怎么说怎么说,神乎其神,搞得好像就是一场革命一样,雷声大雨点小,不踏实做实事,只会吹,中国为什么搞不起来就是因为社会太浮躁了,没有专心做事实的,看不下去说两句
09/11 22:10
回复
举报
你这说就是纯扯蛋,塞班还有c盘e盘,目录跟windows也差不多,也有exe、dll文件,按照你那样扯塞班跟windows能搅一块了?能正常点么,你源码不看光凭一个目录就无脑下结论,你觉得有啥意思。
09/11 16:45
回复
举报
塞班内核就是epoc32,类似os/2的内核,windows前身就是这个内核,像是理所当然的,鸿蒙不是不行,而是吹的神乎其神,笑死人 能不能有点创新。就这还号称完全自主的防止美国制裁的东西?
09/11 20:16
回复
举报
你还真的能胡扯,epoc与os/2都能让你扯成这样,你不去当编剧可惜了,两个两个闭源的系统,一个微内核一个宏内核,你在这里说像是理所当然,真的是驰名双标,稍微有点认知的人都不会下这种结论,鸿蒙行不行我不知道,但是你无脑是肯定,你觉得鸿蒙不行倒是把代码读了对比unix指出那些地方不行啊,让我们学习一下,别能写个helloworld就来指点江山。
09/12 04:17
回复
举报
回复 @nothingkill : 笑话,这两个系统的设计理念本来就是类似的,而且epoc在设计上还借鉴了dos,自己无知不要在这丢人现眼好吗?果然喷子就是厉害,大家都有话语权,我说的都是事实,你喷我没有用的。
09/12 08:10
回复
举报
回复 @WindSpeed : 回复 @WindSpeed : 你这人什么都不懂,脸皮倒是挺厚的,这时候两个系统设计理念就是类似了?按照你的逻辑塞班就是一个修改版的windows了,还有谁跟你说epoc设计是借鉴dos的,symbian源码现在还有,麻烦你去看一下代码再来编好么,说话不要脸到你这种程度也是可以了,你说你哪里说的事实,我就问你,你熟读了unix系统代码了,symbian和windows内核代码你都读过了,鸿蒙代码公开一两天你就看完了?张口就来,让你从技术上指出鸿蒙怎么不行你就装哑巴了,你真有本事在这里发几篇文章深度剖析一下鸿蒙为什么是修改版的unix,最好是连载,让我们大家学习一下,别连个代码看不懂跑到这里来装,跟个无头苍蝇一样到处喷。
09/12 14:27
回复
举报
回复 @nothingkill : 笑话,无知还自以为是说的就是你吧,你自己去看看为什么塞班和windows很像的原因,epoc就是借鉴的dos系统,而且当年的设计理念就是类似os/2,windows的前身也是它,macos也是借鉴的freebsd,linux就是借鉴的unix,有什么问题吗,鸿蒙先不说是不是修改版的unix,从系统结构上看就是借鉴了unix的设计,毫无新意,这种程度就别吹什么完全自主了,笑死人,还有你别回复我了,说了你也听不懂,自己不去看看我说的对不对,在这里装什么?我不会理你了,浪费口舌,对牛弹琴。
09/12 19:19
回复
举报
回复 @WindSpeed : 你除了扯还能说半点有用的么,让你写几篇文章发出来你倒是写啊,别再那编历史好吗,扯了半天就是你什么都不懂,除了会装,我05年就做塞班开发了,OS源码我读过,你要有能力可以来对飚代码,别扯什么说了我听也听不懂的话来掩饰,我倒希望说点我听不懂的啊,把源码分析写出来,弄点干货,你光百度点东西在这里给我编不管用,我觉得你查资料别用百度了去看一下wiki不会闹笑话,对你编故事更有用一点。
09/14 08:44
回复
举报
回复 @nothingkill : 05年做塞班开发,os源码你读过,喔唷好厉害,看一看然后就关了吧?写的helloworld?跟你说了你听不懂不信邪,编?我说的都是实话,你要有点本事说点干货啊,强词夺理倒是有一套,我看你也就在这里装一会了,我不懂我会做项目经理?笑话
09/14 09:53
回复
举报
回复 @WindSpeed : 塞班我做过的软件再差当年有上百万的用户,你要有胆量,来对飙代码就行了,在这里创建一个仓库,别躲在那光靠嘴遁,让你分析一下写点有用的东西出来你就装傻了?强词夺理这个词不是你上面一直在做的么?看个目录就知道鸿蒙是修改的unix了,你不是挺厉害的么,就你这样的还能当项目经理?那家公司这么眼瞎,招了个光会整天吹水的,最重要的是吹的是不害臊。
09/14 15:19
回复
举报
华为:鸿蒙前期基于开源项目,内核包含liteOS和Linux两种,后期逐步替换为自研微内核。同时公布了时间线! 喷子:全家都瞎,基因问题,看不见你说的包含Linux内核。你就是不承认自己基于Linux内核!
09/11 10:39
回复
举报
为什么删除评论 怕自己喷别人被人看到了?看来看去只有你在这喷
09/11 11:51
回复
举报
为什么这个世界上这么多缺脑子的人,这种人还是不要生孩子的好,少生优生吧!你看看作为普通用户的你有权限删除评论吗?
09/11 13:44
回复
举报
呵呵,你不能删 总有人能删,谁知道呢,也有可能是你在这喷 被管理员删了
09/11 20:12
回复
举报
你的也被删了😂呀!而且你还诬陷我删评论,厉害!
09/14 09:37
回复
举报
回复 @酸奶瓶盖儿 : 呵呵 你的删了 我下面的不也就没了 笨
09/14 09:56
回复
举报
回复 @WindSpeed : 这个借口不错
09/14 10:00
回复
举报
回复 @酸奶瓶盖儿 : 那你也很棒棒哦
09/14 10:16
回复
举报
更多评论
打赏
41 评论
3 收藏
10
分享
返回顶部
顶部