欧美激情综合一区二区三区,青柠影院免费观看电视剧高清8,无码人妻精品一区二区蜜桃老年人,亚洲最大成人网站,亚洲中文字幕无码一区在线

新聞中心

EEPW首頁 > 消費電子 > 學習方法與實踐 > 嵌入式操作系統設計中的若干問題

嵌入式操作系統設計中的若干問題

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

2  操作系統的幾種結構

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

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

4  結論
    以上從構成一個操作系統的幾個最重要的組成部分討論了嵌入式操作系統與一般的操作系統的相同與不同之處。當然,構成一個完整的操作系統,還需要其它組成部分,如時鐘、同步/互斥、進程間通信等。從以上分析可以看出,要設計一個好的嵌入式操作系統,必須充分考慮被嵌入的系統,要根據實際的應用來設計、選擇操作系統。雖然嵌入式操作系統是可裁剪的,但這種裁剪也是有限的。
    嵌入式系統正在蓬勃發展,存在著無限的商機,在這一領域,機遇與挑戰并存。嵌入式操作系統的設計將在競爭中起決定性作用。

評論


相關推薦

技術專區

關閉