基于RTAI的嵌入式Linux硬實(shí)時(shí)性能的研究
關(guān)鍵詞:嵌入式Linux,硬實(shí)時(shí),RTAI
0 引言
Linux是一種能運行于多種平臺、源代碼公開(kāi)、免費、功能強大、遵守POSIX標準、與Unix兼容的操作系統。隨著(zhù)嵌入式系統的不斷發(fā)展和應用,嵌入式Linux操作系統也在各方面得到了廣泛的應用。但是,作為通用操作系統的Linux,要應用在嵌入式領(lǐng)域,需要作必要的改進(jìn)。在電能質(zhì)量監控等對實(shí)時(shí)性要求較高的領(lǐng)域,需要將最初按照分時(shí)系統目標設計的Linux改造成能支持硬實(shí)時(shí)性的操作系統。
uClinux操作系統是Linux操作系統的一個(gè)嵌入式變種,它作為一種優(yōu)秀的嵌入式操作系統具有很好的穩定性和優(yōu)異的網(wǎng)絡(luò )性能,但是它的實(shí)時(shí)性差,尤其不支持硬實(shí)時(shí)任務(wù)的特點(diǎn)卻極大地限制了其應用。本文利用RTAI對uClinux的實(shí)時(shí)性進(jìn)行了擴展,并應用于電能質(zhì)量監控實(shí)驗平臺,對系統改造前后的實(shí)時(shí)性能進(jìn)行了對比分析。
1 嵌入式Linux的實(shí)時(shí)性分析和擴展
實(shí)時(shí)系統分為兩類(lèi),分別為軟實(shí)時(shí)(Soft Real-Time)和硬實(shí)時(shí)(Hard Real-Time)。軟實(shí)時(shí)是統計意義上的實(shí)時(shí),并不能保證特定的任務(wù)在特定的時(shí)間內完成,即便是處理時(shí)間超過(guò)了截止時(shí)間,結果也是有意義的。而硬實(shí)時(shí)是時(shí)間要求必須嚴格保證的實(shí)時(shí),如果系統對某個(gè)實(shí)時(shí)任務(wù)的處理未能在某個(gè)截止時(shí)間開(kāi)始或者結束的話(huà),會(huì )產(chǎn)生不可預料的后果。因此,硬實(shí)時(shí)才是真正意義上的實(shí)時(shí)。Linux雖然也可采取基于優(yōu)先級的調度策略,并且也將進(jìn)程分為實(shí)時(shí)進(jìn)程和非實(shí)時(shí)進(jìn)程,但是Linux的以下幾點(diǎn)特征決定了其本身很難完成硬實(shí)時(shí)的任務(wù):
1) Linux的內核是不可搶占的。如果Linux的核心態(tài)進(jìn)程在運行時(shí),其他進(jìn)程不管優(yōu)先級多高都需要等待處于核心態(tài)的系統調用返回后才能執行。
2) 為了保護臨界區資源,互斥的訪(fǎng)問(wèn)臨界區,Linux采用在臨界區操作時(shí)屏蔽中斷的方式,這抑制了系統及時(shí)響應外部操作的能力。
3) Linux內核(2.6版本以前)采用了較大時(shí)間粒度的定時(shí)器,時(shí)鐘中斷周期為10ms,加大了任務(wù)響應的延遲,無(wú)法滿(mǎn)足對時(shí)間精度要求苛刻的實(shí)時(shí)應用。
目前實(shí)現Linux系統的硬實(shí)性的方法,依據是否對Linux的內核進(jìn)行大規模修改,可以大致分為兩類(lèi):對內核進(jìn)行大規模修改的兼容內核方法和對內核進(jìn)行小規模改動(dòng)的雙內核方法。后者由于對內核改動(dòng)小,效果明顯且遵守GPL得到了更加廣泛的推廣。它在Linux內核之外,以可加載內核模塊(Loadable Kernel Module)的形式添加實(shí)時(shí)內核,并用該實(shí)時(shí)內核接管來(lái)自硬件的所有中斷,并依據是否是實(shí)時(shí)任務(wù)決定是否直接響應。這種方法的代表就是新墨西哥州立大學(xué)的FSM實(shí)驗室推出的RT-Linux和由意大利米蘭理工學(xué)院航天工程系發(fā)起的RTAI。
2 RTAI的實(shí)現機制
RTAI是實(shí)時(shí)應用接口Real Time Application Interface的縮寫(xiě)。它在Linux上定義了一組實(shí)時(shí)硬件抽象層RTHAL(Real Time Hardware Abstraction Layer),RTHAL將所有需要的Linux內部數據和函數的指針集合到一個(gè)rthal的結構中。Rthal結構用于截取Linux硬件操作,在雙內核結構工作時(shí),它們可以被RTAI重定向,以取代Linux中原有的函數;同時(shí)RTAI只是用此程序界面與Linux進(jìn)行溝通。通過(guò)這種方法就可以把對Linux內核源碼的改動(dòng)程度降到最低,可以避免RT-Linux方案對Linux內核源碼改動(dòng)過(guò)大的問(wèn)題,便于在不同Linux版本之間的移植。
RTAI嚴格來(lái)說(shuō)只是一個(gè)具備了操作系統核心功能的實(shí)時(shí)的系統內核,它接管了所有的硬件資源,將Linux操作系統內核作為它的一個(gè)低優(yōu)先級的任務(wù)來(lái)運行。RTAI 是一個(gè)完全的占先式內核,它具備了實(shí)時(shí)操作系統的諸多特性,如實(shí)時(shí)的中斷響應,任務(wù)對事件的實(shí)時(shí)響應,細粒度的原子操作等。在RTAI/Linux雙內核結構下,實(shí)時(shí)性的任務(wù)在RTAI的調度下運行,非實(shí)時(shí)性和需要利用完善的操作系統功能的任務(wù)在Linux調度下運行。由于Linux操作系統在RTAI下具有的優(yōu)先級很低,當且僅當RTAI沒(méi)有實(shí)時(shí)任務(wù)調度時(shí),Linux才能夠得到運行。RTAI/Linux雙內核結構如圖1所示。
圖1 RTAI/Linux雙內核結構圖
Fig1 Architecture of the RTAI/Linux system
RTAI以L(fǎng)inux的內核模塊的形式運行,提供雙內核的實(shí)時(shí)服務(wù)。最基本的兩個(gè)模塊是rtai_module和rtai_sched_module,另外還有三個(gè)增強功能的模塊rtai_fifos_module、rtai_shm_module和rtai_lxrt_module。
rtai_module是一個(gè)核心模塊,RTHAL在這一模塊里實(shí)現,完成對硬件的接管。以關(guān)硬件中斷行為為例說(shuō)明,Linux系統中原有的關(guān)中斷函數#define _cli_asm_volatile_(“cli”:::”memory”)直接通過(guò)匯編語(yǔ)言對硬件進(jìn)行操作,而在rtai_module模塊中,Linux中的關(guān)中斷函數被替換為執行{processor[hard_cpu_id()].intr_flag = 0;}??梢?jiàn),Linux關(guān)中斷的執行只是改變了RTAI中的中斷標志位,并沒(méi)有直接對硬件進(jìn)行操作。
rtai_sched_module模塊主要實(shí)現一個(gè)實(shí)時(shí)的任務(wù)調度,調度器基于優(yōu)先級且為可搶占式的;rtai_fifos_module是管道先入先出模塊,負責實(shí)時(shí)應用與Linux應用之間的通訊;rtai_shm_module模塊實(shí)現共享內存的通訊方式;rtai_lxrt_module允許在用戶(hù)空間使用RTAI的系統服務(wù)和調度期。
3 嵌入式Linux的實(shí)時(shí)性實(shí)驗測試與分析
3.1 電能質(zhì)量監控實(shí)驗平臺
電能質(zhì)量問(wèn)題在電能的生產(chǎn)以及消費單位越來(lái)越得到關(guān)注,這就要求有更加先進(jìn)的電能質(zhì)量監測、控制裝置與其配套。在線(xiàn)式電能質(zhì)量監測設備更多的投入了使用,這些設備大多采用嵌入式的系統結構,在惡劣的條件下完成現場(chǎng)數據采集、運算、控制以及通訊等一系列的任務(wù)。這些任務(wù)必須滿(mǎn)足嚴格的時(shí)序關(guān)系,并且需要有很高的響應速度,因此對于系統實(shí)時(shí)性提出了很高的要求。一個(gè)典型的基于嵌入式Linux的在線(xiàn)式電能質(zhì)量監控器硬件結構框圖如圖2所示:
圖2 在線(xiàn)式電能質(zhì)量監控系統結構圖
Fig2 Architecture of an online power quality monitoring and control system
實(shí)驗平臺選用Freescale的MCF5249嵌入式微處理器完成了一套如圖2所示的在線(xiàn)式電能質(zhì)量監控系統,微處理器內部工作頻率為120Mhz,性能達125 Dhrystone 2.1 MIPS,外配4M FLASH和8M SDRAM存儲器。軟件方面,成功移植RTAI-uClinux雙內核系統至此硬件平臺,并且針對實(shí)際應用對系統的實(shí)時(shí)性進(jìn)行了測試和分析。
3.2 時(shí)間分辨率測試
電能質(zhì)量監控系統需要周期性的對A/D轉換芯片進(jìn)行采樣,并且某些實(shí)時(shí)性較強的控制算法要求核心任務(wù)被重新調度的周期很短,因此系統對周期性實(shí)時(shí)任務(wù)的支持非常重要。
進(jìn)行實(shí)驗如下:分別在uClinux和RTAI-uClinux下利用定時(shí)函數設計周期性的高優(yōu)先級任務(wù),每一周期切換一次I/O口的電平,找出各自可分辨的穩定的最小任務(wù)周期。
在處理器中等負荷條件下,實(shí)驗結果如表1所示:
操作系統 | 方波最小周期 | 任務(wù)的最小周期約 |
uClinux | 40.002 ms | 20 ms |
RTAI/uClinux雙內核 | 110.19 us | 55 us |
表1 時(shí)間分辨率實(shí)驗結果分析表
Table1 Analysis of the time resolution experiment
例如,在RTAI-uClinux系統中在不同的定時(shí)周期下的實(shí)驗波形圖如圖3圖4所示。當定時(shí)周期較大時(shí)系統穩定運行,而過(guò)小的定時(shí)周期(50us)會(huì )使系統運行變得不穩定。
圖3 定時(shí)周期大于100微妙時(shí)的試驗波形圖
Fig3 Oscillogram of the system output when cycle > 100us
圖4 定時(shí)周期小于50微妙時(shí)的試驗波形圖
Fig4 Oscillogram of the system output when cycle 50us
從實(shí)驗結果可以看出,uClinux操作系統難以完成周期小于20ms以下的周期性任務(wù),因此對于周期性的A/D采樣以及高實(shí)時(shí)控制很難實(shí)現,經(jīng)過(guò)改造后的RTAI/uClinux雙內核結構時(shí)間分辨率低于100us,完全可以滿(mǎn)足電能質(zhì)量控制器在A(yíng)/D采樣等方面的實(shí)時(shí)性周期任務(wù)。
3.3 中斷響應速度測試
中斷的響應速度是實(shí)時(shí)控制系統的重要指標,例如在A(yíng)/D采樣和計算完成后,系統需要控制進(jìn)程盡快地被調度執行,以執行正確的控制策略。對于一個(gè)支持硬實(shí)時(shí)任務(wù)的系統來(lái)說(shuō),除了測試系統的平均響應速度外,還需要測試系統在最差情況下的響應速度以及處理器的負荷狀況對系統響應速度的影響。
設計實(shí)驗如下:利用一個(gè)外部的DSP幫助測量系統的中斷響應速度。DSP2407在啟動(dòng)內部定時(shí)器后,將MCF5249的一個(gè)I/O引腳狀態(tài)改變,MCF5249內部的高優(yōu)先級進(jìn)程在引腳狀態(tài)改變并且被重新調度后,立即將DSP2407的指定I/O引腳置高,DSP2407在其指定的I/O引腳被置高后停止定時(shí)器。利用DSP2407的定時(shí)器可以精確的計算出從MCF5249引腳狀態(tài)改變至MCF5249內部進(jìn)程響應之間的時(shí)間間隔,從而確定MCF5249內部進(jìn)程的響應速度。改變MCF5249處理器的負荷,重復實(shí)驗,在每種情況下重復實(shí)驗過(guò)程1000次,找出不同情況下系統響應的平均速度以及最慢響應速度。
操作系統 | 處理器負荷輕 | 處理器負荷較重 | ||
平均響應時(shí)間 | 最慢響應時(shí)間 | 平均響應時(shí)間 | 最慢響應時(shí)間 | |
uClinux | 120us | 12ms | 221ms | 795ms |
RTAI/uClinux | 25us | 27us | 27us | 30us |
表2 響應速度實(shí)驗結果分析表
Table2 Analysis of response speed experiment
從實(shí)驗結果可以看出,在處理器負荷較輕時(shí)uClinux系統有著(zhù)良好的響應性能,但是在最差情況下,系統響應速度較慢,響應時(shí)間達到了12ms,隨著(zhù)處理器負荷的進(jìn)一步加重,uClinux系統的響應速度急劇下降,對于控制系統,尤其是硬實(shí)時(shí)系統來(lái)說(shuō),這是不可接受的,因為中斷響應速度直接影響到控制系統的反應速度。而RTAI-uClinux雙內核系統在處理器負荷變化時(shí),系統的響應速度變化不明顯,而且中斷響應速度始終穩定在微妙級,適合作為硬實(shí)時(shí)系統的控制系統。
4 結論
RTAI可以顯著(zhù)改進(jìn)嵌入式Linux系統的實(shí)時(shí)性能,已經(jīng)用于電能監控系統,通過(guò)對比試驗可以看出RTAI-uClinux雙內核的系統具有良好的硬實(shí)時(shí)性能,使得嵌入式Linux系統在高實(shí)時(shí)性領(lǐng)域中可以得到實(shí)際的應用。
參考文獻:
[1]Lineo, Inc. RTAI Programming Guide 1.0. September 2000
[2] E. Bianchi,L.Dozio,P.Mantegazza.A Hard Real Time support for LINUX. www.aero.polimi.it/projects/rtai/
[3]MCF5282 ColdFire® Microcontroller User’s Manual. http://www.motorola.com/coldfire
[4] 齊俊生,崔杜武,黑新宏.嵌入式Linux硬實(shí)時(shí)性的研究與實(shí)現.計算機應用.2003, 23(6):34-36;Qi Junsheng,Cui Duwu,Hei Xinhong. Research and Implementation of Hard Real2time Performance of Embeded Linux. Computer Applications. 2003,23(6):34-36;
[5] 陳繼榮,黃建華. Linux操作系統實(shí)時(shí)性分析及改進(jìn)策略.微計算機信息.2005,22:67-69;Chen Jirong, Huang Jianhua. Linux Operating System Real- time Analysis and Improvement Strategy. Control Automation. 2005, 22:67-69;
[6]須文波,張星燁,歐愛(ài)輝.基于RTAI-Linux的實(shí)時(shí)操作系統的分析與研究.現代計算機.2005,163(5):19-21Xu Wenbo, Zhang Xingye, Ou Aihui. Analysis and Research on Real-Time Operating System based on RTAI-Linux. Modern Computer. 2005, 163(5):19-21
評論