• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux實時技術改進與實現

    嵌入式Linux實時技術改進與實現

    作者: 時間:2009-04-23 來源:網絡 收藏

    4、spinlock轉換成mutex

    spinlock是一個高效的共享資源同步機制,在SMP(對稱多處理器Symmetric Multiple Proocessors)的情況下,它用于保護共享資源,如全局的數據結構或一個只能獨占的硬件資源。但是spinlock保持期間將使搶占失效,用spinlock保護的區域稱為臨界區(Critical Section),在內核中大量地使用了spinlock,有大量的臨界區存在,因此它們將嚴重地影響著系統的性。為此使用mutex來替換spinlock,它的意圖是讓spinlock可搶占,但是可搶占后將產生很多后續影響。

    Spinlock失效搶占的目的是避免死鎖。Spinlock如果可搶占了,一個spinlock的競爭者將可能搶占該spinlock的保持者來運行,但是由于得不到spinlock將自旋在那里,如果競爭者的優先級高于保持者的優先級,將形成一種死鎖的局面,因為保持者無法得到運行而永遠不能釋放spinlock,而競爭者由于不能得到一個不可能釋放的spinlock而永遠自旋在那里。

    由于中斷處理函數也可以使用spinlock,如果它使用的spinlock已經被一個進程保持,中斷處理函數將無法繼續進行,從而形成死鎖,這樣的spinlock在使用時應當中斷失效來避免這種死鎖的情況發生。標準linux內核就是這么做的,之后,中斷失效就沒有必要,因為遇到這種狀況后,中斷線程將掛在等待隊列上并放棄CPU讓別的線程或進程來運行。

    等待隊列就是解決這種死鎖僵局的方法,讓每個spinlock都有一個等待隊列,該等待隊列是按進程或線程的優先級排隊的。如果一個進程或線程競爭的spinlock已經被另一個線程保持,它將把自己掛在該spinlock的優先級化的等待隊列上,然后發生調度把CPU讓給別的進程或線程。

    5、優先級繼承和死鎖檢測

    spinlock被mutex化后會產生優先級逆轉(Priority Inversion)現象。所謂優先級逆轉,就是優先級高的進程由于優先級低的進程保持了競爭資源被迫等待,而讓中間優先級的進程運行,優先級逆轉將導致高優先級進程的搶占延遲增大,中間優先級的進程的執行時間的不確定性導致了高優先級進程搶占延遲的不確定性,因此為了保證性,必須消除優先級逆轉現象。

    優先級繼承協議(Priority Inheritance Protocol)和優先級頂棚協議(Priority Ceiling Protocol)就是專門針對優先級逆轉問題提出的解決辦法。

    所謂優先級繼承,就是spinlock的保持者將繼承高優先級的競爭者進程的優先級,從而能先于中間優先級進程運行,盡可能快地釋放鎖,這樣高優先級進程就能很快得到競爭的spinlock,使得搶占延遲更確定,更短。

    所謂優先級頂棚,就是根據靜態分析確定一個spinlock的可能擁有者的最高優先級,然后把spinlock的優先級頂棚設置為該確定的值,每次當進程獲得該spinlock后,就將該進程的優先級設置為spinlock的優先級頂棚值。

    Spinlock被mutex化后引入的另一個問題就是死鎖,典型的死鎖有兩種:

    一種為自鎖,即一個spinlock保持者試圖獲得它已經保持的鎖,很顯然,這會導致該進程無法運行而死鎖。另一種為非順序鎖而導致的,即進程P1已經保持了spinlock LOCKA但是要獲得進程P2已經保持的spinlock LOCKB,而進程P2要獲得進程P1已經保持的spinlock LOCKA,這樣進程P1和P2都將因為需要得到對方擁有的但永遠不可能釋放的spinlock而死鎖。對這兩種情況都要進行檢測,一旦發生這種死鎖,內核將輸出死鎖執行路徑并panic。

    6、

    大內核鎖(BKL---Big Kernel Lock)實質上也是spinlock,只是它一般用于保護整個內核,該鎖的保持時間比較長,因此它對整個系統的性影響是非常大的,大內核鎖使用了semaphore來,如果內核配置為前面三種搶占模式,struct semaphore是架構相關的,如對于x86,結構定義如下:

    struct semaphore {

    atomic_t count;

    int sleepers;

    wait_queue_head_t wait;

    };

    但對于第四種搶占模式,其結構為:

    struct semaphore {

    atomic_t count;

    struct rt_mutex lock;

    };

    注意新的spinlock定義也包含字段struct rt_mutex lock,因此可搶占大內核鎖和新的spinlock共用了低層的處理代碼。使用semaphore之后,大內核鎖就可搶占了。

    7、結論

    能的逐步完善,必將大大促進在工業控制、后PC時代信息電器等領域的廣泛應用,應用的需要也會進一步促進大量新型實時算法的出現。通過對的改動,就可以開發出一種可靠的且廉價的硬實時操作系統,具有很好的發展和應用前景。本文作者的創新點:通過延遲,優先級繼承并增加搶占機制,改善了系統的,為系統開發打下了基礎。

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

    上一頁 1 2 3 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 七台河市| 焦作市| 威远县| 广平县| 本溪市| 格尔木市| 鹤壁市| 梅河口市| 长海县| 崇明县| 平遥县| 无为县| 洛浦县| 勐海县| 平潭县| 股票| 从化市| 平山县| 若羌县| 财经| 莲花县| 兖州市| 万源市| 波密县| 贡嘎县| 资源县| 蓬安县| 札达县| 濮阳市| 德惠市| 巍山| 托里县| 平利县| 桐柏县| 南和县| 泾阳县| 集安市| 栾川县| 阳朔县| 信丰县| 五台县|