資料介紹
對很多嵌入式系統來說,一個設計良好的實時操作系統可以讓開發工程師把握系統執行任何任務或響應任何關鍵事件的時間,滿足系統實時性要求。為了理解RTOS如何通過系統調度策略實現實時性要求,本文介紹了搶占式調度、可搶占的內核、優先級繼續和中斷處理等概念。
在設計工業控制系統或醫療設備時,大部分工程師和系統設計工程師會認為采用RTOS是必需的。然而,網際路由器、車載娛樂系統和多媒體設備等普通應用還需要采用RTOS嗎?像Linux或Windows這樣的通用操作系統是否就能勝任呢?通常,這些產品需要采用RTOS,但是這個問題經常直到設計階段的后期才能意識到。
RTOS對于很多嵌入式系統來說不但是有益的,而且也是必要的,熟悉到這一點很重要。例如,一個播放如MPEG格式電影的設備,假如依靠軟件來實現其整個內容傳輸,可能會出現用戶難以接受的高丟幀率。然而,通過使用RTOS,系統設計工程師能夠準確地控制軟件過程的執行順序,從而保證按照給定的媒體速率進行播放。上述大部分情況適用于用戶希望對輸入做出立即響應的系統。通過RTOS,開發人員能夠保證由用戶的操作總能得到及時的響應,除非一個更重要的操作必須首先執行。
總之,一個好的RTOS支持開發人員控制系統執行任何任務或對任何重要事件做出反應的時間,并且能夠以一種可以猜測并且完全一致的形式滿足任務執行的最終期限要求。但是,假如RTOS崩潰,這些最終期限就不能被滿足。因此,RTOS必須提供高度的可靠性。非凡是它必須提供在不需要重啟的情況下,從軟件故障中快速并智能恢復的機制。
搶占式調度
在像Linux這樣的通用操作系統中,在對線程和進程的CPU占用上采用了“公平”調度策略。這樣的策略能夠提供良好的整體表現,但是不能保證高優先級、對時間要求嚴格的線程將優先于低優先級的線程執行。事實上,操作系統有時甚至會中斷高優先級的線程來為低優先級線程提供CPU時間。其結果可能造成對時間要求嚴格的線程很輕易地錯過它們的最終期限,甚至在一個高速的高端處理器上運行時也會出現這種情況。
而在RTOS中,線程按照其優先級順序執行。假如一個高優先級的線程預備運行時,它將在一個短的、有限時間間隔內從任何可能正在運行的低優先級進程接管CPU。另外,高優先級的線程能夠不被中斷地運行,直到它已經完成了需要做的事情-當然是在不被更高優先級進程搶占的前提下。這種方法就是搶占式調度,保證了高優先級線程始終滿足其最終期限,而不管有多少其它線程正在競爭CPU時間。
通過合理地控制線程優先級,開發者能顯著地提高很多對用戶非常重要的應用響應速度。然而,控制優先級可能是一把雙刃劍,當使用不當時它可能會潛在地導致低優先級的進程不能得到CPU時間。保證高優先級的進程和線程的同時確保不會使其它進程處于“饑餓”狀態的關鍵是要對它們的執行進行限制,通過對執行進行調整或在響應加載的過程中進行控制,開發人員能夠限制這些活動消耗的CPU時間比例,并支持低優先級進程獲得對CPU的共享。
優先級控制能夠使很多應用受益,包括像前面提到的媒體播放器。媒體播放器需要實現正常播放所要求的速率。在這種限制之下,一個讀線程和一個顯示線程可以被設計成依靠一個可編程的定時器來喚醒,緩沖或顯示一幀后進入睡眠狀態,直到下一個定時觸發。這提供了一種調整機制,支持高于正常用戶活動而又低于關鍵系統功能的優先級設置。換句話說,假如沒有更重要的任務預備運行,媒體播放將始終以給定的媒體速率執行。
最壞情形
搶占式調度僅在高優先級的線程在一個短的、有限時間段內搶占低優先級線程的情況下有效。否則,系統將不可能猜測要花費多長時間來執行一個給定的操作。因此,任何銷售進程模式的RTOS的供給商都必須提供針對下面兩種時間間隔提供最壞情形:線程切換時間,即當兩個線程處于同一進程的情況下,從執行一個線程的最后一條指令到執行下一個被調度線程的第一條指令所經過的時間;前后關系切換時間,其定義同上,但僅針對兩個線程處于不同進程的情況。
可以將線程看作是最小的“執行單元”,而將進程看作是一個或多個線程的“容器”,進程定義了線程將要在其中執行的地址空間。顯然,最壞情形的前后關系切換時間將比最壞情形的線程切換時間要慢,盡管在一個好的RTOS設計中差別可能是微不足道的。
將所有的線程放在幾個大的進程中將是錯誤的,因為線程提供的切換速度更快。雖然線程能實現并行處理優勢因而適合于某些設計,但將一個應用分成多個內存保護的進程使得代碼更輕易調試,提供了更好的錯誤隔離和恢復能力,并答應系統進行新功能的動態升級。
可搶占的內核
在大部分通用操作系統中,操作系統的內核是不可搶占的。其結果是,一個高優先級的進程不可能搶占一個內核調用,而是必須等待整個調用完成,即使這個調用是由系統中的低優先級進程發起的。另外,當經常在內核調用中執行的驅動程序或其它系統服務代表一個客戶線程執行的時候,所有的優先級信息經常會丟失,這導致了不可猜測的延遲并阻止了關鍵活動的準時完成。
而在RTOS中,內核操作是可搶占的。盡管仍然會存在一些時間窗口,在這些時間窗口中可能沒有搶占,但是這些時間間隔應該是相當短暫的,通常在幾百納秒。另外,必須有一個關于搶占被推遲或中斷被禁止的時間上限,這樣開發者可以確定最壞情形下的等待時間。
為了實現這個目標,操作系統內核必須盡可能簡潔,只有具有較短執行路徑的服務才被包含在內核中,任何需要大量工作的操作必須被安排到外部進程或線程。這種方法有助于通過內核確保最長的不可搶占代碼路徑具有一個時間上限。
優先級繼續
然而,為一個進程設定一個高優先級并不總能保證該進程能夠搶占低優先級的進程。有時候,系統會出現一種稱為優先級倒置的狀態,在這種狀態下,低優先級的進程將在“無意中”阻止較高優先級進程占用CPU。優先級倒置可能會表現為幾種形式,為了防止發生這種情況,RTOS必須提供一種稱為優先級繼續的功能。
假定系統有三個進程:A,B,Z。這里Z是一個為A和B提供服務的“服務器”進程。
現在假定A已經請求Z來執行一個計算,而在這期間,忽然B需要Z的服務。因為B擁有比A更高的優先級,一般會認為Z將立即掛起A的請求并將轉向為B服務。但是實際情況并非如此,因為Z比B具有更高的優先級。其結果是,B不能阻止Z完成它當前的工作,即對A做出響應。
從效果上看,低優先級的進程A占用了更高優先級進程B的CPU時間,這是引入優先級繼續的原因。通過使用RTOS提供的優先級繼續機制,系統可以在A發出請求的情況下,讓Z繼續A的低優先級。通過這種方式,B能夠在任何時候搶占A的請求。
假如一個應用程序分布于幾個通過網絡連接的處理器,那么RTOS也應該支持分布式優先級繼續,這樣可以按照優先級的順序處理來自多個處理器的請求。假如沒有優先級繼續,一個多處理器系統可能會落入無限的優先級倒置和死鎖中。
中斷處理
為了獲得對外部事件的及時響應,最小化硬件中斷發生到執行該中斷的第一條代碼的時間很重要。這個時間間隔稱為中斷延遲,為了保證中斷延遲盡可能小,一個好的RTOS應該在幾乎所有時間內都支持產生中斷。正如在關于內核搶占部分提到的那樣,一些重要的代碼段的確需要暫時屏蔽中斷。這種最大的屏蔽時間通常被定義為最大的中斷延遲。
在某些情況下,硬件中斷處理器必須調度并運行一個更高優先級的線程。在這樣的情況下,中斷處理器將返回并指示一個事件將被處理。這樣的處理將引入了第二種形式的延遲-調度延遲,這個延時必須在設計中加以考慮。調度延遲是介于用戶的中斷處理器的最后一條指令和驅動程序線程第一條指令的執行之間的時間。
在一個嵌入式系統中可能會同時出現多個硬件中斷。例如,在一個病人監護系統中,當一個傳感器記錄了病人心跳的一次變化并且網卡接收到網絡傳來的數據的同時,護士按了觸摸屏。很明顯,一些中斷應該立即得到處理,而其他的則可以延緩。通過提供對嵌套中斷的支持,RTOS支持嵌入式系統優先處理更高優先級的中斷。
如何提高可靠性
我們已經明白怎樣使RTOS具有可以猜測性,但是如何實現其可靠性呢?答案在很大程度上取決于RTOS的架構。
例如在實時執行模式架構中,大部分或所有軟件組件都在一個單一的內存地址空間中運行,包括操作系統內核、網絡協議棧、設備驅動程序、應用程序等。雖然很有效率,但這種架構有兩個明顯的缺陷:在任何組件中的一個指針錯誤,不論這個錯誤多么細微,都可能破壞操作系統內核或任何其它組件,導致不可猜測的行為和整個系統的崩潰;很難動態修復或替換任何有故障的組件。在大多數情況下,出現這些問題時系統復位是唯一的選擇。
一些RTOS,也像Linux一樣,試圖通過使用單內核架構來解決這個問題。在這種架構中,用戶的應用程序在隔離的、受保護內存地址空間中運行。假如一個應用程序試圖訪問其地址空間之外的數據,內存治理單元將通知操作系統,操作系統可能會采取保護措施,例如終止出錯進程。然而,這樣的操作系統需要將大多數或所有驅動程序、文件系統和其它系統服務綁定到內核中。因此,任何組件中的一個錯誤都可能帶來災難性的內核故障。
在設計工業控制系統或醫療設備時,大部分工程師和系統設計工程師會認為采用RTOS是必需的。然而,網際路由器、車載娛樂系統和多媒體設備等普通應用還需要采用RTOS嗎?像Linux或Windows這樣的通用操作系統是否就能勝任呢?通常,這些產品需要采用RTOS,但是這個問題經常直到設計階段的后期才能意識到。
RTOS對于很多嵌入式系統來說不但是有益的,而且也是必要的,熟悉到這一點很重要。例如,一個播放如MPEG格式電影的設備,假如依靠軟件來實現其整個內容傳輸,可能會出現用戶難以接受的高丟幀率。然而,通過使用RTOS,系統設計工程師能夠準確地控制軟件過程的執行順序,從而保證按照給定的媒體速率進行播放。上述大部分情況適用于用戶希望對輸入做出立即響應的系統。通過RTOS,開發人員能夠保證由用戶的操作總能得到及時的響應,除非一個更重要的操作必須首先執行。
總之,一個好的RTOS支持開發人員控制系統執行任何任務或對任何重要事件做出反應的時間,并且能夠以一種可以猜測并且完全一致的形式滿足任務執行的最終期限要求。但是,假如RTOS崩潰,這些最終期限就不能被滿足。因此,RTOS必須提供高度的可靠性。非凡是它必須提供在不需要重啟的情況下,從軟件故障中快速并智能恢復的機制。
搶占式調度
在像Linux這樣的通用操作系統中,在對線程和進程的CPU占用上采用了“公平”調度策略。這樣的策略能夠提供良好的整體表現,但是不能保證高優先級、對時間要求嚴格的線程將優先于低優先級的線程執行。事實上,操作系統有時甚至會中斷高優先級的線程來為低優先級線程提供CPU時間。其結果可能造成對時間要求嚴格的線程很輕易地錯過它們的最終期限,甚至在一個高速的高端處理器上運行時也會出現這種情況。
而在RTOS中,線程按照其優先級順序執行。假如一個高優先級的線程預備運行時,它將在一個短的、有限時間間隔內從任何可能正在運行的低優先級進程接管CPU。另外,高優先級的線程能夠不被中斷地運行,直到它已經完成了需要做的事情-當然是在不被更高優先級進程搶占的前提下。這種方法就是搶占式調度,保證了高優先級線程始終滿足其最終期限,而不管有多少其它線程正在競爭CPU時間。
通過合理地控制線程優先級,開發者能顯著地提高很多對用戶非常重要的應用響應速度。然而,控制優先級可能是一把雙刃劍,當使用不當時它可能會潛在地導致低優先級的進程不能得到CPU時間。保證高優先級的進程和線程的同時確保不會使其它進程處于“饑餓”狀態的關鍵是要對它們的執行進行限制,通過對執行進行調整或在響應加載的過程中進行控制,開發人員能夠限制這些活動消耗的CPU時間比例,并支持低優先級進程獲得對CPU的共享。
優先級控制能夠使很多應用受益,包括像前面提到的媒體播放器。媒體播放器需要實現正常播放所要求的速率。在這種限制之下,一個讀線程和一個顯示線程可以被設計成依靠一個可編程的定時器來喚醒,緩沖或顯示一幀后進入睡眠狀態,直到下一個定時觸發。這提供了一種調整機制,支持高于正常用戶活動而又低于關鍵系統功能的優先級設置。換句話說,假如沒有更重要的任務預備運行,媒體播放將始終以給定的媒體速率執行。
最壞情形
搶占式調度僅在高優先級的線程在一個短的、有限時間段內搶占低優先級線程的情況下有效。否則,系統將不可能猜測要花費多長時間來執行一個給定的操作。因此,任何銷售進程模式的RTOS的供給商都必須提供針對下面兩種時間間隔提供最壞情形:線程切換時間,即當兩個線程處于同一進程的情況下,從執行一個線程的最后一條指令到執行下一個被調度線程的第一條指令所經過的時間;前后關系切換時間,其定義同上,但僅針對兩個線程處于不同進程的情況。
可以將線程看作是最小的“執行單元”,而將進程看作是一個或多個線程的“容器”,進程定義了線程將要在其中執行的地址空間。顯然,最壞情形的前后關系切換時間將比最壞情形的線程切換時間要慢,盡管在一個好的RTOS設計中差別可能是微不足道的。
將所有的線程放在幾個大的進程中將是錯誤的,因為線程提供的切換速度更快。雖然線程能實現并行處理優勢因而適合于某些設計,但將一個應用分成多個內存保護的進程使得代碼更輕易調試,提供了更好的錯誤隔離和恢復能力,并答應系統進行新功能的動態升級。
可搶占的內核
在大部分通用操作系統中,操作系統的內核是不可搶占的。其結果是,一個高優先級的進程不可能搶占一個內核調用,而是必須等待整個調用完成,即使這個調用是由系統中的低優先級進程發起的。另外,當經常在內核調用中執行的驅動程序或其它系統服務代表一個客戶線程執行的時候,所有的優先級信息經常會丟失,這導致了不可猜測的延遲并阻止了關鍵活動的準時完成。
而在RTOS中,內核操作是可搶占的。盡管仍然會存在一些時間窗口,在這些時間窗口中可能沒有搶占,但是這些時間間隔應該是相當短暫的,通常在幾百納秒。另外,必須有一個關于搶占被推遲或中斷被禁止的時間上限,這樣開發者可以確定最壞情形下的等待時間。
為了實現這個目標,操作系統內核必須盡可能簡潔,只有具有較短執行路徑的服務才被包含在內核中,任何需要大量工作的操作必須被安排到外部進程或線程。這種方法有助于通過內核確保最長的不可搶占代碼路徑具有一個時間上限。
優先級繼續
然而,為一個進程設定一個高優先級并不總能保證該進程能夠搶占低優先級的進程。有時候,系統會出現一種稱為優先級倒置的狀態,在這種狀態下,低優先級的進程將在“無意中”阻止較高優先級進程占用CPU。優先級倒置可能會表現為幾種形式,為了防止發生這種情況,RTOS必須提供一種稱為優先級繼續的功能。
假定系統有三個進程:A,B,Z。這里Z是一個為A和B提供服務的“服務器”進程。
現在假定A已經請求Z來執行一個計算,而在這期間,忽然B需要Z的服務。因為B擁有比A更高的優先級,一般會認為Z將立即掛起A的請求并將轉向為B服務。但是實際情況并非如此,因為Z比B具有更高的優先級。其結果是,B不能阻止Z完成它當前的工作,即對A做出響應。
從效果上看,低優先級的進程A占用了更高優先級進程B的CPU時間,這是引入優先級繼續的原因。通過使用RTOS提供的優先級繼續機制,系統可以在A發出請求的情況下,讓Z繼續A的低優先級。通過這種方式,B能夠在任何時候搶占A的請求。
假如一個應用程序分布于幾個通過網絡連接的處理器,那么RTOS也應該支持分布式優先級繼續,這樣可以按照優先級的順序處理來自多個處理器的請求。假如沒有優先級繼續,一個多處理器系統可能會落入無限的優先級倒置和死鎖中。
中斷處理
為了獲得對外部事件的及時響應,最小化硬件中斷發生到執行該中斷的第一條代碼的時間很重要。這個時間間隔稱為中斷延遲,為了保證中斷延遲盡可能小,一個好的RTOS應該在幾乎所有時間內都支持產生中斷。正如在關于內核搶占部分提到的那樣,一些重要的代碼段的確需要暫時屏蔽中斷。這種最大的屏蔽時間通常被定義為最大的中斷延遲。
在某些情況下,硬件中斷處理器必須調度并運行一個更高優先級的線程。在這樣的情況下,中斷處理器將返回并指示一個事件將被處理。這樣的處理將引入了第二種形式的延遲-調度延遲,這個延時必須在設計中加以考慮。調度延遲是介于用戶的中斷處理器的最后一條指令和驅動程序線程第一條指令的執行之間的時間。
在一個嵌入式系統中可能會同時出現多個硬件中斷。例如,在一個病人監護系統中,當一個傳感器記錄了病人心跳的一次變化并且網卡接收到網絡傳來的數據的同時,護士按了觸摸屏。很明顯,一些中斷應該立即得到處理,而其他的則可以延緩。通過提供對嵌套中斷的支持,RTOS支持嵌入式系統優先處理更高優先級的中斷。
如何提高可靠性
我們已經明白怎樣使RTOS具有可以猜測性,但是如何實現其可靠性呢?答案在很大程度上取決于RTOS的架構。
例如在實時執行模式架構中,大部分或所有軟件組件都在一個單一的內存地址空間中運行,包括操作系統內核、網絡協議棧、設備驅動程序、應用程序等。雖然很有效率,但這種架構有兩個明顯的缺陷:在任何組件中的一個指針錯誤,不論這個錯誤多么細微,都可能破壞操作系統內核或任何其它組件,導致不可猜測的行為和整個系統的崩潰;很難動態修復或替換任何有故障的組件。在大多數情況下,出現這些問題時系統復位是唯一的選擇。
一些RTOS,也像Linux一樣,試圖通過使用單內核架構來解決這個問題。在這種架構中,用戶的應用程序在隔離的、受保護內存地址空間中運行。假如一個應用程序試圖訪問其地址空間之外的數據,內存治理單元將通知操作系統,操作系統可能會采取保護措施,例如終止出錯進程。然而,這樣的操作系統需要將大多數或所有驅動程序、文件系統和其它系統服務綁定到內核中。因此,任何組件中的一個錯誤都可能帶來災難性的內核故障。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- ucosII嵌入式實時操作系統實驗
- DSP硬實時操作系統用戶手冊下載 30次下載
- 安全關鍵的嵌入式實時操作系統內核 5次下載
- TIDSP/BIOSv6.35實時操作系統用戶指南 4次下載
- 硬件實時操作系統的設計 1次下載
- 基于QNX實時操作系統及應用分析 12次下載
- RTX實時操作系統內核演示 9次下載
- 如何選擇實時操作系統 0次下載
- 高效實時操作系統設計 26次下載
- BenOS實時操作系統解密 5次下載
- 實時操作系統RTEMS結構研究 78次下載
- 實時操作系統用于嵌入式應用系統的設計 42次下載
- Linux操作系統實時性分析及改進策略
- 嵌入式實時操作系統教程
- 4種實時操作系統實時性的分析對比
- 航電實時測試系統解決方案 301次閱讀
- 詳解實時操作系統和非實時操作系統 4957次閱讀
- 什么是實時操作系統(RTOS) 6149次閱讀
- 基于優先級調度的嵌入式實時操作系統內核詳解(下) 936次閱讀
- FreeRTOS:一個迷你的實時操作系統內核 1015次閱讀
- Linux是實時系統還是分時操作系統? 1572次閱讀
- 米爾科技嵌入式實時操作系統介紹 2348次閱讀
- 基于嵌入式實時系統的提高構件化嵌入式操作系統性能的方案設計 850次閱讀
- 適用于測控領域的4種實時操作系統對比分析 3700次閱讀
- 對實時操作系統特性的討論 5189次閱讀
- 五種基于STM平臺的且滿足實時控制要求操作的嵌入式操作系統的介紹 5292次閱讀
- 為什么選擇Linux操作系統?制約標準Linux操作系統實時性的因素 5488次閱讀
- 如何安裝實時操作系統RTOS 6275次閱讀
- 基于FreeRTOS的嵌入式實時操作系統的原理和實現 6714次閱讀
- 如何為遠程醫療設備選擇合適的實時操作系統? 3077次閱讀
下載排行
本周
- 1GD100PIX120C6SNA規格書
- 0.98 MB | 3次下載 | 免費
- 2一款入耳式耳機的仿真與分析
- 0.44 MB | 2次下載 | 免費
- 3Eurotherm TKS Temperature 用戶手冊
- 1.46 MB | 2次下載 | 免費
- 4人形機器人電機驅動和傳感報告
- 4.27 MB | 2次下載 | 免費
- 5無線系統中天線和RF元件電磁建模
- 7.48 MB | 1次下載 | 4 積分
- 6Multisim模擬電路仿真教程
- 1.93 MB | 1次下載 | 3 積分
- 7DMP300C1型微機變壓器保護測控裝置技術說明書
- 4.11 MB | 次下載 | 10 積分
- 8用MT3540芯片設計BOOST電路 1(可下載)
- 445.66 KB | 次下載 | 免費
本月
- 1晶體三極管的電流放大作用詳細說明
- 0.77 MB | 32次下載 | 2 積分
- 2Python從入門到精通背記手冊
- 18.77 MB | 27次下載 | 1 積分
- 3雙極型三極管放大電路的三種基本組態的學習課件免費下載
- 4.03 MB | 25次下載 | 1 積分
- 4AIWA HS-J303 MKⅡ維修手冊
- 22.47 MB | 23次下載 | 10 積分
- 5多級放大電路的學習課件免費下載
- 1.81 MB | 21次下載 | 2 積分
- 6九陽豆漿機高清原理圖
- 2.47 MB | 20次下載 | 1 積分
- 7AIWA HS-J202/HS-J202M/HS-J800維修手冊
- 13.60 MB | 15次下載 | 10 積分
- 81875功放原理圖
- 0.04 MB | 11次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191382次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183337次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81585次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論