為分析影響Linux實時性構建的任務響應模型

2021-05-23 14:32:49 字數 2329 閱讀 9987

為分析影響

linux

實時性構建的任務

響應模型

在介紹影響linux實時性任務排程執行之前,我們先來看下乙個簡化的linux任務響應模型,了解下哪些因素會影響linux的實時性。這些有利於理解後面說道的實時性改進。

linux

實時化的最終目標是要滿足實時任務快速的有期限響應時間要求。乙個實時任務的一次執行(實時任務一般都是週期性的)是由外部中斷觸發的(比如每隔1ms要傳送一幀goose報文),當中斷產生的時候,cpu接收到中斷訊號,如果cpu當前允許中斷(如果不允許,則直到允許中斷後才處理中斷),儲存當前執行的任務跳轉到中斷服務程式,執行中斷服務程式(在中斷服務程式中喚醒實時任務),然後執行中斷返回,如果當前系統允許進行程序排程,則排程實時任務開始執行(假定這個實時任務的優先順序最高)。為了更好的理解linux實時化的基本原理,我們有必要對linux的任務響應模型作詳細的分析,如下圖1所示,給出了乙個簡化的linux任務響應模型。

圖1 linux任務響應模型(時間段長度不是按比例繪製的)

如圖所示任務響應模型中,任務2(可以看成linux內的軟實時任務)的優先順序高於任務1。t0時刻任務1在執行,而任務2處於睡眠狀態,等待中斷喚醒;t1時刻任務1請求系統服務完成某些操作(例如通過read()檔案介面讀取磁碟上的檔案等),此時開始,系統在核心態執行;在t2時刻,產生乙個中斷(在這個中斷的中斷服務程式中喚醒任務2),但可能由於系統在核心態進行某些操作不希望被中斷,cpu的處理中斷被禁止,那麼這個中斷訊號沒有立刻得到響應,而是繼續在核心態執行系統服務;在t3時刻,核心態**使能中斷響應(linux核心退出臨界區),這個時候cpu開始響應在t2時刻產生的中斷,並從t4時刻開始執行中斷服務程式;當中斷服務程式執行完之後(在這個中斷服務程式中喚醒了任務2),返回被中斷的**,由於此時系統執行在核心態(執行任務1的系統服務請求),任務2無法搶占任務1的控制權,所以執行任務1的系統服務請求;在t7時刻,由於任務1的系統呼叫完成返回或者在執行系統服務的過程中主動請求任務排程,系統開始進行任務排程,並在時刻t8執行任務2(假定此時任務2是系統內最高優先順序的任務)。

其中,從時刻t2至時刻t8這個時間段,就是我們所說的任務響應延遲時間(task response time);從圖可以看出,任務的響應延遲時間可以分為以下幾個部分:

1.1中斷潛伏期(interrupt latency)或者說中斷延遲,這個指從中斷產生到cpu開始響應中斷的時間段,也就是圖中從t2至t3的時間段。中斷潛伏期是由於核心在進入臨界區前關閉cpu的中斷響應所引起的,在這個時間段內,雖然外部裝置使cpu的中斷請求線有效,但cpu並不立刻響應中斷,而是繼續執行臨界區的核心**,直至退出臨界區、使能中斷請求,才開始進行中斷的響應。當然,還需要注意的一點是,中斷潛伏期實際上包含了硬體所產生的中斷延遲時間,我們一般所研究的是如何最大限度的減少軟體所造成的延遲時間,所以,如果沒有特別說明,我們是不考慮硬體所產生的延遲(但實際上,在工程應用中,當經過軟體的優化還不能滿足系統實時性的要求時,唯一的辦法就只有提高硬體的處理速度了)。(這可以通過作業系統的實現來進行改進)。 1

、2中斷分發階段(中斷準備階段),這個指從cpu開始響應中斷請求到開始執行中斷服務程式之間的時間段,也就是圖中從t3至t4的時間段。這個期間系統要做的主要操作包括查詢中斷號、儲存暫存器、定位中斷服務程式等。這個時間段的長度對於具體的平台來說,一般是確定性的,也就是說時間長度是固定的。另外,從中斷產生到開始執行中斷服務程式之間的時間段被稱為中斷響應延遲時間(interrupt response time),對應於圖中t2至t4的時間段。 1

、3中斷服務階段,這個指從系統開始執行中斷服務程式到中斷服務程式執行完的時間段,也就是圖中t4至t5的時間段。這個時間段的長度與具體的中斷或者說具體的應用有關,也就是說,這個時間段的長度是可以控制的。(中斷服務程式應盡量短小不能影響包含過多的任務內容,只負責任務喚醒) 1

、4中斷返回階段,這個指從中斷服務程式執行完到恢復被中斷**開始執行的時間段,也就是圖中t5至t6的時間段。這個期間系統要做的主要操作是恢復暫存器的值,這個時間段長度一般也是固定的。 1

、5排程潛伏期(schedule latency)或者說排程延遲,這個指從系統需要進行程序排程(當前程序的程序結構中need_resched的值為1)到實際開始進行排程的時間段,也就是圖中t6至t7的時間段。由於linux2.6核心中有些地方是不可以搶占的,當系統執行在核心空間中時,即使有更高優先順序的程序需要執行,除非主動請求進行排程,否則高優先順序的程序是無法搶占當前程序執行的;所以,只有等到低優先順序程序的系統呼叫完成或主動請求排程的時候,才能進行程序的排程。(這可以通過作業系統的實現來進行改進)。 1

、6程序排程時間,這個指從系統開始進行排程到最高優先順序的程序開始被排程執行的時間段,也就是圖中t7至t8的時間段。在這個期間,系統主要是根據系統資源的利用情況、程序的優先順序、程序的運**況,選擇合適的程序進行排程。(這可以通過作業系統的實現來進行改進)。

Storm 實時性分析

都說storm是乙個實時流處理系統,但storm的實時性體現在什麼方面呢?首先有乙個前提 這裡的實時性和我們通常所說的實時系統 晶元 彙編或c編寫的實時處理軟體 的實時性肯定是沒法比的,也不是同乙個概念。這裡的實時性應該是乙個相對的實時性 相對於hadoop之類 從網上找了一些資料 總結一下,sto...

linux 非實時性

linux是非實時作業系統,雖然支援rt排程策略,但是並非是硬實時系統。linux非實時性主要表現在下面幾個方面 1.虛擬記憶體管理,導致實際物理記憶體分配的滯後性 2.排程策略問題,實時排程策略不能立即搶占,一般要在中斷返回,系統呼叫返回使用者空間時 通過檢查need resched標記,進行重新...

Linux的硬體實時性

linux核心 linux 2.6以前 是不可搶占的,但支援使用者搶占它的排程方法是 乙個程序可以通過schedule 函式自願地啟動一次排程。非自願的強制性排程只能發生在每次從系統呼叫返回的前夕以及每次從中斷或異常處理返回到使用者空間的前夕 這種強制性排程又叫使用者搶占 但是,如果在系統空間發生中...