• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種基于FreeRTOS實時系統(tǒng)改進的時間片延遲調(diào)度算法的設(shè)計

      2019-11-05 07:45:15汪千松
      科技視界 2019年28期

      汪千松

      【摘 要】通過對FreeRTOS同優(yōu)先級任務(wù)的最后幾次執(zhí)行時間片進行優(yōu)化,提出了改進的時間片延遲調(diào)度算法,使任務(wù)在最后幾次執(zhí)行時不進行時間片切換而繼續(xù)運行。改進的調(diào)度算法在保證實時性的同時也大大提高了任務(wù)的執(zhí)行效率,增大了系統(tǒng)吞吐率。

      【關(guān)鍵詞】FreeRTOS;同優(yōu)先級;時間片

      中圖分類號: TP23 文獻標識碼: A 文章編號: 2095-2457(2019)28-0043-002

      DOI:10.19694/j.cnki.issn2095-2457.2019.28.015

      0 引言

      FreeRTOS可采用搶占式和時間片輪轉(zhuǎn)混合的調(diào)度機制[1],其原先的基于時間片輪轉(zhuǎn)調(diào)度存在某些不足,當(dāng)同優(yōu)先級任務(wù)快速增多時,任務(wù)的頻繁切換會加大系統(tǒng)的業(yè)務(wù)和能量開銷,使任務(wù)具體結(jié)束時間延長。改進的時間片延遲調(diào)度算法通過直接讓任務(wù)在最后幾次執(zhí)行時不進行時間片切換而繼續(xù)運行結(jié)束,提前時間點讓出CPU給其他任務(wù)運行,減少任務(wù)頻繁切換的次數(shù)。當(dāng)高優(yōu)先級任務(wù)到來時仍然能及時響應(yīng)執(zhí)行,在保證實時性的同時也提高了整體任務(wù)的執(zhí)行效率,增大了系統(tǒng)吞吐率。

      1 算法原理

      1.1 FreeRTOS默認時間片調(diào)度算法

      FreeRTOS操作系統(tǒng)此前的同優(yōu)先級的任務(wù)時間片輪轉(zhuǎn)調(diào)度算法將任務(wù)的處理時間劃分為一個固定的時間片大小,時間片用完將進行切換,而且時間片的值則固定設(shè)置為一個系統(tǒng)時鐘節(jié)拍。同優(yōu)先級的任務(wù)就緒列表中各個任務(wù)按排列的順序輪流占用固定時間的CPU資源[2]。當(dāng)某個任務(wù)的時間片用完時,而本身的任務(wù)沒有結(jié)束時,其必須讓出CPU的使用權(quán),使自身進入同優(yōu)先級就緒列表的尾部中,等待下次輪轉(zhuǎn)的再次調(diào)度。同時調(diào)度器運用調(diào)度算法又會去選擇同優(yōu)先級就緒列表中處于頭部的就緒任務(wù),分配一個時間片,讓其占用CPU資源而運行。也就是說一個任務(wù)到了時間點即使沒有運行完成也必須讓出CPU的使用權(quán)切換出去,給就緒的其他任務(wù)繼續(xù)運行的機會。

      1.2 改進的時間片延遲調(diào)度算法

      改進后的算法其原理為在時間片輪轉(zhuǎn)調(diào)度的情況下,對任務(wù)的最后幾次執(zhí)行時間片(數(shù)值可調(diào)整)進行優(yōu)化。也就是當(dāng)任務(wù)是按照時間片輪轉(zhuǎn)調(diào)度算法進行時,當(dāng)任務(wù)的最后幾次運行時間少于時間片數(shù)值的1.5倍(數(shù)值可調(diào)整)時,該時間片調(diào)度算法不發(fā)生任務(wù)的切換操作,使任務(wù)繼續(xù)占用CPU的資源,從而使任務(wù)提前結(jié)束完成,讓其他的任務(wù)有更多執(zhí)行的機會。

      2 算法設(shè)計實現(xiàn)

      2.1 任務(wù)運行時間設(shè)計

      FreeRTOS中在任務(wù)創(chuàng)建的過程中并沒有指定任務(wù)運行的時間大小,只是根據(jù)自己需要而進行任務(wù)的停止刪除,其主要原因是任務(wù)的數(shù)據(jù)結(jié)構(gòu)中并沒有記錄任務(wù)執(zhí)行時間的變量?;诖瞬蛔?,我們必須在任務(wù)的數(shù)據(jù)結(jié)構(gòu)中添加相應(yīng)的變量來記錄任務(wù)執(zhí)行時間,現(xiàn)有如下的改進方案。

      在任務(wù)控制塊里添加相應(yīng)的時間相關(guān)變量。我們知道任務(wù)控制塊是記錄著一個任務(wù)一些屬性,將任務(wù)執(zhí)行時間相關(guān)的變量加入到任務(wù)控制塊中可使代碼看起來更直觀,增強可讀性。至此,我們在任務(wù)控制塊中添加了三個與任務(wù)時間相關(guān)變量。分別為剩余執(zhí)行時間變量ulRemainTimeSlice、初始化執(zhí)行時間ulReloadTimeSlice、任務(wù)不切換連續(xù)執(zhí)行時間片ulThresholdTimeSlice。當(dāng)ulThresholdTimeSlice值為0時代表該改進算法無效,與之前的調(diào)度算法功能相同。在添加變量的同時再添加相對應(yīng)的函數(shù)來設(shè)置和獲取對應(yīng)變量的值。在任務(wù)執(zhí)行過程時,還添加了任務(wù)剩余時間遞減函數(shù),具體執(zhí)行的操作為使任務(wù)執(zhí)行時間片遞減。

      2.2 任務(wù)切換設(shè)計

      在任務(wù)的調(diào)度過程中FreeRTOS的任務(wù)切換的觸發(fā)場合有執(zhí)行一個系統(tǒng)調(diào)用和系統(tǒng)滴答定時器中斷兩種方式。而在時間片輪轉(zhuǎn)調(diào)度的正常情況下一般是發(fā)生系統(tǒng)滴答定時器中斷而發(fā)生任務(wù)切換。之前的時間片輪轉(zhuǎn)調(diào)度是只要時間到了就會發(fā)生任務(wù)的切換操作,基于該切換的不足,我們改進的算法必須使調(diào)度器滿足必要的條件后不發(fā)生切換繼而繼續(xù)運行?,F(xiàn)有的改進方案如下。

      在滴答定時器中斷服務(wù)函數(shù)SysTic_Handler()中,其會調(diào)用FreeRTOS的API函數(shù)xPortSysTickHandler(),其在文件port.c中,在xPortSysTickHandler()函數(shù)中會發(fā)生任務(wù)的切換調(diào)度操作。而這個任務(wù)切換調(diào)度操作是有條件的,其需要滿足xTaskIncrementTick()!= pdFAlSE,而函數(shù)xTaskIncrementTick()一般用于檢測當(dāng)前任務(wù)所對應(yīng)的任務(wù)優(yōu)先級下是否還有其他任務(wù),有的話就返回pdTRUE?;诖?,我們在創(chuàng)建同優(yōu)先級任務(wù)的時候一般要多于2個,這樣方便測試對比。在該條件成立的情況下,我們就可以在內(nèi)部進行適當(dāng)?shù)奶幚?,使任?wù)滿足指定的條件需求后才進行任務(wù)的切換操作。修改后的void xPortSysTickHandler()函數(shù)部分代碼如下所示:

      xTaskDecreaseRemainTimeSlice();

      if( 0 != xTaskGetThresholdTimeSlice() ) {

      if(xTaskGetRemainTimeSlice()>xTaskGetThreshold TimeS lice() ) {

      /* A context switch is required.Context switching is performed in

      the PendSV interrupt.Pend the PendSV interru pt.*/

      portNVIC_INT_CTRL_REG=portNVIC_PENDSVSE T_ BIT;

      } else if ( 0 == xTaskGetRemainTimeSlice() ){

      /* ... */

      }

      } else {

      portNVIC_INT_CTRL_REG=portNVIC_PENDSVSE T_BIT;

      }

      由上可以看出,當(dāng)函數(shù)xTaskIncrementTick()成立時,我們首先調(diào)用xTaskDecreaseRemainTimeSlice()函數(shù)對當(dāng)前任務(wù)的時間片大小進行遞減操作,同時接下來調(diào)用xTaskGetThresholdTimeSlice()函數(shù)來判斷設(shè)置的需要延遲的時間片大小,如果為零的話,將和往常一樣進行任務(wù)的切換操作。而如果不為零的話,則繼續(xù)進行相對應(yīng)的處理,其首先是判斷剩余的執(zhí)行時間片大小是否大于設(shè)置的需要延遲的時間片的大小,如果大于的話,說明任務(wù)不需要繼續(xù)延遲,進而發(fā)生切換操作。而如果不大于的話,說明到了需要進行延遲的時間點,任務(wù)不發(fā)生切換,繼續(xù)占用CPU資源執(zhí)行代碼。當(dāng)任務(wù)的剩余時間片大小等于零的時候,說明任務(wù)需要執(zhí)行的時間片已經(jīng)全部用完,繼而可以刪除任務(wù)將其停止,讓出CPU資源給其他任務(wù)運行。

      3 算法性能分析

      下面對FreeRTOS改進的時間片延遲調(diào)度算法做基本的性能分析。假設(shè)有三個同優(yōu)先級的任務(wù)T1,T2,T3。其所需的執(zhí)行時間分別為100,50,60,單位為一個時間片大小。其中為了顯示的效果明顯,將時間片周期設(shè)置為了50ms。則改進的時間片延遲調(diào)度算法在以下各種情況中行結(jié)果如表1所示。

      表中A為改進后當(dāng)任務(wù)都延遲3個時間片運行得到的結(jié)果;B為改進后當(dāng)T1,T2,T3分別延遲1,2,3個時間片時運行得到的結(jié)果;C為改進后當(dāng)T1,T2,T3分別延遲3,2,1個時間片時運行得到的結(jié)果。

      由表中的數(shù)據(jù)結(jié)果分析可得當(dāng)任務(wù)最后幾次執(zhí)行時間(數(shù)值可根據(jù)實際情況調(diào)整)不發(fā)生任務(wù)切換而繼續(xù)運行時,任務(wù)能比原先提前時間完成。即改進后時間片輪轉(zhuǎn)調(diào)度優(yōu)化算法能夠減少任務(wù)的調(diào)度次數(shù),縮短CPU周轉(zhuǎn)時間,故而可以降低任務(wù)實際完成時間,同時減少了系統(tǒng)業(yè)務(wù)開銷和能量開銷,提升系統(tǒng)運行效率,使系統(tǒng)的性能得到了一定的提高。

      4 結(jié)論

      改進的時間片輪轉(zhuǎn)調(diào)度算法在任務(wù)最后幾次執(zhí)行時可以減少切換次數(shù),縮短CPU周轉(zhuǎn)時間,提高系統(tǒng)效率,不管是用在通用操作系統(tǒng)還是在實時操作系統(tǒng)上,都具有實際的應(yīng)用價值[4],但其仍存在不足,當(dāng)任務(wù)的個數(shù)較少且延時時間片比較長時,勢必會影響其他任務(wù)的運行,雖然執(zhí)行的任務(wù)可以提前結(jié)束,但其他同優(yōu)先級任務(wù)某些時候可能也需要適當(dāng)?shù)膶崟r性要求,這樣由于任務(wù)得不到適當(dāng)?shù)捻憫?yīng)而使系統(tǒng)表現(xiàn)得整體性能看起來而有所降低。所以進一步動態(tài)分析選取任務(wù)的延時時間片大小是一個值得深入研究的問題,當(dāng)任務(wù)的延遲時間選取合適時,將對系統(tǒng)的效率帶來大大的提升。

      【參考文獻】

      [1]Guan F,Peng L,Perneel L,et al.Open source FreeRTOS as a case study in real-time operating system evolution[J].Journal of Systems and Software,2016.

      [2]朱迪.FreeRTOS實時操作系統(tǒng)任務(wù)調(diào)度優(yōu)化的研究與實現(xiàn)[D].南京郵電大學(xué),2015.

      [3]左中凱.FreeRTOS源碼詳解與應(yīng)用開發(fā)---基于STM32.北京:北京航空航天大學(xué)出版社,2017.

      [4]肖建明,張向利.一種改進的時間片輪轉(zhuǎn)調(diào)度算法[J].計算機應(yīng)用,2005.

      木兰县| 西林县| 保亭| 博乐市| 农安县| 峨边| 渝北区| 吉水县| 西吉县| 车险| 墨玉县| 新河县| 澄江县| 河北区| 漯河市| 图木舒克市| 涿州市| 石景山区| 阳泉市| 黎城县| 广元市| 泰顺县| 雷州市| 松原市| 平顶山市| 讷河市| 鄂州市| 凉城县| 中卫市| 霍州市| 阳山县| 赣州市| 于都县| 鄄城县| 松潘县| 苏尼特左旗| 石台县| 邹城市| 岑巩县| 福鼎市| 神木县|