王偉
眾所周知,嵌入式linux的實(shí)用性與中斷處理技術(shù)是緊密相連密不可分的,那么必然就是一榮俱榮,一損俱損。而接下來(lái)本文著重談的是中斷處理技術(shù)在嵌入式linux中應(yīng)用的優(yōu)缺點(diǎn),并同時(shí)提出了改善嵌入式實(shí)用性的方案,希望對(duì)大家有所裨益。
【關(guān)鍵詞】嵌入式Linux;中斷;處理技術(shù)
1 簡(jiǎn)述中斷處理與linux實(shí)時(shí)化
據(jù)調(diào)查,Linux內(nèi)核關(guān)注的主要是所用程序的吞吐量,所以如果從實(shí)時(shí)性方面考慮,Linux本身并沒有什么實(shí)用性。但是呢,Linux的調(diào)度器卻能夠讓其共同享有來(lái)自CPU的各種資源,而這是因?yàn)閘inux的調(diào)度器本身就具有公平分配的特質(zhì)。可是雖有公平分配的特質(zhì),但內(nèi)核卻是不可搶占的,尤其是單處理器上的,而正是由于此特征,才會(huì)在進(jìn)行實(shí)時(shí)化時(shí)無(wú)法躲避實(shí)質(zhì)性的障礙,尤其是關(guān)閉中斷正在運(yùn)行的內(nèi)核線程,而且由于條件有限不具備精確的計(jì)時(shí)器,極有可能會(huì)出現(xiàn)調(diào)度時(shí)間不準(zhǔn)確等問題。而在中國(guó),目前對(duì)linux進(jìn)行實(shí)時(shí)化改造最常用的有兩種辦法:
1.1 對(duì)內(nèi)核實(shí)行外部實(shí)時(shí)性擴(kuò)展,前提是在原有l(wèi)inux上。
而這樣做的目的是為了使linux成為一個(gè)性能更加穩(wěn)定的操作系統(tǒng),而且再加上linux自身具有高效的內(nèi)核,能夠支持各種硬件系統(tǒng)的良好網(wǎng)絡(luò)性能進(jìn)而會(huì)使其的功能更加強(qiáng)大;除此之外,linux的代碼擁有開放的操作系統(tǒng),這樣就能擁有較強(qiáng)的模塊,還能相應(yīng)的增強(qiáng)linux的可移植性,而這樣的最終目的就是為了更有利于linux進(jìn)行實(shí)時(shí)化。而且也正是由于linux的這些優(yōu)勢(shì)才會(huì)在價(jià)格昂貴的專用實(shí)時(shí)操作系統(tǒng)中脫穎而出,而且在實(shí)際操作中,越來(lái)越多的人能夠意識(shí)到linux應(yīng)用到嵌入式情境中的好處。而前面提到的嵌入式實(shí)時(shí)系統(tǒng)我們可以通俗的理解為:是一個(gè)對(duì)外部的風(fēng)吹草動(dòng)能夠在規(guī)定或者確定的時(shí)間內(nèi)做出反應(yīng)的系統(tǒng),且實(shí)時(shí)響應(yīng)性則是該系統(tǒng)最突出的優(yōu)勢(shì)。而且嵌入式系統(tǒng)一般都會(huì)采用中斷技術(shù)來(lái)對(duì)外部實(shí)踐進(jìn)行響應(yīng),其中中斷處理方式的合理與否會(huì)跟系統(tǒng)的實(shí)時(shí)性能直接掛鉤。
1.2 要對(duì)linux內(nèi)核進(jìn)行實(shí)時(shí)性的改造,也就是對(duì)原有的linux內(nèi)核進(jìn)行相對(duì)的修改。
在此就不進(jìn)行詳細(xì)的介紹了。而接下來(lái)就詳細(xì)闡述在這兩種方法下,對(duì)linux原有中斷處應(yīng)做的改進(jìn)。
2 linux原有中斷處要做的改進(jìn)
2.1 應(yīng)對(duì)其進(jìn)行中斷模擬
要想讓兩個(gè)內(nèi)核共享一個(gè)處理器,那么就應(yīng)該以標(biāo)準(zhǔn)linux內(nèi)核為前提,然后再加一個(gè)實(shí)時(shí)內(nèi)核就能解決這個(gè)問題,那么隨著內(nèi)核的增加,也實(shí)現(xiàn)了單內(nèi)核操作系統(tǒng)向雙內(nèi)核操作系統(tǒng)的轉(zhuǎn)變。而之所以要采取這樣的做法,是因?yàn)椴粌H可以使內(nèi)核擁有優(yōu)先級(jí),還可以不費(fèi)吹灰之力解決內(nèi)核中斷問題,可謂一舉兩得,而linux的原有內(nèi)核,一般情況不會(huì)運(yùn)用,只有在沒有實(shí)時(shí)任務(wù)時(shí),才會(huì)對(duì)linux原有的內(nèi)核進(jìn)行運(yùn)用,而且linux實(shí)時(shí)化后的雙內(nèi)核結(jié)構(gòu),只要定時(shí)器到達(dá)指定的位置,內(nèi)核就會(huì)響應(yīng)。除此之外,大多數(shù)定時(shí)器的調(diào)度在不出意外的情況下是10毫秒,但由于嵌入式系統(tǒng)實(shí)時(shí)性的要求非常嚴(yán)格,所以普通的定時(shí)器不符合要求。因而改變這種狀況,為了提高定時(shí)器的精度,可以嘗試在嵌入式linux內(nèi)核中引入兩種定時(shí)器模式,即Periodic模式和Oneshot模式。所謂periodic模式就是對(duì)時(shí)鐘的芯片能夠進(jìn)行簡(jiǎn)單的編程,而編程的目的則是為了讓其能夠適應(yīng)較高的頻率,而由于這種模式會(huì)極大的增加系統(tǒng)消耗,所以大多會(huì)用在周期性強(qiáng)的場(chǎng)合。而另一種則是Oneshot模式,不是周期性的工作,而工作過(guò)程就是可以使時(shí)鐘芯片隨時(shí)隨地的發(fā)生中斷。以上就是對(duì)中斷模擬的簡(jiǎn)單描述。
2.2 對(duì)時(shí)鐘機(jī)制的簡(jiǎn)單改造以及內(nèi)核設(shè)計(jì)
在對(duì)時(shí)鐘機(jī)制進(jìn)行改造時(shí),應(yīng)該先設(shè)定定時(shí)器的初始值寄存器,而設(shè)定的依據(jù)不是任意而為的,則是要根據(jù)實(shí)時(shí)任務(wù)的執(zhí)行時(shí)間。除此之外,也應(yīng)該對(duì)搶占式的內(nèi)核進(jìn)行設(shè)計(jì),當(dāng)對(duì)內(nèi)核的搶占性方面進(jìn)行改造時(shí),可以采用兩種方法:一種是搶占點(diǎn)的方法,也就是對(duì)linux內(nèi)核做內(nèi)部實(shí)時(shí)性的改造,改造的一部分就是對(duì)時(shí)鐘機(jī)制進(jìn)行改造。所以當(dāng)時(shí)鐘發(fā)生中斷時(shí),工作人員不要慌張的亂找引起中斷的地方,而是應(yīng)該把其當(dāng)作一次“休養(yǎng)生息”的時(shí)機(jī),也就是當(dāng)做對(duì)程序進(jìn)行調(diào)度的時(shí)機(jī)。而上面提到的定時(shí)器,其主要的功能就是使時(shí)鐘產(chǎn)生中斷,而如果想讓時(shí)鐘具有高效的實(shí)時(shí)性,那么就可以從提高精度以及定時(shí)器的頻率下手。而對(duì)內(nèi)核進(jìn)行搶占式設(shè)計(jì),主要的目的就是讓處于系統(tǒng)調(diào)用狀態(tài)的用戶搶占被剛喚醒的高優(yōu)先級(jí),且在這個(gè)處理模式中,假如出現(xiàn)了高優(yōu)先級(jí)的任務(wù),但并不會(huì)優(yōu)先切換到高優(yōu)先級(jí)的任務(wù),而是需要等待,等被中斷的任務(wù)被執(zhí)行完成后,才會(huì)切換到高優(yōu)先級(jí)任務(wù)。但是如果想立刻就切換到高優(yōu)先級(jí)的任務(wù),就可以設(shè)置一個(gè)統(tǒng)一的中斷處理函數(shù)即dolRQ,而這個(gè)函數(shù)的主要任務(wù)則是負(fù)責(zé)把其前部進(jìn)行中斷,等把這個(gè)函數(shù)處理完成后,并沒有結(jié)束,而是還要對(duì)部分軟件進(jìn)行后部的中斷處理,這樣才能做到萬(wàn)無(wú)一失。而linux主要采用softriq的中斷機(jī)制來(lái)進(jìn)行軟件的中斷處理。而據(jù)統(tǒng)計(jì)linux內(nèi)核有32個(gè)sof2tirp,且每一個(gè)都會(huì)有一個(gè)函數(shù)。那么這樣就會(huì)有32個(gè),即應(yīng)該對(duì)32個(gè)sof2tirp進(jìn)行咨詢。而linux主要任務(wù)是處理軟件的中斷,因此在執(zhí)行時(shí),不要盲目的就把中斷的信息傳給linux,而是要視情況而定,也就是要仔細(xì)查看內(nèi)核中斷的情況,再三斟酌后再?zèng)Q定是不是要將中斷的信息傳遞給Linux,而在這個(gè)過(guò)程中,同樣可以采用前后的方式來(lái)執(zhí)行,這樣就能夠在無(wú)形中使得嵌入式Linux的實(shí)用性更加靈活。
3 簡(jiǎn)述嵌入式Linux的中斷處理機(jī)制
linux的中斷處理機(jī)制,需要把內(nèi)核關(guān)閉,然后在對(duì)內(nèi)核進(jìn)行中斷響應(yīng),直到結(jié)束中斷的處理程序。假如在這個(gè)過(guò)程中,中斷處理程序執(zhí)行的時(shí)間非常長(zhǎng),那可想而知在這一段時(shí)間里,優(yōu)先級(jí)再高的響應(yīng)都不會(huì)得到響應(yīng),而且還極有可能會(huì)對(duì)系統(tǒng)的實(shí)時(shí)性能造成嚴(yán)重的影響。因此,在嵌入式Linux中,要對(duì)其進(jìn)行一分為二,即分為tophalf和bottomhalf,那么就可以把延遲處理且有不怕中途被打斷的程序歸為bottomhalf,而其余的歸于tophalf,這樣通過(guò)分工合作可以更好地進(jìn)行協(xié)調(diào)工作,更好地進(jìn)行中斷處理。
4 結(jié)束語(yǔ)
小巧、高速、可預(yù)測(cè)性等特點(diǎn)是嵌入式實(shí)施操作系統(tǒng)獨(dú)有的優(yōu)勢(shì),而正是因?yàn)榍度胧讲僮飨到y(tǒng)的這些特點(diǎn)才能在工作過(guò)程中精確的把控時(shí)間,進(jìn)而減小誤差。 而在以上的篇幅中,本人主要談了嵌入式linux中斷處理技術(shù),并提出一些改進(jìn)方法,而且隨著科技日新月異的發(fā)展,我相信對(duì)Linux應(yīng)用的范圍會(huì)不斷的擴(kuò)大,且Linux嵌入式系統(tǒng)也會(huì)隨著時(shí)代的變化而愈加成熟。
參考文獻(xiàn)
[1]劉云心,張堯?qū)W.一個(gè)基于linux的嵌入式實(shí)時(shí)操作系統(tǒng)[J].計(jì)算機(jī)工程與應(yīng)用,2012(07):64-66.
[2]李善平,劉文峰,王煥龍.linux與嵌入式系統(tǒng)[M].北京:清華大學(xué)出版社,2011.
作者單位
福建農(nóng)林大學(xué)計(jì)算機(jī)與信息學(xué)院 福建省福州市 350000