周山
[摘要]Linux的出現,更激發了人們對計算機科學技術探索研究的熱情。Linux通過它獨有的特點,慢慢的進入了嵌入式Linux研究的時代但在系統的實時性能方面,Linux表現出很多不足的地方,這直接影響了Linux在嵌入式系統方面的研究。而影響Linux實時性的原因主要就是由于Linux內核具有的不可搶占性。因此,我們還要通過計算機的相關科學技術改善Linux的實時性能,這不僅為Linux的發展提供廣闊的前景,對嵌入式應用程序的研究也有重要意義。
[關鍵詞]Linux內核;可搶占性;實時性能
[中圖分類號]F224-39 [文獻標識碼]A [文章編號]1672-5158(2013)06-0034-01
在對Linux系統的應用逐漸普及的今天,大家仍然在不斷尋找改進Linux實時性能的方法,使Linmx充分利用它的優勢在嵌入式系統的開發中發揮它的潛力。隨著Linux不斷被引入實時領域,很大程度上吸引了計算機技術研發人員的眼球。而在Linux的設計中,它的內核是不可搶占的,雖然這對Linux的核心數據比較容易維護并且擁有良好的穩定性,但也影響了Linux的實時性能。因此,要想改善Linux的實時性,就要先改善Linux內核的可搶占性。
一、關于Linux實時性的研究分析
在Linux剛剛出現的時候,是被作為分時操作系統而設計實現的,所以Linux并不適應實時操作系統的要求。主要表現在這樣幾點上:第一,Linux系統的內核設計為不可搶占。所謂不可搶占就是核心作業具有任務的最高級,只有當它完成后,系統才會調度其它進程。因此在進程請求系統調用的過程中,可能會造成進程阻塞,無法有效的調用實時進程。第二,Linux設計中具有很多緩沖機制,這讓一些實時任務不能被及時執行,影響了系統實時的效率。第三,Linmx的同步策略也是導致進程阻塞的一個重要原因,它使實時進程無法使用系統的臨界資源。因此,Linmx并不符合實時系統的要求。第四,在中斷處理機制中,實時任務往往不能得到及時的處理,從而沒有辦法保證系統的確定性以及可預測性。
二、實現Linux內核的實時支持的方法——可搶占式內核
為了實現Linux內核的實時性,就要將Linux內核設計為可搶占性,這樣能夠使系統充分響應實時進程的請求,使實時進程得到及時的處理。所謂搶占就是指正在執行的實時任務,隨時都有可能被中斷,并通過系統的進程調度策略,執行其它優先級高的任務。可搶占式的內核設計,保證了系統正確的實現實時調度算法。Linux內核的可搶占性,并不代表實時任務在任何情況下都可以被優先調度。例如,當任務正在利用系統的調用來訪問系統中的共享數據時,就不能被其它可能使用這個數據的任務所搶占。在實現內核可搶占的方法中,必須對內核的臨界段加以保護,來防止進程的重大問題。
那么我們可以通過這樣幾種方法來實現Linmx搶占式內核。(1)設置搶占點,確保內核在這樣安全和固定的點上實現搶占。在改善Linux內核的非搶占內核時,最簡單的方法之一就是在一定的時間間隔處設置搶占點,并對在搶占點執行的過程進行檢查。對于搶占點的設置需要要注意的是:搶占點必須在穩定的內核數據結構中設置,而且內核將要開始一個長時間并且大量的運算。(2)實現完全搶占,使內核在任何時間里都能夠被其它進程搶占。雖然我們剛剛描述過有一種情況內核是不允許被搶占的,但我們還是可以通過操作系統所提供的互斥機制來實現內核的完全搶占。其一,不在臨界段的執行中設置中斷;其二,通過信號量,在獲得鎖后再進入臨界段,當離開臨界段的時候再釋放鎖。其三,在內核的臨界段設置搶占鎖。
三、改善Linux核心可搶占性的方法研究
在改善Linmx核心可搶占性方面的研究,要從兩個方向著手:一方面是中斷管理的改進,另一方面是互斥鎖的改進。它們之間不僅有著密切的聯系,而且還相互影響。
(一)對中斷管理進程化的研究
在系統設計中,實現中斷管理的高效和可靠是設計的關鍵。如果在中斷管理的設計上存在缺陷,不僅會造成進程不必要的等待,還會讓系統的整個任務都出現處理延滯,降低了系統的效率。Linux系統設計中采用了宏內核,所以Linux操作系統表現出易于實現的優勢,這在目前仍然是計算機科學技術研究的一個重要方向。但宏內核也有不足的地方,缺少了對系統分層的概念,不容易約束用戶程序編寫,從而導致一些不合理的中斷等待的現象。因此,要改善Linux的中斷處理。Linux通過kernel_thread函數來創建系統的核心進程,利用核心進程里所具有的task_Mstruct描述以及核心堆棧,通過它們的共同參與來對系統的進程進行調度,使其具有更高的執行效率。
(二)對互斥鎖的研究
Linux中的互斥鎖是采用硬件鎖方式實現的,互斥鎖利用了存在于Linux核心的二元信號量(關于Linux核心的二元信號量的定義,在include/asm-i386/semaphore.h中有明確的說明)。在Linmx內核信號量的具體實現中,內核例程down()和up()與P()操作和V()操作是相對應的。因此也可以通過直接利用內核例程down()和up()來實現互斥鎖。通過二元信號量對互斥鎖機制進行的改進設計,實現了互斥鎖機制的高效性。與此同時,基于二元信號量的互斥設計更容易實現較為復雜的關于互斥鎖的協議。在某種意義上互斥鎖的實現和進程的調度密切相關。
結束語:本文通過對如何改進Linmx核心可搶占性的方法研究,改善了Linux核心的可搶占性,并且使Linux在實時性能上得到改善。相信通過系統的研發人員的共同努力,一定會在改善Linux核心可搶占性的方法上有所突破,逐漸完善Linux。
參考文獻
[1]張立,王茜竹,王朝霞,練有品,Linux內核的進程調度原理及改進算法研究[J],后勤工程學院學報,2006(05)
[2]趙慧斌,李小群,孫玉芳,改善Linux核心可搶占性方法的研究與實現[J],計算機學報,2004(02)
[5]楊中良,蔣朝根,Linux內核的可搶占性分析和研究[J]成都信息工程學院學報,2008(10)
[4]杜旭,胥海鵬,Linux操作系統調度器實時性能的研究與改進[J],計算機工程,2005(10)