Windows ce體系結構圖
操作系統的基本功能被放在多個獨立的進程(exe)裡面實現。在運行的時候,這些進程大致有如下幾個:
l 內核NK.EXE
l 圖形系統GWES.EXE
l 對象存儲FILESYS.EXE
l 設備管理系統DEVICE.EXE
l 服務SERVICES.EXE
CoreDLL.DLL不是一個單獨的進程,它是一個會被所有用戶進程都加載的動態鏈接庫。所有的應用程序都不能直接與操作系統或硬件打交道,如果用戶程序希望訪問Windows ce所提供的服務,那麼只能通過CoreDLL.DLL進行。
應用程序
DLL接口
進程邊界
CoreDLL.DLL
Win32API代理
本地函數
NK.EXE
NK.LIB
OAL.LIB
中斷處理
NK.EXE
NK.LIB
OAL.LIB
中斷處理
中斷處理
進程切換
FileSys.exe
gwes.exe
device.exe
硬件
中斷
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中有些函數並不是系統調用的包裝函數,例如字符串處理
函數調用
函數代碼
應用
程序
內核
自陷
內核調用
跳轉
App.exe
NK.EXE
GWES.EXE
用戶態線程
CoreDLL.DLL
CreateWindow()包裝函數
Win32API派發