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 回答
在较旧的基于 Tornado 的系统中,WindView 工具将允许您查看任务之间的关系。WindView 可以显示你所有的任务状态转换、中断、信号量操作等。
对于较新的基于 Workbench 的系统,相同的工具现在称为 System Viewer。
WindView/System Viewer 是调查您在任务状态方面遇到的任何问题以及它们是如何出现的问题的豪华方式。
If you can get a backtrace from the task, you should see it blocked on some kind of system entity, e.g., a semaphore. You can look at the arg list printed in the backtrace, and then use semShow from the C shell to get information about that semaphore. Other system synchronization entities offer similar *Show routines.
Presuming that the entity supports the concept of an "owner", semShow should display the TID of the owner.
If your task is READY+I, i don't think it is waiting for semaphores anymore. It is waiting to access the CPU. You must have a higher priority task running that is preventing your READY+I task from running.
如果我理解您的问题,那么您的任务继承了其他任务的优先级,并且您无法识别其他任务。我不记得i
WindSh 命令是否打印继承的优先级,但如果这样做,可能会为您提供有关您应该查看哪些待处理任务的线索。将其缩小到几个任务后,您应该能够使用该tw
命令打印有关任务挂起的对象的信息。
在旁注中,您为什么担心优先继承?毕竟优先级继承不是问题,而是优先级倒置的解决方案。