我们的vxWorks嵌入式系统中有两个具有相同优先级(110)的任务(T1和T2).
如果两个任务都准备好运行,常规vxWorks调度程序如何处理?
哪个任务先执行?
首先运行的任务是首先由VxWorks调度程序任务实现的任务.默认情况下,VxWorks使用基于优先级的调度.因此,在您的情况下,由于T1和T2具有相同的优先级,因此无论哪一个获得CPU,它将继续无限期地运行,直到它被明确阻止(使用taskSuspend或taskDelay),此时另一个READY任务将执行,直到它被阻止, 等等.这应该由信号量或互斥量控制(突变?)
这个确切的问题阐明了基于优先级的调度的主要问题.我们如何确定让这些任务运行多长时间?他们具有相同优先级的事实使事情复杂化.另一个问题是具有高优先级的VxWorks任务(较低的数字意味着较高的优先级)可以抢占您必须在代码中准备的应用程序.通过使用循环调度可以解决这些问题.这里将描述循环调度和解决方案带来的其他问题.