大地资源网视频在线观看新浪,日本春药精油按摩系列,成人av骚妻潮喷,国产xxxx搡xxxxx搡麻豆

您現在的位置:智能制造網>技術中心>嵌入式系統優先級反轉問題的分析

直播推薦

更多>

企業動態

更多>

推薦展會

更多>

嵌入式系統優先級反轉問題的分析

2008年02月14日 09:32:07人氣:794來源:浙江啟揚智能科技有限公司

引言

  vxworks是美國wind river(風河)公司的一個實時操作系統,具有良好的可靠性和實時性。該系統采用基于優先搶占式調度策略,系統為每一個任務分配一個優先級,調度程序保證當前運行的是優先權zui高的任務。但在實際開發中,由于任務間資源共享,信號量及中斷的引入,往往會出現高優先級任務被低優先級任務長時間阻塞或阻塞一段不確定時間的現象,即所謂優先級反轉(priority inversion)。優先級反轉會造成任務調度的不確定性,嚴重時可能導致系統崩潰。本文在參考文獻的基礎上,結合實際項目開發過程中遇到的優先級反轉問題,對造成優先級反轉的原因及其解決方法進行了探討。

  優先級反轉一般性描述

  優先級反轉發生在一個高優先級的任務被迫等待一段不確定時間,圖1中3個任務分別為task1、task2和task3,其優先級由高到低。從圖1可知,當task3占有由信號量(semaphore)保護的某種共享資源而進入臨界區執行時,task1就緒,由于系統的搶占式調度策略,出現task1搶占task3執行。task1執行一段時間后也進入臨界區,但此時task3仍占有此臨界資源的信號量,task1被阻塞,等待task3釋放此信號量。在經過這么一段時間后,task2已處于就緒狀態,于是系統調度task2執行。如果task3在task2的執行期間一直沒有能夠被調度執行的話,那task1和task3將一直等到task2執行完后才能執行,task1更要等到task3釋放它所占有的信號量才能執行;如果這段時間超出task1的zui后期限,task1的調度出現了問題,此時輕則任務被長時間阻塞,重則造成系統崩潰。

  優先級反轉原因可歸納為:高優先級的任務task1由于要等待被低優先級任務task3占有的臨界資源而被task2阻塞,而此時具有中優先級的任務task2搶占了task3的cpu時間,導致task2先于task1執行。此類優先級反轉問題的解決方法大致有2種:一種被稱作優先級繼承(inheritance);另一種被稱作優先級極限(ceilings)。下面介紹本文所遇到的優先級反轉問題。

  圖1 優先級反轉示意圖

  優先級反轉的實例

  上節對一般意義上的優先級反轉現象進行了描述,本節涉及的優先級反轉則較上述更為復雜,更具有隱蔽性。

  本文采用的嵌入式微處理器為samsung公司的s3c2510, cpu核為arm940t。應項目要求任務task1和task2中分別進行調用微秒級和毫秒級的定時器功能函數,由于s3c2510處理器有5個32位定時器,因此只利用其中的兩個即可。這里,ms級定時器實現的代碼架構如下:

  1) 中斷處理函數:

  local void timer1_int_handle(void)   {   *s3c2510_tic |= s3c2510_tic_t1;/*清除中斷*/

  ...

  semgive(id4_stop);/*釋放二進制信號量*/

  ...   }   2) 毫秒級定時函數

  void ms_delay(int ms)

{  

  ...

  semtake(id4_stop,wait_forever);

  ...   }   3) 時鐘初始化函數

  void mstimer_init()   {   id4_stop=semcr-eate (sem_q_fi fo,sem_empty);/*初始化二進制信號量*/

  assert(id4_stop);

  ...   }   us級定時器功能實現的代碼與上面類似,這里不再給出相應的代碼。函數調用說明:*行初始化,然后任務可隨意調用定時功能函數。當某個任務調用定時功能函數時,該任務被信號量阻塞,同時定時器開始進行減一計數,當計數器減到0時,會產生一個中斷請求信號,此時系統會調用中斷處理函數,在中斷處理函數時將信號量釋放,此時信號量變的可用,任務繼續執行。

  當兩個不同優先級任務task1,task2(設優先級分別為93和94)同時運行,并分別調用us和ms級定時功能函數時,優先級反轉出現了,task1會被長時間阻塞。其中,task1和task2的調用如下:

  void task1(void)   {   ...

  forever

  {

  ...

  us_delay();

  ...

  taskdelay(4);   }   void task2(void)   {   ...

  forever

  {

  ...

  ms_delay();

  ...   }   上述兩個任務之間資源是獨立的,但兩個任務在一起運行時,高優先級任務task1在經過一段時間后會被長期阻塞。

  解決上述問題的方法比較簡單,只要調整task1的任務優先級低于task2,這里選為95,則兩個任務可長時間并行運行。

  由于加入了中斷和信號量,使系統任務調度變的復雜,從而導致兩個原本看似獨立的任務task1和task2,不能正常并行運行。造成此類現象的原因分析極其復雜,可視為是系統應用的一個盲點,但此類問題可通過總結規律而有效繞開。例如在上述問題中,若task1調用的定時函數的定時時間小于task2中的定時時間,則相應的任務優先級也應設有task1priority< task2priority,這樣高優先級任務就不會被阻塞。

  結語

  本文結合實際例子,對vxworks中優先級反轉問題進行了探討,并對此類問題的解決方法進行了描述。本文的探討將使嵌入式系統開發人員更深入了解優先級反轉問題。

全年征稿/資訊合作 聯系郵箱:1271141964@qq.com

免責聲明

  • 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.xashilian.com。違反者本網將追究相關法律責任。
  • 企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
  • 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
  • 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。

<
更多 >

工控網機器人儀器儀表物聯網3D打印工業軟件金屬加工機械包裝機械印刷機械農業機械食品加工設備制藥設備倉儲物流環保設備造紙機械工程機械紡織機械化工設備電子加工設備水泥設備海洋水利裝備礦冶設備新能源設備服裝機械印染機械制鞋機械玻璃機械陶瓷設備橡塑設備船舶設備電子元器件電氣設備


我要投稿
  • 投稿請發送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
  • 聯系電話0571-89719789
工業4.0時代智能制造領域“互聯網+”服務平臺
智能制造網APP

功能豐富 實時交流

智能制造網小程序

訂閱獲取更多服務

微信公眾號

關注我們

抖音

智能制造網

抖音號:gkzhan

打開抖音 搜索頁掃一掃

視頻號

智能制造網

公眾號:智能制造網

打開微信掃碼關注視頻號

快手

智能制造網

快手ID:gkzhan2006

打開快手 掃一掃關注
意見反饋
關閉
企業未開通此功能
詳詢客服 : 0571-87858618
主站蜘蛛池模板: 甘德县| 时尚| 张家港市| 隆林| 孝感市| 葫芦岛市| 汾西县| 芦山县| 黄陵县| 吴旗县| 惠水县| 巫山县| 米林县| 乐山市| 凌云县| 焦作市| 光泽县| 黄浦区| 普格县| 兴安县| 南召县| 当雄县| 宁明县| 夏津县| 诏安县| 文安县| 贵德县| 文昌市| 沛县| 秀山| 竹山县| 公安县| 手游| 万盛区| 福鼎市| 疏勒县| 崇左市| 大理市| 建阳市| 会理县| 门头沟区|