資料介紹
嵌入式系統是在有限的空間和有限的資源中運行,高效地實現某種特定功能或功能集合的裝置。
它的開發通常受到很多客觀條件的限制,諸如較弱的CPU處理能力、較小的內存空間、較少的可供選擇的外設、有限的電源供應等。每個嵌入式系統的開發無不是精打細算,以求用有限的資源發揮最大的功效。在各種嵌入式系統上運行的操作系統中,嵌入式Linux以其免費、高可靠性、廣泛的硬件支持以及開放源碼等眾多特性正在獲得越來越多的關注。其源碼開放特性使得開發者可以針對特定的嵌入式系統對Linux內核進行修改,以滿足開發要求,達到系統最優化的目的。嵌入式Linux應用中的一大問題是Linux的實時性問題。實時系統必須在限定時間內對外部事件作出正確響應,重點放在對滿足突發性、暫時性的處理需求上。而Linux作為傳統的分時操作系統,關注更多的是系統的整體數據吞吐量。如何提高Linux的實時性能是擺在廣大嵌入式系統級開發人員面前的挑戰。
1 相關研究
目前市面上有各種Linux發行版,但嚴格來說,Linux指的是Linus Torvalds維護的(及通過主要和鏡像網站發布的)內核。建立嵌入式系統不需要特別的內核,一個嵌入式Linux系統只是代表一個基于Linux內核的嵌入式系統,本文后面提及的Linux均指Linux內核。目前已有很多改善Linux實時性能的工作在進行中。最新的2.6版Linux已經實現了可搶占式的內核任務調度,但是不確定的中斷延時問題沒有得到解決。即2.6版的Linux高優先級內核空間進程雖然能像在用戶空間里那樣搶占低優先級進程的系統資源,但是從中斷發出開始到中斷服務程序的第1條指令開始執行的時間是不確定的。
除了Linux開發者的改進工作之外,還有一些組織、公司為提高Linux的實時性做了大量工作。其中有代表性的是Fsm Labs公司的RT-Linux、Monta Vista公司的MontaVista Linux、由Paolo Mantegazza等人維護的RTAI(Realtime Application InteRFace)項目。這些項目采用的方法可歸納為兩類:
(1)直接修改Linux內核。MontaVista Linux采用的就是這種方法。它將Linux修改成稱為Relatively Fully Preemptable Kernel的可搶占式內核,并使現了實時調度機制和算法,增加了一個細粒度定時器,這樣就將Linux修改成為一個軟實時內核。
(2)“雙內核”方式。RTAI項目和RT-Linux采用了這種方法。這種方法將傳統Linux“架空”,作為新增加的小型實時內核的一個優先級最低的任務執行,而實時任務則作為優先級最高的任務。即在實時任務存在的情況下運行實施任務,否則才運行Linux本身的任務。
MontaVista和RT-Linux的局限性在于它是一個商用軟件,不遵循GNU 的源代碼開放原則。若要在系統中使用這種Linux,則需要支付一筆頗為可觀的授權費用,這就違背了使用Linux的初衷—— 開源、免費,能夠發展自己的知識產權。
RTAI為了實時性能舍棄了Linux固有的很多優點:對大量硬件的廣泛支持,優秀的穩定性、可靠性。開發者一方面要針對RTAI自定義的一個硬件抽象層RTHAL(Real Time Hardware Abstraction Layer)重新編寫驅動程序,而且龐大的Linux開發社區的成果也無法方便地應用到實時核心中。
2 影響Linux實時性的因素
2.1 任務切換及其延時
任務切換延時是Linux從一個進程切換到另一個進程所需的時間,即高優先級進程從發出CPU 資源申請到進程的第1條指令開始執行的間隔。在實時系統中,任務切換延時必須越短越好。如之前所提到的,Linux 2.6.X已經實現了可搶占式內核,高優先級內核空間進程可以像在用戶空間中那樣讓CPU在任何時候停止低優先級進程轉而執行自己。但是有2種例外情況:
(1)進程在臨界區(Critical Section)中執行的時候不能被其他進程搶占;
(2)中斷服務程序(Interrupt Service Routine)不能被其他進程搶占。
2.2 基于優先級的調度算法
在Linux 2.6中,采用了O(1)調度算法。它是一個基于優先級的搶先式調度器,為每一個進程分配一個唯一的優先級,調度器保證在所有等待運行的任務中,首先被執行的總是高優先級的任務,為此高優先級的任務能夠搶占低優先級的任務。
這個調度器開銷恒定,與當前系統開銷無關,能夠改善系統實時性能。但是調度系統沒有提供除CPU以外的其他資源剝奪運行,實時性能沒有得到根本改觀。如果兩個任務需要使用同一個資源(如高速緩存),高優先級的任務已準備就緒,而此刻低優先級的任務正在用這個資源,高優先級的任務就必須等待,直到低優先級任務結束釋放了該資源后才能被執行,這被稱為優先級倒置。
2.3 中斷延時、中斷服務程序
中斷延時指的是從外設發出中斷信號開始到ISR的第1條指令開始執行的時間間隔。由外部中斷引起的實時任務需求是實時系統處理量的主要組成部分,足夠快地中斷響應和迅速地中斷服務程序處理是衡量實時系統的重要性能指標。不同的ISR執行時間是不一樣的,即使是相同的ISR也可能因為有多個出口而有不同的執行時間。而ISR執行時外部中斷是被禁用的,造成這樣一種情況,即使Linux的中斷延時非常小,如果在一個ISR執行時某個外設也產生了一個中斷信號,因為正在執行的ISR運行時間的不確定性和不可搶占性,也會產生Linux的中斷延時的不可預測性。
3 系統實時性能的提高
3.1 任務切換機倒的建立
在2.1節中提到進程在臨界區中執行的時候不能被搶占的問題,為了不影響系統穩定性、減少調試和測試的時間,我們不打算對此進行修改,而引入一個機制保證實時任務能夠得到優先執行。即在實時系統中,只有當進程的臨界區能在下一個實時任務開始之前結束才被允許進入。
如何判斷下一個實時任務中斷信號的產生時間,一般來說中斷信號是為了那些開始時間不可預測的任務而設定的,它的產生是完全隨機的。為了使中斷信號的時間能夠被預測,將中斷信號的產生與時鐘中斷掛鉤:中斷信號只能與時鐘中斷同時產生。時鐘中斷由系統計時硬件以周期性間隔產生。這個間隔由內核根據Hz值設定。Hz是一個與體系結構有關的常數,在文件中定義。當前的Linux為大多數平臺定義的Hz值是100,亦即時鐘中斷周期是10ms。顯然這是達不到實時系統定時精度要求的。提高Hz值能夠帶來系統性能提升,但卻是以增加系統開銷為代價。這就必須仔細權衡實時性要求和系統開銷的平衡。一種方法是通過大量的測試確定的實時任務中斷請求發生的時間間隔和進程在臨界區中的執行時間,取一個稍大于大多數實時任務中斷間隔和臨界區執行時間的數值。
它的開發通常受到很多客觀條件的限制,諸如較弱的CPU處理能力、較小的內存空間、較少的可供選擇的外設、有限的電源供應等。每個嵌入式系統的開發無不是精打細算,以求用有限的資源發揮最大的功效。在各種嵌入式系統上運行的操作系統中,嵌入式Linux以其免費、高可靠性、廣泛的硬件支持以及開放源碼等眾多特性正在獲得越來越多的關注。其源碼開放特性使得開發者可以針對特定的嵌入式系統對Linux內核進行修改,以滿足開發要求,達到系統最優化的目的。嵌入式Linux應用中的一大問題是Linux的實時性問題。實時系統必須在限定時間內對外部事件作出正確響應,重點放在對滿足突發性、暫時性的處理需求上。而Linux作為傳統的分時操作系統,關注更多的是系統的整體數據吞吐量。如何提高Linux的實時性能是擺在廣大嵌入式系統級開發人員面前的挑戰。
1 相關研究
目前市面上有各種Linux發行版,但嚴格來說,Linux指的是Linus Torvalds維護的(及通過主要和鏡像網站發布的)內核。建立嵌入式系統不需要特別的內核,一個嵌入式Linux系統只是代表一個基于Linux內核的嵌入式系統,本文后面提及的Linux均指Linux內核。目前已有很多改善Linux實時性能的工作在進行中。最新的2.6版Linux已經實現了可搶占式的內核任務調度,但是不確定的中斷延時問題沒有得到解決。即2.6版的Linux高優先級內核空間進程雖然能像在用戶空間里那樣搶占低優先級進程的系統資源,但是從中斷發出開始到中斷服務程序的第1條指令開始執行的時間是不確定的。
除了Linux開發者的改進工作之外,還有一些組織、公司為提高Linux的實時性做了大量工作。其中有代表性的是Fsm Labs公司的RT-Linux、Monta Vista公司的MontaVista Linux、由Paolo Mantegazza等人維護的RTAI(Realtime Application InteRFace)項目。這些項目采用的方法可歸納為兩類:
(1)直接修改Linux內核。MontaVista Linux采用的就是這種方法。它將Linux修改成稱為Relatively Fully Preemptable Kernel的可搶占式內核,并使現了實時調度機制和算法,增加了一個細粒度定時器,這樣就將Linux修改成為一個軟實時內核。
(2)“雙內核”方式。RTAI項目和RT-Linux采用了這種方法。這種方法將傳統Linux“架空”,作為新增加的小型實時內核的一個優先級最低的任務執行,而實時任務則作為優先級最高的任務。即在實時任務存在的情況下運行實施任務,否則才運行Linux本身的任務。
MontaVista和RT-Linux的局限性在于它是一個商用軟件,不遵循GNU 的源代碼開放原則。若要在系統中使用這種Linux,則需要支付一筆頗為可觀的授權費用,這就違背了使用Linux的初衷—— 開源、免費,能夠發展自己的知識產權。
RTAI為了實時性能舍棄了Linux固有的很多優點:對大量硬件的廣泛支持,優秀的穩定性、可靠性。開發者一方面要針對RTAI自定義的一個硬件抽象層RTHAL(Real Time Hardware Abstraction Layer)重新編寫驅動程序,而且龐大的Linux開發社區的成果也無法方便地應用到實時核心中。
2 影響Linux實時性的因素
2.1 任務切換及其延時
任務切換延時是Linux從一個進程切換到另一個進程所需的時間,即高優先級進程從發出CPU 資源申請到進程的第1條指令開始執行的間隔。在實時系統中,任務切換延時必須越短越好。如之前所提到的,Linux 2.6.X已經實現了可搶占式內核,高優先級內核空間進程可以像在用戶空間中那樣讓CPU在任何時候停止低優先級進程轉而執行自己。但是有2種例外情況:
(1)進程在臨界區(Critical Section)中執行的時候不能被其他進程搶占;
(2)中斷服務程序(Interrupt Service Routine)不能被其他進程搶占。
2.2 基于優先級的調度算法
在Linux 2.6中,采用了O(1)調度算法。它是一個基于優先級的搶先式調度器,為每一個進程分配一個唯一的優先級,調度器保證在所有等待運行的任務中,首先被執行的總是高優先級的任務,為此高優先級的任務能夠搶占低優先級的任務。
這個調度器開銷恒定,與當前系統開銷無關,能夠改善系統實時性能。但是調度系統沒有提供除CPU以外的其他資源剝奪運行,實時性能沒有得到根本改觀。如果兩個任務需要使用同一個資源(如高速緩存),高優先級的任務已準備就緒,而此刻低優先級的任務正在用這個資源,高優先級的任務就必須等待,直到低優先級任務結束釋放了該資源后才能被執行,這被稱為優先級倒置。
2.3 中斷延時、中斷服務程序
中斷延時指的是從外設發出中斷信號開始到ISR的第1條指令開始執行的時間間隔。由外部中斷引起的實時任務需求是實時系統處理量的主要組成部分,足夠快地中斷響應和迅速地中斷服務程序處理是衡量實時系統的重要性能指標。不同的ISR執行時間是不一樣的,即使是相同的ISR也可能因為有多個出口而有不同的執行時間。而ISR執行時外部中斷是被禁用的,造成這樣一種情況,即使Linux的中斷延時非常小,如果在一個ISR執行時某個外設也產生了一個中斷信號,因為正在執行的ISR運行時間的不確定性和不可搶占性,也會產生Linux的中斷延時的不可預測性。
3 系統實時性能的提高
3.1 任務切換機倒的建立
在2.1節中提到進程在臨界區中執行的時候不能被搶占的問題,為了不影響系統穩定性、減少調試和測試的時間,我們不打算對此進行修改,而引入一個機制保證實時任務能夠得到優先執行。即在實時系統中,只有當進程的臨界區能在下一個實時任務開始之前結束才被允許進入。
如何判斷下一個實時任務中斷信號的產生時間,一般來說中斷信號是為了那些開始時間不可預測的任務而設定的,它的產生是完全隨機的。為了使中斷信號的時間能夠被預測,將中斷信號的產生與時鐘中斷掛鉤:中斷信號只能與時鐘中斷同時產生。時鐘中斷由系統計時硬件以周期性間隔產生。這個間隔由內核根據Hz值設定。Hz是一個與體系結構有關的常數,在文件中定義。當前的Linux為大多數平臺定義的Hz值是100,亦即時鐘中斷周期是10ms。顯然這是達不到實時系統定時精度要求的。提高Hz值能夠帶來系統性能提升,但卻是以增加系統開銷為代價。這就必須仔細權衡實時性要求和系統開銷的平衡。一種方法是通過大量的測試確定的實時任務中斷請求發生的時間間隔和進程在臨界區中的執行時間,取一個稍大于大多數實時任務中斷間隔和臨界區執行時間的數值。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式Linux路線
- 【嵌入式Linux(基礎篇)】從標準Linux到嵌入式Linux + 嵌入式Linux知識架構
- 嵌入式linux實時性研究,嵌入式Linux內核實時性研究及應用
- 嵌入式Linux的淺淡
- 嵌入式Linux實時性能優化
- 嵌入式linux+io+優化,嵌入式Linux系統內存優化使用方法研究
- 嵌入式LINUX系統內核和內核模塊調試
- Linux+嵌入式實時操作系統開發與應用
- 嵌入式Linux應用程序例程
- 嵌入式Linux與物聯網軟件開發C語言內核深度解析書籍的介紹
- 基于FPGA和嵌入式Linux的實時解析1553B+BM的設計與實現 3次下載
- 嵌入式Linux內核實時性研究及改進
- 基于RTAI的嵌入式Linux硬實時性能的研究與實現
- 基于Linux的嵌入式應用淺析
- 嵌入式Linux 實時性分析與實時性改進
- 簡化SBC的嵌入式Linux軟件開發 998次閱讀
- 嵌入式系統的全面解析 3146次閱讀
- 嵌入式Linux啟動時間優化的秘密之五-Bootloader 2743次閱讀
- 嵌入式Linux啟動時間優化的秘密之四-啟動腳本 2306次閱讀
- 米爾科技嵌入式實時操作系統介紹 2179次閱讀
- 基于嵌入式軟件的JNI技術應用解析 1020次閱讀
- 基于Yocto Project的定制嵌入式Linux產品設計淺析 1w次閱讀
- 關于嵌入式系統的特點和Linux內核的實時應用分析 1037次閱讀
- 怎么才能更好的理解嵌入式操作系統Linux實時化技術? 1174次閱讀
- 關于Linux嵌入式操作系統的優勢特征詳解 5521次閱讀
- 關于Linux的特點析以及在嵌入式操作系統中的應用詳解 850次閱讀
- 基于Linux上進行改進的具有實時應用能力的現代嵌入式操作系統解決方案詳解 843次閱讀
- 對于嵌入式沒有嵌入式軟件架構師的詳細解析 4055次閱讀
- 嵌入式Linux的學習方法解析 3091次閱讀
- 基于Linux的嵌入式實時操作系統的研究 2298次閱讀
下載排行
本周
- 1感應筆電路圖
- 0.06 MB | 7次下載 | 免費
- 2美的電磁爐維修手冊大全
- 1.56 MB | 5次下載 | 5 積分
- 3Cortex-M3/M4F指令集技術用戶手冊
- 2.28MB | 3次下載 | 免費
- 4SMD LED選型手冊 貼片燈珠
- 5.47 MB | 3次下載 | 免費
- 5基于PLC的拉絲機張力控制系統研究
- 0.14 MB | 2次下載 | 5 積分
- 6LZC3106G高性能諧振控制器中文手冊
- 1.29 MB | 1次下載 | 1 積分
- 7JL2233B集成電平轉換功能的LDO中文手冊
- 0.50 MB | 1次下載 | 免費
- 8加密芯片的一種破解方法和對應加密方案改進設計
- 0.29 MB | 1次下載 | 免費
本月
- 1使用單片機實現七人表決器的程序和仿真資料免費下載
- 2.96 MB | 44次下載 | 免費
- 2UC3842/3/4/5電源管理芯片中文手冊
- 1.75 MB | 19次下載 | 免費
- 3華瑞昇CR216芯片數字萬用表規格書附原理圖及校正流程方法
- 0.74 MB | 14次下載 | 3 積分
- 4DMT0660數字萬用表產品說明書
- 0.70 MB | 13次下載 | 免費
- 53314A函數發生器維修手冊
- 16.30 MB | 13次下載 | 免費
- 6TPS54202H降壓轉換器評估模塊用戶指南
- 1.02MB | 8次下載 | 免費
- 7STM32F101x8/STM32F101xB手冊
- 1.69 MB | 8次下載 | 1 積分
- 8感應筆電路圖
- 0.06 MB | 7次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評論
查看更多