基于Linux的實時操作系統(tǒng)的分析與研究_第1頁
基于Linux的實時操作系統(tǒng)的分析與研究_第2頁
基于Linux的實時操作系統(tǒng)的分析與研究_第3頁
基于Linux的實時操作系統(tǒng)的分析與研究_第4頁
基于Linux的實時操作系統(tǒng)的分析與研究_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于Linux的實時操作系統(tǒng)的分析與研究摘要:本文討論了實時操作系統(tǒng)的現(xiàn)狀及標(biāo)準(zhǔn)Linux作為實時應(yīng)用的一些不足,并從實現(xiàn)機(jī)制上分析了造成這些不足的原因.在此基礎(chǔ)上,深入分析了現(xiàn)有的實時Linux操作系統(tǒng)的特性和設(shè)計實現(xiàn)原理,并對進(jìn)一步的工作提出了展望.關(guān)鍵詞:實時操作系統(tǒng)丄inux;任務(wù)調(diào)度;中斷模擬;時間精度;進(jìn)程通信1、引言隨著基于Intel微處理器芯片的兼容PC機(jī)性價比的不斷提高,在實時應(yīng)用領(lǐng)域,兼容PC機(jī)及基于兼容PC機(jī)的工控機(jī)(如PC104)得到了越來越廣泛的應(yīng)用.而實時系統(tǒng)的應(yīng)用需求也發(fā)生了很大變化,現(xiàn)代的實時應(yīng)用往往要求大容量的數(shù)據(jù)處理能力,復(fù)雜的圖形用戶接口、網(wǎng)絡(luò)支持等.這就

2、對實時操作系統(tǒng)提出了更高的要求現(xiàn)在流行的實時操作系統(tǒng)(RTOS)可分為兩類:第一類以現(xiàn)有的操作系統(tǒng)為基礎(chǔ),擴(kuò)充了實時特性基于DOS的有Ctask,pdos等,由于DOS的單任務(wù)和不可重入特性,這些系統(tǒng)只能滿足簡單的實時應(yīng)用.基于UNIX有DigitalUNIX等,通過下文中對標(biāo)準(zhǔn)Linux的分析(同樣適用于UNIX系統(tǒng))可以看出,由于類UNIX分時操作系統(tǒng)的設(shè)計目標(biāo)是取得最優(yōu)的平均性能(averageperformance),因此這些系統(tǒng)只能適應(yīng)有限的實時需求.第二類是專用的實時操作系統(tǒng),如VxWorks等,可滿足廣泛的實時系統(tǒng)的需求.但存在價格昂貴,應(yīng)用開發(fā)環(huán)境缺乏等缺點.Linux操作系統(tǒng)

3、是基于PC機(jī)的免費的類UNIX開放式操作系統(tǒng),并采用了源代碼開放的發(fā)布策略.由于全世界各地的Linux用戶和開發(fā)者的不斷努力,Linux已成長為高穩(wěn)定性的,性能優(yōu)異的操作系統(tǒng),基于Linux開發(fā)一個開放的、標(biāo)準(zhǔn)的、高效廉價的實時操作系統(tǒng)是完全可行的.本文首先分析了標(biāo)準(zhǔn)Linux作為實時操作系統(tǒng)所面臨的問題,然后深入剖析了現(xiàn)有的實時Linux系統(tǒng)的特性和實現(xiàn)機(jī)理,最后對以后的工作提出了展望.2、標(biāo)準(zhǔn)Linux作為實時應(yīng)用所存在的問題實時系統(tǒng)的特性主要有三點:高可靠性、及時性和時限的保證性(deadlineguarantee).時限的保證性要求實時系統(tǒng)對外部事件的響應(yīng)時間或?qū)崟r任務(wù)的運行周期滿足時

4、限要求.如任務(wù)必須在時限內(nèi)完成,否則會產(chǎn)生不可預(yù)料的后果,這種實時系統(tǒng)稱為硬實時系統(tǒng)(hardreal-timesystem).若偶爾超過時限不會對實時應(yīng)用造成損害,則稱為軟實時系統(tǒng)(softreal-timesystem),如視頻會議系統(tǒng),偶爾的圖象幀損失是可以接受的.與時限的保證性直接相關(guān)的是系統(tǒng)的最壞情況參數(shù),同UNIX樣,Linux操作系統(tǒng)的設(shè)計目標(biāo)是取得最優(yōu)平均性能,因此有很多方面無法滿足實時系統(tǒng)的要求.進(jìn)程調(diào)度問題Linux的核心是不可搶先的,采用基于固定時間片的可變優(yōu)先級調(diào)度,當(dāng)一個低優(yōu)先級的進(jìn)程由于調(diào)用系統(tǒng)API而進(jìn)入核心狀態(tài)后,除非當(dāng)前進(jìn)程需要等待資源釋放而掛起,否則后來的高

5、優(yōu)先級的進(jìn)程只能等待當(dāng)前進(jìn)程完成系統(tǒng)調(diào)用,而系統(tǒng)調(diào)用的完成時間有很大的不可預(yù)測性,這對一些要求高優(yōu)先級進(jìn)程立即搶占CPU的實時應(yīng)用是不能滿足要求的.進(jìn)程同步與互斥問題Linux采用了信號燈的方法來保證進(jìn)程的互斥與同步,由于頻繁的信號加鎖及解鎖操作會影響系統(tǒng)的整體性能,因此Linux采用了粗粒度的策略,信號的加鎖及解鎖會有較長間隔.因此系統(tǒng)的最壞情況下的性能較差,往往無法滿足許多硬實時應(yīng)用的要求.內(nèi)存上鎖問題Linux采用了虛擬內(nèi)存管理技術(shù),進(jìn)程運行所需的內(nèi)存常常會被換入換出磁盤,會非常耗時.實時應(yīng)用有時需要把關(guān)鍵進(jìn)程鎖在內(nèi)存中,不被換出,而標(biāo)準(zhǔn)的Linux無法滿足這種要求.時間精度及定時器問題

6、操作系統(tǒng)必須對時間精度和時鐘中斷處理的時間開銷進(jìn)行折衷考慮.時間精度越高,意味著時鐘中斷越頻繁,而花在中斷處理上的時間越多.Linux通過對硬件時鐘的編程產(chǎn)生周期為100Hz的時鐘中斷,因此任務(wù)調(diào)度的時間精度最高能達(dá)到10ms,這無法滿足一些對時間精度要求苛刻的實時應(yīng)用.關(guān)中斷問題在系統(tǒng)調(diào)用中,為了保護(hù)臨界區(qū)資源,Linux會長時間關(guān)掉中斷,這樣會加大中斷延遲時間,阻塞高優(yōu)先級的中斷立即被處理.在實時應(yīng)用中,這是一個十分嚴(yán)重的問題針對以上存在的問題,Linux開發(fā)者遵循POSIX.1b標(biāo)準(zhǔn)對Linux進(jìn)行了實時擴(kuò)充,已實現(xiàn)的特性有可控制的調(diào)度算法,內(nèi)存上鎖,實時信號機(jī)制等,但由于Linux的非

7、搶先內(nèi)核,這些實時擴(kuò)充只能保證完成某些軟實時應(yīng)用.3、RTLinux基本思想RTLinux是由新墨西哥理工學(xué)院開發(fā)的基于標(biāo)準(zhǔn)Linux的具有硬實時特性的實時操作系統(tǒng).截至目前為止,RTLinux已成功的應(yīng)用于從航天飛機(jī)的空間數(shù)據(jù)采集,科學(xué)儀器測控到電影特技圖像處理等廣泛的實時環(huán)境下.RTLinux開發(fā)者并沒有針對實時操作系統(tǒng)的特性重寫Linux的內(nèi)核,這樣做工作量會非常大,而且要保證兼容性也非常困難.為此,RTLinux提供了一個精巧的可搶先的實時內(nèi)核,并把標(biāo)準(zhǔn)的Linux核心作為實時核心的一個進(jìn)程同用戶的實時進(jìn)程一起調(diào)度,而標(biāo)準(zhǔn)Linux核心的優(yōu)先級最低,可以被實時進(jìn)程搶斷.正常的Linux

8、進(jìn)程仍可以在Linux核心上運行,而系統(tǒng)的實時特性由實時內(nèi)核保證.這樣做的好處是對Linux的改動量最小,充分利用了Linux下現(xiàn)有的豐富的軟件資源.用戶可以根據(jù)具體的實時應(yīng)用編寫實時任務(wù),實時任務(wù)和標(biāo)準(zhǔn)的Linux進(jìn)程之間通過系統(tǒng)提供的實時先入先出隊列(RT-FI-FO)進(jìn)行通信.系統(tǒng)的結(jié)構(gòu)圖如圖4所示:圖1RTLinux系統(tǒng)結(jié)構(gòu)圖4、RTLinux設(shè)計及實現(xiàn)原理4.1中斷模擬為了解決Linux長時間關(guān)中斷的問題,RTLinux在硬件中斷控制器和Linux核心之間用一層軟中斷模擬器進(jìn)行隔離,Linux核心代碼中的中斷處理指令有關(guān)中斷cli、開中斷sti,和中斷返回iret,被分別替換為匯編宏

9、代碼S_CLI,S_STI,S_IRET.S_CLI,S_STI及S_IRET的代碼如下:(用Linux下的GNU匯編器實現(xiàn))S_CLI:movl0,SFIFS_STI:stipushflpushlKERNEL_CSpushl1fS_IRETS_IRET:push%dspushl%eaxpushl%edxmovlKERNEL_DS,%edxmov%dx,%dsclimovlSFREQ,%edxandlSFMASK,%edxbsfl%edx,%eaxjz1fS_CLIstijmpSFIDT(,%eax,4)1:movl1,SFIFpopl%edxpopl%eaxpop%dsiret所有的硬件中斷

10、都被中斷模擬器接收,當(dāng)關(guān)中斷時,模擬器只是清一軟標(biāo)志SFIF.當(dāng)中斷發(fā)生時,模擬器檢查此標(biāo)志,如已被設(shè)置則調(diào)用相應(yīng)的中斷處理函數(shù).否則,置位一標(biāo)識位.S_STI首先開中斷,然后設(shè)置堆棧,模擬了中斷處理過程,最后調(diào)用軟中斷返回S_IRET在S_IRET中首先初始化中斷寄存器,使之指向核心,以訪問全局變量.然后用位與的方法檢查是否有中斷等待處理,如有則跳轉(zhuǎn)到相應(yīng)的中斷處理函數(shù)去執(zhí)行,在中斷處理函數(shù)的結(jié)尾處的S_IRET會跳到下一等待中斷的處理函數(shù),直到所有的等待中斷被處理完.若沒有中斷等待處理,則設(shè)軟中斷標(biāo)識SFIF,并用iret返回用RTLinux提供的APIrequest_RTirq()和fr

11、ee_RTirq()為指定的irq安裝/卸載實時中斷處理函數(shù),當(dāng)實時中斷發(fā)生時,不論軟中斷標(biāo)識為何值,中斷處理函數(shù)被立即調(diào)用,因此可以保證實時中斷不被阻塞并有最小的中斷延遲時間.4.2實時任務(wù)的實現(xiàn)用戶可以創(chuàng)建自己的實時任務(wù)并被實時核心所調(diào)度,在RTLinux的最初實現(xiàn)中,利用Intel80X86處理器的分頁存儲機(jī)制,每個實時任務(wù)運行在獨立的用戶地址空間,這樣有利于存儲保護(hù),每次上下文切換(contextswitch)時,更新頁目錄寄存器.由于486CPU采用虛擬緩沖技術(shù),每次頁目錄寄存器更新都會使頁表查找緩沖(TLB)無效,頻繁的實時任務(wù)切換會嚴(yán)重影響系統(tǒng)性能另外,每當(dāng)進(jìn)入系統(tǒng)調(diào)用時,由用戶

12、態(tài)進(jìn)入核心態(tài)運行,存儲保護(hù)級別的切換也是較大的系統(tǒng)開銷.為了改善性能,在RTLinux的當(dāng)前版本中實時任務(wù)以線程形式實現(xiàn),運行在單一的核心地址空間,減小了上下文切換開銷,并避免了存儲保護(hù)級別的切換.實時任務(wù)的定義如下:structrtl_thread_structint*stack;/*線程堆棧指針*/intuses_fp;/*浮點支持標(biāo)志*/enumrtl_task_statesstate;/*任務(wù)狀態(tài)標(biāo)志,共有ready、delayed、dormant、sus-pended、active、zombie六種*/int*stack_bottom;/*線程棧底指針*/structrtl_sche

13、d_paramsched_param;/*調(diào)度參數(shù),目前支持的只有實時任務(wù)的優(yōu)先級*/structrtl_thread_struct*next;/*實時任務(wù)隊列指針*/RTL_FPU_CONTEXTfpu_regs;/*上下文切換時需保存的浮點寄存器*/intcpu;/*對稱多處理(SMP)結(jié)構(gòu)的CPU標(biāo)志*/structitimerspecspec;/*實時任務(wù)的定時器*/void*retval;/*線程返回值*/intpending_signals;/*實時任務(wù)的信號變量,每一位代表一預(yù)定義信號,可實現(xiàn)任務(wù)的喚醒和停止等*/structtq_structfree_task;/*空閑任務(wù)隊列

14、*/void*user;/*實時任務(wù)通信所用的變量*/intpad;Linux為了方便用戶編寫核心代碼而提供了一種可裝載核心模塊機(jī)制,可裝載核心模塊可以動態(tài)加載到核心地址空間并與核心代碼相鏈接,每個模塊定義了兩個函數(shù):init_module()和cleanup_module().當(dāng)模塊加載到核心時,初始化函數(shù)init_module()被自動調(diào)用,當(dāng)卸載模塊時cleanup_module()被調(diào)用.RTLinux用可裝載核心模塊來實現(xiàn)實時任務(wù)的動態(tài)創(chuàng)建和卸載.實時任務(wù)的上下文切換包括整數(shù)寄存器壓棧和改變棧寄存器值,與CPU的硬上下文切換相比大大節(jié)省了開銷.4.3任務(wù)調(diào)度的實現(xiàn)實時調(diào)度器的主要任務(wù)

15、是保證每個實時任務(wù)的時限要求,大多數(shù)實時系統(tǒng)的調(diào)度器非常復(fù)雜,可擴(kuò)展性差,用戶只能通過有限的參數(shù)對調(diào)度特性進(jìn)行控制.RTLinux的調(diào)度器用可裝載核心模塊實現(xiàn),用戶可以根據(jù)需要重寫調(diào)度算法.RTLinux標(biāo)準(zhǔn)的調(diào)度器采用固定優(yōu)先級的可搶先調(diào)度,每個實時任務(wù)有一固定優(yōu)先級,每次時鐘中斷時,調(diào)度器選取就緒隊列中的最高優(yōu)先級的任務(wù)投入運行.如已就緒任務(wù)的優(yōu)先級比當(dāng)前任務(wù)的優(yōu)先級高,則當(dāng)前任務(wù)被搶斷.實時任務(wù)投入運行時,用戶可指定一運行周期,實時任務(wù)每隔此周期時間被調(diào)度一次,此周期也被稱為任務(wù)的時限(deadline).RTLinux中使用單一比率調(diào)度算法(ratemono-tonicscheduli

16、ngalgorithm)來判斷任務(wù)集的可調(diào)度性.在單一比率調(diào)度算法中,時限越小的任務(wù)優(yōu)先級越高,N個獨立任務(wù)如滿足以下條件,每個任務(wù)的時限將得到保證:C1/T1+C2/T2+Cn/Tn=n(21/n-1)(Ci是任務(wù)i的最壞情況下的執(zhí)行時間,Ti是任務(wù)i的執(zhí)行周期)當(dāng)有新的任務(wù)投入運行時,RTLinux根據(jù)上面公式對新的實時任務(wù)集進(jìn)行可調(diào)度性分析,稱為接收控制(admissioncontrol),若新的任務(wù)集可以滿足上面公式,新的任務(wù)被加入到當(dāng)前任務(wù)集中進(jìn)行調(diào)度.標(biāo)準(zhǔn)Linux可看作是RTLinux中的最低優(yōu)先級的實時任務(wù),從Linux切換到實時任務(wù)時,軟中斷狀態(tài)被保存,并禁止軟中斷.當(dāng)切換回

17、來時,軟中斷被恢復(fù).在RTLinux下實現(xiàn)的其他調(diào)度算法還有最早時限優(yōu)先算法(EarliestDeadlineFirst),任務(wù)沒有靜態(tài)優(yōu)先級,具有最早時限的任務(wù)被最先執(zhí)行.4.4實時時間精度的實現(xiàn)時間的精度對實時調(diào)度的準(zhǔn)確性有很大影響,時間偏差常常引起任務(wù)釋放抖動(taskreleasejitter),在大多數(shù)情況下,會對實時任務(wù)的運行產(chǎn)生影響.在普通操作系統(tǒng)的實現(xiàn)中,一般采用周期調(diào)度,設(shè)計者必須對時鐘中斷的頻率和時鐘中斷的開銷做綜合考慮,為了取得系統(tǒng)整體的最優(yōu)平均性能,調(diào)度時鐘頻率一般較低,這就導(dǎo)致了較低的時間精度.在標(biāo)準(zhǔn)Linux實現(xiàn)中,硬件定時器的周期被編程為100Hz,因此任務(wù)調(diào)度的

18、最小周期為10ms.在RTLinux中,調(diào)度器采用了一次性定時器(one-shottimer),每次時鐘中斷時根據(jù)當(dāng)前的系統(tǒng)時間和每個實時任務(wù)的運行周期決定下次時鐘中斷的間隔,這種策略對運行周期有公約數(shù)的一組實時任務(wù)具有較高效率,否則每次時鐘中斷時需對定時器的周期重新編程.舉例來說,如有兩個任務(wù)的運行周期為391和1024時間單位,在一次性的模式下,定時器首先被編程為每391單位中斷一次,第一次中斷發(fā)生時,調(diào)度器會把定時器中斷間隔重設(shè)為633(1024減去391)時間單位.因此采用一次性定時器可以達(dá)到很高的時間精度(實時任務(wù)的最小運行周期可以達(dá)到35us).但在低檔的PC微機(jī)(如486)上,對

19、硬件時鐘芯片Intel8354編程的系統(tǒng)開銷較大,在Pentium以上微機(jī)中,除了Intel8354時鐘芯片,CPU中還帶有片內(nèi)時鐘,編程速度快.4.5進(jìn)程通信機(jī)制由于Linux進(jìn)程可被實時任務(wù)搶斷,因此實時任務(wù)中不能調(diào)用普通的系統(tǒng)調(diào)用,為了在實時任務(wù)和普通進(jìn)程間通信RTLinux提供了實時的先入先出隊列(RT-fifo)機(jī)制,RT-fifo在核心地址空間分配數(shù)據(jù)緩沖.RT-fifo的數(shù)據(jù)結(jié)構(gòu)定義如下:structrt_fifo_structintopen;/*實時任務(wù)在核心地址空間打開標(biāo)志*/intuser_open;/*普通Linux進(jìn)程打開標(biāo)志*/intsleeps;/*RT-fifo休

20、眠標(biāo)志,如果緩沖已滿時再有寫請求或緩沖空時再有讀請求,RT-fifo進(jìn)入休眠*/char*base;/*RT-fifo數(shù)據(jù)緩沖的基指針*/intbufsize;/*RT-fifo數(shù)據(jù)緩沖容量*/intstart;/*RT-fifo數(shù)據(jù)緩沖的當(dāng)前位置*/intlen;/*RT-fifo數(shù)據(jù)緩沖中的數(shù)據(jù)長度*/int(*user_handler)(unsignedintfifo);/*RT-fifo的處理函數(shù)指針*/structwait_queue*wait;/*因讀寫RT-fifo而阻塞的任務(wù)隊列指針*/structtq_stuctwake_up_task;/*喚醒任務(wù)隊列*/RT-fifo的接口包括創(chuàng)建、釋放、讀和寫,讀和寫是原子操作,不會被阻塞,這樣會防止優(yōu)先級倒置問題(priorityinver-sionproblem).用戶還可創(chuàng)建RT-fifo處理函數(shù)當(dāng)RT-fifo中數(shù)據(jù)可用時系統(tǒng)自動調(diào)用處理函數(shù).在普通Linux進(jìn)程看來,RT-fifo是字符設(shè)備,并可用標(biāo)準(zhǔn)的系統(tǒng)調(diào)用來進(jìn)行操作.在實時任務(wù)之間可采用修改過的類似UNIXSysemVIPC機(jī)制,包括先入先出隊列,消息隊列.5、RTLinux的應(yīng)用程序結(jié)構(gòu)應(yīng)用開發(fā)人員應(yīng)首先分析系統(tǒng)的具體應(yīng)用環(huán)境,把應(yīng)用程序分成實時和普通兩部分,實時部分應(yīng)設(shè)計的盡量簡單,只完成實時任務(wù),如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論