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

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

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

如何對(duì)RT-Thread內(nèi)核有基本的了解?

lPCU_elecfans ? 來(lái)源:未知 ? 作者:肖冰 ? 2019-07-19 10:12 ? 次閱讀
內(nèi)核基礎(chǔ)

內(nèi)核的連載內(nèi)容包括 RT-Thread 內(nèi)核基礎(chǔ):內(nèi)核簡(jiǎn)介、系統(tǒng)的啟動(dòng)流程及內(nèi)核配置的部分內(nèi)容,以上內(nèi)容都是為后面的章節(jié)奠定基礎(chǔ)。本章內(nèi)容將分為3篇連載!

RT-Thread 內(nèi)核的簡(jiǎn)單介紹,從軟件架構(gòu)入手講解實(shí)時(shí)內(nèi)核的組成與實(shí)現(xiàn),這部分給初學(xué)者引入一些 RT-Thread 內(nèi)核相關(guān)的概念與基礎(chǔ)知識(shí),讓初學(xué)者對(duì)內(nèi)核有初步的了解。學(xué)完本章內(nèi)容以后,讀者將會(huì)對(duì) RT-Thread 內(nèi)核有基本的了解,知道內(nèi)核的組成部分、系統(tǒng)如何啟動(dòng)、內(nèi)存分布情況以及內(nèi)核配置方法。

RT-Thread 內(nèi)核介紹

內(nèi)核是操作系統(tǒng)最基礎(chǔ)也是最重要的部分。下圖為 RT-Thread 內(nèi)核架構(gòu)圖,內(nèi)核處于硬件層之上,內(nèi)核部分包括內(nèi)核庫(kù)、實(shí)時(shí)內(nèi)核實(shí)現(xiàn)。

內(nèi)核庫(kù)是為了保證內(nèi)核能夠獨(dú)立運(yùn)行的一套小型的類似 C 庫(kù)的函數(shù)實(shí)現(xiàn)子集。這部分根據(jù)編譯器的不同自帶 C 庫(kù)的情況也會(huì)有些不同,當(dāng)使用 GNU GCC 編譯器時(shí),會(huì)攜帶更多的標(biāo)準(zhǔn) C 庫(kù)實(shí)現(xiàn)。

實(shí)時(shí)內(nèi)核的實(shí)現(xiàn)包括:對(duì)象管理、線程管理及調(diào)度器、線程間通信管理、時(shí)鐘管理及內(nèi)存管理等等,內(nèi)核最小的資源占用情況是 3KB ROM,1.2KB RAM。

線程調(diào)度

線程是 RT-Thread 操作系統(tǒng)中最小的調(diào)度單位,線程調(diào)度算法是基于優(yōu)先級(jí)的全搶占式多線程調(diào)度算法,即在系統(tǒng)中除了中斷處理函數(shù)、調(diào)度器上鎖部分的代碼和禁止中斷的代碼是不可搶占的之外,系統(tǒng)的其他部分都是可以搶占的,包括線程調(diào)度器自身。支持 256 個(gè)線程優(yōu)先級(jí)(也可通過(guò)配置文件更改為最大支持 32 個(gè)或 8 個(gè)線程優(yōu)先級(jí),針對(duì) STM32 默認(rèn)配置是 32 個(gè)線程優(yōu)先級(jí)),0 優(yōu)先級(jí)代表最高優(yōu)先級(jí),最低優(yōu)先級(jí)留給空閑線程使用;同時(shí)它也支持創(chuàng)建多個(gè)具有相同優(yōu)先級(jí)的線程,相同優(yōu)先級(jí)的線程間采用時(shí)間片的輪轉(zhuǎn)調(diào)度算法進(jìn)行調(diào)度,使每個(gè)線程運(yùn)行相應(yīng)時(shí)間;另外調(diào)度器在尋找那些處于就緒狀態(tài)的具有最高優(yōu)先級(jí)的線程時(shí),所經(jīng)歷的時(shí)間是恒定的,系統(tǒng)也不限制線程數(shù)量的多少,線程數(shù)目只和硬件平臺(tái)的具體內(nèi)存相關(guān)。

線程管理將在后面的《線程管理》章節(jié)詳細(xì)介紹。

時(shí)鐘管理

RT-Thread 的時(shí)鐘管理以時(shí)鐘節(jié)拍為基礎(chǔ),時(shí)鐘節(jié)拍是 RT-Thread 操作系統(tǒng)中最小的時(shí)鐘單位。RT-Thread 的定時(shí)器提供兩類定時(shí)器機(jī)制:第一類是單次觸發(fā)定時(shí)器,這類定時(shí)器在啟動(dòng)后只會(huì)觸發(fā)一次定時(shí)器事件,然后定時(shí)器自動(dòng)停止。第二類是周期觸發(fā)定時(shí)器,這類定時(shí)器會(huì)周期性的觸發(fā)定時(shí)器事件,直到用戶手動(dòng)的停止定時(shí)器否則將永遠(yuǎn)持續(xù)執(zhí)行下去。

另外,根據(jù)超時(shí)函數(shù)執(zhí)行時(shí)所處的上下文環(huán)境,RT-Thread 的定時(shí)器可以設(shè)置為 HARD_TIMER 模式或者 SOFT_TIMER 模式。

通常使用定時(shí)器定時(shí)回調(diào)函數(shù)(即超時(shí)函數(shù)),完成定時(shí)服務(wù)。用戶根據(jù)自己對(duì)定時(shí)處理的實(shí)時(shí)性要求選擇合適類型的定時(shí)器。

定時(shí)器將在后面的《時(shí)鐘管理》章節(jié)展開(kāi)講解。

線程間同步

RT-Thread 采用信號(hào)量、互斥量與事件集實(shí)現(xiàn)線程間同步。線程通過(guò)對(duì)信號(hào)量、互斥量的獲取與釋放進(jìn)行同步;互斥量采用優(yōu)先級(jí)繼承的方式解決了實(shí)時(shí)系統(tǒng)常見(jiàn)的優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題。線程同步機(jī)制支持線程按優(yōu)先級(jí)等待或按先進(jìn)先出方式獲取信號(hào)量或互斥量。線程通過(guò)對(duì)事件的發(fā)送與接收進(jìn)行同步;事件集支持多事件的 “或觸發(fā)” 和“與觸發(fā)”,適合于線程等待多個(gè)事件的情況。

信號(hào)量、互斥量與事件集的概念將在后面的《線程間同步》章節(jié)詳細(xì)介紹。

線程間通信

RT-Thread 支持郵箱和消息隊(duì)列等通信機(jī)制。郵箱中一封郵件的長(zhǎng)度固定為 4 字節(jié)大??;消息隊(duì)列能夠接收不固定長(zhǎng)度的消息,并把消息緩存在自己的內(nèi)存空間中。郵箱效率較消息隊(duì)列更為高效。郵箱和消息隊(duì)列的發(fā)送動(dòng)作可安全用于中斷服務(wù)例程中。通信機(jī)制支持線程按優(yōu)先級(jí)等待或按先進(jìn)先出方式獲取。

郵箱和消息隊(duì)列的概念將在后面的《線程間通信》章節(jié)詳細(xì)介紹。

內(nèi)存管理

RT-Thread 支持靜態(tài)內(nèi)存池管理及動(dòng)態(tài)內(nèi)存堆管理。當(dāng)靜態(tài)內(nèi)存池具有可用內(nèi)存時(shí),系統(tǒng)對(duì)內(nèi)存塊分配的時(shí)間將是恒定的;當(dāng)靜態(tài)內(nèi)存池為空時(shí),系統(tǒng)將申請(qǐng)內(nèi)存塊的線程掛起或阻塞掉 (即線程等待一段時(shí)間后仍未獲得內(nèi)存塊就放棄申請(qǐng)并返回,或者立刻返回。等待的時(shí)間取決于申請(qǐng)內(nèi)存塊時(shí)設(shè)置的等待時(shí)間參數(shù)),當(dāng)其他線程釋放內(nèi)存塊到內(nèi)存池時(shí),如果有掛起的待分配內(nèi)存塊的線程存在的話,則系統(tǒng)會(huì)將這個(gè)線程喚醒。

動(dòng)態(tài)內(nèi)存堆管理模塊在系統(tǒng)資源不同的情況下,分別提供了面向小內(nèi)存系統(tǒng)的內(nèi)存管理算法及面向大內(nèi)存系統(tǒng)的SLAB 內(nèi)存管理算法。福利:在電子發(fā)燒友網(wǎng)公眾號(hào)回復(fù)資料,免費(fèi)領(lǐng)取一份模電資料集

還有一種動(dòng)態(tài)內(nèi)存堆管理叫做 memheap,適用于系統(tǒng)含有多個(gè)地址可不連續(xù)的內(nèi)存堆。使用 memheap 可以將多個(gè)內(nèi)存堆 “粘貼” 在一起,讓用戶操作起來(lái)像是在操作一個(gè)內(nèi)存堆。

內(nèi)存管理的概念將在后面的《內(nèi)存管理》章節(jié)展開(kāi)講解。

I/O 設(shè)備管理

RT-Thread 將 PIN、I2C、SPI、USB、UART 等作為外設(shè)設(shè)備,統(tǒng)一通過(guò)設(shè)備注冊(cè)完成。實(shí)現(xiàn)了按名稱訪問(wèn)的設(shè)備管理子系統(tǒng),可按照統(tǒng)一的 API 界面訪問(wèn)硬件設(shè)備。在設(shè)備驅(qū)動(dòng)接口上,根據(jù)嵌入式系統(tǒng)的特點(diǎn),對(duì)不同的設(shè)備可以掛接相應(yīng)的事件。當(dāng)設(shè)備事件觸發(fā)時(shí),由驅(qū)動(dòng)程序通知給上層的應(yīng)用程序。

I/O 設(shè)備管理的概念將在后面的《設(shè)備模型》及《通用設(shè)備》章節(jié)展開(kāi)講解。

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

    關(guān)注

    2909

    文章

    44635

    瀏覽量

    373364
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10900

    瀏覽量

    356008
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1289

    瀏覽量

    40129

原文標(biāo)題:從0-1帶你入門(mén)物聯(lián)網(wǎng)操作系統(tǒng)(3)——內(nèi)核介紹

文章出處:【微信號(hào):elecfans,微信公眾號(hào):電子發(fā)燒友網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread記錄(二、RT-Thread內(nèi)核啟動(dòng)流程)

    在前面我們RT-Thread Studio工程基礎(chǔ)之上講一講RT-Thread內(nèi)核啟動(dòng)流程.
    的頭像 發(fā)表于 06-20 00:30 ?5037次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(二、<b class='flag-5'>RT-Thread</b><b class='flag-5'>內(nèi)核</b>啟動(dòng)流程)

    RT-Thread內(nèi)核對(duì)象管理介紹

    繼續(xù)研究RT-Thread 最基礎(chǔ),最重要的概念:內(nèi)核對(duì)象。
    發(fā)表于 06-02 09:48 ?425次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>內(nèi)核</b>對(duì)象管理介紹

    16天入門(mén)RT-Thread內(nèi)核,快速上手無(wú)壓力!

    內(nèi)核的組成與實(shí)現(xiàn),這部分給初學(xué)者引入一些 RT-Thread 內(nèi)核相關(guān)的概念與基礎(chǔ)知識(shí),讓初學(xué)者對(duì)內(nèi)核初步的
    發(fā)表于 08-20 16:39

    RT-Thread快速入門(mén)之了解內(nèi)核啟動(dòng)流程

    1、了解RT-Thread內(nèi)核的啟動(dòng)流程  內(nèi)核是操作系統(tǒng)最基礎(chǔ)也是最重要的部分。從本文開(kāi)始進(jìn)入 RT-Thread
    發(fā)表于 09-05 17:01

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 理解defunct僵尸線程

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)
    發(fā)表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>內(nèi)核</b>學(xué)習(xí)筆記 - 理解defunct僵尸線程

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 設(shè)備模型rt_device的理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)
    發(fā)表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>內(nèi)核</b>學(xué)習(xí)筆記 - 設(shè)備模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象鏈表結(jié)構(gòu)深入理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)
    發(fā)表于 01-25 18:23 ?6次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>內(nèi)核</b>學(xué)習(xí)筆記 - <b class='flag-5'>內(nèi)核</b>對(duì)象鏈表結(jié)構(gòu)深入理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象初始化鏈表組織方式

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)
    發(fā)表于 01-25 18:24 ?3次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>內(nèi)核</b>學(xué)習(xí)筆記 - <b class='flag-5'>內(nèi)核</b>對(duì)象初始化鏈表組織方式

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象操作API

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)
    發(fā)表于 01-25 18:26 ?7次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>內(nèi)核</b>學(xué)習(xí)筆記 - <b class='flag-5'>內(nèi)核</b>對(duì)象操作API

    大佬帶你理解RT-Thread內(nèi)核并上手實(shí)踐

    內(nèi)核是操作系統(tǒng)最重要的部分,學(xué)習(xí)RT-Thread也是從最基本的內(nèi)核開(kāi)始。 ? RT-Thread內(nèi)核要怎么學(xué)?編者覺(jué)得首先應(yīng)該是從軟件架構(gòu)
    發(fā)表于 06-30 17:10 ?1260次閱讀

    RT-Thread文檔_內(nèi)核基礎(chǔ)

    RT-Thread文檔_內(nèi)核基礎(chǔ)
    發(fā)表于 02-22 18:28 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>內(nèi)核</b>基礎(chǔ)

    RT-Thread文檔_內(nèi)核移植

    RT-Thread文檔_內(nèi)核移植
    發(fā)表于 02-22 18:31 ?3次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>內(nèi)核</b>移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    如何深入理解RT-Thread內(nèi)核并上手實(shí)踐,看完這篇答案了!

    內(nèi)核是操作系統(tǒng)最重要的部分,學(xué)習(xí)RT-Thread也是從最基本的內(nèi)核開(kāi)始。RT-Thread內(nèi)核要怎么學(xué)?編者覺(jué)得首先應(yīng)該是從軟件架構(gòu)入手,
    的頭像 發(fā)表于 06-27 09:36 ?2493次閱讀
    如何深入理解<b class='flag-5'>RT-Thread</b><b class='flag-5'>內(nèi)核</b>并上手實(shí)踐,看完這篇<b class='flag-5'>有</b>答案了!

    RT-Thread v5.0.2 發(fā)布

    ://github.com/RT-Thread/rt-thread/releases/tag/v5.0.2 RT-Thread 迎來(lái)了全新的版本 v5.0.2,自 v5.0.0?版本發(fā)布以來(lái),
    的頭像 發(fā)表于 10-10 18:45 ?1494次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發(fā)布