1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      采用雙內核機制基于uClinux的實時操作系統分析與實現

      更新時間: 2005-12-30 14:40:36來源: 粵嵌教育瀏覽量:3807

        引言:本文提出了一種基于uClinux的實時操作系統,在對于資源要求苛刻而應用場合多變的嵌入式領域很有優勢。該系統采用了雙內核機制、借助實時硬件抽象層(RTHAL)概念、利用模塊動態加載,對普通uClinux進行了實時性改進,實驗表明完全滿足實時系統的時限約束。

        嵌入式Linux以代碼開放、價格低廉、功能強大又易于移植的特性正在被廣泛應用,為嵌入式操作系統提供了一個極具吸引力的選擇。uClinux是專門針對無存儲器管理單元(MMU)處理器設計的嵌入式Linux,非常適合中低端嵌入式系統的需求,在工業控制領域有著廣闊的應用前景。

        但許多實際應用要求對外部事件在限定的時間內做出反應,而普通uClinux并不是一種實時操作系統,所以本文提出了一種基于uClinux的實時性解決方案,經測試可以嚴格滿足實時應用的時限約束,有良好的應用價值。

        基于uClinux的實時方案分析

        1.uClinux實時性缺陷

        uClinux雖然符合POSIX1003.1b關于實時擴展部分的標準,例如支持SCHED_FIFO和SCHED_RR實時調度策略、實時信號等實時功能,但由于其初的設計目標為通用分時操作系統,因此在實時性支持方面,uClinux仍存在如下缺陷:

        a.非搶占式內核。uClinux有用戶態和核心態兩種模式,當進程運行在用戶態時,可以被優先級更高的進程搶占;在內核中,一個進程可以通過schedule()函數自愿地啟動一次調度。除此之外,非自愿的強制調度只能發生在每次從系統調用返回前,或每次從中斷或異常處理返回到用戶空間前。

        B.公平的調度算法。普通uClinux作為一個分時系統,其調度算法的目標是提供一種公平的調度機制,平衡系統響應時間和吞吐量,這與實時應用要求的低延遲和高度的可預測性相矛盾。實時操作系統必須保證目前運行的任務的優先級是可運行任務中的。

        C.頻繁地關中斷操作。uClinux為了保證核心數據的完整性,在對關鍵數據結構進行修改前,通常采用"關中斷"的方式。而非周期實時任務大多是由中斷作出響應,周期性實時任務也需要調度模塊來調度運行,而調度模塊的執行也要由時鐘中斷觸發。所以,頻繁的關中斷會導致實時任務不能被及時調度執行。

        D.時鐘粒度粗糙。時鐘管理是操作系統的脈搏,是進程調度的重要依據。普通uClinux的時鐘粒度被設置為10ms,而實時應用一般都需要微秒級的響應精度。

        2. uClinux實時解決方案

        uClinux支持硬實時性的策略有以下兩種:

        a. 直接修改內核法

        將內核中的進程調度、中斷處理、時鐘等部分遵循POSIX標準進行改寫,在源代碼級的基礎上使uClinux變成一個實時操作系統。這種策略雖然可以獲得高的執行效率,但實現難度大、周期比較長,而且對原有內核太強的依賴性使得升級工作繁重而不方便。

        b. 雙內核方法

        在同一硬件平臺上采用了兩個相互配合、共同工作的系統內核,一個內核提供精確的實時多任務管理,另一個內核提供復雜的非實時通用功能。由于uClinux支持內核模塊動態加載,因此實時內核可在需要時以模塊的形式載入。雙內核機制避免了大規模結構改造,以較小的代價提供了強實時性,新系統可使用幾乎所有常規uClinux操作系統提供的功能。

        本文提出的嵌入式實時操作系統采用雙內核的設計思想,在普通uClinux基礎上,通過增加一個實時內核實現了調度的可搶占性,同時在系統中實現了硬件抽象層RTHAL,避免了頻繁關中斷所導致的實時任務不能被及時調度執行的缺陷。,對系統時鐘進行了改進,滿足了實時應用微秒級的響應精度。

        基于uClinux的實時操作系統設計

        1. 搶占式實時內核

        實時內核完全掌握了硬件層,而把非實時內核作為一個優先級的普通任務運行于自己之上。實時內核采用了搶占式調度算法,非實時內核也通過RTHAL獲得實時內核所用的替代函數,這就為應用雙內核機制實現可搶占式內核奠定了基礎。

        實時內核將各種功能以模塊形式實現,在系統運行時可以方便地加載、卸載,從而大大減少核心代碼的規模,節省內核空間并方便進行動態配置。圖1是雙內核結構的嵌入式實時uClinux的體系結構圖??梢钥闯觯赗THAL架構下實時內核主要由中斷分發器和實時調度器構成,這是實時內核基本的功能。同時還將實時SHM、實時FIFO、RTCOM和SFLIB設計成模塊的形式,可以靈活地根據應用需求進行加載。

        實時SHM和實時FIFO是實時內核任務和非實時內核任務之間的通信橋梁。SFLIB是浮點運算軟件模擬的功能模塊,為了解決處理器不支持內核浮點運算而設計的。RTCOM則可以提供實時串口通信功能。

        搶占式內核提供多種實時調度策略,包括FIFO、RR、RM、EDF算法,同時還允許使用者根據應用需要編寫自己的調度算法。任務調度的時機有兩種,一種是主動調度,即在程序中主動調用rt_schedule()函數來讓出運行權;另一種是被動調度,即在時鐘中斷處理函數rt_timer_handler()中進行調度。以上兩個函數的算法基本相同,故僅給出rt_schedule()的流程圖(圖2)。

        2.RTHAL

        從Linux2.1版開始提出了實時硬件抽象層(RTHAL)的概念,而uClinux本身并不具有RTHAL。這里借鑒RTHAL的思想,對uClinux核心進行改動,將其與中斷控制器隔離,核心中的所有中斷操作指令都被替換成相應的宏??梢院唵蔚乩斫鉃?,這時的開中斷、關中斷指令實際上僅僅變更一個中斷狀態標志的值,并不真正改變中斷狀態。通過RTHAL這一機制,避免了頻繁關中斷所導致的實時任務不能被及時調度執行的缺陷。

        1.RTHAL數據結構

        將所有需要的內部數據及函數的指針集成為一個結構體RTHAL,這樣就能方便地捕獲全部與實時應用緊密相關的內核函數。當需要響應硬實時事件時,實時內核可以動態地把這些函數切換到相應的軟件模擬函數上。

        2.RTHAL作用

        為了更好地說明RTHAL的作用,下面詳細說明實時模塊加載前后內核所發生的變化。

        A.實時模塊加載前

        首先解釋一下硬件支撐層(HSL)的概念:在linux代碼樹中HSL一般是由匯編語言編寫的與底層硬件密切相關的部分,它的作用是在中斷發生時保存現場并跳轉到內核中相應的中斷處理函數入口,在中斷返回時恢復現場,同時還起著進程切換的作用。

        如圖3所示,改動前uClinux內核可以通過開/關中斷操作直接打開或關閉所有中斷,也可以通過屏蔽/解屏蔽操作關閉和打開特定的中斷。由于中斷處理、系統調用和異常處理需要經常關閉中斷,頻繁的關中斷會導致實時任務不能被及時調度執行,從而使系統響應時間增長,實時性降低。

        這時uClinux直接與硬件層打交道,例如關中斷指令cli的宏定義為:

        #define __cli() __asm__ __volatile__("cli": : :"memory")

        即uClinux內核直接通過cli匯編指令控制硬件。

        B.實時內核加載后

        當系統實現了RTHAL后,如圖4所示,uClinux的開/關中斷操作被分別指向RTHAL的disint( )和enint( )函數。disint( )指向實時模塊的_linux _cli( )函數,作用是設置中斷標志位為關中斷狀態;enint( )函數指向實時模塊的_linux_sti( )函數,作用是設置中斷標志位為開中斷狀態,并處理掛起的uClinux中斷請求;而屏蔽/解屏蔽操作被分別指向實時模塊的linux_irq_mask( )函數和linux_irq_unmask()函數。

        當中斷通過HSL調用RTHAL中的do_IRQ( )函數,這個函數指向實時模塊的dispatch_irq( )函數。其作用是判斷當前中斷是否是實時中斷,如果是實時中斷,則實時模塊處理這個中斷;如果是非實時的,則將這個中斷掛到uClinux中斷請求隊列中,由uClinux內核的來處理非實時中斷。

        例如,linux_cli()函數在加載實時內核后被改寫為:

        static void linux_cli(void)

        {

        processor[hard_cpu_id()].intr_flag = 0;

        }

        即當uClinux要關中斷時,實時模塊的處理只是僅僅設置了中斷標志位,并沒有真正的去關硬件中斷。由此,實時模塊實現了對硬件層的接管,而把非實時內核作為一個優先級的普通任務運行,這樣就可以充分保證實時中斷的及時響應,從而保證了系統的實時性。

        3. 細粒度時鐘的實現

        對于時鐘機制的改造,可以通過提高系統時鐘精度來增強系統的實時性,特別是對外部中斷的響應。在系統中引入兩種定時器模式:Periodic(周期性)和Oneshot(一次性)。

        A.Periodic模式

        對于周期性實時任務應用這種模式,只需要在初始化時對定時器進行設置,保證了處理效率。

        B.Oneshot模式

        對于非周期實時任務應用這種模式。在任何時刻,時鐘的下一次中斷間隔由所有定時器中到期早的一個來決定。一旦定時器到期,內核便能夠立刻響應,因此內核的響應開銷只由中斷服務的時間所決定,大約只有幾個微秒。

        在i386體系結構中,有TSC(時間標簽計數器)計數器,這個計數器是64位的寄存器,可以精確到1/主頻。在s3c4510b處理器上沒有這個寄存器,但精確計時又是必要的,為了解決這一問題,可以采用計時器2(timer1)來模擬TSC的功能。每來一個時鐘脈沖,timer1的TCNT1寄存器減1,減到零后產生時鐘中斷,再從TDATA1中讀TCNT1的值,往復運行。由于TCNT1寄存器僅32位,s3c4510b的主頻為50MHz,置TDATA的值為0xffffffff時,僅運行8分多鐘就溢出了。于是設置一個32位全局變量tsc.hltsc,timer1每次中斷到來時將這個全局變量加1,為了使系統更精確,必須將timer1中斷設置為優先級,這樣就可以模擬64位的TSC寄存器。

        實驗結果及結論

        該系統平臺為:以ARM7TDMI為核心的Samsung4510B處理器、2M閃存和16M RAM,處理器運行頻率為50MHz。經驗證,未加載實時內核前,中斷延遲雖大多數在30us(1500個時鐘脈沖@50MHz)以下,但是并不十分穩定,有時超過200us(10000時鐘脈沖@50MHz),的甚至達到430us(21525個時鐘脈沖@50MHz)。實時系統以中斷延遲作為衡量指標,因此這對于實時應用來講是不能忍受的。加載了實時模塊后,中斷延遲時間大約為10us~30us,而且結果十分穩定,完全滿足實時系統的相關要求。

        本文小結

        本文提出的嵌入式實時操作系統采用雙內核機制、實現了RTHAL的概念,使得直接修改內核的部分減至小。同時實時內核充分利用模塊動態加載機制,在系統運行時方便地加添加、刪除各個功能模塊,從而大大減少核心代碼的規模、節省內核空間、方便進行動態配置,對于資源要求苛刻而應用場合多變的嵌入式領域很有優勢。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 一区二区三区四亚洲 | 日本精品网站在线免费 | 中文字幕乱码精品久久久久 | 日韩亚洲经典视频在线观看 | 亚洲人成免费在线 | 亚洲中文字幕乱碼在线观看 |