[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1777] Re: devers3, lisbon3.



  こんにちは、川合です。


Koyanagi Masaaki さんは 2001/06/21 12:56:49 の「[OSASK 1774] Re:
 devers3, lisbon3.」で書きました:

>>   各タスクはグローバルレベルやローカルレベルを直接指定することは
>この「ローカルレベル」は「インナーレベル」のtypoだと思います。

  そうです。間違えました。小柳さんのご指摘が正しいです。

>タスクが異なると 同じ LL の数値でも意味が変わりうるのでしょうか?
>LL 0 スリープはどのタスクでも同じかと思いますが。

  はい。一般的には、変わり得ます。・・・しかし、今のシェルはシェ
ル側の設計を簡単にするために、ローカルレベルの意味を固定していま
す。

  ええと、この状況は以下のように理解してください。IA-32はセグメ
ンテーションを提供しますが、LinuxやWindowsのようにセグメンテーシ
ョンをほとんど利用しないでいることができます。これと同様に、TAPI
は最大8レベルの汎用的なローカルレベルを提供し、タスクによってそ
れぞれのレベルの持つ意味を自由に設定できますが、今はこの利点を生
かさずに運用しています。極端なことを言えば、スリープすることがな
いと断言できるタスクなら、スリープに相当するローカルレベルなんて
なくたっていいんです。・・・でもそういうことを考慮しはじめると管
理と制御が難しくなるように思われたので、シェルに時間を割きたくな
い僕としては、今の仕様になっているわけです。

>>   LL 0 : スリープ用レベル
>ちなみに devers2, lisbon2 におけるバグはこの LL 0 のグローバル
>レベルの設定が誤っていたということですか?

  はい。ローカルレベル0のグローバルレベルをアイドルレベル(グロ
ーバルレベル26)よりも高い優先順位にしてしまったんです。スリープ
できなくなって当然でした。

>>   LL 1 : システムシグナル処理中のレベル
>
>これが、countup5 でいうところの signal_handler() での処理で
>
>>   LL 2 : 通常動作のレベル
>
> main() でcount++している無限ループ
>という理解で正しいでしょうか?

  いいえ、それは違います。signal_handler()にいるときもcounter++;
しているときも、ローカルレベル2です。ローカルレベル1になれるのは
、主にウィンドウを再描画している時だけだとお考えください。

  しかし、僕も小柳さんのおっしゃっているように、signal_handler()
内いるときもローカルレベル1になるような仕様の方が好ましい場合が
あると思います。そのための仕様は、現在検討中です。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/