windows ce的體系結構和功能

 

Windows ce的體系結構和功能

                             Windows ce體系結構圖

 

操作系統層

操作系統的基本功能被放在多個獨立的進程(exe)裏面實現。在運行的時候,這些進程大致有如下幾個:

l         內核NK.EXE

l         圖形系統GWES.EXE

l         對象存儲FILESYS.EXE

l         設備管理系統DEVICE.EXE

l         服務SERVICES.EXE

 

系統調用與CoreDLL.DLL

CoreDLL.DLL不是一個單獨的進程,它是一個會被所有用戶進程都加載的動態鏈接庫。所有的應用程序都不能直接與操作系統或硬件打交道,如果用戶程序希望訪問windows ce所提供的服務,那麼只能通過CoreDLL.DLL進行。

 

Windows ce的系統調用

ü         應用程序進行系統調用時,它直接調用的是CoreDLL.DLL中的一個(Wrapper)函數,此包裝函數爲真正的系統調用準備所需要的參數。CoreDLL.DLL會被Windows CE的所有進程加載,因此這一步其實只是進程內部的函數調用。

ü         CoreDLL.DLL會發起一個異常,也可叫做軟件中斷。在不同的CPU體系結構上,異常的實現原理也不一樣。總之,異常的作用是把執行權重新由應用程序還給操作系統。

ü         操作系統內核會捕捉所有的異常,當操作系統捕獲到此異常時,也就重新獲得CPU。在Windows CE上,NK.EXE會處理這個軟件中斷,這樣進行系統調用的應用程序進程就掛起了,掛靠就轉入了NK.EXE

ü         接下來,NK.EXE根據系統調用的不同,找到具體實現該系統調用的進程(這些進程在Windows CE上也被叫做PSL,全稱是Protected Server Library)。此進程可能是NK.EXE,也可能不是。如果不是NK.EXE,那麼執行就再次跳轉,把執行轉到具體實現系統調用的進程去執行。

ü         實現這個系統調用的進程得到執行的機會。

ü         系統調用結束,應用程序可以從對CoreDLL.DLL的調用處返回,然後繼續執行。

要注意的是CoreDLL.DLL中有些函數並不是系統調用的包裝函數,例如字符串處理函數,當應用程序調用這類函數時,就不會發生自陷和進程執行的跳轉。

 

由上CreateWindow()的調用可以看出,windows ce中的每次系統調用都會導致多個進程之間頻繁切換,而且系統調用所涉及的數據也需要在多個進程之間遷移,這樣勢必會使整個系統的效率降低。其實,在系統調用的整個過程中,並沒有發生真正的線程上下文切換。Windows ce內核負責把api調用轉到實現該apiPSL進程。PSL進程會把進行系統調用的執行線程從一個進程遷移到下一個進程。比如說,上個例子中,雖然CreateWindow系統調用會在應用程序、NK.EXEGWES.EXE中來回切換,但是在3個進程中招待的純種是同一個線程。而所謂的“切換”只是把執行進程的虛擬地址空間映射到了Slot 0Windows ce內核負責把應用程序中的用戶態線程改變訪問權限,然後把它遷移到系統進程中,在整個系統調用過程中,這個線程在3個進程中使用同一個棧和同一些寄存器。當這個線程離開PSL進程的時候,windows ce內核再把它的特殊訪問權限移除。

內核NK.EXE

系統運行時,windows ce的內核表現爲NK.EXE進程。NK.EXE是所有windows ce的系統中都存在的核心進程,它表現了win32 API核心中進程創建加載、純種高度、中斷處理和內在管理等核心功能。

NK.EXENK.LIBOAL.LIB組成。NK.LIB是由微軟提供的,它的代碼與CPU指令體系結構相關而與具體的外設無關,此種設計可使OAL儘可能小OAL.LIBOEM層中的OAL代碼編譯後的輸出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章