chap02-實時系統概念_第1頁
chap02-實時系統概念_第2頁
chap02-實時系統概念_第3頁
chap02-實時系統概念_第4頁
chap02-實時系統概念_第5頁
已閱讀5頁,還剩101頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1,2021/1/26,嵌入式實時操作系統 c/os-ii,2021/1/26,2,第2章 實時系統概念,3,2021/1/26,實時系統概念,軟實時系統-各個任務盡快運行,不要求限定某一任務在多長時間內完成。 硬實時系統-任務要做到準時,4,2021/1/26,2.0 前/后臺系統,不復雜的小系統一般設計成如下圖所示的樣子。這種系統可稱為前后臺系統或超循環系統(super-loops,5,2021/1/26,后臺是一個循環輪詢系統一直在運行。 前臺是由一些中斷處理過程組成的。 當有一前臺事件(外部事件)發生時,引起中斷, 進行前臺處理, 處理完成后又回到后臺(通常又稱主程序,中斷1,中斷2,

2、isr1,isr2,前臺處理,后臺處理,isr3,實時性,認為所有的任務具有相同的優先級別 任務的執行通過fifo隊列排隊 某執行任務崩潰會造成整個系統的崩潰,8,2021/1/26,應用程序是一個無限的循環,循環中調用相應的函數完成相應的操作,這部分可以看成后臺行為(background)。中斷服務程序處理異步事件,這部分可以看成前臺行為(foreground)。后臺也可以叫做任務級。前臺也叫中斷級,9,2021/1/26,時間相關性很強的關鍵操作(critical operation)一定是靠中斷服務來保證的。因為中斷服務提供的信息一直要等到后臺程序走到該處理這個信息這一步時才能得到處理,

3、這種系統在處理信息的及時性上,比實際可以做到的要差。這個指標稱作任務級響應時間。最壞情況下的任務級響應時間取決于整個循環的執行時間。因為循環的執行時間不是常數,程序經過某一特定部分的準確時間也是不能確定的。進而,如果程序修改了,循環的時序也會受到影響,10,2021/1/26,2.01 代碼的臨界段,代碼的臨界段也稱為臨界區,指處理時不可分割的代碼。 一旦這部分代碼開始執行,則不允許任何中斷打入。為確保臨界段代碼的執行,在進入臨界段之前要關中斷,而臨界段代碼執行完以后要立即開中斷,11,2021/1/26,2.02 資源,資源-任何為任務所占用的實體都可稱為資源。 資源可以是輸入輸出設備,例如

4、打印機、鍵盤、顯示器,資源也可以是一個變量,一個結構或一個數組等,12,2021/1/26,2.03 共享資源,共享資源-可以被一個以上任務使用的資源叫做共享資源。 為了防止數據被破壞,每個任務在與共享資源打交道時,必須獨占該資源。這叫做互斥(mutual exclusion,13,2021/1/26,2.04 多任務,多任務運行的實現實際上是靠cpu(中央處理單元)在許多任務之間轉換、調度。cpu只有一個,輪番服務于一系列任務中的某一個。多任務運行很像前后臺系統,但后臺任務有多個。多任務運行使cpu的利用率得到最大的發揮,并使應用程序模塊化。在實時應用中,多任務化的最大特點是,開發人員可以將

5、很復雜的應用程序層次化。使用多任務,應用程序將更容易設計與維護,流程,并發多任務,后臺,前臺,isrs,tasks,多任務系統 多個順序執行的程序并行運行。 宏觀上看,所有的程序同時運行,每個程序運行在自己獨立的cpu上。 實際上,不同的程序是共享同一個cpu和其它硬件。因此,需要rtos來對這些共享的設備和數據進行管理。 每個程序都被編制成無限循環的程序,等待特定的輸入,執行相應的任務等。 這種程序模型將系統分成相對簡單的,相互合作的模塊,單處理器多任務系統,優點 將復雜的系統分解為相對獨立的多個線程, 達到“分而治之”的目的,從而降低系統的復雜性。 保證系統的實時性。 系統的模塊化好,提高

6、系統的可維護性。 缺點 需要采用一些新的軟件設計方法。 需要增加功能:線程間的協調,同步和通信功能。 需要對每一個共享資源互斥。 導致線程間的競爭。 需要使用rtos,rtos要增加系統的開銷,單處理器多任務系統,多處理器多任務系統,多任務可運行在多個處理器上,由操作系統統一調度,處理。 宏觀上看是并發的,微觀上看也是并發的。 多處理機系統分為緊耦合系統(tightly-coupled system)和松耦合系統(loosely-coupled system)兩種。 多處理器多任務系統目前還不成熟,18,2021/1/26,2.05 任務,一個任務,也稱作一個線程,是一個簡單的程序,該程序可以

7、認為cpu 完全只屬該程序自己。實時應用程序的設計過程,包括如何把問題分割成多個任務,每個任務都是整個應用的某一部分,每個任務被賦予一定的優先級,有它自己的一套cpu 寄存器和自己的棧空間,19,每個任務都是一個無限的循環。每個任務都處在以下5種狀態之一的狀態下,這5 種狀態是休眠態,就緒態、運行態、掛起態(等待某一事件發生)和被中斷態。 休眠態-相當于該任務駐留在內存中,但并不被多任務內核所調度。 就緒態-意味著該任務已經準備好,可以運行了,但由于該任務的優先級比正在運行的任務的優先級低,還暫時不能運行,20,運行態-是指該任務掌握了cpu 的控制權,正在運行中。 掛起狀態-也可以叫做等待事

8、件態waiting,指該任務在等待,等待某一事件的發生,(例如等待某外設的i/o 操作,等待某共享資源由暫不能使用變成能使用狀態,等待定時脈沖的到來或等待超時信號的到來以結束目前的等待,等等)。 被中斷態-發生中斷時,cpu提供相應的中斷服務,原來正在運行的任務暫不能運行,就進入了被中斷狀態,21,22,休眠態,掛起態,被中斷態,運行態,就緒態,2.06 任務切換(context switch or task switch,context switch 在有的書中翻譯成上下文切換,實際含義是任務切換,或cpu 寄存器內容切換。 當多任務內核決定運行另外的任務時,它保存正在運行任務的當前狀態(c

9、ontext),即cpu寄存器中的全部內容。這些內容保存在任務的當前狀況保存區(tasks context storage area),也就是任務自己的棧區之中。 任務切換-入棧工作完成以后,就是把下一個將要運行的任務的當前狀況從該任務的棧中重新裝入cpu 的寄存器,并開始下一個任務的運行。 任務切換過程增加了應用程序的額外負荷,2.07 內核(kernel,多任務系統中,內核負責管理各個任務,或者說為每個任務分配cpu時間,并且負責任務之間的通訊。內核提供的基本服務是任務切換。 內核本身也增加了應用程序的額外負荷,代碼空間增加rom 的用量,內核本身的數據結構增加了ram的用量。但更主要的是

10、,每個任務要有自己的棧空間,這一塊吃起內存來是相當厲害的。內核本身對cpu 的占用時間一般在2 到5個百分點之間,2.08 調度(scheduler,調度(scheduler),英文還有一詞叫dispatcher,也是調度的意思。這是內核的主要職責之一,就是要決定該輪到哪個任務運行了。 多數實時內核是基于優先級調度法的。每個任務根據其重要程度的不同被賦予一定的優先級。基于優先級的調度法指,cpu總是讓處在就緒態的優先級最高的任務先運行。 讓高優先級任務掌握cpu 的使用權,有兩種不同的情況,不可剝奪型內核 可剝奪型內核,2.09 不可剝奪型內核 (non-preemptive kernel,不

11、可剝奪型內核要求每個任務自我放棄cpu 的所有權。不可剝奪型調度法也稱作合作型多任務,各個任務彼此合作共享一個cpu。 不可剝奪型內核的一個優點是響應中斷快。 在任務級,不可剝奪型內核允許使用不可重入函數,不可剝奪型內核示例,不可剝奪型內核的最大缺陷在于其響應時間。高優先級的任務已經進入就緒態,但還不能運行,要等,也許要等很長時間,直到當前運行著的任務釋放cpu。不可剝奪型內核的任務級響應時間是不確定的,不知道什么時候最高優先級的任務才能拿到cpu 的控制權,完全取決于應用程序什么時候釋放cpu。 商業軟件幾乎沒有不可剝奪型內核,2.10 可剝奪型內核,當系統響應時間很重要時,要使用可剝奪型內

12、核。因此,c/os-以及絕大多數商業上銷售的實時內核都是可剝奪型內核。 最高優先級的任務一旦就緒,總能得到cpu 的控制權。當一個運行著的任務使一個比它優先級高的任務進入了就緒態,當前任務的cpu 使用權就被剝奪了,或者說被掛起了,那個高優先級的任務立刻得到了cpu的控制權,可剝奪型內核示例,使用可剝奪型內核,最高優先級的任務什么時候可以執行,可以得到cpu 的控制權是可知的。使用可剝奪型內核使得任務級響應時間得以最優化。 使用可剝奪型內核時,應用程序不應直接使用不可重入型函數。調用不可重入型函數時,要滿足互斥條件,這一點可以用互斥型信號量來實現,可重入型函數可以被一個以上的任務調用,而不必擔

13、心數據的破壞。 可重入型函數任何時候都可以被中斷,一段時間以后又可以運行,而相應數據不會丟失。可重入型函數或者只使用局部變量,即變量保存在cpu寄存器中或堆棧中。如果使用全局變量,則要對全局變量予以保護,2.11 可重入性(reentrancy,可重入型函數,void strcpy(char *dest, char *src) while (*dest+ = *src+) ; *dest = nul;,不可重入型函數,int temp; void swap(int *x, int *y) temp = *x; *x = *y; *y = temp;,使用以下技術之一即可使swap()函數具有可

14、重入性: 把temp 定義為局部變量 調用swap()函數之前關中斷,調動后再開中斷 用信號量禁止該函數在使用過程中被再次調用,2.12 時間片輪番調度法,當兩個或兩個以上任務有同樣優先級,內核允許一個任務運行事先確定的一段時間,叫做時間額度(quantum),然后切換給另一個任務。也叫做時間片調度。內核在滿足以下條件時,把cpu控制權交給下一個任務就緒態的任務: 當前任務已無事可做 當前任務在時間片還沒結束時已經完成了。 目前,c/os-不支持時間片輪番調度法。應用程序中各任務的優先級必須互不相同,2.13 任務優先級,每個任務都有其優先級。任務越重要,賦予的優先級應越高,2.14 靜態優先

15、級,應用程序執行過程中諸任務優先級不變,則稱之為靜態優先級。在靜態優先級系統中,諸任務以及它們的時間約束在程序編譯時是已知的,2.15動態優先級,應用程序執行過程中,任務的優先級是可變的,則稱之為動態優先級。實時內核應當避免出現優先級反轉問題,2.16優先級反轉,使用實時內核,優先級反轉問題是實時系統中出現得最多的問題。 為防止發生優先級反轉,內核能自動變換任務的優先級,這叫做優先級繼承(priority inheritance)。但c/os-不支持優先級繼承,一些商業內核有優先級繼承功能,2.17 任務優先級分配,給任務定優先級可不是件小事,因為實時系統相當復雜。許多系統中,并非所有的任務都

16、至關重要。不重要的任務自然優先級可以低一些。實時系統大多綜合了軟實時和硬實時這兩種需求。軟實時系統只是要求任務執行得盡量快,并不要求在某一特定時間內完成。硬實時系統中,任務不但要執行無誤,還要準時完成。 單調執行率調度法rms(rate monotonic scheduling)-用于分配任務優先級。這種方法基于哪個任務執行的次數最頻繁,執行最頻繁的任務優先級最高,2.18 互斥條件,實現任務間通訊最簡便到辦法是使用共享數據結構。特別是當所有到任務都在一個單一地址空間下,能使用全程變量、指針、緩沖區、鏈表、循環緩沖區等,使用共享數據結構通訊就更為容易。雖然共享數據區法簡化了任務間的信息交換,但

17、是必須保證每個任務在處理共享數據時的排它性,以避免競爭和數據的破壞。與共享資源打交道時,使之滿足互斥條件最一般的方法有,關中斷 使用測試并置位指令 禁止做任務切換 利用信號量,2.18.1 關中斷和開中斷,程序清單 關中斷和開中斷 disable interrupts; /*關中斷*/ access the resource (read/write from/to variables); /*讀/寫變量*/ reenable interrupts; /*重新允許中斷*,實際上c/os-提供兩個宏調用,允許用戶在應用程序的c 代碼中關中斷然后再開中斷:os_enter_critical()和os

18、_exit_critical,這兩個宏調用的使用法見程序: 程序清單2.4利用c/os_ 宏調用關中斷和開中斷 void function (void) os_enter_critical(); . . /*在這里處理共享數據*/ . os_exit_critical();,關中斷的時間不能太長。因為它影響整個系統的中斷響應時間,即中斷延遲時間。當改變或復制某幾個變量的值時,應想到用這種方法來做。這也是在中斷服務子程序中處理共享變量或共享數據結構的唯一方法。在任何情況下,關中斷的時間都要盡量短。 如果使用某種實時內核,一般地說,關中斷的最長時間不超過內核本身的關中斷時間,就不會影響系統中斷延遲

19、,2.18.2 測試并置位,如果不使用實時內核,當兩個任務共享一個資源時,一定要約定好,先測試某一全程變量,如果該變量是0,允許該任務與共享資源打交道。為防止另一任務也要使用該資源,前者只要簡單地將全程變量置為1,這通常稱作測試并置位(test-and-set),或稱作tas。tas操作可能是微處理器的單獨一條不會被中斷的指令,或者是在程序中關中斷做tas操作再開中斷,程序清單2.5 利用測試并置位處理共享資源 disable interrupts; 關中斷 if (access variable is 0) 如果資源未占用,標志為0 set variable to 1; 置資源不可用,標志為

20、1 reenable interrupts; 重開中斷 access the resource; 處理該資源 disable interrupts; 關中斷 set the access variable back to 0; 清資源不可使用,標志為0 reenable interrupts; 重新開中斷 else 否則 reenable interrupts; 開中斷 /* you dont have access to the resource, try back later; */ /* 資源不可使用,以后再試; */,2.18.3 禁止,然后允許任務切換,如果任務不與中斷服務子程序共享

21、變量或數據結構,可以使用禁止、然后允許任務切換。 如下述程序清單所示,以c/os-的使用為例,兩個或兩個以上的任務可以共享數據而不發生競爭。注意,此時雖然任務切換是禁止了,但中斷還是開著的。如果這時中斷來了,中斷服務子程序會在這一臨界區內立即執行。中斷服務子程序結束時,盡管有優先級高的任務已經進入就緒態,內核還是返回到原來被中斷了的任務。直到執行完給任務切換開鎖函數osschedunlock (),內核再看有沒有優先級更高的任務被中斷服務子程序激活而進入就緒態,如果有,則做任務切換,程序清單2.6 用給任務切換上鎖,然后開鎖的方法實現數據共享. void function (void) oss

22、chedlock(); . . /* you can access shared data in here (interrupts are recognized) */ . /*在這里處理共享數據(中斷是開著的)*/ osschedunlock();,2.18.4 信號量(semaphores,信號量是60年代中期edgser dijkstra 發明的。信號量實際上是一種約定機制,在多任務內核中普遍使用。信號量用于: 控制共享資源的使用權(滿足互斥條件) 標志某事件的發生 使兩個任務的行為同步 信號像是一把鑰匙,任務要運行下去,得先拿到這把鑰匙。如果信號已被別的任務占用,該任務只得被掛起,直到

23、信號被當前使用者釋放,信號是只有兩個值的變量,信號量是計數式的。只取兩個值的信號是只有兩個值0 和1的量,因此也稱之為信號量。計數式信號量的值可以是0 到255 或0 到65535,或0 到4294967295,取決于信號量規約機制使用的是8 位、16位還是32 位。 一般地說,對信號量只能實施三種操作:初始化initialize),也可稱作建立(create);等信號(wait)也可稱作掛起(pend);給信號(signal)或發信號(post,信號量初始化時要給信號量賦初值,等待信號量的任務表(waiting list)應清為空,想要得到信號量的任務執行等待(wait)操作。 如果該信號量

24、有效(即信號量值大于0),則信號量值減1,任務得以繼續運行。 如果信號量的值為0,等待信號量的任務就被列入等待信號量任務表,任務以發信號操作(signal)釋放信號量。如果沒有任務在等待信號量,信號量的值僅僅是簡單地加1。如果有任務在等待該信號量,那么就會有一個任務進入就緒態,信號量的值也就不加1。 收到信號量的任務可能是以下兩者之一 等待信號量任務中優先級最高的,或者是 最早開始等待信號量的那個任務,即按先進先出的原則(first in first out ,fifo,程序清單2.7 通過獲得信號量處理共享數據 os_event *shareddatasem; void function (

25、void) int8u err; ossempend(shareddatasem, 0,如果中斷服務程序或當前任務激活了一個高優先級的任務,高優先級的任務立即開始執行,當諸任務共享輸入輸出設備時,信號量特別有用。 如:多任務同時訪問打印機。使用信號量并給信號量賦初值1(用二進制信號量)。要想使用打印機的任務,先要得到該資源的信號量,用獲取信號量來得到打印機使用權,每個任務都知道有個信號表示資源可不可以使用。要想使用該資源,要先得到這個信號。然而有些情況下,最好把信號量藏起來,各個任務在同某一資源打交道時,并不知道實際上是在申請得到一個信號量。例如,多任務共享一個rs-232c 外設接口,各任務

26、要送命令給接口另一端的設備并接收該設備的回應,在任務級看不到隱含的信號量,程序清單 2.8 隱含的信號量。 int8u commsendcmd(char *cmd, char *response, int16u timeout) acquire ports semaphore; send command to device; wait for response (with timeout); if (timed out) release semaphore; return (error code); else release semaphore; return (no error);,計數式信

27、號量用于某資源可以同時為幾個任務所用。例如,用信號量管理緩沖區陣列(buffer pool),如圖2.12 所示。緩沖區陣列中共有10 個緩沖區,任務通過調用申請緩沖區函數bufreq()向緩沖區管理方申請得到緩沖區使用權。當緩沖區使用權還不再需要時,通過調用釋放緩沖區函數bufrel()將緩沖區還給管方。函數示意碼如程序清單2.9所示,程序清單 2.9 用信號量管理緩沖區。 buf *bufreq(void) buf *ptr; acquire a semaphore; disable interrupts; ptr = buffreelist; buffreelist = ptr-bufn

28、ext; enable interrupts; return (ptr); void bufrel(buf *ptr) disable interrupts; ptr-bufnext = buffreelist; buffreelist = ptr; enable interrupts; release semaphore;,處理簡單的共享變量也使用信號量則是多余的。請求和釋放信號量的過程是要花相當的時間的。有時這種額外的負荷是不必要的。用戶可能只需要關中斷、開中斷來處理簡單共享變量,以提高效率,2.19 死鎖(或抱死)(deadlock (or deadly embrace),死鎖也稱作抱死

29、,指兩個任務無限期地互相等待對方控制著的資源。設任務t1 正獨享資源r1,任務t2 在獨享資源r2,而此時t1 又要獨享r2,t2 也要獨享r1,于是哪個任務都沒法繼續執行了,發生了死鎖。最簡單的防止發生死鎖的方法是讓每個任務都: 先得到全部需要的資源再做下一步的工作 用同樣的順序去申請多個資源 釋放資源時使用相反的順序,內核大多允許用戶在申請信號量時定義等待超時,以此化解死鎖。當等待時間超過了某一確定值,信號量還是無效狀態,就會返回某種形式的出現超時錯誤的代碼,這個出錯代碼告知該任務,不是得到了資源使用權,而是系統錯誤。死鎖一般發生在大型多任務系統中,在嵌入式系統中不易出現,2.20 同步,

30、可以利用信號量使某任務與中斷服務同步(或者是與另一個任務同步,這兩個任務間沒有數據交換,圖2.13 用信號量使任務與中斷服務同步,用來實現同步機制的信號量初始化成0,信號量用于這種類型同步的稱作單向同步(unilateral rendezvous)。一個任務做i/o操作,然后等信號回應。當i/o 操作完成,中斷服務程序(或另外一個任務)發出信號,該任務得到信號后繼續往下執行,如果內核支持計數式信號量,信號量的值表示尚未得到處理的事件數。請注意,可能會有一個以上的任務在等待同一事件的發生,則這種情況下內核會根據以下原則之一發信號給相應的任務: 發信號給等待事件發生的任務中優先級最高的任務,或者

31、發信號給最先開始等待事件發生的那個任務,兩個任務可以用兩個信號量同步它們的行為。如圖2.14 所示。這叫做雙向同步(bilateral rendezvous)。雙向同步同單向同步類似,只是兩個任務要相互同步,圖2.14 兩個任務用信號量同步彼此的行為,程序清單2.10 雙向同步 task1() for (;) perform operation; signal task #2; (1) wait for signal from task #2; (2) continue operation; task2() for (;) perform operation; signal task #1;

32、(3) wait for signal from task #1; (4) continue operation;,2.21 事件標志(event flags,當某任務要與多個事件同步時,要使用事件標志。若任務需要與任何事件之一發生同步,可稱為獨立型同步(即邏輯或關系)。任務也可以與若干事件都發生了同步,稱之為關聯型(邏輯與關系)。獨立型及關聯型同步如圖2.15所示,圖2.15 獨立型及關聯型同步,可以用多個事件的組合發信號給多個任務。如圖2.16所示,典型地,8 個、16個或32個事件可以組合在一起,取決于用的哪種內核。每個事件占一位(bit),以32位的情況為多。任務或中斷服務可以給某一位

33、置位或復位,當任務所需的事件都發生了,該任務繼續執行,至于哪個任務該繼續執行了,是在一組新的事件發生時斷定的。也就是在事件位置位時做判斷,2.22 任務間的通訊(intertask communication,有時很需要任務間的或中斷服務與任務間的通訊。這種信息傳遞稱為任務間的通訊。任務間信息的傳遞有兩個途徑:通過全程變量或發消息給另一個任務。 用全程變量時,必須保證每個任務或中斷服務程序獨享該變量。中斷服務中保證獨享的唯一辦法是關中斷。如果兩個任務共享某變量,各任務實現獨享該變量的辦法可以是關中斷再開中斷,或使用信號量,問題:任務如何知道全局變量被修改? 解決方法: 以信號量方式向任務發信號

34、 該任務以查詢方式不斷周期性地查詢變量的值 使用郵箱或消息隊列,2.23 消息郵箱(message mail boxes,通過內核服務可以給任務發送消息。典型的消息郵箱也稱作交換消息,是用一個指針型變量,通過內核服務,一個任務或一個中斷服務程序可以把一則消息(即一個指針)放到郵箱里去。同樣,一個或多個任務可以通過內核服務接收這則消息。發送消息的任務和接收消息的任務約定,該指針指向的內容就是那則消息,內核一般提供以下郵箱服務: 郵箱內消息的內容初始化,郵箱里最初可以有,也可以沒有消息 將消息放入郵箱(post) 等待有消息進入郵箱(pend) 如果郵箱內有消息,就接受這則消息。如果郵箱里沒有消息

35、,則任務并不被掛起(accept),用返回代碼表示調用結果,是收到了消息還是沒有收到消息。 消息郵箱也可以當作只取兩個值的信號量來用,2.24 消息隊列(message queue,消息隊列實際上是郵箱陣列,圖2.18 消息隊列,2.25 中斷,中斷是一種硬件機制,用于通知cpu有個異步事件發生了。中斷一旦被識別,cpu保存部分(或全部)現場(context)即部分或全部寄存器的值,跳轉到專門的子程序,稱為中斷服務子程序(isr)。中斷服務子程序做事件處理,處理完成后,程序回到: 在前后臺系統中,程序回到后臺程序 對不可剝奪型內核而言,程序回到被中斷了的任務 對可剝奪型內核而言,讓進入就緒態的

36、優先級最高的任務開始運行,圖2.19 中斷嵌套,2.26 中斷延遲,所有實時系統在進入臨界區代碼段之前都要關中斷,執行完臨界代碼之后再開中斷。關中斷的時間越長,中斷延遲就越長。中斷延遲由下面表達式給出。 中斷延遲 = 關中斷的最長時間 + 開始執行中斷服務子程序的第一條指令的時間,2.27 中斷響應,中斷響應-從中斷發生到開始執行用戶的中斷服務子程序代碼來處理這個中斷的時間。 中斷響應時間包括開始處理這個中斷前的全部開銷。(保護現場,對前后臺系統,保存寄存器以后立即執行用戶代碼,中斷響應時間由下式給出。 中斷響應時間 = 中斷延遲 + 保存cpu內部寄存器的時間 對于不可剝奪型內核,微處理器保

37、存內部寄存器以后,用戶的中斷服務子程序代碼全立即得到執行。不可剝奪型內核的中斷響應時間由下式給出。 中斷響應時間 = 中斷延遲 + 保存cpu內部寄存器的時間,對于可剝奪型內核,則要先調用一個特定的函數,該函數通知內核即將進行中斷服務,使得內核可以跟蹤中斷的嵌套。對于 c/os-說來,這個函數是osintenter(),可剝奪型內核的中斷響應時間由下式給出: 中斷響應 中斷延遲 + 保存cpu 內部寄存器的時間 + 內核的進入中斷服務函數的執行時間 中斷響應是系統在最壞情況下的響應中斷的時間,2.28 中斷恢復時間(interrupt recovery,中斷恢復時間定義為微處理器返回到被中斷了的程序代碼所需要的時間。 前后臺系統: 中斷恢復時間 = 恢復cpu 內部寄存器值的時間 + 執行中斷返回指令的時間 不可剝奪型內核: 中斷恢復時間 = 恢復cpu 內部寄存器值的時間 + 執行中斷返回指令的時間,可剝奪型內核在中斷服務子程序的末尾,要調用一個由實時內核提供的函數。c/os-中這個函數為osintexit(),用于判斷中斷是否脫離了所有的中斷嵌套。 中斷恢復時間 = 判定是否有優先級更高的任務進入了就緒態的時間 + 恢復那個優先級更高任務的cpu內

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論