讀書筆記—-深入理解WinCE

來源:互聯網
上載者:User

 

張冬泉老師的《wince 實用開發技術》讀書筆記。

1、系統架構

CE被設計為一種分層結構,從底層向上分別為硬體層、OEM層、作業系統層和應用程式層。

OEM層由如下模組組成:OAL(OEM適配層)、啟動程序載入程式(Bootloader)、設定檔和驅動程式。

OEM層的代碼構成中主要由CSP和BSP程式碼群組成。CSP支援不同的微處理器體繫結構,而BSP支援不同的微處理器擴充和外設,它由Bootloader、OAL和驅動程式組成。

2、檔案系統

CE的檔案系統和資料存放區都指的是Object Storage Service,Object Storage Service是CE的預設檔案系統,它相當於CE裝置上的硬碟。

Object Storage Service是由共用一個記憶體堆的檔案系統、資料庫和註冊表組成的。

CE下沒有盤符的概念,每個存放裝置或存放裝置分區都是根(/)下的一個目錄。

 

Object Storage Service大小限制為256M的RAM,Object Storage Service具有壓縮屬性,所以實際能夠包含的資料量可以達到512M。

Object Storage Service大小是可調整的。

 

CE提供三種類型的檔案系統:

基於ROM的檔案系統

基於RAM的檔案系統

FAT檔案系統

另外開發人員也可以建立和註冊屬性檔案系統。

 

CE的註冊表是一個系統資料庫,用來儲存關於應用程式、驅動程式、使用者配置及其它配置的資料。

CE檔案系統和所有與檔案相關的操作都是通過Filesys.exe進程進行管理的,通常將它稱為檔案管理工具。

檔案管理工具實現了Object Storage Service和儲存管理,並將所有檔案系統統一到一個根“/”下面的單個系統中。

3、記憶體管理

CE是一個保護模式的32位作業系統,它的程式訪問只能使用虛擬記憶體。

CE中有兩種類型的地址:物理地址和映射的虛擬位址。

 

使用者地址空間被分為64個32M的slot,所能進程分享這個地址空間。

在CE核心中,slot是虛擬位址維護的基本單元。在從slot0到slot63的64個slot中,前面的33個用於進程,剩下的slot用於Object Storage Service、記憶體映射和資源地圖。Slot0是一個特殊的slot,它對應當前正在啟動並執行進程。Slot1至slot33每一個都代表一個當前正在啟動並執行進程。

4、系統調度

CE支援兩種類型的模組:應用程式(以.exe為副檔名)和動態連結程式庫(以.dll為副檔名)。

當CE載入一個應用程式時,它就產生了一個進程,一個進程就是一個應用程式的執行個體。

每個進程都有自己受保護的32M地址空間。

每個進程至少有一個線程,但也可能有多個線程,線程是執行在一個進程之內的代碼。

多個進程使使用者可以同時工作於多個應用程式,而多個線程可以使一個應用程式同時完成多個任務。

CE是一個搶佔式即時多任務的作業系統。

 

 

CE下的模組由EXE檔案和DLL檔案組成。EXE是可以獨立載入的模組;DLL不能獨立載入,它必須由一個正在啟動並執行EXE模組或另一個DLL模組載入。

DLL有兩種載入方式:隱式載入方式和明確式載入方式。

 

CE是一個多進程作業系統,並支援最多32個進程。

CE啟動時會載入4個進程:NK.exe、Filesys.exe、GWES和Device.exe。在實際使用時還會載入幾個別的進程,如shell進程等,所以使用者可載入的實際進程數約為24個左右。若不夠用可以考慮使用多線程代替使用多進程。

一個進程可以建立若干進程,這是沒有上限的,但它也受裝置實際可用RAM及線程棧可用進程地址空間的約束。

啟動一個進程的方式:

第一種:系統啟動時由系統自動載入。

第二種:系統啟動後通過操作鍵盤或滑鼠可視地去進行載入。

第三種:是隱式載入方式,即通過一個正在啟動並執行進程載入啟動另一個進程。

 

一個進程就是一個可執行單元,當作業系統建立一個進程時,同時也會建立一個線程,使用線程是為了儘可能有效地利用CPU時間。

線程有5種狀態,分別為:運行、掛起、休眠、阻塞和終止。

CE支援0~255共256個優先順序,其中0優先順序最高,255優先順序最低。

每個線程都有自己的優先順序。

CE系統是根據線程的優先順序和線程量來調度每一個線程的。

線程量是分配給線程運行一次佔用的CPU時間片。

為了設定和獲得一個線程的優先順序,可以使用CeSetThreadPriority函數和CeGetThreadPriority函數。

當建立一個線程而沒有設定優先權時,其優先順序預設為251。

CE支援線程優先順序倒置。

線程量是線程在一個CPU時間片的期間。

每個CE系統都有一個預設的線程量,通常是100ms,但是OEM可以改這個預設值。通過在OAL的OemInit函數中設定dwDefaultThreadQuantum全域變數的值來達到。預設線程量必須大於0。

每個線程都可以通過調用CeSetThreadQuantum函數設定自己的線程量。

 

纖程是另一個可以在應用程式中使用的多線程對象。

為了協調各個線程的活動CE中引入了同步對象,它包括:關鍵區、訊號量、互斥體、事件、互鎖函數及點對點訊息佇列。

 

原文連結:http://blog.csdn.net/a443453087/article/details/4832723

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.