新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > RTlinux的介紹

        RTlinux的介紹

        作者: 時間:2012-08-15 來源:網絡 收藏

        RTLinux程序運行于用戶空間和內核態兩個空間。RTLinux提供了應用程序接口。借助這些API函數將實時處理部分編寫成內核模塊,并裝載到RTLinux內核中,運行于RTLinux的內核態。非實時部分的應用程序則在Linux下的用戶空間中執行。這樣可以發揮Linux對網絡和數據庫的強大支持功能。

        軟實時的實現:

        RTLinux通過一個高效的、可搶先的實時調度核心來全面接管中斷,并把Linux作為此實時核心的一個優先級最低的進程運行。當有實時任務需要處理時,RTLinux運行實時任務;無實時任務時,RTLinux運行Linux的非實時進程。其系統結構見圖1。

        圖4 RTLinux系統結構圖

        在Linux進程和硬件中斷之間,本來由Linux內核完全控制,現在在Linux內核和硬件中斷的地方加上了一個RTLinux內核的控制。Linux的控制信號都要先交給RTLinux內核進行處理。在RTLinux內核中實現了一個虛擬中斷機制,Linux本身永遠不能屏蔽中斷,它發出的中斷屏蔽信號和打開中斷信號都修改成向RTLinux發送一個信號。如在Linux里面使用“SI”和“CLI”宏指令,讓RTLinux里面的某些標記做了修改。也就是說將所有的中斷分成Linux中斷和實時中斷兩類。如果RTLinux內核接收到的中斷信號是普通Linux中斷,那就設置一個標志位;如果是實時中斷,就繼續向硬件發出中斷。在RTLinux中執行STI將中斷打開之后,那些設置了標志位表示的Linux中斷就繼續執行,因此,CLI并不能禁止RTLinux內核的運行,卻可以用來中斷Linux。Linux不能中斷自己,而RTLinux可以。

        RTLinux在默認的情況下采用優先級的調度策略,即系統調度器根據各個實時任務的優先級來確定執行的先后次序。優先級高的先執行,優先級低的后執行,這樣就保證了實時進程的迅速調度。同時RTLinux也支持其它的調度策略,如最短時限最先調度(EDP)、確定周期調度(RM)(周期段的實時任務具有高的優先級)。RTLinux將任務調度器本身設計成一個可裝載的內核模塊,用戶可以根據自己的實際需要,編寫適合自己的調度算法。

        對于一個操作系統而言,精確的定時機制雖然可以提高任務調度器的效率,但會增加CPU處理定時中斷的時間開銷。RTLinux對時間精度和時鐘中斷處理的時間開銷進行了折中考慮。不是像Linux那樣將8254定時器設計成10ms產生一次定時中斷的固定模式,而是將定時器芯片設置為終端計時中斷方式。根據最近的進程的時間需要,不斷調整定時器的定時間隔。這樣不僅可以獲得高定時精度,同時中斷處理的開銷又最小。

        5.RTLinux的主要功能

        RTLinux提供了一整套對硬實時進程的支持函數集。在此,對在嵌入式系統中的實現加以闡述。

        a.中斷仿真

        在中斷控制硬件與LINUX核心之間放置一個軟件仿真層。具體做法是,在LINUX源碼中出現cli、sti和IRet的所有地方都用仿真宏:S_CLI、S_STI和S_IRET來替換。所有的硬件中斷就都被仿真器所截獲。

        當需要關中斷時,就將仿真器中的一個變量置0。不論何時若有中斷發生,仿真器就檢查這個變量。如果是1(LINUX已開中斷),就立即調用LINUX的中斷處理程序;否則,LINUX中斷被禁止,中斷處理程序不會被調用,而是在保存著所有掛起中斷的信息的變量的相應位置1。當LINUX重新開中斷,所有掛起中斷的處理程序都會被執行。這種仿真方式可以稱之為軟中斷。

        b.實時任務

        實時任務是在一個由核心控制的調度程序的調度下執行的用戶定義的程序。

        RT-LINUX最初將實時任務設計成ELF格式的目標文件。這一設計方案的最大缺點就是性能比較差。原因在于,第一,486的緩存是虛擬的。所以每當頁表目錄的基址寄存器改變時,TLB(轉換后備緩沖器)就會失效。由于實時任務的上下文轉換頻繁,所以TLB的頻繁失效就導致系統性能的嚴重下降。第二,486的保護級別變換耗時不少。比如,陷入更高級別時需要71個循環,而其它指令一般少于10個循環。

        解決的辦法就是使用可加載模組技術,所有的實時任務都同處于一個地址空間-內核地址空間,不僅避免了頻繁的TLB失效,同時也消除了變換保護級別的消耗,而且任務轉換也變得相當容易。

        c.進程調度

        實時系統的進程調度的主要任務就是滿足實時任務在時間上的要求。調度算法的種類很多,沒有一個策略是放之四海而皆準的,因此采用哪種算法要取決于具體應用。

        RT-LINUX采用的方法是允許用戶編寫自己的調度程序,并可以編譯成模組的形式。這樣就可以方便地試驗不同的策略和算法對于某一特定應用的適合性,從中選出最優。

        RT-LINUX自帶的是一個基于優先數的搶占式調度程序。此調度程序將LINUX當作具有最低優先數的實時任務。因此,LINUX只在實時系統無任何實時任務是才運行。在從LINUX切換到實時任務時,系統記下軟中斷的狀態并禁止軟中斷。在切換回來實,再恢復軟中斷的狀態。

        d.時鐘

        調度程序需要精確的時鐘才能準確操作。調度通常是在特定的時刻進行任務切換。時鐘的偏差會引起預定調度的偏差,導致產生被稱為任務發布抖動的現象。這是一種應該盡量避免的不良現象。

        RT-LINUX的解決辦法是,將IBM PC兼容機中的時鐘芯片Intel 8254設置為中斷開啟終端計數模式。在這種模式下,精度可以達到1毫秒。這樣在降低中斷處理的影響的同時,獲得了較高的時鐘精度。

        e.IPC

        由于標準LINUX核心可以被實時任務在任意時刻搶占,所以實時任務無法安全地調用LINUX的程序。但是總要有一個信息交換的機制。

        在RT-LINUX中所用的信息交換方式是RT-FIFO(實時隊列)。它與UNIX的管道非常相似,都是一個無結構的數據流。通過RT-FIFO,LINUX的進程之間,實時進程之間,以及LINUX的核心與實時進程之間可以交換信息。

        對于一個普通的進程來說,RT-FIFO就是一個特殊的字符文件。這些文件必須自建:

        # for i in 0 1 2 3; do mknod /dev/rtf$i c 63 $i; done


        上一頁 1 2 下一頁

        關鍵詞: 介紹 RTlinux

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 江源县| 甘孜县| 体育| 铅山县| 文山县| 武宣县| 虞城县| 东宁县| 米易县| 阳曲县| 云梦县| 仪陇县| 历史| 闵行区| 米林县| 岗巴县| 信阳市| 灌阳县| 迁安市| 大安市| 中江县| 和林格尔县| 财经| 延吉市| 万年县| 康保县| 九龙城区| 石嘴山市| 金阳县| 大洼县| 离岛区| 德清县| 古浪县| 尼勒克县| 贞丰县| 北宁市| 类乌齐县| 广德县| 大新县| 元阳县| 辽宁省|