假設我有兩個在SMP支持的VxWorks上執行的具有不同優先級的'A'和'B'任務。 「A」和「B」都向I/O設備(如磁盤或NIC)發出命令,並且都阻止等待結果。也就是說,'A'和'B'同時被阻塞。一段時間後,I/O設備引發中斷並調用ISR。 ISR然後將延期工作(又名「下半部分」)發送給工作任務。問題:工作任務的優先級是什麼?VxWorks如何優先處理中斷下半部分?
VxWorks設備驅動程序開發人員指南有點含糊。看起來,工作任務的優先級是先驗設置的。沒有自動繼承機制會根據阻止等待結果的任務('A'和'B')的優先級來提高工作任務的優先級。這與線程中斷優先級在PREEMPT_RT Linux中的工作方式類似。但是,QNX Neutrino和LynxOS都會將工作任務安排在阻塞任務的最高優先級 - 例如。優先級(worker)= max_priority(A,B)。
任何人都可以澄清?
「當tNetTask處理完數據包(數據包重組等)後,它會被轉發到相應套接字上正在等待的任何任務。」 tNetTask的優先順序是什麼? tNetTask是否按照自己指定的優先級運行,還是繼承了等待套接字的任務之一的優先級?這是我真正想弄明白的。 – Glenn