Windows CE 5.0實(shí)時(shí)系統(tǒng)
眾所周知,實(shí)時(shí)系統(tǒng)并不通過(guò)單一分析進(jìn)行測(cè)試,即使單一分析可以證明實(shí)時(shí)系統(tǒng)的正確性。實(shí)時(shí)系統(tǒng)的測(cè)試是詳盡討論此問(wèn)題的依據(jù)。您的工作就是建立起用戶(hù)對(duì)解決方案的信任感。下文介紹的工具可以完整、實(shí)時(shí)地解釋?xiě)?yīng)用程序和操作系統(tǒng)之間的交互作用,它們有助于您加深對(duì)實(shí)時(shí)系統(tǒng)的了解。
盡管關(guān)于實(shí)時(shí)的定義還存在諸多爭(zhēng)議,我們還是來(lái)了解一下對(duì)它的定義。這里,我引用comp.realtime FAQ的定義。實(shí)時(shí)系統(tǒng)的權(quán)威定義(Donald Gillies)如下:
“實(shí)時(shí)系統(tǒng)是這樣一種系統(tǒng),即其計(jì)算正確與否,不僅取決于計(jì)算邏輯是否正確,還取決于計(jì)算結(jié)果所花費(fèi)的時(shí)間。如果不能滿(mǎn)足系統(tǒng)的時(shí)間限制,就會(huì)出現(xiàn)系統(tǒng)失敗的情況?!?/STRONG>
因?yàn)榧咚買(mǎi)/O、機(jī)器人技術(shù)和機(jī)械控制于一身的工業(yè)自動(dòng)化應(yīng)用對(duì)時(shí)間的要求最為苛刻。微軟開(kāi)始了解實(shí)時(shí)嵌入式操作系統(tǒng)的特殊社會(huì)要求。自1986年以來(lái),通用汽車(chē)動(dòng)力公司(GMPTG)在制造應(yīng)用中實(shí)施OMAC技術(shù)方面一直處于領(lǐng)先地位,并且在后來(lái)促成了OMAC用戶(hù)群的形成。他們一起對(duì)數(shù)百種應(yīng)用進(jìn)行評(píng)估后發(fā)現(xiàn),大多數(shù)系統(tǒng)(95%)需要一毫秒或稍長(zhǎng)的周期。一毫秒周期允許的變化幅度為10%,或是100微秒(μs)。這是基于200 MHz X86系統(tǒng)的Windows CE的設(shè)計(jì)目標(biāo),其在該平臺(tái)上的平均響應(yīng)時(shí)間為50 μs。Windows CE達(dá)到或超過(guò)了95%的被評(píng)估的硬實(shí)時(shí)應(yīng)用OMAC的要求。
大部分滿(mǎn)足要求的工業(yè)自動(dòng)化應(yīng)用是由從一臺(tái)機(jī)器發(fā)出的外部信號(hào)驅(qū)動(dòng)的。此信號(hào)以中斷形式發(fā)送給硬實(shí)時(shí)應(yīng)用。微軟鼓勵(lì)Windows CE的開(kāi)發(fā)人員,盡可能在中斷服務(wù)線(xiàn)程(IST)中置入更多的應(yīng)用代碼。這使OMAC抖動(dòng)定義變?yōu)獒槍?duì)不超過(guò)100 μs的IST延遲的時(shí)間限制。其余被評(píng)估的應(yīng)用使用計(jì)時(shí)器創(chuàng)建其周期。這就需要一臺(tái)延遲或抖動(dòng)不超過(guò)100 μs的1毫秒計(jì)時(shí)器??傊?,OMAC定義提出以下設(shè)計(jì)和測(cè)試要求:
·Interrupt Service Thread (IST) latencies of no more than 100 μs latency.
·1 millisecond timers with maximum of 100 μs latency.
·中斷服務(wù)線(xiàn)程(IST)延遲不超過(guò)100 μs。
·1毫秒計(jì)時(shí)器的延遲最長(zhǎng)為100 μs。
在了解了OMAC的設(shè)計(jì)和測(cè)試要求后,接下來(lái)讓我們看看Windows CE中安裝的工具。這些工具的用途是確定中斷定時(shí)、應(yīng)用執(zhí)行動(dòng)作、操作系統(tǒng)功能定時(shí)和時(shí)序安排定時(shí)。
區(qū)分實(shí)時(shí)系統(tǒng)和實(shí)時(shí)操作系統(tǒng)也很重要。實(shí)時(shí)系統(tǒng)包含硬件、操作系統(tǒng)和應(yīng)用等所有元素。實(shí)時(shí)操作系統(tǒng)僅僅是構(gòu)成實(shí)時(shí)系統(tǒng)的其中一個(gè)元素。如需了解更多信息,請(qǐng)參閱微軟Windows CE實(shí)時(shí)性能設(shè)計(jì)和優(yōu)化。
我們將介紹諸多工具和用途:
·ILTiming。該工具用于確定平臺(tái)的中斷服務(wù)例程(ISR)和中斷服務(wù)線(xiàn)程(IST)延遲。ISR延遲是指從硬件中斷到第一次中斷服務(wù)例程指令之間的時(shí)間間隔。而IST延遲是指從現(xiàn)有ISR到中斷服務(wù)線(xiàn)程開(kāi)始之間的時(shí)間間隔。
內(nèi)核實(shí)時(shí)性能最重要的特性之一,就是可以在指定的時(shí)間內(nèi)實(shí)施中斷。中斷延遲主要指軟件中斷處理延遲,即從外部中斷到達(dá)處理器直到中斷處理開(kāi)始之間的時(shí)間間隔。
如果不發(fā)生分頁(yè)操作,Windows CE中斷延遲時(shí)間被限制于內(nèi)存中鎖定的線(xiàn)程。這樣就可以計(jì)算最糟糕情況下的延遲時(shí)間 — 到ISR的啟動(dòng)和到IST的啟動(dòng)的總用時(shí)。通過(guò)計(jì)算ISR和IST所需時(shí)間,可以確定中斷處理以前的總用時(shí)。
ISR延遲
ISR延遲是指從IRQ在CUP中被設(shè)置到ISR開(kāi)始運(yùn)行時(shí)的時(shí)間。以下三個(gè)與時(shí)間相關(guān)的變量會(huì)影響ISR的啟動(dòng):
A = 中斷在內(nèi)核中關(guān)閉的最長(zhǎng)時(shí)間。內(nèi)核很少關(guān)閉中斷,但如果將它們關(guān)閉,則關(guān)閉的時(shí)間長(zhǎng)度會(huì)受到限制。
B = 在內(nèi)核調(diào)度中斷和ISR被實(shí)際調(diào)用之間的時(shí)間。內(nèi)核使用該時(shí)間確定要運(yùn)行什么ISR,并保存在繼續(xù)之前必須保存的任何寄存器。
C = 在 ISR 返回到內(nèi)核和內(nèi)核實(shí)際停止處理中斷之間的時(shí)間。這是內(nèi)核通過(guò)還原在ISR被調(diào)用之前被保存的任何狀態(tài)(例如寄存器)來(lái)完成ISR操作的時(shí)間。
正在測(cè)量的ISR的啟動(dòng)時(shí)間可以基于系統(tǒng)中其他中斷的當(dāng)前狀態(tài)進(jìn)行計(jì)算。如果中斷正在進(jìn)行,則計(jì)算要測(cè)量的新 ISR 的啟動(dòng)時(shí)間必須考慮到兩個(gè)因素:所關(guān)注的中斷已經(jīng)發(fā)生之后將發(fā)生的較高優(yōu)先級(jí)中斷的數(shù)量,以及執(zhí)行ISR所占用的時(shí)間。
Windows CE和原始設(shè)備制造商(OEM)都會(huì)影響執(zhí)行ISR的時(shí)間。Windows CE的控制變量A、B和C都受到限制。
IST延遲
IST延遲是指從完成執(zhí)行ISR即(通知線(xiàn)程)到IST開(kāi)始執(zhí)行的時(shí)間。以下四個(gè)與時(shí)間相關(guān)的變量會(huì)影響IST的啟動(dòng):
B = 內(nèi)核調(diào)度中斷和真正調(diào)用ISR的時(shí)間間隔。內(nèi)核利用這一時(shí)間決定將要運(yùn)行什么ISR,并保存在繼續(xù)之前必須保存的任何寄存器。
C = 在ISR返回到內(nèi)核和內(nèi)核實(shí)際停止處理中斷之間的時(shí)間。這是內(nèi)核通過(guò)還原在ISR被調(diào)用之前保存的任何狀態(tài)(例如寄存器)來(lái)完成ISR操作的時(shí)間。
L = Kcall(內(nèi)核調(diào)用)中的最長(zhǎng)時(shí)間。
M = 調(diào)度線(xiàn)程的時(shí)間。
在ISR返回到內(nèi)核并且內(nèi)核執(zhí)行某些工作來(lái)開(kāi)始執(zhí)行IST之后最高優(yōu)先級(jí)IST開(kāi)始的啟動(dòng)時(shí)間。在ISR返回并通知IST開(kāi)始運(yùn)行之后,IST啟動(dòng)時(shí)間受所有ISR的總計(jì)時(shí)間的影響。下面的示例說(shuō)明了所得到的啟動(dòng)時(shí)間:
最高優(yōu)先級(jí)IST啟動(dòng)時(shí)間 =
Windows CE和OEM都會(huì)影響執(zhí)行IST所需的時(shí)間。Windows CE控制變量B、C、L和M都是受限制的。OEM控制NISR和TISR(N),它們可以影響IST延遲。
Windows CE還對(duì)IST添加了以下限制:鏈接ISR和IST的事件處理只能用在WaitForSingleObject函數(shù)中。Windows CE防止ISR-IST事件處理被用在WaitForMultipleObjects函數(shù)中,這意味著內(nèi)核可以擔(dān)保觸發(fā)事件的時(shí)間和釋放IST的時(shí)間有一個(gè)上限。
·計(jì)劃程序計(jì)時(shí)分析(OSBench):該工具允許您收集計(jì)時(shí)樣本,通過(guò)執(zhí)行調(diào)度性能定時(shí)測(cè)試,測(cè)量?jī)?nèi)核的性能。
·內(nèi)核跟蹤程序(Kernel Tracker):此工具可以直觀顯示W(wǎng)indows CE .NET操作系統(tǒng)在目標(biāo)設(shè)備上的執(zhí)行狀況。該工具可用于在實(shí)時(shí)環(huán)境下查看線(xiàn)程交互、內(nèi)部關(guān)聯(lián)以及系統(tǒng)狀態(tài)信息。本文目的是檢驗(yàn)線(xiàn)程和進(jìn)程間的交互作用。
·調(diào)用評(píng)測(cè)程序(Call Profiler):此工具可用于確定代碼的算法瓶頸。
設(shè)備中存在許多影響實(shí)時(shí)性能的因素,如硬件、驅(qū)動(dòng)程序和應(yīng)用。在本例中,我們從應(yīng)用級(jí)開(kāi)始。運(yùn)行于實(shí)時(shí)環(huán)境中的應(yīng)用啟動(dòng)時(shí)就應(yīng)該分配所有資源。所有內(nèi)核對(duì)象(進(jìn)程、線(xiàn)程、互斥鎖、臨界段、信號(hào)和事件)都按照需要分配到虛擬內(nèi)存中。按需分配內(nèi)存是不確定的,因此,不能對(duì)操作系統(tǒng)完成操作的時(shí)間進(jìn)行限制,所以它不能用于應(yīng)用的實(shí)時(shí)執(zhí)行中。
遠(yuǎn)程調(diào)用評(píng)測(cè)程序
實(shí)時(shí)系統(tǒng)不僅包括硬件和操作系統(tǒng),日益增多的應(yīng)用邏輯也運(yùn)行于相同的硬件之上。因此,嵌入式設(shè)計(jì)中的應(yīng)用代碼可能存在失敗風(fēng)險(xiǎn)。Windows CE不會(huì)強(qiáng)行命令I(lǐng)ST在設(shè)備驅(qū)動(dòng)程序環(huán)境中運(yùn)行,IST僅是一個(gè)特殊的線(xiàn)程,因此在應(yīng)用環(huán)境中可以運(yùn)行IST線(xiàn)程。既然如此,該如何檢驗(yàn)應(yīng)用代碼的瓶頸呢?當(dāng)然,這可能會(huì)影響設(shè)備的整體性能。答案是:這正是Windows CE安裝的工具 - 遠(yuǎn)程調(diào)用評(píng)測(cè)程序的功能。該工具可解答下列問(wèn)題:何時(shí)執(zhí)行何種代碼?何謂軟件組件的交互?應(yīng)用程序運(yùn)行時(shí),CPU在做什么?
為了證明這一點(diǎn),我采用構(gòu)建、運(yùn)行在Windows CE上的“哲學(xué)家就餐問(wèn)題”應(yīng)用。以下是解決過(guò)程:現(xiàn)在,五位哲學(xué)家(線(xiàn)程)圍坐在圓桌前。每人面前放著一碗食物。哲學(xué)家們用一支筷子開(kāi)始吃飯。哲學(xué)家就餐的前提是他必須有兩支筷子(因此,五位哲學(xué)家中必須有一人奉獻(xiàn)出一支筷子)。這時(shí),哲學(xué)家就必須找到一種能夠共享筷子的方法,以保證大家都能吃到碗中的食物。
同樣地,當(dāng)多線(xiàn)程程序中有一個(gè)以上的線(xiàn)程(哲學(xué)家)競(jìng)爭(zhēng)資源(食物)時(shí),就有可能發(fā)生死鎖或爭(zhēng)執(zhí),當(dāng)然這要取決于哲學(xué)家的饑餓程度!如果多個(gè)線(xiàn)程都在等待使用稀缺資源,就會(huì)造成等待時(shí)間的不確定性,進(jìn)而凍結(jié)所有應(yīng)用。對(duì)實(shí)時(shí)應(yīng)用而言,這并不是個(gè)難題,您可以選擇遠(yuǎn)程調(diào)用評(píng)測(cè)程序運(yùn)行應(yīng)用就可以解決該問(wèn)題。
遠(yuǎn)程調(diào)用評(píng)測(cè)程序可以在不同視圖中顯示調(diào)用信息,包括直觀的調(diào)用圖表。它會(huì)顯示應(yīng)用運(yùn)行每個(gè)函數(shù)時(shí)花費(fèi)的時(shí)間。顯而易見(jiàn),這是處理視頻/音頻流的實(shí)時(shí)壓縮/解壓縮問(wèn)題的最為有效的工具。下表顯示的是遠(yuǎn)程調(diào)用評(píng)測(cè)程序應(yīng)用中的視圖。
表1. 遠(yuǎn)程調(diào)用評(píng)測(cè)程序中的視圖
下圖顯示的是哲學(xué)家應(yīng)用的調(diào)用圖表視圖。此圖顯示,35%的應(yīng)用時(shí)間花費(fèi)在函數(shù)Eat( ) 上。也許應(yīng)該了解一下函數(shù)的內(nèi)容!
圖1. 遠(yuǎn)程調(diào)用評(píng)測(cè)程序
您也許會(huì)問(wèn),要運(yùn)行遠(yuǎn)程調(diào)用評(píng)測(cè)程序,需要向應(yīng)用代碼中添加什么。實(shí)際上,您根本無(wú)需更改所有代碼,而僅需要用其它標(biāo)志函數(shù)(WINCECALLCAP=1)進(jìn)行編譯。
調(diào)用評(píng)測(cè)庫(kù)為應(yīng)用開(kāi)發(fā)人員提供了一幅獨(dú)特的應(yīng)用邏輯執(zhí)行過(guò)程細(xì)節(jié)圖。將該工具用于低速測(cè)試過(guò)程,以培養(yǎng)客戶(hù)對(duì)應(yīng)用代碼的信任感。
內(nèi)核跟蹤程序(Kernel Tracker):
遠(yuǎn)程內(nèi)核跟蹤程序可用于檢測(cè)運(yùn)行設(shè)備上的進(jìn)程、線(xiàn)程和中斷之間的交互作用關(guān)系。下面是一些內(nèi)核跟蹤程序中集成的樣本代碼。實(shí)例中的應(yīng)用運(yùn)行的是Windows CE設(shè)備的文件系統(tǒng),其中一個(gè)文件夾在臺(tái)式機(jī)放置釋放文件,此應(yīng)用為駐留在臺(tái)式機(jī)中的每個(gè)文件生成了一個(gè)KITL(內(nèi)核獨(dú)立傳輸層)中斷。因此,我們可以在運(yùn)行的操作系統(tǒng)鏡像中清晰地觀察應(yīng)用與中斷間的交互作用,也可以確定應(yīng)用線(xiàn)程運(yùn)行與KITL中斷處理間的時(shí)間增量。
作為一個(gè)用戶(hù)界面,內(nèi)核跟蹤程序被劃分為三個(gè)區(qū)域,左窗格顯示中斷和進(jìn)程,中窗格顯示線(xiàn)程/進(jìn)程間的交互作用,右窗格(未顯示字)中的內(nèi)容是對(duì)中窗格使用的符號(hào)的解釋。我們可以在鏡像底部清楚地看到WalkTree應(yīng)用正在運(yùn)行,但看不到在應(yīng)用和內(nèi)核環(huán)境中花費(fèi)的時(shí)間。
圖2. 遠(yuǎn)程內(nèi)核跟蹤程序用戶(hù)界面
內(nèi)核跟蹤程序可以在事件間設(shè)置時(shí)間標(biāo)記,并能在狀態(tài)欄上顯示不同的時(shí)間。內(nèi)核跟蹤程序有一些預(yù)先定義的事件,如同步事件、混合事件和用戶(hù)定義事件等。此外,它還能顯示線(xiàn)程狀態(tài)(如運(yùn)行、鎖定、休眠和移植等)。在下圖中,當(dāng)從內(nèi)核返回到線(xiàn)程執(zhí)行時(shí),我們?cè)O(shè)置了第一個(gè)時(shí)間標(biāo)記,而當(dāng)從線(xiàn)程環(huán)境切換到內(nèi)核時(shí),我們?cè)O(shè)置了第二個(gè)時(shí)間標(biāo)記。
圖3. 遠(yuǎn)程內(nèi)核跟蹤程序 — 時(shí)間增量
內(nèi)核跟蹤程序工具可用于定位和檢測(cè)死鎖情況,還可以檢測(cè)花費(fèi)在應(yīng)用和驅(qū)動(dòng)程序線(xiàn)程上的時(shí)間。運(yùn)行內(nèi)核跟蹤程序也許將使系統(tǒng)用時(shí)增加2%-3%,但不會(huì)影響操作系統(tǒng)的整體定時(shí)。
計(jì)劃程序計(jì)時(shí)分析
該程序?yàn)椴僮飨到y(tǒng)環(huán)境的擴(kuò)展集提供了測(cè)試標(biāo)準(zhǔn)。該擴(kuò)展集來(lái)自超出Protected Server Library (PSL)的內(nèi)部調(diào)用,而這種調(diào)用則來(lái)自集成到操作系統(tǒng)其中一個(gè)進(jìn)程的應(yīng)用(如FileSys.exe、Device.exe等)。該測(cè)試分為以下7個(gè)基本組:
1.臨界段
2.事件設(shè)置-喚醒
3.信號(hào)發(fā)出-接收
4.互斥鎖
5.自動(dòng)放棄率
6.PSL API調(diào)用開(kāi)銷(xiāo)
7.互鎖API(遞減、遞增、測(cè)試交換、交換)
我們來(lái)看一下幾項(xiàng)測(cè)試結(jié)果:
===================================================================
| 0.01 | IP = NO | CS = NO | 1 IPS
-------------------------------------------------------------------
EnterCriticalSection traditional (blocking) without priority inversion :
Time from a higher priority thread calling EnterCS (blocked) to a lower
priority runnable thread getting run
-------------------------------------------------------------------
| Max Time = 13.409 μs
| Min Time = 7.543 μs
| Avg Time = 8.389 μs
====================================================================
===================================================================
| 0.02 | IP = NO | CS = NO | 1000 IPS
-------------------------------------------------------------------
EnterCriticalSection fastpath (uncontested)
-------------------------------------------------------------------
| Subtracting out base result of 12 ticks
| Max Time = 0.064 μs
| Min Time = 0.061 μs
| Avg Time = 0.061 μs
===================================================================
將這些測(cè)試結(jié)果與花費(fèi)在處理EnterCrticalSection()函數(shù)調(diào)用上的時(shí)間進(jìn)行比較。調(diào)用此函數(shù)的途徑有兩種。第一種方法較快捷,就是通過(guò)使用臨界段,實(shí)施向內(nèi)核轉(zhuǎn)移,來(lái)解決資源爭(zhēng)用問(wèn)題。第二種方法貫穿整個(gè)調(diào)用進(jìn)程,其時(shí)因?yàn)椴淮嬖谂R界段爭(zhēng)用問(wèn)題,因而速度明顯提升。(此例可以解釋為什么臨界段是同步的首要考慮因素。)
中斷計(jì)時(shí)分析(ILTIMING)
中斷計(jì)時(shí)分析可以測(cè)量系統(tǒng)中的中斷延遲。該工具使用諸多OAL(OEM適配層)支持功能測(cè)量ISR和IST的中斷響應(yīng)時(shí)間。這些數(shù)字對(duì)于了解系統(tǒng)的限制至關(guān)重要。
我們來(lái)看一看基于AMD K6 500Mhz的CEPC系統(tǒng)的數(shù)字。
表3. dwOEMTPoolSize = 16 (CEPC的出廠默認(rèn)值)
在此插入文件結(jié)束標(biāo)識(shí)>Windows CE和硬實(shí)時(shí)操作系統(tǒng)的OMAC定義吻合,它安裝了構(gòu)建、測(cè)試和部署實(shí)時(shí)設(shè)備所需的工具及資源。所有這些工具:內(nèi)核跟蹤程序、遠(yuǎn)程調(diào)用評(píng)測(cè)程序、計(jì)劃程序計(jì)時(shí)分析和中斷計(jì)時(shí)分析協(xié)同工作,可以幫助您在自己的平臺(tái)上對(duì)Windows CE的實(shí)時(shí)能力進(jìn)行評(píng)估。
如需了解更多信息,請(qǐng)閱讀:
.NET Compact Framework的實(shí)時(shí)性能
Maarten Struys
Michel Verhagen
PTS軟件
http://msdn.microsoft.com/library/en-us/dncenet/html/Real-Time_NETCF.asp
專(zhuān)用系統(tǒng),Windows CE 5.0實(shí)時(shí)x86處理器
http://download.microsoft.com/download/7/2/f/72fef3b0-9545-46a4-8886-a94f265df9c4/EVA-2.9-TST-CE-x86-01-Iss1.00.pdf
專(zhuān)用系統(tǒng),Windows CE 5.0實(shí)時(shí)ARM處理器
http://download.microsoft.com/download/7/2/f/72fef3b0-9545-46a4-8886-a94f265df9c4/EVA-2.9-OS-CE-01-I01.pdf
就Windows CE 5.0 Real-Time Podcast采訪Windows CE架構(gòu)師John Eldridge
http://blogs.msdn.com/mikehall/archive/2005/09/01/459443.aspx
Windows CE的實(shí)時(shí)決定論(Real-Time Determinism)
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論