新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 擁有微軟Windows CE的實時系統

        擁有微軟Windows CE的實時系統

        作者: 時間:2011-02-27 來源:網絡 收藏

        介紹

        Microsoft Windows CE

        快速反應的應用常常管理嚴格的時間反應。例如,制造過程控制,高速的數據采集設備,電訊交換設備,醫用設備,空中“有線”控制,武器發射裝備,空間航行和導航,實驗室,實驗控制,汽車發動機控制,機器人系統。

        為保證這種功能,就意味著不僅需要計算精確性,還有結果的時間性,此種應用必須在指定的時間參數內做出反應。

        實時系統的廣義定義是“對任何外部刺激,計算機做出及時反應是至關重要的系統”,標準定義在Internet newsgroup corp realtime group中 。實時定義為:一個實時系統它的計算正確性,不僅依靠于計算邏輯上的正確,還包括及時的產生結果。如果沒有達到系統時間限制條件,系統也是失效的。

        搞清楚實時系統和實時操作系統(RTOS)的區別至關重要,實時系統代表所有系統組成設備——硬件,操作系統和應用——它需要達到系統的要求,實時操作系統(RTOS)只是整個實時系統的一個組成部分,它必須提供足夠的功能以確保整個實時系統達到要求。

        同樣,搞清快速操作系統和實時操作系統之間區別,也很重要,對于一個RTOS雖然達到全面要求十分有用,但并不是它自己達到這種要求。Internet neusgronp cornp.realtime列舉了作為一個實時操作系統,必須達到的要求:

        • OS(操作系統)必須是多線程和優先級之分。
        • OS必須支持線程優先級。
        • 一個優先級繼承的系統必須存在。
        • OS必須支持可預測的線程,同步發送機理。

        另外,OS的行為必須是可預測的,這意味實時系統的開發者必須對系統中斷級,系統調用和分時了如指掌:

        • 必須知道OS和設備驅動器的中數據匹配最大時間。
        • 設備驅動器用來處理一個中斷最大時間和關于這些驅動器的中斷申請信息必須清楚。
        • 中斷響應(從中斷到運行時間),必須可預測并滿足功能要求。

        每次系統調用時間必須可以預測,并且獨立于系統的對象數目。本篇論文論述了微軟Windows CE 操作系統是如何達到一個實時系統的要求,更有意義的是,Windows CE 保證一個時間的上限,它在收到中斷后開始一個實時的優先級線程。本論文論述了對特定參考平臺的中數據響應時間,參考為有 Hinathi SH3 的微處理器的 “Odo” 平臺。


        Microsoft Windows CE

        概論

        微軟Windows CE 被設計成針對小型設備(它是典型的擁有有限內存的無磁盤系統)的通用操作系統。Windows CE 可以通過設計一層位于內核和硬件之間代碼來用設定硬件平臺,這即是眾所周知的硬盤壓縮層(HAL),(在以前解釋時,這被稱為 OEMC (原始設備制造)適應層,即 OAL; 內核壓縮層,即 KAL。 以免與微軟的 Windows NT 操作系統 HAL 混淆)

        不象其它的微軟 Windows 操作系統,Windows CE 并不是代表一個標準的相同的對所有平臺適用的軟件。為了足夠靈活以達到適應廣泛產品需求, Windows CE 采用標準模式,這就意味著,它能夠由一系列軟件模式做出選擇,從而使產品定制。另外,一些可利用模式也可作為其組成部分,這意味著這些模式能夠通過從一套可利用的組份做出選擇,從而成為標準模式,通過選擇,能夠達到系統要求的最小模式, OEM 能夠減少存儲腳本和操作系統的運行。

        Windows CE 關于 VC 5.0 開發系統工具包,提供系統庫、工具、文本和樣本代碼,以使 OEMS 能夠對特定的硬件平臺使 Windows CE 標準定制。工具包也包括設備驅動包(DDK)和軟件開發包(SDK) ,DDK 提供了關于寫驅動器的附加文本,SDK 提供庫、頭文件、樣本代碼、文本以允許,開發者對基于 Windows CE 的平臺進行寫操作。 Windows CE 提供了相同的程序界面,以用來為其它的視窗操作系統開發功能,例如,Windows CE 版本 1.01支持大約1000個微軟的Win 32 API 函數的其中500個。這就意味著大量不同類的工具,第三方書籍,關于 Win 32 開發者訓練教程,可以替代或為 Windows CE 系統的開發者所用。

        實時系統的開發者能夠使用,關于VDFF 5.0 的嵌入式工具包,以把操作系統轉移到特定的平臺,并為這個平臺開發附加設備驅動器和實時功能。

        線程和線程優先權級

        Windows CE 是有優先級的多任務操作系統,它允許多重功能、進程,在相同時間系統中運行 Windows CE 支持最大的 32 位同步進程。一個進程包括一個或多個線程,每個線程代表進程的一個獨立部分,一個線程被指定為進程的基本線程,進程也能創造一個未定數目的額外線程,額外線程實際數目,僅由可利用的系統資源限定。

        Windows CE 利用基于優先級的時間片演算法以安排線程的執行,Windows CE 支持八個不同的優先級,由0到7,0代表最高級,它在頭文件 Winbasw.h中定義。

        優先級描述
        0
        (最高級)
        關鍵的線程優先級
        (最高優先等級)
        1最高線程優先級
        2高于通常的線程優先級
        3通常線程優先級
        4低于常規線程優先級
        5最低線程優先級
        6高于IDLE的線程優先級
        7
        (最低)
        IDLE線程優先級
        (最低優先級)

        級別0和1通常做為實時過程和設備驅動器,級別2-4做為線程和通常功能,級別5-7做為是低于其它功能級別,注意級別6是目前狀態并有穩定聯接。

        優先權唯一的取決于線程優先級,擁有高級優先權的線程安排優先運行,同一優先級的線程,以循環優先先級方式運行,即每個線程接受定制的時間或時間片,定量時間默認值為25毫秒 (Windows CE 2.0 支持在 MIPS 平臺更改定量時間)。較低優先權的線程,要直到較高級線程完成之后再運行,也即直到他們或者放棄或停止。一個重要的例外是最高優先級的線程(級別0,關鍵時間優先級)不與其它的線程共享時間片,這些線程連續執行直到他們完成。不象其它的微軟窗操作系統,Windows CE 是固定不能改變,它不匹配基于這引進優先級的中斷,他們能夠暫時改動,但僅能通過 Windows CE 內核以避免所謂的的“優先權倒置”。

        優先權倒置指的是當它們同時競爭同一資源時,低優先級的線程,阻礙了高優先權線程對資源的利用。為了改正這種局面并解放較高優先權的線程,Windows CE 允許低級優先權繼承,嚴格的線程優先權,并且運行較高優先級直到它釋放所用資源。

        例如,如果一個線程在最高優先權運行試圖蕕取由低級優先權占有的互斥體,低級優先權的線程變成高級優先權,并且運行直到它釋放互斥體。優先權倒置適用于系統的所有線程。例如,甚至在優先級別1運行的內核線程能轉成級別0,如果優先級0線程運行內存分頁代碼,將引起塊失誤。

        基于優先級的多任務設計,保證運行在最低級的線程在一個預所知時間段執行。本論文在后面討論設定響應,對于指定的平臺和公式,并由其它的平臺獲取數字。在 DAK 和 SDK 的工具,顯示了線程狀態和優先級別,并描繪指定實時系統操作輪廓。

        線程同步

        實時系統必須保證進程和線程同步,例如,如果實時應用的一部分在另一部分獲得最多當前數據前即完成,此應用的管理進程可能不穩定,同步將確保在應用線程間交換正確。

        如同其它的 Windows 操作系統一樣,Windows CE 為線程同步提供了一個豐富的“等待對象”,這包括關鍵部門、事件、互斥體,些等待對象,允許一個線程減緩它的運行并且等待直到指定事件發生。

        Windows CE 將互斥體、關鍵部分、事件請求按“先入先出,優先級(FIFO)”順序排列:不同的先入先出順序序列定義成八個不同的優先級,在給定的優稱級的線程請求,將被放在優先級列表末尾,當優先級倒置出現時,調度程序調整這些序列。

        除了等待對象,Windows CE 支持標準的 Win 32 時間 API 函數,這些來自內核的應用,軟件中斷將獲得時間間隔,它被用來管理實時應用。通過調用 GetTickCont 函數,它能夠返回幾毫秒,線程能夠使用系統間隔時間。關于更詳細的分時信息,Windows CE 內核也支持Win 32 API 函數QueryPerformanreCounterQueryPerFormanteFrequency 。OEM 必須為這些調用提供硬件和軟件支持,它提供一個較高的時間分辨力和 OAL 界面其它方面。

        其它方面考慮

        Windows CE 提供了一個重要的存儲系統,例如,當目前某些運行 Windows CE 的平臺提供 4MB 的物理內存,Windows CE 支持一個重要的 2GB 的地址空間,每個進程聯接在它自己的32MB 物理空間上,當它需要產生內存分頁中斷(這可能影響線程執行時間),物理內存進行線程代碼或數據內存分頁。

        內存分頁輸入輸出,將比實時進程優先級低。在實時進程中內存分頁仍可自由出現,但這要確保后臺的實際內存管理贏得實時系統優先權。
        實時線程應該鎖存在內存中,以防止這些無關緊要的內存分頁阻礙其運行,它們可能會占用實際內存管理系統。

        Windows CE 允許映射,這將陰止多個進程共享同一物理內存,結果將會導致協同進程間或驅動器與映射快速的數據傳送,內存映射能夠戲劇性的增強實時操作。

        中斷處理: IRQS ISRS 和 ISTS

        實時應用被設立在指定的時間間隔內,對外部事件做出反應,實時應用使用中斷做為一種確保外部事件由操作系統獲知的方式。在 Windows 中,內核和 OEM 適應層 (OAL)被設定成使系統其它部分的中斷和調度最優化。Windows CE 平衡操作,并通過把中斷過程分成兩部分而使執行更加容易:它分為中斷服務程序(ISR)和中斷服務線程(IST)兩部分。

        每條硬件中斷申請線(IRQ),與一個ISR相連。當中斷成立和中斷出現時,內核為此調用寄存的 ISR, ISR 為中斷處理的內核模式部分盡可能短的保存。它首先將內核放在適合的 IST 上。

        ISR 執行它的最小處理并返回一個 ID 號到內核,內核檢查返回的中斷 ID 號,并設置相關事件,中斷服務線程等待事件。當內核設置事件時,IST 停止等待并開始執行,附加的中斷進程,中斷處理大部分實際上出現在 IST 中,兩個最高的線程優先權 (級別0和1),通常指定為 ISTS,保證這些線程運行得足夠快。

        正如前面所說,處在最高級的 ISTS 不能被其它的線程占用,這些線程持續執行直到它們截止或放棄。

        Windows CE 不能支持群體中斷,這就意味著當以前一個中斷處理中,另一個不同接受服務,也就是當內核位于 ISR 時如果中斷出現,在為新的 IRQ 開始 ISR 前它將一直執行直到ISR 結束,這將引起硬件中斷和 ISR 開始之間的延遲,拖延和響應時間中斷響應。

        中斷響應

        本論文中,Intervupt Latency 詞組主要指的是較件中斷,處理響應,也即是從處部中斷到達處理器到中斷開始處理間的時間。

        Windows CE 中斷響應時間是針對鎖存在內存上的線程 (當內存響應不存在時)。這使得計算最差事件響應成為可能——中斷服務程序(ISR) 開始和中斷服務線程(IST)開始D的總時間,直到中斷處理的總時間能夠通ISR 和 IST 中所需時間計算決定。

        ISR 響應通用公式定義如下:

        ISR開始時間 = value1 dISR_Current sum(dISR_Higher)

        value1=由內核處理過程獲得響應值

        dISR_Current=中斷到達時程序中 ISR 持續時間。這個值范圍由0到系統中最長的 ISR 持續時間

        sum(dISR_Higher)=所有在 ISR 開始前的較高級ISRS 持續時間總和,即在時間 vahe1 dISR-cumeneu間到達的中斷

        例如,考慮一個擁有關鍵優先權 ISR 的,因為 ISR 被設成最高級,這有樣 ISRS dISR-Higher 值為0。當沒有其它 ISRS 最低響應,在程序中,即為value1 最低響應即為value1加系統中最長 ISR 周期,當中斷到達時,正是系統中最長的 ISR 開始執行。

        IST 響應周期定義如下:

        IST開始時間 = value2 sum(dIST) sum(dISR)

        value2=由內核處理的響應值

        sum(dIST)=所有的出現在 ISR 和 IST ,開始的優先級 ISTS 和線程上下文轉換時間總和。

        sum(dISR)=在中斷(?) ISR 和它的 IST 之間運行的其它 ISRS 持續時間總和。

        最簡單的例子——具有一個關鍵級 ISR 和一個關鍵級線程(無其它0優先級的線程)的——沒有其它的 ISTS 能夠在ISR 和 IST 之間中斷,然而在關鍵級的 ISR 和它相關的 IST 開始間其它的 ISRS 能被處理。

        因為 ISRS 一旦能夠獲得,即可被處理,很容易想象成病態情況,涉及產生一個持續的 ISRS 流,從而產生不確定的推遲。 IST 的開始不可能出現,因為 OEM對系統中的中斷完成控制。因為 OEM (原始設備制造商)為特定操作系統設計傳統 Windows CE 版本。 OCM 利用目標操作環境限制使系統設計最佳化。

        為減少響應時間,OEM 控制 ISR 和IST 處理時間中斷優先級線程優先級。公式中的 value1 和 walue2 代表,Windows CE 內核中處理時間,這是 OEM 不能控制的目前的在分時,研究工作涉及這些確認值。

        確保Windows CE的實時操作

        兩種不同途徑被用來確保Windows CE操作:

        • 由Windows CE開發組進行內部的檢查或分析內核代碼,
        • OEM和ISV(獨立軟件銷售商)利用一些將在未來的Windows CE版本嵌入式工具包(for VCFT)提供工具來確保特定配置。

        Windows CE關于VC 的嵌入工具包包括以下工具:

        • (一個對于分時研究的內核的工具版本和Intrtinrt.ext應用軟件來觀察,中斷過程的最大、最小、平均時間。
        • 微軟也能開發其它的針對顧客需要的分時工具。

        Windows CE開發組,已經檢查了內核代碼以證實它能由最差的情況時間表征,它是獨立于系統對象數目的。

        為了利用這個檢查,內核被表征成一套KCALLS或系統調用,在內核關閉優先權是它們是內核程序,并且不允許其它的線程運行,最差事件時間,此時,實時進程、標止運行,它能在內核中表征成最差事件KCALL時間(注意:這些時間不影響ISRS,只影響線程,例如ISTS)。

        開發組通過檢查發現這沒有非持久的循環在KCALLS,這意味著:并所有的KCALLS能夠表示成單向分支,代碼路徑,并確保通過KCALL并獨立于輸入參數發現最差事件時間成為可能。

        查找實際的最差事件時間包括使用In strum ented kemal,這僅是一個內核版本,它在設定應用環境后編輯使用,KCALL_PROFICE=1,以保證額外的分時功能,這個instrumented kemel 與debug kemel不同,Instrument ted是為一個零售的內核使用,它用來獲得分時值,這常對于裝運產品常常諱之莫深,在retail kernal和instrumented kernel唯一區別是它的裝備。

        Instrumentted kernel記錄所有的KCALL時間,這些值,包括最小、最大和平均時間,并能夠通過調用專用的API函數Dum Pk call profile打印到調試接口,Instrumented kernel通常運行在強狀態下,然后調用Dumpkcall prefile來獲得時間。

        中斷測試應用軟件Intrtime.exe,在Windows CE標準版本收集中斷分時延遲信息,應用軟件在測試中控制系統時間。因此,當系統需要時間控制器時,是不合適使用的。例如,此應用程序不能與內核instrumented版本一起使用,因為它也需要時間控制。

        在Windows CE 2版(Beta版)測試響應,

        Intertime應用軟件在odoSH3參考平臺上運行1000次中斷測試,內部運行58.98Mhz,外部為14.745Mhz外部頻率,這個測試在一個標準的H/PC配置,它包括Windows CE所有模式和組合。僅有主操作系統進程進行(NK.exe, Filesys.exe, Gwes.exe, Device. EXE, Shell.EXE和Explover.EXE),在測試中無用戶初始中斷(觸摸屏、鍵盤或其它應用),應用軟件可報告下面的ISR和IST開始、最小和最大時間:

        響應 最大、最小值(1000次測試)
        ISR開始 1.3-7.5微秒
        IST開始 93-275微秒

        大多數測試結果,分布在最小值數值附近,當測試ISR開始時間時,最小值1.3和1.6微秒,出現了293和549次,共占測試的84%,類似的超過90%的(1000次中923)start-of-IST測試出最大響應為102微秒或少一些。

        Intertime應用軟件也使用一個用戶指定數目的系統對象來測試ISR和IST開始時間。雖然工作十分初級,但它驗證了ISR開始時間與系統對象數目無關,測試設為1000次(除了特別更改)并且線程優先權為5或7。

        ISR開始最大值后臺線程、數目(每個線程一個事件)優先級
        8.407
        8.65(注:僅100次)7
        9.010(注:僅100次)5
        14.8105
        19.2105
        17.0107
        12.8205
        11.020(注:僅100次)7
        10.0507
        15.01005
        15.61007

        這數值不是系統對象數目的函數,不同的值可能由于中斷出現時內核狀態,開發組目前正在研究以鑒定ISR開始最差時間值。

        由這些結果向回推,假定ISR開始最小值代表最好情況。此時,dISR_Current和Sum(dISR_Htgbor)為0,最小的value 1=ISR開始值=1.3微秒,類似的設定最好情況時,Sum(dIST)和Sum(dISR)為0,Value最小值=.IST開始值=93微秒,單從測驗結果看,它是不能確定,valume 1或value 2最大值。

        附加的分時信息能夠由instrumented kernel 收集,對于一個最差情況在IST開始前花費時間valume2,能由下列公式計算:

        Value2=dkCall dNextThread

        dKcall=.內核調用時間;當消除優先級時,花費在內核的一部分時間量。

        DNextThread=Next.Thread內核調用時期。花費在IST中時間量。

        實際上,在0級別線程調度要比Next Thread調用快,但此公式能估計出上限。

        下面表格顯示了用instrumented Kernel進行初步測試時最差事件結果,這些測試條件與Intrtime測試相同。

        內核調用模型最大值(ad-hoc.testing)
        最大時間值(所用內核調用)266微秒(Learecrite)
        Next Thread237微秒
        總值503微秒

        Instrumented kernel顯示這些條件下value 2上限為500微秒。這個值為兩個最差事件總時間,遠遠超過了由Intritime應用程序得到的結果,也大于實際最差事件時間。例如:通過Nextthread調度一個優先級為0的線程,不會導致最差事件,這意味著500微秒是一個高于實際的最差事件值的保守值。

        Intertime Utility對于從總體上觀察最差事件值十分有用,Instrumentted Kemel對于獲得可能最差事件的值,通過內核描繪出所有響應原因——一個IST在這些事件運行,但在內核非優先部分運行執行時,將受阻礙,系統的最差事件響應可由每一部分的最差事件總和計算。

        注意本論文中所有測試結果均基于內部Windows CE的beta版,目前存在的操作系統和應用將繼續得到修正,并且進行附加測試以獲得在不同操作條件下系統操作,這些數值將繼續被更新并出版,以反思目前的操作系統版本。

        總結

        微軟Windows CE內核設計以達到RTOS最小要求,以使Windows CE用在許多不同類型的嵌入式和實時系統作為操作系統;

        • Windows CE的多線程和優先級,Windows CE支持個人線程優先級;
        • Windows CE支持優先權繼承程序,以便調整優銜級別以修改優先權顛倒;
        • Windows CE支持一個可預測的線程同步機理,包括等待對象,如互斥體關鍵部分,命名或未命名的事件對象,它基于線程優先權排序。
          Windows CE也支持與系統控制器的聯連:
        • OEM能夠控制類由系統支持的中斷處理,即通過執行ISRS和ISTS,它可彌補中斷處理軟件;
        • OEM完成在所有映射到中斷ID號的IRQS,并且它與中斷處理軟件相聯系(ISR和IST),描繪工具和應用軟件可以利用記錄處理中斷最大時間。
        • 中斷響應是可預測和有限制的,當優先權取消時,上限即為花費在內核中時間總量,匹配轉化時間,和由OEM執行的ISRS和ISTS申請處理時間。
        • 每個系統調用的時間是可預測的,并與系統對象數目無關,

        利用 instrumentted kernel系統調用時間能夠保證Windows CE內核設計保證中斷和它們相關線

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 云林县| 宜兴市| 青岛市| 临武县| 五常市| 乡宁县| 镇平县| 罗城| 房山区| 荥阳市| 昌宁县| 申扎县| 三都| 嘉定区| 武强县| 长岭县| 和林格尔县| 昭觉县| 马山县| 常德市| 东阿县| 青冈县| 清原| 兴宁市| 上杭县| 陇西县| 黎川县| 新乐市| 广宁县| 沧州市| 恩平市| 陕西省| 辽中县| 赫章县| 华亭县| 开原市| 泰州市| 西平县| 方城县| 平顶山市| 五华县|