找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3243|回復: 0
打印 上一主題 下一主題
收起左側(cè)

實時系統(tǒng)概念

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72519 發(fā)表于 2015-1-23 20:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這幾天邊看電影邊整理的筆記。大家得捧場哈!以后會經(jīng)常有的。

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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表