<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux實(shí)時(shí)技術(shù)改進(jìn)與實(shí)現

嵌入式Linux實(shí)時(shí)技術(shù)改進(jìn)與實(shí)現

作者: 時(shí)間:2009-04-23 來(lái)源:網(wǎng)絡(luò ) 收藏

4、spinlock轉換成mutex

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

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

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

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

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

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

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

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

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

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

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

6、

大內核鎖(BKL---Big Kernel Lock)實(shí)質(zhì)上也是spinlock,只是它一般用于保護整個(gè)內核,該鎖的保持時(shí)間比較長(cháng),因此它對整個(gè)系統的性影響是非常大的,大內核鎖使用了semaphore來(lái),如果內核配置為前面三種搶占模式,struct semaphore是架構相關(guān)的,如對于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、結論

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

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

上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>