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