基于RTAI的嵌入式Linux硬實(shí)時(shí)性能的研究與實(shí)現(xiàn)
0 引言
Linux是一種能運(yùn)行于多種平臺(tái)、源代碼公開、免費(fèi)、功能強(qiáng)大、遵守POSIX標(biāo)準(zhǔn)、與Unix兼容的操作系統(tǒng)。隨著嵌入式系統(tǒng)的不斷發(fā)展和應(yīng)用,嵌入式Linux操作系統(tǒng)也在各方面得到了廣泛的應(yīng)用。但是,作為通用操作系統(tǒng)的Linux,要應(yīng)用在嵌入式領(lǐng)域,需要作必要的改進(jìn)。在電能質(zhì)量監(jiān)控等對(duì)實(shí)時(shí)性要求較高的領(lǐng)域,需要將最初按照分時(shí)系統(tǒng)目標(biāo)設(shè)計(jì)的Linux改造成能支持硬實(shí)時(shí)性的操作系統(tǒng)。
uClinux操作系統(tǒng)是Linux操作系統(tǒng)的一個(gè)嵌入式變種,它作為一種優(yōu)秀的嵌入式操作系統(tǒng)具有很好的穩(wěn)定性和優(yōu)異的網(wǎng)絡(luò)性能,但是它的實(shí)時(shí)性差,尤其不支持硬實(shí)時(shí)任務(wù)的特點(diǎn)卻極大地限制了其應(yīng)用。本文利用RTAI對(duì)uClinux的實(shí)時(shí)性進(jìn)行了擴(kuò)展,并應(yīng)用于電能質(zhì)量監(jiān)控實(shí)驗(yàn)平臺(tái),對(duì)系統(tǒng)改造前后的實(shí)時(shí)性能進(jìn)行了對(duì)比分析。
1 嵌入式Linux的實(shí)時(shí)性分析和擴(kuò)展
實(shí)時(shí)系統(tǒng)分為兩類,分別為軟實(shí)時(shí)(Soft Real-Time)和硬實(shí)時(shí)(Hard Real-Time)。軟實(shí)時(shí)是統(tǒng)計(jì)意義上的實(shí)時(shí),并不能保證特定的任務(wù)在特定的時(shí)間內(nèi)完成,即便是處理時(shí)間超過(guò)了截止時(shí)間,結(jié)果也是有意義的。而硬實(shí)時(shí)是時(shí)間要求必須嚴(yán)格保證的實(shí)時(shí),如果系統(tǒng)對(duì)某個(gè)實(shí)時(shí)任務(wù)的處理未能在某個(gè)截止時(shí)間開始或者結(jié)束的話,會(huì)產(chǎn)生不可預(yù)料的后果。因此,硬實(shí)時(shí)才是真正意義上的實(shí)時(shí)。Linux雖然也可采取基于優(yōu)先級(jí)的調(diào)度策略,并且也將進(jìn)程分為實(shí)時(shí)進(jìn)程和非實(shí)時(shí)進(jìn)程,但是Linux的以下幾點(diǎn)特征決定了其本身很難完成硬實(shí)時(shí)的任務(wù):
1)Linux的內(nèi)核是不可搶占的。如果Linux的核心態(tài)進(jìn)程在運(yùn)行時(shí),其他進(jìn)程不管優(yōu)先級(jí)多高都需要等待處于核心態(tài)的系統(tǒng)調(diào)用返回后才能執(zhí)行。
2)為了保護(hù)臨界區(qū)資源,互斥的訪問(wèn)臨界區(qū),Linux采用在臨界區(qū)操作時(shí)屏蔽中斷的方式,這抑制了系統(tǒng)及時(shí)響應(yīng)外部操作的能力。
3)Linux內(nèi)核(2.6版本以前)采用了較大時(shí)間粒度的定時(shí)器,時(shí)鐘中斷周期為10ms,加大了任務(wù)響應(yīng)的延遲,無(wú)法滿足對(duì)時(shí)間精度要求苛刻的實(shí)時(shí)應(yīng)用。
目前實(shí)現(xiàn)Linux系統(tǒng)的硬實(shí)性的方法,依據(jù)是否對(duì)Linux的內(nèi)核進(jìn)行大規(guī)模修改,可以大致分為兩類:對(duì)內(nèi)核進(jìn)行大規(guī)模修改的兼容內(nèi)核方法和對(duì)內(nèi)核進(jìn)行小規(guī)模改動(dòng)的雙內(nèi)核方法。后者由于對(duì)內(nèi)核改動(dòng)小,效果明顯且遵守GPL得到了更加廣泛的推廣。它在Linux內(nèi)核之外,以可加載內(nèi)核模塊(Loadable Kernel Module)的形式添加實(shí)時(shí)內(nèi)核,并用該實(shí)時(shí)內(nèi)核接管來(lái)自硬件的所有中斷,并依據(jù)是否是實(shí)時(shí)任務(wù)決定是否直接響應(yīng)。這種方法的代表就是新墨西哥州立大學(xué)的FSM實(shí)驗(yàn)室推出的RT-Linux和由意大利米蘭理工學(xué)院航天工程系發(fā)起的RTAI。
2 RTAI的實(shí)現(xiàn)機(jī)制
RTAI是實(shí)時(shí)應(yīng)用接口Real Time Application Interface的縮寫。它在Linux上定義了一組實(shí)時(shí)硬件抽象層RTHAL(Real Time Hardware Abstraction Layer),RTHAL將所有需要的Linux內(nèi)部數(shù)據(jù)和函數(shù)的指針集合到一個(gè)rthal的結(jié)構(gòu)中。Rthal結(jié)構(gòu)用于截取Linux硬件操作,在雙內(nèi)核結(jié)構(gòu)工作時(shí),它們可以被RTAI重定向,以取代Linux中原有的函數(shù);同時(shí)RTAI只是用此程序界面與Linux進(jìn)行溝通。通過(guò)這種方法就可以把對(duì) Linux內(nèi)核源碼的改動(dòng)程度降到最低,可以避免RT-Linux方案對(duì)Linux內(nèi)核源碼改動(dòng)過(guò)大的問(wèn)題,便于在不同Linux版本之間的移植。
RTAI嚴(yán)格來(lái)說(shuō)只是一個(gè)具備了操作系統(tǒng)核心功能的實(shí)時(shí)的系統(tǒng)內(nèi)核,它接管了所有的硬件資源,將Linux操作系統(tǒng)內(nèi)核作為它的一個(gè)低優(yōu)先級(jí)的任務(wù)來(lái)運(yùn)行。RTAI 是一個(gè)完全的占先式內(nèi)核,它具備了實(shí)時(shí)操作系統(tǒng)的諸多特性,如實(shí)時(shí)的中斷響應(yīng),任務(wù)對(duì)事件的實(shí)時(shí)響應(yīng),細(xì)粒度的原子操作等。在RTAI/Linux雙內(nèi)核結(jié)構(gòu)下,實(shí)時(shí)性的任務(wù)在RTAI的調(diào)度下運(yùn)行,非實(shí)時(shí)性和需要利用完善的操作系統(tǒng)功能的任務(wù)在Linux調(diào)度下運(yùn)行。由于Linux操作系統(tǒng)在RTAI下具有的優(yōu)先級(jí)很低,當(dāng)且僅當(dāng)RTAI沒(méi)有實(shí)時(shí)任務(wù)調(diào)度時(shí),Linux才能夠得到運(yùn)行。RTAI/Linux雙內(nèi)核結(jié)構(gòu)如圖1所示。
圖1 RTAI/Linux雙內(nèi)核結(jié)構(gòu)圖
Fig1 Architecture of the RTAI/Linux system
RTAI以Linux的內(nèi)核模塊的形式運(yùn)行,提供雙內(nèi)核的實(shí)時(shí)服務(wù)。最基本的兩個(gè)模塊是rtai_module和 rtai_sched_module,另外還有三個(gè)增強(qiáng)功能的模塊rtai_fifos_module、rtai_shm_module和 rtai_lxrt_module。
rtai_module是一個(gè)核心模塊,RTHAL在這一模塊里實(shí)現(xiàn),完成對(duì)硬件的接管。以關(guān)硬件中斷行為為例說(shuō)明,Linux系統(tǒng)中原有的關(guān)中斷函數(shù)#define _cli_asm_volatile_(“cli”:::”memory”)直接通過(guò)匯編語(yǔ)言對(duì)硬件進(jìn)行操作,而在rtai_module模塊中,Linux中的關(guān)中斷函數(shù)被替換為執(zhí)行{processor[hard_cpu_id()].intr_flag = 0;}??梢?,Linux關(guān)中斷的執(zhí)行只是改變了RTAI中的中斷標(biāo)志位,并沒(méi)有直接對(duì)硬件進(jìn)行操作。
相關(guān)推薦
-
eduxu | 2015-06-23
-
-
primarykey | 2013-06-25
-
-
-
-
-
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論