(toppers-users 3339) Re: TOPPERS新世代カーネル統合仕様について

Hiroaki TAKADA hiro @ ertl.jp
2010年 12月 21日 (火) 16:11:49 JST


孫様

> タイマー割り込みのオーバヘッドが許容範囲内であれば、
> (1)の方法でおそらく問題ないはずです。
> (動かしてみないと許容範囲内なのか外なのか分かりませんが。。。)

(1)の方法で問題がないとすると、例えば、タイマ割込み周期を100μ秒に
変更し、RELTIMやTMOを100μ秒単位と読み換えるのが最も簡単な方法です。
タイマ割込み周期を100μ秒にして、RELTIMやTMOを1μ秒単位で使いたい
場合には、TIC_DENOを100に定義すればOKです(当然ですが、指定できる
最大時間が1/1000になりますので、オーバフローに注意が必要ですが)。

>> タイムアウト時間をμ秒単位にしたい場合には、カーネルの修正が必要
>> ですが、
>
> ここは、(1)などの処理をして、us単位のタイムアウト判定ができるように
> 仕組みを入れ、tslp_tsk()などms単位でタイムアウト指定をするAPI群の
> us版を用意するという作業になるのでしょうか。

(1)で良ければ上に書いた通りです。(2)を実現したい場合には、カーネル
内のタイマモジュールを交換することが必要です。カーネル内のタイマモ
ジュールをμ秒単位で動くものに交換すれば、サービスコール処理は今の
まま(つまり、tslp_tskのまま)で、μ秒単位の動作になります。おっし
ゃるように、μ秒単位のサービスコールを別に用意する手もありますが、
改造が大きくなりそうです。

>> 周期ハンドラやアラームハンドラをμ秒単位にしたい場合には、
>> カーネルの上にミドルウェアという形でも実装可能
>
> ここは、周期ハンドラやアラームハンドラの場合は、
> OSが使っているタイマーと別のものを利用すれば、
> カーネルの方には手を入れずに実装できるよという風に理解しましたが、
> 合っていますでしょうか。

はい。そういう意味です。

高田広章
名古屋大学

(10/12/21 15:35), 孫 正道 wrote:
> 高田様
> 
> 色々とアドバイスを頂き、ありがとうございます。
> 
> タイマー割り込みのオーバヘッドが許容範囲内であれば、
> (1)の方法でおそらく問題ないはずです。
> (動かしてみないと許容範囲内なのか外なのか分かりませんが。。。)
> 
> 最後に頂いたコメントをちゃんと理解しているか心配なので
> ご確認頂ければと思うんですが、
> 
>> タイムアウト時間をμ秒単位にしたい場合には、カーネルの修正が必要
>> ですが、
> 
> ここは、(1)などの処理をして、us単位のタイムアウト判定ができるように
> 仕組みを入れ、tslp_tsk()などms単位でタイムアウト指定をするAPI群の
> us版を用意するという作業になるのでしょうか。
> 
>> 周期ハンドラやアラームハンドラをμ秒単位にしたい場合には、
>> カーネルの上にミドルウェアという形でも実装可能
> 
> ここは、周期ハンドラやアラームハンドラの場合は、
> OSが使っているタイマーと別のものを利用すれば、
> カーネルの方には手を入れずに実装できるよという風に理解しましたが、
> 合っていますでしょうか。
> 
> よろしくお願いいたします。
> ---
> 孫 正道
> 
> (2010/12/21 14:47), Hiroaki TAKADA wrote:
>> 孫様
>>
>> 実装的には、μ秒単位のタスク制御をする場合に、2つのアプローチが
>> 考えられます。
>>
>> (1) 今の実装と同様、周期的にタイマ割込みを入れる。タイマ割込みの
>>   周期を例えば100nsに短縮する。
>>
>> (2) 周期的なタイマ割込みではなく、次のイベントが起こるまでの時間
>>   をタイマに設定し、そのタイミングで割込みを入れる。
>>
>> (1)の方法は、実装は簡単です(というか、ほとんどそのままでOK)が、
>> タイマ割込みのオーバヘッドが大きくなるという欠点があります。(2)の
>> 方法は、ハードウェアが備えるタイマによって実装の可否が影響を受け
>> るなど、実装がちょっと面倒になります。
>>
>> 孫さんのニーズは、(1)の実装で満たせるでしょうか? それとも、(2)の
>> 実装が必要でしょうか?
>>
>> (2)の実装をTOPPERSで用意する場合には、ASPカーネルの拡張パッケー
>> ジのような形が有力と思います。
>>
>>> こちらは、uITRON仕様でも、TOPPERS新世代カーネル統合仕様でもない
>>> 「自前」でやればできるという理解で宜しいでしょうか。
>> タイムアウト時間をμ秒単位にしたい場合には、カーネルの修正が必要
>> ですが、周期ハンドラやアラームハンドラをμ秒単位にしたい場合には、
>> カーネルの上にミドルウェアという形でも実装可能という意味で書きま
>> した(この説明で通じているか不安ですが)。
>>
>> 高田広章
>> 名古屋大学
>>
>> (10/12/21 14:34), 孫 正道 wrote:
>>> 高田様
>>>
>>> 株式会社フィックスターズの孫と申します。
>>>
>>> コメント頂きましてありがとうございます。
>>>
>>> T-Kernel 2.0のようにus単位でのタスク制御、タイムアウト制御などが
>>> TOPPERS上でできないかと検討しているところです。
>>>
>>> あまり詳しくは申し上げられませんが、
>>> ターゲットとしているシステムが数百us以内に
>>> いくつかの仕事をしないといけないもので
>>> ms単位のオーダだと、粗すぎるというだけの話です。
>>>
>>>> 要求が多いようであれば考えたいと思います。
>>> マイクロコントローラというレベルを超えて、
>>> ある程度の規模のエンベデッドシステムとなると
>>> やはりms単位では厳しい気がいたします。
>>> T-Kernel 2.0でもus単位の制御をアピールしているところですから、
>>> ニーズはあるのではないかと個人的には思います。
>>>
>>>> (OSが使っているのとは別に)それ用のタイマを用いて制御するこ
>>>> とになります。
>>> こちらは、uITRON仕様でも、TOPPERS新世代カーネル統合仕様でもない
>>> 「自前」でやればできるという理解で宜しいでしょうか。
>>>
>>> よろしくお願いいたします。
>>>
>>>
>>> (2010/12/21 14:05), Hiroaki TAKADA wrote:
>>>> 孫様
>>>>
>>>> 名古屋大学/TOPPERSプロジェクトの高田です。
>>>>
>>>> 現時点では、RELTIM、TMOの拡張については検討していませんが、
>>>> 技術的に難しい話しではありませんので、要求が多いようであれば
>>>> 考えたいと思います。具体的にどのような使い方をされたいか、差
>>>> し支えない範囲でご教示いただけると幸いです。
>>>>
>>>> 現在のTOPPERSカーネルでμs単位のタスク制御を行いたい場合には、
>>>> (OSが使っているのとは別に)それ用のタイマを用いて制御するこ
>>>> とになります。これも、より具体的な要求にわかれば、適切な方法
>>>> がご提示できると思います。
>>>>
>>>> 高田広章
>>>> 名古屋大学
>>>>
>>>> (10/12/20 12:25), 孫 正道 wrote:
>>>>> はじめまして。孫と申します。
>>>>>
>>>>> TOPPERS新世代カーネル統合仕様について
>>>>> ご質問させていただきたいと思います。
>>>>>
>>>>> TOPPERS新世代カーネル統合仕様では
>>>>> 性能評価用システム時刻をus単位で取得することができるようですが、
>>>>> 将来はT-Kernel 2.0のようにRELTIM、TMOなども
>>>>> us単位に拡張される予定なのか、
>>>>> ご存じの方はいらっしゃいますでしょうか。
>>>>>
>>>>> あと、現在のTOPPERSカーネルを使ってus単位の
>>>>> タスク制御を行う方法はありますでしょうか。
>>>>>
>>>>> よろしくお願いいたします。
>>>>>
>>>>> ---
>>>>> 孫 正道
>>>>>
>>>
>