|
關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容
素材來(lái)源 | 網(wǎng)絡(luò)
RTOS在嵌入式開發(fā)中占有重要地位,那么,到底什么時(shí)候才需要用到RTOS?
■ 究竟何時(shí)需要實(shí)時(shí)操作系統(tǒng)?大多數(shù)嵌入式項(xiàng)目是否仍需要實(shí)時(shí)操作系統(tǒng)?考慮到當(dāng)今高性能處理器的速度以及適用于Linux,Windows和其他通用操作系統(tǒng)(GPOS)的實(shí)時(shí)補(bǔ)丁的可用性,這是一個(gè)很好的問(wèn)題。
答案在于嵌入式設(shè)備的本質(zhì)。這些設(shè)備通常以數(shù)千,甚至數(shù)百萬(wàn)套這種規(guī)模下生產(chǎn),即使每套硬件成本降低1美元,也能為制造商節(jié)省一筆小財(cái)富。換言之,這些設(shè)備無(wú)法負(fù)擔(dān)數(shù)百萬(wàn)赫茲處理器的成本(更不用說(shuō)散熱了)。
例如,在汽車遠(yuǎn)程信息處理市場(chǎng),典型的32位處理器的運(yùn)行頻率約為600兆赫,遠(yuǎn)低于臺(tái)式機(jī)和服務(wù)器中常見的處理器。在這樣的環(huán)境中,設(shè)計(jì)用于從低端硬件中提取極其快速、可預(yù)測(cè)的響應(yīng)時(shí)間的實(shí)時(shí)操作系統(tǒng)有巨大的經(jīng)濟(jì)優(yōu)勢(shì)。
除了節(jié)省成本外,實(shí)時(shí)操作系統(tǒng)提供的服務(wù)使許多計(jì)算問(wèn)題更容易解決,特別是當(dāng)多個(gè)活動(dòng)競(jìng)爭(zhēng)一個(gè)系統(tǒng)的資源時(shí)。例如,考慮一個(gè)用戶期望(或需要)立即響應(yīng)輸入的系統(tǒng)。使用實(shí)時(shí)操作系統(tǒng),開發(fā)人員可以保證由用戶發(fā)起的操作將優(yōu)先于其他系統(tǒng)活動(dòng)執(zhí)行,除非必須首先執(zhí)行更重要的活動(dòng)(例如,有助于保護(hù)用戶安全的操作)。
還要考慮一個(gè)必須滿足服務(wù)質(zhì)量(QoS)要求的系統(tǒng),例如顯示實(shí)時(shí)視頻的設(shè)備。如果設(shè)備的內(nèi)容交付的任何部分都依賴于軟件,那么它會(huì)以用戶認(rèn)為不可接受的速度體驗(yàn)掉幀,設(shè)備是不可靠的。然而,通過(guò)實(shí)時(shí)操作系統(tǒng),開發(fā)人員可以精確地控制軟件進(jìn)程的執(zhí)行順序,并確保以適當(dāng)和一致的速率進(jìn)行回放。
■ 實(shí)時(shí)操作系統(tǒng)不公平
在嵌入式行業(yè)中,對(duì)實(shí)時(shí)“硬”時(shí)間的需求仍然很普遍。問(wèn)題是:實(shí)時(shí)操作系統(tǒng)有什么是GPOS沒(méi)有的?而且,對(duì)于某些GPOS來(lái)說(shuō),現(xiàn)在的實(shí)時(shí)擴(kuò)展有多有用?他們能提供一個(gè)合理的實(shí)時(shí)操作系統(tǒng)性能嗎?
讓我們從任務(wù)調(diào)度開始。在GPOS中,調(diào)度程序通常使用“公平”策略將線程和進(jìn)程分派到CPU。這樣的策略可以實(shí)現(xiàn)桌面和服務(wù)器應(yīng)用程序所需的高整體吞吐量,但不能保證高優(yōu)先級(jí)、時(shí)間緊迫的線程優(yōu)先于低優(yōu)先級(jí)的線程執(zhí)行。
例如,GPOS可能會(huì)降低分配給高優(yōu)先級(jí)線程的優(yōu)先級(jí),或者為了保證系統(tǒng)中其他線程的公平性而動(dòng)態(tài)調(diào)整線程的優(yōu)先級(jí)。因此,高優(yōu)先級(jí)線程可能被低優(yōu)先級(jí)線程搶占。此外大多數(shù)GPOS具有無(wú)界的調(diào)度延遲:系統(tǒng)中的線程越多,GPOS調(diào)度一個(gè)執(zhí)行線程所需的時(shí)間就越長(zhǎng),這些因素中的任何一個(gè)都可能導(dǎo)致高優(yōu)先級(jí)線程錯(cuò)過(guò)最后期限,即使是在高速CPU上。
此外,高優(yōu)先級(jí)線程可以不間斷地運(yùn)行,直到它完成它需要做的事情,當(dāng)然,除非它被一個(gè)更高優(yōu)先級(jí)的線程搶占。這種方法被稱為基于優(yōu)先級(jí)的搶占式調(diào)度,允許高優(yōu)先級(jí)線程滿足其最后期限,即使許多其他線程正在爭(zhēng)奪CPU時(shí)間。
如過(guò)需要學(xué)習(xí)更多操作系統(tǒng)開發(fā)實(shí)踐技術(shù),可參加牛喀學(xué)城的培訓(xùn)課程,本課程由國(guó)際頂級(jí)設(shè)備商資深RTOS開發(fā)專家打造,系統(tǒng)講授Kernel,BSP,IDE等應(yīng)用實(shí)踐技術(shù),并輔助以實(shí)際開發(fā)板進(jìn)行案例實(shí)踐操作。點(diǎn)擊海報(bào)了解詳情。
■ 搶占式內(nèi)核
在大多數(shù)GPOS中,os內(nèi)核是不可搶占的。因此,高優(yōu)先級(jí)用戶線程永遠(yuǎn)不能搶占內(nèi)核調(diào)用,而是必須等待整個(gè)調(diào)用完成—即使調(diào)用是由系統(tǒng)中優(yōu)先級(jí)最低的進(jìn)程調(diào)用的。此外,當(dāng)驅(qū)動(dòng)程序或其他系統(tǒng)服務(wù)(通常在內(nèi)核調(diào)用中執(zhí)行)代表客戶端線程執(zhí)行exe剪切時(shí),所有優(yōu)先級(jí)信息通常都會(huì)丟失。這種行為會(huì)導(dǎo)致不可預(yù)知的延遲,并阻止關(guān)鍵活動(dòng)按時(shí)完成。
另一方面,在實(shí)時(shí)操作系統(tǒng)中,內(nèi)核操作是可搶占的。與在GPOS中一樣,在時(shí)間窗口中可能不會(huì)發(fā)生搶占,在設(shè)計(jì)良好的實(shí)時(shí)操作系統(tǒng)中,這些窗口非常短,通常是數(shù)百納秒的順序。此外,實(shí)時(shí)操作系統(tǒng)對(duì)搶占延遲和中斷禁用的時(shí)間設(shè)置了一個(gè)上限;這個(gè)上限允許開發(fā)人員確定最壞情況下的延遲。
為了實(shí)現(xiàn)一致的可預(yù)測(cè)性和關(guān)鍵活動(dòng)的及時(shí)完成這一目標(biāo),實(shí)時(shí)操作系統(tǒng)內(nèi)核必須盡可能簡(jiǎn)單優(yōu)雅。實(shí)現(xiàn)這種簡(jiǎn)單性的最佳方法是設(shè)計(jì)一個(gè)內(nèi)核,該內(nèi)核只包含具有短執(zhí)行路徑的服務(wù)。通過(guò)從內(nèi)核中排除工作密集型操作(例如進(jìn)程加載)并將其分配給外部進(jìn)程或線程,實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)器可以幫助確保通過(guò)內(nèi)核的最長(zhǎng)不可搶占代碼路徑上存在上限。
在一些GPOS中,內(nèi)核增加了一定程度的搶占性。然而,不可能發(fā)生搶占的時(shí)間間隔仍然比典型實(shí)時(shí)操作系統(tǒng)中的時(shí)間間隔長(zhǎng)得多;任何此類搶占時(shí)間間隔的長(zhǎng)度將取決于GPOS內(nèi)核中任何模塊(例如,網(wǎng)絡(luò))的最長(zhǎng)關(guān)鍵部分。此外,一個(gè)可搶占的GPOS內(nèi)核不會(huì)處理其他可能造成無(wú)限延遲的條件,例如,當(dāng)客戶端調(diào)用驅(qū)動(dòng)程序或其他系統(tǒng)服務(wù)時(shí)發(fā)生的優(yōu)先級(jí)信息丟失。
■ 避免優(yōu)先級(jí)反轉(zhuǎn)
在GPOS中,甚至在實(shí)時(shí)操作系統(tǒng)中,低優(yōu)先級(jí)線程可能無(wú)意中阻止高優(yōu)先級(jí)線程訪問(wèn)cpu,這種情況稱為優(yōu)先級(jí)反轉(zhuǎn)。當(dāng)發(fā)生無(wú)限優(yōu)先級(jí)反轉(zhuǎn)時(shí),可能會(huì)錯(cuò)過(guò)關(guān)鍵的最后期限,從而導(dǎo)致從異常系統(tǒng)行為到徹底失敗的結(jié)果。不幸的是,在系統(tǒng)設(shè)計(jì)過(guò)程中,優(yōu)先級(jí)反轉(zhuǎn)常常被忽略。優(yōu)先級(jí)反轉(zhuǎn)的例子很多,其中包括1997年7月火星探險(xiǎn)者項(xiàng)目。
一般來(lái)說(shuō),當(dāng)兩個(gè)不同優(yōu)先級(jí)的任務(wù)共享一個(gè)資源,而高優(yōu)先級(jí)的任務(wù)無(wú)法從低優(yōu)先級(jí)的任務(wù)獲得資源時(shí),就會(huì)發(fā)生優(yōu)先級(jí)反轉(zhuǎn)。為了防止這種情況超過(guò)有限的時(shí)間間隔,實(shí)時(shí)操作系統(tǒng)可以提供GPOS中不可用的機(jī)制選擇,包括優(yōu)先級(jí)繼承和優(yōu)先級(jí)上限模擬。我們不可能公正地對(duì)待這兩種機(jī)制,所以讓我們關(guān)注一個(gè)優(yōu)先級(jí)繼承的例子。.
首先,我們必須考慮任務(wù)同步如何導(dǎo)致阻塞,以及阻塞如何反過(guò)來(lái)導(dǎo)致優(yōu)先級(jí)反轉(zhuǎn)。假設(shè)兩個(gè)任務(wù)正在運(yùn)行,任務(wù)1和任務(wù)2,并且任務(wù)1具有更高的優(yōu)先級(jí)。如果任務(wù)1已準(zhǔn)備好執(zhí)行,但必須等待任務(wù)2完成活動(dòng),則會(huì)阻塞。此阻塞可能是由于同步造成的;例如,任務(wù)1和任務(wù)2共享由鎖或信號(hào)量控制的資源,而任務(wù)1正在等待任務(wù)2解鎖該資源。或者,可能是因?yàn)槿蝿?wù)1正在請(qǐng)求任務(wù)2當(dāng)前使用的服務(wù)。
阻塞允許任務(wù)2運(yùn)行,直到發(fā)生任務(wù)1正在等待的條件(例如,任務(wù)2解鎖兩個(gè)任務(wù)共享的資源)。此時(shí),任務(wù)1開始執(zhí)行。任務(wù)1必須等待的總時(shí)間稱為阻塞因子。如果任務(wù)1要滿足其任何時(shí)間限制,則此阻塞因子不能隨任何參數(shù)(例如線程數(shù)或系統(tǒng)輸入)而變化。換句話說(shuō),阻塞因子必須是有界的。
現(xiàn)在讓我們介紹第三個(gè)任務(wù),任務(wù) 3,它的優(yōu)先級(jí)高于任務(wù) 2,但低于任務(wù) 1(參見圖1)。如果任務(wù)3在任務(wù)2執(zhí)行時(shí)準(zhǔn)備好運(yùn)行,則它將搶占任務(wù)2,并且任務(wù)2將無(wú)法再次運(yùn)行,直到任務(wù)3阻塞或完成。當(dāng)然,這個(gè)新任務(wù)會(huì)增加任務(wù)1的阻塞因子;也就是說(shuō),它會(huì)進(jìn)一步延遲任務(wù)1的執(zhí)行。搶占引入的總延遲是一個(gè)優(yōu)先級(jí)反轉(zhuǎn)。
x1e3520wc3x6402838411.png (27.66 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
x1e3520wc3x6402838411.png
4 天前 上傳
圖1 任務(wù)1正在等待任務(wù)2完成一個(gè)活動(dòng),這時(shí)任務(wù)3搶占了任務(wù)2。此新任務(wù)進(jìn)一步延遲任務(wù)1的執(zhí)行實(shí)際上,多個(gè)任務(wù)可以通過(guò)這種方式搶占任務(wù)2,從而產(chǎn)生一種稱為鏈阻塞的效果在這種情況下,任務(wù)2可能會(huì)被無(wú)限期搶占,從而產(chǎn)生無(wú)限的優(yōu)先級(jí)反轉(zhuǎn),并導(dǎo)致任務(wù)1無(wú)法滿足其任何最后期限。這就是優(yōu)先級(jí)繼承的來(lái)源。如果我們返回到我們的場(chǎng)景,并使任務(wù)2在同步期間以任務(wù)1的優(yōu)先級(jí)運(yùn)行,那么任務(wù)3將無(wú)法搶占任務(wù)2,從而避免產(chǎn)生優(yōu)先級(jí)反轉(zhuǎn)(參見圖2)。
ltlojio3r156402838511.png (28.08 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
ltlojio3r156402838511.png
4 天前 上傳
圖2 任務(wù)2繼承任務(wù)1的較高優(yōu)先級(jí),從而防止任務(wù)3搶占任務(wù)2。任務(wù)3不再延遲任務(wù)1的執(zhí)行。
■ 分區(qū)調(diào)度器
對(duì)于許多系統(tǒng),保證資源可用性是至關(guān)重要的。如果一個(gè)關(guān)鍵的子系統(tǒng)被剝奪了,比如說(shuō),CPU周期,那么這個(gè)子系統(tǒng)提供的服務(wù)對(duì)于用戶來(lái)說(shuō)就變得不可用了。例如,在拒絕服務(wù)(DoS)攻擊中,惡意用戶可以用需要高優(yōu)先級(jí)進(jìn)程處理的請(qǐng)求轟炸系統(tǒng)。這個(gè)進(jìn)程可能會(huì)使CPU超載,使其他進(jìn)程的CPU周期中斷,從而使系統(tǒng)對(duì)用戶不可用。
安全漏洞并不是進(jìn)程饑餓的唯一原因。在許多情況下,向系統(tǒng)添加軟件功能會(huì)將系統(tǒng)推向“崩潰的邊緣”,并使現(xiàn)有的應(yīng)用程序占用大量CPU時(shí)間。及時(shí)運(yùn)行的應(yīng)用程序或服務(wù)不再按預(yù)期或要求作出響應(yīng)。從歷史上看,解決這個(gè)問(wèn)題的唯一辦法要么是改造硬件,要么是重新編碼(或重新設(shè)計(jì))軟件——兩者都是不受歡迎的選擇。為了解決這些問(wèn)題,系統(tǒng)設(shè)計(jì)人員需要一個(gè)分區(qū)方案,通過(guò)硬件或軟件強(qiáng)制執(zhí)行CPU運(yùn)算,以防止進(jìn)程或線程獨(dú)占其他進(jìn)程或線程所需的CPU周期。由于實(shí)時(shí)操作系統(tǒng)已經(jīng)提供了對(duì)CPU、內(nèi)存和其他計(jì)算資源的集中訪問(wèn),所以實(shí)時(shí)操作系統(tǒng)是執(zhí)行CPU分區(qū)運(yùn)算的最佳選擇。
有些實(shí)時(shí)操作系統(tǒng)提供一個(gè)固定的分區(qū)調(diào)度器。使用此調(diào)度器,系統(tǒng)設(shè)計(jì)人員可以將任務(wù)劃分為組或分區(qū),并為每個(gè)分區(qū)分配一定百分比的CPU時(shí)間。使用這種方法,任何給定分區(qū)中的任務(wù)消耗的CPU時(shí)間都不會(huì)超過(guò)分區(qū)靜態(tài)定義的百分比。例如,假設(shè)一個(gè)分區(qū)分配了30%的CPU。如果該分區(qū)中的進(jìn)程隨后成為拒絕服務(wù)攻擊的目標(biāo),那么它消耗的CPU時(shí)間將不超過(guò)30%。這個(gè)分配的限制允許其他分區(qū)保持其可用性;例如,它可以確保用戶界面(例如遠(yuǎn)程終端)保持可訪問(wèn)性。因此,操作員可以訪問(wèn)系統(tǒng)并解決問(wèn)題,而不必按下復(fù)位開關(guān)。
然而,這種方法有一個(gè)問(wèn)題。因?yàn)檎{(diào)度算法是固定的,所以一個(gè)分區(qū)永遠(yuǎn)不能使用分配給其他分區(qū)的CPU周期,即使這些分區(qū)沒(méi)有使用它們分配的周期。這種方法會(huì)浪費(fèi)CPU周期,并阻止系統(tǒng)處理峰值需求。因此,系統(tǒng)設(shè)計(jì)者必須使用更昂貴的處理器,容忍更慢的系統(tǒng),或者限制系統(tǒng)能夠支持的功能數(shù)量。
■ 自適應(yīng)分區(qū)
另一種分區(qū)方案稱為自適應(yīng)分區(qū),它通過(guò)提供更動(dòng)態(tài)的調(diào)度算法來(lái)解決靜態(tài)分區(qū)的缺點(diǎn)。與靜態(tài)分區(qū)一樣,自適應(yīng)分區(qū)允許系統(tǒng)設(shè)計(jì)人員為一個(gè)進(jìn)程或一組進(jìn)程保留CPU周期。因此,設(shè)計(jì)人員可以保證一個(gè)子系統(tǒng)或分區(qū)上的負(fù)載不會(huì)影響其他子系統(tǒng)的可用性。但是,與靜態(tài)方法不同,自適應(yīng)分區(qū)可以動(dòng)態(tài)地將CPU周期從不繁忙的分區(qū)重新分配給可以從額外處理時(shí)間分區(qū)預(yù)算中受益的分區(qū),只有在CPU完全加載時(shí)才強(qiáng)制執(zhí)行。因此,系統(tǒng)可以處理峰值調(diào)度應(yīng)用程序不需要改變它們的調(diào)度行為。此外,設(shè)計(jì)人員可以動(dòng)態(tài)地重新配置分區(qū),以優(yōu)化系統(tǒng)的性能。參加牛喀學(xué)城汽車操作系統(tǒng)技術(shù)培訓(xùn),學(xué)習(xí)更多實(shí)用技術(shù)。掃描文末二維碼報(bào)名。■ “雙重”內(nèi)核包括Linux、Windows和各種風(fēng)格的unix在內(nèi)的GPOS通常缺乏迄今為止討論的實(shí)時(shí)機(jī)制。為了填補(bǔ)這個(gè)空白,GPOS供應(yīng)商開發(fā)了大量的實(shí)時(shí)擴(kuò)展和補(bǔ)丁。例如,有一種雙內(nèi)核方法,在這種方法中,GPOS作為一個(gè)任務(wù)運(yùn)行在一個(gè)專用的實(shí)時(shí)內(nèi)核之上(參見圖4)。因此,這些任務(wù)可以在GPOS需要執(zhí)行時(shí)搶占它們,并且僅在GPOS完成工作時(shí)才將CPU交給它們。
不幸的是,在實(shí)時(shí)內(nèi)核中運(yùn)行的任務(wù)只能有限地使用GPOS中的現(xiàn)有系統(tǒng)服務(wù)——文件系統(tǒng)、網(wǎng)絡(luò)等等。事實(shí)上,如果某個(gè)實(shí)時(shí)任務(wù)向GPOS請(qǐng)求任何服務(wù),那么該任務(wù)將受到相同的優(yōu)先處理要求并實(shí)現(xiàn)100%的利用率,同時(shí)享受資源保障的好處。同樣重要的是,自適應(yīng)分區(qū)可以覆蓋在現(xiàn)有系統(tǒng)之上,而無(wú)需重新設(shè)計(jì)或修改代碼。系統(tǒng)設(shè)計(jì)人員可以簡(jiǎn)單地在分區(qū)中啟動(dòng)現(xiàn)有的基于POSIX的應(yīng)用程序,而實(shí)時(shí)操作系統(tǒng)調(diào)度器可以確保每個(gè)分區(qū)都收到分配的預(yù)算。在每個(gè)分區(qū)中,每個(gè)任務(wù)都根據(jù)基于優(yōu)先級(jí)的搶占規(guī)則進(jìn)行調(diào)度。
gex3bhfqezz6402838611.png (82.95 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
gex3bhfqezz6402838611.png
4 天前 上傳
圖3 自適應(yīng)分區(qū)可以防止高優(yōu)先級(jí)任務(wù)消耗超過(guò)分配的CPU百分比,除非系統(tǒng)包含未使用的CPU周期。例如,任務(wù)A和D可以在分配給分區(qū)3的時(shí)間內(nèi)運(yùn)行,因?yàn)槿蝿?wù)E和F不需要剩余的預(yù)算CPU周期。
阻止GPOS進(jìn)程確定性行為的問(wèn)題。因此,必須專門為實(shí)時(shí)內(nèi)核創(chuàng)建新的驅(qū)動(dòng)程序和系統(tǒng)服務(wù),即使GPOS已經(jīng)有了類似的服務(wù)。而且,實(shí)時(shí)內(nèi)核中運(yùn)行的任務(wù)無(wú)法從大多數(shù)GPOS為常規(guī),非實(shí)時(shí)流程提供的受MMU保護(hù)的強(qiáng)大環(huán)境中受益。相反,它們?cè)趦?nèi)核空間中不受保護(hù)地運(yùn)行。因此,包含常見編碼錯(cuò)誤(例如損壞的C指針)的實(shí)時(shí)任務(wù)很容易導(dǎo)致致命的內(nèi)核錯(cuò)誤。這是一個(gè)問(wèn)題,因?yàn)榇蠖鄶?shù)需要實(shí)時(shí)的系統(tǒng)也需要很高的可靠性。更復(fù)雜的是,雙內(nèi)核方法的不同實(shí)現(xiàn)使用不同的api。在大多數(shù)情況下,為GPOS編寫的服務(wù)不能輕松地移植到實(shí)時(shí)內(nèi)核,為一個(gè)供應(yīng)商的實(shí)時(shí)擴(kuò)展編寫的任務(wù)可能不能在另一個(gè)供應(yīng)商的擴(kuò)展上運(yùn)行。
g1rnmqtqf2w6402838711.png (14.33 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
g1rnmqtqf2w6402838711.png
4 天前 上傳
圖4 在典型的雙內(nèi)核實(shí)現(xiàn)中,GPOS作為單獨(dú)的實(shí)時(shí)內(nèi)核中優(yōu)先級(jí)最低的任務(wù)運(yùn)行。這些解決方案指出了使GPOS能夠支持實(shí)時(shí)行為的真正困難和巨大范圍。這并不是“實(shí)時(shí)操作系統(tǒng)好,GPOS壞”的問(wèn)題。諸如Linux、Windows和各種unix等GPOS都可以很好地作為桌面或服務(wù)器操作系統(tǒng)使用。然而,當(dāng)它們被迫進(jìn)入非為環(huán)境而設(shè)計(jì)的確定性環(huán)境時(shí),如車載遠(yuǎn)程信息處理單元、醫(yī)療器械、實(shí)時(shí)控制系統(tǒng)和連續(xù)媒體應(yīng)用程序,它們就不能滿足要求。■ 擴(kuò)展操作系統(tǒng) 特定于應(yīng)用程序的需求
無(wú)論它們?cè)诖_定性環(huán)境中的缺點(diǎn)是什么,使用它們都是有好處的。
這些優(yōu)點(diǎn)包括對(duì)廣泛使用的api的支持,以及對(duì)Linux的開放源碼模型的支持。使用開放源碼,開發(fā)人員可以根據(jù)特定于應(yīng)用程序的需求定制操作系統(tǒng)組件,從而節(jié)省大量的故障排除時(shí)間。實(shí)時(shí)操作系統(tǒng)供應(yīng)商不能忽視這些好處。對(duì)POSIX api (Linux和各種風(fēng)格的unix使用的相同api)的廣泛支持是重要的第一步。提供文檔良好的源代碼和定制工具包,以滿足嵌入式開發(fā)人員的特定需求和設(shè)計(jì)挑戰(zhàn),也是如此。
實(shí)時(shí)操作系統(tǒng)的架構(gòu)也起了作用。例如,基于微內(nèi)核設(shè)計(jì)的實(shí)時(shí)操作系統(tǒng)可以使操作系統(tǒng)定制的工作從根本上比其他體系結(jié)構(gòu)更容易實(shí)現(xiàn)。在微內(nèi)核實(shí)時(shí)操作系統(tǒng)中,只有一小部分基本操作系統(tǒng)服務(wù)(例如,信號(hào)、計(jì)時(shí)器、調(diào)度)駐留在內(nèi)核本身中。所有其他組件——驅(qū)動(dòng)程序、文件系統(tǒng)、協(xié)議棧、應(yīng)用程序——作為獨(dú)立的、受內(nèi)存保護(hù)的進(jìn)程在內(nèi)核之外運(yùn)行(參見圖5)。事實(shí)上,作為用戶空間程序,這樣的擴(kuò)展變得和標(biāo)準(zhǔn)應(yīng)用程序一樣容易開發(fā),因?yàn)樗鼈兛梢杂脴?biāo)準(zhǔn)的源代碼級(jí)工具和技術(shù)進(jìn)行調(diào)試。
meenrv1h3mx6402838811.jpg (54.63 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
meenrv1h3mx6402838811.jpg
4 天前 上傳
圖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í)別負(fù)責(zé)的進(jìn)程,指示錯(cuò)誤的位置,并創(chuàng)建一個(gè)可以用源代碼級(jí)調(diào)試工具查看的進(jìn)程轉(zhuǎn)儲(chǔ)文件。轉(zhuǎn)儲(chǔ)文件可以包含調(diào)試器識(shí)別導(dǎo)致問(wèn)題的源代碼所需的所有信息,以及諸如數(shù)據(jù)項(xiàng)的內(nèi)容和函數(shù)調(diào)用歷史等診斷信息。
這種體系結(jié)構(gòu)還提供了更好的故障隔離和恢復(fù):如果驅(qū)動(dòng)程序、協(xié)議棧或其他系統(tǒng)服務(wù)出現(xiàn)故障,它可以在不破壞其他服務(wù)或操作系統(tǒng)內(nèi)核的情況下進(jìn)行故障隔離和恢復(fù)。事實(shí)上,“軟件監(jiān)督”可以持續(xù)監(jiān)視此類事件,并動(dòng)態(tài)地重新啟動(dòng)違規(guī)服務(wù),而無(wú)需重新設(shè)置整個(gè)系統(tǒng)或以任何方式涉及用戶。類似地,可以動(dòng)態(tài)地停止、啟動(dòng)或升級(jí)驅(qū)動(dòng)程序和其他服務(wù),而無(wú)需關(guān)閉系統(tǒng)。
這些好處不應(yīng)該被忽視——對(duì)實(shí)時(shí)性能的最大破壞是計(jì)劃外的系統(tǒng)重新啟動(dòng)!即使計(jì)劃重新啟動(dòng)以合并軟件升級(jí)也會(huì)干擾操作,盡管是以一種受控的方式。為了確保最后期限總是能夠滿足,開發(fā)人員必須使用能夠持續(xù)可用的操作系統(tǒng),即使在軟件故障或服務(wù)升級(jí)的情況下也是如此。
■ 一個(gè)戰(zhàn)略決策
實(shí)時(shí)操作系統(tǒng)有助于使復(fù)雜的應(yīng)用程序既可預(yù)測(cè)又可靠;事實(shí)上,實(shí)時(shí)操作系統(tǒng)對(duì)時(shí)間的精確控制增加了GPOS無(wú)法實(shí)現(xiàn)的可靠性。(如果基于GPOS的系統(tǒng)由于不正確的計(jì)時(shí)行為而不能正確工作,那么我們可以合理地說(shuō)該系統(tǒng)是不可靠的。)然而,選擇正確的rtos本身可能是一項(xiàng)復(fù)雜的任務(wù)。實(shí)時(shí)操作系統(tǒng)的底層架構(gòu)是一個(gè)重要的標(biāo)準(zhǔn),但其他因素也是如此。其中包括:
? 靈活選擇調(diào)度算法-實(shí)時(shí)操作系統(tǒng)是否支持選擇調(diào)度算法(FIFO,循環(huán)調(diào)度,零星調(diào)度等?)開發(fā)人員可以按線程分配算法,還是實(shí)時(shí)操作系統(tǒng)強(qiáng)迫他為系統(tǒng)中的所有線程分配一種算法?
? 時(shí)間分區(qū)-實(shí)時(shí)操作系統(tǒng)是否支持時(shí)間分區(qū),以便為進(jìn)程提供一定百分比的CPU周期?這樣的保證簡(jiǎn)化了從多個(gè)開發(fā)團(tuán)隊(duì)或供應(yīng)商集成子系統(tǒng)的工作。它們還可以確保關(guān)鍵任務(wù)仍然可用并滿足其最后期限,即使系統(tǒng)受到拒絕服務(wù)(DoS)攻擊和其他惡意攻擊。
? 支持多核處理器——遷移到多核處理器的能力已經(jīng)成為各種高性能設(shè)計(jì)的基礎(chǔ)。實(shí)時(shí)操作系統(tǒng)是否支持多處理模型(對(duì)稱多處理、非對(duì)稱多處理、綁定多處理)的選擇,以幫助開發(fā)人員充分利用多核硬件?系統(tǒng)跟蹤工具是否支持實(shí)時(shí)操作系統(tǒng),以便開發(fā)人員診斷和優(yōu)化多核系統(tǒng)的性能?如果沒(méi)有能夠突出資源爭(zhēng)用、過(guò)度的線程遷移和多核設(shè)計(jì)中常見的其他問(wèn)題的工具,優(yōu)化多核系統(tǒng)很快就會(huì)成為一項(xiàng)繁重、耗時(shí)的任務(wù)。
? 用于遠(yuǎn)程診斷的工具-由于許多嵌入式系統(tǒng)無(wú)法容忍停機(jī),因此實(shí)時(shí)操作系統(tǒng)供應(yīng)商應(yīng)提供診斷工具,可以分析系統(tǒng)的行為而不會(huì)中斷系統(tǒng)提供的服務(wù)。尋找一個(gè)提供用于系統(tǒng)分析,應(yīng)用程序分析和內(nèi)存分析的運(yùn)行時(shí)分析工具的供應(yīng)商。
? 開放式開發(fā)平臺(tái)-實(shí)時(shí)操作系統(tǒng)供應(yīng)商是否提供基于開放式平臺(tái)(如Eclipse)的開發(fā)環(huán)境,從而允許開發(fā)人員“插入”他們喜歡的第三方工具來(lái)進(jìn)行建模,版本控制等?還是開發(fā)環(huán)境基于專有技術(shù)?
? 圖形用戶界面-實(shí)時(shí)操作系統(tǒng)是使用原始圖形庫(kù),還是支持多種人機(jī)界面技術(shù)(HTML5、Qt、OpenGL ES等),并提供高級(jí)圖形功能,如多層界面、多頭顯示、加速3D渲染和真正的窗口系統(tǒng)?gui的外觀和感覺(jué)可以很容易地定制嗎?guis能同時(shí)顯示和輸入多種語(yǔ)言(漢語(yǔ)、韓語(yǔ)、日語(yǔ)、英語(yǔ)、俄語(yǔ)等)嗎?二維和三維應(yīng)用程序可以輕松地共享同一屏幕嗎?標(biāo)準(zhǔn)api-實(shí)時(shí)操作系統(tǒng)是將開發(fā)人員鎖定到專有api中,還是為posix和opengl es等標(biāo)準(zhǔn)api提供經(jīng)認(rèn)證的支持,從而使代碼更易于在其他環(huán)境之間進(jìn)行移植?此外,實(shí)時(shí)操作系統(tǒng)是否提供了對(duì)api的全面支持,或者它只支持定義接口的一小部分?
? 標(biāo)準(zhǔn)api-實(shí)時(shí)操作系統(tǒng)是將開發(fā)人員鎖定到專有api中,還是為posix和opengl es等標(biāo)準(zhǔn)api提供經(jīng)認(rèn)證的支持,從而使代碼更易于在其他環(huán)境之間進(jìn)行移植?此外,實(shí)時(shí)操作系統(tǒng)是否提供了對(duì)api的全面支持,或者它只支持定義接口的一小部分?
? 針對(duì)數(shù)字媒體的中間件——對(duì)數(shù)字媒體的靈活支持正在成為一系列嵌入式系統(tǒng)的設(shè)計(jì)要求,包括汽車收音機(jī)、醫(yī)療設(shè)備、工業(yè)控制系統(tǒng)、媒體服務(wù)器,當(dāng)然還有消費(fèi)電子產(chǎn)品。一個(gè)系統(tǒng)可能需要處理多個(gè)媒體源(設(shè)備、流等),理解多個(gè)數(shù)據(jù)格式,并支持多種drm方案。通過(guò)為數(shù)字媒體提供設(shè)計(jì)良好的中間件,實(shí)時(shí)操作系統(tǒng)供應(yīng)商可以消除連接到多個(gè)媒體源、組織數(shù)據(jù)和啟動(dòng)適當(dāng)?shù)臄?shù)據(jù)處理路徑所需的大量軟件工作此外,一個(gè)設(shè)計(jì)良好的中間件解決方案將有靈活性來(lái)支持新的數(shù)據(jù)源,如下一代iPod,而不需要修改用戶界面或其他軟件組件。
對(duì)于任何項(xiàng)目團(tuán)隊(duì)來(lái)說(shuō),選擇實(shí)時(shí)操作系統(tǒng)都是一項(xiàng)戰(zhàn)略決策。實(shí)時(shí)操作系統(tǒng)供應(yīng)商為上述問(wèn)題提供清晰的答案后,您將可以選擇現(xiàn)在和將來(lái)最適合的。
聲明:本文素材來(lái)源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)與我聯(lián)系刪除。------------ END ------------
4nnqmv4cn5u6402838911.gif (71.87 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
4nnqmv4cn5u6402838911.gif
4 天前 上傳
●專欄《嵌入式工具》●專欄《嵌入式開發(fā)》●專欄《Keil教程》●嵌入式專欄精選教程
關(guān)注公眾號(hào)回復(fù)“加群”按規(guī)則加入技術(shù)交流群,回復(fù)“1024”查看更多內(nèi)容。
點(diǎn)擊“閱讀原文”查看更多分享。 |
|