(toppers-users 3825) 2つの優先度の有効な利用方法は? 5.先取り方式の提案 補足と訂正

高橋和浩@nifty takahashi_kazuhiro @ nifty.com
2012年 1月 23日 (月) 18:09:44 JST


高橋です。

5.先取り方式の提案
に一部間違いがあったのと説明がわかりにくいと思いますので補足と訂正します。

例
タスクa,b,c 起動時優先度 16,14,12 実行時優先度8 とします。

優先度変換テーブル[16-1] は、16
優先度変換テーブル[14-1] は、14
優先度変換テーブル[12-1] は、12
が初期状態です。

スタック共有しているタスクがどのような組み合わせかを判定する関数が必要かと思います。

動作例
タスクaが起動されるとまず、スタック共有タスクかをチェックします。
スタック共有タスクの場合、共有するタスクの中で休止状態のものがあれば
そのタスクのなかで最も起動優先度の高いタスクと変換テーブルを用いて入れ替えます。
タスクb、タスクcが休止状態なので、最も高いタスクcと入れ替えます。
優先度変換テーブル[16-1] は 12
優先度変換テーブル[12-1] は 16 になります。
bitmapはbit 12をセットします。next_priは12のときにタスクaの実行になります。
ですので tinib_epriority[優先度変換テーブル[next_pri]]; という参照にする必要があります。
入れ変えたものを戻す必要は無く、次にタスクcが起動されたら、
優先度変換テーブル[14-1] は 16
優先度変換テーブル[12-1] は 14 になります。

このときに 
優先度変換テーブル[16-1] は、12
優先度変換テーブル[14-1] は、16
優先度変換テーブル[12-1] は、14

ですが、さらに発展形でvrot_rdqすると
優先度変換テーブル[16-1] は、16
優先度変換テーブル[14-1] は、14
優先度変換テーブル[12-1] は、12
ということも可能ではないかと思います。ただしプリエンプトはされません。

---
アライブビジョンソフトウエア株式会社
高橋和浩
673-0005兵庫県明石市小久保2-2-7幹線ビル4F
Email:takahashi_kazuhiro @ nifty.com
http://homepage3.nifty.com/ALVS/