(toppers-users 479) 非タスクコンテキストでのサービスコールの遅延実行
Tatsuhiko Matsukawa
KFC00725 @ nifty.ne.jp
2002年 8月 20日 (火) 09:16:58 JST
お世話になります。
その後、サービスコールの遅延実行について検討してみましたが、割り込み禁
止区間を短くするのに、かなり効果があるようですね。
具体的には、以下のような実装を検討しています。
(A) 遅延実行するサービスコールの記憶には固定サイズのリングバッファを用
いる。遅延実行を必要とするサービスコールは最大でも2個のパラメータで、
かつ、Xstormy16の場合何れも16bitなので、
FP _kernel_delayed_svc_function[MAX_DELAYED_SVC] ; //遅延実行する関数
VP_INT _kernel_delayed_svc_paramater1[MAX_DELAYED_SVC] ; // 第一パラメータ
VP_INT _kernel_delayed_svc_paramater2[MAX_DELAYED_SVC] ; // 第二パラメータ
UINT _kernel_delyed_svc_put_pointer ; // リングバッファへの書き込みポインタ
UINT _kernel_delyed_svc_get_pointer ; // リングバッファの読み出しポインタ
となります。
MAX_DELAYED_SVCをどう決定するかが悩めるところですが、2の階乗にしてお
いたほうが処理が楽なので、16か32あたりで固定(それ以上が必要ならユーザ
ーカーネルをリコンパイル)にしてしまうか、コンフィグレータを拡張してユ
ーザが指定できるようにするか、今後の検討課題です。
(B) 遅延実行を行うタイミングの決定には、最も優先度の低い割り込みを用い
ます。非タスクコンテキスト(すなわちこれより優先度の高い割り込み処理中)
中は、優先度の低い割り込みは遅延されます。また、タスクコンテキストから
のサービスコールで不可分性を保証する必要のある部分(現行、t_lock_cpu/
t_unlock_cpuで囲まれた部分)では、この遅延実行のための割り込みのみを禁止
します。
(C) 非タスクコンテキストからのixxx_yyyの呼び出しは、以下の手順となりま
す。
(1) パラメータ等をチェックし、不正ならエラーを返す。
(2) リングバッファーに空きがあるか調べ、なければE_NOMEMを返す。
(3) _kernel_delayed_svc_put_pointerを1進めて、
(4) 呼び出す関数、パラメータをリングバッファに記録。
(5) 遅延実行用の割り込み要求をセットする
(6) E_OKを返す。
この中で、(2)-(3)の区間だけは割り込み禁止にしなければなりませんが、こ
れぐらいであれば、「カーネルの管理外の割り込み」を実装する必要もなさそ
うです。
(D) 遅延実行用の割り込みでは、
(1) 割り込み要求をクリアする
(2) 記憶されたサービスコールを順次全て実行(ただしdispatch()のかわり
にreqflg=TRUE)
(3) 現行の割り込みハンドラの後処理と同様に、reqflgやタスク例外要求等
をチェックし、必要ならディスパッチする。
非タスクコンテキストからのサービスコールを遅延実行にすることで、カーネ
ル内で割り込み禁止にする必要が残るのは、
(1) 上記、リングバッファー書き込みポインタのインクリメント時。
(2) 割り込みハンドラ前後のintnest=0→1→0とタスク用スタック/システム用
スタックの切り替え時。
の2箇所のみになると思われるのですが、見落としが無いかは、今後じっくり
調べてみます。
非タスクコンテキストからのサービスコールを遅延実行にすることで、ITRON
のサービスコール以外のクリチカルセクションを持つ関数(malloc等)も、全割
り込み禁止やセマフォー等を用いることなく、簡単にスレッドセーフに実装す
ることができるという利点があります。
遅延実行のために割り込みを用いることによるオーバーヘッドもありますが、
Xstormy16の場合、割り込みサイクルの発生は3クロック、レジスタのPUSH/POP
は1クロックで行えるので、割り込み禁止時間の短縮のメリットから比べれば
目を瞑れる範囲ではないかと考えています。
松川竜彦
************************
松川竜彦
KFC00725 @ nifty.ne.jp
************************
----- Original Message -----
From: "Tatsuhiko Matsukawa" <KFC00725 @ nifty.ne.jp>
To: <toppers-users @ ertl.jp>
Sent: Tuesday, August 13, 2002 1:50 PM
Subject: (toppers-users 476) Re: TOPPERS/JSP の実装で教えてください。
> > > ご指摘の点は、カーネル設計上の大きな分岐点でして、割込み応答性が
> > : 中略
> > > い標準化」の考え方を採っている理由です)。
> > ご意見ありがとうございます。検討してみます。
> > (遅延実行するサービスコールのキューイング等、
> > かなり大変そうですね。)
> と思ったのですが、キューイングできる数を現実的な
> ところで制限していしまい、固定のキューバッファに
> すれば、それほど大変ではなさそうですね。
>
** Cut quoted 9 lines by the mail filter. **