資料介紹
1、簡介
隨著微處理器技術的發展,嵌入式系統已經成為計算機應用領域的一個重要的組成部分。Linux雖然為分時操作系統,但由于其功能強大、源代碼開放以及可移植性強等優勢,已成為日益流行的嵌入式實時操作系統的解決方案,然而,在實時方面它還不能很好地滿足實時系統方面的需要,其本身僅僅提供了一些實時處理的支持。為使Linux滿足實時應用的要求,常用的方法是通過對Linux的內核進行裁減和修改,使其能夠滿足實時性的要求。目前,我們根據實際需要對于Linux采用以下方法進行改進。
2、實現低延遲
使用兩種方法來實現低延遲:一種就是鎖分解,即把大循環中保持的鎖分解為每一輪循環中都獲得鎖和釋放鎖,典型的代碼結構示例如下:
另一種是增加搶占點,即自愿被搶占。增加搶占點之后:
語句cond_resched()將判斷是否有進程需要搶占當前進程,如果是將立即發生調度,這就是增加的搶占點,它支持四種搶占模式:
?。?).No Forced Preemption (Server),這種模式等同于沒有使能搶占選項的標準內核,主要適用于科學計算等服務器環境。
?。?).Voluntary Kernel Preemption (Desktop),這種模式使能了自愿搶占,但仍然失效搶占內核選項,它通過增加搶占點縮減了搶占延遲,因此適用于一些需要較好的響應性的環境,如桌面環境,當然這種好的響應性是以犧牲一些吞吐率為代價的。
?。?).Preemptible Kernel (Low-Latency Desktop),這種模式既包含了自愿搶占,又使能了可搶占內核選項,因此有很好的響應延遲,實際上在一定程度上已經達到了軟實時性。它主要適用于桌面和一些嵌入式系統,但是吞吐率比模式2更低。
(4).Complete Preemption (Real-Time),這種模式使能了所有實時功能,因此完全能夠滿足軟實時需求,它適用于延遲要求為100微秒或稍低的實時系統。
實現實時是以犧牲系統的吞吐率為代價的,因此實時性越好,系統吞吐率就越低。
3、中斷線程化
中斷線程化是實現Linux實時性的一個重要步驟,在Linux標準內核中,中斷是最高優先級的執行單元,不管內核當時處理什么,只要有中斷事件,系統將立即響應該事件并執行相應的中斷處理代碼,除非當時中斷關閉。因此,如果系統有嚴重的網絡或I/O負載,中斷將非常頻繁,后發生的實時任務將很難有機會運行,也就是說,毫無實時性可言。中斷線程化之后,中斷將作為內核線程運行而且賦予不同的實時優先級,實時任務可以有比中斷線程更高的優先級,這樣,實時任務就可以作為最高優先級的執行單元來運行,即使在嚴重負載下仍有實時性保證。
中斷線程化的另一個重要原因是spinlock被mutex取代。中斷處理代碼中大量地使用了spinlock,當spinlock被mutex取代之后,中斷處理代碼就有可能因為得不到鎖而需要被掛到等待隊列上,但是只有可調度的進程才可以這么做,如果中斷處理代碼仍然使用原來的spinlock,則spinlock取代mutex的努力將大打折扣,因此為了滿足這一要求,中斷必須被線程化,包括IRQ和softirq。
中斷線程化的實現方法是:對于IRQ,在內核初始化階段init(該函數在內核源碼樹的文件init/main.c中定義)調用init_hardirqs(該函數在內核源碼樹的文件kernel/irq/manage.c中定義)來為每一個IRQ創建一個內核線程,IRQ號為0的中斷賦予實時優先級49,IRQ號為1的賦予實時優先級48,依次類推直到25,因此任何IRQ線程的最低實時優先級為25。原來的do_IRQ被分解成兩部分,架構相關的放在類似于arch/*/kernel/irq.c的文件中,名稱仍然為do_IRQ,而架構獨立的部分被放在IRQ子系統的位置kernel/irq/handle.c中,名稱為_do_IRQ。當發生中斷時,CPU將執行do_IRQ來處理相應的中斷,do_IRQ將做了必要的架構相關的處理后調用_do_IRQ。函數_do_IRQ將判斷該中斷是否已經被線程化(如果中斷描述符的狀態字段不包含SA_NODELAY標志說明中斷被線程化了),如果是將喚醒相應的處理線程,否則將直接調用handle_IRQ_event(在IRQ子系統位置的kernel/irq/handle.c文件中)來處理。對于已經線程化的情況,中斷處理線程被喚醒并開始運行后,將調用do_hardirq(在源碼樹的IRQ子系統位置的文件kernel/irq/manage.c中定義)來處理相應的中斷,該函數將判斷是否有中斷需要被處理(中斷描述符的狀態標志IRQ_INPROGRESS),如果有就調用handle_IRQ_event來處理。handle_IRQ_event將直接調用相應的中斷處理句柄來完成中斷處理。
隨著微處理器技術的發展,嵌入式系統已經成為計算機應用領域的一個重要的組成部分。Linux雖然為分時操作系統,但由于其功能強大、源代碼開放以及可移植性強等優勢,已成為日益流行的嵌入式實時操作系統的解決方案,然而,在實時方面它還不能很好地滿足實時系統方面的需要,其本身僅僅提供了一些實時處理的支持。為使Linux滿足實時應用的要求,常用的方法是通過對Linux的內核進行裁減和修改,使其能夠滿足實時性的要求。目前,我們根據實際需要對于Linux采用以下方法進行改進。
2、實現低延遲
使用兩種方法來實現低延遲:一種就是鎖分解,即把大循環中保持的鎖分解為每一輪循環中都獲得鎖和釋放鎖,典型的代碼結構示例如下:
另一種是增加搶占點,即自愿被搶占。增加搶占點之后:
語句cond_resched()將判斷是否有進程需要搶占當前進程,如果是將立即發生調度,這就是增加的搶占點,它支持四種搶占模式:
?。?).No Forced Preemption (Server),這種模式等同于沒有使能搶占選項的標準內核,主要適用于科學計算等服務器環境。
?。?).Voluntary Kernel Preemption (Desktop),這種模式使能了自愿搶占,但仍然失效搶占內核選項,它通過增加搶占點縮減了搶占延遲,因此適用于一些需要較好的響應性的環境,如桌面環境,當然這種好的響應性是以犧牲一些吞吐率為代價的。
?。?).Preemptible Kernel (Low-Latency Desktop),這種模式既包含了自愿搶占,又使能了可搶占內核選項,因此有很好的響應延遲,實際上在一定程度上已經達到了軟實時性。它主要適用于桌面和一些嵌入式系統,但是吞吐率比模式2更低。
(4).Complete Preemption (Real-Time),這種模式使能了所有實時功能,因此完全能夠滿足軟實時需求,它適用于延遲要求為100微秒或稍低的實時系統。
實現實時是以犧牲系統的吞吐率為代價的,因此實時性越好,系統吞吐率就越低。
3、中斷線程化
中斷線程化是實現Linux實時性的一個重要步驟,在Linux標準內核中,中斷是最高優先級的執行單元,不管內核當時處理什么,只要有中斷事件,系統將立即響應該事件并執行相應的中斷處理代碼,除非當時中斷關閉。因此,如果系統有嚴重的網絡或I/O負載,中斷將非常頻繁,后發生的實時任務將很難有機會運行,也就是說,毫無實時性可言。中斷線程化之后,中斷將作為內核線程運行而且賦予不同的實時優先級,實時任務可以有比中斷線程更高的優先級,這樣,實時任務就可以作為最高優先級的執行單元來運行,即使在嚴重負載下仍有實時性保證。
中斷線程化的另一個重要原因是spinlock被mutex取代。中斷處理代碼中大量地使用了spinlock,當spinlock被mutex取代之后,中斷處理代碼就有可能因為得不到鎖而需要被掛到等待隊列上,但是只有可調度的進程才可以這么做,如果中斷處理代碼仍然使用原來的spinlock,則spinlock取代mutex的努力將大打折扣,因此為了滿足這一要求,中斷必須被線程化,包括IRQ和softirq。
中斷線程化的實現方法是:對于IRQ,在內核初始化階段init(該函數在內核源碼樹的文件init/main.c中定義)調用init_hardirqs(該函數在內核源碼樹的文件kernel/irq/manage.c中定義)來為每一個IRQ創建一個內核線程,IRQ號為0的中斷賦予實時優先級49,IRQ號為1的賦予實時優先級48,依次類推直到25,因此任何IRQ線程的最低實時優先級為25。原來的do_IRQ被分解成兩部分,架構相關的放在類似于arch/*/kernel/irq.c的文件中,名稱仍然為do_IRQ,而架構獨立的部分被放在IRQ子系統的位置kernel/irq/handle.c中,名稱為_do_IRQ。當發生中斷時,CPU將執行do_IRQ來處理相應的中斷,do_IRQ將做了必要的架構相關的處理后調用_do_IRQ。函數_do_IRQ將判斷該中斷是否已經被線程化(如果中斷描述符的狀態字段不包含SA_NODELAY標志說明中斷被線程化了),如果是將喚醒相應的處理線程,否則將直接調用handle_IRQ_event(在IRQ子系統位置的kernel/irq/handle.c文件中)來處理。對于已經線程化的情況,中斷處理線程被喚醒并開始運行后,將調用do_hardirq(在源碼樹的IRQ子系統位置的文件kernel/irq/manage.c中定義)來處理相應的中斷,該函數將判斷是否有中斷需要被處理(中斷描述符的狀態標志IRQ_INPROGRESS),如果有就調用handle_IRQ_event來處理。handle_IRQ_event將直接調用相應的中斷處理句柄來完成中斷處理。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式Linux路線
- 【嵌入式Linux(基礎篇)】從標準Linux到嵌入式Linux + 嵌入式Linux知識架構
- 嵌入式linux實時性研究,嵌入式Linux內核實時性研究及應用
- 嵌入式Linux實時性能優化
- 【嵌入式】構建嵌入式Linux系統(uboot、內核、文件系統)
- 一種實時嵌入式多任務微內核的分析與改進
- Linux+嵌入式實時操作系統開發與應用
- 嵌入式Linux應用程序例程
- 嵌入式Linux下的實時性增強方案
- 嵌入式Linux通信中構件技術應用研究
- 嵌入式Linux內核實時性研究及改進
- 改善嵌入式Linux實時性能的方法研究
- 基于RTAI的嵌入式Linux硬實時性能的研究與實現
- 基于Linux的嵌入式應用淺析
- 嵌入式Linux 實時性分析與實時性改進
- 米爾科技嵌入式實時操作系統介紹 2179次閱讀
- 英創信息技術嵌入式Linux串口通訊的C++設計概述 2180次閱讀
- 基于嵌入式Linux內核的ARM9運行實現方式介紹 1475次閱讀
- 基于嵌入式軟件的JNI技術應用解析 1020次閱讀
- 基于Yocto Project的定制嵌入式Linux產品設計淺析 1w次閱讀
- 從RTOS到嵌入式Linux的應用移植步驟以及相關的關鍵技術分析 3186次閱讀
- 關于嵌入式系統的特點和Linux內核的實時應用分析 1037次閱讀
- 怎么才能更好的理解嵌入式操作系統Linux實時化技術? 1174次閱讀
- 什么是嵌入式Linux內核調試技術?嵌入式開發又面臨著哪些問題? 1134次閱讀
- 基于Linux2.6內核的實時性增強方案設計 930次閱讀
- 關于Linux嵌入式操作系統的優勢特征詳解 5521次閱讀
- 以嵌入式Linux為基礎的機車狀態實時檢測系統設計詳解 1067次閱讀
- 關于嵌入式Linux操作系統的內核調試技術詳解 1571次閱讀
- 基于Linux上進行改進的具有實時應用能力的現代嵌入式操作系統解決方案詳解 843次閱讀
- 基于Linux的嵌入式實時操作系統的研究 2298次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多