您何時(shí)需要實(shí)時(shí)操作系統?
摘要
本文引用地址:http://dyxdggzs.com/article/140324.htm目前的高性能處理器和通用操作系統實(shí)時(shí)補丁的飛速更新,似乎又重新將嵌入式系統是否還需要實(shí)時(shí)操作系統這一問(wèn)題擺在我們面前。答案依然沒(méi)變:在嵌入式環(huán)境中,只有真正的實(shí)時(shí)操作系統才能在低端處理器上同樣提供資源保證。
簡(jiǎn)介
大部分嵌入式項目還需要實(shí)時(shí)操作系統嗎?這個(gè)問(wèn)題問(wèn)得好,因為現代高性能處理器和 Linux、Windows 和其他通用操作系統 (GPOS) 的實(shí)時(shí)補丁的出現等等這些都在飛速發(fā)展中。
嵌入式設備的本質(zhì)道出了答案。制造設備通常都需要幾千個(gè)甚至幾百萬(wàn)個(gè)部件。哪怕設備硬件的單位成本節省 1 美元,都會(huì )為制造商帶來(lái)不小的財富。換言之,設備無(wú)法承受數千兆赫茲級處理器的成本(更不用考慮功耗這些因素了)。
例如,在汽車(chē)遠程信息處理技術(shù)市場(chǎng),常見(jiàn)的 32 位處理器以約 600Mhz 的速度運行——遠遠慢于臺式機和服務(wù)器的通用處理器。 在這種運行環(huán)境中,實(shí)時(shí)操作系統能得到低端硬件超快、可預測的響應,因此具有顯著(zhù)的節約成本的優(yōu)勢。
除節約成本之外,實(shí)時(shí)操作系統提供的服務(wù)還能使許多計算問(wèn)題迎刃而解,特別是當多種運行爭奪系統資源時(shí)。例如,試想一個(gè)用戶(hù)期望(或需要)立即響應輸入的系統。利用實(shí)時(shí)操作系統,軟件開(kāi)發(fā)人員能確保用戶(hù)啟動(dòng)的操作會(huì )先于其他系統活動(dòng)執行,除非必須先執行更重要的任務(wù)(如幫助保護用戶(hù)安全的運行)。
再試想一個(gè)必須滿(mǎn)足服務(wù)質(zhì)量 (QoS) 要求的系統,例如一臺可播放現場(chǎng)視頻的設備。如果設備依靠軟件播放其內容,它可能會(huì )以用戶(hù)無(wú)法接受的速率出現失幀現象——從用戶(hù)的角度看,該設備不可靠。但使用實(shí)時(shí)操作系統的話(huà),軟件開(kāi)發(fā)人員就能精確控制軟件進(jìn)程的執行順序,確保以適當和一致的媒體速率播放。
實(shí)時(shí)操作系統并不“公平”
對“硬”實(shí)時(shí)的需求——以及對實(shí)現該功能的實(shí)時(shí)操作系統的需求——仍然是嵌入式產(chǎn)品業(yè)的普遍要求。問(wèn)題是:實(shí)時(shí)操作系統具備哪些通用操作系統所不具備的功能呢?適用于一些通用操作系統的實(shí)時(shí)擴展組件有多大用處呢?它們能提供和實(shí)時(shí)操作系統一樣的性能嗎?
讓我們先從任務(wù)調度開(kāi)始。在通用操作系統中,調度程序通常使用一種“公平”策略,將線(xiàn)程和進(jìn)程分配到 CPU 中。這種策略可確保臺式機和服務(wù)器的應用程序所需的較高的總吞吐量,但無(wú)法保證優(yōu)先級高、時(shí)間要求嚴格的線(xiàn)程先于優(yōu)先級低的線(xiàn)程執行。
例如,通用操作系統可能會(huì )降低分配給優(yōu)先級高的線(xiàn)程的優(yōu)先級,或按照有利于系統內其他線(xiàn)程的公平原則,以動(dòng)態(tài)方式調整優(yōu)先級。因此,優(yōu)先級高的線(xiàn)程就可能被優(yōu)先級低的線(xiàn)程搶占。此外,大多數通用操作系統都具有無(wú)限期的分配潛伏期:系統內的線(xiàn)程越多,通用操作系統調度線(xiàn)程執行所需的時(shí)間就越久。其中任何一種因素都能導致優(yōu)先級高的線(xiàn)程錯過(guò)最后期限,即使在速度很快的 CPU 上。
另一方面,在實(shí)時(shí)操作系統中,線(xiàn)程會(huì )按其優(yōu)先級的順序執行。如果優(yōu)先級高的線(xiàn)程準備運行,它能在很短且有限的時(shí)間間隔內,從正在執行的優(yōu)先級低的線(xiàn)程那里接管 CPU。此外,優(yōu)先級高的線(xiàn)程還能不間斷地運行直到完成任務(wù)為止——當然,除非它被優(yōu)先級更高的線(xiàn)程搶占。這種眾所周知的基于優(yōu)先級的搶占式調度,可確保優(yōu)先級高的線(xiàn)程始終如一地滿(mǎn)足最后期限的要求,即使在其他線(xiàn)程爭奪 CPU 時(shí)間時(shí)。
搶占式內核
大多數通用操作系統的操作系統內核都不是搶占式的。因此,優(yōu)先級高的用戶(hù)線(xiàn)程無(wú)法搶占內核調用,相反,它必須等待整個(gè)調用全部結束——即使是系統內優(yōu)先級低的進(jìn)程進(jìn)行調用。此外,當驅動(dòng)程序或其他系統服務(wù)(通常在內核調用中運行)以客戶(hù)端線(xiàn)程的名義執行時(shí),操作系統通常會(huì )丟失所有優(yōu)先級信息。這種系統行為會(huì )導致無(wú)法預料的延遲,而且會(huì )妨礙關(guān)鍵運行按時(shí)完成。
另一方面,在實(shí)時(shí)操作系統中,內核運行是可搶占的。在通用操作系統中,有一些時(shí)間窗有可能是無(wú)法被搶占的,但在精心設計的實(shí)時(shí)操作系統中,這些時(shí)間窗非常短暫,通常僅約幾百納秒。另外,實(shí)時(shí)操作系統會(huì )針對搶占推遲和中斷禁止的時(shí)限設置上限;這能保證軟件開(kāi)發(fā)人員確定情況最糟的延遲期。
為實(shí)現一致的可預見(jiàn)性目標和及時(shí)完成關(guān)鍵運行,實(shí)時(shí)操作系統內核必須盡可能簡(jiǎn)單精致。實(shí)現這種簡(jiǎn)單性的最佳途徑是設計一種只包含短執行路徑服務(wù)的內核。通過(guò)排除內核中任務(wù)集中的運行(如進(jìn)程加載)并將其分配到外部進(jìn)程或線(xiàn)程,實(shí)時(shí)操作系統的設計人員就能保證通過(guò)內核的最長(cháng)的非搶占代碼路徑有上限。
在一些通用操作系統中,內核增加了某種程度的可搶占性。但無(wú)法搶占的時(shí)間間隔仍然比常見(jiàn)實(shí)時(shí)操作系統的長(cháng)得多;這種搶占間隔的長(cháng)度取決于通用操作系統內核中包含的最長(cháng)的關(guān)鍵模塊部分(如網(wǎng)絡(luò ))。另外,搶占式通用操作系統內核不能解決可能的無(wú)限期延遲情形,例如因為客戶(hù)端調用驅動(dòng)程序或其他系統服務(wù)時(shí)丟失優(yōu)先級信息。
避免優(yōu)先級反轉
在通用操作系統(甚至實(shí)時(shí)操作系統)中,優(yōu)先級低的線(xiàn)程也能在無(wú)意中阻止優(yōu)先級高的線(xiàn)程訪(fǎng)問(wèn) CPU——這種情況被稱(chēng)為優(yōu)先級反轉。當出現無(wú)限期的優(yōu)先級反轉時(shí),可能會(huì )錯過(guò)關(guān)鍵的最后期限,進(jìn)而導致系統運行異常和全面故障的結果。遺憾的是,在系統設計過(guò)程中人們往往會(huì )忽視優(yōu)先級反轉。有很多優(yōu)先級反轉的實(shí)例,包括 1997 年 7 月火星探路者項目遭受困擾的實(shí)例。[1]
一般來(lái)說(shuō),當優(yōu)先級不同的兩個(gè)任務(wù)共享資源,而優(yōu)先級高的任務(wù)無(wú)法從優(yōu)先級低的任務(wù)那里獲得資源時(shí),就會(huì )出現優(yōu)先級反轉。為防止這種狀況超過(guò)有限的時(shí)間間隔,實(shí)時(shí)操作系統可提供一種通用操作系統不具備的選擇機制,包括優(yōu)先級繼承和優(yōu)先級封頂模擬。我們不能單純地評價(jià)兩種機制的優(yōu)劣,所以我們著(zhù)重介紹優(yōu)先級繼承的實(shí)例。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論