[OSASK 5003] Re: シグナル(ぐいぐい01).

小柳です。こんばんは。

Hidemi KAWAI wrote:
> 
>   こんにちは、川合です。
> 
>   今日は将来の「ぐいぐい01」でシグナルの扱いがどう変わるかを説明
> します。これを参考にプログラミングすれば、ぐいぐい00からぐいぐい
> 01に移行しても、ソースの書き換えが減らせます。
> 

> 
>   シグナルプライオリティというのは、こういうことです。シグナルに
> は絶対に取りこぼしたくないような重要なシグナルや、まあ非常時なら
> 取りこぼしてもよいシグナルなどがあるでしょう。それを区別するため
> のフィールドです。もっとも優先度が低いシグナルは、シグナルボック
> スが半分以上埋まっているだけで、捨てられます(この事実をシグナル
> ボックスフルというシグナルで通知させることも可能)。優先度が最高
> だとシグナルボックスが満タンになるまで捨てません。

優先度の低いシグナルが捨てられやすくなるだけでは不十分ではないでしょう
か?
極端な場合、シグナルボックスが先頭から半分まで優先度の低いシグナルで
埋まっていた時に、優先度の高いシグナルが発生しても、優先度の低いシグ
ナルを全て処理しないと、アプリは優先度の高いシグナルが発生したことを
感知できません。

ちょっとした思いつきですが、OSASK のタスク管理のように、global level
と inner level を用意して、signal の定義で各シグナルにそれらを指定
して、

(1)global level が最も高いシグナルが signal box に存在している場合に、
lib_waitsignal()では、その global level のシグナルが返される。
つまり、global level の高いシグナルは global level の低いシグナル
よりも常に優先され、割り込むことができる。

(2)global level が同じで inner level が異なる場合、その inner level の
比でシグナルが処理される。ex. キーボードの signal を inner level 1 に
マウスの signal を inner level 2 で定義した場合、signal がたまっている
場合は lib_waitsignal() ではキーボードシグナルを 1つ返した後
マウスシグナルを 2つ返すような動作をする。

というのはどうでしょう。特に(1)は必要な機能だと思います。

それでは。

-- 
小柳 雅明(http://homepage1.nifty.com/dreaming/)
「人の足を止めるのは"絶望"ではなく"諦観"
  人の足を進めるのは"希望"ではなく"意志"」
                  -- ARMS


ML番号でジャンプ
ML単語検索