通用操作系統(tǒng)(包括 Linux、Windows 和各種類型的 Unix 系統(tǒng))通常都缺少我們目前介紹的實(shí)時(shí)機(jī)制。但供應(yīng)商已開(kāi)發(fā)出許多實(shí)時(shí)擴(kuò)展組件和補(bǔ)丁,試圖填補(bǔ)這一空白。例如,有一種雙內(nèi)核方法,其中的通用操作系統(tǒng)能以任務(wù)的形式在專用實(shí)時(shí)內(nèi)核上運(yùn)行(參見(jiàn)圖 4)。任何需要確定性調(diào)度的任務(wù)都會(huì)在該內(nèi)核中運(yùn)行,但其優(yōu)先級(jí)要高于通用操作系統(tǒng)的優(yōu)先級(jí)。因此,只要這些任務(wù)需要運(yùn)行,它們就能搶占 Linux,而且只有在其工作完成后,才會(huì)向 Linux 釋放 CPU。
遺憾的是,實(shí)時(shí)內(nèi)核中運(yùn)行的任務(wù)只能有限地利用通用操作系統(tǒng)中現(xiàn)有的系統(tǒng)服務(wù),如文件系統(tǒng)、網(wǎng)絡(luò)服務(wù)等。
實(shí)際上,如果實(shí)時(shí)任務(wù)向通用操作系統(tǒng)請(qǐng)求任何服務(wù),它都會(huì)面臨同樣的搶占問(wèn)題,這會(huì)阻止通用操作系統(tǒng)以確定方式運(yùn)行。因此,必須針對(duì)實(shí)時(shí)內(nèi)核創(chuàng)建新的驅(qū)動(dòng)程序和系統(tǒng)服務(wù),即使通用操作系統(tǒng)中已存在相同的服務(wù)。但是,多數(shù)通用操作系統(tǒng)為正常的非實(shí)時(shí)進(jìn)程提供的受內(nèi)存管理單元 (MMU) 保護(hù)的可靠環(huán)境卻無(wú)法惠及在實(shí)時(shí)內(nèi)核中運(yùn)行的任務(wù)。相反,它們會(huì)在無(wú)保護(hù)的內(nèi)核空間運(yùn)行。因此,任何含有公共編碼錯(cuò)誤(如損壞的 C 指針)的實(shí)時(shí)任務(wù)都會(huì)輕易導(dǎo)致內(nèi)核出現(xiàn)嚴(yán)重故障。這的確是一個(gè)問(wèn)題,因?yàn)樾枰獙?shí)時(shí)功能的大部分系統(tǒng)同樣需要極高的可靠性。
雙內(nèi)核方法的不同實(shí)現(xiàn)使用不同的應(yīng)用程序接口 (API) 使問(wèn)題進(jìn)一步復(fù)雜。在多數(shù)情況下,為通用操作系統(tǒng)編寫(xiě)的服務(wù)無(wú)法輕易移植到實(shí)時(shí)內(nèi)核中,而且針對(duì)一個(gè)供應(yīng)商的實(shí)時(shí)擴(kuò)展組件編寫(xiě)的任務(wù)未必能在另一個(gè)供應(yīng)商的實(shí)時(shí)擴(kuò)展組件上運(yùn)行。

?
圖 4——在常見(jiàn)的雙內(nèi)核實(shí)現(xiàn)中,通用操作系統(tǒng)會(huì)作為優(yōu)先級(jí)最低的任務(wù)在單獨(dú)的實(shí)時(shí)內(nèi)核中運(yùn)行。
這種解決方案指出了使通用操作系統(tǒng)支持實(shí)時(shí)運(yùn)行的實(shí)際困難和復(fù)雜性。但這并非是關(guān)于實(shí)時(shí)操作系統(tǒng)和通用操作系統(tǒng)孰優(yōu)孰劣的問(wèn)題。通用操作系統(tǒng)(如 Linux、Windows 和各種 Unix 系統(tǒng))都能以臺(tái)式機(jī)或服務(wù)器操作系統(tǒng)的形式正常運(yùn)行。但是,當(dāng)進(jìn)入不符合其設(shè)計(jì)用途的確定運(yùn)行環(huán)境中(如車載遠(yuǎn)程信息處理裝置、醫(yī)療器械、實(shí)時(shí)控制系統(tǒng)和連續(xù)媒體應(yīng)用)時(shí),它們就會(huì)凸顯不足。 7
令調(diào)試和定制更輕松的源代碼
使用通用操作系統(tǒng)仍有一些好處,例如在 Linux 的開(kāi)源模式下支持廣泛使用的應(yīng)用程序接口 (API)。利用開(kāi)源模式,軟件開(kāi)發(fā)人員能針對(duì)應(yīng)用程序的具體需求定制操作系統(tǒng)組件,從而能節(jié)約大量用于故障排解的時(shí)間。為保持這些優(yōu)勢(shì),實(shí)時(shí)操作系統(tǒng)的供應(yīng)商應(yīng)根據(jù)友好的商業(yè)授權(quán)許可條款,確保其源代碼易于訪問(wèn)。
實(shí)時(shí)操作系統(tǒng)的架構(gòu)也發(fā)揮了重要作用。例如,基于微內(nèi)核設(shè)計(jì)的實(shí)時(shí)操作系統(tǒng)能從根本上簡(jiǎn)化操作系統(tǒng)的定制過(guò)程。在微內(nèi)核實(shí)時(shí)操作系統(tǒng)中,只有少數(shù)核心基本對(duì)象(如信號(hào)、計(jì)時(shí)器、調(diào)度程序)才會(huì)存在于內(nèi)核中。所有其他組件(驅(qū)動(dòng)程序、文件系統(tǒng)、協(xié)議棧、應(yīng)用程序)都會(huì)以單獨(dú)的受內(nèi)存保護(hù)的進(jìn)程在內(nèi)核外部運(yùn)行;參見(jiàn)圖 5。因此,開(kāi)發(fā)定制的驅(qū)動(dòng)程序和其他與應(yīng)用程序有關(guān)的操作系統(tǒng)擴(kuò)展組件無(wú)需專門的內(nèi)核調(diào)試程序或內(nèi)核專家。實(shí)際上,作為用戶空間程序,開(kāi)發(fā)這種操作系統(tǒng)擴(kuò)展組件和開(kāi)發(fā)標(biāo)準(zhǔn)應(yīng)用程序一樣容易,因?yàn)殚_(kāi)發(fā)人員都能使用標(biāo)準(zhǔn)、源代碼級(jí)工具對(duì)它們進(jìn)行調(diào)試。
?
圖 5——在微內(nèi)核實(shí)時(shí)操作系統(tǒng)中,系統(tǒng)服務(wù)作為標(biāo)準(zhǔn)的用戶空間進(jìn)程運(yùn)行,因而簡(jiǎn)化了操作系統(tǒng)的定制任務(wù)。
例如,如果設(shè)備驅(qū)動(dòng)程序試圖訪問(wèn)其進(jìn)程空間之外的內(nèi)存,操作系統(tǒng)就能識(shí)別相關(guān)進(jìn)程,指出故障位置并創(chuàng)建可使用源代碼級(jí)調(diào)試工具查看的進(jìn)程轉(zhuǎn)儲(chǔ)文件。轉(zhuǎn)儲(chǔ)文件可包括調(diào)試程序確定導(dǎo)致故障的源代碼行所需的所有信息以及診斷信息(如數(shù)據(jù)項(xiàng)的內(nèi)容和函數(shù)調(diào)用的歷史)。 8
這種架構(gòu)還提供了絕佳的故障隔離和恢復(fù)功能:如果驅(qū)動(dòng)程序、協(xié)議?;蚱渌到y(tǒng)服務(wù)出現(xiàn)故障,它可在不影響其他服務(wù)或損壞操作系統(tǒng)內(nèi)核的情況下完成這種操作。實(shí)際上,“軟件監(jiān)視程序”會(huì)持續(xù)監(jiān)測(cè)此類事件,并能以動(dòng)態(tài)方式重啟出現(xiàn)故障的服務(wù),無(wú)需重啟整個(gè)系統(tǒng)或以任何方式干擾用戶。同樣,驅(qū)動(dòng)程序和其他服務(wù)都能以動(dòng)態(tài)方式停止、啟動(dòng)或升級(jí),無(wú)需關(guān)閉系統(tǒng)。
絕不可小看這些優(yōu)勢(shì)——因?yàn)槠茐膶?shí)時(shí)性能的最大威脅就是不定期的系統(tǒng)重啟!甚至軟件更新中包含的以可控制的方式進(jìn)行的預(yù)定重啟都會(huì)干擾系統(tǒng)運(yùn)行。為保證一直滿足最后期限的要求,軟件開(kāi)發(fā)人員必須使用即使在出現(xiàn)軟件故障或進(jìn)行服務(wù)升級(jí)時(shí),也能保持連續(xù)可用的操作系統(tǒng)。
戰(zhàn)略決策
實(shí)時(shí)操作系統(tǒng)能使復(fù)雜的應(yīng)用程序變得可預(yù)測(cè)而且可靠;實(shí)際上,實(shí)時(shí)操作系統(tǒng)實(shí)現(xiàn)的精確時(shí)間控制,就是通用操作系統(tǒng)無(wú)法提供的可靠功能。(如果基于通用操作系統(tǒng)的系統(tǒng)由于計(jì)時(shí)錯(cuò)誤而無(wú)法正常運(yùn)行,我們可以合理認(rèn)為該系統(tǒng)不可靠。)選擇正確的實(shí)時(shí)操作系統(tǒng)本身仍然是一項(xiàng)復(fù)雜的任務(wù)。實(shí)時(shí)操作系統(tǒng)的底層架構(gòu)是重要標(biāo)準(zhǔn),而其他因素也不例外。具體包括:
? 調(diào)度算法的靈活選擇——實(shí)時(shí)操作系統(tǒng)支持調(diào)度算法選擇(先入先出 [FIFO] 調(diào)度、循環(huán)調(diào)度、偶發(fā)調(diào)度等)嗎?您能根據(jù)每個(gè)線程分配這些算法嗎?或者實(shí)時(shí)操作系統(tǒng)要求您針對(duì)系統(tǒng)中的所有線程分配一種算法嗎?
? 時(shí)間分區(qū)——實(shí)時(shí)操作系統(tǒng)支持能為進(jìn)程提供有保證的 CPU 周期預(yù)算的時(shí)間分區(qū)嗎?這種保證簡(jiǎn)化了對(duì)多個(gè)開(kāi)發(fā)團(tuán)隊(duì)或供應(yīng)商的子系統(tǒng)進(jìn)行集成的工作。它們還能確保關(guān)鍵任務(wù)在系統(tǒng)遭到拒絕服務(wù) (DoS) 攻擊和其他惡意攻擊時(shí),保持可用并滿足其最后期限的要求。
? 支持多核處理器——向多核處理器遷移的功能已成為各種高性能設(shè)計(jì)的基本要求。實(shí)時(shí)操作系統(tǒng)是否支持多重處理模式(對(duì)稱多重處理、不對(duì)稱多重處理、混合多重處理)的選擇,并幫助您最大限度地利用多核硬件?允許您診斷和優(yōu)化多核系統(tǒng)性能的系統(tǒng)跟蹤工具支持實(shí)時(shí)操作系統(tǒng)嗎?如果沒(méi)有能顯示資源競(jìng)爭(zhēng)、線程的過(guò)度遷移和其他多核設(shè)計(jì)常見(jiàn)問(wèn)題的工具,那么對(duì)多核系統(tǒng)進(jìn)行優(yōu)化就會(huì)變得異常麻煩和費(fèi)時(shí)。
? 遠(yuǎn)程診斷工具——由于許多嵌入式系統(tǒng)都不允許有故障時(shí)間,因此實(shí)時(shí)操作系統(tǒng)供應(yīng)商應(yīng)提供能在不中斷系統(tǒng)服務(wù)的情況下分析系統(tǒng)運(yùn)行的診斷工具。尋找能提供運(yùn)行分析工具(用于系統(tǒng)剖析、應(yīng)用程序剖析和內(nèi)存分析的)的供應(yīng)商。
? 開(kāi)放的開(kāi)發(fā)平臺(tái)——實(shí)時(shí)操作系統(tǒng)供應(yīng)商能否提供基于開(kāi)放平臺(tái)(如 Eclipse)的開(kāi)發(fā)環(huán)境,允許您“插入”您最喜歡的第三方工具以便進(jìn)行建模、版本控制等工作?或者,開(kāi)發(fā)環(huán)境是基于專有技術(shù)的嗎?
? 圖形用戶界面——實(shí)時(shí)操作系統(tǒng)使用基元圖形庫(kù)嗎?或者它提供了高級(jí)圖形處理功能(如多層界面、基于 Flash 的人機(jī)界面、多目標(biāo)顯示、3D 加速渲染和真正的窗口系統(tǒng))嗎?您能輕松地自定義圖形用戶界面的視覺(jué)效果嗎?圖形用戶界面能同時(shí)顯示和輸入多種語(yǔ)言(中文、朝鮮語(yǔ)、日語(yǔ)、英語(yǔ)、俄語(yǔ)等)嗎?2D(如 Flash)和 3D(如 OpenGL ES)應(yīng)用程序能輕松共享同一屏幕嗎? 9
? 標(biāo)準(zhǔn)應(yīng)用程序接口——實(shí)時(shí)操作系統(tǒng)限制您使用專有應(yīng)用程序接口嗎?或者它提供了對(duì)標(biāo)準(zhǔn)應(yīng)用程序接口(如 POSIX 和 OpenGL ES)的認(rèn)證支持,使各種運(yùn)行環(huán)境之間的代碼移植變得更容易?實(shí)時(shí)操作系統(tǒng)還提供對(duì)應(yīng)用程序接口的綜合支持嗎?還是只支持一小部分已定義接口的子集?
? 源代碼——實(shí)時(shí)操作系統(tǒng)供應(yīng)商允許您輕松訪問(wèn)源代碼以簡(jiǎn)化調(diào)試過(guò)程,并幫助您根據(jù)具體需求定制實(shí)時(shí)操作系統(tǒng)服務(wù)嗎?
? 面向數(shù)字媒體的中間件——對(duì)數(shù)字媒體的靈活支持已成為各種嵌入式系統(tǒng)(如車載收音機(jī)、醫(yī)療設(shè)備、工業(yè)控制系統(tǒng)、媒體服務(wù)器以及消費(fèi)電子產(chǎn)品)的設(shè)計(jì)要求。系統(tǒng)可能需要處理多種媒體資源(如 USB 閃存、MP3 播放器、網(wǎng)絡(luò)流媒體、藍(lán)牙電話等),分辨多種數(shù)據(jù)格式(如 MP3、WMA、AAC、MPEG-2、MPEG-4 等)并支持各種數(shù)字版權(quán)管理 (DRM) 方案。通過(guò)為數(shù)字媒體提供設(shè)計(jì)精密的中間件,實(shí)時(shí)操作系統(tǒng)供應(yīng)商能避免連接多媒體資源、組織數(shù)據(jù)以及初始化適當(dāng)?shù)臄?shù)據(jù)處理路徑所需的大量軟件工作。另外,設(shè)計(jì)完善的中間件解決方案還能靈活支持新的數(shù)據(jù)源(如下一代 iPod),無(wú)需修改用戶界面或其他軟件組件。
選擇實(shí)時(shí)操作系統(tǒng)是項(xiàng)目團(tuán)隊(duì)的戰(zhàn)略性決策。如果實(shí)時(shí)系統(tǒng)供應(yīng)商針對(duì)以上問(wèn)題給出了清楚的答案,那么您離現(xiàn)在和將來(lái)選擇到完全適用的實(shí)時(shí)操作系統(tǒng)又近了一步。
電子發(fā)燒友App
















評(píng)論