国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

設(shè)計和優(yōu)化 Microsoft Windows CE .NET

2019-11-18 12:03:20
字體:
供稿:網(wǎng)友

  簡介
  對于高性能的嵌入式應(yīng)用程序所需要的對時間要求嚴(yán)格的響應(yīng)來說,實時性能是不可缺少的,例如,電信交換設(shè)備、工業(yè)自動化和控制系統(tǒng)、醫(yī)學(xué)監(jiān)視設(shè)備和空間導(dǎo)航和制導(dǎo)系統(tǒng)。這樣的應(yīng)用程序必須在指定的時間參數(shù)以內(nèi)實時地傳遞它們的響應(yīng)。
  
  實時性能是什么?對于 Microsoft Windows CE .NET OS,以下列表定義了實時性能:
  
  • 有關(guān)高優(yōu)先級線程調(diào)度的擔(dān)保的上限 — 只針對所有已調(diào)度線程中的最高優(yōu)先級線程。
  
  • 調(diào)度高優(yōu)先級中斷服務(wù)例程 (ISR) 過程中有關(guān)延遲的擔(dān)保上限。搶占機制在一個短暫、有限的時間內(nèi)關(guān)閉后內(nèi)核有很少的空間。
  
  • 對計劃程序和它如何調(diào)度線程進行細(xì)致的控制。
  
  
  重要的是應(yīng)當(dāng)區(qū)分實時系統(tǒng)和實時 OS (RTOS)。實時系統(tǒng)由滿足系統(tǒng)要求所需的所有元素(硬件、OS 和應(yīng)用程序)組成。RTOS 只是完整的實時系統(tǒng)的一個元素,它必須提供足夠的功能,才能使全部實時系統(tǒng)能夠滿足它的要求。
  
  盡管以前的 Windows CE 版本提供了某些 RTOS 功能,但自從 Windows CE 3.0 以后很多重要的內(nèi)核更改極大地增強了實時性能。Windows CE .NET 內(nèi)核包含了與 Windows CE 3.0 相同的實時增強功能,除此之外還有某些額外的功能。本文描述了作為 Windows CE .NET 及其以前版本的組成部分的以下更改:
  
  Windows CE .NET
  對 x86 平臺添加了通過 OEM 定義的變量指定頁面池大小的功能。
  
  Windows CE 3.0
  • 增加了線程優(yōu)先級級別的數(shù)目(從 8 到 256)。
  
  • 更多地控制時間和調(diào)度。應(yīng)用程序可以控制提供給每個線程的時間,并操縱對它們有好處的計劃程序?,F(xiàn)在,對于與休眠和等待相關(guān)的應(yīng)用程序編程接口 (API),計時器精確到一毫秒。
  
  • 處理優(yōu)先級倒置的方法得到改進。
  
  • 全面支持嵌套中斷。
  
  • ISR 和中斷服務(wù)線程 (IST) 滯后時間得到減少。
  
  • 更細(xì)粒度的內(nèi)存治理控制。
  
  
  此外,本文描述了用來測試內(nèi)核實時性能的工具,并提供了在三種不同 CPU 上的實時性能測試結(jié)果。
  
  返回頁首
  對內(nèi)核的更改
  內(nèi)核是 Windows CE OS 的內(nèi)部核心,它負(fù)責(zé)調(diào)度和同步線程、處理異常和中斷、加載應(yīng)用程序和治理虛擬內(nèi)存。在 Windows CE 3.0 中,為了提高性能和減少滯后時間,內(nèi)核經(jīng)歷了以下幾個更改:
  
  • 將所有內(nèi)核數(shù)據(jù)結(jié)構(gòu)移動到物理內(nèi)存,從而當(dāng)在內(nèi)核中執(zhí)行非搶占代碼時極大地避免了轉(zhuǎn)換后備緩沖區(qū) (TLB) 損失。
  
  • 所有非搶占、但可中斷的內(nèi)核部分(稱為 KCALL)被分割成更小的非搶占節(jié)。由于增加了節(jié)數(shù),這就引入了某些復(fù)雜性,但現(xiàn)在搶占機制能夠在更短的時間內(nèi)關(guān)閉。
  
  這一節(jié)描述為了增強 Windows CE 3.0 的實時性能對內(nèi)核的進一步更改。
  
  更多優(yōu)先級級別
  內(nèi)核的計劃程序首先使用較高的優(yōu)先級級別運行某個線程,然后使用相同的優(yōu)先級以循環(huán)方式運行多個線程。為線程指派優(yōu)先級級別是治理執(zhí)行速度的一種方式。
  
  Windows CE 3.0 將可用于線程的優(yōu)先級級別數(shù)從 8 增加到 256,0 是最高的優(yōu)先級,255 是最低的優(yōu)先級。Windows CE 的前一版本的優(yōu)先級級別 0 到 7 對應(yīng)于 Windows CE 3.0 中級別 248 到 255。更多的優(yōu)先級級別答應(yīng)開發(fā)人員更靈活地控制嵌入式系統(tǒng)的調(diào)度,并防止由于限制優(yōu)先級級別數(shù)使隨機應(yīng)用程序降低系統(tǒng)性能。
  
  要指派這些新的優(yōu)先級,Windows CE 3.0 引入了兩個新函數(shù):CeSetThreadPRiority 和 CeGetThreadPriority。新函數(shù)與 Windows CE 2.12 中的 SetThreadPriority 和 GetThreadPriority 函數(shù)看起來完全相同,不過新函數(shù)接受的數(shù)字范圍是 0 到 255。
  
  更多地控制時間和調(diào)度
  Windows CE 3.0 已經(jīng)改進了計時器性能,計時器和休眠函數(shù)調(diào)用的精度達(dá)到了一毫秒,并且應(yīng)用程序可以為每個線程設(shè)置時間片。
  
  計時器(或系統(tǒng)時鐘)是一種速率,由 OS 以此速率生成計時器中斷并對其提供服務(wù)。以前,計時器也是線程時間片,是線程沒有被搶占的情況下可以在系統(tǒng)中運行的最長時間。在 Windows CE 3.0 中,計時器不再直接與線程時間片相關(guān)。
  
  以前,OEM 將計時器和時間片作為 OEM 適配層 (OAL) 中的常量設(shè)置為大約 25 毫秒。計時器觸發(fā)時,假如一個線程已做好預(yù)備,內(nèi)核會調(diào)度此新的線程。在 Windows CE 3.0 中,計時器總是設(shè)置為一毫秒,并且可以對每個線程設(shè)置時間片。
  
  通過將計時器從 OEM 定義的數(shù)字更改為一毫秒,可以讓應(yīng)用程序執(zhí)行 Sleep(1) 函數(shù),并預(yù)計得到大約一毫秒的精度。當(dāng)然,這取決于線程的優(yōu)先級、其他線程的優(yōu)先級以及是否正在運行 ISR。以前,Sleep(1) 經(jīng)過一個系統(tǒng)周期后返回,這意味著假如計時器被設(shè)置為 25 毫秒,則 Sleep(1) 實際上是 Sleep(25)。
  
  計時器中斷
  現(xiàn)在,內(nèi)核有幾個新的變量,開發(fā)人員可以使用它們確定系統(tǒng)時鐘是否需要重新調(diào)度。通過在適當(dāng)?shù)臅r候返回 SYSINTR_NOP 標(biāo)志而不是 SYSINTR_RESCHED 標(biāo)志,完整實現(xiàn)的系統(tǒng)時鐘 ISR 可以防止內(nèi)核被重新調(diào)度。Nk.lib 導(dǎo)出在 Timer ISR 中使用的以下變量:
  
  • dwPreempt 是線程被搶占之前的毫秒數(shù)。
  
  • dwSleepMin 是第一次超時(假如有)到期之前的毫秒數(shù),需要重新調(diào)度。
  
  • ticksleft 是已經(jīng)過去、但尚未被計劃程序的休眠隊列處理的系統(tǒng)時鐘數(shù);因而,非零值將導(dǎo)致重新調(diào)度。
  
  
  在 Timer ISR 中,其他邏輯將優(yōu)化計劃程序,并防止內(nèi)核執(zhí)行不必要的工作,如以下代碼示例所示。
  
  if (ticksleft (dwSleepMin && (DiffMSec >= dwSleepMin)) (dwPreempt &&
   (DiffMSec >= dwPreempt))) return SYSINTR_RESCHED; return SYSINTR_NOP;
  
  OEMIdle 函數(shù)
  OEM 實現(xiàn) OEMIdle 函數(shù),在沒有要調(diào)度的線程時內(nèi)核將調(diào)用該函數(shù)。在以前的版本中,計時器時鐘會強制 OS 脫離空閑狀態(tài),并返回到內(nèi)核以確定是否線程已做好調(diào)度預(yù)備。假如沒有線程做好預(yù)備,內(nèi)核再次調(diào)用 OEMIdle。該操作將導(dǎo)致內(nèi)核每隔 25 毫秒(或 OEM 指定的其他時間片長度)被激活一次,以確定是否仍然沒有要調(diào)度的線程。在電池供電的設(shè)備上,這樣的操作會耗盡寶貴的電池電量。
  
  在 Windows CE 3.0 中,為了在時鐘頻率較高的情況下減少耗電量,OEMIdle 函數(shù)可以讓 CPU 進入待機模式一毫秒以上。OEM 通過使用 dwSleepMin 和 DiffMSec 變量來編程設(shè)置系統(tǒng)時鐘計時器,以便在第一個可用的超時后喚醒。DiffMSec 是自從通過 TimerCallBack 函數(shù)檢索到最后一次間隔時間以來的當(dāng)前毫秒值。
  
  硬件計時器的最大超時值可能小于 MAX_DWord 毫秒值,所以可以編程設(shè)置計時器的最大等待時間。在所有情況下,系統(tǒng)從空閑狀態(tài)返回時,OEMIdle 函數(shù)必須使用已經(jīng)過去的實際毫秒數(shù)更新 CurMSec 和 DiffMSec。CurMSec 是間隔時間的當(dāng)前值 £­ 即自從啟動以來的毫秒數(shù)。
  
  線程時間片
  在 Windows CE 3.0 中,線程時間片很靈活,足以使應(yīng)用程序能夠逐個線程地設(shè)置時間片。這就讓開發(fā)人員可以改編計劃程序,以滿足應(yīng)用程序的當(dāng)前需要。為了調(diào)整時間片,已經(jīng)添加了兩個新函數(shù):CeGetThreadQuantum 和 CeSetThreadQuantum。這項更改使應(yīng)用程序能夠基于線程完成任務(wù)所需要的時間量來設(shè)置線程的時間片。通過將任何線程的線程時間片設(shè)置為零,循環(huán)調(diào)度算法可以變?yōu)椤斑\行到完成”算法。只有較高優(yōu)先級的線程或硬件中斷才能先于設(shè)置為運行到完成的線程執(zhí)行。
  
  默認(rèn)時間片是 100 毫秒,但在 OEM 初始化階段,OEM 可以通過將內(nèi)核變量 dwDefaultThreadQuantum 設(shè)置為大于零的任何值,從而重寫系統(tǒng)的默認(rèn)值。
  
  更改處理優(yōu)先級倒置的方法
  為了有助于縮短響應(yīng)時間,Windows CE 3.0 更改了它的優(yōu)先級倒置方法,當(dāng)?shù)蛢?yōu)先級線程擁有一個較高優(yōu)先級線程所需要的內(nèi)核對象時,就會發(fā)生優(yōu)先級倒置。Windows CE 使用優(yōu)先級繼續(xù)來處理優(yōu)先級倒置,這時,被阻塞的、擁有較高優(yōu)先級線程所需要的內(nèi)核對象的線程將繼續(xù)更高的優(yōu)先級。優(yōu)先級倒置使較低優(yōu)先級線程能夠運行,并釋放資源供較高優(yōu)先級的線程使用。以前,內(nèi)核處理整個倒置鏈。從 Windows CE 3.0 開始,內(nèi)核保證只處理優(yōu)先級倒置到一個級別的深度。
  
  優(yōu)先級倒置有兩個基本示例。第一個是簡單的情況,這種情況下,對優(yōu)先級倒置的處理從 Windows CE 2.12 到 Windows CE 3.0 沒有變化。例如,在有三個處于運行狀態(tài)的線程時,可以看見這種情況。線程 A 的優(yōu)先級是 1,線程 B 和 C 優(yōu)先級較低。假如線程 A 正在運行,并且因為線程 B 擁有線程 A 需要的內(nèi)核對象而使 A 被阻塞,那么線程 B 的優(yōu)先級會提高到 A 的優(yōu)先級級別,以便答應(yīng)線程 B 運行。然后,假如因為線程 C 擁有線程 B 需要的內(nèi)核對象而使線程 B 被阻塞,則線程 C 的優(yōu)先級會提高到 A 的優(yōu)先級級別,以便答應(yīng)線程 C 也能運行。
  
  第二個并且是更有趣的情況是,線程 A 可以以比 B 和 C 更高的優(yōu)先級運行,線程 B 擁有 A 需要的內(nèi)核對象,線程 B 被阻塞,等待 C 釋放它需要的內(nèi)核對象,而 C 正在運行。在 Windows CE 2.12 中,當(dāng) A 運行然后因為 B 而被阻塞時,B 和 C 的優(yōu)先級都會提高到 A 的優(yōu)先級,以便使它們能夠運行。在 Windows CE 3.0 中,當(dāng) A 因為 B 而被阻塞時,只有線程 B 的優(yōu)先級被提高。通過減少復(fù)雜性和更改算法,極大地減少和限制了 Windows CE 中最大的 KCALL。
  
  中斷處理和嵌套中斷
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 沙洋县| 凌云县| 炎陵县| 宿州市| 衡山县| 天津市| 获嘉县| 同德县| 丹寨县| 漳浦县| 建水县| 灵丘县| 莒南县| 石景山区| 莱州市| 滨州市| 海盐县| 大庆市| 沂源县| 福泉市| 察哈| 湖北省| 文昌市| 南宫市| 正蓝旗| 恩施市| 赤城县| 海盐县| 安远县| 潮安县| 商洛市| 固安县| 广平县| 阿拉善左旗| 龙游县| 资兴市| 通道| 武冈市| 奎屯市| 恭城| 柏乡县|