標(biāo)題: 實時系統(tǒng)概念 [打印本頁]

作者: liuda    時間: 2015-1-23 20:40
標(biāo)題: 實時系統(tǒng)概念
這幾天邊看電影邊整理的筆記。大家得捧場哈!以后會經(jīng)常有的。

           首先我們的熟悉實時系統(tǒng)的概念,實時系統(tǒng)它分為軟實時和硬實時;軟實時系統(tǒng)它是指系統(tǒng)的目的是為了使各個任務(wù)盡快的執(zhí)行,而不要求限定的某一個任務(wù)在多長時間內(nèi)完成,也就是該系統(tǒng)超過規(guī)定時間對系統(tǒng)不會產(chǎn)生很大的影響,系統(tǒng)依然可以運(yùn)行。而硬實時系統(tǒng)則不僅要求任務(wù)執(zhí)行無誤,而且還要做到準(zhǔn)時;也就是說在一到達(dá)規(guī)定的時間,任務(wù)必須完成,否則會給系統(tǒng)帶來災(zāi)難性的后果。
           我以前寫的程序很多是沒有嵌系統(tǒng)的,所以它們稱為前/后臺系統(tǒng)或超循環(huán)系統(tǒng)。那么什么是前臺,什么是后臺呢?我們的程序中有個main函數(shù),這個函數(shù)肯定是一個無限循環(huán)系統(tǒng),在循環(huán)中調(diào)用相應(yīng)的驅(qū)動函數(shù)完成相應(yīng)的功能,這部分可以看成是后臺行為;一般的系統(tǒng)都是有中斷發(fā)生的,那么中斷服務(wù)處理程序可以看成是前臺行為;固有這個說法,后臺可以成為任務(wù)級,前臺成為中斷級。這種前/后臺系統(tǒng)有一個很大的缺點(diǎn),就是任務(wù)級的響應(yīng)時間不是固定的,因為它是循環(huán)中的一部分,所以取決于循環(huán)運(yùn)行的時間,所以前/后臺系統(tǒng)很容易跑飛。
           代碼的臨界段也稱臨界區(qū),指處理時不可分割的代碼;所以進(jìn)入臨界區(qū)之前必須關(guān)中斷,臨界區(qū)代碼執(zhí)行完后,必須馬上開中斷。
任務(wù),在UCOS-ii實時系統(tǒng)中,一個任務(wù)其實就是一個線程,該任務(wù)可以認(rèn)為CPU完全屬于它自己。UCOS-ii中的任務(wù)擁有自己的堆棧和CPU寄存器,并且賦予一定的優(yōu)先級,在UCOS-ii中,它可能處于睡眠、就緒、運(yùn)行、等待、中斷服務(wù)狀態(tài)之一。1)睡眠狀態(tài):它是一個什么樣的狀態(tài)呢,它其實是指一個任務(wù)在內(nèi)存中就占用一部分ROM,它沒有被操作系統(tǒng)分配任務(wù)控制塊,它和其他狀態(tài)下的任務(wù)沒有任何直接聯(lián)系,也就是說不能被內(nèi)核調(diào)度,就好比 我們?nèi)コ燥,正在路上?)就緒狀態(tài):它是指操作系統(tǒng)給它分配了任務(wù)控制塊,已經(jīng)在就緒列表中登記中,它此時不能運(yùn)行是因為它的優(yōu)先級不是最高的,就好比我們?nèi)コ燥垥r在那排隊一樣;3)運(yùn)行狀態(tài):它 是指一個任務(wù)正在運(yùn)行,應(yīng)該好理解,就好比食堂工作人員在給我們打飯;4)等待狀態(tài):就是一個任務(wù)由于一個的條件沒有滿足,比如說在等待一個信號量的到來,而被至于等待狀態(tài),就像我們在打飯時,如果工作人員還沒有來,那你沒辦法,你就得等拉;5)中斷服務(wù)狀態(tài):就是在某個時刻突然因為一個中斷到來,那么 這個任務(wù)就會馬上被中斷掉,從而處于中斷服務(wù)狀態(tài),比如一個餓得受不了的人,如果搶你前面,本來該你打飯的,可是你看到他這個樣子,不忍心,那么你就被中斷了一會,中斷結(jié)束后,中斷掉的任務(wù)才會被繼續(xù)運(yùn)行,同樣的你才能夠打飯;呵呵,這個比喻好像損了點(diǎn)。
在操作系統(tǒng)中,內(nèi)核提供的基本服務(wù)就是任務(wù)切換,它實際上可以說是寄存器內(nèi)容的切換。自然任務(wù)切換是需要時間的,CPU寄存器越多,負(fù)荷也就越大。
      基于優(yōu)先級的內(nèi)核有兩種:不可剝奪型和可剝奪型。不可剝奪型內(nèi)核它要求每個任務(wù)互相合作,也稱為合作型內(nèi)核,每個任務(wù)不會被其它任務(wù)剝奪去,除非中斷的到來,即便如此,當(dāng)中斷結(jié)束后,還是會回到原來被中斷的程序,而不會切換到具有高優(yōu)先級的任務(wù)中去,這樣,高優(yōu)先級的任務(wù)就不能夠及時得到執(zhí)行,所以它的實時性是比較差的。但是它有一個很重要的特點(diǎn),就是它可以使用不可重入函數(shù),因為每個任務(wù)必須執(zhí)行完,才能釋放CPU,這樣它對其它任務(wù)調(diào)用不可重入函數(shù)沒有影響;同理在大多數(shù)情況下它無須使用信號量來保護(hù)資源。
      對于可剝奪型內(nèi)核,只要高優(yōu)先級任務(wù)一就緒,那它就會被執(zhí)行,而當(dāng)前正在執(zhí)行的任務(wù)就會被掛起;正因為如此,對于系統(tǒng)的資源就不能像不可剝奪型那樣去使用,而是在使用前必須檢查是否可以使用,即互斥機(jī)制來保護(hù)臨界資源,如果不用的話,那么如果低優(yōu)先級在使用臨界資源時,突然被高優(yōu)先級把CPU給搶過去了,那么低優(yōu)先級的臨界資源就可能會被告優(yōu)先級任務(wù)給破壞掉,所以可剝奪型內(nèi)核是不能調(diào)用不可重入函數(shù)的,必須對共享資源通過互斥來訪問?蓜儕Z型的優(yōu)點(diǎn)是是系統(tǒng)的響應(yīng)時間得到了優(yōu)化,且是可知的。
實時系統(tǒng)中,中斷優(yōu)先級反轉(zhuǎn)這一問題是出現(xiàn)得最多的,這問題的本質(zhì)其實也不能理解,就是低優(yōu)先級的任務(wù)占有高優(yōu)先級的任務(wù)所需要的資源,而使高優(yōu)先級不得不等低優(yōu)先級把資源釋放才能執(zhí)行,在UCOS中一樣也存在這問題。不過我們可以人為解決這問題,因為UCOS中可以動態(tài)的修改任務(wù)的優(yōu)先級,那么我們可以通過優(yōu)先級極限法,實際上就是把低優(yōu)先級的任務(wù)的優(yōu)先級提高為0級;使該任務(wù)不會被其他任務(wù)所中斷,直到該任務(wù)執(zhí)行完共享資源的代碼后再回到原來的優(yōu)先級。其實還有一種方法叫優(yōu)先級繼承法,它的含義就是把低優(yōu)先級任務(wù)的優(yōu)先級提高至與要用到該低優(yōu)先級任務(wù)所占用的資源;這要求內(nèi)核能夠允許一個優(yōu)先級可以對應(yīng)于多個任務(wù),同時支持時間片段輪度調(diào)度;顯然UCOS是不支持它的。更多的請見嵌入式實時系統(tǒng)中的優(yōu)先級反轉(zhuǎn)問題
上面提到了互斥,就簡要描述下互斥的條件;互斥我們一般在于共享資源打交道時經(jīng)常用到,那么我們對這些共享資源要怎么才能做到合理利用而被破壞呢,那就要使當(dāng)時內(nèi)核的環(huán)境滿足互斥條件:關(guān)中斷、使用測試并置位指令(要求有相應(yīng)的硬件)、禁止做任務(wù)切換、利用信號量。
信號量實際上是一種約束機(jī)制,熟悉操作系統(tǒng)應(yīng)該都懂它,他有以下作用:1>控制共享資源的使用權(quán)『滿足互斥機(jī)制』2>標(biāo)志某事件的發(fā)生3>使2個任務(wù)的行為同步。信號量可是01的兩個值也可以是0nn>2)的計數(shù)式的信號量;總之內(nèi)核是時刻跟蹤信號量的『這句話可要好好理解』。一般說信號量只能實施3種操作:初始化,也可以稱是建立,此時要初始化信號量的初始值,記住是不能小于0的;等待信號量,這時等待信號量的任務(wù)一般處于掛起狀態(tài),等待的任務(wù)如果發(fā)現(xiàn)信號量大于0,信號量的值減1,然后繼續(xù)執(zhí)行,如果為0,該任務(wù)就掛起;然后就是發(fā)送信號量,發(fā)送時,信號量會增一,同時會進(jìn)行任務(wù)調(diào)度。
死鎖也稱為抱死,指兩個任務(wù)無限期的等待對方的資源;防止死鎖的方法:1>先得到全部資源,再做下一步的工作2>用同樣的順序申請多個資源3>釋放資源是,使用相反的順序。還有就是定義超時來化解死鎖。
任務(wù)間的信息的傳遞有兩個途徑:全程變量和發(fā)消息給另一個任務(wù)。任務(wù)只能通過全程變量和中斷服務(wù)子程序通信。







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1