在我們的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. 優先處理ThreadPoolExecutors中的Netty任務
- 5. 使用Celery以不同的優先級運行相同的任務
- 6. 處理具有相同優先級的作業的算法
- 7. 如何獲得任務優先級
- 8. VxWorks如何優先處理中斷下半部分?
- 9. FreeRTOS具有相同優先級的互斥鎖多任務
- 10. 芹菜任務優先級
- 11. 優先級任務列表
- 12. 處理優先級錯誤
- 13. 在一個線程池中處理具有不同優先級的任務
- 14. 處理包裝任務的有限併發級別任務調度程序(帶任務優先級)
- 15. Eclipse中的任務優先級
- 16. 帶優先級的消息處理
- 17. 任務/活動優先級/依賴性
- 18. 保持任務優先級(ASP.NET MVC)
- 19. 查找任務優先級rtos
- 20. 爲了通過兩列相同的優先級
- 21. 優先級隊列:並行處理
- 22. 優先上傳優先級,以高優先級使用HTB qdiscs
- 23. SSAS處理任務優化
- 24. 優先級和優先級
- 25. 如何更改計劃任務的內存優先級?
- 26. 具有兩個優先級的優先級隊列Python
- 27. 如何在Makefile.am中處理子目錄的優先級
- 28. 以相同的優先級移位/減少
- 29. 如何將更高的任務優先級設置爲Parallel.Async後臺任務?
- 30. 我可以讓eclipse的任務窗格不顯示低優先級任務嗎?