INtime實時操作系統(tǒng)(RTOS)
For
Microsoft Windows XP
Microsoft Windows XP Embedded
Microsoft Windows XP Embedded with Service Pack 1
引言
人們正在越來越多地選擇 Microsoft Windows XP 和 Windows XP Embedded 操作系統(tǒng)來運行需要某種實時性行為的專用應(yīng)用程序。Windows XP Embedded 與 Windows XP 桌面軟件基于相同的二進制文件,它在許多方面都是可供選擇的最佳平臺,但 Windows XP Embedded 和 Windows XP 自己無法管理此類系統(tǒng)所需要的具有嚴格實時性要求,因此需要增強該平臺的實時功能。在Windows XP 平臺上添加實時擴展方案時,已有許多解決方案在 Windows XP 內(nèi)核設(shè)備驅(qū)動程序提供了某種實時功能,但此類解決方案沒有考慮到為用戶提供可容易進行應(yīng)用程序開發(fā)的應(yīng)用環(huán)境,也沒有考慮對于許多應(yīng)用程序進行調(diào)用。TenAsys Corporation 出品的 INtime 軟件可以做到不僅為應(yīng)用程序增加實時性功能,并且使實時應(yīng)用程序存在于強大、可靠和可調(diào)用資源的環(huán)境。
主要特性和功能
*成熟的實時技術(shù)
*無縫實時運行,適用于Windows XP、Windows XP Embedded、Windows 2000和Windows Server 2003
*支持多進程或系統(tǒng)(SMP和HT)——用于多進程/多處理器的共享或獨占式實時資源分配選項
*完全與Microsoft Visual Studio .NET相集成——可編輯、編譯、鏈接和調(diào)試實時應(yīng)用程序,而無需退出Visual Studio .NET環(huán)境
*集成的聯(lián)機幫助
*可伸縮的體系結(jié)構(gòu)——實時應(yīng)用程序可與Windows一起本地運行或跨多節(jié)點運行
*用于實時應(yīng)用程序的完全內(nèi)存保護和地址隔離
*實時TCP/IP通信stack——可獨立于Windows網(wǎng)絡(luò)stack運行
*提供了DeviceNet、PROFIBUS、CANopen和ControlNet等驅(qū)動程序
*實時USB stack支持OHCI、UHCI和EHCI
控制器
*提供了GPIB(IEEE-488)和運動控制實時設(shè)備驅(qū)動程序
*直接I/O和內(nèi)存映射,可訪問所有的硬件
*用于周期性事件中斷的系統(tǒng)計時器粒度,其精度達100 μs
*郵箱、信號量、警報、區(qū)域和共享內(nèi)存IPC機制
*EC++庫符合最新的ANSI標準——同時支持異常處理和名稱空間
*可加載實時庫的實時共享庫(RSL)
*用于實時對象瀏覽和崩潰分析的INtime Explorer工具(INtex)
*INscope實時系統(tǒng)性能分析工具
一 INtime簡介
IRMX® RTOS 技術(shù)的發(fā)展已有25年以上的歷史,非常的成熟、可靠。INtime以此技術(shù)為基礎(chǔ),它將強大的工業(yè)級控制與豐富的Windows功能相結(jié)合,從而使得應(yīng)用程序能夠充分利用所有Windows特性和成千上萬現(xiàn)有的應(yīng)用程序,而無需犧牲實時響應(yīng)。使用TenAsys軟件來執(zhí)行實時Windows應(yīng)用程序不僅能夠降低軟件的復(fù)雜性,而且還可以壓縮冗余的硬件成本,顯著地壓縮了產(chǎn)品上市時間。
通過使用INtime軟件,可獲得非常精確且穩(wěn)定的的微秒級響應(yīng)時間,并絲毫不會降低安全性、可靠性和系統(tǒng)性能。正如Windows應(yīng)用程序在用戶模式下(ring3)執(zhí)行時一樣,通過INtime的保護模式編程模型來進行管理的實時應(yīng)用程序也可在用戶模式下執(zhí)行,因而獲得高穩(wěn)定性。其他類型的解決方案要求實時應(yīng)用程序在Windows內(nèi)核中(ring0)完全無保護地運行,在這種情況下,可導(dǎo)致錯誤指針、棧溢出、頁面錯誤等編程錯誤,這些將會十分明顯的影響到實時環(huán)境和Windows環(huán)境的穩(wěn)定性。但是,如果在INtime受保護的實時系統(tǒng)內(nèi)部運行實時應(yīng)用程序,就絕對不會發(fā)生這種問題。
TenAsys實時操作系統(tǒng)已在全球成千上萬種應(yīng)用程序中得到驗證,并且至今已無故障運行了數(shù)百萬小時。
二INtime 系統(tǒng)體系結(jié)構(gòu)
INtime 是與 Windows 操作系統(tǒng)共享硬件平臺的實時操作系統(tǒng)。Windows中安裝的組件包括一個 Windows內(nèi)核驅(qū)動程序和一些 Windows 服務(wù)。該驅(qū)動程序管理用于運行內(nèi)核和實時應(yīng)用程序的內(nèi)存,并且管理這兩個系統(tǒng)之間的通訊接口。
Windows將實時內(nèi)核加載到已分配的內(nèi)存中,然后使Context從 Windows 切換到 INtime 內(nèi)核。將創(chuàng)建一個低優(yōu)先級線程,其功能是將計算機Context切換回 Windows 系統(tǒng)。因為該線程將被所有其他實時線程占先,所以只要牽涉到實時內(nèi)核,Windows 系統(tǒng)都是實時系統(tǒng)的空閑任務(wù)。 在 INtime中,任何實時中斷都被直接處理,并且所有其他中斷都在中斷控制器被屏蔽。當Context返回到 Windows 時,這些中斷將被解除屏蔽,以使其可以被 Windows 正常處理。當在 Windows Context中發(fā)生實時中斷時,將插入 Windows IDT 以引起到 INtime Context的上下文切換,以便可以處理中斷。
系統(tǒng)計時器通常在 Windows 和 INtime 之間共享。硬件計時器被改編以便以 Windows 要求的速率更高的速率中斷,并且只根據(jù)需要調(diào)用 Windows 處理程序。通常情況下,INtime 內(nèi)核以高得多的速率(時間間隔可以低至 100μs)獲得計時器中斷,以便提供更精確的計時服務(wù)。計時器處理優(yōu)化能夠避免在 Windows 和 INtime 之間進行不必要的Context切換。
某些硬件抽象層 (HAL) 入口點被截獲和監(jiān)控,以便防止 Windows 內(nèi)核執(zhí)行某些不需要的操作,例如屏蔽實時中斷或者更改硬件系統(tǒng)計時器頻率。HAL 文件不是由軟件修改或替換的。
INtime 內(nèi)核為實時虛擬機提供操作系統(tǒng)服務(wù)。它提供此類內(nèi)核通常會提供的實時服務(wù),包括一個基于優(yōu)先級的搶先式計劃程序,該程序執(zhí)行基于優(yōu)先級的中斷處理。線程優(yōu)先級的范圍是從 0(最高優(yōu)先級)到 255(最低優(yōu)先級),低于可配置的優(yōu)先級閾值的線程可以與多個具有相同優(yōu)先級的線程分享其時間片。內(nèi)核計劃程序已經(jīng)進行優(yōu)化,以獲得最佳的中斷性能。得到的平臺表現(xiàn)出良好的性能,最重要的是它的行為是可預(yù)測的。
1 應(yīng)用程序環(huán)境
INtime 應(yīng)用程序環(huán)境被設(shè)計為具有下列功能:
每個進程都是其他對象(包括線程和物理內(nèi)存)的容器。由該進程所屬線程創(chuàng)建的每個對象都由該進程所有,并且在進程終止時不再存在。
每個進程都具有一個與其他進程的地址空間隔離的平面虛擬地址空間。進程中的代碼以用戶模式(IA 權(quán)限等級 3)執(zhí)行,從而防止意外訪問系統(tǒng)對象和數(shù)據(jù)。
每個進程都可以直接訪問處理器的輸入/輸出 (I/O) 空間,而且可以直接訪問物在任何進程中,都可以通過系統(tǒng)調(diào)用以及用戶為中斷處理程序和線程編寫的代碼來直接處理中斷。
錯誤是按進程分別處理的。默認情況下會掛起出錯的線程,并且向全局郵箱中寫入一個記錄??梢愿哪J操作,以便能夠在出錯地址進入靜態(tài)系統(tǒng)調(diào)試器或應(yīng)用程序調(diào)試器。進程還可以選擇獲得有關(guān)該進程中錯誤的通知。
2 提供了多個 API 以便進程可以使用系統(tǒng)服務(wù)。下面的部分中將詳細介紹這些 API。
通過將請求轉(zhuǎn)發(fā)給 Windows 服務(wù)以執(zhí)行所請求的操作,向?qū)崟r應(yīng)用程序提供 Windows 服務(wù)(對注冊表、事件日志和文件系統(tǒng)的訪問)。
實時 API
INtime 內(nèi)核提供的標準 API 提供了適合于同步和通訊的對象,以及在進程之間(包括 INtime 和 Windows 進程之間)共享內(nèi)存的手段。所有對象都通過句柄引用,并且所有句柄對于實時系統(tǒng)都是全局的。對象包括:
(1)進程
進程擁有其他對象(包括其他進程)和物理內(nèi)存。當進程創(chuàng)建時,將向其分配一個內(nèi)存池,它限制了可以分配給該進程的物理內(nèi)存的數(shù)量。盡管 INtime 內(nèi)核使用分頁硬件進行內(nèi)存管理,但它并不采用請求調(diào)頁功能。因此,進程被限制在它可以分配的物理內(nèi)存量的范圍內(nèi)。進程還具有對象編錄,可以在此命名對象。可以按名稱搜索該編錄。
(2)線程
線程總是由某個進程所有,并且線程所創(chuàng)建的對象由其進程所有。線程會被分配一個優(yōu)先級,范圍為從 0 到 254,其中 0 是最高優(yōu)先級。
(3)信號量
這些同步對象由一個線程隊列和一個計數(shù)器組成,類似于 Microsoft Win32 信號量。對象創(chuàng)建時,所有 INtime 線程隊列都可以被指定為先入先出 (FIFO) 隊列或優(yōu)先級隊列。如果是 FIFO 隊列,則線程按照等待順序排隊;如果是優(yōu)先級隊列,則線程的排隊方式為優(yōu)先級較高的線程出現(xiàn)在隊頭。
(4)區(qū)域
這些對象是單個單元信號量,帶有防止優(yōu)先級顛倒的保護。它們采用標準的優(yōu)先級提升技術(shù),以避免這種情況。另外,擁有區(qū)域的線程不能刪除,除非它放棄該區(qū)域。這些對象類似于 Win32 臨界區(qū)。
(5)郵箱
這些對象由一個線程隊列和一個消息隊列組成。郵箱可以將兩種類型的消息排隊。消息可以是其他對象的句柄,也可以是最多包含 128 個字節(jié)的數(shù)據(jù)消息。在 Win32 中沒有直接等效的對象。
(6)堆
堆對象類似于 Windows 堆。它為應(yīng)用程序提供動態(tài)內(nèi)存源。
其他內(nèi)存對象
可以為內(nèi)存區(qū)域創(chuàng)建一個句柄,并且隨后將該句柄傳遞給另一個進程以進行映射。然后,可以從這兩個進程中訪問該內(nèi)存。
實時 API 提供參數(shù)檢查和內(nèi)聯(lián)狀態(tài)報告。
(1) Win32 API
盡管 Win32 API 缺少一些用于實時編程的有用功能,INtime 仍然提供了一個 Win32 API,以便方便地從 Windows 應(yīng)用程序傳輸代碼。該實現(xiàn)是 Windows CE Win32 實現(xiàn)的豐富子集,包括 Win32 對象的有用子集 (WaitForMultipleObjects),并帶有擴展以管理中斷和外圍設(shè)備互聯(lián) (PCI) 總線配置。
(2) Windows API
為 Windows 應(yīng)用程序提供了 API,以使其能夠共享在實時內(nèi)核上創(chuàng)建的對象。標準的實時對象和 Win32 對象都是可共享的,以便 Windows 和實時應(yīng)用程序可以同步和共享數(shù)據(jù)。阻塞調(diào)用由實時內(nèi)核上的代理線程池處理。
(3)C 庫與 C++ 支持
INtime 提供了美國國家標準局(與 ANSI 兼容)的 C 庫,以及用標準模板庫 (STL) 提供了對 EC++ (Embedded C++) ANSI 標準的支持。
(4)其他服務(wù)
提供了一個傳輸控制協(xié)議/網(wǎng)際協(xié)議 (TCP/IP) 的協(xié)議組,它派生于 BSD Net3 體系結(jié)構(gòu)。為 Intel、3Com 和 Realtek 接口適配器提供了以太網(wǎng)驅(qū)動程序,并且為與 NE2000 兼容的 ISA 接口提供了以太網(wǎng)驅(qū)動程序。通過串行線路網(wǎng)際協(xié)議 (SLIP) 支持串行鏈路。 以開發(fā)工具包的形式提供了 USB 支持,以便開發(fā) USB 客戶端軟件。為 Universal Host Controller (UHCI)、Open Host Controller (OHCI) 和 Enhanced Host Controller (EHCI) 接口提供了標準驅(qū)動程序。為一系列標準接口和行業(yè)接口提供了其他驅(qū)動程序。
(5)可靠性功能
INtime 的用于增強可靠性的功能包括針對非災(zāi)難性系統(tǒng)錯誤的異常處理以及 Distributed System Manager (DSM) ,它可以監(jiān)控 INtime 和 Windows 進程,并可以在 Windows 操作系統(tǒng)失敗時進行檢測和提供幫助。
(6)異常處理
INtime 內(nèi)核設(shè)計所關(guān)注的主要問題之一是提供處理系統(tǒng)異常錯誤(一般性保護錯誤、頁面錯誤、堆棧錯誤等等)的非災(zāi)難性手段,并且盡量減少對實時內(nèi)核和 Windows 系統(tǒng)的損害。因此,實時系統(tǒng)具有一個默認異常處理程序,該程序會向全局郵箱中寫入一個記錄,詳細描述出錯的線程及其環(huán)境,然后掛起出錯的線程??梢詮?INtime 或 Windows 系統(tǒng)中監(jiān)控該郵箱,并且存在可以從錯誤記錄中提取信息(包括寄存器轉(zhuǎn)儲、堆棧跟蹤和相關(guān)調(diào)試信息)的工具。
(7)Distributed System Manager
Distributed System Manager(“DSM”)是一個協(xié)作性多進程應(yīng)用程序,用于管理整個 INtime 系統(tǒng)。任何進程(Windows 或 INtime)都可以選擇監(jiān)控任何其他參與協(xié)作的進程,或者被其他參與協(xié)作的進程監(jiān)控。如果被監(jiān)控的進程被刪除,或者到該進程的通訊途徑被中斷,或者 Windows 系統(tǒng)或 INtime 系統(tǒng)被破壞,都會向監(jiān)控進程發(fā)送通知消息??梢允褂迷摲?wù)來提供系統(tǒng)級完整性。
(8)Windows 停止處理
DSM 的一個重要優(yōu)點是它能夠檢測到 Windows 平臺何時失敗。如果出現(xiàn)這種情況,INtime 內(nèi)核中的 DSM 軟件將通知所有參與的進程 Windows 已經(jīng)失敗,并且還將負責(zé)調(diào)度 Windows 的線程掛起。此時,INtime 內(nèi)核可以繼續(xù)無限期地執(zhí)行其進程,而這些進程可以選擇在此情況下采取特殊操作,例如使外圍設(shè)備進入已知狀態(tài)。在稍后某個時刻,實時進程可以選擇恢復(fù) Windows 線程,并使 Windows 可以繼續(xù)關(guān)閉和重置計算機。
(9)可擴展性功能
INtime 操作系統(tǒng)能夠支持復(fù)雜的大型應(yīng)用程序。在上述共享體系結(jié)構(gòu)中,已經(jīng)發(fā)現(xiàn)典型的平臺能夠允許 INtime 內(nèi)核消耗 CPU 帶寬的 50% 到 60%,然后 Windows 圖形用戶界面 (GUI) 和其他服務(wù)才會開始受到不利影響。INtime 中獨立內(nèi)核的優(yōu)勢是可以將它重定位到另一 CPU 或另一平臺,從而使應(yīng)用程序能夠隨著其對平臺的需求的增加而擴大規(guī)模。接口模式將從虛擬機體系結(jié)構(gòu)更改為共享內(nèi)存,然后又更改為物理通訊鏈路(如以太網(wǎng)或串行線路),但 Windows 和實時應(yīng)用程序之間的軟件接口不會改變。這樣,無論選擇了哪種硬件體系結(jié)構(gòu),都可以使用相同的二進制文件。
3 小結(jié)
TenAsys Corporation 的 INtime 軟件被設(shè)計為不僅能夠向 Windows 平臺添加實時功能,而且其添加這些功能的方式能夠為實時應(yīng)用程序提供可靠且可伸縮的平臺。如果將該解決方案與 Windows XP Embedded 配合使用,則能夠為您的嵌入式設(shè)備提供強大的、可擴展的、確定性的操作系統(tǒng)。