在我们的vxWorks嵌入式系统中,我们有两个任务(T1和T2)具有相同的优先级(110)。
如果两个任务都准备好运行,常规vxWorks调度程序如何处理这个问题?
哪个任务先执行?vxWorks如何以相同的优先级处理两项任务?
3
A
回答
5
首先运行的任务是由VxWorks调度程序任务实现的首先产生的任务。 VxWorks默认使用基于优先级的调度。因此,在你的情况下,由于T1和T2具有相同的优先级,无论哪一个首先得到CPU,都将继续无限期地运行,直到明确阻塞(使用taskSuspend或taskDelay),此时将执行另一个READY任务直到它被阻止,等等。这应该由信号量或互斥体(突变体?)控制
基于优先级的调度的主要问题是由这个确切的问题来说明的。我们如何确定让这些任务运行多久?事实上,他们具有相同的优先事项使事情复杂化。另一个问题是具有高优先级(较低数字意味着较高优先级)的VxWorks任务可以抢占您的代码中必须准备好的应用程序。这些问题可以通过使用循环调度来解决。由循环调度和解决方案带来的其他问题全部被描述为here。
2
VxWorks有256个优先级(0最高,255最低)。在任何时候,最高优先级的任务都在CPU上运行。每个优先级概念上都有一个队列,其中有多个任务排队等待执行。
我们有3个任务在相同的优先级A,B,C。假设A正在执行。
当A块(taskDelay,SemTake,msgQReceive),B将开始执行。
当A解锁时,它放在队列的末尾。我们现在有B,C,A。
当B块,C接管等...
如果启用了轮循调度(时间分片),同样的概念适用,但任务被放到时间片结束时队列结束。
请注意,被较高优先级任务预占的任务不会影响队列的顺序。如果A正在运行并被抢占,那么当更高优先级的任务完成时,它将继续执行。它不会放在队列的末尾。
1
默认情况下,首先产生的那个将被执行,除非它放弃了CPU,另一个将永远不会运行。
你可以明确地启用循环,比他们将timeslice。
相关问题
- 1. VxWorks如何处理优先级继承?
- 2. 如何在VxWorks中执行低优先级任务
- 3. 任务工作项目优先级
- 4. 处理具有相同优先级的作业的算法
- 5. 如何获得任务优先级
- 6. 优先级任务列表
- 7. 芹菜任务优先级
- 8. 在一个线程池中处理具有不同优先级的任务
- 9. Eclipse中的任务优先级
- 10. 带优先级的消息处理
- 11. 为了通过两列相同的优先级
- 12. 任务/活动优先级/依赖性
- 13. 优先级队列:并行处理
- 14. 优先上传优先级,以高优先级使用HTB qdiscs
- 15. 如何更改计划任务的内存优先级?
- 16. 如何在Makefile.am中处理子目录的优先级
- 17. 如何将更高的任务优先级设置为Parallel.Async后台任务?
- 18. 具有动态项目优先级的优先级队列
- 19. vxworks中的任务
- 20. 带有跳过项目的Java优先级队列首先再处理
- 21. Java执行程序:如何设置任务优先级?
- 22. 不同级别的CSS和相互之间的优先级
- 23. 确定优先事项处理
- 24. 优先级队列中的优先级
- 25. 如何确定terraform执行优先级的优先级
- 26. 用于执行具有不同优先级的任意任务的线程池
- 27. 更改运行中断处理程序的优先级级别?
- 28. 如何添加任务优先功能
- 29. Repast Symphony调度方法优先级和代理优先级
- 30. ORDER BY不同的列在相同的优先级