實時系統的特點:必須符合邏輯和時序要求,否則會出錯。
分類:1.軟實時系統:各個任務盡快執行,不限定時間。
2.硬實時系統:各任務必須盡快執行 + 準時。(要求更嚴格)
大多數實時系統是二者的聯合,且進行封裝,使用者不可見。
前/後台系統,又稱超迴圈系統,簡單的小型系統設計一般都是基於此,若應用需要省電,將使得處理器大部分時間處於停機狀態。程式包含乙個無限迴圈的模組實現需要的操作(即後台),中斷處理程式實現非同步事件(即前台)。因此前台也叫做中斷級,後台也叫做任務級。
臨界操作應該在任務級中被執行,如不可避免的要在中斷服務程式中執行,也要確保是在很短的時間內完成。因為這會導致中斷服務程式占用過長的時間。
通常只在中斷服務程式中使能相關的資訊,然後到後台程式中執行相應的操作。這叫任務級響應,任務級響應的時間是不確定的,依賴於後台迴圈一次的時間,最不理想的是整個迴圈的執行時間。
**的臨界段:
即臨界區,不可中斷進入,因此進入前需關中斷,結束後立即開中斷。
共享資源:
資源是指任何可以被占用的實體。若乙個資源被多個任務使用,就可被稱為「共享資源」。
任務:即執行緒,cpu的主要任務就是實現任務的排程,多工的實現就需要作業系統的幫助。
每個任務都是無限迴圈,可包括五個狀態:
1.休眠:駐留在記憶體,不被呼叫。
2.就緒:已經準備好,若資源或者優先順序滿足就可以執行。「時刻準備著」
3.執行:running
4.掛起:由於各種因素(共享資源被占用、等待時鐘、等待響應等等)處於等待狀態。
5.被中斷:當前任務暫停,切換到另一任務。
任務切換:
即上下文切換,表示任務做切換或者cpu暫存器內容切換。實現任務切換需要兩個步驟:
1.儲存當前狀態到任務自己的棧區中,以便返回時可以繼續使用。(入棧)
2.將需要執行的任務從棧中取出,放入cpu暫存器,開始執行。
任務切換會增加程式的負荷,與cpu的內部暫存器個數相關。
實時系統的排程大多基於優先順序排程法,即總是讓優先順序高的任務先執行,基於優先順序的核心包括不可剝奪型和可剝奪型。
不可剝奪型核心:
即當前任務不可被打斷,即使優先順序較高,只有當前任務完成才能釋放cpu的使用權。但非同步事件可以通過中斷實現,中斷服務將使得高優先順序的任務由掛起變為就緒狀態。
優點:1.響應中斷快,可以使用不可重入函式。任務級響應時間比前/後台系統快得多。
2.幾乎不使用訊號量保護共享資源,不擔心搶占。
缺點:子響應時間較長,高優先順序的等待時間肯較長,且無法確定需要等待多長時間,只能等待當前任務完成。
商業軟體使用較少。
可剝奪型核心:
與不可剝奪型核心不同,可剝奪型核心若有高優先順序任務請求,且準備就緒,cpu資源立即被搶占,當前任務被掛起。但是為了防止當前任務和高優先順序任務同時呼叫同乙個資源,需要進行滿足互斥條件(互斥訊號量)。
任務優先順序時間最優化。
可重入函式:
以後補充,p42。
時間片輪番排程法:
多個任務的優先順序相同時,先執行其中乙個,到達「時間額度」時,切換另乙個。
切換條件:
1.當前任務已經空閒;
2.當前任務在時間片還沒到達時已經完成;
3.時間片結束。
任務優先順序:
靜態優先順序:優先順序確定。
動態優先順序:優先順序可以調整。
優先順序反**低優先順序的任務可以先於高的執行。
例如:當高低優先順序任務訪問共享資源時,由於低優先順序的任務已經提前執行 ,獲取了共享資源,當高優先順序的任務訪問時,會暫時剝奪cpu的使用權,但是要使用的資源被占用,無法繼續執行,只能進入掛起狀態,cpu使用權歸還給原先任務,等待資源釋放,再執行。
避免方法:將低優先順序任務的優先順序提高,但在多數情況下可能會造成資源浪費,因為提高優先順序需要消耗資源,且其他任務很可能不需要訪問共享資源。
關於優先順序的分配:單次執行率排程(rms)—基於執行次數,次數越多,優先順序越高。
互斥:為了避免資源的競爭和資料的破壞。一般採用的方法有:
1.開關中斷:在讀寫變數之前關中斷,之後開中斷。注意關中斷時間不要太長,否則會影響系統的在讀響應時間(中斷延遲時間),一般不超過核心本身的關中斷時間。
2.測試並置位操作:若某資源被占用,則置位,標誌=1。
3.禁止,然後允許任務切換:類似不可剝奪型核心,「加鎖」。
4.訊號量:控制關係資源的使用權(滿足互斥)、標誌某事件的發生、使2個任務同步。(以後補充)
一般3個操作:
1.初始化:賦初值,等待訊號量的任務表清空。
2.等待/掛起(pend):訊號量》0(有效),訊號量值-1;訊號量=0,等待的任務進入等待列表。主要是否等待超時,若超時進入就緒狀態,並返回出錯資訊。
3.發訊號(post):若要釋放訊號量(signal),如果有任務在等待該訊號量,則需要將訊號量不變,否則+1。
任務間通訊:
通過全域性變數或給另乙個任務發出訊息實現任務間或中斷服務和任務間的通訊。
為了避免全域性變數或者中斷服務程式被改變,可以使用郵箱或者訊息佇列。
郵箱通訊的機理:
傳送方通過核心服務把一封郵件投遞到郵箱,核心完成投遞任務後通知等待列表中的接收方收取郵件。在整個投遞過程中,核心充當了郵遞員的角色。這裡的「郵件」通常是乙個指標,接收方可以通過該指標獲取郵件內容。
郵箱的基本操作:
核心通常提供如下的郵箱服務:初始化郵箱的內容。郵箱最初可以包含或者不包含郵件。把郵件傳送到郵箱(post)。如果郵箱已滿,則返回錯誤資訊。以「掛起」方式接收郵件(pend)。如果郵箱為空,則把取信者掛起;若超過一定時間郵箱仍為空,則返回超時資訊。
以「非掛起」方式接收郵件(accept)。如果郵箱為空,則返回乙個空指標。 當希望一次性向某個任務傳送多則訊息時,郵箱就有點見肘了。因為乙個郵箱只能裝一封信。把多上郵箱集中到一起管理和使用就變成了訊息佇列,所以訊息佇列的操作和郵箱很相似。可以簡單地認為,訊息佇列是郵箱陣列。 如果傳送者是一對一的方式傳送郵件,則等待列表中的優先順序最高的任務將獲取郵件;如果是以廣播的方式傳送郵件,則等待該郵件的所有任務將獲得此郵件。
(摘自: )
[1] jcan j.labrossc.嵌入式實時作業系統uc/os-ii[m].美。邵貝貝等譯.2003: 34-71
實時系統概念
後台是各種面向硬體的程式,如中斷,定時器,gpio等。前台是 main 迴圈中不斷呼叫各種函式實現功能。指處理時不可分割的 一旦這部分 執行就不可以打斷 為了確保 能正常執行,進入臨界段 錢需要關中斷,執行完後再開中斷。乙個任務也就是乙個執行緒,是乙個簡單的程式。任務間通訊最簡單的辦法是使用資料共享...
UCOS 實時多工作業系統
ucosii 的前身是 ucos,最早出自於 1992 年美國嵌入式系統專家 jean j.labrosse 在 嵌 入式系統程式設計 雜誌的 5 月和 6 月刊上刊登的文章 並把 ucos 的原始碼發布在該雜誌的 bbs 上。目前最新的版本 ucosiii 已經出來,但是現在使用最為廣泛的還是 u...
實時系統基本概念 1
前後臺系統 基本概念 應用程式是乙個無限迴圈,迴圈中呼叫相應的函式完成相應的操作,這部分可以看做後台行為,也可以叫做任務急。中斷服務程式處理非同步事件,這部分可以看做前台行為,也叫中斷級。缺陷 實時性差。因為中斷服務提供的資訊一直要等到後台程式執行到該處理這個資訊時,才能得到處理。這比實際可以做到的...