2009年6月20日 星期六

MicroCOS-II -CH3(3)

Ready List

一種bitmaps能反應出目前有哪些task處於ready state
  • 每個task在bitmap裡是以優先權來作辨識
一個設計ready list必須被考慮的問題就是這個ready list能多快存取到最高優先權的ready task
  • 可以用rom的空間來換取較好效能
存取到最高優先權ready task的位置的時間
  • 如果以linear list去實作的話,需要花O(n)。
  • 如果採用heap結構需要O(log n)
  • uCOS-II的實作裡,只需要花O(1)
#這個方法會比上面兩個方法消耗空間的多,也會要依賴bus的寬度。
 structure\time insert     delete   min  range
 Heap             O(logn)     O(logn)   O(1)  -∞~+∞
 uCOS-II       O(1)      O(1)  O(1)  0~63
(read list)
Ready 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。

沒有留言:

張貼留言