QNX線程調度

1. 基本概念

優先級範圍 0-255
在這裏插入圖片描述
非特權線程優先級範圍 1-63,可通過PROCMGR_AID_PRIORITY 更改特權標誌,使其優先級大於63

中斷優先級高於任何線程

2.線程調度

(1)調度時機
<1>block 正在運行的線程因爲等待某些事件或資源而阻塞
<2>preempted 更高優先級線程就緒,當前運行的低優先級線程被搶佔
<3>yield 當前線程通過 sched_yield主動放棄cpu,就緒狀態的最高優先級線程將被調度運行,(有可能就是yield線程自身)

(2)調度策略
<1>FIFO
同優先級線程採用FIFO策略調度
在這裏插入圖片描述

<2>輪轉(Round-robin)
同優先級線程採用時間片輪轉策略。其中對於高於40MHz主頻CPU,輪轉時間片默認爲1ms。除了加入時間片限制,輪轉策略其他部分與FIFO一致。

在這裏插入圖片描述

<3>Sporadic scheduling
是QNX中比較特殊的調度策略,用於同時處理週期性事件與非週期性事件。該策略下,線程的優先級是動態調整的,如下圖:
在這裏插入圖片描述

在這裏插入圖片描述
簡單說,該策略下,線程其每週期T內,在時間片長度C中,其優先級爲正常狀態N。超過C後,其優先級被降級爲L。而在T週期後,其優先級再次提升爲正常優先級N。
因此該策略的主要目的是使得特定線程能週期性處理事件且其每次處理的事件長度固定,使得系統其他線程能夠運行。

3.優先級繼承與優先級翻轉

參考

http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.neutrino.prog/topic/overview_Priority_range.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章