(toppers-users 359) Re: Toppers CPU ロック状態について

TAKADA Hiroaki hiro @ ertl.ics.tut.ac.jp
2002年 1月 31日 (木) 13:16:24 JST


若林君 wrote:
> mITRON4.0仕様では、非タスクコンテキストかつCPUロック状態で使えるAPIは
> 次のものに限定されています。
>  ・iloc_cpu / iunl_cpu
>  ・sns_dpn, sns_dsp, sns_ctx, sns_loc, sns_tex
> 
> カーネル内部を見回してみたところ、TOPPERS/JSPで使えるのも多分
> これだけだと思います。依存部によっては例外的にena_intやchg_ixxが
> 使えるものもありそうですが、実装ミスかサポート外と書いてあるかの
> どちらかのようです。

JSP は、その名前の通り、μITRON4.0仕様で可能とされていることだけ可能と
なるよう設計してあります。そのため、下に述べる例外を除いては、CPUロッ
ク状態で使えるのは上の7つだけということになります。

この例外は、ターゲット依存の chg_ixx/get_ixx, ena_int/dis_int と、実装
独自拡張の vxget_tim と vxsns_??? です。ターゲット依存のものについては、
ターゲット依存部の実装者に任せています。vxget_tim は、性能評価用という
目的上、CPUロック状態でも呼べるようにしてあります (ただし、タスクコン
テキストだけ)。vxsns_??? は、CPU例外ハンドラから呼ぶとしか想定していま
せんが、CPUロック状態でも呼べます。

CPUロック状態については、若林君が答えてくれていますが、念のため1つだ
け。

CPUロック状態と、プロセッサの割込み禁止状態は、概念上は独立です。ただ
し、実装上は、多くの場合、プロセッサの割込み禁止状態で、CPUロック状態
を実現することができます。「多くの場合」と書いたのは、これができません
場合があるためです。例えば、

(1) プロセッサが割込み禁止/許可ビットを持っている。
(2) 多重割込みを許さない実装とし、割込み処理中は、割込み禁止とする。

とします。この場合、μITRON4.0の仕様上、割込みハンドラの中で CPUロック
状態を解除できることが必要なため、(2) の前提とあわせると、プロセッサの
割込み禁止で CPUロックを実現できないことになります。この場合には、CPU
ロック状態であることを表す変数を導入すれば OK です。

高田広章
豊橋技術科学大学