(toppers-users 3864) Re: DEF_RPRIを無くすご提案

高橋和浩@nifty takahashi_kazuhiro @ nifty.com
2012年 2月 1日 (水) 09:31:29 JST


杉本様 MLの皆様 おはようございます。 アライブビジョンソフトウエアの高橋です。

回答ありがとうございます。

> 同一優先度に対する複数のタスク登録は今のところ前向きに考えています。
> (高田先生、斉藤さんとの共通見解ではありませんが)
> 
> その場合、同一の起動時優先度を持つタスクが複数実行可能状態に
> なった場合、優先順位は先に複数実行可能状態になったものが高くなる
> 従来の仕様通りです(FCFS)。同一優先度のタスクは一つしか実行状態に
> ならないのでスタック共有が可能です。実装としては、同一優先度のタスクが
> 存在するタスク優先度にのみレディキューを用意する形を考えています。
> 

これは、一部追加、修正していますが、以下の理解であっているでしょうか?

> 同一の起動時優先度に対する複数のタスク登録は今のところ前向きに考えています。
> (高田先生、斉藤さんとの共通見解ではありませんが)
> 
> その場合、同一の起動時優先度を持つタスクが複数実行可能状態に
> なった場合、優先順位は先に複数実行可能状態になったものが高くなる
> 現行のSSPではなくASPなどの従来のものと同じ仕様通りになります(FCFS)。
> 条件に合う場合は狭義の省スタック化が可能です。
> 実装としては、同一の現在優先度のタスクが
> 存在するタスク現在優先度にのみレディキューを用意する形を考えています。

訂正したものは
1)優先度の表現をどれかを明確にした。
2)従来の仕様とは、SSPの現状のものではなく、ASPなどのものであることを明確にした。
3)スタック共有は単に1つのメモリ配列を持つものという意味で使われている(そう理解している
人もいた)ので狭義の省スタック化に置き換えた。

です。

ただ
>同一優先度のタスクが存在するタスク優先度にのみレディキューを用意する形を考えています。
がかなり飛躍があるので違っているようにも思いますが、さらに優先度(起動時実行時いずれでも)
が同一でなくてもレディキューが必要なケースもある(起動時実行時の優先度が入れ子の場合)ので、
設定に制限をかけるかなにかの必要性があるように思います。

上記で、あっているものとすれば、実装方法としてはレディキュー方式による言わばレトロフィット
の案というわけですね。

> DEF_EPRI自体は排他としての用途があり、SSPではタスク間同期機能がなく
> 排他手段が限られるので廃止はしなくてよいかと思っています。
> 

そこは、自分は考えが至らなかった部分かと気づきました。
ただ、ディスパッチ禁止等で対応可能だと思うので絶対ではないように
思っています。

> 
> 高橋様の提案なのですが、私が捉え違いをしていないか
> 確認いただけるでしょうか?
> (理解力が低いのでご面倒ですが確認願います)
> 
>  - 同一優先度に対して1つのタスクのみ登録できる制限を撤廃
>  - タスクの間の優先順位は起動優先度で区別する
>   (左記のメールでのpri_tblで定義されていたデータでしょうか?)
>  - 起動優先度はタスクが起動されたタイミングで変更される
>    具体的には、既に実行可能状態になっていないタスク優先度を持つタスクの
>    中で最も高くなる
>  - タスクが実行されるときの優先度が実行時優先度
> 

基本的に、私の提案は、動作仕様としては、従来のASPと同じ仕様で同一(外部表現)優先度でFCFSするものと考えています。
(この場合には、起動時優先度も実行時優先度も内部表現なので特に区別せずに書いています。)
結果的には、上記に表明されたレディキューを用いるものと大方同じだと思っています。

個別に回答します。
>  - 同一優先度に対して1つのタスクのみ登録できる制限を撤廃
YES
>  - タスクの間の優先順位は起動優先度で区別する
>   (左記のメールでのpri_tblで定義されていたデータでしょうか?)
NO,
現在のSSPの(内部表現)起動時優先度、(内部表現)実行時優先度で判断します。
ロジックそのものは現在のSSPと同じです。
ただし、(内部表現)起動時優先度は、TCBの配列および、ready_primapのビット位置に
相当しますが、これを一部入れ替えるためにpri_tblを使用します。
つまり従来 TCB[1-1] であれば ready_primapのbit0が固定的に割り当てられますが、
TCB[pri_TBL[1-1]]が ready_primapのbit0に割り当てられるようにすることで、起動時優先度を
変化させるようにするものです。レディキューを持つものと等価な働きになると考えています。

>  - 起動優先度はタスクが起動されたタイミングで変更される
>    具体的には、既に実行可能状態になっていないタスク優先度を持つタスクの
>    中で最も高くなる
YES
>  - タスクが実行されるときの優先度が実行時優先度
No,(内部表現)実行時優先度です。
SSPのカーネルロジックは、pri_tblを使う以外変更しません。

よろしくお願いします。


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