在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 嵌入式Linux實時技術(shù)改進與實現(xiàn)

            嵌入式Linux實時技術(shù)改進與實現(xiàn)

            作者: 時間:2009-04-23 來源:網(wǎng)絡 收藏

            4、spinlock轉(zhuǎn)換成mutex

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

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

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

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

            5、優(yōu)先級繼承和死鎖檢測

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

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

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

            所謂優(yōu)先級頂棚,就是根據(jù)靜態(tài)分析確定一個spinlock的可能擁有者的最高優(yōu)先級,然后把spinlock的優(yōu)先級頂棚設(shè)置為該確定的值,每次當進程獲得該spinlock后,就將該進程的優(yōu)先級設(shè)置為spinlock的優(yōu)先級頂棚值。

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

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

            6、

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

            struct semaphore {

            atomic_t count;

            int sleepers;

            wait_queue_head_t wait;

            };

            但對于第四種搶占模式,其結(jié)構(gòu)為:

            struct semaphore {

            atomic_t count;

            struct rt_mutex lock;

            };

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

            7、結(jié)論

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

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

            上一頁 1 2 3 下一頁

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉