www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]1、簡介隨著微處理器技術(shù)的發(fā)展,嵌入式系統(tǒng)已經(jīng)成為計算機應(yīng)用領(lǐng)域的一個重要的組成部分。Linux雖然為分時操作系統(tǒng),但由于其功能強大、源代碼開放以及可移植性強等優(yōu)勢,已

1、簡介

隨著微處理器技術(shù)的發(fā)展,嵌入式系統(tǒng)已經(jīng)成為計算機應(yīng)用領(lǐng)域的一個重要的組成部分。Linux雖然為分時操作系統(tǒng),但由于其功能強大、源代碼開放以及可移植性強等優(yōu)勢,已成為日益流行的嵌入式實時操作系統(tǒng)的解決方案,然而,在實時方面它還不能很好地滿足實時系統(tǒng)方面的需要,其本身僅僅提供了一些實時處理的支持。為使Linux滿足實時應(yīng)用的要求,常用的方法是通過對Linux的內(nèi)核進行裁減和修改,使其能夠滿足實時性的要求。目前,我們根據(jù)實際需要對于Linux采用以下方法進行改進。

2、實現(xiàn)低延遲

使用兩種方法來實現(xiàn)低延遲:一種就是鎖分解,即把大循環(huán)中保持的鎖分解為每一輪循環(huán)中都獲得鎖和釋放鎖,典型的代碼結(jié)構(gòu)示例如下:

鎖分解前:

spin_lock(&x_lock);

for (…) {some operations;

…}

spin_unlock(&x_lock);

鎖分解后:

for (…) { spin_lock(&x_lock);

some operations;

spin_unlock(&x_lock);}

另一種是增加搶占點,即自愿被搶占。增加搶占點之后:

/* Do the write .. */

for (;;) {

size_t size = count;

if (size > chunk)

size = chunk;

ret = -EFAULT;

if (copy_from_user(tty->write_buf, buf, size))

break;

lock_kernel();

ret = write(tty, file, tty->write_buf, size);

unlock_kernel();

if (ret <= 0)

break;

written += ret;

buf += ret;

count -= ret;

if (!count)

break;

ret = -ERESTARTSYS;

if (signal_pending(current))

break;

cond_resched();

}

語句cond_resched()將判斷是否有進程需要搶占當(dāng)前進程,如果是將立即發(fā)生調(diào)度,這就是增加的搶占點,它支持四種搶占模式:

(1).No Forced Preemption (Server),這種模式等同于沒有使能搶占選項的標(biāo)準內(nèi)核,主要適用于科學(xué)計算等服務(wù)器環(huán)境。

(2).Voluntary Kernel Preemption (Desktop),這種模式使能了自愿搶占,但仍然失效搶占內(nèi)核選項,它通過增加搶占點縮減了搶占延遲,因此適用于一些需要較好的響應(yīng)性的環(huán)境,如桌面環(huán)境,當(dāng)然這種好的響應(yīng)性是以犧牲一些吞吐率為代價的。

(3).Preemptible Kernel (Low-Latency Desktop),這種模式既包含了自愿搶占,又使能了可搶占內(nèi)核選項,因此有很好的響應(yīng)延遲,實際上在一定程度上已經(jīng)達到了軟實時性。它主要適用于桌面和一些嵌入式系統(tǒng),但是吞吐率比模式2更低。

(4).Complete Preemption (Real-Time),這種模式使能了所有實時功能,因此完全能夠滿足軟實時需求,它適用于延遲要求為100微秒或稍低的實時系統(tǒng)。

實現(xiàn)實時是以犧牲系統(tǒng)的吞吐率為代價的,因此實時性越好,系統(tǒng)吞吐率就越低。

3、中斷線程

中斷線程化是實現(xiàn)Linux實時性的一個重要步驟,在Linux標(biāo)準內(nèi)核中,中斷是最高優(yōu)先級的執(zhí)行單元,不管內(nèi)核當(dāng)時處理什么,只要有中斷事件,系統(tǒng)將立即響應(yīng)該事件并執(zhí)行相應(yīng)的中斷處理代碼,除非當(dāng)時中斷關(guān)閉。因此,如果系統(tǒng)有嚴重的網(wǎng)絡(luò)或I/O負載,中斷將非常頻繁,后發(fā)生的實時任務(wù)將很難有機會運行,也就是說,毫無實時性可言。中斷線程化之后,中斷將作為內(nèi)核線程運行而且賦予不同的實時優(yōu)先級,實時任務(wù)可以有比中斷線程更高的優(yōu)先級,這樣,實時任務(wù)就可以作為最高優(yōu)先級的執(zhí)行單元來運行,即使在嚴重負載下仍有實時性保證。

中斷線程化的另一個重要原因是spinlock被mutex取代。中斷處理代碼中大量地使用了spinlock,當(dāng)spinlock被mutex取代之后,中斷處理代碼就有可能因為得不到鎖而需要被掛到等待隊列上,但是只有可調(diào)度的進程才可以這么做,如果中斷處理代碼仍然使用原來的 spinlock,則spinlock取代mutex的努力將大打折扣,因此為了滿足這一要求,中斷必須被線程化,包括IRQ和softirq。

中斷線程化的實現(xiàn)方法是:對于IRQ,在內(nèi)核初始化階段init(該函數(shù)在內(nèi)核源碼樹的文件init/main.c中定義)調(diào)用 init_hardirqs(該函數(shù)在內(nèi)核源碼樹的文件kernel/irq/manage.c中定義)來為每一個IRQ創(chuàng)建一個內(nèi)核線程,IRQ號為0 的中斷賦予實時優(yōu)先級49,IRQ號為1的賦予實時優(yōu)先級48,依次類推直到25,因此任何IRQ線程的最低實時優(yōu)先級為25。原來的do_IRQ被分解成兩部分,架構(gòu)相關(guān)的放在類似于arch/*/kernel/irq.c的文件中,名稱仍然為do_IRQ,而架構(gòu)獨立的部分被放在IRQ子系統(tǒng)的位置 kernel/irq/handle.c中,名稱為_do_IRQ。當(dāng)發(fā)生中斷時,CPU將執(zhí)行do_IRQ來處理相應(yīng)的中斷,do_IRQ將做了必要的架構(gòu)相關(guān)的處理后調(diào)用_do_IRQ。函數(shù)_do_IRQ將判斷該中斷是否已經(jīng)被線程化(如果中斷描述符的狀態(tài)字段不包含SA_NODELAY標(biāo)志說明中斷被線程化了),如果是將喚醒相應(yīng)的處理線程,否則將直接調(diào)用handle_IRQ_event(在IRQ子系統(tǒng)位置的kernel/irq /handle.c文件中)來處理。對于已經(jīng)線程化的情況,中斷處理線程被喚醒并開始運行后,將調(diào)用do_hardirq(在源碼樹的IRQ子系統(tǒng)位置的文件kernel/irq/manage.c中定義)來處理相應(yīng)的中斷,該函數(shù)將判斷是否有中斷需要被處理(中斷描述符的狀態(tài)標(biāo)志 IRQ_INPROGRESS),如果有就調(diào)用handle_IRQ_event來處理。handle_IRQ_event將直接調(diào)用相應(yīng)的中斷處理句柄來完成中斷處理。

如果某個中斷需要被實時處理,它可以用SA_NODELAY標(biāo)志來聲明自己非線程化,例如:系統(tǒng)的時鐘中斷就是,因為它被用來維護系統(tǒng)時間以及定時器等,所以不應(yīng)當(dāng)被線程化。

static struct irqaction irq0=

{ timer_interrupt, SA_INTERRUPT | SA_NODELAY, CPU_MASK_NONE, "timer", NULL, NULL};

這是在靜態(tài)聲明時指定不要線程化,也可以在調(diào)用request_irq時指定,如:

request_irq (HIGHWIRE_SMI_IRQ,highwire_smi_interrupt,SA_NODELAY, "System Management Switch", NULL))

對于softirq,標(biāo)準Linux內(nèi)核已經(jīng)使用內(nèi)核線程的方式來處理,為了使其易于被搶占,改進實時性,具體的修改包括:把ksoftirqd的優(yōu)先級設(shè)置為nice值為-10,即它的優(yōu)先級高于普通的用戶態(tài)進程和內(nèi)核態(tài)線程,但它不是實時線程,因此這樣一來softirq對實時性的影響將顯著減小。在處理軟中斷期間,搶占是使能的,這使得實時性更進一步地增強。在處理軟中斷的函數(shù)_do_softirq中,每次處理完一個待處理的軟中斷后,都將調(diào)用cond_resched_all(),這顯著地增加了調(diào)度點數(shù),提高了整個系統(tǒng)的實時性。[!--empirenews.page--]

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在使用時應(yīng)當(dāng)中斷失效來避免這種死鎖的情況發(fā)生。標(biāo)準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)將導(dǎo)致高優(yōu)先級進程的搶占延遲增大,中間優(yōu)先級的進程的執(zhí)行時間的不確定性導(dǎo)致了高優(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è)置為該確定的值,每次當(dāng)進程獲得該spinlock后,就將該進程的優(yōu)先級設(shè)置為spinlock的優(yōu)先級頂棚值。

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

一種為自鎖,即一個spinlock保持者試圖獲得它已經(jīng)保持的鎖,很顯然,這會導(dǎo)致該進程無法運行而死鎖。另一種為非順序鎖而導(dǎo)致的,即進程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)核鎖可搶占

大內(nèi)核鎖(BKL---Big Kernel Lock)實質(zhì)上也是spinlock,只是它一般用于保護整個內(nèi)核,該鎖的保持時間比較長,因此它對整個系統(tǒng)的實時性影響是非常大的,大內(nèi)核鎖使用了 semaphore來實現(xiàn),如果內(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é)論

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

參考文獻:

[1] 趙炯.Linux內(nèi)核完全注釋[M].北京:機械工業(yè)出版社 2004.9

[2] 王新政,程小輝,周華茂. 實時操作系統(tǒng)任務(wù)調(diào)度策略的研究與設(shè)計[J]. 微計算機信息,2007,11:57-59.

[3] 李善平,劉文峰,王煥龍,等. Linux 與嵌入式系統(tǒng)[M].北京:

清華大學(xué)出版社,2002

[4] 曹計昌,余雋. 關(guān)于提高Linux 核心實時處理能力的討論[J ].計算機應(yīng)用,2001 ,21 (1) :75 - 78.

[5] 鄒思軼. 嵌入式Linux 設(shè)計與應(yīng)用[M] . 北京:清華大學(xué)出版社,1999.

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉