- 嵌入式軟件基礎(chǔ)
- 張倪編著
- 903字
- 2018-12-27 18:20:22
第2章 嵌入式操作系統(tǒng)
嵌入式操作系統(tǒng)是嵌入式軟件的重要組成部分,在嵌入式操作系統(tǒng)的支持下開發(fā)嵌入式軟件,不僅極大地減少了開發(fā)的工作量,而且提高了嵌入式應(yīng)用軟件的可移植性。本章首先介紹嵌入式操作系統(tǒng)的基本概念;然后討論嵌入式操作系統(tǒng)的基本功能和多內(nèi)核嵌入式操作系統(tǒng)原理;最后介紹幾種比較有代表性的嵌入式操作系統(tǒng)。
2.1 嵌入式操作系統(tǒng)概述
嵌入式操作系統(tǒng)是一種用于支持嵌入式應(yīng)用程序的操作系統(tǒng)。它是一個介于應(yīng)用程序和嵌入式計算機(jī)系統(tǒng)硬件之間的程序集合,其任務(wù)是控制和管理嵌入式系統(tǒng)中的硬件和軟件資源,以方便嵌入式系統(tǒng)的使用者。
2.1.1 為什么要使用嵌入式操作系統(tǒng)
并不是所有的嵌入式系統(tǒng)上面都需要有一個嵌入式操作系統(tǒng)。一些本身功能很簡單的嵌入式系統(tǒng)(如一個普通的空調(diào)控制器)出于效率和成本考慮,通常不使用嵌入式操作系統(tǒng)。但當(dāng)一個嵌入式系統(tǒng)軟件的復(fù)雜程度達(dá)到一定的水平,其硬件又具備充足的處理能力時,使用嵌入式操作系統(tǒng)就是理所當(dāng)然的選擇。一般說來,當(dāng)一個嵌入式系統(tǒng)有以下需求時就要使用嵌入式操作系統(tǒng)。
1. 系統(tǒng)需要運(yùn)行多個任務(wù)
一些功能簡單的嵌入式系統(tǒng)只需要運(yùn)行幾個固定的任務(wù),可以由應(yīng)用任務(wù)自己來管理硬件,完成相互之間的協(xié)調(diào)工作。但是當(dāng)嵌入式系統(tǒng)需要運(yùn)行很多任務(wù),并且任務(wù)之間的關(guān)系很復(fù)雜時,還由應(yīng)用任務(wù)自己來負(fù)責(zé)管理和協(xié)調(diào)工作,就會給應(yīng)用程序的開發(fā)者帶來很大麻煩,軟件出現(xiàn)錯誤的概率也會顯著增加。如果把管理方面的工作統(tǒng)統(tǒng)交給操作系統(tǒng)來完成,就可以避免出現(xiàn)這些問題。
2. 系統(tǒng)需要直觀的用戶界面
一些嵌入式系統(tǒng)并不是在啟動之后就默默地去運(yùn)行,它們需要同用戶進(jìn)行交互,最好能通過窗口式的圖形用戶界面進(jìn)行這種交互。這就要用到窗口系統(tǒng),而窗口系統(tǒng)離不開操作系統(tǒng)的支持。
3. 系統(tǒng)需要有網(wǎng)絡(luò)功能
在沒有操作系統(tǒng)的情況下,支持網(wǎng)絡(luò)功能并不是不可能的事情。比如,TCP/IP協(xié)議就可以用硬件芯片來實(shí)現(xiàn)。但使用這樣的芯片會增加成本,并且網(wǎng)絡(luò)協(xié)議會不斷升級,用硬件芯片則無法同步升級。而在有操作系統(tǒng)的嵌入式計算機(jī)系統(tǒng)中,可以根據(jù)需要定制網(wǎng)絡(luò)協(xié)議,以適應(yīng)各種網(wǎng)絡(luò)環(huán)境的需求,也便于跟上網(wǎng)絡(luò)協(xié)議更新的步伐。
4. 系統(tǒng)需要用到數(shù)據(jù)庫管理系統(tǒng)
一些移動信息設(shè)備需要使用移動數(shù)據(jù)庫管理系統(tǒng)解決移動計算環(huán)境下的數(shù)據(jù)管理問題。比如,掌上計算機(jī)、PDA、車載設(shè)備、智能手機(jī)等就經(jīng)常有此方面的需求。還有一些應(yīng)用問題需要利用嵌入式實(shí)時數(shù)據(jù)庫管理系統(tǒng)進(jìn)行實(shí)時數(shù)據(jù)的采集和處理。無論是移動數(shù)據(jù)庫管理系統(tǒng)還是嵌入式實(shí)時數(shù)據(jù)庫管理系統(tǒng)都離不開操作系統(tǒng)的支持。
5. 系統(tǒng)需要不斷進(jìn)行二次開發(fā)
如果要經(jīng)常進(jìn)行二次開發(fā)工作,使用嵌入式操作系統(tǒng)是一個明智的選擇。嵌入式操作系統(tǒng)提供一系列供開發(fā)人員使用的API接口。在這些接口之上進(jìn)行開發(fā),可以免去很多繁瑣的底層開發(fā)工作,這不僅提高了嵌入式系統(tǒng)的開發(fā)效率,而且也提高了嵌入式應(yīng)用軟件的可移植性。
2.1.2 嵌入式操作系統(tǒng)與實(shí)時操作系統(tǒng)
在定義什么是實(shí)時操作系統(tǒng)之前,需要先明確什么是實(shí)時系統(tǒng)。簡單地講,一個實(shí)時系統(tǒng)是能滿足以下要求的系統(tǒng):當(dāng)外部事件到來時,計算機(jī)能立即進(jìn)行處理,使得在指定的時間內(nèi)能完成對事件的處理。而且外部事件到來的時間完全是隨機(jī)的,沒有周期性規(guī)律。
因此一個實(shí)時系統(tǒng)要正確運(yùn)行,除了能產(chǎn)生正確的處理結(jié)果之外,還必須在預(yù)定的時間之內(nèi)完成處理工作。我們稱前一個要求為功能的正確性,后一個要求為時間的正確性。對一個實(shí)時系統(tǒng)來說,這兩種正確性是同等重要的。
根據(jù)對系統(tǒng)的響應(yīng)時間是否有嚴(yán)格的要求,可將實(shí)時系統(tǒng)分為硬實(shí)時系統(tǒng)和軟實(shí)時系統(tǒng)兩類。硬實(shí)時系統(tǒng)對響應(yīng)時間有一個剛性的、不可改變的限制,它不允許出現(xiàn)任何超出時限的錯誤。超時錯誤會導(dǎo)致系統(tǒng)失敗,或系統(tǒng)不能實(shí)現(xiàn)預(yù)期目標(biāo)。軟實(shí)時系統(tǒng)對響應(yīng)時間的要求是柔性的,它可以容忍偶然的超時錯誤出現(xiàn)。超時錯誤造成的后果并不嚴(yán)重,僅僅是降低了系統(tǒng)的吞吐量。
介紹了實(shí)時系統(tǒng)的概念后,我們再回過頭來看一看什么是實(shí)時操作系統(tǒng)。實(shí)時操作系統(tǒng)可以這樣來定義:實(shí)時操作系統(tǒng)是具有實(shí)時性,能支持實(shí)時系統(tǒng)工作的操作系統(tǒng)。它必須能保證實(shí)時任務(wù)在預(yù)定的時間內(nèi)完成,其首要任務(wù)是調(diào)度一切可以利用的資源完成實(shí)時任務(wù),其次才著眼于提高整個計算機(jī)系統(tǒng)的使用效率。
由于早期的嵌入式系統(tǒng)幾乎都用于控制目的,因此或多或少地都有些實(shí)時要求。所以那時“嵌入式操作系統(tǒng)”實(shí)際上就是“實(shí)時操作系統(tǒng)(RTOS)”的代名詞。近幾年來,由于掌上計算機(jī)設(shè)備的出現(xiàn),產(chǎn)生了一些沒有實(shí)時要求的嵌入式系統(tǒng)。此時,“嵌入式操作系統(tǒng)”和“實(shí)時操作系統(tǒng)”就成了不同的概念。

圖2.1 嵌入式操作系統(tǒng)和實(shí)時操作系統(tǒng)之間的關(guān)系
嵌入式操作系統(tǒng)和實(shí)時操作系統(tǒng)之間的關(guān)系如圖2.1所示。從圖中可以看到,大部分嵌入式操作系統(tǒng)都是實(shí)時操作系統(tǒng)。大部分實(shí)時操作系統(tǒng)也都是嵌入式操作系統(tǒng)。它們二者間有很大的交集,但確有不適合用在嵌入式系統(tǒng)上使用的實(shí)時操作系統(tǒng)和不支持實(shí)時應(yīng)用的嵌入式操作系統(tǒng)。我們稱屬于交集部分的操作系統(tǒng)為實(shí)時嵌入式操作系統(tǒng)。
實(shí)時嵌入式操作系統(tǒng)分配和使用CPU時間等系統(tǒng)資源的策略和通用操作系統(tǒng)有很多不同之處。這主要體現(xiàn)在以下三個方面。
① 對于通用操作系統(tǒng)來說,保障總體的效率是主要的目標(biāo),必要時寧可犧牲個別任務(wù)的響應(yīng)速度來達(dá)到提高總體效率的目的。而實(shí)時嵌入式操作系統(tǒng)卻正好相反,必要時寧可犧牲總體效率也要保證個別任務(wù)的響應(yīng)速度。
② 對于通用操作系統(tǒng)來說,公正性更為重要,在需要的時候會從占有資源較多的任務(wù)那里拿走一些給占有資源較少的任務(wù)。而對于實(shí)時嵌入式操作系統(tǒng)來說,高優(yōu)先級任務(wù)的運(yùn)行更為重要,必要時寧可從本來占有資源就比較少的任務(wù)那里拿走一些資源,也要保證高優(yōu)先級任務(wù)的需要。相應(yīng)地,通用操作系統(tǒng)性能的分析是統(tǒng)計分析、平均值分析,而實(shí)時嵌入式操作系統(tǒng)性能的分析則是“最壞情況”分析。
③ 通用操作系統(tǒng)要充分利用CPU的處理能力。而實(shí)時嵌入式操作系統(tǒng)需要有意讓CPU的處理能力供過于求,使CPU運(yùn)行于輕負(fù)荷狀態(tài),以確保系統(tǒng)的響應(yīng)速度。
2.1.3 嵌入式操作系統(tǒng)的主要性能指標(biāo)
嵌入式操作系統(tǒng)的性能指標(biāo)是評價嵌入式操作系統(tǒng)的客觀依據(jù)。可以分為時間性能指標(biāo)和存儲開銷指標(biāo)兩類。
1. 嵌入式操作系統(tǒng)的時間性能指標(biāo)
嵌入式操作系統(tǒng)主要有中斷延遲時間、最大關(guān)中斷時間、中斷響應(yīng)時間、中斷恢復(fù)時間、中斷處理時間、任務(wù)上下文切換時間、任務(wù)響應(yīng)時間、系統(tǒng)調(diào)用執(zhí)行時間等一些時間性能指標(biāo)。這些時間性能指標(biāo)或多或少地都要受到硬件因素的影響,如CPU速度、存儲器速度、存儲空間大小、高速緩存(Cache)大小等,在評價嵌入式操作系統(tǒng)的時間性能時,必須要考慮這些因素。
嵌入式操作系統(tǒng)的時間性能指標(biāo)與中斷有密切的關(guān)系。為此先討論嵌入式操作系統(tǒng)處理中斷的過程。
中斷指在計算機(jī)執(zhí)行期間,由于CPU外部某種預(yù)期或非預(yù)期事件的發(fā)生,導(dǎo)致程序的正常執(zhí)行流程發(fā)生改變的過程。引起中斷發(fā)生的事件稱為中斷請求。中斷請求一旦得到響應(yīng),CPU將先保存當(dāng)前被中斷的任務(wù)的部分上下文,然后轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序中去執(zhí)行。執(zhí)行完中斷服務(wù)程序后,根據(jù)嵌入式操作系統(tǒng)采用的調(diào)度策略,將會采取不同的后續(xù)處理步驟。下面討論兩種典型的中斷處理過程:一種是非搶占式調(diào)度的操作系統(tǒng)處理中斷的過程,另一種是搶占式調(diào)度的操作系統(tǒng)處理中斷的過程。
如圖2.2所示,嵌入式操作系統(tǒng)一般允許中斷嵌套。中斷嵌套是指如果在處理一個中斷請求(中斷請求A)期間有另外一個更重要的中斷請求(中斷請求B)發(fā)生,操作系統(tǒng)將暫停對當(dāng)前中斷請求(中斷請求A)的處理,轉(zhuǎn)去處理這個更重要的中斷請求(中斷請求B)。在下面的討論中,為避免問題表達(dá)過于繁瑣,假設(shè)在處理中斷請求的過程中沒有發(fā)生中斷嵌套。
非搶占式調(diào)度的操作系統(tǒng)的處理中斷過程如圖2.3所示。可以看出,在非搶占式調(diào)度的操作系統(tǒng)中,中斷服務(wù)程序運(yùn)行完后,一定是繼續(xù)運(yùn)行被中斷了的任務(wù)。這個過程的步驟如下。

圖2.2 發(fā)生中斷嵌套的情況

圖2.3 非搶占式調(diào)度的操作系統(tǒng)處理中斷的過程
① 發(fā)生中斷請求:中斷來到,但還不能被CPU響應(yīng),這也許是因?yàn)镃PU還沒執(zhí)行完當(dāng)前的指令,也許是因?yàn)橹袛嘁驯徊僮飨到y(tǒng)或用戶程序關(guān)閉。
② 響應(yīng)中斷:CPU執(zhí)行完當(dāng)前指令并且中斷打開,使中斷被響應(yīng)。
③ 保存關(guān)鍵寄存器,獲取中斷向量,轉(zhuǎn)到中斷服務(wù)程序:這些工作全部由硬件完成。下文中“硬件開始處理中斷請求到開始執(zhí)行中斷服務(wù)程序第一條指令之間的時間”指的就是完成這些工作所花費(fèi)的時間。
④ 保存任務(wù)上下文:中斷服務(wù)程序保存任務(wù)上下文,主要是各寄存器的內(nèi)容。
⑤ 執(zhí)行中斷服務(wù)程序入口函數(shù):中斷服務(wù)程序調(diào)用操作系統(tǒng)的中斷服務(wù)程序入口函數(shù),通知操作系統(tǒng)系統(tǒng)已進(jìn)入中斷處理中,該入口函數(shù)會把中斷嵌套層數(shù)計數(shù)器的值加1,記錄下當(dāng)前的中斷嵌套層數(shù)。
⑥ 執(zhí)行用戶中斷服務(wù)程序:此時實(shí)際開始對中斷請求進(jìn)行處理。用戶中斷服務(wù)程序所做的工作完全取決于實(shí)際的需要,操作系統(tǒng)不會加以限制。但要注意,在用戶中斷服務(wù)中做的事要盡可能地少,而把大部分的工作留給協(xié)同工作的任務(wù)去完成。用戶中斷服務(wù)程序通知某任務(wù)去做事情的方法是調(diào)用操作系統(tǒng)提供的任務(wù)同步或任務(wù)通信系統(tǒng)調(diào)用,這可能導(dǎo)致接收通知的任務(wù)轉(zhuǎn)換到就緒狀態(tài)。
⑦ 執(zhí)行中斷服務(wù)程序出口函數(shù):用戶的中斷服務(wù)代碼運(yùn)行完后,調(diào)用操作系統(tǒng)的中斷服務(wù)程序出口函數(shù),通知操作系統(tǒng)系統(tǒng)退出此次中斷處理,中斷服務(wù)程序出口函數(shù)會把中斷嵌套層數(shù)計數(shù)器的值減1。當(dāng)嵌套層數(shù)計數(shù)器減為0時,所有中斷都已經(jīng)處理完。
⑧ 恢復(fù)任務(wù)上下文:恢復(fù)在進(jìn)入中斷處理時保存的寄存器值。
⑨ 中斷返回:執(zhí)行中斷返回指令。
搶占式調(diào)度的操作系統(tǒng)處理中斷的過程如圖2.4所示。可以看出,在搶占式調(diào)度的操作系統(tǒng)中,用戶中斷服務(wù)程序執(zhí)行完之后,將調(diào)用操作系統(tǒng)的中斷服務(wù)程序出口函數(shù),通知操作系統(tǒng)系統(tǒng)退出此次中斷處理,中斷服務(wù)程序出口函數(shù)會把中斷嵌套層數(shù)計數(shù)器的值減1。當(dāng)嵌套層數(shù)計數(shù)器的值為0時,表示所有中斷都已處理完畢。此時系統(tǒng)如果沒有禁止調(diào)度,操作系統(tǒng)的中斷服務(wù)程序出口函數(shù)將執(zhí)行調(diào)度程序。調(diào)度程序在執(zhí)行的過程中需要判斷是否應(yīng)當(dāng)進(jìn)行任務(wù)切換。如果原先被中斷的任務(wù)在所有處于就緒狀態(tài)的任務(wù)中仍然是優(yōu)先級最高的任務(wù),那么不需要進(jìn)行任務(wù)切換,系統(tǒng)將返回到被中斷的任務(wù)繼續(xù)執(zhí)行,如果原先被中斷的任務(wù)在所有處于就緒狀態(tài)的任務(wù)中已經(jīng)不是優(yōu)先級最高的任務(wù),那么就需要進(jìn)行任務(wù)切換,系統(tǒng)將執(zhí)行另外一個任務(wù)。這樣在中斷返回時將出現(xiàn)A和B兩種不同的情況。一種A是繼續(xù)運(yùn)行原先被中斷的任務(wù),另一種B是運(yùn)行新被調(diào)度程序選中的任務(wù)。出現(xiàn)情況B的原因有多種,可能是中斷服務(wù)程序或其他任何一個嵌套的中斷服務(wù)程序使另一個優(yōu)先級更高的任務(wù)進(jìn)入了就緒態(tài),也可能是原先被中斷任務(wù)的狀態(tài)已經(jīng)被中斷服務(wù)程序改變,如已經(jīng)進(jìn)入阻塞狀態(tài)。在出現(xiàn)情況B時由于要進(jìn)行任務(wù)切換,操作系統(tǒng)中斷服務(wù)程序出口函數(shù)的執(zhí)行時間要長一些。

圖2.4 搶占式調(diào)度的操作系統(tǒng)處理中斷的過程
中斷處理過程的第①步至第⑥步對A和B兩種情況是相同的,并且每一步所做的工作與非搶占式調(diào)度的操作系統(tǒng)完全相同。第、
、
步對應(yīng)于情況A,即中斷處理結(jié)束后繼續(xù)運(yùn)行原先被中斷的任務(wù)的情況。第
、
、
步對應(yīng)于情況B,即中斷處理結(jié)束后運(yùn)行新被調(diào)度程序選中的任務(wù)的情況。
(1)中斷延遲時間
如圖2.4所示,中斷延遲時間指從中斷請求發(fā)生到CPU響應(yīng)該中斷請求,并且開始執(zhí)行中斷服務(wù)程序所經(jīng)歷的延遲時間。中斷延遲時間受到以下3種時間因素的影響:
① 處理高優(yōu)先級中斷的時間;
② 硬件開始處理中斷請求到開始執(zhí)行中斷服務(wù)程序第一條指令之間的時間;
③ 最大關(guān)中斷時間。
因?yàn)楦邇?yōu)先級中斷會屏蔽低優(yōu)先級的中斷,所以一個中斷請求必須等優(yōu)先級比它高的中斷請求被處理完之后才能得到處理。又因?yàn)橹袛嗍强梢郧短椎模浴疤幚砀邇?yōu)先級中斷的時間”與中斷嵌套的層數(shù)及每層中斷的處理難度都有密切的關(guān)系。而中斷嵌套的層數(shù)及每層中斷的處理難度又與應(yīng)用問題有直接的關(guān)系,對于不同的應(yīng)用問題中斷嵌套的層數(shù)可能不同,每層中斷的中斷服務(wù)程序的執(zhí)行時間也不相同。總之嵌入式操作系統(tǒng)的設(shè)計者無法對“處理高優(yōu)先級中斷的時間”進(jìn)行優(yōu)化。
“硬件開始處理中斷請求到開始執(zhí)行中斷服務(wù)程序第一條指令之間的時間”完全由硬件決定,嵌入式操作系統(tǒng)的設(shè)計者也無法對這一時間進(jìn)行優(yōu)化。在這段時間內(nèi)要進(jìn)行保存關(guān)鍵寄存器的內(nèi)容、獲取中斷向量、并根據(jù)中斷向量給出的地址轉(zhuǎn)到中斷服務(wù)程序等一系列的工作。
中斷延遲時間與系統(tǒng)關(guān)中斷時間有直接關(guān)系。操作系統(tǒng)在進(jìn)入臨界區(qū)代碼之前要關(guān)中斷,執(zhí)行完臨界區(qū)代碼之后再打開中斷。關(guān)中斷的時間越長,中斷延遲就越長,在嚴(yán)重情況下還可能引起中斷請求丟失。對實(shí)時系統(tǒng)來說總是關(guān)心最極端情況下的處理結(jié)果,因此在確定中斷延遲時間時,應(yīng)當(dāng)測量的是最大關(guān)中斷時間,而不是平均關(guān)中斷時間,更不是最小關(guān)中斷時間。最大關(guān)中斷時間是嵌入式操作系統(tǒng)的設(shè)計者必須加以優(yōu)化的一個時間性能指標(biāo)。
(2)最大關(guān)中斷時間
最大關(guān)中斷時間的長短取決于操作系統(tǒng)關(guān)中斷的時間和應(yīng)用程序關(guān)中斷的時間兩個因素。為了縮短最大關(guān)中斷時間,在設(shè)計和編寫操作系統(tǒng)和應(yīng)用程序時應(yīng)當(dāng)盡可能地減少關(guān)中斷的時間。在設(shè)計操作系統(tǒng)時,如果為了保證臨界區(qū)代碼的安全,采用一進(jìn)入系統(tǒng)內(nèi)核就關(guān)閉中斷的方法來進(jìn)行互斥,那么操作系統(tǒng)的設(shè)計雖然很簡單,系統(tǒng)的安全也能夠得到保障,但關(guān)中斷的時間就會很長。其實(shí)通過仔細(xì)分析操作系統(tǒng)內(nèi)核的代碼,就可以發(fā)現(xiàn)其中存在一些非臨界區(qū)。在這些非臨界區(qū)中開中斷,增加操作系統(tǒng)內(nèi)核中的可搶占點(diǎn),可以顯著縮短關(guān)中斷的時間。
(3)中斷響應(yīng)時間
如圖2.4所示,中斷響應(yīng)時間指從發(fā)生中斷請求到開始執(zhí)行用戶中斷服務(wù)程序的第一條指令之間的時間。應(yīng)注意中斷延遲時間與中斷響應(yīng)時間的區(qū)別。中斷延遲時間指從發(fā)生中斷請求到開始執(zhí)行中斷服務(wù)程序的第一條指令之間的時間。中斷響應(yīng)時間和中斷延遲時間之間的關(guān)系可以用下面的算式表示:
中斷響應(yīng)時間=中斷延遲時間+保存任務(wù)上下文的時間+執(zhí)行中斷服務(wù)程序入口函數(shù)的時間
由于中斷延遲時間受到處理高優(yōu)先級中斷的時間、硬件開始處理中斷請求到開始執(zhí)行中斷服務(wù)程序第一條指令之間的時間、最大關(guān)中斷時間的影響,所以中斷響應(yīng)時間將受到以下5種時間因素的影響:
① 處理高優(yōu)先級中斷的時間;
② 硬件開始處理中斷請求到開始執(zhí)行中斷服務(wù)程序第一條指令之間的時間;
③ 最大關(guān)中斷時間;
④ 保存任務(wù)上下文的時間;
⑤ 執(zhí)行中斷服務(wù)程序入口函數(shù)的時間。
任務(wù)上下文指CPU寄存器中的內(nèi)容。保存任務(wù)上下文的時間主要取決于處理器的速度和任務(wù)上下文的數(shù)量。處理器的速度高,任務(wù)上下文少,保存任務(wù)上下文所花費(fèi)的時間就短,反之保存任務(wù)上下文所花費(fèi)的時間就長。
執(zhí)行中斷服務(wù)程序入口函數(shù)時所做的工作主要是把中斷嵌套層數(shù)計數(shù)器的值加1,記錄下當(dāng)前的中斷嵌套層數(shù)。某些嵌入式操作系統(tǒng)也會在中斷服務(wù)程序入口函數(shù)中做一些其他的工作。但總的來說,執(zhí)行中斷服務(wù)程序入口函數(shù)所花費(fèi)的時間是一個確定值。
(4)中斷恢復(fù)時間
如圖2.4所示,中斷恢復(fù)時間是從用戶中斷服務(wù)程序執(zhí)行完畢到繼續(xù)執(zhí)行原先被中斷的任務(wù)或開始執(zhí)行新被調(diào)度程序選中的任務(wù)之間的時間。中斷恢復(fù)時間受到以下3種時間因素的影響:
① 執(zhí)行中斷服務(wù)程序出口函數(shù)的時間;
② 恢復(fù)任務(wù)上下文的時間;
③ 執(zhí)行中斷返回指令的時間。
在需要進(jìn)行任務(wù)切換時,中斷服務(wù)程序出口函數(shù)的執(zhí)行時間會比不進(jìn)行任務(wù)切換時有所延長,但總的來說,執(zhí)行中斷服務(wù)程序出口函數(shù)的時間是一個確定值。和保存任務(wù)上下文的時間一樣,恢復(fù)任務(wù)上下文的時間主要取決于處理器的速度和任務(wù)上下文的數(shù)量。執(zhí)行中斷返回指令的時間完全取決于處理器的性能,但不論怎樣,這一時間是很短的。
(5)中斷處理時間
中斷處理時間即執(zhí)行用戶中斷服務(wù)程序所花費(fèi)的時間。這一時間的長短與用戶中斷服務(wù)程序所要完成的工作量有關(guān)。中斷服務(wù)程序所要完成的工作量取決于具體的情況,無法加以限制。所以中斷處理時間這一指標(biāo)與嵌入式操作系統(tǒng)的其他時間性能指標(biāo)有一定的區(qū)別。
中斷服務(wù)程序所要完成的工作量雖然不能隨意減少,但縮短中斷處理時間對于實(shí)時嵌入式操作系統(tǒng)卻是非常有意義的。因?yàn)闊o論是否打開中斷,中斷服務(wù)程序的運(yùn)行過程都不能被優(yōu)先級較低的中斷請求所中斷,這會導(dǎo)致某些低優(yōu)先級中斷的中斷延遲時間延長,降低了系統(tǒng)的實(shí)時性能。
在中斷處理的工作量是一個恒定值的前提下,縮短中斷處理時間的方法是,將工作在中斷服務(wù)程序和中斷服務(wù)任務(wù)之間進(jìn)行合理分配。一般情況下,處理中斷時所要做的工作包括確定產(chǎn)生中斷請求的設(shè)備、從產(chǎn)生中斷請求的設(shè)備處取得數(shù)據(jù)、根據(jù)得到的數(shù)據(jù)進(jìn)行中斷處理等。確定產(chǎn)生中斷請求的設(shè)備、從產(chǎn)生中斷請求的設(shè)備處取得數(shù)據(jù)一般是由中斷服務(wù)程序來完成,但進(jìn)行中斷處理則既可以由中斷服務(wù)程序來完成也可以由中斷服務(wù)任務(wù)來完成。如果將全部或部分進(jìn)行中斷處理的工作交給中斷服務(wù)任務(wù)來完成,那么中斷處理時間顯然就可以縮短。
將進(jìn)行中斷處理的工作交給中斷服務(wù)任務(wù)來完成雖然可以縮短中斷處理時間,但并不總能達(dá)到提高系統(tǒng)性能的目的,有時還得不償失。原因如下,在將進(jìn)行中斷處理的工作交給中斷服務(wù)任務(wù)來完成時,中斷服務(wù)程序所做的工作變成了以下幾項(xiàng):確定產(chǎn)生中斷請求的設(shè)備、從產(chǎn)生中斷請求的設(shè)備取得數(shù)據(jù)、通知實(shí)際進(jìn)行中斷處理的中斷服務(wù)任務(wù)。通知實(shí)際進(jìn)行中斷處理的中斷服務(wù)任務(wù)可以采用信號、信號量、消息、事件等同步機(jī)制。這種通知工作需要一定的時間。如果處理中斷需要花費(fèi)的時間很短,這樣做就很不值得。而且將進(jìn)行中斷處理的工作交給中斷服務(wù)任務(wù)后,實(shí)際開始中斷處理的時間要延遲到中斷服務(wù)任務(wù)被調(diào)度程序選中之后。所以,即使中斷服務(wù)任務(wù)的優(yōu)先級非常高,也會有一定的調(diào)度延遲。但是在直接由中斷服務(wù)程序進(jìn)行中斷處理的情況下,這個調(diào)度延遲是不存在的。這就是為什么在將進(jìn)行中斷處理的工作交給中斷服務(wù)任務(wù)來完成時,并不總是能提高系統(tǒng)性能的原因。
(6)任務(wù)上下文切換時間
在多任務(wù)操作系統(tǒng)中,任務(wù)上下文切換指CPU的控制權(quán)由當(dāng)前運(yùn)行的任務(wù)轉(zhuǎn)移到另外一個就緒任務(wù)的過程。發(fā)生任務(wù)上下文切換之后,當(dāng)前運(yùn)行的任務(wù)將變?yōu)榫途w或者阻塞態(tài),另一個被調(diào)度程序選中的就緒任務(wù)將投入運(yùn)行。由于在操作系統(tǒng)運(yùn)行的過程中任務(wù)上下文切換會經(jīng)常發(fā)生,因此任務(wù)上下文切換時間的長短將直接影響到整個系統(tǒng)的性能。
如圖2.5所示,任務(wù)上下文切換的過程分為3個階段:保存退出運(yùn)行的任務(wù)的上下文、選擇將投入運(yùn)行的任務(wù)、恢復(fù)將投入運(yùn)行的任務(wù)的上下文。任務(wù)上下文切換時間就是這3個階段所花費(fèi)的時間的總和。

圖2.5 任務(wù)上下文切換的過程
在這3個階段所花費(fèi)的時間中,保存退出運(yùn)行的任務(wù)的上下文所花費(fèi)的時間與恢復(fù)將投入運(yùn)行的任務(wù)的上下文所花費(fèi)的時間主要取決于處理器的速度和任務(wù)上下文的數(shù)量。選擇將投入運(yùn)行的任務(wù)所花費(fèi)的時間則主要取決于操作系統(tǒng)的調(diào)度程序所采用的任務(wù)選擇算法。
任務(wù)上下文指CPU寄存器中的內(nèi)容。這些內(nèi)容保存在任務(wù)的當(dāng)前狀態(tài)保存區(qū)中,如任務(wù)的堆棧或任務(wù)控制塊之中。當(dāng)一個任務(wù)被投入運(yùn)行時這些內(nèi)容將被裝入到CPU寄存器中,一個任務(wù)退出運(yùn)行時,CPU中各個寄存器的值將會保存到任務(wù)的當(dāng)前狀態(tài)保存區(qū)中。因此,CPU內(nèi)部的寄存器越多,保存和恢復(fù)上下文的工作就越重。所以任務(wù)上下文切換時間與CPU有多少寄存器有直接的關(guān)系。
當(dāng)嵌入式計算機(jī)帶有浮點(diǎn)協(xié)處理器時,在進(jìn)行任務(wù)上下文切換時通常也要對浮點(diǎn)協(xié)處理器中的寄存器內(nèi)容進(jìn)行保存和恢復(fù),這更加耗費(fèi)時間。由于并不是所有的任務(wù)都要使用浮點(diǎn)協(xié)處理器,所以操作系統(tǒng)可以采取某些優(yōu)化策略,并不需要每次進(jìn)行任務(wù)切換時都保存和恢復(fù)浮點(diǎn)協(xié)處理器中的寄存器內(nèi)容。
選擇將投入運(yùn)行的任務(wù)所花費(fèi)的時間雖然也受到處理器速度的影響,但更主要的取決于操作系統(tǒng)的調(diào)度程序所采用的任務(wù)選擇算法。一些選擇任務(wù)算法與系統(tǒng)中處于就緒狀態(tài)的任務(wù)數(shù)有關(guān)。任務(wù)數(shù)少,選擇任務(wù)花費(fèi)的時間就短,任務(wù)數(shù)多,選擇任務(wù)花費(fèi)的時間就長。這對于有很強(qiáng)實(shí)時性要求操作系統(tǒng)是不能接受的。強(qiáng)實(shí)時的嵌入式操作系統(tǒng)要求選擇任務(wù)所花費(fèi)的時間是確定的,不能隨系統(tǒng)中的就緒任務(wù)數(shù)發(fā)生變化。這種操作系統(tǒng)必須采用一種與就緒任務(wù)數(shù)無關(guān)的任務(wù)選擇算法。有些任務(wù)選擇算法是可以滿足這個要求的。如基于優(yōu)先級位圖的任務(wù)選擇算法就能夠保證任務(wù)選擇過程所花費(fèi)的時間具有確定性。
(7)任務(wù)響應(yīng)時間
如圖2.4所示,任務(wù)響應(yīng)時間指從一個任務(wù)對應(yīng)的中斷發(fā)生到該任務(wù)開始運(yùn)行之間所經(jīng)歷的時間。任務(wù)響應(yīng)時間又稱調(diào)度延遲。如果一個任務(wù)在等待某一中斷請求將其喚醒,那么這個中斷請求發(fā)生后,其中斷服務(wù)程序?qū)⑹乖撊蝿?wù)進(jìn)入就緒狀態(tài)。如果這一任務(wù)有足夠高的優(yōu)先級,那么在當(dāng)前運(yùn)行的任務(wù)停止運(yùn)行后(停止運(yùn)行的原因是多樣的,可能是因?yàn)楸粨屨迹赡苁且虻却撤N資源而被阻塞,也可能是因?yàn)檫\(yùn)行時間片到期),這個新進(jìn)入就緒狀態(tài)的任務(wù)就將被投入運(yùn)行。任務(wù)響應(yīng)時間就是指這一過程所花費(fèi)的時間。
任務(wù)響應(yīng)時間受到以下因素的影響:
① 操作系統(tǒng)的調(diào)度算法;
② 系統(tǒng)禁止調(diào)度的時間;
③ 中斷延遲時間;
④ 任務(wù)上下文切換時間;
⑤ 中斷處理時間。
操作系統(tǒng)的調(diào)度算法是決定任務(wù)響應(yīng)時間的主要因素之一。采用搶占式最高優(yōu)先級優(yōu)先調(diào)度算法的操作系統(tǒng)任務(wù)響應(yīng)時間明顯較短。因?yàn)檫@種操作系統(tǒng)是即時搶占的,一旦任務(wù)的狀態(tài)發(fā)生了變化,操作系統(tǒng)馬上就會進(jìn)行調(diào)度,使高優(yōu)先級的任務(wù)投入運(yùn)行,如圖2.4所示,這時任務(wù)響應(yīng)時間很好計算,它的值等于中斷延遲時間、執(zhí)行用戶中斷服務(wù)程序的時間、中斷恢復(fù)時間三者之和。有些操作系統(tǒng)并不是在任務(wù)狀態(tài)發(fā)生變化后馬上就能進(jìn)行調(diào)度,而是要等待到某一個特定的時刻(如當(dāng)前運(yùn)行的任務(wù)因等待某種資源被阻塞時),所以其任務(wù)響應(yīng)時間就比較長。
系統(tǒng)禁止調(diào)度的時間也是影響任務(wù)響應(yīng)時間的主要因素之一。在操作系統(tǒng)禁止調(diào)度時,即使中斷服務(wù)程序使一個優(yōu)先級更高的任務(wù)進(jìn)入就緒狀態(tài),中斷處理結(jié)束后也無法切換到這個高優(yōu)先級任務(wù)運(yùn)行,任務(wù)響應(yīng)時間將變得很長。禁止調(diào)度是一種互斥方法。一個實(shí)時性能良好的操作系統(tǒng)不會使用這種方法進(jìn)行互斥,但操作系統(tǒng)經(jīng)常會提供一個可以禁止/允許調(diào)度的系統(tǒng)調(diào)用。在應(yīng)用程序中雖然可以使用這個系統(tǒng)調(diào)用,但使用的時候一定要慎重,以免使任務(wù)響應(yīng)時間變得過長。
另外,從前面的介紹中可以看出:中斷延遲時間、任務(wù)上下文切換時間、中斷處理時間等因素也都會對任務(wù)響應(yīng)時間發(fā)生影響。
(8)系統(tǒng)調(diào)用執(zhí)行時間
系統(tǒng)調(diào)用執(zhí)行時間也是評價一個嵌入式操作系統(tǒng)性能優(yōu)劣的指標(biāo)。然而,由于調(diào)用參數(shù)和系統(tǒng)運(yùn)行情況的差別,同一個系統(tǒng)調(diào)用的每次執(zhí)行,可能會經(jīng)歷不同的路徑,所以其執(zhí)行時間不是一個定值,而是會在一定區(qū)間之內(nèi)波動。
實(shí)時嵌入式操作系統(tǒng),關(guān)心的是系統(tǒng)調(diào)用的最大執(zhí)行時間;非實(shí)時嵌入式操作系統(tǒng),關(guān)心的是系統(tǒng)調(diào)用的平均執(zhí)行時間。所以在評價系統(tǒng)調(diào)用執(zhí)行時間時,應(yīng)該根據(jù)可能的使用情況設(shè)計不同的測試用例,獲取其最大值和平均值。另外,一個操作系統(tǒng)中的各種系統(tǒng)調(diào)用的使用頻率是不同的,一些系統(tǒng)調(diào)用經(jīng)常使用,另一些系統(tǒng)調(diào)用很少使用。所以在對一個嵌入式操作系統(tǒng)的系統(tǒng)調(diào)用執(zhí)行時間進(jìn)行整體評價時應(yīng)對不同的系統(tǒng)調(diào)用賦予不同的權(quán)重。
2. 嵌入式操作系統(tǒng)的存儲開銷指標(biāo)
由于成本、功耗和便攜性要求等原因,嵌入式系統(tǒng)的存儲資源一般都比較有限,因此嵌入式操作系統(tǒng)的存儲開銷也是它的重要性能指標(biāo)。在這一點(diǎn)上嵌入式操作系統(tǒng)與通用操作系統(tǒng)有明顯的區(qū)別。嵌入式操作系統(tǒng)主要有代碼存儲開銷和數(shù)據(jù)存儲開銷兩種存儲開銷指標(biāo)。
(1)代碼存儲開銷
代碼存儲開銷指存儲嵌入式操作系統(tǒng)(內(nèi)核)本身所需要的內(nèi)存數(shù)量。嵌入式操作系統(tǒng)代碼的大小取決于多種因素,其值一般與操作系統(tǒng)的功能有直接關(guān)系,分布在從幾千字節(jié)到幾百字節(jié)的區(qū)間內(nèi)。例如,用于無線傳感器的嵌入式操作系統(tǒng)代碼必須限制在幾字節(jié)的水平,而用于數(shù)字電視和機(jī)頂盒的嵌入式操作系統(tǒng)代碼達(dá)到幾百字節(jié)也是完全可以接受的。
(2)數(shù)據(jù)存儲開銷
嵌入式操作系統(tǒng)在運(yùn)行過程中需要一定數(shù)量的存儲空間來存放工作數(shù)據(jù)。數(shù)據(jù)存儲開銷指存儲這些工作數(shù)據(jù)所需要的內(nèi)存數(shù)量。這些內(nèi)存按用途分為以下三類:
① 操作系統(tǒng)變量所占的內(nèi)存。這一部分內(nèi)存的大小固定,不會隨著操作系統(tǒng)的運(yùn)行發(fā)生變化。
② 操作系統(tǒng)對象及其控制結(jié)構(gòu)所占的內(nèi)存。操作系統(tǒng)對象指任務(wù)、信號量、事件、信號、消息、軟件定時器、堆等。這些對象的數(shù)目有可能會隨著系統(tǒng)的運(yùn)行發(fā)生變化。例如,在操作系統(tǒng)支持的任務(wù)數(shù)不固定的情況下,任務(wù)控制塊的數(shù)量可以隨著系統(tǒng)中任務(wù)數(shù)的多少發(fā)生變化。
③ 堆棧所占的內(nèi)存。操作系統(tǒng)使用的堆棧主要有任務(wù)堆棧和中斷堆棧兩種。在多任務(wù)操作系統(tǒng)中,操作系統(tǒng)給每個任務(wù)提供一個單獨(dú)的堆棧空間。函數(shù)調(diào)用的返回地址、函數(shù)的局部變量等都保存在任務(wù)堆棧中。任務(wù)堆棧的尺寸一般由應(yīng)用程序開發(fā)者指定,但準(zhǔn)確估計出一個接近實(shí)際需要的值是相當(dāng)困難的。為了防止任務(wù)堆棧溢出往往要指定一個較大的值。在允許中斷嵌套時,任務(wù)上下文(各種寄存器的值)、中斷服務(wù)程序的局部變量也可以保存在任務(wù)堆棧中,但為了避免在中斷嵌套層數(shù)過多時任務(wù)堆棧發(fā)生溢出,一些操作系統(tǒng)采用了一個中斷堆棧專門來保存中斷嵌套時產(chǎn)生的任務(wù)上下文和中斷服務(wù)程序的局部變量,而不是將這些信息保存在任務(wù)堆棧中。這種做法降低了由于任務(wù)堆棧空間的實(shí)際需求難以確定所帶來的問題,提高了系統(tǒng)的可靠性。
2.1.4 嵌入式操作系統(tǒng)的結(jié)構(gòu)
嵌入式操作系統(tǒng)的結(jié)構(gòu)可分為單塊結(jié)構(gòu)、層次結(jié)構(gòu)和微內(nèi)核結(jié)構(gòu)三類。單塊結(jié)構(gòu)的嵌入式操作系統(tǒng)和層次結(jié)構(gòu)的嵌入式操作系統(tǒng)又統(tǒng)稱為一體化結(jié)構(gòu)的嵌入式操作系統(tǒng)。
1. 單塊結(jié)構(gòu)的嵌入式操作系統(tǒng)
如圖2.6所示,單塊結(jié)構(gòu)的嵌入式操作系統(tǒng)由許多模塊組成,這些模塊通常在核心態(tài)下運(yùn)行。模塊之間沒有層次關(guān)系,可以根據(jù)需要隨意地相互調(diào)用。在系統(tǒng)規(guī)模較小時,這種結(jié)構(gòu)顯得比較靈活。但總的來說,單塊結(jié)構(gòu)操作系統(tǒng)很難調(diào)試和維護(hù)。如果一個模塊被改變,對其他的模塊可能會有很大的影響,導(dǎo)致其他模塊中出現(xiàn)一些錯誤。操作系統(tǒng)中包含的模塊越多,模塊間的調(diào)用關(guān)系越復(fù)雜,整個系統(tǒng)就越混亂。
2. 層次結(jié)構(gòu)的嵌入式操作系統(tǒng)
如圖2.7所示,層次結(jié)構(gòu)的嵌入式操作系統(tǒng)按層次關(guān)系進(jìn)行組織。整個系統(tǒng)由多個層次所組成,并且只允許上層調(diào)用下層,而下層不能反過來調(diào)用上層,操作系統(tǒng)的結(jié)構(gòu)清晰,提高了系統(tǒng)的安全性。在一個理想的層次結(jié)構(gòu)系統(tǒng)中,各層之間不能越層調(diào)用。比如第n層不能越過第n-1層直接調(diào)用第n-2層。在這種嚴(yán)格意義的層次系統(tǒng)中,很容易在不影響其他層的情況下替換其中的某一層。但在一個具體的操作系統(tǒng)中,出于性能方面的考慮,各層之間不會嚴(yán)格地遵守逐層調(diào)用的規(guī)則。而是允許上層越過直接下層調(diào)用更底層的功能。例如,應(yīng)用程序發(fā)出的系統(tǒng)調(diào)用就可以直接到達(dá)對應(yīng)的功能層。

圖2.6 單塊結(jié)構(gòu)的嵌入式操作系統(tǒng)

圖2.7 層次結(jié)構(gòu)的嵌入式操作系統(tǒng)
3. 微內(nèi)核結(jié)構(gòu)的嵌入式操作系統(tǒng)
如圖2.8所示,微內(nèi)核結(jié)構(gòu)的嵌入式操作系統(tǒng)只有一個很小的內(nèi)核,其中只包含一些必須由內(nèi)核實(shí)現(xiàn)的功能。而把許多不是必須由內(nèi)核實(shí)現(xiàn)的功能都放在了內(nèi)核之外,運(yùn)行于用戶態(tài)。微內(nèi)核結(jié)構(gòu)提高了操作系統(tǒng)的模塊化程度,使其結(jié)構(gòu)更清晰,更加易于調(diào)試、擴(kuò)充和剪裁,也很容易實(shí)現(xiàn)在不同硬件平臺之間的移植。

圖2.8 微內(nèi)核結(jié)構(gòu)的嵌入式操作系統(tǒng)
在單塊結(jié)構(gòu)和層次結(jié)構(gòu)兩類操作系統(tǒng)中,操作系統(tǒng)的功能大部分都是由系統(tǒng)內(nèi)核提供的。系統(tǒng)內(nèi)核中包含的功能很多,整個操作系統(tǒng)幾乎是一個整體,沒有再劃分內(nèi)核部分和核外部分。因此把這兩類操作系統(tǒng)統(tǒng)稱為一體化結(jié)構(gòu)的操作系統(tǒng)。這樣按照操作系統(tǒng)內(nèi)核中包括的功能的多少,操作系統(tǒng)就被分為了微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)和一體化結(jié)構(gòu)的操作系統(tǒng)兩大類。
大部分嵌入式操作系統(tǒng)都是采用微內(nèi)核結(jié)構(gòu),采用一體化結(jié)構(gòu)的嵌入式操作系統(tǒng)相對很少。專門為嵌入式系統(tǒng)開發(fā)的操作系統(tǒng)幾乎無一例外地采用了微內(nèi)核結(jié)構(gòu),只有某些從通用操作系統(tǒng)演化來的系統(tǒng)采用了一體化結(jié)構(gòu)。
嵌入式操作系統(tǒng)通常采用微內(nèi)核結(jié)構(gòu)的原因主要來自以下三個方面。
① 使用特征方面的原因:通用計算機(jī)面對的是開放的用戶群,一些用戶不需要的功能另一些用戶可能需要。一個功能放在內(nèi)核中,總會有用處。而且,內(nèi)核的復(fù)雜與否也不是用戶所關(guān)心的問題。然而,嵌入式系統(tǒng)的情況則不同。嵌入式系統(tǒng)的用戶群及用戶對功能的要求是相對封閉的。對于特定的嵌入式系統(tǒng),需要哪些功能、不需要哪些功能基本上是固定的。對于一個具體的嵌入式系統(tǒng)而言,操作系統(tǒng)中的某些多余功能會永遠(yuǎn)沒有用途。
② 內(nèi)存資源方面的原因:相對于通用計算機(jī)而言,內(nèi)存在嵌入式系統(tǒng)中是很有限的資源。以下幾個問題都是限制嵌入式系統(tǒng)中內(nèi)存數(shù)量的原因:第一,價格因素,對多數(shù)嵌入式系統(tǒng)而言,內(nèi)存價格在整個系統(tǒng)的價格中都占一定的比例。第二,供電因素,嵌入式系統(tǒng)經(jīng)常由電池供電,因此電源供應(yīng)是一個重要問題,非常需要采用包括減小內(nèi)存容量在內(nèi)的各項(xiàng)措施節(jié)約系統(tǒng)的耗電。第三,散熱因素,在系統(tǒng)電源有保障的情況下,散熱也是一個問題。嵌入式系統(tǒng)往往要在條件很不利的情況下使用,而且還可能無法采用排風(fēng)扇一類的散熱措施。例如,很難給一臺PDA安上一個散熱風(fēng)扇。因此有必要通過減少內(nèi)存數(shù)量來降低系統(tǒng)的散熱。所以,操作系統(tǒng)內(nèi)核所占的內(nèi)存數(shù)量對于嵌入式系統(tǒng)是個很敏感的問題,減少操作系統(tǒng)內(nèi)核所占用的內(nèi)存數(shù)量有重要意義。
③ 商業(yè)方面的原因:如果嵌入式操作系統(tǒng)的功能大而全,會導(dǎo)致價格較高,顯然既不符合用戶的利益也不符合供應(yīng)商的利益。在銷售嵌入式操作系統(tǒng)時應(yīng)當(dāng)能夠根據(jù)用戶的需要按模塊進(jìn)行銷售。嵌入式操作系統(tǒng)采用微內(nèi)核結(jié)構(gòu)比采用一體化結(jié)構(gòu)更易于按模塊進(jìn)行拆分和組合。
既然微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)比一體化結(jié)構(gòu)的操作系統(tǒng)更適合于嵌入式系統(tǒng),那么哪些成分必須留在嵌入式操作系統(tǒng)的內(nèi)核中呢?最小的內(nèi)核又必須包含哪些成分呢?現(xiàn)在就來討論這些問題。
① 進(jìn)行任務(wù)管理與調(diào)度所需的功能必須位于內(nèi)核中。包括任務(wù)調(diào)度、任務(wù)建立、任務(wù)刪除、任務(wù)掛起、任務(wù)喚醒、任務(wù)屬性設(shè)置、任務(wù)屬性查詢等功能。
② 內(nèi)存管理功能必須留在在內(nèi)核中。如頁表的建立和管理必須由內(nèi)核來實(shí)現(xiàn)。
③ 任務(wù)通信功能必須由內(nèi)核來實(shí)現(xiàn)。這些功能包括互斥、同步和數(shù)據(jù)交換機(jī)制。內(nèi)核中沒有這些功能就無法實(shí)現(xiàn)任務(wù)與任務(wù)之間,以及內(nèi)核與任務(wù)之間的通信。
④中斷管理必須由內(nèi)核來實(shí)現(xiàn)。嵌入式系統(tǒng)的CPU響應(yīng)中斷后會自動切換到核心態(tài),執(zhí)行中斷服務(wù)程序,所以最基本的中斷管理工作只能由內(nèi)核來實(shí)現(xiàn)。
綜上所述,最小的微內(nèi)核中可以只包括任務(wù)管理、內(nèi)存管理、任務(wù)通信和中斷管理4個主要成分。
當(dāng)嵌入式操作系統(tǒng)采用微內(nèi)核結(jié)構(gòu)時,放到內(nèi)核之外的功能有兩種存在形式:一是作為服務(wù)任務(wù)存在;二是以庫函數(shù)的形式存在。
當(dāng)內(nèi)核外的功能以服務(wù)任務(wù)的形式存在時,在被服務(wù)的任務(wù)與提供服務(wù)的任務(wù)之間將建立一種“客戶/服務(wù)器”關(guān)系。當(dāng)一個任務(wù)有某種服務(wù)需求時,可以向服務(wù)任務(wù)發(fā)出請求,并由服務(wù)任務(wù),而不是內(nèi)核中的模塊為發(fā)出請求的任務(wù)提供服務(wù)。但這個過程的細(xì)節(jié)通常被隱藏了起來,發(fā)出請求的任務(wù)以為服務(wù)請求交給了內(nèi)核,而得到的服務(wù)也由內(nèi)核提供。
以系統(tǒng)調(diào)用open為例,可以采用如下的實(shí)現(xiàn)方法:當(dāng)用戶任務(wù)調(diào)用open要求打開一個文件時,內(nèi)核將使該用戶任務(wù)進(jìn)入阻塞狀態(tài),然后以此任務(wù)的名義向文件服務(wù)任務(wù)發(fā)送一個消息。當(dāng)文件服務(wù)任務(wù)接收到這個消息并完成所要求的操作以后,發(fā)回一個應(yīng)答消息,內(nèi)核在接收到這一消息后,使請求打開文件的用戶任務(wù)進(jìn)入就緒狀態(tài),并根據(jù)文件服務(wù)任務(wù)發(fā)回的消息決定本次系統(tǒng)調(diào)用的返回值。
當(dāng)內(nèi)核的功能由服務(wù)任務(wù)完成時,雖然邏輯上應(yīng)用軟件的任務(wù)仍在高層,服務(wù)任務(wù)還是在低層為其提供服務(wù),但是結(jié)構(gòu)上則不再遵循同樣的關(guān)系,因?yàn)樘峁┓?wù)的任務(wù)與用戶任務(wù)處在同一層次上。當(dāng)然,也可以讓應(yīng)用任務(wù)知道服務(wù)任務(wù)的存在,直接向服務(wù)任務(wù)發(fā)出服務(wù)請求。但即使是這樣,也要通過內(nèi)核作為中介來傳遞消息并加以協(xié)調(diào),因?yàn)槿蝿?wù)通信機(jī)制需要由內(nèi)核來提供。
一體化的內(nèi)核好比是一個實(shí)力雄厚的工程承包商,承接的所有工程都靠自身的力量來完成。微內(nèi)核好比是一個自身沒有多大施工能力的承包代理,除去必要的管理工作之外,一般的工作都是分包給其他的公司來完成。
當(dāng)內(nèi)核外的功能以庫函數(shù)的形式存在時,庫函數(shù)可以是靜態(tài)鏈接的庫函數(shù)或動態(tài)鏈接的庫函數(shù)。UNIX/Linux上的.a文件和Windows上的.lib文件都是靜態(tài)鏈接庫。應(yīng)用軟件在編譯/連接階段就靜態(tài)地將這種庫函數(shù)的可執(zhí)行代碼鏈接進(jìn)它的可執(zhí)行文件中,所以在每個可執(zhí)行文件中都有一份庫函數(shù)的副本。UNIX/Linux上的.so文件、Windows上的.dll文件都是動態(tài)鏈接庫。應(yīng)用軟件在運(yùn)行時才動態(tài)地與這種庫函數(shù)建立鏈接,并且所有的應(yīng)用軟件都共享庫函數(shù)的同一份副本。
服務(wù)任務(wù)和庫函數(shù)兩種組織核外功能的方法并不互相排斥,可以混合使用,或者以前者為主,以后者作為補(bǔ)充。
相對于一體化結(jié)構(gòu)的操作系統(tǒng),微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)有以下一些優(yōu)點(diǎn)。
① 操作系統(tǒng)內(nèi)核小,且簡單,所以容易理解,容易維護(hù)。
②各種系統(tǒng)模塊(如文件系統(tǒng))、設(shè)備驅(qū)動程序、乃至中斷服務(wù)程序,都可以作為獨(dú)立的任務(wù)來開發(fā),相互間的關(guān)系簡單,便于調(diào)試,并且容易在其他環(huán)境下模擬。因此整個系統(tǒng)的開發(fā)有一條漸進(jìn)的途徑。
③ 系統(tǒng)配置靈活方便。從商業(yè)的角度還可以把內(nèi)核和各種服務(wù)任務(wù)或庫函數(shù)分別銷售,讓用戶根據(jù)具體需要選購,而且也有利于其他軟件開發(fā)商開發(fā)各種第三方軟件。
④ 由于操作系統(tǒng)的內(nèi)核很小,所以執(zhí)行內(nèi)核代碼的時間十分短暫。這樣,基本消除了因?yàn)閳?zhí)行內(nèi)核代碼而產(chǎn)生的不可搶占問題,提高了系統(tǒng)的實(shí)時性。可以說,微內(nèi)核天生就是可搶占的。許多嵌入式操作系統(tǒng)之所以宣稱“可搶占”,就是因?yàn)椴捎昧宋?nèi)核結(jié)構(gòu)的原因。
相對于一體化結(jié)構(gòu)的操作系統(tǒng),微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)又有以下一些缺點(diǎn)。
① 系統(tǒng)效率有時會有所降低。例如,如果將對于外部事件的處理放到內(nèi)核之外,微內(nèi)核在響應(yīng)了外部事件所引起的中斷以后,需要進(jìn)行任務(wù)調(diào)度。當(dāng)負(fù)責(zé)處理外部事件的服務(wù)任務(wù)被調(diào)度程序選中之后,外部事件才能得到處理。因此,原本只有一個中斷延遲,現(xiàn)在卻又增加了一個調(diào)度延遲。盡管因?yàn)椤翱蓳屨肌毙缘脑鰪?qiáng)會使調(diào)度延遲得到一定程度的縮減,但系統(tǒng)的綜合響應(yīng)速度卻很可能還會有所下降。
② 系統(tǒng)安全性會有所降低。例如,文件系統(tǒng)的安全性無疑是信息安全中的一個關(guān)鍵問題,如果把文件系統(tǒng)放到內(nèi)核之外,顯然更容易被外來的入侵所攻破,出現(xiàn)安全漏洞。
2.1.5 嵌入式操作系統(tǒng)的組成
各種嵌入式操作系統(tǒng)的具體組成有很大的不同,特別是微內(nèi)核結(jié)構(gòu)的嵌入式操作系統(tǒng)與一體化結(jié)構(gòu)的嵌入式操作系統(tǒng)有比較顯著的差別。但對于同樣采用微內(nèi)核結(jié)構(gòu)的系統(tǒng)而言,其組成則有一定的共同之處。如圖2.9所示,當(dāng)一個嵌入式操作系統(tǒng)采用微內(nèi)核結(jié)構(gòu),并且內(nèi)核之外的功能以服務(wù)任務(wù)的形式存在時,其組成可分為硬件抽象層、操作系統(tǒng)內(nèi)核、核外服務(wù)、應(yīng)用程序接口等幾個部分。
1. 硬件抽象層
硬件抽象層用于屏蔽不同硬件的特征。向下它與嵌入式系統(tǒng)的硬件直接打交道,向上它對操作系統(tǒng)內(nèi)核中的各個模塊提供一個統(tǒng)一的接口,增強(qiáng)了系統(tǒng)的可移植性。當(dāng)需要將嵌入式操作系統(tǒng)從一個硬件平臺移植到另一個硬件平臺上時只需修改硬件抽象層的程序代碼。

圖2.9 嵌入式操作系統(tǒng)的組成
2. 操作系統(tǒng)內(nèi)核
像上面曾經(jīng)討論過的那樣,任務(wù)管理、內(nèi)存管理、任務(wù)通信和中斷管理等幾部分功能通常只能放在操作系統(tǒng)內(nèi)核中,而其他的一些功能,如文件管理、電源管理、輸入/輸出管理、“看門狗”等,雖然可以放在內(nèi)核之中,但也可以放在內(nèi)核之外,以服務(wù)任務(wù)或庫函數(shù)的形式存在。
3. 核外服務(wù)
一般情況下,文件管理、電源管理、輸入/輸出管理、“看門狗”等一些功能應(yīng)當(dāng)由內(nèi)核之外的服務(wù)任務(wù)來實(shí)現(xiàn)。中斷管理雖然需要由內(nèi)核來實(shí)現(xiàn),但這不意味著中斷服務(wù)程序要承擔(dān)所有的中斷處理工作,完全可以把一些處理工作放在一個專門的中斷服務(wù)任務(wù)中。每當(dāng)有中斷請求發(fā)生時,內(nèi)核中的中斷服務(wù)程序只要把與中斷有關(guān)的信息通知中斷服務(wù)任務(wù)(可以通過內(nèi)核支持的某一種任務(wù)通信方式),并使這個任務(wù)進(jìn)入就緒狀態(tài),具體的處理工作就可以由這個中斷服務(wù)任務(wù)去完成(中斷服務(wù)任務(wù)的優(yōu)先級一般都很高,進(jìn)入就緒狀態(tài)后馬上就會被調(diào)度運(yùn)行)。
一些嵌入式操作系統(tǒng)以核外服務(wù)的形式提供窗口和網(wǎng)絡(luò)方面的功能。但這些功能比較獨(dú)立,按照經(jīng)典理論它們不是操作系統(tǒng)的一部分,所以還是把它們歸類于支撐軟件比較合理。
4. 應(yīng)用程序接口
應(yīng)用程序接口提供一系列供應(yīng)用程序開發(fā)者調(diào)用的功能。應(yīng)用程序開發(fā)者通過應(yīng)用程序接口達(dá)到使用嵌入式操作系統(tǒng)的目的。應(yīng)用程序接口還可以進(jìn)一步分為多個部分,包括操作系統(tǒng)所提供的系統(tǒng)調(diào)用和建立在系統(tǒng)調(diào)用基礎(chǔ)上的庫函數(shù)。
2.1.6 嵌入式操作系統(tǒng)的類型
嵌入式操作系統(tǒng)的種類很多,分類方法也是多樣化的,下面從供應(yīng)方式、實(shí)時性、歷史淵源等幾個角度對其進(jìn)行分類并介紹它們的特點(diǎn)。
從嵌入式操作系統(tǒng)的供應(yīng)方式上可將其分為商用嵌入式操作系統(tǒng)和開源嵌入式操作系統(tǒng)兩類。
商用嵌入式操作系統(tǒng)一般功能穩(wěn)定、可靠、有完善的技術(shù)支持和售后服務(wù)、輔助工具齊全。例如,WindRiver公司的VxWorks、Palm Computing公司的PalmOS、微軟公司的Windows CE和凱思昊鵬公司的Hopen都是商用嵌入式操作系統(tǒng)。
開源嵌入式操作系統(tǒng)在價格方面有優(yōu)勢,此外由于應(yīng)用軟件開發(fā)者可以獲得操作系統(tǒng)源代碼,這給開發(fā)工作帶來了很大方便。但開源嵌入式操作系統(tǒng)的缺點(diǎn)也非常明顯,主要表現(xiàn)是技術(shù)支持差、系統(tǒng)穩(wěn)定性相對較差。因此,使用這類嵌入式操作系統(tǒng)對開發(fā)者有較高的要求。雖然目前有一些公司可以為開源嵌入式操作系統(tǒng)提供技術(shù)服務(wù),但購買這種服務(wù)的費(fèi)用并不低于購買商用嵌入式操作系統(tǒng)。開源嵌入式操作系統(tǒng)的典型代表是嵌入式Linux。
從嵌入式操作系統(tǒng)的實(shí)時性上可將其分為實(shí)時嵌入式操作系統(tǒng)和非實(shí)時嵌入式操作系統(tǒng)兩類。
實(shí)時嵌入式操作系統(tǒng)的特征是能滿足應(yīng)用程序?qū)r間的限制和要求。它主要用在控制、軍事、通信等領(lǐng)域。例如,WindRiver公司的VxWorks、QNX Software Systems Europe公司的QNX、Accelerated Technology公司的Nucleus都是實(shí)時嵌入式操作系統(tǒng)。
非實(shí)時嵌入式操作系統(tǒng)不關(guān)心單個任務(wù)的響應(yīng)時間,它的系統(tǒng)平均性能一般較好,比較適合用在消費(fèi)類電子產(chǎn)品中,如個人數(shù)字助理(PDA)、機(jī)頂盒、電子書、網(wǎng)絡(luò)電話等。非實(shí)時嵌入式操作系統(tǒng)的典型代表是較早版本的Windows CE。
從嵌入式操作系統(tǒng)的歷史淵源上可將其分為PC型嵌入式操作系統(tǒng)和非PC型嵌入式操作系統(tǒng)兩類。
PC型嵌入式操作系統(tǒng)是由個人計算機(jī)或服務(wù)器上的操作系統(tǒng)演化來的嵌入式操作系統(tǒng)。例如,微軟公司的Windows CE、嵌入式Linux等。這類操作系統(tǒng)經(jīng)過在個人計算機(jī)或服務(wù)器上的長期運(yùn)行,技術(shù)比較成熟,相關(guān)軟件的開發(fā)方式用戶比較熟悉,同時也積累了豐富的開發(fā)工具和應(yīng)用軟件。
非PC型嵌入式操作系統(tǒng)是專門為嵌入式系統(tǒng)開發(fā)的操作系統(tǒng)。例如,WindRiver公司的VxWorks和OSEKworks、Psion公司的Symbian、UC Berkeley公司的TinyOS等。這類操作系統(tǒng)一般針對某些固定的應(yīng)用需求而設(shè)計,較多地應(yīng)用在對系統(tǒng)的可靠性和實(shí)時性要求很高的領(lǐng)域。
- 信息技術(shù)基礎(chǔ):Windows 10+WPS Office(微課版·第2版)
- 2020年山東公務(wù)員錄用考試專項(xiàng)題庫:資料分析【歷年真題+章節(jié)題庫+模擬試題】
- 教師職業(yè)道德
- 青島理工大學(xué)商學(xué)院436資產(chǎn)評估專業(yè)基礎(chǔ)[專業(yè)碩士]歷年考研真題及詳解
- 設(shè)計類專業(yè)平面構(gòu)成教程
- 土力學(xué)與地基基礎(chǔ)
- 北京外國語大學(xué)611英語基礎(chǔ)測試(技能)歷年考研真題及詳解
- 免疫基礎(chǔ)與病原生物
- 趙玉明《中國廣播電視通史》(第2版)筆記和典型題詳解
- 常耀信《美國文學(xué)簡史》(第3版)筆記和考研真題詳解
- 工業(yè)菌種制備技術(shù)
- 地方綜合性大學(xué)地理科學(xué)專業(yè)教師教育實(shí)踐指導(dǎo)
- 四川師范大學(xué)外國語學(xué)院358俄語翻譯基礎(chǔ)[專業(yè)碩士]歷年考研真題及詳解
- 3D打印無機(jī)非金屬材料
- 現(xiàn)代農(nóng)藥應(yīng)用技術(shù)叢書:殺菌劑卷(第二版)