一種bitmaps能反應出目前有哪些task處於ready state
- 每個task在bitmap裡是以優先權來作辨識
- 可以用rom的空間來換取較好效能
- 如果以linear list去實作的話,需要花O(n)。
- 如果採用heap結構需要O(log n)
- uCOS-II的實作裡,只需要花O(1)
structure\time insert delete min range
Heap O(logn) O(logn) O(1) -∞~+∞
uCOS-II O(1) O(1) O(1) 0~63Ready List的架構
(read list)

共64個task,prio 0~63,數越低優先權越高
Y = task prio/8 是Task在OSRdyTbl裡哪一列,對應到OSRdyGrp的一個位置=>TCB裡的OSTCBY
X = task prio%8 是Task在OSRdyTbl裡哪一行
=>TCB裡的OSTCBX

OSMapTbl是把一個Task屬於OSRdyTbl(X)或OSRdyGrp(Y)的位置,
對應成他被加入或移除OSRdyTbl或OSRdyGrp時,需要設定的bit。
OSMapTbl[Y] => TCB裡的OSTCBBitY
OSMapTbl[X] => TCB裡的OSTCBBitX
快速尋找Highest Priority Task

先存好這個OSUnMapTbl Table
然後用當下Ready List裡的值查兩次這個表算出最高優先權的Task。
沒有留言:
張貼留言