0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony內(nèi)核標(biāo)準(zhǔn)庫(kù)與Linux標(biāo)準(zhǔn)庫(kù)有何區(qū)別

鴻蒙系統(tǒng)HarmonyOS ? 來源:oschina ? 作者:恰飯君 ? 2020-10-21 14:41 ? 次閱讀

本文描述了 OpenHarmony 內(nèi)核承載的標(biāo)準(zhǔn)庫(kù)與 Linux 標(biāo)準(zhǔn)庫(kù)之間存在的關(guān)鍵差異。

進(jìn)程

OpenHarmony 用戶態(tài)進(jìn)程優(yōu)先級(jí)只支持靜態(tài)優(yōu)先級(jí)且用戶態(tài)可配置的優(yōu)先級(jí)范圍為10(最高優(yōu)先級(jí))-31(最低優(yōu)先級(jí))。

OpenHarmony 用戶態(tài)線程優(yōu)先級(jí)只支持靜態(tài)優(yōu)先級(jí)且用戶態(tài)可配置的優(yōu)先級(jí)范圍為0(最高優(yōu)先級(jí))-31(最低優(yōu)先級(jí))。

OpenHarmony 調(diào)度策略支持 SCHED_RR 和 SCHED_FIFO。

sched_yield() 為進(jìn)程主動(dòng)放棄 CPU;thrd_yield() 為線程主動(dòng)放棄 CPU。

內(nèi)存

與 Linux mmap 的差異

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

其中,參數(shù)fd的生命周期實(shí)現(xiàn)與Linux glibc存在差異。具體體現(xiàn)在,glibc在成功調(diào)用mmap進(jìn)行映射后,可以立即釋放fd句柄。在OpenHarmony內(nèi)核中,不允許用戶在映射成功后立即關(guān)閉相關(guān)fd,只允許在取消映射munmap后再進(jìn)行fd的close操作。如果用戶不進(jìn)行fd的close操作,操作系統(tǒng)將在進(jìn)程退出時(shí)對(duì)該fd進(jìn)行回收。

代碼舉例

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);
}

文件系統(tǒng)

**系統(tǒng)目錄:**用戶無法對(duì)其進(jìn)行修改,或是設(shè)備掛載。包含/dev,/proc,/app,/bin,/data,/etc,/lib,/system,/usr目錄。

用戶目錄:用戶可以在該目錄下進(jìn)行文件創(chuàng)建、讀寫,但不能進(jìn)行設(shè)備掛載。用戶目錄指/storage目錄。

除系統(tǒng)目錄與用戶目錄之外,用戶可以自行創(chuàng)建文件夾進(jìn)行設(shè)備的掛載。但是要注意,已掛載的文件夾及其子文件夾不允許重復(fù)或者嵌套掛載,非空文件夾不允許掛載。

信號(hào)

信號(hào)默認(rèn)行為不支持STOP、CONTINUE、COREDUMP功能。

無法通過信號(hào)喚醒正在睡眠狀態(tài)(舉例:進(jìn)程調(diào)用sleep函數(shù)進(jìn)入睡眠)的進(jìn)程。原因:信號(hào)機(jī)制無喚醒功能,當(dāng)且僅當(dāng)進(jìn)程被CPU調(diào)度運(yùn)行時(shí)才能處理信號(hào)內(nèi)容。

進(jìn)程退出后會(huì)發(fā)送SIGCHLD給父進(jìn)程,發(fā)送動(dòng)作無法取消。

信號(hào)僅支持1-30號(hào)信號(hào),接收方收到多次同一信號(hào),僅執(zhí)行一次回調(diào)函數(shù)。

Time

OpenHarmony當(dāng)前時(shí)間精度以tick計(jì)算,系統(tǒng)默認(rèn)10ms/tick。sleep、timeout系列函數(shù)時(shí)間誤差<=20ms。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10863

    瀏覽量

    211760
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209496
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16317
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    stm32用hal庫(kù)標(biāo)準(zhǔn)庫(kù)什么區(qū)別

    stm32用hal庫(kù)標(biāo)準(zhǔn)庫(kù)什么區(qū)別
    發(fā)表于 07-20 08:20

    HAL庫(kù)標(biāo)準(zhǔn)庫(kù)的原理區(qū)別

    HAL庫(kù)的學(xué)習(xí)HAL庫(kù)標(biāo)準(zhǔn)庫(kù)的原理區(qū)別串口通信實(shí)驗(yàn)包含的文件區(qū)別具體代碼
    發(fā)表于 07-29 08:48

    標(biāo)準(zhǔn)庫(kù)和HAL庫(kù)區(qū)別

    ,程序癱瘓了,所以今天咱們來看看標(biāo)準(zhǔn)庫(kù)和HAL庫(kù)區(qū)別,各個(gè)庫(kù)他的優(yōu)點(diǎn)在哪里。
    發(fā)表于 08-04 08:22

    CMSIS標(biāo)準(zhǔn)庫(kù)層次關(guān)系

    1、CMSIS標(biāo)準(zhǔn)庫(kù)層次關(guān)系基于Context系列芯片采用的內(nèi)核都是相同的,區(qū)別主要為核外的片上外設(shè)的差異,而這些差異卻導(dǎo)致軟件在同內(nèi)核、
    發(fā)表于 08-13 06:37

    STM32標(biāo)準(zhǔn)庫(kù)和HAL庫(kù)哪些不同

    STM32標(biāo)準(zhǔn)庫(kù)和HAL庫(kù)哪些不同?標(biāo)準(zhǔn)庫(kù)和HAL庫(kù)
    發(fā)表于 10-21 07:44

    STM32 HAL庫(kù)標(biāo)準(zhǔn)庫(kù)區(qū)別有哪些

    STM32的開發(fā)方式哪幾種?怎樣去安裝HAL庫(kù)固件庫(kù)呢?STM32 HAL庫(kù)標(biāo)準(zhǔn)庫(kù)
    發(fā)表于 10-25 07:49

    HAL庫(kù)標(biāo)準(zhǔn)庫(kù)哪些區(qū)別

    什么是HAL庫(kù)?標(biāo)準(zhǔn)庫(kù)又是什么?HAL庫(kù)標(biāo)準(zhǔn)庫(kù)
    發(fā)表于 10-26 06:54

    請(qǐng)問STM32 HAL庫(kù)標(biāo)準(zhǔn)庫(kù)區(qū)別是什么?

    請(qǐng)問STM32 HAL庫(kù)標(biāo)準(zhǔn)庫(kù)區(qū)別是什么?
    發(fā)表于 11-25 08:43

    STM32F103C8T6標(biāo)準(zhǔn)庫(kù)的USART2是怎樣發(fā)送程序的

    STM32F103C8T6標(biāo)準(zhǔn)庫(kù)和STM32F4標(biāo)準(zhǔn)庫(kù)區(qū)
    發(fā)表于 12-13 06:12

    OpenHarmony內(nèi)核學(xué)習(xí)[1]--單獨(dú)編譯OpenHarmony標(biāo)準(zhǔn)系統(tǒng)內(nèi)核

    OpenHarmony標(biāo)準(zhǔn)系統(tǒng)類設(shè)備(參考內(nèi)存≥128MiB),OpenHarmony選擇Linux內(nèi)核作為
    發(fā)表于 02-03 10:46

    請(qǐng)問標(biāo)準(zhǔn)外設(shè)庫(kù)和HAL庫(kù)區(qū)別是什么?

    標(biāo)準(zhǔn)外設(shè)庫(kù)和HAL庫(kù)區(qū)別是什么?
    發(fā)表于 10-23 08:01

    STM32 HAL庫(kù)標(biāo)準(zhǔn)庫(kù)區(qū)別

    ??相比較早幾年使用標(biāo)準(zhǔn)庫(kù)開發(fā)來講,最近幾年HAL庫(kù)的使用是越來越多,那么我們開發(fā)應(yīng)當(dāng)使用哪一種呢,本文著重介紹常用的幾種開發(fā)方式及相互之間的區(qū)別,白貓也好、黑貓也好,抓到耗子就是好貓
    的頭像 發(fā)表于 03-22 09:13 ?1.5w次閱讀

    總結(jié)移植三方庫(kù)OpenHarmony的經(jīng)驗(yàn)

    三方庫(kù)主要是基于標(biāo)準(zhǔn) Linux 系統(tǒng)的 c/c++ 開源庫(kù),所以三方庫(kù)的移植工作,首先是在標(biāo)準(zhǔn)
    的頭像 發(fā)表于 05-07 15:52 ?6318次閱讀

    STM32 HAL庫(kù)的功能和使用方法 STM32 HAL庫(kù)標(biāo)準(zhǔn)庫(kù)區(qū)別

    和可維護(hù)性,從而節(jié)省開發(fā)成本和時(shí)間。STM32 HAL庫(kù)是STM32系列芯片的HAL庫(kù),由ST公司提供和維護(hù)。下面將介紹STM32 HAL庫(kù)的功能、使用方法以及與標(biāo)準(zhǔn)
    發(fā)表于 08-08 18:21 ?4431次閱讀

    HAL庫(kù)標(biāo)準(zhǔn)庫(kù)區(qū)別 HAL庫(kù)與CMSIS的關(guān)系

    在嵌入式系統(tǒng)開發(fā)中,HAL(硬件抽象層)庫(kù)標(biāo)準(zhǔn)庫(kù)是兩種常用的軟件庫(kù),它們?cè)诠δ芎褪褂脠?chǎng)景上有所不同。 1. 標(biāo)準(zhǔn)
    的頭像 發(fā)表于 12-02 14:02 ?619次閱讀