MS Windows CE的實時系統(tǒng)
介紹
MicrosoftWindowsCE
快速反應的嵌入式應用常常管理嚴格的時間反應。例如,制造過程控制,高速的數(shù)據(jù)采集設備,電訊交換設備,醫(yī)用設備,空中“有線”控制,武器發(fā)射裝備,空間航行和導航,實驗室,實驗控制,汽車發(fā)動機控制,機器人系統(tǒng)。
為保證這種功能,就意味著不僅需要計算精確性,還有結果的時間性,此種應用必須在指定的時間參數(shù)內做出反應。
實時系統(tǒng)的廣義定義是“對任何外部刺激,計算機做出及時反應是至關重要的系統(tǒng)”,標準定義在Internetnewsgroupcorprealtimegroup中。實時定義為:一個實時系統(tǒng)它的計算正確性,不僅依靠于計算邏輯上的正確,還包括及時的產生結果。如果沒有達到系統(tǒng)時間限制條件,系統(tǒng)也是失效的。
搞清楚實時系統(tǒng)和實時操作系統(tǒng)(RTOS)的區(qū)別至關重要,實時系統(tǒng)代表所有系統(tǒng)組成設備——硬件,操作系統(tǒng)和應用——它需要達到系統(tǒng)的要求,實時操作系統(tǒng)(RTOS)只是整個實時系統(tǒng)的一個組成部分,它必須提供足夠的功能以確保整個實時系統(tǒng)達到要求。
同樣,搞清快速操作系統(tǒng)和實時操作系統(tǒng)之間區(qū)別,也很重要,對于一個RTOS雖然達到全面要求十分有用,但并不是它自己達到這種要求。Internetneusgronpcornp.realtime列舉了作為一個實時操作系統(tǒng),必須達到的要求:
OS(操作系統(tǒng))必須是多線程和優(yōu)先級之分。
OS必須支持線程優(yōu)先級。
一個優(yōu)先級繼承的系統(tǒng)必須存在。
OS必須支持可預測的線程,同步發(fā)送機理。
另外,OS的行為必須是可預測的,這意味實時系統(tǒng)的開發(fā)者必須對系統(tǒng)中斷級,系統(tǒng)調用和分時了如指掌:
必須知道OS和設備驅動器的中數(shù)據(jù)匹配最大時間。
設備驅動器用來處理一個中斷最大時間和關于這些驅動器的中斷申請信息必須清楚。
中斷響應(從中斷到運行時間),必須可預測并滿足功能要求。
每次系統(tǒng)調用時間必須可以預測,并且獨立于系統(tǒng)的對象數(shù)目。本篇論文論述了微軟WindowsCE操作系統(tǒng)是如何達到一個實時系統(tǒng)的要求,更有意義的是,WindowsCE保證一個時間的上限,它在收到中斷后開始一個實時的優(yōu)先級線程。本論文論述了對特定參考平臺的中數(shù)據(jù)響應時間,參考為有HinathiSH3的微處理器的“Odo”平臺。
MicrosoftWindowsCE
概論
微軟WindowsCE被設計成針對小型設備(它是典型的擁有有限內存的無磁盤系統(tǒng))的通用操作系統(tǒng)。WindowsCE可以通過設計一層位于內核和硬件之間代碼來用設定硬件平臺,這即是眾所周知的硬盤壓縮層(HAL),(在以前解釋時,這被稱為OEMC(原始設備制造)適應層,即OAL;內核壓縮層,即KAL。以免與微軟的WindowsNT操作系統(tǒng)HAL混淆)
不象其它的微軟Windows操作系統(tǒng),WindowsCE并不是代表一個標準的相同的對所有平臺適用的軟件。為了足夠靈活以達到適應廣泛產品需求,WindowsCE采用標準模式,這就意味著,它能夠由一系列軟件模式做出選擇,從而使產品定制。另外,一些可利用模式也可作為其組成部分,這意味著這些模式能夠通過從一套可利用的組份做出選擇,從而成為標準模式,通過選擇,能夠達到系統(tǒng)要求的最小模式,OEM能夠減少存儲腳本和操作系統(tǒng)的運行。
WindowsCE關于VC++5.0開發(fā)系統(tǒng)嵌入式工具包,提供系統(tǒng)庫、工具、文本和樣本代碼,以使OEMS能夠對特定的硬件平臺使WindowsCE標準定制。嵌入式工具包也包括設備驅動包(DDK)和軟件開發(fā)包(SDK),DDK提供了關于寫驅動器的附加文本,SDK提供庫、頭文件、樣本代碼、文本以允許,開發(fā)者對基于WindowsCE的平臺進行寫操作。WindowsCE提供了相同的程序界面,以用來為其它的視窗操作系統(tǒng)開發(fā)功能,例如,WindowsCE版本1.01支持大約1000個微軟的Win32API函數(shù)的其中500個。這就意味著大量不同類的工具,第三方書籍,關于Win32開發(fā)者訓練教程,可以替代或為WindowsCE系統(tǒng)的開發(fā)者所用。
實時系統(tǒng)的開發(fā)者能夠使用,關于VDFF5.0的嵌入式工具包,以把操作系統(tǒng)轉移到特定的平臺,并為這個平臺開發(fā)附加設備驅動器和實時功能。
線程和線程優(yōu)先權級
WindowsCE是有優(yōu)先級的多任務操作系統(tǒng),它允許多重功能、進程,在相同時間系統(tǒng)中運行WindowsCE支持最大的32位同步進程。一個進程包括一個或多個線程,每個線程代表進程的一個獨立部分,一個線程被指定為進程的基本線程,進程也能創(chuàng)造一個未定數(shù)目的額外線程,額外線程實際數(shù)目,僅由可利用的系統(tǒng)資源限定。
WindowsCE利用基于優(yōu)先級的時間片演算法以安排線程的執(zhí)行,WindowsCE支持八個不同的優(yōu)先級,由0到7,0代表最高級,它在頭文件Winbasw.h中定義。
優(yōu)先級描述
0
(最高級)關鍵的線程優(yōu)先級
(最高優(yōu)先等級)
1最高線程優(yōu)先級
2高于通常的線程優(yōu)先級
3通常線程優(yōu)先級
4低于常規(guī)線程優(yōu)先級
5最低線程優(yōu)先級
6高于IDLE的線程優(yōu)先級
7
(最低)IDLE線程優(yōu)先級
(最低優(yōu)先級)
級別0和1通常做為實時過程和設備驅動器,級別2-4做為線程和通常功能,級別5-7做為是低于其它功能級別,注意級別6是目前狀態(tài)并有穩(wěn)定聯(lián)接。
優(yōu)先權唯一的取決于線程優(yōu)先級,擁有高級優(yōu)先權的線程安排優(yōu)先運行,同一優(yōu)先級的線程,以循環(huán)優(yōu)先先級方式運行,即每個線程接受定制的時間或時間片,定量時間默認值為25毫秒(WindowsCE2.0支持在MIPS平臺更改定量時間)。較低優(yōu)先權的線程,要直到較高級線程完成之后再運行,也即直到他們或者放棄或停止。一個重要的例外是最高優(yōu)先級的線程(級別0,關鍵時間優(yōu)先級)不與其它的線程共享時間片,這些線程連續(xù)執(zhí)行直到他們完成。不象其它的微軟窗操作系統(tǒng),WindowsCE是固定不能改變,它不匹配基于這引進優(yōu)先級的中斷,他們能夠暫時改動,但僅能通過WindowsCE內核以避免所謂的的“優(yōu)先權倒置”。
優(yōu)先權倒置指的是當它們同時競爭同一資源時,低優(yōu)先級的線程,阻礙了高優(yōu)先權線程對資源的利用。為了改正這種局面并解放較高優(yōu)先權的線程,WindowsCE允許低級優(yōu)先權繼承,嚴格的線程優(yōu)先權,并且運行較高優(yōu)先級直到它釋放所用資源。
[!--empirenews.page--]例如,如果一個線程在最高優(yōu)先權運行試圖蕕取由低級優(yōu)先權占有的互斥體,低級優(yōu)先權的線程變成高級優(yōu)先權,并且運行直到它釋放互斥體。優(yōu)先權倒置適用于系統(tǒng)的所有線程。例如,甚至在優(yōu)先級別1運行的內核線程能轉成級別0,如果優(yōu)先級0線程運行內存分頁代碼,將引起塊失誤。
基于優(yōu)先級的多任務設計,保證運行在最低級的線程在一個預所知時間段執(zhí)行。本論文在后面討論設定響應,對于指定的平臺和公式,并由其它的平臺獲取數(shù)字。在DAK和SDK的工具,顯示了線程狀態(tài)和優(yōu)先級別,并描繪指定實時系統(tǒng)操作輪廓。
線程同步
實時系統(tǒng)必須保證進程和線程同步,例如,如果實時應用的一部分在另一部分獲得最多當前數(shù)據(jù)前即完成,此應用的管理進程可能不穩(wěn)定,同步將確保在應用線程間交換正確。
如同其它的Windows操作系統(tǒng)一樣,WindowsCE為線程同步提供了一個豐富的“等待對象”,這包括關鍵部門、事件、互斥體,些等待對象,允許一個線程減緩它的運行并且等待直到指定事件發(fā)生。
WindowsCE將互斥體、關鍵部分、事件請求按“先入先出,優(yōu)先級(FIFO)”順序排列:不同的先入先出順序序列定義成八個不同的優(yōu)先級,在給定的優(yōu)稱級的線程請求,將被放在優(yōu)先級列表末尾,當優(yōu)先級倒置出現(xiàn)時,調度程序調整這些序列。
除了等待對象,WindowsCE支持標準的Win32時間API函數(shù),這些來自內核的應用,軟件中斷將獲得時間間隔,它被用來管理實時應用。通過調用GetTickCont函數(shù),它能夠返回幾毫秒,線程能夠使用系統(tǒng)間隔時間。關于更詳細的分時信息,WindowsCE內核也支持Win32API函數(shù)QueryPerformanreCounter和QueryPerFormanteFrequency。OEM必須為這些調用提供硬件和軟件支持,它提供一個較高的時間分辨力和OAL界面其它方面。
其它方面考慮
WindowsCE提供了一個重要的存儲系統(tǒng),例如,當目前某些運行WindowsCE的平臺提供4MB的物理內存,WindowsCE支持一個重要的2GB的地址空間,每個進程聯(lián)接在它自己的32MB物理空間上,當它需要產生內存分頁中斷(這可能影響線程執(zhí)行時間),物理內存進行線程代碼或數(shù)據(jù)內存分頁。
內存分頁輸入輸出,將比實時進程優(yōu)先級低。在實時進程中內存分頁仍可自由出現(xiàn),但這要確保后臺的實際內存管理贏得實時系統(tǒng)優(yōu)先權。
實時線程應該鎖存在內存中,以防止這些無關緊要的內存分頁阻礙其運行,它們可能會占用實際內存管理系統(tǒng)。
WindowsCE允許映射,這將陰止多個進程共享同一物理內存,結果將會導致協(xié)同進程間或驅動器與映射快速的數(shù)據(jù)傳送,內存映射能夠戲劇性的增強實時操作。
中斷處理:IRQSISRS和ISTS
實時應用被設立在指定的時間間隔內,對外部事件做出反應,實時應用使用中斷做為一種確保外部事件由操作系統(tǒng)獲知的方式。在Windows中,內核和OEM適應層(OAL)被設定成使系統(tǒng)其它部分的中斷和調度最優(yōu)化。WindowsCE平衡操作,并通過把中斷過程分成兩部分而使執(zhí)行更加容易:它分為中斷服務程序(ISR)和中斷服務線程(IST)兩部分。
每條硬件中斷申請線(IRQ),與一個ISR相連。當中斷成立和中斷出現(xiàn)時,內核為此調用寄存的ISR,ISR為中斷處理的內核模式部分盡可能短的保存。它首先將內核放在適合的IST上。
ISR執(zhí)行它的最小處理并返回一個ID號到內核,內核檢查返回的中斷ID號,并設置相關事件,中斷服務線程等待事件。當內核設置事件時,IST停止等待并開始執(zhí)行,附加的中斷進程,中斷處理大部分實際上出現(xiàn)在IST中,兩個最高的線程優(yōu)先權(級別0和1),通常指定為ISTS,保證這些線程運行得足夠快。
正如前面所說,處在最高級的ISTS不能被其它的線程占用,這些線程持續(xù)執(zhí)行直到它們截止或放棄。
WindowsCE不能支持群體中斷,這就意味著當以前一個中斷處理中,另一個不同接受服務,也就是當內核位于ISR時如果中斷出現(xiàn),在為新的IRQ開始ISR前它將一直執(zhí)行直到ISR結束,這將引起硬件中斷和ISR開始之間的延遲,拖延和響應時間中斷響應。
中斷響應
本論文中,IntervuptLatency詞組主要指的是較件中斷,處理響應,也即是從處部中斷到達處理器到中斷開始處理間的時間。
WindowsCE中斷響應時間是針對鎖存在內存上的線程(當內存響應不存在時)。這使得計算最差事件響應成為可能——中斷服務程序(ISR)開始和中斷服務線程(IST)開始D的總時間,直到中斷處理的總時間能夠通ISR和IST中所需時間計算決定。
ISR響應通用公式定義如下:
ISR開始時間=value1+dISR_Current+sum(dISR_Higher)
value1=由內核處理過程獲得響應值
dISR_Current=中斷到達時程序中ISR持續(xù)時間。這個值范圍由0到系統(tǒng)中最長的ISR持續(xù)時間
sum(dISR_Higher)=所有在ISR開始前的較高級ISRS持續(xù)時間總和,即在時間vahe1+dISR-cumeneu間到達的中斷
例如,考慮一個擁有關鍵優(yōu)先權ISR的嵌入式系統(tǒng),因為ISR被設成最高級,這有樣ISRSdISR-Higher值為0。當沒有其它ISRS最低響應,在程序中,即為value1最低響應即為value1加系統(tǒng)中最長ISR周期,當中斷到達時,正是系統(tǒng)中最長的ISR開始執(zhí)行。
IST響應周期定義如下:
IST開始時間=value2+sum(dIST)+sum(dISR)
value2=由內核處理的響應值
sum(dIST)=所有的出現(xiàn)在ISR和IST,開始的優(yōu)先級ISTS和線程上下文轉換時間總和。
sum(dISR)=在中斷(?)ISR和它的IST之間運行的其它ISRS持續(xù)時間總和。
最簡單的例子——具有一個關鍵級ISR和一個關鍵級線程(無其它0優(yōu)先級的線程)的嵌入式系統(tǒng)——沒有其它的ISTS能夠在ISR和IST之間中斷,然而在關鍵級的ISR和它相關的IST開始間其它的ISRS能被處理。
因為ISRS一旦能夠獲得,即可被處理,很容易想象成病態(tài)情況,涉及產生一個持續(xù)的ISRS流,從而產生不確定的推遲。IST的開始不可能出現(xiàn),因為OEM對系統(tǒng)中的中斷完成控制。因為OEM(原始設備制造商)為特定操作系統(tǒng)設計傳統(tǒng)WindowsCE版本。OCM利用目標操作環(huán)境限制使系統(tǒng)設計最佳化。
為減少響應時間,OEM控制ISR和IST處理時間中斷優(yōu)先級線程優(yōu)先級。公式中的value1和walue2代表,WindowsCE內核中處理時間,這是OEM不能控制的目前的在分時,研究工作涉及這些確認值。[!--empirenews.page--]
確保WindowsCE的實時操作
兩種不同途徑被用來確保WindowsCE操作:
由WindowsCE開發(fā)組進行內部的檢查或分析內核代碼,
OEM和ISV(獨立軟件銷售商)利用一些將在未來的WindowsCE版本嵌入式工具包(forVCFT)提供工具來確保特定配置。
WindowsCE關于VC++的嵌入工具包包括以下工具:
(一個對于分時研究的內核的工具版本和Intrtinrt.ext應用軟件來觀察,中斷過程的最大、最小、平均時間。
微軟也能開發(fā)其它的針對顧客需要的分時工具。
WindowsCE開發(fā)組,已經檢查了內核代碼以證實它能由最差的情況時間表征,它是獨立于系統(tǒng)對象數(shù)目的。
為了利用這個檢查,內核被表征成一套KCALLS或系統(tǒng)調用,在內核關閉優(yōu)先權是它們是內核程序,并且不允許其它的線程運行,最差事件時間,此時,實時進程、標止運行,它能在內核中表征成最差事件KCALL時間(注意:這些時間不影響ISRS,只影響線程,例如ISTS)。
開發(fā)組通過檢查發(fā)現(xiàn)這沒有非持久的循環(huán)在KCALLS,這意味著:并所有的KCALLS能夠表示成單向分支,代碼路徑,并確保通過KCALL并獨立于輸入參數(shù)發(fā)現(xiàn)最差事件時間成為可能。
查找實際的最差事件時間包括使用Instrumentedkemal,這僅是一個內核版本,它在設定應用環(huán)境后編輯使用,KCALL_PROFICE=1,以保證額外的分時功能,這個instrumentedkemel與debugkemel不同,Instrumentted是為一個零售的內核使用,它用來獲得分時值,這常對于裝運產品常常諱之莫深,在retailkernal和instrumentedkernel唯一區(qū)別是它的裝備。
Instrumenttedkernel記錄所有的KCALL時間,這些值,包括最小、最大和平均時間,并能夠通過調用專用的API函數(shù)DumPkcallprofile打印到調試接口,Instrumentedkernel通常運行在強狀態(tài)下,然后調用Dumpkcallprefile來獲得時間。
中斷測試應用軟件Intrtime.exe,在WindowsCE標準版本收集中斷分時延遲信息,應用軟件在測試中控制系統(tǒng)時間。因此,當系統(tǒng)需要時間控制器時,是不合適使用的。例如,此應用程序不能與內核instrumented版本一起使用,因為它也需要時間控制。
在WindowsCE2版(Beta版)測試響應,
Intertime應用軟件在odoSH3參考平臺上運行1000次中斷測試,內部運行58.98Mhz,外部為14.745Mhz外部頻率,這個測試在一個標準的H/PC配置,它包括WindowsCE所有模式和組合。僅有主操作系統(tǒng)進程進行(NK.exe,Filesys.exe,Gwes.exe,Device.EXE,Shell.EXE和Explover.EXE),在測試中無用戶初始中斷(觸摸屏、鍵盤或其它應用),應用軟件可報告下面的ISR和IST開始、最小和最大時間:
響應最大、最小值(1000次測試)
ISR開始1.3-7.5微秒
IST開始93-275微秒
大多數(shù)測試結果,分布在最小值數(shù)值附近,當測試ISR開始時間時,最小值1.3和1.6微秒,出現(xiàn)了293和549次,共占測試的84%,類似的超過90%的(1000次中923)start-of-IST測試出最大響應為102微秒或少一些。
Intertime應用軟件也使用一個用戶指定數(shù)目的系統(tǒng)對象來測試ISR和IST開始時間。雖然工作十分初級,但它驗證了ISR開始時間與系統(tǒng)對象數(shù)目無關,測試設為1000次(除了特別更改)并且線程優(yōu)先權為5或7。
ISR開始最大值后臺線程、數(shù)目(每個線程一個事件)優(yōu)先級
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
這數(shù)值不是系統(tǒng)對象數(shù)目的函數(shù),不同的值可能由于中斷出現(xiàn)時內核狀態(tài),開發(fā)組目前正在研究以鑒定ISR開始最差時間值。
由這些結果向回推,假定ISR開始最小值代表最好情況。此時,dISR_Current和Sum(dISR_Htgbor)為0,最小的value1=ISR開始值=1.3微秒,類似的設定最好情況時,Sum(dIST)和Sum(dISR)為0,Value最小值=.IST開始值=93微秒,單從測驗結果看,它是不能確定,valume1或value2最大值。
附加的分時信息能夠由instrumentedkernel收集,對于一個最差情況在IST開始前花費時間valume2,能由下列公式計算:
Value2=dkCall+dNextThread
dKcall=.內核調用時間;當消除優(yōu)先級時,花費在內核的一部分時間量。
DNextThread=Next.Thread內核調用時期。花費在IST中時間量。
實際上,在0級別線程調度要比NextThread調用快,但此公式能估計出上限。
下面表格顯示了用instrumentedKernel進行初步測試時最差事件結果,這些測試條件與Intrtime測試相同。
內核調用模型最大值(ad-hoc.testing)
最大時間值(所用內核調用)266微秒(Learecrite)
NextThread237微秒
總值503微秒
Instrumentedkernel顯示這些條件下value2上限為500微秒。這個值為兩個最差事件總時間,遠遠超過了由Intritime應用程序得到的結果,也大于實際最差事件時間。例如:通過Nextthread調度一個優(yōu)先級為0的線程,不會導致最差事件,這意味著500微秒是一個高于實際的最差事件值的保守值。
IntertimeUtility對于從總體上觀察最差事件值十分有用,InstrumenttedKemel對于獲得可能最差事件的值,通過內核描繪出所有響應原因——一個IST在這些事件運行,但在內核非優(yōu)先部分運行執(zhí)行時,將受阻礙,系統(tǒng)的最差事件響應可由每一部分的最差事件總和計算。
注意本論文中所有測試結果均基于內部WindowsCE的beta版,目前存在的操作系統(tǒng)和應用將繼續(xù)得到修正,并且進行附加測試以獲得在不同操作條件下系統(tǒng)操作,這些數(shù)值將繼續(xù)被更新并出版,以反思目前的操作系統(tǒng)版本。
總結
微軟WindowsCE內核設計以達到RTOS最小要求,以使WindowsCE用在許多不同類型的嵌入式和實時系統(tǒng)作為操作系統(tǒng);
WindowsCE的多線程和優(yōu)先級,WindowsCE支持個人線程優(yōu)先級;
WindowsCE支持優(yōu)先權繼承程序,以便調整優(yōu)銜級別以修改優(yōu)先權顛倒;
WindowsCE支持一個可預測的線程同步機理,包括等待對象,如互斥體關鍵部分,命名或未命名的事件對象,它基于線程優(yōu)先權排序。[!--empirenews.page--]
WindowsCE也支持與系統(tǒng)控制器的聯(lián)連:
OEM能夠控制類由系統(tǒng)支持的中斷處理,即通過執(zhí)行ISRS和ISTS,它可彌補中斷處理軟件;
OEM完成在所有映射到中斷ID號的IRQS,并且它與中斷處理軟件相聯(lián)系(ISR和IST),描繪工具和應用軟件可以利用記錄處理中斷最大時間。
中斷響應是可預測和有限制的,當優(yōu)先權取消時,上限即為花費在內核中時間總量,匹配轉化時間,和由OEM執(zhí)行的ISRS和ISTS申請?zhí)幚頃r間。
每個系統(tǒng)調用的時間是可預測的,并與系統(tǒng)對象數(shù)目無關,
利用instrumenttedkernel系統(tǒng)調用時間能夠保證WindowsCE內核設計保證中斷和它們相關線程響應,可預測,并且有限,這使得對于許多實時應用更適合未來的WindowsCE嵌入式工具包(關于VC++)將包括中斷分時功能和允許OEM檢查,并將分時操作標準化。
哪里可得到WindowsCE更詳細信息
關于VC++5.0的微軟WindowsCE嵌入式工具包
OEM的WindowsCE2.0的應用包
微軟公司操作分析和內存利用微軟的WindowsCE1.01、Alpha1997.2.20.
JasknBlack和Jon.Christhansen,軟件的WindowsCE顯示驅動器和硬盤1997.9.
Jon.Christiasen,微軟WindowsCE圖色特色1997.9
Franklin,Fite.Jr.和RandyKath微軟WindowsCE2.0嵌入式開發(fā)
JohnMurcy,微軟WindowsCE內存使用1997.9
DaridPefferin,Win32程序模式:嵌入式軟件開發(fā)入門1997.9
DaridPellerin,WindowsCE的VC++5。0嵌入式工具包介紹1997.9
Guy,Smith,WindowsCE通信方式1997.9.





