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

Hiroaki TAKADA hiro @ ertl.ics.tut.ac.jp
2002年 11月 26日 (火) 20:47:15 JST


この後、斉藤さんと若林君の間で議論になっていますが、それとは独立に私な
りの回答を書きます。

斉藤さん wrote:
> doc/config.txt 「3.カーネル用のデータ型や関数など」の
> (4-1) void dispatch(void) の説明で,
> 「タスクディスパッチャ(以下,単にディスパッチャと言う)を明示的に呼ぶた
> めの関数.タスクコンテキストから呼ばれたサービスコール処理から,CPUロッ
> ク状態で呼ばれる.」
> 
> とあるのですが, ターゲット依存部の
> dispatch では,「割込み禁止状態で呼び出さなければならない」と
> なっているケースが多いように思いました.
> 

** Cut quoted 3 lines by the mail filter. **

結論から言いますと、ここは、元の表現が正しいです。

微妙な問題なので、丁寧に説明します。

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

「CPUロック状態」では、割込みもディスパッチも禁止されます。つまり、
「CPUロック状態」ならば「割込み禁止」です。ですから、「dispatch は割込
み禁止で呼ばれる」は正しいです。

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

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

以上ですが、わかりにくい説明である気もします。納得されていないようでし
たら、ご遠慮なく再質問ください。

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