重要的是應當區分實時系統和實時 OS (RTOS)。實時系統由滿足系統要求所需的所有元素(硬件、OS 和應用程序)組成。RTOS 只是完整的實時系統的一個元素,它必須提供足夠的功能,才能使全部實時系統能夠滿足它的要求。
盡管以前的 Windows CE 版本提供了某些 RTOS 功能,但自從 Windows CE 3.0 以后很多重要的內核更改極大地增強了實時性能。Windows CE .NET 內核包含了與 Windows CE 3.0 相同的實時增強功能,除此之外還有某些額外的功能。本文描述了作為 Windows CE .NET 及其以前版本的組成部分的以下更改:
Windows CE .NET 對 x86 平臺添加了通過 OEM 定義的變量指定頁面池大小的功能。
Windows CE 3.0 將可用于線程的優先級級別數從 8 增加到 256,0 是最高的優先級,255 是最低的優先級。Windows CE 的前一版本的優先級級別 0 到 7 對應于 Windows CE 3.0 中級別 248 到 255。更多的優先級級別答應開發人員更靈活地控制嵌入式系統的調度,并防止由于限制優先級級別數使隨機應用程序降低系統性能。
要指派這些新的優先級,Windows CE 3.0 引入了兩個新函數:CeSetThreadPRiority 和 CeGetThreadPriority。新函數與 Windows CE 2.12 中的 SetThreadPriority 和 GetThreadPriority 函數看起來完全相同,不過新函數接受的數字范圍是 0 到 255。
更多地控制時間和調度 Windows CE 3.0 已經改進了計時器性能,計時器和休眠函數調用的精度達到了一毫秒,并且應用程序可以為每個線程設置時間片。
計時器(或系統時鐘)是一種速率,由 OS 以此速率生成計時器中斷并對其提供服務。以前,計時器也是線程時間片,是線程沒有被搶占的情況下可以在系統中運行的最長時間。在 Windows CE 3.0 中,計時器不再直接與線程時間片相關。
以前,OEM 將計時器和時間片作為 OEM 適配層 (OAL) 中的常量設置為大約 25 毫秒。計時器觸發時,假如一個線程已做好預備,內核會調度此新的線程。在 Windows CE 3.0 中,計時器總是設置為一毫秒,并且可以對每個線程設置時間片。
線程時間片 在 Windows CE 3.0 中,線程時間片很靈活,足以使應用程序能夠逐個線程地設置時間片。這就讓開發人員可以改編計劃程序,以滿足應用程序的當前需要。為了調整時間片,已經添加了兩個新函數:CeGetThreadQuantum 和 CeSetThreadQuantum。這項更改使應用程序能夠基于線程完成任務所需要的時間量來設置線程的時間片。通過將任何線程的線程時間片設置為零,循環調度算法可以變為“運行到完成”算法。只有較高優先級的線程或硬件中斷才能先于設置為運行到完成的線程執行。
更改處理優先級倒置的方法 為了有助于縮短響應時間,Windows CE 3.0 更改了它的優先級倒置方法,當低優先級線程擁有一個較高優先級線程所需要的內核對象時,就會發生優先級倒置。Windows CE 使用優先級繼續來處理優先級倒置,這時,被阻塞的、擁有較高優先級線程所需要的內核對象的線程將繼續更高的優先級。優先級倒置使較低優先級線程能夠運行,并釋放資源供較高優先級的線程使用。以前,內核處理整個倒置鏈。從 Windows CE 3.0 開始,內核保證只處理優先級倒置到一個級別的深度。
優先級倒置有兩個基本示例。第一個是簡單的情況,這種情況下,對優先級倒置的處理從 Windows CE 2.12 到 Windows CE 3.0 沒有變化。例如,在有三個處于運行狀態的線程時,可以看見這種情況。線程 A 的優先級是 1,線程 B 和 C 優先級較低。假如線程 A 正在運行,并且因為線程 B 擁有線程 A 需要的內核對象而使 A 被阻塞,那么線程 B 的優先級會提高到 A 的優先級級別,以便答應線程 B 運行。然后,假如因為線程 C 擁有線程 B 需要的內核對象而使線程 B 被阻塞,則線程 C 的優先級會提高到 A 的優先級級別,以便答應線程 C 也能運行。
第二個并且是更有趣的情況是,線程 A 可以以比 B 和 C 更高的優先級運行,線程 B 擁有 A 需要的內核對象,線程 B 被阻塞,等待 C 釋放它需要的內核對象,而 C 正在運行。在 Windows CE 2.12 中,當 A 運行然后因為 B 而被阻塞時,B 和 C 的優先級都會提高到 A 的優先級,以便使它們能夠運行。在 Windows CE 3.0 中,當 A 因為 B 而被阻塞時,只有線程 B 的優先級被提高。通過減少復雜性和更改算法,極大地減少和限制了 Windows CE 中最大的 KCALL。