3

私はvxworksのマニュアルで次のことに出くわし、なぜそうなるのか疑問に思いました。

信号はどのような種類の信号を実行して望ましくないものにしますか?

アプリケーションでは、シグナルはエラーおよび例外処理に最も適しており、汎用のタスク間通信には適していません。

4

1 に答える 1

3

シグナルの主な問題は、シグナルハンドラーがプロセス/メモリスペースごとに登録されることです(vxWorksでは、カーネルは1つのメモリスペースを表し、各RTPは異なるメモリスペースです)。

これは、スレッド/タスクコンテキストに関係なく、同じシグナルハンドラーが(特定のプロセスに対して)実行されることを意味します。これにより、シグナルハンドラーが適切に動作しない場合、副作用に関する問題が発生する可能性があります。

たとえば、シグナルが共有リソースを保護するためにミューテックスを使用している場合、これは厄介な問題、または少なくとも予期しない動作を引き起こす可能性があります

  タスクAタスクBシグナルハンドラ
  Mutexを利用する
   ..。
   プリエンプトされます
                                何かをします
                                 ...。
                                <SIGNAL ARRIVES> -----> Take Mutex(ブロック)
   履歴書
   ...。
   Mutexを与える
                                                ----->履歴書ハンドラー

上記の例が私がやろうとしていることを本当に伝えているかどうかはわかりません。信号の他のいくつかの特性は次のとおりです。

  • タスク/プロセスがスケジュールされるまでハンドラーは実行されません。シグナルを送信したからといって、ハンドラーがすぐに実行されるわけではありません
  • どのタスク/スレッドがハンドラーを実行するかについての保証はありません。プロセス内の任意のスレッド/タスクがそれを実行できます(最初に実行されるスレッド/タスク)。VxWorksにはこれを回避する方法があります。

上記は、kill呼び出しを介して送信される非同期シグナルにのみ適用されることに注意してください。

例外は、現在のコンテキストですぐに実行される同期信号を生成します。

于 2011-05-09T11:03:05.210 に答える