新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux下的實時性增強方案

        嵌入式Linux下的實時性增強方案

        作者: 時間:2011-01-13 來源:網絡 收藏

        由于Linux內核底層的臨界資源是不可搶占的,使用mutex替換spinlock的過程中,這部分可以保留,仍由不可搶占的 spinlock保護,如:保護硬件寄存器的鎖、調度器的運行隊列鎖等。不可搶占的spinlock被重新命名為raw_spinlock_t。 spin_lock被宏定義為:

        #define spin_lock(lock) PICK_OP(raw_spinlock_t,spin,_lock,lock)

        函數PICK_OP支持兩種鎖共存機制,PICK_OP在編譯階段將鎖操作轉化為mutex或者spinlock:

        #define PICK_OP(type, optype, op, lock)

        do {

        if (TYPE_EQUAL((lock), type))

        _raw_##optype##op((type *)(lock));

        else if (TYPE_EQUAL(lock, spinlock_t))

        //調用gcc的內嵌函數__builtin_types_compatible_p()

        _spin##op((spinlock_t *)(lock));

        else __bad_spinlock_type();

        } while (0)

        #define TYPE_EQUAL(lock, type)

        __builtin_types_compatible_p(typeof(lock), type *)

        gcc的內嵌函數__builtin_types_compatible_p用于判斷一個變量的類型是否為某指定的類型,如果類型為 spinlock_t,將運行函數_spin_lock;類型為raw_spinlock_t,將運行函數_raw_spin_lock。

        實時rt_mutex在具體應用中,一個高優先級任務搶占該鎖的同時,把先前的鎖擁有者添加到互斥鎖等待隊列中,并在當前擁有該鎖的任務 task_struct中標記等待該鎖的所有任務;反之,不能得到該鎖就把當前任務添加到鎖的優先級等待隊列中,直到喚醒執行。為了防止優先級逆轉,可以改變鎖的當前擁有者的優先級為鎖的等待隊列中任務的最高優先級。

        rt_mutex可以使高優先級任務利用搶占鎖進入臨界區,這樣內核不可搶占區的數量和范圍大大縮小,內核可搶占性有了很大的提高,且降低了實時高優先級任務的搶占延遲,改善了系統的實時性能。

        2.3 可搶占大內核鎖設計

        大內核鎖BKL(Big Kernel Lock)實質上也是spinlock,它用于保護整個內核,該鎖保持時間較長,對系統的實時性能影響很大[6]。采用Ingo Molnar的實時化方法,BKL使用semaphore實現,結構定義如下代碼:

        struct semaphore {

        atomic_t count;

        struct rt_mutex lock; //實時互斥鎖的使用

        };

        由結構體發現,在BKL實現中利用了實時互斥鎖rt_mutex,在改進后的spinlock結構體spinlock_t中也利用了實時互斥鎖 rt_mutex,因此可搶占大內核鎖和新的spinlock共用了低層的處理代碼。使用semaphore之后,大內核鎖就可搶占了。

        3 內核實時性測試

        針對Linux2.6內核,本文并沒有作出對內核調度算法的修正,只是探討了中斷運行機制、自旋鎖及大內核鎖技術在系統實時性能上的局限性,所以實驗測試主要測試中斷延遲時間和任務響應時間。實驗環境: Intel 2 GHz CPU,256 DDR內存,Kernel 2.6.22版本。測試結果如表1所示。
        1.jpg

        由表可知,在中斷服務程序中寫入標記,測試中斷觸發至中斷服務程序執行平均響應時間,標準Linux2.6內核平均中斷響應時間為182 μs,改進后Linux2.6內核為14 μs。采用開源軟件LMbench3.0 測試系統任務調度延遲時間,標準Linux2.6內核平均任務響應時間為1 260 μs,改進后Linux2.6內核為162μs。由此可見,改進策略在一定程度上大大減小了中斷延遲和任務調度時間,有利于改善移動機器人任務處理的實時性能。

        本文基于Linux2.6內核的關中斷、中斷優先級、內核的不可搶占性以及大內核鎖保持時間過長等問題進行了實時性分析,提出了相應的改進方法。利用中斷線程化、互斥鎖的應用及大內核鎖的改進等技術提高了系統的實時性能,降低了內核中斷延遲和調度延遲。改進后的內核在移動機器人控制器平臺中有很好的應用價值,提高了機器人控制的實時性能。

        本文引用地址:http://www.104case.com/article/151096.htm
        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 3 下一頁

        關鍵詞: 嵌入式

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 正蓝旗| 武安市| 育儿| 聂荣县| 福贡县| 罗田县| 调兵山市| 辽宁省| 双流县| 南皮县| 军事| 抚宁县| 江达县| 合肥市| 郴州市| 东山县| 济源市| 太原市| 万山特区| 罗田县| 甘德县| 酉阳| 凉城县| 西宁市| 南康市| 黔西| 拉萨市| 林州市| 屏南县| 南阳市| 高青县| 汝南县| 高台县| 汶川县| 长顺县| 卢龙县| 凭祥市| 呼和浩特市| 沙坪坝区| 耿马| 许昌市|