(toppers-users 1949) Re: sns_locとloc_intについて

TAKADA Hiroaki hiro @ ertl.jp
2005年 3月 11日 (金) 17:47:38 JST


酔漢様

> 割り込みロック機能について質問があります。
> 
> 質問1 :
> PDIC機能ガイドラインで規定されているloc_int()関数を使って割り込みをロッ
> クした場合、ITRON4のsns_loc()関数はロック状態であると返すべきでしょう
> か、それともロック解除状態であると返すべきでしょうか。

これは未定義です。以前に、どなたか(今井さん?)から問題提起いただいた
気がしますが、正直なところ深く考えていません。

直感的には、どちらかを返す、と決めると、プロセッサによって、LOC_INT や 
loc_cpu のオーバヘッドを増やしてしまうおそれがあると思います(ちゃんと
確かめたわけではないです)。

例えば、

> 私見ですが、loc_int()はOSに依存しない実装を意識してはいるものの、loc_cpu
> の機能強化版と考えてsns_locは「ロック状態」と返すべきだとかんがえます。

のように決めると、CPUロック状態を表す変数を用いている実装では、LOC_INT 
でもその変数を設定しなければならず、余計なオーバヘッドを生じるように思
えます。

> 現実問題としてloc_int()による割り込みロック領域はきわめて短いはずなの
> で、その中でsns_loc()が使用されるというのは病的だろうとは思います。しか
> しながら、設計思想としてどうなのかを知っておきたいので質問しました。

そうですね。割込みロック中に sns_loc が使用されることは考えたくないで
すが、割込みロック中にCPU例外が発生し、CPU例外ハンドラの中で sns_loc 
される状況は考えなくてはなりません。

この状況で、どういうリカバリが可能かを検討すると、sns_loc が何を返すべ
きかという結論が出そうな気がします。

> 質問:2
> loc_int状態でloc_cpu() / unl_cpu() を実行した場合、TOPPERS/JSPは正しく動
> 作すべきでしょうか。それともそのような場合は無視してもかまいませんでしょ
> うか。

基本的には無視してよいと思いますが、上と同様に、LOC_INT した状態で動作
したCPU例外ハンドラのことを考えなくてはなりません。

高田広章
名古屋大学