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