王蘇峰 竇 勇 陸洪毅 侯方勇
摘要:隨著嵌入式計算技術的蓬勃發(fā)展和在各行各業(yè)的廣泛應用,嵌入式系統(tǒng)成為當今國際教學和科研的熱點領域之一。由于實際應用的需要,嵌入式系統(tǒng)大多是實時系統(tǒng),對響應時間有嚴格的要求,因此其關鍵是如何保證系統(tǒng)的實時性。為了滿足系統(tǒng)的實時性需要,人們提出了各種各樣的實時編程結(jié)構(gòu),但是相關知識分散、敘述不夠嚴密,且未能系統(tǒng)性的歸納和總結(jié)。本文針對這個問題,詳細闡述了各種實時編程結(jié)構(gòu)的結(jié)構(gòu)模型、實時性和優(yōu)缺點。
關鍵詞:嵌入式系統(tǒng);實時編程結(jié)構(gòu);前后臺系統(tǒng);實時操作系統(tǒng)
中圖分類號:G642 文獻標志碼:B
1引言
隨著嵌入式計算技術的蓬勃發(fā)展和在各行各業(yè)的廣泛應用,嵌入式系統(tǒng)成為當今國際教學和科研的熱點領域之一。由于實際應用的需要,嵌入式計算大多是實時計算系統(tǒng),對響應時間有嚴格的要求,操作的正確性不但依賴于邏輯設計的正確程度,而且更依賴于這些操作進行的時間。所以嵌入式實時系統(tǒng)可以說是能在確定的時間內(nèi)對外部的異步事件做出響應并執(zhí)行其功能的計算機系統(tǒng),這包含著兩層含義:一個是外部的異步事件——事件響應,另外一個是執(zhí)行其功能——任務處理。嵌入式實時系統(tǒng)有兩種類型:軟實時系統(tǒng)和硬實時系統(tǒng)。軟實時系統(tǒng)僅要求事件響應是實時的,并不要求限定任務必須在多長時間內(nèi)完成。硬實時系統(tǒng)不僅要求事件響應要實時,而且要求在規(guī)定的時間內(nèi)完成任務的處理。通常大多數(shù)實時系統(tǒng)是兩者的結(jié)合。因此,嵌入式實時系統(tǒng)的關鍵是如何保證系統(tǒng)的實時性。為了滿足系統(tǒng)的實時性需要,人們提出了各種各樣的實時編程結(jié)構(gòu),但是相關知識分散、敘述不夠嚴密,且未能系統(tǒng)性的歸納和總結(jié)。為了滿足教學的需要,針對這個問題,作者在此詳細的闡述了各種實時編程結(jié)構(gòu)的結(jié)構(gòu)模型、實時性以及優(yōu)缺點。
2無操作系統(tǒng)的實時編程結(jié)構(gòu)
2.1基于查詢方式的實時編程結(jié)構(gòu)
在沒有中斷機制的情況下,僅采用查詢方式實現(xiàn)的實時編程結(jié)構(gòu),如圖1所示。
基于查詢方式的實時編程結(jié)構(gòu)側(cè)重任務的處理,而事件的發(fā)生是通過查詢事件標志來獲取的;軟件設計簡單可靠,任務使用的堆??梢灶A測,而且由于任務之間不嵌套,可以調(diào)用不可重入函數(shù)。但缺點也很明顯,對事件響應不能實時,只有查詢到該標志時才會記錄該事件,因此容易丟棄異步事件;所有任務具有相同優(yōu)先級別,眾生平等;一個任務執(zhí)行時間不可預測時,則所有任務的響應時間不可預測;采用無限循環(huán)結(jié)構(gòu),一個任務崩潰則引起整個系統(tǒng)崩潰。
在最壞情況下,一個任務要得到響應要等到其它所有任務執(zhí)行完畢才會輪到它,所以實時性(最壞情況)取決于所有其它任務執(zhí)行時間之和。
由于該類型嵌入式系統(tǒng)軟件設計簡單可靠,目前在某些任務簡單且單一、可靠性要求極高而對實時性要求不是很高的領域(如航空航天領域)依然使用廣泛。
2.2基于中斷方式的實時編程結(jié)構(gòu)
基于中斷機制采用純中斷方式實現(xiàn)的實時編程結(jié)構(gòu),事件和任務處理全部由中斷服務子程序(ISR)完成。如圖2所示。
相對于基于查詢方式的實時編程結(jié)構(gòu)來說,基于中斷方式的實時編程結(jié)構(gòu)則側(cè)重事件的處理,利用中斷優(yōu)先級解決了優(yōu)先級問題,不再眾生平等。但是由于高優(yōu)先級中斷長時間占用CPU,則容易漏掉低優(yōu)先級的異步事件;中斷無限制的嵌套則容易導致棧溢出(嵌入式系統(tǒng)棧容量很小),堆棧不可預測;由于中斷嵌套,調(diào)用不可重入型函數(shù)時,要滿足互斥條件。
由于高優(yōu)先級中斷能得到及時響應和處理,所以實時性(最壞情況)取決于中斷響應時間(中斷延遲+保存現(xiàn)場時間)。相對于任務執(zhí)行時間來說,中斷響應時間幾乎可以忽略不計。中斷恢復時間則包括恢復現(xiàn)場時間和執(zhí)行中斷返回指令的時間。
由于該類型嵌入式系統(tǒng)響應及時,但缺點也很明顯,所以在任務數(shù)量不多且簡單以及低功耗嵌入式系統(tǒng)中得到了廣泛應用。
2.3基于前后臺系統(tǒng)的實時編程結(jié)構(gòu)
前后臺系統(tǒng)通常把程序分成兩部分:前臺程序和后臺程序。前臺程序也就是事件處理程序(中斷級),通過中斷來處理事件。中斷服務子程序一般只做簡單的處理,然后給出事件發(fā)生的標志,待后臺程序來處理,不會因處理費時的事件而影響其它中斷。后臺程序也就是任務處理程序(任務級),一個死循環(huán),循環(huán)查詢各種事件發(fā)生的標志位,如果標志位置位,就執(zhí)行相應的任務處理程序。如圖3、4所示。
中斷有優(yōu)先級,也可無優(yōu)先級,因中斷處理時間很短,幾乎可以忽略不計。任務級采用周期循環(huán)調(diào)度,一個超循環(huán)系統(tǒng),同查詢系統(tǒng)一樣,任務無優(yōu)先級,眾生平等。
事件響應實時性分析:由于中斷服務子程序只一些做簡單的處理(事件標志置位),事件能得到及時響應,可以避免中斷嵌套(棧溢出),避免漏掉異步事件。
任務響應實時性分析:任務的執(zhí)行是通過主循環(huán)查詢相應的標志位(ISR置位)來執(zhí)行的,可調(diào)用不可重入函數(shù)(任務間不嵌套),最壞的情況是循環(huán)中所有其它的任務處理程序執(zhí)行完,才執(zhí)行當前事件的任務處理程序。所以任務實時性(最壞情況)取決于所有其它任務執(zhí)行時間之和。
顯然任務實時性、可靠性難以滿足要求,所有的任務具有相同的優(yōu)先級別,即是平等的,對那些實時性要求高的任務不可能立刻得到處理。如果一個任務執(zhí)行時間不能確定,則所有任務響應時間不可預測。任務處理(后臺)程序是一個無限循環(huán)的結(jié)構(gòu),一旦在這個循環(huán)體中正在處理的任務崩潰,使得整個任務隊列中的其它任務得不到機會被處理,從而造成整個系統(tǒng)的崩潰,任務優(yōu)先級固定。
前后臺系統(tǒng)結(jié)構(gòu)簡單,幾乎不需要額外的存儲開銷,所以在簡單的嵌入式應用中得到了廣泛的應用。
3基于實時操作系統(tǒng)的實時編程結(jié)構(gòu)
實時操作系統(tǒng)(Real Time Operating System,RTOS)指具有實時性、能支持實時系統(tǒng)工作的操作系統(tǒng)。首要任務是調(diào)度一切可利用的資源完成實時任務,其次才著眼于提高系統(tǒng)的使用效率。實時操作系統(tǒng)最重要特點是要滿足對時間的限制和要求,基本結(jié)構(gòu)如圖5所示。
根據(jù)基于優(yōu)先級的任務調(diào)度策略,實時操作系統(tǒng)可分為兩類:非搶占(non-preemption)式實時操作系統(tǒng)和搶占式(preemption)實時操作系統(tǒng)。非搶占式實時操作系統(tǒng)也叫不可剝奪或非搶先式實時操作系統(tǒng);搶占式實時操作系統(tǒng)也叫可剝奪或搶先式實時操作系統(tǒng)。
3.1基于非搶占式實時操作系統(tǒng)的實時編程結(jié)構(gòu)
非搶占式實時操作系統(tǒng)就是一個任務運行后,就把CPU控制權完全交給了該任務,直到它主動將CPU控制權還回來。事件處理由中斷服務子程序來處理,可以激活一個掛起態(tài)的任務,使之進入就緒態(tài);中斷服務子程序很簡單,類似于前后臺系統(tǒng)僅使標志置位。任務響應時間由最長任務執(zhí)行時間、尋找最高優(yōu)先級任務的時間以及任務切換時間決定,所以實時性(最壞情況)主要取決于最長任務的執(zhí)行時間(其它可忽略)。
采用非搶占式實時操作系統(tǒng)的優(yōu)點:實時性比前后臺系統(tǒng)的要好,程序設計相對簡單,可調(diào)用不可重入函數(shù)(任務間不嵌套)。缺點:如果最長任務的執(zhí)行時間不能確定,系統(tǒng)的實時性(任務響應時間)就不能確定。
非搶占式實時操作系統(tǒng)運行原理如圖6所示。
3.2基于搶占式實時操作系統(tǒng)的實時編程結(jié)構(gòu)
搶占式實時操作系統(tǒng)就是指內(nèi)核可以搶占正在運行任務的CPU使用權并將使用權交給進入就緒態(tài)的優(yōu)先級更高的任務。事件處理由中斷服務子程序來處理,可以激活一個掛起態(tài)的任務,使之進入就緒態(tài)。由于任務之間存在嵌套問題,應用程序不應該直接調(diào)用不可重入函數(shù)。調(diào)用不可重入型函數(shù)時,要滿足互斥條件;調(diào)用可重入函數(shù)使得堆棧不可預測。任務響應時間包括尋找最高優(yōu)先級任務的時間和任務切換時間,所以實時性(最壞情況)主要取決于任務切換時間(其它可忽略)。
采用搶占式實時操作系統(tǒng)的優(yōu)點:實時性好,優(yōu)先級高的任務只要具備了運行的條件,就可以立即運行。缺點:如果任務之間搶占CPU控制權處理不好,會產(chǎn)生系統(tǒng)崩潰、死機等嚴重后果(優(yōu)先級倒置);調(diào)用不可重入型函數(shù)時,要滿足互斥條件。
搶占式實時操作系統(tǒng)運行原理如圖7所示。
4結(jié)束語
前面我們闡述了五種實時編程結(jié)構(gòu),下面比較一下各種結(jié)構(gòu)的任務響應實時性。查詢方式和前后臺系統(tǒng)一樣,實時性取決于它所有任務執(zhí)行時間之和,可能不可預測;中斷方式實時性取決于中斷響應時間,可預測;非搶占式實時操作系統(tǒng)實時性取決于最長任務執(zhí)行時間,可能不可預測;搶占式實時操作系統(tǒng)實時性取決于任務切換時間,可預測。
這是我們多年來從事嵌入式系統(tǒng)教學以及科研得來的一點點心得和體會,僅是我們的一家之言,希望對同行起到拋磚引玉的作用,也歡迎同行批評指正。
參考文獻:
[1]王志英,李宗伯,王蘇峰,等. 嵌入式系統(tǒng)原理與設計[M]. 北京:高等教育出版社,2007.
[2](英)Andrew Bateman,Lain Paterson Stephens. DSP算法、應用與設計[M]. 陳健,陳偉,汪書寧,譯.北京:機械工業(yè)出版社,2003.
[3]Bruce Powel Douglass. 嵌入式與實時系統(tǒng)開發(fā)——使用UML、對象技術、框架與模式[M]. 柳翔,譯. 北京:機械工業(yè)出版社,2005.