(toppers-users 653) Re: config.txt について

Naoki Saito saito @ nmiri.city.nagoya.jp
2002年 11月 28日 (木) 10:48:31 JST


斉藤@名古屋市工研です.

ご回答いただきましてありがとうございます.
# だんだん頭が混乱してきています.

元々の疑問は, ターゲット依存部の dispatch のコメントと
config.txt の記述が何故異なっているのか, という事でした.

config.txtでは
「タスクコンテキストから呼ばれたサービスコール処理から,CPUロック状態で呼ばれる」
とあり, 一方 dispatch のコメントでは
「割込み禁止状態で呼び出さなければならない」
となっています.

そこで, 最初の質問をさせていただいたのでした.

「CPUロック状態で呼ばれる」の方が正しいとするならば,
dispatch のコメントは「CPUロック状態で呼び出さなければならない」
もしくは「CPUロック状態で呼び出される」となっていても
良いのではないだろうか ? とも考えたのですがそれはさておきまして,

> μITRON4.0仕様の「CPUロック状態」というのは、いわば仮想化された状態で
> して、JSPカーネルでそれをどのように実装するかは、ターゲット依存です。

はい, この部分は理解できます.
 
> 「CPUロック状態」では、割込みもディスパッチも禁止されます。つまり、
> 「CPUロック状態」ならば「割込み禁止」です。ですから、「dispatch は割込
> み禁止で呼ばれる」は正しいです。

はい, この部分も理解できます.

> 逆に、「割込み禁止」だからと言って、「CPUロック状態」であるとは限りま
> せん。例えば、IRC を操作してすべての割込みをマスクしたとします。これは、
> 「割込み禁止」であると言えますが、CPUロック状態になるとは限りません
> (ターゲット依存部の実装にもよります)。つまり、「dispatch はCPUロック
> 状態で呼ばれる」という表現の方が、「dispatch は割込み禁止で呼ばれる」
> という表現よりも強いことを言っていることになります。

何故 dispatchの呼出される条件について「より強い条件」が必要なのか
という疑問は残っているのですが, 仰る内容は理解できます.

> doc/config.txt の上の記述は、カーネルのターゲット非依存部が、依存部の 
> dispatch を呼び出す際に、単に「割込み禁止」ではなく、「CPUロック状態」
> で呼びますよ、ということを明確にしているわけです。

「dispatch() はCPUロック状態で呼びだされている」という事実は理解できたのですが,
その理由がよくわかりませんでした.

(1) 「dispatch() の処理の性格上, CPUロック状態で呼ばなくてはならない」からなのか,
(2) 「dispatch() をどのような状態で呼び出すかはカーネルの実装者に任せられた話で,
    TOPPERS/JSPカーネルでは CPUロック状態で呼ぶこととしている」からなのか,
(3) 「サービスコール処理はその大半を CPUロック状態で処理しているので
    (その流れで)dispatch()を呼び出す時にはCPUロック状態で呼ばれることになる」からなのか.
(4) その他

dispatch() が「より強い条件」で呼ばれなければならない, ということからすると
(1)なのかなと考えています.