面向多媒體應用的嵌入式Linux即時性研究

來源:互聯網
上載者:User
首先對Linux系統的即時機製作了分析,然後根據多媒體應用的特點.通過改進Linux系統的即時性,構建了面向多媒體應用的嵌入式Linux系統。實驗結果表明,該系統在即時性方面完全可以滿足多媒體應用的需求。

  當今資訊社會,以多媒體為特徵的資訊技術和資訊產業的發展及應用對人類社會產生的影響和作用愈來愈明顯,愈來愈重要。多媒體技術的發展在很大程度上依賴於多媒體軟體開發的水平。目前不管是支撐多媒體的系統軟體,還是應用軟體,都在能力和數量上難以滿足多媒體飛速發展的需要。特別是多媒體系統軟體的缺乏,一直是制約多媒體產業發展的瓶頸問題之一。

  Linux從1991年誕生之日起至今不過十來年,卻已發展成為一個功能強大、設計完善的作業系統。在嵌入式領域,Linux同樣獲得了飛速發展。Linux具有以下特點:

   (1)Linux作業系統的開放源碼易於定製剪裁,在價格上有競爭力;

  (2)Linux作業系統的核心小、功能強大、運行穩定、系統強壯、效率高;
   
   (3)Linux作業系統不僅支援X86 CPU,還可以支援其他數十種CPU晶片;
  
  (4)Linux支援所有標準的網際網路協議,幾乎所有的協議和網路介面都定製在其中。

  因此,Linux系統是多媒體終端作業系統的首選。

  1 通用Linux即時性分析及其在即時性方面的不足

  雖然目前Linux核心在即時性方面有所增強,但由於Linux系統本身是一個面向案頭的系統,所以將它應用於多媒體終端時,在即時性方面仍存在一些問題。

  1.1 通用Linux系統的調度策略

  通用Linux系統支援即時和非即時兩種進程,即時進程相對於普通進程具有絕對的優先順序。對應地,即時進程採用SCHED_FIFO或者SCHED_RR調度策略,普通的進程採用SCHED_OTTIER調度策略。

  SCHED_OTHER調度策略本質上是一種比例共用的調度策略,它的這種設計方法能夠保證進程調度時的公平性:一個低優先順序的進程在每一個epoch中也會得到自己應得的那些CPU執行時間,另外它也提拱了不同進程的優先順序區分,具有高priority值的進程能夠獲得更多的執行時間。

  對於即時進程來說,它們使用基於即時優先順序rt_pnonty的優先順序調度策略,但根據不同的調度策略,同一即時優先順序的進程之間的調度方法有所不同。

  Linux調度時,要遍曆運行隊列,對隊列中的每一個進程計算goodness值,goodness最大的進程將被選中運行。根據調度策略的不同,進程的goodness值也要做不同的計算。普通進程的gooclness值是在該進程計數值counter基礎上略有浮動,其範圍是O~999。即時進程的goodness值是將該進程即時優先順序rt_priority加上1000。所以即時進程的goodness總是大於非即時進程,從而保證了即時進程的優先調度權。函數goodness()如下:

  從上面的Soodness()函數可以看出普通Linux核心的進程調度演算法只是軟即時的,並不是硬即時的。

  1.2通用Linux即時性方面的缺陷

  (1)Linux系統中的調度單位為lOms,所以它不能夠提供精確的定時;

  (2)當一個進程調用系統調用進入核心態運行時,它是不可被搶佔的;

  (3)Linux核心實現使用了大量的封中斷操作會造成中斷的丟失;

  (4)由於使用虛擬記憶體技術,當發生頁出錯時,需要從硬碟中讀取交換資料,但硬碟讀寫由於儲存位置的隨機性會導致隨機的讀寫時間,這在某些情況下會影響一些即時任務的截止期限;

   (5)雖然Linu~進程調度也支援即時優先順序,但缺乏有效即時任務調度機制和調度演算法;其網路子系統的協議處理和其他裝置的中斷處理都沒有與它對應的進程的調度關聯起來,並且其自身也沒有明確的調度機制。

  2 面向多媒體應用的Linux即時性改進

  提高Linux的即時性一般有兩種方法:一種是對普通的Linux核心的資料結構、調度函數、中斷方式等進行修改,使其能夠處理即時進程。另一種是在Linux核心之外,進行即時性擴充。也就是在普通Linux的基礎之上再設計一個用於專門處理即時進程的核心。為了提高Linux的即時性,並且使之能夠更好地滿足多媒體應用系統的需求,本文採用第一種方法來提高系統的即時性。

  2.1 提高系統所支援的時鐘精度

  為了提高Linux系統的即時特性,必須提高系統所支援的時鐘精度。但如果僅僅簡單地提高時鐘頻率,會引起調度負載的增加,從而嚴重降低系統的效能。為瞭解決這個矛盾,本文將時鐘晶片設定為單次觸發狀態,即每次給時鐘晶片設定一個逾時時間,然後到該逾時事件發生時在時鐘中斷處理常式中再次根據需要給時鐘晶片設定一個逾時時間。其基本思想是:一個精確的定時意味著時鐘中斷在一個比較精確的時間發生,但並非一定需要系統時鐘頻率達到此精度。它利用CPU的時鐘計數器來提供精度可達CPU主頻的時間精度。

  2.2 可搶佔式核心設計

  (1)搶佔式核心給task struct資料結構增加一個資料項目:preempt_count。該資料項目由宏preempt_disable( )、pro-empt_enable()、以及preempt_enable_no_resched()所使用。preempt_disable對preempt_count計數進行遞增,preempt_

  enable對preempt_count進行遞減。preempt_enable宏查看當前進程的preempt_count和need_resched域的內容,如果preempt_count為O並且need_resched為1,則調用pre-empt_schedule()函數。該函數將給當前進程的preempt_count項增加一個很大的值,然後調用進程調度函數8chedule(),在scheduhj函數返回後從該進程preempt_count中再減去該值,從而實現核心可搶佔。

  (2)修改schedule函數,使它檢測進程的preempt_co-unter是否很大(這是為了屏蔽一些普通調度流程中對於搶佔式調度來說是冗餘的那些操作),然後執行搶佔式調度。同時修改spinlock的代碼。在spin_lock()和spin_try_lock中增加了對於preempt_disable的調用,在spin__un-lock()中增加了對於preempt_enable的調用。修改中斷返回的代碼,在其中增加了對於preempt_enable的調用。

  由以上可看出核心的搶佔式調度發生在如下情況:在釋放spinlock時,或者當中斷返回時,如果當前執行進程的need_resched被標記,則進行搶佔式調度。

  2.3 即時任務調度的實現

  在任務切換方面限制Linux不能進入RTOS行列的主要原因是:核心無法及時進行進程調度,即任務調度器schedule()函數不能及時被執行;當中斷返回到核心態時,Linux核心禁止進行進程調度,只有中斷返回到使用者態時,Linux核心才允許進行進程調度。針對這兩點,對Linux核心的相關函數作如下修改:


   

     這樣可以解決當中斷返回到核心態時,Linux核心禁止進行進程調度,只有中斷返回到使用者態時,Linux核心才允許進行進程調度的問題,從而增強了任務調度的即時性。

  3 嵌入式Linux即時效能測試結果

  測試載入器:Linux Trace ToolKit-0.8
  測試環境:Intel Celeron 1.2GHz CPU、256MB SDRAM,通用LJnux為Red Hat9.0,RT-Linnx為3.0版,Media-Linux即為本文實現的嵌入式Linnx。
  測試結果如表l所示。

 

  可以看出,本文構建的Linux系統的任務回應時間處於十微秒級,完全可以滿足多媒體應用終端的即時性需求。

  根據多媒體應用的特點,在儘可能地保證系統效能的前提下,本文通過提高系統所支援的時鐘精度、設計可搶佔式核心、增強即時任務調度改進了通用Linnux的即時性(關鍵區段給出了原始碼及資料結構)。實驗結果表明,該系統在即時性方面完全可以滿足多媒體終端應用的需求,具有較好的應用前景。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.