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

杉本明加 asuka.choronos @ gmail.com
2012年 2月 1日 (水) 13:51:13 JST


高橋様

杉本です。丁寧な回答ありがとうございます。


> これは、一部追加、修正していますが、以下の理解であっているでしょうか?
>
>> 同一の起動時優先度に対する複数のタスク登録は今のところ前向きに考えています。
>> (高田先生、斉藤さんとの共通見解ではありませんが)
>>
>> その場合、同一の起動時優先度を持つタスクが複数実行可能状態に
>> なった場合、優先順位は先に複数実行可能状態になったものが高くなる
>> 現行のSSPではなくASPなどの従来のものと同じ仕様通りになります(FCFS)。
>> 条件に合う場合は狭義の省スタック化が可能です。
>> 実装としては、同一の現在優先度のタスクが
>> 存在するタスク現在優先度にのみレディキューを用意する形を考えています。
>
> 訂正したものは
> 1)優先度の表現をどれかを明確にした。
> 2)従来の仕様とは、SSPの現状のものではなく、ASPなどのものであることを明確にした。
> 3)スタック共有は単に1つのメモリ配列を持つものという意味で使われている(そう理解している
> 人もいた)ので狭義の省スタック化に置き換えた。
>
> です。

はい。認識は同じです。曖昧だった部分の補足ありがとうございます。
細かい点について触れておくと、2)に関しては現行のSSPでは同一起動時優先度を
持つタスクは生成できないので、考慮が不要だっただけですね。


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


おっしゃる通り設定への制限はもう少し検討が必要だと思っています。
他には動的に優先度を変更するサービスコール(chg_pri)は使用できないことになります。

「起動時実行時の優先度が入れ子の場合」というのが分からなかったのですが、
どういったタスク生成のしかたを指すのかご教授いただけますでしょうか?

>> DEF_EPRI自体は排他としての用途があり、SSPではタスク間同期機能がなく
>> 排他手段が限られるので廃止はしなくてよいかと思っています。
>>
>
> そこは、自分は考えが至らなかった部分かと気づきました。
> ただ、ディスパッチ禁止等で対応可能だと思うので絶対ではないように
> 思っています。

ディスパッチ禁止だと全てのタスクに影響が及ぶのに対して、部分的な
排他ができるのがDEF_EPRIですので、使い分けになるのではないかと
考えていますがいかがでしょうか。

>>  - 同一優先度に対して1つのタスクのみ登録できる制限を撤廃
>>  - タスクの間の優先順位は起動優先度で区別する
>>   (左記のメールでのpri_tblで定義されていたデータでしょうか?)
>>  - 起動優先度はタスクが起動されたタイミングで変更される
>>    具体的には、既に実行可能状態になっていないタスク優先度を持つタスクの
>>    中で最も高くなる
>>  - タスクが実行されるときの優先度が実行時優先度
>>
>
> 基本的に、私の提案は、動作仕様としては、従来のASPと同じ仕様で同一(外部表現)優先度でFCFSするものと考えています。
> (この場合には、起動時優先度も実行時優先度も内部表現なので特に区別せずに書いています。)
> 結果的には、上記に表明されたレディキューを用いるものと大方同じだと思っています。

振る舞いはほぼ同じかと思いつつ確信まで持てなかったのですが、
やはりそうでしたか。他のカーネルとの振る舞いと一致している方が
よいので、望ましい方向性だと思います。

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

(内部表現)実行時優先度がスケジューリングに関わりますね。
失礼しました。

>>  - タスクが実行されるときの優先度が実行時優先度
> No,(内部表現)実行時優先度です。
> SSPのカーネルロジックは、pri_tblを使う以外変更しません。

すみません、(内部表現)実行時優先度と正確に書くべきでした。


ちなみに、先のメールで挙げていただいたタスク設定の例で、(外部表現)起動優先度と
(内部表現)実行時優先度は常に同じなのでしょうか。これが異なるシチュエーションがあれば挙げていただけると幸いです。

以上、よろしくお願いします。