通過任務分割提高嵌入式系統的實時性
引言
隨著工業的飛速發展,人們對系統實時性的要求越來越高。計算機技術的進步客觀上也為進一步提高實時性提供了可能。因此近年來,嵌入式實時系統的研究已經成為單片同應用領域的又一大熱點,實編排軟件也越來越多,有商業軟件,也有免費的代碼。然而影響系統實時性的因素很多,有硬件,也有軟件的。這就決定了提高系統的實時性并不是一件十分容易的事情,除了使用高性能的CPU和高效的實時內核外,在實時系統應用的過程中,還要結合具體情況進行具體分析,充分利用CPU的效率,挖掘內核的實時潛能。
1 任務與嵌入式多任務實時系統
1.1 任務與多任務
在嵌入式多任務實時系統時,任務是指一個程序分段。這個分段被操作系統當作一個基本單元來調度。
典型地,每個任務都是一個無限的循環,而且在同一時刻只能處于以下5種狀態之一。這5種狀態是休眠態、就緒態、運行態、等待態和被中斷態,如圖1所示。
多任務系統的執行過程實際上就是一系列任在這5種狀態中循環流動、輪流被內核調度的過程。多任務運行使CPU的利用率得到最大的發揮,并使應用程序模塊化。
1.2 嵌入式多任務實時系統
RTOS本質上就是嵌入的實時內核,它負責管理各個任務,或者說是為每上任務分配CPU時間,并且負責任務之間的通信。實時內核可分為可剝奪型和不同剝奪型兩類。因此,按照所使用內核的不同,嵌入式實時系統也可分為兩類:使用不可剝奪型內核的嵌入式實時系統和使用可剝奪型內核的嵌入式實時系統。
2 實時系統中的長任務問題
2.1 長任務的定義
在RTOS中,長任務就是指整個任務的執行時間較長,超出了RTOS中其它某一個或某幾個任務的實時要求容限,而對整個RTOS的實時性構成威脅的那些任務。
2.2 長任務對RTOS的影響
當使用可剝奪型實時內核時,長任務由于執行的時間較長,因而更容易被高優先級的任務打斷;一旦高優先級的任務進入了就緒態,當前任務的CPU使用權就被剝奪了,或者說任務被掛起了,那個高優先級的任務立刻得到了CPU的控制權。這樣會出現兩個問題:一是長任務可能在一次執行的過程中被頻敏打斷,長時間得不到一次完整的執行;二是長任務被打斷時,可能要保存大量的現場信息,其目的是為了保證在高優先級的任務執行完返回后,長任務能得以繼續執行。然而,這樣做要占用一定的系統資源,同時保存現場本身也是要占用CPU時間的,因此,實時性也會下降。
當使用不可剝奪型實時內核時,長任務對RTOS的影響更為明顯,因為在這種內核中,任務級響應時間取決于最長的任務執行時間。這也就是說由于長任務的存在,任務級的響應時間要變長。其結果是CPU長時間停留在長任務中,其它的任務得不到實時的響應,甚至于根本得不到執行,系統的實時性勢必要下降。
總之,無論是使用可剝奪型內核,還是使用不可剝奪型內核,長任務都會對RTOS構成嚴重的威脅。
3 長任務問題的解決
解決長任務問題最有效的途徑是進行任務分割。所謂任務分割指將影響系統實時性的長任務分割成若干個小任務。這樣單個任務的執行時間變短,系統的任務級響應時間變短,實時性提高。
評論