(toppers-users 3769) Re: SSPの DEF_EPRI とは何でしょうか。

Hiroaki TAKADA hiro @ ertl.jp
2012年 1月 18日 (水) 14:16:22 JST


高橋様

提示下さった例では、タスクDとEが同時にスタックを使うことはありませ
んので、40 + 70 = 110バイトという計算になると思います。

ただし、タスクの実行時優先度がすっきり設定されていればいいのですが、
そうでない場合、計算方法はちょっと複雑になります。

例えば、提示くださった例で、タスクAの起動時優先度が、DとEの実行時優
先度よりも同じか低い場合には、タスクAとD、タスクAとEが同時にスタック
を使う状況がなくなりますので、40 + 60 = 100バイトという計算になりま
す。

この計算をコンフィギュレータにやらせれば、より安全性が増すと思います
が、現状ではその実装はできていません。

高田広章
名古屋大学

(12/01/18 14:07), 高橋和浩@nifty wrote:
> 回答ありがとうございます。 アライブビジョンソフトウエアの高橋です。
> 
> QAついてはわかりました。Q2についても実行時優先度が同一タスクが複数のケースがあるため
> 起動時優先度、実行時優先度の2種類が必要ということですね。
> 
> 関連して、ご指導いただけければ幸いですが、
> スタックサイズはどのようにして設定すればいいのでしょうか?
> 
> 共有化しないタスクスタックは、従来通り
> 共有化するタスクスタックは
> 最も高い同一の実行時優先度もつタスクの中での最大スタックのタスクのスタックサイズと
> 最も高いもの以外の実行時優先度をもつタスクのスタックの総和を足したもの
> つまり、 タスクA,B,C が同一実行時優先度で、それぞれ 50byte 60byte 70byteの最大スタックを
> 利用し、同様にタスクD,E が同一実行時優先度(ABCより低い)で、それぞれ 30byte,40byte の最大スタックを
> 利用する場合は、
> 30 + 40 + 70 = 140 byte
> 
> のように思うのですがどうでしょうか?
> 
> よろしくお願いします。
> 
> 
> On Wed, 18 Jan 2012 13:17:20 +0900
> Hiroaki TAKADA<hiro @ ertl.jp>  wrote:
> 
>> 高橋様
>>
>> SSPカーネルでは、起動時優先度あたりタスク1個、言い換えると、
>> 同じ起動時優先度のタスクが複数あってはならないという仕様で
>> す。実行時優先度が同じタスクが複数あってもかまいません。
>>
>> これで両方の回答になっていますでしょうか?
>>
>> 高田広章
>> 名古屋大学
>>
>> (12/01/18 12:01), 高橋和浩@nifty wrote:
>>> アライブビジョンソフトウエアの高橋です。
>>>
>>> 早速の回答ありがとうございます。
>>>
>>> 実行時優先度は、URLの説明するところの実行後優先度のことかと思います。
>>> さらに起動時優先度が、URLの説明するところの実行待ち優先度のことかと理解しました。
>>> タスクの挙動は理解したつもりです。
>>>
>>> もう少し説明いただけたら幸いですが、
>>> SSPの実装仕様に関することですが
>>>
>>>> ・1つのタスク優先度に対して登録できるタスクは1つに限定する
>>> と記載があります。
>>>
>>> Q1.優先度あたりタスク1個としていますが、タスクあたり優先度は2つあります。
>>> どの範囲で1つとして制限されているのでしょうか?
>>> 例 タスクAは、起動時優先度が5 実行時優先度が4
>>> タスクBは、起動時優先度が6、実行時優先度が5 の場合に優先度5にタスクAとBが存在します。
>>> NGのように思いますがどのような制限ルールなのでしょうか?
>>>
>>> Q2.URLの図が参照できないみたいで、なぜというところが少しわかっていないのですが
>>> 特許は、同一優先度の(1)の方式と優先度1個を併用する(2)ために優先度を2つ用いるもののようなのですが
>>> SSPは同一優先度を認めない実装なのであれば、実行時優先度が必要ないように思うのですが
>>> どのように理解すればよいでしょうか?
>>>
>>> よろしくお願いします。
>>>
>>>
>>> On Wed, 18 Jan 2012 10:30:54 +0900
>>> Hiroaki TAKADA<hiro @ ertl.jp>   wrote:
>>>
>>>> 高橋様、皆様
>>>>
>>>> この件に関して、TOPPERS新世代カーネル仕様書に追加予定の文をお送りし
>>>> ます。
>>>>
>>>> -----
>>>> SSPカーネルにおける追加機能として,タスクに対して,実行時優先度の情報を
>>>> 持つ.タスクの実行時優先度は,起動時優先度が異なるタスク間でスタック領
>>>> 域を共有するために,起動時優先度とは異なる優先度でタスクを実行するため
>>>> の機能である.タスクが起動された後,最初に実行状態になる時に,タスクの
>>>> ベース優先度が,タスクの実行時優先度に設定される.
>>>> -----
>>>>
>>>> 仕様書の文ですので、これだけでは導入意図がわかりにくいと思います。
>>>>
>>>> 読みにくい文ですので、お勧めはしませんが、以下に説明があります。
>>>>
>>>> http://www.j-tokkyo.com/2000/G06F/JP2000-132409.shtml
>>>>
>>>> OSEK OSをご存じのであれば、OSEK OSの内部リソースに相当する機能と言った
>>>> 方がわかりやすいかもしれません。
>>>>
>>>> 高田広章
>>>> 名古屋大学
>>>>
>>>> (12/01/18 10:19), 高橋和浩@nifty wrote:
>>>>> MLを拝見させていただいています。
>>>>> アライブビジョンソフトウエアの高橋と申します。
>>>>>
>>>>> SSPについて話が進んでいるようなのですが、少しついていけません。
>>>>> 「実行時優先度」とは何なのか、ちょっとわかりません。
>>>>> ドキュメントに何か書かれたものがございますでしょうか?
>>>>>
>>>>> ssp_spec.txtの
>>>>> ----------------------------------------------------------------------
>>>>> ○前提となる文書
>>>>> [1] トロン協会: μITRON4.0仕様, Ver.4.02.00, 2004年.
>>>>> [2] TOPPERSプロジェクト: TOPPERS新世代カーネル仕様書 Release 1.2.0
>>>>> [3] TOPPERSプロジェクト: TOPPERS標準割込み処理モデル, 最終更新: 2008年
>>>>> 4月11日.
>>>>> ---------------------------------------------------------------------
>>>>> の[1][2]を見ても「実行時優先度」は見当たりませんでした。
>>>>> #SSPのR8Cのパッケージのデータも確認しましたが見当たりません。
>>>>>
>>>>> [1]で記載がある用語では
>>>>> 起動時優先度
>>>>> ベース優先度
>>>>> 現在優先度
>>>>>
>>>>> かと思いますが、さらに実行時優先度はまた違うものなのでしょうか?
>>>>>
>>>>> よろしくお願いします。
>>>>>
>>>>> すいません
>>>>> (toppers-users 3751) に書かれていることもよくわかりません。
>>>>>
>>>>>> DEF_EPRIを使うと異なるタスク優先度を持つタスクに対して実行時に
>>>>>> 同一のタスク優先度を設定できます。
>>>>> 単純に静的API(DEF_EPRI)で、CRE_TSKの起動時優先度の代わりに、実行時優先度と呼ばれるものが
>>>>> が使われるだけのように思うのですが、たぶんここに誤解があると思っています。
>>>>>
>>>>>
>>>>>
>>>>> On Wed, 18 Jan 2012 00:08:49 +0900
>>>>> 杉本明加<asuka.choronos @ gmail.com>    wrote:
>>>>>
>>>>>> こいさんさん
>>>>>>
>>>>>> 杉本です。
>>>>>>
>>>>>> DEF_EPRIはSSPで導入した実行時優先度を定義するための静的APIです。
>>>>>>
>>>>>> タスクに対してDEF_EPRIで実行時優先度を指定しておくと、タスクが
>>>>>> 最初に実行状態になった時にCRE_TSKで指定したタスク優先度では
>>>>>> なくDEF_EPRIで指定した値がタスク優先度に設定されます。
>>>>>>
>>>>>> DEF_EPRIを使うと異なるタスク優先度を持つタスクに対して実行時に
>>>>>> 同一のタスク優先度を設定できます。
>>>>>>
>>>>>> これはタスク間の排他に用いたり(SEK/VDXやAUTOSAR OSでいう内部リソースと
>>>>>> 同様の振る舞いと)、異なるタスク優先度を設定した(むしろSSPではそのように
>>>>>> しか指定できませんが)タスク間でスタック領域を共有することができます。
>>>>>>
>>>>>>
>>>>>> 実行時優先度の指定をどのように行うかはCRE_TSKを拡張する
>>>>>> 方法などいくつか検討しましたが、他のカーネルとの互換性を考慮し
>>>>>> 新たに静的APIを追加することとしました。
>>>>>>
>>>>>> 以上、よろしくお願いします。
>>>>>>
>>>>>>
>>>>>> 2012年1月17日17:54 koizumi yoshiyuki<koizumiyoshiyuki @ gmail.com>:
>>>>>>>  こいさんです
>>>>>>>
>>>>>>>  SSPの DEF_EPRI とは何でしょうか。CPU例外が発生したときの優先度のように見えるのですがよくわかりません。doc/*.txtにも特に記述がありません。
>>>>>>>
>>>>>>>  sample1.cfgには以下のような記述があります。
>>>>>>> CRE_TSK(TASK3 , { TA_NULL , 3 , task , TASK3_PRIORITY , STACK_SIZE , NULL
>>>>>>> });
>>>>>>> DEF_EPRI(TASK3 , { TASK3_EXEPRIORITY });
>>>>>>>  sample1.hで優先度の定義は
>>>>>>> #define INIT_PRIORITY (1)
>>>>>>> #define MAIN_PRIORITY (2)
>>>>>>> #define TASK1_PRIORITY (3)
>>>>>>> #define TASK2_PRIORITY (4)
>>>>>>> #define TASK3_PRIORITY (5)
>>>>>>> #define TASK3_EXEPRIORITY (4)
>>>>>>>  です。
>>>>>>>
>>>>>>>  cfgで作成された、kernel_cfg.cは以下のようになっています。
>>>>>>>
>>>>>>> const uint_t   _kernel_tinib_epriority[TNUM_TSKID] = {
>>>>>>> INT_PRIORITY(1),INT_PRIORITY(2),INT_PRIORITY(3),INT_PRIORITY(4),INT_PRIORITY(4)
>>>>>>> };
>>>>>>>
>>>>>>>
>>>>>>>  TASK3の優先度は5になって欲しい気がしています。
>>>>>>>  DEF_EPRI(TASK3 , { TASK3_EXEPRIORITY });が関連しているのでしょうか。
>>>>>>>  以上
>>>>>>>
>>>>> ---
>>>>> アライブビジョンソフトウエア株式会社
>>>>> 高橋和浩
>>>>> 673-0005兵庫県明石市小久保2-2-7幹線ビル4F
>>>>> Email:takahashi_kazuhiro @ nifty.com
>>>>> http://homepage3.nifty.com/ALVS/