Windows Embedded CE 6.0特性及系統結構
Windows Embedded CE 6.0是非常優秀的嵌入式系統,對其內核的學習對我們開發、移植驅動和應用程序,對開發、移植嵌入式系統都非常有好處。
1.Windows Embedded CE 6.0系統的一些關鍵特性
◆32位多任務操作系統。
◆多任務搶占、硬實時。
◆支持的處理器體系結構:ARM, x86, SH4, MIPS。
◆組件化。
◆Based on Win32 API Set,桌面系統的一個擴展子集,超過2000個函數可以使用。
◆標準的Portable Executable(PE)文件格式。
另外需要注意的是Platform Builder開發工具集成的Visual Studio中,作為后者的一個插件。開發Windows Mobile 6.x時使用的還是獨立的Platform Builder for Windows Mobile,相信到Windows Mobile 7.0時會有所變化。
作為通用性桌面操作系統的Windows XP取得了巨大的成功,關于其系統特性請看這。所以微軟又推出了Windows XP Embedded。與Window XP Embedded需要借助第三方插件才能實現實時操作系統相比,Windows Embedded CE 6.0是具有32 位本機實時支持的統一內核的。微軟另一款具有本機實時支持統一內核的嵌入式操作系統是Windows Embedded NavReady。
2.系統架構
下圖為Windows CE 5.0系統架構,與下下6.0的架構圖相比,我們發現:
(1).5.0時的NK.EXE被分為6.0的NK.EXE(交給OEM開發)和Kernel.DLL(微軟開發)。
(2).驅動分成內核態和用戶態。
(3).從圖上看不出來的內存架構變化。 #p#
以下為Windows Embedded CE 6.0系統總架構:
以下為更詳細的架構圖,結合上圖我們可以看到:
1.OEM商主要承擔OAL模塊(包括:NK.EXE和Bootloader)以及內核態驅動的開發。
2.其實從現在的市場來看OEM商有時也會負責應用和用戶態驅動的開發。
注:ISV(Independent Software Vendors):獨立軟件開發商。
3.中斷機制
下圖為中斷模型:
(1).設備發起一個硬件中斷。->
(2).內核(Kernel.DLL)響應該中斷,并call對應的中斷服務例程(ISR)。->
(3).中斷服務例程快速處理該中斷。->
(4).驅動中的中斷服務線程(IST)被通知處理該中斷,這里內核使用Event通知IST。
這個過程中涉及到的ISR和IST都會處理中斷,但有所不同,前者的中斷級別更高,所做的工作也很簡單,而后者做主要的處理工作。
4.線程、線程調度、線程同步
線程是被系統獨立調度和分派的基本單位,當系統創建一個進程時,至少會存在一個線程(主線程)。所以進程可以被理解為一個殼子。關于線程更多基本知識在此略去。應用程序一般運行在248-255優先級,被創建的線程默認優先級為251。
另外我們要注意的一個很重要問題是優先級反轉(Priority Inversion)問題,比如現在有三個優先級不同的線程A、B、C, A的優先級***,B次之,C***。其中A和C需要的資源部分相同。處理器當前執行線程C,比C優先級更高的B有可能打斷C而進入運行狀態,這樣C占有的資源什么時候釋放就是一個未知的時間。A只有在C釋放了它所需要的資源后才能被調度,A被阻塞的時間也是未知的。這樣,低優先級的B先于高優先級的A被調度,優先級發生了逆轉。
這個問題在XP里面不是一個嚴重的問題,最多A被多阻塞了一段時間。但是,在實時系統里面,特別是硬實時系統里是個很嚴重的問題。這個問題的解決方法一般有兩種,Windows Embedded CE 6.0采用的后一種方法。
線程同步
被用于線程同步的對象有很多種:臨界區(Critical Setions)、互斥體(Mutexes)、信號量(Semaphores)、事件(Events)、Interlocked Fuctions,這里對此進行簡單的介紹,關于更詳細的資料(比如臨界區和互斥體的本質區別以及性能比較)請從網絡上查閱,比如這里。在CE 6.0系統中每個同步對象都有自己獨立的名字空間,比如一個空字符串"”被作為一個名字對象處理。在桌面系統中所有同步對象是共享名字的空間的。
【編輯推薦】
- Windows Embedded CE 6.0 R3 ***嵌入式系統發展趨勢
- 淺析Windows Embedded CE下Native C++的開發
- 點評Windows Embedded CE 6.0 R3的產品差異性
- 微軟發布Windows Embedded CE 6.0 R3
- 試用Windows Embedded 6.0 R3開發手記