談標準Linux作業系統實時性的制約因素

2021-09-20 09:04:09 字數 2281 閱讀 9749

雖然linux系統功能強大、實用性強、易於軟體的二次開發,並且提供程式設計人員熟悉的標準api。但是由於linux系統一開始就被設計成gpos(通用作業系統),它的目的是構建乙個完整、穩定的開源作業系統,盡量縮短系統的平均響應時間,提高吞吐量,注重作業系統的整體功能需求,達到更好地平均效能。(在作業系統中,我們可以把吞吐量簡單的理解為在單位時間內系統能夠處理的事件總數。)嵌入式定製

因此在設計linux的程序排程演算法時主要考慮的是公平性,也就是說,排程器盡可能將可用的資源平均分配給所有需要處理器的程序,並保證每個程序都得以執行。但這個設計目標是和實時程序的需求背道而馳的,所以標準linux並不提供強實時性。

linux系統實時性不強使其在嵌入式應用中有一定的侷限性,主要是受核心可搶占性、程序排程方式、中斷處理機制、時鐘粒度等幾個方面的制約,具體如下:

(1) 程序排程

linux系統提供符合posix標準的排程策略,包括fifo排程策略(sched_fifo)、帶時間片輪轉的實時排程策略(sched_rr)和靜態優先順序搶占式排程策略(sched_other)。linux程序預設的排程策略為sched_other,這種排程方式雖然可以讓程序公平地使用cpu和其它資源,但是並不能保證對時間要求嚴格或者高優先順序的程序將先於低優先順序的執行,這將嚴重影響系統實時性。那麼,將實時程序的排程策略設定為sched_fifo 或sched_rr ,似乎使得linux系統具備根據程序優先順序進行實時排程的能力,但問題在於,linux系統在使用者態支援可搶占排程策略,而在核心態卻不完全支援搶占式排程策略。這樣執行在linux核心態的任務(包括系統呼叫和中斷處理)是不能被其它優先順序更高的任務所搶占的,由此引起優先順序逆轉問題。

(2) 核心搶占機制

linux的系統程序執行分為使用者態和核心態兩種模式。當程序執行在使用者態時,具有高的優先順序的程序可以搶占程序,可以較好地完成任務;但是當程序執行在核心態時,即使其他高優先順序程序也不能搶占該程序。當程序通過系統呼叫進入核心態執行時,實時任務必須等待系統呼叫返回後才能獲得系統資源。這和實時系統所要求的高優先順序任務執行是相互矛盾的。

當然,這種情況在linux2.6版本的核心發布以來有了顯著改進,linux2.6版本後的核心是搶占式的,這意味著程序無論在處於核心態還是使用者態,都可能被搶占。linux2.6以後的核心提供以下3種搶占模式供使用者選擇。

preempt_none——沒有強制性的搶占。整體的平均延時較低,但偶爾也會出現一些較長的延時。它最適合那些以整體吞吐率為首要設計準則的應用。

preempt_voluntary——降低延時的第一階段。它會在核心**的一些關鍵位置上放置額外的顯示搶占點,以降低延時。但這是以犧牲整體吞吐率為代價的。

preempt/preempt_desktop——這種模式使核心在任何地方都是可搶占的,臨界區除外。這種模式適用於那些需要軟實時效能的應用程式,比如音訊和多**。這也是以犧牲整體吞吐率為代價的。

(3) 中斷遮蔽

linux在進行中斷處理時都會關閉中斷,這樣可以更快、更安全地完成自己的任務,但是在此期間,即使有更高優先順序的實時程序發生中斷,系統也無法響應,必須等到當前中斷任務處理完畢。這種狀況下會導致中斷延時和排程延時增大,降低linux系統的實時性。

(4) 時鐘粒度粗糙

時鐘系統是計算機的重要組成部分,相當於整個作業系統的脈搏。系統所能提供的最小時間間隔稱為時鐘粒度,時鐘粒度與程序響應的延遲性是正比關係,即粒度越粗糙,延遲性越長。但時鐘粒度並不是越小越好,就同等硬體環境而言,較小的時間粒度會導致系統開銷增大,降低整體吞吐率。

在linux2.6核心中,時鐘中斷發生頻率範圍是50~1200hz,週期不小於0.8ms,對於需要幾十微秒的響應精度的應用來說顯然不滿足要求。而在嵌入式linux系統中,為了提高整體吞吐率,時鐘頻率一般設定為100hz或250hz。

另外,系統時鐘負責軟定時,當軟定時器逐漸增多時會引起定時器衝突,增加系統負荷。

(5) 虛擬記憶體管理

linux採用虛擬記憶體技術,程序可以執行在比實際空間大得多的虛擬空間中。在分時系統中,虛擬記憶體機制非常適用,然而對於實時系統這是難以忍受的,頻繁的頁面換進換出會使得系統程序執行無法在規定時間內完成。

對於此問題,linux系統提供記憶體鎖定功能,以避免在實時處理中儲存頁被換出。

(6) 共享資源的互斥訪問差異

多個任務互斥地訪問同一共享資源時,需要防止資料遭到破壞,系統通常採用訊號量機制解決互斥問題。然而,在採取基於優先順序排程的實時系統中,訊號量機制容易造成優先順序倒置,即低優先順序任務占用高優先順序任務資源,導致高優先順序任務無法執行。

雖然從2.6.12版本之後,linux核心已經可以在較快的x86處理器上實現10毫秒以內的軟實時效能。但如果想實現可**、可重複的微秒級的延時,使linux系統更好地應用於嵌入式實時環境,則需要在保證linux系統功能的基礎上對其進行改造。

實時作業系統

所謂 實時作業系統 實際上是指作業系統工作時,其各種資源可以根據需要隨時進行動態分配。由於各種資源可以進行動態分配,因此其處理事務的能力較強 速度較快。無論什麼控制系統一旦弄上 實時 兩個字就是對響應時間有嚴格的要求。實時作業系統貴在實時,要求在規定的時間內完成某種操作。主要用在工業控制中,實時作業...

實時作業系統 RTOS 和非實時作業系統

對於實時作業系統 rtos 和非實時作業系統,你能分別列舉出來多少?實時作業系統 ucos vxworks rtlinux 非實時作業系統 linux windows osx 我也只能列舉出來這麼多了。重點不在這裡,重點在於他們之間的區別,詳見下圖 在上面的圖中右邊的任務優先順序高於左邊的任務,先看...

LINUX作業系統嵌入Xenomai實時核

由於linux系統的實時響應達不到更高要求,所以要嵌入xenomai實時核 可以去官網看看適不適合你的硬體處理器 我的xenomai解壓在 usr src資料夾下,開啟資料夾cd usr src xenomai 3.0.2執行指令scripts prepare kernel.sh linux usr...