国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

改善Linux內核實時性方法的研究與實現

發布時間:2010-10-10 14:39    發布者:conniede
關鍵詞: linux , 中斷線 , 自旋鎖
1 引言

由于Linux具有功能強大、源代碼開放、支持多種硬件平臺、模塊化的設計方案以及豐富的開發工具支持等特點,在實際系統中,得到了廣泛的應用。但由于其最初的設計目標為通用分時操作系統,對于實時系統而言,Linux仍然存在核心不可搶占、關中斷、時鐘粒度粗糙等缺陷。為了使其應用于嵌入式系統,實時控制等領域,越來越多的廠家和研究機構熱衷于改善其實時性,構建基于Linux的實時操作系統。

在Linux 2.4和以前的版本,內核是不可搶占的,也就是說,如果當前任務運行在內核態,即使當前有更緊急的任務需要運行,當前任務也不能被搶占。因此那個緊急任務必須等到當前任務執行完內核態的操作返回用戶態后或當前任務因需要等待某些條件滿足而主動讓出CPU才能被考慮執行,這很明顯嚴重影響搶占延遲。在Linux 2.6中,內核已經可以搶占,因而實時性得到了加強。但是內核中仍有大量的不可搶占區域, 如由自旋鎖spinlock保護的臨界區,以及一些失效搶占的臨界區。另一個影響Linux實時性的因素就是關中斷,同步操作中使用的關中斷指令增大了中斷延遲,這樣很多由中斷驅動的實時任務得不到及時的執行,系統的實時性能得不到保障。因此提高Linux的可搶占性,改進其中斷機制有利于改善內核的實時性。

本文詳細闡述了這些措施的原理并基于標準Linux2.6內核加以實現,最后通過測試,驗證了此改進方法的效果。

2 中斷線程化

2.1 Linux中斷對內核實時性的影響

中斷處理是由內核執行的最敏感的任務之一,當內核正打算去做一些別的事情時,中斷隨時會到來,中斷當前的任務進而執行中斷處理程序。因此內核的目標就是讓中斷盡可能快的處理完,盡其所能把更多的處理工作向后推遲。為此Linux把中斷的處理分成上半部分和下半部分。上半部分立即執行,下半部分將喚醒相應的和中斷處理相關的進程稍后執行。雖然這種機制使得中斷處理變得更加高效和易于維護,但是對于系統如果有嚴重的網絡負載或其他I/O負載時,中斷將非常頻繁,內核當前的實時任務會被不停中斷,這對于Linux的實時應用來說是不可接受的。

另外,Linux為了使內核同步而采用了關中斷,在內核的關中斷區域,中斷是被屏蔽的。即使此時有通過中斷驅動的實時任務也得不到響應,增加了實時任務的中斷延遲。實時化后的Linux中,自旋鎖被互斥鎖取代,而中斷處理代碼中大量運用了自旋鎖,中斷處理代碼就有可能因為得不到鎖而需要被掛到該鎖的等待隊列上去。但是只有可調度的進程才可這么做,如果中斷處理代碼仍然使用原來的自旋鎖,那么互斥鎖取代自旋鎖改進內核實時性的努力將大打折扣。

線程化的中斷管理可以有效的解決這些問題。中斷線程化后,中斷將作為內核線程運行而且賦予不同的實時優先級,實時任務可以有比中斷線程更高的優先級,這樣,實時任務就可以作為最高優先級的執行單元來運行,即使在嚴重負載下仍有實時性保證。另一方面中斷處理線程也可以因為在內核同步中得不到鎖而掛載到鎖的等待隊列中。很多關中斷就不必真正的禁止硬件中斷了,而是禁止內核進程搶占,這樣就可以減小中斷延遲。

2.2 設計與實現

Linux提供了kthread_create創建內核線程,該內核線程在內核空間執行,因此在調度時沒有用戶空間和內核空間切換,使得其運行更為高效。中斷線程化要做的工作是創建中斷線程以及中斷的處理。中斷線程是在系統初始化或者調用requestirq函數時通過kthread_create函數創建的。其過程等同于如下功能代碼:


對于非緊急中斷,kthread_create為其創建一個內核線程,并且根據中斷號為其賦予一定的靜態實時優先級和設置其調度策略。中斷到來后,內核并不是直接進入中斷服務函數,而是通過設置調度標志告知內核,內核調度程序比較該中斷線程的優先級和當前運行任務的優先級,作出調度決策。因此當前正在運行的高優先級的實時任務不會受中斷的太大的影響,保證了實時任務運行的可靠性和準確性,中斷線程將會其他合適的時刻被調度執行,而且Linux2.6內核的O(1)調度機制也不會因為內核線程數的增加在調度時間上額外增加調度開銷。對于緊急的中斷(比如時鐘中斷),內核保持原來的中斷處理方式,而不為其創建中斷線程,這樣保證了緊急中斷的快速響應。

3 自旋鎖改互斥鎖

3.1 新的自旋鎖設計

為了同步不同內核控制路徑對共享資源的訪問,標準Linux內核提供了很多內核同步原語,其中自旋鎖spinlock是一種廣泛應用于可搶占內核,SMP環境下的內核同步機制。在spinlock的保持期間,內核是搶占失效的。被自旋鎖保護的區域稱為臨界區,內核中大量使用了spinlock,存在大量的內核不可搶占的臨界區,這將嚴重影響系統的實時性,我們使用新的實時互斥鎖rt_mutex來替換spinlock,即讓臨界區內內核可搶占。其結構體如下:  

類型raw_spinlock_t就是原來的spinlock_t。新的自旋鎖還是使用spinlock_t來標記。在結構struct rt_mutex中的wait_list字段就是優先級化的等待隊列。Owner字段為擁有該鎖的進程的環境信息。mutex比spinlock優越的地方有這么幾點:(1)當遇到一個鎖住的臨界區時,任務被掛起到鎖的優先級等待隊列wait_list中,臨界區解鎖時等待任務被激活。(2)內核將一個鎖住的臨界區和一個任務關聯,當獲得互斥鎖時將任務的標識存入鎖中。(3)臨界區可以在被保護的同時不禁止搶占。(4)在被鎖住的臨界區中可以實現優先級繼承。


3.2 實時互斥鎖的操作

并不是所有內核中的自旋鎖都可以轉換為互斥鎖的,一些底層的臨界區必須是不可搶占的,所以必須由不可搶占的自旋鎖保護,比如:保護硬件寄存器的鎖、調度器的運行隊列鎖、和其它不可搶占自旋鎖嵌套的鎖。實時內核中,不可搶占的自旋鎖與RT互斥鎖共存,不可搶占的自旋鎖被重命為raw_spinlock_t。spin_lock函數利用gcc的內嵌技術根據鎖的類型通過預處理選擇具體的鎖執行函數。預處理器使用

__builtin_types_compatible函數,由宏TYPE_EQUAL調用:

#define TYPE_EQUAL(lock, type)

__builtin_types_compatible_p(typeof(lock), type *)

函數映射結構PICK_OP是允許兩種鎖共存的機制,PICK_OP在編譯階段將鎖操作轉化為合適的種類(mutex或者spinlock):

根據宏處理的結果,如果類型為spinlock_t,將運行函數_spin_lock,而如果類型為raw_spinlock_t,將運行函數_raw_spin_lock。對于實時rt_mutex獲取,當前任務由于優先級高如果可以搶占該鎖,則把鎖的先前擁有者添加到該鎖的等待隊列中并且在新的鎖擁有者的task_struct中標記等待該鎖的所有任務;而如果不能獲得鎖,則把當前任務放到鎖的優先級等待隊列中,直到鎖的擁有者釋放該鎖,喚醒等待隊列中最高優先級的任務進入臨界區。為了防止優先級反轉,可以改變鎖的當前擁有者的優先級為鎖的等待隊列中任務的最高優先級。

實時互斥鎖的應用使得高優先級的任務通過搶占鎖可以進入臨界區,這樣內核的不可搶占區的數量和范圍都大大縮小,內核可搶占性有了很大的提高,充分減小了實時高優先級任務的搶占延遲。

4 改進后的內核實時性能測試

對Linux進行了實時化改造后,需要對其進行測試來確定系統是否符合實際應用的需要。實時性能測試主要包括測試內核的最大中斷延遲和任務調度時間延遲兩個重要的指標。
中斷延遲反映的是中斷信號發生到內核對中斷做出響應所需要的時間,通過利用并口的7號中斷,短路并口的9-10腳,其中10腳為中斷引腳,9口為并口數據口的高位,往IO口0X378寫8就可以引發中斷,然后在中斷服務程序里往0x378寫0就會重新拉低中斷引腳電平。用高精度示波器測量這個脈沖的寬度來測得中斷延遲時間。對于賽揚650MHz,內存128M的工控平臺,負載為拷貝CF卡情況下,標準Linux2.6內核最長中斷延遲為240us,而改進后的實時內核最長中斷延遲為16us。

采用開源軟件LMbench3.0測試系統調度延遲時間。測試機器配置為:CPU ,Intel P4 2.8GHz,內存512M,負載情況為拷貝硬盤、訪問網絡。標準Linux2.6內核調度延遲為1038us,而改進后的內核的調度延遲為140us。

可見改進后的內核的最長中斷延遲和調度延遲比標準內核要短很多,內核的實時性能有了很大的提高。

5 結束語

針對標準Linux2.6內核由于中斷關閉時間過長、內核臨界不可搶占區過大而多,明顯存在實時性能方面的不足,提出了改進其實時性的方法,實現了實時Linux內核的中斷線程化以及新的內核同步自旋鎖,使其具有更短的中斷延遲和調度延遲。

本文作者的創新點:在標準的Linux2.6可搶占內核上對其中斷處理機制進行線程化改造,大大的減小了中斷響應時間。另外對內核同步機制采用新的自旋鎖使得內核可搶占性能更加優異,改進后的內核可以適用于對Linux內核實時性要求更高的場合。
本文地址:http://www.qingdxww.cn/thread-31244-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節省時間和空間
  • Dev Tool Bits——使用DVRT協議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監視
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 2021久久伊人精品中文字幕有 | 国产精品成人观看视频网站 | 四虎家庭影院 | 91三级在线 | 国产资源在线看 | 天天澡天天碰天天狠伊人五月 | 亚洲成年网站在线观看 | 久久亚洲精品国产精品婷婷 | 香蕉在线观看视频 | 亚洲网站在线 | 久久国产精品999 | 国产91高清 | 欧美视频亚洲视频 | 久久精品国产精品亚洲精品 | 亚洲第一成人在线 | 亚洲一区日韩二区欧美三区 | 久久 精品 一区二区 | 欧美不卡视频 | 四虎国产精品4hu永久 | 久久韩国精品韩国专区 | 国产日韩欧美二区 | 亚洲福利天堂网福利在线观看 | 四虎影视免费在线观看 | 两个人的视频在线观看免费完整版 | 免看一级a毛片一片成人不卡 | 免费在线一级毛片 | 日韩高清一区二区 | 精品在线小视频 | 国产乱码精品一区二区三上 | 亚洲精品成人 | 中文字幕日韩精品一区口 | 狠狠色综合网站 | 亚洲系列中文字幕一区二区 | 免费观看国产精品视频 | 福利视频欧美一区二区三区 | 日本高清中文 | 久久国产精品国语对白 | 亚洲国产成人99精品激情在线 | 久久精品免费i 国产 | 久久久不卡国产精品一区二区 | 狠狠色丁香久久婷婷综合丁香 |