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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

9、代碼S_CLI,S_STI,S_IRET.S_CLI,S_STI及S_IRET的代碼如下:(用Linux下的GNU匯編器實(shí)現(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)中斷時(shí),模擬器只是清一軟標(biāo)志SFIF.當(dāng)中斷發(fā)生時(shí),模擬器檢查此標(biāo)志,如已被設(shè)置則調(diào)用相應(yīng)的中斷處理函數(shù).否則,置位一標(biāo)識(shí)位.S_STI首先開(kāi)中斷,然后設(shè)置堆棧,模擬了中斷處理過(guò)程,最后調(diào)用軟中斷返回S_IRET在S_IRET中首先初始化中斷寄存器,使之指向核心,以訪(fǎng)問(wèn)全局變量.然后用位與的方法檢查是否有中斷等待處理,如有則跳轉(zhuǎn)到相應(yīng)的中斷處理函數(shù)去執(zhí)行,在中斷處理函數(shù)的結(jié)尾處的S_IRET會(huì)跳到下一等待中斷的處理函數(shù),直到所有的等待中斷被處理完.若沒(méi)有中斷等待處理,則設(shè)軟中斷標(biāo)識(shí)SFIF,并用iret返回用RTLinux提供的APIrequest_RTirq()和fr

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論