We have one task who State is Ready+I . Can we find which task is it waiting for to release all semaphores? This is pre-6.0 vxworks
4 に答える
タスクからバックトレースを取得できる場合は、何らかのシステム エンティティ (セマフォなど) でブロックされていることがわかります。バックトレースに出力された引数リストを確認し、C シェルから semShow を使用して、そのセマフォに関する情報を取得できます。他のシステム同期エンティティは、同様の *Show ルーチンを提供します。
エンティティが「所有者」の概念をサポートしていると仮定すると、semShow は所有者の TID を表示する必要があります。
古い Tornado ベースのシステムでは、WindView ツールを使用すると、時間の経過に伴うタスク間の関係を確認できます。WindView は、すべてのタスクの状態遷移、割り込み、セマフォ操作などを表示できます。
新しい Workbench ベースのシステムでは、同じツールが System Viewer と呼ばれるようになりました。
WindView/System Viewer は、タスクの状態で発生している問題と、その状態になった経緯を調査するための優れた方法です。
あなたの質問を理解できれば、他のタスクの優先度を継承しているタスクがあり、この他のタスクを特定するのに問題があります。i
WindSh コマンドが継承された優先順位を出力したかどうかは覚えていませんが、出力された場合は、どの保留中のタスクを調べる必要があるかについての手がかりが得られる可能性があります。いくつかのタスクに絞り込むと、tw
コマンドを使用して、タスクが保留されているオブジェクトに関する情報を出力できるようになります。
余談ですが、なぜ優先度の継承について懸念しているのですか? 結局、優先順位の継承は問題ではなく、優先順位の逆転に対する解決策です。