99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

RT-Thread操作系統(tǒng)的調(diào)度設計原理

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RT-Thread ? 作者:RT-Thread ? 2020-09-02 14:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

要想使用好RTOS,做出更加穩(wěn)定可靠的產(chǎn)品,必須非常清楚底層的調(diào)度原理。由于RTOS的實時性與可控性,所以只有了解了其核心部分的設計思想,才能用起來得心應手,游刃有余。本文從RT-Thread的調(diào)度器設計的運行方式上解釋一下調(diào)度器的行為,從而更加深刻的理解RT-Thread操作系統(tǒng)的調(diào)度時機。

1.調(diào)度是什么?

調(diào)度一般就是合理的安排、協(xié)調(diào)資源,統(tǒng)一指揮去完成一件事,而在操作系統(tǒng)中,線程調(diào)度就是有多個就緒優(yōu)先級的任務,找到最高優(yōu)先級任務,交給CPU去運行。

RT-Thread調(diào)度器就是起到判決線程當前的優(yōu)先級,然后選擇當前系統(tǒng)中最高優(yōu)先級的就緒態(tài)的線程交給CPU去管理。

調(diào)度又可以細分為兩種。可打斷調(diào)度:關鍵防止優(yōu)先級倒置;不可打斷調(diào)度:先來先服務,不可中斷。RT-Thread 屬于實時操作系統(tǒng),所以其調(diào)度器實現(xiàn)的是可打斷的調(diào)度,當有更高優(yōu)先級的線程或者更重要的任務就行,則可以打斷當前任務的執(zhí)行狀態(tài),去執(zhí)行優(yōu)先級更高的任務。那么此時,調(diào)度的時機就非常的關鍵了。

2.調(diào)度怎么實現(xiàn)?

RT-Thread在創(chuàng)建任務的時候,會指定任務的優(yōu)先級,一般來說,每個任務都有自己特定的唯一的優(yōu)先級。所以內(nèi)核線程對象中有不同的優(yōu)先級的任務列表。

如果最大指定為32個優(yōu)先級,那么可以用32位數(shù)據(jù)類型表示,每一個bit表示一個優(yōu)先級就緒的狀態(tài)。使用位圖的優(yōu)點就是速度快,而且內(nèi)存占用小。

一般來說,調(diào)度去找到最高優(yōu)先級的任務時,就需要去做判斷。如何去找到最高優(yōu)先級的任務。一般來說,有兩種辦法:

軟件計算

硬件計算

這兩種的差別僅僅在于計算效率的問題,本質(zhì)目的并無差別。

而用軟件計算方法尋找最高優(yōu)先級有兩種實現(xiàn)的策略:

1.遍歷就緒的隊列,找到最小的優(yōu)先級就緒的隊列,尋找的時間不確定,時間復雜度O(n)。

2.采用空間換時間的辦法,事先做好一個bitmap

例如系統(tǒng)中最大有8個優(yōu)先級,那么bitmap如下:

 1constrt_uint8_t__lowest_bit_bitmap[]=
 2{
 3/*00*/0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 4/*10*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 5/*20*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 6/*30*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 7/*40*/6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 8/*50*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 9/*60*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
10/*70*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
11/*80*/7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
12/*90*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
13/*A0*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
14/*B0*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
15/*C0*/6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
16/*D0*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
17/*E0*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
18/*F0*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0
19};
一般每一位代表一個就緒的狀態(tài),所以__rt_ffs程序的設計如下
 1int__rt_ffs(intvalue)
 2{
 3if(value==0)return0;
 4
 5if(value&0xff)
 6return__lowest_bit_bitmap[value&0xff]+1;
 7
 8if(value&0xff00)
 9return__lowest_bit_bitmap[(value&0xff00)>>8]+9;
10
11if(value&0xff0000)
12return__lowest_bit_bitmap[(value&0xff0000)>>16]+17;
13
14return__lowest_bit_bitmap[(value&0xff000000)>>24]+25;
15}

如果當前系統(tǒng)的線程狀態(tài)為0b0110 0000,那么轉換成十六進制就是0x60,根據(jù)表中的狀態(tài)此時的最高優(yōu)先級是5+1=6。所以可以得出系統(tǒng)的優(yōu)先級,此時計算的復雜度為O(1)。

雖然RT-Thread 是支持同等優(yōu)先級的,但是在具體的業(yè)務邏輯的設計中,在使用RTOS常用的設計方法中,一般都是要求程序的運行邏輯是可預測的,就是在程序執(zhí)行的過程中,可以預測到程序下一步的動作。所以rtos中同等優(yōu)先級,按照時間片輪訓的這種方式設計業(yè)務邏輯的情況并不多。使用相同優(yōu)先級會增加系統(tǒng)的業(yè)務邏輯的復雜性。

3.什么時候系統(tǒng)做調(diào)度?

RT-Thread 是搶占式的系統(tǒng)調(diào)用,所以系統(tǒng)什么時候去做的調(diào)度非常的關鍵。系統(tǒng)調(diào)度行為具體又分為主動調(diào)度和被動調(diào)度兩種。

3.1 任務主動block

當A線程在正常運行時,主動放棄CPU的使用權,比如去執(zhí)行rt_thread_delay或者等待一個IPC消息時,當前線程會主動放棄CPU資源,此時去系統(tǒng)中尋找已經(jīng)就緒的最高優(yōu)先級的線程進行調(diào)度。

這種方式應用的場景比較豐富,比如當前線程沒有獲取到資源時,需讓出CPU的使用權,或者事情做完了,主動讓出CPU的使用權,這就是系統(tǒng)做調(diào)度的時機。

A線程的優(yōu)先級要高于B線程的優(yōu)先級,所以在A放棄CPU使用權后,已經(jīng)就緒的最高優(yōu)先級線程B就開始執(zhí)行了。

3.2 被更高優(yōu)先級的任務喚醒

這種方式就是當比當前運行線程的優(yōu)先級高的線程處于就緒態(tài)時,高優(yōu)先級的就緒態(tài)線程會被喚醒,低優(yōu)先級線程將暫停運行,此時會調(diào)度到比當前線程更高的優(yōu)先級線程中去。

按照理解A線程是正在運行的線程,此時更高任務優(yōu)先級的線程C就緒處于就緒狀態(tài)了。比如創(chuàng)建了一個比A優(yōu)先級更高的C進程,并startup C線程,此時會執(zhí)行rt_schedule()將線程切換到優(yōu)先級更高的C線程。此時A線程運行狀態(tài)以及處理器寄存器狀態(tài)壓棧,更高優(yōu)先級的C線程的狀態(tài)以及處理器寄存器狀態(tài)出棧,并且開始運行C線程。

3.3 yield放棄cpu使用

首先理解一下什么是yield,解釋成讓出,放棄比較合理。該出讓只針對于同等優(yōu)先級的線程。

這種情況只適用于A線程的優(yōu)先級等于B線程的優(yōu)先級的情況。因為RTT支持同等優(yōu)先級的方式創(chuàng)建線程,相同的優(yōu)先級的切換是靠時間片輪詢來進行的。所以,當A線程正常運行的時候,如果執(zhí)行了yield函數(shù),那么只相當于將A線程的時間片消耗完,此時同等優(yōu)先級的D線程開始運行。 由于在RTOS中,需要的是完成任務的確定性與可靠性,同等優(yōu)先級的情況比較有限,所以這一塊應用的不多。

3.4 中斷中執(zhí)行調(diào)度

以上的三種屬于主動進行調(diào)度的過程,其系統(tǒng)的執(zhí)行流程都是可以預測的,但是中斷去執(zhí)行調(diào)度卻是比較特殊。是被動調(diào)度。

這種方式是在中斷中執(zhí)行調(diào)度的,當A線程正常運行時,此時來了一個中斷,由于中斷的優(yōu)先級是高于線程的。所以,中斷處理事情,如果在中斷中執(zhí)行了調(diào)度函數(shù),那么在中斷退出后,將直接切換到當前系統(tǒng)中更高優(yōu)先級的線程去運行。如果如果當前系統(tǒng)的最高優(yōu)先級還是A,那么中斷退出后,執(zhí)行的最高優(yōu)先級線程依然是A。若存在線程E線程優(yōu)先級高于A并且處于就緒狀態(tài),此時,中斷退出后,切換到E線程去執(zhí)行。

4.調(diào)度做了哪些事情?

系統(tǒng)進行調(diào)度的時候做了哪些事情?

第一步:查找當前系統(tǒng)中當前以及就緒的最高優(yōu)先級的線程,若有高于當前運行系統(tǒng)運行的線程棧則執(zhí)行線程切換

第二步:關閉中斷,將系統(tǒng)當前運行狀態(tài)以及處理器的寄存器壓入??臻g

第三步:找到需要運行的線程的PC指針,并找到棧起始處彈出??臻g中的寄存器狀態(tài)

第四部:打開中斷,執(zhí)行異常ret,讓系統(tǒng)恢復執(zhí)行

此時,就切換到已經(jīng)就緒的更高優(yōu)先級的線程去運行了。

5.總結

RT-Thread 線程的調(diào)度器是整個系統(tǒng)的靈魂,整個操作系統(tǒng)在運行過程中何時切換線程、什么情況下去處理任務,以及做更高效的業(yè)務邏輯的應用都離不開系統(tǒng)調(diào)度。掌握了調(diào)度器運行的規(guī)律,并且合理的使用線程調(diào)度時機,可以設計出更加穩(wěn)定可靠的產(chǎn)品。通過閱讀代碼,就能預測程序下一步的執(zhí)行動作。真正的做到手中有糧,心中不慌。

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

    關注

    68

    文章

    11080

    瀏覽量

    217116
  • 操作系統(tǒng)

    關注

    37

    文章

    7152

    瀏覽量

    125601
  • 實時操作系統(tǒng)

    關注

    1

    文章

    202

    瀏覽量

    31341
  • RT-Thread
    +關注

    關注

    32

    文章

    1409

    瀏覽量

    41962
  • 調(diào)度器

    關注

    0

    文章

    98

    瀏覽量

    5504

原文標題:?RT-Thread的線程調(diào)度與管理分析

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    權威認證!RT-Thread操作系統(tǒng)100%國產(chǎn)自主可控,鑄就睿擎工業(yè)平臺安全基石? !

    在工業(yè)自動化、電力控制、軌道交通等高端裝備領域,操作系統(tǒng)的安全可靠與自主可控是關乎產(chǎn)業(yè)命脈的核心訴求。作為國產(chǎn)嵌入式實時操作系統(tǒng)(RTOS)的領軍者,RT-Thread始終將代碼的透明性與自主性置于
    的頭像 發(fā)表于 07-11 17:05 ?1818次閱讀
    權威認證!<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系統(tǒng)</b>100%國產(chǎn)自主可控,鑄就睿擎工業(yè)平臺安全基石? !

    RT-Thread榮獲2025優(yōu)秀開源項目 | 新聞速遞

    6月底,RT-Thread睿賽德受邀參與由上海開源信息技術協(xié)會主辦的2025上海開源創(chuàng)新精英薈。上海市商委副主任張杰出席會議并致辭。RT-Thread嵌入式操作系統(tǒng)項目憑借其卓越的技術創(chuàng)新與開源生態(tài)
    的頭像 發(fā)表于 07-04 09:04 ?1701次閱讀
    <b class='flag-5'>RT-Thread</b>榮獲2025優(yōu)秀開源項目 | 新聞速遞

    深度剖析 RT-Thread 線程調(diào)度流程

    RT-Thread調(diào)度第一個線程的主要流程分如下:rtthread_startup:RTT的啟動函數(shù),主要負責板級驅(qū)動,調(diào)度器,系統(tǒng)線程初始化,啟動
    的頭像 發(fā)表于 06-25 18:24 ?709次閱讀
    深度剖析 <b class='flag-5'>RT-Thread</b> 線程<b class='flag-5'>調(diào)度</b>流程

    【直播預告】《實時操作系統(tǒng)應用技術—基于RT-Thread與ARM的編程實踐》教學脈絡及資源簡介

    直播預告直播主題:《實時操作系統(tǒng)應用技術—基于RT-Thread與ARM的編程實踐》教學脈絡及資源簡介開放時間:2025年5月29日(周四)20:00主講老師:王宜懷課程類型:視頻直播觀看平臺
    的頭像 發(fā)表于 05-26 17:50 ?406次閱讀
    【直播預告】《實時<b class='flag-5'>操作系統(tǒng)</b>應用技術—基于<b class='flag-5'>RT-Thread</b>與ARM的編程實踐》教學脈絡及資源簡介

    RT-Thread審核團招募: 深度參與開源RTOS社區(qū)治理與演進

    的開源實時操作系統(tǒng),正持續(xù)優(yōu)化社區(qū)協(xié)作流程,現(xiàn)面向全球開發(fā)者招募審核團(ReviewTeam)成員,共同維護代碼質(zhì)量,推動RT-Thread生態(tài)繁榮發(fā)展!什么是RT
    的頭像 發(fā)表于 05-21 18:02 ?661次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區(qū)治理與演進

    RT-Thread嵌入式操作系統(tǒng)專業(yè)培訓班-深圳站重磅開啟!

    RT-Thread官方將在深圳舉辦為期三天的嵌入式操作系統(tǒng)專業(yè)培訓班!本次培訓將深入講解RT-Thread嵌入式實時操作系統(tǒng)的核心技術與實戰(zhàn)應用,助力開發(fā)者快速掌握RTOS開發(fā)精髓。無
    的頭像 發(fā)表于 04-11 18:18 ?307次閱讀
    <b class='flag-5'>RT-Thread</b>嵌入式<b class='flag-5'>操作系統(tǒng)</b>專業(yè)培訓班-深圳站重磅開啟!

    RT-Thread嵌入式操作系統(tǒng)專業(yè)培訓班來上海啦!

    RT-Thread官方將在上海(RT-Thread大本營)發(fā)起為期三天的嵌入式操作系統(tǒng)專業(yè)培訓班!本次培訓將會深入講解RT-Thread嵌入式實時
    的頭像 發(fā)表于 02-27 17:27 ?431次閱讀
    <b class='flag-5'>RT-Thread</b>嵌入式<b class='flag-5'>操作系統(tǒng)</b>專業(yè)培訓班來上海啦!

    RT-Thread嵌入式操作系統(tǒng)專業(yè)培訓班登陸鄭州!

    RT-Thread官方將在河南-鄭州發(fā)起為期三天的嵌入式操作系統(tǒng)專業(yè)培訓班!本次培訓將深入講解RT-Thread嵌入式實時操作系統(tǒng)的核心概念、實戰(zhàn)技巧和應用場景。無論您是剛接觸嵌入式開
    的頭像 發(fā)表于 02-12 18:28 ?380次閱讀
    <b class='flag-5'>RT-Thread</b>嵌入式<b class='flag-5'>操作系統(tǒng)</b>專業(yè)培訓班登陸鄭州!

    RT-Thread操作系統(tǒng)應用開發(fā)寒假師資培訓

    隨著物聯(lián)網(wǎng)和智能系統(tǒng)的快速發(fā)展,嵌入式成為當前最熱門最有發(fā)展前途的IT應用領域之一。為進一步提升全國大學生在嵌入式芯片及系統(tǒng)設計領域的創(chuàng)新能力,特別是針對物聯(lián)網(wǎng)應用開發(fā)中RT-Thread操作
    的頭像 發(fā)表于 12-06 01:06 ?545次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系統(tǒng)</b>應用開發(fā)寒假師資培訓

    RT-Thread聯(lián)合河北大學發(fā)起嵌入式操作系統(tǒng)專業(yè)班-保定站

    RT-Thread官方將在11月23至24日河北省保定市(河北大學)發(fā)起為期兩天的嵌入式操作系統(tǒng)專業(yè)培訓班暨RT-Thread師資培訓!本次培訓將會深入講解RT-Thread嵌入式實時
    的頭像 發(fā)表于 11-16 01:09 ?538次閱讀
    <b class='flag-5'>RT-Thread</b>聯(lián)合河北大學發(fā)起嵌入式<b class='flag-5'>操作系統(tǒng)</b>專業(yè)班-保定站

    【本周六-深圳】RT-Thread嵌入式操作系統(tǒng)專業(yè)培訓班正式開班

    RT-Thread官方在本周六將發(fā)起為期三天的嵌入式操作系統(tǒng)專業(yè)培訓班!本次培訓將會深入講解RT-Thread嵌入式實時操作系統(tǒng)的核心概念、實戰(zhàn)技巧和應用場景!無論企業(yè)團隊/工程師是剛
    的頭像 發(fā)表于 11-08 01:07 ?593次閱讀
    【本周六-深圳】<b class='flag-5'>RT-Thread</b>嵌入式<b class='flag-5'>操作系統(tǒng)</b>專業(yè)培訓班正式開班

    喜報|睿賽德科技RT-Thread操作系統(tǒng)成功入選上海市重點推薦目錄

    近日,經(jīng)企業(yè)自主申報、資料審查、專家評審、產(chǎn)品測試等環(huán)節(jié),上海睿賽德電子科技有限公司自主研發(fā)的RT-Thread嵌入式實時操作系統(tǒng)成功入選《2024年度上海市重點產(chǎn)業(yè)和領域數(shù)字化產(chǎn)品和解
    的頭像 發(fā)表于 10-18 08:08 ?1221次閱讀
    喜報|睿賽德科技<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系統(tǒng)</b>成功入選上海市重點推薦目錄

    新書發(fā)布——《RT-Thread嵌入式實時操作系統(tǒng)內(nèi)核、驅(qū)動和應用開發(fā)技術》

    我們非常高興地宣布,由鄭苗秀、沈鴻飛和廖建尚編著的《RT-Thread嵌入式實時操作系統(tǒng)內(nèi)核、驅(qū)動和應用開發(fā)技術》一書正式發(fā)布。本書的編寫團隊由多位在嵌入式和實時操作系統(tǒng)領域有著豐富經(jīng)驗的專家組
    的頭像 發(fā)表于 09-03 08:06 ?1373次閱讀
    新書發(fā)布——《<b class='flag-5'>RT-Thread</b>嵌入式實時<b class='flag-5'>操作系統(tǒng)</b>內(nèi)核、驅(qū)動和應用開發(fā)技術》

    【好書推薦】RT-Thread設備驅(qū)動開發(fā)指南

    近年來國內(nèi)芯片產(chǎn)業(yè)和物聯(lián)網(wǎng)產(chǎn)業(yè)的快速崛起,行業(yè)發(fā)展迫切需要更多人才,尤其需要掌握嵌入式操作系統(tǒng)等底層技術的人才。隨著RT-Thread被更廣泛地應用于行業(yè)中,開發(fā)者對嵌入式驅(qū)動開發(fā)的需求越來越
    的頭像 發(fā)表于 08-01 08:35 ?1339次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設備驅(qū)動開發(fā)指南

    RT-Thread內(nèi)部機制大揭秘,帶你深入操作系統(tǒng)內(nèi)核

    一、RT-Thread概述RT-Thread是一款具有顯著優(yōu)勢的開源嵌入式實時操作系統(tǒng)。它不僅具備輕量級、實時性強的特點,還擁有廣泛的開源社區(qū)支持和豐富的應用場景。在輕量級方面,RT-Thre
    的頭像 發(fā)表于 08-01 08:11 ?5163次閱讀
    <b class='flag-5'>RT-Thread</b>內(nèi)部機制大揭秘,帶你深入<b class='flag-5'>操作系統(tǒng)</b>內(nèi)核