[摘要] Linux已經成為當今最流行的操作系統之一,對嵌入式Linux進行實時性改進是嵌入式操作系統領域的一個研究熱點。本文分析了標準Linux實時性,為以后進一步提高Linux操作系統的實時性打下基礎。
[關鍵詞] Linux實時性
一、Linux簡介
1991年底,Linus Torvalds首次在Internet上發布了基于Intel386平臺的Linux源代碼。之后,在眾多Linux愛好者包括許多UNIX專家的努力下,Linux逐漸成長為一個穩定可靠、功能完善的操作系統。一些軟件公司,如Red Hat、InfoMagic等也不失時機地推出了自己的以Linux為核心的操作系統版本,這大大推動了Linux的商品化。在一些大的計算機公司的支持下,Linux還被移植到Alpha、PowerPC和Sparc等平臺上。Linux的使用日益廣泛,版本更新很快,目前的最新版本是2.6。
Linux具有UNIX的所有基本特征:Linux完全支持-POSIX1003.1標準,UNIX上的應用程序可以很容易地移植到Linux上來;Linux支持多用戶訪問和多任務編程;Linux采用段頁式存儲管理機制;Linux支持動態鏈接,節省了內存空間并提高了效率;Linux 支持EXT3等13種文件系統;Linux支持TCP/IP和PPP。
二、標準Linux內核制約實時性的因素
標準Linux有幾個機制嚴重地影響了實時性。
1.內核不可搶占
在Linux 2.4和以前的版本,內核是不可搶占的,也就是說,如果當前任務運行在內核態,即使當前有更緊急的任務需要運行,當前任務也不能被搶占。因此那個緊急任務必須等到當前任務執行完內核態的操作返回用戶態后或當前任務因需要等待某些條件滿足而主動讓出CPU才能被考慮執行,這很明顯嚴重影響搶占延遲。
在Linux 2.6中,內核已經可以搶占,因而實時性得到了加強。但是內核中仍有大量的不可搶占區域,如由自旋鎖 (spinlock)保護的臨界區,以及一些顯式使用preempt_disable失效搶占的臨界區。中斷服務程序不能被其他進程搶占。
2.中斷關閉
Linux在一些同步操作中使用了中斷關閉指令,中斷關閉將增大中斷延遲,降低系統的實時性。
3.共享資源的互斥訪問
Linux操作系統一般采用信號量機制來解決共享資源的互斥訪問問題。如果任務調度采用基于優先級的方式,則傳統的信號量機制在系統運行時很容易造成優先級倒置問題,即當一個高優先級任務通過信號量機制訪問共享資源時,該信號量已被一低優先級任務占有,而這個低優先級任務在訪問共享資源時可能又被其他一些中等優先級的任務搶先,因此造成高優先級任務被許多具有較低優先級的任務阻塞,實時性難以得到保證。
4.中斷總是最高優先級的
在Linux中,中斷(包括軟中斷)是最高優先級的,不論在任何時刻,只要產生中斷事件,內核將立即執行相應的中斷處理函數以及軟中斷,等到所有掛起的中斷和軟中斷處理完畢有才執行正常的任務。因此在標準的Linux系統上,實時任務根本不可能得到實時性保證。例如,假設在一個標準Linux系統上運行了一個實時任務(即使用了SCHED_FIFO調度策略并且設定了最高的實時優先級),但是該系統有非常繁重的網絡負載和I/O負載,那么系統可能一直處在中斷處理狀態而沒有機會運行任何任務,這樣實時任務將永遠無法運行,搶占延遲將是無窮大。因此,如果這種機制不改,實時Linux將永遠無法實現。
5.調度算法和調度點
在Linux 2.4和以前的版本,調度器的時間復雜度是O(n)的,而且在SMP的情況下性能低,因為所有的CPU共享一個任務鏈表,任何時刻只能有一個調度器運行。因此,搶占延遲很大程度上以來于當前系統的任務數,具有非常大的不確定性和不可預測性。
在2.6內核中引入的O(1)調度器很好地解決了這些問題。此外,即使內核是可搶占的,也不是在任何地方可以發生調度,例如在中斷上下文,一個中斷處理函數可能喚醒了某一高優先級進程,但是該進程并不能立即運行,因為在中斷上下文不能發生調度,中斷處理完了之后內核還要執行掛起的軟中斷,等它們處理完之后才有機會調度剛才喚醒的進程。在標準Linux內核中,調度點(有意安排的執行任務調度的點)并不多,對2.4和2.6內核測試的結果表明,缺乏調度點是影響Linux實時性的一個因素。
三、結論
由于Linux本身基于通用目的操作系統的設計,其實時性能并不是很強。但通過一定的改進爭強其實時性能,就可以用于實時的應用場合。本文分析了標準Linux實時性,為以后進一步提高Linux操作系統的實時性打下基礎。
參考文獻:
[1]Labrosse J:UC/OS-II-源代碼公開的實時嵌入式操作系統[M].北京:中國電力出版社,2001
[2]陳莉君康華等:Linux操作系統原理和應用[M].北京:清華大學出版社,2004
[3]王田苗:嵌入式系統設計與實例開發. 清華大學出版社, 2003
[4]毛德操胡希明:Linux內核源代碼情景分析[M].浙江:浙江大學出版社,2002
[5] http://www.linuxforum.net/docnew/index.php[OB/OL], 2006
[6]鄭靈翔:嵌入式系統設計與應用開發[M].北京:北京航空航天大學出版社,2006