新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式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在具體應用中,一個高優(yōu)先級任務搶占該鎖的同時,把先前的鎖擁有者添加到互斥鎖等待隊列中,并在當前擁有該鎖的任務 task_struct中標記等待該鎖的所有任務;反之,不能得到該鎖就把當前任務添加到鎖的優(yōu)先級等待隊列中,直到喚醒執(zhí)行。為了防止優(yōu)先級逆轉,可以改變鎖的當前擁有者的優(yōu)先級為鎖的等待隊列中任務的最高優(yōu)先級。

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

        2.3 可搶占大內核鎖設計

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

        struct semaphore {

        atomic_t count;

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

        };

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

        3 內核實時性測試

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

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

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

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

        上一頁 1 2 3 下一頁

        關鍵詞: 嵌入式

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 长宁区| 奉新县| 临武县| 恩施市| 乌鲁木齐县| 昌平区| 红安县| 安康市| 广南县| 东乌珠穆沁旗| 河源市| 淅川县| 新巴尔虎右旗| 麻城市| 吉林市| 文山县| 上杭县| 顺义区| 郯城县| 禄丰县| 孝昌县| 和硕县| 民县| 河东区| 南充市| 石景山区| 孝昌县| 边坝县| 双辽市| 洮南市| 岱山县| 长乐市| 石门县| 灵台县| 和静县| 博客| 邢台市| 阜新市| 佛坪县| 广汉市| 夏津县|