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