《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 實時控制系統中優先級反轉問題的解決方法
實時控制系統中優先級反轉問題的解決方法
唐宇翔,胡景春
南昌航空大學 信息工程學院,江西 南昌330063
摘要: 以實時操作系統μC/OS-II為例,分析了產生優先級反轉的原因,提出了解決該問題的2種方法,即互斥信號量(Mutex)和實現時間片輪番調度法。在保證共享資源互斥訪問的前提下,將優先級反轉的發生有效地限制在一個層次上,降解了優先級反轉現象的發生。
中圖分類號: TP316.2
文獻標識碼: A
Research on reducing priority inversion problem in real-time control systems
TANG Yu Xiang,HU Jing Chun
School of Computer, Nanchang Hangkong University, Nanchang 330063,China
Abstract: Bases on the real-time operating system μC/OS-II, this paper analyses the reason that priority inversion bechanced and then gives exposition how to adjust this problem by mutual exclusive semaphores and time slice. On the precondition, of ensuring mutex visiting of the shared resources, the proposed approach limits the occurrence of priority inversion on one level, and alleviates the priority inversion phenomenon occurrence in μC/OS-II.
Key words : real-time system;priority inversion;priority inheritance

   μC/OS-II是由Jean Labrosse編寫的具有高度可移植性且源碼公開的嵌入式實時操作系統內核,可用于8 bit、16 bit、32 bit嵌入式微處理器或DSP中。μC/OS-II可以管理64個任務,各任務有自己單獨的棧,采用基于優先級的可搶占式PBP(Priority Based Preemptive)調度策略,絕大多數服務的執行時間具有確定性μC/OS-II已被成功地應用于各種系統,在眾多領域中,多種基于μC/OS-II設計的產品已經證明了μC/OS-II內核的穩定性,其安全性和穩定性已通過美國FAA認證。
    μC/OS-II操作系統同時也是可剝奪型內核,以保證最重要的進程(通常是優先級最高的進程)能夠及時得到運行。但是如果用傳統的信號量等機制對共享資源進行互斥操作,在某些時間里會出現高優先級進程被低優先級進程堵塞的現象,這種現象稱為優先級反轉。本文討論優先級反轉現象的原因,并給出2種抑制優先級反轉現象的具體方法。
1 優先級反轉現象
    使用實時內核,優先級反轉問題是實時系統中出現最多的問題。優先級反轉發生在一個高優先級的任務被迫等待一段不確定時間的過程中[1]。優先級反轉現象示意圖如圖1。


    圖1中,空白框為任務正常運行過程;陰影框為任務取得信號量后的運行過程。在圖中3個任務優先級的高低為T1>T2>T3,T1和T3在運行過程中都需要使用同一資源,T2不需要使用該資源。當T3先占用該資源,T1任務需要等待,直到T3任務釋放占用的共享資源。由于T2的優先級比T3高,所以剝奪了T3的CPU使用權,使得T3釋放信號量的時間向后拖延,所以T1的運行情況更加惡化,T1取得信號量的時間隨之推遲。這樣,原本優先級最高的T1任務,在經過以上過程后,優先級反而降到了最低。這時,系統中就發生了優先級反轉的現象。
    優先級反轉原因可歸納為:高優先級的任務由于要等待被低優先級任務占有的臨界資源而被中優先級任務阻塞,而此時具有中優先級的任務搶占了低優先級任務的CPU時間,導致具有中優先級的任務先于高優先級任務而執行。
2 優先級反轉的解決方案
    優先級反轉問題的解決辦法有優先級置頂和優先級繼承2種[2]。
    采用優先級置頂的方案,首先在創建互斥信號量時就應同時設置一個相應的置頂優先級,當首先申請到該資源的任務a未釋放而又有一個更高優先級的任務b試圖申請時,內核會將任務a的優先級提升到置頂優先級,該置頂優先級高于任何可能申請該資源任務的高優先級。優先級置頂的意義在于使占有資源的低優先級任務盡快完成,讓高優先級任務的等待不至過長。
    而優先級繼承的思想是:在出現上述情況時,提高低優先級任務的優先級使其與高優先級任務的優先級等同。而μC/OS-II卻不支持這種方法[3],需要通過修改μC/OS-II內核來實現優先級繼承。
2.1 優先級置頂方案
    要在μC/OS-II實現優先級置頂[4],需要用到互斥信號量(Mutex)。
    互斥型信號量的創建是由函數OSMutexCreate( )完成的,它首先檢查PCP的優先級數值是否己經被其他任務使用,如果還沒有使用就占用這個優先級。然后得到一個新的事件控制塊ECB,OSMutexCreate( )置mutex的值為有效,同時將PCP保存起來。
    OSMutexPend( )函數在獲取互斥信號量Mutex時,如果Mutex可用,并且占有信號量任務的優先級不是最高,則提升此任務的優先級置PIP,即置頂優先級,使它盡快執行并退出臨界區從而釋放Mutex。釋放信號量函數OSMutexPost( )則是將當前任務的優先級恢復原值,并檢查是否有任務仍在申請該資源。
    利用優先級置頂解決前面提到的優先級反轉的過程如圖2所示。


    以開始系統初始化,直到T1任務開始請求信號量的時刻,系統運行情況和應用普通信號量時的情況是一致的。t2時刻,T1任務開始啟動,請求信號量,此時系統得知T1任務所需的信號量正在被T3任務所占據,故提高T3任務的優先級,使之高于請求該信號量的所有任務的優先級;t3時刻,T1任務由于得不到信號量而被掛起,此時由于T3任務的優先級高于T1和T2任務,所以系統讓T3任務先完成,從而釋放信號量。當T3任務釋放信號量的時候,系統得知T3任務的優先級是被暫時提高的,所以恢復T3任務的優先級,此時T1任務可以請求并得到信號量;t4時刻,T1任務由于得到信號量而開始運行;t5時刻,T1任務運行完畢,由系統切換任務,使T2任務開始運行。在一定程度上抑制了優先級反轉。在μC/OS-II系統中建立如上所述的3個任務,作用時分別輸出格式為“自己的任務名稱is running”的字符串。使用了互斥信號量后的實驗結果如圖3所示。

2.2 優先級繼承方案
    在μC/OS-II中,由于不同的任務不能對應同一個優先級,所以不支持上述方法。不過,可以通過修改操作系統的內核,使之成為可能,從而用優先級繼承的方案解決優先級反轉現象。這里采用類似于時間片輪番調度法的方案,在同一優先級上對不同任務進行調度。
    這種方法給處于同一優先級的不同任務都分配一個時間片,當內核運行到某一任務時,對同優先級且處于就緒態的任務依次進行調度,即當就緒態中先到的任務用完自己的時間片后,CPU控制權轉讓給就緒態中后一任務。該任務用完自己的時間片后,CPU控制權又轉讓給后一個就緒態任務。當就緒態的每一個任務都被調度一次之后將重新為它們分配時間片,然后又開始新周期的調度。在調度過程中如果有一個比當前任務優先級更高的任務由其他態變成了就緒態(被創建或獲取了一個信號量等等),當前任務的CPU控制權將被剝奪;空閑任務仍然是等到其他任務都退出就緒態才獲得CPU使用權。
    這種方法的優點不僅體現在可以讓同一優先級對應不同的任務,從而進行優先級繼承,還體現在可以增加操作系統調度任務的最大數目,這使應用系統的開發更加靈活。因為在不允許一個優先級對應不同任務的μC/OS-II中,用戶能夠自己創建的任務數目最多為56個。
    在μC/OS-II中,實現優先級繼承方案應該首先在任務控制塊(TCB)的結構體中添加構成雙向鏈表的前驅節點指針(變量名為OSMYnext)、后繼結點指針(變量名為OSMYprev)和2個用于指示時間的變量(OSMYtime和OSMYtimeremain)。指針的作用是用來查找同一優先級的不同任務,便于添加新任務和刪除已經釋放了信號量的任務。在沒有其他任務和自己處于同一優先級的狀態下,鏈表的前后指針均指向自己。變量OSMYtime的作用表示分給該任務的時間片長度,OSMYtimeremain表示當前時間片剩余時間。
    由于當前任務的時間片使用完時,就會被從就緒表OSRdyGrp以及OSRdyTbl[ ]中清除,這樣,正常的調度將被打亂,所以還需增加保存臨時OSRdyGrp和OSRdyTbl[ ]的變量OSTempGrp和OSTempTbl[ ]。由于在創建任務時μC/OS-II會比較該任務和已建立的任務的優先級是否相同,所以還需把任務創建函數中相應代碼進行屏蔽。
    時鐘節拍函數OSTimeTick( )在時間片調度過程中起到了修改時間片計數器的作用,每一次時鐘節拍的到來都會引起時間片的減少。在OSTimeTick( )函數中,主要完成以下工作:首先檢查同優先級的雙向鏈表指針是否指向自己。如果指向自己,則說明在這一優先級上,只有自己一個任務。如果指向其他的任務,則要通過遞減正在運行的任務的時間片來確定分給該任務的時間片是否用完。
    如果時間片沒有用完,則執行OS_Sched()函數,讓內核進行調度;如果時間片已經用完,則讓時間片重新賦值,然后同樣進行調度,在沒有更高優先級的任務處于就緒態時,系統將運行鏈表所指示的下一個任務。其主要步驟的流程圖如圖4所示。

    經過以上步驟,就可以在μC/OS-II系統中基本實現時間片輪番調度,不過要想解決優先級反轉的問題,還需要做以下工作。
    當一個任務進入等待互斥信號量OSMutexPend( )函數時,首先判斷當前任務的優先級是否高于已經得到并且還沒釋放該資源的任務優先級。如果當前的任務優先級高,則要將得到該資源的任務優先級提到當前任務的優先級水平,并且把當前任務加到自己的雙向鏈表中,再執行一次內核調度。
    當任務執行OSMutexPost( )釋放互斥信號量時,如果在其擁有信號量的過程中被提升過優先級,則將恢復之前的優先級。然后查看是否還有任務在等待該信號量,準備下一次調度。
    用優先級繼承的方法測試,同樣選取T1、T2、T3 3個任務,進行同優先級置頂方案相同的實驗,得到如圖5所示的結果。
    從圖5可以看出,用時間片解決優先級反轉的效果與優先級置頂大致相同,區別僅在于當T3任務取得資源運行時,時間片用完后,T1任務又開始申請該資源,而T3并未放棄,所以出現如圖5的結果。如果T3的時間片設置過小,這一過程就將頻繁發生,從而降低了效率。所以如果系統當前的任務集合相對簡單,則在發生優先級反轉時,把低優先級任務的時間片調大一些為好。


    運用時間片輪番調度法,解決了在μC/OS-II系統中實現優先級繼承的方案,在一定程度上抑制了優先級反轉現象,提高了系統的實時性,還增加了系統同時運行任務的最大數目,提高了系統的運行效率。
    優先級反轉是任何一個多任務實時操作系統都無法避免的問題。本文分析了該現象產生的原因,主要討論了μC/OS-II中運用mutex和時間片輪番調度解決該問題的方法并對其可行性進行了驗證。相對優先級繼承和優先級置頂策略,在可能出現優先級反轉的情況下,動態地改變任務優先級能夠保證高優先級任務的執行,有效提高了系統的實時性。
參考文獻
[1] 楊宗德,張兵μC/OS-II標準教程[M].北京:人民郵電出版社,2009:153-156.
[2] LABROSSE J.μC/OS-II the real-time kernel[M].Lawrence,R&D Books,2003:47-64.
[3] LABROSSE J J.嵌入式實時操作系統μC/OS-II(第2版) [M].北京:北京航空航天大學出版社,2003:44-46.
[4] 任哲.嵌入式實時操作系統μC/OS-II原理及應用[M].北京:北京航空航天大學出版社,2005:124-130

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产精品一区二区三区乱码| 国产一区二区三区黄| 午夜久久黄色| 欧美精品久久久久久| 欧美日韩亚洲系列| 欧美mv日韩mv国产网站app| 日韩午夜在线播放| 欧美1级日本1级| 欧美日韩精品高清| 国产精品一区二区久久久久| 欧美视频一区二区| 欧美午夜剧场| 亚洲欧洲偷拍精品| 国产精品国产三级国产aⅴ入口| 国产综合色产在线精品| 国产日韩精品在线播放| 一本色道久久综合亚洲91| 欧美专区第一页| 亚洲精品久久久久久久久久久久久| 欧美日韩国产三级| 久久九九全国免费精品观看| 欧美freesex交免费视频| 欧美高清一区| 激情小说另类小说亚洲欧美| 亚洲精品在线观看视频| 亚洲精品一区久久久久久| 欧美人成在线| 国产一区二区中文| 欧美成人免费在线观看| 国产精品人人爽人人做我的可爱| 欧美婷婷六月丁香综合色| 亚洲欧美激情一区二区| 国产精品区免费视频| 欧美人与性动交a欧美精品| 国产自产2019最新不卡| 欧美在线综合视频| 欧美剧在线免费观看网站| 香蕉久久夜色精品国产使用方法| 国产精品香蕉在线观看| 欧美精品一级| 欧美顶级大胆免费视频| 狠狠色狠狠色综合| 欧美日韩国产在线看| 免费高清在线一区| 欧美日韩一区二区三区在线视频| 欧美成人高清视频| 亚洲综合日本| 欧美日韩美女在线观看| 久久精品青青大伊人av| 亚洲欧洲99久久| 久久婷婷蜜乳一本欲蜜臀| 久久性天堂网| 欧美激情一区二区三区| 国产日韩欧美在线看| 欧美成人午夜免费视在线看片| 久久久.com| 一本色道久久99精品综合| 欧美精品在线免费| 欧美日韩国内自拍| 久热精品视频在线观看| 亚洲国产91色在线| 欧美日韩精品在线观看| 免费精品99久久国产综合精品| 欧美日韩国内| 在线播放国产一区中文字幕剧情欧美| 欧美日韩在线影院| 亚洲片在线观看| 欧美一级二区| 欧美日韩理论| 欧美男人的天堂| 亚洲欧洲精品一区二区三区不卡| 午夜免费久久久久| 国产精品成人在线观看| 国产美女精品视频免费观看| 伊人精品久久久久7777| 国产精品视频午夜| 激情亚洲网站| 亚洲欧美三级伦理| 欧美伊人精品成人久久综合97| 久久福利视频导航| 牛夜精品久久久久久久99黑人| 欧美寡妇偷汉性猛交| 欧美中日韩免费视频| 亚洲国产精品一区二区www在线| 欧美在线在线| 久久久噜噜噜久噜久久| 欧美在线视频日韩| 永久555www成人免费| 国产日韩一区| 国内偷自视频区视频综合| 久久精品青青大伊人av| 在线日韩精品视频| 欧美巨乳在线| 欧美成人激情视频免费观看| 欧美一区2区视频在线观看| 麻豆成人综合网| 毛片精品免费在线观看| 男人天堂欧美日韩| 蜜桃视频一区| 亚洲第一精品在线| 99视频热这里只有精品免费| 久久视频在线免费观看| 亚洲人成7777| 久久永久免费| 国产精品久久久久一区二区三区共| 欧美精品一区二区三区蜜臀| 久久日韩粉嫩一区二区三区| 亚洲欧美日韩另类精品一区二区三区| 国产亚洲欧美日韩美女| 国产日韩亚洲欧美精品| 国产欧美日本一区视频| 玖玖视频精品| 久久久久久高潮国产精品视| 欧美成人免费全部| 欧美亚洲免费电影| 欧美成人激情视频免费观看| 国内揄拍国内精品少妇国语| 欧美大片在线看| 欧美日韩另类国产亚洲欧美一级| 亚洲一区日本| 欧美视频免费在线观看| 亚洲精品视频在线看| 国产一区二区三区四区在线观看| 亚洲人精品午夜| 欧美视频观看一区| 亚洲一区二区三区乱码aⅴ| **网站欧美大片在线观看| 欧美日韩1区| 一区二区三区精密机械公司| 黄色亚洲网站| 伊人男人综合视频网| 欧美激情aⅴ一区二区三区| 麻豆av一区二区三区| 亚洲国产日韩一级| 国产欧美日韩视频一区二区三区| 欧美婷婷六月丁香综合色| 久久久久久高潮国产精品视| 欧美在线黄色| 国产精品久久二区| 日韩午夜电影在线观看| 欧美日韩裸体免费视频| 亚洲精品免费电影| 久久尤物视频| 激情视频一区| 好看的亚洲午夜视频在线| 亚洲永久精品国产| 国产精品视频不卡| 国产精品日本精品| 亚洲一区视频在线观看视频| 国产亚洲欧洲997久久综合| 国产精品国产三级国产专播精品人| 国产精品自在欧美一区| 国产在线视频欧美| 国产精品a级| 久久综合久久88| 亚洲欧美日韩国产一区| 亚洲欧美日韩一区二区三区在线| 欧美日韩免费一区二区三区视频| 欧美日本高清| 夜夜爽av福利精品导航| 国产精品电影网站| 欧美大片专区| 亚洲高清一区二区三区| 午夜精品久久| 99av国产精品欲麻豆| 亚洲第一色中文字幕| 国产精品久久久久久妇女6080| 亚洲一级黄色av| 一区二区三区 在线观看视频| 亚洲国产另类久久精品| 欧美成人精品不卡视频在线观看| 国产欧美日韩一区二区三区在线观看| 久久中文在线| 国产精品黄视频| 午夜激情久久久| 国产精品视频yy9099| 在线成人中文字幕| 欧美一区二视频在线免费观看| 久久看片网站| 91久久极品少妇xxxxⅹ软件| 老司机午夜免费精品视频| 国产精品日韩高清| 亚洲丶国产丶欧美一区二区三区| 亚洲一区三区电影在线观看| 国产一区二区三区在线播放免费观看| 亚洲私人影院| 国产精品欧美精品| 久久精品一区二区| 国产香蕉久久精品综合网| 韩国欧美国产1区| 欧美日韩精品在线| 国产一区二区三区在线观看免费视频| 亚洲第一福利社区| 亚洲尤物视频在线| 在线成人中文字幕| 欧美日韩国产高清视频| 久久精品国产亚洲一区二区| 国产一区二区三区在线免费观看| 国产精品亚洲综合一区在线观看| 国内自拍视频一区二区三区| 香蕉成人久久| 久久免费视频网站| 永久免费毛片在线播放不卡| 国产乱理伦片在线观看夜一区| 国产欧美日韩不卡免费| 一区二区三区**美女毛片| 羞羞答答国产精品www一本| 国产精品综合视频| 久久免费精品日本久久中文字幕| 免费中文字幕日韩欧美| 欧美日韩成人一区二区| 亚洲另类一区二区| 亚洲综合精品自拍| 性亚洲最疯狂xxxx高清| 欧美一区二区三区视频免费| 在线不卡中文字幕| 黄色资源网久久资源365| 亚洲午夜精品国产| 欧美午夜激情视频| 国产精品制服诱惑| 欧美精品一区二区高清在线观看| 欧美精品91| 在线观看日韩精品| 欧美一区二区视频97| 亚洲精品社区| 国产婷婷色一区二区三区| 亚洲国产黄色| 欧美日韩极品在线观看一区| 欧美成人精品在线观看| 国产尤物精品| 一区二区三区中文在线观看| 亚洲欧洲日韩女同| 久久精品国产一区二区电影| 国产精品久久久久久一区二区三区| 亚洲欧洲一区二区天堂久久| 欧美www视频| 国产美女精品一区二区三区| 国产精品高潮呻吟视频| 国产一区二区精品久久| 激情欧美国产欧美| 欧美aⅴ一区二区三区视频| 亚洲国产婷婷香蕉久久久久久| 亚洲综合视频网| 宅男精品导航| 在线欧美日韩精品| 欧美有码在线观看视频| 欧美日本不卡| 久久电影一区| 国内精品久久久久久久影视麻豆| 亚洲午夜性刺激影院| 一色屋精品视频在线看| 欧美亚洲自偷自偷| 欧美三级视频在线| 欧美日韩国产丝袜另类| 亚洲国产精品久久久久秋霞不卡| 午夜一区在线| 亚洲国产精品第一区二区三区| 欧美一区二区三区日韩| 在线播放视频一区| 久久综合中文字幕| 欧美日韩精品一区二区三区四区| 久久尤物视频| 欧美伊久线香蕉线新在线| 亚洲视频播放| 亚洲免费观看高清在线观看| 国产一区二区三区精品欧美日韩一区二区三区| 国产亚洲精品久久飘花| 欧美一级电影久久| 久久精品国产亚洲精品| 美女网站久久| 麻豆精品一区二区综合av| 在线色欧美三级视频| 亚洲精品视频啊美女在线直播| 国产亚洲一区精品| 国内揄拍国内精品少妇国语| 国产丝袜一区二区三区| 日韩亚洲在线观看| 久久久在线视频| 亚洲精品在线免费| 激情久久综合| 性18欧美另类| 国产日本欧美一区二区三区在线| 亚洲欧美变态国产另类| 欧美精品一区在线观看| 欧美色欧美亚洲另类二区| 在线免费观看欧美| 999在线观看精品免费不卡网站| 亚洲精品社区| 一区二区三区在线视频播放| 在线观看日韩av| 美女日韩在线中文字幕| 欧美日韩国产色综合一二三四| 国产日韩av一区二区| 亚洲国产免费| 久久婷婷色综合| 国产一区久久| 国产亚洲综合性久久久影院| 亚洲精品一区二区三区福利| 免费观看欧美在线视频的网站| 国产欧美另类| 亚洲图片在线观看| 伊人伊人伊人久久| 国产一区二区三区精品欧美日韩一区二区三区| 在线观看日韩av电影| 国产精品99免费看| 国产精品你懂的在线欣赏| 亚洲经典在线| 牛牛精品成人免费视频| 夜夜嗨av一区二区三区| 亚洲一二三区在线| 亚洲国产精品一区| 欧美一区二区三区四区高清| 91久久精品www人人做人人爽| 一区二区三区国产| 亚洲国产精品专区久久| 国产精品久久久久久久久久免费看| 男人的天堂亚洲在线| 国产精品mv在线观看| 西瓜成人精品人成网站| 欧美电影在线免费观看网站| 国内精品嫩模av私拍在线观看| 亚洲日本黄色| 在线免费观看一区二区三区| 中日韩午夜理伦电影免费| 亚洲精品免费网站| 亚洲毛片网站| 日韩视频一区二区在线观看| 久久久久中文|