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

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


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

> CPUロック状態が言うところの「ディスパッチが起らない」というのは、「プリ
> エンプトされない」(邪魔されない)と解釈する方がよいと思います。優先度の高
> い処理が起動され、現在実行中のタスクがプリエンプトされることで広義のディ
> スパッチが起るわけですが、ここでいう「ディスパッチ禁止」は「プリエンプト
> 禁止 (というか延期)」を意味していると解釈しています。

「プリエンプトされる」の意味はなんとなく理解できるのですが
正確な定義が良く分からないので, ここでは,

「"実行中のタスク" がディスパッチにより実行権を剥奪される」場合だけでなく,

「"現在の処理(これはタスク処理に限らずディスパッチャ, 発生した割込みより
低い割込みレベルの割込み関連処理なども含む)" が割込みの発生により
現在の処理が(強制的に)割込み処理に移される」場合も含む

# 簡単にいってしまえば(不正確とは思いますが)
# 「現在の処理が(何者かに)別の処理に実行を移されてしまうこと」
# とでもいえば良いのでしょうか?

という意味と理解することにします(間違っていたら御指摘ください).

ここまでの頭の中を整理する意味でまとめてみます.

まず,
「dispatch はその処理が実行されている間はプリエンプトされたくない」
という要求があって(その理由がまだ良く分かっていないのですが, それはさておき),

「dispatch実行中はプリエンプトされない」ことを保証するために
呼び出されるときに「CPUロック状態で」呼び出すことにした.

一方, μITRON4.0仕様においては
「CPUロック状態では, 割込みハンドラやタイムイベントハンドラは起動されず,
ディスパッチも起こらない」という記載がある.
これは, 「プリエンプトされないこと」を表現するための一つの方法と理解する.

例えば「CPUロック状態」という状態に

「タスク処理中」で遷移したならば,
「タスクのディスパッチが起こらない」かつ
「タイムイベントハンドラが起動しない」かつ
「割込みハンドラが起動しない」となる.

一方, 「ディスパッチャ(および dispatch 呼び出し直前も含む)」で遷移したならば,
「タイムイベントハンドラが起動しない」かつ
「割込みハンドラが起動しない」となる.
このように理解すれば, ディスパッチが起こらないということにはならない.

> つまり、「dispatch()がCPUロック状態で起動される」というのは、
> 「dispatch()の処理を邪魔するカーネル管理下のルーチンはどこにもいない」と
> 言う意味であり、ディスパッチ自体が起らないという意味ではないと解釈してい
> ます。

ようやくですが, なんとか(無理矢理)理解したような気分になりました.

> CPUロック状態という状態が必要な最大の理由が「邪魔されたくない処理
> (Critical section) があるから」なので、そんなに的外れな解釈ではないと
> 思っていますが... (^^;

ディスパッチ処理がCPUロック状態で行なわれるということは
「不可分に処理されなくてはならない」ものだということになると思うのですが
そういうものなのでしょうか. 

ひょっとしたら「自明な」ことなのかも知れませんが,
私の中ではまだ「自明」ではないのです. (^_^;;