新聞中心

EEPW首頁 > 消費(fèi)電子 > 學(xué)習(xí)方法與實(shí)踐 > 嵌入式操作系統(tǒng)設(shè)計(jì)中的若干問題

嵌入式操作系統(tǒng)設(shè)計(jì)中的若干問題

——
作者: 時間:2007-11-24 來源:嵌入式技術(shù)網(wǎng) 收藏
1  什么是
    隨著計(jì)算機(jī)技術(shù)的發(fā)展,應(yīng)用已經(jīng)成為計(jì)算機(jī)應(yīng)用領(lǐng)域的一個重要組成部分。所謂應(yīng)用,是指應(yīng)用系統(tǒng)不是以計(jì)算機(jī)為主,而是把計(jì)算機(jī)技術(shù)做為應(yīng)用系統(tǒng)的一個組成部分嵌入到應(yīng)用系統(tǒng)中,使其具有更高的性能。例如:程控交換機(jī)、手持式電話等,計(jì)算機(jī)的嵌入式應(yīng)用領(lǐng)域是十分廣闊的。
    為了適應(yīng)嵌入式應(yīng)用的復(fù)雜性和多樣性,并縮短其開發(fā)周期,嵌入式應(yīng)運(yùn)而生。嵌入式是相對于一般操作系統(tǒng)而言,通常指的是操作系統(tǒng)的核,嚴(yán)格地說是微內(nèi)核。嵌入式操作系統(tǒng)為了適應(yīng)被嵌入系統(tǒng)的要求具備了一般操作系統(tǒng)最基本的功能,如任務(wù)調(diào)度、同步機(jī)制、中斷處理,但是沒有一般操作系統(tǒng)的用戶界面,如Shell。嵌入式操作系統(tǒng)是以庫的形式提供給用戶,用戶可以通過操作系統(tǒng)的API(Application Programming Interface)使用嵌入式操作系統(tǒng)。

2  操作系統(tǒng)的幾種結(jié)構(gòu)

單一操作系統(tǒng)
    操作系統(tǒng)由許多模塊組成,這些模塊之間可以相互調(diào)用。在這樣的操作系統(tǒng)中通常有二種工作模式,即系統(tǒng)模式和用戶模式。在系統(tǒng)模式下可以執(zhí)行任何操作,而在用戶模式下有些操作是受限制的,例如I/O操作和一些特殊指令。運(yùn)行在用戶模式的應(yīng)用程序可以通過系統(tǒng)調(diào)用進(jìn)入系統(tǒng)模式,完成操作后再返回用戶模式,但是這樣的操作系統(tǒng)很難維護(hù)和調(diào)試。 
層次結(jié)構(gòu)操作系統(tǒng)
    層次結(jié)構(gòu)操作系統(tǒng)通常可以分為用戶程序、I/O管理、進(jìn)程通信、存儲管理4層。程序可以在各層運(yùn)行,這樣的操作系統(tǒng)提供了“環(huán)”管理機(jī)制,即第n環(huán)的程序無權(quán)修改第n-1環(huán)的數(shù)據(jù),從而提高了操作系統(tǒng)的安全性。 
客戶/服務(wù)器方式操作系統(tǒng)
    這種操作系統(tǒng)只有一個很小的內(nèi)核,以完成進(jìn)程間通信等基本功能,而把許多其它功能作為服務(wù)進(jìn)程,運(yùn)行于用戶模式,用戶程序作為客戶進(jìn)程。其工作方式是客戶進(jìn)程發(fā)出請求,服務(wù)進(jìn)程響應(yīng)請求,操作系統(tǒng)僅完成它們之間的通信。 
嵌入式操作系統(tǒng)
    一般的操作系統(tǒng)不僅向用戶提供開發(fā)應(yīng)用程序的各種API,而且,還必須以命令行的形式或是圖形的形式提供一個界面。但是嵌入式操作系統(tǒng)只有API而沒有通常意義下的界面,亦即只有一個核心。在核心里只有操作系統(tǒng)的一些基本功能,如任務(wù)(線程)調(diào)度、存儲管理、同步機(jī)制、中斷管理、API等,而這些功能又可以根據(jù)不同的應(yīng)用系統(tǒng)裁剪和擴(kuò)充,以便以最小的代碼量滿足嵌入式系統(tǒng)的需求。 
3  設(shè)計(jì)嵌入式操作系統(tǒng)應(yīng)考慮的問題
    確切地說,嵌入式設(shè)計(jì)不是一種技術(shù),而是一種概念,一種設(shè)計(jì)哲學(xué),即把計(jì)算機(jī)相關(guān)技術(shù)嵌入到各種應(yīng)用系統(tǒng)中去,嵌入的方式可以是軟件嵌入或硬件嵌入。在這種概念下,一個好的嵌入式設(shè)計(jì)應(yīng)該滿足以下幾點(diǎn):

使用相關(guān)計(jì)算機(jī)的技術(shù)使被嵌入的系統(tǒng)獲得很好的性能價格比; 
能很好地與被嵌入系統(tǒng)相匹配; 
在滿足被嵌入系統(tǒng)功能的前提下盡可能簡單,避免導(dǎo)致大的系統(tǒng)開銷。 
    從某種意義上說,操作系統(tǒng)是計(jì)算機(jī)的一個擴(kuò)展,它賦予了計(jì)算機(jī)更多的功能;從另一個角度看,操作系統(tǒng)也是計(jì)算機(jī)系統(tǒng)的資源管理者。因此,在嵌入式操作系統(tǒng)中,內(nèi)核的最小構(gòu)成也應(yīng)包含下列各部分。
    (1)任務(wù)調(diào)度
    在當(dāng)前的嵌入式應(yīng)用中,特別是對一個復(fù)雜的嵌入式應(yīng)用而言,用單任務(wù)來實(shí)現(xiàn)是不可能的,而只能采用多任務(wù)實(shí)現(xiàn),因此任務(wù)調(diào)度策略的優(yōu)劣是至關(guān)重要的。
    雖然有各種各樣的任務(wù)調(diào)度方法,但概括起來可以分為優(yōu)先級調(diào)度、輪轉(zhuǎn)調(diào)度、時間片調(diào)度3種。
    優(yōu)先級調(diào)度又可以分為2種:優(yōu)先級搶占和優(yōu)先級不搶占。優(yōu)先級搶占是指當(dāng)有高的優(yōu)先級進(jìn)程被激活后,則立即終止當(dāng)前運(yùn)行的進(jìn)程,使其搶占CPU運(yùn)行。優(yōu)先級不搶占是指當(dāng)有高的優(yōu)先級進(jìn)程被激活后,并不立即終止當(dāng)前運(yùn)行的進(jìn)程使其搶占CPU,而是將其放到進(jìn)程就緒隊(duì)列中,在當(dāng)前運(yùn)行的進(jìn)程結(jié)束后,從進(jìn)程就緒隊(duì)列中選擇優(yōu)先級最高的進(jìn)程運(yùn)行。輪轉(zhuǎn)調(diào)度是進(jìn)程管理者按照一個固定的時間間隔讓就緒進(jìn)程輪流運(yùn)行。時間片調(diào)度是根據(jù)每個進(jìn)程各自的實(shí)際情況在不同數(shù)量的單位時間的時間片內(nèi)運(yùn)行。
    在一般的操作系統(tǒng)中,固定采用其中的1種或幾種方法進(jìn)行任務(wù)調(diào)度。例如在Unix和Linux中,采用了優(yōu)先級不搶占、輪轉(zhuǎn)和時間片3種方法,而在實(shí)時操作系統(tǒng)中,優(yōu)先級搶占則是必不可少的。
    無論是在一般的操作系統(tǒng)中還是在嵌入式操作系統(tǒng)中,任務(wù)調(diào)度都是操作系統(tǒng)的核心。在嵌入式操作系統(tǒng)設(shè)計(jì)中,很難明確地說哪一種方法比其它方法更好,而要根據(jù)被嵌入的實(shí)際系統(tǒng)的需求進(jìn)行優(yōu)化選擇。由于線程的切換速度快于進(jìn)程的切換速度,因此,在實(shí)時嵌入式應(yīng)用中,多采用單進(jìn)程多線程調(diào)度來提高實(shí)時性。在嵌入式操作系統(tǒng)中一般都配有上述3種調(diào)度算法的庫函數(shù),以滿足不同用戶的不同需求。在用戶開發(fā)完自己的應(yīng)用系統(tǒng)后,沒有使用到的代碼是不會被連接到最終系統(tǒng)中的,這一點(diǎn)是與一般的操作系統(tǒng)非常重要的區(qū)別。一般的操作系統(tǒng)則是將所有有關(guān)代碼都加載到計(jì)算機(jī)系統(tǒng)中,而不論應(yīng)用時是否會使用這些代碼。
    在實(shí)時嵌入式應(yīng)用中還有一種調(diào)度方法,即期限(deadline)調(diào)度法。這種調(diào)度方法是設(shè)法保證每一個進(jìn)程(或線程)能在它的期限之前被調(diào)度執(zhí)行完,這種方法目前正在研究之中。
    (2)存儲管理
    一般操作系統(tǒng)的存儲管理非常復(fù)雜,虛擬管理被廣泛地使用,簡單地說虛擬存儲器管理就是通過操作系統(tǒng)對內(nèi)存和外存的管理,可以使應(yīng)用程序獲得比計(jì)算機(jī)實(shí)際內(nèi)存更大的編址空間,使每一個應(yīng)用程序都可以享有一個獨(dú)立的虛擬存儲空間。程序訪問的地址是虛擬地址,操作系統(tǒng)通過段、頁管理完成虛擬地址到物理地址的轉(zhuǎn)換和頁面的換入/換出,同時管理和維護(hù)各應(yīng)用程序之間共享的存儲空間。這樣各應(yīng)用程序被分隔在各自的地址空間運(yùn)行,不致相互干擾。
    嵌入式操作系統(tǒng)的存儲管理通常比較簡單。在具體的嵌入式應(yīng)用中,進(jìn)程(或線程)的數(shù)量和各自可能使用的內(nèi)存容量是可以在開發(fā)時預(yù)測的,因此嵌入式操作系統(tǒng)通常采用靜態(tài)內(nèi)存分配。尤其是在實(shí)時嵌入式應(yīng)用中,如果采用虛擬存儲技術(shù),因?yàn)轫摻粨Q的時間不可預(yù)測,所以是不可取的。對于動態(tài)內(nèi)存分配通常的做法也是從緩沖區(qū)中動態(tài)分配一塊固定大小的內(nèi)存,在使用完畢后就釋放。一般地說,嵌入式操作系統(tǒng)的存儲管理沒有垃圾收集的功能。在一個復(fù)雜的應(yīng)用系統(tǒng)中,可能會有幾種情況的組合,應(yīng)視具體情況處理。例如,在一個有多個處理器,且既有硬實(shí)時應(yīng)用,又有軟實(shí)時應(yīng)用和非實(shí)時應(yīng)用的嵌入式系統(tǒng)中,設(shè)計(jì)時可以在硬實(shí)時部分采用靜態(tài)內(nèi)存分配,軟實(shí)時部分采用動態(tài)內(nèi)存分配,而在非實(shí)時部分采用虛擬存儲技術(shù),并且使這三種應(yīng)用分別運(yùn)行在不同的處理器上。
    在內(nèi)存分配的策略上,嵌入式操作系統(tǒng)強(qiáng)烈地依賴于實(shí)際的被嵌入系統(tǒng)。一個通用嵌入式操作系統(tǒng)可以提供幾種分配策略,而用戶在開發(fā)自己的實(shí)際系統(tǒng)時可以選擇,這就再次強(qiáng)調(diào)了前文提到的嵌入式操作系統(tǒng)的可裁剪性。
    存儲管理的另一個重要特性就是內(nèi)存保護(hù)。在一般的操作系統(tǒng)中,每個應(yīng)用程序都有自己的地址空間,不能任意訪問其它應(yīng)用程序的地址空間。這樣,當(dāng)一個應(yīng)用程序崩潰時,不會對其它程序產(chǎn)生影響。盡管存儲器芯片價格已經(jīng)很便宜,但因受應(yīng)用環(huán)境的限制,不能大量使用存儲器,這時嵌入式操作系統(tǒng)的代碼量就受到嚴(yán)格限制。例如有的嵌入式操作系統(tǒng)只有幾KB,使其在處理內(nèi)存保護(hù)方面就非常薄弱,這樣的嵌入式操作系統(tǒng)一般應(yīng)用于一些即使系統(tǒng)崩潰,也不致造成重大損失的領(lǐng)域,例如手持式電話。但某些嵌入式應(yīng)用則對內(nèi)存保護(hù)有非常嚴(yán)格的要求,例如在武器系統(tǒng)中,就要求嵌入式操作系統(tǒng)具有內(nèi)存保護(hù)的功能。
    (3)中斷
    計(jì)算機(jī)系統(tǒng)接受事件有二種方法:查詢和中斷。在多任務(wù)操作系統(tǒng)中,由于采用查詢方式處理事件或I/O請求會消耗大量的系統(tǒng)資源—— CPU時間。因此無論在一般的操作系統(tǒng)還是嵌入式操作系統(tǒng)中都采用中斷方式來處理事件或I/O請求。
    在操作系統(tǒng)中,中斷是同中斷處理程序聯(lián)系在一起的。以I/O操作為例,一般的過程是:任務(wù)A發(fā)出I/O請求后被掛起→操作系統(tǒng)切換到其它任務(wù)運(yùn)行→I/O設(shè)備完成相應(yīng)的操作并發(fā)出中斷請求→操作系統(tǒng)調(diào)用相應(yīng)的中斷處理程序→解掛任務(wù)A。
    在嵌入式操作系統(tǒng)中,對中斷處理十分重視,可以說多數(shù)嵌入式操作系統(tǒng)都是事件驅(qū)動的。在嵌入式操作系統(tǒng)中,中斷處理程序引發(fā)的任務(wù)切換如下所示:
    任務(wù)A運(yùn)行→響應(yīng)中斷并執(zhí)行中斷處理程序,切換到任務(wù)B→任務(wù)B運(yùn)行退出后,切換到任務(wù)A→任務(wù)A繼續(xù)運(yùn)行
    在中斷處理程序(ISR)中僅執(zhí)行一些必要的狀態(tài)轉(zhuǎn)換,對于事件的真正處理則利用中斷任務(wù)(如上述的任務(wù)B)完成。這樣使得中斷處理程序的運(yùn)行時間盡可能短,以便系統(tǒng)可以處理其它中斷事件。同時,在ISR中不能執(zhí)行有關(guān)信號量的操作。因?yàn)镮SR具有最高優(yōu)先級,如果在ISR中執(zhí)行了信號量操作而被掛起,則整個系統(tǒng)將會死鎖。
    在中斷處理上,一般的操作系統(tǒng)與嵌入式操作系統(tǒng)的不同之處是現(xiàn)場保護(hù)。一般的操作系統(tǒng)的中斷現(xiàn)場保護(hù)是由操作系統(tǒng)來完成的,在中斷處理完成之后,也由操作系統(tǒng)恢復(fù)現(xiàn)場。在嵌入式操作系統(tǒng)中,有時由于受到代碼量的限制,中斷現(xiàn)場的保護(hù)往往由中斷處理程序來完成。在中斷處理程序的入口要保護(hù)在中斷處理程序中用到的寄存器,在中斷處理完成后恢復(fù)。這樣一方面減少了代碼量,另一方面提高了中斷響應(yīng)時間,但是卻損失了系統(tǒng)的安全性,同時也增加了調(diào)試的難度。這是在嵌入式操作系統(tǒng)的設(shè)計(jì)中應(yīng)該予以關(guān)注的問題。
    (4)操作系統(tǒng)與用戶的接口
    操作系統(tǒng)提供給用戶使用的有二類接口。一類是人機(jī)界面,無論是視窗形式還是命令行形式,這個接口確切地說并不能做為操作系統(tǒng)的一部分,而僅僅是操作系統(tǒng)的一個外殼,這個界面是為了方便用戶使用操作系統(tǒng),而這個接口在嵌入式操作系統(tǒng)中是不存在的。這里要討論的是另一個接口,操作系統(tǒng)提供給用戶開發(fā)自己的應(yīng)用程序接口(API),也就是系統(tǒng)調(diào)用。無論是一般的操作系統(tǒng)還是嵌入式操作系統(tǒng)都應(yīng)具有這個接口。每一個操作系統(tǒng)提供的系統(tǒng)調(diào)用的功能和種類都不同,當(dāng)然,對于一個操作系統(tǒng)來說,它提供的系統(tǒng)調(diào)用越多,則功能越強(qiáng),對于應(yīng)用程序的開發(fā),也就越能提供高效而簡單的支持,同時也會減少應(yīng)用程序的維護(hù)量。相反,一個操作系統(tǒng)的系統(tǒng)調(diào)用越少越單一,那么應(yīng)用程序相對就要做更多的工作,應(yīng)用程序也就越復(fù)雜。為了適應(yīng)不斷復(fù)雜的應(yīng)用程序開發(fā)的需求,操作系統(tǒng)中設(shè)計(jì)的系統(tǒng)調(diào)用也就越來越多,越來越復(fù)雜,功能越來越強(qiáng)大。但是這一規(guī)律并不適用于嵌入式操作系統(tǒng),嵌入式操作系統(tǒng)的應(yīng)用領(lǐng)域非常廣,簡單的可以應(yīng)用在調(diào)制解調(diào)器上,復(fù)雜的可以應(yīng)用在衛(wèi)星地面通信接收站。這就決定了嵌入式操作系統(tǒng)所提供的系統(tǒng)調(diào)用的數(shù)量和功能是因應(yīng)用不同而不同的。盡管前文提到的可裁剪性是嵌入式操作系統(tǒng)的一個非常重要的特性,但是任何一個嵌入式操作系統(tǒng)都不可能從具有各種完善功能、代碼達(dá)幾百KB的操作系統(tǒng),裁剪到只具有實(shí)時調(diào)度和信號量操作的幾KB代碼。所以嵌入式操作系統(tǒng)只能面向?qū)嶋H的被嵌入系統(tǒng)的具體需求,確定系統(tǒng)調(diào)用,以便達(dá)到在提供最有效的系統(tǒng)調(diào)用的同時具有最小的代碼量。
    最后,在系統(tǒng)調(diào)用的形式上要提到POSIX。由于各個操作系統(tǒng)提供自己的系統(tǒng)調(diào)用,其類型、功能和調(diào)用格式各不相同,這樣給應(yīng)用程序的移植帶來了很大困難。POSIX標(biāo)準(zhǔn)的提出正是試圖解決這一問題。POSIX試圖定義一些標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口和功能,盡管各個操作系統(tǒng)的實(shí)現(xiàn)方式各不相同。POSIX是以類Unix為基礎(chǔ)開發(fā)的,同時,它試圖將實(shí)時和非實(shí)時的情況統(tǒng)一化,這樣就喪失了一定的效率和增加了代碼量,所以有些操作系統(tǒng)在提供POSIX兼容的系統(tǒng)調(diào)用的同時,也提供了非POSIX兼容的系統(tǒng)調(diào)用。

4  結(jié)論
    以上從構(gòu)成一個操作系統(tǒng)的幾個最重要的組成部分討論了嵌入式操作系統(tǒng)與一般的操作系統(tǒng)的相同與不同之處。當(dāng)然,構(gòu)成一個完整的操作系統(tǒng),還需要其它組成部分,如時鐘、同步/互斥、進(jìn)程間通信等。從以上分析可以看出,要設(shè)計(jì)一個好的嵌入式操作系統(tǒng),必須充分考慮被嵌入的系統(tǒng),要根據(jù)實(shí)際的應(yīng)用來設(shè)計(jì)、選擇操作系統(tǒng)。雖然嵌入式操作系統(tǒng)是可裁剪的,但這種裁剪也是有限的。
    嵌入式系統(tǒng)正在蓬勃發(fā)展,存在著無限的商機(jī),在這一領(lǐng)域,機(jī)遇與挑戰(zhàn)并存。嵌入式操作系統(tǒng)的設(shè)計(jì)將在競爭中起決定性作用。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉