RT-Linux
RT-Linux
RT linux就是realtime linux的簡寫,RT-Linux是一個嵌入式硬實時操作系統,它部分支持POSIX.1b標準。
RT linux 是由美國墨西哥理工學院開發的嵌入式Linux操作系統。到目前為止,RT-Linux已經 成功地應用於太空梭的空間數據採集、科學儀器測控和電影特技圖像處理等廣泛領域。RT-Linux開發者並沒有針對實時操作系統的特性而重寫Linux 的內核,因為這樣做的工作量非常大,而且要保證兼容性也非常困難。為此,RT-Linux提出了精巧的內核,並把標準的Linux核心作為實時核心的一個 進程,同用戶的實時進程一起調度。這樣對Linux內核的改動非常小,並且充分利用了Linux下現有的豐富的軟體資源。
RTLinux的設計思想是:應用硬體的實時約束將實時程序分割成短小簡單的部分,較大部分承擔較複雜的任務。根據這一原則,將應用程序分為硬實時和程序 2個部分。硬體實時部分被作為實時任務來執行,並從外部設備拷貝數據到一個叫做實時有名管道(RTFIFO)的特殊I/O埠;程序主要部分作為標準 Linux進程來執行。它將從RTFIFO中讀取數據,然後顯示並存儲到文件中,實時部分將被寫入內核。設計實時有名管道是為了使實時任務在讀和寫數據時不被阻塞。圖2所示的是實時有名管道結構圖。
RTLinux通過對標準Linux內核進行改造,將Linux內核工作環境作了一些變化。如圖2所示,在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設計過程中的原則:在實時模塊中的工作量盡量少,如果能在Linux中完成而不影響實時性能的話,就盡量在Linux中完成,因此,RTLinux內核可以盡量做得簡單。在RTLinux內核中,不應該等待資源,也不需要使用共享旋轉鎖。實時任務和Linux進程之間的通信也是非阻塞的,從來不用等待進隊列和出隊列的數據。RTLinux將系統和設備的初始化交給了Linux 完成,對動態資源的申請和分配也交給了Linux。
RTLinux使用靜態分配的內存來完成硬體實時任務,因為在沒有內存資源的時候,被阻塞的線程是不可能具有實時能力的。
RTlinux是源代碼開放的具有硬實時特性的多任務操作系統,它是通過底層對Linux實施改造的產物。通過在L inux內核與硬體中斷之間增加一個精巧的可搶先的實時內核,把標準的Linux內核作為實時內核的一個進程與用戶進程一起調度,標準的L inux內核的優先順序最低,可以被實時進程搶斷。正常的Linux進程仍可以在Linux內核上運行,這樣既可以使用標準分時操作系統即Linux的各種服務, 又能提供低延時的實時環境。