新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 改善Linux內核實時性方法的研究與實現

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

        作者: 時間:2014-08-14 來源:網絡 收藏

          #define TYPE_EQUAL(lock, type)

        本文引用地址:http://www.104case.com/article/261723.htm

          __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中標記等待該鎖的所有任務;而如果不能獲得鎖,則把當前任務放到鎖的優先級等待隊列中,直到鎖的擁有者釋放該鎖,喚醒等待隊列中最高優先級的任務進入臨界區。為了防止優先級反轉,可以改變鎖的當前擁有者的優先級為鎖的等待隊列中任務的最高優先級。

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

          3 改進后的內核能測試

          對進行了實時化改造后,需要對其進行測試來確定系統是否符合實際應用的需要。能測試主要包括測試內核的最大中斷延遲和任務調度時間延遲兩個重要的指標。

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

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

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

          4 結束語

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

          本文作者的創新點:在標準的可搶占內核上對其中斷處理機制進行線程化改造,大大的減小了中斷響應時間。另外對內核同步機制采用新的自旋鎖使得內核可搶占性能更加優異,改進后的內核可以適用于對Linux內核實時性要求更高的場合。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程



        上一頁 1 2 下一頁

        關鍵詞: Linux 實時性 Linux2.6

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 万年县| 泰来县| 大竹县| 揭东县| 临泽县| 泸州市| 临西县| 高青县| 孟津县| 渝北区| 宝兴县| 锦屏县| 富宁县| 马尔康县| 财经| 清河县| 宜兴市| 环江| 疏勒县| 金昌市| 封丘县| 上栗县| 连南| 耒阳市| 洞头县| 合阳县| 柳州市| 扎兰屯市| 通海县| 泗洪县| 蒙山县| 长治市| 高安市| 红河县| 漾濞| 乌拉特中旗| 郁南县| 都兰县| 尚义县| 黑山县| 饶阳县|